馮宏偉,羅宏
(大同市勘察測繪院,山西大同 037000)
測繪技術(shù)發(fā)展到今天,測繪軟件琳瑯滿目,功能也日趨完善。但由于測繪技術(shù)發(fā)展迅速,服務(wù)領(lǐng)域不斷擴(kuò)大,相關(guān)規(guī)范的出臺和修訂略顯滯后,導(dǎo)致各部門對成果要求也不盡相同。許多針對特定功能的軟件還存在空白,許多現(xiàn)有軟件也需要持續(xù)改進(jìn)。為了適應(yīng)這種需要,作為測繪技術(shù)人員,有必要掌握一種程序設(shè)計語言,并能熟練用于解決測繪生產(chǎn)中的實(shí)際問題,這已逐漸成為測繪界共識。
在建筑物采光分析測繪中,需提供大量建筑物的立面圖,用于建模和后續(xù)采光分析。在以往的生產(chǎn)中,主要依靠在CAD平臺下手工成圖,包括計算圖紙尺寸及比例尺、設(shè)置繪圖環(huán)境、外業(yè)數(shù)據(jù)檢核及平差、繪制及編輯圖形、尺寸標(biāo)注及文字注記、打印及疊圖裝訂等多個環(huán)節(jié)。生產(chǎn)效率低下,且容易出錯。因此,開發(fā)一種自動繪制立面圖的程序顯得尤為迫切。
本文以VB 6.0為開發(fā)環(huán)境,運(yùn)用ActiveX Automation提供的接口進(jìn)行AutoCAD的二次開發(fā),重點(diǎn)闡述了利用VB控制AutoCAD實(shí)現(xiàn)自動繪制立面圖的思路和算法。
AutoCAD是最為流行的計算機(jī)輔助繪圖軟件包,具有強(qiáng)大的圖形編輯功能和開放性,DWG文件格式成為二維繪圖的事實(shí)標(biāo)準(zhǔn)格式,幾乎所有商業(yè)化測圖軟件都選擇AutoCAD作為開發(fā)平臺或提供與之交互的接口。
Autodesk公司從AutoCAD R14版本開始提供了ActiveX Automation對象模型。ActiveX Automation是Microsoft基于部件對象模型(COM)體系結(jié)構(gòu)開發(fā)的一項技術(shù),通過它可以在多種編程環(huán)境中編程訪問Auto-CAD圖形。
ActiveX Automaion提供給控制程序的可編程對象有:圖形對象、類型風(fēng)格對象、結(jié)構(gòu)對象和圖形顯示對象,甚至AutoCAD程序本身也被看做對象。用VB語言編程,將AutoCAD當(dāng)成VB程序中的一個圖形窗口,對其進(jìn)行打開、繪圖、編輯、打印、關(guān)閉等操作十分方便。
VB是目前開發(fā)Windows應(yīng)用程序最為迅速、簡潔的程序設(shè)計語言,具有功能強(qiáng)大、易于掌握的特點(diǎn)。用VB控制AutoCAD開發(fā)自動繪制立面圖的程序,是十分有效的手段和方法。
在分析總結(jié)了大量立面測量實(shí)踐的基礎(chǔ)上,得出如下結(jié)論:
(1)立面測量外業(yè)數(shù)據(jù)采集手段比較靈活,常用的有懸高法、無棱鏡對邊法、無棱鏡采點(diǎn)法、鋼尺量距等,一般根據(jù)實(shí)際情況配合使用,但最終得到的都是一系列尺寸(間距)或懸高(高程)數(shù)據(jù)。
(2)實(shí)際中建筑物立面造型各異,絕大多數(shù)立面圖都可以拆分成:外輪廓線、窗戶(包括陽臺上的窗戶)、底商、屋檐、豎向投影線,起算標(biāo)高、方位注記、尺寸標(biāo)注、說明文字、圖框等。
(3)窗戶是立面圖的主要數(shù)據(jù),可以將其拆分成一組(多組)“橫向間距”和一組(多組)“豎向間距”,便于計算機(jī)描述與實(shí)現(xiàn)。
參考以上結(jié)論,本程序通過讀取用戶錄入的建筑物外立面數(shù)據(jù),經(jīng)程序內(nèi)部一系列運(yùn)算之后,最終利用VB控制AutoCAD實(shí)現(xiàn)自動繪制立面圖。
圖1 流程圖
一個應(yīng)用程序的界面往往決定了該程序的易用性與可操作性,本程序界面設(shè)計遵循以下原則:
(1)以用戶為中心:在系統(tǒng)的設(shè)計過程中,設(shè)計人員要抓住用戶的特征,發(fā)現(xiàn)用戶的需求。
(2)順序原則:即按照處理事件順序、訪問查看順序等設(shè)計人機(jī)對話界面。
(3)功能原則:即按對象應(yīng)用環(huán)境及場合具體使用功能要求,設(shè)計人機(jī)交互界面,滿足特定功能。
(4)一致性原則:界面細(xì)節(jié)美工設(shè)計的一致性使運(yùn)行人員看界面時感到舒適,一致性還能減少他們的操作失誤。
(5)頻率原則:即按照管理對象的對話交互頻率高低,設(shè)計人機(jī)界面的層次順序和對話窗口的顯示位置等。
(6)重要性原則:即按照管理對象在系統(tǒng)中的重要性和全局性水平,設(shè)計人機(jī)界面的主次和對話窗口的位置和突顯性。
(7)面向?qū)ο笤瓌t:即按照操作人員的特征,設(shè)計與之相適應(yīng)和友好的人機(jī)界面。宜以彈出式窗口顯示提示、引導(dǎo)和幫助信息,提高用戶的交互水平和效率。
圖2 窗戶錄入界面
圖3 部件錄入界面
圖4 注記成圖界面
所有窗戶用一組(多組)“橫向間距”和一組(多組)“豎向間距”描述。
“橫向間距”外掛屬性,用“0”和“非0”分別表示“墻體寬度”和“窗戶寬度”?!皺M向間距”表示“窗戶寬度”時,其屬性數(shù)值代表所對應(yīng)的“豎向間距”組號,實(shí)現(xiàn)了“橫向間距”與“豎向間距”的關(guān)聯(lián),從而達(dá)到描述窗戶的目的。
每組“豎向間距”的間距總數(shù)可以不同,但均要求大于等于3個且為奇數(shù),行號從小到大對應(yīng)實(shí)地從頂至底。奇數(shù)行代表“墻體高度”,偶數(shù)行代表“窗戶高度”。即首尾間距均代表“墻體高度”,如一層窗戶下沿緊接地面,或頂層窗戶上沿緊接屋檐,則首尾間距輸入0值。
考慮到豎向間距錄入時,外業(yè)數(shù)據(jù)可能為懸高(高程)數(shù)據(jù),程序設(shè)計了懸高(高程)數(shù)據(jù)錄入窗口,錄入“豎向懸高”實(shí)時自動計算“豎向間距”。自動繪圖時只讀取“豎向間距”,實(shí)現(xiàn)了“豎向懸高”與“豎向間距”的兼容。
所有表格錄入窗口均可動態(tài)增刪表格的行列數(shù),既減少了內(nèi)存占用,又實(shí)現(xiàn)了表格行、列數(shù)的無限制。
當(dāng)窗戶的“橫向間距”或“豎向間距”多于一組時,各組數(shù)據(jù)數(shù)值之和應(yīng)相同。不相同時,程序?qū)⒆詣訃?yán)密平差,平差算法類似于水準(zhǔn)平差。
當(dāng)用戶鍵入了“立面總長”或“立面總高”時,程序以鍵入值為標(biāo)準(zhǔn)值進(jìn)行平差,否則以各組“橫向間距”或“豎向間距”數(shù)值之和的平均值作為標(biāo)準(zhǔn)值進(jìn)行平差。
各種信息系統(tǒng)和平臺主要通過云計算等技術(shù)實(shí)現(xiàn)對海量數(shù)據(jù)的處理分析,從而快速形成估價報告等各類產(chǎn)品,故估價機(jī)構(gòu)及人員的工作重心也會轉(zhuǎn)移到數(shù)據(jù)的采集、分析和管理等,估價師也得以從機(jī)械重復(fù)的作業(yè)方式中解放,轉(zhuǎn)向新型綜合咨詢業(yè)務(wù)的專研,提升自身技能的同時也為估價機(jī)構(gòu)的細(xì)化、深化發(fā)展奠定技術(shù)基礎(chǔ)。
當(dāng)各組“橫向間距”或“豎向間距”數(shù)值之和與標(biāo)準(zhǔn)值之差的絕對值大于限差時,程序中斷執(zhí)行并提示用戶糾錯。限差支持用戶設(shè)定。
程序預(yù)置 6種比例,分別為:50、100、150、200、250、300,并支持自動比例。
程序預(yù)置52種圖幅,并支持自動圖幅。主要考慮立面圖的特點(diǎn)、打印機(jī)配備和疊圖裝訂方便,限于篇幅在此不一一羅列。
程序計算圖紙尺寸和比例尺的算法分四種情況:自動圖幅自動比例、自動圖幅手動比例、手動圖幅自動比例、手動圖幅手動比例。
無合適預(yù)置比例時,首先計算滿足要求的“最小比例尺”,之后取比“最小比例尺”小的且為10的倍數(shù)的比例尺作為選定比例尺。
無合適預(yù)置圖幅時,首先計算滿足要求的“最小圖紙尺寸”,之后取比“最小圖紙尺寸”大的且為10 mm的倍數(shù)圖紙尺寸作為選定圖紙尺寸。
建筑物平面圖中的突出或凹入部分,在立面圖中表現(xiàn)為一條較長的豎線,作者暫把它稱為豎向投影線。
前面提到:“橫向間距”外掛屬性,用“0”和“非0”分別表示“墻體寬度”和“窗戶寬度”。“橫向間距”表示“窗戶寬度”時,其屬性數(shù)值代表所對應(yīng)的“豎向間距”組號。
我們一般在第2組“豎向間距”中輸入陽臺上窗戶的尺寸,其余組輸入主體上窗戶尺寸,這樣有利于下面豎向投影線的輔助判定工作。
經(jīng)分析豎向投影線的規(guī)律發(fā)現(xiàn):豎向投影線多出現(xiàn)在“墻-墻”、“窗戶-墻-陽臺”或“陽臺-墻-窗戶”、“墻-陽臺”或“陽臺-墻”等處。對應(yīng)的“橫向間距”外掛屬性為:“0-0”、“1-0-2”或“2-0-1”、“0-2”或“2-0”。
由此,程序開發(fā)了3種輔助判定方式:00判定、102或201判定、02或20判定,實(shí)現(xiàn)了豎向投影線位置的輔助判定。
輔助判定適用于現(xiàn)實(shí)中大多數(shù)情況,但不排除例外。為此,豎向投影線位置還支持用戶鍵入和修改。
在定義尺寸標(biāo)注樣式之后,首先標(biāo)注橫向間距,之后標(biāo)注豎向間距,相同的間距只標(biāo)注一組。
在標(biāo)注豎向間距時,先標(biāo)注外輪廓線兩側(cè)間距。當(dāng)間距多于一組,且僅標(biāo)注兩側(cè)間距無法代表所有間距組時,程序?qū)⒈闅v所有窗戶與窗戶之間的間隙寬度,優(yōu)先標(biāo)注在間隙較寬處。程序自動記錄已占用間隙,防止多組間距標(biāo)注位置沖突。
通過獲取尺寸標(biāo)注數(shù)值,及其相鄰標(biāo)注數(shù)值,計算字符位數(shù)及寬度,并判斷標(biāo)注文字是否壓蓋,實(shí)現(xiàn)尺寸標(biāo)注文字智能移位。
精心設(shè)計了工程文件的數(shù)據(jù)格式,支持保存工程和打開工程及另存為功能。
外業(yè)可使用PDA記錄,無需開發(fā)專用軟件,使用記事本即可,內(nèi)業(yè)可下載txt格式工程文件。通過本程序讀入txt格式工程文件,實(shí)現(xiàn)測繪無紙化和內(nèi)外業(yè)一體化。
工程文件為明碼文件,方便用戶編輯修改和存檔。
通過對數(shù)字、字母、小數(shù)點(diǎn)、負(fù)號等字符的錄入限制,使所有可錄入數(shù)據(jù)的表格或文本框均實(shí)現(xiàn)了防錯錄功能。
即使錄錯,程序?qū)崟r顯示豎向各列總高及各列平均總高、橫向總長,通過查看分析可快速發(fā)現(xiàn)錯誤。并且在繪制立面圖之前,程序會對錄入的數(shù)據(jù)進(jìn)行全面檢查,并提示可能的錯誤原因。
(1)自動繪制疊圖參考線和注明圖幅尺寸,方便用戶打印裁圖及裝訂。
繪制疊圖參考線的算法:經(jīng)分析日常采光分析測繪報告中立面圖的一般疊法,以標(biāo)準(zhǔn)A4紙裝訂為準(zhǔn),在立面圖內(nèi)外圖廓之間繪制短線,虛線代表正折,實(shí)線代表反折。
(2)通過控制繪圖選項,靈活搭配繪制立面各部件,結(jié)合支持繪圖基點(diǎn)功能,實(shí)現(xiàn)對復(fù)雜立面的多次疊加繪制,例如錯層等情況。
(3)設(shè)置繪圖環(huán)境,包括圖層、顏色、線寬、文字樣式、尺寸標(biāo)注樣式等,均由代碼控制執(zhí)行,不依賴于CAD模板,可移植性強(qiáng)。
圖5 立面圖成果略圖
掌握利用VB控制提供ActiveX Automation接口的軟件(如 Excel、Word、Access、AutoCAD 等)的技術(shù),可大大縮短軟件開發(fā)周期,對于解決測繪生產(chǎn)中的實(shí)際問題十分有效。
本文結(jié)合作者測量實(shí)踐及實(shí)際開發(fā)經(jīng)驗,介紹了利用VB控制AutoCAD實(shí)現(xiàn)自動繪制立面圖的思路和算法,旨在拋磚引玉。因源代碼較長(約8 000行),限于篇幅故沒有羅列。
[1]張晉西.Visual Basic與AutoCAD二次開發(fā)[M].北京:清華大學(xué)出版社,2002
[2]許謖.Visual Basic應(yīng)用與開發(fā)案例教程[M].清華大學(xué)出版社,2005
[3]王峰,陳杰.軟件測試的藝術(shù)[M].北京:機(jī)械工業(yè)出版社,2006
[4]Microsoft公司.Microsoft Visual Basic 6.0控件參考手冊[M].北京:希望電子出版社,1999
[5]Microsoft公司.Microsoft Visual Basic 6.0語言參考手冊[M].北京:希望電子出版社,1998
[6]Microsoft公司.Microsoft Visual Basic 6.0程序員指南[M].北京:希望電子出版社,1998