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

Forge Viewer API:多模型视图中实现类似isolate的无匹配模型处理

解决方案

要实现无匹配对象的模型呈现类似isolate的半透明效果,你可以通过设置模型所有对象的透明度来模拟,替代直接隐藏或错误隔离无关对象。核心思路是:当模型无匹配结果时,将其所有对象的透明度调整为与isolate一致的半透明值(默认0.3),同时保持对象可见;有匹配结果时正常调用isolate。

修正后的代码

// 用于记录需要恢复透明度的模型及对应dbIds,避免切换搜索条件后残留效果
let transparentModels = [];

function objectIsolation(searchTerm, allModelInstances) {
    // 重置之前的半透明设置,恢复默认状态
    transparentModels.forEach(item => {
        viewer.setOpacity(item.dbIds, 1, item.model);
        viewer.show(item.dbIds, item.model);
    });
    transparentModels = [];

    // 遍历所有模型逐一处理
    allModelInstances.forEach(modelInstance => {
        modelInstance.search(searchTerm, dbIds => {
            if (!dbIds.length) {
                // 获取当前模型的所有dbIds
                const allDbIds = modelInstance.getObjectTree().getAllDbIds();
                // 设置半透明(与isolate默认半透明值一致)
                viewer.setOpacity(allDbIds, 0.3, modelInstance);
                // 确保对象可见,避免之前的隐藏操作影响
                viewer.show(allDbIds, modelInstance);
                // 记录该模型的信息,用于后续重置
                transparentModels.push({ model: modelInstance, dbIds: allDbIds });
            } else {
                // 正常隔离当前模型的匹配对象
                viewer.isolate(dbIds, modelInstance);
            }
        });
    });
}

关键说明

  1. 状态重置:每次执行筛选前,先恢复之前设置过半透明的模型,避免切换搜索条件后残留半透明效果。
  2. 半透明设置:使用viewer.setOpacity将无匹配模型的所有对象透明度设为0.3(与Forge Viewer默认的isolate半透明效果一致),同时调用viewer.show确保对象可见,避免完全隐藏。
  3. 高效获取所有dbIds:通过modelInstance.getObjectTree().getAllDbIds()快速获取模型所有对象ID,比search('*')性能更优。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 15:52:40