import {MTLLoader} from "../lib/MTLLoader.js"; import {OBJLoader} from "../lib/OBJLoader.js"; import * as THREE from '../three.module.js'; const palletX = -18; const palletY = 2; const palletZ = -46; const goodsX = -17; const goodsY = 5; const goodsZ = -6; /** * 初始化托盘模型 * @param scene 场景 * @param palletList 托盘数据列表 * @param ref 参照物 * @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; clone.name = item.loc_no + "-" + "Pallet"; clone.traverse (function (child) { if (child instanceof THREE.Mesh) { child.name = item.loc_no + "-" + child.name; } }) 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"; clone.traverse (function (child) { if (child instanceof THREE.Mesh) { child.name = item.wrkNo + "-" + child.name; } }) 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) { 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"; clone.traverse (function (child) { if (child instanceof THREE.Mesh) { child.name = item.loc_no + "-" + child.name; } }) 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"; clone.traverse (function (child) { if (child instanceof THREE.Mesh) { child.name = item.wrkNo + "-" + child.name; } }) 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}