rt-sim-training-client/src/jmapNew/shape/Station/index.js

285 lines
12 KiB
JavaScript
Raw Normal View History

2019-11-29 12:51:58 +08:00
/*
* 车站
*/
import Group from 'zrender/src/container/Group';
import ETextName from '../element/ETextName';
2019-12-04 18:39:28 +08:00
import EControl from '../element/EControl';
2019-12-05 10:25:07 +08:00
import EMouse from './EMouse';
2019-12-05 10:19:41 +08:00
import ESingleControl from './ESingleControl';
import EArrow from './EArrow';
import { arrow } from '../utils/ShapePoints';
2019-11-29 12:51:58 +08:00
export default class Station extends Group {
constructor(model, style) {
super();
this._code = model.code;
this._type = model._type;
this.zlevel = model.zlevel;
this.z = 40;
this.model = model;
this.style = style;
this.create();
2019-12-05 10:25:07 +08:00
this.createTurnBack(); // 创建按图折返
2019-12-05 10:19:41 +08:00
this.createControlMode();
this.setState(model);
2019-12-05 10:25:07 +08:00
this.checkIsDrawMap();
}
2019-11-29 12:51:58 +08:00
create() {
const model = this.model;
const style = this.style;
2019-11-29 12:51:58 +08:00
if (model.visible) {
// 公里标名称是否显示
this.stationText = new ETextName({
zlevel: this.zlevel,
z: this.z,
x: model.position.x,
y: model.position.y,
fontWeight: model.fontWeight,
fontSize: model.nameFont || 18,
fontFamily: style.fontFamily,
2019-12-13 14:58:28 +08:00
text: model.number ? model.number + model.name : model.name,
textAlign: 'middle',
textVerticalAlign: 'top',
textFill: model.nameFontColor
});
this.add(this.stationText);
const path = window.location.href;
if (style.Station.kmPostShow || path.includes('/map/draw')) {
// 公里标是否显示
let direction = 1;
if (this.style.Station.kilometerPosition == 'up') {
direction = -1;
}
2019-12-12 18:15:25 +08:00
const offset = { x: 0, y: 0 };
if (model.kilometerPosition) {
offset.x = model.kilometerPosition.x;
offset.y = model.kilometerPosition.y;
}
this.mileageText = new ETextName({
zlevel: this.zlevel,
z: this.z,
position: [0, 0],
2019-12-12 18:15:25 +08:00
x: model.position.x + offset.x,
y: model.position.y + ((parseInt(model.nameFont) + 2) * direction) + offset.y,
fontWeight: model.fontWeight,
fontSize: model.kmPostFont || 18,
fontFamily: style.fontFamily,
text: model.kmPost,
textAlign: 'middle',
textVerticalAlign: 'top',
textFill: model.kmPostFontColor
});
this.add(this.mileageText);
}
2019-12-13 16:13:10 +08:00
if (model.subheadDisplay) {
this.subheadText = new ETextName({
zlevel: this.zlevel,
z: this.z,
x: model.subheadPosition.x,
y: model.subheadPosition.y,
fontWeight: model.fontWeight,
fontSize: model.subheadFont || 18,
fontFamily: style.fontFamily,
text: model.subhead,
textAlign: 'middle',
textVerticalAlign: 'top',
textFill: model.subheadFontColor
});
this.add(this.subheadText);
}
}
}
2019-12-04 18:39:28 +08:00
createTurnBack() { // 创建按图折返
2019-12-04 14:59:04 +08:00
const model = this.model;
const style = this.style;
if (model.visible && model.isCreateTurnBack) {
2019-12-05 10:25:07 +08:00
this.turnBacks = [];
2019-12-06 10:31:19 +08:00
for (let index = 0; index < style.Station.turnBack.lamp; index++) {
2019-12-05 10:25:07 +08:00
const turnBack = new EControl({
zlevel: this.zlevel,
z: this.z,
arc: {
shape: {
2019-12-06 10:31:19 +08:00
cx: model.turnBackPoint.x + style.Station.turnBack.lampSpace * index,
cy: model.turnBackPoint.y,
2019-12-05 10:25:07 +08:00
r: style.Station.lamp.radiusR
},
lineWidth: 0,
fill: style.Station.lamp.controlColor
2019-12-04 18:39:28 +08:00
},
2019-12-05 10:25:07 +08:00
text: {
position: [0, 0],
2019-12-06 10:31:19 +08:00
x: model.turnBackPoint.x + style.Station.turnBack.lampSpace * index,
y: model.turnBackPoint.y + style.Station.lamp.radiusR + style.Station.text.distance,
2019-12-05 10:25:07 +08:00
fontWeight: style.Station.text.fontWeight,
fontSize: style.Station.text.fontSize,
fontFamily: style.fontFamily,
text: '按图折返',
textFill: '#fff',
textAlign: 'middle',
textVerticalAlign: 'top'
},
style: this.style
});
this.turnBacks.push(turnBack);
2019-12-06 10:31:19 +08:00
}
2019-12-05 10:25:07 +08:00
this.turnBacks.forEach(lamp => { this.add(lamp); });
2019-12-04 14:59:04 +08:00
}
}
2019-11-29 12:51:58 +08:00
2019-12-05 10:19:41 +08:00
// 创建控制模式
createControlMode() {
const model = this.model;
if (model.visible && model.isCreateControlMode) {
// 紧急站控
2019-12-05 10:52:45 +08:00
if (this.style.Station.StationControl.lamp.emergencyControlShow) {
2019-12-05 10:19:41 +08:00
this.emergencyControl = new ESingleControl({
_subType: 'emergency',
style: this.style,
zlevel: this.zlevel,
z: this.z,
point: {
2019-12-05 10:52:45 +08:00
x: model.controlModePoint.x - this.style.Station.StationControl.lamp.distance * 3 / 2 + this.style.Station.StationControl.lamp.offset.x,
y: model.controlModePoint.y + this.style.Station.StationControl.lamp.offset.y
2019-12-05 10:19:41 +08:00
},
2019-12-05 10:52:45 +08:00
context: this.style.Station.StationControl.text.emergencyControlText,
2019-12-05 10:19:41 +08:00
// model.jjzkContent,
pop: false
});
this.add(this.emergencyControl);
}
// 中控按钮
2019-12-05 10:52:45 +08:00
if (this.style.Station.StationControl.lamp.centerControlShow) {
2019-12-05 10:19:41 +08:00
this.centerControl = new ESingleControl({
_subType: 'center',
style: this.style,
zlevel: this.zlevel,
z: this.z,
point: {
2019-12-05 10:52:45 +08:00
x: model.controlModePoint.x - this.style.Station.StationControl.lamp.distance / 2 + this.style.Station.StationControl.lamp.offset.x,
y: model.controlModePoint.y + this.style.Station.StationControl.lamp.offset.y
2019-12-05 10:19:41 +08:00
},
2019-12-05 10:52:45 +08:00
context: this.style.Station.StationControl.text.centerControlText,
2019-12-05 10:19:41 +08:00
// model.zokContent,
pop: false
});
this.add(this.centerControl);
}
// 站控按钮
2019-12-05 10:52:45 +08:00
if (this.style.Station.StationControl.lamp.substationControlShow) {
2019-12-05 10:19:41 +08:00
this.substationControl = new ESingleControl({
_subType: 'substation',
style: this.style,
zlevel: this.zlevel,
z: this.z,
point: {
2019-12-05 10:52:45 +08:00
x: model.controlModePoint.x + this.style.Station.StationControl.lamp.distance / 2 + this.style.Station.StationControl.lamp.offset.x,
y: model.controlModePoint.y + this.style.Station.StationControl.lamp.offset.y
2019-12-05 10:19:41 +08:00
},
2019-12-05 10:52:45 +08:00
context: this.style.Station.StationControl.text.substationControlText,
2019-12-05 10:19:41 +08:00
// model.zakContent
pop: false
});
this.add(this.substationControl);
}
// 联锁控
2019-12-05 10:52:45 +08:00
if (this.style.Station.StationControl.lamp.interconnectedControlShow) {
2019-12-05 10:19:41 +08:00
this.interconnectedControl = new ESingleControl({
_subType: 'interconnected',
style: this.style,
zlevel: this.zlevel,
z: this.z,
point: {
2019-12-05 10:52:45 +08:00
x: model.controlModePoint.x + this.style.Station.StationControl.lamp.distance * 3 / 2 + this.style.Station.StationControl.lamp.offset.x,
y: model.controlModePoint.y + this.style.Station.StationControl.lamp.offset.y
2019-12-05 10:19:41 +08:00
},
// context: model.lskContent || '联锁控',
2019-12-05 10:52:45 +08:00
context:this.style.Station.StationControl.text.interconnectedControlText || '联锁控',
2019-12-05 10:19:41 +08:00
pop: false
});
this.add(this.interconnectedControl);
}
// 箭头
2019-12-05 10:52:45 +08:00
if (this.style.Station.StationControl.arrow.show) {
const point = arrow(this.model.controlModePoint.x, this.model.controlModePoint.y + this.style.Station.StationControl.lamp.radiusR / 2, this.style.Station.StationControl.lamp.distance / 6, this.style.Station.StationControl.lamp.radiusR * 0.8);
2019-12-05 10:19:41 +08:00
this.arrowsControl = new EArrow({
zlevel: this.zlevel,
z: this.z,
style: this.style,
count: this.count,
drict: 1,
point: point,
2019-12-05 10:52:45 +08:00
x: model.controlModePoint.x + this.style.Station.StationControl.lamp.offset.x,
y: model.controlModePoint.y + this.style.Station.StationControl.lamp.radiusR / 2 + this.style.Station.StationControl.lamp.offset.y,
fill: this.style.Station.StationControl.lamp.grayColor,
2019-12-05 10:19:41 +08:00
lineWidth: 1,
stroke: this.style.sidelineColor
});
this.add(this.arrowsControl);
}
}
this.setState(model);
}
// eslint-disable-next-line no-unused-vars
2019-12-05 10:19:41 +08:00
// 设置状态
setState(model) {
2019-12-05 10:19:41 +08:00
// switch (model.status) {
// case '00': // 无状态
2019-12-05 10:52:45 +08:00
// this.emergencyControl && this.emergencyControl.setColor(this.style.Station.StationControl.lamp.grayColor);
// this.substationControl && this.substationControl.setColor(this.style.Station.StationControl.lamp.grayColor);
// this.centerControl && this.centerControl.setColor(this.style.Station.StationControl.lamp.grayColor);
2019-12-05 10:19:41 +08:00
// break;
// case '01': // 中控
2019-12-05 10:52:45 +08:00
// this.emergencyControl && this.emergencyControl.setColor(this.style.Station.StationControl.lamp.grayColor);
// this.substationControl && this.substationControl.setColor(this.style.Station.StationControl.lamp.grayColor);
// this.centerControl && this.centerControl.setColor(this.style.Station.StationControl.lamp.greenColor);
2019-12-05 10:19:41 +08:00
// break;
// case '02': // 站控
2019-12-05 10:52:45 +08:00
// this.emergencyControl && this.emergencyControl.setColor(this.style.Station.StationControl.lamp.grayColor);
// this.substationControl && this.substationControl.setColor(this.style.Station.StationControl.lamp.yellowColor);
// this.centerControl && this.centerControl.setColor(this.style.Station.StationControl.lamp.grayColor);
2019-12-05 10:19:41 +08:00
// break;
// case '03': // 紧急站控
2019-12-05 10:52:45 +08:00
// this.emergencyControl && this.emergencyControl.setColor(this.style.Station.StationControl.lamp.redColor);
// this.substationControl && this.substationControl.setColor(this.style.Station.StationControl.lamp.grayColor);
// this.centerControl && this.centerControl.setColor(this.style.Station.StationControl.lamp.grayColor);
2019-12-05 10:19:41 +08:00
// break;
// }
}
2019-11-29 12:51:58 +08:00
getShapeTipPoint() {
return null;
}
2019-12-17 09:13:57 +08:00
// getBoundingRect() {
// const rect = this.stationText.getBoundingRect();
// if (this.model.subheadDisplay) {
// const subheadText = this.subheadText.getBoundingRect();
// rect.union(subheadText);
// return rect;
// } else if (this.stationText) {
// console.log(this.stationText, rect);
// return rect;
// }
// }
drawSelected(selected) {
2019-12-05 10:25:07 +08:00
this.EMouse && this.EMouse.drawSelected(selected);
}
2019-12-05 10:25:07 +08:00
checkIsDrawMap() {
const path = window.location.href;
if (path.includes('/map/draw')) {
this.EMouse = new EMouse(this);
this.add(this.EMouse);
this.on('mouseout', () => { this.EMouse.mouseout(); });
this.on('mouseover', () => { this.EMouse.mouseover(); });
}
}
2019-11-29 12:51:58 +08:00
}