Первый аргумент должен быть массивом, поэтому ваш вызов функции должен быть изменен на 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/