Средство просмотра Forge: изменение материала фрагмента

#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-чертежей. Я не думаю, что такая настройка была изучена очень хорошо.