孔國(guó)梁
(中國(guó)鐵路設(shè)計(jì)集團(tuán)有限公司 線站院,天津300308)
傳統(tǒng)的鐵路線路軟件設(shè)計(jì)一般遵循手工設(shè)計(jì)習(xí)慣,軟件編制思想和程序結(jié)構(gòu)編寫一般按照平面、縱斷面和橫斷面分別進(jìn)行。平縱橫設(shè)計(jì)過(guò)程缺乏直接聯(lián)系,無(wú)法做到平縱橫的實(shí)時(shí)協(xié)同設(shè)計(jì)[1-4]。在選線困難的情況下,如用地范圍受限時(shí)需躲避平面障礙、跨越高程控制點(diǎn),要反復(fù)對(duì)比優(yōu)化平縱方案,實(shí)時(shí)獲悉線路方案對(duì)設(shè)計(jì)規(guī)范、平縱控制點(diǎn)避讓等要求的滿足情況,而目前的方法操作繁瑣,每步調(diào)整無(wú)法實(shí)時(shí)直觀查看調(diào)整效果,效率較低,人工操作工作量大。
鑒于以上現(xiàn)狀及問(wèn)題,本文的研究基于AutoCAD平臺(tái),依托ObjectARX2010二次開發(fā)技術(shù),對(duì)數(shù)字地面模型、平面交互式選線、縱斷面坡度自動(dòng)化設(shè)計(jì)及約束處理、平縱橫多視口按里程同步顯示、平縱實(shí)體多夾點(diǎn)式驅(qū)動(dòng)編輯、縱斷面高程控制點(diǎn)自動(dòng)設(shè)置、基于反應(yīng)器原理的平縱橫聯(lián)動(dòng)設(shè)計(jì)控制等關(guān)鍵技術(shù)進(jìn)行研究,以提高選線設(shè)計(jì)的自動(dòng)化水平,簡(jiǎn)化操作流程,形成平縱橫實(shí)時(shí)聯(lián)動(dòng)設(shè)計(jì)的整體方案,具體流程如圖1所示。
在進(jìn)行平縱橫聯(lián)動(dòng)設(shè)計(jì)優(yōu)化前,需要先做好數(shù)字地面模型創(chuàng)建、平縱橫設(shè)計(jì)基本參數(shù)設(shè)置、平縱橫視口創(chuàng)建、平縱橫實(shí)體管理等準(zhǔn)備工作。
圖1 鐵路線路平縱橫實(shí)時(shí)聯(lián)動(dòng)設(shè)計(jì)整體流程
利用測(cè)繪專業(yè)采集并進(jìn)行分類處理后的雷達(dá)點(diǎn)云數(shù)據(jù)或三維地形圖文件,通過(guò)提取圖中的等高線、地形點(diǎn)圖層數(shù)據(jù),創(chuàng)建Delaunay 三角網(wǎng)或方格網(wǎng)數(shù)字地面模型。
創(chuàng)建一個(gè)dwg 文件作為鐵路線路平縱橫設(shè)計(jì)的項(xiàng)目文件,將對(duì)應(yīng)的地形圖文件參考進(jìn)來(lái)。再打開此項(xiàng)目文件時(shí),可自動(dòng)檢索到參考的地形圖文件名,并以此文件名初始化數(shù)字地面模型,從而隨時(shí)獲得線路縱斷面、橫斷面地面高程信息,直到該項(xiàng)目文件關(guān)閉時(shí)析構(gòu)此數(shù)字地面模型對(duì)象。
本文通過(guò)CAD二次開發(fā)包ARX提供的aced GetCurDwgXrefGraph 方法檢索參考的地形圖文件名。該方法可獲得參考文件名數(shù)組,從而得到數(shù)組中第1個(gè)參考文件名,即地形圖文件名,并將此地形圖文件的目錄和文件名作為輸入?yún)?shù),進(jìn)行數(shù)模初始化。
設(shè)置基本參數(shù)文件的目的是使軟件在線路平縱橫設(shè)計(jì)時(shí),可根據(jù)項(xiàng)目要求自動(dòng)按照基本參數(shù)進(jìn)行默認(rèn)設(shè)計(jì),增加自動(dòng)化程度,減少用戶交互輸入,提高設(shè)計(jì)效率。具體操作是在項(xiàng)目文件所在目錄配置參數(shù)文件,具體參數(shù)包括:最小坡長(zhǎng)、最大坡度、最大坡度代數(shù)差、設(shè)豎曲線的最小坡度代數(shù)差、豎曲線半徑、坡度折減、設(shè)橋的臨界填高、設(shè)隧道的臨界挖深、站坪限坡、站坪長(zhǎng)度、路基面寬度、各級(jí)邊坡高度及坡率。
視口是能獨(dú)立顯示特定設(shè)計(jì)內(nèi)容的矩形窗口區(qū)域,在一個(gè)視口內(nèi)進(jìn)行圖形平移、縮放操作,不會(huì)影響到其它視口的顯示。平縱橫多視窗設(shè)計(jì)可以采用多文檔單視口方法[5],也可采用單文檔多視口方法。針對(duì)這2 種方法,ARX 都提供了文檔或視口的創(chuàng)建、命名、切換等相關(guān)方法。相比較而言,多文檔的管理相對(duì)復(fù)雜,用戶操作中可能存在多個(gè)文檔沒及時(shí)關(guān)聯(lián),造成文檔之間數(shù)據(jù)出現(xiàn)不同版本的缺陷。另外,當(dāng)用戶使用Undo、Redo等命令時(shí),也不易處理。因此,本文采用單文檔多視口方法。
在當(dāng)前項(xiàng)目文件中創(chuàng)建3個(gè)視口作為鐵路線路平縱橫設(shè)計(jì)的視口,平面視口在上方,顯示平面線位自定義實(shí)體;縱斷面視口在下方,顯示縱斷面自定義實(shí)體;橫斷面視口在右側(cè),從下向上依次排列線位橫斷面自定義實(shí)體。平縱橫視口的大小比例可由用戶自定義調(diào)整。在當(dāng)前項(xiàng)目文件中創(chuàng)建的平縱橫多視口排布如圖2 所示。
圖2 單文檔平縱橫多視口排布界面
(1)單個(gè)視口的創(chuàng)建:先獲得當(dāng)前圖形文檔的視口表,再添加視口記錄。采用new AcDbViewportTableRecord 的方法,創(chuàng)建一個(gè)視口,并設(shè)置視口名、視口位置、視口大小。
(2)多個(gè)視口的創(chuàng)建:根據(jù)平縱橫設(shè)計(jì)需要,分3次創(chuàng)建視口,分別對(duì)其進(jìn)行平、縱、橫視口命名,并按橫排或豎排的布局排布3個(gè)視口。
(3)多個(gè)視口的管理:在創(chuàng)建每個(gè)視口后,記錄當(dāng)前視口的序號(hào)。通過(guò)acedSetCurrentVPort 函數(shù)對(duì)當(dāng)前視口進(jìn)行設(shè)置,通過(guò)獲取CAD系統(tǒng)變量CVPORT 的方法,可獲得當(dāng)前視口的序號(hào),進(jìn)而可知當(dāng)前平、縱、橫哪一個(gè)視口被激活。
字典是AutoCAD的一種容器對(duì)象,用于組織和管理數(shù)據(jù)庫(kù)的實(shí)體對(duì)象。在項(xiàng)目文件中創(chuàng)建類型為有名對(duì)象的平面字典和縱斷面字典,平面字典中包含當(dāng)前平面線位的ID、所有平面線位的ID數(shù)組、地形圖中的道路ID數(shù)組;縱斷面字典中包含當(dāng)前縱斷面ID、所有縱斷面ID數(shù)組;對(duì)每個(gè)平面線位和縱斷面自定義實(shí)體分別添加擴(kuò)展字典,包含大中橋、隧道、車站、小橋涵、橫斷面數(shù)組。
本文使用ARX 提供的getNamed ObjectsDictionary函數(shù)創(chuàng)建平面和縱斷面的有名對(duì)象字典;使用ARX提供的extensionDictionary 函數(shù)創(chuàng)建平面設(shè)備和縱斷面設(shè)備的擴(kuò)展字典。字典之間數(shù)據(jù)的獲取與傳遞流程如圖3所示。
圖3 字典之間數(shù)據(jù)的獲取與傳遞流程
鐵路線路的平面、縱斷面和橫斷面設(shè)計(jì)既緊密關(guān)聯(lián)又具有一定獨(dú)立性。因此,平縱橫各自實(shí)現(xiàn)高效自動(dòng)化設(shè)計(jì)是三者實(shí)時(shí)聯(lián)動(dòng)的前提條件。后續(xù)只需利用聯(lián)動(dòng)設(shè)計(jì)機(jī)制,在合適的時(shí)機(jī)將相關(guān)設(shè)計(jì)關(guān)聯(lián)起來(lái),即可實(shí)現(xiàn)實(shí)時(shí)聯(lián)動(dòng)設(shè)計(jì)。
平面設(shè)計(jì)要考慮的因素較多,自動(dòng)設(shè)計(jì)存在較大困難。本文基于ARX 的拖動(dòng)技術(shù)[6],在平面視口中逐個(gè)添加平面線位交點(diǎn),編輯曲線半徑和緩和曲線長(zhǎng),創(chuàng)建平面線位自定義實(shí)體。交互式平面設(shè)計(jì)的操作如圖4所示。
圖4 交互式平面設(shè)計(jì)操作示意
縱斷面設(shè)計(jì)可采用先自動(dòng)化設(shè)計(jì)再交互式優(yōu)化的方法[7]。自動(dòng)化設(shè)計(jì)步驟包括:(1)在縱斷面視口內(nèi),根據(jù)平面線位及里程數(shù)據(jù)創(chuàng)建縱斷面自定義實(shí)體;(2)根據(jù)數(shù)字地面模型設(shè)置縱斷面地面線;(3)根據(jù)地面線進(jìn)行坡度自動(dòng)模擬;(4)進(jìn)行最小坡長(zhǎng)、最大坡度、最大坡度代數(shù)差、豎緩重疊、坡度折減、高程控制點(diǎn)等約束處理;(5)根據(jù)最大填高和挖深基本參數(shù)自動(dòng)設(shè)置橋梁和隧道。坡長(zhǎng)、坡度、代數(shù)差、高程控制點(diǎn)約束處理如圖5所示。
圖5 坡長(zhǎng)、坡度、代數(shù)差、高程控制點(diǎn)約束處理示意
自動(dòng)化橫斷面設(shè)計(jì)是以反映線路平縱方案為目標(biāo)而開展的簡(jiǎn)易橫斷面設(shè)計(jì)。在橫斷面視口內(nèi),從下向上依次排列線位相隔50m 的橫斷面自定義實(shí)體,繪制路基面、側(cè)溝、邊坡、地面線、里程、路基中心填挖高、路肩高程、地面高程、橋梁缺口、隧道缺口。每個(gè)平面對(duì)應(yīng)的橫斷面按里程從小到大,在橫斷面視口內(nèi)從下向上依次排成一列,如圖6所示,多個(gè)平面線位對(duì)應(yīng)多列橫斷面。橫斷面設(shè)計(jì)成果可為平面坡腳線設(shè)計(jì)提供基礎(chǔ)數(shù)據(jù)。
該技術(shù)主要實(shí)現(xiàn)通過(guò)編輯平面或縱斷面模型,自動(dòng)驅(qū)動(dòng)相關(guān)設(shè)計(jì)做出適應(yīng)性修改。例如,移動(dòng)平面交點(diǎn)修改線位后,軟件自動(dòng)進(jìn)行縱斷面坡度設(shè)計(jì)并更新橋隧設(shè)備,自動(dòng)更新橫斷面設(shè)計(jì)及缺口、平面橋隧設(shè)備、平面坡腳線等。
圖6 簡(jiǎn)易橫斷面設(shè)計(jì)界面
夾點(diǎn)驅(qū)動(dòng)自定義實(shí)體是利用CAD進(jìn)行人機(jī)交互設(shè)計(jì)最常用的操作。其實(shí)現(xiàn)過(guò)程為創(chuàng)建線路平面、縱斷面、橫斷面自定義實(shí)體,對(duì)函數(shù)getGripPoints和moveGripPointsAt 進(jìn)行重載。
(1)平面夾點(diǎn):包括交點(diǎn)、ZH、HY、QZ、YH、HZ、直線中點(diǎn)、曲線資料的中間點(diǎn),如圖7所示。
圖7 平面自定義實(shí)體夾點(diǎn)驅(qū)動(dòng)界面
在拖動(dòng)交點(diǎn)的基礎(chǔ)上,添加夾直線中點(diǎn)后可以便捷的實(shí)現(xiàn)平移直線邊;添加QZ點(diǎn)后,可以便捷的修改曲線半徑并取整,同時(shí)自動(dòng)選配緩和曲線長(zhǎng)。
(2)縱斷面夾點(diǎn):包括變坡點(diǎn)和坡段線中點(diǎn),實(shí)現(xiàn)移動(dòng)變坡點(diǎn)或坡段平移。
(3)平縱設(shè)備夾點(diǎn):對(duì)橋梁、隧道、平立交、車站、小橋涵等添加了夾點(diǎn),便于拖動(dòng)修改工點(diǎn)位置及長(zhǎng)度,實(shí)現(xiàn)圖形對(duì)數(shù)據(jù)的驅(qū)動(dòng),縱斷面橋隧的夾點(diǎn)設(shè)置如圖8所示。
圖8 縱斷面橋隧設(shè)備夾點(diǎn)設(shè)置界面
在鐵路選線或方案優(yōu)化時(shí),存在大量的立交跨越道路或鐵路的情景,需要實(shí)現(xiàn)立交道路平縱斷面控制點(diǎn)的自動(dòng)設(shè)置。具體實(shí)現(xiàn)時(shí),軟件根據(jù)設(shè)計(jì)的鐵路平面線位與既有道路圖層、鐵路線位的交叉關(guān)系得到平面立交控制點(diǎn)的里程、交叉角度,自動(dòng)設(shè)置平面立交道和縱斷面高程控制點(diǎn),如圖9所示。
圖9 立交道平縱斷面控制點(diǎn)自動(dòng)設(shè)置界面
3.3.1 平縱橫聯(lián)動(dòng)設(shè)計(jì)流程
平縱橫聯(lián)動(dòng)設(shè)計(jì)主要解決以下幾種設(shè)計(jì)情景:(1)平面交互式選線,同時(shí)自動(dòng)設(shè)計(jì)縱斷面和橫斷面,如圖10 所示;(2)編輯平面,重新自動(dòng)設(shè)計(jì)縱斷面和橫斷面,如圖11所示;(3)編輯平面,僅局部更新縱斷面和橫斷面;(4)編輯縱斷面,重新設(shè)計(jì)橫斷面;(5)編輯平面/縱斷面的橋隧等設(shè)備,自動(dòng)更新縱斷面/平面的橋隧等設(shè)備、橫斷面缺口。
3.3.2 CAD聯(lián)動(dòng)設(shè)計(jì)機(jī)制
圖10 交互式選線自動(dòng)設(shè)計(jì)縱斷面和橫斷面流程
圖11 編輯平面自動(dòng)設(shè)計(jì)縱斷面和橫斷面流程
ObjectARX 為開發(fā)者提供了反應(yīng)器機(jī)制,它類似于MFC 的消息處理,利用它可以響應(yīng)輸入事件和實(shí)體添加、編輯、刪除等事件。常見的AutoCAD反應(yīng)器包括4 種[8],如圖12 所示。
圖12 常用的AutoCAD反應(yīng)器類型
反應(yīng)器按時(shí)效分為2 種類型:臨時(shí)反應(yīng)器和永久反應(yīng)器,圖12中,前3種是臨時(shí)反應(yīng)器,第4種是永久反應(yīng)器。
3.3.3 反應(yīng)器技術(shù)在平縱橫聯(lián)動(dòng)設(shè)計(jì)的應(yīng)用
(1)編輯反應(yīng)器的應(yīng)用示例
重寫endAttach 函數(shù):對(duì)參照地形圖的自定義處理,可自動(dòng)初始化數(shù)字地面模型。
重寫viewChanged函數(shù):對(duì)視口顯示變化時(shí)的自定義處理,可對(duì)視口中當(dāng)前平面、縱斷面進(jìn)行最大化顯示。
(2)數(shù)據(jù)庫(kù)反應(yīng)器的應(yīng)用示例
重寫objectAppended 函數(shù):添加某個(gè)對(duì)象后的自定義處理,如添加平面后,自動(dòng)進(jìn)行縱斷面、橫斷面的設(shè)計(jì);添加了平面/縱斷面設(shè)備后,自動(dòng)添加對(duì)應(yīng)的縱斷面/平面設(shè)備等。
重寫objectModified 函數(shù):修改某個(gè)對(duì)象后的自定義處理,如修改平面后,自動(dòng)更新縱斷面、橫斷面;修改平面/縱斷面設(shè)備后自動(dòng)更新對(duì)應(yīng)的縱斷面/平面設(shè)備。
重寫objectErased 函數(shù):刪除某個(gè)對(duì)象后的自定義處理,如刪除平面模型后,自動(dòng)刪除對(duì)應(yīng)的縱斷面、橫斷面;刪除某個(gè)平面/縱斷面設(shè)備后,自動(dòng)刪除對(duì)應(yīng)的縱斷面/平面設(shè)備。
(3)臨時(shí)反應(yīng)器的加載和卸載控制
軟件可以通過(guò)加載或卸載反應(yīng)器來(lái)開啟或關(guān)閉聯(lián)動(dòng)式設(shè)計(jì)。如利用CURDB->addReactor (CURDBREACTOR)操作,添加數(shù)據(jù)庫(kù)反應(yīng)器;利用CURDB->removeReactor(CURDBREACTOR),卸載數(shù)據(jù)庫(kù)反應(yīng)器。由此可控制數(shù)據(jù)庫(kù)反應(yīng)器是否起作用,即添加、刪除、修改某個(gè)實(shí)體后,是否進(jìn)行相應(yīng)的自動(dòng)化關(guān)聯(lián)設(shè)計(jì)。
鐵路工程是帶狀工程,線路平面圖、縱斷面圖呈狹長(zhǎng)的帶狀,在較小的視窗或視口內(nèi),快捷的查詢某個(gè)里程的設(shè)計(jì)情況較為困難。因此,需要把平縱橫成果按相同里程,在各自視口內(nèi)進(jìn)行同步顯示。
實(shí)現(xiàn)同步顯示的方法為,在平縱橫任意一個(gè)視口內(nèi),利用鼠標(biāo)中鍵進(jìn)行平移時(shí),計(jì)算當(dāng)前鼠標(biāo)在本視口(如平面視口)內(nèi)對(duì)應(yīng)的當(dāng)前線位的里程,利用編輯反應(yīng)器自動(dòng)捕獲此平移命令,對(duì)其它2個(gè)視口執(zhí)行ZoomTo 命令,即將其它2個(gè)視口實(shí)體繪制(如縱斷面、橫斷面實(shí)體)的相同里程處置于其視口中央。因此,不管操作人員在哪一個(gè)視口內(nèi)進(jìn)行平移操作,其它各視口都能按照相同里程進(jìn)行同步顯示,如圖13所示。
若程序以一定的步長(zhǎng),從線路起點(diǎn)到終點(diǎn),循環(huán)對(duì)平面視口進(jìn)行自動(dòng)平移,縱斷面和橫斷面視口也將根據(jù)反應(yīng)器的驅(qū)動(dòng),按里程進(jìn)行同步顯示,形成動(dòng)態(tài)瀏覽的自動(dòng)播放效果。
圖13 平縱橫視口同里程對(duì)應(yīng)顯示界面
本文研究的鐵路線路平縱橫實(shí)時(shí)聯(lián)動(dòng)設(shè)計(jì)方法已成功應(yīng)用于牡佳、京雄客運(yùn)專線等鐵路設(shè)計(jì)項(xiàng)目,簡(jiǎn)化了手工操作步驟,顯著提高設(shè)計(jì)效率。
本文通過(guò)應(yīng)用ObjectARX 的通知和反應(yīng)器技術(shù),將鐵路線路的平縱橫設(shè)計(jì)統(tǒng)一起來(lái)。根據(jù)用戶手工設(shè)計(jì)的實(shí)際需求,梳理出一套整體設(shè)計(jì)流程。通過(guò)制定自定義程序接口,實(shí)現(xiàn)平面交互式選線,以及進(jìn)行編輯優(yōu)化時(shí),縱斷面、橫斷面自動(dòng)實(shí)時(shí)更新等聯(lián)動(dòng)式反應(yīng)??捎行Ш?jiǎn)化設(shè)計(jì)流程,提高設(shè)計(jì)效率,為進(jìn)一步提高選線設(shè)計(jì)的自動(dòng)化、智能化水平提供輔助支持。