Forge Viewer:更改片段材质

问题描述

是否可以更改现有片段的材质?我看到文档中有一个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工程图时。我认为没有对这种定制进行很好的探索。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...