石 星,蔣紅斐,孫曉麗
(中南大學土木建筑學院, 長沙410075)
在傳統的鐵路平面計算機輔助設計中大多采用交點法,交點法雖然簡單,但存在一定的局限性。例如線路要連續繞過兩個地形不利地段,這時線位應該由曲線控制,如果使用交點法來定線,實施起來相當的困難。如果能先把兩段曲線的位置固定下來,然后再在兩曲線間插入直線,便可輕松實現。考慮到在曲線毗連地段交點法帶來的不便,一種新的基于單元的鐵路線路平面設計方法,將整條線路中線看成是由一系列線路單元按順序連接而成,稱之為單元法。單元法使布線更加的靈活,在一定程度上提高工作效率。程序采用ObjectARX作為開發工具。
在單元法中將整條線路中線看成是由一系列線路單元按順序連接而成。即線路單元是線路最基本的構成元素。由于鐵路線路的線形比較簡單,系統將線路單元區分為曲線單元和直線單元。曲線單元由中間的一段圓弧和兩端的對稱緩和曲線組成。可以把直線單元看成特殊的曲線單元。應用程序采用了2種線路定位方式:(1)在兩端用直線單元定位,中間再插入曲線單元如圖1。(2)在兩端用曲線單元定位,中間再插入直線單元如圖2。在插入單元后,只需對3條線路單元的位置(兩端的線路單元定位用)進行重新計算,然后連接3條連續的線路單元,一段線路中線便形成了。

圖1 兩直線單元間插入曲線單元

圖2 兩曲線單元間插入直線單元
如何才能輕松便捷地實現上述功能?這就涉及到數據處理的問題了。以在兩曲線單元間插入直線單元為例。首先要知道第1個曲線單元的位置,然后在它的后面插入新生成的直線單元。然后還要獲取這連續的3個單元的具體數據,如圓弧半徑,偏轉方向等。有了這些數據才能來計算出新位置參數,然后更新數據。如何快速便捷的實現這些數據的處理,這時數據管理方法的選取顯得尤為重要。在傳統的鐵路選線CAD系統中,大多采用基于外部文件或外部數據庫來進行數據的存取。而這種方式存在許多的不足。由于要頻繁的對線路進行改動,而線路中所有圖形的數據均存儲于外部文件或數據庫中。一旦改動圖形,就必須保證外部數據庫得到實時更新即數據與圖形的同步。一旦外部數據庫出錯或丟失,圖形文件也就沒有用了。而且采用外部文件或數據庫管理數據時,由于文件多而雜,對這些數據文件的管理與維護也是一個麻煩的問題,容易出錯。而CAD的圖形文件本來就是一個數據庫,如果能夠直接在其圖形數據庫中讀取與存儲數據,以上的問題便迎刃而解。利用自定義對象來讀取與存儲數據便可以輕松解決這一問題。
從AcDbObject派生自己的自定義對象。該自定義對象中含有一個鏈表,鏈表用于存儲線路中線各線路單元(自定義實體)的ID,其存儲ID的順序與線路中線中各線路單元的順序一致。該自定義對象類重定義其dwgOut()、dwgIn()、dxfOut()和dxfIn()函數使其能夠按正確順序寫入寫出鏈表容器中所存儲的對象ID。并定義各種接口函數,用于對鏈表容器進行相應的操作。應用程序利用自定義對象中所存儲的線路單元的ID來讀取相應線路單元的數據進行其他操作。該自定義對象的實例存儲在命名對象字典中,每當新建或打開一個圖形時,應用程序自動檢查其命名對象字典,如果沒有該自定義對象實例,則自動添加一個。
線路中線中,不論是曲線單元(兩端為對稱緩和曲線中間為一段圓?。?,還是直線單元,都用同一個自定義實體類來表示。該自定義實體共有3個構造函數:(1)默認構造函數,由于初始化所有的數據成員,默認構造該單元為直線;(2)直線單元的構造函數,通過指定直線的起點和終點來構造直線單元;(3)曲線單元的構造函數,通過指定圓弧的起點,終點,圓弧的半徑,曲線偏轉方向以及緩和曲線長來構造曲線單元。
除去表示曲線和直線所必須的數據成員之外,還額外定義了兩個數據成員Flag1和Flag2。Flag1用來標識該單元是直線單元還是曲線單元,Flag2用來標識該單元是否已經從數據庫中擦除。當從塊表的模型空間刪除一個單元時,應用程序并不從上述自定義對象的鏈表中刪除該單元對應的ID,而是通過改變該單元的數據成員Flag2的值來表示該單元已被刪除的狀態。直到該圖形保存或關閉時,才從鏈表中真正刪除已經被擦除的單元對應的ID。
從圖形中擦除一個線路單元時,該單元的數據成員Flag2被置為擦除狀態?;謴鸵粋€線路單元時,Flag2被置為未刪除狀態?;蛘弋斝薷囊粋€線路單元時,相鄰的單元能夠對這次修改自動作出反應,以生成一段新的線路中線??梢酝ㄟ^數據庫臨時反應器來實現上述功能。當打開或新建一個圖形時,應用程序自動添加一個數據庫反應器。關閉一個圖形時,應用程序自動將反應器移除。通過重定義相應的通知函數來對不同的通知作出反應。
以在兩曲線單元間插入直線單元為例。首先,創建一個直線單元,并把它添加到快表的模型空間中。然后要求用戶指定該新建單元的前部單元,得到其ID。從命名對象字典中找到自定義對象,打開它,遍歷鏈表尋找上述ID。找到之后,便在鏈表中該元素的后面插入新建單元的ID。這樣新建單元的數據便完整的保存到圖形數據庫中了,接下來要連接3個單元。找到該新建單元的ID之后,依次向前和向后遍歷鏈表。從模型空間中打開它們,返回所需的數據進行計算,利用計算后的新數據來更新線路單元實體,然后分別從屏幕刷新它們,連接單元的工作便完成了。
使用單元法來進行鐵路線路的平面設計,較之傳統的交點法布線手段更加靈活,修改方便,適應性更強,可以提高的工作效率。而通過利用自定義對象,直接將數據存儲于圖形文件中的方法,使應用程序不必訪問外部數據庫便能輕松實現數據的存取,讓操作更加直接、方便和快捷。由于所有數據均存儲于單一的圖形文件中,對數據的維護和管理也更加的輕松簡單并且更不易出錯。
[1] 邵俊昌,李旭東.AutoCAD ObjectARX 2000 開發技術指南[M] . 北京:電子工業出版社,1999.
[2] 李世國,潘建忠,平雪良. AutoCAD 2000 ObjectARX 編程指南[M] . 北京:機械工業出版社,2000.
[3] 詹振炎. 鐵路選線設計方法的現代理論和方法[M] . 北京:中國鐵道出版社,2001.
[4] 郝瀛. 鐵道工程[M] . 北京:中國鐵道出版社,2007.