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

如何获取Viewer中复合对象(composite-object)的几何图形(Geometry)?

在Autodesk Viewer中获取复合对象的几何图形

已知场景

你已经完成了以下操作:

  • 在Viewer中加载了目标模型
  • 选中了dbid为1234的复合对象(图标标识为Composite Object)

关于你当前的解法

你提到的“递增迭代后续ID直至找到下一个composite-object”的方案在多数场景下确实能生效,但这种方式依赖节点ID的连续性,一旦模型结构有调整(比如新增/删除节点)就可能失效,并非长期稳定的通用解法。

官方推荐的可靠实现方法

我们可以利用Autodesk Viewer提供的对象树API,精准定位复合对象关联的几何节点,步骤如下:

  1. 获取模型的对象树实例
    在Viewer的交互逻辑或模型加载完成的回调中,先拿到当前模型的对象树:
const activeModel = viewer.model;
const objectTree = activeModel.getObjectTree();
  1. 遍历复合对象的子节点筛选几何图形
    使用enumNodeChildren方法遍历目标复合对象(dbid: 1234)的所有子节点,通过节点属性判断是否为Geometry类型:
const compositeDbId = 1234;
objectTree.enumNodeChildren(compositeDbId, (childDbId) => {
    objectTree.getNodeProperties(childDbId, (props) => {
        // 根据节点的类型或图标标识判断是否为几何节点
        if (props.type === 'Geometry' || props.icon === 'Geometry') {
            // 成功找到目标几何节点,可进行后续操作
            console.log('找到几何图形节点:', childDbId);
            // 示例:获取几何节点的详细属性
            viewer.getProperties(childDbId, (geomProps) => {
                console.log('几何图形属性信息:', geomProps);
            });
        }
    });
});
  1. 通过复合对象属性直接定位(如果有映射)
    从你提到的属性JSON内容来看,部分模型的复合对象属性中会直接关联几何节点的ID,你可以先获取复合对象的属性来快速定位:
objectTree.getNodeProperties(compositeDbId, (compositeProps) => {
    // 检查属性中是否存在几何节点的关联字段
    const geometryDbId = compositeProps.geometryId || 
                        compositeProps.children?.find(item => item.type === 'Geometry')?.dbId;
    if (geometryDbId) {
        // 直接获取几何节点的几何数据
        activeModel.getGeometry(geometryDbId, (geometry) => {
            console.log('获取到几何数据:', geometry);
        });
    }
});

注意事项

  • 不同模型的属性结构可能存在差异,你可以根据实际返回的getNodeProperties结果,调整判断条件来适配你的模型。
  • 优先使用官方API实现,能更好地兼容不同版本的Viewer和不同结构的模型。

内容的提问来源于stack exchange,提问作者Anurag Bhardwaj

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:34:18