autodesk-forge - 如何透过 InstanceTree 在版号 v2.x 的 viewer 里获取版号 v1.2.x 的 root 数据?
本文介绍了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
数据:
获取 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();
获取节点的名字 (Node Name):
// 获取根节点的名字
var rootId = it.getRootId();
var rootName = it.getNodeName( rootId );
// 获取部份子节点的名字
it.enumNodeChildren( rootId, function( childId ) {
var childName = it.getNodeName(childId);
console.log( childName );
});
历遍树节构里所有的结点,重建
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屋!
查看全文