站台
This commit is contained in:
parent
a76153cb74
commit
07984139b5
37
components/Platform/Platform.d.ts
vendored
37
components/Platform/Platform.d.ts
vendored
@ -1,30 +1,55 @@
|
|||||||
import { JlGraphic, JlGraphicTemplate } from "jl-graphic";
|
import { JlGraphic, JlGraphicTemplate, VectorText } from "jl-graphic";
|
||||||
import { Container, Graphics } from 'pixi.js';
|
import { Container, Graphics } from 'pixi.js';
|
||||||
import { CategoryType, DoorConstsConfig, IPlatformData, IPlatformState, PlatformConstsConfig } from './PlatformConfig';
|
import { CategoryType, IBriJingPlatformState, IPlatformData, IXiAnPlatformState, PlatformConstsConfig } from './PlatformConfig';
|
||||||
|
type IPlatformState = IBriJingPlatformState | IXiAnPlatformState;
|
||||||
declare class RectGraphic extends Container {
|
declare class RectGraphic extends Container {
|
||||||
static Type: string;
|
static Type: string;
|
||||||
rectGraphic: Graphics;
|
rectGraphic: Graphics;
|
||||||
constructor();
|
constructor();
|
||||||
draw(platformConsts: PlatformConstsConfig): void;
|
draw(state: IPlatformState, platformConsts: PlatformConstsConfig): void;
|
||||||
clear(): void;
|
clear(): void;
|
||||||
}
|
}
|
||||||
declare class DoorGraphic extends Container {
|
export declare class DoorGraphic extends Container {
|
||||||
static Type: string;
|
static Type: string;
|
||||||
doorGraphic: Graphics;
|
doorGraphic: Graphics;
|
||||||
doorCloseGraphic: Graphics;
|
doorCloseGraphic: Graphics;
|
||||||
constructor();
|
constructor();
|
||||||
draw(platformConsts: PlatformConstsConfig, doorConstsConfig: DoorConstsConfig): void;
|
draw(stateData: IXiAnPlatformState, ipRtuStusDown: boolean, platformConsts: PlatformConstsConfig): void;
|
||||||
clear(): void;
|
clear(): void;
|
||||||
|
changeState(stateData: IXiAnPlatformState): void;
|
||||||
|
}
|
||||||
|
declare class CodeGraph extends Container {
|
||||||
|
static Type: string;
|
||||||
|
character: VectorText;
|
||||||
|
runLevel: VectorText;
|
||||||
|
runTime: VectorText;
|
||||||
|
stopTime: VectorText;
|
||||||
|
circle: Graphics;
|
||||||
|
constructor(platformConsts: PlatformConstsConfig);
|
||||||
|
draw(platformConsts: PlatformConstsConfig): void;
|
||||||
|
clear(): void;
|
||||||
|
changeState(stateData: IXiAnPlatformState, platformConsts: PlatformConstsConfig): void;
|
||||||
|
}
|
||||||
|
declare class LozengeGraphic extends Container {
|
||||||
|
static Type: string;
|
||||||
|
lozengeGraphic: Graphics;
|
||||||
|
constructor();
|
||||||
|
draw(platformConsts: PlatformConstsConfig): void;
|
||||||
|
clear(): void;
|
||||||
|
changeState(stateData: IXiAnPlatformState): void;
|
||||||
}
|
}
|
||||||
export declare class Platform extends JlGraphic {
|
export declare class Platform extends JlGraphic {
|
||||||
static Type: string;
|
static Type: string;
|
||||||
private categoryType;
|
private categoryType;
|
||||||
rectGraphic: RectGraphic;
|
rectGraphic: RectGraphic;
|
||||||
doorGraphic: DoorGraphic;
|
doorGraphic?: DoorGraphic;
|
||||||
|
lozengeGraphic?: LozengeGraphic;
|
||||||
|
codeGraph?: CodeGraph;
|
||||||
constructor(categoryType: CategoryType);
|
constructor(categoryType: CategoryType);
|
||||||
get datas(): IPlatformData;
|
get datas(): IPlatformData;
|
||||||
get states(): IPlatformState;
|
get states(): IPlatformState;
|
||||||
doRepaint(): void;
|
doRepaint(): void;
|
||||||
|
changeState(): void;
|
||||||
}
|
}
|
||||||
export declare class PlatformTemplate extends JlGraphicTemplate<Platform> {
|
export declare class PlatformTemplate extends JlGraphicTemplate<Platform> {
|
||||||
categoryType: CategoryType;
|
categoryType: CategoryType;
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import { JlGraphic, JlGraphicTemplate, getRectangleCenter } from 'jl-graphic';
|
import { JlGraphic, calculateMirrorPoint, JlGraphicTemplate, getRectangleCenter, VectorText } from 'jl-graphic';
|
||||||
import { Container, Graphics, Color, Rectangle } from 'pixi.js';
|
import { Container, Graphics, Color, Point, Rectangle } from 'pixi.js';
|
||||||
import { platformConstsMap } from './PlatformConfig.js';
|
import { CategoryType, platformConstsMap } from './PlatformConfig.js';
|
||||||
|
|
||||||
class RectGraphic extends Container {
|
class RectGraphic extends Container {
|
||||||
static Type = 'RectPlatForm';
|
static Type = 'RectPlatForm';
|
||||||
@ -10,9 +10,18 @@ class RectGraphic extends Container {
|
|||||||
this.rectGraphic = new Graphics();
|
this.rectGraphic = new Graphics();
|
||||||
this.addChild(this.rectGraphic);
|
this.addChild(this.rectGraphic);
|
||||||
}
|
}
|
||||||
draw(platformConsts) {
|
draw(state, platformConsts) {
|
||||||
const rectGraphic = this.rectGraphic;
|
const rectGraphic = this.rectGraphic;
|
||||||
const fillColor = platformConsts.rectColor;
|
rectGraphic.clear();
|
||||||
|
let fillColor = platformConsts.grey;
|
||||||
|
/* if(state instanceof IXiAnPlatformState){
|
||||||
|
if (state.trainberth) {
|
||||||
|
fillColor = platformConsts.yellow;
|
||||||
|
}
|
||||||
|
if (state.upSkipstop || state.downSkipstop) {
|
||||||
|
fillColor = platformConsts.blue;
|
||||||
|
}
|
||||||
|
} */
|
||||||
rectGraphic
|
rectGraphic
|
||||||
.clear()
|
.clear()
|
||||||
.lineStyle(platformConsts.lineWidth, new Color(fillColor))
|
.lineStyle(platformConsts.lineWidth, new Color(fillColor))
|
||||||
@ -24,6 +33,7 @@ class RectGraphic extends Container {
|
|||||||
this.rectGraphic.clear();
|
this.rectGraphic.clear();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
//子元素--门
|
||||||
class DoorGraphic extends Container {
|
class DoorGraphic extends Container {
|
||||||
static Type = 'Door';
|
static Type = 'Door';
|
||||||
doorGraphic;
|
doorGraphic;
|
||||||
@ -35,53 +45,276 @@ class DoorGraphic extends Container {
|
|||||||
this.addChild(this.doorGraphic);
|
this.addChild(this.doorGraphic);
|
||||||
this.addChild(this.doorCloseGraphic);
|
this.addChild(this.doorCloseGraphic);
|
||||||
}
|
}
|
||||||
draw(platformConsts, doorConstsConfig) {
|
draw(stateData, ipRtuStusDown, platformConsts) {
|
||||||
|
const doorConsts = platformConsts.doorGraphic;
|
||||||
const doorGraphic = this.doorGraphic;
|
const doorGraphic = this.doorGraphic;
|
||||||
const doorCloseGraphic = this.doorCloseGraphic;
|
const doorCloseGraphic = this.doorCloseGraphic;
|
||||||
let lineColor = doorConstsConfig.doorGreen;
|
doorGraphic.clear();
|
||||||
doorGraphic.clear()
|
doorCloseGraphic.clear();
|
||||||
.lineStyle(platformConsts.lineWidth, new Color(lineColor))
|
let lineColor = doorConsts.doorGreen;
|
||||||
.moveTo(-platformConsts.width / 2 - platformConsts.lineWidth / 2, 0)
|
if (ipRtuStusDown) {
|
||||||
.lineTo(-doorConstsConfig.doorOpenSpacing, 0)
|
lineColor = doorConsts.blueShowColor;
|
||||||
.moveTo(doorConstsConfig.doorOpenSpacing, 0)
|
}
|
||||||
.lineTo(platformConsts.width / 2 + platformConsts.lineWidth / 2, 0);
|
else if (stateData.psdCut) {
|
||||||
|
lineColor = doorConsts.doorRed;
|
||||||
|
}
|
||||||
|
doorGraphic.lineStyle(platformConsts.lineWidth, new Color(lineColor));
|
||||||
|
doorGraphic.moveTo(-platformConsts.width / 2 - platformConsts.lineWidth / 2, 0);
|
||||||
|
doorGraphic.lineTo(-doorConsts.doorOpenSpacing, 0);
|
||||||
|
doorGraphic.moveTo(doorConsts.doorOpenSpacing, 0);
|
||||||
|
doorGraphic.lineTo(platformConsts.width / 2 + platformConsts.lineWidth / 2, 0);
|
||||||
//屏蔽门闭合
|
//屏蔽门闭合
|
||||||
doorCloseGraphic.clear()
|
doorCloseGraphic.lineStyle(platformConsts.lineWidth, new Color(lineColor));
|
||||||
.lineStyle(platformConsts.lineWidth, new Color(lineColor))
|
doorCloseGraphic.moveTo(-doorConsts.doorOpenSpacing, 0);
|
||||||
.moveTo(-doorConstsConfig.doorOpenSpacing, 0)
|
doorCloseGraphic.lineTo(doorConsts.doorOpenSpacing, 0);
|
||||||
.lineTo(doorConstsConfig.doorOpenSpacing, 0);
|
|
||||||
}
|
}
|
||||||
clear() {
|
clear() {
|
||||||
this.doorGraphic.clear();
|
this.doorGraphic.clear();
|
||||||
this.doorCloseGraphic.clear();
|
this.doorCloseGraphic.clear();
|
||||||
}
|
}
|
||||||
|
changeState(stateData) {
|
||||||
|
if (stateData.psdOpen) {
|
||||||
|
this.doorCloseGraphic.visible = false;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
this.doorCloseGraphic.visible = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//子元素--字符
|
||||||
|
class CodeGraph extends Container {
|
||||||
|
static Type = 'Code';
|
||||||
|
character = new VectorText(''); //扣车H
|
||||||
|
runLevel = new VectorText(''); //运行等级
|
||||||
|
runTime = new VectorText(''); //运行时间
|
||||||
|
stopTime = new VectorText(''); //停站时间
|
||||||
|
circle = new Graphics();
|
||||||
|
constructor(platformConsts) {
|
||||||
|
super();
|
||||||
|
this.addChild(this.character);
|
||||||
|
this.addChild(this.runLevel);
|
||||||
|
this.addChild(this.circle);
|
||||||
|
this.addChild(this.stopTime);
|
||||||
|
this.addChild(this.runTime);
|
||||||
|
const codeConsts = platformConsts.codeGraphic;
|
||||||
|
this.character.setVectorFontSize(codeConsts.besideFontSize);
|
||||||
|
this.runLevel.setVectorFontSize(codeConsts.besideFontSize);
|
||||||
|
this.stopTime.setVectorFontSize(codeConsts.besideFontSize);
|
||||||
|
this.runTime.setVectorFontSize(codeConsts.besideFontSize);
|
||||||
|
}
|
||||||
|
draw(platformConsts) {
|
||||||
|
const codeConsts = platformConsts.codeGraphic;
|
||||||
|
//扣车
|
||||||
|
const character = this.character;
|
||||||
|
character.text = 'H';
|
||||||
|
character.anchor.set(0.5);
|
||||||
|
character.position.set(-platformConsts.width / 2 -
|
||||||
|
platformConsts.lineWidth / 2 -
|
||||||
|
(codeConsts.besideSpacing * 2) / 3, (platformConsts.height * 3) / 4);
|
||||||
|
character.style.fill = codeConsts.whiteNumbers;
|
||||||
|
const circle = this.circle;
|
||||||
|
circle.clear();
|
||||||
|
circle.lineStyle(0.5, codeConsts.whiteCircle);
|
||||||
|
circle.drawCircle(0, 0, codeConsts.circleRadius);
|
||||||
|
circle.position.set(-platformConsts.width / 2 -
|
||||||
|
platformConsts.lineWidth / 2 -
|
||||||
|
(codeConsts.besideSpacing * 4) / 3, (platformConsts.height * 3) / 5);
|
||||||
|
//区间运行等级状态
|
||||||
|
const runLevel = this.runLevel;
|
||||||
|
runLevel.anchor.set(0.5);
|
||||||
|
runLevel.position.set(platformConsts.width / 2 +
|
||||||
|
platformConsts.lineWidth / 2 +
|
||||||
|
3 * codeConsts.besideSpacing, -codeConsts.besideSpacing);
|
||||||
|
runLevel.style.fill = codeConsts.whiteNumbers;
|
||||||
|
//区间运行时间
|
||||||
|
const runTime = this.runTime;
|
||||||
|
runTime.anchor.set(0.5);
|
||||||
|
runTime.position.set(platformConsts.width / 2 +
|
||||||
|
platformConsts.lineWidth / 2 +
|
||||||
|
codeConsts.besideSpacing, -codeConsts.besideSpacing);
|
||||||
|
runTime.style.fill = codeConsts.whiteNumbers;
|
||||||
|
//停站时间
|
||||||
|
const stopTime = this.stopTime;
|
||||||
|
stopTime.anchor.set(0.5);
|
||||||
|
stopTime.position.set(platformConsts.width / 2 +
|
||||||
|
platformConsts.lineWidth / 2 +
|
||||||
|
codeConsts.besideSpacing, codeConsts.besideSpacing);
|
||||||
|
stopTime.style.fill = codeConsts.whiteNumbers;
|
||||||
|
character.visible = false;
|
||||||
|
circle.visible = false;
|
||||||
|
runLevel.visible = false;
|
||||||
|
stopTime.visible = false;
|
||||||
|
runTime.visible = false;
|
||||||
|
}
|
||||||
|
clear() {
|
||||||
|
this.character.destroy();
|
||||||
|
}
|
||||||
|
changeState(stateData, platformConsts) {
|
||||||
|
const codeConsts = platformConsts.codeGraphic;
|
||||||
|
if (stateData.upHold ||
|
||||||
|
stateData.upOccHold ||
|
||||||
|
stateData.downHold ||
|
||||||
|
stateData.downOccHold) {
|
||||||
|
this.character.text = 'H';
|
||||||
|
this.character.visible = true;
|
||||||
|
this.circle.visible = true;
|
||||||
|
//上行扣车
|
||||||
|
if (stateData.upHold) {
|
||||||
|
this.character.style.fill = codeConsts.HCharYellow;
|
||||||
|
}
|
||||||
|
if (stateData.upOccHold) {
|
||||||
|
this.character.style.fill = codeConsts.HCharWhite;
|
||||||
|
}
|
||||||
|
if (stateData.upHold && stateData.upOccHold) {
|
||||||
|
this.character.style.fill = codeConsts.HCharRed;
|
||||||
|
}
|
||||||
|
//下行扣车
|
||||||
|
if (stateData.downHold) {
|
||||||
|
this.character.style.fill = codeConsts.HCharYellow;
|
||||||
|
}
|
||||||
|
if (stateData.downOccHold) {
|
||||||
|
this.character.style.fill = codeConsts.HCharWhite;
|
||||||
|
}
|
||||||
|
if (stateData.downHold && stateData.downOccHold) {
|
||||||
|
this.character.style.fill = codeConsts.HCharRed;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//运行等级
|
||||||
|
if (stateData.nextSectionRunLevel) {
|
||||||
|
this.runLevel.visible = false;
|
||||||
|
this.runLevel.text = stateData.nextSectionRunLevel;
|
||||||
|
}
|
||||||
|
//运行时间
|
||||||
|
if (stateData.nextSectionRunTime) {
|
||||||
|
this.runTime.visible = true;
|
||||||
|
this.runTime.text = stateData.nextSectionRunTime;
|
||||||
|
}
|
||||||
|
//停站时间
|
||||||
|
if (stateData.stopTime) {
|
||||||
|
this.stopTime.visible = true;
|
||||||
|
this.stopTime.text = stateData.stopTime;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//子元素--站台旁菱形图标
|
||||||
|
class LozengeGraphic extends Container {
|
||||||
|
static Type = 'lozengeGraphic';
|
||||||
|
lozengeGraphic;
|
||||||
|
constructor() {
|
||||||
|
super();
|
||||||
|
this.lozengeGraphic = new Graphics();
|
||||||
|
this.addChild(this.lozengeGraphic);
|
||||||
|
}
|
||||||
|
draw(platformConsts) {
|
||||||
|
const LozengeConsts = platformConsts.lozengeGraphic;
|
||||||
|
const lozengeGraphic = this.lozengeGraphic;
|
||||||
|
lozengeGraphic.clear();
|
||||||
|
lozengeGraphic.lineStyle(1, new Color(LozengeConsts.lozengeRed));
|
||||||
|
lozengeGraphic.beginFill(LozengeConsts.lozengeRed, 1);
|
||||||
|
lozengeGraphic.drawRect(0, 0, platformConsts.height / 4, platformConsts.height / 4);
|
||||||
|
lozengeGraphic.endFill();
|
||||||
|
const rect = new Rectangle(0, 0, platformConsts.height / 4, platformConsts.height / 4);
|
||||||
|
lozengeGraphic.pivot = getRectangleCenter(rect);
|
||||||
|
lozengeGraphic.rotation = Math.PI / 4;
|
||||||
|
lozengeGraphic.visible = false;
|
||||||
|
}
|
||||||
|
clear() {
|
||||||
|
this.lozengeGraphic.clear();
|
||||||
|
}
|
||||||
|
changeState(stateData) {
|
||||||
|
if (stateData.emergstop) {
|
||||||
|
this.lozengeGraphic.visible = true;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
this.lozengeGraphic.visible = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
class Platform extends JlGraphic {
|
class Platform extends JlGraphic {
|
||||||
static Type = 'Platform';
|
static Type = 'Platform';
|
||||||
categoryType;
|
categoryType;
|
||||||
rectGraphic = new RectGraphic();
|
rectGraphic = new RectGraphic();
|
||||||
doorGraphic = new DoorGraphic();
|
doorGraphic;
|
||||||
|
lozengeGraphic;
|
||||||
|
codeGraph;
|
||||||
constructor(categoryType) {
|
constructor(categoryType) {
|
||||||
super(Platform.Type);
|
super(Platform.Type);
|
||||||
this.categoryType = categoryType;
|
this.categoryType = categoryType;
|
||||||
this.addChild(this.rectGraphic);
|
this.addChild(this.rectGraphic);
|
||||||
this.addChild(this.doorGraphic);
|
if (categoryType == CategoryType.XiAn) {
|
||||||
|
const platformConsts = platformConstsMap.get(this.categoryType);
|
||||||
|
this.doorGraphic = new DoorGraphic();
|
||||||
|
this.lozengeGraphic = new LozengeGraphic();
|
||||||
|
this.codeGraph = new CodeGraph(platformConsts);
|
||||||
|
this.addChild(this.doorGraphic);
|
||||||
|
this.addChild(this.codeGraph);
|
||||||
|
this.addChild(this.lozengeGraphic);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
get datas() {
|
get datas() {
|
||||||
return this.getDatas();
|
return this.getDatas();
|
||||||
}
|
}
|
||||||
get states() {
|
get states() {
|
||||||
return this.getStates();
|
if (this.categoryType == CategoryType.BeiJing) {
|
||||||
|
return this.getStates();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return this.getStates();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
doRepaint() {
|
doRepaint() {
|
||||||
this.doorGraphic.clear();
|
this.doorGraphic?.clear();
|
||||||
const platformConsts = platformConstsMap.get(this.categoryType);
|
const platformConsts = platformConstsMap.get(this.categoryType);
|
||||||
if (platformConsts) {
|
this.rectGraphic.draw(this.states, platformConsts);
|
||||||
this.rectGraphic.draw(platformConsts);
|
if (this.doorGraphic) {
|
||||||
if (platformConsts.doorGraphic) {
|
const states = this.states;
|
||||||
this.doorGraphic.draw(platformConsts, platformConsts.doorGraphic);
|
/* const station = this.getGraphicApp().queryStore.queryByCodeAndType<Station>(
|
||||||
}
|
states.rtuId > 9 ? '' + states.rtuId : '0' + states.rtuId,
|
||||||
|
Station.Type
|
||||||
|
); */
|
||||||
|
this.doorGraphic.draw(states, false, platformConsts);
|
||||||
|
const doorConsts = platformConsts.doorGraphic;
|
||||||
|
this.doorGraphic.position.set(0, -platformConsts.height / 2 - doorConsts.doorPlatformSpacing);
|
||||||
}
|
}
|
||||||
|
if (this.codeGraph) {
|
||||||
|
this.codeGraph.draw(platformConsts);
|
||||||
|
this.codeGraph.position.set(0, 0);
|
||||||
|
}
|
||||||
|
if (this.lozengeGraphic) {
|
||||||
|
const LozengeConsts = platformConsts.lozengeGraphic;
|
||||||
|
this.lozengeGraphic.draw(platformConsts);
|
||||||
|
this.lozengeGraphic.position.set(0, -platformConsts.height / 2 -
|
||||||
|
LozengeConsts.doorPlatformSpacing -
|
||||||
|
platformConsts.height / 3);
|
||||||
|
}
|
||||||
|
//站台方向
|
||||||
|
if (this.datas.direction == 'down') {
|
||||||
|
const psChange = [
|
||||||
|
this.doorGraphic,
|
||||||
|
this.lozengeGraphic,
|
||||||
|
this.codeGraph?.children[0],
|
||||||
|
this.codeGraph?.children[1],
|
||||||
|
this.codeGraph?.children[3],
|
||||||
|
this.codeGraph?.children[4],
|
||||||
|
];
|
||||||
|
psChange.forEach((g) => {
|
||||||
|
if (g) {
|
||||||
|
g.position.copyFrom(calculateMirrorPoint(new Point(0, 0), g.position));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
const codeConsts = platformConsts.codeGraphic;
|
||||||
|
this.codeGraph?.children[2].position.set(platformConsts.width / 2 +
|
||||||
|
platformConsts.lineWidth / 2 +
|
||||||
|
(codeConsts.besideSpacing * 4) / 3, (-platformConsts.height * 10) / 11);
|
||||||
|
}
|
||||||
|
this.changeState();
|
||||||
|
}
|
||||||
|
changeState() {
|
||||||
|
const platformConsts = platformConstsMap.get(this.categoryType);
|
||||||
|
const states = this.states;
|
||||||
|
this.doorGraphic?.changeState(states);
|
||||||
|
this.lozengeGraphic?.changeState(states);
|
||||||
|
this.codeGraph?.changeState(states, platformConsts);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
class PlatformTemplate extends JlGraphicTemplate {
|
class PlatformTemplate extends JlGraphicTemplate {
|
||||||
@ -98,4 +331,4 @@ class PlatformTemplate extends JlGraphicTemplate {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export { Platform, PlatformTemplate };
|
export { DoorGraphic, Platform, PlatformTemplate };
|
||||||
|
80
components/Platform/PlatformConfig.d.ts
vendored
80
components/Platform/PlatformConfig.d.ts
vendored
@ -1,23 +1,54 @@
|
|||||||
import { GraphicData, GraphicState } from "jl-graphic";
|
import { GraphicData, GraphicState } from "jl-graphic";
|
||||||
export declare enum CategoryType {
|
export declare enum CategoryType {
|
||||||
JK = "JK",// 交控(11)
|
BeiJing = "BeiJing",//北京
|
||||||
TH = "TH",// 通号(12)
|
XiAn = "XiAn"
|
||||||
ZDWX = "ZDWX"
|
|
||||||
}
|
}
|
||||||
export interface PlatformConstsConfig {
|
export interface PlatformConstsConfig {
|
||||||
width: number;
|
width: number;
|
||||||
height: number;
|
height: number;
|
||||||
lineWidth: number;
|
lineWidth: number;
|
||||||
rectColor: string;
|
grey: string;
|
||||||
|
yellow: string;
|
||||||
|
blue: string;
|
||||||
doorGraphic?: DoorConstsConfig;
|
doorGraphic?: DoorConstsConfig;
|
||||||
|
codeGraphic?: CodeConstsConfig;
|
||||||
|
lozengeGraphic?: LozengeConstsConfig;
|
||||||
}
|
}
|
||||||
export interface DoorConstsConfig {
|
export interface DoorConstsConfig {
|
||||||
doorOpenSpacing: number;
|
|
||||||
doorGreen: string;
|
doorGreen: string;
|
||||||
|
doorRed: string;
|
||||||
|
doorBlue: string;
|
||||||
|
doorOpenSpacing: number;
|
||||||
|
blueShowColor: string;
|
||||||
|
doorPlatformSpacing: number;
|
||||||
|
}
|
||||||
|
export interface CodeConstsConfig {
|
||||||
|
circleRadius: number;
|
||||||
|
besideSpacing: number;
|
||||||
|
besideFontSize: number;
|
||||||
|
whiteNumbers: string;
|
||||||
|
whiteCircle: string;
|
||||||
|
HCharYellow: string;
|
||||||
|
HCharWhite: string;
|
||||||
|
HCharRed: string;
|
||||||
|
}
|
||||||
|
export interface LozengeConstsConfig {
|
||||||
|
lozengeRed?: string;
|
||||||
|
doorPlatformSpacing: number;
|
||||||
}
|
}
|
||||||
export declare const platformConstsMap: Map<CategoryType, PlatformConstsConfig>;
|
export declare const platformConstsMap: Map<CategoryType, PlatformConstsConfig>;
|
||||||
|
declare enum TypeOfPlatform {
|
||||||
|
Unknown = 0,
|
||||||
|
up = 1,
|
||||||
|
down = 2
|
||||||
|
}
|
||||||
export interface IPlatformData extends GraphicData {
|
export interface IPlatformData extends GraphicData {
|
||||||
code: string;
|
code: string;
|
||||||
|
hasdoor?: boolean;
|
||||||
|
direction?: string;
|
||||||
|
up?: boolean;
|
||||||
|
type?: TypeOfPlatform;
|
||||||
|
centralizedStation?: number;
|
||||||
refStation: string;
|
refStation: string;
|
||||||
refSection: string;
|
refSection: string;
|
||||||
refEsbRelayCode?: string;
|
refEsbRelayCode?: string;
|
||||||
@ -25,6 +56,43 @@ export interface IPlatformData extends GraphicData {
|
|||||||
copyFrom(data: IPlatformData): void;
|
copyFrom(data: IPlatformData): void;
|
||||||
eq(other: IPlatformData): boolean;
|
eq(other: IPlatformData): boolean;
|
||||||
}
|
}
|
||||||
export interface IPlatformState extends GraphicState {
|
export interface IXiAnPlatformState extends GraphicState {
|
||||||
|
get emergstop(): boolean;
|
||||||
|
set emergstop(v: boolean);
|
||||||
|
get trainberth(): boolean;
|
||||||
|
set trainberth(v: boolean);
|
||||||
|
get close(): boolean;
|
||||||
|
set close(v: boolean);
|
||||||
|
get upHold(): boolean;
|
||||||
|
set upHold(v: boolean);
|
||||||
|
get downHold(): boolean;
|
||||||
|
set downHold(v: boolean);
|
||||||
|
get upOccHold(): boolean;
|
||||||
|
set upOccHold(v: boolean);
|
||||||
|
get downOccHold(): boolean;
|
||||||
|
set downOccHold(v: boolean);
|
||||||
|
get psdOpen(): boolean;
|
||||||
|
set psdOpen(v: boolean);
|
||||||
|
get psdCut(): boolean;
|
||||||
|
set psdCut(v: boolean);
|
||||||
|
get upSkipstop(): boolean;
|
||||||
|
set upSkipstop(v: boolean);
|
||||||
|
get downSkipstop(): boolean;
|
||||||
|
set downSkipstop(v: boolean);
|
||||||
|
get upTrainSkipstop(): boolean;
|
||||||
|
set upTrainSkipstop(v: boolean);
|
||||||
|
get downTrainSkipstop(): boolean;
|
||||||
|
set downTrainSkipstop(v: boolean);
|
||||||
|
get nextSectionRunTime(): number;
|
||||||
|
set nextSectionRunTime(v: number);
|
||||||
|
get nextSectionRunLevel(): number;
|
||||||
|
set nextSectionRunLevel(v: number);
|
||||||
|
get stopTime(): number;
|
||||||
|
set stopTime(v: number);
|
||||||
|
get rtuId(): number;
|
||||||
|
set rtuId(v: number);
|
||||||
|
}
|
||||||
|
export interface IBriJingPlatformState extends GraphicState {
|
||||||
id?: number;
|
id?: number;
|
||||||
}
|
}
|
||||||
|
export {};
|
||||||
|
@ -1,25 +1,53 @@
|
|||||||
var CategoryType;
|
var CategoryType;
|
||||||
(function (CategoryType) {
|
(function (CategoryType) {
|
||||||
CategoryType["JK"] = "JK";
|
CategoryType["BeiJing"] = "BeiJing";
|
||||||
CategoryType["TH"] = "TH";
|
CategoryType["XiAn"] = "XiAn";
|
||||||
CategoryType["ZDWX"] = "ZDWX";
|
|
||||||
})(CategoryType || (CategoryType = {}));
|
})(CategoryType || (CategoryType = {}));
|
||||||
const jkConsts = {
|
const BeiJingConsts = {
|
||||||
width: 80,
|
|
||||||
height: 30,
|
|
||||||
lineWidth: 3,
|
|
||||||
rectColor: '0xffffff',
|
|
||||||
};
|
|
||||||
const thConsts = {
|
|
||||||
width: 90,
|
width: 90,
|
||||||
height: 20,
|
height: 20,
|
||||||
lineWidth: 3,
|
lineWidth: 3,
|
||||||
rectColor: '#f00',
|
grey: '0x7F7F7F',
|
||||||
|
yellow: '0xfbff00',
|
||||||
|
blue: '0xC0C0FE',
|
||||||
|
};
|
||||||
|
const XiAnConsts = {
|
||||||
|
width: 90,
|
||||||
|
height: 20,
|
||||||
|
lineWidth: 3,
|
||||||
|
grey: '0x7F7F7F',
|
||||||
|
yellow: '0xfbff00',
|
||||||
|
blue: '0xC0C0FE',
|
||||||
|
blueShowColor: '0x3149c3',
|
||||||
doorGraphic: {
|
doorGraphic: {
|
||||||
|
blueShowColor: '0x3149c3',
|
||||||
doorOpenSpacing: 15,
|
doorOpenSpacing: 15,
|
||||||
doorGreen: '0x00FF00',
|
doorGreen: '0x00FF00',
|
||||||
}
|
doorRed: '0xff0000',
|
||||||
|
doorBlue: '0x4048C4',
|
||||||
|
doorPlatformSpacing: 10,
|
||||||
|
},
|
||||||
|
codeGraphic: {
|
||||||
|
circleRadius: 1,
|
||||||
|
besideSpacing: 10,
|
||||||
|
besideFontSize: 12,
|
||||||
|
whiteNumbers: '0xffffff',
|
||||||
|
whiteCircle: '0xffffff',
|
||||||
|
HCharYellow: '0xfbff00',
|
||||||
|
HCharWhite: '0xffffff',
|
||||||
|
HCharRed: '0xff0000',
|
||||||
|
},
|
||||||
|
lozengeGraphic: {
|
||||||
|
lozengeRed: '0xff0000',
|
||||||
|
doorPlatformSpacing: 10,
|
||||||
|
},
|
||||||
};
|
};
|
||||||
const platformConstsMap = new Map([[CategoryType.JK, jkConsts], [CategoryType.TH, thConsts]]);
|
const platformConstsMap = new Map([[CategoryType.BeiJing, BeiJingConsts], [CategoryType.XiAn, XiAnConsts]]);
|
||||||
|
var TypeOfPlatform;
|
||||||
|
(function (TypeOfPlatform) {
|
||||||
|
TypeOfPlatform[TypeOfPlatform["Unknown"] = 0] = "Unknown";
|
||||||
|
TypeOfPlatform[TypeOfPlatform["up"] = 1] = "up";
|
||||||
|
TypeOfPlatform[TypeOfPlatform["down"] = 2] = "down";
|
||||||
|
})(TypeOfPlatform || (TypeOfPlatform = {}));
|
||||||
|
|
||||||
export { CategoryType, platformConstsMap };
|
export { CategoryType, platformConstsMap };
|
||||||
|
@ -1,7 +1,8 @@
|
|||||||
import { GraphicState, JlGraphic, JlGraphicTemplate, distance2, getRectangleCenter } from "jl-graphic";
|
import { JlGraphic, JlGraphicTemplate, VectorText, calculateMirrorPoint, distance2, getRectangleCenter } from "jl-graphic";
|
||||||
import { Container,Graphics,Rectangle,Color } from 'pixi.js'
|
import { Container,Graphics,Rectangle,Color,Point } from 'pixi.js'
|
||||||
import {CategoryType, DoorConstsConfig, IPlatformData, IPlatformState, PlatformConstsConfig, platformConstsMap }from './PlatformConfig'
|
import {CategoryType, CodeConstsConfig, DoorConstsConfig, IBriJingPlatformState, IPlatformData, IXiAnPlatformState, LozengeConstsConfig, PlatformConstsConfig, platformConstsMap }from './PlatformConfig'
|
||||||
|
|
||||||
|
type IPlatformState=IBriJingPlatformState|IXiAnPlatformState
|
||||||
class RectGraphic extends Container {
|
class RectGraphic extends Container {
|
||||||
static Type = 'RectPlatForm';
|
static Type = 'RectPlatForm';
|
||||||
rectGraphic: Graphics;
|
rectGraphic: Graphics;
|
||||||
@ -10,9 +11,18 @@ class RectGraphic extends Container {
|
|||||||
this.rectGraphic = new Graphics();
|
this.rectGraphic = new Graphics();
|
||||||
this.addChild(this.rectGraphic);
|
this.addChild(this.rectGraphic);
|
||||||
}
|
}
|
||||||
draw(platformConsts: PlatformConstsConfig): void {
|
draw(state: IPlatformState,platformConsts: PlatformConstsConfig): void {
|
||||||
const rectGraphic = this.rectGraphic;
|
const rectGraphic = this.rectGraphic;
|
||||||
const fillColor = platformConsts.rectColor;
|
rectGraphic.clear();
|
||||||
|
let fillColor = platformConsts.grey;
|
||||||
|
/* if(state instanceof IXiAnPlatformState){
|
||||||
|
if (state.trainberth) {
|
||||||
|
fillColor = platformConsts.yellow;
|
||||||
|
}
|
||||||
|
if (state.upSkipstop || state.downSkipstop) {
|
||||||
|
fillColor = platformConsts.blue;
|
||||||
|
}
|
||||||
|
} */
|
||||||
rectGraphic
|
rectGraphic
|
||||||
.clear()
|
.clear()
|
||||||
.lineStyle(platformConsts.lineWidth, new Color(fillColor))
|
.lineStyle(platformConsts.lineWidth, new Color(fillColor))
|
||||||
@ -27,7 +37,8 @@ class RectGraphic extends Container {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class DoorGraphic extends Container {
|
//子元素--门
|
||||||
|
export class DoorGraphic extends Container {
|
||||||
static Type = 'Door';
|
static Type = 'Door';
|
||||||
doorGraphic: Graphics;
|
doorGraphic: Graphics;
|
||||||
doorCloseGraphic: Graphics;
|
doorCloseGraphic: Graphics;
|
||||||
@ -38,61 +49,317 @@ class DoorGraphic extends Container {
|
|||||||
this.addChild(this.doorGraphic);
|
this.addChild(this.doorGraphic);
|
||||||
this.addChild(this.doorCloseGraphic);
|
this.addChild(this.doorCloseGraphic);
|
||||||
}
|
}
|
||||||
draw(platformConsts: PlatformConstsConfig,doorConstsConfig:DoorConstsConfig): void {
|
draw(stateData: IXiAnPlatformState, ipRtuStusDown: boolean,platformConsts:PlatformConstsConfig): void {
|
||||||
|
const doorConsts=platformConsts.doorGraphic as DoorConstsConfig
|
||||||
const doorGraphic = this.doorGraphic;
|
const doorGraphic = this.doorGraphic;
|
||||||
const doorCloseGraphic = this.doorCloseGraphic;
|
const doorCloseGraphic = this.doorCloseGraphic;
|
||||||
let lineColor = doorConstsConfig.doorGreen;
|
doorGraphic.clear();
|
||||||
doorGraphic.clear()
|
doorCloseGraphic.clear();
|
||||||
.lineStyle(platformConsts.lineWidth, new Color(lineColor))
|
let lineColor = doorConsts.doorGreen;
|
||||||
.moveTo(
|
if (ipRtuStusDown) {
|
||||||
|
lineColor = doorConsts.blueShowColor;
|
||||||
|
} else if (stateData.psdCut) {
|
||||||
|
lineColor = doorConsts.doorRed;
|
||||||
|
}
|
||||||
|
doorGraphic.lineStyle(platformConsts.lineWidth, new Color(lineColor));
|
||||||
|
doorGraphic.moveTo(
|
||||||
-platformConsts.width / 2 - platformConsts.lineWidth / 2,
|
-platformConsts.width / 2 - platformConsts.lineWidth / 2,
|
||||||
0
|
0
|
||||||
)
|
);
|
||||||
.lineTo(-doorConstsConfig.doorOpenSpacing, 0)
|
doorGraphic.lineTo(-doorConsts.doorOpenSpacing, 0);
|
||||||
.moveTo(doorConstsConfig.doorOpenSpacing, 0)
|
doorGraphic.moveTo(doorConsts.doorOpenSpacing, 0);
|
||||||
.lineTo(
|
doorGraphic.lineTo(
|
||||||
platformConsts.width / 2 + platformConsts.lineWidth / 2,
|
platformConsts.width / 2 + platformConsts.lineWidth / 2,
|
||||||
0
|
0
|
||||||
);
|
);
|
||||||
//屏蔽门闭合
|
//屏蔽门闭合
|
||||||
doorCloseGraphic.clear()
|
doorCloseGraphic.lineStyle(platformConsts.lineWidth, new Color(lineColor));
|
||||||
.lineStyle(platformConsts.lineWidth, new Color(lineColor))
|
doorCloseGraphic.moveTo(-doorConsts.doorOpenSpacing, 0);
|
||||||
.moveTo(-doorConstsConfig.doorOpenSpacing, 0)
|
doorCloseGraphic.lineTo(doorConsts.doorOpenSpacing, 0);
|
||||||
.lineTo(doorConstsConfig.doorOpenSpacing, 0)
|
|
||||||
}
|
}
|
||||||
clear(): void {
|
clear(): void {
|
||||||
this.doorGraphic.clear();
|
this.doorGraphic.clear();
|
||||||
this.doorCloseGraphic.clear();
|
this.doorCloseGraphic.clear();
|
||||||
}
|
}
|
||||||
|
changeState(stateData: IXiAnPlatformState): void {
|
||||||
|
if (stateData.psdOpen) {
|
||||||
|
this.doorCloseGraphic.visible = false;
|
||||||
|
} else {
|
||||||
|
this.doorCloseGraphic.visible = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//子元素--字符
|
||||||
|
class CodeGraph extends Container {
|
||||||
|
static Type = 'Code';
|
||||||
|
character: VectorText = new VectorText(''); //扣车H
|
||||||
|
runLevel: VectorText = new VectorText(''); //运行等级
|
||||||
|
runTime: VectorText = new VectorText(''); //运行时间
|
||||||
|
stopTime: VectorText = new VectorText(''); //停站时间
|
||||||
|
circle: Graphics = new Graphics();
|
||||||
|
constructor(platformConsts:PlatformConstsConfig) {
|
||||||
|
super();
|
||||||
|
this.addChild(this.character);
|
||||||
|
this.addChild(this.runLevel);
|
||||||
|
this.addChild(this.circle);
|
||||||
|
this.addChild(this.stopTime);
|
||||||
|
this.addChild(this.runTime);
|
||||||
|
const codeConsts=platformConsts.codeGraphic as CodeConstsConfig
|
||||||
|
this.character.setVectorFontSize(codeConsts.besideFontSize);
|
||||||
|
this.runLevel.setVectorFontSize(codeConsts.besideFontSize);
|
||||||
|
this.stopTime.setVectorFontSize(codeConsts.besideFontSize);
|
||||||
|
this.runTime.setVectorFontSize(codeConsts.besideFontSize);
|
||||||
|
}
|
||||||
|
draw(platformConsts:PlatformConstsConfig): void {
|
||||||
|
const codeConsts=platformConsts.codeGraphic as CodeConstsConfig
|
||||||
|
//扣车
|
||||||
|
const character = this.character;
|
||||||
|
character.text = 'H';
|
||||||
|
character.anchor.set(0.5);
|
||||||
|
character.position.set(
|
||||||
|
-platformConsts.width / 2 -
|
||||||
|
platformConsts.lineWidth / 2 -
|
||||||
|
(codeConsts.besideSpacing * 2) / 3,
|
||||||
|
(platformConsts.height * 3) / 4
|
||||||
|
);
|
||||||
|
character.style.fill = codeConsts.whiteNumbers;
|
||||||
|
const circle = this.circle;
|
||||||
|
circle.clear();
|
||||||
|
circle.lineStyle(0.5, codeConsts.whiteCircle);
|
||||||
|
circle.drawCircle(0, 0, codeConsts.circleRadius);
|
||||||
|
circle.position.set(
|
||||||
|
-platformConsts.width / 2 -
|
||||||
|
platformConsts.lineWidth / 2 -
|
||||||
|
(codeConsts.besideSpacing * 4) / 3,
|
||||||
|
(platformConsts.height * 3) / 5
|
||||||
|
);
|
||||||
|
//区间运行等级状态
|
||||||
|
const runLevel = this.runLevel;
|
||||||
|
runLevel.anchor.set(0.5);
|
||||||
|
runLevel.position.set(
|
||||||
|
platformConsts.width / 2 +
|
||||||
|
platformConsts.lineWidth / 2 +
|
||||||
|
3 * codeConsts.besideSpacing,
|
||||||
|
-codeConsts.besideSpacing
|
||||||
|
);
|
||||||
|
runLevel.style.fill = codeConsts.whiteNumbers;
|
||||||
|
//区间运行时间
|
||||||
|
const runTime = this.runTime;
|
||||||
|
runTime.anchor.set(0.5);
|
||||||
|
runTime.position.set(
|
||||||
|
platformConsts.width / 2 +
|
||||||
|
platformConsts.lineWidth / 2 +
|
||||||
|
codeConsts.besideSpacing,
|
||||||
|
-codeConsts.besideSpacing
|
||||||
|
);
|
||||||
|
runTime.style.fill = codeConsts.whiteNumbers;
|
||||||
|
//停站时间
|
||||||
|
const stopTime = this.stopTime;
|
||||||
|
stopTime.anchor.set(0.5);
|
||||||
|
stopTime.position.set(
|
||||||
|
platformConsts.width / 2 +
|
||||||
|
platformConsts.lineWidth / 2 +
|
||||||
|
codeConsts.besideSpacing,
|
||||||
|
codeConsts.besideSpacing
|
||||||
|
);
|
||||||
|
stopTime.style.fill = codeConsts.whiteNumbers;
|
||||||
|
character.visible = false;
|
||||||
|
circle.visible = false;
|
||||||
|
runLevel.visible = false;
|
||||||
|
stopTime.visible = false;
|
||||||
|
runTime.visible = false;
|
||||||
|
}
|
||||||
|
clear(): void {
|
||||||
|
this.character.destroy();
|
||||||
|
}
|
||||||
|
changeState(stateData: IXiAnPlatformState,platformConsts:PlatformConstsConfig): void {
|
||||||
|
const codeConsts=platformConsts.codeGraphic as CodeConstsConfig
|
||||||
|
if (
|
||||||
|
stateData.upHold ||
|
||||||
|
stateData.upOccHold ||
|
||||||
|
stateData.downHold ||
|
||||||
|
stateData.downOccHold
|
||||||
|
) {
|
||||||
|
this.character.text = 'H';
|
||||||
|
this.character.visible = true;
|
||||||
|
this.circle.visible = true;
|
||||||
|
//上行扣车
|
||||||
|
if (stateData.upHold) {
|
||||||
|
this.character.style.fill = codeConsts.HCharYellow;
|
||||||
|
}
|
||||||
|
if (stateData.upOccHold) {
|
||||||
|
this.character.style.fill = codeConsts.HCharWhite;
|
||||||
|
}
|
||||||
|
if (stateData.upHold && stateData.upOccHold) {
|
||||||
|
this.character.style.fill = codeConsts.HCharRed;
|
||||||
|
}
|
||||||
|
//下行扣车
|
||||||
|
if (stateData.downHold) {
|
||||||
|
this.character.style.fill = codeConsts.HCharYellow;
|
||||||
|
}
|
||||||
|
if (stateData.downOccHold) {
|
||||||
|
this.character.style.fill = codeConsts.HCharWhite;
|
||||||
|
}
|
||||||
|
if (stateData.downHold && stateData.downOccHold) {
|
||||||
|
this.character.style.fill = codeConsts.HCharRed;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//运行等级
|
||||||
|
if (stateData.nextSectionRunLevel) {
|
||||||
|
this.runLevel.visible = false;
|
||||||
|
this.runLevel.text = stateData.nextSectionRunLevel;
|
||||||
|
}
|
||||||
|
//运行时间
|
||||||
|
if (stateData.nextSectionRunTime) {
|
||||||
|
this.runTime.visible = true;
|
||||||
|
this.runTime.text = stateData.nextSectionRunTime;
|
||||||
|
}
|
||||||
|
//停站时间
|
||||||
|
if (stateData.stopTime) {
|
||||||
|
this.stopTime.visible = true;
|
||||||
|
this.stopTime.text = stateData.stopTime;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//子元素--站台旁菱形图标
|
||||||
|
class LozengeGraphic extends Container {
|
||||||
|
static Type = 'lozengeGraphic';
|
||||||
|
lozengeGraphic: Graphics;
|
||||||
|
constructor() {
|
||||||
|
super();
|
||||||
|
this.lozengeGraphic = new Graphics();
|
||||||
|
this.addChild(this.lozengeGraphic);
|
||||||
|
}
|
||||||
|
draw(platformConsts:PlatformConstsConfig): void {
|
||||||
|
const LozengeConsts=platformConsts.lozengeGraphic as LozengeConstsConfig
|
||||||
|
const lozengeGraphic = this.lozengeGraphic;
|
||||||
|
lozengeGraphic.clear();
|
||||||
|
lozengeGraphic.lineStyle(1, new Color(LozengeConsts.lozengeRed));
|
||||||
|
lozengeGraphic.beginFill(LozengeConsts.lozengeRed, 1);
|
||||||
|
lozengeGraphic.drawRect(
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
platformConsts.height / 4,
|
||||||
|
platformConsts.height / 4
|
||||||
|
);
|
||||||
|
lozengeGraphic.endFill();
|
||||||
|
const rect = new Rectangle(
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
platformConsts.height / 4,
|
||||||
|
platformConsts.height / 4
|
||||||
|
);
|
||||||
|
lozengeGraphic.pivot = getRectangleCenter(rect);
|
||||||
|
lozengeGraphic.rotation = Math.PI / 4;
|
||||||
|
lozengeGraphic.visible = false;
|
||||||
|
}
|
||||||
|
clear(): void {
|
||||||
|
this.lozengeGraphic.clear();
|
||||||
|
}
|
||||||
|
changeState(stateData: IXiAnPlatformState): void {
|
||||||
|
if (stateData.emergstop) {
|
||||||
|
this.lozengeGraphic.visible = true;
|
||||||
|
} else {
|
||||||
|
this.lozengeGraphic.visible = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export class Platform extends JlGraphic {
|
export class Platform extends JlGraphic {
|
||||||
static Type = 'Platform';
|
static Type = 'Platform';
|
||||||
private categoryType:CategoryType
|
private categoryType:CategoryType
|
||||||
rectGraphic: RectGraphic = new RectGraphic();
|
rectGraphic: RectGraphic = new RectGraphic();
|
||||||
doorGraphic: DoorGraphic = new DoorGraphic();
|
doorGraphic?: DoorGraphic;
|
||||||
|
lozengeGraphic?: LozengeGraphic;
|
||||||
|
codeGraph?: CodeGraph;
|
||||||
constructor(categoryType:CategoryType) {
|
constructor(categoryType:CategoryType) {
|
||||||
super(Platform.Type);
|
super(Platform.Type);
|
||||||
this.categoryType = categoryType
|
this.categoryType = categoryType
|
||||||
this.addChild(this.rectGraphic);
|
this.addChild(this.rectGraphic);
|
||||||
this.addChild(this.doorGraphic);
|
if(categoryType==CategoryType.XiAn){
|
||||||
|
const platformConsts=platformConstsMap.get(this.categoryType) as PlatformConstsConfig
|
||||||
|
this.doorGraphic = new DoorGraphic()
|
||||||
|
this.lozengeGraphic = new LozengeGraphic()
|
||||||
|
this.codeGraph = new CodeGraph(platformConsts)
|
||||||
|
this.addChild(this.doorGraphic);
|
||||||
|
this.addChild(this.codeGraph);
|
||||||
|
this.addChild(this.lozengeGraphic);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
get datas() {
|
get datas() {
|
||||||
return this.getDatas<IPlatformData>();
|
return this.getDatas<IPlatformData>();
|
||||||
}
|
}
|
||||||
get states(): IPlatformState {
|
get states(): IPlatformState {
|
||||||
return this.getStates<IPlatformState>();
|
if(this.categoryType==CategoryType.BeiJing){
|
||||||
|
return this.getStates<IBriJingPlatformState>();
|
||||||
|
}else{
|
||||||
|
return this.getStates<IXiAnPlatformState>();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
doRepaint(): void {
|
doRepaint(): void {
|
||||||
this.doorGraphic.clear();
|
this.doorGraphic?.clear();
|
||||||
const platformConsts=platformConstsMap.get(this.categoryType)
|
const platformConsts=platformConstsMap.get(this.categoryType) as PlatformConstsConfig
|
||||||
if(platformConsts){
|
this.rectGraphic.draw(this.states, platformConsts);
|
||||||
this.rectGraphic.draw(platformConsts);
|
if(this.doorGraphic){
|
||||||
if(platformConsts.doorGraphic){
|
const states=this.states as IXiAnPlatformState
|
||||||
this.doorGraphic.draw(platformConsts,platformConsts.doorGraphic)
|
/* const station = this.getGraphicApp().queryStore.queryByCodeAndType<Station>(
|
||||||
}
|
states.rtuId > 9 ? '' + states.rtuId : '0' + states.rtuId,
|
||||||
|
Station.Type
|
||||||
|
); */
|
||||||
|
this.doorGraphic.draw(states,false,platformConsts)
|
||||||
|
const doorConsts= platformConsts.doorGraphic as DoorConstsConfig
|
||||||
|
this.doorGraphic.position.set(
|
||||||
|
0,
|
||||||
|
-platformConsts.height / 2 -doorConsts.doorPlatformSpacing
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
if(this.codeGraph){
|
||||||
|
this.codeGraph.draw(platformConsts);
|
||||||
|
this.codeGraph.position.set(0, 0);
|
||||||
|
}
|
||||||
|
if(this.lozengeGraphic){
|
||||||
|
const LozengeConsts= platformConsts.lozengeGraphic as LozengeConstsConfig
|
||||||
|
this.lozengeGraphic.draw(platformConsts);
|
||||||
|
this.lozengeGraphic.position.set(
|
||||||
|
0,
|
||||||
|
-platformConsts.height / 2 -
|
||||||
|
LozengeConsts.doorPlatformSpacing -
|
||||||
|
platformConsts.height / 3
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
//站台方向
|
||||||
|
if (this.datas.direction == 'down') {
|
||||||
|
const psChange = [
|
||||||
|
this.doorGraphic,
|
||||||
|
this.lozengeGraphic,
|
||||||
|
this.codeGraph?.children[0],
|
||||||
|
this.codeGraph?.children[1],
|
||||||
|
this.codeGraph?.children[3],
|
||||||
|
this.codeGraph?.children[4],
|
||||||
|
];
|
||||||
|
psChange.forEach((g) => {
|
||||||
|
if(g){
|
||||||
|
g.position.copyFrom(calculateMirrorPoint(new Point(0, 0), g.position));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
const codeConsts=platformConsts.codeGraphic as CodeConstsConfig
|
||||||
|
this.codeGraph?.children[2].position.set(
|
||||||
|
platformConsts.width / 2 +
|
||||||
|
platformConsts.lineWidth / 2 +
|
||||||
|
(codeConsts.besideSpacing * 4) / 3,
|
||||||
|
(-platformConsts.height * 10) / 11
|
||||||
|
);
|
||||||
|
}
|
||||||
|
this.changeState();
|
||||||
|
}
|
||||||
|
changeState(): void {
|
||||||
|
const platformConsts=platformConstsMap.get(this.categoryType) as PlatformConstsConfig
|
||||||
|
const states=this.states as IXiAnPlatformState
|
||||||
|
this.doorGraphic?.changeState(states);
|
||||||
|
this.lozengeGraphic?.changeState(states);
|
||||||
|
this.codeGraph?.changeState(states,platformConsts);
|
||||||
}
|
}
|
||||||
/* buildRelation() {
|
/* buildRelation() {
|
||||||
const stationas = this.queryStore.queryByType<Station>(Station.Type);
|
const stationas = this.queryStore.queryByType<Station>(Station.Type);
|
||||||
|
@ -1,56 +1,146 @@
|
|||||||
import { GraphicData, GraphicState } from "jl-graphic";
|
import { GraphicData, GraphicState } from "jl-graphic";
|
||||||
|
|
||||||
export enum CategoryType {
|
export enum CategoryType {
|
||||||
JK = 'JK', // 交控(11)
|
BeiJing = 'BeiJing', //北京
|
||||||
TH = 'TH', // 通号(12)
|
XiAn = 'XiAn', //西安
|
||||||
ZDWX = 'ZDWX', // 浙大网新
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface PlatformConstsConfig{
|
export interface PlatformConstsConfig{
|
||||||
width: number,
|
width: number,
|
||||||
height: number,
|
height: number,
|
||||||
lineWidth: number,
|
lineWidth: number,
|
||||||
rectColor: string, //站台颜色
|
grey: string, //站台没有列车停站
|
||||||
doorGraphic?:DoorConstsConfig
|
yellow :string, //列车在站台停站
|
||||||
|
blue : string, //列车在站台跳停
|
||||||
|
doorGraphic?:DoorConstsConfig,
|
||||||
|
codeGraphic?:CodeConstsConfig,
|
||||||
|
lozengeGraphic?:LozengeConstsConfig //站台旁的菱形图标
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface DoorConstsConfig{
|
export interface DoorConstsConfig{
|
||||||
doorOpenSpacing:number,
|
|
||||||
doorGreen:string,
|
doorGreen:string,
|
||||||
|
doorRed : string,
|
||||||
|
doorBlue : string,
|
||||||
|
doorOpenSpacing:number,
|
||||||
|
blueShowColor:string
|
||||||
|
doorPlatformSpacing: number,
|
||||||
}
|
}
|
||||||
|
|
||||||
const jkConsts = {
|
export interface CodeConstsConfig{
|
||||||
width: 80,
|
circleRadius:number,
|
||||||
height: 30,
|
besideSpacing:number,
|
||||||
lineWidth: 3,
|
besideFontSize: number,
|
||||||
rectColor: '0xffffff',
|
whiteNumbers : string, //站台旁白色数字
|
||||||
};
|
whiteCircle : string, //H字符旁的圆圈
|
||||||
|
HCharYellow: string, //站台旁的H字符
|
||||||
|
HCharWhite : string,
|
||||||
|
HCharRed :string,
|
||||||
|
}
|
||||||
|
|
||||||
const thConsts = {
|
export interface LozengeConstsConfig{
|
||||||
|
lozengeRed?:string //站台旁的菱形图标
|
||||||
|
doorPlatformSpacing: number,
|
||||||
|
}
|
||||||
|
|
||||||
|
const BeiJingConsts = {
|
||||||
width: 90,
|
width: 90,
|
||||||
height: 20,
|
height: 20,
|
||||||
lineWidth: 3,
|
lineWidth: 3,
|
||||||
rectColor: '#f00',
|
grey: '0x7F7F7F',
|
||||||
doorGraphic:{
|
yellow :'0xfbff00',
|
||||||
doorOpenSpacing: 15,
|
blue : '0xC0C0FE',
|
||||||
doorGreen:'0x00FF00',
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
export const platformConstsMap = new Map<CategoryType, PlatformConstsConfig>([[CategoryType.JK,jkConsts],[CategoryType.TH,thConsts]])
|
const XiAnConsts = {
|
||||||
|
width: 90,
|
||||||
|
height: 20,
|
||||||
|
lineWidth: 3,
|
||||||
|
grey: '0x7F7F7F',
|
||||||
|
yellow :'0xfbff00',
|
||||||
|
blue : '0xC0C0FE',
|
||||||
|
blueShowColor: '0x3149c3',
|
||||||
|
doorGraphic:{
|
||||||
|
blueShowColor: '0x3149c3',
|
||||||
|
doorOpenSpacing: 15,
|
||||||
|
doorGreen:'0x00FF00',
|
||||||
|
doorRed : '0xff0000',
|
||||||
|
doorBlue : '0x4048C4',
|
||||||
|
doorPlatformSpacing: 10,
|
||||||
|
},
|
||||||
|
codeGraphic:{
|
||||||
|
circleRadius:1,
|
||||||
|
besideSpacing:10,
|
||||||
|
besideFontSize:12,
|
||||||
|
whiteNumbers : '0xffffff',
|
||||||
|
whiteCircle : '0xffffff',
|
||||||
|
HCharYellow: '0xfbff00',
|
||||||
|
HCharWhite : '0xffffff',
|
||||||
|
HCharRed :'0xff0000',
|
||||||
|
},
|
||||||
|
lozengeGraphic:{
|
||||||
|
lozengeRed:'0xff0000',
|
||||||
|
doorPlatformSpacing: 10,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
export const platformConstsMap = new Map<CategoryType, PlatformConstsConfig>([[CategoryType.BeiJing,BeiJingConsts],[CategoryType.XiAn,XiAnConsts]])
|
||||||
|
|
||||||
|
enum TypeOfPlatform {
|
||||||
|
Unknown = 0,
|
||||||
|
up = 1,
|
||||||
|
down = 2
|
||||||
|
}
|
||||||
export interface IPlatformData extends GraphicData {
|
export interface IPlatformData extends GraphicData {
|
||||||
code: string;
|
code: string;
|
||||||
refStation: string;
|
hasdoor?:boolean; // 是否有屏蔽门--西安
|
||||||
refSection: string;
|
direction?: string; // 屏蔽门上下--西安
|
||||||
refEsbRelayCode?: string;
|
up?: boolean; // 站台上下行--西安
|
||||||
/* get type(): graphicData.Platform.TypeOfPlatform; //站台上下行
|
type?:TypeOfPlatform;// 站台上下行--北京
|
||||||
set type(v: graphicData.Platform.TypeOfPlatform); */
|
centralizedStation?: number; //所属集中站--西安
|
||||||
|
refStation: string;// 关联的车站
|
||||||
|
refSection: string;// 关联的物理区段
|
||||||
|
refEsbRelayCode?: string;// 关联的紧急停车继电器的编号--北京
|
||||||
clone(): IPlatformData;
|
clone(): IPlatformData;
|
||||||
copyFrom(data: IPlatformData): void;
|
copyFrom(data: IPlatformData): void;
|
||||||
eq(other: IPlatformData): boolean;
|
eq(other: IPlatformData): boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface IPlatformState extends GraphicState {
|
export interface IXiAnPlatformState extends GraphicState {
|
||||||
|
get emergstop(): boolean; //紧急关闭
|
||||||
|
set emergstop(v: boolean);
|
||||||
|
get trainberth(): boolean; //列车停站
|
||||||
|
set trainberth(v: boolean);
|
||||||
|
get close(): boolean; //站台关闭,清客
|
||||||
|
set close(v: boolean);
|
||||||
|
get upHold(): boolean; //上行方向车站扣车
|
||||||
|
set upHold(v: boolean);
|
||||||
|
get downHold(): boolean; //下行方向车站扣车
|
||||||
|
set downHold(v: boolean);
|
||||||
|
get upOccHold(): boolean; //上行方向中心扣车
|
||||||
|
set upOccHold(v: boolean);
|
||||||
|
get downOccHold(): boolean; //下行方向中心扣车
|
||||||
|
set downOccHold(v: boolean);
|
||||||
|
get psdOpen(): boolean; //屏蔽门开
|
||||||
|
set psdOpen(v: boolean);
|
||||||
|
get psdCut(): boolean; //屏蔽门切除
|
||||||
|
set psdCut(v: boolean);
|
||||||
|
get upSkipstop(): boolean; //上行方向跳停
|
||||||
|
set upSkipstop(v: boolean);
|
||||||
|
get downSkipstop(): boolean; //下行方向跳停
|
||||||
|
set downSkipstop(v: boolean);
|
||||||
|
get upTrainSkipstop(): boolean; //上行方向指定列车跳停
|
||||||
|
set upTrainSkipstop(v: boolean);
|
||||||
|
get downTrainSkipstop(): boolean; //下行方向指定列车跳停
|
||||||
|
set downTrainSkipstop(v: boolean);
|
||||||
|
get nextSectionRunTime(): number; //下一区间运行时间
|
||||||
|
set nextSectionRunTime(v: number);
|
||||||
|
get nextSectionRunLevel(): number; //下一区间运行等级
|
||||||
|
set nextSectionRunLevel(v: number);
|
||||||
|
get stopTime(): number; //停站时间
|
||||||
|
set stopTime(v: number);
|
||||||
|
get rtuId(): number; // 集中站站号
|
||||||
|
set rtuId(v: number);
|
||||||
|
}
|
||||||
|
export interface IBriJingPlatformState extends GraphicState {
|
||||||
id?: number;
|
id?: number;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user