[Autodesk Forge viewer]How to get the dbIds of the objects in a specified layer

时间:2017-10-12 09:43:56

标签: javascript autodesk-forge autodesk-viewer

I have a SVF file translated from 2d DWG and successfully loaded in a Viewer.

Now I want to query attributes/properties of some objects in a layer.

Here is what I've done so far:

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)

Any suggestion is appreciated.

2 个答案:

答案 0 :(得分:0)

不幸的是,目前可能无法做到这一点。请参考这篇文章:

How to get a list of dbids contained in a layer?

答案 1 :(得分:0)

根据Eason Kang的回答,没有官方的方法来实现这一目标。所以剩下的唯一方法是迭代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
    });