【问题标题】:Is there any way to use headless viewer with only model browser functionality?有没有办法使用只有模型浏览器功能的无头查看器?
【发布时间】:2018-05-01 14:11:18
【问题描述】:

有没有办法使用只有模型浏览器功能的无头查看器 我在 Angular 5 中使用并遵循 Headless Viewer 用法

<script src="https://developer.api.autodesk.com/modelderivative/v2/viewers/viewer3D.js?v=v4.1.*"></script>

我使用缩放/平移/全屏/旋转功能来使用 setActiveNavigationTool 选择,但没有得到关于模型浏览器事件代码的任何解决方案..

有没有办法在 javascript 中获取模型浏览器代码而不是其自己的面板使用。

谢谢

【问题讨论】:

  • 您想以自己的方式调用模型浏览器而不是在 GuiViewer3D 的工具栏上使用它吗?或者你想自己完全实现一个类似的角度?
  • 是的 Eason.. 我想调用或获取模型浏览器工具的数据。那么你对 javascript 或 Angular 的东西有什么想法吗?
  • 并且调用导航工具功能使其与自己的面板一起显示也没有问题。
  • 给你,我在下面放了一些代码来重建你在模型浏览器中看到的数据。希望对您有所帮助。

标签: autodesk-forge autodesk-viewer


【解决方案1】:

模型浏览器面板上显示的数据实际上来自加载模型的实例树。这里有两种获取实例树的方法:

//To get the instance tree
var it = viewer.model.getData().instanceTree;

//or 
viewer.getObjectTree(function( instanceTree ) {
   console.log( instanceTree );
});

获得实例树后,您可能需要使用一些技巧来重建树层次结构,如下所示,因为 Forge Viewer 将实例关系存储在扁平数据结构中。

// To rebuild node tree hierarchy
 function buildModelTree( model ) {

    //builds model tree recursively
   function _buildModelTreeRec( node ) {
         it.enumNodeChildren( node.dbId, function(childId) {
                 node.children = node.children || [];

                 var childNode = {
                   dbId: childId,
                   name: it.getNodeName( childId )
                 };

                 node.children.push( childNode );

                 _buildModelTreeRec( childNode );
           });

   }

   //get model instance tree and root component
   var it = model.getData().instanceTree;

   var rootId = it.getRootId();

   var rootNode = {
         dbId: rootId,
         name: it.getNodeName( rootId )
   };

   _buildModelTreeRec( rootNode );

   return rootNode;
 }

 var root = buildModelTree( viewer.model );

但以上只是数据部分。如果你想在某个地方像树一样显示它们,你可以尝试使用 Tree UI 库,例如 jstree 来完成它。

希望对你有帮助。

【讨论】:

  • 太棒了.. 非常感谢.. 它给了我它的孩子们的记录... 你还有其他的 ui onclick zoom of that part of selection feature .. ???
  • 您在Model Browser 中看到的缩放行为是通过调用viewer.fitToView( dbIds ) 归档的,而选择行为是调用viewer.select( dbIds )
  • 如果你使用jsTree,你可以绑定select_node.jstree事件并在事件处理函数内部调用viewer.fitToView( dbIds ),它会做类似你点击Model Browser的节点的事情。 stackoverflow.com/questions/23456628/…
  • 我不是 Angular 的人,但你可以看看这个库 angular tree component,它似乎也有一些事件可以做类似的事情。 github.com/500tech/angular-tree-componentangular2-tree.readme.io/docs/action-mappingangular2-tree.readme.io/docs/events
  • 非常感谢......你很容易解决大问题......非常感谢Eason
猜你喜欢
  • 1970-01-01
  • 2011-08-11
  • 2021-04-27
  • 2020-05-20
  • 2015-03-12
  • 1970-01-01
  • 2014-06-28
  • 1970-01-01
相关资源
最近更新 更多