Autodesk forge 在查看器中缩放房间
现在,我可以列出级别了。我正试图放大给定标高的特定房间 我有房间Autodesk forge 在查看器中缩放房间,autodesk-forge,Autodesk Forge,现在,我可以列出级别了。我正试图放大给定标高的特定房间 我有房间dbId,但当我这样做时: v.fitToView(34969,v.model)(v=>viewer/34969 dbId的房间) 摄像机将要走得更远: 我试图做与我在modelStructureTool>Room 关于房间的颜色 以下是我的代码和更正: var ulRoom = document.createElement('ul'); ulRoom.setAttribute('id','levelsList'); el.chi
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提供的模型后,我发现dbId34969
的文件室不是查看器实例树的叶节点。所以,这就是为什么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 ) );
函数getLeafNodes(模型,dbid){
返回新承诺((解决、拒绝)=>{
试一试{
const instanceTree=model.getData().instanceTree
dbIds=dbIds | | instanceTree.getRootId();
const dbIdArray=Array.isArray(dbIds)?dbIds:[dbIds]
设leafIds=[];
常量GetLeafNodeSec=(id)=>{
让childCount=0;
instanceTree.enumNodeChildren(id,(childId)=>{
getleaftnodesrec(childId);
++儿童计数;
})
if(childCount==0){
推(id);
}
}
for(设i=0;i以下是查看器文档:如果您能告诉我如何更改此dbId元素的颜色,它将非常完美:)现在开始~'Viewer.setThemingColor(dbId,model)'模型是可选的,如果第二个参数为null,查看器将默认使用Viewer.model。我已经尝试过,但没有成功:
Viewer.fitToView([l.dbId],viewer.model);setThemingColor(l.dbId,viewer.model)
l.dbId
是一个房间……您的l
和原始模型格式是RVT还是NWD?您的forge应用程序是否可以从外部访问?或者你能考虑提供一个非机密的可重复的案例,包含这个模型和一个简单的伪造查看器应用程序。help@autodesk.com?它需要调试。