From dbe5b7728b4210fe842d7ff23314438195376f07 Mon Sep 17 00:00:00 2001 From: zch Date: Tue, 22 Oct 2024 13:29:38 +0800 Subject: [PATCH] =?UTF-8?q?initial:=E5=88=9D=E5=A7=8B=E5=8C=96=E6=9C=BA?= =?UTF-8?q?=E5=9C=BA=E6=A8=A1=E5=9E=8B=E9=A1=B5=E9=9D=A2=EF=BC=8C=E5=B1=95?= =?UTF-8?q?=E7=A4=BAboj=E6=A8=A1=E5=9E=8B=E5=92=8Cmtl=EF=BC=88=E6=B3=A8?= =?UTF-8?q?=EF=BC=9A=E8=83=B6=E4=B8=9C=E6=9C=BA=E5=9C=BAobj=E4=B8=BA392MB?= =?UTF-8?q?=EF=BC=8C=E5=8A=A0=E8=BD=BD=E7=BC=93=E6=85=A2=EF=BC=8C=E5=A4=A7?= =?UTF-8?q?=E5=85=B4=E6=9C=BA=E5=9C=BA=E4=BB=85=E4=B8=BA7.6MB=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit refactor(board): 京源项目的参考代码放入参考文件夹 --- src/views/board/agv.js | 516 ----------------------- src/views/board/animation.js | 201 --------- src/views/board/model.vue | 474 --------------------- src/views/board/model/AirportModel.vue | 78 ++++ src/views/board/model/App.vue | 26 ++ src/views/board/参考/animation.js | 177 ++++++++ src/views/board/参考/model.vue | 340 +++++++++++++++ src/views/board/{ => 参考}/setThree.js | 2 + 8 files changed, 623 insertions(+), 1191 deletions(-) delete mode 100644 src/views/board/agv.js delete mode 100644 src/views/board/animation.js delete mode 100644 src/views/board/model.vue create mode 100644 src/views/board/model/AirportModel.vue create mode 100644 src/views/board/model/App.vue create mode 100644 src/views/board/参考/animation.js create mode 100644 src/views/board/参考/model.vue rename src/views/board/{ => 参考}/setThree.js (99%) diff --git a/src/views/board/agv.js b/src/views/board/agv.js deleted file mode 100644 index 7b38aba..0000000 --- a/src/views/board/agv.js +++ /dev/null @@ -1,516 +0,0 @@ -import { MTLLoader } from 'three/examples/jsm/loaders/MTLLoader' -import { OBJLoader } from 'three/examples/jsm/loaders/OBJLoader' -import * as THREE from 'three' -import { camera, labelRenderer, renderer, scene, isLoading } from '@/views/board/model/setThree' -import * as TWEEN from '@tweenjs/tween.js' - -let timeOrSpeed = true - -let isAGVLoading = false - -let isAGVAnimation = { - '2AGV': false, - '3AGV': false, - '5CCAGV': false, - '5BFAGV': false, - '5CTU': false -} -let AGVanimationLine = { - '2AGV': [], - '3AGV': [], - '5CCAGV': [], - '5BFAGV': [], - '5CTU': [] -} -const calculateAngle = (sideA, sideB) => { - - // 计算角度 - let angle = Math.atan2(sideB, sideA) * 180 / Math.PI - - // 确保角度值在0到180度之间 - if (angle < 0) { - angle += 180 - } - - return angle -} - -let animationEnum = ['2AGV', '3AGV', '5CCAGV', '5BFAGV', '5CTU'] - -const AGVanimation = async(e) => { - try { - if (AGVanimationLine[e].length > 0) { - await AGVanimationLine[e][0]() - AGVanimationLine[e].shift() - if (AGVanimationLine[e].length > 0) { - AGVanimation(e) - } else { - isAGVAnimation[e] = false - } - } - } catch (e) { - console.log(e) - } -} - -function AGVanimate() { - animationEnum.forEach(e => { - if (AGVanimationLine[e].length > 0 && isAGVAnimation[e] === false) { - isAGVAnimation[e] = true - AGVanimation(e) - } - }) - requestAnimationFrame(AGVanimate) -} - -AGVanimate() - -let floorOrigin = { - floor2Data: { - x: 109000, - y: 119960 - }, - floor3Data: { - x: 39000, - y: 49460 - }, - floor5Data: { - x: 159000, - y: 150575 - } -} - -let floorData1 = { - floor2Data: { - x: 42500, - z: 20500 - }, - floor3Data: { - x: 42500, - z: 20500 - }, - floor5Data: { - x: 50300, - z: 20500 - } -} -let floorData = { - floor2Data: { - x: 1314, - z: 636 - }, - floor3Data: { - x: 1314, - z: 636 - }, - floor5Data: { - x: 1314, - z: 636 - } -} - -let agvData = { - floor2AGVGroup: null, - floor2AGV: null, - floor2AGVData: { - x: 0, - z: 0, - rotate: 0 - }, - floor2AGVGroupLocation: {}, - - floor3AGVGroup: null, - floor3AGV: null, - floor3AGVData: { - x: 0, - z: 0, - rotate: 0 - }, - floor3AGVGroupLocation: {}, - - floor5CCAGVGroup: null, - floor5CCAGV: null, - floor5CCAGVGroupLocation: {}, - floor5CCAGVData: { - x: 0, - y: 0, - rotate: 0 - }, - - floor5BFAGVGroup: null, - floor5BFAGV: null, - floor5BFAGVGroupLocation: {}, - floor5BFAGVData: { - x: 0, - y: 0, - rotate: 0 - }, - - floor5CTUGroup: null, - floor5CTU: null, - floor5CTUGroupLocation: {}, - floor5CTUData: { - x: 0, - y: 0, - rotate: 0 - } -} - -let agvLabel = { - '2AGV': null, - '2AGVData': null, - '3AGV': null, - '3AGVData': null, - '5CCAGV': null, - '5CCAGVData': null, - '5BFAGV': null, - '5BFAGVData': null, - '5CTU': null, - '5CTUData': null - -} - -let loadAGVEnum = { - 'beifushiAGV005': 'floor5BFAGV', - 'chacheshiAGV005': 'floor5CCAGV', - 'CTU005': 'floor5CTU', - 'chacheshiAGV002': 'floor2AGV', - 'chacheshiAGV003': 'floor3AGV' -} -let loadAGVGroupEnum = { - 'beifushiAGV005': 'floor5BFAGVGroup', - 'chacheshiAGV005': 'floor5CCAGVGroup', - 'CTU005': 'floor5CTUGroup', - 'chacheshiAGV002': 'floor2AGVGroup', - 'chacheshiAGV003': 'floor3AGVGroup' -} -let LoadAGVDataEnum = { - 'beifushiAGV005': 'floor5BFAGVData', - 'chacheshiAGV005': 'floor5CCAGVData', - 'CTU005': 'floor5CTUData', - 'chacheshiAGV002': 'floor2AGVData', - 'chacheshiAGV003': 'floor3AGVData' -} -let LoadAGVLocationEnum = { - 'beifushiAGV005': 'floor5BFAGVGroupLocation', - 'chacheshiAGV005': 'floor5CCAGVGroupLocation', - 'CTU005': 'floor5CTUGroupLocation', - 'chacheshiAGV002': 'floor2AGVGroupLocation', - 'chacheshiAGV003': 'floor3AGVGroupLocation' -} -let AGVLabelEnum = { - 'beifushiAGV005': '5BFAGV', - 'chacheshiAGV005': '5CCAGV', - 'CTU005': '5CTU', - 'chacheshiAGV002': '2AGV', - 'chacheshiAGV003': '3AGV' -} -let axisEnum = { - 'chacheshiAGV002': { - x: 9, - z: 15 - }, - 'chacheshiAGV003': { - x: 9, - z: 20.5 - }, - 'beifushiAGV005': { - z: 11.6 - }, - 'chacheshiAGV005': { - x: 9, - z: 22 - }, - 'CTU005': { - x: -3.5, - z: -20 - } -} - -const loadingManager = new THREE.LoadingManager() -loadingManager.onLoad = function() { - isAGVLoading = true - agvData.floor5CTUGroup.position.z = -205 - agvLabel['5CTU'].position.z = -205 - agvData.floor5CTUGroup.position.x = 100 - agvLabel['5CTU'].position.x = -205 - AGVAnimation('5CTU', '5CTU', 'x', 7) - agvData.floor5CTUGroup.rotation.y = 90 * (Math.PI / 180) -} - const loadAGV = (r) => { - r.forEach(e => { - let agvName = loadAGVEnum[e] - let agvGroupName = loadAGVGroupEnum[e] - let agvDataName = LoadAGVDataEnum[e] - let agvLocationName = LoadAGVLocationEnum[e] - let agvLabelData = AGVLabelEnum[e] - let mtlLoader = new MTLLoader() - mtlLoader.load(`/model/${e}/${e}.mtl`, - materials => { - materials.preload() - let loader = new OBJLoader(loadingManager) - loader.setMaterials(materials) - loader.load( - `/model/${e}/${e}.obj`, - object => { - object.children[0].geometry.computeBoundingBox() - let axis = new THREE.Vector3() - axis.addVectors(object.children[0].geometry.boundingBox.min, object.children[0].geometry.boundingBox.max) - axis.multiplyScalar(0.5) - axis.applyMatrix4(object.children[0].matrixWorld) - - agvData[agvGroupName] = new THREE.Group() - agvData[agvGroupName].add(object) - let axisDis = axisEnum[e] - Object.keys(axisDis || {}).forEach(v => { - axis[v] += axisDis[v] - }) - agvData[agvGroupName].position.set(axis.x, axis.y, axis.z) - agvLabel[agvLabelData].position.set(axis.x, axis.y, axis.z) - agvData[agvLocationName] = axis - object.position.set(-axis.x, -axis.y, -axis.z) - agvData[agvDataName].x = axis.x - agvData[agvDataName].z = axis.z - scene.add(agvData[agvGroupName]) - scene.add(agvLabel[agvLabelData]) - - object.name = 'tishengji_tuopan' - // scene.add(object) - - agvData[agvName] = object - // 更新渲染器 - renderer.render(scene, camera) - }, - () => { - }, - err => { - loadAGV([e]) - } - ) - }) - }) -} - -// loadAGV(['chacheshiAGV003']) - -let AGVGroupEnum = { - '5BFAGV': 'floor5BFAGVGroupLocation', - '5CCAGV': 'floor5CCAGVGroupLocation', - '5CTU': 'floor5CTUGroupLocation', - '2AGV': 'floor2AGVGroupLocation', - '3AGV': 'floor3AGVGroupLocation' -} -let AGVDataEnum = { - '5BFAGV': 'floor5BFAGVData', - '5CCAGV': 'floor5CCAGVData', - '5CTU': 'floor5CTUData', - '2AGV': 'floor2AGVData', - '3AGV': 'floor3AGVData' -} -let groupEnum = { - '5BFAGV': 'floor5BFAGVGroup', - '5CCAGV': 'floor5CCAGVGroup', - '5CTU': 'floor5CTUGroup', - '2AGV': 'floor2AGVGroup', - '3AGV': 'floor3AGVGroup' -} -let floorEnum = { - '5BFAGV': 'floor5Data', - '5CCAGV': 'floor5Data', - '5CTU': 'floor5Data', - '2AGV': 'floor2Data', - '3AGV': 'floor3Data' -} -let rotateF = (e) => { - e %= 360 - - if (e > 180) { - return e - 360 - } - if (e < -180) { - return e + 360 - } - return e -} - -const AGVAnimationF1 = (item, location, time = 2000) => { - - let AGVGroupLocationData = AGVGroupEnum[item] - let AGVLocationData = AGVDataEnum[item] - let group = groupEnum[item] - let floor = floorEnum[item] - -} - -const AGVAnimationF = (item, type, newLocation = {}, time = 2000) => { - let s = 1 - if (type === 'rotate') { - newLocation.rotate %= 360 - if ((item === '2AGV' || item === '3AGV' || item === '5CCAGV') && type === 'rotate') { - newLocation.rotate -= 90 - } - if ((item === '5CTU') && type === 'rotate') { - newLocation.rotate += 90 - } - } - let AGVGroupLocationData = AGVGroupEnum[item] - let AGVLocationData = AGVDataEnum[item] - let group = groupEnum[item] - let floor = floorEnum[item] - let agvLabelData = agvLabel?.[item] - switch (type) { - case 'xz': { - return new Promise(async(resolve, reject) => { - let locationx = agvData[AGVGroupLocationData].x - (newLocation.x / 100) * floorData[floor].x - let locationz = agvData[AGVGroupLocationData].z + (newLocation.z / 100) * floorData[floor].z - let xlength = agvData[AGVLocationData].x - locationx - let zlength = agvData[AGVLocationData].z - locationz - - let rotate = calculateAngle(Math.abs(xlength), Math.abs(zlength)) - if (xlength < 0 && zlength < 0) { - rotate = 180 - rotate - } - if (xlength < 0 && zlength > 0) { - rotate = 180 + rotate - } - if (xlength > 0 && zlength > 0) { - rotate = 360 - rotate - } - - if (xlength === 0 && zlength === 0) { - - } else { - await AGVAnimationF(item, 'rotate', { rotate: rotate }) - } - - let tween = new TWEEN.Tween(agvData[group].position) - .to({ x: locationx, z: locationz }, time) - .onComplete(() => { - agvData[group].position.x = locationx - agvData[AGVLocationData].x = locationx - agvData[group].position.z = locationz - agvData[AGVLocationData].z = locationz - resolve() - tween.stop() - tween = null - }) - .start() - - if(agvLabelData){ - let tween1 = new TWEEN.Tween(agvLabelData.position) - .to({ x: locationx, z: locationz }, time) - .onComplete(() => { - tween1.stop() - tween1 = null - }) - .start() - } - - - }) - } - case 'x': { - return new Promise(async(resolve, reject) => { - let location = agvData[AGVGroupLocationData].x - (newLocation.x / 100) * floorData[floor].x - if ((agvData[group].position.x - location) > 0) { - await AGVAnimationF(item, 'rotate', { rotate: 0 }) - } else { - await AGVAnimationF(item, 'rotate', { rotate: 180 }) - } - if (agvData[AGVLocationData].x === location) { - resolve() - } - let distance = location - agvData[AGVLocationData].x - let tween = new TWEEN.Tween(agvData[group].position) - .to({ x: location }, Math.abs(distance) / s * 16) // 移动到(1, 1, 1),持续1000毫秒 - .onComplete(() => { - agvData[group].position.x = location - agvData[AGVLocationData].x = location - resolve() - tween.stop() - tween = null - }) - .start() - - if(agvLabelData){ - let tween1 = new TWEEN.Tween(agvLabelData.position) - .to({ x: location }, time) - .onComplete(() => { - tween1.stop() - tween1 = null - }) - .start() - } - }) - } - case 'z': { - return new Promise(async(resolve, reject) => { - let location = agvData[AGVGroupLocationData].z + (newLocation.z / 100) * floorData[floor].z - if ((agvData[group].position.z - location) > 0) { - await AGVAnimationF(item, 'rotate', { rotate: 270 }) - } else { - await AGVAnimationF(item, 'rotate', { rotate: 90 }) - } - if (agvData[AGVLocationData].z === location) { - resolve() - } - let distance = location - agvData[AGVLocationData].z - - let tween = new TWEEN.Tween(agvData[group].position) - .to({ z: location }, Math.abs(distance) / s * 16) // 移动到(1, 1, 1),持续1000毫秒 - .onComplete(() => { - agvData[group].position.z = location - agvData[AGVLocationData].z = location - resolve() - tween.stop() - tween = null - }) - .start() - }) - } - case 'rotate': { - return new Promise((resolve, reject) => { - let nowRotate = parseFloat((agvData[group].rotation.y / (Math.PI / 180)).toFixed(2)) - nowRotate = rotateF(nowRotate) - newLocation.rotate = rotateF(newLocation.rotate) - let distance = newLocation.rotate - nowRotate - distance = rotateF(distance) - let nowRotateNum = agvData[group].rotation.y - let endRotateNum = nowRotateNum + (distance * (Math.PI / 180)) - let bool = (nowRotateNum - endRotateNum) > 0 - - let tween = new TWEEN.Tween(agvData[group].rotation) - .to({ y: newLocation.rotate * (Math.PI / 180) }, 500) // 移动到(1, 1, 1),持续1000毫秒 - .onComplete(() => { - agvData[group].rotation.y = (newLocation.rotate * (Math.PI / 180)) - resolve() - tween.stop() - tween = null - }) - .start() - - }) - } - default : { - return new Promise((resolve, reject) => { - resolve() - }) - } - } - -} -const AGVAnimation = (e, item, type, newLocation = {}, time = 2000) => { - if (agvData[groupEnum[e]] && AGVanimationLine[e].length < 10) { - AGVanimationLine[e].push(() => AGVAnimationF(item, type, newLocation, time)) - } -} - -export { - agvData, - AGVAnimation, - floorOrigin, - floorData1, - isAGVLoading, - agvLabel, - loadAGV -} diff --git a/src/views/board/animation.js b/src/views/board/animation.js deleted file mode 100644 index 802f30f..0000000 --- a/src/views/board/animation.js +++ /dev/null @@ -1,201 +0,0 @@ -import { OBJLoader } from 'three/examples/jsm/loaders/OBJLoader' -import { MTLLoader } from 'three/examples/jsm/loaders/MTLLoader' -import { - isLoading, - tuopanLocation, - tishengjiLocation, keyidongModel, storeyHeight, tuopanModel, animationLine, storeyWidth -} from './setThree' -import * as TWEEN from '@tweenjs/tween.js' -import { agvData } from '@/views/board/model/agv' - -let tuopanInishengji = true - -let s = 1 - -const tishengjiAnimation = (model, floor, newLocation = 0, time = 2000) => { - - return new Promise((resolve, reject) => { - tishengjiLocation.floor = floor - if (!model || tishengjiLocation.y === newLocation) { - resolve() - } - let distance = newLocation - tishengjiLocation.y - - let tween = new TWEEN.Tween(model.position) - .to({ y: newLocation }, Math.abs(distance) / s * 16) // 移动到(1, 1, 1),持续1000毫秒 - .onComplete(() => { - model.position.y = newLocation - tishengjiLocation.y = newLocation - resolve() - tween.stop() - tween = null - }) - .start() - - // let time1 = setInterval(() => { - // if ((distance > 0 && model.position.y >= newLocation) || (distance < 0 && model.position.y <= newLocation)) { - // model.position.y = newLocation - // tishengjiLocation.y = newLocation - // resolve() - // clearInterval(time1) - // clearTimeout(time3) - // } else { - // model.position.y += distance / (s / 16) - // tishengjiLocation.y = model.position.y - // } - // }, 16) - // let time3 = setTimeout(() => { - // model.position.y = newLocation - // tishengjiLocation.y = newLocation - // resolve() - // clearInterval(time1) - // clearTimeout(time3) - // }, time + 1000) - - }) -} - -const tuopanXAnimation = (model, newLocation = 0, time = 2000) => { - return new Promise((resolve, reject) => { - if (!model || newLocation === tuopanLocation.x || tishengjiLocation.floor !== tuopanLocation.floor) { - resolve() - } else { - tuopanInishengji = newLocation === 0 - - let distance = newLocation - tuopanLocation.x - let tween = new TWEEN.Tween(model.position) - .to({ x: newLocation }, Math.abs(distance) / s * 16) // 移动到(1, 1, 1),持续1000毫秒 - .onComplete(() => { - model.position.x = newLocation - tuopanLocation.x = newLocation - resolve() - tween.stop() - tween = null - }) - .start() - - // let time1 = setInterval(() => { - // if ((distance > 0 && model.position.x >= newLocation) || (distance < 0 && model.position.x <= newLocation)) { - // model.position.x = newLocation - // tuopanLocation.x = newLocation - // resolve() - // clearInterval(time1) - // clearTimeout(time3) - // } else { - // model.position.x += distance / (time / 16) - // tuopanLocation.x = model.position.x - // } - // }, 16) - // let time3 = setTimeout(() => { - // model.position.x = newLocation - // tuopanLocation.x = newLocation - // resolve(0) - // clearInterval(time1) - // clearTimeout(time3) - // }, time + 1000) - } - }) -} - -const tuopanYAnimation = (model, floor, newLocation = 0, time = 2000) => { - return new Promise((resolve, reject) => { - tuopanLocation.floor = floor - if (!model || tuopanLocation.y === newLocation) { - resolve() - } - let distance = newLocation - tuopanLocation.y - let tween = new TWEEN.Tween(model.position) - .to({ y: newLocation }, Math.abs(distance) / s * 16) // 移动到(1, 1, 1),持续1000毫秒 - .onComplete(() => { - model.position.y = newLocation - tuopanLocation.y = newLocation - resolve() - tween.stop() - tween = null - }) - .start() - - // let time1 = setInterval(() => { - // if ((distance > 0 && model.position.y >= newLocation) || (distance < 0 && model.position.y <= newLocation)) { - // model.position.y = newLocation - // tuopanLocation.y = newLocation - // resolve() - // clearInterval(time1) - // clearTimeout(time3) - // } else { - // model.position.y += distance / (time / 16) - // tuopanLocation.y = model.position.y - // } - // }, 16) - // let time3 = setTimeout(() => { - // model.position.y = newLocation - // tuopanLocation.y = newLocation - // resolve() - // clearInterval(time1) - // clearTimeout(time3) - // }, time + 1000) - }) -} - -const addtuopan = (params) => { - return new Promise((resolve, reject) => { - try { - let objLoader1 = new OBJLoader() - let mtlLoader1 = new MTLLoader() - let objLoader2 = new OBJLoader() - let mtlLoader2 = new MTLLoader() - mtlLoader1.load('/model/jiaodongjichang.mtl', function(materials) { - materials.preload() - objLoader1.setMaterials(materials) - objLoader1.load('/model/jiaodongjichang.obj.obj', function(object1) { - // 将模型添加到场景 - params.scene.add(object1) - - // mtlLoader2.load('/model/tishengji/tishengji.mtl', function(materials2) { - // materials2.preload() - // objLoader2.setMaterials(materials2) - // objLoader2.load('/model/tishengji/tishengji.obj', function(object2) { - // 将模型添加到场景 - // object1.add(object2) - resolve(object1) - // }) - // }) - - }) - }) - } catch (e) { - resolve() - } - }) - -} - -setInterval(() => { - if (isLoading) { - - if (animationLine.length < 5) { - - let floor = Math.ceil(Math.random() * 5) - - animationLine.push(() => { - if (tuopanInishengji) { - return Promise.all([tishengjiAnimation(keyidongModel, floor, storeyHeight[floor]), tuopanYAnimation(tuopanModel, floor, storeyHeight[floor])]) - } else { - animationLine.push(() => tishengjiAnimation(keyidongModel, floor, storeyHeight[floor])) - } - }) - if (Math.random() > 0.5) { - animationLine.push(() => tuopanXAnimation(tuopanModel, storeyWidth[floor])) - animationLine.push(() => tuopanXAnimation(tuopanModel, 0)) - } - } - } -}, 1800) - -export { - tuopanInishengji, - tishengjiAnimation, - tuopanXAnimation, - tuopanYAnimation, - addtuopan -} diff --git a/src/views/board/model.vue b/src/views/board/model.vue deleted file mode 100644 index dcdcd1b..0000000 --- a/src/views/board/model.vue +++ /dev/null @@ -1,474 +0,0 @@ - - - - diff --git a/src/views/board/model/AirportModel.vue b/src/views/board/model/AirportModel.vue new file mode 100644 index 0000000..8fb44c3 --- /dev/null +++ b/src/views/board/model/AirportModel.vue @@ -0,0 +1,78 @@ + + + + + diff --git a/src/views/board/model/App.vue b/src/views/board/model/App.vue new file mode 100644 index 0000000..36e7b6a --- /dev/null +++ b/src/views/board/model/App.vue @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/views/board/参考/animation.js b/src/views/board/参考/animation.js new file mode 100644 index 0000000..6de90db --- /dev/null +++ b/src/views/board/参考/animation.js @@ -0,0 +1,177 @@ +// import { OBJLoader } from 'three/examples/jsm/loaders/OBJLoader' +// // 导入OBJLoader,用于加载OBJ格式的3D模型 +// +// import { MTLLoader } from 'three/examples/jsm/loaders/MTLLoader' +// // 导入MTLLoader,用于加载MTL格式的材质文件 +// +// import { +// isLoading, +// tuopanLocation, +// tishengjiLocation, keyidongModel, storeyHeight, tuopanModel, animationLine, storeyWidth +// } from './setThree' +// // 从setThree模块中导入多个变量和函数,包括是否正在加载、托盘位置、提升机位置等 +// +// import * as TWEEN from '@tweenjs/tween.js' +// // 导入TWEEN库,用于创建补间动画 +// +// +// let tuopanInishengji = true +// +// let s = 1 +// +// const tishengjiAnimation = (model, floor, newLocation = 0, time = 2000) => { +// // 返回一个新的Promise对象,用于处理异步操作 +// return new Promise((resolve, reject) => { +// // 更新楼层位置信息 +// tishengjiLocation.floor = floor +// // 如果模型不存在或者目标位置与当前位置相同,直接解决Promise +// if (!model || tishengjiLocation.y === newLocation) { +// resolve() +// } +// // 计算需要移动的距离 +// let distance = newLocation - tishengjiLocation.y +// +// // 创建TWEEN动画实例,设置动画属性和持续时间 +// let tween = new TWEEN.Tween(model.position) +// .to({ y: newLocation }, Math.abs(distance) / s * 16) // 根据距离和速度计算动画时间 +// .onComplete(() => { +// // 动画完成后,更新模型位置和楼层位置信息,解决Promise并清理动画实例 +// model.position.y = newLocation +// tishengjiLocation.y = newLocation +// resolve() +// tween.stop() +// tween = null +// }) +// .start() // 开始动画 +// }) +// } +// +// const tuopanXAnimation = (model, newLocation = 0, time = 2000) => { +// // 返回一个新的Promise对象,用于处理异步操作 +// return new Promise((resolve, reject) => { +// // 如果模型不存在或者新位置与当前位置相同,直接解决Promise +// if (!model || newLocation === tuopanLocation.x || tishengjiLocation.floor !== tuopanLocation.floor) { +// resolve() +// } else { +// // 根据新位置是否为0设置tuopanInishengji变量 +// tuopanInishengji = newLocation === 0 +// +// // 计算移动的距离 +// let distance = newLocation - tuopanLocation.x +// // 创建TWEEN动画实例,将模型的位置移动到新位置 +// let tween = new TWEEN.Tween(model.position) +// .to({ x: newLocation }, Math.abs(distance) / s * 16) // 移动到新位置,持续时间根据距离和速度计算 +// .onComplete(() => { +// // 动画完成后更新模型的位置并解决Promise +// model.position.x = newLocation +// tuopanLocation.x = newLocation +// resolve() +// // 停止并清除动画实例 +// tween.stop() +// tween = null +// }) +// .start() // 开始动画 +// } +// }) +// } +// +// const tuopanYAnimation = (model, floor, newLocation = 0, time = 2000) => { +// // 返回一个新的Promise对象,用于异步操作 +// return new Promise((resolve, reject) => { +// // 更新楼层位置信息 +// tuopanLocation.floor = floor +// // 如果模型不存在或者目标位置与当前位置相同,直接解决Promise +// if (!model || tuopanLocation.y === newLocation) { +// resolve() +// } +// // 计算移动距离 +// let distance = newLocation - tuopanLocation.y +// // 创建TWEEN动画实例,设置动画属性和持续时间 +// let tween = new TWEEN.Tween(model.position) +// .to({ y: newLocation }, Math.abs(distance) / s * 16) // 根据距离和速度计算动画时间 +// .onComplete(() => { +// // 动画完成后,更新模型位置和楼层位置信息,解决Promise并清理动画实例 +// model.position.y = newLocation +// tuopanLocation.y = newLocation +// resolve() +// tween.stop() +// tween = null +// }) +// .start() // 开始动画 +// }) +// } +// +// const addtuopan = (params) => { +// // 返回一个新的Promise对象,用于异步操作 +// return new Promise((resolve, reject) => { +// try { +// // 创建OBJLoader实例,用于加载OBJ模型文件 +// let objLoader1 = new OBJLoader() +// // 创建MTLLoader实例,用于加载MTL材质文件 +// let mtlLoader1 = new MTLLoader() +// // 创建第二个OBJLoader实例,用于加载另一个OBJ模型文件 +// let objLoader2 = new OBJLoader() +// // 创建第二个MTLLoader实例,用于加载另一个MTL材质文件 +// let mtlLoader2 = new MTLLoader() +// +// // 加载MTL材质文件 +// mtlLoader1.load('/model/jiaodongjichang.mtl', function(materials) { +// // 预加载材质 +// materials.preload() +// // 设置第一个OBJLoader的材质 +// objLoader1.setMaterials(materials) +// +// // 加载OBJ模型文件 +// objLoader1.load('/model/jiaodongjichang.obj', function(object1) { +// // 将加载的模型添加到场景中 +// params.scene.add(object1) +// +// +// resolve(object1) +// }) +// }) +// } catch (e) { +// // 如果发生异常,解析Promise,不返回任何值 +// resolve() +// } +// }) +// } +// +// // 每隔1800毫秒执行一次的定时器函数 +// setInterval(() => { +// // 如果正在加载中 +// if (isLoading) { +// // 如果动画队列的长度小于5 +// if (animationLine.length < 5) { +// // 随机生成一个1到5之间的整数,表示楼层 +// let floor = Math.ceil(Math.random() * 5) +// +// // 将一个新的动画函数推入动画队列 +// animationLine.push(() => { +// // 如果tuopanInishengji为真 +// if (tuopanInishengji) { +// // 返回一个Promise,当两个动画都完成后解决 +// return Promise.all([tishengjiAnimation(keyidongModel, floor, storeyHeight[floor]), tuopanYAnimation(tuopanModel, floor, storeyHeight[floor])]) +// } else { +// // 否则,只推入tishengjiAnimation动画函数到动画队列 +// animationLine.push(() => tishengjiAnimation(keyidongModel, floor, storeyHeight[floor])) +// } +// }) +// // 以50%的概率执行以下代码块 +// if (Math.random() > 0.5) { +// // 推入tuopanXAnimation动画函数到动画队列,从storeyWidth[floor]位置开始 +// animationLine.push(() => tuopanXAnimation(tuopanModel, storeyWidth[floor])) +// // 推入tuopanXAnimation动画函数到动画队列,从0位置开始 +// animationLine.push(() => tuopanXAnimation(tuopanModel, 0)) +// } +// } +// } +// }, 1800) +// +// export { +// tuopanInishengji, +// tishengjiAnimation, +// tuopanXAnimation, +// tuopanYAnimation, +// addtuopan +// } diff --git a/src/views/board/参考/model.vue b/src/views/board/参考/model.vue new file mode 100644 index 0000000..2fcb61e --- /dev/null +++ b/src/views/board/参考/model.vue @@ -0,0 +1,340 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/views/board/setThree.js b/src/views/board/参考/setThree.js similarity index 99% rename from src/views/board/setThree.js rename to src/views/board/参考/setThree.js index 2c521f6..8afd123 100644 --- a/src/views/board/setThree.js +++ b/src/views/board/参考/setThree.js @@ -1,3 +1,4 @@ +/* import * as THREE from 'three' import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls' import { CSS2DRenderer } from 'three/examples/jsm/renderers/CSS2DRenderer' @@ -408,3 +409,4 @@ export { floor5Model, otherModel, } +*/