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"
:
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):
And if you hover the previous open panel it will throw these errors:
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();
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
);
};