diff --git a/frontend/dcViewer.js b/frontend/dcViewer.js
index ee9f525..c417787 100644
--- a/frontend/dcViewer.js
+++ b/frontend/dcViewer.js
@@ -318,6 +318,7 @@ let modelVersionHistory = null;
let modelVersionHistoryLoading = false;
let modelVersionUploading = false;
let versionHistoryModal = null;
+let loadModelAsyncRef = null;
let emptyWheelNavigationRestoreTimer = null;
let lastSurfaceDollyFactor = null;
let lastSurfaceDollyFactorAt = 0;
@@ -4864,6 +4865,10 @@ const refreshModelVersionHistory = async ({ silent = false } = {}) => {
};
const openModelVersion = async (version) => {
+ if (!loadModelAsyncRef) {
+ showError("Загрузчик модели еще не готов");
+ return;
+ }
const viewerSrc = getVersionViewerSrc(version);
const viewerType = getVersionViewerType(version);
if (!viewerSrc || !viewerType) {
@@ -4886,25 +4891,33 @@ const openModelVersion = async (version) => {
artifactSrc: normalizeModelSettingsSrc(viewerSrc) || viewerSrc,
viewerSettings: null,
};
- const settings = await fetchModelSettings(settingsSrc).catch(() => null);
- if (settings?.viewerSettings) {
- meta.viewerSettings = settings.viewerSettings;
+ try {
+ const settings = await fetchModelSettings(settingsSrc).catch(() => null);
+ if (settings?.viewerSettings) {
+ meta.viewerSettings = settings.viewerSettings;
+ }
+ await loadModelAsyncRef({
+ type: viewerType,
+ url: viewerSrc,
+ name: version.originalFilename || previousEntry?.name || "model",
+ replace: true,
+ preserveMeta: true,
+ id: previousEntry?.model?.id || "model",
+ meta,
+ });
+ modelVersionHistory = {
+ ...(modelVersionHistory || {}),
+ currentVersion: version.version || modelVersionHistory?.currentVersion || null,
+ currentVersionId: version.versionId || modelVersionHistory?.currentVersionId || null,
+ versions: modelVersionHistory?.versions || meta.versions || [],
+ };
+ updateModelVersionControl();
+ setStatus(`Открыта версия v${version.version || ""}`.trim());
+ } catch (err) {
+ console.error(err);
+ showError(err.message || "Не удалось открыть версию модели");
+ updateModelVersionControl();
}
- await loadModelAsync({
- type: viewerType,
- url: viewerSrc,
- name: version.originalFilename || previousEntry?.name || "model",
- replace: true,
- id: previousEntry?.model?.id || "model",
- meta,
- });
- modelVersionHistory = {
- ...(modelVersionHistory || {}),
- currentVersion: version.version || modelVersionHistory?.currentVersion || null,
- currentVersionId: version.versionId || modelVersionHistory?.currentVersionId || null,
- versions: modelVersionHistory?.versions || meta.versions || [],
- };
- updateModelVersionControl();
};
const uploadModelVersion = async (file) => {
@@ -6051,7 +6064,7 @@ const initViewer = async () => {
const loadModel = (options) => {
const debugOptions = options || {};
try {
- const { type, url, name = "", replace = true, id: forcedId, meta, edges } = options;
+ const { type, url, name = "", replace = true, id: forcedId, meta, edges, preserveMeta = false } = options;
const modelSettings = meta?.viewerSettings;
const normalizedType = normalizeType(type, typeof url === "string" ? url : "");
const inferredType = normalizedType || normalizeType(guessTypeFromName(typeof url === "string" ? url : ""));
@@ -6062,7 +6075,7 @@ const initViewer = async () => {
}
if (replace) {
- destroyAllModels({ preserveMeta: isLoadingSavedProject });
+ destroyAllModels({ preserveMeta: preserveMeta || isLoadingSavedProject });
}
if (modelSettings) {
@@ -6215,6 +6228,7 @@ const initViewer = async () => {
model.on("loaded", () => resolve(model));
model.on("error", (err) => reject(new Error(err?.message || err)));
});
+ loadModelAsyncRef = loadModelAsync;
const loadStartupModelFromQuery = async () => {
const params = new URLSearchParams(window.location.search);
diff --git a/frontend/index.html b/frontend/index.html
index 838cd6b..f802211 100644
--- a/frontend/index.html
+++ b/frontend/index.html
@@ -697,6 +697,6 @@
-
+