|
|
@ -9,7 +9,8 @@ |
|
|
:props="{emitPath:false}" /> |
|
|
:props="{emitPath:false}" /> |
|
|
</div> |
|
|
</div> |
|
|
<div class="section-content"> |
|
|
<div class="section-content"> |
|
|
<div v-if="currentStateManagerId" :key="currentStateManagerId" |
|
|
<div v-if="currentStateManagerId" :key="currentStateManagerId || getRandom()" |
|
|
|
|
|
:StateManagerId="currentStateManagerId" |
|
|
class="canvas-container" ref="canvasContainer" tabindex="1" /> |
|
|
class="canvas-container" ref="canvasContainer" tabindex="1" /> |
|
|
</div> |
|
|
</div> |
|
|
<div class="section-bottom-toolbar section-toolbar" v-if="!!state"> |
|
|
<div class="section-bottom-toolbar section-toolbar" v-if="!!state"> |
|
|
@ -68,6 +69,7 @@ |
|
|
</template> |
|
|
</template> |
|
|
<script> |
|
|
<script> |
|
|
import * as THREE from 'three' |
|
|
import * as THREE from 'three' |
|
|
|
|
|
import $ from 'jquery' |
|
|
import { getQueryParams, renderIcon, setQueryParam } from '@/utils/webutils' |
|
|
import { getQueryParams, renderIcon, setQueryParam } from '@/utils/webutils' |
|
|
import { defineComponent, markRaw } from 'vue' |
|
|
import { defineComponent, markRaw } from 'vue' |
|
|
import Viewport from '@/core/engine/Viewport' |
|
|
import Viewport from '@/core/engine/Viewport' |
|
|
@ -103,6 +105,9 @@ export default defineComponent({ |
|
|
}, |
|
|
}, |
|
|
methods: { |
|
|
methods: { |
|
|
renderIcon, |
|
|
renderIcon, |
|
|
|
|
|
getRandom() { |
|
|
|
|
|
return Math.random().toString(36).substring(2, 15) |
|
|
|
|
|
}, |
|
|
destroyScene() { |
|
|
destroyScene() { |
|
|
if (this.viewport) { |
|
|
if (this.viewport) { |
|
|
this.viewport.destroy() |
|
|
this.viewport.destroy() |
|
|
@ -126,6 +131,11 @@ export default defineComponent({ |
|
|
initByFloor() { |
|
|
initByFloor() { |
|
|
this.destroyScene() |
|
|
this.destroyScene() |
|
|
|
|
|
|
|
|
|
|
|
if (!this.$el || this.$.isUnmounted) { |
|
|
|
|
|
// 检查组件是否已卸载, 幻影加载问题 |
|
|
|
|
|
return |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
delete window['editor'] |
|
|
delete window['editor'] |
|
|
delete window['viewport'] |
|
|
delete window['viewport'] |
|
|
delete window['scene'] |
|
|
delete window['scene'] |
|
|
@ -145,10 +155,23 @@ export default defineComponent({ |
|
|
return |
|
|
return |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
// 等待 canvasContainer 渲染出来 |
|
|
|
|
|
this.$nextTick(() => { |
|
|
this.$nextTick(() => { |
|
|
|
|
|
const MAX_RETRY = 5 |
|
|
|
|
|
let retryCount = 0 |
|
|
|
|
|
|
|
|
|
|
|
// 等待 canvasContainer 渲染出来 |
|
|
|
|
|
const tryInitViewport = () => { |
|
|
|
|
|
const viewerDom = this.$refs.canvasContainer |
|
|
|
|
|
|
|
|
|
|
|
if (viewerDom) { |
|
|
const viewerDom = this.$refs.canvasContainer |
|
|
const viewerDom = this.$refs.canvasContainer |
|
|
|
|
|
|
|
|
|
|
|
if (!viewerDom) { |
|
|
|
|
|
system.showErrorDialog('Canvas container not found!') |
|
|
|
|
|
debugger |
|
|
|
|
|
return |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
const sceneHelp = new SceneHelp(worldModel, worldModel.state.catalogCode) |
|
|
const sceneHelp = new SceneHelp(worldModel, worldModel.state.catalogCode) |
|
|
const viewport = new Viewport(sceneHelp, viewerDom) |
|
|
const viewport = new Viewport(sceneHelp, viewerDom) |
|
|
|
|
|
|
|
|
@ -180,7 +203,20 @@ export default defineComponent({ |
|
|
}).finally(() => { |
|
|
}).finally(() => { |
|
|
system.clearLoading() |
|
|
system.clearLoading() |
|
|
}) |
|
|
}) |
|
|
|
|
|
|
|
|
|
|
|
} else if (retryCount < MAX_RETRY) { |
|
|
|
|
|
retryCount++ |
|
|
|
|
|
setTimeout(tryInitViewport, 50) |
|
|
|
|
|
} else { |
|
|
|
|
|
console.error('Canvas container not found after retries') |
|
|
|
|
|
this.currentStateManagerId = '' |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
tryInitViewport() |
|
|
}) |
|
|
}) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
} |
|
|
}, |
|
|
}, |
|
|
computed: { |
|
|
computed: { |
|
|
|