基于单元的铁路线路平面设计及其数据管理方法
2010-08-07蒋红斐孙晓丽
石 星,蒋红斐,孙晓丽
(中南大学土木建筑学院, 长沙410075)
在传统的铁路平面计算机辅助设计中大多采用交点法,交点法虽然简单,但存在一定的局限性。例如线路要连续绕过两个地形不利地段,这时线位应该由曲线控制,如果使用交点法来定线,实施起来相当的困难。如果能先把两段曲线的位置固定下来,然后再在两曲线间插入直线,便可轻松实现。考虑到在曲线毗连地段交点法带来的不便,一种新的基于单元的铁路线路平面设计方法,将整条线路中线看成是由一系列线路单元按顺序连接而成,称之为单元法。单元法使布线更加的灵活,在一定程度上提高工作效率。程序采用ObjectARX作为开发工具。
1 基于单元的铁路线路平面设计方法
在单元法中将整条线路中线看成是由一系列线路单元按顺序连接而成。即线路单元是线路最基本的构成元素。由于铁路线路的线形比较简单,系统将线路单元区分为曲线单元和直线单元。曲线单元由中间的一段圆弧和两端的对称缓和曲线组成。可以把直线单元看成特殊的曲线单元。应用程序采用了2种线路定位方式:(1)在两端用直线单元定位,中间再插入曲线单元如图1。(2)在两端用曲线单元定位,中间再插入直线单元如图2。在插入单元后,只需对3条线路单元的位置(两端的线路单元定位用)进行重新计算,然后连接3条连续的线路单元,一段线路中线便形成了。
图1 两直线单元间插入曲线单元
图2 两曲线单元间插入直线单元
2 数据管理方法
如何才能轻松便捷地实现上述功能?这就涉及到数据处理的问题了。以在两曲线单元间插入直线单元为例。首先要知道第1个曲线单元的位置,然后在它的后面插入新生成的直线单元。然后还要获取这连续的3个单元的具体数据,如圆弧半径,偏转方向等。有了这些数据才能来计算出新位置参数,然后更新数据。如何快速便捷的实现这些数据的处理,这时数据管理方法的选取显得尤为重要。在传统的铁路选线CAD系统中,大多采用基于外部文件或外部数据库来进行数据的存取。而这种方式存在许多的不足。由于要频繁的对线路进行改动,而线路中所有图形的数据均存储于外部文件或数据库中。一旦改动图形,就必须保证外部数据库得到实时更新即数据与图形的同步。一旦外部数据库出错或丢失,图形文件也就没有用了。而且采用外部文件或数据库管理数据时,由于文件多而杂,对这些数据文件的管理与维护也是一个麻烦的问题,容易出错。而CAD的图形文件本来就是一个数据库,如果能够直接在其图形数据库中读取与存储数据,以上的问题便迎刃而解。利用自定义对象来读取与存储数据便可以轻松解决这一问题。
3 实现方法
3.1 使用自定义对象进行数据存取
从AcDbObject派生自己的自定义对象。该自定义对象中含有一个链表,链表用于存储线路中线各线路单元(自定义实体)的ID,其存储ID的顺序与线路中线中各线路单元的顺序一致。该自定义对象类重定义其dwgOut()、dwgIn()、dxfOut()和dxfIn()函数使其能够按正确顺序写入写出链表容器中所存储的对象ID。并定义各种接口函数,用于对链表容器进行相应的操作。应用程序利用自定义对象中所存储的线路单元的ID来读取相应线路单元的数据进行其他操作。该自定义对象的实例存储在命名对象字典中,每当新建或打开一个图形时,应用程序自动检查其命名对象字典,如果没有该自定义对象实例,则自动添加一个。
3.2 单元的数据结构
线路中线中,不论是曲线单元(两端为对称缓和曲线中间为一段圆弧),还是直线单元,都用同一个自定义实体类来表示。该自定义实体共有3个构造函数:(1)默认构造函数,由于初始化所有的数据成员,默认构造该单元为直线;(2)直线单元的构造函数,通过指定直线的起点和终点来构造直线单元;(3)曲线单元的构造函数,通过指定圆弧的起点,终点,圆弧的半径,曲线偏转方向以及缓和曲线长来构造曲线单元。
除去表示曲线和直线所必须的数据成员之外,还额外定义了两个数据成员Flag1和Flag2。Flag1用来标识该单元是直线单元还是曲线单元,Flag2用来标识该单元是否已经从数据库中擦除。当从块表的模型空间删除一个单元时,应用程序并不从上述自定义对象的链表中删除该单元对应的ID,而是通过改变该单元的数据成员Flag2的值来表示该单元已被删除的状态。直到该图形保存或关闭时,才从链表中真正删除已经被擦除的单元对应的ID。
3.3 合理使用反应器
从图形中擦除一个线路单元时,该单元的数据成员Flag2被置为擦除状态。恢复一个线路单元时,Flag2被置为未删除状态。或者当修改一个线路单元时,相邻的单元能够对这次修改自动作出反应,以生成一段新的线路中线。可以通过数据库临时反应器来实现上述功能。当打开或新建一个图形时,应用程序自动添加一个数据库反应器。关闭一个图形时,应用程序自动将反应器移除。通过重定义相应的通知函数来对不同的通知作出反应。
3.4 数据处理具体流程
以在两曲线单元间插入直线单元为例。首先,创建一个直线单元,并把它添加到快表的模型空间中。然后要求用户指定该新建单元的前部单元,得到其ID。从命名对象字典中找到自定义对象,打开它,遍历链表寻找上述ID。找到之后,便在链表中该元素的后面插入新建单元的ID。这样新建单元的数据便完整的保存到图形数据库中了,接下来要连接3个单元。找到该新建单元的ID之后,依次向前和向后遍历链表。从模型空间中打开它们,返回所需的数据进行计算,利用计算后的新数据来更新线路单元实体,然后分别从屏幕刷新它们,连接单元的工作便完成了。
4 结束语
使用单元法来进行铁路线路的平面设计,较之传统的交点法布线手段更加灵活,修改方便,适应性更强,可以提高的工作效率。而通过利用自定义对象,直接将数据存储于图形文件中的方法,使应用程序不必访问外部数据库便能轻松实现数据的存取,让操作更加直接、方便和快捷。由于所有数据均存储于单一的图形文件中,对数据的维护和管理也更加的轻松简单并且更不易出错。
[1] 邵俊昌,李旭东.AutoCAD ObjectARX 2000 开发技术指南[M] . 北京:电子工业出版社,1999.
[2] 李世国,潘建忠,平雪良. AutoCAD 2000 ObjectARX 编程指南[M] . 北京:机械工业出版社,2000.
[3] 詹振炎. 铁路选线设计方法的现代理论和方法[M] . 北京:中国铁道出版社,2001.
[4] 郝瀛. 铁道工程[M] . 北京:中国铁道出版社,2007.