|
@@ -1,62 +1,48 @@
|
|
-import { sdk } from '../sdk'
|
|
|
|
-import { toRaw, ref, watch, watchEffect } from 'vue'
|
|
|
|
-import {
|
|
|
|
- viewModeStack,
|
|
|
|
- showLeftPanoStack,
|
|
|
|
- custom,
|
|
|
|
-} from '@/env'
|
|
|
|
-import {
|
|
|
|
- togetherCallback,
|
|
|
|
- asyncTimeout
|
|
|
|
-} from '@/utils'
|
|
|
|
-import {
|
|
|
|
- fuseModels,
|
|
|
|
- isEdit,
|
|
|
|
- sysBus,
|
|
|
|
- fuseModelsLoaded,
|
|
|
|
- getGuidePaths
|
|
|
|
-} from '@/store'
|
|
|
|
-
|
|
|
|
-import type { FuseModel, FuseModels, Guide, GuidePath } from '@/store'
|
|
|
|
-import { analysisPoseInfo } from '.'
|
|
|
|
|
|
+import { sdk } from "../sdk";
|
|
|
|
+import { toRaw, ref, watch, watchEffect } from "vue";
|
|
|
|
+import { viewModeStack, showLeftPanoStack, custom } from "@/env";
|
|
|
|
+import { togetherCallback, asyncTimeout } from "@/utils";
|
|
|
|
+import { fuseModels, isEdit, sysBus, fuseModelsLoaded } from "@/store";
|
|
|
|
+import type { FuseModel, FuseModels, Guide, GuidePath } from "@/store";
|
|
|
|
+import { analysisPoseInfo } from ".";
|
|
|
|
|
|
// -----------------导览关联--------------------
|
|
// -----------------导览关联--------------------
|
|
|
|
|
|
const fullView = async (fn: () => void) => {
|
|
const fullView = async (fn: () => void) => {
|
|
const popViewMode = togetherCallback([
|
|
const popViewMode = togetherCallback([
|
|
- viewModeStack.push(ref('full')),
|
|
|
|
- showLeftPanoStack.push(ref(false))
|
|
|
|
- ])
|
|
|
|
|
|
+ viewModeStack.push(ref("full")),
|
|
|
|
+ showLeftPanoStack.push(ref(false)),
|
|
|
|
+ ]);
|
|
let isFull = false;
|
|
let isFull = false;
|
|
try {
|
|
try {
|
|
- await document.documentElement.requestFullscreen()
|
|
|
|
|
|
+ await document.documentElement.requestFullscreen();
|
|
isFull = true;
|
|
isFull = true;
|
|
} catch {}
|
|
} catch {}
|
|
-
|
|
|
|
- const driving = () => document.fullscreenElement || fn()
|
|
|
|
- const stop = (ev: KeyboardEvent) => ev.key == "Escape" && fn()
|
|
|
|
|
|
+
|
|
|
|
+ const driving = () => document.fullscreenElement || fn();
|
|
|
|
+ const stop = (ev: KeyboardEvent) => ev.key == "Escape" && fn();
|
|
|
|
|
|
if (isFull) {
|
|
if (isFull) {
|
|
- document.addEventListener('fullscreenchange', driving)
|
|
|
|
- document.addEventListener('fullscreenerror', fn)
|
|
|
|
|
|
+ document.addEventListener("fullscreenchange", driving);
|
|
|
|
+ document.addEventListener("fullscreenerror", fn);
|
|
} else {
|
|
} else {
|
|
- document.addEventListener("keyup", stop)
|
|
|
|
|
|
+ document.addEventListener("keyup", stop);
|
|
}
|
|
}
|
|
|
|
|
|
return () => {
|
|
return () => {
|
|
- popViewMode()
|
|
|
|
|
|
+ popViewMode();
|
|
if (isFull) {
|
|
if (isFull) {
|
|
- document.fullscreenElement && document.exitFullscreen()
|
|
|
|
- document.removeEventListener('fullscreenchange', driving)
|
|
|
|
- document.removeEventListener('fullscreenerror', fn)
|
|
|
|
|
|
+ document.fullscreenElement && document.exitFullscreen();
|
|
|
|
+ document.removeEventListener("fullscreenchange", driving);
|
|
|
|
+ document.removeEventListener("fullscreenerror", fn);
|
|
} else {
|
|
} else {
|
|
- document.removeEventListener("keyup", stop)
|
|
|
|
|
|
+ document.removeEventListener("keyup", stop);
|
|
}
|
|
}
|
|
- }
|
|
|
|
-}
|
|
|
|
|
|
+ };
|
|
|
|
+};
|
|
|
|
|
|
export const recovery = async (guide: Guide) => {
|
|
export const recovery = async (guide: Guide) => {
|
|
- let rFuseModels: (FuseModel & {viewShow: boolean})[];
|
|
|
|
|
|
+ let rFuseModels: (FuseModel & { viewShow: boolean })[];
|
|
try {
|
|
try {
|
|
if (!guide.recoveryContent) {
|
|
if (!guide.recoveryContent) {
|
|
throw "没有recovery";
|
|
throw "没有recovery";
|
|
@@ -65,111 +51,128 @@ export const recovery = async (guide: Guide) => {
|
|
} catch (e) {
|
|
} catch (e) {
|
|
return () => {};
|
|
return () => {};
|
|
}
|
|
}
|
|
- const initFuseModels = JSON.parse(JSON.stringify(fuseModels.value)) as FuseModels;
|
|
|
|
- const initViewShow = fuseModels.value.map(item => custom.showModelsMap.get(item))
|
|
|
|
-
|
|
|
|
-
|
|
|
|
- console.error(initFuseModels, rFuseModels)
|
|
|
|
- const setModels = async (models: (FuseModel & {viewShow: boolean})[]) => {
|
|
|
|
|
|
+ const initFuseModels = JSON.parse(
|
|
|
|
+ JSON.stringify(fuseModels.value)
|
|
|
|
+ ) as FuseModels;
|
|
|
|
+ const initViewShow = fuseModels.value.map((item) =>
|
|
|
|
+ custom.showModelsMap.get(item)
|
|
|
|
+ );
|
|
|
|
+
|
|
|
|
+ const setModels = async (models: (FuseModel & { viewShow: boolean })[]) => {
|
|
for (let i = 0; i < models.length; i++) {
|
|
for (let i = 0; i < models.length; i++) {
|
|
- const ndx = fuseModels.value.findIndex(({ modelId }) => modelId === models[i].modelId);
|
|
|
|
|
|
+ const ndx = fuseModels.value.findIndex(
|
|
|
|
+ ({ modelId }) => modelId === models[i].modelId
|
|
|
|
+ );
|
|
if (~ndx) {
|
|
if (~ndx) {
|
|
Object.assign(fuseModels.value[ndx], models[i]);
|
|
Object.assign(fuseModels.value[ndx], models[i]);
|
|
- custom.showModelsMap.set(toRaw(fuseModels.value[ndx]), models[i].viewShow)
|
|
|
|
|
|
+ custom.showModelsMap.set(
|
|
|
|
+ toRaw(fuseModels.value[ndx]),
|
|
|
|
+ models[i].viewShow
|
|
|
|
+ );
|
|
} else {
|
|
} else {
|
|
fuseModels.value.push(models[i]);
|
|
fuseModels.value.push(models[i]);
|
|
- custom.showModelsMap.set(toRaw(models[i]), models[i].viewShow)
|
|
|
|
|
|
+ custom.showModelsMap.set(toRaw(models[i]), models[i].viewShow);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
// console.log(models)
|
|
// console.log(models)
|
|
for (let i = 0; i < fuseModels.value.length; i++) {
|
|
for (let i = 0; i < fuseModels.value.length; i++) {
|
|
- const ndx = models.findIndex(({ modelId }) => modelId === fuseModels.value[i].modelId);
|
|
|
|
|
|
+ const ndx = models.findIndex(
|
|
|
|
+ ({ modelId }) => modelId === fuseModels.value[i].modelId
|
|
|
|
+ );
|
|
if (!~ndx) {
|
|
if (!~ndx) {
|
|
fuseModels.value.splice(i, 1);
|
|
fuseModels.value.splice(i, 1);
|
|
- i--
|
|
|
|
|
|
+ i--;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
- await asyncTimeout(100)
|
|
|
|
|
|
+ await asyncTimeout(100);
|
|
await new Promise<void>((resolve) => {
|
|
await new Promise<void>((resolve) => {
|
|
const stop = watchEffect(() => {
|
|
const stop = watchEffect(() => {
|
|
if (fuseModelsLoaded.value) {
|
|
if (fuseModelsLoaded.value) {
|
|
- setTimeout(() => stop())
|
|
|
|
- resolve()
|
|
|
|
|
|
+ setTimeout(() => stop());
|
|
|
|
+ resolve();
|
|
}
|
|
}
|
|
- })
|
|
|
|
- })
|
|
|
|
|
|
+ });
|
|
|
|
+ });
|
|
};
|
|
};
|
|
-
|
|
|
|
-
|
|
|
|
|
|
+
|
|
for (let i = 0; i < fuseModels.value.length; i++) {
|
|
for (let i = 0; i < fuseModels.value.length; i++) {
|
|
- const ndx = rFuseModels.findIndex(({ modelId }) => modelId === fuseModels.value[i].modelId);
|
|
|
|
|
|
+ const ndx = rFuseModels.findIndex(
|
|
|
|
+ ({ modelId }) => modelId === fuseModels.value[i].modelId
|
|
|
|
+ );
|
|
if (!~ndx) {
|
|
if (!~ndx) {
|
|
- rFuseModels.push({...fuseModels.value[i], viewShow: false})
|
|
|
|
|
|
+ rFuseModels.push({ ...fuseModels.value[i], viewShow: false });
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
await setModels(rFuseModels);
|
|
await setModels(rFuseModels);
|
|
- return () =>
|
|
|
|
- setModels(initFuseModels.map((item, i) => ({...item, viewShow: initViewShow[i]!})));
|
|
|
|
-
|
|
|
|
|
|
+ return () =>
|
|
|
|
+ setModels(
|
|
|
|
+ initFuseModels.map((item, i) => ({ ...item, viewShow: initViewShow[i]! }))
|
|
|
|
+ );
|
|
};
|
|
};
|
|
|
|
|
|
export enum ScenePlayIngEnum {
|
|
export enum ScenePlayIngEnum {
|
|
ing = 1,
|
|
ing = 1,
|
|
stop = 0,
|
|
stop = 0,
|
|
- ready = 2
|
|
|
|
|
|
+ ready = 2,
|
|
}
|
|
}
|
|
-export const isScenePlayIng = ref<ScenePlayIngEnum>(ScenePlayIngEnum.stop)
|
|
|
|
-let pauseRecovery: () => void
|
|
|
|
-export const playSceneGuide = async (paths: GuidePath[], changeIndexCallback?: (index: number) => void, forceFull = false) => {
|
|
|
|
|
|
+export const isScenePlayIng = ref<ScenePlayIngEnum>(ScenePlayIngEnum.stop);
|
|
|
|
+let pauseRecovery: () => void;
|
|
|
|
+export const playSceneGuide = async (
|
|
|
|
+ paths: GuidePath[],
|
|
|
|
+ changeIndexCallback?: (index: number) => void,
|
|
|
|
+ forceFull = false
|
|
|
|
+) => {
|
|
if (isScenePlayIng.value) {
|
|
if (isScenePlayIng.value) {
|
|
- throw new Error('导览正在播放')
|
|
|
|
|
|
+ throw new Error("导览正在播放");
|
|
}
|
|
}
|
|
- isScenePlayIng.value = ScenePlayIngEnum.ready
|
|
|
|
|
|
+ isScenePlayIng.value = ScenePlayIngEnum.ready;
|
|
// pauseRecovery = await recovery(guide)
|
|
// pauseRecovery = await recovery(guide)
|
|
- isScenePlayIng.value = ScenePlayIngEnum.ing
|
|
|
|
|
|
+ isScenePlayIng.value = ScenePlayIngEnum.ing;
|
|
|
|
|
|
- const sceneGuide = sdk.enterSceneGuide(paths.map(path => ({ ...path, ...analysisPoseInfo(path)})))
|
|
|
|
|
|
+ const sceneGuide = sdk.enterSceneGuide(
|
|
|
|
+ paths.map((path) => ({ ...path, ...analysisPoseInfo(path) }))
|
|
|
|
+ );
|
|
|
|
|
|
- changeIndexCallback && sceneGuide.bus.on('changePoint', changeIndexCallback)
|
|
|
|
|
|
+ changeIndexCallback && sceneGuide.bus.on("changePoint", changeIndexCallback);
|
|
|
|
|
|
- const quitHandler = pauseSceneGuide
|
|
|
|
- const clearHandler = !forceFull && isEdit.value ? null : await fullView(quitHandler)
|
|
|
|
|
|
+ const quitHandler = pauseSceneGuide;
|
|
|
|
+ const clearHandler =
|
|
|
|
+ !forceFull && isEdit.value ? null : await fullView(quitHandler);
|
|
if (!clearHandler) {
|
|
if (!clearHandler) {
|
|
- sysBus.on('leave', quitHandler, { last: true })
|
|
|
|
- sysBus.on('save', quitHandler, { last: true })
|
|
|
|
|
|
+ sysBus.on("leave", quitHandler, { last: true });
|
|
|
|
+ sysBus.on("save", quitHandler, { last: true });
|
|
}
|
|
}
|
|
|
|
|
|
- sceneGuide.play()
|
|
|
|
|
|
+ sceneGuide.play();
|
|
const reces = [
|
|
const reces = [
|
|
- new Promise(resolve => sceneGuide.bus.on('playComplete', resolve)),
|
|
|
|
- new Promise<void>(resolve => {
|
|
|
|
|
|
+ new Promise((resolve) => sceneGuide.bus.on("playComplete", resolve)),
|
|
|
|
+ new Promise<void>((resolve) => {
|
|
const stop = watch(isScenePlayIng, () => {
|
|
const stop = watch(isScenePlayIng, () => {
|
|
if (!isScenePlayIng.value) {
|
|
if (!isScenePlayIng.value) {
|
|
- resolve()
|
|
|
|
- sceneGuide.pause()
|
|
|
|
- stop()
|
|
|
|
|
|
+ resolve();
|
|
|
|
+ sceneGuide.pause();
|
|
|
|
+ stop();
|
|
}
|
|
}
|
|
- })
|
|
|
|
|
|
+ });
|
|
}),
|
|
}),
|
|
- ]
|
|
|
|
|
|
+ ];
|
|
|
|
+
|
|
|
|
+ await Promise.race(reces);
|
|
|
|
+ pauseSceneGuide();
|
|
|
|
|
|
- await Promise.race(reces)
|
|
|
|
- pauseSceneGuide()
|
|
|
|
-
|
|
|
|
if (clearHandler) {
|
|
if (clearHandler) {
|
|
- clearHandler()
|
|
|
|
|
|
+ clearHandler();
|
|
} else {
|
|
} else {
|
|
- sysBus.off('leave', quitHandler)
|
|
|
|
- sysBus.off('save', quitHandler)
|
|
|
|
|
|
+ sysBus.off("leave", quitHandler);
|
|
|
|
+ sysBus.off("save", quitHandler);
|
|
}
|
|
}
|
|
- sceneGuide.clear()
|
|
|
|
- sceneGuide.bus.off('changePoint')
|
|
|
|
-}
|
|
|
|
|
|
+ sceneGuide.clear();
|
|
|
|
+ sceneGuide.bus.off("changePoint");
|
|
|
|
+};
|
|
|
|
|
|
export const pauseSceneGuide = () => {
|
|
export const pauseSceneGuide = () => {
|
|
- isScenePlayIng.value = ScenePlayIngEnum.stop
|
|
|
|
- pauseRecovery && pauseRecovery()
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
|
|
+ isScenePlayIng.value = ScenePlayIngEnum.stop;
|
|
|
|
+ pauseRecovery && pauseRecovery();
|
|
|
|
+};
|