高 策,韓廣暉,李 淼,陳冰洋
(中鐵工程設(shè)計咨詢集團(tuán)有限公司橋梁工程設(shè)計研究院,北京 100055)
圖紙是工程設(shè)計成果的主要表達(dá)形式,繪圖工作量大是橋梁設(shè)計工作的重要特點。從經(jīng)濟性、通用性等角度出發(fā),原鐵道部及國鐵集團(tuán)編制了大量的通用參考圖,這在一定程度上減少了設(shè)計工作量,但是由于工程條件千差萬別,通用圖無法做到面面俱到,需要單獨繪制圖紙的工作在具體設(shè)計中仍占有較大的比例,繪圖工作常常成為制約設(shè)計進(jìn)度的瓶頸。
對于橋梁設(shè)計企業(yè)管理者而言,如何減少繪圖工作量、降低設(shè)計人員勞動強度,提高工作效率,把有限的人力投入到專業(yè)性更強、技術(shù)水平更高的設(shè)計研究工作中去,這是需要思考的現(xiàn)實問題。另一方面,通過編程等方法減少重復(fù)勞動、有利于身體健康、有利于技術(shù)進(jìn)步,這對于工程師而言也具有很強的吸引力。
目前國內(nèi)土建行業(yè)主要采用AutoCAD軟件繪圖。AutoCAD(Autodesk Computer Aided Design)是Autodesk(歐特克)公司開發(fā)的自動計算機輔助設(shè)計軟件,是土木工程師們最熟悉的繪圖軟件。
一般而言,Autodesk公司開發(fā)AutoCAD軟件是一次開發(fā),由AutoCAD的用戶們開發(fā)的、在AutoCAD程序界面上應(yīng)用的插件程序即為二次開發(fā)。其本質(zhì)就是針對繪圖、計算規(guī)則明確、可分類、可標(biāo)準(zhǔn)化的結(jié)構(gòu),通過各種計算機語言編制程序,將這些程序加載在AutoCAD軟件中,使用程序?qū)崿F(xiàn)繪圖及計算等功能。在使用時,只需一個或幾個命令就可以運行程序,自動完成繪圖、計算過程。顯而易見,這不僅提高了設(shè)計效率,也提高了準(zhǔn)確性。
AutoCAD的二次開發(fā)方式包括AutoLISP/Visual LISP、VBA、ObjectARX等,各種開發(fā)方式的比較見圖1。其中,ObjectARX擁有與AutoCAD自身幾乎相同的編程接口和控制能力,是目前最為強大的二次開發(fā)方式。這種開發(fā)方式難度大,但是程序運行的效率最高、運行速度較快[1-5]。一般采用C++或C#語言進(jìn)行ObjectARX二次開發(fā),主要介紹基于C++[6-8]的ObjectARX二次開發(fā)。
圖1 各種開發(fā)方式的比較[1]
ObjectARX二次開發(fā)程序后綴一般為“arx”。除了前述的運行效率高、速度快的特點外,ObjectARX二次開發(fā)程序與AutoCAD版本存在對應(yīng)關(guān)系。要針對不同的使用場景分別編譯生成32位、64位及不同AutoCAD版本的ARX文件。
一般一個DWG文件即可認(rèn)為是一個圖形數(shù)據(jù)庫,這個圖形數(shù)據(jù)庫的組成見圖2。圖2中的實體即是各種圖元,如直線、圓弧、文字等。由于通過程序生成各種實體需要使用塊表及塊表記錄,所以塊表和塊表記錄是編程中經(jīng)常使用的部分。每個圖元都有對應(yīng)的ID,可以通過ID找到相應(yīng)的圖元獲取或修改圖元的信息,如坐標(biāo)、顏色等。
圖2 圖形數(shù)據(jù)庫的組成
需要加載及使用編譯完成的ObjectARX應(yīng)用程序時,可以用APPLOAD命令彈出對話框后選擇相應(yīng)ARX文件,也可選中相應(yīng)ARX文件后按住拖放至AutoCAD窗口,之后在AutoCAD命令行鍵入對應(yīng)的ARX命令即可開始使用。
基于C++的ObjectARX開發(fā)的工具和軟件包括AutoCAD、Microsoft Visual Studio、ObjectARX開發(fā)包(Software Development Kit即SDK),這3部分之間的版本存在一定的對應(yīng)關(guān)系。其中SDK是由Autodesk公司提供的,可以在Autodesk的官方網(wǎng)站上下載,它包含各種庫文件、頭文件、幫助文件及程序示例等。SDK中的庫文件、頭文件是由Autodesk的軟件工程師們已經(jīng)開發(fā)好的各種成熟的類、函數(shù)或子程序。對于一般開發(fā)者而言,只需在項目文件中包含并使用這些庫文件即可,避免了花費大量時間研究基礎(chǔ)層面的功能實現(xiàn),大大提高了編程效率,這也是二次開發(fā)的主要特點。
對于Microsoft Visual Studio,一般需要在項目的選項“VC++目錄-包含目錄”、“VC++目錄引用目錄”、“C++-常規(guī)-附加包含目錄”、“連接器-附加庫目錄”中設(shè)置包含文件或庫文件。
MFC(Microsoft Foundation Classes)是微軟基礎(chǔ)類庫的簡稱,是微軟公司提供的C++類庫,主要封裝了大部分的Windows API函數(shù),對于ObjectARX 二次開發(fā)而言,如果需要建立可視化操作界面會用到MFC[8]。
ARX程序的命令是使用程序的入口,命令可以通過命令助手添加,也可手動在acrxEntryPoint.cpp中添加,與其他C++程序相同,命令的字母需要區(qū)分大小寫。
根據(jù)一般繪圖習(xí)慣,結(jié)構(gòu)輪廓線、鋼筋采用不同的顏色,通過設(shè)定的打印樣式(.ctp文件)打印為不同線寬。不同顏色的線分別位于不同圖層。同理,實線、虛線、點劃線、文字等也分別位于不同圖層。程序加載后,對當(dāng)前DWG文件圖層進(jìn)行初始化,根據(jù)可能使用到的所有線型、顏色創(chuàng)建多種圖層并將圖層分別命名。
程序生成相關(guān)線條及文字時,各圖元均默認(rèn)隨圖層設(shè)置(Bylayer),讀入圖層名參數(shù),即可完成顏色、線型的設(shè)置。
比例尺是繪圖的重要參數(shù)。程序一般默認(rèn)為A3或A2圖紙,讀入主要輪廓尺寸后,按照正視圖,側(cè)視圖、俯視圖、數(shù)量表等4部分布置,圖紙內(nèi)容所占高度即為正視圖與俯視圖豎向尺寸之和、水平長度即為正視圖與側(cè)視圖之和,在此之外再適當(dāng)考慮各部分之間的空隙和標(biāo)注所占空間,即可基本確定圖紙內(nèi)容的范圍。
程序設(shè)有“Scale”參數(shù),此參數(shù)為0時即自動識別比例,輸入其他數(shù)值即為自定義比例尺,如輸入80,即表示比例尺為1∶80。比例尺確定后,程序按比例尺生成對應(yīng)的文字樣式、標(biāo)注樣式并命名,后續(xù)程序生成的全部文字和標(biāo)注都采用相應(yīng)文字樣式、標(biāo)注樣式。另外,引線、鋼筋圓點繪制也要引用比例尺參數(shù),使其顯示效果與圖幅匹配。
群樁承臺基礎(chǔ)是鐵路橋梁最為常見的基礎(chǔ)形式,本程序可以繪制單層矩形、雙層矩形、單層切角、雙層切角4種類型的承臺鋼筋圖。
本程序采用填數(shù)據(jù)卡模式,數(shù)據(jù)卡為TXT格式文件,各數(shù)據(jù)在數(shù)據(jù)卡文件中的順序是固定的并配有說明書。使用時鍵入SDPC命令(命令為Steel Drawing of Pile Cap的縮寫),激活打開文件對話框,使用該對話框打開任意路徑下已經(jīng)填好的TXT數(shù)據(jù)卡文件,瞬間即可完成承臺鋼筋圖繪制。
程序可以通過一次運行命令實現(xiàn)多種類型的多個承臺鋼筋批量繪制,底面鋼筋根據(jù)受力需要可單肢、雙肢、單雙肢交錯以及單層、多層布置,繪圖成果見圖3、圖4。
圖3 程序繪制的單層矩形承臺鋼筋圖(部分)(單位:mm)
圖4 程序繪制的雙層承臺(下層切角)鋼筋圖(部分)(單位:mm)
對于不同類型的承臺分別采用參數(shù)KC控制,為了便于理解,KC取值分別為14、24、18、24,其中10位數(shù)1或2表示單層或雙層承臺,個位數(shù)4或8表示4邊(矩形)或8邊(矩形切角)承臺。
程序讀入承臺長、寬、高等尺寸后繪制承臺構(gòu)造。根據(jù)不同的承臺類型梳理為7或11種類型鋼筋[9-11],其中單層承臺為7種鋼筋、雙層承臺為11種鋼筋,依次讀入每種鋼筋的直徑、間距、彎鉤長度參數(shù)及保護(hù)層參數(shù)后依次繪制各類型鋼筋。其中考慮到規(guī)范的更新[12]及工程具體條件的不同,程序?qū)iT提供了可供使用者輸入的鋼筋彎鉤長度參數(shù)。
三視圖的布置圖繪制完畢后進(jìn)入計算數(shù)量環(huán)節(jié)。程序采用二維數(shù)組“amount”記錄各類型鋼筋的編號、直徑、單根長度、合計長度、延米重、總重等參數(shù),數(shù)組的行數(shù)即為鋼筋類型數(shù),數(shù)組列數(shù)在最終鋼筋數(shù)量表的列數(shù)上適當(dāng)增加,增加的列數(shù)用于存儲彎鉤長度、變長度鋼筋的最大值、最小值、平均值等過程計算變量。之后繪制數(shù)量表的縱橫線,通過二重嵌套循環(huán)將二維數(shù)組“amount”中的鋼筋編號、直徑、數(shù)量等數(shù)值轉(zhuǎn)換為CString變量添加到數(shù)量表中的相應(yīng)位置。
通過“detail”函數(shù)繪制鋼筋大樣,由于四種承臺的鋼筋大樣形狀存在一定差別,該函數(shù)共包括四種形式,分別對應(yīng)四種承臺類型,繪制直線(含半圓彎鉤及直角彎鉤)、矩形、切角矩形等不同鋼筋大樣,二維數(shù)組“amount”作為參數(shù)被引用到“detail”函數(shù)中,大樣函數(shù)“detail”繪制大樣圖形后將“amount”中的鋼筋編號和長度添加到大樣附近相應(yīng)位置。
程序設(shè)有繪制墊層和樁基的參數(shù)“pile_onoff”,該參數(shù)為1、2、3時分別對應(yīng)行列式、梅花式、自定義布樁等三種樁基布置形式。
另外考慮到部分項目有按含筋量確定豎向架立鋼筋的習(xí)慣。當(dāng)架立鋼筋的直徑參數(shù)輸為0時,即可通過含筋量(kg/m3)計列架立鋼筋的數(shù)量,含筋量的數(shù)據(jù)卡位置與原鋼筋間距參數(shù)相同。
程序主要流程圖見圖5。
圖5 承臺鋼筋圖繪圖程序SDPC流程
本程序能夠繪制常見客貨共線T梁[13-15]對應(yīng)圓端形橋墩[16-17]的墊石、托盤頂帽、墩身鋼筋圖。墩身箍筋布置可適應(yīng)不同地震烈度,自由輸入鋼筋直徑、間距,可生成布置圖、大樣圖、數(shù)量表等內(nèi)容。同承臺鋼筋圖繪圖程序一樣,可自動判斷圖紙比例尺,也可自定義比例尺,圖紙內(nèi)容均與比例尺對應(yīng)。軟件出圖后手動套用項目圖框后即可成圖。程序主要流程見圖6,繪圖成果見圖7。
圖6 橋墩鋼筋圖繪圖程序SDPR流程
圖7 橋墩鋼筋圖繪圖程序生成的頂帽鋼筋圖(部分)(單位:mm)
橋墩構(gòu)造及布筋原則主要參照通橋[2012]4104、通橋[2017]4104圓端形實體橋墩,即矩形頂帽、圓端形托盤、圓端形墩身,墩頂不設(shè)過人洞、墩身不設(shè)泄水管凹槽,地震區(qū)箍筋加密段設(shè)于墩底。后期擬升級為兼容城際[18]、高速鐵路圓弧托盤、圓端頂帽、設(shè)泄水槽、墩頂檢查槽等多種類型橋墩[19]的鋼筋圖繪圖程序。
本程序同樣采用填數(shù)據(jù)卡模式。使用時鍵入SDPR命令(該命令為Steel Drawing of Pier的縮寫),激活打開文件對話框,打開任意路徑下已經(jīng)填好的TXT數(shù)據(jù)卡文件,瞬間即可完成橋墩鋼筋圖繪制。
圖紙數(shù)量多、打印工作量大是橋梁設(shè)計的重要特點。目前一般打印流程為:圖紙繪制完畢→編輯圖名圖號→開始打印PLT文件→手動逐張框選圖紙打印范圍→選擇打印樣式→針對不同圖紙輸入縮放比例→按圖號圖名為PLT文件命名(如鄭濟施橋-21-01-全橋布置圖第1張共2張.PLT)→選擇保存路徑→印刷硫酸圖及轉(zhuǎn)換DWF或PDF文件匯總歸檔。
打印環(huán)節(jié)大部分是機械的重復(fù)勞動,但工作量不可小視。尤其在實際工作中常常遇到圖名圖號修改、階段名稱由咨詢稿改正式施工圖等情況時,打印工作量更是成倍增加。
對于橋梁設(shè)計者而言,打印是設(shè)計工作的最后一步,尤其在設(shè)計周期緊張的情況下,打印占用了有限的設(shè)計時間,也耗費了設(shè)計者的精力,成為急需解決的“痛點”。
對于程序開發(fā)者而言,圖紙的打印規(guī)律性很強,易于通過代碼編制相應(yīng)規(guī)則,通過程序解放勞動力,是編程的理想對象。筆者開發(fā)的QPLT程序,可一次性打印多個DWG文件模型空間中的多張圖紙并生成PLT,可自動識別圖紙內(nèi)容中的圖名圖號并命名,生成的PLT文件可用于轉(zhuǎn)換DWF、PDF等文件或打印蠟圖。程序界面見圖8。
圖8 批量打印QPLT程序界面
使用前,需要設(shè)置圖紙外框,即將需要打印的每個DWG文件里的每張需要打印的圖紙外框,采用閉合矩形繪制(使用矩形rec命令或多義線PL命令均可),此圖框可加長、可自由設(shè)置比例,但需要單獨放在一個圖層里。
使用時加載程序,在AutoCAD中輸入命令“qqq”,回車隨即彈出打印對話框,在對話框內(nèi)選擇添加準(zhǔn)備打印的DWG文件、選擇打印機及紙張、相應(yīng)的打印樣式、填入圖框所在的圖層名,點擊打印。打印出的PLT文件均存放在對應(yīng)DWG文件所在的文件夾下。
當(dāng)需要在打印的PLT文件名前統(tǒng)一添加前綴時,可使用增加前綴功能,比如使用了外部參照的角標(biāo),模型空間中只有圖號尾數(shù)的情況(如文件名統(tǒng)一添加前綴“襄常鄭萬聯(lián)宜配施(咨)橋-24-”)。如果希望生成的文件名不包含長串的圖號,可以選擇不包含前綴,程序會將文件名中最后一個“-”前面的文字刪除,即只保留圖號的尾數(shù)。
設(shè)計人員繪圖時,圖號、頁碼按理論位置放置,圖名位置也不要過分偏離。程序根據(jù)文字相對于外圖框的位置檢索判斷并獲取圖名、圖號、頁碼(頁碼指“第x張共n張”)。程序主要適用于筆者所在單位使用頻率較高的4種三大類圖簽角標(biāo):工點橋(院審定及專業(yè)審定)、工點橋(集團(tuán)審定)、通用圖[20](設(shè)計復(fù)核審核)。其中工點橋的圖名都在最下方,圖名文字的下緣(即插入點)位置不高于圖9的虛線,也不要低于圖紙內(nèi)框;通用圖主要的圖名在中間,文字的下緣(即插入點)不超出圖10兩條橫向虛線的范圍。
程序的主要原理是通過使用者輸入的圖框所在的圖層名獲得圖層的layerId;之后使用迭代器pBlkTblRcdItr遍歷模型空間塊表記錄,對于符合layerId的多段線,通過循環(huán)將圖框多段線的左上和右下角點坐標(biāo)(即打印范圍)分別儲存在2個二維數(shù)組中。對于筆者所在單位的幾種典型圖簽角標(biāo)(圖9、圖10),其圖號、圖名、頁碼相對于圖紙外框的位置是固定的。程序結(jié)合使用者選定的圖簽角標(biāo)類型獲取對應(yīng)位置處的圖號、圖名、頁碼,將此信息組合后設(shè)為PLT文件的文件名,從而實現(xiàn)了通過程序批量打印文件并自動編輯文件名的功能。
圖9 典型圖簽角標(biāo)示意一
圖10 典型圖簽角標(biāo)示意二
與軟件工程師相比,土木工程師從事軟件開發(fā)的長處是問題導(dǎo)向性強,能準(zhǔn)確把握程序的使用功能,短處是軟件開發(fā)經(jīng)驗不足、編程語言知識基礎(chǔ)較弱,二次開發(fā)一定程度上彌補了這種不足。
當(dāng)今世界計算機技術(shù)高速發(fā)展,依賴于傳統(tǒng)設(shè)計繪圖手段的鐵路橋梁行業(yè),在計算機軟件提升方面大有可為?;贠bjectARX的AutoCAD二次開發(fā)技術(shù)是十分實用的技術(shù),可以有效降低勞動強度、提高勞動效率。本文涉及的三款程序已在多個項目中應(yīng)用,反響較好,可為相關(guān)二次開發(fā)編程提供借鑒。