计算道路超高lisp_基于Visual LISP的地铁轨道综合图辅助设计程序开发
基于Visual LISP的地鐵軌道綜合圖輔助設(shè)計(jì)程序開發(fā)
基于Visual LISP的地鐵軌道綜合圖輔助設(shè)計(jì)程序開發(fā)
吳凱偉,石瑋荃
(中鐵工程設(shè)計(jì)咨詢集團(tuán)有限公司,北京 100055)
摘 要:為了滿足地鐵軌道綜合圖設(shè)計(jì)的要求,依據(jù)軌道基礎(chǔ)理論,基于Visual LISP集成開發(fā)環(huán)境下利用AutoLISP語言對AutoCAD進(jìn)行二次開發(fā),編制地鐵軌道綜合圖輔助設(shè)計(jì)程序,實(shí)現(xiàn)地鐵軌道綜合圖中線路平面、線路縱斷面、斷鏈、軌面高程、軌道結(jié)構(gòu)類型、軌道附屬設(shè)備等信息的自動(dòng)處理以及元素的自動(dòng)繪制功能。應(yīng)用結(jié)果表明:程序運(yùn)行穩(wěn)定、操作簡單、成果準(zhǔn)確,大大提高了軌道綜合圖的設(shè)計(jì)效率。
關(guān)鍵詞:Visual LISP; AutoCAD二次開發(fā);地鐵;軌道;綜合圖
1 概述
城市軌道交通工程中軌道綜合圖是軌道工程施工的指導(dǎo)性文件,圖中包含大量的工程信息[1]。若人工手動(dòng)繪制軌道綜合圖,既要進(jìn)行繁瑣和重復(fù)的參數(shù)計(jì)算,又要進(jìn)行大量的幾何圖形繪制,不僅耗時(shí)費(fèi)力,而且較容易出錯(cuò)。因此利用輔助設(shè)計(jì)程序完成軌道綜合圖的繪制是十分必要的。
目前,不同設(shè)計(jì)單位在軌道綜合圖編制過程中借助不同類型的程序進(jìn)行輔助設(shè)計(jì),有的采用自編程序,有的采用商業(yè)軟件。由于自編程序均不對外公開,而商業(yè)軟件在軌道綜合圖輔助設(shè)計(jì)中存在較大的局限性,例如無法實(shí)現(xiàn)軌道類型和軌道附屬設(shè)備的繪制等。因此急需開發(fā)出一個(gè)功能較為完善的軌道綜合圖輔助設(shè)計(jì)程序。
目前支持AutoCAD二次開發(fā)環(huán)境的主要有:AutoLISP/Visual LISP、VBA、ObjectARX、ActiveX Automation及塊和形定義等[2]。本文利用AutoLISP語言進(jìn)行二次開發(fā)。
AutoLISP語言是在普通LISP語言基礎(chǔ)上,擴(kuò)充了許多適用于AutoCAD應(yīng)用的特殊功能而形成的一種以解釋方式運(yùn)行于AutoCAD內(nèi)部的程序設(shè)計(jì)語言,繼承了LISP語言擅長處理各種結(jié)構(gòu)的數(shù)據(jù)表的特點(diǎn)[3]。LISP語言語法簡單、功能函數(shù)強(qiáng)大、撰寫環(huán)境多樣、對作業(yè)平臺(tái)兼容性強(qiáng)等特點(diǎn)[4]。
Visual LISP作為AutoLISP開發(fā)AutoCAD程序及擴(kuò)展AutoCAD功能專用的集成交互式開發(fā)環(huán)境,使編寫、修改代碼以及測試和調(diào)試程序更加容易[5]。
本程序基于Visual LISP集成交互式開發(fā)環(huán)境采用AutoLISP語言對AutoCAD進(jìn)行二次開發(fā),以線路平面、線路縱斷面、曲線超高、軌道結(jié)構(gòu)類型、軌道附屬設(shè)備等數(shù)據(jù)作為輸入,對數(shù)據(jù)進(jìn)行斷鏈處理、綜合計(jì)算后,得到各個(gè)加密基標(biāo)處的軌面高程,進(jìn)而完成軌道綜合圖的繪制。
2 需求分析
為滿足軌道工程施工的需求,軌道綜合圖應(yīng)包含線路平面、線路縱斷面、斷鏈、曲線超高、軌面高程、軌道結(jié)構(gòu)類型、軌道附屬設(shè)備、百米標(biāo)里程和加密基標(biāo)里程等數(shù)據(jù),不同線別以及同一線別中各個(gè)數(shù)據(jù)在圖中需相對獨(dú)立且布局合理。
3 系統(tǒng)設(shè)計(jì)思路
軌道綜合圖需要許多基礎(chǔ)數(shù)據(jù)作為輸入資料,主要包含線路及行車專業(yè)接口資料和軌道專業(yè)設(shè)計(jì)參數(shù),用戶依據(jù)這些基礎(chǔ)數(shù)據(jù)進(jìn)行相應(yīng)計(jì)算后,進(jìn)行圖紙的繪制。
因此,本程序按照獲取數(shù)據(jù)、數(shù)據(jù)處理及繪制圖形3個(gè)模塊開展設(shè)計(jì)。
3.1 獲取數(shù)據(jù)
通過線路平縱斷面圖獲取線路平縱斷面原始數(shù)據(jù)及斷鏈數(shù)據(jù),再對線路平縱斷面原始數(shù)據(jù)進(jìn)行斷鏈處理后得到最終的線路平縱斷面數(shù)據(jù)。
鑒于線路平面圖借助不同的商業(yè)軟件輔助設(shè)計(jì)生成,因此線路平面數(shù)據(jù)的存儲(chǔ)格式存在差異,為保證程序兼容不同商業(yè)軟件設(shè)計(jì)生成的線路平面圖,在Visual LISP中直接訪問圖形數(shù)據(jù)庫,再依次獲取以鏈表形式存儲(chǔ)的圖元(Entity),并將各圖元組碼值(Group Code Value)中的有效數(shù)據(jù)提取出來,再以表(LIST)的格式存儲(chǔ)于文本文件中。至此,線路平面原始數(shù)據(jù)提取完成。
上述提取完成的線路平面原始數(shù)據(jù)尚未考慮斷鏈因素,因此在Visual LISP中將原始數(shù)據(jù)從原始數(shù)據(jù)文件中讀取,再將斷鏈依次插入相應(yīng)的段落中,最后將經(jīng)斷鏈處理后的平面數(shù)據(jù)以表(LIST)的格式存儲(chǔ)于文本文件中。至此,線路平面最終數(shù)據(jù)生成完畢。
同理,線路縱斷面數(shù)據(jù)以同樣方式生成。
3.2 數(shù)據(jù)處理基本原理
上述生成的線路縱斷面數(shù)據(jù)中,以線路坡段為單元存放數(shù)據(jù),由于需要給出各加密基標(biāo)處的軌面高程,同時(shí)在豎曲線范圍內(nèi)需要考慮修正值,因此需要對數(shù)據(jù)進(jìn)行處理。同理,上述生成的線路平面數(shù)據(jù)中,以線為單元存放數(shù)據(jù),也需要給出各加密基標(biāo)處的曲線超高,因此同樣需要對數(shù)據(jù)進(jìn)行處理。
在Visual LISP中分別在平縱斷面數(shù)據(jù)文件和曲線超高數(shù)據(jù)文件中讀取數(shù)據(jù),以表類型(LIST)存儲(chǔ)于內(nèi)存中,依次以線路坡段或線為單元對數(shù)據(jù)進(jìn)行處理,計(jì)算出各加密基標(biāo)處的軌面高程或曲線超高。
3.2.1 豎曲線縱距計(jì)算
線路縱斷面圖中,在變坡點(diǎn)位置,一般只給出未考慮豎曲線時(shí)的設(shè)計(jì)高程。因此在軌道綜合圖中,軌面高程需考慮豎曲線修正值。
豎曲線縱距y計(jì)算公式如下[6,7]
式中 x——切線上計(jì)算點(diǎn)至豎曲線起點(diǎn)的距離,m; y——豎曲線縱距,m。
3.2.2 軌面高程計(jì)算
根據(jù)《地下鐵道工程施工及驗(yàn)收規(guī)范(2003年版)》(GB 50299—1999)[8]的要求,直線上每120 m、曲線上每60 m和曲線起止點(diǎn)、緩圓點(diǎn)、圓緩點(diǎn)、道岔起止點(diǎn)等各設(shè)置1個(gè)控制基標(biāo),直線上每6 m、曲線上每5 m各設(shè)置1個(gè)加密基標(biāo)[9]。為方便現(xiàn)場測量和施工,考慮在直線和曲線上均按每5 m設(shè)置1個(gè)加密基標(biāo),在每個(gè)基標(biāo)處,進(jìn)行軌道形位的放樣。因此,軌道綜合圖中以5 m為間距,繪制出每個(gè)控制點(diǎn)處的軌面高程。
第n個(gè)坡段上任意位置的軌面高程H計(jì)算公式如下
式中 H1、H2、…、Hn——第n個(gè)坡段的終點(diǎn)高程,m;
S1、S2、…、Sn——第n個(gè)坡段的終點(diǎn)里程,m;
G1、G2、…、Gn——第n個(gè)坡段的坡度;
L1、L2、…、Ln——第n個(gè)坡段的長度,m;
H、S——第n個(gè)坡段上任意位置的高程和里程;
y——第n個(gè)坡段上豎曲線范圍內(nèi)的縱距,豎曲線范圍外為0。
計(jì)算得到的H為線路中心線的軌面高程,在平面曲線地段,根據(jù)對應(yīng)的超高值計(jì)算出內(nèi)外股鋼軌的軌面高程。
3.2.3 曲線超高計(jì)算
平面曲線地段,按規(guī)范要求設(shè)置超高[10]。因此軌道綜合圖中需給出每個(gè)加密基標(biāo)處的曲線超高值。
緩和曲線上任意位置的超高H計(jì)算公式如下
式中 Hm——圓曲線上的超高值,mm;
S0——直緩點(diǎn)或緩直點(diǎn)的里程,m;
S1——緩圓點(diǎn)或圓緩點(diǎn)的里程,m;
S——緩和曲線上任意位置的里程,m。
3.3 繪制圖形
軌道綜合圖包含2條線路(左右線或出入線)的設(shè)計(jì)高程、設(shè)計(jì)坡度、斷鏈、曲線超高、豎曲線、鋼軌頂面里程、鋼軌頂面高程、軌道類型、橫穿設(shè)備、百米標(biāo)和平面等多欄。各欄均可由本程序完成繪制。
由于程序執(zhí)行過程中存在大量的數(shù)據(jù)讀寫及圖形繪制操作,為提高程序的執(zhí)行速度[3],AutoLISP源代碼文件(.lsp)將被編譯成可執(zhí)行機(jī)器代碼文件(.fas)后提供給用戶使用。
首先在新建AutoCAD空白文檔加載程序后輸入線路起終點(diǎn)里程,按程序設(shè)定好的圖框各欄高度繪制鋪軌圖表格邊框,然后依次讀取生成好的數(shù)據(jù)文件,程序?qū)床煌瑘D元組碼規(guī)則進(jìn)行組碼,進(jìn)而在文檔中快速生成相應(yīng)的圖形,最后完成圖形的繪制。以軌面高程為例,在上述計(jì)算出各加密基標(biāo)處的軌面高程后,以軌面高程值、坐標(biāo)及文字樣式等DXF形式的組碼值完成文字(TEXT)組碼,進(jìn)而在AutoCAD文檔中完成軌面高程的繪制。
4 程序詳細(xì)設(shè)計(jì)
鑒于圖紙繪制所需要的基礎(chǔ)數(shù)據(jù)較多,且不同線別、不同類型數(shù)據(jù)之間均相對獨(dú)立,例如左右線線路平縱斷面、曲線超高、軌道結(jié)構(gòu)類型及軌道附屬設(shè)備等數(shù)據(jù),可將這些數(shù)據(jù)分別存儲(chǔ)在數(shù)據(jù)文件中,以提高數(shù)據(jù)之間的獨(dú)立性;軌道綜合圖中各項(xiàng)內(nèi)容也相對獨(dú)立,在圖紙繪制過程中可依次進(jìn)行,因此可將圖形繪制劃分為多個(gè)功能模塊,各個(gè)模塊調(diào)用獨(dú)立數(shù)據(jù)文件繪制圖形(包括圖框、平面示意、坡段、豎曲線、斷鏈、曲線超高、軌面高程、軌道結(jié)構(gòu)類型及軌道附屬設(shè)備等)。
4.1 數(shù)據(jù)存儲(chǔ)
軌道綜合圖輔助設(shè)計(jì)程序的基礎(chǔ)數(shù)據(jù)文件及用途如表1所示。數(shù)據(jù)以表(LIST)的格式存儲(chǔ)于文本文件中。以線路縱斷面數(shù)據(jù)為例,其存儲(chǔ)格式如表2所示。
表1 基礎(chǔ)數(shù)據(jù)文件
序號數(shù)據(jù)文件說明1Plane_B.dat存儲(chǔ)斷鏈處理前的線路平面數(shù)據(jù)2Plane_A.dat存儲(chǔ)斷鏈處理后的線路平面數(shù)據(jù)3Profile_B.dat存儲(chǔ)斷鏈處理前的線路縱斷面數(shù)據(jù)4Profile_A.dat存儲(chǔ)斷鏈處理后的線路縱斷面數(shù)據(jù)5BrokenChain.dat存儲(chǔ)線路斷鏈數(shù)據(jù)6Station.dat存儲(chǔ)車站數(shù)據(jù)7Turnout.dat存儲(chǔ)道岔數(shù)據(jù)8Superelevation.dat存儲(chǔ)曲線超高數(shù)據(jù)9Accessory.dat存儲(chǔ)軌道附屬設(shè)備數(shù)據(jù)10TrackStructure.xls存儲(chǔ)軌道結(jié)構(gòu)類型數(shù)據(jù)
表2 線路縱斷面數(shù)據(jù)存儲(chǔ)格式
序號起點(diǎn)里程終點(diǎn)里程坡長/m坡度/‰斷鏈里程斷鏈值/m1DK11+500000DK11+751000251-572DK11+751000DK12+6000008494945DK11+994439-55613DK12+600000DK12+8000002000
4.2 模塊劃分
軌道綜合圖輔助設(shè)計(jì)程序的主要程序模塊及功能如表3所示。
表3 主要程序模塊
序號模塊名命令說明1GetPlanGPL獲取線路平面數(shù)據(jù)2GetProfileGPR獲取線路縱斷面數(shù)據(jù)3InsertChainPlanICPL平面數(shù)據(jù)斷鏈處理4InsertChainProfileICPR縱斷面數(shù)據(jù)斷鏈處理5DrawFrameDF繪制表格邊框6DrawPlanDPL繪制線路平面7DrawProfileDPR繪制線路縱斷面8DrawChainDC繪制斷鏈9DrawStationDST繪制車站布置10DrawTurnoutDT繪制道岔布置11DrawSuperelevationDS繪制曲線超高12DrawRailLevelDRL繪制軌面高程13DrawTrackTypeDTT繪制軌道結(jié)構(gòu)類型14DrawAccessoryDA繪制軌道附屬設(shè)備
4.3 圖形繪制實(shí)現(xiàn)
軌道綜合圖包含的線路平面、線路縱斷面、斷鏈、曲線超高、軌面高程、軌道結(jié)構(gòu)類型、軌道附屬設(shè)備、百米標(biāo)里程和加密基標(biāo)里程等數(shù)據(jù),應(yīng)根據(jù)不同線別分別繪制且布局合理。結(jié)合既有線路的設(shè)計(jì)及工程應(yīng)用經(jīng)驗(yàn),軌道綜合圖按左右線或出入線上下分別布置,其各欄相對位置和高度一致。繪制完成的軌道綜合圖布局示意如圖1所示。
圖1 軌道綜合圖布局示意
在新建AutoCAD空白文檔依次讀取生成好的數(shù)據(jù)文件,程序?qū)床煌瑘D元組碼規(guī)則進(jìn)行組碼,進(jìn)而在文檔中快速生成相應(yīng)的圖形,最后完成圖形的繪制。
繪制圖形的程序流程如圖2所示。
圖2 圖形繪制程序流程
5 程序編碼[11]
5.1 Dat文件操作方法[12,13]
下面以Dat文件操作為例,列出寫入和讀取數(shù)據(jù)的實(shí)現(xiàn)代碼。
5.1.1 文件寫入
(defun WriteFile (Sections@ / FileName%
FileDes* Item#)
(setq FileName% (getfiled 'Please enter the file
name: \n' '' 'dat' 1))
(setq FileDes* (open FileName% 'w'))
(foreach Item# Sections@
(write-line Item# FileDes*)
);foreach
(close FileDes*)
);defun
5.1.2 文件讀取
(defun ReadFile (Sections@ / FileName%
FileDes* LineValue%
SectionsTemp#)
(setq FileName% (getfiled 'Please cloose the
data file:\n' '' 'dat' 0))
(setq FileDes* (open FileName% 'r'))
(setq Sections@ nil)
(while (setq LineValue% (read-line FileDes%))
(setq SectionsTemp# (read LineValue%))
(setq Sections@ (cons SectionsTemp#
Sections@))
);while
(setq Sections@ (reverse Sections@))
(close FileDes%)
);defun
5.2 Excel文件操作方法[14,15]
下面以Excel文件操作為例,列出讀取數(shù)據(jù)的實(shí)現(xiàn)代碼。
(defun GetCellValueAsList( / FileName%
SheetName% RangeStr% App$
WorkBooks$ WorkBook$ Sheets$
Sheet$ Range$ Value^ Value@
ConvertValue@)
(vl-load-com)
(setq App$ (vlax-get-or-create-object
'Excel.Application'))
(setq WorkBooks$ (vlax-get-property
App$ 'WorkBooks'))
(setq WorkBook$ (vlax-invoke-method
WorkBooks$ 'open' FileName%))
(setq Sheets$ (vlax-get-property
WorkBook$ 'Sheets'))
(setq Sheet$ (vlax-get-property Sheets$ 'Item'
SheetName%))
(setq Range$ (vlax-get-property Sheet$ 'Range'
RangeStr))
(setq Value^ (vlax-get-property Range$ 'Value))
(setq Value@ (vlax-safearray->list
(vlax-variant-value Value^)))
(setq ConvertValue@ (vlxls-variant->list
Value@))
(vlax-invoke-method WorkBook$ 'Close'
:vlax-true)
(vlax-invoke-method AppObj$ 'Quit')
(vlax-release-object AppObj$)
ConvertValue@
);dufun
6 結(jié)語
基于Visual LISP集成交互式開發(fā)環(huán)境利用AutoLISP語言對AutoCAD進(jìn)行二次開發(fā),闡述了軌道綜合圖輔助設(shè)計(jì)程序開發(fā)的主要思路及流程。
本程序在Visual LISP中直接訪問線路圖圖形數(shù)據(jù)庫,以獲取線路平縱斷面有效數(shù)據(jù),并存儲(chǔ)于文本文件中,再對原始數(shù)據(jù)文件進(jìn)行插入斷鏈處理后,形成最終的線路平縱斷面數(shù)據(jù),存儲(chǔ)于文本文件中。
AutoLISP源代碼文件被編譯成可執(zhí)行機(jī)器代碼文件后提供給用戶使用。用戶在加載程序后輸入線路基礎(chǔ)參數(shù),自動(dòng)完成表格邊框的繪制,然后依次讀取數(shù)據(jù)文件,程序?qū)床煌瑘D元組碼規(guī)則進(jìn)行組碼,進(jìn)而生成相應(yīng)的圖形,最后完成圖形的繪制。
本程序已經(jīng)在北京、廣州、南京等城市軌道交通中應(yīng)用,得到了實(shí)際工程的檢驗(yàn),大大提高了軌道綜合圖繪制的準(zhǔn)確性和高效性,取得了良好的效果。
參考文獻(xiàn):
[1] 劉大園,姚力,巫江.基于AutoCAD.NET的地鐵鋪軌綜合設(shè)計(jì)圖軟件開發(fā)[J].鐵路計(jì)算機(jī)應(yīng)用,2013,22(11):36-39.
[2] 黃秀琴.基于Visual Lisp的AutoCAD2000的二次開發(fā)研究[J].常州工學(xué)院學(xué)報(bào),2002,15(4):4-7.
[3] 趙景亮,李志剛. AutoCAD 2004與AutoLISP二次開發(fā)技術(shù)[M].北京:清華大學(xué)出版社,2004.
[4] 郭秀娟,于全通,范小鷗. AutoLISP語言程序設(shè)計(jì)[M].北京:化學(xué)工業(yè)出版社,2008.
[5] 李學(xué)志. Visual LISP程序設(shè)計(jì)[M].北京:清華大學(xué)出版社,2010.
[6] 易思蓉.鐵道工程[M].北京:中國鐵道出版社,2011.
[7] 李成輝.鐵路鐵道[M].北京:中國鐵道出版社,2010.
[8] 中華人民共和國住房和城鄉(xiāng)建設(shè)部.GB50299—1999地下鐵道工程施工及驗(yàn)收規(guī)范(2003年版)[S].北京:中國計(jì)劃出版社,2004.
[9] 中華人民共和國住房和城鄉(xiāng)建設(shè)部.GB50308—2008城市軌道交通工程測量規(guī)范[S].北京:中國建筑工業(yè)出版社,2008.
[10]中華人民共和國住房和城鄉(xiāng)建設(shè)部.GB50157—2013地鐵設(shè)計(jì)規(guī)范[S].北京:中國建筑工業(yè)出版社,2014.
[11]二代龍震工作室. AutoCAD LISP/VLISP函數(shù)庫查詢辭典[M].北京:中國鐵道出版社,2003.
[12]劉喜平.基于AutoLISP的AutoCAD二次開發(fā)技術(shù)[J].機(jī)械制造與自動(dòng)化,2011(4):128-129.
[13]陳伯雄,馮偉. Visual LISP程序設(shè)計(jì):技巧與范例[M].北京:人民郵電出版社,2002.
[14]周樂來,馬婧. AutoCAD 2008 Visual LISP二次開發(fā)入門到精通[M].北京:機(jī)械工業(yè)出版社,2008.
[15]梁雪春. AutoLISP實(shí)用教程[M].北京:人民郵電出版社,1998.
Aided Design Program Development for Metro Track Comprehensive Drawing Based on Visual LISP
WU Kai-wei, SHI Wei-quan
(China Railway Engineering Consulting Group Co., Ltd., Beijing 10055, China)
Abstract:In order to meet the requirements of the design of metro track comprehensive drawing, AutoLISP language is used for the secondary development of AutoCAD based on the basic theory of track structure under Visual LISP integrated development environment so that the computerized program is developed to fulfill information auto-processing and element auto-drawing with respect to railway line plane, railway line profile, chain breaking, rail surface elevation, track structure and track auxiliary equipment. The practical results show that the program is simple, stable, accurate and effective in the design of track comprehensive drawing.
Key words:Visual LISP; AutoCAD secondary development; Metro; Track; Comprehensive drawing
收稿日期:2016-09-25;
修回日期:2016-10-19
作者簡介:吳凱偉(1986—),男,工程師,2011年畢業(yè)于西南交通大學(xué),工學(xué)碩士,E-mail:wukaiwei2004@163.com。
文章編號:1004-2954(2017)05-0027-05
中圖分類號:U239.5;U213.2
文獻(xiàn)標(biāo)識碼:A
DOI:10.13238/j.issn.1004-2954.2017.05.006
總結(jié)
以上是生活随笔為你收集整理的计算道路超高lisp_基于Visual LISP的地铁轨道综合图辅助设计程序开发的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python保存为xlsb_How ca
- 下一篇: php--------对象(object