1 Star 2 Fork 0

萧迩珀 / qETRC

Create your Gitee Account
Explore and code with more than 6 million developers,Free private repositories !:)
Sign up
Clone or Download
Cancel
Notice: Creating folder will generate an empty file .keep, because not support in Git
Loading...
README.md

qETRC

Electronic Train Running Chart implemented with Qt

本项目是对此前的pyETRC项目的C++重构版本,工程名暂定为qETRC。本项目基于GPLv3协议开放源代码,在协议允许范围内,作者保留一切权利和最终解释权。

联系方式:mxy0268@qq.com

环境

本项目的开发环境:

  • Windows 10 x64
  • Qt 5.15.2 MSVC 2019 x64

对环境的已知要求:

  • Qt5
  • 支持C++17标准。已知的使用的C++17的特性包括std::optional std::string_view以及if constexpr等。

与pyETRC的关系

本项目定位为采用C++重构版本的pyETRC,并做一定的扩展。进行这个重构是因为Python的动态类型难于拿捏,在过去三年pyETRC的开发过程中,由于数据结构设计的草率等原因,代码难以维护。另外,使用Python开发时,对对象生命周期的控制较弱(由于赋值语义问题,多个对象共享同一个数据对象时容易出问题),对数据结构的控制不够精细(并不是说不能,但用Python写链表之类的东西总是怪怪的),这些限制了原有程序的重构。

qETRC重新设计了数据结构,新增线路区间RailInterval)的抽象,并采用类似双链表的形式组织数据,使得基于区间的数据(标尺、天窗)等有了实际的依托,理论上更加安全。此外,依托新的界面,对原有框架进行扩展,由仅支持一条线路、一个运行图窗口拓展到支持多条线路和多个运行图窗口同时打开。

qETRC远期计划完全替代pyETRC,实现绝大多数的pyETRC既有功能,除了一些不大常用或容易引起问题的小功能。目前比较明确将会丢弃的功能是手动运行线管理功能。

基本概念

本项目数据的最高级别抽象(i.e. 最大范围)为运行图(Diagram),每个程序实例在同一时刻仅处理一个运行图对象。每个运行图对象含有以下基础数据:

  • 一组基线数据 (Railway
  • 一组列车数据 (Train

除此之外,每个运行图可以具有若干个视窗/页面DiagramPage),它与程序图形界面中的运行图窗口(DiagramWidget)是一一对应的。每个运行图页面可以包含一条或者多条基线。

在设计数据结构和算法时,原则上,考虑以下数据规模:

  • 列车数量约在1000量级

  • 每条基线的车站数量约在100量级

    以上两项数据规模与pyETRC通常能处理的数据规模类似。在此框架下,程序中将尽量避免对这两项数据进行线性查找,回避平方以上复杂度的算法。

  • 基线数量约在10量级

  • 运行图视窗约在10量级

    以上两项为初期设计原则,即项目初期仅仅考虑少量线路集合的运行图文件。对于线路和运行图视窗,将不介意采用线性查找。

项目结构

项目目前的文件结构大致为:

  • data 数据部分。运行图、基线、列车等数据结构的实现。
    • common 比较简单的公共数据结构,例如站名StationName
    • rail 铁路线路数据。总成在Railway类中,包含以下几个部分:
      • RailStation 一个车站,包括站名、延长公里等。
      • RailInterval 两个车站的一个区间。这是相比于pyETRC新增的数据结构。
      • 基于线路区间的数据,包括标尺Ruler、天窗Forbid
    • train 列车数据结构。主要包括
      • Train 列车,包含车次、时刻表以及始发终到站等数据。
      • Routing 交路。是一组列车的序列。
      • TrainCollection 列车集合。包含一组列车、一组交路和一套列车类型系统。
    • diagram 运行图级别数据结构。主要包括运行图Diagram和运行图页面DiagramPage等。
  • dialogs 一些基于对话框实现的较为简单的功能,例如导入车次ImportTrainDialog
  • editors 原pyETRC中采用停靠面板实现的、核心数据结构的编辑控件,例如线路里程编辑、车次编辑等。
  • kernel 绘图核心模块,实现运行图绘制。
  • mainwindow 程序主窗口以及相关的界面逻辑类。
  • model 基于Qt的Model/View框架设计的数据模型。其中
    • delegate 编辑的代理类。
    • train 与列车相关的模型,例如时刻表。
    • rail 与线路相关的模型,例如线路里程表。
    • diagram 超过以上两个抽象层次的模型。
  • navi 是qETRC新增部分,与导航窗口相关的界面程序。
  • viewers 原pyETRC中,运行图分析的功能,例如事件表等。
  • railnet 中远期规划,原pyETRC线网管理模块的功能。
  • util 一些杂项,对Qt的轻度扩展等。

致谢

本项目使用了以下的开源库:

衷心感谢以上项目相关开发者的工作及其提供的便利。

Repository Comments ( 0 )

Sign in to post a comment

About

qETRC列车运行图系统 原pyETRC项目的Qt (C++) 实现 expand collapse
C++ and 3 more languages
GPL-3.0
Cancel

Releases (7)

All

Contributors

All

Activities

Load More
can not load any more
1
https://gitee.com/xep0268/qETRC.git
git@gitee.com:xep0268/qETRC.git
xep0268
qETRC
qETRC
master

Search