Как я могу заставить clearThemingColors () работать на Viewer 6.4.0 и выше? - PullRequest
0 голосов
/ 16 апреля 2019

У меня есть код для переключения всех линий в 2D-чертеже в Forge Viewer на черный, применяя тему (как описано в блоге) и возвращая исходные цвета.Но версия Viewer 6.4.0 что-то сломала при возврате, и теперь все линии остаются белыми.Работают все версии до 6.3.5.Изменилось ли что-то, что требует нового кода для этой работы?

Это то, что я делаю сегодня, раньше работало без нареканий, но не сейчас:

  color2D.onClick = function (e) {

    if (blackWiteToggle) {
      window._viewerSecondary.impl.toggleSwapBlackAndWhite(false);
      paint2DToBlackAndWhite(_viewerSecondary);
      blackWiteToggle = false;
    } else {
      window._viewerSecondary.impl.toggleSwapBlackAndWhite(true);
      window._viewerSecondary.clearThemingColors();
      window._viewerSecondary.restoreState(stateDefalult);
      blackWiteToggle = true;
    }
  };

function paint2DToBlackAndWhite(viewerToPaint) {
  var frags = viewerToPaint.model.getFragmentList().fragments.fragId2dbId;
  frags.forEach(function(frag){
    frag.forEach(function(dbId){
      if (dbId < 0) return;
      viewerToPaint.setThemingColor(dbId, new THREE.Vector4(0, 0, 0, 1), viewerToPaint.model)
    });
  });
}

Что произошло раньше:рисунок имеет цвета изначально.Когда пользователь нажимает кнопку, ко всем строкам применяется тема черного цвета (и белый фон, но не имеющий отношения к проблеме).Когда пользователь нажимает снова, цвета темы очищаются, а 2D-рисунок снова окрашивается.

Что происходит после 6.4.0: линии правильно получают тему черного цвета.Когда пользователь нажимает снова, все линии становятся белыми, когда им нужно вернуть исходные цвета.

1 Ответ

0 голосов
/ 19 апреля 2019

Наши инженеры изучают эту проблему и исправят проблему в следующем выпуске как можно скорее.

Тем временем, для всех, кто столкнется с той же проблемой, есть альтернативный способ, который наш OP Tiago придумала:

Autodesk.Viewing.Viewer3D.prototype.clearThemingColors = function 
(model) { 
// use default RenderModel by default 
model = model || this.model;

model.getFragmentList().fragments.dbId2fragId.length = 
Object.keys(model.getFragmentList().fragments.dbId2fragId).length;

model.clearThemingColors();

// we changed the scene to apply theming => trigger re-render 
this.impl.invalidate(true); 
};
...