Forge Viewer - getWorldCoordinates дает разные значения в разных случаях - PullRequest
0 голосов
/ 26 февраля 2020

Я создал функцию ниже, чтобы вернуть worldCoordinates, но она дает разные значения в двух случаях.

При нажатии dbId, я получаю корбинаты dbid и передаю его функции ниже, которая дает мне мировые координаты, но вы можете видеть, что пока я сохраняю выбранный dbId в БД и перезагружаю страницу в следующий раз, чтобы увидеть его, он дает мне другие координаты. Почему это так?

сохранение фазы dbid

координаты dbid x: -26.277027130126953 y: 18.102033615112305 z: -7.173819303512573

getWorldCoordinates x: 256.76347287180107 y: 306.8180434914181 z: 0

фаза страницы перекодировки

координаты dbid x: -26.277027130126953 y: 18.102033615112305 z: -7.173819303512573

getWorldCoordinates x: 422.50000131979897 y: 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;
}

1 Ответ

0 голосов
/ 27 февраля 2020

К сожалению, я не смог воспроизвести проблему ...

Попробуйте демо-версию здесь - обновите sh страницу и посмотрите, как будут отображаться координаты мира, когда модель завершит загрузку. .

Обязательно конвертируйте координаты после окончания загрузки модели (например, после TEXTURES_LOADED_EVENT), в противном случае вы можете получить ошибочные результаты c:

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