我有一个代码,通过应用主题(如博客中所述)并恢复原始颜色,将Forge Viewer上2D绘图中的所有线条切换为黑色。但6.4.0版本的Viewer在恢复时破坏了一些东西,现在所有的线都保持白色。所有版本高达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之后会发生什么:线条正确地获得黑色主题。当用户再次按下时,所有线条都变为白色,此时它们应该恢复原始颜色。
我们的工程师正在调查此问题,并将尽快解决即将发布的问题。
与此同时,对于任何遇到同样问题的人来说,这是我们的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);
};