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提供的模型后,我发现dbId
34969
的文件室不是查看器实例树的叶节点。所以,这就是为什么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{ //为每个叶节点调用setThemingColor。 for(设i=0;iconsole.warn(错误));
以下是查看器文档:

如果您能告诉我如何更改此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?它需要调试。