You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

84 lines
1.9 KiB

import { renderIcon } from '@/utils/webutils.ts'
import { defineComponent, markRaw } from 'vue'
import Viewport from '@/designer/Viewport.ts'
export default defineComponent({
name: 'Model2DEditor',
data() {
const viewport = new Viewport(worldModel)
return {
isReady: false,
viewport: viewport,
currentFloor: '',
searchKeyword: ''
}
},
mounted() {
window['editor'] = this
},
beforeMount() {
this.initByFloor('')
delete window['editor']
},
methods: {
renderIcon,
initByFloor(floor) {
this.isReady = false
const viewportOrigin = this.viewport
if (viewportOrigin && viewportOrigin.state.isReady) {
viewportOrigin.destroy()
}
delete window['editor']
delete window['viewport']
delete window['scene']
delete window['renderer']
delete window['camera']
delete window['renderer']
delete window['controls']
if (!floor) {
return
}
const viewerDom = this.$refs.canvasContainer
const viewport = markRaw(new Viewport(worldModel))
this.viewport = viewport
viewport.initThree(viewerDom, floor)
window['viewport'] = viewport
window['scene'] = viewport.scene
window['renderer'] = viewport.renderer
window['camera'] = viewport.camera
window['renderer'] = viewport.renderer
window['controls'] = viewport.controls
viewerDom.focus()
this.isReady = true
}
},
watch: {
currentFloor: {
handler(newVal, oldVal) {
const floor = newVal
this.$nextTick(() => {
console.log('floor changed', floor)
this.initByFloor(newVal)
})
}
}
},
computed: {
/**
* @returns {ViewportState|{}}
*/
state() {
return this.viewport.state
},
allLevels() {
return worldModel.allLevels
}
}
})