无法在查看器中更改元素颜色

Posted

技术标签:

【中文标题】无法在查看器中更改元素颜色【英文标题】:Unable to change element colour in Viewer 【发布时间】:2019-10-10 07:56:02 【问题描述】:

为了测试 PoC,我尝试将所选元素涂成红色。为此,我创建了一个类,如下所示,但是当我选择元素时没有任何反应。我已经尝试了网络上的一些示例(包括一些为渲染代理创建网格代理并添加叠加层的示例),但没有任何效果。

如何更改给定元素的颜色(dbIdfragId)?我在 Forge API 中找不到大部分的 API 文档,所以我有点盲目。

/* global Autodesk */

import * as three from "three";
import * as uuid from "uuid";

type SelectionChangedEvent = 
    fragIdsArray: number[];
    dbIdArray: number[];
    nodeArray: number[];
    model: object;
;

export default class ViewerInteractionHandler 
    viewer: Autodesk.Viewing.Private.GuiViewer3D;
    material: THREE.Material;

    constructor(viewer: Autodesk.Viewing.Private.GuiViewer3D) 
        this.viewer = viewer;
        viewer.addEventListener(
            Autodesk.Viewing.SELECTION_CHANGED_EVENT,
            (e) => this.handleSelectionChange(e)
        );
        this.material = new three.MeshStandardMaterial(
            name: "CustomMaterial",
            color: 0xFF0000,
        );

        this.viewer.impl.matman().addMaterial(uuid(), this.material, true);
    

    async handleSelectionChange(event: SelectionChangedEvent): Promise<void> 
        this.changeMaterialsForFragments(event.fragIdsArray);
    

    changeMaterialsForFragments(fragIdsArray: number[]) 
        fragIdsArray.map((fragId) => 
            this.viewer.model.getFragmentList().setMaterial(fragId, this.material);
        );
        this.viewer.impl.invalidate(true);
        this.viewer.impl.sceneUpdated(true); // not sure which it is, trying both
    

【问题讨论】:

【参考方案1】:

试试viewer.setThemingColor - 请参阅文档 [此处] (https://autodeskviewer.com/viewers/latest/docs/Autodesk.Viewing.Viewer3D.html):

viewer.setThemingColor( dbId, color:THREE.Vector4, [, model [, recursive:boolean ] ] ) //starting from Viewer v6.3 you may recursively apply color to child nodes

要删除它们,请尝试viewer.clearThemingColors

编辑:

查看实时示例here

【讨论】:

查看编辑 - 您是否在浏览器控制台中看到任何错误消息? 该示例在我的浏览器中运行良好,并且我能够使用它,但在我的查看示例中这根本不起作用。模型会不会有问题?我什至尝试过使用 Forge 演练中提供的示例 rvt 模型。 好的,所以实际上我意识到我错过了 new 的实例化 Vector4,这很尴尬,所以现在 发生了一些事情,但发生的事情是当我在单个 dbId 上使用 setThemingColor 时,整个部分元素都会从视图中消失。 哦,实际上我已修复它,我在这些元素上创建的材质存在问题,导致它们消失。我现在可以设置好的颜色了!谢谢! 但是你能帮我理解为什么设置材料不起作用吗?

以上是关于无法在查看器中更改元素颜色的主要内容,如果未能解决你的问题,请参考以下文章

使用嵌入、对象或 iframe 方法更改 PDF 查看器中的背景颜色

在 Autodesk Forge 查看器中的元素下拾取

更改 Autodesk Forge 查看器隐藏元素的材质

在 Forge 查看器中从 Revit 模型重建对象组

在伪造查看器中仅呈现模型的少数元素

无法读取未定义的属性“enumNodeFragments”