You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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():

  1. 通过ObjectTree拿到分类节点的ID
  2. 调用InstanceTree的enumNodeInstances()方法,获取该节点下所有构件实例的ID
  3. 再用viewer.getProperties()查询实例的详细属性

内容的提问来源于stack exchange,提问作者Tamara Vučić

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 22:07:03