鄭州市水利建筑勘測設計院 牛國凱 郭 艷
AutoLISP在河道CAD中的應用
鄭州市水利建筑勘測設計院 牛國凱 郭 艷
AutoCAD是當今世界上應用最為廣泛的微機CAD軟件,它的應用遍及工業、交通、地質和氣象等眾多領域。目前,AutoCAD在水利工程中的應用主要表現在兩個方面:一方面是以機代手,進行屏幕設計;另一方面是針對具體的工程設計(具體形式如河道、溝渠、水閘、涵洞等)進行二次開發,實現參數化設計。
AutoCAD強大的繪圖功能使得計算機繪制工程圖得到進一步完善。目前對AutoCAD應用最廣的是以機代手,進行屏幕設計,省略了人工描圖過程,從而大大提高了設計速度,且設計圖紙美觀、修改方便。
對于熟練掌握AutoCAD且設計經驗豐富的設計者,往往能夠將具有相近形式和條件的設計圖進行歸類。例如,涵洞可分為洞徑0.8m、1.0m、1.2m等幾種類型,事先繪出設計圖紙,形成圖形庫。當設計需要時,只需把滿足條件的圖紙從圖形庫中調出,修改具體的尺寸、高程等數據,即可使用。也就是說,在應用AutoCAD階段,建立圖紙模型庫是提高設計速度的一個好方法。若要使設計速度得到進一步提高,則可以對AutoCAD進行二次開發:利用AutoLISP語言編程,用DCL語言進行對話框設計,從而形成AutoCAD的二次開發軟件包,實現參數化設計。
AutoCAD的二次開發工具包括AutoLISP、ADSDCL、ASE等工具。其中,AutoLISP語言簡學易懂,DCL對話框美觀實用,因而受到人們的青睞,并得到廣泛應用。
AutoLISP語言是一種嵌入在AutoCAD內部的LISP編程語言。LISP(List Processing Language)是一種計算機表處理語言,在人工智能學科領域得到廣泛應用。LISP語言的特點是程序和數據都采用符號表達式的形式,也就是說,一個LISP程序可以把另一個LISP程序作為它的數據進行處理。因此,使用LISP語言編程靈活方便,就像是進行一個個的函數調用。
1.工程概況。十八里河發源于新鄭市小喬鄉孟莊南溝,河道全長24.8km,流域面積112.3km2,其中鄭州市區段長10.5km,是鄭州市重要的排洪河道。隨著經濟的快速發展和人民生活水平的日益提高,人們對河道的功能也提出了更高要求。鄭州市十八里河生態治理工程在滿足防洪除澇標準的前提下,達到了合理開發利用、提高土地利用率、治理河道、防洪除澇、改善人居生態環境和提高城市品位的目的。
2.工程設計。根據《防洪標準》(GB50201-94)、《水利水電工程等級劃分及洪水標準》(SL252-2000)和《堤防工程設計規范》(GB50286-98)等有關規范的規定,十八里河河道治理工程屬于三等工程,堤防級別為二級。根據《鄭州市城市防洪規劃》的要求,結合城市發展需求,十八里河河道治理防洪標準按照50年一遇的標準設計,除澇標準按照5年一遇的標準設計。為減少土方外運量,在河道兩岸修筑微地形,微地形隔一定距離設置排水口,以方便兩岸排澇。十八里河除了要具有一般河道的防洪、除澇等功能外,還應具有生態和景觀功能。因此,本次河道軸線的確定以河道現狀中心線為準,宜彎則彎,原則上不進行裁彎取直或改道改線處理。結合十八里河的河道特點,河道行洪斷面設計采用梯形斷面方案。在滿足行洪斷面要求的基礎上,為適應生態和景觀的要求,對單一梯形斷面采取子槽開挖、邊坡植草、局部防護等措施,以使治理后的河道斷面自然、美觀、順暢、和諧。
3.AutoLISP語言編程及河道平面設計圖的繪制。在進行河道平面圖設計時,首先在測量的平面帶狀地形圖上勾勒出河道中心軸線,并依次描繪出設計河底線、設計上口線、設計堤頂線等要素。在河道軸線上的每一個拐點處、設定樁號間距確定的整樁號處、圓弧連接的端點和中點處(若河道軸線中包含圓弧段)等關鍵點,標示出該點的樁號、序號、X坐標、Y坐標、圓弧段圓心坐標和圓弧半徑。本程序可實現上述功能,通過對河道中心軸線CAD實體的獲取,分析其數據表,進行數學計算,繪制相應圖形添加到CAD圖形中,最后生成一個記事本文件。下面匯總列出程序代碼片段:


繪制出的CAD圖片段如圖1所示。

圖1 圖片段
生成的記事本片段如表1所示。

表1 記事本片段
新編寫的程序并不是完全按照用戶編寫的意圖來執行的。因此,在獲得錯誤結果或發生程序終止的情況下,就需要對程序進行調試。而在AutoLISP程序調試中,一般使用Visual LISP提供的調試器進行調試,且調試方法不唯一。以下,給出2種簡單的調試方法,即全局變量調試法和內部函數調試法。
1.全局變量調試法。在AutoLISP程序中,使用的變量分為局部變量和全局變量2種。局部變量僅僅存在于定義該變量的函數中,只有在該函數的運行過程中,變量才能使用。而全局變量則不同,只要未退出AutoCAD環境,已使用過的全局變量始終保存在內存中,隨時可以查詢、修改這些變量的值,所以在程序的調試階段,可以把程序中的某些關鍵變量定義成全局變量,在程序運行結束后,無論是正常退出還是出錯退出,依然可以使用這些全局變量。如,用AutoLISP的PRINC函數可以查詢變量的值,用SETQ函數可以修改變量的值。變量定義成全局變量后,在程序出錯中斷運行時,可以通過檢查各個變量的值,了解程序運行的情況,確定問題出在什么地方。
2.內部函數調試法。AutoLISP內部帶有一個調試跟蹤函數,使用格式為:TRACE函數名。這個函數的作用是給指定的函數設置跟蹤標志。設置跟蹤標志后,調用函數時系統會給出提示。在函數運行結束返回時,系統會給出返回結果。在使用TRACE函數時,首先要把需要調試的程序段單獨定義成一個函數,然后在主程序段中調用。AutoLISP定義函數有2種形式:DEFUN函數名和DEFUNC函數名。
目前,AutoCAD軟件已經在水利工程設計中得到廣泛應用。因此,如何在以機代手、屏幕設計的基礎上更好地實現AutoCAD的二次甚至三次開發,是水利專業技術人員今后的一個重要的發展方向和研究領域。