| | |
| | | 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 = that.shelf.positionZ || 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} |