孔國梁
(中國鐵路設計集團有限公司 線站院,天津300308)
傳統的鐵路線路軟件設計一般遵循手工設計習慣,軟件編制思想和程序結構編寫一般按照平面、縱斷面和橫斷面分別進行。平縱橫設計過程缺乏直接聯系,無法做到平縱橫的實時協同設計[1-4]。在選線困難的情況下,如用地范圍受限時需躲避平面障礙、跨越高程控制點,要反復對比優化平縱方案,實時獲悉線路方案對設計規范、平縱控制點避讓等要求的滿足情況,而目前的方法操作繁瑣,每步調整無法實時直觀查看調整效果,效率較低,人工操作工作量大。
鑒于以上現狀及問題,本文的研究基于AutoCAD平臺,依托ObjectARX2010二次開發技術,對數字地面模型、平面交互式選線、縱斷面坡度自動化設計及約束處理、平縱橫多視口按里程同步顯示、平縱實體多夾點式驅動編輯、縱斷面高程控制點自動設置、基于反應器原理的平縱橫聯動設計控制等關鍵技術進行研究,以提高選線設計的自動化水平,簡化操作流程,形成平縱橫實時聯動設計的整體方案,具體流程如圖1所示。
在進行平縱橫聯動設計優化前,需要先做好數字地面模型創建、平縱橫設計基本參數設置、平縱橫視口創建、平縱橫實體管理等準備工作。

圖1 鐵路線路平縱橫實時聯動設計整體流程
利用測繪專業采集并進行分類處理后的雷達點云數據或三維地形圖文件,通過提取圖中的等高線、地形點圖層數據,創建Delaunay 三角網或方格網數字地面模型。
創建一個dwg 文件作為鐵路線路平縱橫設計的項目文件,將對應的地形圖文件參考進來。再打開此項目文件時,可自動檢索到參考的地形圖文件名,并以此文件名初始化數字地面模型,從而隨時獲得線路縱斷面、橫斷面地面高程信息,直到該項目文件關閉時析構此數字地面模型對象。
本文通過CAD二次開發包ARX提供的aced GetCurDwgXrefGraph 方法檢索參考的地形圖文件名。該方法可獲得參考文件名數組,從而得到數組中第1個參考文件名,即地形圖文件名,并將此地形圖文件的目錄和文件名作為輸入參數,進行數模初始化。
設置基本參數文件的目的是使軟件在線路平縱橫設計時,可根據項目要求自動按照基本參數進行默認設計,增加自動化程度,減少用戶交互輸入,提高設計效率。具體操作是在項目文件所在目錄配置參數文件,具體參數包括:最小坡長、最大坡度、最大坡度代數差、設豎曲線的最小坡度代數差、豎曲線半徑、坡度折減、設橋的臨界填高、設隧道的臨界挖深、站坪限坡、站坪長度、路基面寬度、各級邊坡高度及坡率。
視口是能獨立顯示特定設計內容的矩形窗口區域,在一個視口內進行圖形平移、縮放操作,不會影響到其它視口的顯示。平縱橫多視窗設計可以采用多文檔單視口方法[5],也可采用單文檔多視口方法。針對這2 種方法,ARX 都提供了文檔或視口的創建、命名、切換等相關方法。相比較而言,多文檔的管理相對復雜,用戶操作中可能存在多個文檔沒及時關聯,造成文檔之間數據出現不同版本的缺陷。另外,當用戶使用Undo、Redo等命令時,也不易處理。因此,本文采用單文檔多視口方法。
在當前項目文件中創建3個視口作為鐵路線路平縱橫設計的視口,平面視口在上方,顯示平面線位自定義實體;縱斷面視口在下方,顯示縱斷面自定義實體;橫斷面視口在右側,從下向上依次排列線位橫斷面自定義實體。平縱橫視口的大小比例可由用戶自定義調整。在當前項目文件中創建的平縱橫多視口排布如圖2 所示。

圖2 單文檔平縱橫多視口排布界面
(1)單個視口的創建:先獲得當前圖形文檔的視口表,再添加視口記錄。采用new AcDbViewportTableRecord 的方法,創建一個視口,并設置視口名、視口位置、視口大小。
(2)多個視口的創建:根據平縱橫設計需要,分3次創建視口,分別對其進行平、縱、橫視口命名,并按橫排或豎排的布局排布3個視口。
(3)多個視口的管理:在創建每個視口后,記錄當前視口的序號。通過acedSetCurrentVPort 函數對當前視口進行設置,通過獲取CAD系統變量CVPORT 的方法,可獲得當前視口的序號,進而可知當前平、縱、橫哪一個視口被激活。
字典是AutoCAD的一種容器對象,用于組織和管理數據庫的實體對象。在項目文件中創建類型為有名對象的平面字典和縱斷面字典,平面字典中包含當前平面線位的ID、所有平面線位的ID數組、地形圖中的道路ID數組;縱斷面字典中包含當前縱斷面ID、所有縱斷面ID數組;對每個平面線位和縱斷面自定義實體分別添加擴展字典,包含大中橋、隧道、車站、小橋涵、橫斷面數組。
本文使用ARX 提供的getNamed ObjectsDictionary函數創建平面和縱斷面的有名對象字典;使用ARX提供的extensionDictionary 函數創建平面設備和縱斷面設備的擴展字典。字典之間數據的獲取與傳遞流程如圖3所示。

圖3 字典之間數據的獲取與傳遞流程
鐵路線路的平面、縱斷面和橫斷面設計既緊密關聯又具有一定獨立性。因此,平縱橫各自實現高效自動化設計是三者實時聯動的前提條件。后續只需利用聯動設計機制,在合適的時機將相關設計關聯起來,即可實現實時聯動設計。
平面設計要考慮的因素較多,自動設計存在較大困難。本文基于ARX 的拖動技術[6],在平面視口中逐個添加平面線位交點,編輯曲線半徑和緩和曲線長,創建平面線位自定義實體。交互式平面設計的操作如圖4所示。

圖4 交互式平面設計操作示意
縱斷面設計可采用先自動化設計再交互式優化的方法[7]。自動化設計步驟包括:(1)在縱斷面視口內,根據平面線位及里程數據創建縱斷面自定義實體;(2)根據數字地面模型設置縱斷面地面線;(3)根據地面線進行坡度自動模擬;(4)進行最小坡長、最大坡度、最大坡度代數差、豎緩重疊、坡度折減、高程控制點等約束處理;(5)根據最大填高和挖深基本參數自動設置橋梁和隧道。坡長、坡度、代數差、高程控制點約束處理如圖5所示。

圖5 坡長、坡度、代數差、高程控制點約束處理示意
自動化橫斷面設計是以反映線路平縱方案為目標而開展的簡易橫斷面設計。在橫斷面視口內,從下向上依次排列線位相隔50m 的橫斷面自定義實體,繪制路基面、側溝、邊坡、地面線、里程、路基中心填挖高、路肩高程、地面高程、橋梁缺口、隧道缺口。每個平面對應的橫斷面按里程從小到大,在橫斷面視口內從下向上依次排成一列,如圖6所示,多個平面線位對應多列橫斷面。橫斷面設計成果可為平面坡腳線設計提供基礎數據。
該技術主要實現通過編輯平面或縱斷面模型,自動驅動相關設計做出適應性修改。例如,移動平面交點修改線位后,軟件自動進行縱斷面坡度設計并更新橋隧設備,自動更新橫斷面設計及缺口、平面橋隧設備、平面坡腳線等。

圖6 簡易橫斷面設計界面
夾點驅動自定義實體是利用CAD進行人機交互設計最常用的操作。其實現過程為創建線路平面、縱斷面、橫斷面自定義實體,對函數getGripPoints和moveGripPointsAt 進行重載。
(1)平面夾點:包括交點、ZH、HY、QZ、YH、HZ、直線中點、曲線資料的中間點,如圖7所示。

圖7 平面自定義實體夾點驅動界面
在拖動交點的基礎上,添加夾直線中點后可以便捷的實現平移直線邊;添加QZ點后,可以便捷的修改曲線半徑并取整,同時自動選配緩和曲線長。
(2)縱斷面夾點:包括變坡點和坡段線中點,實現移動變坡點或坡段平移。
(3)平縱設備夾點:對橋梁、隧道、平立交、車站、小橋涵等添加了夾點,便于拖動修改工點位置及長度,實現圖形對數據的驅動,縱斷面橋隧的夾點設置如圖8所示。

圖8 縱斷面橋隧設備夾點設置界面
在鐵路選線或方案優化時,存在大量的立交跨越道路或鐵路的情景,需要實現立交道路平縱斷面控制點的自動設置。具體實現時,軟件根據設計的鐵路平面線位與既有道路圖層、鐵路線位的交叉關系得到平面立交控制點的里程、交叉角度,自動設置平面立交道和縱斷面高程控制點,如圖9所示。

圖9 立交道平縱斷面控制點自動設置界面
3.3.1 平縱橫聯動設計流程
平縱橫聯動設計主要解決以下幾種設計情景:(1)平面交互式選線,同時自動設計縱斷面和橫斷面,如圖10 所示;(2)編輯平面,重新自動設計縱斷面和橫斷面,如圖11所示;(3)編輯平面,僅局部更新縱斷面和橫斷面;(4)編輯縱斷面,重新設計橫斷面;(5)編輯平面/縱斷面的橋隧等設備,自動更新縱斷面/平面的橋隧等設備、橫斷面缺口。
3.3.2 CAD聯動設計機制

圖10 交互式選線自動設計縱斷面和橫斷面流程

圖11 編輯平面自動設計縱斷面和橫斷面流程
ObjectARX 為開發者提供了反應器機制,它類似于MFC 的消息處理,利用它可以響應輸入事件和實體添加、編輯、刪除等事件。常見的AutoCAD反應器包括4 種[8],如圖12 所示。

圖12 常用的AutoCAD反應器類型
反應器按時效分為2 種類型:臨時反應器和永久反應器,圖12中,前3種是臨時反應器,第4種是永久反應器。
3.3.3 反應器技術在平縱橫聯動設計的應用
(1)編輯反應器的應用示例
重寫endAttach 函數:對參照地形圖的自定義處理,可自動初始化數字地面模型。
重寫viewChanged函數:對視口顯示變化時的自定義處理,可對視口中當前平面、縱斷面進行最大化顯示。
(2)數據庫反應器的應用示例
重寫objectAppended 函數:添加某個對象后的自定義處理,如添加平面后,自動進行縱斷面、橫斷面的設計;添加了平面/縱斷面設備后,自動添加對應的縱斷面/平面設備等。
重寫objectModified 函數:修改某個對象后的自定義處理,如修改平面后,自動更新縱斷面、橫斷面;修改平面/縱斷面設備后自動更新對應的縱斷面/平面設備。
重寫objectErased 函數:刪除某個對象后的自定義處理,如刪除平面模型后,自動刪除對應的縱斷面、橫斷面;刪除某個平面/縱斷面設備后,自動刪除對應的縱斷面/平面設備。
(3)臨時反應器的加載和卸載控制
軟件可以通過加載或卸載反應器來開啟或關閉聯動式設計。如利用CURDB->addReactor (CURDBREACTOR)操作,添加數據庫反應器;利用CURDB->removeReactor(CURDBREACTOR),卸載數據庫反應器。由此可控制數據庫反應器是否起作用,即添加、刪除、修改某個實體后,是否進行相應的自動化關聯設計。
鐵路工程是帶狀工程,線路平面圖、縱斷面圖呈狹長的帶狀,在較小的視窗或視口內,快捷的查詢某個里程的設計情況較為困難。因此,需要把平縱橫成果按相同里程,在各自視口內進行同步顯示。
實現同步顯示的方法為,在平縱橫任意一個視口內,利用鼠標中鍵進行平移時,計算當前鼠標在本視口(如平面視口)內對應的當前線位的里程,利用編輯反應器自動捕獲此平移命令,對其它2個視口執行ZoomTo 命令,即將其它2個視口實體繪制(如縱斷面、橫斷面實體)的相同里程處置于其視口中央。因此,不管操作人員在哪一個視口內進行平移操作,其它各視口都能按照相同里程進行同步顯示,如圖13所示。
若程序以一定的步長,從線路起點到終點,循環對平面視口進行自動平移,縱斷面和橫斷面視口也將根據反應器的驅動,按里程進行同步顯示,形成動態瀏覽的自動播放效果。

圖13 平縱橫視口同里程對應顯示界面
本文研究的鐵路線路平縱橫實時聯動設計方法已成功應用于牡佳、京雄客運專線等鐵路設計項目,簡化了手工操作步驟,顯著提高設計效率。
本文通過應用ObjectARX 的通知和反應器技術,將鐵路線路的平縱橫設計統一起來。根據用戶手工設計的實際需求,梳理出一套整體設計流程。通過制定自定義程序接口,實現平面交互式選線,以及進行編輯優化時,縱斷面、橫斷面自動實時更新等聯動式反應。可有效簡化設計流程,提高設計效率,為進一步提高選線設計的自動化、智能化水平提供輔助支持。