Forge Viewer如何计算globalOffset?

How does Forge Viewer calculate globalOffset?

在我们的应用程序中,我们通过从 IFC 文件中读取信息来绘制房间,然后生成添加到模型构建器的自定义对象。对于每个顶点,我们减去 globalOffset,以便房间与模型很好地对齐。这对我们拥有的大多数模型都非常有效。但是,对于一个模型,globalOffset 很大,因此自定义对象将远离模型绘制。

我们从 IFC 文件中读取的顶点位于合理的 space {0, 0, 0} 附近。

我现在的问题是:globalOffset是怎么计算的?考虑了 IFC 文件的哪些属性?

如前所述,当我们从每个顶点中减去 globalOffset 时,其他模型工作正常。这是一个例子:

在此先感谢您提供任何形式的帮助!

编辑: 对于所有对 IFC 文件中全局偏移的来源感兴趣的人:搜索“ifcsite”,应该有对本地位置的引用,这可能包含相当大的翻译(至少在我的情况下)。

默认情况下,全局偏移量是模型边界框的中点,如下所示:

var bboxMeta = model.getData().metadata["world bounding box"];
var min = new THREE.Vector3(bbox.minXYZ[0], bbox.minXYZ[1], bbox.minXYZ[2]);
var max = new THREE.Vector3(bbox.maxXYZ[0], bbox.maxXYZ[1], bbox.maxXYZ[2]);

var bbox = new THREE.Box3(min, max);

var globalOffset = bbox.center();

它用于避免远离观察者原点的模型的浮点精度问题。默认情况下,Forge Viewer 将使用此偏移量将整个模型移动到查看器的原点。

要获取全局偏移量,您还可以使用以下具有相同输出的代码行:

let globalOffset = viewer.model.getData().globalOffset;