Агрегирование модели: расширения (выделение) не работают после loadDocumentNode - PullRequest
0 голосов
/ 30 января 2020

Я загружаю дополнительную модель, используя Viewer3D.loadDocumentNode (API v7), используя приведенный ниже код, который прекрасно работает. Однако у меня есть две проблемы:

Autodesk.Viewing.Document.load(`urn:${myURN}`, (doc) => {
                var viewables = doc.getRoot().getDefaultGeometry();
                viewer.loadDocumentNode(doc, viewables,{
                    placementTransform: (new THREE.Matrix4()).setPosition({x:0,y:0,z:0}),
                    keepCurrentModels: true,
                    globalOffset: {x:0,y:0,z:0}

                })
                .then( onLoadFinished );
            });

1-й выпуск : мое расширение, которое ожидает SELECTION_CHANGED_EVENT, больше не запускается после загрузки агрегированной модели.

load() {
    this.onSelectionBinded = this.onSelectionEvent.bind(this);
    this.viewer.addEventListener(Autodesk.Viewing.SELECTION_CHANGED_EVENT, this.onSelectionBinded);
    console.log('ReactToEvents has been loaded');
    return true;
}

пример взят из https://forge.autodesk.com/en/docs/viewer/v7/developers_guide/viewer_basics/events/

2-й выпуск : другое расширение, которое анализирует выбранные элементы, не учитывает выбранные элементы в агрегированной модели (количество выборок = 0)

onToolbarCreated() {
    // Create a new toolbar group if it doesn't exist
    this._group = this.viewer.toolbar.getControl('allMyAwesomeExtensionsToolbar');
    if (!this._group) {
        this._group = new Autodesk.Viewing.UI.ControlGroup('allMyAwesomeExtensionsToolbar');
        this.viewer.toolbar.addControl(this._group);
    }

    // Add a new button to the toolbar group
    this._button = new Autodesk.Viewing.UI.Button('handleSelectionExtensionButton');
    this._button.onClick = (ev) => {
        // Get current selection
        const selection = this.viewer.getSelection();
        this.viewer.clearSelection();
        // Anything selected?
        console.log("Clicked handleSelectionExtensionButton: ", selection.length);
        if (selection.length > 0) { ... }
    }
}

Почему-то this.viewer.getSelection(); игнорирует то, что исходит от loadDocumentNode().

Я пытался выгрузить / перегрузить расширения, но он все равно не будет работать.

Любая помощь очень ценится!

1 Ответ

1 голос
/ 30 января 2020

Поддержка загрузки нескольких моделей была добавлена ​​позже, и для предотвращения нарушения обратной совместимости разработчики добавили новые API и имена событий, которые следует использовать в мультимодельном сценарии ios. Найдите методы и события со словом «агрегат» в них, например, getAggregateSelection , Autodesk.Viewing.AGGREGATE_SELECTION_CHANGED_EVENT или Autodesk.Viewing.AGGREGATE_FIT_TO_VIEW_EVENT.

...