Forge Viewer - getWorldCoordinates 在不同场合给出不同的值

Forge Viewer - getWorldCoordinates is giving different values on different occasions

我创建了下面的函数来取回世界坐标,但它在两个场合给出了不同的值。

当我点击一个 dbId 时,我得到了 dbid 坐标并将它传递给下面的函数,它给我世界坐标,但是你可以看到当我将 dbId 选择保存到 DB 并在下次重新加载页面时看到它,它给我不同的坐标。 为什么会这样?

节省 dbid 阶段

投标坐标 x: -26.277027130126953 是:18.102033615112305 z: -7.173819303512573

获取世界坐标 x: 256.76347287180107 是:306.8180434914181 z: 0

relaoding页面阶段

投标坐标 x: -26.277027130126953 是:18.102033615112305 z: -7.173819303512573

获取世界坐标 x: 422.50000131979897 是:249.49997927733767 z: 0

    function getWorldCoordinates(position){
        var screenpoint = viewer.worldToClient(
                    new THREE.Vector3(position.x,
                                      position.y,
                                      position.z,));
        return screenpoint
    }


function getObjPosition(dbId) {

function getObjPosition(dbId) {
    const model = viewer.model;
    const instanceTree = model.getData().instanceTree;
    const fragList = model.getFragmentList();

    let bounds = new THREE.Box3();

    instanceTree.enumNodeFragments( dbId, ( fragId ) => {
        let box = new THREE.Box3();
        fragList.getWorldBounds( fragId, box );
        bounds.union( box );
    }, true );

    const position = bounds.center();
    return position;
}

很遗憾,我无法重现该问题...

尝试现场演示here - 刷新页面并查看模型完成加载时提示的世界坐标...

一定要在模型完成加载后转换坐标(例如在 TEXTURES_LOADED_EVENT 之后),否则您可能会得到不稳定的结果:

NOP_VIEWER.addEventListener(Autodesk.Viewing.TEXTURES_LOADED_EVENT,()=>{
 alert(JSON.stringify(NOP_VIEWER.worldToClient(
                    new THREE.Vector3(-26.277027130126953,
                                      18.102033615112305,
                                      -7.173819303512573,))))
})