2019-11-29 12:51:58 +08:00
|
|
|
import Group from 'zrender/src/container/Group';
|
2020-04-27 18:33:29 +08:00
|
|
|
import Text from 'zrender/src/graphic/Text';
|
2020-05-29 16:57:21 +08:00
|
|
|
import Rect from 'zrender/src/graphic/shape/Rect';
|
2019-11-29 12:51:58 +08:00
|
|
|
import JTriangle from '../../utils/JTriangle';
|
|
|
|
import ESwName from './ESwName.js';
|
|
|
|
import ESwLocal from './ESwLocal.js';
|
|
|
|
import ESwLnversion from './ESwLnversion';
|
|
|
|
import ELockRect from './ELockRect';
|
2020-03-04 18:03:50 +08:00
|
|
|
import ELockArc from './ELockArc';
|
2019-11-29 12:51:58 +08:00
|
|
|
import EMouse from './EMouse';
|
2019-12-04 11:32:30 +08:00
|
|
|
import EHighlight from '../element/EHighlight';
|
2020-02-18 18:39:12 +08:00
|
|
|
import ETriangle from './ETriangle';
|
2020-12-15 11:18:15 +08:00
|
|
|
import store from '@/store/index';
|
2020-03-13 13:01:58 +08:00
|
|
|
import Vue from 'vue';
|
2019-11-29 12:51:58 +08:00
|
|
|
|
|
|
|
export default class Switch extends Group {
|
|
|
|
constructor(model, style) {
|
|
|
|
super();
|
|
|
|
this._code = model.code;
|
|
|
|
this._type = model._type;
|
|
|
|
this.model = model;
|
|
|
|
this.style = style;
|
|
|
|
this.zlevel = model.zlevel;
|
|
|
|
this.z = 6;
|
2020-03-13 13:01:58 +08:00
|
|
|
this.isShowShape = true;
|
2019-11-29 12:51:58 +08:00
|
|
|
this.triangle = new JTriangle(model.intersection, model.skew);
|
|
|
|
this.create();
|
|
|
|
this.createLockRect(); // 创建单锁矩形框显示
|
|
|
|
this.createMouseEvent();
|
|
|
|
this.setState(model);
|
2019-12-04 11:32:30 +08:00
|
|
|
this.checkIsDrawMap();
|
2019-11-29 12:51:58 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
createMouseEvent() {
|
|
|
|
// 鼠标事件
|
|
|
|
if (this.style.Switch.mouseOverStyle) {
|
|
|
|
this.mouseEvent = new EMouse(this);
|
|
|
|
this.add(this.mouseEvent);
|
|
|
|
this.on('mouseout', (e) => { this.mouseEvent.mouseout(e); });
|
|
|
|
this.on('mouseover', (e) => { this.mouseEvent.mouseover(e); });
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
create() {
|
|
|
|
const model = this.model;
|
|
|
|
const style = this.style;
|
|
|
|
|
2020-09-17 16:33:22 +08:00
|
|
|
const swPadding = style.Switch.core.length + style.Section.line.width / 2;
|
2019-11-29 12:51:58 +08:00
|
|
|
const directx = this.triangle.drictx;
|
|
|
|
const directy = this.triangle.dricty;
|
2020-03-27 10:02:41 +08:00
|
|
|
const switchWidth1 = style.Section.line.width / 2;
|
2020-09-18 11:08:17 +08:00
|
|
|
|
|
|
|
let directxA = 1;
|
|
|
|
const sectionAModel = Vue.prototype.$jlmap.mapDevice[model.sectionACode];
|
|
|
|
const sectionBModel = Vue.prototype.$jlmap.mapDevice[model.sectionBCode];
|
|
|
|
let sectionATriangle = new JTriangle(sectionAModel.points[0], sectionAModel.points[1]);
|
|
|
|
let sectionBTriangle = new JTriangle(sectionBModel.points[0], sectionBModel.points[1]);
|
|
|
|
const sectionAPoint = { x: model.intersection.x, y: model.intersection.y };
|
|
|
|
if (sectionAModel.points[0].x == model.intersection.x && sectionAModel.points[0].y == model.intersection.y) {
|
|
|
|
sectionATriangle = new JTriangle(sectionAModel.points[0], sectionAModel.points[1]);
|
|
|
|
directxA = 1;
|
|
|
|
}
|
|
|
|
if (sectionAModel.points[sectionAModel.points.length - 1].x == model.intersection.x && sectionAModel.points[sectionAModel.points.length - 1].y == model.intersection.y) {
|
|
|
|
sectionATriangle = new JTriangle(sectionAModel.points[sectionAModel.points.length - 2], sectionAModel.points[sectionAModel.points.length - 1]);
|
|
|
|
directxA = -1;
|
|
|
|
}
|
2020-09-24 13:40:09 +08:00
|
|
|
|
|
|
|
if (sectionBModel.points[0].x == model.intersection.x && sectionBModel.points[0].y == model.intersection.y) {
|
|
|
|
sectionBTriangle = new JTriangle(sectionBModel.points[0], sectionBModel.points[1]);
|
|
|
|
}
|
|
|
|
if (sectionBModel.points[sectionBModel.points.length - 1].x == model.intersection.x && sectionBModel.points[sectionBModel.points.length - 1].y == model.intersection.y) {
|
|
|
|
sectionBTriangle = new JTriangle(sectionBModel.points[sectionBModel.points.length - 2], sectionBModel.points[sectionBModel.points.length - 1]);
|
|
|
|
}
|
2020-09-18 11:08:17 +08:00
|
|
|
const drictyyA = sectionATriangle.dricty;
|
|
|
|
const point1 = [model.intersection.x + directx * this.triangle.getCotRate() * swPadding, model.intersection.y + directy * swPadding];
|
|
|
|
const point2 = [model.intersection.x, model.intersection.y];
|
|
|
|
const point3 = [sectionAPoint.x + directxA * (switchWidth1 * sectionATriangle.getCosRate()), sectionAPoint.y + drictyyA * switchWidth1 * sectionATriangle.getSinRate()];
|
|
|
|
this.shapeModelA = new ESwLocal({ // 形状 A 层级最高 反位折线覆盖
|
2019-11-29 12:51:58 +08:00
|
|
|
zlevel: this.zlevel,
|
|
|
|
z: this.z,
|
|
|
|
style: style,
|
2020-09-18 11:08:17 +08:00
|
|
|
shelterPoints: [point1, point2, point3],
|
2019-11-29 12:51:58 +08:00
|
|
|
cursor: 'pointer',
|
|
|
|
triangle: this.triangle,
|
|
|
|
onmouseover: () => { this.name.getArrowText().show(); },
|
|
|
|
onmouseout: () => { this.name.getArrowText().hide(); }
|
|
|
|
});
|
|
|
|
|
2020-09-18 11:08:17 +08:00
|
|
|
const relocShelterLength = 15;
|
|
|
|
const rpoint1 = [sectionAPoint.x - directxA * (relocShelterLength * sectionBTriangle.getCosRate()), sectionAPoint.y - drictyyA * relocShelterLength * sectionBTriangle.getSinRate()];
|
|
|
|
const rpoint2 = [sectionAPoint.x, sectionAPoint.y];
|
|
|
|
const rpoint3 = [sectionAPoint.x + directxA * (switchWidth1 * sectionATriangle.getCosRate()), sectionAPoint.y + drictyyA * switchWidth1 * sectionATriangle.getSinRate()];
|
|
|
|
this.shapeModelB = new ESwLnversion({ // 形状 B 层级居中 定位折线覆盖
|
2019-11-29 12:51:58 +08:00
|
|
|
zlevel: this.zlevel,
|
|
|
|
z: this.z,
|
|
|
|
style: style,
|
2020-09-18 11:08:17 +08:00
|
|
|
shelterPoints: [rpoint1, rpoint2, rpoint3],
|
2019-11-29 12:51:58 +08:00
|
|
|
cursor: 'pointer',
|
|
|
|
onmouseover: () => { this.name.getArrowText().show(); },
|
|
|
|
onmouseout: () => { this.name.getArrowText().hide(); }
|
|
|
|
});
|
|
|
|
|
2020-07-14 18:14:39 +08:00
|
|
|
if (this.style.Switch.text.lossRect) { // 道岔失表显示红色矩形框
|
2020-09-18 11:08:17 +08:00
|
|
|
const lossRect = this.shapeModelA.getLocal().getBoundingRect();
|
2020-05-29 16:57:21 +08:00
|
|
|
this.lossShow = new Rect({
|
|
|
|
zlevel: this.zlevel,
|
|
|
|
z: this.z + 1,
|
|
|
|
shape: {
|
|
|
|
x: lossRect.x - 5,
|
|
|
|
y: lossRect.y - 5,
|
|
|
|
width: lossRect.width + 10,
|
|
|
|
height: lossRect.height + 10
|
|
|
|
},
|
|
|
|
style: {
|
|
|
|
fill: 'rgba(0, 0, 0, 1)',
|
|
|
|
lineDash: [3, 3],
|
|
|
|
stroke: '#F00',
|
2020-05-29 18:24:51 +08:00
|
|
|
lineWidth: 2
|
2020-05-29 16:57:21 +08:00
|
|
|
}
|
|
|
|
});
|
|
|
|
this.add(this.lossShow);
|
|
|
|
this.lossShow.hide();
|
|
|
|
}
|
2020-09-18 11:08:17 +08:00
|
|
|
|
|
|
|
const Tspoint1 = [model.intersection.x + directx * this.triangle.getCotRate() * swPadding, model.intersection.y + directy * swPadding];
|
|
|
|
const Tspoint2 = [model.intersection.x, model.intersection.y];
|
|
|
|
this.shapeModelC = new ETriangle({ // 形状 C 层级最低 应用佛山反位覆盖
|
2020-02-18 18:39:12 +08:00
|
|
|
zlevel: this.zlevel,
|
|
|
|
z: this.z,
|
|
|
|
style: style,
|
2020-09-18 11:08:17 +08:00
|
|
|
sectionPoints: [Tspoint1, Tspoint2],
|
2020-02-18 18:39:12 +08:00
|
|
|
cursor: 'pointer',
|
|
|
|
onmouseover: () => { this.name.getArrowText().show(); },
|
|
|
|
onmouseout: () => { this.name.getArrowText().hide(); }
|
|
|
|
});
|
|
|
|
|
2019-11-29 12:51:58 +08:00
|
|
|
const arrowTextX = model.intersection.x + 10;
|
|
|
|
const arrowTextY = model.intersection.y + 15;
|
|
|
|
const nameTextX = model.namePosition.x + model.intersection.x + directx * (style.Section.line.width * 3 + style.Switch.text.offset.x) * this.triangle.getCotRate();
|
|
|
|
const nameTextY = model.namePosition.y + model.intersection.y + style.Switch.text.offset.y * (style.Switch.text.position || directy);
|
|
|
|
|
2020-02-04 14:28:18 +08:00
|
|
|
this.name = new ESwName({ // 道岔名称
|
2019-11-29 12:51:58 +08:00
|
|
|
zlevel: this.zlevel,
|
|
|
|
z: this.z,
|
|
|
|
style: style,
|
|
|
|
arrowTextX: arrowTextX,
|
|
|
|
arrowTextY: arrowTextY,
|
|
|
|
nameTextX: nameTextX,
|
|
|
|
nameTextY: nameTextY,
|
|
|
|
sectionName: model.sectionName,
|
|
|
|
name: model.name,
|
|
|
|
nameShow: style.Switch.text.show,
|
|
|
|
triangle: this.triangle
|
|
|
|
});
|
|
|
|
|
2020-04-27 18:33:29 +08:00
|
|
|
this.enabledName = new Text({ // 道岔使能 E 西安二号线独有
|
|
|
|
zlevel: this.zlevel,
|
|
|
|
z: this.z + 6,
|
|
|
|
_subType: 'enabled', // 标识
|
|
|
|
style: {
|
2020-05-19 09:45:15 +08:00
|
|
|
x: nameTextX,
|
|
|
|
y: nameTextY + directy * 20,
|
2020-04-27 18:33:29 +08:00
|
|
|
fontSize: 12,
|
|
|
|
text: 'E',
|
|
|
|
textAlign: 'center',
|
|
|
|
textVerticalAlign: 'middle',
|
|
|
|
textFill: 'yellow'
|
|
|
|
}
|
|
|
|
});
|
|
|
|
|
2020-09-18 11:08:17 +08:00
|
|
|
this.add(this.shapeModelA);
|
|
|
|
this.add(this.shapeModelB);
|
|
|
|
this.add(this.shapeModelC);
|
2019-11-29 12:51:58 +08:00
|
|
|
this.add(this.name);
|
2020-04-30 11:28:56 +08:00
|
|
|
this.add(this.enabledName);
|
2020-04-15 14:19:22 +08:00
|
|
|
style.Switch.text.show && model.nameShow ? this.name.show() : this.name.hide();
|
2019-11-29 12:51:58 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
createLockRect() {
|
2020-04-15 11:17:19 +08:00
|
|
|
let offsetX = this.model.locateType == '01' ? 3 : 0;
|
|
|
|
let offsetY = 0;
|
|
|
|
if (this.style.Switch.rectLock.offset) {
|
|
|
|
const directx = this.triangle.drictx;
|
|
|
|
const directy = this.triangle.dricty;
|
|
|
|
offsetX = directx * this.style.Switch.rectLock.offset.x;
|
|
|
|
offsetY = directy * this.style.Switch.rectLock.offset.y;
|
|
|
|
}
|
2020-07-14 18:14:39 +08:00
|
|
|
this.lockRect = new ELockRect({ // 单锁矩形框
|
2019-11-29 12:51:58 +08:00
|
|
|
zlevel: this.zlevel,
|
|
|
|
z: this.z + 6,
|
2020-03-27 18:19:40 +08:00
|
|
|
x: this.model.intersection.x - this.style.Switch.rectLock.rectWidth / 2 + offsetX,
|
2020-04-15 11:17:19 +08:00
|
|
|
y: this.model.intersection.y - this.style.Switch.rectLock.rectWidth / 2 + offsetY,
|
2020-03-27 18:19:40 +08:00
|
|
|
width: this.style.Switch.rectLock.rectWidth,
|
2019-11-29 12:51:58 +08:00
|
|
|
lineWidth: 1.8,
|
2020-03-27 18:19:40 +08:00
|
|
|
stroke: this.style.Switch.rectLock.rectBorderColor,
|
2019-11-29 12:51:58 +08:00
|
|
|
fill: this.style.transparentColor
|
|
|
|
});
|
|
|
|
this.add(this.lockRect);
|
|
|
|
this.lockRect.hide();
|
2020-08-19 16:45:05 +08:00
|
|
|
if (this.style.Switch.arcBlcok || this.style.Switch.interlocking) {
|
2020-10-22 13:40:56 +08:00
|
|
|
this.lockArc = new ELockArc({ // 单锁圆形 只有宁波线路使用 国赛线
|
2020-03-27 18:19:40 +08:00
|
|
|
zlevel: this.zlevel,
|
|
|
|
z: this.z + 6,
|
|
|
|
x: this.model.intersection.x,
|
|
|
|
y: this.model.intersection.y,
|
2020-10-22 13:40:56 +08:00
|
|
|
shapeR: this.style.Switch.arcBlcok.shapeR,
|
2020-03-27 18:19:40 +08:00
|
|
|
lineWidth: 1.2,
|
|
|
|
stroke: this.style.Switch.arcBlcok.arcBorderColor,
|
|
|
|
fill: this.style.transparentColor
|
|
|
|
});
|
|
|
|
this.add(this.lockArc);
|
|
|
|
this.lockArc.hide();
|
|
|
|
}
|
2019-11-29 12:51:58 +08:00
|
|
|
}
|
|
|
|
|
2020-04-30 11:28:56 +08:00
|
|
|
setCiConfirm() {
|
|
|
|
this.enabledName && this.enabledName.show();
|
|
|
|
this.enabledName.animateStyle(true)
|
|
|
|
.when(0, { textFill: this.style.backgroundColor })
|
|
|
|
.when(1000, { textFill: 'yellow' })
|
|
|
|
.when(2000, { textFill: this.style.backgroundColor })
|
|
|
|
.start();
|
|
|
|
}
|
|
|
|
|
2019-11-29 12:51:58 +08:00
|
|
|
/** 名称动画*/
|
|
|
|
nameTextAnimation() {
|
|
|
|
this.name.getNameText().animateStyle(true)
|
|
|
|
.when(0, { textFill: this.style.backgroundColor })
|
|
|
|
.when(1000, { textFill: this.style.Switch.text.lossColor })
|
|
|
|
.when(2000, { textFill: this.style.backgroundColor })
|
|
|
|
.start();
|
|
|
|
|
|
|
|
this.name.getTextRect().animateStyle(true)
|
|
|
|
.when(0, { textFill: this.style.backgroundColor })
|
|
|
|
.when(1000, { textFill: this.style.Switch.text.borderColor })
|
|
|
|
.when(2000, { textFill: this.style.backgroundColor })
|
|
|
|
.start();
|
|
|
|
}
|
|
|
|
|
|
|
|
/** 设置道岔文字颜色*/
|
|
|
|
setTextColor(color) {
|
2020-02-04 14:28:18 +08:00
|
|
|
this.name.getNameText().setStyle({ textFill: color });
|
2019-11-29 12:51:58 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
/** 设置道岔背景颜色*/
|
|
|
|
setTextStyle(style) {
|
|
|
|
this.name.getNameText().setStyle(style);
|
|
|
|
}
|
|
|
|
|
|
|
|
/** 设置道岔文字边框颜色 (道岔封锁) */
|
|
|
|
setHasTextBorder(width) {
|
2020-02-04 14:28:18 +08:00
|
|
|
this.name.getTextRect().setStyle({ lineWidth: width });
|
2019-11-29 12:51:58 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
/** 恢复状态*/
|
|
|
|
recover() {
|
2020-02-04 14:28:18 +08:00
|
|
|
this.lockRect.hide(); // 矩形包围框
|
2020-03-11 15:10:08 +08:00
|
|
|
this.lockArc.hide(); // 圆形单锁框
|
2019-11-29 12:51:58 +08:00
|
|
|
this.name.getNameText().stopAnimation(false);
|
2020-09-18 11:08:17 +08:00
|
|
|
this.shapeModelC.hide(); // 形状 C
|
|
|
|
this.shapeModelA.hide(); // 形状 A
|
|
|
|
this.shapeModelB.hide(); // 形状 B
|
2019-11-29 12:51:58 +08:00
|
|
|
this.setHasTextBorder(0);
|
2020-09-18 11:08:17 +08:00
|
|
|
this.shapeModelC.attr({
|
|
|
|
z: this.z + 3
|
|
|
|
});
|
|
|
|
this.enabledName && this.enabledName.hide(); // 使能隐藏
|
2020-06-03 10:12:36 +08:00
|
|
|
this.lossShow && this.lossShow.hide(); // 道岔失去矩形
|
2020-05-29 16:57:21 +08:00
|
|
|
this.lossShow && this.lossShow.stopAnimation(false);
|
2019-11-29 12:51:58 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
/** 定位*/
|
2020-02-18 18:39:12 +08:00
|
|
|
setLocationAction() {
|
2020-09-18 11:08:17 +08:00
|
|
|
if (this.style.Switch.core.splice) { // 哈尔滨线路
|
|
|
|
this.shapeModelB.hide();
|
|
|
|
this.shapeModelC.hide();
|
2020-02-04 14:28:18 +08:00
|
|
|
} else {
|
2020-09-18 11:08:17 +08:00
|
|
|
this.shapeModelB.show();
|
|
|
|
this.shapeModelB.setColor(this.style.Section.line.spareColor);
|
|
|
|
this.shapeModelC.show();
|
2020-10-20 17:49:46 +08:00
|
|
|
this.shapeModelC.setColor(this.style.backgroundColor);
|
2020-02-04 14:28:18 +08:00
|
|
|
}
|
2020-06-03 10:12:36 +08:00
|
|
|
if (this.style.Switch.core.graphShow) { // 佛山线路显示
|
2020-09-18 11:08:17 +08:00
|
|
|
this.shapeModelB.show();
|
|
|
|
this.shapeModelB.setColor('#00FF00');
|
|
|
|
this.shapeModelC.show();
|
|
|
|
this.shapeModelC.setColor(this.style.backgroundColor);
|
2020-06-03 10:12:36 +08:00
|
|
|
}
|
2019-11-29 12:51:58 +08:00
|
|
|
this.setTextColor(this.style.Switch.text.locateColor);
|
|
|
|
}
|
|
|
|
|
|
|
|
/** 反位*/
|
2020-02-18 18:39:12 +08:00
|
|
|
setInversionAction() {
|
2019-11-29 12:51:58 +08:00
|
|
|
this.setTextColor(this.style.Switch.text.inversionColor);
|
2020-02-04 14:28:18 +08:00
|
|
|
if (this.style.Switch.core.splice) {
|
2020-09-18 11:08:17 +08:00
|
|
|
// this.shapeModelA.show();
|
|
|
|
// this.shapeModelA.setColor(this.style.Section.line.spareColor);
|
2020-02-04 14:28:18 +08:00
|
|
|
} else {
|
2020-09-18 11:08:17 +08:00
|
|
|
this.shapeModelB.show();
|
2020-02-04 14:28:18 +08:00
|
|
|
}
|
2020-09-18 11:08:17 +08:00
|
|
|
this.shapeModelA.show();
|
|
|
|
this.shapeModelA.setColor(this.style.Section.line.spareColor);
|
2020-06-03 10:12:36 +08:00
|
|
|
if (this.style.Switch.core.graphShow) { // 佛山线路显示
|
2020-09-18 11:08:17 +08:00
|
|
|
this.shapeModelC.show();
|
|
|
|
this.shapeModelC.setColor('#FFFF00');
|
|
|
|
this.shapeModelC.attr({
|
|
|
|
z: this.z + 6
|
|
|
|
});
|
2020-06-03 10:12:36 +08:00
|
|
|
}
|
2019-11-29 12:51:58 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
/** 失去*/
|
2020-05-29 16:57:21 +08:00
|
|
|
setLossAction() {
|
2020-09-18 11:08:17 +08:00
|
|
|
this.shapeModelA.show();
|
|
|
|
this.shapeModelB.show();
|
|
|
|
this.shapeModelC.show();
|
|
|
|
this.shapeModelC.setColor(this.style.backgroundColor);
|
2019-11-29 12:51:58 +08:00
|
|
|
this.setTextColor(this.style.Switch.text.lossColor);
|
2020-05-29 16:57:21 +08:00
|
|
|
this.style.Switch.text.faultFlashing && this.nameTextAnimation();
|
2020-07-15 13:31:07 +08:00
|
|
|
|
|
|
|
this.lossShow && this.lossShow.show(); // 西安线路专有
|
2020-05-29 16:57:21 +08:00
|
|
|
this.lossShow && this.lossShow.animateStyle(true)
|
|
|
|
.when(0, { stroke: this.style.backgroundColor })
|
2020-05-29 18:24:51 +08:00
|
|
|
.when(500, { stroke: '#F00' })
|
|
|
|
.when(1000, { stroke: this.style.backgroundColor })
|
2020-05-29 16:57:21 +08:00
|
|
|
.start();
|
2020-05-29 17:55:22 +08:00
|
|
|
}
|
2020-10-20 17:16:41 +08:00
|
|
|
setSwitchFault(split, normalPosition, reversePosition) {
|
|
|
|
if (this.style.Switch.jointImg.faultStatus && split && !reversePosition && !normalPosition ) { // 宁波线失表状态
|
2020-09-18 11:08:17 +08:00
|
|
|
this.setForkAction(); // 道岔挤岔
|
2020-06-28 13:27:10 +08:00
|
|
|
} else {
|
|
|
|
if (this.model.switchFaultCode && split) {
|
|
|
|
const switchFault = store.getters['map/getDeviceByCode'](this.model.switchFaultCode);
|
|
|
|
switchFault.instance.setControlColor('#F00', true);
|
|
|
|
} else if (this.model.switchFaultCode && !split) {
|
|
|
|
const switchFault = store.getters['map/getDeviceByCode'](this.model.switchFaultCode);
|
|
|
|
switchFault.instance.setControlColor(this.style.backgroundColor, false);
|
|
|
|
}
|
2020-09-18 18:30:14 +08:00
|
|
|
// stopAnimation
|
|
|
|
this.shapeModelB.stopAnimation(false);
|
|
|
|
this.shapeModelC.stopAnimation(false);
|
|
|
|
this.shapeModelA.stopAnimation(false);
|
2020-05-29 17:32:20 +08:00
|
|
|
}
|
2019-11-29 12:51:58 +08:00
|
|
|
}
|
|
|
|
/** 挤叉*/
|
|
|
|
setForkAction() {
|
2020-03-27 18:19:40 +08:00
|
|
|
if (this.style.Switch.jointImg.fork) {
|
2020-03-24 13:39:20 +08:00
|
|
|
this.recover();
|
2020-09-18 11:08:17 +08:00
|
|
|
this.shapeModelB.show();
|
|
|
|
this.shapeModelB.animateStyle(item => {
|
2020-03-24 13:39:20 +08:00
|
|
|
item.animateStyle(true)
|
2020-09-18 11:08:17 +08:00
|
|
|
.when(0, { stroke: this.style.backgroundColor })
|
|
|
|
.when(1000, { stroke: 'red' })
|
|
|
|
.when(2000, { stroke: this.style.backgroundColor })
|
2020-03-24 13:39:20 +08:00
|
|
|
.start();
|
|
|
|
});
|
2020-09-18 11:08:17 +08:00
|
|
|
this.shapeModelC.show(); // 宁波线路挤叉特殊显示
|
|
|
|
this.shapeModelC.animateStyle(item => {
|
2020-03-24 13:39:20 +08:00
|
|
|
item.animateStyle(true)
|
2020-09-18 11:08:17 +08:00
|
|
|
.when(0, { stroke: this.style.backgroundColor })
|
|
|
|
.when(1000, { stroke: 'red' })
|
|
|
|
.when(2000, { stroke: this.style.backgroundColor })
|
2020-03-24 13:39:20 +08:00
|
|
|
.start();
|
|
|
|
});
|
2020-09-18 11:08:17 +08:00
|
|
|
this.shapeModelA.show();
|
|
|
|
this.shapeModelA.animateStyle(item => {
|
2020-03-24 13:39:20 +08:00
|
|
|
item.animateStyle(true)
|
2020-09-18 11:08:17 +08:00
|
|
|
.when(0, { stroke: this.style.backgroundColor })
|
|
|
|
.when(1000, { stroke: 'red' })
|
|
|
|
.when(2000, { stroke: this.style.backgroundColor })
|
2020-03-24 13:39:20 +08:00
|
|
|
.start();
|
|
|
|
});
|
2020-06-03 10:12:36 +08:00
|
|
|
this.setTextColor('red');
|
2020-02-19 17:26:15 +08:00
|
|
|
}
|
2019-11-29 12:51:58 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
/** 单锁*/
|
2020-10-22 13:40:56 +08:00
|
|
|
setMonolock(normalPosition, reversePosition) {
|
2020-03-27 18:19:40 +08:00
|
|
|
if (this.style.Switch.rectLock.monolock) { // 判断单锁矩形是否显示
|
2019-11-29 12:51:58 +08:00
|
|
|
this.lockRect.show();
|
2020-07-15 13:31:07 +08:00
|
|
|
if (this.style.Switch.rectLock.rectBorderFillColor) { // 西安二号线 专用显示
|
2020-04-15 11:17:19 +08:00
|
|
|
this.lockRect.setStyle({ stroke: this.style.Switch.rectLock.rectBorderColor, fill: this.style.Switch.rectLock.rectBorderFillColor });
|
|
|
|
}
|
2019-11-29 12:51:58 +08:00
|
|
|
}
|
2020-03-27 18:19:40 +08:00
|
|
|
if (this.style.Switch.text.monolock) { // 单锁显示名称包围框
|
2020-02-28 15:20:26 +08:00
|
|
|
this.setHasTextBorder(1);
|
|
|
|
}
|
2020-03-27 18:19:40 +08:00
|
|
|
if (this.style.Switch.arcBlcok.show) { // 圆形单锁是否显示
|
2020-03-04 18:03:50 +08:00
|
|
|
this.lockArc.show();
|
2020-10-22 13:40:56 +08:00
|
|
|
if (normalPosition) {
|
|
|
|
this.lockArc.setStyle({ stroke: this.style.Switch.arcBlcok.locationColor });
|
|
|
|
} else if (reversePosition) {
|
|
|
|
this.lockArc.setStyle({ stroke: this.style.Switch.arcBlcok.inversionColor });
|
|
|
|
}
|
2019-11-29 12:51:58 +08:00
|
|
|
}
|
2020-03-27 18:19:40 +08:00
|
|
|
this.model.normalPosition && this.setTextColor(this.style.Switch.text.monolockLocationColor); // 定位 设置道岔名称颜色
|
|
|
|
this.model.reversePosition && this.setTextColor(this.style.Switch.text.monolockInversionColor); // 反位 设置道岔名称颜色
|
2019-11-29 12:51:58 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
/** 封锁 */
|
|
|
|
block() {
|
2020-07-14 18:19:19 +08:00
|
|
|
if (this.style.Switch.jointImg.block) { // 宁波专用封锁显示
|
2020-09-18 11:08:17 +08:00
|
|
|
this.shapeModelB.show();
|
|
|
|
this.shapeModelB.animateStyle(item => {
|
2020-07-14 18:19:19 +08:00
|
|
|
item.animateStyle(true)
|
2020-09-18 11:08:17 +08:00
|
|
|
.when(0, { stroke: this.style.backgroundColor })
|
|
|
|
.when(1000, { stroke: this.style.Switch.jointImg.flashingColors })
|
|
|
|
.when(2000, { stroke: this.style.backgroundColor })
|
2020-07-14 18:19:19 +08:00
|
|
|
.start();
|
|
|
|
});
|
2020-09-18 11:08:17 +08:00
|
|
|
this.shapeModelC.show();
|
|
|
|
this.shapeModelC.animateStyle(item => {
|
2020-07-14 18:19:19 +08:00
|
|
|
item.animateStyle(true)
|
2020-09-18 11:08:17 +08:00
|
|
|
.when(0, { stroke: this.style.backgroundColor })
|
|
|
|
.when(1000, { stroke: this.style.Switch.jointImg.flashingColors })
|
|
|
|
.when(2000, { stroke: this.style.backgroundColor })
|
2020-07-14 18:19:19 +08:00
|
|
|
.start();
|
|
|
|
});
|
2020-09-18 11:08:17 +08:00
|
|
|
this.shapeModelA.show();
|
|
|
|
this.shapeModelA.animateStyle(item => {
|
2020-07-14 18:19:19 +08:00
|
|
|
item.animateStyle(true)
|
2020-09-18 11:08:17 +08:00
|
|
|
.when(0, { stroke: this.style.backgroundColor })
|
|
|
|
.when(1000, { stroke: this.style.Switch.jointImg.flashingColors })
|
|
|
|
.when(2000, { stroke: this.style.backgroundColor })
|
2020-07-14 18:19:19 +08:00
|
|
|
.start();
|
|
|
|
});
|
2020-03-25 18:26:19 +08:00
|
|
|
}
|
2020-03-27 18:19:40 +08:00
|
|
|
if (this.style.Switch.text.block) {
|
2019-11-29 12:51:58 +08:00
|
|
|
this.setHasTextBorder(1);
|
2020-03-27 18:19:40 +08:00
|
|
|
}
|
2020-08-19 15:50:33 +08:00
|
|
|
if (this.style.Switch.text.blockText) {
|
|
|
|
this.setTextColor(this.style.Switch.text.blockText);
|
|
|
|
}
|
2020-03-27 18:19:40 +08:00
|
|
|
if (this.style.Switch.jointImg.trapezoidBlock && this.model.reversePosition) { // 范围且封锁时显示
|
2020-09-18 11:08:17 +08:00
|
|
|
this.shapeModelC.show();
|
|
|
|
this.shapeModelC.getSection().setStyle('fill', '#000080');
|
2019-11-29 12:51:58 +08:00
|
|
|
}
|
2020-03-27 18:19:40 +08:00
|
|
|
if (this.style.Switch.rectLock.block) {
|
|
|
|
this.lockRect.show();
|
|
|
|
this.lockRect.setStyle({ stroke: this.style.Switch.rectLock.blockColor });
|
2020-07-15 13:31:07 +08:00
|
|
|
if (this.style.Switch.rectLock.blockFillColor) { // 西安二号线 专用显示
|
2020-04-15 11:17:19 +08:00
|
|
|
this.lockRect.setStyle({ stroke: this.style.Switch.rectLock.blockColor, fill: this.style.Switch.rectLock.blockFillColor });
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
blockMonolock() {
|
|
|
|
if (this.style.Switch.rectLock.block && this.style.Switch.rectLock.monolock) {
|
|
|
|
if (this.style.Switch.rectLock.blockFillColor && this.style.Switch.rectLock.rectBorderFillColor) {
|
|
|
|
this.lockRect.show();
|
|
|
|
this.lockRect.setStyle({ stroke: 'rgba(0,0,0,0)', fill: this.style.Switch.rectLock.blockMonolockFillColor });
|
|
|
|
}
|
2020-03-27 18:19:40 +08:00
|
|
|
}
|
2019-11-29 12:51:58 +08:00
|
|
|
}
|
|
|
|
|
2020-08-19 16:45:05 +08:00
|
|
|
// 联锁预留道岔
|
|
|
|
interlockingReserved() {
|
|
|
|
if (this.style.Switch.interlocking) {
|
|
|
|
this.lockArc.show();
|
|
|
|
this.lockArc.attr({
|
|
|
|
style: {
|
|
|
|
lineWidth: 0.5,
|
|
|
|
stroke: this.style.Switch.interlocking.strokeColor,
|
|
|
|
fill: this.style.Switch.interlocking.fillColor
|
|
|
|
},
|
|
|
|
shape: {
|
|
|
|
r: this.style.Section.line.width / 2 + 0.3
|
|
|
|
}
|
|
|
|
});
|
|
|
|
this.lockArc.setStyle({
|
|
|
|
|
|
|
|
});
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2020-09-08 11:19:06 +08:00
|
|
|
// 处理岔芯颜色
|
2020-09-18 11:08:17 +08:00
|
|
|
setSectionState(state) {
|
|
|
|
const sectionC = store.getters['map/getDeviceByCode'](state.sectionCCode);
|
|
|
|
if (sectionC && state.reversePosition) {
|
|
|
|
this.setSwitchModelStatus(this.shapeModelA, sectionC);
|
|
|
|
}
|
2020-09-08 13:15:09 +08:00
|
|
|
const sectionA = store.getters['map/getDeviceByCode'](state.sectionACode);
|
2020-09-18 11:08:17 +08:00
|
|
|
if (sectionA && state.normalPosition && !this.style.Switch.core.graphShow) {
|
|
|
|
this.setSwitchModelStatus(this.shapeModelB, sectionA);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
// 处理道岔元素状态
|
|
|
|
setSwitchModelStatus(section, sectionModel) {
|
|
|
|
// 空闲
|
|
|
|
section.setStyle({'stroke': this.style.Section.line.spareColor});
|
|
|
|
section.show();
|
|
|
|
// 道岔保护区段锁闭
|
|
|
|
if (sectionModel.overlapLock) {
|
|
|
|
section.setStyle({'stroke': this.style.Section.line.protectiveLockColor});
|
2020-09-08 11:19:06 +08:00
|
|
|
section.show();
|
2020-09-18 11:08:17 +08:00
|
|
|
}
|
|
|
|
// 空闲锁闭或者叫进路锁闭
|
|
|
|
if (sectionModel.routeLock) {
|
|
|
|
section.setStyle({'stroke': this.style.Section.line.routeLockColor});
|
|
|
|
section.show();
|
|
|
|
}
|
|
|
|
// 非CBTC车占用
|
|
|
|
if (sectionModel.nctOccupied) {
|
|
|
|
section.setStyle({'stroke': this.style.Section.line.unCommunicationOccupiedColor});
|
|
|
|
section.show();
|
|
|
|
}
|
|
|
|
// CBTC车占用
|
|
|
|
if (sectionModel.ctOccupied) {
|
|
|
|
section.setStyle({'stroke': this.style.Section.line.communicationOccupiedColor});
|
|
|
|
section.show();
|
|
|
|
}
|
|
|
|
if (sectionModel.cutOff) {
|
|
|
|
section.hide();
|
2019-11-29 12:51:58 +08:00
|
|
|
}
|
|
|
|
}
|
2020-12-21 16:28:32 +08:00
|
|
|
setAshShow() {
|
|
|
|
this.shapeModelA.setColor('#7F7F7F');
|
|
|
|
this.shapeModelB.setColor('#7F7F7F');
|
|
|
|
this.shapeModelC.setColor('#7F7F7F');
|
2020-12-21 18:33:29 +08:00
|
|
|
this.name.getNameText().setStyle({textFill: '#7F7F7F'});
|
2020-12-21 16:28:32 +08:00
|
|
|
}
|
2019-11-29 12:51:58 +08:00
|
|
|
setState(model) {
|
2020-03-13 13:01:58 +08:00
|
|
|
if (!this.isShowShape) return;
|
2020-04-09 17:03:22 +08:00
|
|
|
this.recover();
|
2020-10-20 17:49:46 +08:00
|
|
|
this.setSwitchFault(model.split, model.normalPosition, model.reversePosition);
|
2020-02-21 15:49:30 +08:00
|
|
|
if (model.normalPosition) {
|
|
|
|
this.setLocationAction(model); /** 定位*/
|
|
|
|
} else if (model.reversePosition) {
|
|
|
|
this.setInversionAction(model); /** 反位*/
|
|
|
|
} else {
|
2020-06-03 10:12:36 +08:00
|
|
|
this.setLossAction(); // 失去
|
2020-02-21 15:49:30 +08:00
|
|
|
}
|
2020-08-03 15:56:56 +08:00
|
|
|
model.isCiConfirm && this.setCiConfirm(); // 道岔使能显示
|
2020-05-29 16:57:21 +08:00
|
|
|
|
2020-10-22 13:40:56 +08:00
|
|
|
model.singleLock && this.setMonolock(model.normalPosition, model.reversePosition); // 道岔单锁
|
2020-06-03 10:12:36 +08:00
|
|
|
model.blockade && this.block(); // 道岔封锁
|
2020-04-15 11:17:19 +08:00
|
|
|
model.singleLock && model.blockade && this.blockMonolock(); // 单锁&锁闭状态
|
2020-09-11 10:18:07 +08:00
|
|
|
const path = window.location.href;
|
2020-09-18 11:08:17 +08:00
|
|
|
if (!path.includes('/map/draw')) {
|
|
|
|
this.setSectionState(this.model); // 处理元素颜色
|
2020-09-08 11:19:06 +08:00
|
|
|
}
|
2020-08-19 16:45:05 +08:00
|
|
|
// this.interlockingReserved(); // 联锁预留道岔
|
2020-06-03 10:12:36 +08:00
|
|
|
|
2020-03-23 13:48:35 +08:00
|
|
|
if (this.style.Switch.sectionAction.flag) { // 哈尔滨线路处理道岔相关区段颜色
|
2020-03-09 17:02:13 +08:00
|
|
|
const switchModel = Vue.prototype.$jlmap.mapDevice[model.code];
|
|
|
|
if (switchModel.normalPosition != 0) { // 定位情况
|
|
|
|
const sectionC = Vue.prototype.$jlmap.mapDevice[switchModel.sectionCCode];
|
|
|
|
sectionC && sectionC.instance && sectionC.instance.setState(sectionC);
|
|
|
|
} else if (switchModel.normalPosition == 0) { // 反位情况
|
|
|
|
const sectionB = Vue.prototype.$jlmap.mapDevice[switchModel.sectionBCode];
|
|
|
|
sectionB && sectionB.instance && sectionB.instance.setState(sectionB);
|
|
|
|
}
|
|
|
|
}
|
2020-12-21 16:28:32 +08:00
|
|
|
model.noStatus && this.setAshShow();
|
2019-11-29 12:51:58 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
getBoundingRect() {
|
|
|
|
return this.name.getBoundingRect();
|
|
|
|
}
|
|
|
|
|
|
|
|
getShapeTipPoint() {
|
|
|
|
const text = this.name.getNameText();
|
|
|
|
if (text) {
|
|
|
|
const rect = text.getBoundingRect();
|
|
|
|
return {
|
|
|
|
x: rect.x + rect.width / 2,
|
|
|
|
y: rect.y
|
|
|
|
};
|
|
|
|
}
|
|
|
|
return null;
|
|
|
|
}
|
2019-12-04 11:32:30 +08:00
|
|
|
|
|
|
|
drawSelected(selected) {
|
|
|
|
this.highlight && this.highlight.drawSelected(selected);
|
|
|
|
}
|
|
|
|
|
|
|
|
checkIsDrawMap() {
|
|
|
|
const path = window.location.href;
|
|
|
|
if (path.includes('/map/draw')) {
|
|
|
|
this.highlight = new EHighlight(this);
|
|
|
|
this.add(this.highlight);
|
|
|
|
this.on('mouseout', () => { this.highlight.mouseout(); });
|
|
|
|
this.on('mouseover', () => { this.highlight.mouseover(); });
|
|
|
|
}
|
|
|
|
}
|
2020-03-11 15:10:08 +08:00
|
|
|
setShowMode() {}
|
2020-03-13 13:01:58 +08:00
|
|
|
setShowStation(stationCode) {
|
|
|
|
if (!stationCode || this.model.stationCode === stationCode) {
|
|
|
|
this.eachChild(item => {
|
|
|
|
item.show();
|
|
|
|
});
|
2020-06-23 13:52:34 +08:00
|
|
|
if (this.name) {
|
|
|
|
this.style.Switch.text.show && this.model.nameShow ? this.name.show() : this.name.hide();
|
|
|
|
}
|
2020-03-13 13:01:58 +08:00
|
|
|
this.isShowShape = true;
|
|
|
|
this.setState(this.model);
|
|
|
|
} else {
|
|
|
|
this.eachChild(item => {
|
|
|
|
item.hide();
|
|
|
|
});
|
|
|
|
this.isShowShape = false;
|
|
|
|
}
|
|
|
|
}
|
2019-11-29 12:51:58 +08:00
|
|
|
}
|