2017-10-12 3 views
0

Ich habe eine SVF Datei aus 2d DWG übersetzt und erfolgreich in einem Viewer geladen.[Autodesk Forge viewer] So erhalten Sie die dbIds der Objekte in einem angegebenen Layer

Jetzt möchte ich Attribute/Eigenschaften einiger Objekte in einer Schicht abfragen.

Hier ist, was ich bisher getan habe:

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) 

Jeder Vorschlag ist willkommen.

Antwort

0

Leider ist dies momentan möglicherweise nicht möglich. Bitte beachten Sie diesen Beitrag:

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

+0

Das sind wirklich schlechte Nachrichten. Meine aktuelle Problemumgehung besteht darin, alle dbIds zu durchlaufen und die passende auszuwählen. Siehe meine Antwort oben. –

0

Nach Eason Kang Antwort, gibt es keinen offiziellen Ansatz, um dies zu erreichen. Der einzige Weg bleibt also, die dbIdList zu iterieren. Hier ist der Code:

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

Es sieht gut aus, aber ich würde Ihnen raten, stattdessen 'viewer.search' oder' viewer.getBulkProperties' zu verwenden. Es könnte eine bessere Leistung in diesem Fall haben. Bitte beziehen Sie sich auf dieses Blog: https://forge.autodesk.com/blog/getbulkproperties-method –

+0

Übrigens, ich fand diese Problemumgehung möglicherweise nicht bei allen 2D-Modellen. Einige von ihnen, die keinen 'InstanceTree' haben, werden in 'model.getProperties' gebrochen. –

Verwandte Themen