import { nextTick, ref, toRaw, watchEffect } from "vue" import {Pose, SceneModel, sdk, SDK } from "../sdk" import { associationModels, sceneModelMap } from "./fuseMode" import { FuseModel, fuseModelsLoaded, GuidePath, setting } from "@/store" import { associationTaggings } from "./tagging" import { associationSetting } from "./setting" import { associationMessaures } from "./measure" export const getSupperPanoModel = () => { const supperModel = ref(null); sdk.sceneBus.on("cameraChange", () => { const data = sdk.canTurnToPanoMode(); if (data?.model) { for (const [f, s] of sceneModelMap.entries()) { if (toRaw(data.model) === toRaw(s)) { supperModel.value = f; return; } } } supperModel.value = null; }); return supperModel; }; export const analysisPose = (pose: Pose) => { if ('model' in pose && pose.model) { let info: GuidePath['panoInfo'] | undefined = undefined let fuseMode: FuseModel for (const [k, v] of Array.from(sceneModelMap.entries())) { if (toRaw(v) === toRaw(pose.model)) { fuseMode = toRaw(k) } } if (fuseMode!) { info = { panoId: pose.panoId, modelId: fuseMode.id, posInModel: pose.posInModel, rotInModel: pose.rotInModel } return { position: pose.position, target: pose.target, panoInfo: info } } } return pose } export const analysisPoseInfo = (info: ReturnType) => { let pose: Pose = { target: info.target, position: info.position } if ('panoInfo' in info && info.panoInfo) { let sceneModel: SceneModel for (const [k, v] of Array.from(sceneModelMap.entries())) { if (k.id === info.panoInfo.modelId) { sceneModel = toRaw(v) } } if (sceneModel!) { pose = { ...pose, model: sceneModel, panoId: info.panoInfo.panoId, posInModel: info.panoInfo.posInModel, rotInModel: info.panoInfo.rotInModel, } } } return pose } export const setupAssociation = (mountEl: HTMLDivElement, sdk: SDK) => { associationModels(sdk) const stopWatch = watchEffect(() => { if (fuseModelsLoaded.value && setting.value) { associationTaggings(sdk, mountEl) associationMessaures(sdk) associationSetting(sdk, mountEl) nextTick(() => stopWatch()) } }) } export * from './fuseMode' export * from './guide' export * from './measure' export * from './setting' export * from './tagging'