【发布时间】:2019-09-06 18:05:14
【问题描述】:
我有一个代码,通过应用主题(如博客中所述)并恢复原始颜色,将 Forge Viewer 上的 2D 绘图中的所有线条切换为黑色。但是查看器的 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)
});
});
}
之前发生的事情:这幅画原本是有颜色的。当用户按下按钮时,所有线条都会应用黑色主题(和白色背景,但与问题无关)。当用户再次按下时,主题颜色被清除,二维绘图再次着色。
6.4.0 之后会发生什么:线条正确地获得了黑色主题。当用户再次按下时,所有线条都变为白色,此时它们应该恢复原来的颜色。
【问题讨论】:
-
很遗憾,我无法使用 Viewer v6.5 重现该问题。但是使用 v6.4+,您可以递归地应用颜色,以便绘制整个模型只需执行
viewer.setThemingColor(model.getRootId(),color,model,true)。您可以通过model.getInstanceTree().fragList.db2ThemingColor检查原始颜色矢量是否正确记录。您可以通过模型将模型发送到 forge.help@autodesk.com(通过共享服务,例如 weTransfer/Dropbox),以便我们重现问题吗? -
经过进一步调查,我发现
model.getFragmentList().fragments.dbId2fragId在 6.3- 上是一个数组,在 6.4+ 上是一个对象。所以,以后的版本不能在上面调用.length,在FragmentList.prototype.clearThemingColors上。在两个查看器版本上运行差异,这已经改变:svf.fragments.dbId2fragId = {};(原为[])。clearThemingColors是唯一在其上使用.length的方法,并且没有改变。 -
我会把这个问题发给forge.help@autodesk,最好把它当作一个bug来处理。
标签: autodesk-forge autodesk-viewer