|  |  | 
 |  |  |          this.initStats(); | 
 |  |  |          this.initLight(); | 
 |  |  |          this.initFloor(); | 
 |  |  |          // this.initModel(); | 
 |  |  |          this.initModel(); | 
 |  |  |          // 取数据 | 
 |  |  |          this.initStoreData(); | 
 |  |  |       } | 
 |  |  |       this.animate = function () { | 
 |  |  |          requestAnimationFrame(this.animate.bind(this)); | 
 |  |  | 
 |  |  |          this.renderer.render(this.scene, this.camera); | 
 |  |  |          this.stats.end(); | 
 |  |  |          this.initStoreObjects(this); | 
 |  |  |          this.modelMove(); | 
 |  |  |       } | 
 |  |  |       this.initScene = function () { | 
 |  |  |          this.scene = new THREE.Scene(); | 
 |  |  | 
 |  |  |          // 纵横比aspect:全屏,使用的是浏览器的宽度/高度 | 
 |  |  |          //近平面near:0.1 | 
 |  |  |          //远平面视角far:10000 | 
 |  |  |          this.camera = new THREE.PerspectiveCamera(60, window.innerWidth / window.innerHeight, 0.1, 10000); | 
 |  |  |          this.camera = new THREE.PerspectiveCamera(60, window.innerWidth / window.innerHeight, 0.1, 50000); | 
 |  |  |          /* | 
 |  |  |             设置相机位置,注意threejs中的坐标系采用的是右手坐标系 | 
 |  |  |              */ | 
 |  |  | 
 |  |  |          helper.material.transparent = true; | 
 |  |  |          this.addObject( helper ); | 
 |  |  |       } | 
 |  |  |       this.initStoreObjects = function (object) { | 
 |  |  |          if (this.firstTime === 1) { | 
 |  |  |             // initStore(); | 
 |  |  |             if (Store3DData !== null) { | 
 |  |  |                for(let i = 0;i<Store3DData.data.length;i++){ | 
 |  |  |                   let optionArea = Store3DData.data[i]; | 
 |  |  |                   let area = new Store3DData(optionArea); | 
 |  |  |                   object.addObject(area); | 
 |  |  |                   for (let j = 0; j<optionArea.store.length;j++){ | 
 |  |  |                      let optionStore = optionArea[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 | 
 |  |  |                      } | 
 |  |  |                   } | 
 |  |  |                } | 
 |  |  |  | 
 |  |  |  | 
 |  |  |  | 
 |  |  |  | 
 |  |  |                //显示仓库区域 | 
 |  |  |                // 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.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; | 
 |  |  |          // let object; | 
 |  |  | 
 |  |  |                new OBJLoader( manager ) | 
 |  |  |                   .setMaterials( materials ) | 
 |  |  |                   .setPath( '../static/model/obj/' ) | 
 |  |  |                   .load( 'AGV.obj', function ( object ) { | 
 |  |  |                      object.position.y = 0; | 
 |  |  |                   .load( '货叉.obj', function ( object ) { | 
 |  |  |                      object.position.z = -500; | 
 |  |  |                      object.position.x = -2060; | 
 |  |  |                      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 ) { | 
 |  |  |                materials.preload(); | 
 |  |  |                new OBJLoader( manager ) | 
 |  |  |                   .setMaterials( materials ) | 
 |  |  |                   .setPath( '../static/model/obj/' ) | 
 |  |  |                   .load( '载货台.obj', function ( object ) { | 
 |  |  |                      object.position.z = -500; | 
 |  |  |                      object.position.x = -2060; | 
 |  |  |                      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 ) { | 
 |  |  |                materials.preload(); | 
 |  |  |                new OBJLoader( manager ) | 
 |  |  |                   .setMaterials( materials ) | 
 |  |  |                   .setPath( '../static/model/obj/' ) | 
 |  |  |                   .load( '堆垛机本体.obj', function ( object ) { | 
 |  |  |                      object.position.z = -500; | 
 |  |  |                      object.position.x = -2060; | 
 |  |  |                      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.modelMove = function () { | 
 |  |  |  | 
 |  |  |                   } | 
 |  |  |                } | 
 |  |  |                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; | 
 |  |  |             } | 
 |  |  |          } | 
 |  |  |          return null; | 
 |  |  |       this.initStoreData = function () { | 
 |  |  |  | 
 |  |  |       } | 
 |  |  |    }, |