我的目标是根据我在revit中创建的线条为查看器添加新的几何图形,以突出显示一个房间,就像这里所做的,链接
但我不知道如何访问这些行ids。我知道它们在revit (element_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();有人能告诉我它是否仍然适用于他们吗?我正在使用API的v2来将rvt转换为svf,并使用viewer3D.js的2.9
注意,我可以看到一个dbid的列表,如果我称之为
var model = viewer.impl.model;
var data = model.getData();
var fragId2dbIdArray = data.fragments.fragId2dbId ;但无法映射回Revit element_id
发布于 2016-08-12 02:36:14
到2.9版时,这仍然有效。这是我的控制台:

下面是几件你可以尝试的事情:
viewer是否未定义?抓取viewer时,您在正确的范围内吗?Autodesk.Viewing.GEOMETRY_LOADED_EVENT的事件,然后可以开始操作实例树。只需这样做:
viewer.addEventListener(Autodesk.Viewing.GEOMETRY_LOADED_EVENT, function () {
var instanceTree = viewer.model.getData().instanceTree;
});对于更多结构化代码,请按照本指南添加一个扩展。
有一个更详细的博客文章,在哪个事件上要监听。不过,它仍然在使用旧的方法来获取实例树。
发布于 2016-08-12 04:09:53
罗世雅是对的,观众还没有完成几何图形的加载。
在扩展加载函数中,我添加了两个事件侦听器,并确保它们都在尝试访问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);
}
});https://stackoverflow.com/questions/38904993
复制相似问题