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

如何根据外部ID获取模型DB ID以在Forge Viewer中高亮对象

根据外部ID获取Forge Viewer模型对象的DB ID并实现高亮

核心思路

Forge Viewer的模型实例自带getExternalIdMapping()方法,可直接获取外部ID与DB ID的映射关系,无需额外调用外部API,这是最高效的实现方式。

实现步骤

  1. 等待模型加载完成
    必须在Viewer的GEOMETRY_LOADED_EVENT事件触发后再执行映射获取操作,确保模型数据已完全加载:

    viewer.addEventListener(Autodesk.Viewing.GEOMETRY_LOADED_EVENT, onModelLoaded);
    
    function onModelLoaded() {
        // 在这里处理ID映射和高亮逻辑
        getDbIdFromExternalId("目标外部ID");
    }
    
  2. 根据外部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;
        }
    }
    
  3. 高亮目标模型对象
    使用Viewer内置方法实现高亮,也可根据需求替换为isolate()(隔离显示)或select()(选中):

    function highlightModelObject(dbId) {
        // 清除之前的高亮状态
        viewer.clearHighlight();
        // 高亮目标对象
        viewer.highlight(dbId);
    }
    
  4. 绑定用户选择事件
    给前端弹出的外部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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 14:31:05