index.ts 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. import { nextTick, ref, toRaw, watchEffect } from "vue"
  2. import {Pose, SceneModel, sdk, SDK } from "../sdk"
  3. import { associationModels, sceneModelMap } from "./fuseMode"
  4. import { FuseModel, fuseModelsLoaded, GuidePath, setting } from "@/store"
  5. import { associationTaggings } from "./tagging"
  6. import { associationSetting } from "./setting"
  7. import { associationMessaures } from "./measure"
  8. export const getSupperPanoModel = () => {
  9. const supperModel = ref<FuseModel | null>(null);
  10. sdk.sceneBus.on("cameraChange", () => {
  11. const data = sdk.canTurnToPanoMode();
  12. if (data?.model) {
  13. for (const [f, s] of sceneModelMap.entries()) {
  14. if (toRaw(data.model) === toRaw(s)) {
  15. supperModel.value = f;
  16. return;
  17. }
  18. }
  19. }
  20. supperModel.value = null;
  21. });
  22. return supperModel;
  23. };
  24. export const analysisPose = (pose: Pose) => {
  25. if ('model' in pose) {
  26. let info: GuidePath['panoInfo'] | undefined = undefined
  27. let fuseMode: FuseModel
  28. for (const [k, v] of Array.from(sceneModelMap.entries())) {
  29. if (toRaw(v) === toRaw(pose.model)) {
  30. fuseMode = toRaw(k)
  31. }
  32. }
  33. if (fuseMode!) {
  34. info = {
  35. panoId: pose.panoId,
  36. modelId: fuseMode.id,
  37. posInModel: pose.posInModel,
  38. rotInModel: pose.rotInModel
  39. }
  40. return {
  41. position: pose.position,
  42. target: pose.target,
  43. panoInfo: info
  44. }
  45. }
  46. }
  47. return pose
  48. }
  49. export const analysisPoseInfo = (info: ReturnType<typeof analysisPose>) => {
  50. let pose: Pose = { target: info.target, position: info.position }
  51. if ('panoInfo' in info) {
  52. let sceneModel: SceneModel
  53. for (const [k, v] of Array.from(sceneModelMap.entries())) {
  54. if (k.id === info.panoInfo.modelId) {
  55. sceneModel = toRaw(v)
  56. }
  57. }
  58. if (sceneModel!) {
  59. pose = {
  60. ...pose,
  61. model: sceneModel,
  62. panoId: info.panoInfo.panoId,
  63. posInModel: info.panoInfo.posInModel,
  64. rotInModel: info.panoInfo.rotInModel,
  65. }
  66. }
  67. }
  68. return pose
  69. }
  70. export const setupAssociation = (mountEl: HTMLDivElement, sdk: SDK) => {
  71. associationModels(sdk)
  72. const stopWatch = watchEffect(() => {
  73. if (fuseModelsLoaded.value && setting.value) {
  74. associationTaggings(sdk, mountEl)
  75. associationMessaures(sdk)
  76. associationSetting(sdk, mountEl)
  77. nextTick(() => stopWatch())
  78. }
  79. })
  80. }
  81. export * from './fuseMode'
  82. export * from './guide'
  83. export * from './measure'
  84. export * from './setting'
  85. export * from './tagging'