【问题标题】:Model aggregating in viewer - coordinate issue查看器中的模型聚合 - 坐标问题
【发布时间】:2023-04-06 08:28:01
【问题描述】:

我在查看器中动态聚合模型(来自多个 BIM 文件)。基本上,我初始化查看器,然后为用户选择查看的每个模型动态加载文档和加载模型。

这些主要是 NVC 文件(我用于测试的文件),它们共享坐标系。模型被动态加载并正确“缝合”。

但是,当加载第二个模型时,坐标系会变得混乱 - 并非总是如此,但在某些情况下(在 v6.3 中 - 尚未检查以前的版本)。发生这种情况时,我会注意到以下几点:

  1. 当我在查看器中单击“主页”图标时,它不会显示完整的聚合模型,而只会在中心显示第一个加载的模型,其余的会在屏幕外显示。
  2. 当我单击要选择的元素时,它会选择其他东西(带有偏移),并且在某些情况下什么都不选择(意思是,单击的坐标被错误地解释了)。

我尝试了多种组合,当第一次加载的模型没有占据聚合模型的全尺寸(例如,建筑物的一层)时,似乎会出现这个问题。

我想出了一个解决方案。加载模型后(每次用户选择一些模型),如果我“隐藏”所有模型并再次“显示”它们,它可以解决点击和 AGGREGATED_SELECTION 事件的问题。

这不是一个好的用户体验,因为我希望能够在用户在先前聚合的模型集周围移动时在后台加载模型。如果我在加载新的后隐藏/显示,这会让用户感到厌烦。

有没有办法“重置”查看器的坐标系(与隐藏/显示模型时发生的效果相同)?

如果能帮助我解决这个问题,我将不胜感激。

谢谢 班杜

【问题讨论】:

  • 尝试像这样禁用偏移量:var loadOptions = { globalOffset: { x: 0, y: 0, z: 0 } // to align the models }; 并告诉我们您的进展情况
  • 嗨,布莱恩,这不是对齐问题。它们完全对齐。是的。我正在设置 globalOffset。谢谢
  • 进一步的测试表明我以前的解决方法也不可靠(隐藏/显示)。它只是有时有效。
  • 看看这些隐藏的多模型API,或许会给你一些线索。 forge.autodesk.com/blog/highlighting-clashes-multi-model
  • 嗨,迈克尔,谢谢。我尝试了您的“重置视图”代码,但没有解决问题。当我隐藏除一个以外的所有模型时,选择有效(它选择我单击的内容)。但是当有多个模型时,它会选择与我单击的元素不同的东西。我尝试使用和不使用“sharedPropertyDb” - 我认为这在这里没有什么不同。

标签: javascript autodesk-forge autodesk-viewer


【解决方案1】:

好的,所以存在大量偏移,导致精度问题。这就是为什么您会看到很多相机“抖动”的原因。

要解决这个问题...我们需要通过手动返回更接近原点的所有几何图形来纠正大量偏移。 (或修复原始 navisworks 文件)。

首先,我们粗略算出偏移值……

按住 ALT 键并单击对象上的任意位置。这会设置一个绿点,即枢轴点。然后使用 viewer.navigation.getPivotPoint() 获取 x,y,z 值。 (详情:https://github.com/wallabyway/markupExt/issues/2)。

您应该会看到这样的 xyz 值... Z.Vector3 {x: 1296285.515098644, y: 14995636.431742325, z: 364.26238179027337}

现在,使用此值调整设置全局偏移,以正确地将所有模型移近 0,0,0。像这样……

第 70 行:

var modelOptions = {
    sharedPropertyDbPath: doc.getPropertyDbPath(),
    globalOffset: {x:1296285.515098644, y: 14995636.431742325, z:0}
};
viewer.loadModel(svfUrl, modelOptions, onLoadModelSuccess);

`

这反转了这个大偏移量的效果。结果是几何停止闪烁,并且由于精度问题,相机移动停止“抖动”。

让我知道这是否适合您。 迈克尔

ps。您可以从小侧文件 AECModelData.json 中提取“精确”全局偏移量,请参阅博客:forge.autodesk.com/blog/add-revit-levels-and-2d-minimap-your-3d

【讨论】:

  • 谢谢迈克尔。这解决了问题。因此,如果我从第一个模型中获取偏移量并将其用于其他模型(而不是使用 0,0,0),则不会发生这种情况。我将相应地重组我的代码。
  • 顺便说一句,您可以在加载查看器之前检索 globalOffset 值,使用巧妙的技巧... 下载小的 AECModelData.json 文件,然后将 globalOffset 拉出那里。它适用于 Navis 和 IFC 文件。详情见这里:forge.autodesk.com/blog/…
猜你喜欢
  • 1970-01-01
  • 2018-10-03
  • 2021-11-21
  • 2019-10-26
  • 2020-05-15
  • 2018-11-08
  • 2019-11-06
  • 2015-02-27
  • 2017-05-28
相关资源
最近更新 更多