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

如何在Forge Viewer中获取模型树节点的完整路径?

Forge Viewer 获取节点完整树路径实现示例

核心逻辑

要获取目标节点的完整树路径,需通过模型的实例树递归向上遍历父节点,收集每个节点的名称,最后反转顺序得到从根节点到目标节点的完整路径。

代码实现

1. 核心函数实现

async function getNodeFullPath(viewer, targetDbId) {
    const instanceTree = viewer.model.getData().instanceTree;
    const pathSegments = [];

    // 递归遍历父节点
    async function traverseUp(currentId) {
        // 获取当前节点名称
        const nodeName = await getNodeDisplayName(viewer, currentId);
        pathSegments.push(nodeName);

        // 获取父节点ID,终止条件为父节点不存在或为根节点父ID
        const parentId = instanceTree.getParentId(currentId);
        if (parentId && parentId !== 0) {
            await traverseUp(parentId);
        }
    }

    await traverseUp(targetDbId);
    // 反转数组得到根到目标节点的顺序,用分隔符拼接
    return pathSegments.reverse().join(' / ');
}

// 辅助函数:异步获取节点名称
async function getNodeDisplayName(viewer, dbId) {
    return new Promise(resolve => {
        viewer.model.getProperties(dbId, props => {
            resolve(props.name);
        });
    });
}

2. 调用示例

// 替换为你需要查询的节点dbId
const targetDbId = 456;
getNodeFullPath(viewer, targetDbId).then(fullPath => {
    console.log('节点完整路径:', fullPath);
    // 可将路径渲染到页面UI,比如侧边栏提示、弹窗等
});

关键说明

  • instanceTree.getParentId(dbId):通过模型实例树快速获取当前节点的父节点ID,是路径遍历的核心API。
  • viewer.model.getProperties(dbId):异步获取节点的显示名称,节点名称存储在属性集合中,需异步调用获取。
  • 终止条件:多数模型中根节点的父ID为0,可根据实际模型的结构调整判断逻辑,确保遍历到根节点时停止。

内容的提问来源于stack exchange,提问作者Igor Barcelos

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 06:42:03