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

Forge Viewer加载Zip关联模型时fitToView与getBoundingBox异常

Forge Viewer聚合模型fitToView失效及dbId异常问题

环境

  • Forge Viewer v7.115.0(基于THREE.WebGLRenderer 71)
  • 模型:Zip包上传的Revit关联模型(根模型+链接模型)
  • viewer.getAllModels()返回1个聚合模型

问题

调用viewer.utilities.getBoundingBox(false)时,不同对象返回完全相同的全模型边界框,而非单个对象的边界:

  • 对象dbId 12515:min(-18.39, -18.09, -7.28),max(18.39, 18.09, 7.28)
  • 对象dbId 12513:min(-18.39, -18.09, -7.28),max(18.39, 18.09, 7.28)

导致调用fitToView()时无法缩放到目标对象,始终定位到全模型范围。

已尝试方案

  1. 结合选择调用边界框与缩放:
var boundingBox = viewer.utilities.getBoundingBox(false);
viewer.navigation.fitBounds(true, boundingBox);

结果:所有对象返回相同的全模型边界框

  1. 检查实例树中dbId是否存在:
var tree = model.getInstanceTree();
var nodeExists = tree.nodeAccess.dbIdToIndex[dbId] !== undefined;

结果:nodeExists = false——选中的dbId不在实例树中

  1. 枚举对象片段:
tree.enumNodeFragments(dbId, function(fragId) { ... }, true);

结果:回调未执行,未找到任何片段

  1. 遍历所有模型:
var allModels = viewer.getAllModels(); // 返回1个模型

结果:检查该聚合模型,dbId仍不在其实例树中

  1. 直接调用fitToView():
viewer.fitToView(dbIds, model);

结果:无法正确缩放到单个对象

观察结果

  • 对象可正常选中,出现在viewer.getSelection()结果中
  • 选中对象的GUID各不相同
  • viewer.getSelection()返回的dbId看似正确,但这些dbId不存在于model.getInstanceTree().nodeAccess.dbIdToIndex中
  • 模型片段列表可用,但enumNodeFragments()无结果

疑问

  1. 为何选中的dbId不存在于模型实例树中?
  2. 如何获取Zip上传的关联/聚合模型中单个对象的正确边界框?
  3. 是否有其他API可解决该场景下的边界框获取问题?
  4. 该问题是否需要在模型转换阶段修复?

更新:关联模型的dbId差异

代码执行时获取的dbId [12515]:

{
  "dbId": [12515],
  "properties": [],
  "externalId": "b8dbee8b-ebcc-47f4-b313-b0253be8aac5-00275887"
}

Viewer中选中对象后调用getProperties()获取的dbId [12516]:

{
  "dbId": [12516],
  "properties": [],
  "externalId": "4f59b7db-1832-40c1-9ab9-c16952cd6d07-0027a560/b8dbee8b-ebcc-47f4-b313-b0253be8aac5-00275887"
}

使用dbId 12516可正常与Viewer对象交互,但12515不行。注意12515的externalId与12516的externalId后半部分完全匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.11 19:12:38