如何根据外部ID获取模型DB ID以在Forge Viewer中高亮对象
根据外部ID获取Forge Viewer模型对象的DB ID并实现高亮
核心思路
Forge Viewer的模型实例自带getExternalIdMapping()方法,可直接获取外部ID与DB ID的映射关系,无需额外调用外部API,这是最高效的实现方式。
实现步骤
等待模型加载完成
必须在Viewer的GEOMETRY_LOADED_EVENT事件触发后再执行映射获取操作,确保模型数据已完全加载:viewer.addEventListener(Autodesk.Viewing.GEOMETRY_LOADED_EVENT, onModelLoaded); function onModelLoaded() { // 在这里处理ID映射和高亮逻辑 getDbIdFromExternalId("目标外部ID"); }根据外部ID查找DB ID
通过模型的映射方法获取对应关系,再定位目标DB ID:async function getDbIdFromExternalId(targetExternalId) { const model = viewer.model; if (!model) return null; // 获取外部ID到DB ID的映射表 const idMapping = await model.getExternalIdMapping(); // 映射表中键为外部ID,值为对应的DB ID数组(通常仅单个元素) const dbIds = idMapping[targetExternalId]; if (dbIds && dbIds.length > 0) { const targetDbId = dbIds[0]; // 触发高亮操作 highlightModelObject(targetDbId); return targetDbId; } else { console.warn(`未找到外部ID ${targetExternalId} 对应的DB ID`); return null; } }高亮目标模型对象
使用Viewer内置方法实现高亮,也可根据需求替换为isolate()(隔离显示)或select()(选中):function highlightModelObject(dbId) { // 清除之前的高亮状态 viewer.clearHighlight(); // 高亮目标对象 viewer.highlight(dbId); }绑定用户选择事件
给前端弹出的外部ID列表项绑定点击事件,触发上述逻辑:// 假设列表项通过data-external-id属性存储外部ID document.querySelectorAll('.external-id-item').forEach(item => { item.addEventListener('click', () => { const externalId = item.dataset.externalId; getDbIdFromExternalId(externalId); }); });
注意事项
- 确保后端存储的外部ID与模型导出时的外部ID完全一致(包括大小写、前缀等),否则会出现查找失败。
- 若Viewer加载了多个模型,需通过
viewer.getAllModels()指定目标模型实例。
内容的提问来源于stack exchange,提问作者Ashish
相关产品推荐
相关产品推荐

