高會剛
(上海市城市建設設計研究總院(集團)有限公司,上海市200125)
市政道路常用圖中的《路面結構圖》、《側緣石安裝大樣圖》、《路面搭接設計圖》及《道路橫斷面設計圖》,目前大多由設計人員手工繪圖。且前三個設計圖關聯(lián)程度較高,路面結構的調整往往涉及到三張圖紙的全部改動。另在市政片區(qū)路網(wǎng)建設前期工作中,路網(wǎng)道路分主干路、次干路、支路,縱橫交錯,不同的片區(qū)功能要求,不同的道路等級,甚至不同的走向道路,對道路橫斷面有不同要求,因而道路橫斷面方案的對比研究成為關鍵問題??焖賹I(yè)繪制多個橫斷面與建設方溝通研究成為決定項目可行性的重要過程,也是一個設計院專業(yè)水平的綜合體現(xiàn)。
基于上述現(xiàn)實情況及目前專業(yè)軟件的空缺功能,本文主要通過對程序及子程序中的主要功能的使用方法的演示,來介紹如何利用Autolisp語言,對AutoCAD進行二次開發(fā)編程,將上述圖紙所需的參數(shù)以對話框形式呈現(xiàn)于設計者,而將繁瑣耗時的繪圖留給計算機來完成的實現(xiàn)路線,以供同行參考。
目前設計公司的主要設計繪圖軟件為AutoCAD。而Autolisp語言作為AutoCAD的內嵌語言,具有語法簡單、快速編譯、調用AutoCAD內部命令方便、debug便捷,以及編譯界面友好等特點。故選擇Autolisp為編程語言,在AutoCAD環(huán)境下進行二次開發(fā)。
程序提供參數(shù)輸入集成對話框,設計者完成參數(shù)輸入修改后,選擇所需繪制圖紙,點擊確定,計算機完成繪圖,參見圖1。
1.3.1 對話框程序
此程序主要實現(xiàn)提供友好的交互界面(見圖1(step·1)參數(shù)輸入),方便設計者輸入相關參數(shù)。此程序需要以下子程序:
(1)參數(shù)輸入對話框子程序:可由DCL(對話框控制語言)進行編譯,該語言同樣集成在AutoCAD中,語法較Autolisp更為簡單。
(2)顯示SLD圖像子程序:主要解決橫斷面圖的SLD圖顯示,為設計者提供必要的參考。
(3)參數(shù)與環(huán)境變量初始化子程序:主要解決AutoCAD的DCL對話框默認無記憶功能的問題。
圖1 程序流程圖
(4)對稱斷面控制輸入子程序:主要解決橫斷面圖對稱時參數(shù)的輸入,先顯斷面右側輸入對話框,并令右側數(shù)據(jù)與左側數(shù)據(jù)一致。
(5)將環(huán)境變量賦值與對話框子程序:主要解決將對應的環(huán)境變量的值賦與對話框的相對應參數(shù)。
1.3.2 對話框參數(shù)取值程序
將DCL對話框中的參數(shù)轉換提取為后續(xù)繪制程序所需的格式。
1.3.3 路面結構圖繪制程序
此程序需要完成的步驟為依據(jù)層名稱與厚度繪制每一層的box、厚度的標注、層名的注釋文本、不同結構層的填充,見圖2。
圖2 路面結構圖(單位:cm)
1.3.4 側緣石安裝大樣圖繪制程序
此程序需要完成的步驟為依據(jù)路面結構參數(shù)、側緣石參數(shù),依次繪制出側緣石安裝細部并標注尺寸寬度、路面結構層的繪制與注釋,見圖3。
圖3 側石安裝細部圖(單位:cm)
1.3.5 路面搭接設計圖繪制程序
此程序需要完成的步驟為依據(jù)路面結構參數(shù)完成路面搭接繪圖、路面結構層的繪制與注釋,見圖4。
圖4 路面搭接設計圖(單位:cm)
1.3.6 道路橫斷面圖繪制程序
此程序需要完成的為依據(jù)綠化帶寬度、側分帶寬度、人行道寬度與橫坡坡度、非機動車道寬度與橫坡坡度、車行道寬度與橫坡坡度,中央分隔帶寬度、側緣石的規(guī)格尺寸及外露高度等參數(shù),繪制道路橫斷面圖,并標注路幅寬度及文本注釋,見圖5。
圖5 道路橫斷面圖(單位:m)
1.3.7 其他子程序
這里需要說明的是程序繪圖按照cm為單位1:1進行繪圖,通過布局視口布置,標準A3按比例出圖。根據(jù)上海市城市建設設計研究總院的制圖要求,需用指定的字體,字高,因而字體高度、標注樣式的全局比例等需要根據(jù)不同的圖定制。
在“程序及所需主要子程序分析”一節(jié)中,可以看到關于路面結構繪制的子程序在路面結構圖、側緣石安裝大樣圖、路面搭接設計圖中都會使用。人們可以在編譯中,對路面結構圖繪制程序增加控制box寬度參數(shù)、層名注釋位置參數(shù),并將此子程序的編譯實現(xiàn)最大化的利用。
對于各個公共子程序的分析會在下節(jié)“主要子程序的編譯”中詳細分析。通過拆解各個設計圖的繪制子程序的研究分析,編譯公共子程序,提高程序的適用性。
根據(jù)程序的整體交互流程及子程序的功能,將程序的子程序分為錄入部分(即參數(shù)的輸入);提取部分(即從對話框將使用者的輸入值統(tǒng)一提?。?;繪制部分(即利用提取的參數(shù)值進行繪圖)。
2.2.1 錄入部分
2.2.1.1 參數(shù)輸入對話框子程序
參數(shù)輸入對話框子程序主要利用的為DCL語言 , 主 要 通 過 對 column、row、boxed_column 及boxed_row等排列函數(shù)的組合運用,完成集成對話框,為使用者提供友好的輸入界面。
2.2.1.2 顯示SLD幻燈子程序
在“參數(shù)輸入對話框子程序”中,人們使用了image函數(shù)。需要說明的是image函數(shù)僅僅是在對話框中布置了一個圖像的位置及大小,需要將圖像顯示出來則需要配合子程序,即顯示SLD幻燈子程序,見圖6。
圖6 CAD界面
2.2.1.3 參數(shù)與環(huán)境變量初始化子程序
AutoCAD的DCL對話框默認無記憶功能,因此需要解決對話框的記憶問題,可以通過不同方法來實現(xiàn)。這里是介紹利用AutoCAD環(huán)境變量的方法來實現(xiàn)對話框記憶功能。因AutoCAD本身的問題,環(huán)境變量超過一定數(shù)量后不能與對話框函數(shù)同時進行,否則會報錯崩潰,該程序需要輸入77個參數(shù),故增加此子程序。
通過if語句,生成環(huán)境變量并預設初始值。
2.2.1.4 對稱斷面控制輸入子程序
道路橫斷面一般為對稱斷面,為方便參數(shù)輸入,增加對稱控制。此子程序系主要配合DCL中的toggle函數(shù),根據(jù)toggle的key值判斷是否對稱輸入。
2.2.1.5 環(huán)境變量賦值與對話框子程序
主要負責提取環(huán)境變量并賦值給對話框內的相應參數(shù)。
至此,程序所需的參數(shù)錄入部分的主要程序已完成。
2.2.2 提取部分-對話框參數(shù)取值程序
DCL對話框中的參數(shù)的類型為字符串,另該程序以cm為單位,比例1:1繪圖,因此對話框參數(shù)取值程序需要解決從對話框將字符串轉換、判斷參數(shù)輸入是否有誤、根據(jù)對話框輸入?yún)?shù)時的單位進行轉換及將新的參數(shù)值儲存于相應的環(huán)境變量內。
2.2.3 繪制部分
2.2.3.1 標注子程序
此子程序含有三個參數(shù)分別為Gpt(標注位置)、Gpta(標注起點)、Gptb(標注終點)。通過entmake函數(shù)可以利用圖元定義數(shù)據(jù)表方便快捷地創(chuàng)建CAD對象。其中,(50.1.5708)為垂直標注,無此項為水平標注。
2.2.3.2 box繪制子程序
此子程序需根據(jù)層的名稱及厚度繪制對應的路面結構圖。為保證繪圖效率及準確性,對于層名及厚度的數(shù)據(jù)使用list格式:((第1層名稱4)(第2 層名稱 6)(第 3 層名稱 8)...)。
2.2.3.3 側緣石繪制子程序
側石、緣石及平石的參數(shù)類似,即長×寬×高,外露高度,倒角半徑。因此子程序的參數(shù)可以為長、寬、高、外露高度,程序的主要解決點在于控制繪制起始點為側緣平與路面的交點處,通過幾何關系完成其余代碼。
2.2.3.4 側石安裝細部圖繪制子程序
此子程序主要解決的問題為根據(jù)側石、平石、墊層厚度及相應的路面結構層厚的幾何關系繪圖。
2.2.3.5 道路橫斷面圖繪制子程序
不同的道路斷面,組成部分也不盡相同,程序的難點在于如何解決這個問題。在這里,筆者提供的解決方案為提供統(tǒng)一模板(如圖(step·1)參數(shù)輸入中的橫斷面示意圖),通過設置相應的部分的寬度來控制是否繪制。
本文通過對市政道路常用圖紙的繪制程序的具體分析與介紹,其研究結論如下:
(1)《路面結構圖》、《側緣石安裝大樣圖》、《路面搭接設計圖》及《道路橫斷面設計圖》通過編程可以實現(xiàn)計算機繪圖,效率提升。
(2)設計圖中的標注樣式、字體樣式、字體高度、注釋文本的行間距等均在程序內設置,圖面整齊。
(3)橫斷面圖中涉及到的車、人、樹、燈桿等素材,可根據(jù)設計公司的要求自行定制,形成自有特色的體系圖。
(4)程序中關于填充樣式的子程序目前還不能解決全部種類的自動填充,需進一步學習研究。