Autodesk forge 如何以最快的方式使用DBID为大量项目着色?

Autodesk forge 如何以最快的方式使用DBID为大量项目着色?,autodesk-forge,autodesk-viewer,Autodesk Forge,Autodesk Viewer,我需要根据特殊类别给一个巨大的模型上色,其中每个类别引用大约1000个DBID。我知道如果我给父节点着色,所有子节点都会很快着色。但是,我拥有的每个类别中的dbId大多没有相同的父级,我必须运行viewer.setThemingColor(dbId,color);对于每个dbId,这需要很长的时间来处理。 在这种情况下,有没有更快的方法来着色模型 我在下面的图片中演示了我的自定义树对模型进行分类,以及它与默认Forge模型浏览器树的关系 您可以通过使用以下按钮翻转递归标志,递归设置节点下所有子节

我需要根据特殊类别给一个巨大的模型上色,其中每个类别引用大约1000个DBID。我知道如果我给父节点着色,所有子节点都会很快着色。但是,我拥有的每个类别中的dbId大多没有相同的父级,我必须运行viewer.setThemingColor(dbId,color);对于每个dbId,这需要很长的时间来处理。 在这种情况下,有没有更快的方法来着色模型

我在下面的图片中演示了我的自定义树对模型进行分类,以及它与默认Forge模型浏览器树的关系


您可以通过使用以下按钮翻转递归标志,递归设置节点下所有子节点的颜色:

NOP_VIEWER.setThemingColor(dbid, THREE.Vector4, null, true)
当将颜色应用于大量对象时,我们可能最终会获得可感知的性能影响,因此,这里是如何将这些颜色的渲染延迟到所有代码都应用于对象,然后完全渲染它们,而不是每次为每个单独的对象重新渲染:

model.setThemingColor(dbid1, THREE.Vector4); //calling setThemingColor on the model object only marks the object for coloring w/o triggering rendering immediately
model.setThemingColor(dbid2, THREE.Vector4);
//...
NOP_VIEWER.impl.invalidate(true)   //trigger rendering afterwards

更多信息请参见

我所做的是隐藏整个模型。然后在模型隐藏时着色

$('.spinner').show();
this.viewerComponent.viewer.setGhosting(false);
this.viewerComponent.viewer.hide(this.viewerComponent.viewer.model.getRootId());
this.viewerComponent.viewer.search(name, (idArray) => {
 this.viewerComponent.viewer.setThemingColor(idArray[0], color, 
 this.viewerComponent.viewer.model, true);
   iterator += 1;
   // Wenn iterator gleich die Länge ist dass alle Objekte wieder zeigen
   // Korrektion für coloredElements.length !== this.inputs.length
   if (iterator === this.inputs.length - 50) {
     $('.spinner').hide();
     this.viewerComponent.viewer.showAll();
     }
   }, (err) => {
     this.messageService.add({ key: 'warning', severity: 'error', summary: 'Error', 
     detail: 'Something with COLORING went wrong: ' + err });
   }, ['name']);
最好的,

谢谢布莱恩!我使用了“NOP_VIEWER.setThemingColor(dbid,THREE.Vector4,null,true)”,现在着色速度非常快。但现在又出现了另一个问题。着色后,当选择彩色项目(特别是大量彩色项目)时,这些项目将显示为透明、高亮显示并达到性能要求,那么渲染将非常缓慢。但是当我取消选择时,渲染是如此平滑和快速。你知道原因是什么吗?请看-尝试回答中描述的选项,看看这是否解决了问题,如果没有,请开始一个新问题,以便我们可以研究它。。。