新三维客流逻辑基本完成(未实装)

This commit is contained in:
sunzhenyu 2021-03-19 18:14:21 +08:00
parent ab6acbc7d8
commit d22f9d62de
26 changed files with 3222 additions and 1559 deletions

View File

@ -1,438 +0,0 @@
import { Staticmodel } from '@/jlmap3d/jl3dtrafficplan/loader/stationconfig.js';
//静态资源文件路劲
import { JL3D_LOCAL_STATIC } from '@/api/jlmap3d/assets3d.js';
//loader
import { FBXLoader } from '@/jlmap3d/main/loaders/FBXLoader';
//轨道视角控制
import { StationManagerControls } from '@/jlmap3d/jl3dstationmanager/controls/stationManagerControls';
//模型管理器
import { ModelManager } from '@/jlmap3d/jl3dstationmanager/loader/loader.js';
//骨骼动画模型辅助工具
import { SkeletonUtils } from '@/jlmap3d/main/utils/SkeletonUtils.js';
//获取信息接口
import { getPublishMapVersion, getPublishMapDetail,getPublish3dMapDetail} from '@/api/jlmap3d/load3ddata';
//cctv站台对象
import { PasserStation } from '@/jlmap3d/jl3dtrafficplan/model/passerstation.js';
//cctv检票机对象
import { PasserCheckDoor } from '@/jlmap3d/jl3dtrafficplan/model/passercheckdoor.js';
//cctv列车对象
import { PasserTrain } from '@/jlmap3d/jl3dtrafficplan/model/passertrain.js';
//cctv行人对象
import { PasserHuman } from '@/jlmap3d/jl3dtrafficplan/model/passerhuman.js';
//cctv渲染器
import { PasserRender } from '@/jlmap3d/jl3dpassflow/passerrender/passerrender.js';
//cctv行人ai
import { PasserAi } from '@/jlmap3d/jl3dtrafficplan/passerai/passerai.js';
//行人寻路相关工具
import { ZoneManager } from '@/jlmap3d/jl3dtrafficplan/model/zonemanager.js';
import { PathFinder } from '@/jlmap3d/jl3dtrafficplan/passerai/pathfinder.js';
//cctv通信工具
import { PassflowConnect } from '@/jlmap3d/jl3dtrafficplan/connect/stationconnect.js';
import StompClient from '@/utils/sock';
import store from '@/store/index';
// import { Loading } from 'element-ui';
import {Stats} from '@/jlmap3d/main/lib/stats.min.js';
//动画播放相关
let clock = new THREE.Clock();
let delta;
let scene,camerass,renderer;
let aiswitch = 0;
//动画组
let mixers = [];
//车站摄像机模型
let monitor;
//寻路相关对象
let passerZone = new ZoneManager();
let pathFinder = new PathFinder();
let path;
//设备动画action组
let deviceaction = [];
//控制帧率的webworker线程
let passerWebWork = new Worker(JL3D_LOCAL_STATIC+"/workertest/trafficplan/trafficstation.js");
//老版本临时ai控制
let olddataai = false;
export function Jl3dStationManager(dom,skinCode,routegroup,viewMap,initCode) {
// let stats = new Stats();
// dom.appendChild( stats.dom );
let scope = this;
this.dom = dom;
this.nowcode = null;
this.animateswitch = false;
this.signallights = [];
this.mixers = [];
this.showmodel = null;
this.allStationData = [];
this.humanWaitTop = 0;
this.humanWaitDown = 0;
this.humanInSpeed = 0;
this.humanOutSpeed = 0;
let waitForCreatIn = [];
let waitForCreatOutTop = [];
let waitForCreatOutDown = [];
//定义相机
camerass = new THREE.PerspectiveCamera(70, dom.offsetWidth / dom.offsetHeight, 0.01, 10000);
camerass.position.set(0,200,0);
camerass.aspect = dom.offsetWidth / dom.offsetHeight;
camerass.updateProjectionMatrix();
//定义场景(渲染容器)
scene = new THREE.Scene();
// scene.background = new THREE.Color(0xa0a0a0);
var mesh = new THREE.Mesh( new THREE.PlaneBufferGeometry( 1000, 1000 ), new THREE.MeshPhongMaterial( { color: 0x999999, depthWrite: false } ) );
mesh.rotation.x = - Math.PI / 2;
mesh.receiveShadow = true;
scene.add( mesh );
var grid = new THREE.GridHelper( 1000, 100, 0x000000, 0x000000 );
grid.material.opacity = 0.2;
grid.material.transparent = true;
scene.add( grid );
let passerRender = new PasserRender(viewMap);
passerRender.initView(dom,scene,camerass);
passerRender.reSize(scope.dom.offsetWidth,scope.dom.offsetHeight);
//定义全局光
let ambientLight = new THREE.AmbientLight(0xffffff, 1.3);
scene.add(ambientLight);
var light = new THREE.HemisphereLight( 0xffffff, 0x444444 );
light.position.set( 0, 4000, 0 );
scene.add( light );
let controls = new THREE.StationManagerControls(camerass, dom,camerass,scene,mesh);
// controls.maxPolarAngle = Math.PI / 2;
// controls.minPolarangle = Math.PI / 5;
// controls.maxDistance = 800;
controls.screenSpacePanning = true;
controls.target.set( 1, 0, 0 );
controls.controlMode = "Draw";
controls.update();
this.selectmodel = null;
// let mouse = new THREE.Vector2();
let raycaster = new THREE.Raycaster();
//进站运动中乘客
let humanlist = new THREE.Group();
//上行等待上车乘客
let topWaitPassers = new THREE.Group();
//下行等待上车乘客
let downWaitPassers = new THREE.Group();
//出站乘客
let outStationPassers = new THREE.Group();
let passerHuman = new PasserHuman();
let passerAi = new PasserAi(passerZone,pathFinder);
this.anime = null;
this.modelmanager = new ModelManager();
// let loadingInstance = Loading.service({ fullscreen: true });
let stationlist = [];
let socktest = null;
let passerStation = new PasserStation();
let passerCheckDoor = new PasserCheckDoor();
let passerTrain = new PasserTrain();
// document.addEventListener( "mousedown", onselect, false );
this.modelmanager.loadpromise(Staticmodel, scope.mixers,"2").then(function (data) {
// console.log(scope.modelmanager.station.mesh.getObjectByName("top"));
// let testtop = scope.modelmanager.station.mesh.getObjectByName("down");
// for(let i=0;i<testtop.children.length;i++){
// console.log(testtop.children[i].matrixWorld.elements[12]);
// console.log(testtop.children[i].matrixWorld.elements);
// }
// console.log(scope.modelmanager.station.mesh.getObjectByName("down"));
passerStation.initStationAnimation(scope.modelmanager.station.mesh,mixers,deviceaction,scene);
passerCheckDoor.initCheckDoorInAnimation(scope.modelmanager.zhajiin.mesh,mixers,deviceaction,scene);
passerCheckDoor.initCheckDoorOutAnimation(scope.modelmanager.zhajiout.mesh,mixers,deviceaction,scene);
passerTrain.initTrain(scope.modelmanager.train.mesh,mixers,deviceaction,scene);
scene.add(scope.modelmanager.section.mesh);
monitor = scope.modelmanager.monitor.mesh;
scene.add(monitor);
console.log("animate");
animate();
})
this.initTrafficStart = function(){
passerStation.initCodeStation(initCode);
scope.humanWaitTop = passerStation.nowStation.toppassers;
scope.humanWaitDown = passerStation.nowStation.downpassers;
scope.humanInSpeed = 0;
scope.humanOutSpeed = 0;
passerHuman.speed = scope.humanInSpeed;
passerAi.initPasser(humanlist,topWaitPassers,downWaitPassers,passerHuman,scope);
updatePasserData(humanlist.children.length,topWaitPassers.children.length,downWaitPassers.children.length,outStationPassers.children.length,passerHuman.speed);
scope.resetscene();
}
this.changestation = function(stationname){
passerStation.changestation(stationname);
// console.log(passerStation.nowStation);
scope.humanWaitTop = passerStation.nowStation.toppassers;
scope.humanWaitDown = passerStation.nowStation.downpassers;
passerHuman.speed = passerStation.nowStation.topspeed + passerStation.nowStation.downspeed;
updatePasserData(humanlist.children.length,topWaitPassers.children.length,downWaitPassers.children.length,outStationPassers.children.length,passerHuman.speed);
scope.resetscene();
}
this.updateNowStationData = function(){
for(let i=0;i<passerStation.nowStation.topspeed;i++){
let newIn = {
overGoal:"top",
};
waitForCreatIn.push(newIn);
}
for(let i=0;i<passerStation.nowStation.downspeed;i++){
let newIn = {
overGoal:"down",
};
waitForCreatIn.push(newIn);
}
scope.humanInSpeed = passerStation.nowStation.topspeed+passerStation.nowStation.downspeed;
passerHuman.speed = scope.humanInSpeed;
passerWebWork.postMessage(["changespeed",scope.humanInSpeed/30]);
}
this.updateNowLeaveData = function(direct,outNum){
if(direct == "top"){
waitForCreatOutTop = getnum(outNum,17);
// console.log(waitForCreatOutTop);
for(let i=0;i<waitForCreatOutTop.length;i++){
for(let j=0;j<waitForCreatOutTop[i];j++){
setTimeout(function(){
// console.log(passerZone.list["standtop"].doorpoints[i]);
passerHuman.newHumanCreate(outStationPassers,passerZone.list["standtop"].doorpoints[i],5,"top",i);
}, Math.random()*1000*j);
}
}
}else{
waitForCreatOutDown = getnum(outNum,17);
for(let i=0;i<waitForCreatOutDown.length;i++){
for(let j=0;j<waitForCreatOutDown[i];j++){
setTimeout(function(){
// console.log(passerZone.list["standdown"].doorpoints[i]);
passerHuman.newHumanCreate(outStationPassers,passerZone.list["standdown"].doorpoints[i],5,"down",i);
}, Math.random()*1000*j);
}
}
}
}
this.resetscene = function(){
aiswitch = 1;
passerAi.toppasserin = false;
passerAi.downpasserin = false;
//下车控制开关
passerAi.toppasseron = false;
passerAi.downpasseron = false;
passerAi.toppasserinNum = 0;
passerAi.downpasserinNum = 0;
passerTrain.toptrain.nowcode = null;
passerTrain.downtrain.nowcode = null;
// humanlist = new THREE.Group();
for(let j=0; j<humanlist.children.length;j++){
humanlist.remove(humanlist.children[j]);
j--;
// j--;
}
for(let j=0; j<topWaitPassers.children.length;j++){
topWaitPassers.remove(topWaitPassers.children[j]);
j--;
// j--;
}
for(let j=0; j<downWaitPassers.children.length;j++){
downWaitPassers.remove(downWaitPassers.children[j]);
j--;
// j--;
}
for(let j=0; j<outStationPassers.children.length;j++){
outStationPassers.remove(outStationPassers.children[j]);
j--;
// j--;
}
passerTrain.toptrain.position.y = -20000;
passerTrain.downtrain.position.y = -20000;
deviceaction.down.action.reset();
deviceaction.down.action.time = deviceaction.down.action._clip.duration;
deviceaction.down.action.timeScale = -1;
deviceaction.down.action.play();
deviceaction.top.action.reset();
deviceaction.top.action.time = deviceaction.down.action._clip.duration;
deviceaction.top.action.timeScale = -1;
deviceaction.top.action.play();
for(let an=passerTrain.toptrain.action.top.length-1;an>=0;an--){
passerTrain.toptrain.action.top[an].reset();
passerTrain.toptrain.action.top[an].time = passerTrain.toptrain.action.top[an]._clip.duration;
passerTrain.toptrain.action.top[an].timeScale = -1;
passerTrain.toptrain.action.top[an].play();
}
for(let an=passerTrain.toptrain.action.down.length-1;an>=0;an--){
passerTrain.toptrain.action.down[an].reset();
passerTrain.toptrain.action.down[an].time = passerTrain.toptrain.action.down[an]._clip.duration;
passerTrain.toptrain.action.down[an].timeScale = -1;
passerTrain.toptrain.action.down[an].play();
}
// for(let an=actions.length-1;an>=0;an--){
// actions[an].reset();
// actions[an].time = actions[an]._clip.duration;
// actions[an].timeScale = -1;
// actions[an].play();
// }
setTimeout(function(){
passerAi.initPasser(humanlist,topWaitPassers,downWaitPassers,passerHuman,scope);
aiswitch = 0;
}, 2000);
}
function startWorker(){
let updateaianimate = setInterval(
function(){
// console.log("?");
if(aiswitch == 0){
updatePasserData(humanlist.children.length,topWaitPassers.children.length,downWaitPassers.children.length,outStationPassers.children.length,passerHuman.speed);
passerHuman.moveAnimateUpdate(humanlist,topWaitPassers,downWaitPassers,outStationPassers,passerHuman);
passerAi.aiUpdate(humanlist,topWaitPassers,downWaitPassers,outStationPassers,passerHuman,passerCheckDoor,deviceaction);
// passerZone.zoneActionCheck(humanlist,passerHuman,passerCheckDoor,deviceaction);
delta = clock.getDelta();
for(let i=mixers.length-1;i>=0;i--){
if(mixers[i]._actions[0].isRunning()){
mixers[i].update( delta );
}
}
// for(let i=topWaitPassers.children.length-1;i>=0;i--){
// if(topWaitPassers.children[i].mixer._actions[0].isRunning()){
// topWaitPassers.children[i].mixer.update( delta );
// }
// }
// for(let i=downWaitPassers.children.length-1;i>=0;i--){
// if(downWaitPassers.children[i].mixer._actions[0].isRunning()){
// downWaitPassers.children[i].mixer.update( delta );
// }
// }
// for(let i=outStationPassers.children.length-1;i>=0;i--){
// if(outStationPassers.children[i].mixer._actions[0].isRunning()){
// outStationPassers.children[i].mixer.update( delta );
// }
// }
// for(let i=humanlist.children.length-1;i>=0;i--){
// if(humanlist.children[i].mixer._actions[0].isRunning()){
// humanlist.children[i].mixer.update( delta );
// }
// }
}
}
, 100);
passerWebWork.onmessage = function (event) {
if(aiswitch == 0){
// console.log(humanlist.children.length);
this.allStationData = [];
if(waitForCreatIn.length>0){
let direct = Math.floor(Math.random()*(3-1+1))+1;
//1--top
//2-- down
if(direct == 1){
passerHuman.newHumanCreate(humanlist,passerZone.getzoneposition("enter1"),0,waitForCreatIn[0].overGoal);
}else{
passerHuman.newHumanCreate(humanlist,passerZone.getzoneposition("enter2"),0,waitForCreatIn[0].overGoal);
}
waitForCreatIn.shift();
}
}
};
}
//
// function onselect(event){
// if(event.button == '0'){
//
// //定义光线
// let raycaster = new THREE.Raycaster();
// //定义平面鼠标点击坐标
// let mouse = new THREE.Vector2();
// mouse.x = (event.clientX / scope.dom.offsetWidth) * 2 - 1;
// mouse.y = -(event.clientY / scope.dom.offsetHeight) * 2 + 1;
//
// raycaster.setFromCamera( mouse, camerass );
//
// let intersects = raycaster.intersectObject(scope.modelmanager.station.mesh,true);
// console.log(intersects[0].point);
// }
// }
//循环渲染函数
function animate() {
passerRender.update();
// console.log(passerRender);
// console.log("ss");
// if(passerRender.state == "freeview"){
controls.update();
// }
// delta = clock.getDelta();
requestAnimationFrame(animate);
}
window.onresize = function () {
passerRender.reSize(scope.dom.offsetWidth,scope.dom.offsetHeight);
}
this.switchviews = function(viewmode){
passerRender.changeRenderMode(viewmode);
}
function getnum(num,pnum){
let re = [];
let base = Math.floor(num/pnum);
let reset = num%pnum;
for(let i=0;i<pnum;i++){
let nownum = base+(i<reset?1:0);
re.push(nownum);
}
return re;
}
}

View File

@ -10,10 +10,11 @@ export function silumationConnect(deviceaction,toptrain,downtrain,routegroup,pas
let start = true; let start = true;
let topic = '/user/queue/simulation/jl3d/'+routegroup; let topic = '/user/queue/simulation/jl3d/'+routegroup;
let header = {'X-Token': getToken() }; let header = {'X-Token': getToken() };
socketon(topic); // scope.socketon(topic);
function socketon(topic) { this.socketon = function() {
try { try {
start = true;
scope.teststomp.subscribe(topic, callback, header); scope.teststomp.subscribe(topic, callback, header);
} catch (error) { } catch (error) {
console.error('websocket订阅失败'); console.error('websocket订阅失败');
@ -21,83 +22,15 @@ export function silumationConnect(deviceaction,toptrain,downtrain,routegroup,pas
}; };
this.socketoff = function(topic) { this.socketoff = function() {
start = false;
scope.teststomp.unsubscribe(topic); scope.teststomp.unsubscribe(topic);
}; };
// 仿真socket接口回调函数 // 仿真socket接口回调函数
function callback(Response) { function callback(Response) {
const data = JSON.parse(Response.body); let data = JSON.parse(Response.body);
if(data.type == "PFV"){
for(let i=0;i<passerStation.stationlist.length;i++){
if(passerStation.stationlist[i].code == data.body){
jl3d.changestation(passerStation.stationlist[i].name);
updateValue(passerStation.stationlist[i].name);
i = passerStation.stationlist.length;
}
}
}
// /** 站台客流当前人数信息 */
// if(data.type == "STAND_PFI"){
//
// let newStandData = data.body;
// let count = 0;
// for(let j=0;j<passerStation.stationlist.length;j++){
// count = 0;
//
// for(let i=0;i<newStandData.length;i++){
//
//
// if(passerStation.stationlist[j].topstand == newStandData[i].standCode){
//
// passerStation.stationlist[j].topspeed = newStandData[i].to;
// passerStation.stationlist[j].toppassers = newStandData[i].num;
// count++;
// }
// if(passerStation.stationlist[j].downstand == newStandData[i].standCode){
//
// passerStation.stationlist[j].downspeed = newStandData[i].to;
// passerStation.stationlist[j].downpassers = newStandData[i].num;
// count++;
// }
//
// if(count == 2){
// i = newStandData.length;
// }
// }
// }
//
// jl3d.updateNowStationData();
//
// if(start){
// start = false;
// jl3d.initTrafficStart();
// }
//
// // jl3d.allStationData = data.body;
// }
// if(data.type == "TRAIN_PFI_BL"){
//
// if(toptrain.nowcode == data.body.code && topswitch == true){
//
// //根据上下车人数创建人
// jl3d.updateNowLeaveData("top",data.body.out);
// setTimeout(function(){
// passerAi.passerout("top","start",data.body.in)
// }, 5000);
//
// }
// if(downtrain.nowcode == data.body.code && downswitch == true){
// //根据上下车人数创建人
// jl3d.updateNowLeaveData("down",data.body.out);
// setTimeout(function(){
// passerAi.passerout("down","start",data.body.in);
// }, 5000);
// }
// }
if(data.type == "DeviceCtrl_3D"){ if(data.type == "DeviceCtrl_3D"){
@ -172,15 +105,15 @@ export function silumationConnect(deviceaction,toptrain,downtrain,routegroup,pas
for(let i=0,leni = data.body.length;i<leni;i++){ for(let i=0,leni = data.body.length;i<leni;i++){
if(data.body[i].section == passerStation.nowStation.topsection){ if(data.body[i].section == passerStation.nowStation.topsection){
if(toptrain.nowcode != data.body[i].code){ if(toptrain.nowcode != data.body[i].code){
toptrain.nowcode = data.body[i].code; toptrain.nowcode = data.body[i].code;
sockStationPass.topswitch = true; sockStationPass.topswitch = true;
} }
toptrain.position.copy(toptrain.curve.getPointAt(data.body[i].offset)); toptrain.position.copy(toptrain.curve.getPointAt(data.body[i].offset));
}else{ }else{
if(downtrain.nowcode == data.body[i].code){ if(toptrain.nowcode == data.body[i].code){
sockStationPass.topswitch = false sockStationPass.topswitch = false
toptrain.position.x -= 1; toptrain.position.x -= 1;
} }

View File

@ -10,11 +10,13 @@ export function stationConnect(deviceaction,toptrain,downtrain,routegroup,passer
let start = true; let start = true;
let topic = '/user/queue/simulation/passenger/'+routegroup; let topic = '/user/queue/simulation/passenger/'+routegroup;
let header = {'X-Token': getToken() }; let header = {'X-Token': getToken() };
this.topswitch = false; this.topswitch = false;
this.downswitch = false; this.downswitch = false;
socketon(topic); // scope.socketon(topic);
function socketon(topic) { this.socketon = function() {
start = true;
try { try {
scope.teststomp.subscribe(topic, callback, header); scope.teststomp.subscribe(topic, callback, header);
} catch (error) { } catch (error) {
@ -23,25 +25,25 @@ export function stationConnect(deviceaction,toptrain,downtrain,routegroup,passer
}; };
this.socketoff = function(topic) { this.socketoff = function() {
start = false;
scope.teststomp.unsubscribe(topic); scope.teststomp.unsubscribe(topic);
}; };
// 仿真socket接口回调函数 // 仿真socket接口回调函数
function callback(Response) { function callback(Response) {
const data = JSON.parse(Response.body); let data = JSON.parse(Response.body);
if(data.type == "PFV"){
for(let i=0;i<passerStation.stationlist.length;i++){
if(passerStation.stationlist[i].code == data.body){
// if(data.type == "PFV"){ jl3d.changestation(passerStation.stationlist[i].name);
// updateValue(passerStation.stationlist[i].name);
// for(let i=0;i<passerStation.stationlist.length;i++){ i = passerStation.stationlist.length;
// if(passerStation.stationlist[i].code == data.body){ }
// jl3d.changestation(passerStation.stationlist[i].name); }
// updateValue(passerStation.stationlist[i].name);
// i = passerStation.stationlist.length; }
// }
// }
//
// }
/** 站台客流当前人数信息 */ /** 站台客流当前人数信息 */
if(data.type == "STAND_PFI"){ if(data.type == "STAND_PFI"){
@ -89,140 +91,26 @@ export function stationConnect(deviceaction,toptrain,downtrain,routegroup,passer
if(toptrain.nowcode == data.body.code && scope.topswitch == true){ if(toptrain.nowcode == data.body.code && scope.topswitch == true){
// //根据上下车人数创建人 //根据上下车人数创建人
// jl3d.updateNowLeaveData("top",data.body.out); jl3d.updateNowLeaveData("top",data.body.out);
// setTimeout(function(){ setTimeout(function(){
// passerAi.passerout("top","start",data.body.in) passerAi.passerout("top","start",data.body.in)
// }, 5000); }, 5000);
} }
// if(downtrain.nowcode == data.body.code && scope.downswitch == true){ if(downtrain.nowcode == data.body.code && scope.downswitch == true){
// //根据上下车人数创建人 //根据上下车人数创建人
// jl3d.updateNowLeaveData("down",data.body.out); jl3d.updateNowLeaveData("down",data.body.out);
// setTimeout(function(){ setTimeout(function(){
// passerAi.passerout("down","start",data.body.in); passerAi.passerout("down","start",data.body.in);
// }, 5000); }, 5000);
// } }
}
if(data.type == "Simulation_Reset"){
start = true;
} }
//
// if(data.type == "DeviceCtrl_3D"){
// if(data.body.type == "PSD"){
//
// if(data.body.code == passerStation.nowStation.toppsd){
// if(data.body.open == 0){
//
// passerAi.passerout("top","end");
// deviceaction.top.action.reset();
// deviceaction.top.action.time =deviceaction.top.action._clip.duration;
// deviceaction.top.action.timeScale = -1;
// deviceaction.top.action.play();
//
// }else{
//
// deviceaction.top.action.reset();
// deviceaction.top.action.time = 0;
// deviceaction.top.action.timeScale = 1;
// deviceaction.top.action.play();
// }
// }
// if(data.body.code == passerStation.nowStation.downpsd){
// if(data.body.open == 0){
//
// deviceaction.down.action.reset();
// deviceaction.down.action.time = deviceaction.down.action._clip.duration;
// deviceaction.down.action.timeScale = -1;
// deviceaction.down.action.play();
// passerAi.passerout("down","end");
// }else{
//
// deviceaction.down.action.reset();
// deviceaction.down.action.time = 0;
// deviceaction.down.action.timeScale = 1;
// deviceaction.down.action.play();
// }
//
// }
// }
//
// if(data.body.type == "TRAIN_DOOR"){
//
// if(toptrain.nowcode == data.body.code){
//
// if(data.body.open == "0"){
// closetraindoor(toptrain,data.body.doorCode,"top");
//
// }else{
// opentraindoor(toptrain,data.body.doorCode,"top");
//
// }
//
// }
//
// if(downtrain.nowcode == data.body.code){
//
// if(data.body.open == "0"){
// closetraindoor(downtrain,data.body.doorCode,"down");
//
// }else{
// opentraindoor(downtrain,data.body.doorCode,"down");
//
// }
//
// }
//
// }
// }
//
// if(data.type == "TrainRun_3D"){
//
// for(let i=0,leni = data.body.length;i<leni;i++){
// if(data.body[i].section == passerStation.nowStation.topsection){
// if(toptrain.nowcode != data.body[i].code){
// toptrain.nowcode = data.body[i].code;
// topswitch = true;
// }
// toptrain.position.copy(toptrain.curve.getPointAt(data.body[i].offset));
//
//
// }else{
// if(downtrain.nowcode == data.body[i].code){
// topswitch = false
// toptrain.position.x -= 1;
// }
//
// }
//
// if(data.body[i].section == passerStation.nowStation.downsection){
// if(downtrain.nowcode != data.body[i].code){
// downtrain.nowcode = data.body[i].code;
// downswitch = true;
// }
// downtrain.position.copy(downtrain.curve.getPointAt(data.body[i].offset));
//
// }else{
// if(downtrain.nowcode == data.body[i].code){
// downswitch = false;
// downtrain.position.x += 1;
// }
//
// }
// }
// }
// if(data.type == 'Device_Load_Destroy_3D'){
// start = true;
// toptrain.nowcode = null;
// downtrain.nowcode = null;
// console.log("仿真重开=====================");
// }
//
//
// if(data.type == 'Simulation_Over') {
// store.dispatch('LogOut').then(() => {
// location.reload();
// });
// }
} }

View File

@ -754,7 +754,20 @@ THREE.StationManagerControls = function ( object, domElement ,regionManager,scen
// prevents the browser from setting it automatically. // prevents the browser from setting it automatically.
scope.domElement.focus ? scope.domElement.focus() : window.focus(); scope.domElement.focus ? scope.domElement.focus() : window.focus();
if(scope.controlMode == "Orbit"){ if(scope.controlMode == "Orbit" || scope.controlMode == "Draw"){
// if(scope.controlMode == "Orbit"){
// mouse.x = ( event.clientX / window.innerWidth ) * 2 - 1;
// mouse.y = - ( event.clientY / window.innerHeight ) * 2 + 1;
// raycaster.setFromCamera( mouse, camera );
// intersects = raycaster.intersectObjects( scene.children,true);
// if(intersects[0]){
//
// }
// jl3dStationManagerEquipSelect(intersects[0]);
// console.log(intersects);
// }
switch ( event.button ) { switch ( event.button ) {
case scope.mouseButtons.RIGHT: case scope.mouseButtons.RIGHT:
@ -837,7 +850,7 @@ THREE.StationManagerControls = function ( object, domElement ,regionManager,scen
transformControl.attach(scope.selectRegion.parent); transformControl.attach(scope.selectRegion.parent);
jl3dStationManagerUpdateSelectModel(scope.selectRegion.parent); jl3dStationManagerUpdateSelectModel(scope.selectRegion.parent);
}else{ }else{
transformControl.detach(scope.selectRegion);
} }
} }
} }
@ -859,7 +872,7 @@ THREE.StationManagerControls = function ( object, domElement ,regionManager,scen
event.preventDefault(); event.preventDefault();
scope.animateswitch = true; scope.animateswitch = true;
if(scope.controlMode == "Orbit"){ if(scope.controlMode == "Orbit" || scope.controlMode == "Draw"){
switch ( state ) { switch ( state ) {
case STATE.ROTATE: case STATE.ROTATE:

View File

@ -79,9 +79,9 @@ export function Jl3dStationManager(dom,skinCode,routegroup,initCode) {
this.humanWaitDown = 0; this.humanWaitDown = 0;
this.humanInSpeed = 0; this.humanInSpeed = 0;
this.humanOutSpeed = 0; this.humanOutSpeed = 0;
let waitForCreatIn = []; let waitForCreatIn = [];
let waitForCreatOutTop = [];
let waitForCreatOutDown = [];
//定义相机 //定义相机
camerass = new THREE.PerspectiveCamera(70, dom.offsetWidth / dom.offsetHeight, 0.1, 10000); camerass = new THREE.PerspectiveCamera(70, dom.offsetWidth / dom.offsetHeight, 0.1, 10000);
camerass.position.set(0,300,0); camerass.position.set(0,300,0);
@ -162,7 +162,7 @@ export function Jl3dStationManager(dom,skinCode,routegroup,initCode) {
let passerHuman = new PasserHuman(); let passerHuman = new PasserHuman();
let passerAi = new PasserAi(sceneRegion,pathFinder,sceneRegion); let passerAi = new PasserAi(pathFinder,sceneRegion);
this.anime = null; this.anime = null;
@ -177,12 +177,10 @@ export function Jl3dStationManager(dom,skinCode,routegroup,initCode) {
let passerTrain = new PasserTrain(); let passerTrain = new PasserTrain();
// document.addEventListener( "mousedown", onselect, false ); // document.addEventListener( "mousedown", onselect, false );
console.log(skinCode);
getPublish3dMapDetail(skinCode).then(netdata3d => { getPublish3dMapDetail(skinCode).then(netdata3d => {
console.log("1");
passerStation.loadMaterial(netdata3d); passerStation.loadMaterial(netdata3d);
this.modelmanager.loadpromise(Staticmodel, scope.mixers,"2").then(function (data) { this.modelmanager.loadpromise(Staticmodel, scope.mixers,"2").then(function (data) {
console.log("2");
passerStation.initStationAnimation(scope.modelmanager.station.mesh,mixers,deviceaction,scene); passerStation.initStationAnimation(scope.modelmanager.station.mesh,mixers,deviceaction,scene);
passerCheckDoor.initCheckDoorInAnimation(scope.modelmanager.zhajiin.mesh,mixers,deviceaction,scene); passerCheckDoor.initCheckDoorInAnimation(scope.modelmanager.zhajiin.mesh,mixers,deviceaction,scene);
passerCheckDoor.initCheckDoorOutAnimation(scope.modelmanager.zhajiout.mesh,mixers,deviceaction,scene); passerCheckDoor.initCheckDoorOutAnimation(scope.modelmanager.zhajiout.mesh,mixers,deviceaction,scene);
@ -194,25 +192,20 @@ export function Jl3dStationManager(dom,skinCode,routegroup,initCode) {
monitor = scope.modelmanager.monitor.mesh; monitor = scope.modelmanager.monitor.mesh;
scene.add(monitor); scene.add(monitor);
getPublishMapDetail(skinCode).then(netdata => {
console.log("3");
passerHuman.initHumans(scope.modelmanager.man1.mesh,scope.modelmanager.man2.mesh);
scene.add(humanlist);
scene.add(topWaitPassers);
scene.add(downWaitPassers);
scene.add(outStationPassers);
getPublishMapDetail(skinCode).then(netdata => {
passerHuman.initHumans(scope.modelmanager.man1.mesh,scope.modelmanager.man2.mesh);
// scene.add(humanlist);
passerStation.initStationList(netdata.data.stationList,netdata.data.stationStandList,netdata.data.psdList); passerStation.initStationList(netdata.data.stationList,netdata.data.stationStandList,netdata.data.psdList);
sockStationPass = new stationConnect(deviceaction,passerTrain.toptrain,passerTrain.downtrain,routegroup,passerStation,passerAi,scope); sockStationPass = new stationConnect(deviceaction,passerTrain.toptrain,passerTrain.downtrain,routegroup,passerStation,passerAi,scope);
sockStation = new silumationConnect(deviceaction,passerTrain.toptrain,passerTrain.downtrain,routegroup,passerStation,passerAi,sockStationPass,scope); sockStation = new silumationConnect(deviceaction,passerTrain.toptrain,passerTrain.downtrain,routegroup,passerStation,passerAi,sockStationPass,scope);
store.dispatch('app/animationsClose'); store.dispatch('app/animationsClose');
let checkobject = setInterval(function(){ let checkobject = setInterval(function(){
clearInterval(checkobject); clearInterval(checkobject);
switchStationManagerViews();
//进站控制 //进站控制
startWorker(); startWorker();
passerWebWork.postMessage(["on"]); passerWebWork.postMessage(["on"]);
@ -224,6 +217,7 @@ export function Jl3dStationManager(dom,skinCode,routegroup,initCode) {
}); });
this.initTrafficStart = function(){ this.initTrafficStart = function(){
console.log("initTrafficStart");
passerStation.initCodeStation(initCode); passerStation.initCodeStation(initCode);
scope.humanWaitTop = passerStation.nowStation.toppassers; scope.humanWaitTop = passerStation.nowStation.toppassers;
scope.humanWaitDown = passerStation.nowStation.downpassers; scope.humanWaitDown = passerStation.nowStation.downpassers;
@ -233,7 +227,7 @@ export function Jl3dStationManager(dom,skinCode,routegroup,initCode) {
// passerAi.initPasser(humanlist,topWaitPassers,downWaitPassers,passerHuman,scope); // passerAi.initPasser(humanlist,topWaitPassers,downWaitPassers,passerHuman,scope);
updatePasserData(humanlist.children.length,topWaitPassers.children.length,downWaitPassers.children.length,outStationPassers.children.length,passerHuman.speed); updatePasserData(humanlist.children.length,topWaitPassers.children.length,downWaitPassers.children.length,outStationPassers.children.length,passerHuman.speed);
scope.resetscene();
} }
this.changestation = function(stationname){ this.changestation = function(stationname){
@ -242,6 +236,7 @@ export function Jl3dStationManager(dom,skinCode,routegroup,initCode) {
scope.humanWaitTop = passerStation.nowStation.toppassers; scope.humanWaitTop = passerStation.nowStation.toppassers;
scope.humanWaitDown = passerStation.nowStation.downpassers; scope.humanWaitDown = passerStation.nowStation.downpassers;
passerHuman.speed = passerStation.nowStation.topspeed + passerStation.nowStation.downspeed; passerHuman.speed = passerStation.nowStation.topspeed + passerStation.nowStation.downspeed;
updatePasserData(humanlist.children.length,topWaitPassers.children.length,downWaitPassers.children.length,outStationPassers.children.length,passerHuman.speed); updatePasserData(humanlist.children.length,topWaitPassers.children.length,downWaitPassers.children.length,outStationPassers.children.length,passerHuman.speed);
scope.resetscene(); scope.resetscene();
@ -251,13 +246,13 @@ export function Jl3dStationManager(dom,skinCode,routegroup,initCode) {
// console.log(passerStation.nowStation); // console.log(passerStation.nowStation);
for(let i=0;i<passerStation.nowStation.topspeed;i++){ for(let i=0;i<passerStation.nowStation.topspeed;i++){
let newIn = { let newIn = {
overGoal:"topStand", overGoal:"top",
}; };
waitForCreatIn.push(newIn); waitForCreatIn.push(newIn);
} }
for(let i=0;i<passerStation.nowStation.downspeed;i++){ for(let i=0;i<passerStation.nowStation.downspeed;i++){
let newIn = { let newIn = {
overGoal:"downStand", overGoal:"down",
}; };
waitForCreatIn.push(newIn); waitForCreatIn.push(newIn);
} }
@ -268,28 +263,8 @@ export function Jl3dStationManager(dom,skinCode,routegroup,initCode) {
}; };
this.updateNowLeaveData = function(direct,outNum){ this.updateNowLeaveData = function(direct,outNum){
if(direct == "top"){
waitForCreatOutTop = getnum(outNum,17); passerHuman.leaveHumanCreate(direct,outNum,outStationPassers,sceneRegion.startRegion,sceneRegion.checkRegion,sceneRegion.standRegion);
// console.log(waitForCreatOutTop);
for(let i=0;i<waitForCreatOutTop.length;i++){
for(let j=0;j<waitForCreatOutTop[i];j++){
setTimeout(function(){
// console.log(sceneRegion.list["standtop"].doorpoints[i]);
passerHuman.newHumanCreate(outStationPassers,sceneRegion.list["standtop"].doorpoints[i],5,"top",i);
}, Math.random()*1000*j);
}
}
}else{
waitForCreatOutDown = getnum(outNum,17);
for(let i=0;i<waitForCreatOutDown.length;i++){
for(let j=0;j<waitForCreatOutDown[i];j++){
setTimeout(function(){
// console.log(sceneRegion.list["standdown"].doorpoints[i]);
passerHuman.newHumanCreate(outStationPassers,sceneRegion.list["standdown"].doorpoints[i],5,"down",i);
}, Math.random()*1000*j);
}
}
}
} }
this.resetscene = function(){ this.resetscene = function(){
@ -331,8 +306,6 @@ export function Jl3dStationManager(dom,skinCode,routegroup,initCode) {
// j--; // j--;
} }
passerTrain.toptrain.position.y = -20000; passerTrain.toptrain.position.y = -20000;
passerTrain.downtrain.position.y = -20000; passerTrain.downtrain.position.y = -20000;
@ -364,15 +337,17 @@ export function Jl3dStationManager(dom,skinCode,routegroup,initCode) {
// actions[an].play(); // actions[an].play();
// } // }
setTimeout(function(){ setTimeout(function(){
// passerAi.initPasser(humanlist,topWaitPassers,downWaitPassers,passerHuman,scope);
passerAi.initPasser(humanlist,topWaitPassers,downWaitPassers,passerHuman,scope);
aiswitch = 0; aiswitch = 0;
}, 2000); }, 2000);
} }
let updateaianimate;
function startWorker(){ function startWorker(){
let updateaianimate = setInterval( updateaianimate = setInterval(
function(){ function(){
// console.log("?"); // console.log("?");
if(aiswitch == 0){ if(aiswitch == 0){
@ -412,34 +387,41 @@ export function Jl3dStationManager(dom,skinCode,routegroup,initCode) {
} }
, 100); , 100);
passerWebWork.onmessage = function (event) {
if(aiswitch == 0){
// console.log(humanlist.children.length);
// console.log(sceneRegion.startRegion.group.children);
this.allStationData = [];
// console.log(Math.random());
// console.log(waitForCreatIn); }
if(waitForCreatIn.length>0){
let randomNum = Math.random();
let startNum = 0;
for(let i=0;i<sceneRegion.startRegion.group.children.length;i++){ passerWebWork.onmessage = function (event) {
startNum = startNum + sceneRegion.startRegion.group.children[i].startWeight; if(aiswitch == 0){
// console.log(humanlist.children.length);
// console.log(sceneRegion.startRegion.group.children);
this.allStationData = [];
// console.log(Math.random());
if(randomNum<startNum){ // console.log(waitForCreatIn);
if(waitForCreatIn.length>0){
let randomNum = Math.random();
let startNum = 0;
passerHuman.newHumanCreate(humanlist,sceneRegion.startRegion.group.children[i],0,waitForCreatIn[0].overGoal); for(let i=0;i<sceneRegion.startRegion.group.children.length;i++){
waitForCreatIn.shift(); startNum = startNum + sceneRegion.startRegion.group.children[i].startWeight;
i = sceneRegion.startRegion.group.children.length;
} if(randomNum<startNum){
passerHuman.newHumanCreate(humanlist,sceneRegion.startRegion.group.children[i],0,waitForCreatIn[0].overGoal);
waitForCreatIn.shift();
i = sceneRegion.startRegion.group.children.length;
} }
} }
} }
};
}
};
function closeStartWorker(){
clearInterval(updateaianimate);
} }
// //
// function onselect(event){ // function onselect(event){
// if(event.button == '0'){ // if(event.button == '0'){
@ -459,7 +441,7 @@ export function Jl3dStationManager(dom,skinCode,routegroup,initCode) {
// } // }
this.changeDrawType = function(drawType){ this.changeDrawType = function(drawType){
console.log(drawType);
controls.drawSwitch = true; controls.drawSwitch = true;
if(drawType == "startRegion"){ if(drawType == "startRegion"){
controls.drawColor = 0x2894FF; controls.drawColor = 0x2894FF;
@ -504,11 +486,28 @@ export function Jl3dStationManager(dom,skinCode,routegroup,initCode) {
this.changeControlMode = function(controlMode){ this.changeControlMode = function(controlMode){
if(controlMode == false){ if(controlMode == false){
scope.resetscene();
controls.controlMode = "Orbit"; controls.controlMode = "Orbit";
camerass.position.set(oldCameraPosition.x,oldCameraPosition.y,oldCameraPosition.z); camerass.position.set(oldCameraPosition.x,oldCameraPosition.y,oldCameraPosition.z);
controls.target.set( oldCameraTarget.x,oldCameraTarget.y,oldCameraTarget.z); controls.target.set( oldCameraTarget.x,oldCameraTarget.y,oldCameraTarget.z);
passerStation.resetPosition(controls.drawGroup,scope.modelmanager.zhajiin.mesh,scope.modelmanager.zhajiout.mesh); passerStation.resetPosition(controls.drawGroup,scope.modelmanager.zhajiin.mesh,scope.modelmanager.zhajiout.mesh);
sockStationPass.socketon();
sockStation.socketon();
scene.add(humanlist);
scene.add(topWaitPassers);
scene.add(downWaitPassers);
scene.add(outStationPassers);
// startWorker();
// passerWebWork.postMessage(["on"]);
sceneRegion.resetRegionData();
aiswitch = 0;
transformControl.detach(controls.selectRegion);
// scene.remove(controls.drawGroup);
}else if(controlMode == true){ }else if(controlMode == true){
aiswitch = 1;
controls.controlMode = "Draw"; controls.controlMode = "Draw";
oldCameraPosition.copy(camerass.position); oldCameraPosition.copy(camerass.position);
oldCameraTarget.copy(controls.target); oldCameraTarget.copy(controls.target);
@ -516,6 +515,16 @@ export function Jl3dStationManager(dom,skinCode,routegroup,initCode) {
// controls.target.set( 1, 0, 0 ); // controls.target.set( 1, 0, 0 );
passerStation.apartPosition(controls.drawGroup,scope.modelmanager.zhajiin.mesh,scope.modelmanager.zhajiout.mesh); passerStation.apartPosition(controls.drawGroup,scope.modelmanager.zhajiin.mesh,scope.modelmanager.zhajiout.mesh);
controls.initPlaneMesh(passerStation); controls.initPlaneMesh(passerStation);
sockStationPass.socketoff();
sockStation.socketoff();
scene.remove(humanlist);
scene.remove(topWaitPassers);
scene.remove(downWaitPassers);
scene.remove(outStationPassers);
// closeStartWorker();
// passerWebWork.postMessage(["off"]);
// scene.add(controls.drawGroup);
} }
} }
@ -532,8 +541,6 @@ export function Jl3dStationManager(dom,skinCode,routegroup,initCode) {
sceneConfig:JSON.stringify([]), sceneConfig:JSON.stringify([]),
simulationConfig:JSON.stringify([]), simulationConfig:JSON.stringify([]),
}; };
console.log(newSaveData);
// newSaveData.regionData.push();
return newSaveData; return newSaveData;
@ -541,18 +548,16 @@ export function Jl3dStationManager(dom,skinCode,routegroup,initCode) {
this.loadData = function(data){ this.loadData = function(data){
let regionData = JSON.parse(data.regionData); let regionData = JSON.parse(data.regionData);
sceneRegion.loadRegionData(regionData); sceneRegion.loadRegionData(regionData,controls);
}; };
//循环渲染函数 //循环渲染函数
function animate() { function animate() {
render(); render();
// console.log(passerRender); // console.log(passerRender);
// console.log("ss");
// if(passerRender.state == "freeview"){ // if(passerRender.state == "freeview"){
controls.update(); controls.update();
// } // }
// delta = clock.getDelta();
requestAnimationFrame(animate); requestAnimationFrame(animate);
@ -568,15 +573,5 @@ export function Jl3dStationManager(dom,skinCode,routegroup,initCode) {
} }
function getnum(num,pnum){
let re = [];
let base = Math.floor(num/pnum);
let reset = num%pnum;
for(let i=0;i<pnum;i++){
let nownum = base+(i<reset?1:0);
re.push(nownum);
}
return re;
}
} }

View File

@ -124,7 +124,7 @@ export function ModelManager(){
return new Promise(function(resolve, reject){ return new Promise(function(resolve, reject){
Promise.all(initlist).then((result) => { Promise.all(initlist).then((result) => {
console.log("success"); // console.log("success");
store.dispatch('app/animationsClose'); store.dispatch('app/animationsClose');
resolve("success"); //['成功了', 'success'] resolve("success"); //['成功了', 'success']
}).catch((error) => { }).catch((error) => {
@ -142,8 +142,8 @@ function fbxpromise(asset,mixers,model){
if( mode == "2"){ if( mode == "2"){
loader.load( asset.url, function ( object ) { loader.load( asset.url, function ( object ) {
model.mesh = object; model.mesh = object;
console.log(asset.type); // console.log(asset.type);
console.log(object); // console.log(object);
resolve(asset.deviceType); resolve(asset.deviceType);
} ); } );

View File

@ -11,6 +11,7 @@ export function PasserHuman() {
originhuman1.progress = 1; originhuman1.progress = 1;
// scene.add(originhuman1); // scene.add(originhuman1);
originhuman2 = creatHuman(); originhuman2 = creatHuman();
originhuman2.progress = 1;
// //
// let mixer1 = new THREE.AnimationMixer( originhuman1 ); // let mixer1 = new THREE.AnimationMixer( originhuman1 );
// let mixer2 = new THREE.AnimationMixer( originhuman2 ); // let mixer2 = new THREE.AnimationMixer( originhuman2 );
@ -80,12 +81,105 @@ export function PasserHuman() {
} }
//创建新的乘客 //创建新的乘客
this.newHumanCreate = function(humanlist,region,stage,overGoal){ this.newHumanCreate = function(humanlist,region,stage,overGoal,nowGoal){
let newhuman; let newhuman;
createHumanModel(newhuman,humanlist,region,stage,overGoal); createHumanModel(newhuman,humanlist,region,stage,overGoal,nowGoal);
} }
function createHumanModel(newhuman,humanlist,region,stage,overGoal){ this.newInitHumanCreate = function(humanlist,pos,overGoal,nowGoal,standDoorNum){
let newhuman;
newhuman = originhuman1.clone();
newhuman.position.copy(pos);
if(overGoal){
if(overGoal == "top"){
newhuman.rotation.y = Math.PI;
}
newhuman.overGoal = overGoal;
}
newhuman.standDoorNum = standDoorNum;
newhuman.status = "0";
if(nowGoal){
newhuman.nowGoal = nowGoal;
}
//年龄
newhuman.age = null;
//性别
newhuman.gender = "";
//身体状态
newhuman.bodyStatus = "";
newhuman.runrail = null;
newhuman.speed = 0;
humanlist.add(newhuman);
};
let waitForCreatOutTop = [];
let waitForCreatOutDown = [];
this.leaveHumanCreate = function(direct,outNum,outStationPassers,startRegion,checkRegion,standRegion){
if(direct == "top"){
waitForCreatOutTop = getnum(outNum,standRegion.belongList["top"].length-1);
// console.log(waitForCreatOutTop);
for(let i=0;i<waitForCreatOutTop.length;i++){
for(let j=0;j<waitForCreatOutTop[i];j++){
setTimeout(function(){
// console.log(sceneRegion.list["standtop"].doorpoints[i]);
createLeaveHumanModel(outStationPassers,standRegion.belongList["top"][i].position,startRegion);
}, Math.random()*1000*j);
}
}
}else{
waitForCreatOutDown = getnum(outNum,standRegion.belongList["down"].length-1);
for(let i=0;i<waitForCreatOutDown.length;i++){
for(let j=0;j<waitForCreatOutDown[i];j++){
setTimeout(function(){
// console.log(sceneRegion.list["standdown"].doorpoints[i]);
createLeaveHumanModel(outStationPassers,standRegion.belongList["down"][i].position,startRegion);
}, Math.random()*1000*j);
}
}
}
};
function createLeaveHumanModel(humanlist,pos,startRegion){
let newhuman;
newhuman = originhuman1.clone();
newhuman.position.copy(pos);
newhuman.status = "0";
//年龄
newhuman.age = null;
//性别
newhuman.gender = "";
//身体状态
newhuman.bodyStatus = "";
newhuman.runrail = null;
newhuman.speed = 0;
let randomNum = Math.random();
let endNum = 0;
for(let i=0;i<startRegion.group.children.length;i++){
endNum = endNum + startRegion.group.children[i].endWeight;
if(randomNum<endNum){
newhuman.overGoal = i;
newhuman.nowGoal = "findeCheck";
newhuman.connectCheckRegion = startRegion.group.children[i].connectCheckRegion;
i = startRegion.group.children.length;
}
}
humanlist.add(newhuman);
}
function createHumanModel(newhuman,humanlist,region,stage,overGoal,nowGoal){
let mantype = Math.floor(Math.random()*(3-1+1))+1; let mantype = Math.floor(Math.random()*(3-1+1))+1;
if(mantype == 1){ if(mantype == 1){
@ -107,16 +201,20 @@ export function PasserHuman() {
newhuman.overGoal = overGoal; newhuman.overGoal = overGoal;
} }
newhuman.standDoorNum = "";
newhuman.status = 0; newhuman.status = "0";
if(nowGoal){
let goalRandom = Math.random(); newhuman.nowGoal = nowGoal;
if(goalRandom<region.targetWeight){
newhuman.nowGoal = "ticketRegion";
}else{ }else{
newhuman.nowGoal = "securityRegion"; let goalRandom = Math.random();
if(goalRandom<region.targetWeight){
newhuman.nowGoal = "ticketRegion";
}else{
newhuman.nowGoal = "securityRegion";
}
} }
//年龄 //年龄
newhuman.age = null; newhuman.age = null;
//性别 //性别
@ -134,7 +232,7 @@ export function PasserHuman() {
} }
//定义新模型走路动画 //定义新模型走路动画
this.initMoveAnimate = function(model,name,points,index){ this.initMoveAnimate = function(model,name,points,index){
model.status = 1; model.status = "1";
let curve = new THREE.CatmullRomCurve3(points); let curve = new THREE.CatmullRomCurve3(points);
curve.curvrtype = "catmullrom"; curve.curvrtype = "catmullrom";
// curve.getLength(); // curve.getLength();
@ -158,23 +256,20 @@ export function PasserHuman() {
// outStationPassers.children[i].action.stop(); // outStationPassers.children[i].action.stop();
outStationPassers.children[i].status = 0; outStationPassers.children[i].status = 0;
if(outStationPassers.children[i].stage == 8){ if(outStationPassers.children[i].nowGoal == "outStation"){
passerHuman.uncache(outStationPassers.children[i]); passerHuman.uncache(outStationPassers.children[i]);
outStationPassers.remove(outStationPassers.children[i]); outStationPassers.remove(outStationPassers.children[i]);
i--; i--;
}else if(outStationPassers.children[i].stage == 7){ }else if(outStationPassers.children[i].nowGoal == "outCheck"){
outStationPassers.children[i].stage = 8; outStationPassers.children[i].nowGoal = "outStation";
} }
else if(outStationPassers.children[i].stage == 5){ else if(outStationPassers.children[i].nowGoal == "findeCheck"){
outStationPassers.children[i].stage = 7; outStationPassers.children[i].nowGoal = "outCheck";
} }
}else{ }else{
//根据动画进度获取动画轨迹上点
// console.log(i);
// console.log(humanlist.children[i].runrail);
// console.log(humanlist.children[i].progress);
let point = outStationPassers.children[i].runrail.getPointAt(outStationPassers.children[i].progress); let point = outStationPassers.children[i].runrail.getPointAt(outStationPassers.children[i].progress);
//更新模型坐标 //更新模型坐标
@ -194,13 +289,14 @@ export function PasserHuman() {
} }
for(let i=0;i<topWaitPassers.children.length;i++){ for(let i=0;i<topWaitPassers.children.length;i++){
if(topWaitPassers.children[i].status == 1){
if(topWaitPassers.children[i].status == "1"){
if(topWaitPassers.children[i].progress>=1){ if(topWaitPassers.children[i].progress>=1){
topWaitPassers.children[i].progress = 1; topWaitPassers.children[i].progress = 1;
// topWaitPassers.children[i].action.stop(); // topWaitPassers.children[i].action.stop();
topWaitPassers.children[i].status = 0; topWaitPassers.children[i].status = "0";
if(topWaitPassers.children[i].stage == 4){ if(topWaitPassers.children[i].nowGoal == "waitingTrain"){
passerHuman.uncache(topWaitPassers.children[i]); passerHuman.uncache(topWaitPassers.children[i]);
topWaitPassers.remove(topWaitPassers.children[i]); topWaitPassers.remove(topWaitPassers.children[i]);
i--; i--;
@ -229,12 +325,13 @@ export function PasserHuman() {
} }
for(let i=0;i<downWaitPassers.children.length;i++){ for(let i=0;i<downWaitPassers.children.length;i++){
if(downWaitPassers.children[i].status == 1){
if(downWaitPassers.children[i].status == "1"){
if(downWaitPassers.children[i].progress>=1){ if(downWaitPassers.children[i].progress>=1){
downWaitPassers.children[i].progress = 1; downWaitPassers.children[i].progress = 1;
// downWaitPassers.children[i].action.stop(); // downWaitPassers.children[i].action.stop();
downWaitPassers.children[i].status = 0; downWaitPassers.children[i].status = "0";
if(downWaitPassers.children[i].stage == 4){ if(downWaitPassers.children[i].nowGoal == "waitingTrain"){
passerHuman.uncache(downWaitPassers.children[i]); passerHuman.uncache(downWaitPassers.children[i]);
downWaitPassers.remove(downWaitPassers.children[i]); downWaitPassers.remove(downWaitPassers.children[i]);
i--; i--;
@ -263,42 +360,42 @@ export function PasserHuman() {
} }
for(let i=0;i<humanlist.children.length;i++){ for(let i=0;i<humanlist.children.length;i++){
if(humanlist.children[i].status == 1){ if(humanlist.children[i].status == "1"){
if(humanlist.children[i].progress>=1){ if(humanlist.children[i].progress>=1){
//更新模型坐标
if(humanlist.children[i].status == 1){ humanlist.children[i].progress = 1;
// humanlist.children[i].action.stop();
humanlist.children[i].status = "0";
humanlist.children[i].progress = 1; if(humanlist.children[i].nowGoal == "standRegion"){
// humanlist.children[i].action.stop();
humanlist.children[i].status = 0;
if(humanlist.children[i].stage == 3){
humanlist.children[i].stage = 4; humanlist.children[i].nowGoal = "waitingTrain";
if(humanlist.children[i].direct == "top"){ if(humanlist.children[i].overGoal == "top"){
topWaitPassers.add(humanlist.children[i]); topWaitPassers.add(humanlist.children[i]);
i--; i--;
}else if(humanlist.children[i].direct == "down"){ }else if(humanlist.children[i].overGoal == "down"){
downWaitPassers.add(humanlist.children[i]); downWaitPassers.add(humanlist.children[i]);
i--; i--;
} }
}else if(humanlist.children[i].stage == 2){ }else if(humanlist.children[i].nowGoal == "inCheck"){
humanlist.children[i].stage = 3; humanlist.children[i].nowGoal = "standRegion";
}else if(humanlist.children[i].stage == 1){ }else if(humanlist.children[i].nowGoal == "checkRegion"){
humanlist.children[i].nowGoal = "inCheck";
}else if(humanlist.children[i].nowGoal == "securityRegion"){
humanlist.children[i].stage = 2; humanlist.children[i].nowGoal = "checkRegion";
}else if(humanlist.children[i].stage == 0){ }else if(humanlist.children[i].nowGoal == "ticketRegion"){
// // console.log(humans[i].doors); // // console.log(humans[i].doors);
// zhajiin[humanlist.children[i].doors].waiting = 0; // zhajiin[humanlist.children[i].doors].waiting = 0;
humanlist.children[i].stage = 1; humanlist.children[i].nowGoal = "securityRegion";
} }
}
}else{ }else{
//根据动画进度获取动画轨迹上点 //根据动画进度获取动画轨迹上点
// console.log(i); // console.log(i);
@ -334,4 +431,16 @@ export function PasserHuman() {
} ); } );
} }
} }
function getnum(num,pnum){
let re = [];
let base = Math.floor(num/pnum);
let reset = num%pnum;
for(let i=0;i<pnum;i++){
let nownum = base+(i<reset?1:0);
re.push(nownum);
}
return re;
}
} }

View File

@ -203,8 +203,7 @@ export function PasserStation() {
this.apartPosition = function(drawGroup,zhajiin,zhajiout){ this.apartPosition = function(drawGroup,zhajiin,zhajiout){
// scope.down.position.y = scope.top.position.y; // scope.down.position.y = scope.top.position.y;
console.log(zhajiin);
console.log(zhajiout);
scope.top.position.z += 75; scope.top.position.z += 75;
scope.down.position.z -= 75; scope.down.position.z -= 75;
zhajiin.position.z -= 75; zhajiin.position.z -= 75;

View File

@ -2,15 +2,17 @@ export function checkRegion(data) {
var scope = this; var scope = this;
this.group = new THREE.Group(); this.group = new THREE.Group();
this.belongList = [];
this.creatCheckRegion = function(regionType,regionColor,pos,underFloor){ this.creatCheckRegion = function(regionType,regionColor,pos,underFloor){
let newRegion = creatRegion(regionColor); let newRegion = creatRegion(regionColor);
newRegion.regionType = regionType; newRegion.regionType = regionType;
newRegion.deviceType = "region"; newRegion.deviceType = "region";
newRegion.status = "1"; newRegion.status = "1";
newRegion.checkDirection = "in"; newRegion.checkDirection = "in";
newRegion.checkBelong = "1";
//连接设备 //连接设备
newRegion.connectDevice = "*"; newRegion.connectDevice = "*";
newRegion.inCheckPoints = [];
newRegion.position.set( newRegion.position.set(
pos.x, pos.x,
pos.y+0.1, pos.y+0.1,
@ -22,6 +24,7 @@ export function checkRegion(data) {
}; };
this.loadRegionData = function(regionData){ this.loadRegionData = function(regionData){
scope.group = new THREE.Group();
if(regionData.length>0){ if(regionData.length>0){
for(let i=0;i<regionData.length;i++){ for(let i=0;i<regionData.length;i++){
let newRegion = creatRegion(0x9F35FF); let newRegion = creatRegion(0x9F35FF);
@ -33,6 +36,8 @@ export function checkRegion(data) {
newRegion.status = regionData[i].status; newRegion.status = regionData[i].status;
newRegion.underFloor = regionData[i].underFloor; newRegion.underFloor = regionData[i].underFloor;
newRegion.checkDirection = regionData[i].checkDirection; newRegion.checkDirection = regionData[i].checkDirection;
newRegion.checkBelong = regionData[i].checkBelong;
newRegion.inCheckPoints = [];
newRegion.position.set( newRegion.position.set(
regionData[i].pos.x, regionData[i].pos.x,
regionData[i].pos.y, regionData[i].pos.y,
@ -49,19 +54,51 @@ export function checkRegion(data) {
} }
} }
this.resetRegionData = function(){
scope.belongList = [];
scope.belongList["in"] = [];
scope.belongList["out"] = [];
for(let i=0;i<scope.group.children.length;i++){
scope.group.children[i].actionIndex = i;
if(scope.group.children[i].checkDirection == "in"){
if(!scope.belongList["in"].hasOwnProperty(scope.group.children[i].checkBelong)){
scope.belongList["in"][scope.group.children[i].checkBelong] = [];
}
}
if(scope.group.children[i].checkDirection == "out"){
if(!scope.belongList["out"].hasOwnProperty(scope.group.children[i].checkBelong)){
scope.belongList["out"][scope.group.children[i].checkBelong] = [];
}
}
}
for(let i=0;i<scope.group.children.length;i++){
if(scope.group.children[i].checkDirection == "in"){
scope.belongList["in"][scope.group.children[i].checkBelong].push(scope.group.children[i]);
}
if(scope.group.children[i].checkDirection == "out"){
scope.belongList["out"][scope.group.children[i].checkBelong].push(scope.group.children[i]);
}
}
}
function creatRegion(color){ function creatRegion(color){
let region = new THREE.Group(); let region = new THREE.Group();
var geometry = new THREE.PlaneBufferGeometry( 2, 2, 4 ); var geometry = new THREE.PlaneBufferGeometry( 2, 2, 4 );
var material = new THREE.MeshBasicMaterial( { color: color } ); var material = new THREE.MeshBasicMaterial( { color: color } );
let regionHead = new THREE.Mesh( geometry, material ); let regionHead = new THREE.Mesh( geometry, material );
regionHead.name = "regionHead";
regionHead.rotation.x = -Math.PI/2; regionHead.rotation.x = -Math.PI/2;
regionHead.position.y = 0.01; regionHead.position.y = 0.01;
region.add(regionHead); region.add(regionHead);
var geom = new THREE.Geometry(); var geom = new THREE.Geometry();
var v1 = new THREE.Vector3(1,-1,0); var v1 = new THREE.Vector3(1,0,0);
var v2 = new THREE.Vector3(-1,-1,0); var v2 = new THREE.Vector3(-1,0,0);
var v3 = new THREE.Vector3(0,-2,0); var v3 = new THREE.Vector3(0,-1,0);
geom.vertices.push(v1); geom.vertices.push(v1);
@ -73,8 +110,11 @@ export function checkRegion(data) {
var material = new THREE.MeshBasicMaterial( { color: color } ); var material = new THREE.MeshBasicMaterial( { color: color } );
var regionDirect= new THREE.Mesh(geom, material); var regionDirect= new THREE.Mesh(geom, material);
regionDirect.name = "regionDirect";
regionDirect.rotation.x = -Math.PI/2; regionDirect.rotation.x = -Math.PI/2;
regionDirect.position.y = 0.01; regionDirect.position.y = 0.01;
regionDirect.position.z = 5;
region.add(regionDirect); region.add(regionDirect);
return region; return region;
@ -85,29 +125,16 @@ export function checkRegion(data) {
//出口闸机组 //出口闸机组
this.zhajiout = []; this.zhajiout = [];
//定义闸机状态 //定义闸机状态
for(let i=0;i<5;i++){
let zhaji = {
id:"in0"+(i+1),
status:0,
waiting:0
}
scope.zhajiin.push(zhaji);
}
for(let i=0;i<5;i++){
let zhaji = {
id:"out0"+(i+1),
status:0,
waiting:0
}
scope.zhajiout.push(zhaji);
}
//初始化闸机动画 //初始化闸机动画
this.initCheckDoorInAnimation = function(object,mixers ,deviceaction ,scene){ this.initCheckDoorInAnimation = function(object,mixers ,deviceaction ,scene){
let mixer = new THREE.AnimationMixer( object ); let mixer = new THREE.AnimationMixer( object );
let newclip = object.animations[ 0 ]; let newclip = object.animations[ 0 ];
let newzhaji = object; let newzhaji = object;
for(let i=0;i<newzhaji.children.length;i++){ for(let i=0;i<newzhaji.children.length;i++){
if(newzhaji.children[i].name == "in01"){ if(newzhaji.children[i].children.length>0){
newzhaji.children[i].animations = []; newzhaji.children[i].animations = [];
newzhaji.children[i].animations.push(newclip.clone()); newzhaji.children[i].animations.push(newclip.clone());
@ -123,77 +150,17 @@ export function checkRegion(data) {
mixer:mixer, mixer:mixer,
}; };
deviceaction[object.children[i].name] = device; deviceaction[object.children[i].name] = device;
}
if(newzhaji.children[i].name == "in02"){
newzhaji.children[i].animations = [];
newzhaji.children[i].animations.push(newclip.clone());
let mixer = new THREE.AnimationMixer( newzhaji.children[i] ); let zhaji = {
id:newzhaji.children[i].name,
let action =mixer.clipAction( newzhaji.children[i].animations[0]); status:0,
action.setLoop(THREE.LoopOnce); waiting:0
action.clampWhenFinished = true; }
scope.zhajiin.push(zhaji);
mixers.push(mixer);
let device = {
action:action,
mixer:mixer,
};
deviceaction[object.children[i].name] = device;
}
if(newzhaji.children[i].name == "in03"){
newzhaji.children[i].animations = [];
newzhaji.children[i].animations.push(newclip.clone());
let mixer = new THREE.AnimationMixer( newzhaji.children[i] );
let action =mixer.clipAction( newzhaji.children[i].animations[0]);
action.setLoop(THREE.LoopOnce);
action.clampWhenFinished = true;
mixers.push(mixer);
let device = {
action:action,
mixer:mixer,
};
deviceaction[object.children[i].name] = device;
}
if(newzhaji.children[i].name == "in04"){
newzhaji.children[i].animations = [];
newzhaji.children[i].animations.push(newclip.clone());
let mixer = new THREE.AnimationMixer( newzhaji.children[i] );
let action =mixer.clipAction( newzhaji.children[i].animations[0]);
action.setLoop(THREE.LoopOnce);
action.clampWhenFinished = true;
mixers.push(mixer);
let device = {
action:action,
mixer:mixer,
};
deviceaction[object.children[i].name] = device;
}
if(newzhaji.children[i].name == "in05"){
newzhaji.children[i].animations = [];
newzhaji.children[i].animations.push(newclip.clone());
let mixer = new THREE.AnimationMixer( newzhaji.children[i] );
let action =mixer.clipAction( newzhaji.children[i].animations[0]);
action.setLoop(THREE.LoopOnce);
action.clampWhenFinished = true;
mixers.push(mixer);
let device = {
action:action,
mixer:mixer,
};
deviceaction[object.children[i].name] = device;
} }
} }
scene.add(newzhaji); scene.add(newzhaji);
} }
@ -202,22 +169,10 @@ export function checkRegion(data) {
let mixer = new THREE.AnimationMixer( object ); let mixer = new THREE.AnimationMixer( object );
let newclip = object.animations[ 0 ]; let newclip = object.animations[ 0 ];
let newzhaji = object; let newzhaji = object;
for(let i=0;i<newzhaji.children.length;i++){ for(let i=0;i<newzhaji.children.length;i++){
if(newzhaji.children[i].name == "out01"){ if(newzhaji.children[i].children.length>0){
newzhaji.children[i].animations = [];
newzhaji.children[i].animations.push(newclip.clone());
let mixer = new THREE.AnimationMixer( newzhaji.children[i] );
let action =mixer.clipAction( newzhaji.children[i].animations[0]);
action.setLoop(THREE.LoopOnce);
action.clampWhenFinished = true;
mixers.push(mixer);
let device = {
action:action,
mixer:mixer,
};
deviceaction[object.children[i].name] = device;
}
if(newzhaji.children[i].name == "out02"){
newzhaji.children[i].animations = []; newzhaji.children[i].animations = [];
newzhaji.children[i].animations.push(newclip.clone()); newzhaji.children[i].animations.push(newclip.clone());
@ -233,74 +188,30 @@ export function checkRegion(data) {
mixer:mixer, mixer:mixer,
}; };
deviceaction[object.children[i].name] = device; deviceaction[object.children[i].name] = device;
let zhaji = {
id:newzhaji.children[i].name,
status:0,
waiting:0
}
scope.zhajiout.push(zhaji);
} }
if(newzhaji.children[i].name == "out03"){
newzhaji.children[i].animations = [];
newzhaji.children[i].animations.push(newclip.clone());
let mixer = new THREE.AnimationMixer( newzhaji.children[i] );
let action =mixer.clipAction( newzhaji.children[i].animations[0]);
action.setLoop(THREE.LoopOnce);
action.clampWhenFinished = true;
mixers.push(mixer);
let device = {
action:action,
mixer:mixer,
};
deviceaction[object.children[i].name] = device;
}
if(newzhaji.children[i].name == "out04"){
newzhaji.children[i].animations = [];
newzhaji.children[i].animations.push(newclip.clone());
let mixer = new THREE.AnimationMixer( newzhaji.children[i] );
let action =mixer.clipAction( newzhaji.children[i].animations[0]);
action.setLoop(THREE.LoopOnce);
action.clampWhenFinished = true;
mixers.push(mixer);
let device = {
action:action,
mixer:mixer,
};
deviceaction[object.children[i].name] = device;
}
if(newzhaji.children[i].name == "out05"){
newzhaji.children[i].animations = [];
newzhaji.children[i].animations.push(newclip.clone());
let mixer = new THREE.AnimationMixer( newzhaji.children[i] );
let action =mixer.clipAction( newzhaji.children[i].animations[0]);
action.setLoop(THREE.LoopOnce);
action.clampWhenFinished = true;
mixers.push(mixer);
let device = {
action:action,
mixer:mixer,
};
deviceaction[object.children[i].name] = device;
}
} }
scene.add(newzhaji); scene.add(newzhaji);
} }
//闸机动画控制 //闸机动画控制
this.checkDoorControl = function(type,door,deviceaction){ this.checkDoorControl = function(type,door,deviceaction){
let devicenum = door; let checkDoorId = door;
console.log();
if(type == "in"){ if(type == "in"){
let checkDoorId = scope.zhajiin[devicenum].id; // let checkDoorId = scope.zhajiin[devicenum].id;
deviceaction[checkDoorId].action.reset(); deviceaction[checkDoorId].action.reset();
deviceaction[checkDoorId].action.time = 0; deviceaction[checkDoorId].action.time = 0;
deviceaction[checkDoorId].action.timeScale = 1; deviceaction[checkDoorId].action.timeScale = 1;
deviceaction[checkDoorId].action.play(); deviceaction[checkDoorId].action.play();
}else if(type == "out"){ }else if(type == "out"){
let checkDoorId = scope.zhajiout[devicenum].id; // let checkDoorId = scope.zhajiout[devicenum].id;
deviceaction[checkDoorId].action.reset(); deviceaction[checkDoorId].action.reset();
deviceaction[checkDoorId].action.time = 0; deviceaction[checkDoorId].action.time = 0;
deviceaction[checkDoorId].action.timeScale = 1; deviceaction[checkDoorId].action.timeScale = 1;

View File

@ -23,6 +23,7 @@ export function elevatorRegion() {
}; };
this.loadRegionData = function(regionData){ this.loadRegionData = function(regionData){
scope.group = new THREE.Group();
if(regionData.length>0){ if(regionData.length>0){
for(let i=0;i<regionData.length;i++){ for(let i=0;i<regionData.length;i++){
let newRegion = creatRegion(0xFFFF37); let newRegion = creatRegion(0xFFFF37);

View File

@ -23,6 +23,7 @@ export function escalatorRegion() {
}; };
this.loadRegionData = function(regionData){ this.loadRegionData = function(regionData){
scope.group = new THREE.Group();
if(regionData.length>0){ if(regionData.length>0){
for(let i=0;i<regionData.length;i++){ for(let i=0;i<regionData.length;i++){
let newRegion = creatRegion(0x5CADAD); let newRegion = creatRegion(0x5CADAD);

View File

@ -28,6 +28,7 @@ export function securityRegion() {
}; };
this.loadRegionData = function(regionData){ this.loadRegionData = function(regionData){
scope.group = new THREE.Group();
if(regionData.length>0){ if(regionData.length>0){
for(let i=0;i<regionData.length;i++){ for(let i=0;i<regionData.length;i++){
let newRegion = creatRegion(0xFF0000); let newRegion = creatRegion(0xFF0000);

View File

@ -23,6 +23,7 @@ export function stairsRegion() {
}; };
this.loadRegionData = function(regionData){ this.loadRegionData = function(regionData){
scope.group = new THREE.Group();
if(regionData.length>0){ if(regionData.length>0){
for(let i=0;i<regionData.length;i++){ for(let i=0;i<regionData.length;i++){
let newRegion = creatRegion(0xFF5809); let newRegion = creatRegion(0xFF5809);

View File

@ -4,6 +4,7 @@ export function standRegion() {
this.list = []; this.list = [];
this.group = new THREE.Group(); this.group = new THREE.Group();
this.belongList = [];
this.creatStandRegion = function(regionType,regionColor,pos,underFloor){ this.creatStandRegion = function(regionType,regionColor,pos,underFloor){
let newRegion = creatRegion(regionColor); let newRegion = creatRegion(regionColor);
@ -13,6 +14,8 @@ export function standRegion() {
newRegion.status = "1"; newRegion.status = "1";
//连接设备 //连接设备
newRegion.connectDevice = "*"; newRegion.connectDevice = "*";
newRegion.standBelong = "1";
//区域方向 //区域方向
if(pos.z < 87.85){ if(pos.z < 87.85){
newRegion.direction = "top"; newRegion.direction = "top";
@ -32,6 +35,7 @@ export function standRegion() {
}; };
this.loadRegionData = function(regionData){ this.loadRegionData = function(regionData){
scope.group = new THREE.Group();
if(regionData.length>0){ if(regionData.length>0){
for(let i=0;i<regionData.length;i++){ for(let i=0;i<regionData.length;i++){
let newRegion = creatRegion(0x00EC00); let newRegion = creatRegion(0x00EC00);
@ -42,7 +46,7 @@ export function standRegion() {
newRegion.direction = regionData[i].direction; newRegion.direction = regionData[i].direction;
newRegion.status = regionData[i].status; newRegion.status = regionData[i].status;
newRegion.underFloor = regionData[i].underFloor; newRegion.underFloor = regionData[i].underFloor;
newRegion.standBelong = regionData[i].standBelong;
newRegion.position.set( newRegion.position.set(
regionData[i].pos.x, regionData[i].pos.x,
regionData[i].pos.y, regionData[i].pos.y,
@ -59,6 +63,21 @@ export function standRegion() {
} }
} }
this.resetRegionData = function(){
scope.belongList = [];
scope.belongList["top"] = [];
scope.belongList["down"] = [];
for(let i=0;i<scope.group.children.length;i++){
if(scope.group.children[i].direction == "top"){
scope.belongList["top"].push(scope.group.children[i]);
}
if(scope.group.children[i].direction == "down"){
scope.belongList["down"].push(scope.group.children[i]);
}
}
}
function creatRegion(color){ function creatRegion(color){
let region = new THREE.Group(); let region = new THREE.Group();
var geometry = new THREE.PlaneBufferGeometry( 2, 2, 4 ); var geometry = new THREE.PlaneBufferGeometry( 2, 2, 4 );

View File

@ -19,7 +19,7 @@ export function startRegion() {
newRegion.targetWeight = "%"; newRegion.targetWeight = "%";
//区域状态 //区域状态
newRegion.status = "1"; newRegion.status = "1";
newRegion.connectCheckRegion = "";
newRegion.position.set( newRegion.position.set(
pos.x, pos.x,
pos.y+0.1, pos.y+0.1,
@ -30,7 +30,32 @@ export function startRegion() {
scope.group.add(newRegion); scope.group.add(newRegion);
}; };
this.connectCheckRegion = function(checkRegion){
for(let i=0;i<scope.group.children.length;i++){
let distanceArray = [];
for(let k in checkRegion.belongList["out"]){
var pos1 = scope.group.children[i].position;
var pos2 = checkRegion.belongList["out"][k][0].position;
var distance = pos1.distanceTo(pos2);
distanceArray.push(
{
index:k,
distance:distance
}
);
}
distanceArray.sort(function(a, b){
return a.distance - b.distance;
});
scope.group.children[i].connectCheckRegion = distanceArray[0].index;
}
};
this.loadRegionData = function(regionData){ this.loadRegionData = function(regionData){
scope.group = new THREE.Group();
if(regionData.length>0){ if(regionData.length>0){
for(let i=0;i<regionData.length;i++){ for(let i=0;i<regionData.length;i++){
let newRegion = creatRegion(0x2894FF); let newRegion = creatRegion(0x2894FF);
@ -46,7 +71,7 @@ export function startRegion() {
//区域状态 //区域状态
newRegion.status = regionData[i].status; newRegion.status = regionData[i].status;
newRegion.underFloor = regionData[i].underFloor; newRegion.underFloor = regionData[i].underFloor;
newRegion.connectCheckRegion = "";
newRegion.position.set( newRegion.position.set(
regionData[i].pos.x, regionData[i].pos.x,
regionData[i].pos.y, regionData[i].pos.y,
@ -61,7 +86,7 @@ export function startRegion() {
scope.group.add(newRegion); scope.group.add(newRegion);
} }
} }
} };
function creatRegion(color){ function creatRegion(color){
let region = new THREE.Group(); let region = new THREE.Group();

View File

@ -4,8 +4,9 @@ export function ticketRegion() {
this.list = []; this.list = [];
this.group = new THREE.Group(); this.group = new THREE.Group();
this.belongList = [];
this.creatTicketRegion = function(regionType,regionColor,pos,underFloor){ this.creatTicketRegion = function(regionType,regionColor,pos,underFloor){
let newRegion = creatRegion(regionColor); let newRegion = creatRegion(regionColor);
newRegion.regionType = regionType; newRegion.regionType = regionType;
newRegion.deviceType = "region"; newRegion.deviceType = "region";
@ -18,6 +19,7 @@ export function ticketRegion() {
newRegion.connectDevice = "*"; newRegion.connectDevice = "*";
//运行状态 //运行状态
newRegion.runType = "auto"; newRegion.runType = "auto";
newRegion.ticketBelong = "1";
newRegion.position.set( newRegion.position.set(
pos.x, pos.x,
pos.y+0.1, pos.y+0.1,
@ -29,6 +31,7 @@ export function ticketRegion() {
}; };
this.loadRegionData = function(regionData){ this.loadRegionData = function(regionData){
scope.group = new THREE.Group();
if(regionData.length>0){ if(regionData.length>0){
for(let i=0;i<regionData.length;i++){ for(let i=0;i<regionData.length;i++){
let newRegion = creatRegion(0x00FFFF); let newRegion = creatRegion(0x00FFFF);
@ -41,6 +44,7 @@ export function ticketRegion() {
newRegion.stayTime = regionData[i].stayTime; newRegion.stayTime = regionData[i].stayTime;
newRegion.status = regionData[i].status; newRegion.status = regionData[i].status;
newRegion.underFloor = regionData[i].underFloor; newRegion.underFloor = regionData[i].underFloor;
newRegion.ticketBelong = regionData[i].ticketBelong;
newRegion.position.set( newRegion.position.set(
regionData[i].pos.x, regionData[i].pos.x,
@ -58,6 +62,16 @@ export function ticketRegion() {
} }
} }
this.resetRegionData = function(){
scope.belongList = [];
for(let i=0;i<scope.group.children.length;i++){
scope.belongList[scope.group.children[i].ticketBelong] = [];
}
for(let i=0;i<scope.group.children.length;i++){
scope.belongList[scope.group.children[i].ticketBelong].push(scope.group.children[i]);
}
}
function creatRegion(color){ function creatRegion(color){
let region = new THREE.Group(); let region = new THREE.Group();
var geometry = new THREE.PlaneBufferGeometry( 2, 2, 4 ); var geometry = new THREE.PlaneBufferGeometry( 2, 2, 4 );

View File

@ -21,6 +21,7 @@ export function unaccessRegion() {
}; };
this.loadRegionData = function(regionData){ this.loadRegionData = function(regionData){
scope.group = new THREE.Group();
if(regionData.length>0){ if(regionData.length>0){
for(let i=0;i<regionData.length;i++){ for(let i=0;i<regionData.length;i++){
let newRegion = creatRegion(0x272727); let newRegion = creatRegion(0x272727);

View File

@ -41,6 +41,29 @@ export function regionManager() {
control.drawGroup.add(scope.unaccessRegion.group); control.drawGroup.add(scope.unaccessRegion.group);
} }
this.getstandposition = function(name){
let n = Math.floor(Math.random() * (scope.standRegion.belongList[name].length-1));
let randompoint = new THREE.Vector3(0,scope.standRegion.belongList[name][n].position.y+0.1,0);
if(name == "top"){
randompoint.x = scope.standRegion.belongList[name][n].position.x + Math.random()*3;
randompoint.z = scope.standRegion.belongList[name][n].position.z +4+Math.random()*5;
}
if(name == "down"){
randompoint.x = scope.standRegion.belongList[name][n].position.x + Math.random()*3;
randompoint.z = scope.standRegion.belongList[name][n].position.z -4-Math.random()*5;
}
let standdata = {
standDoorNum:n,
point:randompoint
};
return standdata;
}
this.creatRegion = function(regionType,regionColor,pos,underFloor){ this.creatRegion = function(regionType,regionColor,pos,underFloor){
switch(regionType){ switch(regionType){
case "startRegion": case "startRegion":
@ -136,6 +159,7 @@ export function regionManager() {
connectDevice:scope.checkRegion.group.children[i].connectDevice, connectDevice:scope.checkRegion.group.children[i].connectDevice,
underFloor:scope.checkRegion.group.children[i].underFloor, underFloor:scope.checkRegion.group.children[i].underFloor,
checkDirection:scope.checkRegion.group.children[i].checkDirection, checkDirection:scope.checkRegion.group.children[i].checkDirection,
checkBelong:scope.checkRegion.group.children[i].checkBelong,
pos:{ pos:{
x:scope.checkRegion.group.children[i].position.x, x:scope.checkRegion.group.children[i].position.x,
@ -155,6 +179,7 @@ export function regionManager() {
status:scope.standRegion.group.children[i].status, status:scope.standRegion.group.children[i].status,
direction:scope.standRegion.group.children[i].direction, direction:scope.standRegion.group.children[i].direction,
underFloor:scope.standRegion.group.children[i].underFloor, underFloor:scope.standRegion.group.children[i].underFloor,
standBelong:scope.standRegion.group.children[i].standBelong,
pos:{ pos:{
x:scope.standRegion.group.children[i].position.x, x:scope.standRegion.group.children[i].position.x,
y:scope.standRegion.group.children[i].position.y, y:scope.standRegion.group.children[i].position.y,
@ -175,6 +200,7 @@ export function regionManager() {
runType:scope.ticketRegion.group.children[i].runType, runType:scope.ticketRegion.group.children[i].runType,
connectDevice:scope.ticketRegion.group.children[i].connectDevice, connectDevice:scope.ticketRegion.group.children[i].connectDevice,
underFloor:scope.ticketRegion.group.children[i].underFloor, underFloor:scope.ticketRegion.group.children[i].underFloor,
ticketBelong:scope.ticketRegion.group.children[i].ticketBelong,
pos:{ pos:{
x:scope.ticketRegion.group.children[i].position.x, x:scope.ticketRegion.group.children[i].position.x,
y:scope.ticketRegion.group.children[i].position.y, y:scope.ticketRegion.group.children[i].position.y,
@ -263,8 +289,16 @@ export function regionManager() {
}; };
//读取区域数据 //读取区域数据
this.loadRegionData = function(data){ this.loadRegionData = function(data,control){
console.log(data); control.drawGroup.remove(scope.startRegion.group);
control.drawGroup.remove(scope.securityRegion.group);
control.drawGroup.remove(scope.checkRegion.group);
control.drawGroup.remove(scope.standRegion.group);
control.drawGroup.remove(scope.ticketRegion.group);
control.drawGroup.remove(scope.elevatorRegion.group);
control.drawGroup.remove(scope.stairsRegion.group);
control.drawGroup.remove(scope.escalatorRegion.group);
control.drawGroup.remove(scope.unaccessRegion.group);
scope.startRegion.loadRegionData(data.startRegion); scope.startRegion.loadRegionData(data.startRegion);
scope.securityRegion.loadRegionData(data.securityRegion); scope.securityRegion.loadRegionData(data.securityRegion);
scope.checkRegion.loadRegionData(data.checkRegion); scope.checkRegion.loadRegionData(data.checkRegion);
@ -274,8 +308,24 @@ export function regionManager() {
scope.stairsRegion.loadRegionData(data.stairsRegion); scope.stairsRegion.loadRegionData(data.stairsRegion);
scope.escalatorRegion.loadRegionData(data.escalatorRegion); scope.escalatorRegion.loadRegionData(data.escalatorRegion);
scope.unaccessRegion.loadRegionData(data.unaccessRegion); scope.unaccessRegion.loadRegionData(data.unaccessRegion);
control.drawGroup.add(scope.startRegion.group);
control.drawGroup.add(scope.securityRegion.group);
control.drawGroup.add(scope.checkRegion.group);
control.drawGroup.add(scope.standRegion.group);
control.drawGroup.add(scope.ticketRegion.group);
control.drawGroup.add(scope.elevatorRegion.group);
control.drawGroup.add(scope.stairsRegion.group);
control.drawGroup.add(scope.escalatorRegion.group);
control.drawGroup.add(scope.unaccessRegion.group);
}; };
this.resetRegionData = function(){
scope.checkRegion.resetRegionData();
scope.standRegion.resetRegionData();
scope.ticketRegion.resetRegionData();
scope.startRegion.connectCheckRegion(scope.checkRegion);
}
//获取区域范围内点 //获取区域范围内点
this.getInitPos = function(name){ this.getInitPos = function(name){

View File

@ -1,6 +1,6 @@
export function PasserAi(zone,finder,region) { export function PasserAi(finder,region) {
let scope = this; let scope = this;
//下车控制开关 //下车控制开关
@ -9,67 +9,62 @@ export function PasserAi(zone,finder,region) {
//上车控制开关 //上车控制开关
this.toppasserin = false; this.toppasserin = false;
this.downpasserin = false; this.downpasserin = false;
let passerZone = zone;
this.toppasserinNum = 0;
this.downpasserinNum = 0;
let passerZone = region;
let pathFinder = finder; let pathFinder = finder;
let path; let path;
let playerPosition = new THREE.Vector3( -3.5, 0.5, 5.5 ); let playerPosition = new THREE.Vector3( -3.5, 0.5, 5.5 );
let targetPosition = new THREE.Vector3(); let targetPosition = new THREE.Vector3();
let target= null;
//生成下车出站人物 //生成下车出站人物
this.passerout = function(direct){ this.passerout = function(direct,mode,inNum){
// console.log(direct);
if(direct == "top"){ if(direct == "top"){
// console.log("toppasser"); // console.log("toppasser");
scope.toppasseron = true; if(mode == "start"){
setTimeout(function(){ scope.toppasseron = true;
scope.toppasseron = false
scope.toppasserin = true; scope.toppasserin = true;
scope.toppasserinNum = inNum;
}
if(mode == "end"){
scope.toppasseron = false
scope.toppasserin = false;
}
setTimeout(function(){
scope.toppasserin = false;
}, 20000);
}, 5000);
} }
if(direct == "down"){ if(direct == "down"){
// console.log("downpasser"); if(mode == "start"){
scope.downpasseron = true; scope.downpasseron = true;
setTimeout(function(){
scope.downpasseron = false;
scope.downpasserin = true; scope.downpasserin = true;
setTimeout(function(){ scope.downpasserinNum = inNum;
scope.downpasserin = false; }
}, 20000); if(mode == "end"){
}, 5000); scope.downpasseron = false;
scope.downpasserin = false;
}
} }
} }
//初始化加载人物
this.initPasser = function(humanlist,passerHuman){
for(let i=0;i<3;i++){
passerHuman.newHumanCreate(humanlist,passerZone.getinitposition("enter1"),0); //初始化加载人物
} this.initPasser = function(humanlist,topWaitPassers,downWaitPassers,passerHuman,jl3d){
for(let i=0;i<3;i++){
passerHuman.newHumanCreate(humanlist,passerZone.getinitposition("enter2"),0); for(let i=0;i<jl3d.humanWaitTop;i++){
} let standdata = passerZone.getstandposition("top");
for(let i=0;i<3;i++){ passerHuman.newInitHumanCreate(topWaitPassers,standdata.point,"top","waitingTrain",standdata.standDoorNum);
passerHuman.newHumanCreate(humanlist,passerZone.getinitposition("security"),1); }
} for(let i=0;i<jl3d.humanWaitDown;i++){
// for(let i=0;i<2;i++){ let standdata = passerZone.getstandposition("down");
// // passerHuman.newHumanCreate(humanlist,passerZone.getinitposition("entergate"),3); passerHuman.newInitHumanCreate(downWaitPassers,standdata.point,"down","waitingTrain",standdata.standDoorNum);
// } }
for(let i=0;i<6;i++){
let standdata = passerZone.getstandposition("standtop");
passerHuman.newHumanCreate(humanlist,standdata.point,4,"top",standdata.door);
}
for(let i=0;i<6;i++){
let standdata = passerZone.getstandposition("standdown");
passerHuman.newHumanCreate(humanlist,standdata.point,4,"down",standdata.door);
}
} }
function shortDistanceRegion(startPos,endRegion){ function shortDistanceRegion(startPos,endRegion){
let shortDistancePos = "";
let distanceArray = []; let distanceArray = [];
for(let i=0;i<endRegion.length;i++){ for(let i=0;i<endRegion.length;i++){
var pos1 = startPos; var pos1 = startPos;
@ -83,231 +78,296 @@ export function PasserAi(zone,finder,region) {
); );
} }
distanceArray.sort(function(a, b){ distanceArray.sort(function(a, b){
return a.distance - b.distance;
});
return distanceArray[0].pos;
}
function shortTicketRegion(startPos,endRegion){
let distanceArray = [];
for(let k in endRegion.belongList){
var pos1 = startPos;
var pos2 = endRegion.belongList[k][0].position;
var distance = pos1.distanceTo(pos2);
distanceArray.push(
{
ticketBelong:k,
distance:distance
}
);
}
distanceArray.sort(function(a, b){
return a.distance - b.distance; return a.distance - b.distance;
}); });
return distanceArray[0].pos; let index = Math.floor(Math.random() * (endRegion.belongList[distanceArray[0].ticketBelong].length-1));
return endRegion.belongList[distanceArray[0].ticketBelong][index].position;
}
// let outCheckNum = 0;
// if(checkType == "out"){
//
// for(let i=0;i<endRegion.length;i++){
// if(endRegion[i].checkDirection == "out"){
// var pos1 = startPos;
// var pos2 = endRegion[i].position;
// var distance = pos1.distanceTo(pos2);
// distanceArray.push(
// {
// pos:endRegion[i].position,
// distance:distance
// }
// );
// }
// }
// }
function selectInCheckRegion(startPos,endRegion,checkType){
let shortDistancePos = "";
let distanceArray = [];
for(let k in endRegion.belongList[checkType]){
var pos1 = startPos;
var pos2 = endRegion.belongList[checkType][k][0].position;
var distance = pos1.distanceTo(pos2);
distanceArray.push(
{
checkBelong:k,
distance:distance
}
);
}
distanceArray.sort(function(a, b){
return a.distance - b.distance;
});
let index = Math.floor(Math.random() * (endRegion.belongList[checkType][distanceArray[0].checkBelong].length-1));
return {
pos:endRegion.belongList[checkType][distanceArray[0].checkBelong][index].position,
checkDoorNum:endRegion.belongList[checkType][distanceArray[0].checkBelong][index].actionIndex,
};
}
function shortStandRegion(startPos,endRegion,standType){
let shortDistancePos = "";
// console.log(standType);
// console.log(endRegion.belongList);
let index = Math.floor(Math.random() * (endRegion.belongList[standType].length-1));
return {
pos:endRegion.belongList[standType][index].position,
standDoorNum:index,
};
} }
//人物站台阶段更新 //人物站台阶段更新
this.aiUpdate = function(humanlist,topWaitPassers,downWaitPassers,outStationPassers,passerHuman,passerCheckDoor,deviceaction){ this.aiUpdate = function(humanlist,topWaitPassers,downWaitPassers,outStationPassers,passerHuman,passerCheckDoor,deviceaction){
console.log(humanlist.children); for(let i=0;i<outStationPassers.children.length;i++){
for(let i=0;i<humanlist.children.length;i++){ if(outStationPassers.children[i].status == 0){
// console.log(humans[i]); //stage = 5 下车
if(humanlist.children[i].overGoal == "topStand" || humanlist.children[i].overGoal == "downStand"){ if(outStationPassers.children[i].nowGoal == "findeCheck"){
console.log(humanlist.children[i]); let points = [];
if(humanlist.children[i].status == 0){ points.push(new THREE.Vector3(outStationPassers.children[i].position.x,outStationPassers.children[i].position.y,outStationPassers.children[i].position.z));
if(humanlist.children[i].nowGoal == "ticketRegion"){
let points = [];
points.push(new THREE.Vector3(humanlist.children[i].position.x,humanlist.children[i].position.y,humanlist.children[i].position.z));
//寻找最近售票机点
targetPosition = shortDistanceRegion(humanlist.children[i].position,region.ticketRegion.group.children);
console.log(targetPosition);
//寻路售票机
path = pathFinder.find(points[0],targetPosition);
//
for(let i=0;i<path.length;i++){
points.push(new THREE.Vector3(path[i].x,path[i].y,path[i].z));
}
passerHuman.initMoveAnimate(humanlist.children[i],i,points,i);
} let index = Math.floor(Math.random() * (region.checkRegion.belongList["out"][outStationPassers.children[i].connectCheckRegion].length-1));
//寻找最近售票机点
targetPosition = region.checkRegion.belongList["out"][outStationPassers.children[i].connectCheckRegion][index].position;
outStationPassers.children[i].checkDoor = region.checkRegion.belongList["out"][outStationPassers.children[i].connectCheckRegion][index].actionIndex;
//寻路售票机
path = pathFinder.find(points[0],targetPosition);
//
for(let i=0;i<path.length;i++){
points.push(new THREE.Vector3(path[i].x,path[i].y+0.1,path[i].z));
}
passerHuman.initMoveAnimate(outStationPassers.children[i],i,points,i);
} }
if(humanlist.children[i].nowGoal == "securityRegion"){
// let points = []; //stage = 7 出闸机
// points.push(new THREE.Vector3(humanlist.children[i].position.x,humanlist.children[i].position.y,humanlist.children[i].position.z)); if(outStationPassers.children[i].nowGoal == "outCheck"){
// let points = [];
// targetPosition = passerZone.getzoneposition("security"); points.push(region.checkRegion.group.children[outStationPassers.children[i].checkDoor].getObjectByName("regionHead").getWorldPosition(new THREE.Vector3()));
// points.push(region.checkRegion.group.children[outStationPassers.children[i].checkDoor].getObjectByName("regionDirect").getWorldPosition(new THREE.Vector3()));
// path = pathFinder.find(points[0],targetPosition);
// passerCheckDoor.checkDoorControl("out",region.checkRegion.group.children[outStationPassers.children[i].checkDoor].connectDevice,deviceaction);
// for(let i=0;i<path.length;i++){
// points.push(new THREE.Vector3(path[i].x,path[i].y,path[i].z)); passerHuman.initMoveAnimate(outStationPassers.children[i],i,points,i);
// } }
// passerHuman.initMoveAnimate(humanlist.children[i],i,points,i);
// // console.log(path); //stage = 8 出站
// } if(outStationPassers.children[i].nowGoal == "outStation"){
let points = [];
points.push(new THREE.Vector3(outStationPassers.children[i].position.x,outStationPassers.children[i].position.y,outStationPassers.children[i].position.z));
//寻找最近售票机点
targetPosition = region.startRegion.group.children[outStationPassers.children[i].overGoal].position;
//寻路售票机
path = pathFinder.find(points[0],targetPosition);
//
for(let i=0;i<path.length;i++){
points.push(new THREE.Vector3(path[i].x,path[i].y+0.1,path[i].z));
}
passerHuman.initMoveAnimate(outStationPassers.children[i],i,points,i);
}
}
}
// console.log(humanlist.children);
if(scope.toppasserinNum >0){
for(let i=0;i<topWaitPassers.children.length;i++){
if(topWaitPassers.children[i].status == "0"){
//stage = 4 上车
if(topWaitPassers.children[i].nowGoal == "waitingTrain"){
if(scope.toppasserin && topWaitPassers.children[i].overGoal == "top"){
let points = [];
points.push(new THREE.Vector3(topWaitPassers.children[i].position.x,topWaitPassers.children[i].position.y,topWaitPassers.children[i].position.z));
let doorPos = region.standRegion.belongList["top"][topWaitPassers.children[i].standDoorNum].position;
// doorPos.z += 3;
// doorPos.y += 0.1;
points.push(new THREE.Vector3(doorPos.x,doorPos.y+0.1,doorPos.z-3));
if(points[1] == undefined){
}else{
scope.toppasserinNum -= 1;
passerHuman.initMoveAnimate(topWaitPassers.children[i],i,points,i);
}
}
}
}
}
}
if(scope.downpasserinNum >0){
for(let i=0;i<downWaitPassers.children.length;i++){
if(downWaitPassers.children[i].status == "0"){
//stage = 4 上车
if(downWaitPassers.children[i].nowGoal == "waitingTrain"){
if(scope.downpasserin && downWaitPassers.children[i].overGoal == "down"){
let points = [];
points.push(new THREE.Vector3(downWaitPassers.children[i].position.x,downWaitPassers.children[i].position.y,downWaitPassers.children[i].position.z));
let doorPos = region.standRegion.belongList["down"][downWaitPassers.children[i].standDoorNum].position;
points.push(new THREE.Vector3(doorPos.x,doorPos.y+0.1,doorPos.z+3));
if(points[1] == undefined){
}else{
scope.downpasserinNum -= 1;
passerHuman.initMoveAnimate(downWaitPassers.children[i],i,points,i);
}
}
}
} }
} }
// if(humanlist.children[i].status == 0){
// //stage = 0 进入车站 }
// if(humanlist.children[i].stage == 0){
// let points = [];
// points.push(new THREE.Vector3(humanlist.children[i].position.x,humanlist.children[i].position.y,humanlist.children[i].position.z)); for(let i=0;i<humanlist.children.length;i++){
// // console.log(humans[i]);
// targetPosition = passerZone.getzoneposition("security"); if(humanlist.children[i].overGoal == "top" || humanlist.children[i].overGoal == "down"){
//
// path = pathFinder.find(points[0],targetPosition); if(humanlist.children[i].status == "0"){
// // console.log(humanlist.children[0].status);
// for(let i=0;i<path.length;i++){ // console.log(humanlist.children[0].nowGoal);
// points.push(new THREE.Vector3(path[i].x,path[i].y,path[i].z)); if(humanlist.children[i].nowGoal == "ticketRegion"){
// } let points = [];
// passerHuman.initMoveAnimate(humanlist.children[i],i,points,i); points.push(new THREE.Vector3(humanlist.children[i].position.x,humanlist.children[i].position.y,humanlist.children[i].position.z));
// // console.log(path);
// } //寻找最近售票机点
// targetPosition = shortTicketRegion(humanlist.children[i].position,region.ticketRegion);
// //stage = 1 前往进站闸机
// if(humanlist.children[i].stage == 1){ //寻路售票机
// let points = []; path = pathFinder.find(points[0],targetPosition);
// points.push(new THREE.Vector3(humanlist.children[i].position.x,humanlist.children[i].position.y,humanlist.children[i].position.z)); //
// for(let i=0;i<path.length;i++){
// targetPosition = passerZone.getgateposition("entergate"); points.push(new THREE.Vector3(path[i].x,path[i].y+0.1,path[i].z));
// }
// path = pathFinder.find(points[0],targetPosition.point); passerHuman.initMoveAnimate(humanlist.children[i],i,points,i);
//
// humanlist.children[i].door = targetPosition.door; }
// for(let i=0;i<path.length;i++){ if(humanlist.children[i].nowGoal == "securityRegion"){
// points.push(new THREE.Vector3(path[i].x,path[i].y,path[i].z)); let points = [];
// } points.push(new THREE.Vector3(humanlist.children[i].position.x,humanlist.children[i].position.y,humanlist.children[i].position.z));
// passerHuman.initMoveAnimate(humanlist.children[i],i,points,i);
// } //寻找最近售票机点
// targetPosition = shortDistanceRegion(humanlist.children[i].position,region.securityRegion.group.children);
// //stage = 2 过闸机
// if(humanlist.children[i].stage == 2){ //寻路售票机
// let points = []; path = pathFinder.find(points[0],targetPosition);
// points.push(new THREE.Vector3(humanlist.children[i].position.x,humanlist.children[i].position.y,humanlist.children[i].position.z)); //
// points.push(new THREE.Vector3(humanlist.children[i].position.x,humanlist.children[i].position.y,humanlist.children[i].position.z-5)); for(let i=0;i<path.length;i++){
// points.push(new THREE.Vector3(path[i].x,path[i].y+0.1,path[i].z));
// passerCheckDoor.checkDoorControl("in",humanlist.children[i].door,deviceaction) }
// passerHuman.initMoveAnimate(humanlist.children[i],i,points,i); passerHuman.initMoveAnimate(humanlist.children[i],i,points,i);
// } }
//
// //stage = 3 前往站台 if(humanlist.children[i].nowGoal == "checkRegion"){
// if(humanlist.children[i].stage == 3){ let points = [];
// points.push(new THREE.Vector3(humanlist.children[i].position.x,humanlist.children[i].position.y,humanlist.children[i].position.z));
// let direct = Math.floor(Math.random()*(2))+1;
// // console.log(direct); //寻找最近售票机点
// let points = []; target = selectInCheckRegion(humanlist.children[i].position,region.checkRegion,"in");
// points.push(new THREE.Vector3(humanlist.children[i].position.x,humanlist.children[i].position.y,humanlist.children[i].position.z));
// // points.push(new THREE.Vector3(11.81,9.8,13.11)); humanlist.children[i].checkDoor = target.checkDoorNum;
// //寻路售票机
// //1--top path = pathFinder.find(points[0],target.pos);
// //2-- down for(let i=0;i<path.length;i++){
// if(direct == 1){ points.push(new THREE.Vector3(path[i].x,path[i].y+0.1,path[i].z));
// targetPosition = passerZone.getstandposition("standtop"); }
// path = pathFinder.find(points[0],targetPosition.point); passerHuman.initMoveAnimate(humanlist.children[i],i,points,i);
// humanlist.children[i].direct = "top"; }
// }else{
// targetPosition = passerZone.getstandposition("standdown"); if(humanlist.children[i].nowGoal == "inCheck"){
// path = pathFinder.find(points[0],targetPosition.point); let points = [];
// humanlist.children[i].direct = "down"; // console.log();
// } // console.log(region.checkRegion.group.children[humanlist.children[i].checkDoor].position);
// if(path[0].y<9.84){ // console.log(region.checkRegion.group.children[humanlist.children[i].checkDoor].getObjectByName("regionHead").getWorldPosition(new THREE.Vector3()));
// points.push(new THREE.Vector3(11.81,9.8,13.11)); // console.log(region.checkRegion.group.children[humanlist.children[i].checkDoor].getObjectByName("regionDirect").getWorldPosition(new THREE.Vector3()));
// points.push(new THREE.Vector3(29.5,1.77,13.16)); // console.log("================");
// points.push(region.checkRegion.group.children[humanlist.children[i].checkDoor].getObjectByName("regionHead").getWorldPosition(new THREE.Vector3()));
// } points.push(region.checkRegion.group.children[humanlist.children[i].checkDoor].getObjectByName("regionDirect").getWorldPosition(new THREE.Vector3()));
// for(let i=0;i<path.length;i++){
// points.push(new THREE.Vector3(path[i].x,path[i].y,path[i].z)); passerCheckDoor.checkDoorControl("in",region.checkRegion.group.children[humanlist.children[i].checkDoor].connectDevice,deviceaction);
// } passerHuman.initMoveAnimate(humanlist.children[i],i,points,i);
// humanlist.children[i].door = targetPosition.door; }
// passerHuman.initMoveAnimate(humanlist.children[i],i,points,i);
// }
// if(humanlist.children[i].nowGoal == "standRegion"){
// //stage = 4 上车 let points = [];
// if(humanlist.children[i].stage == 4){ points.push(new THREE.Vector3(humanlist.children[i].position.x,humanlist.children[i].position.y,humanlist.children[i].position.z));
// if(scope.toppasserin && humanlist.children[i].direct == "top"){
// //寻找最近售票机点
// target = shortStandRegion(humanlist.children[i].position,region.standRegion,humanlist.children[i].overGoal);
// let points = [];
// points.push(new THREE.Vector3(humanlist.children[i].position.x,humanlist.children[i].position.y,humanlist.children[i].position.z)); humanlist.children[i].standDoorNum = target.standDoorNum;
// //寻路售票机
// points.push(passerZone.list["standtop"].doorpoints[humanlist.children[i].door]); path = pathFinder.find(points[0],target.pos);
// //
// if(points[1] == undefined){ for(let i=0;i<path.length;i++){
// points.push(new THREE.Vector3(path[i].x,path[i].y+0.5,path[i].z));
// }else{ }
// passerHuman.initMoveAnimate(humanlist.children[i],i,points,i); passerHuman.initMoveAnimate(humanlist.children[i],i,points,i);
// } }
// }
// }
//
//
// if(scope.downpasserin && humanlist.children[i].direct == "down"){ }
// let points = [];
// points.push(new THREE.Vector3(humanlist.children[i].position.x,humanlist.children[i].position.y,humanlist.children[i].position.z));
//
// points.push(passerZone.list["standdown"].doorpoints[humanlist.children[i].door]);
//
// if(points[1] == undefined){
//
// }else{
// passerHuman.initMoveAnimate(humanlist.children[i],i,points,i);
// }
// // console.log(points);
// }
//
// }
//
// //stage = 5 下车
// if(humanlist.children[i].stage == 5){
// let points = [];
// points.push(new THREE.Vector3(humanlist.children[i].position.x,humanlist.children[i].position.y,humanlist.children[i].position.z));
// if(humanlist.children[i].direct == "top"){
// points.push(new THREE.Vector3(humanlist.children[i].position.x,humanlist.children[i].position.y,humanlist.children[i].position.z+5));
// }
// if(humanlist.children[i].direct == "down"){
// points.push(new THREE.Vector3(humanlist.children[i].position.x,humanlist.children[i].position.y,humanlist.children[i].position.z-5));
// }
// targetPosition = passerZone.getgateposition("exitgate");
// path = pathFinder.find(points[1],targetPosition.point);
// humanlist.children[i].door = targetPosition.door;
// for(let i=0;i<path.length;i++){
// points.push(new THREE.Vector3(path[i].x,path[i].y,path[i].z));
// }
// passerHuman.initMoveAnimate(humanlist.children[i],i,points,i);
// }
//
// //stage = 6 前往出站闸机
// // if(humanlist.children[i].stage == 6){
// // let points = [];
// // points.push(new THREE.Vector3(humanlist.children[i].position.x,humanlist.children[i].position.y,humanlist.children[i].position.z));
// //
// // groupID = pathfinder.getGroup( ZONE, points[0] );
// // targetPosition = passerZone.getgateposition("exitgate");
// // path = pathfinder.findPath( points[0], targetPosition, ZONE, groupID );
// //
// // for(let i=0;i<path.length;i++){
// // points.push(new THREE.Vector3(path[i].x,path[i].y,path[i].z));
// // }
// // passerHuman.initMoveAnimate(humanlist.children[i],i,points,i);
// // }
//
// //stage = 7 出闸机
// if(humanlist.children[i].stage == 7){
// let points = [];
// points.push(new THREE.Vector3(humanlist.children[i].position.x,humanlist.children[i].position.y,humanlist.children[i].position.z));
// points.push(new THREE.Vector3(humanlist.children[i].position.x+5,humanlist.children[i].position.y,humanlist.children[i].position.z));
//
// passerCheckDoor.checkDoorControl("out",humanlist.children[i].door,deviceaction)
// passerHuman.initMoveAnimate(humanlist.children[i],i,points,i);
// }
//
// //stage = 8 出站
// if(humanlist.children[i].stage == 8){
// let direct = Math.floor(Math.random()*(3-1+1))+1;
// let points = [];
// points.push(new THREE.Vector3(humanlist.children[i].position.x,humanlist.children[i].position.y,humanlist.children[i].position.z));
//
// //1--top
// //2-- down
// if(direct == 1){
// targetPosition = passerZone.getzoneposition("exit1");
// path = pathFinder.find(points[0],targetPosition);
// }else{
// targetPosition = passerZone.getzoneposition("exit2");
// path = pathFinder.find(points[0],targetPosition);
// }
//
// for(let i=0;i<path.length;i++){
// points.push(new THREE.Vector3(path[i].x,path[i].y,path[i].z));
// }
// passerHuman.initMoveAnimate(humanlist.children[i],i,points,i);
//
// }
// }
} }
} }

View File

@ -3,11 +3,11 @@ export function getBaseUrl() {
if (process.env.NODE_ENV === 'development') { if (process.env.NODE_ENV === 'development') {
// BASE_API = 'https://joylink.club/jlcloud'; // BASE_API = 'https://joylink.club/jlcloud';
// BASE_API = 'https://api.joylink.club/jlcloud'; // BASE_API = 'https://api.joylink.club/jlcloud';
// BASE_API = 'https://test.joylink.club/jlcloud'; BASE_API = 'https://test.joylink.club/jlcloud';
// BASE_API = 'http://192.168.8.107:9000'; // 袁琪 // BASE_API = 'http://192.168.8.107:9000'; // 袁琪
// BASE_API = 'http://192.168.8.129:9000'; // 旭强 // BASE_API = 'http://192.168.8.129:9000'; // 旭强
// BASE_API = 'http://192.168.8.119:9000'; // 张赛 // BASE_API = 'http://192.168.8.119:9000'; // 张赛
BASE_API = 'http://192.168.8.140:9000'; // 杜康 // BASE_API = 'http://192.168.8.140:9000'; // 杜康
// BASE_API = 'http://b29z135112.zicp.vip'; // BASE_API = 'http://b29z135112.zicp.vip';
// BASE_API = 'http://2925963m2a.zicp.vip'; // 杜康 // BASE_API = 'http://2925963m2a.zicp.vip'; // 杜康
// BASE_API = 'http://2i38984j47.qicp.vip'; // 张赛 // BASE_API = 'http://2i38984j47.qicp.vip'; // 张赛

View File

@ -10,15 +10,15 @@
<el-form-item label="uuid:" v-if="selectModel.uuid" disabled="true"> <el-form-item label="uuid:" v-if="selectModel.uuid" disabled="true">
<el-input v-model="selectModel.uuid" ></el-input> <el-input v-model="selectModel.uuid" disabled></el-input>
</el-form-item> </el-form-item>
<el-form-item label="区域类型:" v-if="selectModel.regionType" disabled="true"> <el-form-item label="区域类型:" v-if="selectModel.regionType" disabled="true">
<el-input v-model="selectModel.regionType"></el-input> <el-input v-model="selectModel.regionType" disabled></el-input>
</el-form-item> </el-form-item>
<el-form-item label="区域状态:" v-if="selectModel.status" disabled="true"> <el-form-item label="区域状态:" v-if="selectModel.status" disabled="true">
<el-input v-model="selectModel.status"></el-input> <el-input v-model="selectModel.status" disabled></el-input>
</el-form-item> </el-form-item>
@ -38,18 +38,53 @@
</el-form-item> </el-form-item>
<el-form-item label="售票处状态:" v-if="selectModel.runType" disabled="true"> <el-form-item label="售票处状态:" v-if="selectModel.runType" disabled="true">
<el-input v-model="selectModel.runType"></el-input> <el-select v-model="selectModel.runType" placeholder="请选择">
<el-option
v-for="item in runTypeOptions"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
</el-form-item> </el-form-item>
<el-form-item label="站台方向:" v-if="selectModel.direction" disabled="true"> <el-form-item label="站台方向:" v-if="selectModel.direction" disabled="true">
<el-input v-model="selectModel.direction"></el-input> <!-- <el-input v-model="selectModel.direction"></el-input> -->
<el-select v-model="selectModel.direction" placeholder="请选择">
<el-option
v-for="item in directionOptions"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
</el-form-item> </el-form-item>
<el-form-item label="连接设备:" v-if="selectModel.connectDevice" disabled="true"> <el-form-item label="连接设备:" v-if="selectModel.connectDevice" disabled="true">
<el-input v-model="selectModel.connectDevice"></el-input> <el-input v-model="selectModel.connectDevice"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="检票机作用:" v-if="selectModel.checkDirection" disabled="true"> <el-form-item label="检票机作用:" v-if="selectModel.checkDirection" disabled="true">
<el-input v-model="selectModel.checkDirection"></el-input> <!-- <el-input v-model="selectModel.checkDirection"></el-input> -->
<el-select v-model="selectModel.checkDirection" placeholder="请选择">
<el-option
v-for="item in checkOptions"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="闸机组:" v-if="selectModel.checkBelong" disabled="true">
<el-input v-model="selectModel.checkBelong"></el-input>
</el-form-item>
<el-form-item label="售票机组:" v-if="selectModel.ticketBelong" disabled="true">
<el-input v-model="selectModel.ticketBelong"></el-input>
</el-form-item>
<el-form-item label="站台组:" v-if="selectModel.standBelong" disabled="true">
<el-input v-model="selectModel.standBelong"></el-input>
</el-form-item> </el-form-item>
@ -89,6 +124,30 @@ export default {
size:'medium', size:'medium',
isActive:-1, isActive:-1,
selectModel:null, selectModel:null,
directionOptions:[{
value:"top",
label:"上行",
},
{
value:"down",
label:"下行",
}],
checkOptions:[{
value:"in",
label:"进站",
},
{
value:"out",
label:"出站",
}],
runTypeOptions:[{
value:"auto",
label:"自动",
},
{
value:"manual",
label:"人工",
}],
} }
}, },
beforeDestroy() { beforeDestroy() {

View File

@ -0,0 +1,164 @@
<template>
<el-tabs class="StationData" :style="{'background-image': 'url('+localStatic+'/texture/devicemsgpane.png)'}"
:tab-position="tabPosition" v-model="activeName" type="card" @tab-click="handleClick" >
<el-tab-pane label="仿真信息" name="regionEditor" >
<el-form ref="form" label-width="130px" size="mini" v-if="selectModel">
<el-form-item label="uuid:" v-if="selectModel.uuid" disabled="true">
<el-input v-model="selectModel.uuid" disabled></el-input>
</el-form-item>
<el-form-item label="区域类型:" v-if="selectModel.regionType" disabled="true">
<el-input v-model="selectModel.regionType" disabled></el-input>
</el-form-item>
<el-form-item label="区域状态:" v-if="selectModel.status" disabled="true">
<el-input v-model="selectModel.status" disabled></el-input>
</el-form-item>
<el-form-item label="入口乘客比例:" v-if="selectModel.startWeight" disabled="true">
<el-input v-model="selectModel.startWeight"></el-input>
</el-form-item>
<el-form-item label="出口乘客比例:" v-if="selectModel.endWeight" disabled="true">
<el-input v-model="selectModel.endWeight"></el-input>
</el-form-item>
</el-form>
</el-tab-pane>
</el-tabs>
</template>
<script>
import { JL3D_LOCAL_STATIC } from '@/api/jlmap3d/assets3d.js';
export default {
name: 'StationmanagerData',
components: {
},
data() {
return {
localStatic:JL3D_LOCAL_STATIC,
activeName: '',
tabPosition:'top',
size:'medium',
isActive:-1,
selectModel:null,
directionOptions:[{
value:"top",
label:"上行",
},
{
value:"down",
label:"下行",
}],
checkOptions:[{
value:"in",
label:"进站",
},
{
value:"out",
label:"出站",
}],
runTypeOptions:[{
value:"auto",
label:"自动",
},
{
value:"manual",
label:"人工",
}],
}
},
beforeDestroy() {
},
mounted() {
window.jl3dStationManagerEquipSelect = this.jl3dStationManagerEquipSelect;
},
methods: {
init: function() {
},
back: function() {
},
handleClick: function(tab, event) {
this.isActive = -1;
if(tab.name == "trackedit"){
}
if(tab.name == "switchedit"){
}
if(tab.name == "signaledit"){
}
if(tab.name == "stationedit"){
}
},
jl3dStationManagerEquipSelect: function(selected){
this.selectModel = selected;
this.activeName = "regionEditor";
console.log(selected);
},
}
}
</script>
<style rel="stylesheet/scss" lang="scss" scoped>
@import "src/styles/mixin.scss";
.StationData {
position:absolute;
float: right;
right:0;
width: 18%;
height:70%;
// background:#fff;
overflow-y:auto;
z-index: 10;
// border-radius:30px 0 0 30px;
// border:1px solid #000;
background-size: 100% 100%;
// border-radius:5px;
// text-align: center;
}
.editmodelconfig{
left:0;
margin-top:5px;
width:98%;
border-radius:5px;
border:solid 2px #000
}
.active{
background-color:blue;
}
.editbutton{
padding: 1cm
}
</style>

View File

@ -1,37 +1,40 @@
<template> <template>
<div class="jl3dstationmanager"> <div class="jl3dstationmanager">
<el-row class="managerbutton"> <el-row class="managerbutton">
<el-button @click="switchViews" round>{{switchButtonName}}</el-button> <el-button @click="switchStationManagerViews" round>{{switchButtonName}}</el-button>
<!-- 仿真操作按钮 --> <!-- 仿真操作按钮 -->
<el-button v-show="!viewStatus" round @click="startSimulation">开始仿真</el-button> <!-- <el-button v-show="!viewStatus" round @click="startSimulation">开始仿真</el-button> -->
<el-button v-show="!viewStatus" round >显示隐藏区域</el-button> <!-- <el-button v-show="!viewStatus" round >显示隐藏区域</el-button>
<el-button v-show="!viewStatus" round >显示隐藏热力图</el-button> <el-button v-show="!viewStatus" round >显示隐藏热力图</el-button> -->
<!-- 绘图操作按钮 --> <!-- 绘图操作按钮 -->
<el-button v-show="viewStatus" round @click="deleteRegion">删除区域</el-button> <el-button v-show="viewStatus" round @click="deleteRegion">删除区域</el-button>
<el-button v-show="viewStatus" round @click="saveData">保存方案</el-button> <el-button v-show="viewStatus" round @click="saveData">保存方案</el-button>
<el-button v-show="viewStatus" round @click="loadData">加载方案</el-button> <el-button v-show="viewStatus" round @click="loadData">加载方案</el-button>
<!-- 其他 --> <!-- 其他 -->
<el-button round>退出</el-button> <el-button round @click="back">退出</el-button>
</el-row> </el-row>
<div class="dataLoadDiv" v-show="showSaveList"> <div class="dataSaveDiv" v-show="showSaveList">
<el-input v-model="saveDataName"></el-input> <div class="dataPaneExit" :style="{'background-image': 'url('+localStatic+'/texture/xx.png)'}" @click="closePane"></div>
<div class="modelname" @click="saveNewData(saveDataName)">存新方案</div> <el-input style="width:80%;"v-model="saveDataName"></el-input>
<div class="modelname" @click="updateSaveData(saveDataName)">更新方案</div> <div class="modelname1" @click="saveNewData(saveDataName)">存新方案</div>
<div class="modelname2" @click="updateSaveData(saveDataName)">更新方案</div>
</div> </div>
<div class="dataLoadDiv" v-show="showLoadList"> <div class="dataLoadDiv" v-show="showLoadList">
<div class="dataLoadTittle">已存储方案列表:</div> <div class="dataLoadTittle">已存储方案列表:</div>
<div class="dataPaneExit" :style="{'background-image': 'url('+localStatic+'/texture/xx.png)'}" @click="closePane"></div>
<el-scrollbar style="margin-bottom:1px"> <el-scrollbar style="margin-bottom:1px">
<el-form ref="form" label-width="130px" size="mini"> <el-form ref="form" label-width="130px" size="mini">
<div class="dataListDiv" v-for="(asset,index) in nowDataList" > <div class="dataListDiv" v-for="(asset,index) in nowDataList"><div >
<div >
<div class="modelname">方案名称:{{asset.name }}</div> <div class="modelname">方案名称:{{asset.name }}</div>
<div class="modelname">方案修改日期:{{asset.updateTime }}</div> <div class="modelname">方案修改日期:{{asset.updateTime }}</div>
<div class="modelname" @click="modelSelect(asset.id)">加载方案</div> <div class="modelname1" @click="modelSelect(asset.id)">加载方案</div>
<div class="modelname" @click="deletSelect(asset.id)">删除方案</div> <div class="modelname2" @click="deletSelect(asset.id)">删除方案</div>
</div> </div>
</div> </div>
</el-form> </el-form>
@ -51,9 +54,12 @@
/> />
</el-select> </el-select>
</div> </div>
<Station-Data v-show="!viewStatus"></Station-Data> <Station-Data v-show="!viewStatus"></Station-Data>
<Draw-Type v-show="viewStatus" @changeDrawType=changeDrawType ></Draw-Type> <Draw-Type v-show="viewStatus" @changeDrawType="changeDrawType" ></Draw-Type>
<Pro-Perty></Pro-Perty> <Pro-Perty v-show="viewStatus" ></Pro-Perty>
<Stationmanager-Data v-show="!viewStatus" ></Stationmanager-Data>
<div id="jl3d" class="jl3dstationmanagerdraw" /> <div id="jl3d" class="jl3dstationmanagerdraw" />
</div> </div>
</template> </template>
@ -66,13 +72,16 @@
import StationData from '@/views/jlmap3d/trafficplan/component/stationdata'; import StationData from '@/views/jlmap3d/trafficplan/component/stationdata';
import DrawType from '@/views/jlmap3d/stationmanager/component/drawtype'; import DrawType from '@/views/jlmap3d/stationmanager/component/drawtype';
import ProPerty from '@/views/jlmap3d/stationmanager/component/property'; import ProPerty from '@/views/jlmap3d/stationmanager/component/property';
import StationmanagerData from '@/views/jlmap3d/stationmanager/component/stationmanagerdata';
import { deletePassenger } from '@/api/jlmap3d/assets3d';
import { saveStationManagerData,updateStationManagerData,getStationManagerDataList,getStationManagerData,deleteStationManagerData} from '@/api/jlmap3d/load3ddata'; import { saveStationManagerData,updateStationManagerData,getStationManagerDataList,getStationManagerData,deleteStationManagerData} from '@/api/jlmap3d/load3ddata';
export default { export default {
name: 'jl3devacuation', name: 'jl3devacuation',
components: { components: {
StationData, StationData,
StationmanagerData,
DrawType, DrawType,
ProPerty, ProPerty,
}, },
@ -98,6 +107,8 @@
showSaveList:false, showSaveList:false,
dataId:null, dataId:null,
saveDataName:"", saveDataName:"",
showMsgData:true,
paneMsg:"存储成功!",
} }
}, },
watch: { watch: {
@ -109,7 +120,8 @@
}, },
mounted() { mounted() {
window.updatestationlist = this.updatestationlist; window.updatestationlist = this.updatestationlist;
window.switchStationManagerViews = this.switchStationManagerViews;
window.updateValue = this.updateValue;
this.group = this.$route.query.group; this.group = this.$route.query.group;
this.mapid = this.$route.query.mapid; this.mapid = this.$route.query.mapid;
this.lineCode = this.$route.query.lineCode; this.lineCode = this.$route.query.lineCode;
@ -122,12 +134,13 @@
initnewdata: function (group,header){ initnewdata: function (group,header){
let dom = document.getElementById('jl3d'); let dom = document.getElementById('jl3d');
this.jl3d = new Jl3dStationManager(dom,this.mapid,this.group,this.initCode); this.jl3d = new Jl3dStationManager(dom,this.mapid,this.group,this.initCode);
}, },
changeDrawType(drawTypeName){ changeDrawType(drawTypeName){
// console.log(drawTypeName); console.log(drawTypeName);
this.jl3d.changeDrawType(drawTypeName); this.jl3d.changeDrawType(drawTypeName);
}, },
switchViews(){ switchStationManagerViews(){
if(this.viewStatus == false){ if(this.viewStatus == false){
this.switchButtonName = '绘制视角', this.switchButtonName = '绘制视角',
@ -151,6 +164,9 @@
// let oldgroupnum = this.groupnum; // let oldgroupnum = this.groupnum;
this.value = selVal; this.value = selVal;
}, },
updateValue(newValue){
this.value = newValue;
},
saveData(){ saveData(){
this.showSaveList = true; this.showSaveList = true;
}, },
@ -163,8 +179,10 @@
console.log(data); console.log(data);
this.dataId = data.data; this.dataId = data.data;
this.showSaveList = false; this.showSaveList = false;
this.msgBox("数据存储成功!");
} }
}).catch(error => { }).catch(error => {
this.msgBox(error.message);
console.log(error); console.log(error);
}); });
}, },
@ -176,10 +194,11 @@
if(data.code == "200"){ if(data.code == "200"){
//console.log(""); //console.log("");
console.log(data); console.log(data);
this.showSaveList = false; this.showSaveList = false;
this.msgBox("数据更新成功!");
} }
}).catch(error => { }).catch(error => {
this.msgBox(error.message);
console.log(error); console.log(error);
}); });
}else{ }else{
@ -190,25 +209,19 @@
loadData(){ loadData(){
this.showLoadList = true; this.showLoadList = true;
getStationManagerDataList().then(netdata => { getStationManagerDataList().then(netdata => {
console.log(netdata);
this.nowDataList = netdata.data; this.nowDataList = netdata.data;
}); });
}, },
deletSelect(deleteId){ deletSelect(deleteId){
deleteStationManagerData(deleteId).then(netdata => { this.deleteBox(deleteId);
console.log(netdata);
});
this.showLoadList = false;
}, },
modelSelect(loadId){ modelSelect(loadId){
console.log(loadId);
getStationManagerData(loadId).then(netdata => { getStationManagerData(loadId).then(netdata => {
console.log(netdata);
this.dataId = loadId; this.dataId = loadId;
this.saveDataName = netdata.data.name; this.saveDataName = netdata.data.name;
this.jl3d.loadData(netdata.data); this.jl3d.loadData(netdata.data);
this.msgBox("加载数据成功");
}); });
this.showLoadList = false; this.showLoadList = false;
}, },
@ -225,6 +238,40 @@
this.stationlist = list; this.stationlist = list;
}, },
msgBox(text){
this.$alert(text, {
confirmButtonText: '确定',
callback: action => {
}
});
},
deleteBox(deleteId){
this.$confirm('此操作将永久删除该数据!', '警告', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
deleteStationManagerData(deleteId).then(netdata => {
// console.log(netdata);
this.msgBox("删除数据成功!");
});
this.showLoadList = false;
}).catch(() => {
});
},
closePane(){
this.showLoadList = false;
this.showSaveList = false;
},
back() {
deletePassenger(this.$route.query.group,this.$route.query.deviceCode).then(netdata => {
// console.log(netdata);
window.close();
});
}
} }
} }
</script> </script>
@ -245,11 +292,25 @@
height: 100%; height: 100%;
z-index: 9; z-index: 9;
} }
.dataSaveDiv{
position: absolute;
z-index: 10;
width:40%;
height:70px;
top:20%;
left:30%;
background-color: #fff;
border-radius:5px;
border:solid 2px #000;
}
.dataLoadDiv{ .dataLoadDiv{
position: absolute; position: absolute;
z-index: 10; z-index: 10;
width:40%; width:40%;
height:60; /* height:60px; */
top:20%; top:20%;
left:30%; left:30%;
background-color: #fff; background-color: #fff;
@ -261,11 +322,19 @@
text-align:center; text-align:center;
font-size: 20px; font-size: 20px;
} }
.dataPaneExit{
width: 20px;
height:20px;
position: absolute;
right:0;
top:0;
background-size: 100% 100%;
}
.dataListDiv { .dataListDiv {
float:left; float:left;
position: relative; position: relative;
width:100%; width:100%;
height:100px; height:70px;
border-radius:5px; border-radius:5px;
border:solid 2px #000; border:solid 2px #000;
} }
@ -283,6 +352,24 @@
z-index: 10; z-index: 10;
} }
.modelname1{
width:48%;
left:0;
position: absolute;
border-radius:10px;
border:solid 2px #000;
text-align: center;
}
.modelname2{
width:48%;
right:0;
position: absolute;
border-radius:10px;
border:solid 2px #000;
text-align: center;
}
.managerbutton{ .managerbutton{
width:50%; width:50%;
left:25%; left:25%;

View File

@ -397,7 +397,7 @@ export default {
const routeData = this.$router.resolve({ const routeData = this.$router.resolve({
// /jlmap3d/trafficplan // /jlmap3d/trafficplan
// /design/jlmap3d/jl3dstationmanager // /design/jlmap3d/jl3dstationmanager
path:'/design/jlmap3d/jl3dstationmanager', path:'/jlmap3d/trafficplan',
query:{ query:{
mapid:this.$route.query.mapId, mapid:this.$route.query.mapId,
group:this.$route.query.group, group:this.$route.query.group,

View File

@ -1,7 +1,7 @@
# 3ds Max Wavefront OBJ Exporter v0.97b - (c)2007 guruware # 3ds Max Wavefront OBJ Exporter v0.97b - (c)2007 guruware
# File Created: 04.03.2021 16:20:24 # File Created: 17.03.2021 14:24:17
mtllib path.mtl mtllib path315.mtl
# #
# object Object003 # object Object003
@ -279,15 +279,14 @@ v 30.7197 9.8454 10.4284
v 21.7861 9.8454 -1.5328 v 21.7861 9.8454 -1.5328
v 27.4298 9.8454 -5.0178 v 27.4298 9.8454 -5.0178
v 21.7861 9.8454 -5.0156 v 21.7861 9.8454 -5.0156
v -34.4179 9.8454 21.4375
v -22.8801 9.8454 21.4375
v -22.8985 9.8454 15.8912
v -22.9049 9.8454 14.1364 v -22.9049 9.8454 14.1364
v -33.7472 9.8454 14.1364 v -33.7472 9.8454 14.1364
v -33.1634 9.8454 25.6925 v -24.1194 9.8454 8.4892
v -22.8640 9.8454 25.6925 v -31.8828 9.8454 6.1905
v -22.8985 9.8454 15.8912 v -31.9661 9.8454 8.5676
v -33.1634 9.8454 -5.0156
v -33.7472 9.8454 8.5854
v -24.1194 9.8454 8.5854
v -24.1194 9.8454 -5.0156
v -8.5704 9.8454 17.2820 v -8.5704 9.8454 17.2820
v -10.7366 9.8454 17.2731 v -10.7366 9.8454 17.2731
v -10.7357 9.8454 21.4374 v -10.7357 9.8454 21.4374
@ -297,6 +296,9 @@ v -40.4129 9.8454 14.0505
v -41.8927 9.8454 11.8541 v -41.8927 9.8454 11.8541
v -43.7034 9.8454 11.8542 v -43.7034 9.8454 11.8542
v -39.0867 9.8454 25.7142 v -39.0867 9.8454 25.7142
v -33.1634 9.8454 25.6925
v -34.3734 9.8454 21.9937
v -39.6039 9.8454 21.9935
v -41.8927 9.8454 10.5376 v -41.8927 9.8454 10.5376
v -40.4129 9.8454 8.5854 v -40.4129 9.8454 8.5854
v -43.0999 9.8454 8.5854 v -43.0999 9.8454 8.5854
@ -332,21 +334,20 @@ v -33.7472 9.8454 14.0505
v -33.7472 9.8454 11.2184 v -33.7472 9.8454 11.2184
v -49.0307 9.8454 11.2184 v -49.0307 9.8454 11.2184
v -49.0307 9.8454 14.0505 v -49.0307 9.8454 14.0505
v -8.5704 9.8454 25.6925 v -33.7472 9.8454 8.5854
v -8.5704 9.8454 22.0052
v -11.3493 9.8454 21.9935
v -11.3478 9.8454 17.2731
v -18.7412 9.8454 17.2731 v -18.7412 9.8454 17.2731
v -22.0887 9.8454 15.8911 v -22.0887 9.8454 21.4375
v -22.0887 9.8454 25.6925 v -11.2152 9.8454 21.4375
v -11.2138 9.8454 17.2731
v -8.5704 9.8454 16.8646 v -8.5704 9.8454 16.8646
v -10.7348 9.8454 16.8647 v -10.7348 9.8454 16.8647
v -22.0887 9.8454 15.8911
v -23.2027 9.8454 10.4106 v -23.2027 9.8454 10.4106
v -18.7500 9.8454 15.8920 v -18.7566 9.8454 15.9025
v -18.7676 9.8454 14.4459 v -18.7676 9.8454 14.4459
v -22.5111 9.8454 14.4459 v -22.5111 9.8454 14.4459
v -22.5111 9.8454 15.5681 v -22.5111 9.8454 15.5681
v -18.7588 9.8454 15.5681 v -18.7632 9.8454 15.5840
v -2.8636 9.8454 21.4382 v -2.8636 9.8454 21.4382
v -2.8828 9.8454 16.8742 v -2.8828 9.8454 16.8742
v -3.7582 9.8454 17.7820 v -3.7582 9.8454 17.7820
@ -359,6 +360,8 @@ v 7.3420 9.8454 15.5800
v 11.1340 9.8454 15.5800 v 11.1340 9.8454 15.5800
v 11.1340 9.8454 14.2816 v 11.1340 9.8454 14.2816
v 0.1622 9.8454 14.2816 v 0.1622 9.8454 14.2816
v -8.5704 9.8454 22.0052
v -8.5704 9.8454 25.6925
v -3.7582 9.8454 25.6925 v -3.7582 9.8454 25.6925
v -3.7582 9.8454 22.0255 v -3.7582 9.8454 22.0255
v -2.8450 9.8454 25.6925 v -2.8450 9.8454 25.6925
@ -448,7 +451,11 @@ v 11.2845 9.8454 -5.0156
v -3.0683 9.8454 7.8959 v -3.0683 9.8454 7.8959
v -0.3214 9.8454 7.8960 v -0.3214 9.8454 7.8960
v 10.4639 9.8454 8.3750 v 10.4639 9.8454 8.3750
v -45.9034 9.8454 21.9935
v -49.0307 9.8454 21.9934
v -49.0307 9.8454 25.6925 v -49.0307 9.8454 25.6925
v -33.3416 9.8454 -0.8639
v -33.1634 9.8454 -5.0156
v 6.5981 1.7700 11.9086 v 6.5981 1.7700 11.9086
v -18.0861 1.7700 14.2820 v -18.0861 1.7700 14.2820
v -23.2027 9.8454 12.1559 v -23.2027 9.8454 12.1559
@ -706,7 +713,21 @@ v -86.8627 17.3766 47.7962
v -86.8622 17.3766 50.0645 v -86.8622 17.3766 50.0645
v -86.8584 17.3766 52.1600 v -86.8584 17.3766 52.1600
v -86.8594 17.3766 45.4291 v -86.8594 17.3766 45.4291
# 699 vertices v -24.1194 9.8454 -5.0156
v -10.9714 9.8454 15.6000
v -10.9714 9.8454 15.9289
v -22.8640 9.8454 25.6925
v -22.8775 9.8454 21.9935
v -39.7050 9.8454 21.4375
v -22.0887 9.8454 25.6925
v -22.0887 9.8454 21.9935
v -45.7858 9.8454 21.4375
v -49.0307 9.8454 21.4375
v -11.2153 9.8454 21.9935
v -33.6450 9.8454 6.2052
v -31.6355 9.8454 -0.8693
v -31.4903 9.8454 -5.0156
# 720 vertices
vn 0.0000 1.0000 -0.0000 vn 0.0000 1.0000 -0.0000
vn -0.0000 1.0000 -0.0000 vn -0.0000 1.0000 -0.0000
@ -1035,15 +1056,14 @@ vt 1.0078 0.6807 0.0000
vt 0.8348 0.8080 0.0000 vt 0.8348 0.8080 0.0000
vt 0.9529 0.8562 0.0000 vt 0.9529 0.8562 0.0000
vt 0.8348 0.8562 0.0000 vt 0.8348 0.8562 0.0000
vt 0.2485 0.5735 0.0000
vt 0.3584 0.5642 0.0000
vt 0.3584 0.6224 0.0000
vt 0.3584 0.6424 0.0000 vt 0.3584 0.6424 0.0000
vt 0.2485 0.6424 0.0000 vt 0.2485 0.6424 0.0000
vt 0.2485 0.5133 0.0000
vt 0.3584 0.5133 0.0000
vt 0.3584 0.6224 0.0000
vt 0.2485 0.8562 0.0000
vt 0.2485 0.7007 0.0000
vt 0.3667 0.7007 0.0000 vt 0.3667 0.7007 0.0000
vt 0.3667 0.8562 0.0000 vt 0.2704 0.7279 0.0000
vt 0.2704 0.7007 0.0000
vt 0.5109 0.6228 0.0000 vt 0.5109 0.6228 0.0000
vt 0.4628 0.6228 0.0000 vt 0.4628 0.6228 0.0000
vt 0.4878 0.5671 0.0000 vt 0.4878 0.5671 0.0000
@ -1053,6 +1073,9 @@ vt 0.1712 0.6424 0.0000
vt 0.1712 0.6726 0.0000 vt 0.1712 0.6726 0.0000
vt 0.1425 0.6726 0.0000 vt 0.1425 0.6726 0.0000
vt 0.1939 0.5133 0.0000 vt 0.1939 0.5133 0.0000
vt 0.2485 0.5133 0.0000
vt 0.2485 0.5636 0.0000
vt 0.1850 0.5636 0.0000
vt 0.1712 0.6867 0.0000 vt 0.1712 0.6867 0.0000
vt 0.1712 0.7007 0.0000 vt 0.1712 0.7007 0.0000
vt 0.1425 0.7007 0.0000 vt 0.1425 0.7007 0.0000
@ -1080,6 +1103,7 @@ vt 0.4826 0.9318 0.0000
vt 0.4697 0.7157 0.0000 vt 0.4697 0.7157 0.0000
vt 0.3978 0.7478 0.0000 vt 0.3978 0.7478 0.0000
vt 0.3667 0.7617 0.0000 vt 0.3667 0.7617 0.0000
vt 0.3667 0.8562 0.0000
vt 0.5623 0.7919 0.0000 vt 0.5623 0.7919 0.0000
vt 0.5109 0.7919 0.0000 vt 0.5109 0.7919 0.0000
vt 0.5109 0.7324 0.0000 vt 0.5109 0.7324 0.0000
@ -1087,18 +1111,18 @@ vt 0.5623 0.7324 0.0000
vt 0.2485 0.6726 0.0000 vt 0.2485 0.6726 0.0000
vt 0.0652 0.6726 0.0000 vt 0.0652 0.6726 0.0000
vt 0.0652 0.6424 0.0000 vt 0.0652 0.6424 0.0000
vt 0.5109 0.5133 0.0000 vt 0.2485 0.7007 0.0000
vt 0.5109 0.5627 0.0000
vt 0.4813 0.5629 0.0000
vt 0.4603 0.6228 0.0000
vt 0.4148 0.6228 0.0000 vt 0.4148 0.6228 0.0000
vt 0.3667 0.6256 0.0000 vt 0.3667 0.5657 0.0000
vt 0.3667 0.5133 0.0000 vt 0.4787 0.5704 0.0000
vt 0.4603 0.6228 0.0000
vt 0.5109 0.6313 0.0000 vt 0.5109 0.6313 0.0000
vt 0.4565 0.6313 0.0000 vt 0.4565 0.6313 0.0000
vt 0.3667 0.5642 0.0000
vt 0.3667 0.6224 0.0000 vt 0.3667 0.6224 0.0000
vt 0.3667 0.7082 0.0000 vt 0.3667 0.7082 0.0000
vt 0.4127 0.6285 0.0000 vt 0.4127 0.6285 0.0000
vt 0.3667 0.6256 0.0000
vt 0.4084 0.6399 0.0000 vt 0.4084 0.6399 0.0000
vt 0.3667 0.6399 0.0000 vt 0.3667 0.6399 0.0000
vt 0.3667 0.6342 0.0000 vt 0.3667 0.6342 0.0000
@ -1115,6 +1139,8 @@ vt 0.6812 0.6242 0.0000
vt 0.7228 0.5770 0.0000 vt 0.7228 0.5770 0.0000
vt 0.7228 0.6399 0.0000 vt 0.7228 0.6399 0.0000
vt 0.5958 0.6399 0.0000 vt 0.5958 0.6399 0.0000
vt 0.5109 0.5627 0.0000
vt 0.5109 0.5133 0.0000
vt 0.5623 0.5133 0.0000 vt 0.5623 0.5133 0.0000
vt 0.5623 0.5573 0.0000 vt 0.5623 0.5573 0.0000
vt 0.5720 0.5133 0.0000 vt 0.5720 0.5133 0.0000
@ -1185,9 +1211,13 @@ vt 0.7146 0.6982 0.0000
vt 0.7228 0.6985 0.0000 vt 0.7228 0.6985 0.0000
vt 0.4513 0.2342 0.0000 vt 0.4513 0.2342 0.0000
vt 0.4513 0.2434 0.0000 vt 0.4513 0.2434 0.0000
vt 0.1133 0.5636 0.0000
vt 0.0947 0.5133 0.0000 vt 0.0947 0.5133 0.0000
vt 0.0652 0.5636 0.0000
vt 0.0652 0.5133 0.0000 vt 0.0652 0.5133 0.0000
vt 0.2026 0.8562 0.0000 vt 0.2026 0.8562 0.0000
vt 0.2485 0.8087 0.0000
vt 0.2485 0.8562 0.0000
vt 0.7981 0.6707 0.0000 vt 0.7981 0.6707 0.0000
vt 0.1382 0.2443 0.0000 vt 0.1382 0.2443 0.0000
vt 0.5109 0.8562 0.0000 vt 0.5109 0.8562 0.0000
@ -1206,7 +1236,19 @@ vt 0.6190 0.4836 0.0000
vt 0.5616 0.4836 0.0000 vt 0.5616 0.4836 0.0000
vt 0.5916 0.4836 0.0000 vt 0.5916 0.4836 0.0000
vt 0.5581 0.4836 0.0000 vt 0.5581 0.4836 0.0000
# 445 texture coords vt 0.3584 0.5133 0.0000
vt 0.3584 0.5558 0.0000
vt 0.1833 0.5735 0.0000
vt 0.3667 0.5133 0.0000
vt 0.3667 0.5558 0.0000
vt 0.1170 0.5735 0.0000
vt 0.0652 0.5735 0.0000
vt 0.4813 0.5629 0.0000
vt 0.3667 0.5571 0.0000
vt 0.2485 0.7279 0.0000
vt 0.2704 0.8087 0.0000
vt 0.2704 0.8562 0.0000
# 466 texture coords
g Object003 g Object003
usemtl 10___Default usemtl 10___Default
@ -1384,282 +1426,300 @@ f 262/264/1 263/265/1 264/266/1
f 265/267/1 266/268/1 267/269/1 268/270/1 269/271/1 f 265/267/1 266/268/1 267/269/1 268/270/1 269/271/1
f 270/272/1 271/273/1 272/274/1 f 270/272/1 271/273/1 272/274/1
f 273/275/1 274/276/1 275/277/1 276/278/1 277/279/1 f 273/275/1 274/276/1 275/277/1 276/278/1 277/279/1
f 278/280/1 279/281/1 280/282/1 281/283/1 f 278/280/1 279/281/1 280/282/1
f 282/284/1 283/285/1 284/286/1 285/287/1 f 281/283/1 282/284/1 283/285/1 284/286/1
f 286/288/1 287/289/1 288/290/1 289/291/1 f 285/287/1 286/288/1 287/289/1 288/290/1
f 274/276/1 287/289/1 290/292/1 275/277/1 f 289/291/1 290/292/1 291/293/1 292/294/1
f 291/293/1 292/294/1 293/295/1 294/296/1 f 293/295/1 294/296/1 295/297/1 296/298/1
f 295/297/1 293/295/1 296/298/1 297/299/1 f 297/299/1 295/297/1 298/300/1 299/301/1
f 298/300/1 299/301/1 300/302/1 301/303/1 f 300/302/1 301/303/1 302/304/1 303/305/1
f 298/300/1 301/303/1 290/304/1 302/305/1 f 300/302/1 303/305/1 289/306/1 304/307/1
f 303/306/1 296/307/1 304/308/1 305/309/1 f 305/308/1 298/309/1 306/310/1 307/311/1
f 271/307/1 306/310/1 307/311/1 308/312/1 f 271/309/1 308/312/1 309/313/1 310/314/1
f 309/313/1 310/314/1 264/315/1 311/316/1 f 311/315/1 312/316/1 264/317/1 313/318/1
f 253/255/1 252/254/1 312/317/1 313/318/1 f 253/255/1 252/254/1 314/319/1 315/320/1
f 314/319/1 315/319/1 316/283/1 317/283/1 f 316/321/1 317/321/1 318/322/1 319/322/1
f 318/320/1 319/321/1 320/322/1 321/323/1 f 320/323/1 321/324/1 322/325/1 323/326/1
f 287/289/1 274/276/1 322/276/1 323/324/1 288/290/1 f 286/288/1 277/279/1 324/279/1 325/327/1 287/289/1
f 289/291/1 324/325/1 325/326/1 286/288/1 f 288/290/1 326/328/1 327/329/1 285/287/1
f 295/297/1 324/325/1 289/291/1 294/296/1 293/295/1 f 297/299/1 326/328/1 288/290/1 296/298/1 295/297/1
f 291/293/1 288/290/1 323/324/1 279/281/1 292/294/1 f 293/295/1 287/289/1 325/327/1 328/330/1 294/296/1
f 326/327/1 327/328/1 328/329/1 329/330/1 330/331/1 331/332/1 332/333/1 f 329/331/1 330/332/1 331/333/1 332/334/1
f 282/284/1 333/334/1 334/335/1 283/285/1 f 281/283/1 333/335/1 334/336/1 282/284/1
f 332/333/1 331/336/1 277/279/1 276/278/1 f 274/276/1 330/337/1 335/338/1 275/277/1
f 313/318/1 315/319/1 335/337/1 f 315/320/1 317/321/1 336/339/1
f 330/331/1 336/338/1 331/332/1 f 329/331/1 337/340/1 335/341/1
f 337/339/1 338/340/1 339/341/1 340/342/1 f 338/342/1 339/343/1 340/344/1 341/345/1
f 341/343/1 342/344/1 343/345/1 344/346/1 f 342/346/1 343/347/1 344/348/1 345/349/1
f 345/347/1 333/334/1 282/284/1 285/287/1 344/346/1 343/345/1 f 346/350/1 333/335/1 281/283/1 284/286/1 345/349/1 344/348/1
f 342/344/1 341/343/1 346/348/1 f 343/347/1 342/346/1 347/351/1
f 341/343/1 347/349/1 348/350/1 346/348/1 f 342/346/1 348/352/1 349/353/1 347/351/1
f 349/351/1 350/352/1 351/353/1 352/354/1 f 350/354/1 351/355/1 352/356/1 353/357/1
f 327/328/1 326/327/1 353/355/1 354/356/1 f 354/358/1 355/359/1 356/360/1 357/361/1
f 353/355/1 355/357/1 356/358/1 354/356/1 f 356/360/1 358/362/1 359/363/1 357/361/1
f 357/359/1 356/358/1 355/357/1 358/360/1 f 360/364/1 359/363/1 358/362/1 361/365/1
f 357/361/1 358/360/1 359/362/1 360/363/1 f 360/366/1 361/365/1 362/367/1 363/368/1
f 320/322/1 361/364/1 362/365/1 321/323/1 f 322/325/1 364/369/1 365/370/1 323/326/1
f 315/319/1 363/366/1 364/367/1 316/283/1 f 317/321/1 366/371/1 367/372/1 318/322/1
f 365/368/1 363/366/1 366/369/1 367/370/1 f 368/373/1 366/371/1 369/374/1 370/375/1
f 368/371/1 369/372/1 370/373/1 f 371/376/1 372/377/1 373/378/1
f 371/374/1 250/252/1 249/251/1 338/340/1 337/339/1 372/375/1 f 374/379/1 250/252/1 249/251/1 339/343/1 338/342/1 375/380/1
f 351/353/1 257/259/1 256/258/1 352/354/1 f 352/356/1 257/259/1 256/258/1 353/357/1
f 254/256/1 373/376/1 374/377/1 255/257/1 f 254/256/1 376/381/1 377/382/1 255/257/1
f 321/323/1 375/378/1 376/379/1 377/380/1 378/381/1 318/320/1 f 323/326/1 378/383/1 379/384/1 380/385/1 381/386/1 320/323/1
f 379/382/1 380/383/1 381/384/1 f 382/387/1 383/388/1 384/389/1
f 268/270/1 382/385/1 383/386/1 269/271/1 f 268/270/1 385/390/1 386/391/1 269/271/1
f 260/262/1 384/387/1 385/388/1 261/263/1 f 260/262/1 387/392/1 388/393/1 261/263/1
f 386/389/1 387/390/1 388/391/1 389/392/1 f 389/394/1 390/395/1 391/396/1 392/397/1
f 390/365/3 391/365/3 392/364/3 393/364/3 f 393/370/3 394/370/3 395/369/3 396/369/3
f 390/365/1 393/364/1 394/364/1 395/365/1 f 393/370/1 396/369/1 397/369/1 398/370/1
f 396/364/4 397/364/4 398/364/4 399/364/4 f 399/369/4 400/369/4 401/369/4 402/369/4
f 400/365/5 401/365/5 402/365/5 403/365/5 f 403/370/5 404/370/5 405/370/5 406/370/5
f 404/393/1 405/251/1 406/251/1 407/393/1 f 407/398/1 408/251/1 409/251/1 410/398/1
f 1/337/1 408/337/1 409/319/1 2/319/1 f 1/339/1 411/339/1 412/321/1 2/321/1
f 410/394/1 257/259/1 411/259/1 412/394/1 f 413/399/1 257/259/1 414/259/1 415/399/1
f 413/395/1 414/395/1 415/396/1 416/396/1 f 416/400/1 417/400/1 418/401/1 419/401/1
f 238/394/1 417/394/1 418/259/1 240/259/1 f 238/399/1 420/399/1 421/259/1 240/259/1
f 239/395/1 419/395/1 420/396/1 237/396/1 f 239/400/1 422/400/1 423/401/1 237/401/1
f 421/397/1 381/384/1 380/383/1 347/398/1 f 424/402/1 384/389/1 383/388/1 348/403/1
f 421/397/1 347/398/1 422/399/1 423/400/1 f 424/402/1 348/403/1 425/404/1 426/405/1
f 259/261/1 258/260/1 424/401/1 f 259/261/1 258/260/1 427/406/1
f 259/261/1 424/401/1 263/265/1 262/264/1 f 259/261/1 427/406/1 263/265/1 262/264/1
f 425/402/1 383/386/1 382/385/1 426/403/1 427/404/1 427/404/1 f 428/407/1 386/391/1 385/390/1 429/408/1 430/409/1 430/409/1
f 427/404/1 428/405/1 423/400/1 429/406/1 425/402/1 f 430/409/1 431/410/1 426/405/1 432/411/1 428/407/1
f 423/400/1 422/399/1 430/407/1 429/406/1 f 426/405/1 425/404/1 433/412/1 432/411/1
f 431/408/1 311/409/1 430/407/1 422/399/1 f 434/413/1 313/414/1 433/412/1 425/404/1
f 383/386/1 425/402/1 258/260/1 261/263/1 f 386/391/1 428/407/1 258/260/1 261/263/1
f 425/402/1 429/406/1 424/401/1 258/260/1 f 428/407/1 432/411/1 427/406/1 258/260/1
f 424/401/1 429/406/1 430/407/1 263/265/1 f 427/406/1 432/411/1 433/412/1 263/265/1
f 264/266/1 263/265/1 430/407/1 311/409/1 f 264/266/1 263/265/1 433/412/1 313/414/1
f 269/271/1 385/388/1 432/410/1 265/267/1 f 269/271/1 388/393/1 435/415/1 265/267/1
f 306/411/1 271/273/1 433/412/1 f 308/416/1 271/273/1 436/417/1
f 384/387/1 434/413/1 432/410/1 385/388/1 f 387/392/1 437/418/1 435/415/1 388/393/1
f 306/411/1 433/412/1 435/414/1 436/415/1 f 308/416/1 436/417/1 438/419/1 439/420/1
f 437/416/1 438/417/1 387/390/1 386/389/1 f 440/421/1 441/422/1 390/395/1 389/394/1
f 387/418/1 439/419/1 440/420/1 441/421/1 388/422/1 f 390/423/1 442/424/1 443/425/1 444/426/1 391/427/1
f 415/396/1 414/395/1 369/372/1 368/371/1 f 418/401/1 417/400/1 372/377/1 371/376/1
f 374/377/1 373/376/1 368/371/1 370/373/1 f 377/382/1 376/381/1 371/376/1 373/378/1
f 108/108/1 404/423/1 1/1/1 3/3/1 f 108/108/1 407/428/1 1/1/1 3/3/1
f 108/108/1 405/424/1 404/423/1 f 108/108/1 408/429/1 407/428/1
f 2/2/1 109/109/1 3/3/1 f 2/2/1 109/109/1 3/3/1
f 108/108/1 107/107/1 405/424/1 f 108/108/1 107/107/1 408/429/1
f 240/243/1 110/110/1 186/189/1 232/235/1 f 240/243/1 110/110/1 186/189/1 232/235/1
f 239/242/1 237/240/1 229/232/1 f 239/242/1 237/240/1 229/232/1
f 286/288/1 302/425/1 290/292/1 287/289/1 f 289/291/1 292/294/1 445/430/1 304/431/1
f 325/326/1 442/426/1 302/425/1 286/288/1 f 304/431/1 445/430/1 446/432/1 447/433/1
f 293/295/1 292/294/1 304/427/1 296/298/1 f 295/297/1 294/296/1 306/434/1 298/300/1
f 279/281/1 278/280/1 304/427/1 292/294/1 f 306/434/1 448/435/1 449/436/1
f 403/365/6 172/365/6 443/365/6 400/365/6 f 406/370/6 172/370/6 450/370/6 403/370/6
f 123/123/1 124/124/1 443/428/1 172/175/1 f 123/123/1 124/124/1 450/437/1 172/175/1
f 124/124/1 166/169/1 443/428/1 f 124/124/1 166/169/1 450/437/1
f 396/364/1 399/364/1 147/364/1 444/364/1 f 399/369/1 402/369/1 147/369/1 451/369/1
f 146/146/1 444/429/1 147/147/1 145/145/1 f 146/146/1 451/438/1 147/147/1 145/145/1
f 146/146/1 117/117/1 444/429/1 f 146/146/1 117/117/1 451/438/1
f 253/255/1 445/393/1 249/251/1 f 253/255/1 452/398/1 249/251/1
f 406/251/7 249/251/7 445/393/7 407/393/7 f 409/251/7 249/251/7 452/398/7 410/398/7
f 408/337/8 335/337/8 315/319/8 409/319/8 f 411/339/8 336/339/8 317/321/8 412/321/8
f 320/322/1 319/321/1 446/430/1 316/283/1 364/367/1 f 322/325/1 321/324/1 453/439/1 318/322/1 367/372/1
f 391/365/9 362/365/9 361/364/9 392/364/9 f 394/370/9 365/370/9 364/369/9 395/369/9
f 447/365/10 390/365/10 395/365/10 448/365/10 f 454/370/10 393/370/10 398/370/10 455/370/10
f 402/365/11 401/365/11 447/365/11 448/365/11 f 405/370/11 404/370/11 454/370/11 455/370/11
f 449/364/12 394/364/12 393/364/12 450/364/12 f 456/369/12 397/369/12 396/369/12 457/369/12
f 398/364/13 397/364/13 449/364/13 450/364/13 f 401/369/13 400/369/13 456/369/13 457/369/13
f 417/394/14 412/394/14 411/259/14 418/259/14 f 420/399/14 415/399/14 414/259/14 421/259/14
f 419/395/14 413/395/14 416/396/14 420/396/14 f 422/400/14 416/400/14 419/401/14 423/401/14
f 257/259/1 410/394/1 254/256/1 f 257/259/1 413/399/1 254/256/1
f 440/420/1 451/431/1 370/373/1 f 443/425/1 458/440/1 373/378/1
f 370/373/1 369/372/1 441/421/1 440/420/1 f 373/378/1 372/377/1 444/426/1 443/425/1
f 347/349/1 380/432/1 348/350/1 f 348/352/1 383/441/1 349/353/1
f 374/377/1 452/433/1 255/257/1 f 377/382/1 459/442/1 255/257/1
f 270/389/1 386/389/1 389/392/1 453/392/1 f 270/394/1 389/394/1 392/397/1 460/397/1
f 388/391/1 454/434/1 389/392/1 f 391/396/1 461/443/1 392/397/1
f 271/273/1 270/272/1 453/435/1 265/267/1 f 271/273/1 270/272/1 460/444/1 265/267/1
f 453/435/1 266/268/1 265/267/1 f 460/444/1 266/268/1 265/267/1
f 352/354/1 455/354/1 349/436/1 f 353/357/1 462/357/1 350/445/1
f 348/436/1 349/436/1 455/354/1 456/354/1 f 349/445/1 463/357/1 347/357/1
f 348/436/1 456/354/1 346/354/1 f 436/417/1 435/415/1 437/418/1 438/419/1
f 433/412/1 432/410/1 434/413/1 435/414/1 f 439/420/1 438/419/1 464/419/1 465/420/1
f 436/415/1 435/414/1 457/414/1 458/415/1 f 265/267/1 435/415/1 436/417/1 271/273/1
f 265/267/1 432/410/1 433/412/1 271/273/1 f 466/446/1 467/447/1 312/316/1 311/315/1
f 459/437/1 460/438/1 310/314/1 309/313/1 f 312/316/1 467/447/1 468/447/1
f 310/314/1 460/438/1 461/438/1 f 467/447/1 466/446/1 469/448/1 470/447/1
f 460/438/1 459/437/1 462/439/1 463/438/1 f 468/447/1 467/447/1 471/447/1 472/447/1
f 461/438/1 460/438/1 464/438/1 465/438/1 f 470/447/1 469/448/1 473/448/1 474/447/1
f 463/438/1 462/439/1 466/439/1 467/438/1 f 472/447/1 471/447/1 475/447/1 476/447/1
f 465/438/1 464/438/1 468/438/1 469/438/1 f 477/449/1 478/446/1 479/446/1 480/449/1
f 470/440/1 471/437/1 472/437/1 473/440/1 f 469/448/1 477/449/1 480/449/1 473/448/1
f 462/439/1 470/440/1 473/440/1 466/439/1 f 479/446/1 478/446/1 481/446/1 482/446/1
f 472/437/1 471/437/1 474/437/1 475/437/1 f 470/447/1 474/447/1 483/447/1
f 463/438/1 467/438/1 476/438/1 f 471/447/1 470/447/1 483/447/1 475/447/1
f 464/438/1 463/438/1 476/438/1 468/438/1 f 467/447/1 470/447/1 471/447/1
f 460/438/1 463/438/1 464/438/1 f 480/449/1 479/446/1 484/446/1 485/449/1
f 473/440/1 472/437/1 477/437/1 478/440/1 f 474/447/1 473/448/1 486/448/1 487/447/1
f 467/438/1 466/439/1 479/439/1 480/438/1 f 475/447/1 483/447/1 488/447/1 489/447/1
f 468/438/1 476/438/1 481/438/1 482/438/1 f 487/447/15 486/448/15 490/448/15 491/447/15
f 480/438/15 479/439/15 483/439/15 484/438/15 f 485/449/16 484/446/16 492/446/16 493/449/16
f 478/440/16 477/437/16 485/437/16 486/440/16 f 493/449/1 492/446/1 494/446/1 495/449/1
f 486/440/1 485/437/1 487/437/1 488/440/1 f 489/447/17 488/447/17 496/447/17 497/447/17
f 482/438/17 481/438/17 489/438/17 490/438/17 f 497/447/1 496/447/1 498/447/1 499/447/1
f 490/438/1 489/438/1 491/438/1 492/438/1 f 491/447/1 490/448/1 500/448/1 501/447/1
f 484/438/1 483/439/1 493/439/1 494/438/1 f 501/447/18 500/448/18 502/448/18 503/447/18
f 494/438/18 493/439/18 495/439/18 496/438/18 f 503/447/1 502/448/1 504/448/1 505/447/1
f 496/438/1 495/439/1 497/439/1 498/438/1 f 495/449/1 494/446/1 506/446/1 507/449/1
f 488/440/1 487/437/1 499/437/1 500/440/1 f 499/447/1 498/447/1 508/447/1 509/447/1
f 492/438/1 491/438/1 501/438/1 502/438/1 f 505/447/1 504/448/1 510/448/1 511/447/1
f 498/438/1 497/439/1 503/439/1 504/438/1 f 495/449/19 507/449/19 510/449/19 504/449/19
f 488/440/19 500/440/19 503/440/19 497/440/19 f 505/447/20 511/447/20 508/447/20 498/447/20
f 498/438/20 504/438/20 501/438/20 491/438/20 f 506/446/1 494/446/1 512/446/1 513/446/1
f 499/437/1 487/437/1 505/437/1 506/437/1 f 499/447/1 509/447/1 514/447/1 515/447/1
f 492/438/1 502/438/1 507/438/1 508/438/1 f 507/449/21 506/446/21 516/446/21 517/449/21
f 500/440/21 499/437/21 509/437/21 510/440/21 f 509/447/22 508/447/22 518/447/22 519/447/22
f 502/438/22 501/438/22 511/438/22 512/438/22 f 511/447/23 510/448/23 520/448/23 521/447/23
f 504/438/23 503/439/23 513/439/23 514/438/23 f 510/449/24 507/449/24 517/449/24 520/449/24
f 503/440/24 500/440/24 510/440/24 513/440/24 f 508/447/25 511/447/25 521/447/25 518/447/25
f 501/438/25 504/438/25 514/438/25 511/438/25 f 506/446/21 513/446/21 522/446/21 516/446/21
f 499/437/21 506/437/21 515/437/21 509/437/21 f 514/447/26 509/447/26 519/447/26 523/447/26
f 507/438/26 502/438/26 512/438/26 516/438/26 f 517/449/1 516/446/1 524/446/1 525/449/1
f 510/440/1 509/437/1 517/437/1 518/440/1 f 519/447/1 518/447/1 526/447/1 527/447/1
f 512/438/1 511/438/1 519/438/1 520/438/1 f 521/447/1 520/448/1 528/448/1 529/447/1
f 514/438/1 513/439/1 521/439/1 522/438/1 f 520/449/1 517/449/1 525/449/1 528/449/1
f 513/440/1 510/440/1 518/440/1 521/440/1 f 518/447/1 521/447/1 529/447/1 526/447/1
f 511/438/1 514/438/1 522/438/1 519/438/1 f 516/446/1 522/446/1 530/446/1 524/446/1
f 509/437/1 515/437/1 523/437/1 517/437/1 f 523/447/1 519/447/1 527/447/1 531/447/1
f 516/438/1 512/438/1 520/438/1 524/438/1 f 309/313/1 532/313/1 533/314/1 310/314/1
f 307/311/1 525/311/1 526/312/1 308/312/1 f 534/313/1 535/313/1 536/313/1
f 527/311/1 528/311/1 529/311/1 f 534/313/1 537/314/1 533/314/1 532/313/1
f 527/311/1 530/312/1 526/312/1 525/311/1 f 309/313/1 538/313/1 539/313/1 532/313/1
f 307/311/1 531/311/1 532/311/1 525/311/1 f 540/313/1 541/313/1 542/313/1 543/313/1
f 533/311/1 534/311/1 535/311/1 536/311/1 f 543/313/27 542/313/27 544/313/27 545/313/27
f 536/311/27 535/311/27 537/311/27 538/311/27 f 545/313/1 544/313/1 546/313/1 547/313/1
f 538/311/1 537/311/1 539/311/1 540/311/1 f 540/313/1 548/313/1 549/313/1 539/313/1
f 533/311/1 541/311/1 542/311/1 532/311/1 f 541/313/1 540/313/1 539/313/1 538/313/1
f 534/311/1 533/311/1 532/311/1 531/311/1 f 550/313/1 535/313/1 551/313/1 552/313/1
f 543/311/1 528/311/1 544/311/1 545/311/1 f 553/313/1 536/313/1 535/313/1 550/313/1
f 546/311/1 529/311/1 528/311/1 543/311/1 f 552/313/1 551/313/1 554/313/1 555/313/1
f 545/311/1 544/311/1 547/311/1 548/311/1 f 555/313/1 554/313/1 549/313/1 548/313/1
f 548/311/1 547/311/1 542/311/1 541/311/1 f 550/313/1 552/313/1 556/313/1 557/313/1
f 543/311/1 545/311/1 549/311/1 550/311/1 f 555/313/1 548/313/1 558/313/1 559/313/1
f 548/311/1 541/311/1 551/311/1 552/311/1 f 557/313/28 556/313/28 560/313/28 561/313/28
f 550/311/28 549/311/28 553/311/28 554/311/28 f 559/313/28 558/313/28 562/313/28 563/313/28
f 552/311/28 551/311/28 555/311/28 556/311/28 f 561/313/1 560/313/1 564/313/1 565/313/1
f 554/311/1 553/311/1 557/311/1 558/311/1 f 563/313/1 562/313/1 566/313/1 567/313/1
f 556/311/1 555/311/1 559/311/1 560/311/1 f 547/313/29 546/313/29 568/313/29 569/313/29
f 540/311/29 539/311/29 561/311/29 562/311/29 f 569/313/1 568/313/1 570/313/1 571/313/1
f 562/311/1 561/311/1 563/311/1 564/311/1 f 565/313/1 564/313/1 572/313/1 573/313/1
f 558/311/1 557/311/1 565/311/1 566/311/1 f 567/313/1 566/313/1 574/313/1 575/313/1
f 560/311/1 559/311/1 567/311/1 568/311/1 f 571/313/1 570/313/1 576/313/1 577/313/1
f 564/311/1 563/311/1 569/311/1 570/311/1 f 573/313/1 572/313/1 578/313/1 579/313/1
f 566/311/1 565/311/1 571/311/1 572/311/1 f 575/313/1 574/313/1 580/313/1 581/313/1
f 568/311/1 567/311/1 573/311/1 574/311/1 f 576/313/1 570/313/1 582/313/1 583/313/1
f 569/311/1 563/311/1 575/311/1 576/311/1 f 571/313/30 577/313/30 580/313/30 574/313/30
f 564/311/30 570/311/30 573/311/30 567/311/30 f 575/313/1 581/313/1 578/313/1 572/313/1
f 568/311/1 574/311/1 571/311/1 565/311/1 f 573/313/1 579/313/1 584/313/1 585/313/1
f 566/311/1 572/311/1 577/311/1 578/311/1 f 532/313/1 539/313/1 549/313/1
f 525/311/1 532/311/1 542/311/1 f 534/313/1 551/313/1 535/313/1
f 527/311/1 544/311/1 528/311/1 f 532/313/1 554/313/1 551/313/1 534/313/1
f 525/311/1 547/311/1 544/311/1 527/311/1 f 532/313/1 549/313/1 554/313/1
f 525/311/1 542/311/1 547/311/1 f 305/308/1 307/311/1 586/311/1 587/308/1
f 303/306/1 305/309/1 579/309/1 580/306/1 f 588/311/1 589/308/1 587/308/1 586/311/1
f 581/309/1 582/306/1 580/306/1 579/309/1 f 587/308/1 589/308/1 590/308/1 591/308/1
f 580/306/1 582/306/1 583/306/1 584/306/1 f 591/308/1 590/308/1 592/308/1 593/308/1
f 584/306/1 583/306/1 585/306/1 586/306/1 f 594/308/1 595/308/1 596/308/1
f 587/306/1 588/306/1 589/306/1 f 595/308/1 597/308/1 598/308/1 599/308/1
f 588/306/1 590/306/1 591/306/1 592/306/1 f 600/308/1 601/308/1 602/308/1 603/308/1
f 593/306/1 594/306/1 595/306/1 596/306/1 f 596/308/1 591/308/1 593/308/1 594/308/1
f 589/306/1 584/306/1 586/306/1 587/306/1 f 594/308/1 593/308/1 604/308/1 605/308/1
f 587/306/1 586/306/1 597/306/1 598/306/1 f 606/308/1 607/308/1 600/308/1 603/308/1
f 599/306/1 600/306/1 593/306/1 596/306/1 f 594/308/1 605/308/1 597/308/1 595/308/1
f 587/306/1 598/306/1 590/306/1 588/306/1 f 606/308/1 603/308/1 599/308/1 598/308/1
f 599/306/1 596/306/1 592/306/1 591/306/1 f 598/308/1 597/308/1 608/308/1 609/308/1
f 591/306/1 590/306/1 601/306/1 602/306/1 f 605/308/1 604/308/1 610/308/1 611/308/1
f 598/306/1 597/306/1 603/306/1 604/306/1 f 607/308/1 606/308/1 612/308/1 613/308/1
f 600/306/1 599/306/1 605/306/1 606/306/1 f 611/308/31 610/308/31 614/308/31 615/308/31
f 604/306/31 603/306/31 607/306/31 608/306/31 f 613/308/32 612/308/32 616/308/32 617/308/32
f 606/306/32 605/306/32 609/306/32 610/306/32 f 615/308/1 614/308/1 618/308/1 619/308/1
f 608/306/1 607/306/1 611/306/1 612/306/1 f 617/308/1 616/308/1 620/308/1 621/308/1
f 610/306/1 609/306/1 613/306/1 614/306/1 f 609/308/33 608/308/33 622/308/33 623/308/33
f 602/306/33 601/306/33 615/306/33 616/306/33 f 623/308/34 622/308/34 624/308/34 625/308/34
f 616/306/34 615/306/34 617/306/34 618/306/34 f 625/308/35 624/308/35 626/308/35 627/308/35
f 618/306/35 617/306/35 619/306/35 620/306/35 f 627/308/36 626/308/36 628/308/36 629/308/36
f 620/306/36 619/306/36 621/306/36 622/306/36 f 619/308/1 618/308/1 630/308/1 631/308/1
f 612/306/1 611/306/1 623/306/1 624/306/1 f 621/308/1 620/308/1 632/308/1 633/308/1
f 614/306/1 613/306/1 625/306/1 626/306/1 f 629/308/36 628/308/36 634/308/36 635/308/36
f 622/306/36 621/306/36 627/306/36 628/306/36 f 629/308/37 635/308/37 632/308/37 620/308/37
f 622/306/37 628/306/37 625/306/37 613/306/37 f 619/308/38 631/308/38 634/308/38 628/308/38
f 612/306/38 624/306/38 627/306/38 621/306/38 f 630/308/1 618/308/1 636/308/1 637/308/1
f 623/306/1 611/306/1 629/306/1 630/306/1 f 621/308/1 633/308/1 638/308/1 639/308/1
f 614/306/1 626/306/1 631/306/1 632/306/1 f 631/308/1 630/308/1 640/308/1 641/308/1
f 624/306/1 623/306/1 633/306/1 634/306/1 f 633/308/1 632/308/1 642/308/1 643/308/1
f 626/306/1 625/306/1 635/306/1 636/306/1 f 635/308/39 634/308/39 644/308/39 645/308/39
f 628/306/39 627/306/39 637/306/39 638/306/39 f 632/308/40 635/308/40 645/308/40 642/308/40
f 625/306/40 628/306/40 638/306/40 635/306/40 f 634/308/41 631/308/41 641/308/41 644/308/41
f 627/306/41 624/306/41 634/306/41 637/306/41 f 630/308/1 637/308/1 646/308/1 640/308/1
f 623/306/1 630/306/1 639/306/1 633/306/1 f 638/308/1 633/308/1 643/308/1 647/308/1
f 631/306/1 626/306/1 636/306/1 640/306/1 f 599/308/1 603/308/1 602/308/1
f 592/306/1 596/306/1 595/306/1 f 595/308/1 599/308/1 602/308/1 596/308/1
f 588/306/1 592/306/1 595/306/1 589/306/1 f 302/304/1 301/303/1 648/303/1 649/304/1
f 300/302/1 299/301/1 641/301/1 642/302/1 f 649/304/1 650/450/1 651/451/1
f 642/302/1 643/441/1 644/442/1 f 652/452/1 653/452/1 654/453/1 655/453/1
f 645/443/1 646/443/1 647/444/1 648/444/1 f 656/303/1 657/303/1 658/454/1 659/454/1
f 649/301/1 650/301/1 651/445/1 652/445/1 f 660/451/1 651/451/1 650/450/1 661/450/1
f 653/442/1 644/442/1 643/441/1 654/441/1 f 659/454/1 658/454/1 653/452/1 652/452/1
f 652/445/1 651/445/1 646/443/1 645/443/1 f 661/450/1 650/450/1 655/453/1 654/453/1
f 654/441/1 643/441/1 648/444/1 647/444/1 f 660/451/1 662/304/1 651/451/1
f 653/442/1 655/302/1 644/442/1 f 649/304/1 655/453/1 650/450/1
f 642/302/1 648/444/1 643/441/1 f 648/303/1 656/303/1 659/454/1
f 641/301/1 649/301/1 652/445/1 f 648/303/1 659/454/1 652/452/1
f 641/301/1 652/445/1 645/443/1 f 649/304/1 648/303/1 652/452/1 655/453/1
f 642/302/1 641/301/1 645/443/1 648/444/1 f 658/454/1 657/303/1 663/303/1 664/454/1
f 651/445/1 650/301/1 656/301/1 657/445/1 f 660/451/1 661/450/1 665/450/1 666/451/1
f 653/442/1 654/441/1 658/441/1 659/442/1 f 654/453/1 653/452/1 667/452/1 668/453/1
f 647/444/1 646/443/1 660/443/1 661/444/1 f 664/454/42 663/303/42 669/303/42 670/454/42
f 657/445/42 656/301/42 662/301/42 663/445/42 f 666/451/42 665/450/42 671/450/42 672/451/42
f 659/442/42 658/441/42 664/441/42 665/442/42 f 668/453/43 667/452/43 673/452/43 674/453/43
f 661/444/43 660/443/43 666/443/43 667/444/43 f 674/453/1 673/452/1 675/452/1 676/453/1
f 667/444/1 666/443/1 668/443/1 669/444/1 f 670/454/1 669/303/1 677/303/1 678/454/1
f 663/445/1 662/301/1 670/301/1 671/445/1 f 672/451/1 671/450/1 679/450/1 680/451/1
f 665/442/1 664/441/1 672/441/1 673/442/1 f 678/454/1 677/303/1 681/303/1 682/454/1
f 671/445/1 670/301/1 674/301/1 675/445/1 f 680/451/1 679/450/1 683/450/1 684/451/1
f 673/442/1 672/441/1 676/441/1 677/442/1 f 676/453/44 675/452/44 685/452/44 686/453/44
f 669/444/44 668/443/44 678/443/44 679/444/44 f 686/453/1 685/452/1 687/452/1 688/453/1
f 679/444/1 678/443/1 680/443/1 681/444/1 f 682/454/45 681/303/45 689/303/45 690/454/45
f 675/445/45 674/301/45 682/301/45 683/445/45 f 684/451/46 683/450/46 691/450/46 692/451/46
f 677/442/46 676/441/46 684/441/46 685/442/46 f 688/453/47 687/452/47 693/452/47 694/453/47
f 681/444/47 680/443/47 686/443/47 687/444/47 f 682/454/48 690/454/48 693/454/48 687/454/48
f 675/445/48 683/445/48 686/445/48 680/445/48 f 688/453/49 694/453/49 691/453/49 683/453/49
f 681/444/49 687/444/49 684/444/49 676/444/49 f 684/451/50 692/451/50 695/451/50 696/451/50
f 677/442/50 685/442/50 688/442/50 689/442/50 f 689/303/51 681/303/51 697/303/51 698/303/51
f 682/301/51 674/301/51 690/301/51 691/301/51 f 690/454/1 689/303/1 699/303/1 700/454/1
f 683/445/1 682/301/1 692/301/1 693/445/1 f 692/451/1 691/450/1 701/450/1 702/451/1
f 685/442/1 684/441/1 694/441/1 695/442/1 f 694/453/1 693/452/1 703/452/1 704/453/1
f 687/444/1 686/443/1 696/443/1 697/444/1 f 693/454/1 690/454/1 700/454/1 703/454/1
f 686/445/1 683/445/1 693/445/1 696/445/1 f 691/453/1 694/453/1 704/453/1 701/453/1
f 684/444/1 687/444/1 697/444/1 694/444/1 f 695/451/1 692/451/1 702/451/1 705/451/1
f 688/442/1 685/442/1 695/442/1 698/442/1 f 689/303/1 698/303/1 706/303/1 699/303/1
f 682/301/1 691/301/1 699/301/1 692/301/1 f 466/446/1 478/446/1 477/449/1
f 459/437/1 471/437/1 470/440/1 f 466/446/1 477/449/1 469/448/1
f 459/437/1 470/440/1 462/439/1 f 390/423/1 379/384/1 378/383/1 442/424/1
f 387/418/1 376/379/1 375/378/1 439/419/1 f 314/319/1 369/374/1 366/371/1 317/321/1 315/320/1
f 312/317/1 366/369/1 363/366/1 315/319/1 313/318/1 f 316/321/1 319/322/1 707/322/1 278/321/1
# 404 polygons - 46 triangles f 375/380/1 338/342/1 341/342/1 708/380/1
f 709/380/1 337/342/1 329/342/1 332/380/1
f 283/285/1 282/284/1 332/284/1 331/285/1
f 290/292/1 710/455/1 711/456/1 291/293/1
f 273/275/1 712/457/1 292/294/1 291/293/1
f 710/455/1 713/458/1 714/459/1 711/456/1
f 712/457/1 715/460/1 445/430/1 292/294/1
f 445/430/1 715/460/1 716/461/1 446/432/1
f 713/458/1 355/359/1 354/358/1 717/462/1 714/463/1
f 277/279/1 286/288/1 712/457/1 273/275/1
f 712/457/1 286/288/1 285/287/1 715/460/1
f 715/460/1 285/287/1 327/329/1 716/461/1
f 329/331/1 335/341/1 330/332/1
f 448/435/1 718/464/1 279/281/1 719/465/1
f 707/322/1 720/466/1 719/465/1
f 278/280/1 707/322/1 719/465/1 279/281/1
f 294/296/1 328/330/1 718/464/1
f 306/434/1 294/296/1 718/464/1 448/435/1
# 417 polygons - 51 triangles

File diff suppressed because it is too large Load Diff