浏览代码

异步处理position rotation变化

bill 3 年之前
父节点
当前提交
307ae1f081
共有 2 个文件被更改,包括 46 次插入30 次删除
  1. 42 28
      src/sdk/association.ts
  2. 4 2
      src/store/fuse-model.ts

+ 42 - 28
src/sdk/association.ts

@@ -44,11 +44,9 @@ import type {
 
 
 let isUnSet = false
 let isUnSet = false
 const unSet = ((fn: () => void) => {
 const unSet = ((fn: () => void) => {
-  nextTick(() => {
-    isUnSet = true
-    fn()
-    nextTick(() => isUnSet = false)
-  })
+  isUnSet = true
+  fn()
+  nextTick(() => isUnSet = false)
 })
 })
 
 
 
 
@@ -83,31 +81,37 @@ const associationModels = (sdk: SDK) => {
       })
       })
       sceneModelMap.set(itemRaw, sceneModel)
       sceneModelMap.set(itemRaw, sceneModel)
 
 
+      let changeId: NodeJS.Timeout
       sceneModel.bus.on('transformChanged', transform => {
       sceneModel.bus.on('transformChanged', transform => {
-        transform = { ...transform }
-        if (transform.rotation) {
-          transform.rotation = {
-            x: round(transform.rotation.x, 5),
-            y: round(transform.rotation.y, 5),
-            z: round(transform.rotation.z, 5),
+        clearTimeout(changeId)
+
+        changeId = setTimeout(() => {
+          transform = { ...transform }
+          if (transform.rotation) {
+            transform.rotation = {
+              x: round(transform.rotation.x, 5),
+              y: round(transform.rotation.y, 5),
+              z: round(transform.rotation.z, 5),
+            }
           }
           }
-        }
-        if (transform.position) {
-          transform.position = {
-            x: round(transform.position.x, 5),
-            y: round(transform.position.y, 5),
-            z: round(transform.position.z, 5),
+          if (transform.position) {
+            transform.position = {
+              x: round(transform.position.x, 5),
+              y: round(transform.position.y, 5),
+              z: round(transform.position.z, 5),
+            }
           }
           }
-        }
 
 
-        const updateKeys = Object.keys(transform)
-        const update: any = {}
-        for (const key of updateKeys) {
-          update[key] = (item as any)[key]
-        }
-        if (deepIsRevise(update, transform)) {
-          unSet(() => Object.assign(item, transform))
-        }
+          const updateKeys = Object.keys(transform)
+          const update: any = {}
+          for (const key of updateKeys) {
+            update[key] = (item as any)[key]
+          }
+          
+          if (deepIsRevise(update, transform)) {
+            unSet(() => Object.assign(item, transform))
+          }
+        }, 16)
       })
       })
 
 
       sceneModel.bus.on('changeSelect', select => {
       sceneModel.bus.on('changeSelect', select => {
@@ -158,12 +162,22 @@ const associationModels = (sdk: SDK) => {
           )
           )
           watch(
           watch(
             () => item.position, 
             () => item.position, 
-            () => isUnSet || getSceneModel(item)?.changePosition(item.position), 
+            () => {
+              if (!isUnSet) {
+                console.log('set position', item.position)
+                getSceneModel(item)?.changePosition(item.position)
+              }
+            }, 
             { immediate: true }
             { immediate: true }
           )
           )
           watch(
           watch(
             () => item.rotation, 
             () => item.rotation, 
-            () => isUnSet || getSceneModel(item)?.changeRotation(item.rotation), 
+            () => {
+              if (!isUnSet) {
+                console.log('set rotation', item.rotation)
+                getSceneModel(item)?.changeRotation(item.rotation)
+              }
+            }, 
             { immediate: true }
             { immediate: true }
           )
           )
           watch(
           watch(

+ 4 - 2
src/store/fuse-model.ts

@@ -73,10 +73,10 @@ watchPostEffect(() => {
   fuseModelsLoaded.value = loaded
   fuseModelsLoaded.value = loaded
 })
 })
 
 
-
 let bcModels: FuseModels = []
 let bcModels: FuseModels = []
 export const getBackupFuseModels = () => bcModels
 export const getBackupFuseModels = () => bcModels
 export const backupFuseModels = () => {
 export const backupFuseModels = () => {
+  console.error('???')
   bcModels = fuseModels.value.map(model => ({
   bcModels = fuseModels.value.map(model => ({
     ...model,
     ...model,
     rotation: {...model.rotation},
     rotation: {...model.rotation},
@@ -143,7 +143,7 @@ export const autoSaveFuseModels = autoSetModeCallback(fuseModels, {
       fuseModels.map(item => ({...item, loaded: true, error: true, progress: 0})), 
       fuseModels.map(item => ({...item, loaded: true, error: true, progress: 0})), 
       getBackupFuseModels().map(item => ({...item, loaded: true, error: true, progress: 0}))
       getBackupFuseModels().map(item => ({...item, loaded: true, error: true, progress: 0}))
     ),
     ),
-  backup: backupFuseModels,
+  backup: () => {},
   recovery: recoverFuseModels,
   recovery: recoverFuseModels,
   save: async () => {
   save: async () => {
     await saveFuseModels()
     await saveFuseModels()
@@ -159,5 +159,7 @@ export const autoSaveFuseModels = autoSetModeCallback(fuseModels, {
       initialTaggings(),
       initialTaggings(),
       initialMeasures()
       initialMeasures()
     ])
     ])
+
+    backupFuseModels()
   },
   },
 })
 })