2017-06-26 3 views

Antwort

0

Wenn Sie die ID eines Elternteils übergeben, wird es alle seine Kinder ausschalten, was wahrscheinlich in Ihrem Fall passiert. Das Ausschalten von Knoten funktioniert definitiv, Sie können sich meine Demo unter https://forge-rcdb.autodesk.io ansehen.

Markieren Sie eine Zeile in der Datenbankansicht oder ein Segment in dem Kreisdiagramm:

enter image description here

Was Sie tun müssen, ist, die Blattknoten-IDs zu erhalten, werden nur Blattknoten durch Geometrie in die dargestellte Zuschauer.

Hier einige ES6 Codebeispiel aus there extrahiert:

static getLeafNodes (model, dbIds) { 

    return new Promise((resolve, reject)=>{ 

    try { 

     const instanceTree = model.getData().instanceTree 

     dbIds = dbIds || instanceTree.getRootId() 

     const dbIdArray = Array.isArray(dbIds) ? dbIds : [dbIds] 

     let leafIds = [] 

     const getLeafNodesRec = (id) => { 

     var childCount = 0; 

     instanceTree.enumNodeChildren(id, (childId) => { 

      getLeafNodesRec(childId) 

      ++childCount 
     }) 

     if (childCount == 0) { 

      leafIds.push(id) 
     } 
     } 

     for (var i = 0; i < dbIdArray.length; ++i) { 

     getLeafNodesRec(dbIdArray[i]) 
     } 

     return resolve(leafIds) 

    } catch(ex){ 

     return reject(ex) 
    } 
    }) 
} 

static async isolateFull (viewer, dbIds = [], model = null) { 

    try { 

    model = model || viewer.activeModel || viewer.model 

    viewer.isolate(dbIds) 

    const targetIds = Array.isArray(dbIds) ? dbIds : [dbIds] 

    const targetLeafIds = await ViewerToolkit.getLeafNodes(
     model, targetIds) 

    const leafIds = await ViewerToolkit.getLeafNodes (model) 

    const leafTasks = leafIds.map((dbId) => { 

     return new Promise((resolveLeaf) => { 

     const show = !targetLeafIds.length || 
      targetLeafIds.indexOf(dbId) > -1 

     viewer.impl.visibilityManager.setNodeOff(
      dbId, !show) 

     resolveLeaf() 
     }) 
    }) 

    return Promise.all(leafTasks) 

    } catch (ex) { 

    return Promise.reject(ex) 
    } 
} 
+1

Danke, das hat seinen Zweck erfüllt. –

+0

Können Sie bitte als Lösung akzeptieren, so dass es für die Menschen in Zukunft einfach ist, die richtigen Antworten zu finden. Vielen Dank ;) –

Verwandte Themen