|
@@ -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()
|