问题描述
是否可以更改现有片段的材质?我看到文档中有一个changing fragment material函数,但这似乎是为了添加自定义模型,而不是操纵查看器中的现有片段。
我特别希望更改材质,以便可以操纵片段的线宽。我尝试操纵fragments
的{{1}},特别是viewer.model.getFragmentList()
及其属性(例如Viewer.model.getFragmentList().getMaterial(i)
),即使通过linewidth
更新后也是如此。 / p>
解决方法
虽然这不是官方支持的Viewer 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工程图时。我认为没有对这种定制进行很好的探索。