我需要从Autodesk forge模型中获取所有DB-Id。我已经引用了https://forge.autodesk.com/cloud_and_mobile/2015/12/select-all-elements-in-the-viewer-with-view-and-data-api-with-javascript.html中的代码
我也在自己的扩展程序中尝试过,代码如下。
AutodeskNamespace("Autodesk.ADN.Viewing.Extension");
Autodesk.ADN.Viewing.Extension.Color = function(viewer, options) {
Autodesk.Viewing.Extension.call(this, viewer, options);
var _self = this;
var _viewer = viewer;
var instanceTree = viewer.model.getData().instanceTree;
var rootId = this.rootId = instanceTree.getRootId();
_self.load = function() {
getgetAlldbIds(rootId);
};
function getAlldbIds(rootId) {
var alldbId = [];
if (!rootId) {
return alldbId;
}
var queue = [];
queue.push(rootId);
while (queue.length > 0) {
var node = queue.shift();
alldbId.push(node);
instanceTree.enumNodeChildren(node, function(childrenIds) {
queue.push(childrenIds);
});
}
console.log(alldbId);
}
};
但是我在开发人员工具中遇到
cannot read property 'getData' of null
错误,您认为我在哪里出错。提前致谢。 最佳答案
问题必须是模型未完全加载,因此您应该等待该事件(Autodesk.Viewing.GEOMETRY_LOADED_EVENT)。也最好等待对象树创建事件(Autodesk.Viewing.OBJECT_TREE_CREATED_EVENT)-请参见此处的讨论:How to Retrieve Forge Viewer objectTree?
顺便说一下,现在有一种更简单的方法来获取所有dbId:Get all database id's in the model