[Autodesk Forge viewer]如何获取指定图层中对象的dbIds
问题描述:
我有一个SVF
文件,从2d DWG
翻译过来并成功加载到Viewer
中。[Autodesk Forge viewer]如何获取指定图层中对象的dbIds
现在我想查询图层中某些对象的属性/属性。
以下是我迄今所做的:
let layer = viewer.model.getLayersRoot().children.find(x=> x.name==='Marker');//find the layer named by 'Marker'----{name: "Marker", index: 72, id: 71, isLayer: true}
let objectTree = viewer.model.getData().instanceTree;//get the Object Tree and its One-dimensional array of dbIdList
// stuck here
// looking for some method like objectTree.getIdListInLayer(layerId)
任何建议表示赞赏。
答
据陈奕迅康的回答,没有达到这个没有正式的办法。所以剩下的唯一方法就是迭代dbIdList。下面是代码:
function query(dbId, model, layerName) {
if (!dbId) return Promise.resolve(null);
return new Promise(resolve => {
model.getProperties(dbId, x => {
let layerProp = x.properties.find(x => x.displayName === 'Layer' && x.displayValue === layerName);
resolve(!!layerProp ? x : null);
});
});
}
Promise.all(Object.keys(objectTree.nodeAccess.dbIdToIndex).map(dbId => query(dbId = dbId - 0, viewer.model, layerName = 'Marker')))
.then(function(resultList) {
resultList = resultList.filter(x => !!x);
console.table(resultList); //this is all the objects in the Marker layer
});
+0
它看起来不错,但我想建议你改用'viewer.search'或'viewer.getBulkProperties'。在这种情况下可能会有更好的表现。请参考这个博客:https://forge.autodesk.com/blog/getbulkproperties-method –
+0
顺便说一句,我发现这种解决方法可能不适用于所有的2D模型。其中一些没有'InstanceTree'的将会在'model.getProperties'中被破坏。 –
这真是个坏消息。我目前的解决方法是通过所有dbIds并选择匹配的一个。参见上面的答案。 –