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