This commit is contained in:
ival 2021-03-22 18:40:41 +08:00
commit 050141025a
40 changed files with 3579 additions and 1675 deletions

View File

@ -141,6 +141,7 @@
<el-form-item :key="item.prop" :prop="item.prop" :label="item.label" :required="item.required"> <el-form-item :key="item.prop" :prop="item.prop" :label="item.label" :required="item.required">
<template v-if="item.remote"> <template v-if="item.remote">
<el-select <el-select
:ref="'select_'+item.prop"
v-model="formModel[item.prop]" v-model="formModel[item.prop]"
:placeholder="item.placeholder" :placeholder="item.placeholder"
:disabled="item.disabled" :disabled="item.disabled"
@ -160,6 +161,7 @@
</template> </template>
<template v-else-if="item.allowCreate"> <template v-else-if="item.allowCreate">
<el-select <el-select
:ref="'select_'+item.prop"
v-model="formModel[item.prop]" v-model="formModel[item.prop]"
:placeholder="item.placeholder" :placeholder="item.placeholder"
:disabled="item.disabled" :disabled="item.disabled"
@ -179,6 +181,7 @@
</template> </template>
<template v-else-if="item.multiple"> <template v-else-if="item.multiple">
<el-select <el-select
:ref="'select_'+item.prop"
v-model="formModel[item.prop]" v-model="formModel[item.prop]"
:placeholder="item.placeholder" :placeholder="item.placeholder"
:disabled="item.disabled" :disabled="item.disabled"
@ -196,6 +199,7 @@
</template> </template>
<template v-else-if="item.change"> <template v-else-if="item.change">
<el-select <el-select
:ref="'select_'+item.prop"
v-model="formModel[item.prop]" v-model="formModel[item.prop]"
filterable filterable
:clearable="!!item.clearable" :clearable="!!item.clearable"
@ -216,6 +220,7 @@
</template> </template>
<template v-else> <template v-else>
<el-select <el-select
:ref="'select_'+item.prop"
v-model="formModel[item.prop]" v-model="formModel[item.prop]"
filterable filterable
:no-data-text="item.noDataText?item.noDataText:'无数据'" :no-data-text="item.noDataText?item.noDataText:'无数据'"
@ -239,6 +244,7 @@
<template v-else-if="checkFieldType(item, 'datetime') || checkFieldType(item, 'date') || checkFieldType(item, 'daterange') || checkFieldType(item, 'datetimerange')"> <template v-else-if="checkFieldType(item, 'datetime') || checkFieldType(item, 'date') || checkFieldType(item, 'daterange') || checkFieldType(item, 'datetimerange')">
<el-form-item :key="item.prop" :prop="item.prop" :label="item.label" :required="item.required" style="width: 100%;"> <el-form-item :key="item.prop" :prop="item.prop" :label="item.label" :required="item.required" style="width: 100%;">
<el-date-picker <el-date-picker
:ref="'select_'+item.prop"
v-model="formModel[item.prop]" v-model="formModel[item.prop]"
align="right" align="right"
:type="item.type" :type="item.type"
@ -253,6 +259,7 @@
<template v-else-if="checkFieldType(item, 'time')"> <template v-else-if="checkFieldType(item, 'time')">
<el-form-item :key="item.prop" :prop="item.prop" :label="item.label" :required="item.required"> <el-form-item :key="item.prop" :prop="item.prop" :label="item.label" :required="item.required">
<el-time-select <el-time-select
:ref="'select_'+item.prop"
v-model="formModel[item.prop]" v-model="formModel[item.prop]"
:placeholder="item.placeholder" :placeholder="item.placeholder"
:disabled="item.disabled" :disabled="item.disabled"
@ -263,6 +270,7 @@
<template v-else-if="checkFieldType(item, 'timePicker')"> <template v-else-if="checkFieldType(item, 'timePicker')">
<el-form-item :key="item.prop" :prop="item.prop" :label="item.label" :required="item.required"> <el-form-item :key="item.prop" :prop="item.prop" :label="item.label" :required="item.required">
<el-time-picker <el-time-picker
:ref="'select_'+item.prop"
v-model="formModel[item.prop]" v-model="formModel[item.prop]"
:placeholder="item.placeholder" :placeholder="item.placeholder"
:disabled="item.disabled" :disabled="item.disabled"
@ -410,6 +418,30 @@ export default {
if (item.deviceChange) { if (item.deviceChange) {
item.deviceChange(data); item.deviceChange(data);
} }
},
allSelectBlur() {
const that = this;
const list = ['datetime', 'date', 'daterange', 'datetimerange', 'time', 'timePicker'];
this.form.items.forEach(each=>{
if (each.hasOwnProperty('show')) {
if ((list.includes(each.type) || this.checkFieldType(each, 'select')) && each.show) {
// that.$refs['select_' + each.prop][0].blur();
if (this.checkFieldType(each, 'select')) {
that.$refs['select_' + each.prop][0].blur();
} else {
that.$refs['select_' + each.prop][0].hidePicker();
}
}
} else {
if (list.includes(each.type) || this.checkFieldType(each, 'select')) {
if (this.checkFieldType(each, 'select')) {
that.$refs['select_' + each.prop][0].blur();
} else {
that.$refs['select_' + each.prop][0].hidePicker();
}
}
}
});
} }
} }
}; };

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,30 +25,31 @@ 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"){
let newStandData = data.body; let newStandData = data.body;
let count = 0; let count = 0;
for(let j=0;j<passerStation.stationlist.length;j++){ for(let j=0;j<passerStation.stationlist.length;j++){
count = 0; count = 0;
@ -55,6 +58,7 @@ export function stationConnect(deviceaction,toptrain,downtrain,routegroup,passer
if(passerStation.stationlist[j].topstand == newStandData[i].standCode){ if(passerStation.stationlist[j].topstand == newStandData[i].standCode){
// console.log(passerStation.stationlist[j]);
passerStation.stationlist[j].topspeed = newStandData[i].to; passerStation.stationlist[j].topspeed = newStandData[i].to;
passerStation.stationlist[j].toppassers = newStandData[i].num; passerStation.stationlist[j].toppassers = newStandData[i].num;
count++; count++;
@ -67,6 +71,7 @@ export function stationConnect(deviceaction,toptrain,downtrain,routegroup,passer
} }
if(count == 2){ if(count == 2){
// console.log(passerStation.stationlist[j]);
i = newStandData.length; i = newStandData.length;
} }
} }
@ -100,126 +105,12 @@ export function stationConnect(deviceaction,toptrain,downtrain,routegroup,passer
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); 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,16 +217,17 @@ 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;
scope.humanInSpeed = 0; scope.humanInSpeed = 0;
scope.humanOutSpeed = 0; scope.humanOutSpeed = 0;
passerHuman.speed = scope.humanInSpeed; passerHuman.speed = scope.humanInSpeed;
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,12 +236,14 @@ 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();
} }
this.updateNowStationData = function(){ this.updateNowStationData = function(){
// 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:"top", overGoal:"top",
@ -261,35 +257,14 @@ export function Jl3dStationManager(dom,skinCode,routegroup,initCode) {
waitForCreatIn.push(newIn); waitForCreatIn.push(newIn);
} }
scope.humanInSpeed = passerStation.nowStation.topspeed+passerStation.nowStation.downspeed; scope.humanInSpeed = passerStation.nowStation.topspeed+passerStation.nowStation.downspeed;
passerHuman.speed = scope.humanInSpeed; passerHuman.speed = scope.humanInSpeed;
passerWebWork.postMessage(["changespeed",scope.humanInSpeed/30]); passerWebWork.postMessage(["changespeed",scope.humanInSpeed/30]);
}; };
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,25 +387,41 @@ export function Jl3dStationManager(dom,skinCode,routegroup,initCode) {
} }
, 100); , 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; passerWebWork.onmessage = function (event) {
//1--top if(aiswitch == 0){
//2-- down // console.log(humanlist.children.length);
if(direct == 1){ // console.log(sceneRegion.startRegion.group.children);
passerHuman.newHumanCreate(humanlist,sceneRegion.getzoneposition("enter1"),0,waitForCreatIn[0].overGoal); this.allStationData = [];
}else{ // console.log(Math.random());
passerHuman.newHumanCreate(humanlist,sceneRegion.getzoneposition("enter2"),0,waitForCreatIn[0].overGoal);
// 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++){
startNum = startNum + sceneRegion.startRegion.group.children[i].startWeight;
if(randomNum<startNum){
passerHuman.newHumanCreate(humanlist,sceneRegion.startRegion.group.children[i],0,waitForCreatIn[0].overGoal);
waitForCreatIn.shift();
i = sceneRegion.startRegion.group.children.length;
} }
waitForCreatIn.shift();
} }
} }
};
}
};
function closeStartWorker(){
clearInterval(updateaianimate);
} }
// //
// function onselect(event){ // function onselect(event){
// if(event.button == '0'){ // if(event.button == '0'){
@ -450,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;
@ -495,21 +486,49 @@ 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); 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);
// camerass.position.set(0,300,0); // camerass.position.set(0,300,0);
// controls.target.set( 1, 0, 0 ); // controls.target.set( 1, 0, 0 );
passerStation.apartPosition(controls.drawGroup); 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);
} }
} }
this.deleteRegion = function(){ this.deleteRegion = function(){
controls.deleteRegion(); controls.deleteRegion();
} }
@ -522,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;
@ -531,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);
@ -558,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

@ -17,7 +17,7 @@ var Staticmodel = [
name: "车站", name: "车站",
deviceType: "cctvStation", deviceType: "cctvStation",
type: "cctvStation", type: "cctvStation",
url: BASE_ASSET_API + "/MODEL/2021-03-11/1344-16880.FBX" url: BASE_ASSET_API + "/MODEL/2021-03-12/1346-64858.FBX"
//2021.3.11/MODEL/2021-02-20/1296-89217.FBX //2021.3.11/MODEL/2021-02-20/1296-89217.FBX
//最早模型 /MODEL/2020-11-23/79-95086.FBX //最早模型 /MODEL/2020-11-23/79-95086.FBX
},{ },{

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 );
@ -44,7 +45,7 @@ export function PasserHuman() {
var v2 = new THREE.Vector3(-0.3,-0.6,0); var v2 = new THREE.Vector3(-0.3,-0.6,0);
var v3 = new THREE.Vector3(0,-1.3,0); var v3 = new THREE.Vector3(0,-1.3,0);
geom.vertices.push(v1); geom.vertices.push(v1);
geom.vertices.push(v2); geom.vertices.push(v2);
geom.vertices.push(v3); geom.vertices.push(v3);
@ -80,12 +81,105 @@ export function PasserHuman() {
} }
//创建新的乘客 //创建新的乘客
this.newHumanCreate = function(humanlist,position,stage,direct,door,overGoal){ this.newHumanCreate = function(humanlist,region,stage,overGoal,nowGoal){
let newhuman; let newhuman;
createHumanModel(newhuman,humanlist,position,stage,direct,door,overGoal); createHumanModel(newhuman,humanlist,region,stage,overGoal,nowGoal);
} }
function createHumanModel(newhuman,humanlist,position,stage,direct,door,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){
@ -101,33 +195,34 @@ export function PasserHuman() {
} }
// let mixer = new THREE.AnimationMixer( newhuman ); // let mixer = new THREE.AnimationMixer( newhuman );
newhuman.position.copy(position); newhuman.position.copy(region.position);
if(overGoal){ if(overGoal){
newhuman.overGoal = overGoal; newhuman.overGoal = overGoal;
} }
newhuman.standDoorNum = "";
newhuman.status = 0; newhuman.status = "0";
if(nowGoal){
newhuman.stage = stage; newhuman.nowGoal = nowGoal;
if(direct){ }else{
if(direct == "top"){ let goalRandom = Math.random();
newhuman.rotation.y = Math.PI; if(goalRandom<region.targetWeight){
newhuman.nowGoal = "ticketRegion";
}else{
newhuman.nowGoal = "securityRegion";
} }
newhuman.direct = direct;
}else{
newhuman.direct = null;
}
if(newhuman.direct == "top"){
newhuman.rotation.y = Math.PI;
}
newhuman.doorstatus = null;
if(door){
newhuman.door = door;
}else{
newhuman.door = null;
} }
//年龄
newhuman.age = null;
//性别
newhuman.gender = "";
//身体状态
newhuman.bodyStatus = "";
// newhuman.action = mixer.clipAction( newhuman.animations[ 0 ] ); // newhuman.action = mixer.clipAction( newhuman.animations[ 0 ] );
// newhuman.mixer = mixer; // newhuman.mixer = mixer;
newhuman.runrail = null; newhuman.runrail = null;
@ -137,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();
@ -161,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);
//更新模型坐标 //更新模型坐标
@ -197,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--;
@ -232,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--;
@ -266,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);
@ -337,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

@ -107,74 +107,85 @@ export function PasserStation() {
} }
//初始化车站名称数据 //初始化车站名称数据
this.initStationList = function(stationdata,standdata,psddata){ this.initStationList = function(stationdata,standdata,psddata){
let list = []; let list = [];
if(psddata){ if(psddata){
for(let i=0,leni = standdata.length;i<leni;i++){ for(let i=0,leni = standdata.length;i<leni;i++){
for(let j=0,lenj = psddata.length;j<lenj;j++){ for(let j=0,lenj = psddata.length;j<lenj;j++){
if(standdata[i].code == psddata[j].standCode){ if(standdata[i].code == psddata[j].standCode){
standdata[i].name = psddata[j].code; standdata[i].name = psddata[j].code;
} }
} }
} }
for(let i=0,leni = stationdata.length;i<leni;i++){ for(let i=0,leni = stationdata.length;i<leni;i++){
if(stationdata[i].depot == false){ if(stationdata[i].depot == false){
list[stationdata[i].name] = []; list[stationdata[i].name] = [];
for(let j=0,lenj = standdata.length;j<lenj;j++){ for(let j=0,lenj = standdata.length;j<lenj;j++){
if(standdata[j].stationCode == stationdata[i].code){ if(standdata[j].stationCode == stationdata[i].code){
list[stationdata[i].name].push(standdata[j]); list[stationdata[i].name].push(standdata[j]);
} }
} }
} }
} }
for(let k in list){ for(let k in list){
if(list[k].length>0){ if(list[k].length>0){
let stationobject = { let stationobject = {
code : list[k][0].stationCode, code : list[k][0].stationCode,
name : k, name : k,
toppsd:null, topspeed:0,
downpsd:null, downspeed:0,
topsection:null, toppassers:0,
downsection:null, downpassers:0,
}; toppsd:null,
if(list[k][0].position.y<list[k][1].position.y){ downpsd:null,
stationobject.toppsd = list[k][0].name; topsection:null,
stationobject.downpsd = list[k][1].name; downsection:null,
stationobject.topsection = list[k][0].standTrackCode; topstand:null,
stationobject.downsection = list[k][1].standTrackCode; downstand:null
}else{ };
stationobject.toppsd = list[k][1].name; if(list[k][0].position.y<list[k][1].position.y){
stationobject.downpsd = list[k][0].name; stationobject.toppsd = list[k][0].name;
stationobject.topsection = list[k][1].standTrackCode; stationobject.downpsd = list[k][1].name;
stationobject.downsection = list[k][0].standTrackCode; stationobject.topsection = list[k][0].standTrackCode;
} stationobject.downsection = list[k][1].standTrackCode;
scope.stationlist.push(stationobject); stationobject.topstand = list[k][0].code;
} stationobject.downstand = list[k][1].code;
}else{
stationobject.toppsd = list[k][1].name;
stationobject.downpsd = list[k][0].name;
stationobject.topsection = list[k][1].standTrackCode;
stationobject.downsection = list[k][0].standTrackCode;
stationobject.topstand = list[k][1].code;
stationobject.downstand = list[k][0].code;
}
scope.stationlist.push(stationobject);
}
} }
scope.nowStation = scope.stationlist[0]; scope.nowStation = scope.stationlist[0];
if(scope.stationtexture["stationlist"]){ if(scope.stationtexture["stationlist"]){
scope.stationMesh.getObjectByName("zhantailiebiao").material.map =scope.stationtexture["stationlist"]; scope.stationMesh.getObjectByName("zhantailiebiao").material.map =scope.stationtexture["stationlist"];
scope.stationMesh.getObjectByName("zhantailiebiao").material.map.needsUpdate = true; scope.stationMesh.getObjectByName("zhantailiebiao").material.map.needsUpdate = true;
if(scope.stationMesh.getObjectByName("menkuangyanse")){ if(scope.stationMesh.getObjectByName("menkuangyanse")){
scope.stationMesh.getObjectByName("menkuangyanse").material.map =scope.stationtexture["pingbimen"]; scope.stationMesh.getObjectByName("menkuangyanse").material.map =scope.stationtexture["pingbimen"];
scope.stationMesh.getObjectByName("menkuangyanse").material.map.needsUpdate = true; scope.stationMesh.getObjectByName("menkuangyanse").material.map.needsUpdate = true;
} }
scope.stationMesh.getObjectByName("zhantaiming").material.map = scope.stationtexture[scope.nowStation.code]; scope.stationMesh.getObjectByName("zhantaiming").material.map = scope.stationtexture[scope.nowStation.code];
scope.stationMesh.getObjectByName("zhantaiming").material.map.needsUpdate = true; scope.stationMesh.getObjectByName("zhantaiming").material.map.needsUpdate = true;
} }
updatestationlist(scope.stationlist); // updatestationlist(scope.stationlist);
}else{ }else{
olddataai = true; olddataai = true;
} }
} }
//加载线路车站名贴图 //加载线路车站名贴图
this.loadMaterial = function(netdata3d){ this.loadMaterial = function(netdata3d){
Materialload(scope,JSON.parse(netdata3d.data.assets).stationTextureList[0]); Materialload(scope,JSON.parse(netdata3d.data.assets).stationTextureList[0]);
}; };
this.initCodeStation = function(initCode){ this.initCodeStation = function(initCode){
console.log(scope.stationlist);
for(let i=0,leni=scope.stationlist.length;i<leni;i++){ for(let i=0,leni=scope.stationlist.length;i<leni;i++){
// console.log(scope.stationlist[i]); // console.log(scope.stationlist[i]);
if(scope.stationlist[i].downstand == initCode || scope.stationlist[i].topstand == initCode){ if(scope.stationlist[i].downstand == initCode || scope.stationlist[i].topstand == initCode){
@ -190,10 +201,13 @@ export function PasserStation() {
} }
}; };
this.apartPosition = function(drawGroup){ this.apartPosition = function(drawGroup,zhajiin,zhajiout){
// scope.down.position.y = scope.top.position.y; // scope.down.position.y = scope.top.position.y;
scope.top.position.z += 75; scope.top.position.z += 75;
scope.down.position.z -= 75; scope.down.position.z -= 75;
zhajiin.position.z -= 75;
zhajiout.position.z -= 75;
if(drawGroup.children.length>0){ if(drawGroup.children.length>0){
for(let i=0;i<drawGroup.children.length;i++){ for(let i=0;i<drawGroup.children.length;i++){
for(let j=0;j<drawGroup.children[i].children.length;j++){ for(let j=0;j<drawGroup.children[i].children.length;j++){
@ -202,15 +216,18 @@ export function PasserStation() {
} }
if(drawGroup.children[i].children[j].underFloor == "2floor"){ if(drawGroup.children[i].children[j].underFloor == "2floor"){
drawGroup.children[i].children[j].position.z -= 75; drawGroup.children[i].children[j].position.z -= 75;
} }
} }
} }
} }
} }
this.resetPosition = function(drawGroup){ this.resetPosition = function(drawGroup,zhajiin,zhajiout){
scope.top.position.copy(originTopPosition); scope.top.position.copy(originTopPosition);
scope.down.position.copy(originDownPosition); scope.down.position.copy(originDownPosition);
zhajiin.position.z += 75;
zhajiout.position.z += 75;
if(drawGroup.children.length>0){ if(drawGroup.children.length>0){
for(let i=0;i<drawGroup.children.length;i++){ for(let i=0;i<drawGroup.children.length;i++){
@ -221,6 +238,7 @@ export function PasserStation() {
} }
if(drawGroup.children[i].children[j].underFloor == "2floor"){ if(drawGroup.children[i].children[j].underFloor == "2floor"){
drawGroup.children[i].children[j].position.z += 75; drawGroup.children[i].children[j].position.z += 75;
// drawGroup.children[i].position.y = scope.down.position.y; // drawGroup.children[i].position.y = scope.down.position.y;
} }
} }

View File

@ -2,14 +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.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,
@ -21,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);
@ -31,7 +35,9 @@ export function checkRegion(data) {
newRegion.connectDevice = regionData[i].connectDevice; newRegion.connectDevice = regionData[i].connectDevice;
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.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,
@ -48,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);
@ -72,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;
@ -84,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());
@ -122,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);
} }
@ -201,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());
@ -232,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,8 +14,15 @@ export function standRegion() {
newRegion.status = "1"; newRegion.status = "1";
//连接设备 //连接设备
newRegion.connectDevice = "*"; newRegion.connectDevice = "*";
newRegion.standBelong = "1";
//区域方向 //区域方向
newRegion.direction = "1"; if(pos.z < 87.85){
newRegion.direction = "top";
}else{
newRegion.direction = "down";
}
newRegion.position.set( newRegion.position.set(
pos.x, pos.x,
@ -27,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);
@ -37,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,
@ -54,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);
@ -38,15 +63,15 @@ export function startRegion() {
newRegion.deviceType = "region"; newRegion.deviceType = "region";
newRegion.name = regionData[i].name; newRegion.name = regionData[i].name;
//入口乘客比例 //入口乘客比例
newRegion.startWeight = regionData[i].startWeight; newRegion.startWeight = parseFloat(regionData[i].startWeight);
//出口乘客比例 //出口乘客比例
newRegion.endWeight = regionData[i].endWeight; newRegion.endWeight = parseFloat(regionData[i].endWeight);
//目标权重 //目标权重
newRegion.targetWeight = regionData[i].targetWeight; newRegion.targetWeight = parseFloat(regionData[i].targetWeight);
//区域状态 //区域状态
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":
@ -135,6 +158,9 @@ export function regionManager() {
status:scope.checkRegion.group.children[i].status, status:scope.checkRegion.group.children[i].status,
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,
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,
y:scope.checkRegion.group.children[i].position.y, y:scope.checkRegion.group.children[i].position.y,
@ -153,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,
@ -173,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,
@ -261,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);
@ -272,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) { export function PasserAi(finder,region) {
let scope = this; let scope = this;
//下车控制开关 //下车控制开关
@ -9,248 +9,366 @@ export function PasserAi(zone,finder) {
//上车控制开关 //上车控制开关
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){
let distanceArray = [];
for(let i=0;i<endRegion.length;i++){
var pos1 = startPos;
var pos2 = endRegion[i].position;
var distance = pos1.distanceTo(pos2);
distanceArray.push(
{
pos:endRegion[i].position,
distance:distance
}
);
}
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;
});
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,passerHuman,passerCheckDoor,deviceaction){ this.aiUpdate = function(humanlist,topWaitPassers,downWaitPassers,outStationPassers,passerHuman,passerCheckDoor,deviceaction){
for(let i=0;i<humanlist.children.length;i++){ for(let i=0;i<outStationPassers.children.length;i++){
// console.log(humans[i]); if(outStationPassers.children[i].status == 0){
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));
targetPosition = passerZone.getzoneposition("security");
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);
// console.log(path);
}
//stage = 1 前往进站闸机
if(humanlist.children[i].stage == 1){
let points = [];
points.push(new THREE.Vector3(humanlist.children[i].position.x,humanlist.children[i].position.y,humanlist.children[i].position.z));
targetPosition = passerZone.getgateposition("entergate");
path = pathFinder.find(points[0],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 = 2 过闸机
if(humanlist.children[i].stage == 2){
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,humanlist.children[i].position.y,humanlist.children[i].position.z-5));
passerCheckDoor.checkDoorControl("in",humanlist.children[i].door,deviceaction)
passerHuman.initMoveAnimate(humanlist.children[i],i,points,i);
}
//stage = 3 前往站台
if(humanlist.children[i].stage == 3){
let direct = Math.floor(Math.random()*(2))+1;
// console.log(direct);
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(11.81,9.8,13.11));
//1--top
//2-- down
if(direct == 1){
targetPosition = passerZone.getstandposition("standtop");
path = pathFinder.find(points[0],targetPosition.point);
humanlist.children[i].direct = "top";
}else{
targetPosition = passerZone.getstandposition("standdown");
path = pathFinder.find(points[0],targetPosition.point);
humanlist.children[i].direct = "down";
}
if(path[0].y<9.84){
points.push(new THREE.Vector3(11.81,9.8,13.11));
points.push(new THREE.Vector3(29.5,1.77,13.16));
}
for(let i=0;i<path.length;i++){
points.push(new THREE.Vector3(path[i].x,path[i].y,path[i].z));
}
humanlist.children[i].door = targetPosition.door;
passerHuman.initMoveAnimate(humanlist.children[i],i,points,i);
}
//stage = 4 上车
if(humanlist.children[i].stage == 4){
if(scope.toppasserin && humanlist.children[i].direct == "top"){
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["standtop"].doorpoints[humanlist.children[i].door]);
if(points[1] == undefined){
}else{
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 下车 //stage = 5 下车
if(humanlist.children[i].stage == 5){ if(outStationPassers.children[i].nowGoal == "findeCheck"){
let points = []; 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(outStationPassers.children[i].position.x,outStationPassers.children[i].position.y,outStationPassers.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 index = Math.floor(Math.random() * (region.checkRegion.belongList["out"][outStationPassers.children[i].connectCheckRegion].length-1));
// let points = [];
// points.push(new THREE.Vector3(humanlist.children[i].position.x,humanlist.children[i].position.y,humanlist.children[i].position.z)); //寻找最近售票机点
// targetPosition = region.checkRegion.belongList["out"][outStationPassers.children[i].connectCheckRegion][index].position;
// groupID = pathfinder.getGroup( ZONE, points[0] ); outStationPassers.children[i].checkDoor = region.checkRegion.belongList["out"][outStationPassers.children[i].connectCheckRegion][index].actionIndex;
// targetPosition = passerZone.getgateposition("exitgate"); //寻路售票机
// path = pathfinder.findPath( points[0], targetPosition, ZONE, groupID ); path = pathFinder.find(points[0],targetPosition);
// //
// for(let i=0;i<path.length;i++){ for(let i=0;i<path.length;i++){
// points.push(new THREE.Vector3(path[i].x,path[i].y,path[i].z)); points.push(new THREE.Vector3(path[i].x,path[i].y+0.1,path[i].z));
// } }
// passerHuman.initMoveAnimate(humanlist.children[i],i,points,i); passerHuman.initMoveAnimate(outStationPassers.children[i],i,points,i);
// } }
//stage = 7 出闸机 //stage = 7 出闸机
if(humanlist.children[i].stage == 7){ if(outStationPassers.children[i].nowGoal == "outCheck"){
let points = []; let points = [];
points.push(new THREE.Vector3(humanlist.children[i].position.x,humanlist.children[i].position.y,humanlist.children[i].position.z)); points.push(region.checkRegion.group.children[outStationPassers.children[i].checkDoor].getObjectByName("regionHead").getWorldPosition(new THREE.Vector3()));
points.push(new THREE.Vector3(humanlist.children[i].position.x+5,humanlist.children[i].position.y,humanlist.children[i].position.z)); points.push(region.checkRegion.group.children[outStationPassers.children[i].checkDoor].getObjectByName("regionDirect").getWorldPosition(new THREE.Vector3()));
passerCheckDoor.checkDoorControl("out",humanlist.children[i].door,deviceaction) passerCheckDoor.checkDoorControl("out",region.checkRegion.group.children[outStationPassers.children[i].checkDoor].connectDevice,deviceaction);
passerHuman.initMoveAnimate(humanlist.children[i],i,points,i);
passerHuman.initMoveAnimate(outStationPassers.children[i],i,points,i);
} }
//stage = 8 出站 //stage = 8 出站
if(humanlist.children[i].stage == 8){ if(outStationPassers.children[i].nowGoal == "outStation"){
let direct = Math.floor(Math.random()*(3-1+1))+1;
let points = []; 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(outStationPassers.children[i].position.x,outStationPassers.children[i].position.y,outStationPassers.children[i].position.z));
//1--top //寻找最近售票机点
//2-- down targetPosition = region.startRegion.group.children[outStationPassers.children[i].overGoal].position;
if(direct == 1){
targetPosition = passerZone.getzoneposition("exit1");
path = pathFinder.find(points[0],targetPosition);
}else{
targetPosition = passerZone.getzoneposition("exit2");
path = pathFinder.find(points[0],targetPosition);
}
//寻路售票机
path = pathFinder.find(points[0],targetPosition);
//
for(let i=0;i<path.length;i++){ for(let i=0;i<path.length;i++){
points.push(new THREE.Vector3(path[i].x,path[i].y,path[i].z)); points.push(new THREE.Vector3(path[i].x,path[i].y+0.1,path[i].z));
} }
passerHuman.initMoveAnimate(humanlist.children[i],i,points,i); 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);
}
}
}
}
}
}
for(let i=0;i<humanlist.children.length;i++){
// console.log(humans[i]);
if(humanlist.children[i].overGoal == "top" || humanlist.children[i].overGoal == "down"){
if(humanlist.children[i].status == "0"){
// console.log(humanlist.children[0].status);
// console.log(humanlist.children[0].nowGoal);
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 = shortTicketRegion(humanlist.children[i].position,region.ticketRegion);
//寻路售票机
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(humanlist.children[i],i,points,i);
}
if(humanlist.children[i].nowGoal == "securityRegion"){
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.securityRegion.group.children);
//寻路售票机
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(humanlist.children[i],i,points,i);
}
if(humanlist.children[i].nowGoal == "checkRegion"){
let points = [];
points.push(new THREE.Vector3(humanlist.children[i].position.x,humanlist.children[i].position.y,humanlist.children[i].position.z));
//寻找最近售票机点
target = selectInCheckRegion(humanlist.children[i].position,region.checkRegion,"in");
humanlist.children[i].checkDoor = target.checkDoorNum;
//寻路售票机
path = pathFinder.find(points[0],target.pos);
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(humanlist.children[i],i,points,i);
}
if(humanlist.children[i].nowGoal == "inCheck"){
let points = [];
// console.log();
// console.log(region.checkRegion.group.children[humanlist.children[i].checkDoor].position);
// console.log(region.checkRegion.group.children[humanlist.children[i].checkDoor].getObjectByName("regionHead").getWorldPosition(new THREE.Vector3()));
// console.log(region.checkRegion.group.children[humanlist.children[i].checkDoor].getObjectByName("regionDirect").getWorldPosition(new THREE.Vector3()));
// 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()));
passerCheckDoor.checkDoorControl("in",region.checkRegion.group.children[humanlist.children[i].checkDoor].connectDevice,deviceaction);
passerHuman.initMoveAnimate(humanlist.children[i],i,points,i);
}
if(humanlist.children[i].nowGoal == "standRegion"){
let points = [];
points.push(new THREE.Vector3(humanlist.children[i].position.x,humanlist.children[i].position.y,humanlist.children[i].position.z));
//寻找最近售票机点
target = shortStandRegion(humanlist.children[i].position,region.standRegion,humanlist.children[i].overGoal);
humanlist.children[i].standDoorNum = target.standDoorNum;
//寻路售票机
path = pathFinder.find(points[0],target.pos);
//
for(let i=0;i<path.length;i++){
points.push(new THREE.Vector3(path[i].x,path[i].y+0.5,path[i].z));
}
passerHuman.initMoveAnimate(humanlist.children[i],i,points,i);
}
}
}
}
} }
} }

View File

@ -20,7 +20,8 @@ const user = {
companyId: '', companyId: '',
companyAdmin: false, companyAdmin: false,
companyName: '', companyName: '',
companyProject: '' companyProject: '',
baseUrl:''
}, },
mutations: { mutations: {
@ -77,6 +78,9 @@ const user = {
}, },
Disconnect: ()=>{ Disconnect: ()=>{
disconnect(); disconnect();
},
setBaseUrl: (state, baseUrl) => {
state.baseUrl = baseUrl;
} }
}, },
@ -204,6 +208,9 @@ const user = {
disconnect({commit}, params) { disconnect({commit}, params) {
commit('Disconnect', params); commit('Disconnect', params);
removeToken(); removeToken();
},
setBaseUrl ({commit}, baseUrl) {
commit('setBaseUrl', baseUrl);
} }
} }
}; };

View File

@ -24,6 +24,12 @@ service.interceptors.request.use(config => {
if (getToken()) { if (getToken()) {
config.headers['X-Token'] = getToken(); // 让每个请求携带自定义token 请根据实际情况自行修改 config.headers['X-Token'] = getToken(); // 让每个请求携带自定义token 请根据实际情况自行修改
} }
// 用于/demo/index 文件中baseUrl 判断(后端要求不管本地还是正式,都要可以访问实训/临时使用)
if (store.state.user.baseUrl) {
config.baseURL = store.state.user.baseUrl;
}
if (config.time) { if (config.time) {
config.timeout = config.time; // 让每个请求携带自定义token 请根据实际情况自行修改 config.timeout = config.time; // 让每个请求携带自定义token 请根据实际情况自行修改
} }

View File

@ -99,6 +99,7 @@ import md5 from 'js-md5';
import QrcodeVue from 'qrcode.vue'; import QrcodeVue from 'qrcode.vue';
import { getLoginWmurl, checkLoginStatus } from '@/api/login'; import { getLoginWmurl, checkLoginStatus } from '@/api/login';
import { LoginParams } from '@/utils/login'; import { LoginParams } from '@/utils/login';
// import {setSessionStorage } from '@/utils/auth';
export default { export default {
components: { QrcodeVue }, components: { QrcodeVue },
data() { data() {
@ -121,17 +122,30 @@ export default {
tipsMsg: '', tipsMsg: '',
pwdDisplay: true, pwdDisplay: true,
trainingList: [ trainingList: [
// {
// title: '(TA1601)',
// id: '613144'
// },
// {
// title: '(W0304)',
// id: '612112'
// },
// {
// title: '(S0304-S0301)',
// id: '610065'
// }
{ {
title: '区段封锁(TA1601)', title: '站台扣车(车站五05-下行站台)',
id: '613144' id: '4991355'
}, },
{ {
title: '道岔封锁(W0304)', title: '道岔封锁(W0904)',
id: '612112' id: '4993548'
}, },
{ {
title: '进路选排(S0304-S0301)', title: '进路选排(S0916-S0901)',
id: '610065' id: '4991607'
} }
], ],
loginForm: { loginForm: {
@ -167,7 +181,7 @@ export default {
this.loading = false; this.loading = false;
} else { } else {
this.show = false; this.show = false;
this.src = 'http://localhost:9527/cbtc/trainingPlatform'; this.src = 'https://test.joylink.club/cbtc/trainingPlatform';
this.$nextTick(_ => { this.$nextTick(_ => {
if (result.type == 'DEMO_RESULT' && result.hasOwnProperty('score')) { if (result.type == 'DEMO_RESULT' && result.hasOwnProperty('score')) {
this.$confirm(`得分:${result.score}`, '结果', { this.$confirm(`得分:${result.score}`, '结果', {
@ -188,12 +202,17 @@ export default {
}, },
destroyed() { destroyed() {
window.removeEventListener('message'); window.removeEventListener('message');
this.$store.dispatch('setBaseUrl', '');
}, },
methods: { methods: {
doClick(el) { doClick(el) {
if (this.token && this.userId) { if (this.token && this.userId) {
// &noPreLogout=true // &noPreLogout=true
this.src = `http://localhost:9527/cbtc/demoTraining/teach?lessonId=195&mapId=59&lineCode=02&prdType=01&trainingId=${el.id}&token=${this.token}`; // window.location.origin +
// setSessionStorage('project', 'DEFAULT');
// lessonId=101&mapId=49&prdType=01
// lessonId=195&mapId=59&lineCode=02&prdType=01
this.src = `https://test.joylink.club/cbtc/demoTraining/teach?lessonId=101&mapId=49&lineCode=02&prdType=01&trainingId=${el.id}&token=${this.token}&project=DEFAULT`;
this.loading = true; this.loading = true;
setTimeout(()=>{ setTimeout(()=>{
this.show = true; this.show = true;
@ -209,6 +228,8 @@ export default {
}, },
loginRefresh() { loginRefresh() {
// this.loadingCode = true; // this.loadingCode = true;
// this.$store.dispatch('setBaseUrl', 'https://api.joylink.club/jlcloud');
this.$store.dispatch('setBaseUrl', 'https://test.joylink.club/jlcloud');
const self = this; const self = this;
const params = LoginParams['LianKeTang']; const params = LoginParams['LianKeTang'];
params.project = 'DEFAULT'; params.project = 'DEFAULT';
@ -253,6 +274,7 @@ export default {
// //
self.clearTimer(self.checkLogin); self.clearTimer(self.checkLogin);
this.$store.dispatch('GetInfo', getToken()).then(res => { this.$store.dispatch('GetInfo', getToken()).then(res => {
// setSessionStorage('project', 'DEFAULT');
this.loginLoading = false; this.loginLoading = false;
this.dialogVisible = false; this.dialogVisible = false;
this.token = getToken(); this.token = getToken();
@ -280,6 +302,8 @@ export default {
// secret: "joylink" // secret: "joylink"
this.$refs.loginForm.validate(valid => { this.$refs.loginForm.validate(valid => {
if (valid) { if (valid) {
// this.$store.dispatch('setBaseUrl', 'https://api.joylink.club/jlcloud');
this.$store.dispatch('setBaseUrl', 'https://test.joylink.club/jlcloud');
const model = Object.assign({}, this.loginForm); const model = Object.assign({}, this.loginForm);
model.password = md5(model.password); model.password = md5(model.password);
model.type = 'class'; model.type = 'class';
@ -289,6 +313,7 @@ export default {
this.$store.dispatch('Login', model).then(() => { this.$store.dispatch('Login', model).then(() => {
this.$store.dispatch('SetAccount', model.username); this.$store.dispatch('SetAccount', model.username);
this.$store.dispatch('GetInfo', getToken()).then(res => { this.$store.dispatch('GetInfo', getToken()).then(res => {
// setSessionStorage('project', 'DEFAULT');
this.loginLoading = false; this.loginLoading = false;
this.dialogVisible = false; this.dialogVisible = false;
this.token = getToken(); this.token = getToken();
@ -345,6 +370,7 @@ export default {
} }
}, },
quit() { quit() {
this.$store.dispatch('setBaseUrl', '');
this.$store.dispatch('LogOut').then(() => { this.$store.dispatch('LogOut').then(() => {
location.reload(); // vue-router bug location.reload(); // vue-router bug
}); });

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,16 +38,54 @@
</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-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-button v-if="selectModel.meshtype == 'section'" @click="leftAlignment">区段左对齐</el-button> <!-- <el-button v-if="selectModel.meshtype == 'section'" @click="leftAlignment">区段左对齐</el-button>
@ -86,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>
@ -236,20 +283,34 @@
height: 100%; height: 100%;
} }
.jl3dstationmanagerdraw { .jl3dstationmanagerdraw {
z-index: 3001; /* z-index: 3001; */
position: absolute; position: absolute;
float: right; float: right;
/* top:25%; */ /* top:25%; */
/* left: 0; */ /* left: 0; */
width: 100%; width: 100%;
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

@ -144,10 +144,12 @@ export default {
}; };
}, },
mounted() { mounted() {
getPostByProjectCode(this.projectCode).then(resp => { if (this.project) {
this.postId = resp.data.id; getPostByProjectCode(this.projectCode).then(resp => {
}); this.postId = resp.data.id;
this.handleCurrentChange(); });
this.handleCurrentChange();
}
}, },
methods: { methods: {
commitComment() { commitComment() {

View File

@ -29,7 +29,7 @@ export default {
'$route': function() { '$route': function() {
}, },
'$store.state.map.mapViewLoadedCount': function (val) { '$store.state.map.mapViewLoadedCount': function (val) {
window.parent.postMessage(Object.assign({}, {type: 'DEMO_MAP_LOADED'}), 'http://localhost:9527/cbtc/demo'); window.parent.postMessage(Object.assign({}, {type: 'DEMO_MAP_LOADED'}), 'https://test.joylink.club/cbtc/demo');
} }
}, },
async mounted() { async mounted() {
@ -58,7 +58,7 @@ export default {
} }
}, },
exitSimulation(result = {}) { exitSimulation(result = {}) {
window.parent.postMessage(Object.assign(result, {type: 'DEMO_RESULT'}), 'http://localhost:9527/cbtc/demo'); window.parent.postMessage(Object.assign(result, {type: 'DEMO_RESULT'}), 'https://test.joylink.club/cbtc/demo');
} }
} }
}; };

View File

@ -155,13 +155,16 @@ export default {
EventBus.$on('quitScene', () => { EventBus.$on('quitScene', () => {
this.practiceDisabled = false; this.practiceDisabled = false;
}); });
getPostByProjectCode(ProjectCode[this.project]).then(resp => { if (this.project) {
if (resp.data) { getPostByProjectCode(ProjectCode[this.project]).then(resp => {
this.messageBoard = true; if (resp.data) {
} this.messageBoard = true;
}).catch(() => { }
this.$message.error('获取留言板信息失败'); }).catch(() => {
}); // this.$message.error('');
console.log('获取留言板信息失败');
});
}
}, },
methods:{ methods:{
menuClick() { menuClick() {

View File

@ -139,13 +139,16 @@ export default {
} }
}, },
mounted() { mounted() {
getPostByProjectCode(ProjectCode[this.project]).then(resp => { if (this.project) {
if (resp.data) { getPostByProjectCode(ProjectCode[this.project]).then(resp => {
this.messageBoard = true; if (resp.data) {
} this.messageBoard = true;
}).catch(() => { }
this.$message.error('获取留言板信息失败'); }).catch(() => {
}); // this.$message.error('');
console.log('获取留言板信息失败');
});
}
}, },
methods: { methods: {
tipInfo(opt) { tipInfo(opt) {

View File

@ -125,28 +125,32 @@ export default {
handleClick: this.sectionDetail handleClick: this.sectionDetail
} }
] ]
},
{
type: 'button',
title: this.$t('map.operation'),
width: '300',
buttons: [
{
name: this.$t('map.preview'),
handleClick: this.routingPreview
}
// {
// name: this.$t('map.compile'),
// handleClick: this.editObj
// },
// {
// name: this.$t('map.deleteObj'),
// handleClick: this.deleteObj,
// type: 'danger'
// },
// {
// name: '',
// handleClick: this.generateData,
// type: 'danger'
// }
]
} }
// {
// type: 'button',
// title: this.$t('map.operation'),
// width: '300',
// buttons: [
// {
// name: this.$t('map.compile'),
// handleClick: this.editObj
// },
// {
// name: this.$t('map.deleteObj'),
// handleClick: this.deleteObj,
// type: 'danger'
// },
// {
// name: '',
// handleClick: this.generateData,
// type: 'danger'
// }
// ]
// }
] ]
} }
}; };
@ -271,6 +275,10 @@ export default {
// }); // });
// } // }
// }, // },
routingPreview(index, row) {
this.$emit('routingSelected', row);
this.doClose();
},
sectionDetail(index, row) { sectionDetail(index, row) {
const sectionDict = {}; const sectionDict = {};
const stationDict = {}; const stationDict = {};

View File

@ -35,7 +35,8 @@ export default {
}, },
data() { data() {
return { return {
enabledTab: 'Route' enabledTab: 'Route',
oldsection:[]
// routeData: null // routeData: null
}; };
}, },
@ -59,9 +60,10 @@ export default {
}, },
routingSelected: function (data) { routingSelected: function (data) {
// this.routeData = data; // this.routeData = data;
if (this.$refs && this.$refs.routeEdit) { // if (this.$refs && this.$refs.routeEdit) {
this.$refs.routeEdit.editData(data); // this.$refs.routeEdit.editData(data);
} // }
this.changeSectionSelected(data.parkSectionCodeList, true);
}, },
previewRouteEvent: function () { previewRouteEvent: function () {
if (this.$refs && this.$refs.routeDetail) { if (this.$refs && this.$refs.routeDetail) {
@ -84,6 +86,50 @@ export default {
}, },
batchSectionListFocus(flag) { batchSectionListFocus(flag) {
// this.$refs.routeEdit.batchSectionListFocus(flag); // this.$refs.routeEdit.batchSectionListFocus(flag);
this.changeSectionSelected(this.oldsection, flag);
},
changeSectionSelected(selectedList, flag) {
if (selectedList && selectedList.length > 0) {
if (flag) {
if (this.oldsection.length > 0) {
this.oldsection.forEach((sectionInfo)=>{
const section = this.$store.getters['map/getDeviceByCode'](sectionInfo.sectionCode);
section.instance.drawBatchSelected(section, '');
});
this.oldsection = [];
}
selectedList.forEach(each=>{
const section = this.$store.getters['map/getDeviceByCode'](each.sectionCode);
const list = section.logicSectionCodeList;
// if()
// relSwitchCode
if (list && list.length > 0) {
list.forEach(logicSectionCode=>{
const logicSection = this.$store.getters['map/getDeviceByCode'](logicSectionCode);
this.oldsection.push(logicSection);
logicSection.instance.drawBatchSelected(section, 'routingSection');
});
} else {
this.oldsection.push({sectionCode:section.code});
section.instance.drawBatchSelected(section, 'routingSection');
}
});
this.$jlmap.setCenter(selectedList[0].sectionCode);
} else {
selectedList.forEach(each=>{
const section = this.$store.getters['map/getDeviceByCode'](each.sectionCode);
const list = section.logicSectionCodeList;
if (list && list.length > 0) {
list.forEach(logicSectionCode=>{
const logicSection = this.$store.getters['map/getDeviceByCode'](logicSectionCode);
logicSection.instance.drawBatchSelected(section, '');
});
} else {
section.instance.drawBatchSelected(section, '');
}
});
}
}
} }
} }
}; };

View File

@ -215,7 +215,6 @@ export default {
{ prop: 'zcCode', label: this.$t('map.zcCode'), type: 'select', optionLabel: 'code&&name', optionValue: 'code', options: this.zcList, isHidden: !this.isZcCode, disabled:true }, { prop: 'zcCode', label: this.$t('map.zcCode'), type: 'select', optionLabel: 'code&&name', optionValue: 'code', options: this.zcList, isHidden: !this.isZcCode, disabled:true },
{ prop: 'chargeStationCodeList', label: '管理车站列表:', type: 'multiSelect', optionLabel: 'name', optionValue: 'code', options: this.chargeStation, isHidden: !this.isZcCode }, { prop: 'chargeStationCodeList', label: '管理车站列表:', type: 'multiSelect', optionLabel: 'name', optionValue: 'code', options: this.chargeStation, isHidden: !this.isZcCode },
{ prop: 'relStationCodeList', label: '联锁站关联车站:', type: 'multiSelect', optionLabel: 'name', optionValue: 'code', options: this.relStationList, isHidden: !this.idCiStation}, { prop: 'relStationCodeList', label: '联锁站关联车站:', type: 'multiSelect', optionLabel: 'name', optionValue: 'code', options: this.relStationList, isHidden: !this.idCiStation},
{ prop: 'routingStationList', label: '生成交路的车站:', type: 'multiSelectHover', optionLabel: 'name', optionValue: 'code', options: this.stationList, hover: this.hover, buttonType: 'routingStation', buttonShowType: this.routingStationButtonShow },
{ prop: 'runPlanName', label: this.$t('map.stationRunPlanName'), type: 'input' }, { prop: 'runPlanName', label: this.$t('map.stationRunPlanName'), type: 'input' },
{ prop: 'jp', label: '车站简称:', type: 'input' } { prop: 'jp', label: '车站简称:', type: 'input' }
] ]
@ -257,9 +256,6 @@ export default {
}, },
isReentry() { isReentry() {
return this.editModel.reentry; return this.editModel.reentry;
},
routingStationButtonShow() {
return this.field === 'routingStation';
} }
}, },
methods: { methods: {
@ -306,11 +302,6 @@ export default {
return !data.centralized && data.code != this.editModel.code && !(beCentralizedStation[data.code] && beCentralizedStation[data.code] != this.editModel.code); return !data.centralized && data.code != this.editModel.code && !(beCentralizedStation[data.code] && beCentralizedStation[data.code] != this.editModel.code);
}); });
this.controlled = !!beCentralizedStation[selected.code]; this.controlled = !!beCentralizedStation[selected.code];
} else if (selected && selected._type === 'Station' && this.field == 'routingStation') {
this.activeName = 'first';
if (!this.editModel.routingStationList.includes(selected.code) && this.editModel.code != selected.code) {
this.editModel.routingStationList.push(selected.code);
}
} else if (selected && selected._type === 'Section' && this.field == 'standSection') { } else if (selected && selected._type === 'Section' && this.field == 'standSection') {
this.$set(this.rowData, 'sectionCode', selected.code); this.$set(this.rowData, 'sectionCode', selected.code);
} }

View File

@ -63,7 +63,7 @@
<el-table-column prop="startDate" label="开始日期" /> <el-table-column prop="startDate" label="开始日期" />
<el-table-column prop="endDate" label="截止日期" /> <el-table-column prop="endDate" label="截止日期" />
<el-table-column prop="days4FullMarks" label="考勤天数" /> <el-table-column prop="days4FullMarks" label="考勤天数" />
<el-table-column prop="weight" label="权重占比(%)" /> <el-table-column prop="weight" label="权重" />
<el-table-column label="操作" width="100"> <el-table-column label="操作" width="100">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button :disabled="isDetail" type="text" size="small" @click="editUsual(scope.row,scope.$index, 'attendance')">编辑</el-button> <el-button :disabled="isDetail" type="text" size="small" @click="editUsual(scope.row,scope.$index, 'attendance')">编辑</el-button>
@ -80,7 +80,7 @@
<el-tag>{{ getExamName(scope.row.examId) }}</el-tag> <el-tag>{{ getExamName(scope.row.examId) }}</el-tag>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="weight" label="权重占比(%)" /> <el-table-column prop="weight" label="权重" />
<el-table-column label="操作" width="100"> <el-table-column label="操作" width="100">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button :disabled="isDetail" type="text" size="small" @click="editUsual(scope.row,scope.$index, 'exam')">编辑</el-button> <el-button :disabled="isDetail" type="text" size="small" @click="editUsual(scope.row,scope.$index, 'exam')">编辑</el-button>
@ -102,7 +102,7 @@
<el-table-column prop="startTime" label="开始时间" /> <el-table-column prop="startTime" label="开始时间" />
<el-table-column prop="endTime" label="截止时间" /> <el-table-column prop="endTime" label="截止时间" />
<el-table-column prop="duration4FullMarks" label="学习时长" /> <el-table-column prop="duration4FullMarks" label="学习时长" />
<el-table-column prop="weight" label="权重占比(%)" width="100" /> <el-table-column prop="weight" label="权重" width="100" />
<el-table-column label="操作" width="100"> <el-table-column label="操作" width="100">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button :disabled="isDetail" type="text" size="small" @click="editUsual(scope.row,scope.$index, 'learningTime')">编辑</el-button> <el-button :disabled="isDetail" type="text" size="small" @click="editUsual(scope.row,scope.$index, 'learningTime')">编辑</el-button>
@ -189,7 +189,7 @@
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item v-if="usualScoringForm.type === 'attendance' || usualScoringForm.type === 'exam'" label="权重(%)" prop="weight"> <el-form-item v-if="usualScoringForm.type === 'attendance' || usualScoringForm.type === 'exam'" label="权重" prop="weight">
<el-input-number v-model="usualScoringForm.weight" :precision="0" :step="1" :min="1" :max="100" controls-position="right" /> <el-input-number v-model="usualScoringForm.weight" :precision="0" :step="1" :min="1" :max="100" controls-position="right" />
</el-form-item> </el-form-item>
</el-col> </el-col>
@ -214,7 +214,7 @@
</el-col> </el-col>
</el-row> </el-row>
<el-row> <el-row>
<el-form-item v-if="usualScoringForm.type === 'learningTime'" label="权重(%)" prop="weight"> <el-form-item v-if="usualScoringForm.type === 'learningTime'" label="权重" prop="weight">
<el-input-number v-model="usualScoringForm.weight" :precision="0" :step="1" :min="1" :max="100" controls-position="right" /> <el-input-number v-model="usualScoringForm.weight" :precision="0" :step="1" :min="1" :max="100" controls-position="right" />
</el-form-item> </el-form-item>
</el-row> </el-row>
@ -235,7 +235,7 @@
<el-tag>{{ getExamName(scope.row.examId) }}</el-tag> <el-tag>{{ getExamName(scope.row.examId) }}</el-tag>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="weight" label="权重占比(%)" /> <el-table-column prop="weight" label="权重" />
<el-table-column label="操作" width="100"> <el-table-column label="操作" width="100">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button :disabled="isDetail" type="text" size="small" @click="editFinal(scope.row, scope.$index)">编辑</el-button> <el-button :disabled="isDetail" type="text" size="small" @click="editFinal(scope.row, scope.$index)">编辑</el-button>
@ -268,7 +268,7 @@
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="权重(%)" prop="weight"> <el-form-item label="权重" prop="weight">
<el-input-number v-model="finalScoringForm.weight" :precision="0" :step="1" :min="1" :max="100" controls-position="right" /> <el-input-number v-model="finalScoringForm.weight" :precision="0" :step="1" :min="1" :max="100" controls-position="right" />
</el-form-item> </el-form-item>
</el-col> </el-col>
@ -359,7 +359,7 @@ export default {
{ required: true, message: '请选择测试试卷', trigger: 'blur' } { required: true, message: '请选择测试试卷', trigger: 'blur' }
], ],
weight: [ weight: [
{ required: true, message: '请填写权重占比', trigger: 'blur' } { required: true, message: '请填写权重', trigger: 'blur' }
] ]
}, },
finalScoringForm: { finalScoringForm: {
@ -371,7 +371,7 @@ export default {
{ required: true, message: '请选择测试试卷', trigger: 'blur' } { required: true, message: '请选择测试试卷', trigger: 'blur' }
], ],
weight: [ weight: [
{ required: true, message: '请填写权重占比', trigger: 'blur' } { required: true, message: '请填写权重', trigger: 'blur' }
] ]
}, },
attendanceData:[], attendanceData:[],
@ -417,12 +417,16 @@ export default {
initData(data) { initData(data) {
this.form = { orgId: data.orgId + '', schoolYear: data.schoolYear, term: data.term }; this.form = { orgId: data.orgId + '', schoolYear: data.schoolYear, term: data.term };
this.classChange(data.orgId); this.classChange(data.orgId);
this.examsData = data.usualScoringRule.exams || []; if (data.usualScoringRule) {
this.learningTimeData = data.usualScoringRule.learningTimeList || []; this.examsData = data.usualScoringRule.exams || [];
if (data.usualScoringRule.attendance) { this.learningTimeData = data.usualScoringRule.learningTimeList || [];
this.attendanceData = [data.usualScoringRule.attendance]; if (data.usualScoringRule.attendance) {
this.attendanceData = [data.usualScoringRule.attendance];
}
}
if (data.finalScoringRule) {
this.finalScoringData = data.finalScoringRule.exams || [];
} }
this.finalScoringData = data.finalScoringRule.exams || [];
}, },
generateUsual() { generateUsual() {
this.$refs.usualScoringForm.validate((valid) => { this.$refs.usualScoringForm.validate((valid) => {
@ -561,16 +565,23 @@ export default {
const model = { const model = {
orgId: this.form.orgId, orgId: this.form.orgId,
schoolYear: this.form.schoolYear, schoolYear: this.form.schoolYear,
term: this.form.term, term: this.form.term
usualScoringRule: {
attendance: this.attendanceData[0] || {},
learningTimeList: this.learningTimeData,
exams: this.examsData
},
finalScoringRule: {
exams: this.finalScoringData
}
}; };
if (this.finalScoringData && this.finalScoringData.length) {
model.finalScoringRule = { exams: this.finalScoringData };
}
if ((this.attendanceData && this.attendanceData.length) || (this.learningTimeData && this.learningTimeData.length) || (this.examsData && this.examsData.length)) {
model.usualScoringRule = {};
if (this.attendanceData && this.attendanceData.length) {
model.usualScoringRule.attendance = this.attendanceData[0];
}
if (this.learningTimeData && this.learningTimeData.length) {
model.usualScoringRule.learningTimeList = this.learningTimeData;
}
if (this.examsData && this.examsData.length) {
model.usualScoringRule.learningTimeList = this.learningTimeData;
}
}
if (this.$route.query.type === 'update') { if (this.$route.query.type === 'update') {
model.id = this.$route.query.ruleId; model.id = this.$route.query.ruleId;
updateRule(model).then(resp => { updateRule(model).then(resp => {

View File

@ -1,7 +1,7 @@
<template> <template>
<div> <div>
<div class="title_content">评价结果</div> <div class="title_content">评价结果</div>
<el-card class="box-card"> <el-card class="box-card" style="padding: 22px 10px 0 10px;">
<el-form ref="form" :model="form" :rules="rules"> <el-form ref="form" :model="form" :rules="rules">
<el-row> <el-row>
<el-col :span="6"> <el-col :span="6">
@ -179,6 +179,5 @@ export default {
.box-card{ .box-card{
width: 80%; width: 80%;
margin: 0 auto; margin: 0 auto;
padding: 22px 10px 0 10px;
} }
</style> </style>

View File

@ -213,7 +213,7 @@ export default {
tripNumber: '', tripNumber: '',
planId: '', planId: '',
serviceNumber: '', serviceNumber: '',
startTbFront: false, startTbFront: false,
endTbFront: false endTbFront: false
}, },
tripNumberList: [{ value: '', label: this.$t('planMonitor.automatic') }], tripNumberList: [{ value: '', label: this.$t('planMonitor.automatic') }],
@ -281,8 +281,16 @@ export default {
endStationFilterMap[routing.endStationCode] = {text:formatName(routing.endStationCode), value:routing.endStationCode}; endStationFilterMap[routing.endStationCode] = {text:formatName(routing.endStationCode), value:routing.endStationCode};
} }
}); });
this.startStationFilters = Object.values(startStationFilterMap); this.startStationFilters = Object.values(startStationFilterMap).sort((a, b)=>{
this.endStationFilters = Object.values(endStationFilterMap); const startStationA = this.$store.getters['map/getDeviceByCode'](a.value);
const startStationB = this.$store.getters['map/getDeviceByCode'](b.value);
return startStationA.kmRange - startStationB.kmRange;
});
this.endStationFilters = Object.values(endStationFilterMap).sort((a, b)=>{
const endStationA = this.$store.getters['map/getDeviceByCode'](a.value);
const endStationB = this.$store.getters['map/getDeviceByCode'](b.value);
return endStationA.kmRange - endStationB.kmRange;
});
}); });
getMapStationRunUser(mapId).then(resp =>{ getMapStationRunUser(mapId).then(resp =>{
@ -324,10 +332,10 @@ export default {
compuntedRunTime(list, index, runLevel) { compuntedRunTime(list, index, runLevel) {
let runTime = 0; let runTime = 0;
if ((index == 0 && String(this.addModel.startTbFront) != 'undefined') || if ((index == 0 && String(this.addModel.startTbFront) != 'undefined') ||
(index == list.length-1 && String(this.addModel.endTbFront) != 'undefined')) { (index == list.length - 1 && String(this.addModel.endTbFront) != 'undefined')) {
return 0 return 0;
} }
if (index < list.length - 1) { if (index < list.length - 1) {
const stopStationObj = this.stopStationMap[[list[index].sectionCode, list[index + 1].sectionCode].toString()]; const stopStationObj = this.stopStationMap[[list[index].sectionCode, list[index + 1].sectionCode].toString()];
@ -371,14 +379,14 @@ export default {
elem.speedLevelTime = realRunlevel; elem.speedLevelTime = realRunlevel;
elem.speedLevel = runLevelObj.label; elem.speedLevel = runLevelObj.label;
let fronTime = 0; let fronTime = 0;
if (index == 0 && String(this.addModel.startTbFront) == 'false') { if (index == 0 && String(this.addModel.startTbFront) == 'false') {
const data = this.reentryData[elem.stationCode]||{}; const data = this.reentryData[elem.stationCode] || {};
fronTime = data.tbTo || 0; fronTime = data.tbTo || 0;
} else if (index == list.length - 2 && String(this.addModel.endTbFront) == 'false') { } else if (index == list.length - 2 && String(this.addModel.endTbFront) == 'false') {
const data = this.reentryData[list[index+1].stationCode]||{}; const data = this.reentryData[list[index + 1].stationCode] || {};
fronTime = data.tbTo || 0; fronTime = data.tbTo || 0;
} }
tempTime = tempTime + fronTime + elem.stopTime + elem.speedLevelTime; tempTime = tempTime + fronTime + elem.stopTime + elem.speedLevelTime;
}); });
@ -397,8 +405,8 @@ export default {
this.addModel.endSectionCode = row.endSectionCode; this.addModel.endSectionCode = row.endSectionCode;
this.addModel.startSectionCode = row.startSectionCode; this.addModel.startSectionCode = row.startSectionCode;
this.addModel.routingCode = row.code; this.addModel.routingCode = row.code;
this.addModel.startTbFront = row.startTbFront; this.addModel.startTbFront = row.startTbFront;
this.addModel.endTbFront = row.endTbFront; this.addModel.endTbFront = row.endTbFront;
this.computedDetailList('routingCode'); this.computedDetailList('routingCode');
}, },
handleCommit() { handleCommit() {

View File

@ -346,6 +346,7 @@ export default {
this.loading = false; this.loading = false;
// this.$refs.dataform.validateField('runningRouting'); // this.$refs.dataform.validateField('runningRouting');
this.$refs.dataform.resetForm(); this.$refs.dataform.resetForm();
this.$refs.dataform.allSelectBlur();
// this.$refs.dataform.clearValidate(); // this.$refs.dataform.clearValidate();
// blur // blur
this.formModel = { this.formModel = {

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