Merge remote-tracking branch 'origin/master'

# Conflicts:
#	src/jmap/config/defaultSkin.js
#	src/jmap/shape/Train/index.js
#	src/jmap/theme/bejing.js
This commit is contained in:
fan 2019-07-25 08:56:56 +08:00
commit 0b9ca8cade
47 changed files with 1416 additions and 1819 deletions

View File

@ -1,96 +1,3 @@
# vue-admin-template
> 这是一个极简的 vue admin 管理后台。它只包含了 Element UI & axios & iconfont & permission control & lint这些搭建后台必要的东西。
[线上地址](http://panjiachen.github.io/vue-admin-template)
[国内访问](https://panjiachen.gitee.io/vue-admin-template)
目前版本为 `v4.0+` 基于 `vue-cli` 进行构建,若你想使用旧版本,可以切换分支到[tag/3.11.0](https://github.com/PanJiaChen/vue-admin-template/tree/tag/3.11.0),它不依赖 `vue-cli`
## Extra
如果你想要根据用户角色来动态生成侧边栏和 router你可以使用该分支[permission-control](https://github.com/PanJiaChen/vue-admin-template/tree/permission-control)
## 相关项目
[vue-element-admin](https://github.com/PanJiaChen/vue-element-admin)
[electron-vue-admin](https://github.com/PanJiaChen/electron-vue-admin)
[vue-typescript-admin-template](https://github.com/Armour/vue-typescript-admin-template)
写了一个系列的教程配套文章,如何从零构建后一个完整的后台项目:
- [手摸手,带你用 vue 撸后台 系列一(基础篇)](https://juejin.im/post/59097cd7a22b9d0065fb61d2)
- [手摸手,带你用 vue 撸后台 系列二(登录权限篇)](https://juejin.im/post/591aa14f570c35006961acac)
- [手摸手,带你用 vue 撸后台 系列三 (实战篇)](https://juejin.im/post/593121aa0ce4630057f70d35)
- [手摸手,带你用 vue 撸后台 系列四(vueAdmin 一个极简的后台基础模板,专门针对本项目的文章,算作是一篇文档)](https://juejin.im/post/595b4d776fb9a06bbe7dba56)
- [手摸手,带你封装一个 vue component](https://segmentfault.com/a/1190000009090836)
## Build Setup
```bash
# 克隆项目
git clone https://github.com/PanJiaChen/vue-admin-template.git
# 进入项目目录
cd vue-admin-template
# 安装依赖
npm install
# 建议不要直接使用 cnpm 安装以来,会有各种诡异的 bug。可以通过如下操作解决 npm 下载速度慢的问题
npm install --registry=https://registry.npm.taobao.org
# 启动服务
npm run dev
```
浏览器访问 [http://localhost:9528](http://localhost:9528)
## 发布
```bash
# 构建测试环境
npm run build:stage
# 构建生产环境
npm run build:prod
```
## 其它
```bash
# 预览发布环境效果
npm run preview
# 预览发布环境效果 + 静态资源分析
npm run preview -- --report
# 代码格式检查
npm run lint
# 代码格式检查并自动修复
npm run lint -- --fix
```
更多信息请参考 [使用文档](https://panjiachen.github.io/vue-element-admin-site/zh/)
## Demo
![demo](https://github.com/PanJiaChen/PanJiaChen.github.io/blob/master/images/demo.gif)
## Browsers support
Modern browsers and Internet Explorer 10+.
| [<img src="https://raw.githubusercontent.com/alrra/browser-logos/master/src/edge/edge_48x48.png" alt="IE / Edge" width="24px" height="24px" />](http://godban.github.io/browsers-support-badges/)</br>IE / Edge | [<img src="https://raw.githubusercontent.com/alrra/browser-logos/master/src/firefox/firefox_48x48.png" alt="Firefox" width="24px" height="24px" />](http://godban.github.io/browsers-support-badges/)</br>Firefox | [<img src="https://raw.githubusercontent.com/alrra/browser-logos/master/src/chrome/chrome_48x48.png" alt="Chrome" width="24px" height="24px" />](http://godban.github.io/browsers-support-badges/)</br>Chrome | [<img src="https://raw.githubusercontent.com/alrra/browser-logos/master/src/safari/safari_48x48.png" alt="Safari" width="24px" height="24px" />](http://godban.github.io/browsers-support-badges/)</br>Safari |
| --------- | --------- | --------- | --------- |
| IE10, IE11, Edge| last 2 versions| last 2 versions| last 2 versions
## License
[MIT](https://github.com/PanJiaChen/vue-admin-template/blob/master/LICENSE) license.
# jl-nclient
Copyright (c) 2017-present PanJiaChen

View File

@ -1,89 +1,6 @@
# vue-admin-template
# jl-nclient
English | [简体中文](./README-zh.md)
> A minimal vue admin template with Element UI & axios & iconfont & permission control & lint
**Live demo:** http://panjiachen.github.io/vue-admin-template
**The current version is `v4.0+` build on `vue-cli`. If you want to use the old version , you can switch branch to [tag/3.11.0](https://github.com/PanJiaChen/vue-admin-template/tree/tag/3.11.0), it does not rely on `vue-cli`**
## Build Setup
```bash
# clone the project
git clone https://github.com/PanJiaChen/vue-element-admin.git
# enter the project directory
cd vue-element-admin
# install dependency
npm install
# develop
npm run dev
```
This will automatically open http://localhost:9527
## Build
```bash
# build for test environment
npm run build:stage
# build for production environment
npm run build:prod
```
## Advanced
```bash
# preview the release environment effect
npm run preview
# preview the release environment effect + static resource analysis
npm run preview -- --report
# code format check
npm run lint
# code format check and auto fix
npm run lint -- --fix
```
Refer to [Documentation](https://panjiachen.github.io/vue-element-admin-site/guide/essentials/deploy.html) for more information
## Demo
![demo](https://github.com/PanJiaChen/PanJiaChen.github.io/blob/master/images/demo.gif)
## Extra
If you want router permission && generate menu by user roles , you can use this branch [permission-control](https://github.com/PanJiaChen/vue-admin-template/tree/permission-control)
For `typescript` version, you can use [vue-typescript-admin-template](https://github.com/Armour/vue-typescript-admin-template) (Credits: [@Armour](https://github.com/Armour))
## Related Project
[vue-element-admin](https://github.com/PanJiaChen/vue-element-admin)
[electron-vue-admin](https://github.com/PanJiaChen/electron-vue-admin)
[vue-typescript-admin-template](https://github.com/Armour/vue-typescript-admin-template)
## Browsers support
Modern browsers and Internet Explorer 10+.
| [<img src="https://raw.githubusercontent.com/alrra/browser-logos/master/src/edge/edge_48x48.png" alt="IE / Edge" width="24px" height="24px" />](http://godban.github.io/browsers-support-badges/)</br>IE / Edge | [<img src="https://raw.githubusercontent.com/alrra/browser-logos/master/src/firefox/firefox_48x48.png" alt="Firefox" width="24px" height="24px" />](http://godban.github.io/browsers-support-badges/)</br>Firefox | [<img src="https://raw.githubusercontent.com/alrra/browser-logos/master/src/chrome/chrome_48x48.png" alt="Chrome" width="24px" height="24px" />](http://godban.github.io/browsers-support-badges/)</br>Chrome | [<img src="https://raw.githubusercontent.com/alrra/browser-logos/master/src/safari/safari_48x48.png" alt="Safari" width="24px" height="24px" />](http://godban.github.io/browsers-support-badges/)</br>Safari |
| --------- | --------- | --------- | --------- |
| IE10, IE11, Edge| last 2 versions| last 2 versions| last 2 versions
## License
[MIT](https://github.com/PanJiaChen/vue-admin-template/blob/master/LICENSE) license.
Copyright (c) 2017-present PanJiaChen

View File

@ -14,6 +14,10 @@ export default class DefaultSkin {
/** 默认字体 大小*/
this.textFontSize = 10;
/** 默认字体 族类*/
this.textFontFormat = 'consolas';
/** 默认字体颜色*/
this.textFontColor = '#C0C0C0';
@ -32,9 +36,43 @@ export default class DefaultSkin {
/** 默认名称和设备的距离*/
this.nameDistance = 2;
/** 计数器字体颜色*/
this.stationCounterTextColor = '#FFFFFF';
/** 计数器边框颜色*/
this.stationCounterBorderColor = '#E4EF50';
/** 延迟解锁倒计时和设备文字之间的距离*/
this.stationDelayUnlockDistance = 3;
/** 延时解锁字体颜色*/
this.stationDelayUnlockTextColor = '#FFFFFF';
/** 延迟解锁边框颜色*/
this.stationDelayUnlockBorderColor = '#FFFFFF';
/** 目的码字体颜色*/
this.destinationTextFontColor = 'yellow';
/** 计数器字体颜色*/
this.stationCounterTextColor = '#FFFFFF';
/** 计数器边框颜色*/
this.stationCounterBorderColor = '#E4EF50';
/** 延迟解锁倒计时和设备文字之间的距离*/
this.stationDelayUnlockDistance = 3;
/** 延时解锁字体颜色*/
this.stationDelayUnlockTextColor = '#FFFFFF';
/** 延迟解锁边框颜色*/
this.stationDelayUnlockBorderColor = '#FFFFFF';
/** 列车长度*/
this.trainWidth = 40;
/** 列车高度*/
this.trainHeight = 20;
/** 列车字号*/
this.trainTextFontSize = 12;
/** 列车HDSA字号*/
this.trainHSDATextFontSize = 9;
/** 列车信号的半径*/
this.trainConflictR = 3;
@ -44,6 +82,12 @@ export default class DefaultSkin {
/** 列车车头比车身高出的长度;上下相比车体伸出去的边框*/
this.trainMoreLength = 0;
/** 列车和车头之间的间距*/
this.trainHeadDistance = 4;
/** 列车竖杠的宽度*/
this.trainConntWidth = 3;
/** 列车竖杠和方向之间的间隔*/
this.trainPadding = 4;
@ -100,8 +144,5 @@ export default class DefaultSkin {
/** 车次窗颜色*/
this.trainWindowColor = '#fff';
/** 列车文字颜色*/
this.trainTextColor = '#ffffff';
}
}

View File

@ -13,7 +13,7 @@ export default class ImageControl extends Group {
this.model = model;
this.state = state;
this.style = style;
this.z = model.zIndex || 1;
this.z = model.zIndex || 1; // 默认5
this._create();
}

View File

@ -36,11 +36,13 @@ export default class LcControl extends Group {
position: [0, 0],
x: model.position.x,
y: model.position.y + this.style.zcControlmodeR + this.style.nameDistance,
fontWeight: 'normal',
fontSize: this.style.stationControlTextSize,
fontFamily: this.style.textFontFormat,
text: model.name,
textFill: '#fff',
textAlign: 'middle',
textVerticalAlign: 'top',
textFont: this.style.stationControlTextSize + 'px ' + this.style.textFontFormat
textVerticalAlign: 'top'
},
style: this.style
});

View File

@ -35,11 +35,13 @@ export default class LimitControl extends Group {
position: [0, 0],
x: model.position.x,
y: model.position.y + this.style.zcControlmodeR + this.style.nameDistance,
fontWeight: 'normal',
fontSize: this.style.stationControlTextSize,
fontFamily: this.style.textFontFormat,
text: model.name,
textFill: '#fff',
textAlign: 'middle',
textVerticalAlign: 'top',
textFont: this.style.stationControlTextSize + 'px ' + this.style.textFontFormat
textVerticalAlign: 'top'
},
style: this.style
});

View File

@ -1,56 +1,85 @@
import Group from 'zrender/src/container/Group';
import Line from 'zrender/src/graphic/shape/Line';
import Circle from 'zrender/src/graphic/shape/Circle';
// import Group from 'zrender/src/container/Group';
// import Line from 'zrender/src/graphic/shape/Line';
// import Circle from 'zrender/src/graphic/shape/Circle';
import Path from 'zrender/src/graphic/Path';
/** 计轴*/
export default class EAxle extends Group {
constructor(model) {
super();
this.model = model;
this.zlevel = model.zlevel;
this.z = 5;
this._create(model);
}
_create(model) {
// 计轴
export const EAxle = Path.extend({
type: 'EAxle',
shape: {
point: null
},
buildPath: function (ctx, model) {
if (model && model.style && model.traingle) {
const axleLength = 2 * model.style.Section.sectionAxleR;
const axleLength = 2 * model.style.Section.axle.radius;
const positionx = model.point.x + model.drictx * (model.traingle.getCos(axleLength));
const positiony = model.point.y + model.dricty * (model.traingle.getCos(axleLength));
// 圆弧
const arcX = positionx - model.dricty * model.traingle.getSin(axleLength);
const arcY = positiony + model.drictx * model.traingle.getSin(axleLength);
const arcR = model.style.Section.axle.radius;
ctx.arc(arcX, arcY, arcR, 0, 2 * Math.PI, false);
ctx.closePath();
this.line = new Line({
zlevel: this.zlevel,
z: this.z,
progressive: model.progressive,
shape: {
x1: positionx - model.traingle.getCos(axleLength) - model.dricty * model.traingle.getSin(axleLength),
y1: positiony + model.drictx * model.traingle.getSin(axleLength) - model.traingle.getSin(axleLength),
x2: positionx + model.traingle.getCos(axleLength) - model.dricty * model.traingle.getSin(axleLength),
y2: positiony + model.drictx * model.traingle.getSin(axleLength) + model.traingle.getSin(axleLength)
},
style: {
GBaseLineWidth: 1,
stroke: model.style.Section.sectionAxleColor
}
});
this.axle = new Circle({
zlevel: this.zlevel,
z: this.z,
progressive: model.progressive,
shape: {
cx: positionx - model.dricty * model.traingle.getSin(axleLength),
cy: positiony + model.drictx * model.traingle.getSin(axleLength),
r: model.style.Section.sectionAxleR
},
style: {
GBaseLineWidth: 1,
stroke: model.style.Section.sectionAxleColor,
fill: model.style.transparentColor
}
});
this.add(this.line);
this.add(this.axle);
const x1 = positionx - model.traingle.getCos(axleLength) - model.dricty * model.traingle.getSin(axleLength);
const y1 = positiony + model.drictx * model.traingle.getSin(axleLength) - model.traingle.getSin(axleLength);
const x2 = positionx + model.traingle.getCos(axleLength) - model.dricty * model.traingle.getSin(axleLength);
const y2 = positiony + model.drictx * model.traingle.getSin(axleLength) + model.traingle.getSin(axleLength);
ctx.moveTo(x1, y1);
ctx.lineTo(x2, y2);
ctx.closePath();
}
}
}
});
// export default class EAxle extends Group {
// constructor(model) {
// super();
// this.model = model;
// this.zlevel = model.zlevel;
// this.z = 5;
// this._create(model);
// }
// _create(model) {
// if (model && model.style && model.traingle) {
// const axleLength = 2 * model.style.Section.axle.radius;
// const positionx = model.point.x + model.drictx * (model.traingle.getCos(axleLength));
// const positiony = model.point.y + model.dricty * (model.traingle.getCos(axleLength));
// this.line = new Line({
// zlevel: this.zlevel,
// z: this.z,
// progressive: model.progressive,
// shape: {
// x1: positionx - model.traingle.getCos(axleLength) - model.dricty * model.traingle.getSin(axleLength),
// y1: positiony + model.drictx * model.traingle.getSin(axleLength) - model.traingle.getSin(axleLength),
// x2: positionx + model.traingle.getCos(axleLength) - model.dricty * model.traingle.getSin(axleLength),
// y2: positiony + model.drictx * model.traingle.getSin(axleLength) + model.traingle.getSin(axleLength)
// },
// style: {
// GBaseLineWidth: 1,
// stroke: model.style.Section.axle.color
// }
// });
// this.axle = new Circle({
// zlevel: this.zlevel,
// z: this.z,
// progressive: model.progressive,
// shape: {
// cx: positionx - model.dricty * model.traingle.getSin(axleLength),
// cy: positiony + model.drictx * model.traingle.getSin(axleLength),
// r: model.style.Section.axle.radius
// },
// style: {
// GBaseLineWidth: 1,
// stroke: model.style.Section.axle.color,
// fill: model.style.transparentColor
// }
// });
// this.add(this.line);
// this.add(this.axle);
// }
// }
// }

View File

@ -1,8 +1,80 @@
import Group from 'zrender/src/container/Group';
import BezierCurve from 'zrender/src/graphic/shape/BezierCurve';
import Line from 'zrender/src/graphic/shape/Line';
import JTriangle from '../../utils/JTriangle';
// import Path from 'zrender/src/graphic/Path';
// 创建区段限速限集合
// export const ELimitLines = Path.extend({
// type: 'ELimitLines',
// shape: {
// points: null
// },
// buildPath: function (ctx, model) {
// /** 创建区段*/
// if (model && model.points.length > 1) {
// if (model.isCurve) {
// ctx.beginPath();
// const shape = {};
// for (let i = 1; i < (model.points.length - 1); i++) {
// shape[`cpx${i}`] = model.points[i].x;
// shape[`cpy${i}`] = model.points[i].y;
// }
// shape[`x1`] = model.points[0].x;
// shape[`y1`] = model.points[0].y;
// shape[`x2`] = model.points[model.points.length - 1].x;
// shape[`y2`] = model.points[model.points.length - 1].y;
// ctx.moveTo(shape[`x1`], shape[`y1`]);
// if (model.points.length <= 3) {
// ctx.quadraticCurveTo(shape[`cpx1`], shape[`cpy1`], shape[`x2`], shape[`y2`]);
// } else {
// ctx.bezierCurveTo(shape[`cpx1`], shape[`cpy1`], shape[`cpx2`], shape[`cpy2`], shape[`x2`], shape[`y2`]);
// }
// } else {
// const swPadding = model.style.Switch.core.switchLen; // 定位和反位时区段距离岔芯的距离
// var switchWidth = model.style.Section.line.width + model.style.Section.line.beyondWidth; // 道岔宽度
// const beg = Object.assign({}, model.points[0]);
// const end = Object.assign({}, model.points[model.points.length - 1]);
// if (model.isSwitchSection && beg.y !== end.y) {
// const swch = model.switch;
// if (swch) {
// const traingle = new JTriangle(swch.intersection, swch.skew);
// if ((swch.intersection.x === beg.x) && (swch.intersection.y === beg.y)) {
// beg.x = beg.x + traingle.drictx * (swPadding + switchWidth) * traingle.getCotRate();
// beg.y = beg.y + traingle.dricty * (swPadding + switchWidth);
// }
// if ((swch.intersection.x === end.x) && (swch.intersection.y === end.y)) {
// end.x = end.x + traingle.drictx * (swPadding + switchWidth) * traingle.getCotRate();
// end.y = end.y + traingle.dricty * (swPadding + switchWidth);
// }
// }
// }
// if (model.points.length == 2) {
// ctx.moveTo(beg.x, beg.y);
// ctx.lineTo(end.x, end.y);
// ctx.closePath();
// } else {
// ctx.moveTo(beg.x, beg.y);
// ctx.lineTo(model.points[1].x, model.points[1].y);
// ctx.closePath();
// for (let i = 1; i < (model.points.length - 2); i++) {
// ctx.moveTo(model.points[i].x, model.points[i].y);
// ctx.lineTo(model.points[i + 1].x, model.points[i + 1].y);
// ctx.closePath();
// }
// ctx.moveTo(model.points[model.points.length - 2].x, model.points[model.points.length - 2].y);
// ctx.lineTo(end.x, end.y);
// ctx.closePath();
// }
// }
// }
// }
// });
/** 创建区段限速限集合*/
export default class ELimitLines extends Group {
constructor(model) {
super();
@ -36,14 +108,34 @@ export default class ELimitLines extends Group {
shape: shape,
position: model.position,
style: {
lineWidth: model.style.Section.sectionSpeedLimitLinewidth,
stroke: model.style.Section.sectionSpeedLimitColor,
lineWidth: model.style.Section.speedLimit.width,
stroke: model.style.Section.speedLimit.lineColor,
fillOpacity: 0
}
}));
} else {
// const beg = Object.assign({}, model.points[0]);
// const end = Object.assign({}, model.points[model.points.length - 1]);
const swPadding = model.style.Switch.core.switchLen; // 定位和反位时区段距离岔芯的距离
var switchWidth = model.style.Section.line.width + model.style.Section.line.beyondWidth; // 道岔宽度
const beg = Object.assign({}, model.points[0]);
const end = Object.assign({}, model.points[model.points.length - 1]);
if (model.isSwitchSection && beg.y !== end.y) {
const swch = model.switch;
if (swch) {
const traingle = new JTriangle(swch.intersection, swch.skew);
if ((swch.intersection.x === beg.x) && (swch.intersection.y === beg.y)) {
beg.x = beg.x + traingle.drictx * (swPadding + switchWidth) * traingle.getCotRate();
beg.y = beg.y + traingle.dricty * (swPadding + switchWidth);
}
if ((swch.intersection.x === end.x) && (swch.intersection.y === end.y)) {
end.x = end.x + traingle.drictx * (swPadding + switchWidth) * traingle.getCotRate();
end.y = end.y + traingle.dricty * (swPadding + switchWidth);
}
}
}
if (model.points.length == 2) {
this.add(new Line({
@ -59,8 +151,8 @@ export default class ELimitLines extends Group {
y2: end.y
},
style: {
lineWidth: model.style.Section.sectionSpeedLimitLinewidth,
stroke: model.style.Section.sectionSpeedLimitColor
lineWidth: model.style.Section.speedLimit.width,
stroke: model.style.Section.speedLimit.lineColor
}
}));
} else {
@ -77,8 +169,8 @@ export default class ELimitLines extends Group {
y2: model.points[1].y
},
style: {
lineWidth: model.style.Section.sectionSpeedLimitLinewidth,
stroke: model.style.Section.sectionSpeedLimitColor
lineWidth: model.style.Section.speedLimit.width,
stroke: model.style.Section.speedLimit.lineColor
}
}));
@ -96,8 +188,8 @@ export default class ELimitLines extends Group {
y2: model.points[i + 1].y
},
style: {
lineWidth: model.style.Section.sectionSpeedLimitLinewidth,
stroke: model.style.Section.sectionSpeedLimitColor
lineWidth: model.style.Section.speedLimit.width,
stroke: model.style.Section.speedLimit.lineColor
}
}));
}
@ -115,8 +207,8 @@ export default class ELimitLines extends Group {
y2: end.y
},
style: {
lineWidth: model.style.Section.sectionSpeedLimitLinewidth,
stroke: model.style.Section.sectionSpeedLimitColor
lineWidth: model.style.Section.speedLimit.width,
stroke: model.style.Section.speedLimit.lineColor
}
}));
}

View File

@ -35,8 +35,8 @@ export default class ELines extends Group {
culling: true,
shape: shape,
style: {
lineWidth: model.style.Section.sectionWidth,
stroke: model.style.Section.sectionSpareColor,
lineWidth: model.style.Section.line.width,
stroke: model.style.Section.line.spareColor,
fillOpacity: 0
}
}));
@ -54,8 +54,8 @@ export default class ELines extends Group {
y2: model.points[i + 1].y
},
style: {
lineWidth: model.style.Section.sectionWidth,
stroke: model.style.Section.sectionSpareColor
lineWidth: model.style.Section.line.width,
stroke: model.style.Section.line.spareColor
}
}));
}

View File

@ -6,43 +6,50 @@ export default class ERelease extends Group {
constructor(model) {
super();
this.model = model;
this.zlevel = model.zlevel;
this.z = model.z;
this._create();
this.isNew = false;
}
_create() {
const model = this.model;
this.Lines = new Line({
zlevel: model.zlevel,
z: this.z,
shape: model.shape,
progressive: model.progressive,
style: {
lineWidth: model.lineWidth,
stroke: model.stroke
}
});
this.add(this.Lines);
if (!this.isNew) {
const model = this.model;
this.isNew = true;
this.lines = new Line({
zlevel: model.zlevel,
z: model.z,
shape: model.shape,
progressive: model.progressive,
style: {
lineWidth: model.lineWidth,
stroke: model.stroke
}
});
this.add(this.lines);
}
}
setStyle(model) {
this.Lines.setStyle(model);
this._create();
this.lines.setStyle(model);
}
hide() {
this.Lines.hide();
this._create();
this.lines.hide();
}
show() {
this.Lines.show();
this._create();
this.lines.show();
}
// 开始动画
animateStyle(loop, animates) {
this._create();
if (animates && animates.length) {
this.eachChild((child) => {
if (child.animateStyle && child.isLine) {
if (child.animateStyle) {
let an = child.animateStyle(loop);
animates.forEach(elem => {
an = an.when(elem.time, elem.styles);
@ -55,8 +62,9 @@ export default class ERelease extends Group {
// 结束动画
stopAnimation(flag) {
this._create();
this.eachChild((child) => {
if (child.stopAnimation && child.isLine) {
if (child.stopAnimation) {
child.stopAnimation(flag);
}
});

View File

@ -10,23 +10,29 @@ export default class ESeparator extends Group {
this.zlevel = model.zlevel;
this.style = model.style;
this.z = 6;
this._create(model);
this.setType();
}
_create(model) {
createModel(points, lineWidth = null, stroke = null) {
const model = this.model;
this.partition = new Polyline({
zlevel: this.zlevel,
progressive: model.progressive,
z: this.z,
shape: {
points: []
points: points
},
style: {
lineWidth: this.style.Section.sectionSeparatorWidth,
stroke: this.style.Section.sectionSeparatorColor
lineWidth: lineWidth || this.style.Section.separator.width,
stroke: stroke || this.style.Section.separator.color
}
});
this.add(this.partition);
}
// 创建 侵限分隔符
createCircle() {
const model = this.model;
this.circle = new Circle({
zlevel: this.zlevel,
z: this.z,
@ -34,53 +40,46 @@ export default class ESeparator extends Group {
shape: {
cx: model.point.x,
cy: model.point.y,
r: this.style.Section.sectionWidth
r: this.style.Section.line.width
},
style: {
stroke: this.style.Section.sectionInvadeColor,
stroke: this.style.Section.line.invadeColor,
GBaseLineWidth: 0.5,
fill: this.style.transparentColor
}
});
this.add(this.partition);
this.setType();
this.add(this.circle);
}
setType() {
const type = this.model.sepType;
const model = this.model;
if (model && this.style && model.traingle) {
this.remove(this.circle);
if (type === '00') {
this.partition.setShape('points', [
[model.point.x, model.point.y],
[model.point.x, model.point.y]
]);
} else if (type === '01') {
this.partition.setShape('points', [
[model.point.x, model.point.y - (this.style.Section.sectionWidth)],
[model.point.x, model.point.y + (this.style.Section.sectionWidth)]
]);
this.add(this.partition);
} else if (type === '02') {
this.partition.setShape('points', [
[model.point.x + model.drict * (this.style.Section.sectionWidth), model.point.y - (this.style.Section.sectionWidth * 1.5)],
[model.point.x, model.point.y - (this.style.Section.sectionWidth * 1.5)],
[model.point.x, model.point.y + (this.style.Section.sectionWidth * 1.5)]
]);
this.add(this.partition);
} else if (type === '03') {
this.partition.setShape('points', [
[model.point.x + model.drict * (this.style.Section.sectionWidth) * 1.2, model.point.y - (this.style.Section.sectionWidth * 1.2)],
[model.point.x, model.point.y - (this.style.Section.sectionWidth * 1.2)],
[model.point.x, model.point.y + (this.style.Section.sectionWidth * 1.2)],
[model.point.x + model.drict * (this.style.Section.sectionWidth) * 1.2, model.point.y + (this.style.Section.sectionWidth * 1.2)]
]);
this.add(this.partition);
this.partition.setStyle({'lineWidth': this.style.Section.sectionEndSeparatorWidth, 'stroke': this.style.Section.sectionEndSeparatorStroke });
} else if (type === '04') {
this.add(this.circle);
if (type === '01') { // 普通分割
const points = [
[model.point.x, model.point.y - (this.style.Section.line.width)],
[model.point.x, model.point.y + (this.style.Section.line.width)]
];
this.createModel(points);
} else if (type === '02') { // 单侧分割符
const points = [
[model.point.x + model.drict * (this.style.Section.line.width), model.point.y - (this.style.Section.line.width * 1.5)],
[model.point.x, model.point.y - (this.style.Section.line.width * 1.5)],
[model.point.x, model.point.y + (this.style.Section.line.width * 1.5)]
];
this.createModel(points);
} else if (type === '03') { // 尽头分隔符
const points = [
[model.point.x + model.drict * (this.style.Section.line.width) * 1.2, model.point.y - (this.style.Section.line.width * 1.2)],
[model.point.x, model.point.y - (this.style.Section.line.width * 1.2)],
[model.point.x, model.point.y + (this.style.Section.line.width * 1.2)],
[model.point.x + model.drict * (this.style.Section.line.width) * 1.2, model.point.y + (this.style.Section.line.width * 1.2)]
];
const lineWidth = this.style.Section.separator.endWidth;
const stroke = this.style.Section.separator.endColor;
this.createModel(points, lineWidth, stroke);
} else if (type === '04') { // 侵限分隔符
this.createCircle();
}
}

View File

@ -4,7 +4,7 @@ import ERelease from './ERelease'; // 线段 (共有)
import ELimitLines from './ELimitLines'; // 区段限速 (私有)
import ELines from './ELines'; // 创建多线条 曲线 (私有)
import ESeparator from './ESeparator'; // 分隔符 (私有)
import EAxle from './EAxle'; // 创建计轴 (私有)
import { EAxle } from './EAxle'; // 创建计轴 (私有)
import JTriangle from '../../utils/JTriangle';
/** 区段*/
@ -14,7 +14,7 @@ export default class Section extends Group {
this._code = _code;
this._type = _type;
this.zlevel = zlevel;
this.z = model.layer || 5;
this.z = 5;
this.model = model;
this.state = state;
this.style = style;
@ -32,6 +32,7 @@ export default class Section extends Group {
model.logicSectionNum.length == 1 && model.logicSectionNum[0] == 0) ||
model.type === '02') {
this.createSection(); // 创建区段
this.creatRelease(); // 创建延时释放
this.createSeparator(); // 创建分隔符
if (model.type === '01') {
this.createAxles(); // 创建计轴
@ -49,19 +50,22 @@ export default class Section extends Group {
this.section = new ELines({
zlevel: this.zlevel,
z: this.z,
progressive: 1,
isSwitchSection: model.isSwitchSection,
isCurve: model.isCurve,
points: model.points,
style: style
});
// 创建延时释放
const traingle = new JTriangle(model.points[0], model.points[model.points.length - 1]);
this.add(this.section);
}
// 创建延时释放 (需要在创建)
creatRelease() {
const model = this.model;
const style = this.style;
const traingle = new JTriangle(model.points[0], model.points[model.points.length - 1]);
this.release = new ERelease({
zlevel: model.zlevel,
progressive: 6,
zlevel: this.zlevel,
z: this.z,
shape: {
x1: model.points[0].x + traingle.getCos(traingle.absz / 3),
@ -69,47 +73,51 @@ export default class Section extends Group {
x2: model.points[0].x + traingle.getCos(traingle.absz / 3 * 2),
y2: model.points[0].y + traingle.getSin(traingle.absz / 3 * 2)
},
lineWidth: style.Section.sectionWidth,
stroke: style.Section.sectionSpareColor
lineWidth: style.Section.line.width,
stroke: style.Section.line.spareColor
});
let x = traingle.drictx * (style.Section.sectionSpeedLimitDistance) * traingle.getSinRate();
let y = traingle.dricty * (style.Section.sectionSpeedLimitDistance) * traingle.getCosRate();
this.add(this.release);
}
// 创建限速线 (需要在创建)
creatSpeedLimit() {
const model = this.model;
const style = this.style;
const traingle = new JTriangle(model.points[0], model.points[model.points.length - 1]);
let x = traingle.drictx * (style.Section.speedLimit.Distance) * traingle.getSinRate();
let y = traingle.dricty * (style.Section.speedLimit.Distance) * traingle.getCosRate();
if (x == Infinity) { x = 0; }
if (y == Infinity) { y = 0; }
// 创建限速线
this.speedLimitLeft = new ELimitLines({
zlevel: this.zlevel,
z: this.z,
progressive: 5,
position: [x, -y],
isCurve: model.isCurve,
points: model.points,
isSwitchSection: model.isSwitchSection,
relSwitchCode: model.relSwitchCode,
style: style
});
this.speedLimitRight = new ELimitLines({
zlevel: this.zlevel,
z: this.z,
progressive: 5,
position: [-x, y],
isCurve: model.isCurve,
points: model.points,
isSwitchSection: model.isSwitchSection,
relSwitchCode: model.relSwitchCode,
style: style
});
this.add(this.section);
this.add(this.release);
if (!this.speedLimitLeft && !this.speedLimitRight) {
this.speedLimitLeft = new ELimitLines({
zlevel: this.zlevel,
z: this.z,
position: [x, -y],
style: style,
switch: model.switch,
isSwitchSection: model.isSwitchSection,
relSwitchCode: model.relSwitchCode,
isCurve: model.isCurve, // 是否曲线
points: model.points
});
this.speedLimitRight = new ELimitLines({
zlevel: this.zlevel,
z: this.z,
position: [-x, y],
style: style,
switch: model.switch,
isSwitchSection: model.isSwitchSection,
relSwitchCode: model.relSwitchCode,
isCurve: model.isCurve, // 是否曲线
points: model.points
});
}
this.add(this.speedLimitLeft);
this.add(this.speedLimitRight);
}
/** 创建区段名称*/
// 创建区段名称
createSectionText() {
const model = this.model;
const style = this.style;
@ -123,22 +131,22 @@ export default class Section extends Group {
let tempx = x;
let tempy = y;
if (style.Section.sectionTextPosition == 1) {
tempy = tempy - style.textFontSize;
} else if (style.Section.sectionTextPosition == -1) {
tempy = tempy + style.textFontSize;
} else if (style.Section.sectionTextPosition == 0) {
if (style.Section.text.position == 1) {
tempy = tempy - style.Section.text.fontSize;
} else if (style.Section.text.position == -1) {
tempy = tempy + style.Section.text.fontSize;
} else if (style.Section.text.position == 0) {
// 根据列车上下行进行坐标偏移
const traingle = new JTriangle(model.points[0], model.points[model.points.length - 1]);
if (model.trainPosType === '01') {
tempy -= (style.Section.sectionWidth * 1.5);
tempy -= (style.Section.line.width * 1.5);
if (model.type === '01') {
tempy += traingle.getCos(style.textFontSize * 0.8 + style.nameDistance) - style.textFontSize * 2;
tempy += traingle.getCos(style.Section.text.fontSize * 0.8 + style.nameDistance) - style.Section.text.fontSize * 2;
}
} else {
tempy += (style.Section.sectionWidth * 1.5);
tempy += (style.Section.line.width * 1.5);
if (model.type === '01') {
tempy -= traingle.getCos(style.textFontSize * 0.8 + style.nameDistance) - style.textFontSize * 2;
tempy -= traingle.getCos(style.Section.text.fontSize * 0.8 + style.nameDistance) - style.Section.text.fontSize * 2;
}
}
}
@ -148,25 +156,27 @@ export default class Section extends Group {
// 如果不是逻辑区段,让名称和区段保持点距离
const traingle = new JTriangle(model.points[0], model.points[model.points.length - 1]);
if (model.type === '01') {
tempx += traingle.getSin(style.textFontSize * 0.8 + style.nameDistance);
tempx += traingle.getSin(style.Section.text.fontSize * 0.8 + style.nameDistance);
}
}
// 创建区段名称
const fontSize = style.type == '02' ? style.textFontSize + 2 : style.textFontSize;
const fontSize = model.type == '02' ? style.Section.text.fontSize + 2: style.Section.text.fontSize;
this.sectionText = new ETextName({
_subType: 'Text',
zlevel: this.zlevel,
z: this.z + 6,
style: this.style,
silent: false,
x: tempx,
y: tempy,
fontWeight: 'bold',
fontSize: fontSize,
fontFamily: style.textFontFormat,
text: model.name,
textFont: fontSize + 'px ' + style.textFontFormat,
textFill: style.textFontColor,
textAlign: 'center',
textPosition: 'inside',
textVerticalAlign: 'middle',
style: this.style
textFill: style.Section.text.fontColor,
textAlign: style.Section.text.textAlign,
textPosition: style.Section.text.textPosition,
textVerticalAlign: style.Section.text.textVerticalAlign
});
this.add(this.sectionText);
}
@ -187,11 +197,13 @@ export default class Section extends Group {
z: 6,
x: tempx + model.standTrackNamePosition.x,
y: tempy + model.standTrackNamePosition.y,
fontWeight: 'bold',
fontSize: style.Section.text.fontSize,
fontFamily: style.textFontFormat,
text: model.standTrackName,
textFont: style.textFontSize + 'px ' + style.textFontFormat,
textFill: style.textFontColor,
textAlign: 'center',
textPosition: 'inside',
textFill: style.Section.text.fontColor,
textAlign: style.Section.text.textAlign,
textPosition: style.Section.text.textPosition,
style: this.style
});
// 添加视图
@ -205,12 +217,14 @@ export default class Section extends Group {
zlevel: this.zlevel,
z: 6,
x: x + model.reentryTrackNamePosition.x,
y: y + model.reentryTrackNamePosition.y + style.nameDistance + style.textFontSize,
y: y + model.reentryTrackNamePosition.y + style.nameDistance + style.Section.text.fontSize,
fontWeight: 'bold',
fontSize: style.Section.text.fontSize,
fontFamily: style.textFontFormat,
text: model.reentryTrackName,
textFont: style.textFontSize + 'px ' + style.textFontFormat,
textFill: style.textFontColor,
textAlign: 'center',
textPosition: 'inside',
textFill: style.Section.text.fontColor,
textAlign: style.Section.text.textAlign,
textPosition: style.Section.text.textPosition,
style: this.style
});
// 添加视图
@ -224,12 +238,14 @@ export default class Section extends Group {
zlevel: this.zlevel,
z: 6,
x: x + model.transferTrackNamePosition.x,
y: y + model.transferTrackNamePosition.y + style.nameDistance + style.textFontSize * 2,
y: y + model.transferTrackNamePosition.y + style.nameDistance + style.Section.text.fontSize * 2,
fontWeight: 'bold',
fontSize: style.Section.text.fontSize,
fontFamily: style.textFontFormat,
text: model.transferTrackName,
textFont: style.textFontSize + 'px ' + style.textFontFormat,
textFill: style.textFontColor,
textAlign: 'center',
textPosition: 'inside',
textFill: style.Section.text.fontColor,
textAlign: style.Section.text.textAlign,
textPosition: style.Section.text.textPosition,
style: this.style
});
// 添加视图
@ -244,11 +260,13 @@ export default class Section extends Group {
z: 6,
x: x + model.destinationCodePoint.x,
y: y + model.destinationCodePoint.y,
fontWeight: 'bold',
fontSize: style.Section.text.fontSize,
fontFamily: style.textFontFormat,
text: model.destinationCode,
textFont: style.textFontSize + 'px ' + style.textFontFormat,
textFill: style.destinationTextFontColor,
textAlign: 'center',
textPosition: 'inside',
textAlign: style.Section.text.textAlign,
textPosition: style.Section.text.textPosition,
style: this.style
});
// 添加视图
@ -257,7 +275,7 @@ export default class Section extends Group {
}
}
/** 创建计轴*/
// 创建计轴 (需要在创建)
createAxles() {
const model = this.model;
const style = this.style;
@ -267,54 +285,78 @@ export default class Section extends Group {
if (model && style && model.axleShow && model.points && model.points.length > 1) {
traingle = new JTriangle(model.points[0], model.points[1]);
this.lUpAxle = new EAxle({
style: style,
progressive: 4,
zlevel: this.zlevel,
point: {
x: model.points[0].x,
y: model.points[0].y
z: this.z + 5, // 层级大于道岔z 否则会压住显示完整
shape: {
point: {
x: model.points[0].x,
y: model.points[0].y
},
drictx: 1,
dricty: -1,
traingle: traingle,
style: style
},
drictx: 1,
dricty: -1,
traingle: traingle
style: {
GBaseLineWidth: 1,
stroke: style.Section.axle.color
}
});
this.lBottomAxle = new EAxle({
style: style,
progressive: 4,
zlevel: this.zlevel,
point: {
x: model.points[0].x,
y: model.points[0].y
z: this.z + 5, // 层级大于道岔z 否则会压住显示完整
shape: {
point: {
x: model.points[0].x,
y: model.points[0].y
},
drictx: 1,
dricty: 1,
traingle: traingle,
style: style
},
drictx: 1,
dricty: 1,
traingle: traingle
style: {
GBaseLineWidth: 1,
stroke: style.Section.axle.color
}
});
traingle = new JTriangle(model.points[model.points.length - 2], model.points[model.points.length - 1]);
this.rUpAxle = new EAxle({
style: style,
progressive: 4,
zlevel: this.zlevel,
point: {
x: model.points[model.points.length - 1].x,
y: model.points[model.points.length - 1].y
z: this.z + 5, // 层级大于道岔z 否则会压住显示完整
shape: {
point: {
x: model.points[model.points.length - 1].x,
y: model.points[model.points.length - 1].y
},
drictx: -1,
dricty: -1,
traingle: traingle,
style: style
},
drictx: -1,
dricty: -1,
traingle: traingle
style: {
GBaseLineWidth: 1,
stroke: style.Section.axle.color
}
});
this.rBottomAxle = new EAxle({
style: style,
progressive: 4,
zlevel: this.zlevel,
point: {
x: model.points[model.points.length - 1].x,
y: model.points[model.points.length - 1].y
z: this.z + 5, // 层级大于道岔z 否则会压住显示完整
shape: {
point: {
x: model.points[model.points.length - 1].x,
y: model.points[model.points.length - 1].y
},
drictx: -1,
dricty: 1,
traingle: traingle,
style: style
},
drictx: -1,
dricty: 1,
traingle: traingle
style: {
GBaseLineWidth: 1,
stroke: style.Section.axle.color
}
});
this.add(this.lUpAxle);
@ -324,7 +366,7 @@ export default class Section extends Group {
}
}
/** 创建分隔符*/
// 创建分隔符 (内层需要在创建)
createSeparator() {
const model = this.model;
const style = this.style;
@ -335,7 +377,6 @@ export default class Section extends Group {
traingle = new JTriangle(model.points[0], model.points[1]);
this.lPartition = new ESeparator({
style: style,
progressive: 2,
zlevel: this.zlevel,
traingle: traingle,
point: {
@ -350,7 +391,6 @@ export default class Section extends Group {
traingle = new JTriangle(model.points[model.points.length - 2], model.points[model.points.length - 1]);
this.rPartition = new ESeparator({
style: style,
progressive: 2,
zlevel: this.zlevel,
traingle: traingle,
point: {
@ -381,13 +421,17 @@ export default class Section extends Group {
this.section.stopAnimation(true);
this.section.setStyle({
fill: this.style.backgroundColor,
stroke: this.style.Section.sectionSpareColor,
lineWidth: this.style.Section.sectionWidth
stroke: this.style.Section.line.spareColor,
lineWidth: this.style.Section.line.width
});
this.release.hide();
this.speedLimitLeft.hide();
this.speedLimitRight.hide();
if (this.release) {
this.release.hide();
}
if (this.speedLimitLeft && this.speedLimitRight) {
this.remove(this.speedLimitLeft);
this.remove(this.speedLimitRight);
}
}
}
@ -395,8 +439,8 @@ export default class Section extends Group {
undefine() {
if (this.section) {
this.section.setStyle({
stroke: this.style.Section.sectionUndefinedColor,
lineWidth: this.style.Section.sectionWidth
stroke: this.style.Section.line.undefinedColor,
lineWidth: this.style.Section.line.width
});
}
}
@ -405,8 +449,8 @@ export default class Section extends Group {
spare() {
if (this.section) {
this.section.setStyle({
stroke: this.style.Section.sectionSpareColor,
lineWidth: this.style.Section.sectionWidth
stroke: this.style.Section.line.spareColor,
lineWidth: this.style.Section.line.width
});
}
}
@ -415,8 +459,8 @@ export default class Section extends Group {
communicationOccupied() {
if (this.section) {
this.section.setStyle({
stroke: this.style.Section.sectionCommunicationOccupiedColor,
lineWidth: this.style.Section.sectionWidth + this.style.Section.sectionBeyondWidth
stroke: this.style.Section.line.communicationOccupiedColor,
lineWidth: this.style.Section.line.width + this.style.Section.line.beyondWidth
});
}
}
@ -425,8 +469,8 @@ export default class Section extends Group {
unCommunicationOccupied() {
if (this.section) {
this.section.setStyle({
stroke: this.style.Section.sectionUnCommunicationOccupiedColor,
lineWidth: this.style.Section.sectionWidth + this.style.Section.sectionBeyondWidth
stroke: this.style.Section.line.unCommunicationOccupiedColor,
lineWidth: this.style.Section.line.width + this.style.Section.line.beyondWidth
});
}
}
@ -435,8 +479,8 @@ export default class Section extends Group {
routeLock() {
if (this.section) {
this.section.setStyle({
stroke: this.style.Section.sectionRouteLockColor,
lineWidth: this.style.Section.sectionWidth + this.style.Section.sectionBeyondWidth
stroke: this.style.Section.line.routeLockColor,
lineWidth: this.style.Section.line.width + this.style.Section.line.beyondWidth
});
}
}
@ -445,8 +489,8 @@ export default class Section extends Group {
block() {
if (this.section) {
this.section.setStyle({
stroke: this.style.Section.sectionBlockColor,
lineWidth: this.style.Section.sectionWidth + this.style.Section.sectionBeyondWidth
stroke: this.style.Section.line.blockColor,
lineWidth: this.style.Section.line.width + this.style.Section.line.beyondWidth
});
}
}
@ -455,8 +499,8 @@ export default class Section extends Group {
faultLock() {
if (this.section) {
this.section.setStyle({
stroke: this.style.Section.sectionFaultLockColor,
lineWidth: this.style.Section.sectionWidth + this.style.Section.sectionBeyondWidth
stroke: this.style.Section.line.faultLockColor,
lineWidth: this.style.Section.line.width + this.style.Section.line.beyondWidth
});
}
}
@ -465,8 +509,8 @@ export default class Section extends Group {
atcExcision() {
if (this.section) {
this.section.setStyle({
stroke: this.style.Section.sectionAtcExcisionColor,
lineWidth: this.style.Section.sectionWidth + this.style.Section.sectionBeyondWidth
stroke: this.style.Section.line.atcExcisionColor,
lineWidth: this.style.Section.line.width + this.style.Section.line.beyondWidth
});
}
}
@ -477,7 +521,7 @@ export default class Section extends Group {
this.atcExcision();
this.section.animateStyle(true, [
{ time: 1000, styles: { stroke: this.style.backgroundColor } },
{ time: 2000, styles: { stroke: this.style.Section.sectionAtsExcisionColor, lineWidth: this.style.Section.sectionWidth + this.style.Section.sectionBeyondWidth } }
{ time: 2000, styles: { stroke: this.style.Section.line.atsExcisionColor, lineWidth: this.style.Section.line.width + this.style.Section.line.beyondWidth } }
]);
}
}
@ -486,63 +530,63 @@ export default class Section extends Group {
protectiveLock() {
if (this.section) {
this.section.setStyle({
stroke: this.style.Section.sectionProtectiveLockColor,
lineWidth: this.style.Section.sectionWidth + this.style.Section.sectionBeyondWidth
stroke: this.style.Section.line.protectiveLockColor,
lineWidth: this.style.Section.line.width + this.style.Section.line.beyondWidth
});
}
}
/** 延时释放 10*/
timeRelease() {
async timeRelease() {
this.section.setStyle({
stroke: this.style.Section.line.routeLockColor,
lineWidth: this.style.Section.line.width + this.style.Section.line.beyondWidth
});
if (this.release) {
this.section.setStyle({
stroke: this.style.Section.sectionRouteLockColor,
lineWidth: this.style.Section.sectionWidth + this.style.Section.sectionBeyondWidth
});
this.release.show();
this.release.setStyle('lineWidth', this.style.Section.sectionWidth + this.style.Section.sectionBeyondWidth);
this.release.setStyle('stroke', this.style.Section.sectionRouteLockColor);
this.release.animateStyle(true)
.when(1000, { stroke: this.style.Section.sectionRouteLockColor })
.when(2000, { stroke: this.style.Section.sectionTimeReleaseColor })
.start();
this.release.setStyle({
stroke: this.style.Section.line.routeLockColor,
lineWidth: this.style.Section.line.width + this.style.Section.line.beyondWidth
});
this.release.animateStyle(true, [
{ time: 1000, styles: { stroke: this.style.Section.line.routeLockColor } },
{ time: 2000, styles: { stroke: this.style.Section.line.timeReleaseColor } }
]);
}
}
/** 保护区段延时解锁 11*/
protectiveTimeRelease() {
if (this.release) {
this.section.setStyle({
stroke: this.style.Section.sectionProtectiveLockColor,
lineWidth: this.style.Section.sectionWidth + this.style.Section.sectionBeyondWidth
});
this.release.show();
this.release.setStyle('lineWidth', this.style.Section.sectionWidth + this.style.Section.sectionBeyondWidth);
this.release.setStyle('stroke', this.style.Section.sectionProtectiveLockColor);
this.release.animateStyle(true)
.when(1000, { stroke: this.style.Section.sectionProtectiveLockColor })
.when(2000, { stroke: this.style.Section.sectionProtectiveTimeReleaseColor })
.start();
}
this.section.setStyle({
stroke: this.style.Section.line.protectiveLockColor,
lineWidth: this.style.Section.line.width + this.style.Section.line.beyondWidth
});
this.release && this.release.show();
this.release && this.release.setStyle({
stroke: this.style.Section.line.protectiveLockColor,
lineWidth: this.style.Section.line.width + this.style.Section.line.beyondWidth
});
this.release && this.release.animateStyle(true, [
{ time: 1000, styles: { stroke: this.style.Section.line.protectiveLockColor } },
{ time: 2000, styles: { stroke: this.style.Section.line.protectiveTimeReleaseColor } }
]);
}
/** 区段切除*/
sectionCutOff() {
if (this.release) {
const lineWidth = this.style.Section.sectionWidth + (this.model.status != '01' ? this.style.Section.sectionBeyondWidth : 0);
this.section.animateStyle(true, [
{ time: 0, styles: { lineWidth: lineWidth } },
{ time: 1000, styles: { stroke: this.style.backgroundColor } },
{ time: 2000, styles: { lineWidth: lineWidth } }
]);
}
const lineWidth = this.style.Section.line.width + (this.model.status != '01' ? this.style.Section.line.beyondWidth : 0);
this.section.animateStyle(true, [
{ time: 0, styles: { lineWidth: lineWidth } },
{ time: 1000, styles: { stroke: this.style.backgroundColor } },
{ time: 2000, styles: { lineWidth: lineWidth } }
]);
}
/** 设置限速*/
setSpeedUpperLimit() {
if (this.section) {
this.speedLimitLeft.show();
this.speedLimitRight.show();
this.creatSpeedLimit();
}
}
@ -550,8 +594,9 @@ export default class Section extends Group {
axleReset() {
if (this.release) {
this.release.show();
this.release.setStyle({
stroke: this.style.Section.sectionAxleResetColor
this.release && this.release.setStyle({
stroke: this.style.Section.axle.resetColor,
fill: 'green'
});
}
}
@ -560,8 +605,8 @@ export default class Section extends Group {
alxeFailure() {
if (this.section) {
this.section.setStyle({
stroke: this.style.Section.sectionAxleFailure,
lineWidth: this.style.Section.sectionWidth + this.style.Section.sectionBeyondWidth
stroke: this.style.Section.axle.Failure,
lineWidth: this.style.Section.line.width + this.style.Section.line.beyondWidth
});
}
}
@ -569,7 +614,6 @@ export default class Section extends Group {
/** 设置状态*/
setState(state) {
this.recover();
// state.status = '02';
switch (state.status) {
case '00': /** 未定义*/
this.undefine();
@ -621,7 +665,6 @@ export default class Section extends Group {
if (state.cutOff) {
this.sectionCutOff();
}
/** 是否限速*/
if (state.speedUpperLimit >= 0) {
this.setSpeedUpperLimit();
@ -631,12 +674,12 @@ export default class Section extends Group {
/** 计算提示位置*/
getShapeTipPoint() {
let rect = this.getBoundingRect();
let distance = this.style.Section.sectionWidth / 2;
let distance = this.style.Section.line.width / 2;
if (this.section) {
rect = this.section.getBoundingRect();
if (this.model.type !== '02' && this.model.nameShow) {
if (this.model.trainPosType == '01') {
distance = distance + this.style.nameDistance + this.style.textFontSize;
distance = distance + this.style.nameDistance + this.style.Section.text.fontSize;
}
}
}

View File

@ -6,44 +6,53 @@ class ESigPass extends Group {
constructor(model) {
super();
this.model = model;
this._create();
this.isNew = false;
}
_create() {
const model = this.model;
const style = this.model.style;
const rotation = model.drict != 1? 0 : Math.PI;
const point = arrows(model.x, model.y, style.Signal.signalSigPassWidth, style.Signal.signalR * 0.8);
this.arrows = new Polygon({
zlevel: model.zlevel,
z: model.z,
rotation: rotation,
shape: {
points: point
},
style: {
stroke: model.stroke,
lineWidth: model.lineWidth,
fill: model.fill
}
});
this.add(this.arrows);
if (!this.isNew) {
const model = this.model;
const style = this.model.style;
const rotation = model.drict != 1? 0 : Math.PI;
const point = arrows(model.x, model.y, style.Signal.signalAutoWidth, style.Signal.lamp.signalR * 0.8);
this.isNew = true;
this.arrows = new Polygon({
zlevel: model.zlevel,
z: model.z,
rotation: rotation,
shape: {
points: point
},
style: {
stroke: model.stroke,
lineWidth: model.lineWidth,
fill: model.fill
}
});
this.add(this.arrows);
}
}
// 停止动画
animationRecover() {
this._create();
this.arrows.stopAnimation(false);
}
// 箭头颜色
setColor(color) {
this._create();
this.arrows.setStyle('fill', color);
}
// 箭头闪烁
arrowsAnimation() {
this._create();
const style = this.model.style;
const fill = this.arrows.style.Signal.fill;
this.arrows.animate(true)
.when(1000, { fill: style.backgroundColor, stroke: style.style.backgroundColor })
.when(2000, { fill: fill, stroke: style.style.Signal.sidelineColor })
@ -54,11 +63,13 @@ class ESigPass extends Group {
// 隐藏
hide() {
this._create();
this.arrows.hide();
}
// 显示
show() {
this._create();
this.arrows.show();
}
}

View File

@ -8,97 +8,99 @@ class ESigButton extends Group {
constructor(model) {
super();
this.model = model;
this._create();
this.isNew = false;
}
_create() {
const model = this.model;
const style = this.model.style;
const padding = 1;
const r = style.Signal.signalR * 0.8;
if (!this.isNew) {
const model = this.model;
const style = this.model.style;
const padding = 1;
const r = style.Signal.lamp.signalR * 0.8;
this.style = style;
this._subType = 'SignalButton';
this.isNew = true;
this.sigNormalButtom = new Rect({
zlevel: model.zlevel,
z: model.z,
_subType: 'SignalButton',
_val: '1',
shape: {
x: model.x - style.Signal.lamp.signalR,
y: model.y - r + r * model.posit,
width: style.Signal.lamp.signalR * 2,
height: style.Signal.lamp.signalR * 2
},
style: {
lineWidth: 0.2,
stroke: style.Signal.button.signalButtonDashColor,
fill: style.Signal.button.signalButtonColor
}
});
this.sigNormalButtom = new Rect({
zlevel: model.zlevel,
z: model.z,
_subType: this._subType,
_val: '1',
shape: {
x: model.x - style.Signal.signalR,
y: model.y - r + r * model.posit,
width: style.Signal.signalR * 2,
height: style.Signal.signalR * 2
},
style: {
lineWidth: 0.2,
stroke: style.Signal.signalButtonDashColor,
fill: style.Signal.signalButtonColor
}
});
this.sigReentryButton = new Circle({
zlevel: model.zlevel,
z: model.z,
_subType: 'SignalButton',
_val: '2', // 折返按钮
shape: {
cx: model.x,
cy: model.y - 5 / 2 * r * model.posit,
r: style.Signal.lamp.signalR
},
style: {
lineWidth: 0.2,
stroke: style.Signal.button.signalButtonDashColor,
fill: style.Signal.button.signalButtonColor
}
});
this.sigReentryButton = new Circle({
zlevel: model.zlevel,
z: model.z,
_subType: this._subType,
_val: '2', // 折返按钮
shape: {
cx: model.x,
cy: model.y - 5 / 2 * r * model.posit,
r: style.Signal.signalR
},
style: {
lineWidth: 0.2,
stroke: style.Signal.signalButtonDashColor,
fill: style.Signal.signalButtonColor
}
});
this.sigNormalButtomDown = new Polyline({
zlevel: model.zlevel,
z: model.z,
silent: true,
shape: { points: [
[model.x - padding + r, this.sigNormalButtom.shape.y + padding],
[model.x + padding - r, this.sigNormalButtom.shape.y + padding],
[model.x + padding - r, this.sigNormalButtom.shape.y + padding * 2 + r]
] },
style: {
lineWidth: 0.8,
stroke: style.backgroundColor
}
});
this.sigNormalButtomDown = new Polyline({
zlevel: model.zlevel,
z: model.z,
silent: true,
shape: { points: [
[model.x - padding + r, this.sigNormalButtom.shape.y + padding],
[model.x + padding - r, this.sigNormalButtom.shape.y + padding],
[model.x + padding - r, this.sigNormalButtom.shape.y + padding * 2 + r]
] },
style: {
lineWidth: 0.8,
stroke: style.backgroundColor
}
});
this.sigReentryButtonDown = new Arc({
zlevel: model.zlevel,
z: model.z,
silent: true,
shape: {
cx: this.sigReentryButton.shape.cx,
cy: this.sigReentryButton.shape.cy,
r: this.sigReentryButton.shape.r - padding,
startAngle: Math.PI * 8 / 5,
endAngle: Math.PI * 4 / 5,
clockwise: false
},
style: {
lineWidth: 0.8,
stroke: style.backgroundColor
}
});
this.sigReentryButtonDown = new Arc({
zlevel: model.zlevel,
z: model.z,
silent: true,
shape: {
cx: this.sigReentryButton.shape.cx,
cy: this.sigReentryButton.shape.cy,
r: this.sigReentryButton.shape.r - padding,
startAngle: Math.PI * 8 / 5,
endAngle: Math.PI * 4 / 5,
clockwise: false
},
style: {
lineWidth: 0.8,
stroke: style.backgroundColor
}
});
this.add(this.sigNormalButtom);
this.add(this.sigReentryButton);
this.hide();
this.add(this.sigNormalButtom);
this.add(this.sigReentryButton);
this.hide();
}
}
hide() {
this._create();
this.sigNormalButtom.hide();
this.sigReentryButton.hide();
}
show() {
this._create();
this.sigNormalButtom.show();
this.sigReentryButton.show();
}

View File

@ -5,43 +5,53 @@ class ESigDelay extends Group {
constructor(model) {
super();
this.model = model;
this._create();
this.isNew = false;
}
_create() {
const model = this.model;
this.name = new Text({
_subType: model._subType,
zlevel: model.zlevel,
z: model.z,
silent: model.silent || false,
style: {
x: model.x,
y: model.y,
text: model.text,
textFont: model.textFont,
textFill: model.textFill,
textAlign: model.textAlign,
textPosition: model.textPosition || 'inside',
textVerticalAlign: model.textVerticalAlign || null
}
});
this.add(this.name);
if (!this.isNew) {
const model = this.model;
this.isNew = true;
this.name = new Text({
_subType: model._subType,
zlevel: model.zlevel,
z: model.z,
silent: model.silent || false,
style: {
x: model.x,
y: model.y,
fontWeight: model.fontWeight,
fontSize: model.fontSize,
fontFamily: model.fontFamily,
text: model.text,
textFill: model.textFill,
textAlign: model.textAlign,
textPosition: model.textPosition || 'inside',
textVerticalAlign: model.textVerticalAlign || null
}
});
this.add(this.name);
}
}
setStyle(model) {
this._create();
this.name.setStyle(model);
}
setColor(color) {
this._create();
this.name.setStyle('textFill', color);
}
hide() {
this._create();
this.name.hide();
}
show() {
this._create();
this.name.show();
}
}

View File

@ -2,7 +2,7 @@ import Line from 'zrender/src/graphic/shape/Line';
import Arc from 'zrender/src/graphic/shape/Arc';
import Group from 'zrender/src/container/Group';
class ESigLmap extends Group {
class ESigLamp extends Group {
constructor(model) {
super();
this.model = model;
@ -20,12 +20,12 @@ class ESigLmap extends Group {
shape: {
cx: model.x,
cy: model.y,
r: style.Signal.signalR
r: style.Signal.lamp.signalR
},
style: {
lineWidth: 0.4,
lineWidth: style.Signal.lamp.signalBorderWidth,
fill: style.backgroundColor,
stroke: style.Signal.signalLampStandardColor
stroke: style.Signal.post.signalLampStandardColor
}
});
@ -37,13 +37,13 @@ class ESigLmap extends Group {
y: model.originY
},
shape: {
x1: model.x + (style.Signal.signalR + 1) * Math.cos(Math.PI / 4),
y1: model.y + (style.Signal.signalR + 1) * Math.sin(Math.PI / 4),
x2: model.x - (style.Signal.signalR + 1) * Math.cos(Math.PI / 4),
y2: model.y - (style.Signal.signalR + 1) * Math.sin(Math.PI / 4)
x1: model.x + (style.Signal.lamp.signalR + 1) * Math.cos(Math.PI / 4),
y1: model.y + (style.Signal.lamp.signalR + 1) * Math.sin(Math.PI / 4),
x2: model.x - (style.Signal.lamp.signalR + 1) * Math.cos(Math.PI / 4),
y2: model.y - (style.Signal.lamp.signalR + 1) * Math.sin(Math.PI / 4)
},
style: {
lineWidth: 1.5,
lineWidth: style.Signal.lamp.signalStopWidth,
stroke: style.backgroundColor
}
});
@ -56,13 +56,13 @@ class ESigLmap extends Group {
y: model.originY
},
shape: {
x1: model.x + (style.Signal.signalR + 1) * Math.cos(Math.PI / 4),
y1: model.y + (style.Signal.signalR + 1) * (Math.sin(Math.PI / 4) - Math.sqrt(2)),
x2: model.x - (style.Signal.signalR + 1) * Math.cos(Math.PI / 4),
y2: model.y - (style.Signal.signalR + 1) * (Math.sin(Math.PI / 4) - Math.sqrt(2))
x1: model.x + (style.Signal.lamp.signalR + 1) * Math.cos(Math.PI / 4),
y1: model.y + (style.Signal.lamp.signalR + 1) * (Math.sin(Math.PI / 4) - Math.sqrt(2)),
x2: model.x - (style.Signal.lamp.signalR + 1) * Math.cos(Math.PI / 4),
y2: model.y - (style.Signal.lamp.signalR + 1) * (Math.sin(Math.PI / 4) - Math.sqrt(2))
},
style: {
lineWidth: 1.5,
lineWidth: style.Signal.lamp.signalStopWidth,
stroke: style.backgroundColor
}
});
@ -86,4 +86,4 @@ class ESigLmap extends Group {
}
}
export default ESigLmap;
export default ESigLamp;

View File

@ -11,15 +11,16 @@ class ESigName extends Group {
_create() {
const model = this.model;
this.name = new Text({
_subType: model._subType,
zlevel: model.zlevel,
z: model.z,
silent: model.silent,
style: {
x: model.x,
y: model.y,
fontWeight: model.fontWeight,
fontSize: model.fontSize,
fontFamily: model.fontFamily,
text: model.text,
textFont: model.textFont,
textFill: model.textFill,
textAlign: model.textAlign,
textPosition: model.textPosition || 'inside',

View File

@ -17,13 +17,13 @@ class ESigPost extends Group {
z: model.z,
shape: {
points: [
[model.x, model.y + style.Signal.signalR * 1.2],
[model.x, model.y - style.Signal.signalR * 1.2]
[model.x, model.y + style.Signal.lamp.signalR * 1.2],
[model.x, model.y - style.Signal.lamp.signalR * 1.2]
]
},
style: {
lineWidth: style.Signal.signalLampStandardWidth,
stroke: style.Signal.signalLampStandardColor
lineWidth: style.Signal.post.signalLampStandardWidth,
stroke: style.Signal.post.signalLampStandardColor
}
});
@ -33,12 +33,12 @@ class ESigPost extends Group {
shape: {
points: [
[model.x, model.y],
[model.x + model.drict * style.Signal.signalR * 1.2, model.y]
[model.x + model.drict * style.Signal.lamp.signalR * 1.2, model.y]
]
},
style: {
lineWidth: style.Signal.signalLampStandardWidth,
stroke: style.Signal.signalLampStandardColor
lineWidth: style.Signal.post.signalLampStandardWidth,
stroke: style.Signal.post.signalLampStandardColor
}
});
@ -53,12 +53,12 @@ class ESigPost extends Group {
const style = this.model.style;
if (type === '01') {
return {
x: model.x + model.drict * style.Signal.signalR * 3 / 2,
x: model.x + model.drict * style.Signal.lamp.signalR * 3 / 2,
y: model.y
};
} else {
return {
x: this.hor.shape.points[1][0] + model.drict * style.Signal.signalR,
x: this.hor.shape.points[1][0] + model.drict * style.Signal.lamp.signalR,
y: this.hor.shape.points[1][1]
};
}

View File

@ -6,34 +6,41 @@ class ESigDrict extends Group {
constructor(model) {
super();
this.model = model;
this._create();
this.isNew = false;
}
_create() {
const model = this.model;
const style = this.model.style;
this.sigDrict = new Polygon({
zlevel: model.zlevel,
z: model.z,
shape: {
points: triangular(model.x, model.y, model.drict, style.Signal.signalR)
},
style: {
stroke: style.backgroundColor,
lineWidth: 0.5,
fill: style.Signal.signalLampYellowColor
}
});
this.add(this.sigDrict);
if (!this.isNew) {
const model = this.model;
const style = this.model.style;
this.isNew = true;
this.sigDrict = new Polygon({
zlevel: model.zlevel,
z: model.z,
shape: {
points: triangular(model.x, model.y, model.drict, style.Signal.lamp.signalR)
},
style: {
stroke: style.backgroundColor,
lineWidth: 0.5,
fill: style.Signal.route.signalRouteColor
}
});
this.add(this.sigDrict);
}
}
// 隐藏
hide() {
this._create();
this.sigDrict.hide();
}
// 显示
show() {
this._create();
this.sigDrict.show();
}
}

View File

@ -3,8 +3,8 @@
*/
import ESigPost from './ESigPost';
import ESigLmap from './ESigLmap';
import ESigPass from './ESigPass';
import ESigLamp from './ESigLamp';
import ESigAuto from './ESigAuto';
import ESigRoute from './ESigRoute';
import ESigButton from './ESigButton';
import ESigDelay from './ESigDelay';
@ -42,20 +42,20 @@ class Signal extends Group {
drict: drict,
type: model.lampPostType,
x: model.position.x,
y: model.position.y + posit * (style.Signal.signalDistance + style.Section.sectionWidth + style.Signal.signalR)
y: model.position.y + posit * (style.Signal.signalDistance + style.Section.line.width + style.Signal.lamp.signalR)
});
// 信号灯
const endPoint = this.sigPost.getLampPosition(model.lampPostType);
this.lamps = [];
for (let i = 0; i < this.count; i++) {
const lamp = new ESigLmap({
const lamp = new ESigLamp({
zlevel: this.zlevel,
z: this.z,
style: style,
index: i + 1,
drict: drict,
x: endPoint.x + i * drict * style.Signal.signalR * 2,
x: endPoint.x + i * drict * style.Signal.lamp.signalR * 2,
y: endPoint.y,
originX: model.position.x,
originY: model.position.y
@ -66,25 +66,28 @@ class Signal extends Group {
// 信号机名称
const sigNameX = model.position.x + model.namePosition.x;
const sigNameY = model.position.y + posit * (style.Signal.signalDistance + style.Section.sectionWidth + style.Signal.signalR * 2 + model.namePosition.y);
const sigNameY = model.position.y + posit * (style.Signal.signalDistance + style.Section.line.width + style.Signal.lamp.signalR * 2 + model.namePosition.y);
this.sigName = new ESigName({
zlevel: this.zlevel,
z: this.z,
silent: false,
isNoRotation: style.Signal.text.isNoRotation,
style: style,
x: sigNameX,
y: sigNameY,
text: model.name,
textFont: `bold ${style.Signal.signalTextFontSize} px ${style.textFontFormat}`,
textFill: style.Signal.signalTextGreen,
fontWeight: 'bold',
fontSize: style.Signal.text.signalTextFontSize,
fontFamily: style.textFontFormat,
textFill: style.Signal.text.signalDefaultTextColor,
textAlign: 'middle',
textVerticalAlign: posit == 1 ? 'top' : 'bottom'
});
// 自动进路
const sigRouteH = style.Signal.signalSigRouteDirection ? this.count * style.Signal.signalR * 2 : -style.Signal.signalR * 2;
const sigRouteX = endPoint.x + (style.Signal.signalSigRouteOffset.x + sigRouteH) * drict;
const sigRouteY = endPoint.y + (style.Signal.signalSigRouteOffset.y);
const sigRouteH = style.Signal.route.signalRouteDirection ? this.count * style.Signal.lamp.signalR * 2 : -style.Signal.lamp.signalR * 2;
const sigRouteX = endPoint.x + (style.Signal.route.signalRouteOffset.x + sigRouteH) * drict;
const sigRouteY = endPoint.y + (style.Signal.route.signalRouteOffset.y);
this.sigRoute = new ESigRoute({
zlevel: this.zlevel,
z: this.z,
@ -95,36 +98,38 @@ class Signal extends Group {
});
// 自动通过
const sigPassH = style.Signal.signalSigPassDirection ? this.count * style.Signal.signalR * 2 : -style.Signal.signalR * 2;
const sigPassX = endPoint.x + (style.Signal.signalSigPassOffset.x + sigPassH) * drict;
const sigPassY = endPoint.y + (style.Signal.signalSigPassOffset.y);
this.sigPass = new ESigPass({
const sigAutoH = style.Signal.auto.signalAutoDirection ? this.count * style.Signal.lamp.signalR * 2 : -style.Signal.lamp.signalR * 2;
const sigAutoX = endPoint.x + (style.Signal.auto.signalAutoOffset.x + sigAutoH) * drict;
const sigAutoY = endPoint.y + (style.Signal.auto.signalAutoOffset.y);
this.sigAuto = new ESigAuto({
zlevel: this.zlevel,
z: this.z,
style: style,
count: this.count,
drict: drict,
x: sigPassX,
y: sigPassY,
width: style.Signal.signalSigPassWidth,
fill: style.Signal.signalLampGreenColor,
x: sigAutoX,
y: sigAutoY,
width: style.Signal.signalAutoWidth,
fill: style.Signal.lamp.signalAutoRoute,
lineWidth: 0.6,
stroke: style.sidelineColor
});
// 延迟解锁
const sigDelayH = style.Signal.signalSigDelayDirection ? this.count * style.Signal.signalR * 2 : -style.Signal.signalR * 2;
const sigDelayX = endPoint.x + (style.Signal.signalSigDelayOffset.x + sigDelayH) * drict;
const sigDelayY = endPoint.y - (style.Signal.signalSigDelayOffset.y) * posit;
const sigDelayH = style.Signal.delay.signalDelayDirection ? this.count * style.Signal.lamp.signalR * 2 : -style.Signal.lamp.signalR * 2;
const sigDelayX = endPoint.x + (style.Signal.delay.signalDelayOffset.x + sigDelayH) * drict;
const sigDelayY = endPoint.y - (style.Signal.delay.signalDelayOffset.y) * posit;
this.sigDelay = new ESigDelay({
zlevel: this.zlevel,
z: this.z,
style: style,
x: sigDelayX,
y: sigDelayY,
fontWeight: 'bold',
fontSize: style.Signal.delay.signalDelayTextFontSize,
fontFamily: style.textFontFormat,
text: this.state.delayCount || '0',
textFont: `bold ${style.Signal.signalDelayTextFontSize} px ${style.textFontFormat}`,
textFill: style.Signal.signalTextRed,
textFill: style.Signal.delay.signalDelayTextColor,
textAlign: drict > 0 ? 'right' : 'left',
textVerticalAlign: 'middle'
});
@ -137,13 +142,13 @@ class Signal extends Group {
posit: posit,
show: model.buttonShow,
x: model.buttonPosition.x,
y: model.buttonPosition.y - posit * (style.Signal.signalButtonDistance + style.Signal.signalR * 2)
y: model.buttonPosition.y - posit * (style.Signal.button.signalButtonDistance + style.Signal.lamp.signalR * 2)
});
this.add(this.sigPost);
this.lamps.forEach(lamp => { this.add(lamp); });
this.add(this.sigName);
this.add(this.sigPass);
this.add(this.sigAuto);
this.add(this.sigRoute);
this.add(this.sigDelay);
// this.add(this.sigButton);
@ -155,7 +160,7 @@ class Signal extends Group {
device.eachChild(item => {
if (item instanceof Group) {
this.transformRotation(item);
} else {
} else if (item && item.model && item.model.isNoRotation) {
item.origin = [this.model.position.x, this.model.position.y];
item.rotation = -Math.PI / 180 * Number(this.model.rotate);
item.dirty();
@ -169,13 +174,13 @@ class Signal extends Group {
if (this.count === 1) {
if (this.model.useType === '05') {
/** 单灯 调车信号机*/
this.lamps[0] && this.lamps[0].setColor(this.style.Signal.signalLampBlueColor);
this.lamps[0] && this.lamps[0].setColor(this.style.Signal.lamp.signalLampBlueColor);
} else {
/** 单灯 出站信号机 */
/** 单灯 阻挡信号机*/
/** 单灯 阻挡兼调车信号 */
/** 单灯 列兼调信号机 */
this.lamps[0] && this.lamps[0].setColor(this.style.Signal.signalLampRedColor);
this.lamps[0] && this.lamps[0].setColor(this.style.Signal.lamp.signalLampRedColor);
}
}
}
@ -185,7 +190,7 @@ class Signal extends Group {
if (this.count === 1) {
/** 单灯 出站信号机*/
/** 单灯 阻隔信号机*/
this.lamps[0] && this.lamps[0].setColor(this.style.Signal.signalLampGreenColor);
this.lamps[0] && this.lamps[0].setColor(this.style.Signal.lamp.signalLampGreenColor);
}
}
@ -193,7 +198,7 @@ class Signal extends Group {
trainRoute() {
if (this.count === 1) {
/** 单灯 列兼调信号*/
this.lamps[0] && this.lamps[0].setColor(this.style.Signal.signalLampYellowColor);
this.lamps[0] && this.lamps[0].setColor(this.style.Signal.lamp.signalLampYellowColor);
}
}
@ -202,7 +207,7 @@ class Signal extends Group {
if (this.count === 1) {
/** 单灯 列兼调信号*/
/** 单灯 阻挡兼调车信号*/
this.lamps[0] && this.lamps[0].setColor(this.style.Signal.signalLampWhiteColor);
this.lamps[0] && this.lamps[0].setColor(this.style.Signal.lamp.signalLampWhiteColor);
}
}
@ -213,8 +218,8 @@ class Signal extends Group {
// 封锁
block() {
this.lamps[0] && this.lamps[0].setColor(this.style.Signal.signalLampRedColor);
this.sigName.setColor(this.style.Signal.sectionBlockTextColor);
this.lamps[0] && this.lamps[0].setColor(this.style.Signal.lamp.signalLampRedColor);
this.sigName.setColor(this.style.Signal.signalTextBlockColor);
}
// 功能封锁
@ -243,25 +248,25 @@ class Signal extends Group {
// 设置自动进路模式状态类型
setAutoRouteOpen() {
if (this.model.linkageAutoRouteShow) {
this.sigPass.show();
this.sigAuto.show();
} else {
this.sigPass.hide();
this.sigAuto.hide();
}
this.recover();
this.sigPass.setColor(this.style.Signal.signalLampGreenColor);
this.sigAuto.setColor(this.style.Signal.auto.signalAutoRoute);
}
// 信号机进路自动触发模式状态类型
setAutoAccessOpen() {
if (this.model.atsAutoTriggerShow) {
this.sigPass.show();
this.sigAuto.show();
} else {
this.sigPass.hide();
this.sigAuto.hide();
}
this.recover();
this.sigPass.setColor(this.style.Signal.signalLampYellowColor);
this.sigAuto.setColor(this.style.Signal.auto.signalAutoTrigger);
}
// 设置自动信号模式状态类型
@ -271,14 +276,14 @@ class Signal extends Group {
// 隐藏自动信号和自动进路
setAutoClose() {
this.sigPass.hide();
this.sigPass.setColor(this.style.backgroundColor);
this.sigAuto.hide();
this.sigAuto.setColor(this.style.backgroundColor);
this.sigRoute.hide();
}
// 自动信号和自动进路开始动画
setAutoFlicker() {
this.sigPass.arrowsAnimation();
this.sigAuto.arrowsAnimation();
}
// 设置延时解锁
@ -289,8 +294,8 @@ class Signal extends Group {
// 恢复状态
recover() {
this.sigDelay.hide();
this.sigPass.animationRecover();
this.sigName.setColor(this.style.Signal.signalTextGreen);
this.sigAuto.animationRecover();
this.sigName.setColor(this.style.Signal.text.signalDefaultTextColor);
}
setState(state) {

View File

@ -29,10 +29,12 @@ export default class Station extends Group {
position: [0, 0],
x: model.position.x,
y: model.position.y,
fontWeight: 'bold',
fontSize: model.nameFont || 18,
fontFamily: style.textFontFormat,
text: model.name,
textAlign: 'middle',
textVerticalAlign: 'top',
textFont: model.nameFont || '18px ' + style.textFontFormat,
textFill: model.nameFontColor
});
let direction = 1;
@ -45,10 +47,12 @@ export default class Station extends Group {
position: [0, 0],
x: model.position.x,
y: model.position.y + ((parseInt(model.nameFont) + 2) * direction),
fontWeight: 'bold',
fontSize: model.kmPostFont || 18,
fontFamily: style.textFontFormat,
text: model.kmPost,
textAlign: 'middle',
textVerticalAlign: 'top',
textFont: model.kmPostFont || '18px ' + style.textFontFormat,
textFill: model.kmPostFontColor
});

View File

@ -13,8 +13,8 @@ class ESigAuto extends Group {
const model = this.model;
const style = this.model.style;
const rotation = model.drict != 1? 0 : Math.PI;
const x = model.x + model.drict * (model.count * style.Signal.signalR + style.Signal.signalLampStandardWidth) * 2;
const y = model.y - style.Signal.signalLampStandardWidth;
const x = model.x + model.drict * (model.count * style.Signal.lamp.signalR + style.Signal.post.signalLampStandardWidth) * 2;
const y = model.y - style.Signal.post.signalLampStandardWidth;
this.arrows = new Polygon({
zlevel: model.zlevel,

View File

@ -48,9 +48,11 @@ export default class ESingleControl extends Group {
style: {
x: model.point.x,
y: model.point.y + model.style.StationControl.stationControlmodeR + model.style.nameDistance,
fontWeight: 'normal',
fontSize: model.style.textFontSize,
fontFamily: model.style.textFontFormat,
text: model.context,
textFill: model.style.textFontColor,
textFont: model.style.textFontSize + 'px ' + model.style.textFontFormat,
textAlign: 'middle',
textVerticalAlign: 'top'
}

View File

@ -29,11 +29,13 @@ export default class StationCounter extends Group {
style: {
x: model.position.x,
y: model.position.y,
fontWeight: 'normal',
fontSize: style.textFontSize,
fontFamily: style.textFontFormat,
text: model.val,
textFill: style.stationCounterTextColor,
textAlign: 'middle',
textStrokeWidth: 1,
textFont: style.textFontSize + 'px ' + style.textFontFormat
textStrokeWidth: 1
}
});
@ -64,12 +66,14 @@ export default class StationCounter extends Group {
style: {
x: model.position.x,
y: model.position.y + this.rect.width + this.vPadding + style.textFontSize + style.nameDistance,
fontWeight: 'bold',
fontSize: style.textFontSize,
fontFamily: style.textFontFormat,
text: model.name,
textFill: style.stationCounterTextColor,
textAlign: 'middle',
textVerticalAlign: 'top',
textStrokeWidth: 1,
textFont: style.textFontSize + 'px ' + style.textFontFormat
textStrokeWidth: 1
}
});
this.add(this.counterName);

View File

@ -29,10 +29,12 @@ export default class StationDelayUnlock extends Group {
style: {
x: model.position.x,
y: model.position.y,
fontWeight: 'normal',
fontSize: model.textFont,
fontFamily: style.textFontFormat,
text: model.deviceName + ' ',
textFill: style.stationDelayUnlockTextColor,
textStrokeWidth: 1,
textFont: model.textFont + 'px ' + style.textFontFormat,
textAlign: 'left'
}
});
@ -45,10 +47,12 @@ export default class StationDelayUnlock extends Group {
style: {
x: model.position.x,
y: model.position.y + fontSize + style.stationDelayUnlockDistance,
fontWeight: 'normal',
fontSize: model.textFont,
fontFamily: style.textFontFormat,
text: model.remainTime || '',
textFill: style.stationDelayUnlockTextColor,
textStrokeWidth: 1,
textFont: model.textFont + 'px ' + style.textFontFormat,
textAlign: 'left'
}
});

View File

@ -5,40 +5,47 @@ class EDetain extends Group {
constructor(model) {
super();
this.model = model;
this._create();
this.isNew = false;
}
_create() {
const model = this.model;
const style = this.model.style;
this.detain = new Text({
zlevel: model.zlevel,
z: model.z,
position: [0, 0],
style: {
x: model.x,
y: model.y,
text: style.StationStand.standDetainText,
textAlign: model.textAlign,
textVerticalAlign: model.textVerticalAlign,
fontSize: `${style.StationStand.standHeadFontSize} px ${style.textFontFormat}`,
textFill: style.StationStand.standCenterDetainTrainColor,
textStroke: style.backgroundColor
}
});
if (!this.isNew) {
const model = this.model;
const style = this.model.style;
this.add(this.detain);
this.isNew = true;
this.detain = new Text({
zlevel: model.zlevel,
z: model.z,
position: [0, 0],
style: {
x: model.x,
y: model.y,
text: style.StationStand.detainCar.text,
textAlign: model.textAlign,
textVerticalAlign: model.textVerticalAlign,
fontSize: `${style.StationStand.stand.headFontSize} px ${style.textFontFormat}`,
textFill: style.StationStand.detainCar.centerTrainColor,
textStroke: style.backgroundColor
}
});
this.add(this.detain);
}
}
setColor(color) {
this._create();
this.detain.setStyle('textFill', color);
}
hide() {
this._create();
this.detain.hide();
}
show() {
this._create();
this.detain.show();
}
}

View File

@ -5,46 +5,51 @@ class EJump extends Group {
constructor(model) {
super();
this.model = model;
this._create();
this.isNew = false;
}
_create() {
const model = this.model;
const style = this.model.style;
if (!this.isNew) {
const model = this.model;
const style = this.model.style;
this.jump = new Text({
zlevel: model.zlevel,
z: model.z,
style: {
x: model.x,
y: model.y,
text: model.name,
textFill: style.StationStand.standLevelTextColor,
textAlign: 'middle',
textFont: `${style.StationStand.standTextFontSize} px ${style.textFontFormat}`
}
});
this.isNew = true;
this.jump = new Text({
zlevel: model.zlevel,
z: model.z,
style: {
x: model.x,
y: model.y,
fontWeight: 'normal',
fontSize: style.StationStand.common.textFontSize,
fontFamily: style.textFontFormat,
text: model.name,
textFill: style.StationStand.level.textColor,
textAlign: 'middle'
}
});
this.add(this.jump);
this.add(this.jump);
}
}
setName(val) {
this.jump.attr({
style: {
text: val
}
});
this._create();
this.jump.setStyle('text', val);
}
setColor(color) {
this._create();
this.jump.setStyle('textFill', color);
}
hide() {
this._create();
this.jump.hide();
}
show() {
this._create();
this.jump.show();
}
}

View File

@ -5,46 +5,51 @@ class ELevel extends Group {
constructor(model) {
super();
this.model = model;
this._create();
this.isNew = false;
}
_create() {
const model = this.model;
const style = this.model.style;
if (!this.isNew) {
const model = this.model;
const style = this.model.style;
this.level = new Text({
zlevel: model.zlevel,
z: model.z,
style: {
x: model.x,
y: model.y,
text: model.name,
textFill: style.StationStand.standLevelTextColor,
textAlign: 'middle',
textFont: `${style.StationStand.standTextFontSize} px ${style.textFontFormat}`
}
});
this.isNew = true;
this.level = new Text({
zlevel: model.zlevel,
z: model.z,
style: {
x: model.x,
y: model.y,
fontWeight: 'normal',
fontSize: style.StationStand.common.textFontSize,
fontFamily: style.textFontFormat,
text: model.name,
textFill: style.StationStand.level.textColor,
textAlign: 'middle'
}
});
this.add(this.level);
this.add(this.level);
}
}
setName(val) {
this.level.attr({
style: {
text: val
}
});
this._create();
this.level.setStyle('text', val);
}
setColor(color) {
this._create();
this.level.setStyle('textFill', color);
}
hide() {
this._create();
this.level.hide();
}
show() {
this._create();
this.level.show();
}
}

View File

@ -6,36 +6,42 @@ class EReentry extends Group {
constructor(model) {
super();
this.model = model;
this._create();
this.isNew = false;
}
_create() {
const model = this.model;
if (!this.isNew) {
const model = this.model;
this.reentry = new Polygon({
zlevel: model.zlevel,
z: model.z,
shape: {
points: flashlight(model.x, model.y, model.drict, 10, 5, 0, 0, 4)
},
style: {
lineWidth: model.lineWidth,
fill: model.fill
}
});
this.isNew = true;
this.reentry = new Polygon({
zlevel: model.zlevel,
z: model.z,
shape: {
points: flashlight(model.x, model.y, model.drict, 10, 5, 0, 0, 4)
},
style: {
lineWidth: model.lineWidth,
fill: model.fill
}
});
this.add(this.reentry);
this.add(this.reentry);
}
}
setColor(color) {
this._create();
this.reentry.setStyle('textFill', color);
}
hide() {
this._create();
this.reentry.hide();
}
show() {
this._create();
this.reentry.show();
}
}

View File

@ -24,8 +24,8 @@ class ESafeDoor extends Group {
},
style: {
lineWidth: 0,
stroke: style.StationStand.standDoorDefaultColor,
fill: style.StationStand.standDoorDefaultColor
stroke: style.StationStand.safetyDoor.defaultColor,
fill: style.StationStand.safetyDoor.defaultColor
}
});
@ -40,8 +40,8 @@ class ESafeDoor extends Group {
},
style: {
lineWidth: 0,
stroke: style.StationStand.standDoorDefaultColor,
fill: style.StationStand.standDoorDefaultColor
stroke: style.StationStand.safetyDoor.defaultColor,
fill: style.StationStand.safetyDoor.defaultColor
}
});
@ -56,8 +56,8 @@ class ESafeDoor extends Group {
},
style: {
lineWidth: 0,
stroke: style.StationStand.standDoorDefaultColor,
fill: style.StationStand.standDoorDefaultColor
stroke: style.StationStand.safetyDoor.defaultColor,
fill: style.StationStand.safetyDoor.defaultColor
}
});

View File

@ -5,37 +5,42 @@ class ESafeEmergent extends Group {
constructor(model) {
super();
this.model = model;
this._create();
this.isNew = false;
}
_create() {
const model = this.model;
const style = this.model.style;
if (!this.isNew) {
const model = this.model;
const style = this.model.style;
this.emergent = new Isogon({
zlevel: model.zlevel,
z: model.z,
shape: {
x: model.x,
y: model.y,
r: model.r,
n: model.n
},
style: {
lineWidth: 0,
stroke: style.StationStand.standEmergentCloseColor,
fill: style.StationStand.standEmergentCloseColor
}
});
this.isNew = true;
this.emergent = new Isogon({
zlevel: model.zlevel,
z: model.z,
shape: {
x: model.x,
y: model.y,
r: model.r,
n: model.n
},
style: {
lineWidth: 0,
stroke: style.StationStand.standEmergent.closeColor,
fill: style.StationStand.standEmergent.closeColor
}
});
this.add(this.emergent);
this.add(this.emergent);
}
}
hide() {
this._create();
this.emergent.hide();
}
show() {
this._create();
this.emergent.show();
}
}

View File

@ -24,7 +24,7 @@ class ESafeStand extends Group {
style: {
lineWidth: 0,
stroke: style.sidelineColor,
fill: style.StationStand.standSpareColor
fill: style.StationStand.stand.spareColor
}
});

View File

@ -5,46 +5,51 @@ class ETime extends Group {
constructor(model) {
super();
this.model = model;
this._create();
this.isNew = false;
}
_create() {
const model = this.model;
const style = this.model.style;
if (!this.isNew) {
const model = this.model;
const style = this.model.style;
this.time = new Text({
zlevel: model.zlevel,
z: model.z,
style: {
x: model.x,
y: model.y,
text: model.name,
textFill: style.StationStand.standTimeTextColor,
textAlign: 'middle',
textFont: `${style.StationStand.standTextFontSize} px ${style.textFontFormat}`
}
});
this.isNew = true;
this.time = new Text({
zlevel: model.zlevel,
z: model.z,
style: {
x: model.x,
y: model.y,
fontWeight: 'normal',
fontSize: style.StationStand.common.textFontSize,
fontFamily: style.textFontFormat,
text: model.name,
textFill: style.StationStand.stopTime.textColor,
textAlign: 'middle'
}
});
this.add(this.time);
this.add(this.time);
}
}
setName(val) {
this.time.attr({
style: {
text: val
}
});
this._create();
this.time.setStyle('text', val);
}
setColor(color) {
this._create();
this.time.setStyle('textFill', color);
}
hide() {
this._create();
this.time.hide();
}
show() {
this._create();
this.time.show();
}
}

View File

@ -36,14 +36,14 @@ class StationStand extends Group {
x: model.position.x,
y: model.position.y,
width: model.width,
height: style.StationStand.standSafeHeight,
height: style.StationStand.safetyDoor.height,
show: model.hasDoor
});
/** 列车站台*/
const standH = drict > 0 ? style.StationStand.standSafeHeight : model.height;
const standH = drict > 0 ? style.StationStand.safetyDoor.height : model.height;
const standX = model.position.x - model.width / 2;
const standY = model.position.y + drict * (style.StationStand.standDistance + standH);
const standY = model.position.y + drict * (style.StationStand.safetyDoor.distance + standH);
this.safeStand = new ESafeStand({
zlevel: this.zlevel,
z: this.z,
@ -55,24 +55,24 @@ class StationStand extends Group {
});
/** 站台紧急关闭*/
const emergentH = drict > 0 ? style.StationStand.standEmergentR + style.StationStand.standSafeHeight: style.StationStand.standEmergentR;
const emergentX = model.position.x + drict * (style.StationStand.standEmergentOffset.x);
const emergentY = model.position.y + drict * (style.StationStand.standEmergentOffset.y + emergentH);
const emergentH = drict > 0 ? style.StationStand.standEmergent.mergentR + style.StationStand.safetyDoor.height: style.StationStand.standEmergent.mergentR;
const emergentX = model.position.x + drict * (style.StationStand.standEmergent.offset.x);
const emergentY = model.position.y + drict * (style.StationStand.standEmergent.offset.y + emergentH);
this.emergent = new ESafeEmergent({
zlevel: this.zlevel,
z: this.z + 1,
style: style,
x: emergentX,
y: emergentY,
r: style.StationStand.standEmergentR,
r: style.StationStand.standEmergent.mergentR,
n: 4
});
/** 站台折返策略*/
const reentryD = style.StationStand.standReentryDirection ? model.height + 6: -style.StationStand.standDistance - style.StationStand.standSafeHeight;
const reentryH = drict > 0 ? style.StationStand.standEmergentR : style.StationStand.standEmergentR + style.StationStand.standDistance + reentryD;
const reentryX = model.position.x - (style.StationStand.standReentryDirection || drict) * (style.StationStand.standReentryOffset.x - model.width / 2);
const reentryY = model.position.y + (style.StationStand.standReentryDirection || drict) * (style.StationStand.standReentryOffset.y) + drict * reentryH;
const reentryD = style.StationStand.reentry.direction ? model.height + 6: -style.StationStand.safetyDoor.distance - style.StationStand.safetyDoor.height;
const reentryH = drict > 0 ? style.StationStand.standEmergent.mergentR : style.StationStand.standEmergent.mergentR + style.StationStand.safetyDoor.distance + reentryD;
const reentryX = model.position.x - (style.StationStand.reentry.direction || drict) * (style.StationStand.reentry.offset.x - model.width / 2);
const reentryY = model.position.y + (style.StationStand.reentry.direction || drict) * (style.StationStand.reentry.offset.y) + drict * reentryH;
this.reentry = new EReentry({
zlevel: this.zlevel,
z: this.z + 1,
@ -81,16 +81,16 @@ class StationStand extends Group {
x: reentryX,
y: reentryY,
lineWidth: 0,
fill: style.StationStand.standNoHumanReentryColor
fill: style.StationStand.reentry.noHumanColor
});
const distance = style.StationStand.standSafeHeight*2 - style.StationStand.standHeadFontSize/2 - 2;
const distance = style.StationStand.safetyDoor.height*2 - style.StationStand.stand.headFontSize/2 - 2;
/** 站台扣车*/
const detainD = style.StationStand.standDetainDirection ? model.height - distance: -style.StationStand.standSafeHeight;
const detainH = drict > 0 ? style.StationStand.standEmergentR : style.StationStand.standEmergentR + style.StationStand.standDistance + detainD;
const detainX = model.position.x - (style.StationStand.standDetainDirection || drict) * (style.StationStand.standDetainOffset.x - model.width / 2);
const detainY = model.position.y + (style.StationStand.standDetainDirection || drict) * (style.StationStand.standDetainOffset.y) + drict * detainH;
const detainD = style.StationStand.detainCar.direction ? model.height - distance: -style.StationStand.safetyDoor.height;
const detainH = drict > 0 ? style.StationStand.standEmergent.mergentR : style.StationStand.standEmergent.mergentR + style.StationStand.safetyDoor.distance + detainD;
const detainX = model.position.x - (style.StationStand.detainCar.direction || drict) * (style.StationStand.detainCar.offset.x - model.width / 2);
const detainY = model.position.y + (style.StationStand.detainCar.direction || drict) * (style.StationStand.detainCar.offset.y) + drict * detainH;
this.detain = new EDetain({
zlevel: this.zlevel,
z: this.z,
@ -102,10 +102,10 @@ class StationStand extends Group {
});
/** 停站时间*/
const timeD = style.StationStand.standTimeDirection ? model.height - distance: -style.StationStand.standSafeHeight;
const timeH = drict > 0 ? style.StationStand.standEmergentR : style.StationStand.standEmergentR + style.StationStand.standDistance + timeD;
const timeX = model.position.x - (style.StationStand.standTimeDirection || drict) * (style.StationStand.standTimeOffset.x - model.width / 2);
const timeY = model.position.y + (style.StationStand.standTimeDirection || drict) * (style.StationStand.standTimeOffset.y) + drict * timeH;
const timeD = style.StationStand.stopTime.direction ? model.height - distance: -style.StationStand.safetyDoor.height;
const timeH = drict > 0 ? style.StationStand.standEmergent.mergentR : style.StationStand.standEmergent.mergentR + style.StationStand.safetyDoor.distance + timeD;
const timeX = model.position.x - (style.StationStand.stopTime.direction || drict) * (style.StationStand.stopTime.offset.x - model.width / 2);
const timeY = model.position.y + (style.StationStand.stopTime.direction || drict) * (style.StationStand.stopTime.offset.y) + drict * timeH;
this.time = new ETime({
zlevel: this.zlevel,
z: this.z + 1,
@ -116,10 +116,10 @@ class StationStand extends Group {
});
/** 运行等级*/
const levelD = style.StationStand.standLevelDirection ? model.height - distance: -style.StationStand.standSafeHeight;
const levelH = drict > 0 ? style.StationStand.standEmergentR : style.StationStand.standEmergentR + style.StationStand.standDistance + levelD;
const levelX = model.position.x - (style.StationStand.standLevelDirection || drict) * (style.StationStand.standLevelOffset.x - model.width / 2);
const levelY = model.position.y + (style.StationStand.standLevelDirection || drict) * (style.StationStand.standLevelOffset.y) + drict * levelH;
const levelD = style.StationStand.level.direction ? model.height - distance: -style.StationStand.safetyDoor.height;
const levelH = drict > 0 ? style.StationStand.standEmergent.mergentR : style.StationStand.standEmergent.mergentR + style.StationStand.safetyDoor.distance + levelD;
const levelX = model.position.x - (style.StationStand.level.direction || drict) * (style.StationStand.level.offset.x - model.width / 2);
const levelY = model.position.y + (style.StationStand.level.direction || drict) * (style.StationStand.level.offset.y) + drict * levelH;
this.level = new ELevel({
zlevel: this.zlevel,
z: this.z + 1,
@ -154,27 +154,27 @@ class StationStand extends Group {
this.reentry.hide();
this.emergent.hide();
if (this.model.visible) { this.safeDoor.hasDoor(true); }
this.safeDoor.setColor(this.style.StationStand.standDoorDefaultColor);
this.safeDoor.setColor(this.style.StationStand.safetyDoor.defaultColor);
}
/** 空闲*/
spare() {
this.safeStand.setColor(this.style.StationStand.standSpareColor);
this.safeStand.setColor(this.style.StationStand.stand.spareColor);
}
/** 列车停站*/
stop() {
this.safeStand.setColor(this.style.StationStand.standStopColor);
this.safeStand.setColor(this.style.StationStand.stand.stopColor);
}
/** 指定列车跳站*/
designatedJumpStop() {
this.safeStand.setColor(this.style.StationStand.standDesignatedJumpStopColor);
this.safeStand.setColor(this.style.StationStand.stand.designatedJumpStopColor);
}
/** 站台紧急关闭*/
emergentClose() {
this.safeStand.setColor(this.style.StationStand.standSpareColor);
this.safeStand.setColor(this.style.StationStand.stand.spareColor);
this.emergent.show();
}
@ -184,7 +184,7 @@ class StationStand extends Group {
/** 站台跳停*/
jumpStop() {
this.safeStand.setColor(this.style.StationStand.standJumpStopColor);
this.safeStand.setColor(this.style.StationStand.stand.jumpStopColor);
}
/** 未设置扣车*/
@ -195,13 +195,13 @@ class StationStand extends Group {
/** 车站扣车*/
standDetainTrain() {
this.detain.show();
this.detain.setColor(this.style.StationStand.standDetainTrainTextColor);
this.detain.setColor(this.style.StationStand.detainCar.detainTrainTextColor);
}
/** 中心扣车*/
centerDetainTrain() {
this.detain.show();
this.detain.setColor(this.style.StationStand.standCenterDetainTrainColor);
this.detain.setColor(this.style.StationStand.detainCar.centerTrainColor);
}
/** 中心+车站扣车*/
@ -233,17 +233,17 @@ class StationStand extends Group {
/** 屏蔽门正常*/
doorNormal() {
this.safeDoor.setColor(this.style.StationStand.standDoorDefaultColor);
this.safeDoor.setColor(this.style.StationStand.safetyDoor.defaultColor);
}
/** 屏蔽门故障*/
doorFault() {
this.safeDoor.setColor(this.style.StationStand.standSplitDoorColor);
this.safeDoor.setColor(this.style.StationStand.safetyDoor.splitDoorColor);
}
/** 屏蔽门切除*/
doorSplit() {
this.safeDoor.setColor(this.style.StationStand.standSplitDoorColor);
this.safeDoor.setColor(this.style.StationStand.safetyDoor.splitDoorColor);
}
/** 无折返(默认)*/
@ -254,12 +254,12 @@ class StationStand extends Group {
/** 无人折返*/
noHumanReentry() {
this.reentry.show();
this.reentry.setColor(this.style.StationStand.standNoHumanReentryColor);
this.reentry.setColor(this.style.StationStand.reentry.noHumanColor);
}
/** 自动换端*/
autoChangeEnds() {
this.reentry.show();
this.reentry.setColor(this.style.StationStand.standAutoChangeEndsColor);
this.reentry.setColor(this.style.StationStand.reentry.AutoChangeEndsColor);
}
setState(state) {

View File

@ -34,7 +34,7 @@ class ESwLnversion extends Group {
points: model.sectionPoints
},
style: {
fill: style.Section.sectionSpareColor
fill: style.Section.line.spareColor
},
cursor: model.cursor,
onmouseover: model.onmouseover,

View File

@ -19,11 +19,13 @@ class ESwName extends Group {
style: {
x: model.nameTextX,
y: model.nameTextY,
fontWeight: 'normal',
fontSize: style.textFontSize,
fontFamily: style.textFontFormat,
text: model.name,
textAlign: model.triangle.drictx === 1 ? 'left' : 'right',
textVerticalAlign: model.triangle.dricty === 1 ? 'top' : 'bottom',
textFont: style.textFontSize + 'px ' + style.textFontFormat,
textFill: style.Switch.switchTextLossColor
textFill: style.Switch.text.switchTextLossColor
}
});
@ -47,7 +49,7 @@ class ESwName extends Group {
style: {
lineWidth: 0,
lineDash: [3, 3],
stroke: style.Switch.switchTextBorderColor,
stroke: style.Switch.text.switchTextBorderColor,
fill: style.transparentColor
}
});
@ -58,10 +60,12 @@ class ESwName extends Group {
style: {
x: model.arrowTextX,
y: model.arrowTextY,
fontWeight: 'normal',
fontSize: 10,
fontFamily: style.textFontFormat,
text: `道岔区段名称: ${model.sectionName}`,
textFill: '#000',
textAlign: 'letf',
textFont: 10 + 'px consolas',
textPadding: 3,
textBackgroundColor: style.tipBackgroundColor
}

View File

@ -1,398 +0,0 @@
/*
* 道岔
*/
import Line from 'zrender/src/graphic/shape/Line';
import Group from 'zrender/src/container/Group';
import Polygon from 'zrender/src/graphic/shape/Polygon';
import JTriangle from '../../utils/JTriangle';
import ESwName from './ESwName.js';
import ESwCore from './ESwCore.js';
export default class Switch extends Group {
constructor({ _code, _type, zlevel, model, state }, style, jmap) {
super();
this._code = _code;
this._type = _type;
this.model = model;
this.state = state;
this.style = style;
this.jmap = jmap;
this.selected = false;
this.zlevel = zlevel;
this.z = 8;
this._create();
this.setState(state);
}
_create() {
const model = this.model;
const style = this.style;
this.triangle = new JTriangle(model.intersection, model.skew);
let halfWidth = style.Section.sectionWidth / 2;
const switchWidth = style.Section.sectionWidth + style.Section.sectionBeyondWidth*2 + 0.8;
const swPadding = style.Switch.switchLen;
const directx = this.triangle.drictx;
const directy = this.triangle.dricty;
const direct = -this.triangle.drictx * this.triangle.dricty;
const coverLength = switchWidth * 1.5;
this.swCore = new ESwCore({
zlevel: this.zlevel,
z: this.z,
style: style,
intersectionX: model.intersection.x,
intersectionY: model.intersection.y,
coverLength: coverLength,
lineWidth: switchWidth,
triangle: this.triangle
});
halfWidth += 0.3;
const point1 = [model.intersection.x - directx * halfWidth, model.intersection.y + directy * halfWidth];
const point2 = [point1[0] + directx * switchWidth / this.triangle.getSinRate(), point1[1]];
const point3 = [point2[0] + directx * this.triangle.getCotRate() * swPadding, point2[1] + directy * swPadding];
const point4 = [point3[0] + direct * this.triangle.getSin(switchWidth), point3[1] - direct * this.triangle.getCos(switchWidth)];
this.locShelter = new Polygon({
zlevel: this.zlevel,
z: this.z,
shape: {
points: [
point1, point2, point3, point4
]
},
style: {
fill: style.backgroundColor
},
cursor: 'pointer',
onmouseover: () => { this.name.getArrowText().show(); },
onmouseout: () => { this.name.getArrowText().hide(); }
});
const lpx = Math.abs(this.triangle.getCos(1));
this.locShelter.position = [directx * lpx, -directy * 0.2];
this.locShelter.show();
const slen = switchWidth / this.triangle.getSinRate();
const rpoint1 = [model.intersection.x + directx * halfWidth, model.intersection.y - directy * halfWidth];
const rpoint2 = [rpoint1[0] + directx * (swPadding + switchWidth * this.triangle.getCotRate()), rpoint1[1]];
const rpoint3 = [rpoint2[0], rpoint2[1] + directy * switchWidth];
const rpoint4 = [rpoint1[0] + this.triangle.getCos(slen), rpoint1[1] + this.triangle.getSin(slen)];
this.relocShelter = new Polygon({
zlevel: this.zlevel,
z: this.z,
shape: {
points: [
rpoint1, rpoint2, rpoint3, rpoint4
]
},
style: {
fill: style.backgroundColor
},
cursor: 'pointer',
onmouseover: () => { this.name.getArrowText().show(); },
onmouseout: () => { this.name.getArrowText().hide(); }
});
const rpx = Math.abs(this.triangle.getCos(halfWidth)) + 0.2;
this.relocShelter.position = [-directx * rpx, -directy * 0.2];
this.relocShelter.hide();
const sinX = style.Section.sectionWidth / this.triangle.getSinRate();
const switchWidth1 = style.Section.sectionWidth / 2;
const width1 = switchWidth1 * this.triangle.getSinRate();
const height1 = switchWidth1 * this.triangle.getCosRate();
const width2 = (height1 + switchWidth1) / this.triangle.getTanRate();
const width3 = sinX - width2 - width1;
const switchPoint1 = [model.intersection.x + directx * width3, model.intersection.y - directy * switchWidth1];
const switchPoint2 = [switchPoint1[0] - directx * (width2 + width1) - directx * width3, switchPoint1[1]];
const switchPoint3 = [model.intersection.x - directx * width3, model.intersection.y + directy * switchWidth1];
const switchPoint4 = [switchPoint1[0] + directx * (width2 + width1) - directx * width3, switchPoint3[1]];
this.reserveSection = new Polygon({
zlevel: this.zlevel,
shape: {
points: [
switchPoint1, switchPoint2, switchPoint3, switchPoint4
]
},
style: {
fill: style.Section.sectionSpareColor
},
cursor: 'pointer',
onmouseover: () => { this.name.getArrowText().show(); },
onmouseout: () => { this.name.getArrowText().hide(); }
});
this.reserveSection.hide();
this.releaseBackground = new Line({
zlevel: this.zlevel,
z: this.z,
shape: {
x1: model.intersection.x - (coverLength * this.triangle.getCotRate()),
y1: model.intersection.y,
x2: model.intersection.x + (coverLength * this.triangle.getCotRate()),
y2: model.intersection.y
},
style: {
lineWidth: style.Section.sectionWidth + style.Section.sectionBeyondWidth + 1,
stroke: style.backgroundColor
}
});
const arrowTextX = model.intersection.x + 10;
const arrowTextY = model.intersection.y + 15;
const nameTextX = model.namePosition.x + model.intersection.x + this.triangle.drictx * (style.Section.sectionWidth * 3 + style.Switch.switchNameDistance) * this.triangle.getCotRate();
const nameTextY = model.namePosition.y + model.intersection.y + this.triangle.dricty * (style.Switch.switchNameDistance);
this.name = new ESwName({
zlevel: this.zlevel,
z: this.z,
style: style,
arrowTextX: arrowTextX,
arrowTextY: arrowTextY,
nameTextX: nameTextX,
nameTextY: nameTextY,
sectionName: model.sectionName,
name: model.name,
nameShow: model.nameShow,
triangle: this.triangle
});
this.add(this.swCore);
this.add(this.locShelter);
this.add(this.relocShelter);
this.add(this.reserveSection);
this.add(this.releaseBackground);
this.add(this.name);
}
/** 名称动画*/
nameTextAnimation() {
this.name.getNameText().animateStyle(true)
.when(0, { textFill: this.style.backgroundColor })
.when(1000, { textFill: this.style.Switch.switchTextLossColor })
.when(2000, { textFill: this.style.backgroundColor })
.start();
this.name.getTextRect().animateStyle(true)
.when(0, { textFill: this.style.backgroundColor })
.when(1000, { textFill: this.style.Switch.switchTextBorderColor })
.when(2000, { textFill: this.style.backgroundColor })
.start();
}
/** 设置岔芯是否隐藏*/
setSwitchCoreInvisible(invisible) {
if (invisible) {
this.swCore.hide();
} else {
this.swCore.show();
}
}
/** 设置岔芯颜色*/
setSwitchCoreColor(color) {
this.swCore.setColor(color);
}
/** 设置道岔文字颜色*/
setTextColor(color) {
this.name.getNameText().setStyle('textFill', color);
}
/** 设置道岔文字边框颜色 */
setHasTextBorder(width) {
this.name.getTextRect().setStyle('lineWidth', width);
}
/** 恢复状态*/
recover() {
this.setSwitchCoreColor(this.style.backgroundColor);
this.name.getNameText().stopAnimation(false);
this.reserveSection.stopAnimation(false);
this.swCore.stopAnimation(false);
this.relocShelter.hide();
this.releaseBackground.hide();
this.setHasTextBorder(0);
switch (this.state.locateType) {
case '01':
this.setTextColor(this.style.Switch.switchLocateTextColor);
break;
case '02':
this.setTextColor(this.style.Switch.switchInversionColor);
break;
default:
this.setTextColor(this.style.Switch.switchTextLossColor);
break;
}
}
/** 定位*/
setLocationAction() {
this.recover();
this.setSwitchCoreInvisible(true);
this.locShelter.show();
this.relocShelter.hide();
this.reserveSection.hide();
}
/** 反位*/
setInversionAction() {
this.recover();
this.setSwitchCoreInvisible(true);
this.locShelter.hide();
this.relocShelter.show();
this.reserveSection.show();
}
/** 失去*/
setLossAction(nameFlicker) {
this.recover();
this.locShelter.hide();
this.relocShelter.hide();
this.reserveSection.hide();
this.setSwitchCoreInvisible(false);
nameFlicker && this.nameTextAnimation();
}
/** 挤叉*/
setForkAction() {
this.setLossAction(true);
this.swCore.animateStyle(item => {
item.animateStyle(true)
.when(0, { stroke: this.style.backgroundColor })
.when(1000, { stroke: 'red' })
.when(2000, { stroke: this.style.backgroundColor })
.start();
});
}
/** 空闲*/
spare() {
}
/** 单锁*/
setMonolock() {
this.setTextColor(this.style.Switch.switchMonolockColor);
}
/** 封锁 */
block() {
this.setHasTextBorder(1);
}
/** 延时释放*/
timeRelease() {
this.setSwitchCoreInvisible(true);
this.releaseBackground.show();
}
/** 设置道岔切除*/
setSwitchCutOff() {
this.setSwitchCoreInvisible(true);
switch (this.model.locateType) {
case '01':
this.releaseBackground.hide();
this.setSectionState(this.release, 'stroke', this.model.sectionAstatus);
break;
case '02':
this.reserveSection.animateStyle(true)
.when(1000, { fill: this.style.backgroundColor })
.start();
break;
}
}
setSectionState(section, style, state) {
if (section) {
switch (state) {
case '00': break;
case '01': /** 空闲*/
section.setStyle(style, this.style.Section.sectionSpareColor);
break;
case '02': /** 通信车占用*/
section.setStyle(style, this.style.Section.sectionCommunicationOccupiedColor);
break;
case '03': /** 非通信车占用*/
section.setStyle(style, this.style.Section.sectionUnCommunicationOccupiedColor);
break;
case '04': /** 进路锁闭*/
section.setStyle(style, this.style.Section.sectionRouteLockColor);
break;
case '05': /** 故障锁闭*/
section.setStyle(style, this.style.Section.sectionFaultLockColor);
break;
case '06': /** 封锁*/
section.setStyle(style, this.style.Section.sectionBlockColor);
break;
case '07': /** ATC切除*/
section.setStyle(style, this.style.Section.sectionAtcExcisionColor);
break;
case '08': /** ATS切除*/
section.setStyle(style, this.style.Section.sectionAtsExcisionColor);
section.animateStyle(true)
.when(1000, { fill: this.style.backgroundColor })
.when(2000, { fill: this.style.Section.sectionAtsExcisionColor })
.start();
break;
case '09': /** 进路延续保护 */
section.setStyle(style, this.style.Section.sectionProtectiveLockColor);
break;
}
}
}
setLocateType(state) {
this.setSectionState(this.reserveSection, 'fill', this.model.sectionCstatus);
switch (state.locateType) {
case '01':
this.setLocationAction(); /** 定位*/
break;
case '02':
this.setInversionAction(); /** 反位*/
break;
case '03':
this.setLossAction(true); /** 失去*/
break;
case '04':
this.setForkAction(); /** 挤岔*/
break;
}
}
setState(state) {
this.setLocateType(state);
switch (state.status) {
case '01':
this.spare(); /** 空闲*/
break;
case '10':
this.setMonolock(); /** 单锁*/
break;
case '13':
this.timeRelease(); /** 延时释放*/
break;
case '14':
this.block(); /** 封锁*/
break;
}
/** 区段切除*/
if (state.cutOff) {
this.setSwitchCutOff();
}
}
getShapeTipPoint() {
let rect = null;
rect = this.name.getNameText().getBoundingRect();
if (rect) {
return {
x: rect.x + rect.width / 2,
y: rect.y
};
}
return null;
}
}

View File

@ -20,7 +20,7 @@ export default class Switch extends Group {
this.jmap = jmap;
this.selected = false;
this.zlevel = zlevel;
this.z = 8;
this.z = 6;
this._create();
this.setState(state);
@ -32,9 +32,9 @@ export default class Switch extends Group {
this.triangle = new JTriangle(model.intersection, model.skew);
let halfWidth = style.Section.sectionWidth / 2;
const switchWidth = style.Section.sectionWidth + style.Section.sectionBeyondWidth*2 + 0.8;
const swPadding = style.Switch.switchLen;
let halfWidth = style.Section.line.width / 2;
const switchWidth = style.Section.line.width + style.Section.line.beyondWidth*2 + 0.8;
const swPadding = style.Switch.core.switchLen;
const directx = this.triangle.drictx;
const directy = this.triangle.dricty;
const direct = -this.triangle.drictx * this.triangle.dricty;
@ -73,11 +73,11 @@ export default class Switch extends Group {
const rpoint3 = [rpoint2[0], rpoint2[1] + directy * switchWidth];
const rpoint4 = [rpoint1[0] + this.triangle.getCos(slen), rpoint1[1] + this.triangle.getSin(slen)];
const switchWidth1 = style.Section.sectionWidth / 2;
const switchWidth1 = style.Section.line.width / 2;
const width1 = switchWidth1 * this.triangle.getSinRate();
const height1 = switchWidth1 * this.triangle.getCosRate();
const width2 = (height1 + switchWidth1) / this.triangle.getTanRate();
const width3 = (style.Section.sectionWidth / this.triangle.getSinRate()) - width2 - width1;
const width3 = (style.Section.line.width / this.triangle.getSinRate()) - width2 - width1;
const spoint1 = [model.intersection.x + directx * width3, model.intersection.y - directy * switchWidth1];
const spoint2 = [spoint1[0] - directx * (width2 + width1) - directx * width3, spoint1[1]];
const spoint3 = [model.intersection.x - directx * width3, model.intersection.y + directy * switchWidth1];
@ -106,15 +106,15 @@ export default class Switch extends Group {
y2: model.intersection.y
},
style: {
lineWidth: style.Section.sectionWidth + style.Section.sectionBeyondWidth + 1,
lineWidth: style.Section.line.width + style.Section.line.beyondWidth + 1,
stroke: style.backgroundColor
}
});
const arrowTextX = model.intersection.x + 10;
const arrowTextY = model.intersection.y + 15;
const nameTextX = model.namePosition.x + model.intersection.x + this.triangle.drictx * (style.Section.sectionWidth * 3 + style.Switch.switchNameDistance) * this.triangle.getCotRate();
const nameTextY = model.namePosition.y + model.intersection.y + this.triangle.dricty * (style.Switch.switchNameDistance);
const nameTextX = model.namePosition.x + model.intersection.x + this.triangle.drictx * (style.Section.line.width * 3 + style.Switch.text.switchNameDistance) * this.triangle.getCotRate();
const nameTextY = model.namePosition.y + model.intersection.y + this.triangle.dricty * (style.Switch.text.switchNameDistance);
this.name = new ESwName({
zlevel: this.zlevel,
z: this.z,
@ -140,13 +140,13 @@ export default class Switch extends Group {
nameTextAnimation() {
this.name.getNameText().animateStyle(true)
.when(0, { textFill: this.style.backgroundColor })
.when(1000, { textFill: this.style.Switch.switchTextLossColor })
.when(1000, { textFill: this.style.Switch.text.switchTextLossColor })
.when(2000, { textFill: this.style.backgroundColor })
.start();
this.name.getTextRect().animateStyle(true)
.when(0, { textFill: this.style.backgroundColor })
.when(1000, { textFill: this.style.Switch.switchTextBorderColor })
.when(1000, { textFill: this.style.Switch.text.switchTextBorderColor })
.when(2000, { textFill: this.style.backgroundColor })
.start();
}
@ -187,13 +187,13 @@ export default class Switch extends Group {
this.setHasTextBorder(0);
switch (this.state.locateType) {
case '01':
this.setTextColor(this.style.Switch.switchLocateTextColor);
this.setTextColor(this.style.Switch.text.switchTextLocateColor);
break;
case '02':
this.setTextColor(this.style.Switch.switchInversionColor);
this.setTextColor(this.style.Switch.text.switchTextInversionColor);
break;
default:
this.setTextColor(this.style.Switch.switchTextLossColor);
this.setTextColor(this.style.Switch.text.switchTextLossColor);
break;
}
}
@ -276,35 +276,35 @@ export default class Switch extends Group {
switch (state) {
case '00': break;
case '01': /** 空闲*/
section.setStyle(style, this.style.Section.sectionSpareColor);
section.setStyle(style, this.style.Section.line.spareColor);
break;
case '02': /** 通信车占用*/
section.setStyle(style, this.style.Section.sectionCommunicationOccupiedColor);
section.setStyle(style, this.style.Section.line.communicationOccupiedColor);
break;
case '03': /** 非通信车占用*/
section.setStyle(style, this.style.Section.sectionUnCommunicationOccupiedColor);
section.setStyle(style, this.style.Section.line.unCommunicationOccupiedColor);
break;
case '04': /** 进路锁闭*/
section.setStyle(style, this.style.Section.sectionRouteLockColor);
section.setStyle(style, this.style.Section.line.routeLockColor);
break;
case '05': /** 故障锁闭*/
section.setStyle(style, this.style.Section.sectionFaultLockColor);
section.setStyle(style, this.style.Section.line.faultLockColor);
break;
case '06': /** 封锁*/
section.setStyle(style, this.style.Section.sectionBlockColor);
section.setStyle(style, this.style.Section.line.blockColor);
break;
case '07': /** ATC切除*/
section.setStyle(style, this.style.Section.sectionAtcExcisionColor);
section.setStyle(style, this.style.Section.line.atcExcisionColor);
break;
case '08': /** ATS切除*/
section.setStyle(style, this.style.Section.sectionAtsExcisionColor);
section.setStyle(style, this.style.Section.line.atsExcisionColor);
section.animateStyle(true)
.when(1000, { fill: this.style.backgroundColor })
.when(2000, { fill: this.style.Section.sectionAtsExcisionColor })
.when(2000, { fill: this.style.Section.line.atsExcisionColor })
.start();
break;
case '09': /** 进路延续保护 */
section.setStyle(style, this.style.Section.sectionProtectiveLockColor);
section.setStyle(style, this.style.Section.line.protectiveLockColor);
break;
}
}

View File

@ -34,11 +34,13 @@ export default class ZcControl extends Group {
position: [0, 0],
x: model.position.x,
y: model.position.y + this.style.zcControlmodeR + this.style.nameDistance,
fontWeight: 'normal',
fontSize: this.style.stationControlTextSize,
fontFamily: this.style.textFontFormat,
text: model.name,
textFill: '#fff',
textAlign: 'middle',
textVerticalAlign: 'top',
textFont: this.style.stationControlTextSize + 'px ' + this.style.textFontFormat
textVerticalAlign: 'top'
},
style: this.style
});

View File

@ -35,11 +35,13 @@ export default class EControl extends Group {
style: {
x: this.textStyle.x,
y: this.textStyle.y,
fontWeight: this.textStyle.fontWeight,
fontSize: this.textStyle.fontSize,
fontFamily: this.textStyle.fontFamily,
text: this.textStyle.text,
textFill: this.textStyle.textFill,
textAlign: this.textStyle.textAlign,
textVerticalAlign: this.textStyle.textVerticalAlign,
textFont: this.textStyle.textFont
textVerticalAlign: this.textStyle.textVerticalAlign
}
});

View File

@ -4,15 +4,16 @@ import Text from 'zrender/src/graphic/Text';
/** 名称元素*/
export default function ETextName(model) {
const TextName = new Text({
_subType: model._subType,
zlevel: model.zlevel,
z: model.z,
silent: model.silent || false,
style: {
x: model.x,
y: model.y,
fontWeight: model.fontWeight,
fontSize: model.fontSize,
fontFamily: model.fontFamily,
text: model.text,
textFont: model.textFont,
textFill: model.textFill,
textAlign: model.textAlign,
textPosition: model.textPosition || 'inside',

View File

@ -79,7 +79,7 @@ class Batong extends defaultSkin {
/** 信号机宽度 */
signalR: 5,
/** 自动信号宽度*/
signalSigPassWidth: 6,
signalAutoWidth: 6,
/** 延迟解锁字体大小*/
signalDelayTextFontSize: 10,
/** 信号机名称字体大小*/
@ -235,7 +235,7 @@ class Batong extends defaultSkin {
/** 道岔失去颜色*/
switchTextLossColor: '#FFFFFF',
/** 道岔定位颜色*/
switchLocateTextColor: '#00FF00',
switchTextLocateColor: '#00FF00',
/** 道岔反位颜色*/
switchInversionColor: '#9C9D09',
/** 道岔单锁颜色*/

View File

@ -7,211 +7,201 @@ class Beijing extends defaultSkin {
this[deviceType.Link] = {
/** line 颜色*/
lineWidthColor: '#FFFFFF',
/** link 宽度*/
linkWidth: 4.4,
/** link 线条颜色*/
linkColor: '#3F3F3F',
/** link 字体颜色*/
linkTextColor: '#FFFFFF'
};
this[deviceType.Section] = {
sectionTextPosition: 1, // 区段名称位置 1 上行 -1 下面 0 默认
/** 区段 宽度*/
sectionWidth: 5,
/** 区段宽超出宽度*/
sectionBeyondWidth: 0,
/** 计轴 半径*/
sectionAxleR: 3,
/** 计轴和区段之间的距离*/
sectionAxleDistance: 5,
/** 限速线的宽度*/
sectionSpeedLimitLinewidth: 1,
/** 限速线距离区段距离*/
sectionSpeedLimitDistance: 5,
/** 分隔符宽度*/
sectionSeparatorWidth: 1.2,
sectionEndSeparatorWidth: 1.2, // 尽头分隔符宽度
sectionEndSeparatorStroke: '#7F7F7F', // 尽头分隔符颜色
/** 区段侵入颜色*/
sectionInvadeColor: '#EF0C08',
/** 限速线颜色*/
sectionSpeedLimitColor: '#FFFF00',
/** 逻辑区段颜色*/
sectionLogicalBackgroundColor: '#FFFF00',
/** 区段计轴颜色*/
sectionAxleColor: '#C0C0C0',
/** 区段边界符颜色*/
sectionSeparatorColor: '#7F7F7F',
/** 区段空闲颜色*/
sectionSpareColor: '#606060',
/** 逻辑区段名称颜色*/
sectionLogicalTextColor: '#C0C0C0',
/** 区段通信车占用颜色**/
sectionCommunicationOccupiedColor: '#FF0000',
/** 区段非通讯车占用颜色*/
sectionUnCommunicationOccupiedColor: '#800080',
/** 区段路由锁定颜色*/
sectionRouteLockColor: '#FFFFFF',
/** 区段故障锁定颜色*/
sectionFaultLockColor: '#006400',
/** 区段未定义颜色*/
sectionUndefinedColor: '#0071C1',
/** 保护区段锁闭*/
sectionProtectionSectionLockedColor: '#FEFF00',
/** 区段计轴预复位*/
sectionAxleResetColor: '#00FFFF',
/** 区段封锁颜色*/
sectionBlockColor: '#800080',
/** 区段atc切除颜色*/
sectionAtcExcisionColor: '#A0522D',
/** 区段ats切除颜色*/
sectionAtsExcisionColor: '#A0522D',
/** 区段延时释放颜色*/
sectionTimeReleaseColor: '#3F3F3F',
/** 区段保护锁闭*/
sectionProtectiveLockColor: '#FFFF00',
/** 区段保护延时解锁*/
sectionProtectiveTimeReleaseColor: '#0071C1',
/** 计轴失效*/
sectionAxleFailure: '#E6A23C' // #FFFF00
text: { // 区段文字属性
fontSize: 10, // 字体大小
fontFormat: 'consolas', // 字体族类
fontColor: '#C0C0C0', // 字体颜色
textAlign: 'center', // 水平对齐方式
textPosition: 'inside', // 文字位置
textVerticalAlign: 'middle', // 文字垂直对齐方式
position: 1 // 区段名称位置 1 上面 -1 下面 0 默认
},
line: {
width: 5, // 区段宽度
beyondWidth: 0, // 区段宽超出宽度
invadeColor: '#EF0C08', // 区段侵入颜色
spareColor: '#606060', // 区段空闲颜色
communicationOccupiedColor: '#FF0000', // 区段通信车占用颜色
unCommunicationOccupiedColor: '#800080', // 区段非通讯车占用颜色
routeLockColor: '#FFFFFF', // 区段路由锁定颜色
faultLockColor: '#006400', // 区段故障锁定颜色
undefinedColor: '#0071C1', // 区段未定义颜色
protectionLockedColor: '#FEFF00', // 保护区段锁闭(未用)
blockColor: '#800080', // 区段封锁颜色
atcExcisionColor: '#A0522D', // 区段atc切除颜色
atsExcisionColor: '#A0522D', // 区段ats切除颜色
timeReleaseColor: '#3F3F3F', // 区段延时释放颜色
protectiveLockColor: '#FFFF00', // 区段保护锁闭
protectiveTimeReleaseColor: '#0071C1', // 区段保护延时解锁
logicalColor: '#FFFF00', // 逻辑区段颜色 (未用)
logicalTextColor: '#C0C0C0' // 逻辑区段名称颜色 (未用)
},
axle: {
radius: 3, // 计轴 半径
distance: 5, // 计轴和区段之间的距离 (未用)
color: '#C0C0C0', // 区段计轴颜色
resetColor: '#00FFFF', // 区段计轴预复位颜色
Failure: '#E6A23C' // #FFFF00 计轴失效
},
speedLimit: { // 限速元素
width: 1, // 限速线的宽度
Distance: 5, // 限速线距离区段距离
lineColor: '#FFFF00' // 限速线颜色
},
separator: {
width: 1.5, // 分隔符宽度
endWidth: 1.5, // 尽头分隔符宽度
endColor: '#7F7F7F', // 尽头分隔符颜色
color: '#7F7F7F' // 区段边界符颜色
}
};
this[deviceType.Signal] = {
/** 信号机宽度 */
signalR: 7,
/** 自动信号宽度*/
signalSigPassWidth: 5,
/** 延迟解锁字体大小*/
signalDelayTextFontSize: 10,
/** 信号机名称字体大小*/
signalTextFontSize: 12,
/** 灯柱宽度*/
signalLampStandardWidth: 1.2,
/** 设备距离区段的距离*/
signalDistance: 0,
/** 信号灯按钮距离区段的距离*/
signalButtonDistance: 5,
/** 自动进路方向*/
signalSigRouteDirection: false,
/** 自动进路偏移量*/
signalSigRouteOffset: { x: 4, y: -2 },
/** 自动通过方向*/
signalSigPassDirection: true,
/** 自动通过偏移量*/
signalSigPassOffset: { x: 4, y: 0},
/** 延时解锁方向*/
signalSigDelayDirection: false,
/** 延时解锁偏移量*/
signalSigDelayOffset: { x: 0, y: -5},
/** 信号灯按钮边线*/
signalButtonDashColor: '#FFFFFF',
/** 信号灯按钮颜色*/
signalButtonColor: 'darkgreen',
/** 信号灯按钮闪烁颜色*/
signalButtonLightenColor: '#E4EF50',
/** 信号灯字体颜色*/
signalTextRed: '#EF0C08',
/** 信号机字体绿色*/
signalTextGreen: '#4DD43F',
/** 信号灯灯柱颜色*/
signalLampStandardColor: '#5578B6',
/** 信号灯锁闭*/
signalBlockColor: '#EF0C08',
/** 信号灯灰色*/
signalLampGrayColor: '#7F7F7F',
/** 信号灯红色*/
signalLampRedColor: '#FF0000',
/** 信号灯绿色*/
signalLampGreenColor: '#00FF00',
/** 信号灯黄色*/
signalLampYellowColor: '#FFFF00',
/** 信号灯白色*/
signalLampWhiteColor: '#FFFFFF',
/** 信号灯蓝色*/
signalLampBlueColor: '#0070C0'
post: {
/** 信号灯灯柱颜色*/
signalLampStandardColor: '#5578B6',
signalLampStandardWidth: 1.5
},
text: {
/** 是否禁止旋转*/
isNoRotation: true,
/** 信号机名称字体大小*/
signalTextFontSize: 10,
/** 信号灯字体默认色*/
signalDefaultTextColor: '#C0C0C0',
/** 信号灯字体锁定颜色*/
signalTextBlockColor: '#EF0C08'
},
lamp: {
/** 禁止线宽度*/
signalStopWidth: 2,
/** 信号灯边框线宽度*/
signalBorderWidth: 0.5,
/** 信号灯边框线颜色*/
signalBorderColor: '#3149C3',
/** 信号机宽度 */
signalR: 6,
/** 信号灯锁闭*/
signalBlockColor: '#EF0C08',
/** 信号灯灰色*/
signalLampGrayColor: '#7F7F7F',
/** 信号灯红色*/
signalLampRedColor: '#FF0000',
/** 信号灯绿色*/
signalLampGreenColor: '#00FF00',
/** 信号灯黄色*/
signalLampYellowColor: '#FFFF00',
/** 信号灯白色*/
signalLampWhiteColor: '#FFFFFF',
/** 信号灯蓝色*/
signalLampBlueColor: '#0070C0'
},
route: {
/** 自动进路方向*/
signalRouteDirection: false,
/** 自动进路偏移量*/
signalRouteOffset: { x: 4, y: -2 },
/** 自动进路*/
signalRouteColor: '#00FF00'
},
auto: {
/** 自动通过方向*/
signalAutoDirection: true,
/** 自动通过偏移量*/
signalAutoOffset: { x: 4, y: 0},
/** 自动进路*/
signalAutoRoute: '#00FF00',
/** 自动触发*/
signalAutoTrigger: '#FFFF00'
},
delay: {
/** 延迟解锁字体大小*/
signalDelayTextFontSize: 9,
/** 延时解锁方向*/
signalDelayDirection: false,
/** 延时解锁偏移量*/
signalDelayOffset: { x: 0, y: -5},
/** 延迟解锁颜色*/
signalDelayTextColor: '#FF0000'
},
button: {
/** 信号灯按钮距离区段的距离*/
signalButtonDistance: 5,
/** 信号灯按钮边线*/
signalButtonDashColor: '#FFFFFF',
/** 信号灯按钮颜色*/
signalButtonColor: 'darkgreen',
/** 信号灯按钮闪烁颜色*/
signalButtonLightenColor: '#E4EF50'
}
};
this[deviceType.StationStand] = {
/** 站台和屏蔽门之间的距离*/
standDistance: 9,
/** 站台屏蔽门高度*/
standSafeHeight: 1.6,
/** 站台首端字体大小*/
standHeadFontSize: 8,
/** 站台默认字体大小*/
standTextFontSize: 8,
/** 站台紧急关闭半径*/
standEmergentR: 4,
/** 站台紧急关闭偏移量*/
standEmergentOffset: {x: 0, y: 0},
/** 扣车方向*/
standDetainDirection: 1,
/** 扣车偏移量*/
standDetainOffset: {x: -8, y: 13},
/** 运行时间方向*/
standTimeDirection: 1,
/** 运行时间偏移量*/
standTimeOffset: {x: -8, y: 3},
/** 运行等级方向*/
standLevelDirection: 1,
/** 运行等级偏移量*/
standLevelOffset: {x: -8, y: 22},
/** 折返方向*/
standReentryDirection: 0,
/** 折返偏移量*/
standReentryOffset: {x: -16, y: 18},
/** 扣车显示内容*/
standDetainText: 'H',
/** 站台无人折返*/
standNoHumanReentryColor: '#0F16DA',
/** 站台自动换端*/
standAutoChangeEndsColor: '#0BF400',
/** 站台空闲颜色*/
standSpareColor: '#606060',
/** 站台列车停站颜色*/
standStopColor: '#FEFE00',
/** 站台跳停颜色*/
standJumpStopColor: '#9A99FF',
/** 站台指定列车跳停颜色*/
standDesignatedJumpStopColor: 'lightSkyBlue',
/** 站台紧急关闭颜色*/
standEmergentCloseColor: '#F61107',
/** 停站时间字体颜色*/
standTimeTextColor: '#FFFFFF',
/** 停站等级字体颜色*/
standLevelTextColor: '#FFFFFF',
/** 车站扣车颜色*/
standDetainTrainColor: '#E4EF50',
/** 中心扣车颜色*/
standCenterDetainTrainColor: '#FFFFFF',
/** 车站+中心扣车颜色*/
standAndCenterDetainTrainColor: '#F61107',
/** 屏蔽门默认颜色*/
standDoorDefaultColor: '#00FF00',
/** 屏蔽门切除颜色*/
standSplitDoorColor: '#F61107',
/** 车站扣除文字颜色*/
standDetainTrainTextColor: '#E4EF50',
/** 计数器字体颜色*/
stationCounterTextColor: '#FFFFFF',
/** 计数器边框颜色*/
stationCounterBorderColor: '#E4EF50',
/** 延迟解锁倒计时和设备文字之间的距离*/
stationDelayUnlockDistance: 3,
/** 延时解锁字体颜色*/
stationDelayUnlockTextColor: '#FFFFFF',
/** 延迟解锁边框颜色*/
stationDelayUnlockBorderColor: '#FFFFFF'
common: { // 通用属性
textFontSize: 8 // 站台默认字体大小
},
safetyDoor: { // 屏蔽门
height: 1.6, // 站台屏蔽门高度
distance: 9, // 站台和屏蔽门之间的距离
defaultColor: '#00FF00', // 屏蔽门默认颜色
splitDoorColor: '#F61107' // 屏蔽门切除颜色
},
stand: { // 站台
headFontSize: 8, // 站台首端字体大小
spareColor: '#606060', // 站台空闲颜色
stopColor: '#FEFE00', // 站台列车停站颜色
jumpStopColor: '#9A99FF', // 站台跳停颜色
designatedJumpStopColor: 'lightSkyBlue' // 站台指定列车跳停颜色
},
standEmergent: { // 紧急关闭
mergentR: 4, // 站台紧急关闭半径
offset: {x: 0, y: 0}, // 站台紧急关闭偏移量
closeColor: '#F61107' // 站台紧急关闭颜色
},
reentry: { // 站台折返策略
direction: 0, // 折返方向
offset: {x: -16, y: 18}, // 折返偏移量
noHumanColor: '#0F16DA', // 站台无人折返
AutoChangeEndsColor: '#0BF400' // 站台自动换端
},
detainCar: { // 扣车
text: 'H', // 扣车显示内容
direction: 1, // 扣车方向
offset: {x: -8, y: 13}, // 扣车偏移量
trainColor: '#E4EF50', // 车站扣车颜色
centerTrainColor: '#FFFFFF', // 中心扣车颜色
andCenterTrainColor: '#F61107', // 车站+中心扣车颜色
detainTrainTextColor: '#E4EF50' // 车站扣除文字颜色
},
stopTime: { // 停站时间
direction: 1, // 运行时间方向
offset: {x: -8, y: 3}, // 运行时间偏移量
textColor: '#FFFFFF' // 停站时间字体颜色
},
level: { // 运行等级
direction: 1, // 运行等级方向
offset: {x: -8, y: 22}, // 运行等级偏移量
textColor: '#FFFFFF' // 停站等级字体颜色
}
};
this[deviceType.StationControl] = {
singleControlNum: 3,
stationOffset: {x: 20, y: 0},
stationOffset: { x: 20, y: 0 },
arrowsShow: false, // 控制模式箭头显隐
/** 控制模式字体大小*/
stationControlTextSize: 10,
/** 控制模式灯的半径 */
stationControlmodeR: 4,
stationControlmodeR: 6,
/** 控制模式之间灯之间的距离*/
stationControlDistance: 36,
/** 控制模式灰色*/
@ -223,155 +213,31 @@ class Beijing extends defaultSkin {
/** 控制模式黄色*/
stationControlYellowColor: '#FFFF00'
};
this[deviceType.Station] = {
kilometerPosition: 'down' // 公里标位置
};
this[deviceType.Switch] = {
/** 道岔单边长度 */
switchLen: 6,
/** 道岔名称与区段距离*/
switchNameDistance: 2,
/** 道岔边框颜色*/
switchTextBorderColor: '#FE0000',
/** 道岔失去颜色*/
switchTextLossColor: '#FFFFFF',
/** 道岔定位颜色*/
switchLocateTextColor: '#00FF00',
/** 道岔反位颜色*/
switchInversionColor: '#9C9D09',
/** 道岔单锁颜色*/
switchMonolockColor: '#870E10',
text: {
/** 道岔名称与区段距离*/
switchNameDistance: 2,
/** 道岔边框颜色*/
switchTextBorderColor: '#FE0000',
/** 道岔失去颜色*/
switchTextLossColor: '#FFFFFF',
/** 道岔定位颜色*/
switchTextLocateColor: '#00FF00',
/** 道岔反位颜色*/
switchInversionColor: '#9C9D09',
/** 道岔单锁颜色*/
switchMonolockColor: '#870E10'
},
core: {
/** 道岔单边长度 */
switchLen: 6
}
};
this[deviceType.Train] = {
/** 车身line宽 */
trainBodyLineWidth: 0.1,
/** 车身鼠标悬浮事件 */
trainBodyOnMouseOver: {train: true, textTrainNumber: false, textTrainServer: false, textTrainTarget: false, textTrainTargetNumber: false},
/** 车身鼠标移出事件 */
trainBodyOnMouseOut: {train: true, textTrainNumber: false, textTrainServer: false, textTrainTarget: false, textTrainTargetNumber: false},
/** 服务号(表号)前缀 */
serviceNumberPrefix: '00',
/** 默认服务号(表号) */
defaultServiceNumber: 'AA',
/** 车次号前缀 */
tripNumberPrefix: '000',
/** 默认车次号2 */
defaultTripNumber: 'DDD',
/** 列车车头比车身高出的长度,上下相比车体伸出去的边框*/
trainMoreLength: 0,
/** 列车车头三角坐标1偏移量 */
trainHeadTriangleFirst: { x: 7, y: 1},
/** 列车车头三角坐标2偏移量 */
trainHeadTriangleSecond: { x: 13, y: 10},
/** 列车车头三角坐标3偏移量 */
trainHeadTriangleThird: { x: 7, y: 19},
/** 列车高度*/
trainHeight: 20,
/** 列车和车头之间的间距*/
trainHeadDistance: 4,
/** 列车车头矩形高度 */
trainHeadRectHeight: 20,
/** 列车长度*/
trainWidth: 40,
/** 列车竖杠的宽度*/
trainConntWidth: 3,
/** 是否根据车身上车组号、服务号、车次号、目的地码显示情况改变列车长度 */
changeTrainWidth: false,
/** 是否根据nameFormat去动态加载车组号、服务号、车次号、目的地码 */
dynamicLoadingDisplay: false,
/** 特殊列车类型需设置显示格式 */
specialTrainType: [],
/** 两边间隔 */
lrPadding: 4,
/** 上边距离 */
upPadding: 4,
/** HSDA两边间隔 */
lrPaddingHSDA: 3,
/** HSDA上边距离 */
upPaddingHSDA: 4,
/** 列车字号*/
trainTextFontSize: 12,
/** 目的地状态 01准点 02早点 03晚点 04头码车 */
destinationStatus: [
{status: '01',showColor: '#FFFFFF'},
{status: '02',showColor: '#00FF00'},
{status: '03',showColor: '#A0522D'},
{status: '04',showColor: '#FFFF00'},
],
/** 默认目的地状态显示颜色 */
defaultDestinationColor: '#000000',
/** 默认字体 族类*/
textFontFormat: 'consolas',
/** 列车HDSA字号*/
trainHSDATextFontSize: 9,
/** 服务号状态类型 01显示服务号 计划车 02显示车组号: 头码车与人工车 */
serverNoType: [
{type: '01', showColor: '#FFFFFF'},
{type: '01', showColor: '#FFFFFF'},
],
/** 默认服务号状态显示颜色 */
defaultServerNoColor: '#000000',
/** 列车运行方向状态类型对应车头显示状态 01未知方向 02从左往右 上行 03从右往左 下行*/
directionType: [
{type: '01', lineLShow: true, lineRShow: true, arrowLShow: false, arrowRShow: false },
{type: '02', lineLShow: false, lineRShow: true, arrowLShow: false, arrowRShow: true },
{type: '03', lineLShow: true, lineRShow: false, arrowLShow: true, arrowRShow: false }
],
/** 列车停止方向类型对应车头显示状态 01未知方向 02从左往右 上行 03从右往左 下行 */
directionStopType: [
{type: '01', lineLShow: false, lineRShow: false},
{type: '02', lineLShow: false, lineRShow: true},
{type: '03', lineLShow: true, lineRShow: false}
],
/** 01 02 ATOAM 03 ATPCM
* 04 限制人工驾驶模式RM 05 非限制人工驾驶模式RM*/
runModeStatus: [
{status: '01', trainLColor: '#FFFFFF', trainRColor: '#FFFFFF'},
{status: '01', trainLColor: '#00FF00', trainRColor: '#00FF00'},
{status: '01', trainLColor: '#FFFF00', trainRColor: '#FFFF00'},
{status: '01', trainLColor: '#A0522D', trainRColor: '#A0522D'},
{status: '01', trainLColor: '#A0522D', trainRColor: '#A0522D'}
],
/** 设置运行控制状态类型 01正常 02扣车 03停跳 */
runControlStatus: [
{status: '01', hShow: false, sShow: false},
{status: '02', hShow: true, sShow: false},
{status: '03', hShow: false, sShow: true}
],
/** 设置车门状态类型 01关门 02开门 */
doorStatus: [
{status: '01', dShow: false},
{status: '02', dShow: true}
],
/** 设置通信状态 01正常 02故障 */
communicationStatus: [
{status: '01', trainColor:'#725A64'},
{status: '02', trainColor:'#C0C0C0'}
],
/** 设置报警状态 01不报警 02报警 */
alarmStatus: [
{status: '01', aShow: false},
{status: '02', aShow: true}
],
/** 列车车头矩形填充颜色 */
trainHeadFillColor: '#000000',
/** 列车车身填充颜色 */
trainBodyFillColor: '#725A64',
/** textH文本 */
textHContent: 'H',
/** textS文本 */
textSContent: 'S',
/** textD文本 */
textDContent: 'D',
/** textA文本 */
textAContent: 'A',
/** 是否需创建textHSDA对象 */
haveTextHSDA: true,
/** 是否需创建arrowText对象 */
haveArrowText: true,
/** 是否需创建trainBorder对象 */
haveTrainBorder: true,
}
}
}

View File

@ -82,7 +82,7 @@ class Beijing extends defaultSkin {
/** 信号机宽度 */
signalR: 6.5,
/** 自动信号宽度*/
signalSigPassWidth: 5,
signalAutoWidth: 5,
/** 延迟解锁字体大小*/
signalDelayTextFontSize: 10,
/** 信号机名称字体大小*/
@ -238,7 +238,7 @@ class Beijing extends defaultSkin {
/** 道岔失去颜色*/
switchTextLossColor: '#C00808',
/** 道岔定位颜色*/
switchLocateTextColor: '#08C008',
switchTextLocateColor: '#08C008',
/** 道岔反位颜色*/
switchInversionColor: '#C0C000',
/** 道岔单锁颜色*/

View File

@ -7,199 +7,188 @@ class Fuzhou extends defaultSkin {
this[deviceType.Link] = {
/** line 颜色*/
lineWidthColor: '#FFFFFF',
/** link 宽度*/
linkWidth: 4.4,
/** link 线条颜色*/
linkColor: '#3F3F3F',
/** link 字体颜色*/
linkTextColor: '#FFFFFF'
};
this[deviceType.Section] = {
sectionTextPosition: 0, // 区段名称位置 1 上行 -1 下面 0 默认
/** 区段 宽度*/
sectionWidth: 5,
/** 区段宽超出宽度*/
sectionBeyondWidth: 1,
/** 计轴 半径*/
sectionAxleR: 3,
/** 计轴和区段之间的距离*/ /** 需要添加*/
sectionAxleDistance: 5,
/** 限速线的宽短*/
sectionSpeedLimitLinewidth: 1,
/** 限速线距离区段距离*/
sectionSpeedLimitDistance: 5,
sectionSeparatorWidth: 1.2, // 分隔符宽度
sectionEndSeparatorWidth: 3.5, // 尽头分隔符宽度
sectionEndSeparatorStroke: '#3F3F3F', // 尽头分隔符颜色
/** 区段侵入颜色*/
sectionInvadeColor: '#EF0C08',
/** 限速线颜色*/
sectionSpeedLimitColor: '#FFFF00',
sectionLogicalBackgroundColor: '#FFFF00', // 逻辑区段颜色
/** 区段计轴颜色*/
sectionAxleColor: '#FFFFFF',
/** 区段边界符颜色*/
sectionSeparatorColor: '#3149C3',
/** 区段空闲颜色*/
sectionSpareColor: '#3F3F3F',
/** 逻辑区段名称颜色*/
sectionLogicalTextColor: '#FFFFFF',
/** 区段通信车占用颜色**/
sectionCommunicationOccupiedColor: '#FF329A',
/** 区段非通讯车占用颜色*/
sectionUnCommunicationOccupiedColor: '#FE0000',
/** 区段路由锁定颜色*/
sectionRouteLockColor: '#FFFFFF',
/** 区段故障锁定颜色*/
sectionFaultLockColor: '#9B4A0A',
/** 区段未定义颜色*/
sectionUndefinedColor: '#0071C1',
/** 保护区段锁闭*/
sectionProtectionSectionLockedColor: '#FEFF00',
/** 区段计轴预复位*/
sectionAxleResetColor: '#00FFFF',
/** 区段封锁颜色*/
sectionBlockColor: '#800080',
/** 区段atc切除颜色*/
sectionAtcExcisionColor: '#A0522D',
/** 区段ats切除颜色*/
sectionAtsExcisionColor: '#A0522D',
/** 区段延时释放颜色*/
sectionTimeReleaseColor: '#3F3F3F',
/** 区段保护锁闭*/
sectionProtectiveLockColor: '#FFFF00',
/** 区段保护延时解锁*/
sectionProtectiveTimeReleaseColor: '#0071C1',
sectionAxleFailure: '#E6A23C' // #FFFF00 计轴失效
text: { // 区段文字属性
fontSize: 10, // 字体大小
fontColor: '#FFFFFF', // 字体颜色
textAlign: 'center', // 水平对齐方式
textPosition: 'inside', // 文字位置
textVerticalAlign: 'middle', // 文字垂直对齐方式
position: 0 // 区段名称位置 1 上行 -1 下面 0 默认
},
line: {
width: 5, // 区段宽度
beyondWidth: 1, // 区段宽超出宽度
invadeColor: '#EF0C08', // 区段侵入颜色
spareColor: '#3F3F3F', // 区段空闲颜色
communicationOccupiedColor: '#FF329A', // 区段通信车占用颜色
unCommunicationOccupiedColor: '#FE0000', // 区段非通讯车占用颜色
routeLockColor: '#FFFFFF', // 区段路由锁定颜色
faultLockColor: '#9B4A0A', // 区段故障锁定颜色
undefinedColor: '#0071C1', // 区段未定义颜色
protectionLockedColor: '#FEFF00', // 保护区段锁闭(未用)
blockColor: '#800080', // 区段封锁颜色
atcExcisionColor: '#A0522D', // 区段atc切除颜色
atsExcisionColor: '#A0522D', // 区段ats切除颜色
timeReleaseColor: '#3F3F3F', // 区段延时释放颜色
protectiveLockColor: '#FFFF00', // 区段保护锁闭
protectiveTimeReleaseColor: '#0071C1', // 区段保护延时解锁
logicalColor: '#FFFF00', // 逻辑区段颜色 (未用)
logicalTextColor: '#FFFFFF' // 逻辑区段名称颜色 (未用)
},
axle: {
radius: 3, // 计轴 半径
distance: 5, // 计轴和区段之间的距离 (未用)
color: '#FFFFFF', // 区段计轴颜色
resetColor: '#00FFFF', // 区段计轴预复位颜色
Failure: '#E6A23C' // #FFFF00 计轴失效
},
speedLimit: { // 限速元素
width: 1, // 限速线的宽短
Distance: 5, // 限速线距离区段距离
lineColor: '#FFFF00' // 限速线颜色
},
separator: {
width: 1.2, // 分隔符宽度
endWidth: 3.5, // 尽头分隔符宽度
endColor: '#3F3F3F', // 尽头分隔符颜色
color: '#3149C3' // 区段边界符颜色
}
};
this[deviceType.Signal] = {
/** 信号机宽度 */
signalR: 5,
/** 自动信号宽度*/
signalSigPassWidth: 6,
/** 延迟解锁字体大小*/
signalDelayTextFontSize: 9,
/** 信号机名称字体大小*/
signalTextFontSize: 12,
/** 灯柱宽度*/
signalLampStandardWidth: 1.2,
/** 设备距离区段的距离*/
signalDistance: 3,
/** 信号灯按钮距离区段的距离*/
signalButtonDistance: 5,
/** 自动进路方向*/
signalSigRouteDirection: false,
/** 自动进路偏移量*/
signalSigRouteOffset: { x: -4, y: -2 },
/** 自动通过方向*/
signalSigPassDirection: false,
/** 自动通过偏移量*/
signalSigPassOffset: { x: -12, y: 0},
/** 延时解锁方向*/
signalSigDelayDirection: true,
/** 延时解锁偏移量*/
signalSigDelayOffset: { x: 15, y: -10},
/** 信号灯按钮边线*/
signalButtonDashColor: '#FFFFFF',
/** 信号灯按钮颜色*/
signalButtonColor: 'darkgreen',
/** 信号灯按钮闪烁颜色*/
signalButtonLightenColor: '#E4EF50',
/** 信号灯字体颜色*/
signalTextRed: '#EF0C08',
/** 信号机字体绿色*/
signalTextGreen: '#4DD43F',
/** 信号灯灯柱颜色*/
signalLampStandardColor: '#3149C3',
/** 信号灯锁闭*/
signalBlockColor: '#EF0C08',
/** 信号灯灰色*/
signalLampGrayColor: '#7F7F7F',
/** 信号灯红色*/
signalLampRedColor: '#FF0000',
/** 信号灯绿色*/
signalLampGreenColor: '#00FF00',
/** 信号灯黄色*/
signalLampYellowColor: '#FFFF00',
/** 信号灯白色*/
signalLampWhiteColor: '#FFFFFF',
/** 信号灯蓝色*/
signalLampBlueColor: '#0070C0'
signalDistance: 10,
post: {
signalLampStandardColor: '#3149C3',
signalLampStandardWidth: 2
},
text: {
/** 是否禁止旋转*/
isNoRotation: true,
/** 信号机名称字体大小*/
signalTextFontSize: 10,
/** 信号灯字体默认色*/
signalDefaultTextColor: '#FFFFFF',
/** 信号灯字体锁定颜色*/
signalTextBlockColor: '#EF0C08'
},
lamp: {
/** 禁止线宽度*/
signalStopWidth: 2,
/** 信号灯边框线宽度*/
signalBorderWidth: 0.5,
/** 信号灯边框线颜色*/
signalBorderColor: '#3149C3',
/** 信号灯半径*/
signalR: 6,
/** 信号灯锁闭*/
signalBlockColor: '#EF0C08',
/** 信号灯灰色*/
signalLampGrayColor: '#7F7F7F',
/** 信号灯红色*/
signalLampRedColor: '#FF0000',
/** 信号灯绿色*/
signalLampGreenColor: '#00FF00',
/** 信号灯黄色*/
signalLampYellowColor: '#FFFF00',
/** 信号灯白色*/
signalLampWhiteColor: '#FFFFFF',
/** 信号灯蓝色*/
signalLampBlueColor: '#0070C0'
},
route: {
/** 自动进路方向*/
signalRouteDirection: false,
/** 自动进路偏移量*/
signalRouteOffset: { x: -4, y: 0 },
/** 自动进路*/
signalRouteColor: '#00FF00'
},
auto: {
/** 自动通过方向*/
signalAutoDirection: false,
/** 自动通过偏移量*/
signalAutoOffset: { x: -4, y: 0},
/** 自动进路*/
signalAutoRoute: '#00FF00',
/** 自动触发*/
signalAutoTrigger: '#FFFF00'
},
delay: {
/** 延迟解锁字体大小*/
signalDelayTextFontSize: 9,
/** 延时解锁方向*/
signalDelayDirection: true,
/** 延时解锁偏移量*/
signalDelayOffset: { x: 15, y: -10},
/** 延迟解锁颜色*/
signalDelayTextColor: '#FF0000'
},
button: {
/** 信号灯按钮距离区段的距离*/
signalButtonDistance: 5,
/** 信号灯按钮边线*/
signalButtonDashColor: '#FFFFFF',
/** 信号灯按钮颜色*/
signalButtonColor: 'darkgreen',
/** 信号灯按钮闪烁颜色*/
signalButtonLightenColor: '#E4EF50'
}
};
this[deviceType.StationStand] = {
/** 站台和屏蔽门之间的距离*/
standDistance: 8,
/** 站台屏蔽门高度*/
standSafeHeight: 3,
/** 站台首端字体大小*/
standHeadFontSize: 10,
/** 站台默认字体大小*/
standTextFontSize: 10,
/** 站台紧急关闭半径*/
standEmergentR: 4,
/** 站台紧急关闭偏移量*/
standEmergentOffset: {x: 0, y: 40},
/** 扣车方向*/
standDetainDirection: -1,
/** 扣车偏移量*/
standDetainOffset: {x: -8, y: -6},
/** 运行时间方向*/
standTimeDirection: 1,
/** 运行时间偏移量*/
standTimeOffset: {x: -8, y: 26},
/** 运行等级方向*/
standLevelDirection: 1,
/** 运行等级偏移量*/
standLevelOffset: {x: -8, y: 6},
/** 折返方向*/
standReentryDirection: 0,
/** 折返偏移量*/
standReentryOffset: {x: -16, y: 20},
/** 扣车显示内容*/
standDetainText: 'H',
/** 站台无人折返*/
standNoHumanReentryColor: '#0F16DA',
/** 站台自动换端*/
standAutoChangeEndsColor: '#0BF400',
/** 站台空闲颜色*/
standSpareColor: '#606060',
/** 站台列车停站颜色*/
standStopColor: '#FEFE00',
/** 站台跳停颜色*/
standJumpStopColor: '#9A99FF',
/** 站台指定列车跳停颜色*/
standDesignatedJumpStopColor: 'lightSkyBlue',
/** 站台紧急关闭颜色*/
standEmergentCloseColor: '#F61107',
/** 停站时间字体颜色*/
standTimeTextColor: '#FFFFFF',
/** 停站等级字体颜色*/
standLevelTextColor: '#FFFFFF',
/** 车站扣车颜色*/
standDetainTrainColor: '#E4EF50',
/** 中心扣车颜色*/
standCenterDetainTrainColor: '#FFFFFF',
/** 车站+中心扣车颜色*/
standAndCenterDetainTrainColor: '#F61107',
/** 屏蔽门默认颜色*/
standDoorDefaultColor: '#00FF00',
/** 屏蔽门切除颜色*/
standSplitDoorColor: '#F61107',
/** 车站扣除文字颜色*/
standDetainTrainTextColor: '#E4EF50',
/** 计数器字体颜色*/
stationCounterTextColor: '#FFFFFF',
/** 计数器边框颜色*/
stationCounterBorderColor: '#E4EF50',
/** 延迟解锁倒计时和设备文字之间的距离*/
stationDelayUnlockDistance: 3,
/** 延时解锁字体颜色*/
stationDelayUnlockTextColor: '#FFFFFF',
/** 延迟解锁边框颜色*/
stationDelayUnlockBorderColor: '#FFFFFF'
common: { // 通用属性
textFontSize: 10 // 站台默认字体大小
},
safetyDoor: { // 屏蔽门
height: 3, // 站台屏蔽门高度
distance: 8, // 站台和屏蔽门之间的距离
defaultColor: '#00FF00', // 屏蔽门默认颜色
splitDoorColor: '#F61107' // 屏蔽门切除颜色
},
stand: { // 站台
headFontSize: 10, // 站台首端字体大小
spareColor: '#606060', // 站台空闲颜色
stopColor: '#FEFE00', // 站台列车停站颜色
jumpStopColor: '#9A99FF', // 站台跳停颜色
designatedJumpStopColor: 'lightSkyBlue' // 站台指定列车跳停颜色
},
standEmergent: { // 紧急关闭
mergentR: 4, // 站台紧急关闭半径
offset: {x: 0, y: 40}, // 站台紧急关闭偏移量
closeColor: '#F61107' // 站台紧急关闭颜色
},
reentry: { // 站台折返策略
direction: 0, // 折返方向
offset: {x: -16, y: 20}, // 折返偏移量
noHumanColor: '#0F16DA', // 站台无人折返
AutoChangeEndsColor: '#0BF400' // 站台自动换端
},
detainCar: { // 扣车
text: 'H', // 扣车显示内容
direction: -1, // 扣车方向
offset: {x: -8, y: -6}, // 扣车偏移量
trainColor: '#E4EF50', // 车站扣车颜色
centerTrainColor: '#FFFFFF', // 中心扣车颜色
andCenterTrainColor: '#F61107', // 车站+中心扣车颜色
detainTrainTextColor: '#E4EF50' // 车站扣除文字颜色
},
stopTime: { // 停站时间
direction: 1, // 运行时间方向
offset: {x: -8, y: 26}, // 运行时间偏移量
textColor: '#FFFFFF' // 停站时间字体颜色
},
level: { // 运行等级
direction: 1, // 运行等级方向
offset: {x: -8, y: 6}, // 运行等级偏移量
textColor: '#FFFFFF' // 停站等级字体颜色
}
};
this[deviceType.StationControl] = {
singleControlNum: 2,
@ -224,20 +213,24 @@ class Fuzhou extends defaultSkin {
kilometerPosition: 'up'
};
this[deviceType.Switch] = {
/** 道岔单边长度 */
switchLen: 6,
/** 道岔名称与区段距离*/
switchNameDistance: 2,
/** 道岔边框颜色*/
switchTextBorderColor: '#FE0000',
/** 道岔失去颜色*/
switchTextLossColor: '#FFFFFF',
/** 道岔定位颜色*/
switchLocateTextColor: '#00FF00',
/** 道岔反位颜色*/
switchInversionColor: '#9C9D09',
/** 道岔单锁颜色*/
switchMonolockColor: '#870E10'
text: {
/** 道岔名称与区段距离*/
switchNameDistance: 2,
/** 道岔边框颜色*/
switchTextBorderColor: '#FE0000',
/** 道岔失去颜色*/
switchTextLossColor: '#FFFFFF',
/** 道岔定位颜色*/
switchTextLocateColor: '#00FF00',
/** 道岔反位颜色*/
switchInversionColor: '#9C9D09',
/** 道岔单锁颜色*/
switchMonolockColor: '#870E10'
},
core: {
/** 道岔单边长度 */
switchLen: 6
}
};
this[deviceType.Train] = {
/** 车身line宽 */

View File

@ -21,6 +21,7 @@ export function parser(data, jmap) {
zrUtil.each(data.sectionList || [], elem => {
mapDevice[elem.code] = deviceFactory(deviceType.Section, defaultStateDict, elem);
}, this);
zrUtil.each(data.signalList || [], elem => {
@ -82,7 +83,10 @@ export function parser(data, jmap) {
zrUtil.each(data.switchList || [], elem => {
const cnodeSection = elem['sectionA'] = mapDevice[elem.sectionACode];
const lnodeSection = elem['sectionB'] = mapDevice[elem.sectionBCode];
const rnodeSection = elem['sectionC'] =mapDevice[elem.sectionCCode];
const rnodeSection = elem['sectionC'] = mapDevice[elem.sectionCCode];
cnodeSection.model['switch'] = lnodeSection.model['switch'] = rnodeSection.model['switch'] = elem;
if (cnodeSection && lnodeSection && rnodeSection) {
const cnode = mapDevice[cnodeSection.model.linkCode];
if (cnode && cnode.model.leftFdCode === lnodeSection.model.linkCode && cnode.model.leftSdCode === rnodeSection.model.linkCode) {

View File

@ -58,7 +58,7 @@ export default {
// this.jmap.load({ skinVO: { code: '02' }, linkList: list });
getPublishMapDetail('02').then(resp => {
getPublishMapDetail('03').then(resp => {
this.jmap.setLevelVisible([deviceType.Link], false);
this.jmap.load(resp.data);
// this.jmap.setDefaultState();