Увеличьте комнату в зрителе - PullRequest
0 голосов
/ 06 июня 2018

Теперь я могу перечислить уровни.Я пытаюсь увеличить конкретную комнату определенного уровня.

У меня есть комната dbId, но когда я делаю это:

v.fitToView(34969, v.model) (v => зритель /34969 комната dbId)

Камера идет далеко:

enter image description here

Я пытаюсь сделать точно такое же движение камеры, чемкогда я нажимаю на подпункт в modelStructureTool > Room

о цвете комнаты

Вот мой код с исправлением:

var ulRoom = document.createElement('ul');
ulRoom.setAttribute('id','levelsList');
el.children.forEach(function(l){
var liRoom = document.createElement('li');
liRoom.setAttribute('class','room');
liRoom.setAttribute('style','cursor:pointer;color:  #000; font-weigth: bold');
liRoom.onclick = function () {
    console.log("l ====>", l);
    viewer.fitToView( [l.dbId], viewer.model);
    viewer.setThemingColor( l.dbId, viewer.model);
    };
    ulRoom.appendChild(liRoom);
    liRoom.innerHTML = l.name;
});

viewer.fitToView работаетмило.

В моем forEach, l есть номер:

enter image description here

1 Ответ

0 голосов
/ 07 июня 2018

Первый аргумент должен быть массивом, поэтому ваш вызов функции должен быть изменен на viewer.fitToView( [ 34969 ], viewer.model ).2-й аргумент model является необязательным, поэтому он станет viewer.fitToView( [ 34969 ] ) в случае использования одной модели.

Если вы используете Viewer в случае нескольких моделей, вы должны найти соответствующую модель из viewer.impl.modelQueue().getModels() для этой комнаты и второго аргумента Viewer3D#fitToView.

Надеюсь, это поможет.

Редактировать:

API-интерфейс средства просмотра для изменения элементовцвет viewer.setThemingColor( dbId, color ), и он работает только для конечных узлов.После изучения модели, которую вы предоставили Forge Helpdesk, я обнаружил, что комната с dbId 34969 не является конечным узлом дерева экземпляров Viewer.Вот почему цвет не изменился, в то время как API соответствует событию.

function getLeafNodes( model, dbIds ) {

      return new Promise( ( resolve, reject ) => {

        try {

          const instanceTree = model.getData().instanceTree

          dbIds = dbIds || instanceTree.getRootId();

          const dbIdArray = Array.isArray( dbIds ) ? dbIds : [dbIds]
          let leafIds = [];

          const getLeafNodesRec = ( id ) => {
            let childCount = 0;

            instanceTree.enumNodeChildren( id, ( childId ) => {
                getLeafNodesRec( childId );

                ++childCount;
              })

            if( childCount == 0 ) {
              leafIds.push( id );
            }
          }

          for( let i = 0; i < dbIdArray.length; ++i ) {
            getLeafNodesRec( dbIdArray[i] );
          }

          return resolve( leafIds );

        } catch (ex) {

          return reject(ex)
        }
    })
}

let color = new THREE.Vector4( 255/255, 0/255, 0/255, 1 );

getLeafNodes( viewer.model, [ 34969 ] )
    .then( ( leafNodes ) => {

      // Call setThemingColor for every leaf node.
      for( let i = 0; i < leafNodes.length; i++ ) {
          viewer.setThemingColor( leafNodes[i], color );
      }
    })
    .catch( ( error ) => console.warn( error ) );

Вот документация Viewer: https://developer.autodesk.com/en/docs/viewer/v2/reference/javascript/viewer3d/

...