我在模型中有一些圆形元素。当尝试用model.setThemingColor(dbId, color, true);
给那些元素上色时,元素的阴影变得很糟糕,对象很难理解。
那么我要解决的问题是2个不同的问题:
model.setThemingColor(dbId, color, true);
上方使用对象的常规阴影来获得阴影等?我已经尝试过同时使用加载选项isAEC: true
和viewer.setDisplayEdges(true)
了,但是没有运气。
我感谢任何可能将我推向正确方向的建议。
答案 0 :(得分:0)
我相信 setThemingColor 与自定义的网格设置一起使用时会忽略轮廓效果。我认为 setMaterial 可能有用。实际上,它通常用于定义自定义纹理或透明度。
我认为下面的代码可能是一种解决方法,但是在我的测试中,它不适用于某些模型。当它起作用时,效果就像附加的图像。我正在与团队核实,并将相应地更新答案。
//select an object
var sel = NOP_VIEWER.getSelection()
console.log('sel Id:'+sel[0])
var tree = NOP_VIEWER.model.getInstanceTree()
tree.enumNodeFragments(sel[0], (fragId) =>{
console.log('fragId:'+fragId)
var updatedM = null
var cloneM_name = 'model:'+ NOP_VIEWER.model.id.toString() + '|frag:' + fragId.toString();
console.log('cloneM_name:'+ cloneM_name)
if(cloneM_name in NOP_VIEWER.impl.matman()._materials)
{
updatedM = NOP_VIEWER.impl.matman()._materials[cloneM_name]
updatedM.color = new THREE.Color(1,1,0) //my color
updatedM.needsUpdate = true;
}else{
console.log('add new material:'+ cloneM_name)
updatedM = NOP_VIEWER.model.getFragmentList().getMaterial(fragId).clone();
updatedM.color = new THREE.Color(1,1,0) //my color
updatedM.needsUpdate = true;
//add new material for this fragment
NOP_VIEWER.impl.matman().addMaterial(cloneM_name,updatedM,true)
}
NOP_VIEWER.model.getFragmentList().setMaterial(fragId,updatedM)
NOP_VIEWER.impl.invalidate(true,true,false)
})