Я бы поверил, что setThemingColor идет с индивидуальной настройкой me sh, которая игнорирует эффект контура. Я думаю, что 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)
})