无法在查看器中更改元素颜色
Posted
技术标签:
【中文标题】无法在查看器中更改元素颜色【英文标题】:Unable to change element colour in Viewer 【发布时间】:2019-10-10 07:56:02 【问题描述】:为了测试 PoC,我尝试将所选元素涂成红色。为此,我创建了一个类,如下所示,但是当我选择元素时没有任何反应。我已经尝试了网络上的一些示例(包括一些为渲染代理创建网格代理并添加叠加层的示例),但没有任何效果。
如何更改给定元素的颜色(dbId
或 fragId
)?我在 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
时,整个部分元素都会从视图中消失。
哦,实际上我已修复它,我在这些元素上创建的材质存在问题,导致它们消失。我现在可以设置好的颜色了!谢谢!
但是你能帮我理解为什么设置材料不起作用吗?以上是关于无法在查看器中更改元素颜色的主要内容,如果未能解决你的问题,请参考以下文章