Ver código fonte

去除服务器保存测量长度

bill 3 anos atrás
pai
commit
d4a675c44e
2 arquivos alterados com 23 adições e 21 exclusões
  1. 11 18
      src/sdk/association.ts
  2. 12 3
      src/views/measure/sign.vue

+ 11 - 18
src/sdk/association.ts

@@ -1,5 +1,5 @@
 import { sdk } from './sdk'
-import { toRaw, ref, watch, nextTick, watchEffect } from 'vue'
+import { toRaw, ref, watch, nextTick, watchEffect, reactive } from 'vue'
 import { 
   viewModeStack, 
   showLeftPanoStack, 
@@ -58,7 +58,7 @@ export const modelRange: ModelAttrRange  = {
   scaleRange: { min: 0, max: 200, step: 0.1 }
 }
 
-const sceneModelMap = new WeakMap<FuseModel, SceneModel>()
+const sceneModelMap = reactive(new WeakMap<FuseModel, SceneModel>())
 export const getSceneModel = (model?: FuseModel | null) => model && sceneModelMap.get(toRaw(model))
 
 const associationModels = (sdk: SDK) => {
@@ -223,29 +223,22 @@ const associationTaggings = (el: HTMLDivElement) => {
 
 // -----------------测量关联--------------------
 
-const sceneMeasureMap = new WeakMap<Measure , SceneMeasure>()
+const sceneMeasureMap = reactive(new WeakMap<Measure , SceneMeasure>())
 export const getSceneMeasure = (measure?: Measure | null) => measure && sceneMeasureMap.get(toRaw(measure))
+export const getSceneMeasureDesc = (smMeasure: SceneMeasure, measure: Measure) => {
+  const length = measure.type === MeasureType.area
+    ? (smMeasure as unknown as SceneMeasure<MeasureType.area>).getArea()
+    : (smMeasure as unknown as SceneMeasure<MeasureType.free>).getDistance()
 
+  return round(length.value, 2).toString()
+}
 
-export const associationMessaure = <T extends MeasureType>(smMeasure: SceneMeasure<T>, measure: Measure<T>) => {
-  const getMessaureDesc = () => {
-    const length = measure.type === MeasureType.area
-      ? (smMeasure as unknown as SceneMeasure<MeasureType.area>).getArea()
-      : (smMeasure as unknown as SceneMeasure<MeasureType.free>).getDistance()
-
-    return round(length.value, 2).toString()
-  }
 
+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 = getMessaureDesc()!
-    })
+    unSet(() => measure.positions = points.map((point, i) => ({ point, modelId: modelIds[i] })))
   })
-
   smMeasure.bus.on('highlight', selected => unSet(() => measure.selected = selected))
-  measure.desc = getMessaureDesc()
-  // unSetModelUpdate(() => measure.desc = getMessaureDesc()!)
 }
 
 const associationMessaures = (sdk: SDK) => {

+ 12 - 3
src/views/measure/sign.vue

@@ -7,7 +7,7 @@
     <div class="info">
       <ui-icon :type="MeasureTypeMeta[measure.type].icon" class="type" />
       <div>
-        <p>{{ measure.desc }} {{ MeasureTypeMeta[measure.type].unit }}</p>
+        <p>{{ desc }} {{ MeasureTypeMeta[measure.type].unit }}</p>
         <span>{{ MeasureTypeMeta[measure.type].unitDesc }}</span>
       </div>
     </div>
@@ -20,9 +20,10 @@
 
 <script setup lang="ts">
 import { MeasureTypeMeta, getMeasureIsShow } from '@/store'
-import { getSceneMeasure } from '@/sdk'
+import { getSceneMeasure, getSceneMeasureDesc } from '@/sdk'
 
 import type { Measure } from '@/store'
+import { computed } from 'vue';
 
 const props = withDefaults(
   defineProps<{ measure: Measure, edit?: boolean }>(),
@@ -34,7 +35,15 @@ defineEmits<{ (e: 'delete'): void }>()
 const fly = () => {
   getSceneMeasure(props.measure)?.fly()
 }
-
+const desc = computed(() => {
+  const smeasure = getSceneMeasure(props.measure)
+  console.log(smeasure)
+  if (smeasure) {
+    return getSceneMeasureDesc(smeasure, props.measure)
+  } else {
+    return '-'
+  }
+})
 </script>
 
 <style lang="scss" scoped>