|  |  |  | 
|---|
|  |  |  | 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'; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | function StoreGoods(object, data, shelf) { | 
|---|
|  |  |  | let that = this; | 
|---|
|  |  |  | that.data = data; | 
|---|
|  |  |  | that.object = object; | 
|---|
|  |  |  | that.shelf = shelf; | 
|---|
|  |  |  | let palletList = []; | 
|---|
|  |  |  | let goodsList = []; | 
|---|
|  |  |  | const palletX = -2; | 
|---|
|  |  |  | const palletY = 0; | 
|---|
|  |  |  | const palletZ = -25; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | for (let i=0;i<that.data.length;i++) { | 
|---|
|  |  |  | let obj = that.data[i]; | 
|---|
|  |  |  | if (obj.loc_sts === 'D') { | 
|---|
|  |  |  | palletList.push(obj); | 
|---|
|  |  |  | } else if (obj.loc_sts === 'F') { | 
|---|
|  |  |  | palletList.push(obj); | 
|---|
|  |  |  | goodsList.push(obj); | 
|---|
|  |  |  | 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: | 
|---|
|  |  |  | 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); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | const manager = new THREE.LoadingManager(); | 
|---|
|  |  |  | new MTLLoader(manager) | 
|---|
|  |  |  | .setPath( '../static/model/obj/' ) | 
|---|
|  |  |  | .load( 'pallet.mtl', function ( materials ) { | 
|---|
|  |  |  | materials.preload(); | 
|---|
|  |  |  | new OBJLoader( manager ) | 
|---|
|  |  |  | .setMaterials( materials ) | 
|---|
|  |  |  | .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: 0x2F4F4F | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | obj.scale.set(4, 4, 3.5); | 
|---|
|  |  |  | clone.position.x = palletX + positionX; | 
|---|
|  |  |  | clone.position.y = palletY + positionY; | 
|---|
|  |  |  | clone.position.z = palletZ + positionZ; | 
|---|
|  |  |  | scene.addObject(clone); | 
|---|
|  |  |  | }) | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | palletList.map(item => { | 
|---|
|  |  |  | let clone = obj.clone(); | 
|---|
|  |  |  | let positionX = that.shelf.positionX || 0; | 
|---|
|  |  |  | let positionY = that.shelf.bottomHight + (item.lev1-1)*that.shelf.binHeight || 0; | 
|---|
|  |  |  | let positionZ = (item.bay1-1)*-that.shelf.binHeight || 0; | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 初始化货物模型 | 
|---|
|  |  |  | * @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); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | clone.position.x = -18 + positionX; | 
|---|
|  |  |  | clone.position.y = 2 + positionY; | 
|---|
|  |  |  | clone.position.z = -46 + positionZ; | 
|---|
|  |  |  | that.object.addObject(clone); | 
|---|
|  |  |  | }) | 
|---|
|  |  |  | }, null, null ); | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | 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); | 
|---|
|  |  |  | }) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | export {StoreGoods} | 
|---|
|  |  |  | 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<that.data.length;i++) { | 
|---|
|  |  |  | let obj = that.data[i]; | 
|---|
|  |  |  | if (obj.loc_sts === 'D') { | 
|---|
|  |  |  | palletList.push(obj); | 
|---|
|  |  |  | } else if (obj.loc_sts === 'F') { | 
|---|
|  |  |  | palletList.push(obj); | 
|---|
|  |  |  | goodsList.push(obj); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (palletList.length > 0) { | 
|---|
|  |  |  | InitPallet(that.object, palletList, that.shelf, 1); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (goodsList.length > 0) { | 
|---|
|  |  |  | InitGoods(that.object, goodsList, that.shelf, 1); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | init(); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | export {StoreGoods, InitPallet, InitGoods} | 
|---|