Как быстро раскрасить большое количество предметов, используя dbIds? - PullRequest
0 голосов
/ 26 марта 2020

Мне нужно раскрасить огромную модель на основе специальных категорий, где каждая категория ссылается примерно на 1000 dbIds. Я знаю, если я закрашу родительский узел, все дочерние узлы будут окрашены очень быстро. Однако dbIds в каждой моей категории, в основном, не имеют одного родителя, и мне нужно запустить viewer.setThemingColor (dbId, color); для каждого dbId отдельно, что занимает очень много времени для обработки. Есть ли более быстрый способ раскраски модели в этом случае?

Я проиллюстрировал мое настроенное дерево на категоризацию модели и ее связь с деревом браузера модели Forge по умолчанию на изображении ниже.

Левая сторона - это по умолчанию браузер Forge Model. - Правая сторона - это дерево навигации по моей модели

Ответы [ 2 ]

0 голосов
/ 28 марта 2020

Что я сделал, так это скрыл всю модель. Затем раскраска, когда модель скрыта.

$('.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']);

Лучший,

0 голосов
/ 27 марта 2020

Вы можете рекурсивно установить цвет всех дочерних элементов в узле, щелкнув рекурсивный флаг с помощью:

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

Подробнее здесь

...