李 鸣,倪智振
(南昌大学环境与化学工程学院,南昌 330031)
机车交路图反映机务部门机车运用的组织方式,机车牵引的运输能力及各铁路局机务部门所担当的运输任务与相关管辖范围[1]。机车交路图是绘制机车周转图的重要依据,铁道部颁布的《铁路机车周转图编制规则》规定机车交路图由特定标准图形符号按照国家统一标准组合而成[2],当前机务应用人员大多数采用一些通用商业绘图CAD软件绘制方式,往往因其商业通用性而失去了对机车交路绘制领域的专业针对性,存在学习门槛高,自动化程度不够,设计针对性不强等问题,极大阻碍了机务部门信息化水平的发展[3]。极个别信息化配套设施不完善的机务组甚至仍采用传统人工手绘的方式[4]。然而某些复杂的交路单位通常含有多达上百个车站,机务折返点,数十个机务、乘务交路及大量的辅助数据和频繁的修改操作[5]。机车交路图绘制工作异常繁重,传统绘图方式已不能满足需要。2002年武汉铁路局工程师赵友锐、周智勇运用C++BUILDER语言开发了基于Win98操作系统环境下的《机车交路图辅助设计系统》[6],该系统的普及是机务信息化水平建设的一次重大革新,时隔十多年,计算机软硬件技术迅速发展,该系统在操作环境,运行效率和功能需求方面渐显不足。
本系统采用Visual Studio 2010 MFC类库以面向对象的方式定义各逻辑类,doc/view类多文档组织形式,系统界面菜单采用Microsoft word 07版的Ribbon控制条形式,绘图操作调用Win 7 GDI函数完成。
根据当代需求分析和GUI软件设计思路,参照《铁路机车周转图编制规则》,定义以下设计要求。
(1)站段要求
提供全部机务段及车站类等站段图形的鼠标一键绘制功能。站段图形可鼠标拖放移动,坐标定点移动和图形放缩;站段属性、名称可修改可删除可放缩,适合多尺寸多标准的设计要求,并保证与之相联系的线路、交路、标注等辅助性数据的修改一致性[7]。
(2)线路要求
提供电力、内燃、动车单线复线的绘制功能。线路属性可修改可删除,并保证与之相联系的交路,标注等辅助性数据的修改一致性。
(3)交路要求
提供各种单肩回、半循环、全循环机车交路,中间换乘及机车乘务交路等绘制功能,包括3种外段折返(立折、调休、驻班)形式[7-8]。交路图形颜色、线宽可变,交路属性可修改可删除,交路内的站段可修改可删除,自动计算交路长度,并保证与之相联系的标注等辅助性数据修改一致性。
(4)标注要求
提供2种形式标注。引线标注和平行标注。标注属性和位置可修改可删除,并保证与之相联系的各元素的修改一致性。
(5)辅助要求
机车交路图拥有自动存储功能,且绘制视图可放缩,可以矢量图片格式存储,可与对应EXCEL表格进行智能数据的相互转存;有绘图帮助,操作提示系统,提供多尺寸纸张的打印功能。同时考虑到极个别大型交路图,应具备网格尺寸线,批量选择性显示,修改,删除等群操作,以及一些对齐平行,图例一键绘制等常用辅助绘制工具。
(1)开发工具的先进性。本系统开发平台Visual Studio 2010,是继VC++6.0之后又一里程碑级的进步[9],MFC是微软公司为方便用户开发桌面应用程序而以C++类的形式封装了几乎所有的win API函数库,这为用户进行二次开发提供非常快捷而高效的设计途径[10]。
(2)用户界面的友好性。本软件界面上创新地采用了微软Ribbon控制条形式菜单,在文档形式上采用doc/view类多文档组织形式[11],在视觉上给予了用户类似Microsoft office 的操作舒适感和亲切感,同时,在一些绘图的操作设计上,在完成功能的前提下尽可能多地借鉴通用CAD绘图软件的操作步骤和用户习惯性的操作思维。
(3)运行平台的时代性。本软件支持微软最新推出的WIN7操作系统,同时兼容WIN XP,支持各类基于该系统的软硬件,整合了自动化应用程序提交和交叉程序数据的透明性[12],保证了该软件设计寿命的长久性,根据目前行业发展态势,初步预计该系统在未来20年之内仍能适应运行环境。
根据设计要求进行如下框架逻辑设计。本软件功能定义为四大模块:图形模块,工具模块,交换模块,设置模块。限于篇幅,本文仅做扼要描述。
图1 图形模块关系
主模块为图形模块,实现交路图的绘制和修改功能,绘图函数的设计充分利用了win7系统内部的图形绘制GDI函数,绘制和修改操作的本质均为添加和修改底层存储的相应数据,最后图形重绘函数则依据底层数据库提供的各交路数据依次绘出所有图形。
图2 工具模块
该模块提供一些方便用户集群操作的优化工具,直线化工具包括垂直对齐,水平对齐和斜线对齐,其算法思路为运行至该段程序时,计算起始选中站段和终端选中站段的斜率,根据该斜率计算执行后中间选中站段的各坐标值,存储并覆盖原坐标值,最后执行图形重绘;批量操作根据客户绘图需要提供线路,交路,标注全删除功能,其算法思路为顺序遍历目标数据库并判断是否符合用户目的成员,若符合则删除。并自动进行数据一致性连锁操作;区域操作本质为鼠标的框选操作,区域移动,区域复制,区域删除,其设计思路为遍历站段数据库,记录站段坐标处于鼠标框选范围内的站段。然后根据对应操作进行站段坐标覆盖存储,并自动进行数据一致性连锁操作。
图3 交换模块关系
磁盘交换和图片导出可借助VS2010 MFC设计的GUI内部自带的程序进行直接的调用。Excel的导出其设计思路可认为是MFC软件运行时内存中存在的站段,线路,交路,标注等数据类通过MFC与Excel的接口程序而一一对应地表达在excel中,反之。用户只需直接修改excel里的数据,通过该excel导入功能便可直接修改庞大的机车交路图数据,这样极大地简化了用户在面对错综复杂的大型机车交路图时查找难,修改难的操作问题。
该模块提供交路图整体框架的一些设置及一些显示属性,为满足机车交路图多尺寸多标准选择的需求,提供了一些数据库的接口,并直接映射到GUI界面上,用户可直接通过界面诸如输入名称大小,视图选择性显示等操作间接修改底层数据库。
标准建模语言UML的目标是以面向对象图的方式来描述软件系统的模型,分析类图产生于分析阶段,由系统分析师绘制,主要用来描述静态结构系统中各模块中类之间的关系,包括类或者类与接口的继承关系,类之间的依赖、聚合等关系。它还描述每一个类的详细信息,包括变量和方法。为简洁描述,本文只简单列出几个与核心类的定义。
图4所列为五大图形元素逻辑类的定义:站段类(Station)满足站段要求,提供站段绘制,存储和构造函数;线路类(Line)满足线路要求,提供线路绘制,存储和构造函数;交路类(Crossroad)满足交路要求,提供交路绘制,存储和构造函数;标注类(Label)满足标注要求,提供标志绘制,存储和构造函数。框架类(Frame)定义了边框,网格,图例等绘图函数,他们的基类均为MFC中的CObject类。
图4 交路图图形元素类定义
图5中应用程序类(CJLTApp)为本系统优先级最高类,配合交路图初始信息类(Myopts)完成系统的初始化任务,屏幕logo,防盗版设计等优先级较高的子功能。视窗类(CJLTView)和文档类(CJLTDoc)是整个核心系统中的核心,前者提供了GUI视图界面所有的控件输入输出接口和图形的显示。后者承担了所有图形数据的计算,搜索和存储及保证数据的一致性要求。
图5 MFC生成类定义
图6为系统定义了子窗口接口类,为用户提供了绘图数据输入窗口界面,他们由MFC基类CPropsheet派生。
图6 窗口接口类定义
图7 核心类类图
图7反映了几个大类之间的依赖,关联关系。图形元素和EXCEL实际为多个类,因其性质相同如图用一个类示意。EXCEL类实现系统数据导入导出功能,本系统绘图的本质为不断调用CJLTView类中的图形重绘函数(Redraw),从CJLTDoc类中提取图形内容数据,输入到对应五大图形元素类中实现图形的具体绘制。因此,本系统编程实现的实质为CJLTView类和CJLTDoc类成员函数对五大图形元素类和一些辅助类的统筹调用。
图8 A4尺寸XPS格式机车交路图全景示意
图8为本系统绘制的武汉铁路局机车交路图范例,图形精确,满足机务绘图需要。该软件调用win API GDI函数绘制图形,所绘交路图为微软XPS格式矢量图,通过多个对象组合生成,对其中的每一个对象的纪录方式,以数学函数来实现,如图9所示对画面进行大倍数缩放后,其显示效果仍然相同,缩放不失真。图10为该系统ribbon控制条形式的GUI界面,类似微软word07版本界面,友好简洁,符合通用操作习惯。
图9 交路图放大5倍
图10 系统GUI
机车交路图辅助设计系统结构复杂,编程量大,设计历时半年。得益于当前先进的开发工具(vs2010 MFC)和运行环境(win7),采用面向对象语言C++编制系统程序,使得该系统具有体积小,功能全,操作简便,运行速度快等优点,交路图的绘制过程充分考虑了绘图标准及绘制人的操作习惯,该软件系统能够出色的绘制,修改并打印出各种尺寸不失真的机车交路图,满足机务部门绘图需要。我们有理由相信,该系统的成功普及将会把铁道机务信息化建设水平提高到一个新的水平。
[1] 中华人民共和国铁道部.GB50090—2006 铁路线路设计规范[S].北京:中国计划出版社,2006.
[2] 周南华.《铁路机务设备设计规范》(TB10004—98)简介[J].铁道标准设计,2000(10):27-29.
[3] 叶利华.机车交路系统的设计与实现[D].西安:西安交通大学,2005.
[4] 秦建成.从神朔铁路机务设备工艺设计谈影响机务段总平面布置的主要因素[J].铁道标准设计,2009(12):130-134.
[5] 马国忠,张展杰,吴海涛.长交路下铁路机车乘务模式研究[J].交通运输工程与信息学报,2007(4):1-4.
[6] 周智勇.机车交路图辅助设计系统的研究[J].铁路计算机应用,2003(S1):123-126.
[7] 贾凡.长交路条件下车流组织方法探讨[J].科技广场,2010(4):253-256.
[8] 薄海青.货运机车超长交路的尝试[J].铁道标准设计,2005(3):93-95.
[9] 王晖.精通Visual C++6.0[M].北京:电子工业出版社.1999: 15-38.
[10] 刘玲,曹建秋,周建丽,王家伟.基于编程切入点的MFC教学方法研究[J]. 西南师范大学学报:自然科学版,2010,35(2):116-119.
[11] 范志先,孙殿柱,李延瑞,孙肖霞.采用MFC开发用户交互界面的新方法[J].工程图学学报,2008(4):160-163.
[12] 王井阳,张晓明,阮冬茹,白云飞.在Visual C++中利用MFC类库访问数据库中的长二进制类型数据[J].计算机应用研究,2003(10):119-122.