/* * 车站 */ import Group from 'zrender/src/container/Group'; import ETextName from '../element/ETextName'; import EControl from '../element/EControl'; import EMouse from './EMouse'; import ESingleControl from './ESingleControl'; import EArrow from './EArrow'; import { arrow } from '../utils/ShapePoints'; 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(); this.createTurnBack(); // 创建按图折返 this.createControlMode(); this.setState(model); this.checkIsDrawMap(); } create() { const model = this.model; const style = this.style; 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, 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; } 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], 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); } 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); } } } createTurnBack() { // 创建按图折返 const model = this.model; const style = this.style; if (model.visible && model.isCreateTurnBack) { this.turnBacks = []; for (let index = 0; index < style.Station.turnBack.lamp; index++) { const turnBack = new EControl({ zlevel: this.zlevel, z: this.z, arc: { shape: { cx: model.turnBackPoint.x + style.Station.turnBack.lampSpace * index, cy: model.turnBackPoint.y, r: style.Station.lamp.radiusR }, lineWidth: 0, fill: style.Station.lamp.controlColor }, text: { position: [0, 0], x: model.turnBackPoint.x + style.Station.turnBack.lampSpace * index, y: model.turnBackPoint.y + style.Station.lamp.radiusR + style.Station.text.distance, 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); } this.turnBacks.forEach(lamp => { this.add(lamp); }); } } // 创建控制模式 createControlMode() { const model = this.model; if (model.visible && model.isCreateControlMode) { // 紧急站控 if (this.style.Station.StationControl.lamp.emergencyControlShow) { this.emergencyControl = new ESingleControl({ _subType: 'emergency', style: this.style, zlevel: this.zlevel, z: this.z, point: { 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 }, context: this.style.Station.StationControl.text.emergencyControlText, // model.jjzkContent, pop: false }); this.add(this.emergencyControl); } // 中控按钮 if (this.style.Station.StationControl.lamp.centerControlShow) { this.centerControl = new ESingleControl({ _subType: 'center', style: this.style, zlevel: this.zlevel, z: this.z, point: { 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 }, context: this.style.Station.StationControl.text.centerControlText, // model.zokContent, pop: false }); this.add(this.centerControl); } // 站控按钮 if (this.style.Station.StationControl.lamp.substationControlShow) { this.substationControl = new ESingleControl({ _subType: 'substation', style: this.style, zlevel: this.zlevel, z: this.z, point: { 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 }, context: this.style.Station.StationControl.text.substationControlText, // model.zakContent pop: false }); this.add(this.substationControl); } // 联锁控 if (this.style.Station.StationControl.lamp.interconnectedControlShow) { this.interconnectedControl = new ESingleControl({ _subType: 'interconnected', style: this.style, zlevel: this.zlevel, z: this.z, point: { 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 }, // context: model.lskContent || '联锁控', context:this.style.Station.StationControl.text.interconnectedControlText || '联锁控', pop: false }); this.add(this.interconnectedControl); } // 箭头 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); this.arrowsControl = new EArrow({ zlevel: this.zlevel, z: this.z, style: this.style, count: this.count, drict: 1, point: point, 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, lineWidth: 1, stroke: this.style.sidelineColor }); this.add(this.arrowsControl); } } this.setState(model); } // eslint-disable-next-line no-unused-vars // 设置状态 setState(model) { // switch (model.status) { // case '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); // break; // case '01': // 中控 // 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); // break; // case '02': // 站控 // 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); // break; // case '03': // 紧急站控 // 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); // break; // } } getShapeTipPoint() { return null; } // 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) { this.EMouse && this.EMouse.drawSelected(selected); } 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(); }); } } }