瀏覽代碼

关联测量

bill 3 年之前
父節點
當前提交
b344a4431d
共有 3 個文件被更改,包括 31 次插入9 次删除
  1. 21 2
      src/sdk/association.ts
  2. 2 1
      src/sdk/sdk.ts
  3. 8 6
      src/views/measure/sign.vue

+ 21 - 2
src/sdk/association.ts

@@ -221,7 +221,11 @@ const associationMessaures = (sdk: SDK) => {
   shallowWatchArray(getMeasures, (measures, oldMeasures) => {
     const { added, deleted } = diffArrayChange(measures, oldMeasures)
     for (const item of added) {
-      const sceneMeasure = sdk.drawMeasure(item.type, item.positions)
+      const sceneMeasure = sdk.drawMeasure(
+        item.type, 
+        item.positions.map(position => position.point),
+        item.positions.map(position => position.modelId),
+      )
       associationMessaure(sceneMeasure, item)
       sceneMeasureMap.set(item, sceneMeasure)
     }
@@ -234,7 +238,22 @@ const associationMessaures = (sdk: SDK) => {
   arrayChildEffectScope(getMeasures, measure => {
     watch(
       () => measure.selected, 
-      (selected = false) => isUnSet || getSceneMeasure(measure)?.changeSelect(selected))
+      (selected = false) => isUnSet || getSceneMeasure(measure)?.changeSelect(selected)
+    )
+    watch(
+      () => custom.showMeasures, 
+      (show) => {
+        if (!isUnSet) {
+          const smMeasure = getSceneMeasure(measure)
+          if (show) {
+            smMeasure?.show()
+          } else {
+            smMeasure?.hide()
+          }
+        }
+      },
+      { immediate: true }
+    )
   })
 }
 

+ 2 - 1
src/sdk/sdk.ts

@@ -84,6 +84,7 @@ export interface MeasureBase {
   destroy: () => void
   show: () => void
   hide: () => void
+  fly: () => void
   bus: Emitter<{ update: [MeasurePosition['point'][], MeasurePosition['modelId'][]]; highlight: boolean }>
   changeSelect: (isHight: boolean) => void
 } 
@@ -111,7 +112,7 @@ export interface SDK {
   comeTo: (pos: CameraComeToProps) => void
   enterSceneGuide: (data: SceneGuidePath[]) => SceneGuide,
 
-  drawMeasure<T extends StoreMeasure['type']>(type: T, positions: StoreMeasure['positions']): Measure<T>,
+  drawMeasure<T extends StoreMeasure['type']>(type: T, points: MeasurePosition['point'][], modelIds: MeasurePosition['modelId'][]): Measure<T>,
   startMeasure<T extends StoreMeasure['type']>(type: T): StartMeasure<T> ,
 }
 

+ 8 - 6
src/views/measure/sign.vue

@@ -9,25 +9,27 @@
     </div>
     <div class="actions" @click.stop>
       <ui-icon type="del" ctrl @click.stop="$emit('delete')" v-if="edit" />
-      <ui-icon type="pin" ctrl @click.stop="$emit('fly')" />
+      <ui-icon type="pin" ctrl @click.stop="fly" />
     </div>
   </ui-group-option>
 </template>
 
 <script setup lang="ts">
 import { MeasureTypeMeta } from '@/store'
+import { getSceneMeasure } from '@/sdk'
 
 import type { Measure } from '@/store'
 
-withDefaults(
+const props = withDefaults(
   defineProps<{ measure: Measure, edit?: boolean }>(),
   { edit: true }
 )
 
-defineEmits<{ 
-  (e: 'delete'): void 
-  (e: 'fly'): void
-}>()
+defineEmits<{ (e: 'delete'): void }>()
+
+const fly = () => {
+  getSceneMeasure(props.measure)?.fly()
+}
 
 </script>