如何使clearThemingColors()在Viewer 6.4.0及更高版本上工作?

时间:2019-04-16 15:16:55

标签: autodesk-forge autodesk-viewer

我有一个代码,通过应用主题(如博客中所述)并还原原始颜色,可以将Forge Viewer上2D绘图中的所有线条切换为黑色。但是在还原时,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 :(得分:0)

我们的工程部门正在研究此问题,并将尽快在即将发布的版本中解决此问题。

与此同时,对于任何遇到相同问题的人,我们的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); 
};