import * as THREE from '../three.module.js'; import * as BufferGeometryUtils from '../utils/BufferGeometryUtils.js'; const palletX = -2; const palletY = 0; const palletZ = -25; const goodsX = -2; const goodsY = 22; const goodsZ = -25; /** * 初始化托盘模型 * @param scene 场景 * @param palletList 托盘数据列表 * @param ref 参照物 * @param type 参照物类型:1 - 货架; 2 - 输送线 */ function InitPallet(scene, palletList, ref, type) { let palletMat = new THREE.MeshPhysicalMaterial({ color: 0x637e97, transparent: false, opacity: 0.7 }); let transform = new THREE.Object3D(); let geometries = []; let palletGeometry = new THREE.BoxGeometry(30 ,2,40); transform.position.set(0 ,7, 0); transform.updateMatrix(); palletGeometry.applyMatrix4(transform.matrix); geometries.push(palletGeometry) 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: switch (ref.objectType) { case 'chain': positionX = ref.position.x || 0; positionY = ref.position.y || 0; positionZ = ref.position.z || 0; positionX -= 48 - 1; positionY += 20; positionZ -= 138 + 20; break case 'roller': positionX = ref.position.x || 0; positionY = ref.position.y || 0; positionZ = ref.position.z || 0; positionY += 20; break default: break } 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 scene 场景 * @param goodsList 货物数据列表 * @param ref 参照物 * @param type 参照物类型:1 - 货架; 2 - 输送线 */ function InitGoods(scene, goodsList, ref, type) { 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: switch (ref.objectType) { case 'chain': positionX = ref.position.x || 0; positionY = ref.position.y || 0; positionZ = ref.position.z || 0; positionX -= 48 - 1; positionY += 20; positionZ -= 138 + 20; break case 'roller': positionX = ref.position.x || 0; positionY = ref.position.y || 0; positionZ = ref.position.z || 0; positionY += 20; break default: break } 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) { let that = this; that.data = data; that.object = object; that.shelf = shelf; let palletList = []; let goodsList = []; let init = function () { for (let i=0;i 0) { InitPallet(that.object, palletList, that.shelf, 1); } if (goodsList.length > 0) { InitGoods(that.object, goodsList, that.shelf, 1); } } init(); } export {StoreGoods, InitPallet, InitGoods}