Browse Source

动态创建热点和测量线

bill 3 years ago
parent
commit
89f509a41e

+ 1 - 0
src/components/tagging/list.vue

@@ -1,5 +1,6 @@
 <template>
   <template v-if="custom.showTaggings">
+  
     <template v-for="(pos, index) in positions" :key="pos.id">
       <Sign 
         v-if="isShowSign(pos.modelId)"

+ 6 - 11
src/sdk/association.ts

@@ -24,10 +24,10 @@ import {
   sysBus, 
   getFuseModelShowVariable, 
   SceneType,
-  backupFuseModels,
   MeasureType,
   measures,
-  fuseModelsLoaded
+  fuseModelsLoaded,
+  getMeasureIsShow
 } from '@/store'
 
 import TaggingComponent from '@/components/tagging/list.vue'
@@ -63,9 +63,9 @@ const sceneModelMap = new WeakMap<FuseModel, SceneModel>()
 export const getSceneModel = (model?: FuseModel | null) => model && sceneModelMap.get(toRaw(model))
 
 const associationModels = (sdk: SDK) => {
-  const getModels = () => {
-    return fuseModels.value.filter(model => getFuseModelShowVariable(model).value)
-  }
+  const getModels = () => fuseModels.value
+    .filter(model => getSceneModel(model) || getFuseModelShowVariable(model).value)
+  
   shallowWatchArray(getModels, (models, oldModels) => {
     const { added, deleted } = diffArrayChange(models, oldModels)
     for (const item of added) {
@@ -122,22 +122,17 @@ const associationModels = (sdk: SDK) => {
       sceneModel.bus.on('loadDone', () => {
         item.loaded = true
         hideLoad()
-        backupFuseModels()
       })
       sceneModel.bus.on('loadError', () => {
         item.error = true
         item.show = false
         custom.showModelsMap.delete(item)
         hideLoad()
-        backupFuseModels()
       })
       sceneModel.bus.on('loadProgress', progress => item.progress = progress)
     }
     for (const item of deleted) {
       getSceneModel(item)?.destroy()
-      setTimeout(() => {
-        sceneModelMap.delete(toRaw(item))
-      })
     }
   })
   
@@ -226,7 +221,7 @@ export const associationMessaure = <T extends MeasureType>(smMeasure: SceneMeasu
 }
 
 const associationMessaures = (sdk: SDK) => {
-  const getMeasures = () => measures.value
+  const getMeasures = () => measures.value.filter(getMeasureIsShow)
 
   shallowWatchArray(getMeasures, (measures, oldMeasures) => {
     const { added, deleted } = diffArrayChange(measures, oldMeasures)

+ 20 - 3
src/store/fuse-model.ts

@@ -14,7 +14,8 @@ import {
   updateStoreItem, 
   fetchStoreItems,
   saveStoreItems,
-  recoverStoreItems
+  recoverStoreItems,
+  deepIsRevise
 } from '@/utils'
 import { initialTaggings } from './tagging'
 import { initialMeasures } from './measure'
@@ -71,7 +72,9 @@ watchEffect(() => {
 
 export const fuseModelsLoaded = ref(false)
 watchPostEffect(() => {
-  const loaded = fuseModels.value.every(model => model.loaded || model.error)
+  const loaded = fuseModels.value
+    .filter(model => getFuseModelShowVariable(model).value)
+    .every(model => model.loaded || model.error)
   fuseModelsLoaded.value = loaded
 })
 
@@ -85,6 +88,16 @@ export const backupFuseModels = () => {
     position: {...model.position},
   }))
 }
+watchEffect(() => {
+  for (const model of bcModels) {
+    const newModel = getFuseModel(model.id)
+    if (newModel) {
+      model.progress = newModel.progress
+      model.error = newModel.error
+      model.loaded = newModel.loaded
+    }
+  }
+})
 
 const serviceToLocal = (model: SModel): FuseModel => ({
   ...model, 
@@ -130,7 +143,11 @@ export const saveFuseModels = saveStoreItems(
 
 
 export const autoSaveFuseModels = autoSetModeCallback(fuseModels, {
-  isUpdate: () => fuseModelsLoaded.value,
+  isUpdate: (fuseModels) => 
+    deepIsRevise(
+      fuseModels.map(item => ({...item, loaded: true, error: true, progress: 0})), 
+      getBackupFuseModels().map(item => ({...item, loaded: true, error: true, progress: 0}))
+    ),
   backup: backupFuseModels,
   recovery: recoverFuseModels,
   save: async () => {

+ 7 - 1
src/store/measure.ts

@@ -1,5 +1,5 @@
 import { ref } from 'vue'
-import { fuseModels } from './fuse-model'
+import { fuseModels, getFuseModel, getFuseModelShowVariable } from './fuse-model'
 import { createTemploraryID, autoSetModeCallback } from './sys'
 import { 
   addStoreItem, 
@@ -31,6 +31,12 @@ export const MeasureTypeMeta = {
 
 export const measures = ref<Measures>([])
 
+export const getMeasureIsShow = (measure: Measure) =>
+  measure.positions.every(({modelId}) => {
+    const model = getFuseModel(modelId)
+    return model && getFuseModelShowVariable(model).value
+  })
+
 export const createMeasure = (measure: Partial<Measure> = {}): Measure => ({
   id: createTemploraryID(),
   fusionId: fuseModels.value[0].fusionId,

+ 1 - 0
src/utils/store-help.ts

@@ -209,6 +209,7 @@ export const diffStoreItemsChange = <T extends Array<{ id: any }>>(newItems: T,
 
 export const recoverStoreItems = <T extends Array<{ id: any }>>(items: Ref<T>, getBackupItems: () => T) => () => {
   const backupItems = getBackupItems()
+  console.log(backupItems)
   items.value = backupItems.map(oldItem => {
     const model = items.value.find(item => item.id === oldItem.id)
     return model ? Object.assign(model, oldItem) : oldItem

+ 2 - 2
src/views/measure/sign.vue

@@ -9,13 +9,13 @@
     </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="fly" />
+      <ui-icon type="pin" ctrl @click.stop="fly" :class="{disabled: !getMeasureIsShow(measure)}" />
     </div>
   </ui-group-option>
 </template>
 
 <script setup lang="ts">
-import { MeasureTypeMeta } from '@/store'
+import { MeasureTypeMeta, getMeasureIsShow } from '@/store'
 import { getSceneMeasure } from '@/sdk'
 
 import type { Measure } from '@/store'