在查看器中放大房间
Zoom on a room in the viewer
现在,我可以列出级别了。我正在尝试放大给定级别的特定房间。
我有房间 dbId
但是当我这样做时 :
v.fitToView(34969, v.model)
(v => viewer / 34969 dbId 的房间)
相机走远了:
我正在尝试执行与单击 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
是房间:
第一个参数必须是数组,所以你的函数调用必须改为viewer.fitToView( [ 34969 ], viewer.model )
。第二个参数 model
是可选的,因此在单个模型用例中它将变为 viewer.fitToView( [ 34969 ] )
。
如果您在多个模型的情况下使用查看器,则必须从 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 ) );
查看器文档如下:https://developer.autodesk.com/en/docs/viewer/v2/reference/javascript/viewer3d/
现在,我可以列出级别了。我正在尝试放大给定级别的特定房间。
我有房间 dbId
但是当我这样做时 :
v.fitToView(34969, v.model)
(v => viewer / 34969 dbId 的房间)
相机走远了:
我正在尝试执行与单击 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
是房间:
第一个参数必须是数组,所以你的函数调用必须改为viewer.fitToView( [ 34969 ], viewer.model )
。第二个参数 model
是可选的,因此在单个模型用例中它将变为 viewer.fitToView( [ 34969 ] )
。
如果您在多个模型的情况下使用查看器,则必须从 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 ) );
查看器文档如下:https://developer.autodesk.com/en/docs/viewer/v2/reference/javascript/viewer3d/