Затенение круглых объектов после 'model.setThemingColor (dbId, color, true)' - PullRequest
0 голосов
/ 28 мая 2020

У меня в модели есть круглые элементы. При попытке раскрасить их с помощью model.setThemingColor(dbId, color, true); затемнение элементов становится довольно плохим, и объект становится трудным для понимания. Objects with standard color Objects after setThemingColor

Мой вопрос для исправления - это 2 разных вопроса:

  • Можно ли использовать нормальное затенение объектов поверх model.setThemingColor(dbId, color, true);, чтобы по-прежнему были тени и т.д. c.?
  • Можно ли установить допуск, когда края должны быть нарисованы между гранями? Я предполагаю, что это основано на допуске на угол сома, чтобы избежать слишком большого количества краев в модели.

Я уже пробовал безуспешно использовать оба варианта загрузки isAEC: true и viewer.setDisplayEdges(true).

Я ценю любой совет, который может sh меня направить в правильном направлении.

1 Ответ

0 голосов
/ 01 июня 2020

Я бы поверил, что 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)
 })

enter image description here

...