我的目标是根据我在revit中创建的行向观众添加新的几何图形来突出显示一个房间,就像他们在这里Link
一样但我无法弄清楚如何访问这些行ID。 我知道它们在revit(element_id)中是什么,但不知道它们如何映射为dbid。
遵循此Blog Post
我想在我的扩展程序中访问objectTree以查找,但它总是以未定义的形式返回。
var tree;
//old way - viewer is your viewer object - undefined
viewer.getObjectTree(function (objTree) {
tree = objTree;
});
// 2.5 - undefined
var instanceTree = viewer.model.getData().instanceTree;
var rootId = this.rootId = instanceTree.getRootId();
// - undefined
var objectTree = viewer.getObjectTree();
任何人都可以告诉我它是否仍适用于他们我使用API的v2进行rvt转换为svf和2.9的viewer3D.js
注意如果我调用此
,我可以看到dbid列表var model = viewer.impl.model;
var data = model.getData();
var fragId2dbIdArray = data.fragments.fragId2dbId ;
但无法映射回Revit element_id
答案 0 :(得分:4)
以下是您可以尝试的几件事:
viewer
未定义吗?抓住viewer
?Autodesk.Viewing.GEOMETRY_LOADED_EVENT
的事件,然后您就可以开始操作实例树了。只需这样做:
viewer.addEventListener(Autodesk.Viewing.GEOMETRY_LOADED_EVENT, function () {
var instanceTree = viewer.model.getData().instanceTree;
});
要获得更多结构化代码,请按this guide添加扩展程序。
要监听的事件有more detailed blog post。不过,它仍然使用旧的方式来获取实例树。
答案 1 :(得分:1)
Shiya Luo是正确的,观众还没有完成加载几何
在我的扩展中加载函数我添加了两个事件监听器并确保它们在尝试访问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);
}
});