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