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