瀏覽代碼

对接测量接口

bill 3 年之前
父節點
當前提交
eedfd72aac
共有 3 個文件被更改,包括 30 次插入13 次删除
  1. 20 11
      src/sdk/association.ts
  2. 6 0
      src/store/measure.ts
  3. 4 2
      src/views/measure/edit.vue

+ 20 - 11
src/sdk/association.ts

@@ -1,5 +1,5 @@
 import { sdk } from './sdk'
-import { toRaw, ref, watch, nextTick } from 'vue'
+import { toRaw, ref, watch, nextTick, watchEffect } from 'vue'
 import { 
   viewModeStack, 
   showLeftPanoStack, 
@@ -26,7 +26,8 @@ import {
   SceneType,
   backupFuseModels,
   MeasureType,
-  measures
+  measures,
+  fuseModelsLoaded
 } from '@/store'
 
 import TaggingComponent from '@/components/tagging/list.vue'
@@ -199,17 +200,19 @@ const associationTaggings = (el: HTMLDivElement) => {
 
 // -----------------测量关联--------------------
 
-const sceneMeasureMap = new WeakMap<Measure , SceneMeasure>()
+const sceneMeasureMap = new Map<Measure , SceneMeasure>()
 export const getSceneMeasure = (measure?: Measure | null) => measure && sceneMeasureMap.get(toRaw(measure))
 
 export const associationMessaure = <T extends MeasureType>(smMeasure: SceneMeasure<T>, measure: Measure<T>) => {
   smMeasure.bus.on('update', ([points, modelIds]) => {
     unSet(() => {
       measure.positions = points.map((point, i) => ({ point, modelId: modelIds[i] }))
-      measure.desc = measure.type === MeasureType.area
-        ? (smMeasure as unknown as SceneMeasure<MeasureType.area>).getArea().value.toString()
-        : (smMeasure as unknown as SceneMeasure<MeasureType.free>).getDistance().value.toString()
-      console.log('===>', (smMeasure as unknown as SceneMeasure<MeasureType.free>).getDistance())
+      console.log('update messaure', measure.positions)
+      const length = measure.type === MeasureType.area
+      ? (smMeasure as unknown as SceneMeasure<MeasureType.area>).getArea()
+      : (smMeasure as unknown as SceneMeasure<MeasureType.free>).getDistance()
+
+      measure.desc = round(length.value, 2).toString()
     })
   })
 
@@ -224,11 +227,11 @@ const associationMessaures = (sdk: SDK) => {
     for (const item of added) {
       const sceneMeasure = sdk.drawMeasure(
         item.type, 
-        item.positions.map(position => position.point),
+        item.positions.map(position => ({...position.point})),
         item.positions.map(position => position.modelId),
       )
       associationMessaure(sceneMeasure, item)
-      sceneMeasureMap.set(item, sceneMeasure)
+      sceneMeasureMap.set(toRaw(item), sceneMeasure)
     }
     for (const item of deleted) {
       const sceneMeasure = getSceneMeasure(item)
@@ -331,6 +334,12 @@ export const pauseSceneGuide = () => isScenePlayIng.value = false
 
 export const setupAssociation = (mountEl: HTMLDivElement) => {
   associationModels(sdk)
-  associationTaggings(mountEl)
-  associationMessaures(sdk)
+
+  const stopWatch = watchEffect(() => {
+    if (fuseModelsLoaded.value) {
+      associationTaggings(mountEl)
+      associationMessaures(sdk)
+      stopWatch()
+    }
+  })
 }

+ 6 - 0
src/store/measure.ts

@@ -3,6 +3,7 @@ import { fuseModels } from './fuse-model'
 import { createTemploraryID, autoSetModeCallback } from './sys'
 import { 
   addStoreItem, 
+  deepIsRevise, 
   deleteStoreItem, 
   fetchStoreItems, 
   recoverStoreItems, 
@@ -63,6 +64,11 @@ export const saveMeasures = saveStoreItems(
   }
 )
 export const autoSaveMeasures = autoSetModeCallback(measures, {
+  isUpdate: (newMeasure) => 
+    deepIsRevise(
+      newMeasure.map(item => ({...item, selected: false})),
+      getBackupMeasures().map(item => ({...item, selected: false}))
+    ),
   backup: backupMeasures,
   recovery: recoverMeasures,
   save: saveMeasures

+ 4 - 2
src/views/measure/edit.vue

@@ -3,7 +3,7 @@
 </template>
 
 <script lang="ts" setup>
-import { ref, reactive, watch } from 'vue'
+import { ref, reactive } from 'vue'
 import { enterEdit, enterOld, sysBus, giveupLeave, MeasureType } from '@/store'
 import { useViewStack } from '@/hook'
 import { togetherCallback } from '@/utils'
@@ -24,12 +24,14 @@ const modelMeasure = sdk.startMeasure(measure.type)
 associationMessaure(modelMeasure, measure)
 modelMeasure.bus.on('cancel', giveupLeave)
 modelMeasure.bus.on('invalidPoint', Message.error)
+modelMeasure.bus.on('submit', () => {
+  enterOld()
+})
 
 enterEdit(() => {
   emit('close')
   modelMeasure.destroy()
 })
-watch(measure, () => enterOld(), { deep: true })
 sysBus.on('save', () => emit('submit', measure), { pre: true })