Autodesk forge 如何检索Forge Viewer objectTree?

Autodesk forge 如何检索Forge Viewer objectTree?,autodesk-forge,autodesk-viewer,Autodesk Forge,Autodesk Viewer,我的目标是通过基于我在revit中创建的线向查看器添加新几何图形来高亮显示房间,就像这里一样 但我不知道如何访问这些行ID。 我知道它们在revit中是什么(元素id),但不知道它们是如何映射为dbid的 此后 我想访问扩展中的objectTree来查找,但它总是以未定义的形式返回 var tree; //old way - viewer is your viewer object - undefined viewer.getObjectTree(function (objTree) { tr

我的目标是通过基于我在revit中创建的线向查看器添加新几何图形来高亮显示房间,就像这里一样

但我不知道如何访问这些行ID。 我知道它们在revit中是什么(元素id),但不知道它们是如何映射为dbid的

此后

我想访问扩展中的objectTree来查找,但它总是以未定义的形式返回

var tree;
//old way - viewer is your viewer object - undefined
viewer.getObjectTree(function (objTree) {
 tree = objTree;
});
//2.5-未定义

  var instanceTree = viewer.model.getData().instanceTree;
  var rootId = this.rootId = instanceTree.getRootId();
  var objectTree = viewer.getObjectTree();
//-未定义

  var instanceTree = viewer.model.getData().instanceTree;
  var rootId = this.rootId = instanceTree.getRootId();
  var objectTree = viewer.getObjectTree();
有人能告诉我它是否仍然适用于他们吗?我正在使用API的v2将rvt转换为svf和viewer3D.js的2.9

注意:如果我调用这个函数,我可以看到dbid的列表

var model = viewer.impl.model;
var data = model.getData();
var fragId2dbIdArray = data.fragments.fragId2dbId ;

但是,从2.9版开始,无法映射回Revit图元\u id

,这仍然有效。这是我的控制台:

以下是一些您可以尝试的东西:

  • viewer
    是否未定义?抓取
    查看器时,您是否在正确的范围内
  • 必须先加载文档,然后才能获取实例树。加载文档时,将触发名为
    Autodesk.Viewing.GEOMETRY\u loaded\u event
    的事件,然后您可以开始操作实例树
  • 只需这样做:

    viewer.addEventListener(Autodesk.Viewing.GEOMETRY_LOADED_EVENT, function () {
    var instanceTree = viewer.model.getData().instanceTree;
    });
    
    有关更结构化的代码,请按照添加扩展


    这是一个值得关注的事件。尽管如此,它仍在使用旧的方法获取实例树。

    Shiya Roo是正确的,查看器尚未完成加载几何体

    在我的扩展加载函数中,我添加了两个事件侦听器,并确保它们在尝试访问instanceTree之前都已启动

     viewer.addEventListener(Autodesk.Viewing.GEOMETRY_LOADED_EVENT, function () {
        finishedGEOMETRY_LOADED_EVENT = true;
        if(finishedGEOMETRY_LOADED_EVENT && finishedOBJECT_TREE_CREATED_EVENT ){
            afterModelLoadEvents(viewer);
        }
     });
    viewer.addEventListener(Autodesk.Viewing.OBJECT_TREE_CREATED_EVENT, function () {
        finishedOBJECT_TREE_CREATED_EVENT = true;
        if(finishedGEOMETRY_LOADED_EVENT && finishedOBJECT_TREE_CREATED_EVENT ){
            afterModelLoadEvents(viewer);           
        }
     });