Как включить различные изображения в мой план этажа программы просмотра Autodesk Forge - PullRequest
0 голосов
/ 06 февраля 2020

В настоящее время я работаю над проектом с помощью программы просмотра Autodesk Forge. Мой зритель показывает загруженный и преобразованный план этажа. В этом плане я хотел бы показать разные логотипы для моих комнат из базы данных. Я уже сделал несколько расширений для своего средства просмотра, но пока не обнаружил никакой возможности для моего проекта lo go. Может быть, у вас есть какие-либо идеи для реализации.

Thx, JT

1 Ответ

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

Самый простой способ, который приходит на ум, - это добавить элемент, содержащий ваши логотипы, на холст - для начала посмотрите этот блог здесь .

В основном вам нужно прикрепить изображения к местоположениям комнат, нависающим над холстом, и подпишитесь на событие смены камеры, чтобы настроить их местоположение / координаты для каждого движения камеры. Вы можете получить координаты вашей комнаты, рассчитав их ограничивающие прямоугольники с помощью dbid:


function get2DBounds(dbId, model){
    const find2DBounds = function(fragList, fragId, dbId, bc) {
       const mesh = fragList.getVizmesh( fragId );
       const vbr = new Autodesk.Viewing.Private.VertexBufferReader( mesh.geometry );
       vbr.enumGeomsForObject( dbId, bc );
    }

    const it = model.getData().instanceTree;
    const fragList = model.getFragmentList();

    let bounds = new THREE.Box3();
    let bc = new Autodesk.Viewing.Private.BoundsCallback( bounds );
    const dbId2fragId = model.getData().fragments.dbId2fragId;
    const fragIds = dbId2fragId[dbId];

    if( Array.isArray( fragIds ) ) {
        for( let i = 0; i < fragIds.length; i++ ) {
            find2DBounds( fragList, fragIds[i], dbId, bc );
        }
    } else if( typeof fragIds === 'number' ) {
        find2DBounds( fragList, fragIds, dbId, bc );
    }

    return bc.bounds;
}

const boundingBox = get2DBounds( dbId, viewer.model );
const position = boundingBox.center()
...