Мы используем Autodesk.AEC.LevelsExtension в нашем средстве просмотра моделей Revit. Но после изменения вида (или геометрии) Revit выдает ошибки.
Вот как мы реализуем 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
);
};
Как вы можете видеть, прежде чем менять вид, есть панель div
для уровней с id = "LevelsPanel-0"
:
Но после изменения вида будет добавлен еще один без закрытия предыдущей панели (как видите, предыдущая панель все еще открыта):
А если навести курсор на предыдущую открытую панель, то выдаст такие ошибки:
На самом деле я не разгружаю предыдущую модель. Я просто снова вызываю функцию loadModel
и передаю индекс геометрии, которую хочу увидеть. Должен ли я выгрузить предыдущий, чтобы избежать этой проблемы? и как мне его выгрузить?
Спасибо за ваши подробности. Я могу воспроизвести эту проблему даже без использования вашего кода. Я обратился к нашей команде инженеров за информацией. Приносим извинения за неудобства!
Вот обходной путь: мы удаляем LevelPanel перед загрузкой новой модели.
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
);
};
Извините за поздний ответ. Теперь работает без ошибок. Большое спасибо, Исон.
С вашими функциями
initViewer
иloadModel
проблем нет, но это будет зависеть от того, как вы выгружаете и загружаете новую модель.