如何透过 InstanceTree 在版号 v2.x 的 viewer 里获取版号 v1.2.x 的 root 数据?

发布于 2022-09-04 21:18:25 字数 125 浏览 18 评论 0

在版号 v1.2.x 的 Viewer 可以透过 InstanceTree.root 获取构件节点的树状结构,请问在版号 v2.x 里面要怎么拿到这个数据呢?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

和影子一齐双人舞 2022-09-11 21:18:25

很不幸的~~

在版号 v2.x 之后,Autodesk Forge 团队为了提高 viewer 的效能,将 InstanceTree.root 这个佔用大量内存的数据结构舍弃了,如想要使用类似的数据得自己对 InstanceTree 进行历遍的动作,以下几个函数及代码可以帮助你重现 root 数据:

  1. 获取 root id:

// 获取 InstanceTree
var it = viewer.model.getData().instanceTree;


// 在 `v1.2.x` 可以透过这行代码取得 root id
var rootId = it.rootId;


// 但在 `v2.x` 以后的版号必需透过这行代码才可以取得 root id
var rootId = it.getRootId();
  1. 获取节点的名字 (Node Name):

// 获取根节点的名字
var rootId = it.getRootId();
var rootName = it.getNodeName( rootId );


// 获取部份子节点的名字
it.enumNodeChildren( rootId, function( childId ) {
  var childName = it.getNodeName(childId);
  console.log( childName );
});
  1. 历遍树节构里所有的结点,重建 InstanceTree.root 数据:

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 );
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文