|
|
|
@ -3,7 +3,19 @@
|
|
|
|
|
<div ref="threeJs" class="app-container">
|
|
|
|
|
</div>
|
|
|
|
|
<div ref="demo" class="model">
|
|
|
|
|
<Demo/>
|
|
|
|
|
<Demo ref="demoData"/>
|
|
|
|
|
</div>
|
|
|
|
|
<div ref="demo1" class="model">
|
|
|
|
|
<Demo ref="demo1Data"/>
|
|
|
|
|
</div>
|
|
|
|
|
<div ref="demo2" class="model">
|
|
|
|
|
<Demo ref="demo2Data"/>
|
|
|
|
|
</div>
|
|
|
|
|
<div ref="demo3" class="model">
|
|
|
|
|
<Demo ref="demo3Data"/>
|
|
|
|
|
</div>
|
|
|
|
|
<div ref="demo4" class="model">
|
|
|
|
|
<Demo ref="demo4Data"/>
|
|
|
|
|
</div>
|
|
|
|
|
<div style="position:absolute;top: 0;left: 0;">
|
|
|
|
|
<el-input-number v-model="num" @change="handleChange" :step="0.1" label="描述文字"></el-input-number>
|
|
|
|
@ -92,7 +104,7 @@ import { MTLLoader } from 'three/examples/jsm/loaders/MTLLoader.js'
|
|
|
|
|
import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls.js'
|
|
|
|
|
import { CSS2DObject, CSS2DRenderer } from 'three/examples/jsm/renderers/CSS2DRenderer'
|
|
|
|
|
import Demo from '@/components/model/demo.vue'
|
|
|
|
|
import {getAgvDeviceStatus} from '@/api/board/model'
|
|
|
|
|
import { getAgvDeviceStatus } from '@/api/board/model'
|
|
|
|
|
|
|
|
|
|
import {
|
|
|
|
|
tuopanInishengji,
|
|
|
|
@ -116,7 +128,7 @@ import {
|
|
|
|
|
} from './setThree'
|
|
|
|
|
|
|
|
|
|
import {
|
|
|
|
|
AGVAnimation, agvData,floorOrigin,floorData1,isAGVLoading
|
|
|
|
|
AGVAnimation, agvData, floorOrigin, floorData1, isAGVLoading, agvLabel, loadAGV
|
|
|
|
|
} from './agv'
|
|
|
|
|
|
|
|
|
|
const vw = (document.documentElement.clientWidth || document.body.clientWidth) / 100
|
|
|
|
@ -129,72 +141,101 @@ export default {
|
|
|
|
|
num1: 90,
|
|
|
|
|
floor: 1,
|
|
|
|
|
tuopanFloor: 1,
|
|
|
|
|
fx:'',
|
|
|
|
|
rotate:0
|
|
|
|
|
fx: '',
|
|
|
|
|
rotate: 0
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
mounted() {
|
|
|
|
|
setInterval(()=>{
|
|
|
|
|
if(isLoading && isAGVLoading){
|
|
|
|
|
getAgvDeviceStatus().then(e=>{
|
|
|
|
|
console.log(e)
|
|
|
|
|
e.data.agvStatusList.forEach(v=>{
|
|
|
|
|
if(v.agvName === "2楼叉车"){
|
|
|
|
|
let x = (v.posX - floorOrigin.floor2Data.x) / floorData1.floor2Data.x
|
|
|
|
|
let z = (v.posY - floorOrigin.floor2Data.y) / floorData1.floor2Data.z
|
|
|
|
|
console.log({x,z})
|
|
|
|
|
setInterval(() => {
|
|
|
|
|
if (isLoading && isAGVLoading) {
|
|
|
|
|
getAgvDeviceStatus().then(e => {
|
|
|
|
|
this.modelData = e.data
|
|
|
|
|
e.data.agvStatusList.forEach(v => {
|
|
|
|
|
if (v.agvName === '2楼叉车') {
|
|
|
|
|
this.$refs.demoData.setData(v)
|
|
|
|
|
let x = (v.posX - floorOrigin.floor2Data.x) / floorData1.floor2Data.x
|
|
|
|
|
let z = (v.posY - floorOrigin.floor2Data.y) / floorData1.floor2Data.z
|
|
|
|
|
AGVAnimation('2AGV', '2AGV', 'xz', { x: x * 100, z: z * 100 })
|
|
|
|
|
}
|
|
|
|
|
if(v.agvName === "3楼叉车"){
|
|
|
|
|
let x = (v.posX - floorOrigin.floor3Data.x) / floorData1.floor3Data.x
|
|
|
|
|
let z = (v.posY - floorOrigin.floor3Data.y) / floorData1.floor3Data.z
|
|
|
|
|
if (v.agvName === '3楼叉车') {
|
|
|
|
|
this.$refs.demo1Data.setData(v)
|
|
|
|
|
let x = (v.posX - floorOrigin.floor3Data.x) / floorData1.floor3Data.x
|
|
|
|
|
let z = (v.posY - floorOrigin.floor3Data.y) / floorData1.floor3Data.z
|
|
|
|
|
AGVAnimation('3AGV', '3AGV', 'xz', { x: x * 100, z: z * 100 })
|
|
|
|
|
}
|
|
|
|
|
if(v.agvName === "5楼叉车"){
|
|
|
|
|
let x = (v.posX - floorOrigin.floor5Data.x) / floorData1.floor5Data.x
|
|
|
|
|
let z = (v.posY - floorOrigin.floor5Data.y) / floorData1.floor5Data.z
|
|
|
|
|
if (v.agvName === '5楼叉车') {
|
|
|
|
|
this.$refs.demo2Data.setData(v)
|
|
|
|
|
let x = (v.posX - floorOrigin.floor5Data.x) / floorData1.floor5Data.x
|
|
|
|
|
let z = (v.posY - floorOrigin.floor5Data.y) / floorData1.floor5Data.z
|
|
|
|
|
AGVAnimation('5CCAGV', '5CCAGV', 'xz', { x: x * 100, z: z * 100 })
|
|
|
|
|
}
|
|
|
|
|
if(v.agvName === "5楼背负式"){
|
|
|
|
|
let x = (v.posX - floorOrigin.floor5Data.x) / floorData1.floor5Data.x
|
|
|
|
|
let z = (v.posY - floorOrigin.floor5Data.y) / floorData1.floor5Data.z
|
|
|
|
|
if (v.agvName === '5楼背负式') {
|
|
|
|
|
this.$refs.demo3Data.setData(v)
|
|
|
|
|
let x = (v.posX - floorOrigin.floor5Data.x) / floorData1.floor5Data.x
|
|
|
|
|
let z = (v.posY - floorOrigin.floor5Data.y) / floorData1.floor5Data.z
|
|
|
|
|
AGVAnimation('5BFAGV', '5BFAGV', 'xz', { x: x * 100, z: z * 100 })
|
|
|
|
|
}
|
|
|
|
|
if(v.agvName === "5楼CTU"){
|
|
|
|
|
let x = (v.posX - floorOrigin.floor5Data.x) / floorData1.floor5Data.x
|
|
|
|
|
let z = (v.posY - floorOrigin.floor5Data.y) / floorData1.floor5Data.z
|
|
|
|
|
if (v.agvName === '5楼CTU') {
|
|
|
|
|
this.$refs.demo4Data.setData(v)
|
|
|
|
|
let x = (v.posX - floorOrigin.floor5Data.x) / floorData1.floor5Data.x
|
|
|
|
|
let z = (v.posY - floorOrigin.floor5Data.y) / floorData1.floor5Data.z
|
|
|
|
|
AGVAnimation('5CTU', '5CTU', 'x', { x: x * 100, z: z * 100 })
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
let deviseInfo = []
|
|
|
|
|
e.data.realtimeStatusList.forEach(v => {
|
|
|
|
|
if (deviseInfo.map(vv => vv.deviceId).includes(v.deviceId)) {
|
|
|
|
|
deviseInfo[deviseInfo.indexOf(deviseInfo.find(vv => vv.deviceId === v.deviceId))].info.push({
|
|
|
|
|
name: v.statusName,
|
|
|
|
|
value: v.statusValue,
|
|
|
|
|
id: v.statusId,
|
|
|
|
|
code: v.statusCode
|
|
|
|
|
})
|
|
|
|
|
} else {
|
|
|
|
|
deviseInfo.push({
|
|
|
|
|
deviceId: v.deviceId,
|
|
|
|
|
deviceName: v.deviceName,
|
|
|
|
|
info: [
|
|
|
|
|
{
|
|
|
|
|
name: v.statusName,
|
|
|
|
|
value: v.statusValue,
|
|
|
|
|
id: v.statusId,
|
|
|
|
|
code: v.statusCode
|
|
|
|
|
}
|
|
|
|
|
]
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
console.log(deviseInfo)
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
},2500)
|
|
|
|
|
}, 2500)
|
|
|
|
|
this.$refs.threeJs.appendChild(renderer.domElement)
|
|
|
|
|
|
|
|
|
|
// controls.rotateSpeed = -controls.rotateSpeed;
|
|
|
|
|
// controls.enableZoom = false
|
|
|
|
|
|
|
|
|
|
// loadF([ 'tishengji_tuopan'])
|
|
|
|
|
loadF(['2-1AGVchongdianzhuang005', '2-2AGVchongdianzhuang005', 'AGVchongdianzhuang002', 'AGVchongdianzhuang003', 'AGVchongdianzhuang005', 'changfang002', 'changfang003', 'changfang005', 'liku005', 'quanzidongchaibaojizhaungpeixian003', 'tishengji','tishengji_keyidongbufen','tishengji_tuopan','Uxingxian'])
|
|
|
|
|
loadF(['2-1AGVchongdianzhuang005', '2-2AGVchongdianzhuang005', 'AGVchongdianzhuang002', 'AGVchongdianzhuang003', 'AGVchongdianzhuang005', 'changfang002', 'changfang003', 'changfang005', 'liku005', 'quanzidongchaibaojizhaungpeixian003', 'tishengji', 'tishengji_keyidongbufen', 'tishengji_tuopan', 'Uxingxian'])
|
|
|
|
|
// loadF(['changfang002', 'changfang003', 'changfang005'])
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 创建CSS2DObject
|
|
|
|
|
// const label = this.$refs.demo
|
|
|
|
|
// const labelObject = new CSS2DObject(label)
|
|
|
|
|
// labelObject.position.set(-1000, 333, 130) // 根据需要调整位置
|
|
|
|
|
// scene.add(labelObject)
|
|
|
|
|
agvLabel['2AGV'] = new CSS2DObject(this.$refs.demo)
|
|
|
|
|
agvLabel['3AGV'] = new CSS2DObject(this.$refs.demo1)
|
|
|
|
|
agvLabel['5CCAGV'] = new CSS2DObject(this.$refs.demo2)
|
|
|
|
|
agvLabel['5BFAGV'] = new CSS2DObject(this.$refs.demo3)
|
|
|
|
|
agvLabel['5CTU'] = new CSS2DObject(this.$refs.demo4)
|
|
|
|
|
|
|
|
|
|
loadAGV(['chacheshiAGV002', 'chacheshiAGV003', 'chacheshiAGV005', 'beifushiAGV005', 'CTU005'])
|
|
|
|
|
|
|
|
|
|
// setInterval(()=>{
|
|
|
|
|
// labelObject.position.x +=0.1
|
|
|
|
|
// labelObject.position.y +=0.1
|
|
|
|
|
// labelObject.position.z +=0.1
|
|
|
|
|
// labelObject2AGV.position.x +=0.1
|
|
|
|
|
// labelObject2AGV.position.y +=0.1
|
|
|
|
|
// labelObject2AGV.position.z +=0.1
|
|
|
|
|
// },40)
|
|
|
|
|
|
|
|
|
|
// 渲染循环
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
},
|
|
|
|
|
methods: {
|
|
|
|
|
handleChange() {
|
|
|
|
@ -232,8 +273,8 @@ export default {
|
|
|
|
|
tuopanLocation.x = storeyWidth[this.tuopanFloor]
|
|
|
|
|
},
|
|
|
|
|
agvAn() {
|
|
|
|
|
this.rotate -=this.num1
|
|
|
|
|
AGVAnimation('3AGV','rotate',this.rotate,)
|
|
|
|
|
this.rotate -= this.num1
|
|
|
|
|
AGVAnimation('3AGV', 'rotate', this.rotate)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|