|  |  |  | 
|---|
|  |  |  | import {MTLLoader} from "../lib/MTLLoader.js"; | 
|---|
|  |  |  | import {OBJLoader} from "../lib/OBJLoader.js"; | 
|---|
|  |  |  | import * as THREE from '../three.module.js'; | 
|---|
|  |  |  | import * as BufferGeometryUtils from '../utils/BufferGeometryUtils.js'; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | const palletX = -18; | 
|---|
|  |  |  | const palletY = 2; | 
|---|
|  |  |  | const palletZ = -46; | 
|---|
|  |  |  | const palletX = -2; | 
|---|
|  |  |  | const palletY = 0; | 
|---|
|  |  |  | const palletZ = -25; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | const goodsX = -17; | 
|---|
|  |  |  | const goodsY = 5; | 
|---|
|  |  |  | const goodsZ = -6; | 
|---|
|  |  |  | const goodsX = -2; | 
|---|
|  |  |  | const goodsY = 22; | 
|---|
|  |  |  | const goodsZ = -25; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 初始化托盘模型 | 
|---|
|  |  |  | 
|---|
|  |  |  | * @param type 参照物类型:1 - 货架;    2 - 输送线 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | function InitPallet(scene, palletList, ref, type) { | 
|---|
|  |  |  | const manager = new THREE.LoadingManager(); | 
|---|
|  |  |  | new OBJLoader( manager ) | 
|---|
|  |  |  | .setPath( '../static/model/obj/' ) | 
|---|
|  |  |  | .load( 'pallet.obj', function ( obj ) { | 
|---|
|  |  |  | obj.traverse (function (child) { | 
|---|
|  |  |  | child.castShadow = true; | 
|---|
|  |  |  | if (child instanceof THREE.Mesh) { | 
|---|
|  |  |  | child.material = new THREE.MeshLambertMaterial({ | 
|---|
|  |  |  | color: 0x708090 | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | obj.scale.set(4, 4, 3.5); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | palletList.map(item => { | 
|---|
|  |  |  | let clone = obj.clone(); | 
|---|
|  |  |  | let positionX; | 
|---|
|  |  |  | let positionY; | 
|---|
|  |  |  | let positionZ; | 
|---|
|  |  |  | switch (type) { | 
|---|
|  |  |  | case 1: | 
|---|
|  |  |  | positionX = ref.positionX || 0; | 
|---|
|  |  |  | positionY = ref.bottomHight + (item.lev1-1)*ref.binHeight || 0; | 
|---|
|  |  |  | positionZ = (item.bay1-1)*-ref.binHeight || 0; | 
|---|
|  |  |  | let palletMat = new THREE.MeshPhysicalMaterial({ | 
|---|
|  |  |  | color: 0x637e97, | 
|---|
|  |  |  | transparent: false, | 
|---|
|  |  |  | opacity: 0.7 | 
|---|
|  |  |  | }); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | clone.name = item.loc_no + "-" + "Pallet"; | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | case 2: | 
|---|
|  |  |  | let transform = new THREE.Object3D(); | 
|---|
|  |  |  | let geometries = []; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | default: | 
|---|
|  |  |  | console.error("InitPallet param[type] error ===>> " + type); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | let palletGeometry = new THREE.BoxGeometry(30 ,2,40); | 
|---|
|  |  |  | transform.position.set(0 ,7, 0); | 
|---|
|  |  |  | transform.updateMatrix(); | 
|---|
|  |  |  | palletGeometry.applyMatrix4(transform.matrix); | 
|---|
|  |  |  | geometries.push(palletGeometry) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | clone.position.x = palletX + positionX; | 
|---|
|  |  |  | clone.position.y = palletY + positionY; | 
|---|
|  |  |  | clone.position.z = palletZ + positionZ; | 
|---|
|  |  |  | scene.addObject(clone); | 
|---|
|  |  |  | }) | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | let palletLeftGeometry = new THREE.BoxGeometry(30 ,5,2); | 
|---|
|  |  |  | transform.position.set(0 ,5, -15); | 
|---|
|  |  |  | transform.updateMatrix(); | 
|---|
|  |  |  | palletLeftGeometry.applyMatrix4(transform.matrix); | 
|---|
|  |  |  | geometries.push(palletLeftGeometry) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | let palletRightGeometry = new THREE.BoxGeometry(30 ,5,2); | 
|---|
|  |  |  | transform.position.set(0 ,5, 15); | 
|---|
|  |  |  | transform.updateMatrix(); | 
|---|
|  |  |  | palletRightGeometry.applyMatrix4(transform.matrix); | 
|---|
|  |  |  | geometries.push(palletRightGeometry) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | let mergedGeometry = BufferGeometryUtils.mergeBufferGeometries(geometries); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | let palletObj = new THREE.Mesh(mergedGeometry, palletMat, 0); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | palletList.map(item => { | 
|---|
|  |  |  | let clone = palletObj.clone(); | 
|---|
|  |  |  | let positionX; | 
|---|
|  |  |  | let positionY; | 
|---|
|  |  |  | let positionZ; | 
|---|
|  |  |  | switch (type) { | 
|---|
|  |  |  | case 1: | 
|---|
|  |  |  | positionX = ref.positionX || 0; | 
|---|
|  |  |  | positionY = ref.bottomHight + (item.lev1-1)*ref.binHeight || 0; | 
|---|
|  |  |  | positionZ = (item.bay1-1)*-ref.binHeight || 0; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | clone.name = item.loc_no + "-" + "Pallet"; | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | case 2: | 
|---|
|  |  |  | positionX = ref.position.x || 0; | 
|---|
|  |  |  | positionY = ref.position.y || 0; | 
|---|
|  |  |  | positionZ = ref.position.z || 0; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | positionX -= 48 - 1; | 
|---|
|  |  |  | positionY += 20; | 
|---|
|  |  |  | positionZ -= 138 + 20; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | clone.name = item.wrkNo + "-" + "Pallet"; | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | default: | 
|---|
|  |  |  | console.error("InitPallet param[type] error ===>> " + type); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | clone.position.x = palletX + positionX; | 
|---|
|  |  |  | clone.position.y = palletY + positionY; | 
|---|
|  |  |  | clone.position.z = palletZ + positionZ; | 
|---|
|  |  |  | scene.addObject(clone); | 
|---|
|  |  |  | }) | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | 
|---|
|  |  |  | * @param type 参照物类型:1 - 货架;    2 - 输送线 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | function InitGoods(scene, goodsList, ref, type) { | 
|---|
|  |  |  | const manager = new THREE.LoadingManager(); | 
|---|
|  |  |  | const goodsWrapImg = new THREE.TextureLoader( manager ).load( '../static/img/goodsWrap.jpg' ); | 
|---|
|  |  |  | const goodsImg = new THREE.TextureLoader( manager ).load( '../static/img/goods.jpg' ); | 
|---|
|  |  |  | new OBJLoader( manager ).load( '../static/model/obj/goods.obj', function ( obj ) { | 
|---|
|  |  |  | obj.traverse (function (child) { | 
|---|
|  |  |  | child.castShadow = true; | 
|---|
|  |  |  | if (child instanceof THREE.Mesh) { | 
|---|
|  |  |  | if (child.name === 'goods') { | 
|---|
|  |  |  | child.material.map = goodsImg; | 
|---|
|  |  |  | } else if (child.name === "goods_wrap") { | 
|---|
|  |  |  | child.material.map = goodsWrapImg; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | obj.scale.set(1, 1.2, 1.2); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | goodsList.map(item => { | 
|---|
|  |  |  | let clone = obj.clone(); | 
|---|
|  |  |  | let positionX; | 
|---|
|  |  |  | let positionY; | 
|---|
|  |  |  | let positionZ; | 
|---|
|  |  |  | switch (type) { | 
|---|
|  |  |  | case 1: | 
|---|
|  |  |  | positionX = ref.positionX || 0; | 
|---|
|  |  |  | positionY = ref.bottomHight + (item.lev1-1)*ref.binHeight || 0; | 
|---|
|  |  |  | positionZ = (item.bay1-1)*-ref.binHeight || 0; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | clone.name = item.loc_no + "-" + "Goods"; | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | case 2: | 
|---|
|  |  |  |  | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | default: | 
|---|
|  |  |  | console.error("InitGoods param[type] error ===>> " + type); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | clone.position.x = goodsX + positionX; | 
|---|
|  |  |  | clone.position.y = goodsY + positionY; | 
|---|
|  |  |  | clone.position.z = goodsZ + positionZ; | 
|---|
|  |  |  | scene.addObject(clone); | 
|---|
|  |  |  | }) | 
|---|
|  |  |  | let goodsMat = new THREE.MeshPhysicalMaterial({ | 
|---|
|  |  |  | color: 0x93710c, | 
|---|
|  |  |  | transparent: false, | 
|---|
|  |  |  | opacity: 0.7 | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | let goodsGeometry = new THREE.BoxGeometry(27 ,30,35); | 
|---|
|  |  |  | let goodsObj = new THREE.Mesh(goodsGeometry, goodsMat, 0); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | goodsList.map(item => { | 
|---|
|  |  |  | let clone = goodsObj.clone(); | 
|---|
|  |  |  | let positionX; | 
|---|
|  |  |  | let positionY; | 
|---|
|  |  |  | let positionZ; | 
|---|
|  |  |  | switch (type) { | 
|---|
|  |  |  | case 1: | 
|---|
|  |  |  | positionX = ref.positionX || 0; | 
|---|
|  |  |  | positionY = ref.bottomHight + (item.lev1-1)*ref.binHeight || 0; | 
|---|
|  |  |  | positionZ = (item.bay1-1)*-ref.binHeight || 0; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | clone.name = item.loc_no + "-" + "Goods"; | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | case 2: | 
|---|
|  |  |  | positionX = ref.position.x || 0; | 
|---|
|  |  |  | positionY = ref.position.y || 0; | 
|---|
|  |  |  | positionZ = ref.position.z || 0; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | positionX -= 48 - 1; | 
|---|
|  |  |  | positionY += 20; | 
|---|
|  |  |  | positionZ -= 138 + 20; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | clone.name = item.wrkNo + "-" + "Goods"; | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | default: | 
|---|
|  |  |  | console.error("InitGoods param[type] error ===>> " + type); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | clone.position.x = goodsX + positionX; | 
|---|
|  |  |  | clone.position.y = goodsY + positionY; | 
|---|
|  |  |  | clone.position.z = goodsZ + positionZ; | 
|---|
|  |  |  | scene.addObject(clone); | 
|---|
|  |  |  | }) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | function StoreGoods(object, data, shelf) { | 
|---|