加载后平移模型(移动原点)

Translate a model after load (move origin)

我公司正在使用支持多模型联合的最新版本,我们面临的问题是有时模型没有完全正确排列。我知道加载选项 globalOffset 但即使有它,它们也不会对齐。

因此,我正在寻找一种在加载模型后移动模型的方法,这样我就可以将这个新的偏移量存储在数据库中,以便下次正确加载它。

目前可以吗?

如果您的模型之前没有设置同源或共享坐标,那么它们将不会与 globalOffset 选项对齐。

是的,加载后可以移动模型。你可以看看这个很棒的扩展,Viewing.Extension.Transform, written by our cool colleague Philippe and the translation tool is here.

这里是一个示例,展示了如何在 x 方向上移动整个模型 -100 个单位。它的关键概念是将您的模型偏移应用到每个 Forge 片段,如下代码片段。

const fragCount = viewer.model.getFragmentList().fragments.fragId2dbId.length;

// Move whole model -100 units in the x-direction
const offset = new THREE.Vector3( -100, 0 , 0 );

for( let fragId = 0; fragId < fragCount; ++fragId ) {
    const fragProxy = viewer.impl.getFragmentProxy( model, fragId );

    fragProxy.getAnimTransform();

    const position = new THREE.Vector3(
        fragProxy.position.x + offset.x,
        fragProxy.position.y + offset.y,
        fragProxy.position.z + offset.z
    );

    fragProxy.position = position;

    fragProxy.updateAnimTransform();
}


viewer.impl.sceneUpdated( true );