Невозможно изменить цвет элемента в средстве просмотра - PullRequest
0 голосов
/ 23 мая 2019

Чтобы проверить 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
    }
}

1 Ответ

0 голосов
/ 24 мая 2019

Попробуйте 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

EDIT:

Смотрите живой пример здесь

...