Explorar el Código

测量长度实时更新

bill hace 3 años
padre
commit
c4b7b4652a

+ 1 - 1
src/components/bill-ui/components/input/range.vue

@@ -45,7 +45,7 @@ const getValue = value => {
 const percen = computed({
     get() {
         const val = (Number(props.modelValue) - props.min) / (props.max - props.min)
-        return val > props.max ? props.max : val
+        return val > 1 ? 1 : val < 0 ? 0 : val
     },
     set(val) {
         const len = props.max - props.min

+ 17 - 9
src/sdk/association.ts

@@ -27,7 +27,8 @@ import {
   MeasureType,
   measures,
   fuseModelsLoaded,
-  getMeasureIsShow
+  getMeasureIsShow,
+  unSetModelUpdate
 } from '@/store'
 
 import TaggingComponent from '@/components/tagging/list.vue'
@@ -203,19 +204,26 @@ const associationTaggings = (el: HTMLDivElement) => {
 const sceneMeasureMap = new WeakMap<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] }))
-      const length = measure.type === MeasureType.area
+  const getMessaureDesc = () => {
+    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()
-    })
+    return round(length.value, 2).toString()
+  }
+
+  smMeasure.bus.on('update', ([points, modelIds]) => {
+    measure.positions = points.map((point, i) => ({ point, modelId: modelIds[i] }))
+    measure.desc = getMessaureDesc()!
   })
 
-  smMeasure.bus.on('highlight', selected => unSet(() => measure.selected = selected))
+  smMeasure.bus.on('highlight', selected => unSetModelUpdate(() => measure.selected = selected))
+
+  unSetModelUpdate(() => {
+    measure.desc = getMessaureDesc()!
+  })
 }
 
 const associationMessaures = (sdk: SDK) => {
@@ -230,8 +238,8 @@ const associationMessaures = (sdk: SDK) => {
         item.positions.map(position => position.modelId),
       )
       if (sceneMeasure.destroy) {
-        associationMessaure(sceneMeasure, item)
         sceneMeasureMap.set(toRaw(item), sceneMeasure)
+        associationMessaure(sceneMeasure, item)
       }
     }
     for (const item of deleted) {

+ 8 - 1
src/views/proportion/index.vue

@@ -63,7 +63,14 @@ useViewStack(() => {
     leave()
   }
 })
-useViewStack(() => Message.show({ msg: '请选择两点标记一段已知长度,并输入真实长度' }))
+
+useViewStack(() => {
+  const hide = Message.show({ msg: '请选择两点标记一段已知长度,并输入真实长度' })
+  return () => {
+    hide()
+    length.value = null
+  }
+})
 useViewStack(autoSaveFuseModels)
 </script>