APS (Forge) Viewer "Autodesk.AEC.LevelsExtension" error by changing a Revit model view/geometry

38 Views Asked by At

We are using Autodesk.AEC.LevelsExtension in our viewer for Revit models. But after changing a Revit view (or geometry) it throws errors.

This is how we implement LevelsExtension:

const initViewer = () => {
    return new Promise((resolve, reject) => {
        var options = {
            env: 'AutodeskProduction2',
            api: 'derivativeV2_EU',
            getAccessToken,
        };

        Autodesk.Viewing.Initializer(options, () => {
            const config = {
                extensions: [
                    'Autodesk.DocumentBrowser',
                    'Autodesk.AEC.LevelsExtension',
                ],
            };

            const container = document.getElementById('viewer');

            const viewer = new Autodesk.Viewing.GuiViewer3D(
                container,
                config
            );

            viewer.start();

            resolve(viewer);
        });
    });
};

const loadModel = (viewer, model, index) => {
    const onDocumentLoadSuccess = (doc) => {
        const geometries = doc.getRoot().search({ type: 'geometry' });

        doc.downloadAecModelData();

        viewer.loadDocumentNode(doc, geometries[index], {
            createWireframe: false,
            applyScaling: 'm',
            isAEC: true,
        });
    };

    Autodesk.Viewing.Document.load(
        'urn:' + model.urn,
        onDocumentLoadSuccess,
        onDocumentLoadFailure
    );
};

As you can see before changing the view, there is a div for Levels panel with id="LevelsPanel-0": enter image description here

But after changing the view, there will be added another one without terminating the previous panel (as you can see the previous panel is still open): enter image description here

And if you hover the previous open panel it will throw these errors: enter image description here

1

There are 1 best solutions below

1
Eason Kang On BEST ANSWER

Thanks for your details. I can reproduce this issue even without using your code. I reported to our engineering team for insights. Our apologies for the inconvenience!

Here is a workaround that we remove the levelsPanel before loading the new model.

viewer.getExtension('Autodesk.AEC.LevelsExtension').levelsPanel?.setVisible(false);
viewer.getExtension('Autodesk.AEC.LevelsExtension').levelsPanel?.container.remove();

Full code

    const loadModel = (viewer, model, index) => {
      const onDocumentLoadSuccess = async (doc) => {
        if (viewer.getExtension('Autodesk.AEC.LevelsExtension')) {
          viewer.getExtension('Autodesk.AEC.LevelsExtension').levelsPanel?.setVisible(false);
          viewer.getExtension('Autodesk.AEC.LevelsExtension').levelsPanel?.container.remove();
        }
        
        const geometries = doc.getRoot().search({ type: 'geometry' });

        doc.downloadAecModelData();

        viewer.loadDocumentNode(doc, geometries[index], {
          createWireframe: false,
          applyScaling: 'm',
          isAEC: true,
        });
      };

      onDocumentLoadFailure = (error) => console.error(error);

      Autodesk.Viewing.Document.load(
        'urn:' + model.urn,
        onDocumentLoadSuccess,
        onDocumentLoadFailure
      );
    };