如何在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
相关产品推荐
相关产品推荐

