Чтобы проверить PoC, я пытаюсь закрасить выделенный элемент красным.Для этого я создал класс, как показано ниже, но ничего не происходит с элементами, когда я выбираю их.Я пробовал несколько примеров в Интернете (включая те, которые создают прокси-сетку для прокси рендеринга и добавляют наложение), но ничего не работает.
Как изменить цвет для данного элемента (или dbId
или fragId
)?Я не могу найти документацию по API для большей части этого в Forge 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
}
}