#
luxiaotao1123
2021-12-17 5558da2487fc367badb01a9feb4c9e0e9ffa76f3
static/js/app.js
@@ -2,6 +2,7 @@
import Stats from './lib/stats.module.js';
import {MTLLoader} from './lib/MTLLoader.js';
import {OBJLoader} from './lib/OBJLoader.js';
import {StoreShelf} from './object/StoreShelf.js';
var APP = {
@@ -14,6 +15,10 @@
      this.firstTime = 1;
      this.stats = null;
      this.goodTypes=[];//存储所有的库位类型
      this.wrkTasks = [];// 任务列表
      this.crnTasks = [];// 堆垛机列表
      this.time = 0;//标记堆垛机运行的时间
      this.progress = 0;
      this.start = function () {
         this.initMain();
@@ -29,13 +34,17 @@
         this.initLight();
         this.initFloor();
         this.initModel();
         this.initStoreObjects(this);
      }
      this.animate = function () {
         requestAnimationFrame(this.animate.bind(this));
         this.stats.begin();
         this.renderer.render(this.scene, this.camera);
         this.stats.end();
         this.initStoreObjects(this);
         // this.queryTask();
         this.queryCrn();
         // this.modelMove();
         this.crnMove();
      }
      this.initScene = function () {
         this.scene = new THREE.Scene();
@@ -55,7 +64,7 @@
         // this.camera.position.z = 600;
         // //相机的朝向
         // this.camera.lookAt(0, 0, 0);
         this.camera.position.set( - 550, 670, 950 );
         this.camera.position.set( - 350, 1070, 1550 );
         this.camera.lookAt( this.scene.position );
         //将相机放到场景中
         this.scene.add(this.camera);
@@ -72,12 +81,29 @@
         this.dom.appendChild( this.renderer.domElement );
      }
      this.initLight = function () {
         //首先添加个环境光
         let ambient = new THREE.AmbientLight(0xffffff, 1); //AmbientLight,影响整个场景的光源
         ambient.position.set(0, 0, 0);
         this.addObject(ambient);
         //添加平行光,平行光类似于太阳光
         let directionalLight = new THREE.DirectionalLight(0xffffff, 0.3);//模拟远处类似太阳的光源
         directionalLight.position.set(0, 200, 0);
         this.addObject(directionalLight);
         //设置点光源
         let pointLight1 = new THREE.PointLight(0xffffff, 0.3);
         pointLight1.position.set(-500, 200, 0);
         this.addObject(pointLight1);
         let pointLight2 = new THREE.PointLight(0xffffff, 0.3);
         pointLight2.position.set(500, 200, 0);
         this.addObject(pointLight2);
         // ---
         var bulbLight = new THREE.PointLight( 0xffee88, 1, 2000, 2 );
         bulbLight.position.set( 600, 600, 500 );
         bulbLight.castShadow = true;
         bulbLight.power = 100;
         this.addObject(bulbLight);
         // var bulbLight = new THREE.PointLight( 0xffee88, 1, 2000, 2 );
         // bulbLight.position.set( 600, 600, 500 );
         // bulbLight.castShadow = true;
         // bulbLight.power = 100;
         // this.addObject(bulbLight);
         // ---
         // var bulbLight1 = new THREE.PointLight( 0xffee88, 1, 2000, 2 );
         // bulbLight1.position.set( -600, 600, 500 );
@@ -101,12 +127,12 @@
         // hemiLight.intensity = 0.0001;
         // this.addObject(hemiLight);
         const ambientLight = new THREE.AmbientLight( 0xcccccc, 0.4 );
         this.addObject( ambientLight );
         const directionalLight = new THREE.DirectionalLight( 0xffffff, 0.6 );
         directionalLight.position.set( - 1, 1, 1 );
         this.addObject( directionalLight );
         // const ambientLight = new THREE.AmbientLight( 0xcccccc, 0.4 );
         // this.addObject( ambientLight );
         //
         // const directionalLight = new THREE.DirectionalLight( 0xffffff, 0.6 );
         // directionalLight.position.set( - 1, 1, 1 );
         // this.addObject( directionalLight );
      }
      this.initOrbitControl = function () {
         this.orbitControl = new OrbitControls(this.camera, this.renderer.domElement);
@@ -121,7 +147,7 @@
      }
      this.initStats = function () {
         this.stats = new Stats();
         this.dom.appendChild( this.stats.dom );
         // this.dom.appendChild( this.stats.dom );
      }
      this.initBackground = function () {
         const cubeTextureLoader = new THREE.CubeTextureLoader();
@@ -156,11 +182,124 @@
         // this.addObject(plane);
         //
         // const helper = new THREE.PolarGridHelper( 2000, 100 );
         const helper = new THREE.GridHelper( 5000, 300 );
         const helper = new THREE.GridHelper( 8000, 300 );
         helper.position.y = - 0;
         helper.material.opacity = 0.25;
         helper.material.transparent = true;
         this.addObject( helper );
      }
      this.initStoreObjects = function (object) {
         if (this.firstTime === 1) {
            initStore();
            if (Store3DData !== null) {
               for(var group of Store3DData.data.store.groups) {
                  new StoreCrn(group.crn, object);
                  for (var line of group.lines) {
                     let shelf = new StoreShelf(line);
                     object.addObject(shelf);
                     //显示库位上的货物
                     // for (var bin of line.bins) {
                     //    let existGoods=this.getExistedGoodType(bin.State);
                     //    let storeGoods = new StoreGoods(optionGroup, bin);
                     //    if(existGoods==null) {
                     //       let goods=storeGoods.create();
                     //       object.addObject(goods);
                     //       this.goodTypes.push({type: bin.State, object: goods});
                     //    } else {
                     //       let goods= storeGoods.clone(existGoods);
                     //       object.addObject(goods);
                     //    }
                     // }
                  }
               }
               //显示仓库区域
               // for (let i = 0; i < Store3DData.Areas.length; i++) {
               //    let optionArea = Store3DData.Areas[i];
               //    let area = new StoreArea(optionArea);
               //    object.addObject(area);
               //    //显示仓库
               //    for (let j = 0; j < optionArea.Stores.length; j++) {
               //       let optionStore = optionArea.Stores[j];
               //       optionStore.Position = CommonFunction.transPosition(optionStore.Position, optionArea.Position);
               //       let store = new Store(optionStore);
               //       // object.addObject(store);
               //       //显示每行信息
               //       for (let k = 0; k < optionStore.Groups.length; k++) {
               //          let optionGroup = optionStore.Groups[k];
               //          optionGroup.Position = CommonFunction.transPosition(optionGroup.Position, optionStore.Position);
               //          let shelf = new StoreShelf(optionGroup);
               //          let group=new StoreGroup(optionGroup,1);
               //          object.addObject(shelf);
               //          // object.addObject(group);
               //          //显示库位上的货物
               //          for (let m = 0; m < optionGroup.Bins.length; m++) {
               //              let optionBin = optionGroup.Bins[m];
               //              let existGoods=this.getExistedGoodType(optionBin.State);
               //              let storeGoods = new StoreGoods(optionGroup, optionBin);
               //              if(existGoods==null) {
               //                  let goods=storeGoods.create();
               //                  object.addObject(goods);
               //                  this.goodTypes.push({type: optionBin.State, object: goods});
               //              } else {
               //                  let goods= storeGoods.clone(existGoods);
               //                  object.addObject(goods);
               //              }
               //          }
               //       }
               //
               //    }
               // }
               // this.firstTime = 0;
            }
         }
      }
      this.queryTask = function () {
         if (TaskDatas !== null) {
            for (let TaskData of TaskDatas) {
               let wrkTask = getArrVal(this.wrkTasks, "wrkNo", TaskData.wrkNo);
               if (null == wrkTask) {
                  this.wrkTasks.push(TaskData);
               }
            }
         }
      }
      this.queryCrn = function () {
         if (CrnDatas !== null) {
            for (let crnData of CrnDatas) {
               let crnTask = getArrVal(this.crnTasks, "crnNo", crnData.crnNo);
               if (null == crnTask) {
                  this.crnTasks.push(new CrnTask(crnData, this));
               } else {
                  if(!crnTask.run) {
                     // console.log(2)
                     crnTask.modify(crnData);
                  }
               }
            }
         }
      }
      this.getExistedGoodType=function(state){
         for (let i=0;i<this.goodTypes.length;i++) {
            let type=this.goodTypes[i];
            if(type.type===state) {
               return type.object;
            }
         }
         return null;
      }
      this.initModel = function () {
         let that = this;
@@ -197,12 +336,15 @@
                  .setPath( '../static/model/obj/' )
                  .load( '货叉.obj', function ( object ) {
                     object.position.z = -500;
                     object.position.x = -1560;
                     object.position.x = -2060;
                     // object.position.z = 0;
                     // object.position.x = 0;
                     // object.position.y = 0;
                     object.scale.set(0.025, 0.025, 0.025);
                     object.rotateY(- Math.PI / 2)
                     that.addObject( object );
                  }, null, null );
         });
            });
         new MTLLoader(manager)
            .setPath( '../static/model/obj/' )
            .load( '载货台.mtl', function ( materials ) {
@@ -212,7 +354,7 @@
                  .setPath( '../static/model/obj/' )
                  .load( '载货台.obj', function ( object ) {
                     object.position.z = -500;
                     object.position.x = -1560;
                     object.position.x = -2060;
                     object.scale.set(0.025, 0.025, 0.025);
                     object.rotateY(- Math.PI / 2)
                     that.addObject( object );
@@ -227,69 +369,46 @@
                  .setPath( '../static/model/obj/' )
                  .load( '堆垛机本体.obj', function ( object ) {
                     object.position.z = -500;
                     object.position.x = -1560;
                     object.position.x = -2060;
                     // object.position.z = 0;
                     // object.position.x = 0;
                     // object.position.y = 0;
                     object.scale.set(0.025, 0.025, 0.025);
                     object.rotateY(- Math.PI / 2)
                     that.addObject( object );
                  }, null, null );
            });
      }
      this.initStoreObjects = function (object) {
         if (this.firstTime === 1) {
            if (Store3DData !== null) {
               //显示仓库区域
               for (let i = 0; i < Store3DData.Areas.length; i++) {
                  let optionArea = Store3DData.Areas[i];
                  let area = new StoreArea(optionArea);
                  object.addObject(area);
                  //显示仓库
                  for (let j = 0; j < optionArea.Stores.length; j++) {
                     let optionStore = optionArea.Stores[j];
                     optionStore.Position = CommonFunction.transPosition(optionStore.Position, optionArea.Position);
                     let store = new Store(optionStore);
                     // object.addObject(store);
                     //显示每行信息
                     for (let k = 0; k < optionStore.Groups.length; k++) {
                        let optionGroup = optionStore.Groups[k];
                        optionGroup.Position = CommonFunction.transPosition(optionGroup.Position, optionStore.Position);
                        let shelf = new StoreShelf(optionGroup);
                        let group=new StoreGroup(optionGroup,1);
                        object.addObject(shelf);
                        // object.addObject(group);
                        //显示库位上的货物
                        for (let m = 0; m < optionGroup.Bins.length; m++) {
                            let optionBin = optionGroup.Bins[m];
                            let existGoods=this.getExistedGoodType(optionBin.State);
                            let storeGoods = new StoreGoods(optionGroup, optionBin);
                            if(existGoods==null) {
                                let goods=storeGoods.create();
                                object.addObject(goods);
                                this.goodTypes.push({type: optionBin.State, object: goods});
                            } else {
                                let goods= storeGoods.clone(existGoods);
                                object.addObject(goods);
                            }
                        }
                     }
      this.initModelMove = function () {
         console.log(this.crnTasks)
         // for (var wrkMast of this.wrkTasks) {
         //    this.crnBody = getArrVal(this.objects, "name", wrkMast.crnNo + "-body");
         //    // 取货点定位
         //    let sourceLocPosition = getBinPosition(wrkMast.sourceLocNo);
         //    let points = [new THREE.Vector3(this.crnBody.position.x, this.crnBody.position.y, this.crnBody.position.z), sourceLocPosition];
         //    this.curve = new Route(points);
         // }
                  }
      }
      this.modelMove = function () {
         if (this.curve) {
            this.progress += 0.001;
            if (this.progress>1.0) {
               this.curve = null;
            } else {
               let point = this.curve.getPoint(this.progress);
               if(point&&point.x){
                  this.crnBody.position.set(point.x,point.y,point.z);
               }
               this.firstTime = 0;
            }
         }
      }
      this.getExistedGoodType=function(state){
         for (let i=0;i<this.goodTypes.length;i++) {
            let type=this.goodTypes[i];
            if(type.type===state) {
               return type.object;
            }
      this.crnMove = function (object) {
         for (let crnTask of this.crnTasks) {
            crnTask.move();
         }
         return null;
      }
   },
};