APS Viewer API模型对象遍历:getInstanceTree与getObjectTree区别及分类获取
Autodesk Viewer中getInstanceTree()与getObjectTree()的区别及模型分类遍历方案
两者核心区别
getInstanceTree():返回InstanceTree对象,聚焦于模型的实例化层级结构。它处理的是模型中构件的几何实例关系——比如多个相同的墙体,共享同一个几何定义但属于不同场景实例。这个对象是Viewer的核心数据结构,文档完善,提供了节点遍历、实例ID查询、父子节点关联等基础操作,是处理构件选择、属性查询、隔离隐藏等功能的关键。getObjectTree():返回Autodesk.Viewing.ObjectTree对象,对应模型的逻辑分类结构,也就是和ACC Docs Viewer模型浏览器面板里的分组(按专业、构件类型、族等分类)完全匹配的层级。它的设计目标是还原Revit等源设计软件中的项目浏览器结构,但官方公开文档较少,因为它最初是为Viewer自带的模型浏览器组件服务的。
获取模型分类的推荐方式
如果要获取和ACC模型浏览器等效的分类条目,优先使用getObjectTree(),它能直接返回源软件中的逻辑分组结构。以下是基础遍历示例:
// 获取ObjectTree并遍历分类 viewer.getObjectTree(function(objectTree) { const rootNodeId = objectTree.getRootId(); // 递归遍历根节点下的所有分类节点 objectTree.enumNodeChildren(rootNodeId, function(nodeId) { const nodeName = objectTree.getNodeName(nodeId); const nodeType = objectTree.getNodeType(nodeId); console.log(`分类组:${nodeName}(类型:${nodeType})`); // 遍历当前分类下的子构件/子分类 objectTree.enumNodeChildren(nodeId, function(childId) { const childName = objectTree.getNodeName(childId); console.log(` 子项:${childName}`); }, true); // 第三个参数设为true开启递归遍历 }, true); });
如果需要同时获取分类下构件的实例信息(比如每个实例的属性、位置),可以结合getInstanceTree():
- 通过
ObjectTree拿到分类节点的ID - 调用
InstanceTree的enumNodeInstances()方法,获取该节点下所有构件实例的ID - 再用
viewer.getProperties()查询实例的详细属性
内容的提问来源于stack exchange,提问作者Tamara Vučić
相关产品推荐
相关产品推荐

