黃子雄 黃樹賢
(廣州杰賽科技股份有限公司 廣東 廣州 510310)
傳輸線路勘察設(shè)計(jì)工作輸出的圖紙成果中,比較核心的一份是線路施工圖。線路施工圖是設(shè)計(jì)方交給施工方進(jìn)行通信線路工程建設(shè)主要的圖紙。通信線路圖的制作一般采用CAD軟件,以CAD矢量格式繪制,完成后需要打印輸出到紙張裝訂。通信線路的施工圖整幅尺寸通常很大,如用高于比例尺1∶10 000進(jìn)行縮小打印輸出,就不能清晰看到設(shè)計(jì)細(xì)節(jié),這就使得施工圖紙?jiān)诖蛴≥敵鰰r(shí)需要先對圖紙進(jìn)行切圖分幅,再按順序打印。實(shí)踐中打印輸出一般使用1∶3 000到1∶8 000比例尺,輸出到A3、A4、A5等尺寸的紙張上。設(shè)計(jì)人員除了完成線路施工圖的設(shè)計(jì)繪制外,需要花費(fèi)大量的時(shí)間,對繪制好的整幅施工圖紙進(jìn)行切圖分幅。為求達(dá)到每幅圖紙符合格式、大小、美觀等交付要求,設(shè)計(jì)人員需要在CAD矢量圖上反復(fù)進(jìn)行圖紙?jiān)乜蜻x、復(fù)制、粘貼到打印圖框、調(diào)整圖框等操作。同時(shí)還需調(diào)整每個(gè)打印圖框的順序及打印圖框的順序信息,使打印按正確的順序打印輸出,步驟繁瑣,非常耗費(fèi)時(shí)間精力,效率低下。
鑒于此,本文提出了一種基于CAD軟件的擴(kuò)展功能,對CAD矢量格式施工圖自動(dòng)分幅切圖的方法,從而免除繁瑣的手工操作,可以快速、準(zhǔn)確地對通信線路施工圖紙進(jìn)行自動(dòng)切圖分幅。同時(shí),本文還探討研究了該方法在AutoCAD軟件上的具體實(shí)現(xiàn)。
要實(shí)現(xiàn)自動(dòng)分幅,實(shí)際上是通過編寫程序擴(kuò)展原CAD軟件功能,使CAD繪圖軟件能根據(jù)預(yù)先設(shè)定的規(guī)則、算法對大幅矢量圖進(jìn)行切圖分幅,再套到預(yù)置有打印格式的打印圖框上,最后對每幅切圖的順序信息按打印序列進(jìn)行設(shè)置。目前CAD軟件普遍都具備二次開發(fā)的支持能力,尤其以管線施工圖最常用的設(shè)計(jì)軟件AutoCAD為例,它支持Lisp、C、C++、VBA、C#等多種開發(fā)語言,并提供豐富的擴(kuò)展手段。自R17版本后,AutoCAD提供了對Mircosoft.NET架構(gòu)非常全面的支持。使用Mircosoft.NET框架的任何一種語言,均可以對AutoCAD的各項(xiàng)功能進(jìn)行全面的控制,采用面向?qū)ο蟮腁PI可以訪問、控制、管理CAD矢量圖的各種元素對象,是非常理想的AutoCAD二次開發(fā)方式。
通信線路施工圖的內(nèi)容繪制時(shí),主要由路由節(jié)點(diǎn)、連線、附著物及周邊環(huán)境等的矢量圖元元素組成。其中路由節(jié)點(diǎn)(如機(jī)房、電桿、手井、光交箱等),在實(shí)際施工圖中會(huì)通過CAD圖元的屬性被標(biāo)上從小到大的位置編號,這樣就可以確定線路起始點(diǎn)、終點(diǎn)(包括分叉)的方向,從而確定施工圖的路由走向。
進(jìn)行二次開發(fā)擴(kuò)展自動(dòng)化功能時(shí),程序代碼可以訪問到每個(gè)圖元及它的位置屬性,獲得位置編號,這樣就可以實(shí)現(xiàn)分幅切圖后打印次序的確定及順序信息的生成。
1) 通過整幅施工圖上下左右頂點(diǎn)獲得一個(gè)包含所有CAD矢量元素的平面矩形,定義名稱為源施工圖CAD矢量圖矩形(下稱源圖矩形)。
2) 通過要輸出打印的紙張大小,確定打印圖框大小,并可確定此打印圖框上用于展示矢量圖的有效展示區(qū)域,程序以此展示區(qū)域的大小生成一系列小矩形,定義名稱為截圖框,并給予編號以進(jìn)行排序識別。
3) 不斷復(fù)制截圖框并從左上頂點(diǎn)開始,從左到右、從上到下,平鋪到源圖矩形上,直到覆蓋整個(gè)源圖矩形,使得源圖矩形的CAD矢量元素分別落到了每個(gè)截圖框上。
4) 通過程序判斷,剔除掉不含任何矢量元素的截圖框,剩余的截圖框(含有矢量元素)即為初步獲得的分幅切圖。
5) 程序通過施工圖代表路由順序節(jié)點(diǎn)的編號大小,賦予剩余截圖框的排序編號,以此確定出截圖框的順序。
6) 允許人機(jī)交互,由設(shè)計(jì)人員判斷截圖框內(nèi)含矢量圖元素的豐滿程度,對截圖框高度或?qū)挾冗M(jìn)行調(diào)整(調(diào)小)。
7) 程序根據(jù)調(diào)整結(jié)果,可以自動(dòng)對2個(gè)以上的、連續(xù)的截圖框合并為1個(gè)標(biāo)準(zhǔn)大小的截圖框,進(jìn)一步獲得最終的分幅切圖。
8) 程序根據(jù)第7步確定的標(biāo)準(zhǔn)截圖框的數(shù)量,生成相應(yīng)數(shù)量的打印圖框,打印圖框由指北針、信息表及展示區(qū)域組成,其中展示區(qū)域?qū)?yīng)截圖框的分幅切圖的矢量圖形。
9) 程序依次將每個(gè)截圖框內(nèi)容對應(yīng)地復(fù)制到打印圖框的展示區(qū)域,并設(shè)置打印圖框信息表的內(nèi)容。這樣就完成了整個(gè)施工圖自動(dòng)分幅的過程,獲得了有順序的、信息完整的、可直接輸出的打印圖框——也就是分幅出圖需要的最終結(jié)果。
圖1展示了自動(dòng)分幅步驟。
圖1 分幅切圖步驟
獲取整幅CAD矢量施工圖矩形平面(即源圖矩形)的算法比較簡單,只需找到四個(gè)頂點(diǎn)就可以確定一個(gè)矩形。
遍歷源CAD矢量圖,以獲取整個(gè)CAD矢量圖中所有的矢量元素的坐標(biāo)點(diǎn)(X,Y),對所有坐標(biāo)點(diǎn)的X坐標(biāo)及Y坐標(biāo)進(jìn)行比較,分別獲得X坐標(biāo)及Y坐標(biāo)的最小、最大值,確定了源圖矩形的四個(gè)頂點(diǎn)的坐標(biāo),獲得源圖矩形的寬度: 最小的X坐標(biāo)和Y坐標(biāo)minX、minY。即矢量圖左上坐標(biāo)A(minX,maxY),右上坐標(biāo)B(maxX,maxY),右下坐標(biāo)C(maxX,minY),左下坐標(biāo)D(minX,minY)。源圖矩形寬度sWidth為 maxX-minX,源圖矩形高度sHeight為 maxY-minY。
多個(gè)截圖框平鋪后的長度和寬度需要完全覆蓋源圖矩形,這樣才能完全分割源圖矩形的所有矢量元素。
因此算法說明如下:如果(源圖矩形寬度mod截圖框?qū)挾?>0,則:列數(shù)=源圖矩形寬度/截圖框?qū)挾?1,否則:列數(shù)=矢量圖寬度/截圖區(qū)域?qū)挾?;同理,如?源圖高度mod截圖框高度)> 0,則:行數(shù)=矢量圖高度/截圖區(qū)域高度+ 1,否則:行數(shù)=矢量圖高度/截圖區(qū)域高度。
截圖框排序是為了最終輸出分幅打印圖框上的編號,并由此確定打印時(shí)的順序符合整幅施工圖的路由走向,是非常重要的操作。其詳細(xì)方法為:首先,依次遍歷每個(gè)截圖框內(nèi)所有的路由節(jié)點(diǎn)元素并獲得位置編號,選取位置編號最小的值代表該截圖框的順序號。然后,對所有截圖框按其順序號進(jìn)行排序,順序號越小,截圖框排序越靠前。最后,將沒有獲得順序號的截圖框排在最后。
截圖框合并是使連續(xù)多個(gè)(兩個(gè)或以上)經(jīng)過調(diào)整(調(diào)小)的截圖框合并為一個(gè)標(biāo)準(zhǔn)大小的截圖框,其目的是將多個(gè)矢量內(nèi)容較少的分幅合并為一個(gè)分幅,減少分幅的輸出打印,同時(shí)增加圖紙的可閱讀性和美觀度。根據(jù)圖紙輸出經(jīng)驗(yàn),一般橫向內(nèi)容會(huì)多于縱向走向的內(nèi)容。因此,合并算法采用垂直合并優(yōu)先的方式。兩種合并方式的具體內(nèi)容如下:
垂直合并:當(dāng)連續(xù)兩個(gè)或以上截圖框的高度相加小于或等于標(biāo)準(zhǔn)截圖框高度乘以切圖縮放系數(shù),則將連續(xù)的截圖框內(nèi)容從上到下復(fù)制到一個(gè)標(biāo)準(zhǔn)截圖框中。此標(biāo)準(zhǔn)截圖框的順序號取合并連續(xù)的截圖框中的最小編號,同時(shí),將合并連續(xù)截圖框的順序號全置為-1,后續(xù)操作將不再使用。優(yōu)先采用垂直合并后,對相同的截圖框不再需要橫向合并。
橫向合并:當(dāng)連續(xù)兩個(gè)或以上截圖框的寬度相加小于或等于標(biāo)準(zhǔn)截圖框高度乘以切圖縮放系數(shù),則將連續(xù)截圖框內(nèi)容從左到右復(fù)制到一個(gè)標(biāo)準(zhǔn)截圖框中,此標(biāo)準(zhǔn)截圖框的順序號取合并連續(xù)的截圖框中的最小編號,同時(shí),將合并連續(xù)截圖框的順序號全置為-1。
上面算法用到的縮放系數(shù),是用于控制合并后內(nèi)容的比例尺大小的一個(gè)范圍參數(shù)。例如,標(biāo)準(zhǔn)比例尺為1∶3 600,即1張A4紙橫向呈現(xiàn)約1 km,如使用0.8的縮放系數(shù),則比例尺變?yōu)?∶4 500,1張A4紙橫向呈現(xiàn)約1.25 km。
AutoCAD從2010的版本起,提供了豐富的MicroSoft.NetAPI,主要封裝在acdbmgb.dll、acmgd.dll及AcCoreMgd.dll(2014版)中。.Net中編寫AutoCAD插件(AddIn)程序,是采用DLL項(xiàng)目的方式,只需在項(xiàng)目中引用這些相關(guān)dll,就可以通過.NetAPI訪問AutoCad提供的封裝的外包類。實(shí)際C#代碼中,還需要添加命名空間使用的語句,例如:
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
//用于當(dāng)前畫圖矢量圖形的存儲(chǔ)
using Autodesk.AutoCAD.Runtime;
//用于對接二次開發(fā)接口,進(jìn)行插件初始化
using Autodesk.AutoCAD.Geometry;
//構(gòu)建矢量圖形的基礎(chǔ)類,如圓、矩形、多邊形等
對于CAD矢量圖紙的程序,一般過程都是獲取CAD數(shù)據(jù)庫,依次打開塊表、塊表記錄,對實(shí)體進(jìn)行增刪改查的操作,在操作完后關(guān)閉相關(guān)的塊表、塊表記錄。
作為AutoCAD的插件,必須實(shí)現(xiàn)Autodesk.AutoCAD.Runtime的 IExtensionApplication接口及其包含的Initialize與Terminate兩個(gè)函數(shù)。其實(shí)質(zhì)是便于AutoCAD軟件進(jìn)行插件的發(fā)現(xiàn)、加載和清除。
另外,要達(dá)到菜單交互的效果,還需要引用AcCui.dll來實(shí)現(xiàn)自定義的插件菜單,以下為在AutoCad菜單欄加入一個(gè)面板的代碼:
Using Autodesk.AutoCAD.Windows.PaletteSet
PaletteSet myPaletteSet=new PaletteSet(″我的面板″);
基于上文的原理和算法,結(jié)合AutoCAD.NetAPI的二次開發(fā)能力,使用Visual Studio 2013 C#語言作為開發(fā)工具,在AutoCAD 2014實(shí)現(xiàn)了施工圖上自動(dòng)分幅切圖的插件。其主要功能是通過點(diǎn)選該插件上的菜單,可以打開已設(shè)計(jì)好的整幅施工圖,并通過插件菜單完成自動(dòng)生成截圖框切割圖紙、截圖框排序、調(diào)整(交互)、合并及打印圖框的生成。除截圖框需要人工做簡單調(diào)整外,整個(gè)分幅切圖的過程基本能自動(dòng)、快捷地完成。插件及截圖如圖2、圖3所示。
圖2 自動(dòng)分幅切圖插件實(shí)現(xiàn)
圖3 自動(dòng)分幅效果
為檢驗(yàn)自動(dòng)分幅切圖工具的效果,從某規(guī)劃設(shè)計(jì)院選取了幾個(gè)有詳細(xì)進(jìn)行步驟工時(shí)記錄的管線規(guī)劃設(shè)計(jì)項(xiàng)目。這些項(xiàng)目發(fā)生在2015年6月到2017年6月,共計(jì)有約72個(gè)路由段施工圖設(shè)計(jì)任務(wù),總長度約2 500 km,都記錄了分幅出圖步驟所使用的工時(shí)。
在72個(gè)設(shè)計(jì)任務(wù)中,隨機(jī)抽取了20個(gè)作為測試樣本。對這20個(gè)樣本采用自動(dòng)分幅切圖工具對CAD矢量施工圖進(jìn)行分幅切圖,并記錄耗時(shí)。表1為對20個(gè)樣本采用傳統(tǒng)方式和采用自動(dòng)分幅切圖工具分幅耗時(shí)的對比。
表1 傳統(tǒng)手工分幅與工具自動(dòng)分幅耗時(shí)對比
從表1可以清晰看到,采用自動(dòng)分幅切圖的平均耗時(shí)約為傳統(tǒng)手工分幅切圖耗時(shí)的1/5,大幅節(jié)省了施工圖分幅出圖的時(shí)間。
本文針對通信管線規(guī)劃設(shè)計(jì)生產(chǎn)過程中,施工圖紙分幅切圖手工操作效率低的問題,提出了一種可以對CAD矢量格式的大版幅通信線路施工圖進(jìn)行自動(dòng)分幅并輸出到標(biāo)準(zhǔn)圖框進(jìn)行打印的方法,并基于AutoCAD進(jìn)行了實(shí)現(xiàn)研究。經(jīng)過實(shí)際的檢驗(yàn)測試表明,該方法可以大幅改進(jìn)傳統(tǒng)手工效率低的問題,提升施工圖紙的制作效率。研究的下一步工作,可以考慮將此方法的應(yīng)用推廣到通信管線的相近領(lǐng)域,如水利、電力等的施工圖使用。