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

Forge Viewer配置:如何编程排除螺栓等小型元素的渲染?

如何在Forge Viewer中排除小型元素(如螺栓)的渲染

可以通过编程方式实现,核心思路是利用Viewer的模型过滤API结合元素的尺寸属性来筛选并隐藏符合条件的元素,以下是具体实现步骤:

1. 获取元素的尺寸信息

首先需要从模型中提取元素的边界盒数据,通过边界盒的尺寸判断元素是否属于“小型元素”。可以使用getBoundingBox()方法获取单个元素的边界盒:

function getElementSize(dbId, model) {
  const fragList = model.getFragmentList();
  const bbox = new THREE.Box3();
  fragList.getWorldBounds(dbId, bbox);
  // 计算边界盒的三维尺寸
  const size = new THREE.Vector3();
  bbox.getSize(size);
  // 返回最大边长作为判断依据,也可根据需求用体积或其他维度
  return Math.max(size.x, size.y, size.z);
}

2. 筛选并隐藏小型元素

遍历模型中的所有元素,计算其尺寸,将小于设定阈值的元素加入隐藏列表,再调用hide()方法批量隐藏:

async function hideSmallElements(model, sizeThreshold) {
  // 获取模型所有元素ID
  const allDbIds = await model.getObjectTree().getAllDbIds();
  const smallDbIds = [];
  
  for (const dbId of allDbIds) {
    const elementSize = getElementSize(dbId, model);
    if (elementSize < sizeThreshold) {
      smallDbIds.push(dbId);
    }
  }
  
  // 批量隐藏符合条件的元素
  viewer.hide(smallDbIds);
}

// 调用示例:隐藏尺寸最大边长小于0.1米的元素
hideSmallElements(viewer.model, 0.1);

3. 注意事项

  • 部分模型可能没有完整的边界盒数据,或元素是嵌套组件,此时需要递归遍历子元素进行判断
  • 如果需要动态切换显示/隐藏,可将筛选出的smallDbIds保存,后续调用show()方法恢复显示
  • 对于大型模型,遍历所有元素可能存在性能开销,建议配合模型加载完成事件(如GEOMETRY_LOADED_EVENT)执行,或分批次处理

你提到的渐进式渲染是Viewer内置的优化机制,和手动筛选隐藏小型元素可以结合使用,进一步提升渲染性能。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 12:53:17