Autodesk forge setThemingColor仅适用于叶节点DBID
从文档中可以看出,您应该能够使用任何dbId调用setThemingColor,但它似乎仅在您传递的id是leafnode时才起作用?这是正确的吗Autodesk forge setThemingColor仅适用于叶节点DBID,autodesk-forge,autodesk-viewer,Autodesk Forge,Autodesk Viewer,从文档中可以看出,您应该能够使用任何dbId调用setThemingColor,但它似乎仅在您传递的id是leafnode时才起作用?这是正确的吗 还有什么方法可以批量调用此方法,或者一次只调用一个叶节点?我想将一个dbId数组传递到该方法中。是的,根据我的经验,它只适用于叶节点。但是,可以通过以下方式检索父节点的叶节点: getLeafNodes( model, dbIds ) { return new Promise( ( resolve, reject ) => {
还有什么方法可以批量调用此方法,或者一次只调用一个叶节点?我想将一个dbId数组传递到该方法中。是的,根据我的经验,它只适用于叶节点。但是,可以通过以下方式检索父节点的叶节点:
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 ) );
const color = new THREE.Vector4( 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 ) );
希望这有帮助
函数的RefgetLeafNodes
: