bill 2 anos atrás
pai
commit
9d2c21d334
2 arquivos alterados com 23 adições e 6 exclusões
  1. 22 5
      src/sdk/association.ts
  2. 1 1
      src/sdk/sdk.ts

+ 22 - 5
src/sdk/association.ts

@@ -1,6 +1,6 @@
 import { sdk } from './sdk'
 import { models, isEdit, sysBus, getModelShowVariable, ModelType, backupModels } from '@/store'
-import { toRaw, watchEffect, ref, watch, createApp } from 'vue'
+import { toRaw, watchEffect, ref, watch, createApp, nextTick } from 'vue'
 import { viewModeStack, custom, getResource, showRightCtrlPanoStack } from '@/env'
 import { 
   diffArrayChange, 
@@ -27,6 +27,7 @@ const sceneModelMap = new WeakMap<Model, SceneModel>()
 export const getSceneModel = (model: Model | null) => model && sceneModelMap.get(toRaw(model))
 
 const associationModels = (sdk: SDK) => {
+  let selfUpdate = false
   const getModels = () => models.value
   shallowWatchArray(getModels, (models, oldModels) => {
     const { added, deleted } = diffArrayChange(models, oldModels)
@@ -50,7 +51,9 @@ const associationModels = (sdk: SDK) => {
       sceneModelMap.set(itemRaw, sceneModel)
 
       sceneModel.bus.on('transformChanged', transform => {
+        selfUpdate = true
         Object.assign(item, transform)
+        nextTick(() => selfUpdate = false)
       })
       sceneModel.bus.on('changeSelect', select => {
         if (custom.currentModel === item && !select) {
@@ -85,12 +88,26 @@ const associationModels = (sdk: SDK) => {
         if (loaded) {
           const modelShow = getModelShowVariable(item)
           watchEffect(() => {
-            getSceneModel(item)?.changeBottom(item.bottom)
+            item.bottom
+            selfUpdate || getSceneModel(item)?.changeBottom(item.bottom)
+          })
+          watchEffect(() => {
+            item.opacity
+            selfUpdate || getSceneModel(item)?.changeOpacity(item.opacity)
+          })
+          watchEffect(() => {
+            item.position
+            selfUpdate || getSceneModel(item)?.changePosition(item.position)
+          })
+          watchEffect(() => {
+            item.rotation
+            selfUpdate || getSceneModel(item)?.changeRotation(item.rotation)
+          })
+          watchEffect(() => {
+            item.scale
+            selfUpdate || getSceneModel(item)?.changeScale(item.scale)
           })
-          watchEffect(() => getSceneModel(item)?.changeOpacity(item.opacity))
-          watchEffect(() => getSceneModel(item)?.changeScale(item.scale))
           watchEffect(() => {
-            console.error(getSceneModel(item), 'changeshow', modelShow.value)
             getSceneModel(item)?.changeShow(modelShow.value)
           })
           stopLoadedWatch()

+ 1 - 1
src/sdk/sdk.ts

@@ -6,7 +6,7 @@ import type { Emitter } from 'mitt'
 
 
 type SceneModelAttrs = ModelAttrs & { select: boolean }
-export type SceneModel = ToChangeAPI<Omit<SceneModelAttrs, 'position' | 'rotation'>>
+export type SceneModel = ToChangeAPI<SceneModelAttrs>
   & { 
     bus: Emitter<
       Pick<SceneModelAttrs, 'select'> &