2016-12-20 9 views
0

Я хочу изменить материал (THREE.MeshPhongMaterial) элементов, которые были скрыты от зрителя. Скрытые элементы по умолчанию все еще видны, но я хочу изменить их прозрачность и цвет.Изменение материала скрытых элементов Autodesk Forge viewer

Вот пример кода. Я попытался изменить цвет и материал, но не удался:

viewer.hideById(dbId); 

var color = 0x0000ff; // blue color 
viewer.setThemingColor(dbId, color, viewer.model); 

var instanceTree = viewer.model.getData().instanceTree; 
var fragmentList = viewer.model.getFragmentList(); 

instanceTree.enumNodeFragments(dbId, function (fragId) { 
    fragmentList.setMaterial(fragId, new THREE.MeshPhongMaterial({ opacity: 0.5 })); 
}); 

viewer.impl.invalidate(true); 

Однако после обновления материалов скрытых элементов ничего не изменилось. Как это исправить. Я хочу, чтобы мои пользовательские скрытые элементы имели разные цвета и прозрачность.

+0

Что вы ожидаете изменить, когда элемент скрыт? свойства? –

+0

Когда элемент скрыт, я могу исключить его из выбора других элементов. Тем не менее, я хочу различного цвета и прозрачности скрытых элементов. Они все еще видны на зрителе, но имеют различный цвет и прозрачность в зависимости от их свойств. –

+0

Вы имеете в виду изменение цвета os transparent/ghost elements? потому что, когда вы их скроете, он будет полностью скрыт (нет видимого цвета/материала). –

ответ

1

С помощью средства Forge Viewer, если вы спрячете объект, как упомянул Августо, кажется, что объект будет полностью скрыт, вы не сможете настроить материал так, как хотите. Но обходной способ обмана может помочь в достижении того, что вы сделали с Three.js в http://app.netonapp.com/JavaScript/Three.js/select_inner_objects.html, вы можете выбрать внутренний объект и все еще можете видеть внешний «скрытый» объект.

Что я делал просто, в функции обратного вызова события «mousedown» первое, что я сделал, это установить внешний объект, скрытый API viewer.hideById (dbId), а затем выбрать объект для вашего средства просмотра API .impl.renderer(). idAtPixel. В этом случае он будет игнорировать скрытый объект и просто выбрать внутренний объект. И в функции события «SELECTION_CHANGED_EVENT» я добавил код viewer.show (dbid), чтобы показать внешний Объект

Таким образом, вы можете установить материал так, как вы хотите, для внешнего объекта, внешний объект будет отображаться как другие обычные объекты, но он будет просто скрыт некоторое время, когда вы попытаетесь выбрать объект. Решение кажется работающим на моей стороне, но я не тестировал его полностью, вы можете попытаться выяснить, работает ли он.

+0

Кажется, это очень умное решение. Спасибо Чжун Ву. Я проверю это. –

+0

Я получил окончательное решение. Я завершу его как новое расширение для просмотра и отправлю ответ позже. –

+0

См. Полный рабочий код на странице http://stackoverflow.com/questions/41265736/picking-under-elements-of-an-element-in-autodesk-forge-viewer/41373450#41373450 –