新三维客流逻辑基本完成(未实装)
This commit is contained in:
parent
ab6acbc7d8
commit
d22f9d62de
@ -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;
|
||||
}
|
||||
|
||||
}
|
@ -10,10 +10,11 @@ export function silumationConnect(deviceaction,toptrain,downtrain,routegroup,pas
|
||||
let start = true;
|
||||
let topic = '/user/queue/simulation/jl3d/'+routegroup;
|
||||
let header = {'X-Token': getToken() };
|
||||
socketon(topic);
|
||||
// scope.socketon(topic);
|
||||
|
||||
function socketon(topic) {
|
||||
this.socketon = function() {
|
||||
try {
|
||||
start = true;
|
||||
scope.teststomp.subscribe(topic, callback, header);
|
||||
} catch (error) {
|
||||
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);
|
||||
};
|
||||
|
||||
// 仿真socket接口回调函数
|
||||
function callback(Response) {
|
||||
const 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);
|
||||
// }
|
||||
// }
|
||||
let data = JSON.parse(Response.body);
|
||||
|
||||
|
||||
|
||||
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++){
|
||||
if(data.body[i].section == passerStation.nowStation.topsection){
|
||||
|
||||
if(toptrain.nowcode != data.body[i].code){
|
||||
toptrain.nowcode = data.body[i].code;
|
||||
sockStationPass.topswitch = true;
|
||||
}
|
||||
toptrain.position.copy(toptrain.curve.getPointAt(data.body[i].offset));
|
||||
|
||||
|
||||
}else{
|
||||
if(downtrain.nowcode == data.body[i].code){
|
||||
if(toptrain.nowcode == data.body[i].code){
|
||||
sockStationPass.topswitch = false
|
||||
toptrain.position.x -= 1;
|
||||
}
|
||||
|
@ -10,11 +10,13 @@ export function stationConnect(deviceaction,toptrain,downtrain,routegroup,passer
|
||||
let start = true;
|
||||
let topic = '/user/queue/simulation/passenger/'+routegroup;
|
||||
let header = {'X-Token': getToken() };
|
||||
|
||||
this.topswitch = false;
|
||||
this.downswitch = false;
|
||||
socketon(topic);
|
||||
// scope.socketon(topic);
|
||||
|
||||
function socketon(topic) {
|
||||
this.socketon = function() {
|
||||
start = true;
|
||||
try {
|
||||
scope.teststomp.subscribe(topic, callback, header);
|
||||
} catch (error) {
|
||||
@ -23,25 +25,25 @@ export function stationConnect(deviceaction,toptrain,downtrain,routegroup,passer
|
||||
|
||||
};
|
||||
|
||||
this.socketoff = function(topic) {
|
||||
this.socketoff = function() {
|
||||
start = false;
|
||||
scope.teststomp.unsubscribe(topic);
|
||||
};
|
||||
|
||||
// 仿真socket接口回调函数
|
||||
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"){
|
||||
//
|
||||
// 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;
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// }
|
||||
jl3d.changestation(passerStation.stationlist[i].name);
|
||||
updateValue(passerStation.stationlist[i].name);
|
||||
i = passerStation.stationlist.length;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
/** 站台客流当前人数信息 */
|
||||
if(data.type == "STAND_PFI"){
|
||||
|
||||
@ -55,7 +57,7 @@ export function stationConnect(deviceaction,toptrain,downtrain,routegroup,passer
|
||||
|
||||
|
||||
if(passerStation.stationlist[j].topstand == newStandData[i].standCode){
|
||||
|
||||
|
||||
// console.log(passerStation.stationlist[j]);
|
||||
passerStation.stationlist[j].topspeed = newStandData[i].to;
|
||||
passerStation.stationlist[j].toppassers = newStandData[i].num;
|
||||
@ -89,140 +91,26 @@ export function stationConnect(deviceaction,toptrain,downtrain,routegroup,passer
|
||||
|
||||
if(toptrain.nowcode == data.body.code && scope.topswitch == true){
|
||||
|
||||
// //根据上下车人数创建人
|
||||
// jl3d.updateNowLeaveData("top",data.body.out);
|
||||
// setTimeout(function(){
|
||||
// passerAi.passerout("top","start",data.body.in)
|
||||
// }, 5000);
|
||||
//根据上下车人数创建人
|
||||
jl3d.updateNowLeaveData("top",data.body.out);
|
||||
setTimeout(function(){
|
||||
passerAi.passerout("top","start",data.body.in)
|
||||
}, 5000);
|
||||
|
||||
}
|
||||
// if(downtrain.nowcode == data.body.code && scope.downswitch == true){
|
||||
// //根据上下车人数创建人
|
||||
// jl3d.updateNowLeaveData("down",data.body.out);
|
||||
// setTimeout(function(){
|
||||
// passerAi.passerout("down","start",data.body.in);
|
||||
// }, 5000);
|
||||
// }
|
||||
if(downtrain.nowcode == data.body.code && scope.downswitch == true){
|
||||
//根据上下车人数创建人
|
||||
jl3d.updateNowLeaveData("down",data.body.out);
|
||||
setTimeout(function(){
|
||||
passerAi.passerout("down","start",data.body.in);
|
||||
}, 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();
|
||||
// });
|
||||
// }
|
||||
|
||||
}
|
||||
|
||||
|
@ -754,7 +754,20 @@ THREE.StationManagerControls = function ( object, domElement ,regionManager,scen
|
||||
// prevents the browser from setting it automatically.
|
||||
|
||||
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 ) {
|
||||
|
||||
case scope.mouseButtons.RIGHT:
|
||||
@ -837,7 +850,7 @@ THREE.StationManagerControls = function ( object, domElement ,regionManager,scen
|
||||
transformControl.attach(scope.selectRegion.parent);
|
||||
jl3dStationManagerUpdateSelectModel(scope.selectRegion.parent);
|
||||
}else{
|
||||
|
||||
transformControl.detach(scope.selectRegion);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -859,7 +872,7 @@ THREE.StationManagerControls = function ( object, domElement ,regionManager,scen
|
||||
event.preventDefault();
|
||||
scope.animateswitch = true;
|
||||
|
||||
if(scope.controlMode == "Orbit"){
|
||||
if(scope.controlMode == "Orbit" || scope.controlMode == "Draw"){
|
||||
switch ( state ) {
|
||||
|
||||
case STATE.ROTATE:
|
||||
|
@ -79,9 +79,9 @@ export function Jl3dStationManager(dom,skinCode,routegroup,initCode) {
|
||||
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.1, 10000);
|
||||
camerass.position.set(0,300,0);
|
||||
@ -162,7 +162,7 @@ export function Jl3dStationManager(dom,skinCode,routegroup,initCode) {
|
||||
|
||||
let passerHuman = new PasserHuman();
|
||||
|
||||
let passerAi = new PasserAi(sceneRegion,pathFinder,sceneRegion);
|
||||
let passerAi = new PasserAi(pathFinder,sceneRegion);
|
||||
|
||||
this.anime = null;
|
||||
|
||||
@ -177,12 +177,10 @@ export function Jl3dStationManager(dom,skinCode,routegroup,initCode) {
|
||||
let passerTrain = new PasserTrain();
|
||||
|
||||
// document.addEventListener( "mousedown", onselect, false );
|
||||
console.log(skinCode);
|
||||
|
||||
getPublish3dMapDetail(skinCode).then(netdata3d => {
|
||||
console.log("1");
|
||||
passerStation.loadMaterial(netdata3d);
|
||||
this.modelmanager.loadpromise(Staticmodel, scope.mixers,"2").then(function (data) {
|
||||
console.log("2");
|
||||
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);
|
||||
@ -194,25 +192,20 @@ export function Jl3dStationManager(dom,skinCode,routegroup,initCode) {
|
||||
monitor = scope.modelmanager.monitor.mesh;
|
||||
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);
|
||||
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);
|
||||
|
||||
|
||||
|
||||
store.dispatch('app/animationsClose');
|
||||
|
||||
let checkobject = setInterval(function(){
|
||||
|
||||
clearInterval(checkobject);
|
||||
switchStationManagerViews();
|
||||
//进站控制
|
||||
startWorker();
|
||||
passerWebWork.postMessage(["on"]);
|
||||
@ -224,6 +217,7 @@ export function Jl3dStationManager(dom,skinCode,routegroup,initCode) {
|
||||
});
|
||||
|
||||
this.initTrafficStart = function(){
|
||||
console.log("initTrafficStart");
|
||||
passerStation.initCodeStation(initCode);
|
||||
scope.humanWaitTop = passerStation.nowStation.toppassers;
|
||||
scope.humanWaitDown = passerStation.nowStation.downpassers;
|
||||
@ -233,7 +227,7 @@ export function Jl3dStationManager(dom,skinCode,routegroup,initCode) {
|
||||
// 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){
|
||||
@ -242,6 +236,7 @@ export function Jl3dStationManager(dom,skinCode,routegroup,initCode) {
|
||||
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();
|
||||
@ -251,13 +246,13 @@ export function Jl3dStationManager(dom,skinCode,routegroup,initCode) {
|
||||
// console.log(passerStation.nowStation);
|
||||
for(let i=0;i<passerStation.nowStation.topspeed;i++){
|
||||
let newIn = {
|
||||
overGoal:"topStand",
|
||||
overGoal:"top",
|
||||
};
|
||||
waitForCreatIn.push(newIn);
|
||||
}
|
||||
for(let i=0;i<passerStation.nowStation.downspeed;i++){
|
||||
let newIn = {
|
||||
overGoal:"downStand",
|
||||
overGoal:"down",
|
||||
};
|
||||
waitForCreatIn.push(newIn);
|
||||
}
|
||||
@ -268,28 +263,8 @@ export function Jl3dStationManager(dom,skinCode,routegroup,initCode) {
|
||||
};
|
||||
|
||||
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(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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
passerHuman.leaveHumanCreate(direct,outNum,outStationPassers,sceneRegion.startRegion,sceneRegion.checkRegion,sceneRegion.standRegion);
|
||||
}
|
||||
|
||||
this.resetscene = function(){
|
||||
@ -331,8 +306,6 @@ export function Jl3dStationManager(dom,skinCode,routegroup,initCode) {
|
||||
// j--;
|
||||
}
|
||||
|
||||
|
||||
|
||||
passerTrain.toptrain.position.y = -20000;
|
||||
passerTrain.downtrain.position.y = -20000;
|
||||
|
||||
@ -364,15 +337,17 @@ export function Jl3dStationManager(dom,skinCode,routegroup,initCode) {
|
||||
// actions[an].play();
|
||||
// }
|
||||
setTimeout(function(){
|
||||
// passerAi.initPasser(humanlist,topWaitPassers,downWaitPassers,passerHuman,scope);
|
||||
|
||||
passerAi.initPasser(humanlist,topWaitPassers,downWaitPassers,passerHuman,scope);
|
||||
aiswitch = 0;
|
||||
}, 2000);
|
||||
|
||||
}
|
||||
|
||||
let updateaianimate;
|
||||
function startWorker(){
|
||||
|
||||
let updateaianimate = setInterval(
|
||||
updateaianimate = setInterval(
|
||||
function(){
|
||||
// console.log("?");
|
||||
if(aiswitch == 0){
|
||||
@ -412,34 +387,41 @@ export function Jl3dStationManager(dom,skinCode,routegroup,initCode) {
|
||||
}
|
||||
, 100);
|
||||
|
||||
passerWebWork.onmessage = function (event) {
|
||||
if(aiswitch == 0){
|
||||
// console.log(humanlist.children.length);
|
||||
// console.log(sceneRegion.startRegion.group.children);
|
||||
this.allStationData = [];
|
||||
// console.log(Math.random());
|
||||
|
||||
// console.log(waitForCreatIn);
|
||||
if(waitForCreatIn.length>0){
|
||||
let randomNum = Math.random();
|
||||
let startNum = 0;
|
||||
}
|
||||
|
||||
for(let i=0;i<sceneRegion.startRegion.group.children.length;i++){
|
||||
startNum = startNum + sceneRegion.startRegion.group.children[i].startWeight;
|
||||
passerWebWork.onmessage = function (event) {
|
||||
if(aiswitch == 0){
|
||||
// console.log(humanlist.children.length);
|
||||
// console.log(sceneRegion.startRegion.group.children);
|
||||
this.allStationData = [];
|
||||
// console.log(Math.random());
|
||||
|
||||
if(randomNum<startNum){
|
||||
// console.log(waitForCreatIn);
|
||||
if(waitForCreatIn.length>0){
|
||||
let randomNum = Math.random();
|
||||
let startNum = 0;
|
||||
|
||||
passerHuman.newHumanCreate(humanlist,sceneRegion.startRegion.group.children[i],0,waitForCreatIn[0].overGoal);
|
||||
waitForCreatIn.shift();
|
||||
i = sceneRegion.startRegion.group.children.length;
|
||||
}
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
}
|
||||
};
|
||||
|
||||
function closeStartWorker(){
|
||||
clearInterval(updateaianimate);
|
||||
}
|
||||
|
||||
//
|
||||
// function onselect(event){
|
||||
// if(event.button == '0'){
|
||||
@ -459,7 +441,7 @@ export function Jl3dStationManager(dom,skinCode,routegroup,initCode) {
|
||||
// }
|
||||
|
||||
this.changeDrawType = function(drawType){
|
||||
console.log(drawType);
|
||||
|
||||
controls.drawSwitch = true;
|
||||
if(drawType == "startRegion"){
|
||||
controls.drawColor = 0x2894FF;
|
||||
@ -504,11 +486,28 @@ export function Jl3dStationManager(dom,skinCode,routegroup,initCode) {
|
||||
this.changeControlMode = function(controlMode){
|
||||
|
||||
if(controlMode == false){
|
||||
scope.resetscene();
|
||||
controls.controlMode = "Orbit";
|
||||
camerass.position.set(oldCameraPosition.x,oldCameraPosition.y,oldCameraPosition.z);
|
||||
controls.target.set( oldCameraTarget.x,oldCameraTarget.y,oldCameraTarget.z);
|
||||
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){
|
||||
|
||||
aiswitch = 1;
|
||||
controls.controlMode = "Draw";
|
||||
oldCameraPosition.copy(camerass.position);
|
||||
oldCameraTarget.copy(controls.target);
|
||||
@ -516,6 +515,16 @@ export function Jl3dStationManager(dom,skinCode,routegroup,initCode) {
|
||||
// controls.target.set( 1, 0, 0 );
|
||||
passerStation.apartPosition(controls.drawGroup,scope.modelmanager.zhajiin.mesh,scope.modelmanager.zhajiout.mesh);
|
||||
controls.initPlaneMesh(passerStation);
|
||||
|
||||
sockStationPass.socketoff();
|
||||
sockStation.socketoff();
|
||||
scene.remove(humanlist);
|
||||
scene.remove(topWaitPassers);
|
||||
scene.remove(downWaitPassers);
|
||||
scene.remove(outStationPassers);
|
||||
// closeStartWorker();
|
||||
// passerWebWork.postMessage(["off"]);
|
||||
// scene.add(controls.drawGroup);
|
||||
}
|
||||
}
|
||||
|
||||
@ -532,8 +541,6 @@ export function Jl3dStationManager(dom,skinCode,routegroup,initCode) {
|
||||
sceneConfig:JSON.stringify([]),
|
||||
simulationConfig:JSON.stringify([]),
|
||||
};
|
||||
console.log(newSaveData);
|
||||
// newSaveData.regionData.push();
|
||||
|
||||
return newSaveData;
|
||||
|
||||
@ -541,18 +548,16 @@ export function Jl3dStationManager(dom,skinCode,routegroup,initCode) {
|
||||
|
||||
this.loadData = function(data){
|
||||
let regionData = JSON.parse(data.regionData);
|
||||
sceneRegion.loadRegionData(regionData);
|
||||
sceneRegion.loadRegionData(regionData,controls);
|
||||
};
|
||||
|
||||
//循环渲染函数
|
||||
function animate() {
|
||||
render();
|
||||
// console.log(passerRender);
|
||||
// console.log("ss");
|
||||
// if(passerRender.state == "freeview"){
|
||||
controls.update();
|
||||
// }
|
||||
// delta = clock.getDelta();
|
||||
|
||||
requestAnimationFrame(animate);
|
||||
|
||||
@ -568,15 +573,5 @@ export function Jl3dStationManager(dom,skinCode,routegroup,initCode) {
|
||||
}
|
||||
|
||||
|
||||
function getnum(num,pnum){
|
||||
let re = [];
|
||||
let base = Math.floor(num/pnum);
|
||||
let reset = num%pnum;
|
||||
for(let i=0;i<pnum;i++){
|
||||
let nownum = base+(i<reset?1:0);
|
||||
re.push(nownum);
|
||||
}
|
||||
return re;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -124,7 +124,7 @@ export function ModelManager(){
|
||||
return new Promise(function(resolve, reject){
|
||||
|
||||
Promise.all(initlist).then((result) => {
|
||||
console.log("success");
|
||||
// console.log("success");
|
||||
store.dispatch('app/animationsClose');
|
||||
resolve("success"); //['成功了', 'success']
|
||||
}).catch((error) => {
|
||||
@ -142,8 +142,8 @@ function fbxpromise(asset,mixers,model){
|
||||
if( mode == "2"){
|
||||
loader.load( asset.url, function ( object ) {
|
||||
model.mesh = object;
|
||||
console.log(asset.type);
|
||||
console.log(object);
|
||||
// console.log(asset.type);
|
||||
// console.log(object);
|
||||
resolve(asset.deviceType);
|
||||
} );
|
||||
|
||||
|
@ -11,6 +11,7 @@ export function PasserHuman() {
|
||||
originhuman1.progress = 1;
|
||||
// scene.add(originhuman1);
|
||||
originhuman2 = creatHuman();
|
||||
originhuman2.progress = 1;
|
||||
//
|
||||
// let mixer1 = new THREE.AnimationMixer( originhuman1 );
|
||||
// let mixer2 = new THREE.AnimationMixer( originhuman2 );
|
||||
@ -80,12 +81,105 @@ export function PasserHuman() {
|
||||
}
|
||||
|
||||
//创建新的乘客
|
||||
this.newHumanCreate = function(humanlist,region,stage,overGoal){
|
||||
this.newHumanCreate = function(humanlist,region,stage,overGoal,nowGoal){
|
||||
let newhuman;
|
||||
createHumanModel(newhuman,humanlist,region,stage,overGoal);
|
||||
createHumanModel(newhuman,humanlist,region,stage,overGoal,nowGoal);
|
||||
}
|
||||
|
||||
function createHumanModel(newhuman,humanlist,region,stage,overGoal){
|
||||
this.newInitHumanCreate = function(humanlist,pos,overGoal,nowGoal,standDoorNum){
|
||||
|
||||
let newhuman;
|
||||
newhuman = originhuman1.clone();
|
||||
newhuman.position.copy(pos);
|
||||
|
||||
if(overGoal){
|
||||
if(overGoal == "top"){
|
||||
newhuman.rotation.y = Math.PI;
|
||||
}
|
||||
newhuman.overGoal = overGoal;
|
||||
}
|
||||
|
||||
newhuman.standDoorNum = standDoorNum;
|
||||
newhuman.status = "0";
|
||||
if(nowGoal){
|
||||
newhuman.nowGoal = nowGoal;
|
||||
}
|
||||
|
||||
//年龄
|
||||
newhuman.age = null;
|
||||
//性别
|
||||
newhuman.gender = "";
|
||||
//身体状态
|
||||
newhuman.bodyStatus = "";
|
||||
|
||||
newhuman.runrail = null;
|
||||
newhuman.speed = 0;
|
||||
humanlist.add(newhuman);
|
||||
};
|
||||
|
||||
let waitForCreatOutTop = [];
|
||||
let waitForCreatOutDown = [];
|
||||
this.leaveHumanCreate = function(direct,outNum,outStationPassers,startRegion,checkRegion,standRegion){
|
||||
|
||||
if(direct == "top"){
|
||||
waitForCreatOutTop = getnum(outNum,standRegion.belongList["top"].length-1);
|
||||
|
||||
// console.log(waitForCreatOutTop);
|
||||
for(let i=0;i<waitForCreatOutTop.length;i++){
|
||||
for(let j=0;j<waitForCreatOutTop[i];j++){
|
||||
setTimeout(function(){
|
||||
// console.log(sceneRegion.list["standtop"].doorpoints[i]);
|
||||
|
||||
createLeaveHumanModel(outStationPassers,standRegion.belongList["top"][i].position,startRegion);
|
||||
}, Math.random()*1000*j);
|
||||
}
|
||||
}
|
||||
}else{
|
||||
waitForCreatOutDown = getnum(outNum,standRegion.belongList["down"].length-1);
|
||||
for(let i=0;i<waitForCreatOutDown.length;i++){
|
||||
for(let j=0;j<waitForCreatOutDown[i];j++){
|
||||
setTimeout(function(){
|
||||
// console.log(sceneRegion.list["standdown"].doorpoints[i]);
|
||||
createLeaveHumanModel(outStationPassers,standRegion.belongList["down"][i].position,startRegion);
|
||||
}, Math.random()*1000*j);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
function createLeaveHumanModel(humanlist,pos,startRegion){
|
||||
let newhuman;
|
||||
newhuman = originhuman1.clone();
|
||||
newhuman.position.copy(pos);
|
||||
|
||||
newhuman.status = "0";
|
||||
|
||||
//年龄
|
||||
newhuman.age = null;
|
||||
//性别
|
||||
newhuman.gender = "";
|
||||
//身体状态
|
||||
newhuman.bodyStatus = "";
|
||||
|
||||
newhuman.runrail = null;
|
||||
newhuman.speed = 0;
|
||||
|
||||
let randomNum = Math.random();
|
||||
let endNum = 0;
|
||||
for(let i=0;i<startRegion.group.children.length;i++){
|
||||
endNum = endNum + startRegion.group.children[i].endWeight;
|
||||
if(randomNum<endNum){
|
||||
newhuman.overGoal = i;
|
||||
newhuman.nowGoal = "findeCheck";
|
||||
newhuman.connectCheckRegion = startRegion.group.children[i].connectCheckRegion;
|
||||
i = startRegion.group.children.length;
|
||||
}
|
||||
}
|
||||
humanlist.add(newhuman);
|
||||
}
|
||||
|
||||
function createHumanModel(newhuman,humanlist,region,stage,overGoal,nowGoal){
|
||||
let mantype = Math.floor(Math.random()*(3-1+1))+1;
|
||||
|
||||
if(mantype == 1){
|
||||
@ -107,16 +201,20 @@ export function PasserHuman() {
|
||||
newhuman.overGoal = overGoal;
|
||||
}
|
||||
|
||||
|
||||
newhuman.status = 0;
|
||||
|
||||
let goalRandom = Math.random();
|
||||
if(goalRandom<region.targetWeight){
|
||||
newhuman.nowGoal = "ticketRegion";
|
||||
newhuman.standDoorNum = "";
|
||||
newhuman.status = "0";
|
||||
if(nowGoal){
|
||||
newhuman.nowGoal = nowGoal;
|
||||
}else{
|
||||
newhuman.nowGoal = "securityRegion";
|
||||
let goalRandom = Math.random();
|
||||
if(goalRandom<region.targetWeight){
|
||||
newhuman.nowGoal = "ticketRegion";
|
||||
}else{
|
||||
newhuman.nowGoal = "securityRegion";
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//年龄
|
||||
newhuman.age = null;
|
||||
//性别
|
||||
@ -134,7 +232,7 @@ export function PasserHuman() {
|
||||
}
|
||||
//定义新模型走路动画
|
||||
this.initMoveAnimate = function(model,name,points,index){
|
||||
model.status = 1;
|
||||
model.status = "1";
|
||||
let curve = new THREE.CatmullRomCurve3(points);
|
||||
curve.curvrtype = "catmullrom";
|
||||
// curve.getLength();
|
||||
@ -158,23 +256,20 @@ export function PasserHuman() {
|
||||
// outStationPassers.children[i].action.stop();
|
||||
outStationPassers.children[i].status = 0;
|
||||
|
||||
if(outStationPassers.children[i].stage == 8){
|
||||
if(outStationPassers.children[i].nowGoal == "outStation"){
|
||||
passerHuman.uncache(outStationPassers.children[i]);
|
||||
outStationPassers.remove(outStationPassers.children[i]);
|
||||
i--;
|
||||
}else if(outStationPassers.children[i].stage == 7){
|
||||
outStationPassers.children[i].stage = 8;
|
||||
}else if(outStationPassers.children[i].nowGoal == "outCheck"){
|
||||
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{
|
||||
//根据动画进度获取动画轨迹上点
|
||||
// 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);
|
||||
|
||||
//更新模型坐标
|
||||
@ -194,13 +289,14 @@ export function PasserHuman() {
|
||||
}
|
||||
|
||||
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){
|
||||
topWaitPassers.children[i].progress = 1;
|
||||
// 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]);
|
||||
topWaitPassers.remove(topWaitPassers.children[i]);
|
||||
i--;
|
||||
@ -229,12 +325,13 @@ export function PasserHuman() {
|
||||
}
|
||||
|
||||
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){
|
||||
downWaitPassers.children[i].progress = 1;
|
||||
// downWaitPassers.children[i].action.stop();
|
||||
downWaitPassers.children[i].status = 0;
|
||||
if(downWaitPassers.children[i].stage == 4){
|
||||
downWaitPassers.children[i].status = "0";
|
||||
if(downWaitPassers.children[i].nowGoal == "waitingTrain"){
|
||||
passerHuman.uncache(downWaitPassers.children[i]);
|
||||
downWaitPassers.remove(downWaitPassers.children[i]);
|
||||
i--;
|
||||
@ -263,42 +360,42 @@ export function PasserHuman() {
|
||||
}
|
||||
|
||||
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].status == 1){
|
||||
|
||||
humanlist.children[i].progress = 1;
|
||||
// humanlist.children[i].action.stop();
|
||||
humanlist.children[i].status = "0";
|
||||
|
||||
|
||||
humanlist.children[i].progress = 1;
|
||||
// humanlist.children[i].action.stop();
|
||||
humanlist.children[i].status = 0;
|
||||
if(humanlist.children[i].stage == 3){
|
||||
if(humanlist.children[i].nowGoal == "standRegion"){
|
||||
|
||||
humanlist.children[i].stage = 4;
|
||||
if(humanlist.children[i].direct == "top"){
|
||||
humanlist.children[i].nowGoal = "waitingTrain";
|
||||
if(humanlist.children[i].overGoal == "top"){
|
||||
topWaitPassers.add(humanlist.children[i]);
|
||||
i--;
|
||||
}else if(humanlist.children[i].direct == "down"){
|
||||
}else if(humanlist.children[i].overGoal == "down"){
|
||||
downWaitPassers.add(humanlist.children[i]);
|
||||
i--;
|
||||
}
|
||||
|
||||
}else if(humanlist.children[i].stage == 2){
|
||||
humanlist.children[i].stage = 3;
|
||||
}else if(humanlist.children[i].nowGoal == "inCheck"){
|
||||
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);
|
||||
// zhajiin[humanlist.children[i].doors].waiting = 0;
|
||||
humanlist.children[i].stage = 1;
|
||||
humanlist.children[i].nowGoal = "securityRegion";
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}else{
|
||||
//根据动画进度获取动画轨迹上点
|
||||
// console.log(i);
|
||||
@ -334,4 +431,16 @@ export function PasserHuman() {
|
||||
} );
|
||||
}
|
||||
}
|
||||
|
||||
function getnum(num,pnum){
|
||||
let re = [];
|
||||
let base = Math.floor(num/pnum);
|
||||
let reset = num%pnum;
|
||||
for(let i=0;i<pnum;i++){
|
||||
let nownum = base+(i<reset?1:0);
|
||||
re.push(nownum);
|
||||
}
|
||||
return re;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -203,8 +203,7 @@ export function PasserStation() {
|
||||
|
||||
this.apartPosition = function(drawGroup,zhajiin,zhajiout){
|
||||
// scope.down.position.y = scope.top.position.y;
|
||||
console.log(zhajiin);
|
||||
console.log(zhajiout);
|
||||
|
||||
scope.top.position.z += 75;
|
||||
scope.down.position.z -= 75;
|
||||
zhajiin.position.z -= 75;
|
||||
|
@ -2,15 +2,17 @@ export function checkRegion(data) {
|
||||
var scope = this;
|
||||
|
||||
this.group = new THREE.Group();
|
||||
|
||||
this.belongList = [];
|
||||
this.creatCheckRegion = function(regionType,regionColor,pos,underFloor){
|
||||
let newRegion = creatRegion(regionColor);
|
||||
newRegion.regionType = regionType;
|
||||
newRegion.deviceType = "region";
|
||||
newRegion.status = "1";
|
||||
newRegion.checkDirection = "in";
|
||||
newRegion.checkBelong = "1";
|
||||
//连接设备
|
||||
newRegion.connectDevice = "*";
|
||||
newRegion.inCheckPoints = [];
|
||||
newRegion.position.set(
|
||||
pos.x,
|
||||
pos.y+0.1,
|
||||
@ -22,6 +24,7 @@ export function checkRegion(data) {
|
||||
};
|
||||
|
||||
this.loadRegionData = function(regionData){
|
||||
scope.group = new THREE.Group();
|
||||
if(regionData.length>0){
|
||||
for(let i=0;i<regionData.length;i++){
|
||||
let newRegion = creatRegion(0x9F35FF);
|
||||
@ -33,6 +36,8 @@ export function checkRegion(data) {
|
||||
newRegion.status = regionData[i].status;
|
||||
newRegion.underFloor = regionData[i].underFloor;
|
||||
newRegion.checkDirection = regionData[i].checkDirection;
|
||||
newRegion.checkBelong = regionData[i].checkBelong;
|
||||
newRegion.inCheckPoints = [];
|
||||
newRegion.position.set(
|
||||
regionData[i].pos.x,
|
||||
regionData[i].pos.y,
|
||||
@ -49,19 +54,51 @@ export function checkRegion(data) {
|
||||
}
|
||||
}
|
||||
|
||||
this.resetRegionData = function(){
|
||||
scope.belongList = [];
|
||||
scope.belongList["in"] = [];
|
||||
scope.belongList["out"] = [];
|
||||
for(let i=0;i<scope.group.children.length;i++){
|
||||
|
||||
|
||||
scope.group.children[i].actionIndex = i;
|
||||
if(scope.group.children[i].checkDirection == "in"){
|
||||
if(!scope.belongList["in"].hasOwnProperty(scope.group.children[i].checkBelong)){
|
||||
scope.belongList["in"][scope.group.children[i].checkBelong] = [];
|
||||
}
|
||||
}
|
||||
|
||||
if(scope.group.children[i].checkDirection == "out"){
|
||||
if(!scope.belongList["out"].hasOwnProperty(scope.group.children[i].checkBelong)){
|
||||
scope.belongList["out"][scope.group.children[i].checkBelong] = [];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for(let i=0;i<scope.group.children.length;i++){
|
||||
if(scope.group.children[i].checkDirection == "in"){
|
||||
scope.belongList["in"][scope.group.children[i].checkBelong].push(scope.group.children[i]);
|
||||
}
|
||||
if(scope.group.children[i].checkDirection == "out"){
|
||||
scope.belongList["out"][scope.group.children[i].checkBelong].push(scope.group.children[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function creatRegion(color){
|
||||
let region = new THREE.Group();
|
||||
var geometry = new THREE.PlaneBufferGeometry( 2, 2, 4 );
|
||||
var material = new THREE.MeshBasicMaterial( { color: color } );
|
||||
let regionHead = new THREE.Mesh( geometry, material );
|
||||
regionHead.name = "regionHead";
|
||||
regionHead.rotation.x = -Math.PI/2;
|
||||
regionHead.position.y = 0.01;
|
||||
region.add(regionHead);
|
||||
|
||||
var geom = new THREE.Geometry();
|
||||
var v1 = new THREE.Vector3(1,-1,0);
|
||||
var v2 = new THREE.Vector3(-1,-1,0);
|
||||
var v3 = new THREE.Vector3(0,-2,0);
|
||||
var v1 = new THREE.Vector3(1,0,0);
|
||||
var v2 = new THREE.Vector3(-1,0,0);
|
||||
var v3 = new THREE.Vector3(0,-1,0);
|
||||
|
||||
|
||||
geom.vertices.push(v1);
|
||||
@ -73,8 +110,11 @@ export function checkRegion(data) {
|
||||
|
||||
var material = new THREE.MeshBasicMaterial( { color: color } );
|
||||
var regionDirect= new THREE.Mesh(geom, material);
|
||||
regionDirect.name = "regionDirect";
|
||||
regionDirect.rotation.x = -Math.PI/2;
|
||||
regionDirect.position.y = 0.01;
|
||||
|
||||
regionDirect.position.z = 5;
|
||||
region.add(regionDirect);
|
||||
return region;
|
||||
|
||||
@ -85,29 +125,16 @@ export function checkRegion(data) {
|
||||
//出口闸机组
|
||||
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){
|
||||
let mixer = new THREE.AnimationMixer( object );
|
||||
let newclip = object.animations[ 0 ];
|
||||
let newzhaji = object;
|
||||
|
||||
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.push(newclip.clone());
|
||||
|
||||
@ -123,77 +150,17 @@ export function checkRegion(data) {
|
||||
mixer:mixer,
|
||||
};
|
||||
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 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 == "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;
|
||||
let zhaji = {
|
||||
id:newzhaji.children[i].name,
|
||||
status:0,
|
||||
waiting:0
|
||||
}
|
||||
scope.zhajiin.push(zhaji);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
scene.add(newzhaji);
|
||||
|
||||
}
|
||||
@ -202,22 +169,10 @@ export function checkRegion(data) {
|
||||
let mixer = new THREE.AnimationMixer( object );
|
||||
let newclip = object.animations[ 0 ];
|
||||
let newzhaji = object;
|
||||
|
||||
for(let i=0;i<newzhaji.children.length;i++){
|
||||
if(newzhaji.children[i].name == "out01"){
|
||||
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"){
|
||||
if(newzhaji.children[i].children.length>0){
|
||||
|
||||
newzhaji.children[i].animations = [];
|
||||
newzhaji.children[i].animations.push(newclip.clone());
|
||||
|
||||
@ -233,74 +188,30 @@ export function checkRegion(data) {
|
||||
mixer:mixer,
|
||||
};
|
||||
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);
|
||||
}
|
||||
//闸机动画控制
|
||||
this.checkDoorControl = function(type,door,deviceaction){
|
||||
let devicenum = door;
|
||||
|
||||
let checkDoorId = door;
|
||||
console.log();
|
||||
if(type == "in"){
|
||||
let checkDoorId = scope.zhajiin[devicenum].id;
|
||||
// let checkDoorId = scope.zhajiin[devicenum].id;
|
||||
deviceaction[checkDoorId].action.reset();
|
||||
deviceaction[checkDoorId].action.time = 0;
|
||||
deviceaction[checkDoorId].action.timeScale = 1;
|
||||
deviceaction[checkDoorId].action.play();
|
||||
}else if(type == "out"){
|
||||
let checkDoorId = scope.zhajiout[devicenum].id;
|
||||
// let checkDoorId = scope.zhajiout[devicenum].id;
|
||||
deviceaction[checkDoorId].action.reset();
|
||||
deviceaction[checkDoorId].action.time = 0;
|
||||
deviceaction[checkDoorId].action.timeScale = 1;
|
||||
|
@ -23,6 +23,7 @@ export function elevatorRegion() {
|
||||
};
|
||||
|
||||
this.loadRegionData = function(regionData){
|
||||
scope.group = new THREE.Group();
|
||||
if(regionData.length>0){
|
||||
for(let i=0;i<regionData.length;i++){
|
||||
let newRegion = creatRegion(0xFFFF37);
|
||||
|
@ -23,6 +23,7 @@ export function escalatorRegion() {
|
||||
};
|
||||
|
||||
this.loadRegionData = function(regionData){
|
||||
scope.group = new THREE.Group();
|
||||
if(regionData.length>0){
|
||||
for(let i=0;i<regionData.length;i++){
|
||||
let newRegion = creatRegion(0x5CADAD);
|
||||
|
@ -28,6 +28,7 @@ export function securityRegion() {
|
||||
};
|
||||
|
||||
this.loadRegionData = function(regionData){
|
||||
scope.group = new THREE.Group();
|
||||
if(regionData.length>0){
|
||||
for(let i=0;i<regionData.length;i++){
|
||||
let newRegion = creatRegion(0xFF0000);
|
||||
|
@ -23,6 +23,7 @@ export function stairsRegion() {
|
||||
};
|
||||
|
||||
this.loadRegionData = function(regionData){
|
||||
scope.group = new THREE.Group();
|
||||
if(regionData.length>0){
|
||||
for(let i=0;i<regionData.length;i++){
|
||||
let newRegion = creatRegion(0xFF5809);
|
||||
|
@ -4,6 +4,7 @@ export function standRegion() {
|
||||
this.list = [];
|
||||
|
||||
this.group = new THREE.Group();
|
||||
this.belongList = [];
|
||||
|
||||
this.creatStandRegion = function(regionType,regionColor,pos,underFloor){
|
||||
let newRegion = creatRegion(regionColor);
|
||||
@ -13,6 +14,8 @@ export function standRegion() {
|
||||
newRegion.status = "1";
|
||||
//连接设备
|
||||
newRegion.connectDevice = "*";
|
||||
|
||||
newRegion.standBelong = "1";
|
||||
//区域方向
|
||||
if(pos.z < 87.85){
|
||||
newRegion.direction = "top";
|
||||
@ -32,6 +35,7 @@ export function standRegion() {
|
||||
};
|
||||
|
||||
this.loadRegionData = function(regionData){
|
||||
scope.group = new THREE.Group();
|
||||
if(regionData.length>0){
|
||||
for(let i=0;i<regionData.length;i++){
|
||||
let newRegion = creatRegion(0x00EC00);
|
||||
@ -42,7 +46,7 @@ export function standRegion() {
|
||||
newRegion.direction = regionData[i].direction;
|
||||
newRegion.status = regionData[i].status;
|
||||
newRegion.underFloor = regionData[i].underFloor;
|
||||
|
||||
newRegion.standBelong = regionData[i].standBelong;
|
||||
newRegion.position.set(
|
||||
regionData[i].pos.x,
|
||||
regionData[i].pos.y,
|
||||
@ -59,6 +63,21 @@ export function standRegion() {
|
||||
}
|
||||
}
|
||||
|
||||
this.resetRegionData = function(){
|
||||
scope.belongList = [];
|
||||
scope.belongList["top"] = [];
|
||||
scope.belongList["down"] = [];
|
||||
|
||||
for(let i=0;i<scope.group.children.length;i++){
|
||||
if(scope.group.children[i].direction == "top"){
|
||||
scope.belongList["top"].push(scope.group.children[i]);
|
||||
}
|
||||
if(scope.group.children[i].direction == "down"){
|
||||
scope.belongList["down"].push(scope.group.children[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function creatRegion(color){
|
||||
let region = new THREE.Group();
|
||||
var geometry = new THREE.PlaneBufferGeometry( 2, 2, 4 );
|
||||
|
@ -19,7 +19,7 @@ export function startRegion() {
|
||||
newRegion.targetWeight = "%";
|
||||
//区域状态
|
||||
newRegion.status = "1";
|
||||
|
||||
newRegion.connectCheckRegion = "";
|
||||
newRegion.position.set(
|
||||
pos.x,
|
||||
pos.y+0.1,
|
||||
@ -30,7 +30,32 @@ export function startRegion() {
|
||||
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){
|
||||
scope.group = new THREE.Group();
|
||||
if(regionData.length>0){
|
||||
for(let i=0;i<regionData.length;i++){
|
||||
let newRegion = creatRegion(0x2894FF);
|
||||
@ -46,7 +71,7 @@ export function startRegion() {
|
||||
//区域状态
|
||||
newRegion.status = regionData[i].status;
|
||||
newRegion.underFloor = regionData[i].underFloor;
|
||||
|
||||
newRegion.connectCheckRegion = "";
|
||||
newRegion.position.set(
|
||||
regionData[i].pos.x,
|
||||
regionData[i].pos.y,
|
||||
@ -61,7 +86,7 @@ export function startRegion() {
|
||||
scope.group.add(newRegion);
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
function creatRegion(color){
|
||||
let region = new THREE.Group();
|
||||
|
@ -4,8 +4,9 @@ export function ticketRegion() {
|
||||
this.list = [];
|
||||
|
||||
this.group = new THREE.Group();
|
||||
|
||||
this.belongList = [];
|
||||
this.creatTicketRegion = function(regionType,regionColor,pos,underFloor){
|
||||
|
||||
let newRegion = creatRegion(regionColor);
|
||||
newRegion.regionType = regionType;
|
||||
newRegion.deviceType = "region";
|
||||
@ -18,6 +19,7 @@ export function ticketRegion() {
|
||||
newRegion.connectDevice = "*";
|
||||
//运行状态
|
||||
newRegion.runType = "auto";
|
||||
newRegion.ticketBelong = "1";
|
||||
newRegion.position.set(
|
||||
pos.x,
|
||||
pos.y+0.1,
|
||||
@ -29,6 +31,7 @@ export function ticketRegion() {
|
||||
};
|
||||
|
||||
this.loadRegionData = function(regionData){
|
||||
scope.group = new THREE.Group();
|
||||
if(regionData.length>0){
|
||||
for(let i=0;i<regionData.length;i++){
|
||||
let newRegion = creatRegion(0x00FFFF);
|
||||
@ -41,6 +44,7 @@ export function ticketRegion() {
|
||||
newRegion.stayTime = regionData[i].stayTime;
|
||||
newRegion.status = regionData[i].status;
|
||||
newRegion.underFloor = regionData[i].underFloor;
|
||||
newRegion.ticketBelong = regionData[i].ticketBelong;
|
||||
|
||||
newRegion.position.set(
|
||||
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){
|
||||
let region = new THREE.Group();
|
||||
var geometry = new THREE.PlaneBufferGeometry( 2, 2, 4 );
|
||||
|
@ -21,6 +21,7 @@ export function unaccessRegion() {
|
||||
};
|
||||
|
||||
this.loadRegionData = function(regionData){
|
||||
scope.group = new THREE.Group();
|
||||
if(regionData.length>0){
|
||||
for(let i=0;i<regionData.length;i++){
|
||||
let newRegion = creatRegion(0x272727);
|
||||
|
@ -41,6 +41,29 @@ export function regionManager() {
|
||||
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){
|
||||
switch(regionType){
|
||||
case "startRegion":
|
||||
@ -136,6 +159,7 @@ export function regionManager() {
|
||||
connectDevice:scope.checkRegion.group.children[i].connectDevice,
|
||||
underFloor:scope.checkRegion.group.children[i].underFloor,
|
||||
checkDirection:scope.checkRegion.group.children[i].checkDirection,
|
||||
checkBelong:scope.checkRegion.group.children[i].checkBelong,
|
||||
|
||||
pos:{
|
||||
x:scope.checkRegion.group.children[i].position.x,
|
||||
@ -155,6 +179,7 @@ export function regionManager() {
|
||||
status:scope.standRegion.group.children[i].status,
|
||||
direction:scope.standRegion.group.children[i].direction,
|
||||
underFloor:scope.standRegion.group.children[i].underFloor,
|
||||
standBelong:scope.standRegion.group.children[i].standBelong,
|
||||
pos:{
|
||||
x:scope.standRegion.group.children[i].position.x,
|
||||
y:scope.standRegion.group.children[i].position.y,
|
||||
@ -175,6 +200,7 @@ export function regionManager() {
|
||||
runType:scope.ticketRegion.group.children[i].runType,
|
||||
connectDevice:scope.ticketRegion.group.children[i].connectDevice,
|
||||
underFloor:scope.ticketRegion.group.children[i].underFloor,
|
||||
ticketBelong:scope.ticketRegion.group.children[i].ticketBelong,
|
||||
pos:{
|
||||
x:scope.ticketRegion.group.children[i].position.x,
|
||||
y:scope.ticketRegion.group.children[i].position.y,
|
||||
@ -263,8 +289,16 @@ export function regionManager() {
|
||||
};
|
||||
|
||||
//读取区域数据
|
||||
this.loadRegionData = function(data){
|
||||
console.log(data);
|
||||
this.loadRegionData = function(data,control){
|
||||
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.securityRegion.loadRegionData(data.securityRegion);
|
||||
scope.checkRegion.loadRegionData(data.checkRegion);
|
||||
@ -274,8 +308,24 @@ export function regionManager() {
|
||||
scope.stairsRegion.loadRegionData(data.stairsRegion);
|
||||
scope.escalatorRegion.loadRegionData(data.escalatorRegion);
|
||||
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){
|
||||
|
@ -1,6 +1,6 @@
|
||||
|
||||
|
||||
export function PasserAi(zone,finder,region) {
|
||||
export function PasserAi(finder,region) {
|
||||
let scope = this;
|
||||
|
||||
//下车控制开关
|
||||
@ -9,67 +9,62 @@ export function PasserAi(zone,finder,region) {
|
||||
//上车控制开关
|
||||
this.toppasserin = false;
|
||||
this.downpasserin = false;
|
||||
let passerZone = zone;
|
||||
|
||||
this.toppasserinNum = 0;
|
||||
this.downpasserinNum = 0;
|
||||
|
||||
let passerZone = region;
|
||||
let pathFinder = finder;
|
||||
|
||||
let path;
|
||||
let playerPosition = new THREE.Vector3( -3.5, 0.5, 5.5 );
|
||||
let targetPosition = new THREE.Vector3();
|
||||
let target= null;
|
||||
//生成下车出站人物
|
||||
this.passerout = function(direct){
|
||||
// console.log(direct);
|
||||
this.passerout = function(direct,mode,inNum){
|
||||
|
||||
if(direct == "top"){
|
||||
// console.log("toppasser");
|
||||
scope.toppasseron = true;
|
||||
setTimeout(function(){
|
||||
scope.toppasseron = false
|
||||
if(mode == "start"){
|
||||
scope.toppasseron = 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"){
|
||||
// console.log("downpasser");
|
||||
scope.downpasseron = true;
|
||||
setTimeout(function(){
|
||||
scope.downpasseron = false;
|
||||
if(mode == "start"){
|
||||
scope.downpasseron = true;
|
||||
scope.downpasserin = true;
|
||||
setTimeout(function(){
|
||||
scope.downpasserin = false;
|
||||
}, 20000);
|
||||
}, 5000);
|
||||
scope.downpasserinNum = inNum;
|
||||
}
|
||||
if(mode == "end"){
|
||||
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);
|
||||
}
|
||||
for(let i=0;i<3;i++){
|
||||
passerHuman.newHumanCreate(humanlist,passerZone.getinitposition("enter2"),0);
|
||||
}
|
||||
for(let i=0;i<3;i++){
|
||||
passerHuman.newHumanCreate(humanlist,passerZone.getinitposition("security"),1);
|
||||
}
|
||||
// for(let i=0;i<2;i++){
|
||||
// // passerHuman.newHumanCreate(humanlist,passerZone.getinitposition("entergate"),3);
|
||||
// }
|
||||
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);
|
||||
}
|
||||
//初始化加载人物
|
||||
this.initPasser = function(humanlist,topWaitPassers,downWaitPassers,passerHuman,jl3d){
|
||||
|
||||
for(let i=0;i<jl3d.humanWaitTop;i++){
|
||||
let standdata = passerZone.getstandposition("top");
|
||||
passerHuman.newInitHumanCreate(topWaitPassers,standdata.point,"top","waitingTrain",standdata.standDoorNum);
|
||||
}
|
||||
for(let i=0;i<jl3d.humanWaitDown;i++){
|
||||
let standdata = passerZone.getstandposition("down");
|
||||
passerHuman.newInitHumanCreate(downWaitPassers,standdata.point,"down","waitingTrain",standdata.standDoorNum);
|
||||
}
|
||||
}
|
||||
|
||||
function shortDistanceRegion(startPos,endRegion){
|
||||
let shortDistancePos = "";
|
||||
let distanceArray = [];
|
||||
for(let i=0;i<endRegion.length;i++){
|
||||
var pos1 = startPos;
|
||||
@ -83,231 +78,296 @@ export function PasserAi(zone,finder,region) {
|
||||
);
|
||||
}
|
||||
distanceArray.sort(function(a, b){
|
||||
return a.distance - b.distance;
|
||||
});
|
||||
return distanceArray[0].pos;
|
||||
}
|
||||
|
||||
function shortTicketRegion(startPos,endRegion){
|
||||
let distanceArray = [];
|
||||
|
||||
for(let k in endRegion.belongList){
|
||||
var pos1 = startPos;
|
||||
var pos2 = endRegion.belongList[k][0].position;
|
||||
var distance = pos1.distanceTo(pos2);
|
||||
distanceArray.push(
|
||||
{
|
||||
ticketBelong:k,
|
||||
distance:distance
|
||||
}
|
||||
);
|
||||
}
|
||||
distanceArray.sort(function(a, b){
|
||||
return a.distance - b.distance;
|
||||
});
|
||||
|
||||
return distanceArray[0].pos;
|
||||
let index = Math.floor(Math.random() * (endRegion.belongList[distanceArray[0].ticketBelong].length-1));
|
||||
|
||||
|
||||
return endRegion.belongList[distanceArray[0].ticketBelong][index].position;
|
||||
}
|
||||
|
||||
// let outCheckNum = 0;
|
||||
// if(checkType == "out"){
|
||||
//
|
||||
// for(let i=0;i<endRegion.length;i++){
|
||||
// if(endRegion[i].checkDirection == "out"){
|
||||
// var pos1 = startPos;
|
||||
// var pos2 = endRegion[i].position;
|
||||
// var distance = pos1.distanceTo(pos2);
|
||||
// distanceArray.push(
|
||||
// {
|
||||
// pos:endRegion[i].position,
|
||||
// distance:distance
|
||||
// }
|
||||
// );
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
|
||||
function selectInCheckRegion(startPos,endRegion,checkType){
|
||||
let shortDistancePos = "";
|
||||
let distanceArray = [];
|
||||
|
||||
for(let k in endRegion.belongList[checkType]){
|
||||
var pos1 = startPos;
|
||||
var pos2 = endRegion.belongList[checkType][k][0].position;
|
||||
var distance = pos1.distanceTo(pos2);
|
||||
distanceArray.push(
|
||||
{
|
||||
checkBelong:k,
|
||||
distance:distance
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
distanceArray.sort(function(a, b){
|
||||
return a.distance - b.distance;
|
||||
});
|
||||
|
||||
let index = Math.floor(Math.random() * (endRegion.belongList[checkType][distanceArray[0].checkBelong].length-1));
|
||||
|
||||
return {
|
||||
pos:endRegion.belongList[checkType][distanceArray[0].checkBelong][index].position,
|
||||
checkDoorNum:endRegion.belongList[checkType][distanceArray[0].checkBelong][index].actionIndex,
|
||||
};
|
||||
}
|
||||
|
||||
function shortStandRegion(startPos,endRegion,standType){
|
||||
let shortDistancePos = "";
|
||||
// console.log(standType);
|
||||
// console.log(endRegion.belongList);
|
||||
let index = Math.floor(Math.random() * (endRegion.belongList[standType].length-1));
|
||||
|
||||
return {
|
||||
pos:endRegion.belongList[standType][index].position,
|
||||
standDoorNum:index,
|
||||
};
|
||||
}
|
||||
//人物站台阶段更新
|
||||
this.aiUpdate = function(humanlist,topWaitPassers,downWaitPassers,outStationPassers,passerHuman,passerCheckDoor,deviceaction){
|
||||
console.log(humanlist.children);
|
||||
for(let i=0;i<humanlist.children.length;i++){
|
||||
// console.log(humans[i]);
|
||||
if(humanlist.children[i].overGoal == "topStand" || humanlist.children[i].overGoal == "downStand"){
|
||||
console.log(humanlist.children[i]);
|
||||
if(humanlist.children[i].status == 0){
|
||||
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));
|
||||
for(let i=0;i<outStationPassers.children.length;i++){
|
||||
if(outStationPassers.children[i].status == 0){
|
||||
//stage = 5 下车
|
||||
if(outStationPassers.children[i].nowGoal == "findeCheck"){
|
||||
let points = [];
|
||||
points.push(new THREE.Vector3(outStationPassers.children[i].position.x,outStationPassers.children[i].position.y,outStationPassers.children[i].position.z));
|
||||
|
||||
//寻找最近售票机点
|
||||
targetPosition = shortDistanceRegion(humanlist.children[i].position,region.ticketRegion.group.children);
|
||||
console.log(targetPosition);
|
||||
//寻路售票机
|
||||
path = pathFinder.find(points[0],targetPosition);
|
||||
//
|
||||
for(let i=0;i<path.length;i++){
|
||||
points.push(new THREE.Vector3(path[i].x,path[i].y,path[i].z));
|
||||
}
|
||||
passerHuman.initMoveAnimate(humanlist.children[i],i,points,i);
|
||||
|
||||
}
|
||||
let index = Math.floor(Math.random() * (region.checkRegion.belongList["out"][outStationPassers.children[i].connectCheckRegion].length-1));
|
||||
|
||||
//寻找最近售票机点
|
||||
targetPosition = region.checkRegion.belongList["out"][outStationPassers.children[i].connectCheckRegion][index].position;
|
||||
outStationPassers.children[i].checkDoor = region.checkRegion.belongList["out"][outStationPassers.children[i].connectCheckRegion][index].actionIndex;
|
||||
//寻路售票机
|
||||
path = pathFinder.find(points[0],targetPosition);
|
||||
//
|
||||
for(let i=0;i<path.length;i++){
|
||||
points.push(new THREE.Vector3(path[i].x,path[i].y+0.1,path[i].z));
|
||||
}
|
||||
passerHuman.initMoveAnimate(outStationPassers.children[i],i,points,i);
|
||||
}
|
||||
if(humanlist.children[i].nowGoal == "securityRegion"){
|
||||
// let points = [];
|
||||
// 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 = 7 出闸机
|
||||
if(outStationPassers.children[i].nowGoal == "outCheck"){
|
||||
let points = [];
|
||||
points.push(region.checkRegion.group.children[outStationPassers.children[i].checkDoor].getObjectByName("regionHead").getWorldPosition(new THREE.Vector3()));
|
||||
points.push(region.checkRegion.group.children[outStationPassers.children[i].checkDoor].getObjectByName("regionDirect").getWorldPosition(new THREE.Vector3()));
|
||||
|
||||
passerCheckDoor.checkDoorControl("out",region.checkRegion.group.children[outStationPassers.children[i].checkDoor].connectDevice,deviceaction);
|
||||
|
||||
passerHuman.initMoveAnimate(outStationPassers.children[i],i,points,i);
|
||||
}
|
||||
|
||||
//stage = 8 出站
|
||||
if(outStationPassers.children[i].nowGoal == "outStation"){
|
||||
let points = [];
|
||||
points.push(new THREE.Vector3(outStationPassers.children[i].position.x,outStationPassers.children[i].position.y,outStationPassers.children[i].position.z));
|
||||
|
||||
//寻找最近售票机点
|
||||
targetPosition = region.startRegion.group.children[outStationPassers.children[i].overGoal].position;
|
||||
|
||||
//寻路售票机
|
||||
path = pathFinder.find(points[0],targetPosition);
|
||||
//
|
||||
for(let i=0;i<path.length;i++){
|
||||
points.push(new THREE.Vector3(path[i].x,path[i].y+0.1,path[i].z));
|
||||
}
|
||||
passerHuman.initMoveAnimate(outStationPassers.children[i],i,points,i);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// console.log(humanlist.children);
|
||||
if(scope.toppasserinNum >0){
|
||||
for(let i=0;i<topWaitPassers.children.length;i++){
|
||||
|
||||
if(topWaitPassers.children[i].status == "0"){
|
||||
//stage = 4 上车
|
||||
if(topWaitPassers.children[i].nowGoal == "waitingTrain"){
|
||||
if(scope.toppasserin && topWaitPassers.children[i].overGoal == "top"){
|
||||
|
||||
|
||||
let points = [];
|
||||
points.push(new THREE.Vector3(topWaitPassers.children[i].position.x,topWaitPassers.children[i].position.y,topWaitPassers.children[i].position.z));
|
||||
let doorPos = region.standRegion.belongList["top"][topWaitPassers.children[i].standDoorNum].position;
|
||||
// doorPos.z += 3;
|
||||
// doorPos.y += 0.1;
|
||||
points.push(new THREE.Vector3(doorPos.x,doorPos.y+0.1,doorPos.z-3));
|
||||
|
||||
if(points[1] == undefined){
|
||||
|
||||
}else{
|
||||
|
||||
scope.toppasserinNum -= 1;
|
||||
passerHuman.initMoveAnimate(topWaitPassers.children[i],i,points,i);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
if(scope.downpasserinNum >0){
|
||||
for(let i=0;i<downWaitPassers.children.length;i++){
|
||||
if(downWaitPassers.children[i].status == "0"){
|
||||
//stage = 4 上车
|
||||
if(downWaitPassers.children[i].nowGoal == "waitingTrain"){
|
||||
|
||||
if(scope.downpasserin && downWaitPassers.children[i].overGoal == "down"){
|
||||
let points = [];
|
||||
points.push(new THREE.Vector3(downWaitPassers.children[i].position.x,downWaitPassers.children[i].position.y,downWaitPassers.children[i].position.z));
|
||||
|
||||
let doorPos = region.standRegion.belongList["down"][downWaitPassers.children[i].standDoorNum].position;
|
||||
points.push(new THREE.Vector3(doorPos.x,doorPos.y+0.1,doorPos.z+3));
|
||||
if(points[1] == undefined){
|
||||
|
||||
}else{
|
||||
scope.downpasserinNum -= 1;
|
||||
passerHuman.initMoveAnimate(downWaitPassers.children[i],i,points,i);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
// if(humanlist.children[i].status == 0){
|
||||
// //stage = 0 进入车站
|
||||
// if(humanlist.children[i].stage == 0){
|
||||
// let points = [];
|
||||
// points.push(new THREE.Vector3(humanlist.children[i].position.x,humanlist.children[i].position.y,humanlist.children[i].position.z));
|
||||
//
|
||||
// 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 下车
|
||||
// if(humanlist.children[i].stage == 5){
|
||||
// let points = [];
|
||||
// points.push(new THREE.Vector3(humanlist.children[i].position.x,humanlist.children[i].position.y,humanlist.children[i].position.z));
|
||||
// if(humanlist.children[i].direct == "top"){
|
||||
// points.push(new THREE.Vector3(humanlist.children[i].position.x,humanlist.children[i].position.y,humanlist.children[i].position.z+5));
|
||||
// }
|
||||
// if(humanlist.children[i].direct == "down"){
|
||||
// points.push(new THREE.Vector3(humanlist.children[i].position.x,humanlist.children[i].position.y,humanlist.children[i].position.z-5));
|
||||
// }
|
||||
// targetPosition = passerZone.getgateposition("exitgate");
|
||||
// path = pathFinder.find(points[1],targetPosition.point);
|
||||
// humanlist.children[i].door = targetPosition.door;
|
||||
// for(let i=0;i<path.length;i++){
|
||||
// points.push(new THREE.Vector3(path[i].x,path[i].y,path[i].z));
|
||||
// }
|
||||
// passerHuman.initMoveAnimate(humanlist.children[i],i,points,i);
|
||||
// }
|
||||
//
|
||||
// //stage = 6 前往出站闸机
|
||||
// // if(humanlist.children[i].stage == 6){
|
||||
// // let points = [];
|
||||
// // points.push(new THREE.Vector3(humanlist.children[i].position.x,humanlist.children[i].position.y,humanlist.children[i].position.z));
|
||||
// //
|
||||
// // groupID = pathfinder.getGroup( ZONE, points[0] );
|
||||
// // targetPosition = passerZone.getgateposition("exitgate");
|
||||
// // path = pathfinder.findPath( points[0], targetPosition, ZONE, groupID );
|
||||
// //
|
||||
// // for(let i=0;i<path.length;i++){
|
||||
// // points.push(new THREE.Vector3(path[i].x,path[i].y,path[i].z));
|
||||
// // }
|
||||
// // passerHuman.initMoveAnimate(humanlist.children[i],i,points,i);
|
||||
// // }
|
||||
//
|
||||
// //stage = 7 出闸机
|
||||
// if(humanlist.children[i].stage == 7){
|
||||
// let points = [];
|
||||
// points.push(new THREE.Vector3(humanlist.children[i].position.x,humanlist.children[i].position.y,humanlist.children[i].position.z));
|
||||
// points.push(new THREE.Vector3(humanlist.children[i].position.x+5,humanlist.children[i].position.y,humanlist.children[i].position.z));
|
||||
//
|
||||
// passerCheckDoor.checkDoorControl("out",humanlist.children[i].door,deviceaction)
|
||||
// passerHuman.initMoveAnimate(humanlist.children[i],i,points,i);
|
||||
// }
|
||||
//
|
||||
// //stage = 8 出站
|
||||
// if(humanlist.children[i].stage == 8){
|
||||
// let direct = Math.floor(Math.random()*(3-1+1))+1;
|
||||
// let points = [];
|
||||
// points.push(new THREE.Vector3(humanlist.children[i].position.x,humanlist.children[i].position.y,humanlist.children[i].position.z));
|
||||
//
|
||||
// //1--top
|
||||
// //2-- down
|
||||
// if(direct == 1){
|
||||
// targetPosition = passerZone.getzoneposition("exit1");
|
||||
// path = pathFinder.find(points[0],targetPosition);
|
||||
// }else{
|
||||
// targetPosition = passerZone.getzoneposition("exit2");
|
||||
// path = pathFinder.find(points[0],targetPosition);
|
||||
// }
|
||||
//
|
||||
// for(let i=0;i<path.length;i++){
|
||||
// points.push(new THREE.Vector3(path[i].x,path[i].y,path[i].z));
|
||||
// }
|
||||
// passerHuman.initMoveAnimate(humanlist.children[i],i,points,i);
|
||||
//
|
||||
// }
|
||||
// }
|
||||
|
||||
}
|
||||
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -3,11 +3,11 @@ export function getBaseUrl() {
|
||||
if (process.env.NODE_ENV === 'development') {
|
||||
// BASE_API = 'https://joylink.club/jlcloud';
|
||||
// BASE_API = 'https://api.joylink.club/jlcloud';
|
||||
// BASE_API = 'https://test.joylink.club/jlcloud';
|
||||
BASE_API = 'https://test.joylink.club/jlcloud';
|
||||
// BASE_API = 'http://192.168.8.107:9000'; // 袁琪
|
||||
// BASE_API = 'http://192.168.8.129:9000'; // 旭强
|
||||
// BASE_API = 'http://192.168.8.119:9000'; // 张赛
|
||||
BASE_API = 'http://192.168.8.140:9000'; // 杜康
|
||||
// BASE_API = 'http://192.168.8.140:9000'; // 杜康
|
||||
// BASE_API = 'http://b29z135112.zicp.vip';
|
||||
// BASE_API = 'http://2925963m2a.zicp.vip'; // 杜康
|
||||
// BASE_API = 'http://2i38984j47.qicp.vip'; // 张赛
|
||||
|
@ -10,15 +10,15 @@
|
||||
|
||||
|
||||
<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 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 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>
|
||||
|
||||
|
||||
@ -38,18 +38,53 @@
|
||||
</el-form-item>
|
||||
|
||||
<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 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 label="连接设备:" v-if="selectModel.connectDevice" disabled="true">
|
||||
<el-input v-model="selectModel.connectDevice"></el-input>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="检票机作用:" v-if="selectModel.checkDirection" disabled="true">
|
||||
<el-input v-model="selectModel.checkDirection"></el-input>
|
||||
<!-- <el-input v-model="selectModel.checkDirection"></el-input> -->
|
||||
<el-select v-model="selectModel.checkDirection" placeholder="请选择">
|
||||
<el-option
|
||||
v-for="item in checkOptions"
|
||||
:key="item.value"
|
||||
:label="item.label"
|
||||
:value="item.value">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="闸机组:" v-if="selectModel.checkBelong" disabled="true">
|
||||
<el-input v-model="selectModel.checkBelong"></el-input>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="售票机组:" v-if="selectModel.ticketBelong" disabled="true">
|
||||
<el-input v-model="selectModel.ticketBelong"></el-input>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="站台组:" v-if="selectModel.standBelong" disabled="true">
|
||||
<el-input v-model="selectModel.standBelong"></el-input>
|
||||
</el-form-item>
|
||||
|
||||
|
||||
@ -89,6 +124,30 @@ export default {
|
||||
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() {
|
||||
|
@ -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>
|
@ -1,37 +1,40 @@
|
||||
<template>
|
||||
<div class="jl3dstationmanager">
|
||||
<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 >显示隐藏区域</el-button>
|
||||
<el-button v-show="!viewStatus" round >显示隐藏热力图</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 @click="deleteRegion">删除区域</el-button>
|
||||
<el-button v-show="viewStatus" round @click="saveData">保存方案</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>
|
||||
|
||||
<div class="dataLoadDiv" v-show="showSaveList">
|
||||
<el-input v-model="saveDataName"></el-input>
|
||||
<div class="modelname" @click="saveNewData(saveDataName)">存新方案</div>
|
||||
<div class="modelname" @click="updateSaveData(saveDataName)">更新方案</div>
|
||||
<div class="dataSaveDiv" v-show="showSaveList">
|
||||
<div class="dataPaneExit" :style="{'background-image': 'url('+localStatic+'/texture/xx.png)'}" @click="closePane"></div>
|
||||
<el-input style="width:80%;"v-model="saveDataName"></el-input>
|
||||
<div class="modelname1" @click="saveNewData(saveDataName)">存新方案</div>
|
||||
<div class="modelname2" @click="updateSaveData(saveDataName)">更新方案</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="dataLoadDiv" v-show="showLoadList">
|
||||
<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-form ref="form" label-width="130px" size="mini">
|
||||
|
||||
<div class="dataListDiv" v-for="(asset,index) in nowDataList" >
|
||||
|
||||
<div >
|
||||
<div class="dataListDiv" v-for="(asset,index) in nowDataList"><div >
|
||||
<div class="modelname">方案名称:{{asset.name }}</div>
|
||||
<div class="modelname">方案修改日期:{{asset.updateTime }}</div>
|
||||
|
||||
<div class="modelname" @click="modelSelect(asset.id)">加载方案</div>
|
||||
<div class="modelname" @click="deletSelect(asset.id)">删除方案</div>
|
||||
<div class="modelname1" @click="modelSelect(asset.id)">加载方案</div>
|
||||
<div class="modelname2" @click="deletSelect(asset.id)">删除方案</div>
|
||||
</div>
|
||||
</div>
|
||||
</el-form>
|
||||
@ -51,9 +54,12 @@
|
||||
/>
|
||||
</el-select>
|
||||
</div>
|
||||
|
||||
<Station-Data v-show="!viewStatus"></Station-Data>
|
||||
<Draw-Type v-show="viewStatus" @changeDrawType=changeDrawType ></Draw-Type>
|
||||
<Pro-Perty></Pro-Perty>
|
||||
<Draw-Type v-show="viewStatus" @changeDrawType="changeDrawType" ></Draw-Type>
|
||||
<Pro-Perty v-show="viewStatus" ></Pro-Perty>
|
||||
<Stationmanager-Data v-show="!viewStatus" ></Stationmanager-Data>
|
||||
|
||||
<div id="jl3d" class="jl3dstationmanagerdraw" />
|
||||
</div>
|
||||
</template>
|
||||
@ -66,13 +72,16 @@
|
||||
import StationData from '@/views/jlmap3d/trafficplan/component/stationdata';
|
||||
import DrawType from '@/views/jlmap3d/stationmanager/component/drawtype';
|
||||
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';
|
||||
|
||||
export default {
|
||||
name: 'jl3devacuation',
|
||||
components: {
|
||||
StationData,
|
||||
StationmanagerData,
|
||||
DrawType,
|
||||
ProPerty,
|
||||
},
|
||||
@ -98,6 +107,8 @@
|
||||
showSaveList:false,
|
||||
dataId:null,
|
||||
saveDataName:"",
|
||||
showMsgData:true,
|
||||
paneMsg:"存储成功!",
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
@ -109,7 +120,8 @@
|
||||
},
|
||||
mounted() {
|
||||
window.updatestationlist = this.updatestationlist;
|
||||
|
||||
window.switchStationManagerViews = this.switchStationManagerViews;
|
||||
window.updateValue = this.updateValue;
|
||||
this.group = this.$route.query.group;
|
||||
this.mapid = this.$route.query.mapid;
|
||||
this.lineCode = this.$route.query.lineCode;
|
||||
@ -122,12 +134,13 @@
|
||||
initnewdata: function (group,header){
|
||||
let dom = document.getElementById('jl3d');
|
||||
this.jl3d = new Jl3dStationManager(dom,this.mapid,this.group,this.initCode);
|
||||
|
||||
},
|
||||
changeDrawType(drawTypeName){
|
||||
// console.log(drawTypeName);
|
||||
console.log(drawTypeName);
|
||||
this.jl3d.changeDrawType(drawTypeName);
|
||||
},
|
||||
switchViews(){
|
||||
switchStationManagerViews(){
|
||||
|
||||
if(this.viewStatus == false){
|
||||
this.switchButtonName = '绘制视角',
|
||||
@ -151,6 +164,9 @@
|
||||
// let oldgroupnum = this.groupnum;
|
||||
this.value = selVal;
|
||||
},
|
||||
updateValue(newValue){
|
||||
this.value = newValue;
|
||||
},
|
||||
saveData(){
|
||||
this.showSaveList = true;
|
||||
},
|
||||
@ -163,8 +179,10 @@
|
||||
console.log(data);
|
||||
this.dataId = data.data;
|
||||
this.showSaveList = false;
|
||||
this.msgBox("数据存储成功!");
|
||||
}
|
||||
}).catch(error => {
|
||||
this.msgBox(error.message);
|
||||
console.log(error);
|
||||
});
|
||||
},
|
||||
@ -176,10 +194,11 @@
|
||||
if(data.code == "200"){
|
||||
//console.log("创建三维数据成功");
|
||||
console.log(data);
|
||||
this.showSaveList = false;
|
||||
|
||||
this.showSaveList = false;
|
||||
this.msgBox("数据更新成功!");
|
||||
}
|
||||
}).catch(error => {
|
||||
this.msgBox(error.message);
|
||||
console.log(error);
|
||||
});
|
||||
}else{
|
||||
@ -190,25 +209,19 @@
|
||||
loadData(){
|
||||
this.showLoadList = true;
|
||||
getStationManagerDataList().then(netdata => {
|
||||
console.log(netdata);
|
||||
this.nowDataList = netdata.data;
|
||||
|
||||
});
|
||||
},
|
||||
deletSelect(deleteId){
|
||||
deleteStationManagerData(deleteId).then(netdata => {
|
||||
console.log(netdata);
|
||||
});
|
||||
this.showLoadList = false;
|
||||
this.deleteBox(deleteId);
|
||||
},
|
||||
modelSelect(loadId){
|
||||
console.log(loadId);
|
||||
getStationManagerData(loadId).then(netdata => {
|
||||
console.log(netdata);
|
||||
|
||||
this.dataId = loadId;
|
||||
this.saveDataName = netdata.data.name;
|
||||
this.jl3d.loadData(netdata.data);
|
||||
this.jl3d.loadData(netdata.data);
|
||||
this.msgBox("加载数据成功");
|
||||
});
|
||||
this.showLoadList = false;
|
||||
},
|
||||
@ -225,6 +238,40 @@
|
||||
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>
|
||||
@ -245,11 +292,25 @@
|
||||
height: 100%;
|
||||
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{
|
||||
position: absolute;
|
||||
z-index: 10;
|
||||
width:40%;
|
||||
height:60;
|
||||
/* height:60px; */
|
||||
top:20%;
|
||||
left:30%;
|
||||
background-color: #fff;
|
||||
@ -261,11 +322,19 @@
|
||||
text-align:center;
|
||||
font-size: 20px;
|
||||
}
|
||||
.dataPaneExit{
|
||||
width: 20px;
|
||||
height:20px;
|
||||
position: absolute;
|
||||
right:0;
|
||||
top:0;
|
||||
background-size: 100% 100%;
|
||||
}
|
||||
.dataListDiv {
|
||||
float:left;
|
||||
position: relative;
|
||||
width:100%;
|
||||
height:100px;
|
||||
height:70px;
|
||||
border-radius:5px;
|
||||
border:solid 2px #000;
|
||||
}
|
||||
@ -283,6 +352,24 @@
|
||||
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{
|
||||
width:50%;
|
||||
left:25%;
|
||||
|
@ -397,7 +397,7 @@ export default {
|
||||
const routeData = this.$router.resolve({
|
||||
// /jlmap3d/trafficplan
|
||||
// /design/jlmap3d/jl3dstationmanager
|
||||
path:'/design/jlmap3d/jl3dstationmanager',
|
||||
path:'/jlmap3d/trafficplan',
|
||||
query:{
|
||||
mapid:this.$route.query.mapId,
|
||||
group:this.$route.query.group,
|
||||
|
@ -1,7 +1,7 @@
|
||||
# 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
|
||||
@ -279,15 +279,14 @@ v 30.7197 9.8454 10.4284
|
||||
v 21.7861 9.8454 -1.5328
|
||||
v 27.4298 9.8454 -5.0178
|
||||
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 -33.7472 9.8454 14.1364
|
||||
v -33.1634 9.8454 25.6925
|
||||
v -22.8640 9.8454 25.6925
|
||||
v -22.8985 9.8454 15.8912
|
||||
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 -24.1194 9.8454 8.4892
|
||||
v -31.8828 9.8454 6.1905
|
||||
v -31.9661 9.8454 8.5676
|
||||
v -8.5704 9.8454 17.2820
|
||||
v -10.7366 9.8454 17.2731
|
||||
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 -43.7034 9.8454 11.8542
|
||||
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 -40.4129 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 -49.0307 9.8454 11.2184
|
||||
v -49.0307 9.8454 14.0505
|
||||
v -8.5704 9.8454 25.6925
|
||||
v -8.5704 9.8454 22.0052
|
||||
v -11.3493 9.8454 21.9935
|
||||
v -11.3478 9.8454 17.2731
|
||||
v -33.7472 9.8454 8.5854
|
||||
v -18.7412 9.8454 17.2731
|
||||
v -22.0887 9.8454 15.8911
|
||||
v -22.0887 9.8454 25.6925
|
||||
v -22.0887 9.8454 21.4375
|
||||
v -11.2152 9.8454 21.4375
|
||||
v -11.2138 9.8454 17.2731
|
||||
v -8.5704 9.8454 16.8646
|
||||
v -10.7348 9.8454 16.8647
|
||||
v -22.0887 9.8454 15.8911
|
||||
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 -22.5111 9.8454 14.4459
|
||||
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.8828 9.8454 16.8742
|
||||
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 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 22.0255
|
||||
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 -0.3214 9.8454 7.8960
|
||||
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 -33.3416 9.8454 -0.8639
|
||||
v -33.1634 9.8454 -5.0156
|
||||
v 6.5981 1.7700 11.9086
|
||||
v -18.0861 1.7700 14.2820
|
||||
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.8584 17.3766 52.1600
|
||||
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
|
||||
@ -1035,15 +1056,14 @@ vt 1.0078 0.6807 0.0000
|
||||
vt 0.8348 0.8080 0.0000
|
||||
vt 0.9529 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.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.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.4628 0.6228 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.1425 0.6726 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.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.3978 0.7478 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.5109 0.7919 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.0652 0.6726 0.0000
|
||||
vt 0.0652 0.6424 0.0000
|
||||
vt 0.5109 0.5133 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.2485 0.7007 0.0000
|
||||
vt 0.4148 0.6228 0.0000
|
||||
vt 0.3667 0.6256 0.0000
|
||||
vt 0.3667 0.5133 0.0000
|
||||
vt 0.3667 0.5657 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.4565 0.6313 0.0000
|
||||
vt 0.3667 0.5642 0.0000
|
||||
vt 0.3667 0.6224 0.0000
|
||||
vt 0.3667 0.7082 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.3667 0.6399 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.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.5573 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.4513 0.2342 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.0652 0.5636 0.0000
|
||||
vt 0.0652 0.5133 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.1382 0.2443 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.5916 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
|
||||
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 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 278/280/1 279/281/1 280/282/1 281/283/1
|
||||
f 282/284/1 283/285/1 284/286/1 285/287/1
|
||||
f 286/288/1 287/289/1 288/290/1 289/291/1
|
||||
f 274/276/1 287/289/1 290/292/1 275/277/1
|
||||
f 291/293/1 292/294/1 293/295/1 294/296/1
|
||||
f 295/297/1 293/295/1 296/298/1 297/299/1
|
||||
f 298/300/1 299/301/1 300/302/1 301/303/1
|
||||
f 298/300/1 301/303/1 290/304/1 302/305/1
|
||||
f 303/306/1 296/307/1 304/308/1 305/309/1
|
||||
f 271/307/1 306/310/1 307/311/1 308/312/1
|
||||
f 309/313/1 310/314/1 264/315/1 311/316/1
|
||||
f 253/255/1 252/254/1 312/317/1 313/318/1
|
||||
f 314/319/1 315/319/1 316/283/1 317/283/1
|
||||
f 318/320/1 319/321/1 320/322/1 321/323/1
|
||||
f 287/289/1 274/276/1 322/276/1 323/324/1 288/290/1
|
||||
f 289/291/1 324/325/1 325/326/1 286/288/1
|
||||
f 295/297/1 324/325/1 289/291/1 294/296/1 293/295/1
|
||||
f 291/293/1 288/290/1 323/324/1 279/281/1 292/294/1
|
||||
f 326/327/1 327/328/1 328/329/1 329/330/1 330/331/1 331/332/1 332/333/1
|
||||
f 282/284/1 333/334/1 334/335/1 283/285/1
|
||||
f 332/333/1 331/336/1 277/279/1 276/278/1
|
||||
f 313/318/1 315/319/1 335/337/1
|
||||
f 330/331/1 336/338/1 331/332/1
|
||||
f 337/339/1 338/340/1 339/341/1 340/342/1
|
||||
f 341/343/1 342/344/1 343/345/1 344/346/1
|
||||
f 345/347/1 333/334/1 282/284/1 285/287/1 344/346/1 343/345/1
|
||||
f 342/344/1 341/343/1 346/348/1
|
||||
f 341/343/1 347/349/1 348/350/1 346/348/1
|
||||
f 349/351/1 350/352/1 351/353/1 352/354/1
|
||||
f 327/328/1 326/327/1 353/355/1 354/356/1
|
||||
f 353/355/1 355/357/1 356/358/1 354/356/1
|
||||
f 357/359/1 356/358/1 355/357/1 358/360/1
|
||||
f 357/361/1 358/360/1 359/362/1 360/363/1
|
||||
f 320/322/1 361/364/1 362/365/1 321/323/1
|
||||
f 315/319/1 363/366/1 364/367/1 316/283/1
|
||||
f 365/368/1 363/366/1 366/369/1 367/370/1
|
||||
f 368/371/1 369/372/1 370/373/1
|
||||
f 371/374/1 250/252/1 249/251/1 338/340/1 337/339/1 372/375/1
|
||||
f 351/353/1 257/259/1 256/258/1 352/354/1
|
||||
f 254/256/1 373/376/1 374/377/1 255/257/1
|
||||
f 321/323/1 375/378/1 376/379/1 377/380/1 378/381/1 318/320/1
|
||||
f 379/382/1 380/383/1 381/384/1
|
||||
f 268/270/1 382/385/1 383/386/1 269/271/1
|
||||
f 260/262/1 384/387/1 385/388/1 261/263/1
|
||||
f 386/389/1 387/390/1 388/391/1 389/392/1
|
||||
f 390/365/3 391/365/3 392/364/3 393/364/3
|
||||
f 390/365/1 393/364/1 394/364/1 395/365/1
|
||||
f 396/364/4 397/364/4 398/364/4 399/364/4
|
||||
f 400/365/5 401/365/5 402/365/5 403/365/5
|
||||
f 404/393/1 405/251/1 406/251/1 407/393/1
|
||||
f 1/337/1 408/337/1 409/319/1 2/319/1
|
||||
f 410/394/1 257/259/1 411/259/1 412/394/1
|
||||
f 413/395/1 414/395/1 415/396/1 416/396/1
|
||||
f 238/394/1 417/394/1 418/259/1 240/259/1
|
||||
f 239/395/1 419/395/1 420/396/1 237/396/1
|
||||
f 421/397/1 381/384/1 380/383/1 347/398/1
|
||||
f 421/397/1 347/398/1 422/399/1 423/400/1
|
||||
f 259/261/1 258/260/1 424/401/1
|
||||
f 259/261/1 424/401/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 427/404/1 428/405/1 423/400/1 429/406/1 425/402/1
|
||||
f 423/400/1 422/399/1 430/407/1 429/406/1
|
||||
f 431/408/1 311/409/1 430/407/1 422/399/1
|
||||
f 383/386/1 425/402/1 258/260/1 261/263/1
|
||||
f 425/402/1 429/406/1 424/401/1 258/260/1
|
||||
f 424/401/1 429/406/1 430/407/1 263/265/1
|
||||
f 264/266/1 263/265/1 430/407/1 311/409/1
|
||||
f 269/271/1 385/388/1 432/410/1 265/267/1
|
||||
f 306/411/1 271/273/1 433/412/1
|
||||
f 384/387/1 434/413/1 432/410/1 385/388/1
|
||||
f 306/411/1 433/412/1 435/414/1 436/415/1
|
||||
f 437/416/1 438/417/1 387/390/1 386/389/1
|
||||
f 387/418/1 439/419/1 440/420/1 441/421/1 388/422/1
|
||||
f 415/396/1 414/395/1 369/372/1 368/371/1
|
||||
f 374/377/1 373/376/1 368/371/1 370/373/1
|
||||
f 108/108/1 404/423/1 1/1/1 3/3/1
|
||||
f 108/108/1 405/424/1 404/423/1
|
||||
f 278/280/1 279/281/1 280/282/1
|
||||
f 281/283/1 282/284/1 283/285/1 284/286/1
|
||||
f 285/287/1 286/288/1 287/289/1 288/290/1
|
||||
f 289/291/1 290/292/1 291/293/1 292/294/1
|
||||
f 293/295/1 294/296/1 295/297/1 296/298/1
|
||||
f 297/299/1 295/297/1 298/300/1 299/301/1
|
||||
f 300/302/1 301/303/1 302/304/1 303/305/1
|
||||
f 300/302/1 303/305/1 289/306/1 304/307/1
|
||||
f 305/308/1 298/309/1 306/310/1 307/311/1
|
||||
f 271/309/1 308/312/1 309/313/1 310/314/1
|
||||
f 311/315/1 312/316/1 264/317/1 313/318/1
|
||||
f 253/255/1 252/254/1 314/319/1 315/320/1
|
||||
f 316/321/1 317/321/1 318/322/1 319/322/1
|
||||
f 320/323/1 321/324/1 322/325/1 323/326/1
|
||||
f 286/288/1 277/279/1 324/279/1 325/327/1 287/289/1
|
||||
f 288/290/1 326/328/1 327/329/1 285/287/1
|
||||
f 297/299/1 326/328/1 288/290/1 296/298/1 295/297/1
|
||||
f 293/295/1 287/289/1 325/327/1 328/330/1 294/296/1
|
||||
f 329/331/1 330/332/1 331/333/1 332/334/1
|
||||
f 281/283/1 333/335/1 334/336/1 282/284/1
|
||||
f 274/276/1 330/337/1 335/338/1 275/277/1
|
||||
f 315/320/1 317/321/1 336/339/1
|
||||
f 329/331/1 337/340/1 335/341/1
|
||||
f 338/342/1 339/343/1 340/344/1 341/345/1
|
||||
f 342/346/1 343/347/1 344/348/1 345/349/1
|
||||
f 346/350/1 333/335/1 281/283/1 284/286/1 345/349/1 344/348/1
|
||||
f 343/347/1 342/346/1 347/351/1
|
||||
f 342/346/1 348/352/1 349/353/1 347/351/1
|
||||
f 350/354/1 351/355/1 352/356/1 353/357/1
|
||||
f 354/358/1 355/359/1 356/360/1 357/361/1
|
||||
f 356/360/1 358/362/1 359/363/1 357/361/1
|
||||
f 360/364/1 359/363/1 358/362/1 361/365/1
|
||||
f 360/366/1 361/365/1 362/367/1 363/368/1
|
||||
f 322/325/1 364/369/1 365/370/1 323/326/1
|
||||
f 317/321/1 366/371/1 367/372/1 318/322/1
|
||||
f 368/373/1 366/371/1 369/374/1 370/375/1
|
||||
f 371/376/1 372/377/1 373/378/1
|
||||
f 374/379/1 250/252/1 249/251/1 339/343/1 338/342/1 375/380/1
|
||||
f 352/356/1 257/259/1 256/258/1 353/357/1
|
||||
f 254/256/1 376/381/1 377/382/1 255/257/1
|
||||
f 323/326/1 378/383/1 379/384/1 380/385/1 381/386/1 320/323/1
|
||||
f 382/387/1 383/388/1 384/389/1
|
||||
f 268/270/1 385/390/1 386/391/1 269/271/1
|
||||
f 260/262/1 387/392/1 388/393/1 261/263/1
|
||||
f 389/394/1 390/395/1 391/396/1 392/397/1
|
||||
f 393/370/3 394/370/3 395/369/3 396/369/3
|
||||
f 393/370/1 396/369/1 397/369/1 398/370/1
|
||||
f 399/369/4 400/369/4 401/369/4 402/369/4
|
||||
f 403/370/5 404/370/5 405/370/5 406/370/5
|
||||
f 407/398/1 408/251/1 409/251/1 410/398/1
|
||||
f 1/339/1 411/339/1 412/321/1 2/321/1
|
||||
f 413/399/1 257/259/1 414/259/1 415/399/1
|
||||
f 416/400/1 417/400/1 418/401/1 419/401/1
|
||||
f 238/399/1 420/399/1 421/259/1 240/259/1
|
||||
f 239/400/1 422/400/1 423/401/1 237/401/1
|
||||
f 424/402/1 384/389/1 383/388/1 348/403/1
|
||||
f 424/402/1 348/403/1 425/404/1 426/405/1
|
||||
f 259/261/1 258/260/1 427/406/1
|
||||
f 259/261/1 427/406/1 263/265/1 262/264/1
|
||||
f 428/407/1 386/391/1 385/390/1 429/408/1 430/409/1 430/409/1
|
||||
f 430/409/1 431/410/1 426/405/1 432/411/1 428/407/1
|
||||
f 426/405/1 425/404/1 433/412/1 432/411/1
|
||||
f 434/413/1 313/414/1 433/412/1 425/404/1
|
||||
f 386/391/1 428/407/1 258/260/1 261/263/1
|
||||
f 428/407/1 432/411/1 427/406/1 258/260/1
|
||||
f 427/406/1 432/411/1 433/412/1 263/265/1
|
||||
f 264/266/1 263/265/1 433/412/1 313/414/1
|
||||
f 269/271/1 388/393/1 435/415/1 265/267/1
|
||||
f 308/416/1 271/273/1 436/417/1
|
||||
f 387/392/1 437/418/1 435/415/1 388/393/1
|
||||
f 308/416/1 436/417/1 438/419/1 439/420/1
|
||||
f 440/421/1 441/422/1 390/395/1 389/394/1
|
||||
f 390/423/1 442/424/1 443/425/1 444/426/1 391/427/1
|
||||
f 418/401/1 417/400/1 372/377/1 371/376/1
|
||||
f 377/382/1 376/381/1 371/376/1 373/378/1
|
||||
f 108/108/1 407/428/1 1/1/1 3/3/1
|
||||
f 108/108/1 408/429/1 407/428/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 239/242/1 237/240/1 229/232/1
|
||||
f 286/288/1 302/425/1 290/292/1 287/289/1
|
||||
f 325/326/1 442/426/1 302/425/1 286/288/1
|
||||
f 293/295/1 292/294/1 304/427/1 296/298/1
|
||||
f 279/281/1 278/280/1 304/427/1 292/294/1
|
||||
f 403/365/6 172/365/6 443/365/6 400/365/6
|
||||
f 123/123/1 124/124/1 443/428/1 172/175/1
|
||||
f 124/124/1 166/169/1 443/428/1
|
||||
f 396/364/1 399/364/1 147/364/1 444/364/1
|
||||
f 146/146/1 444/429/1 147/147/1 145/145/1
|
||||
f 146/146/1 117/117/1 444/429/1
|
||||
f 253/255/1 445/393/1 249/251/1
|
||||
f 406/251/7 249/251/7 445/393/7 407/393/7
|
||||
f 408/337/8 335/337/8 315/319/8 409/319/8
|
||||
f 320/322/1 319/321/1 446/430/1 316/283/1 364/367/1
|
||||
f 391/365/9 362/365/9 361/364/9 392/364/9
|
||||
f 447/365/10 390/365/10 395/365/10 448/365/10
|
||||
f 402/365/11 401/365/11 447/365/11 448/365/11
|
||||
f 449/364/12 394/364/12 393/364/12 450/364/12
|
||||
f 398/364/13 397/364/13 449/364/13 450/364/13
|
||||
f 417/394/14 412/394/14 411/259/14 418/259/14
|
||||
f 419/395/14 413/395/14 416/396/14 420/396/14
|
||||
f 257/259/1 410/394/1 254/256/1
|
||||
f 440/420/1 451/431/1 370/373/1
|
||||
f 370/373/1 369/372/1 441/421/1 440/420/1
|
||||
f 347/349/1 380/432/1 348/350/1
|
||||
f 374/377/1 452/433/1 255/257/1
|
||||
f 270/389/1 386/389/1 389/392/1 453/392/1
|
||||
f 388/391/1 454/434/1 389/392/1
|
||||
f 271/273/1 270/272/1 453/435/1 265/267/1
|
||||
f 453/435/1 266/268/1 265/267/1
|
||||
f 352/354/1 455/354/1 349/436/1
|
||||
f 348/436/1 349/436/1 455/354/1 456/354/1
|
||||
f 348/436/1 456/354/1 346/354/1
|
||||
f 433/412/1 432/410/1 434/413/1 435/414/1
|
||||
f 436/415/1 435/414/1 457/414/1 458/415/1
|
||||
f 265/267/1 432/410/1 433/412/1 271/273/1
|
||||
f 459/437/1 460/438/1 310/314/1 309/313/1
|
||||
f 310/314/1 460/438/1 461/438/1
|
||||
f 460/438/1 459/437/1 462/439/1 463/438/1
|
||||
f 461/438/1 460/438/1 464/438/1 465/438/1
|
||||
f 463/438/1 462/439/1 466/439/1 467/438/1
|
||||
f 465/438/1 464/438/1 468/438/1 469/438/1
|
||||
f 470/440/1 471/437/1 472/437/1 473/440/1
|
||||
f 462/439/1 470/440/1 473/440/1 466/439/1
|
||||
f 472/437/1 471/437/1 474/437/1 475/437/1
|
||||
f 463/438/1 467/438/1 476/438/1
|
||||
f 464/438/1 463/438/1 476/438/1 468/438/1
|
||||
f 460/438/1 463/438/1 464/438/1
|
||||
f 473/440/1 472/437/1 477/437/1 478/440/1
|
||||
f 467/438/1 466/439/1 479/439/1 480/438/1
|
||||
f 468/438/1 476/438/1 481/438/1 482/438/1
|
||||
f 480/438/15 479/439/15 483/439/15 484/438/15
|
||||
f 478/440/16 477/437/16 485/437/16 486/440/16
|
||||
f 486/440/1 485/437/1 487/437/1 488/440/1
|
||||
f 482/438/17 481/438/17 489/438/17 490/438/17
|
||||
f 490/438/1 489/438/1 491/438/1 492/438/1
|
||||
f 484/438/1 483/439/1 493/439/1 494/438/1
|
||||
f 494/438/18 493/439/18 495/439/18 496/438/18
|
||||
f 496/438/1 495/439/1 497/439/1 498/438/1
|
||||
f 488/440/1 487/437/1 499/437/1 500/440/1
|
||||
f 492/438/1 491/438/1 501/438/1 502/438/1
|
||||
f 498/438/1 497/439/1 503/439/1 504/438/1
|
||||
f 488/440/19 500/440/19 503/440/19 497/440/19
|
||||
f 498/438/20 504/438/20 501/438/20 491/438/20
|
||||
f 499/437/1 487/437/1 505/437/1 506/437/1
|
||||
f 492/438/1 502/438/1 507/438/1 508/438/1
|
||||
f 500/440/21 499/437/21 509/437/21 510/440/21
|
||||
f 502/438/22 501/438/22 511/438/22 512/438/22
|
||||
f 504/438/23 503/439/23 513/439/23 514/438/23
|
||||
f 503/440/24 500/440/24 510/440/24 513/440/24
|
||||
f 501/438/25 504/438/25 514/438/25 511/438/25
|
||||
f 499/437/21 506/437/21 515/437/21 509/437/21
|
||||
f 507/438/26 502/438/26 512/438/26 516/438/26
|
||||
f 510/440/1 509/437/1 517/437/1 518/440/1
|
||||
f 512/438/1 511/438/1 519/438/1 520/438/1
|
||||
f 514/438/1 513/439/1 521/439/1 522/438/1
|
||||
f 513/440/1 510/440/1 518/440/1 521/440/1
|
||||
f 511/438/1 514/438/1 522/438/1 519/438/1
|
||||
f 509/437/1 515/437/1 523/437/1 517/437/1
|
||||
f 516/438/1 512/438/1 520/438/1 524/438/1
|
||||
f 307/311/1 525/311/1 526/312/1 308/312/1
|
||||
f 527/311/1 528/311/1 529/311/1
|
||||
f 527/311/1 530/312/1 526/312/1 525/311/1
|
||||
f 307/311/1 531/311/1 532/311/1 525/311/1
|
||||
f 533/311/1 534/311/1 535/311/1 536/311/1
|
||||
f 536/311/27 535/311/27 537/311/27 538/311/27
|
||||
f 538/311/1 537/311/1 539/311/1 540/311/1
|
||||
f 533/311/1 541/311/1 542/311/1 532/311/1
|
||||
f 534/311/1 533/311/1 532/311/1 531/311/1
|
||||
f 543/311/1 528/311/1 544/311/1 545/311/1
|
||||
f 546/311/1 529/311/1 528/311/1 543/311/1
|
||||
f 545/311/1 544/311/1 547/311/1 548/311/1
|
||||
f 548/311/1 547/311/1 542/311/1 541/311/1
|
||||
f 543/311/1 545/311/1 549/311/1 550/311/1
|
||||
f 548/311/1 541/311/1 551/311/1 552/311/1
|
||||
f 550/311/28 549/311/28 553/311/28 554/311/28
|
||||
f 552/311/28 551/311/28 555/311/28 556/311/28
|
||||
f 554/311/1 553/311/1 557/311/1 558/311/1
|
||||
f 556/311/1 555/311/1 559/311/1 560/311/1
|
||||
f 540/311/29 539/311/29 561/311/29 562/311/29
|
||||
f 562/311/1 561/311/1 563/311/1 564/311/1
|
||||
f 558/311/1 557/311/1 565/311/1 566/311/1
|
||||
f 560/311/1 559/311/1 567/311/1 568/311/1
|
||||
f 564/311/1 563/311/1 569/311/1 570/311/1
|
||||
f 566/311/1 565/311/1 571/311/1 572/311/1
|
||||
f 568/311/1 567/311/1 573/311/1 574/311/1
|
||||
f 569/311/1 563/311/1 575/311/1 576/311/1
|
||||
f 564/311/30 570/311/30 573/311/30 567/311/30
|
||||
f 568/311/1 574/311/1 571/311/1 565/311/1
|
||||
f 566/311/1 572/311/1 577/311/1 578/311/1
|
||||
f 525/311/1 532/311/1 542/311/1
|
||||
f 527/311/1 544/311/1 528/311/1
|
||||
f 525/311/1 547/311/1 544/311/1 527/311/1
|
||||
f 525/311/1 542/311/1 547/311/1
|
||||
f 303/306/1 305/309/1 579/309/1 580/306/1
|
||||
f 581/309/1 582/306/1 580/306/1 579/309/1
|
||||
f 580/306/1 582/306/1 583/306/1 584/306/1
|
||||
f 584/306/1 583/306/1 585/306/1 586/306/1
|
||||
f 587/306/1 588/306/1 589/306/1
|
||||
f 588/306/1 590/306/1 591/306/1 592/306/1
|
||||
f 593/306/1 594/306/1 595/306/1 596/306/1
|
||||
f 589/306/1 584/306/1 586/306/1 587/306/1
|
||||
f 587/306/1 586/306/1 597/306/1 598/306/1
|
||||
f 599/306/1 600/306/1 593/306/1 596/306/1
|
||||
f 587/306/1 598/306/1 590/306/1 588/306/1
|
||||
f 599/306/1 596/306/1 592/306/1 591/306/1
|
||||
f 591/306/1 590/306/1 601/306/1 602/306/1
|
||||
f 598/306/1 597/306/1 603/306/1 604/306/1
|
||||
f 600/306/1 599/306/1 605/306/1 606/306/1
|
||||
f 604/306/31 603/306/31 607/306/31 608/306/31
|
||||
f 606/306/32 605/306/32 609/306/32 610/306/32
|
||||
f 608/306/1 607/306/1 611/306/1 612/306/1
|
||||
f 610/306/1 609/306/1 613/306/1 614/306/1
|
||||
f 602/306/33 601/306/33 615/306/33 616/306/33
|
||||
f 616/306/34 615/306/34 617/306/34 618/306/34
|
||||
f 618/306/35 617/306/35 619/306/35 620/306/35
|
||||
f 620/306/36 619/306/36 621/306/36 622/306/36
|
||||
f 612/306/1 611/306/1 623/306/1 624/306/1
|
||||
f 614/306/1 613/306/1 625/306/1 626/306/1
|
||||
f 622/306/36 621/306/36 627/306/36 628/306/36
|
||||
f 622/306/37 628/306/37 625/306/37 613/306/37
|
||||
f 612/306/38 624/306/38 627/306/38 621/306/38
|
||||
f 623/306/1 611/306/1 629/306/1 630/306/1
|
||||
f 614/306/1 626/306/1 631/306/1 632/306/1
|
||||
f 624/306/1 623/306/1 633/306/1 634/306/1
|
||||
f 626/306/1 625/306/1 635/306/1 636/306/1
|
||||
f 628/306/39 627/306/39 637/306/39 638/306/39
|
||||
f 625/306/40 628/306/40 638/306/40 635/306/40
|
||||
f 627/306/41 624/306/41 634/306/41 637/306/41
|
||||
f 623/306/1 630/306/1 639/306/1 633/306/1
|
||||
f 631/306/1 626/306/1 636/306/1 640/306/1
|
||||
f 592/306/1 596/306/1 595/306/1
|
||||
f 588/306/1 592/306/1 595/306/1 589/306/1
|
||||
f 300/302/1 299/301/1 641/301/1 642/302/1
|
||||
f 642/302/1 643/441/1 644/442/1
|
||||
f 645/443/1 646/443/1 647/444/1 648/444/1
|
||||
f 649/301/1 650/301/1 651/445/1 652/445/1
|
||||
f 653/442/1 644/442/1 643/441/1 654/441/1
|
||||
f 652/445/1 651/445/1 646/443/1 645/443/1
|
||||
f 654/441/1 643/441/1 648/444/1 647/444/1
|
||||
f 653/442/1 655/302/1 644/442/1
|
||||
f 642/302/1 648/444/1 643/441/1
|
||||
f 641/301/1 649/301/1 652/445/1
|
||||
f 641/301/1 652/445/1 645/443/1
|
||||
f 642/302/1 641/301/1 645/443/1 648/444/1
|
||||
f 651/445/1 650/301/1 656/301/1 657/445/1
|
||||
f 653/442/1 654/441/1 658/441/1 659/442/1
|
||||
f 647/444/1 646/443/1 660/443/1 661/444/1
|
||||
f 657/445/42 656/301/42 662/301/42 663/445/42
|
||||
f 659/442/42 658/441/42 664/441/42 665/442/42
|
||||
f 661/444/43 660/443/43 666/443/43 667/444/43
|
||||
f 667/444/1 666/443/1 668/443/1 669/444/1
|
||||
f 663/445/1 662/301/1 670/301/1 671/445/1
|
||||
f 665/442/1 664/441/1 672/441/1 673/442/1
|
||||
f 671/445/1 670/301/1 674/301/1 675/445/1
|
||||
f 673/442/1 672/441/1 676/441/1 677/442/1
|
||||
f 669/444/44 668/443/44 678/443/44 679/444/44
|
||||
f 679/444/1 678/443/1 680/443/1 681/444/1
|
||||
f 675/445/45 674/301/45 682/301/45 683/445/45
|
||||
f 677/442/46 676/441/46 684/441/46 685/442/46
|
||||
f 681/444/47 680/443/47 686/443/47 687/444/47
|
||||
f 675/445/48 683/445/48 686/445/48 680/445/48
|
||||
f 681/444/49 687/444/49 684/444/49 676/444/49
|
||||
f 677/442/50 685/442/50 688/442/50 689/442/50
|
||||
f 682/301/51 674/301/51 690/301/51 691/301/51
|
||||
f 683/445/1 682/301/1 692/301/1 693/445/1
|
||||
f 685/442/1 684/441/1 694/441/1 695/442/1
|
||||
f 687/444/1 686/443/1 696/443/1 697/444/1
|
||||
f 686/445/1 683/445/1 693/445/1 696/445/1
|
||||
f 684/444/1 687/444/1 697/444/1 694/444/1
|
||||
f 688/442/1 685/442/1 695/442/1 698/442/1
|
||||
f 682/301/1 691/301/1 699/301/1 692/301/1
|
||||
f 459/437/1 471/437/1 470/440/1
|
||||
f 459/437/1 470/440/1 462/439/1
|
||||
f 387/418/1 376/379/1 375/378/1 439/419/1
|
||||
f 312/317/1 366/369/1 363/366/1 315/319/1 313/318/1
|
||||
# 404 polygons - 46 triangles
|
||||
f 289/291/1 292/294/1 445/430/1 304/431/1
|
||||
f 304/431/1 445/430/1 446/432/1 447/433/1
|
||||
f 295/297/1 294/296/1 306/434/1 298/300/1
|
||||
f 306/434/1 448/435/1 449/436/1
|
||||
f 406/370/6 172/370/6 450/370/6 403/370/6
|
||||
f 123/123/1 124/124/1 450/437/1 172/175/1
|
||||
f 124/124/1 166/169/1 450/437/1
|
||||
f 399/369/1 402/369/1 147/369/1 451/369/1
|
||||
f 146/146/1 451/438/1 147/147/1 145/145/1
|
||||
f 146/146/1 117/117/1 451/438/1
|
||||
f 253/255/1 452/398/1 249/251/1
|
||||
f 409/251/7 249/251/7 452/398/7 410/398/7
|
||||
f 411/339/8 336/339/8 317/321/8 412/321/8
|
||||
f 322/325/1 321/324/1 453/439/1 318/322/1 367/372/1
|
||||
f 394/370/9 365/370/9 364/369/9 395/369/9
|
||||
f 454/370/10 393/370/10 398/370/10 455/370/10
|
||||
f 405/370/11 404/370/11 454/370/11 455/370/11
|
||||
f 456/369/12 397/369/12 396/369/12 457/369/12
|
||||
f 401/369/13 400/369/13 456/369/13 457/369/13
|
||||
f 420/399/14 415/399/14 414/259/14 421/259/14
|
||||
f 422/400/14 416/400/14 419/401/14 423/401/14
|
||||
f 257/259/1 413/399/1 254/256/1
|
||||
f 443/425/1 458/440/1 373/378/1
|
||||
f 373/378/1 372/377/1 444/426/1 443/425/1
|
||||
f 348/352/1 383/441/1 349/353/1
|
||||
f 377/382/1 459/442/1 255/257/1
|
||||
f 270/394/1 389/394/1 392/397/1 460/397/1
|
||||
f 391/396/1 461/443/1 392/397/1
|
||||
f 271/273/1 270/272/1 460/444/1 265/267/1
|
||||
f 460/444/1 266/268/1 265/267/1
|
||||
f 353/357/1 462/357/1 350/445/1
|
||||
f 349/445/1 463/357/1 347/357/1
|
||||
f 436/417/1 435/415/1 437/418/1 438/419/1
|
||||
f 439/420/1 438/419/1 464/419/1 465/420/1
|
||||
f 265/267/1 435/415/1 436/417/1 271/273/1
|
||||
f 466/446/1 467/447/1 312/316/1 311/315/1
|
||||
f 312/316/1 467/447/1 468/447/1
|
||||
f 467/447/1 466/446/1 469/448/1 470/447/1
|
||||
f 468/447/1 467/447/1 471/447/1 472/447/1
|
||||
f 470/447/1 469/448/1 473/448/1 474/447/1
|
||||
f 472/447/1 471/447/1 475/447/1 476/447/1
|
||||
f 477/449/1 478/446/1 479/446/1 480/449/1
|
||||
f 469/448/1 477/449/1 480/449/1 473/448/1
|
||||
f 479/446/1 478/446/1 481/446/1 482/446/1
|
||||
f 470/447/1 474/447/1 483/447/1
|
||||
f 471/447/1 470/447/1 483/447/1 475/447/1
|
||||
f 467/447/1 470/447/1 471/447/1
|
||||
f 480/449/1 479/446/1 484/446/1 485/449/1
|
||||
f 474/447/1 473/448/1 486/448/1 487/447/1
|
||||
f 475/447/1 483/447/1 488/447/1 489/447/1
|
||||
f 487/447/15 486/448/15 490/448/15 491/447/15
|
||||
f 485/449/16 484/446/16 492/446/16 493/449/16
|
||||
f 493/449/1 492/446/1 494/446/1 495/449/1
|
||||
f 489/447/17 488/447/17 496/447/17 497/447/17
|
||||
f 497/447/1 496/447/1 498/447/1 499/447/1
|
||||
f 491/447/1 490/448/1 500/448/1 501/447/1
|
||||
f 501/447/18 500/448/18 502/448/18 503/447/18
|
||||
f 503/447/1 502/448/1 504/448/1 505/447/1
|
||||
f 495/449/1 494/446/1 506/446/1 507/449/1
|
||||
f 499/447/1 498/447/1 508/447/1 509/447/1
|
||||
f 505/447/1 504/448/1 510/448/1 511/447/1
|
||||
f 495/449/19 507/449/19 510/449/19 504/449/19
|
||||
f 505/447/20 511/447/20 508/447/20 498/447/20
|
||||
f 506/446/1 494/446/1 512/446/1 513/446/1
|
||||
f 499/447/1 509/447/1 514/447/1 515/447/1
|
||||
f 507/449/21 506/446/21 516/446/21 517/449/21
|
||||
f 509/447/22 508/447/22 518/447/22 519/447/22
|
||||
f 511/447/23 510/448/23 520/448/23 521/447/23
|
||||
f 510/449/24 507/449/24 517/449/24 520/449/24
|
||||
f 508/447/25 511/447/25 521/447/25 518/447/25
|
||||
f 506/446/21 513/446/21 522/446/21 516/446/21
|
||||
f 514/447/26 509/447/26 519/447/26 523/447/26
|
||||
f 517/449/1 516/446/1 524/446/1 525/449/1
|
||||
f 519/447/1 518/447/1 526/447/1 527/447/1
|
||||
f 521/447/1 520/448/1 528/448/1 529/447/1
|
||||
f 520/449/1 517/449/1 525/449/1 528/449/1
|
||||
f 518/447/1 521/447/1 529/447/1 526/447/1
|
||||
f 516/446/1 522/446/1 530/446/1 524/446/1
|
||||
f 523/447/1 519/447/1 527/447/1 531/447/1
|
||||
f 309/313/1 532/313/1 533/314/1 310/314/1
|
||||
f 534/313/1 535/313/1 536/313/1
|
||||
f 534/313/1 537/314/1 533/314/1 532/313/1
|
||||
f 309/313/1 538/313/1 539/313/1 532/313/1
|
||||
f 540/313/1 541/313/1 542/313/1 543/313/1
|
||||
f 543/313/27 542/313/27 544/313/27 545/313/27
|
||||
f 545/313/1 544/313/1 546/313/1 547/313/1
|
||||
f 540/313/1 548/313/1 549/313/1 539/313/1
|
||||
f 541/313/1 540/313/1 539/313/1 538/313/1
|
||||
f 550/313/1 535/313/1 551/313/1 552/313/1
|
||||
f 553/313/1 536/313/1 535/313/1 550/313/1
|
||||
f 552/313/1 551/313/1 554/313/1 555/313/1
|
||||
f 555/313/1 554/313/1 549/313/1 548/313/1
|
||||
f 550/313/1 552/313/1 556/313/1 557/313/1
|
||||
f 555/313/1 548/313/1 558/313/1 559/313/1
|
||||
f 557/313/28 556/313/28 560/313/28 561/313/28
|
||||
f 559/313/28 558/313/28 562/313/28 563/313/28
|
||||
f 561/313/1 560/313/1 564/313/1 565/313/1
|
||||
f 563/313/1 562/313/1 566/313/1 567/313/1
|
||||
f 547/313/29 546/313/29 568/313/29 569/313/29
|
||||
f 569/313/1 568/313/1 570/313/1 571/313/1
|
||||
f 565/313/1 564/313/1 572/313/1 573/313/1
|
||||
f 567/313/1 566/313/1 574/313/1 575/313/1
|
||||
f 571/313/1 570/313/1 576/313/1 577/313/1
|
||||
f 573/313/1 572/313/1 578/313/1 579/313/1
|
||||
f 575/313/1 574/313/1 580/313/1 581/313/1
|
||||
f 576/313/1 570/313/1 582/313/1 583/313/1
|
||||
f 571/313/30 577/313/30 580/313/30 574/313/30
|
||||
f 575/313/1 581/313/1 578/313/1 572/313/1
|
||||
f 573/313/1 579/313/1 584/313/1 585/313/1
|
||||
f 532/313/1 539/313/1 549/313/1
|
||||
f 534/313/1 551/313/1 535/313/1
|
||||
f 532/313/1 554/313/1 551/313/1 534/313/1
|
||||
f 532/313/1 549/313/1 554/313/1
|
||||
f 305/308/1 307/311/1 586/311/1 587/308/1
|
||||
f 588/311/1 589/308/1 587/308/1 586/311/1
|
||||
f 587/308/1 589/308/1 590/308/1 591/308/1
|
||||
f 591/308/1 590/308/1 592/308/1 593/308/1
|
||||
f 594/308/1 595/308/1 596/308/1
|
||||
f 595/308/1 597/308/1 598/308/1 599/308/1
|
||||
f 600/308/1 601/308/1 602/308/1 603/308/1
|
||||
f 596/308/1 591/308/1 593/308/1 594/308/1
|
||||
f 594/308/1 593/308/1 604/308/1 605/308/1
|
||||
f 606/308/1 607/308/1 600/308/1 603/308/1
|
||||
f 594/308/1 605/308/1 597/308/1 595/308/1
|
||||
f 606/308/1 603/308/1 599/308/1 598/308/1
|
||||
f 598/308/1 597/308/1 608/308/1 609/308/1
|
||||
f 605/308/1 604/308/1 610/308/1 611/308/1
|
||||
f 607/308/1 606/308/1 612/308/1 613/308/1
|
||||
f 611/308/31 610/308/31 614/308/31 615/308/31
|
||||
f 613/308/32 612/308/32 616/308/32 617/308/32
|
||||
f 615/308/1 614/308/1 618/308/1 619/308/1
|
||||
f 617/308/1 616/308/1 620/308/1 621/308/1
|
||||
f 609/308/33 608/308/33 622/308/33 623/308/33
|
||||
f 623/308/34 622/308/34 624/308/34 625/308/34
|
||||
f 625/308/35 624/308/35 626/308/35 627/308/35
|
||||
f 627/308/36 626/308/36 628/308/36 629/308/36
|
||||
f 619/308/1 618/308/1 630/308/1 631/308/1
|
||||
f 621/308/1 620/308/1 632/308/1 633/308/1
|
||||
f 629/308/36 628/308/36 634/308/36 635/308/36
|
||||
f 629/308/37 635/308/37 632/308/37 620/308/37
|
||||
f 619/308/38 631/308/38 634/308/38 628/308/38
|
||||
f 630/308/1 618/308/1 636/308/1 637/308/1
|
||||
f 621/308/1 633/308/1 638/308/1 639/308/1
|
||||
f 631/308/1 630/308/1 640/308/1 641/308/1
|
||||
f 633/308/1 632/308/1 642/308/1 643/308/1
|
||||
f 635/308/39 634/308/39 644/308/39 645/308/39
|
||||
f 632/308/40 635/308/40 645/308/40 642/308/40
|
||||
f 634/308/41 631/308/41 641/308/41 644/308/41
|
||||
f 630/308/1 637/308/1 646/308/1 640/308/1
|
||||
f 638/308/1 633/308/1 643/308/1 647/308/1
|
||||
f 599/308/1 603/308/1 602/308/1
|
||||
f 595/308/1 599/308/1 602/308/1 596/308/1
|
||||
f 302/304/1 301/303/1 648/303/1 649/304/1
|
||||
f 649/304/1 650/450/1 651/451/1
|
||||
f 652/452/1 653/452/1 654/453/1 655/453/1
|
||||
f 656/303/1 657/303/1 658/454/1 659/454/1
|
||||
f 660/451/1 651/451/1 650/450/1 661/450/1
|
||||
f 659/454/1 658/454/1 653/452/1 652/452/1
|
||||
f 661/450/1 650/450/1 655/453/1 654/453/1
|
||||
f 660/451/1 662/304/1 651/451/1
|
||||
f 649/304/1 655/453/1 650/450/1
|
||||
f 648/303/1 656/303/1 659/454/1
|
||||
f 648/303/1 659/454/1 652/452/1
|
||||
f 649/304/1 648/303/1 652/452/1 655/453/1
|
||||
f 658/454/1 657/303/1 663/303/1 664/454/1
|
||||
f 660/451/1 661/450/1 665/450/1 666/451/1
|
||||
f 654/453/1 653/452/1 667/452/1 668/453/1
|
||||
f 664/454/42 663/303/42 669/303/42 670/454/42
|
||||
f 666/451/42 665/450/42 671/450/42 672/451/42
|
||||
f 668/453/43 667/452/43 673/452/43 674/453/43
|
||||
f 674/453/1 673/452/1 675/452/1 676/453/1
|
||||
f 670/454/1 669/303/1 677/303/1 678/454/1
|
||||
f 672/451/1 671/450/1 679/450/1 680/451/1
|
||||
f 678/454/1 677/303/1 681/303/1 682/454/1
|
||||
f 680/451/1 679/450/1 683/450/1 684/451/1
|
||||
f 676/453/44 675/452/44 685/452/44 686/453/44
|
||||
f 686/453/1 685/452/1 687/452/1 688/453/1
|
||||
f 682/454/45 681/303/45 689/303/45 690/454/45
|
||||
f 684/451/46 683/450/46 691/450/46 692/451/46
|
||||
f 688/453/47 687/452/47 693/452/47 694/453/47
|
||||
f 682/454/48 690/454/48 693/454/48 687/454/48
|
||||
f 688/453/49 694/453/49 691/453/49 683/453/49
|
||||
f 684/451/50 692/451/50 695/451/50 696/451/50
|
||||
f 689/303/51 681/303/51 697/303/51 698/303/51
|
||||
f 690/454/1 689/303/1 699/303/1 700/454/1
|
||||
f 692/451/1 691/450/1 701/450/1 702/451/1
|
||||
f 694/453/1 693/452/1 703/452/1 704/453/1
|
||||
f 693/454/1 690/454/1 700/454/1 703/454/1
|
||||
f 691/453/1 694/453/1 704/453/1 701/453/1
|
||||
f 695/451/1 692/451/1 702/451/1 705/451/1
|
||||
f 689/303/1 698/303/1 706/303/1 699/303/1
|
||||
f 466/446/1 478/446/1 477/449/1
|
||||
f 466/446/1 477/449/1 469/448/1
|
||||
f 390/423/1 379/384/1 378/383/1 442/424/1
|
||||
f 314/319/1 369/374/1 366/371/1 317/321/1 315/320/1
|
||||
f 316/321/1 319/322/1 707/322/1 278/321/1
|
||||
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
|
||||
|
||||
|
1710
static/jl3d/path/stationmanagerold.obj
Normal file
1710
static/jl3d/path/stationmanagerold.obj
Normal file
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user