123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 |
- import { SceneGuide, 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 ".";
- import { fullView, isScenePlayRun, pauseScene, playScene } from "@/utils/full";
- // -----------------导览关联--------------------
- export const recovery = async (guide: Guide) => {
- let rFuseModels: (FuseModel & { viewShow: boolean })[];
- try {
- if (!guide.recoveryContent) {
- throw "没有recovery";
- }
- rFuseModels = JSON.parse(guide.recoveryContent);
- } catch (e) {
- return () => {};
- }
- 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++) {
- const ndx = fuseModels.value.findIndex(
- ({ modelId }) => modelId === models[i].modelId
- );
- if (~ndx) {
- Object.assign(fuseModels.value[ndx], models[i]);
- custom.showModelsMap.set(
- toRaw(fuseModels.value[ndx]),
- models[i].viewShow
- );
- } else {
- fuseModels.value.push(models[i]);
- custom.showModelsMap.set(toRaw(models[i]), models[i].viewShow);
- }
- }
- // console.log(models)
- for (let i = 0; i < fuseModels.value.length; i++) {
- const ndx = models.findIndex(
- ({ modelId }) => modelId === fuseModels.value[i].modelId
- );
- if (!~ndx) {
- fuseModels.value.splice(i, 1);
- i--;
- }
- }
- await asyncTimeout(100);
- await new Promise<void>((resolve) => {
- const stop = watchEffect(() => {
- if (fuseModelsLoaded.value) {
- setTimeout(() => stop());
- resolve();
- }
- });
- });
- };
- for (let i = 0; i < fuseModels.value.length; i++) {
- const ndx = rFuseModels.findIndex(
- ({ modelId }) => modelId === fuseModels.value[i].modelId
- );
- if (!~ndx) {
- rFuseModels.push({ ...fuseModels.value[i], viewShow: false });
- }
- }
- await setModels(rFuseModels);
- return () =>
- setModels(
- initFuseModels.map((item, i) => ({ ...item, viewShow: initViewShow[i]! }))
- );
- };
- export const playSceneGuide = (
- paths: GuidePath[],
- changeIndexCallback?: (index: number) => void,
- forceFull = false
- ) => {
- let sceneGuide: SceneGuide
- return playScene({
- create: () => {
- sceneGuide = sdk.enterSceneGuide(
- paths.map((path) => ({ ...path, ...analysisPoseInfo(path) }))
- );
- changeIndexCallback && sceneGuide.bus.on("changePoint", changeIndexCallback);
- },
- play: () => {
- sceneGuide.play();
- return new Promise((resolve) => sceneGuide.bus.on("playComplete", resolve))
- },
- pause: () => {
- console.error('pause??')
- sceneGuide.pause();
- },
- clear: () => {
- sceneGuide.clear();
- sceneGuide.bus.off("changePoint");
- }
- }, forceFull)
- }
- export const pauseSceneGuide = pauseScene
- export const isScenePlayIng = isScenePlayRun
|