2017-03-17 8 views
0

J'ai un besoin de traverser l'arbre du modèle et à chaque nœud effectuer une logique métier, je me demandais s'il y a des méthodes d'aide que je pourrais utiliser qui aideront à se déplacer à travers les nœuds. Comme l'ampleur de la première recherche ou la profondeur de la première recherche ou même des méthodes simples pour obtenir un nœud enfants et les parents?Des méthodes d'aide pour marcher dans l'arbre du modèle?

Des méthodes pour trouver des nœuds feuilles seraient également très utiles.

(Aussi si possible ce serait génial si ceux-ci étaient fournis en javascript plutôt qu'en ES6, je sais Phillipe Leefsma a un article de blog qui a un code pour trouver des nœuds feuilles mais c'est en ES6 et je ne peux pas semble être converti en Javascript)

Toute aide est grandement appréciée.

Répondre

1

La méthode pour obtenir tous les enfants ayant un arbre d'instance et un noeud est instanceTree.enumNodeChildren(node, callback) où tous les enfants dbids sont dans le rappel.

à traverser à travers l'arbre, d'abord obtenir l'arbre instancee et l'ID racine:

var instanceTree = viewer.model.getData().instanceTree; 
var rootId = this.rootId = instanceTree.getRootId(); 

alors la meilleure façon utilise en largeur recherche:

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); 
     }); 
    } 
    return alldbId; 
} 

Vous pouvez modifier votre méthode optimiser pour la performance.

En savoir plus à ce sujet ici: https://forge.autodesk.com/cloud_and_mobile/2015/12/select-all-elements-in-the-viewer-with-view-and-data-api-with-javascript.html