#autodesk-forge
#autodesk-forge
Вопрос:
Есть ли способ изменить материал существующего фрагмента? Я вижу, что в документации есть функция изменения материала фрагмента, но, похоже, она предназначена для добавления пользовательских моделей, а не для манипулирования существующими фрагментами в средстве просмотра.
Я специально хочу изменить материал, чтобы я мог манипулировать шириной строки фрагмента. Я пытался манипулировать fragments
of viewer.model.getFragmentList()
, в частности Viewer.model.getFragmentList().getMaterial(i)
, и его свойствами (такими как linewidth
), но безрезультатно, даже после обновления через viewer.impl.invalidate
Ответ №1:
Хотя это не входит в официально поддерживаемые API-интерфейсы просмотра, вы можете изменить материал существующих фрагментов, используя setMaterial
метод списка фрагментов, например, так:
function changeSelectedObjects(viewer, customMaterial) {
const materialManager = viewer.impl.matman();
materialManager.addMaterial('myCustomMaterial', customMaterial, true /* skip material heuristics */);
const model = viewer.model;
model.unconsolidate(); // If the model is consolidated, material changes won't have any effect
const tree = model.getInstanceTree();
const frags = model.getFragmentList();
const dbids = viewer.getSelection();
for (const dbid of dbids) {
tree.enumNodeFragments(dbid, (fragid) => {
frags.setMaterial(fragid, customMaterial);
});
}
}
См. https://forge.autodesk.com/blog/custom-shader-materials-forge-viewer для более конкретного примера.
С учетом сказанного, изменение ширины линии может быть сложнее, особенно если речь идет об изменении 2D-чертежей. Я не думаю, что такая настройка была изучена очень хорошо.