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

查看:166
本文介绍了autodesk-forge - 如何透过 InstanceTree 在版号 v2.x 的 viewer 里获取版号 v1.2.x 的 root 数据?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

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

解决方案

很不幸的~~

在版号 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 );

这篇关于autodesk-forge - 如何透过 InstanceTree 在版号 v2.x 的 viewer 里获取版号 v1.2.x 的 root 数据?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆