如何以最快的方式使用 dbIds 为大量项目着色?
How to colorizing larg number of items using dbIds in fastest way?
我需要根据特殊类别对一个巨大的模型进行着色,其中每个类别涉及大约 1000 个 dbId。我知道如果我给父节点上色,所有子节点都会很快上色。但是,我拥有的每个类别中的 dbId 大多没有相同的父级,我必须 运行 viewer.setThemingColor(dbId, color);分别为每个 dbId,这需要很长时间来处理。
在这种情况下,有没有更快的方法来为模型着色?
我在下图中说明了我自定义的模型分类树及其与默认 Forge 模型浏览器树的关系。
Left side is default Forge Model browser - Right side is my customized model navigation tree
您可以通过翻转递归标志递归地设置节点下所有子节点的颜色:
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
查看更多here
我所做的是隐藏整个模型。然后在模型隐藏时着色。
$('.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']);
最佳,
我需要根据特殊类别对一个巨大的模型进行着色,其中每个类别涉及大约 1000 个 dbId。我知道如果我给父节点上色,所有子节点都会很快上色。但是,我拥有的每个类别中的 dbId 大多没有相同的父级,我必须 运行 viewer.setThemingColor(dbId, color);分别为每个 dbId,这需要很长时间来处理。 在这种情况下,有没有更快的方法来为模型着色?
我在下图中说明了我自定义的模型分类树及其与默认 Forge 模型浏览器树的关系。
Left side is default Forge Model browser - Right side is my customized model navigation tree
您可以通过翻转递归标志递归地设置节点下所有子节点的颜色:
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
查看更多here
我所做的是隐藏整个模型。然后在模型隐藏时着色。
$('.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']);
最佳,