2017-08-23 1 views
0

De la documentation, il semble que vous devriez pouvoir appeler setThemingColor avec n'importe quel dbId, mais cela ne semble fonctionner que si l'identifiant que vous passez est un leafnode? Est-ce correct?setThemingColor ne fonctionne que pour le nœud feuille dbIds

Existe-t-il un moyen d'appeler en bloc cette méthode ou est-ce seulement un seul nœud feuille à la fois? Je voudrais passer un tableau de dbId dans la méthode.

Répondre

0

Oui, cela fonctionne uniquement avec les nœuds feuilles de mon expérience. Cependant, les nœuds de feuilles d'un nœud parent peuvent être récupérés de cette façon:

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) => { 
      let childCount = 0; 

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

       ++childCount; 
       }) 

      if(childCount == 0) { 
       leafIds.push(id); 
      } 
      } 

      for(let i = 0; i < dbIdArray.length; ++i) { 
      getLeafNodesRec(dbIdArray[i]); 
      } 

      return resolve(leafIds); 

     } catch (ex) { 

      return reject(ex) 
     } 
    }) 
} 

getLeafNodes(viewer.model, [1]) 
    .then((leafNodes) => { 
     // All leaf dbIds under the dbId 1. 
     console.log(leafNodes); 
    }) 
    .catch((error) => console.warn(error)); 

Après avoir récupéré tous les dbids de feuilles, vous pouvez simplement écrire une boucle pour appeler setThemingColor pour chaque dbids comme cette façon:

const color = new THREE.Vector3(255/255, 0, 0, 1); 

getLeafNodes(viewer.model, [1]) 
    .then((leafNodes) => { 

     // Call setThemingColor for every leaf node. 
     for(let i = 0; i < leafNodes.length; i++) { 
      viewer.setThemingColor(leafNodes[i], color); 
     } 

    }) 
    .catch((error) => console.warn(error)); 

Espérons que cette aide.

Ref de la fonction getLeafNodes: https://forge.autodesk.com/blog/hidding-completely-viewer-nodes-no-ghosting