周麗云 李裕聰
摘要:簡要介紹了進行AutoCAD二次開發的常用方法和技術特點,并以實例說明了利用VBA實現AutoCAD二次開發的實際價值和意義。
關鍵詞: AutoCAD二次開發 VBA 工程測繪制圖 坐標標注
中圖分類號:K826.16文獻標識碼:A 文章編號:
隨著現代科學技術的迅猛發展,測繪科學也發生了翻天覆地的變化,測繪儀器和測繪技術都有了很大的發展,測繪儀器由原來的光學儀器、機械儀器發展到了電子儀器,圖形繪制由鉛筆平板儀繪制發展到計算機軟件繪制。電子儀器可通過專用傳輸線與計算機直接連接,把野外所采集的數據傳輸進計算機,在計算機中進行數字化成圖。以手工作業為主的測量內業計算與繪圖工作已經可以通過電子儀器、計算機繪圖儀完成。數字化成圖已經成為測圖發展的主流方向。
目前市場上的數字成圖軟件有很多,測繪行業普遍使用的有南方測繪公司的 CASS 系列、廣州開思公司的 SCS 系列,還有北京微遠圖公司的 SV300 系列等軟件,這些軟件多是以AutoCAD為平臺開發的, 它們主要針對的是測繪行業的通用性需求,在大體框架上基本滿足了地形圖、地籍圖等測繪工作的成圖要求。但測繪性質的多樣性,決定了不可能有適合所有測繪性質的數字成圖軟件,在實際工作中,一些制圖工作在許多細節上的操作具有特殊性,并且隨測繪性質和目的的不同而有所不同。而且每個測繪員又各有各的工作方式和習慣.這些通用軟件對一些特殊性質的處理控制和專業性強的特殊要求就不能滿足了,怎樣解決這個問題和要求,使數字化成圖軟件更符合自己工作要求呢?
下面針對本單位經常進行的工程測量成圖工作中遇到的問題,介紹解決基本方法與過程。
一.AutoCAD及二次開發簡介
1. AutoCAD
AutoCAD是美國 Autodesk 公司開發的一個交互式繪圖軟件,具有開放的極其靈活的體系結構,它允許用戶和開發者采用各種方法對其進行定制、擴充和修改,即用戶自己可以對進行二次開發,能最大限度地滿足用戶的特殊要求。
2. 二次開發的途徑
AutoCAD的二次開發途徑主要有兩個,即文件開發和程序開發:
A.文件開發: 文件開發是按照 AutoCAD 提供的方法和文件格式,通過編輯或建立 新的AutoCAD 系統所支持的文件,來開發 AutoCAD,使其滿足用戶特定需要的方法。
(1) DXF 文件接口方式:以ASCII碼文本文件描述它的圖形細節,可以完美的實現與高級語言的連接。但格式非常復雜,應用程序編寫有難度。
(2)SCR 文件接口方式:SCR文件又叫命令腳本文件。它是由一組AutoCAD命令組成的文件。
(3) DWG 文件接口方式:具有打開速度快的優點。但它以機器碼形式存放,一般不能讓高級語言直接讀取。
B.程序開發: 程序開發是指利用 AutoCAD 提供或支持的編程環境和開發工具,通過編寫程序來實現對AutoCAD開發的方法。借助于程序開發,可為 AutoCAD 擴充新的命令或定義,以滿足用戶具體需要。
AutoCAD的二次開發語言主要有:ObjectARX、VisualLisp、VBA(Visual Basic For Application)以及最新的.NET等。其中ObjectARX 基于 VC++平臺,功能非常強大,但其缺點是編程語言復雜, 對開發人員的編程水平要求比較高;VisualLisp與 VBA較為簡單,特別是VBA,編程語句容易理解和交流, AutoCAD內嵌開發平臺,使用方便且運行速度快。
上述開發方法各有優缺點。實際的開發中,可以將多種方法綜合起來,揚長避短,使 CAD系統功能得到最佳的組合,發揮最好的效益。
二. 在工程測繪制圖中的應用
1.業務需求
在工程測繪制圖中,我們常常需要在圖形中將一些特征點(比如:開挖區域的邊線角點)的坐標標注出來,而且需要以引線的方式進行。使用AutoCAD本身提供的現有命令當然也可以進行,但如果需要標注的特征點比較多時,那就要重復進行繁瑣的操作了。
2.解決方案
針對這個問題,我們使用 VBA作為開發工具,編寫了一個小工具。該程序的特點是簡單快速,只需在CAD圖形上點擊特征點和坐標標注位置,即可以以引線的方式將測量坐標標注出來,提高了制圖工作的效率,在實際工作中有比較強的實用意義。主要代碼如下:
Private Sub CmdOK_Click()
FrmMain.Hide '隱藏窗體
Call 初始化 '進行有關層/字體/顏色/線型等的設置
'以下進行坐標標注
StartPt = ThisDrawing.Utility.GetPoint(,vbcr & "請選擇要標注坐標的點: ")
EndPt = ThisDrawing.Utility.GetPoint(StartPt, vbcr & "請選擇引線位置: ")
FxPt = ThisDrawing.Utility.GetPoint(EndPt, vbcr & "請選擇標注方向: ")
字高 = Val(CmbTexth.Text)
xLong = Len(Int(StartPt(1))) '求出標注坐標的整數位個數
yLong = Len(Int(StartPt(0)))
LineLong =IIf( xLong > yLong , xLong, yLong) '求出坐標分隔線的長
Select Case XyD'根據小數位數求出坐標分隔線的長度
Case 0
LineLong = (LineLong + XyD) * 字高
Case 1
LineLong = (LineLong + XyD + 1#) * 字高
Case 2
LineLong = (LineLong + XyD + 2#) * 字高
Case 3
LineLong = (LineLong + XyD + 3#) * 字高
Case 4
LineLong = (LineLong + XyD + 4#) * 字高
Case Else
LineLong = (LineLong + XyD + 3#) * 字高
End Select
If FxPt(0) > EndPt(0) Then'計算引線各點坐標
Pt(0) = StartPt(0): Pt(1) = StartPt(1): Pt(2) = 0#
Pt(3) = EndPt(0): Pt(4) = EndPt(1): Pt(5) = 0#
Pt(6) = EndPt(0) + LineLong: Pt(7) = EndPt(1): Pt(8) = 0#
Else
Pt(0) = StartPt(0): Pt(1) = StartPt(1): Pt(2) = 0#
Pt(3) = EndPt(0): Pt(4) = EndPt(1): Pt(5) = 0#
Pt(6) = EndPt(0) – LineLong: Pt(7) = EndPt(1): Pt(8) = 0#
End If
Set PLine = ThisDrawing.ModelSpace.AddPolyline(Pt) '畫出引線
PLine.Layer = LayerName:PLine.Color = acByLayer:PLine.Update
If FxPt(0) > EndPt(0) Then '計算標注X和Y的標注位置
Pt_v(0) = EndPt(0) + 0.5: Pt_v(1) = EndPt(1) + 0.5
Pt_h(0) = EndPt(0) + 0.5: Pt_h(1) = EndPt(1) - 字高 - 0.5
Else
Pt_v(0) = EndPt(0) – LineLong: Pt_v(1) = EndPt(1) + 0.5
Pt_h(0) = EndPt(0) – LineLong: Pt_h(1) = EndPt(1) - 字高 - 0.5
End If
Dim xText, xxText, yText, yyText As Object'定義標注變量
Set xText = ThisDrawing.ModelSpace.AddText("X=", Pt_v, 字高)'標注”X=”
xText.Layer = LayerName :xText.Color = acByLayer : xText.Update
'計算標注X的位置
Pt_v(0)=IIf( FxPt(0) > EndPt(0), Pt_v(0) + 字高 * 2# ,Pt_v(0) + 字高 * 2#)
'標注X坐標
Set xxText = ThisDrawing.ModelSpace.AddText(Format(StartPt(1), XyFormat), Pt_v, 字高)
xxText.Layer = LayerName :xxText.Color = acByLayer :xxText.Update
Set yText = ThisDrawing.ModelSpace.AddText("Y=", Pt_h, 字高) '標注Y=
yText.Layer = LayerName :yText.Color = acByLayer : yText.Update
'計算標注Y的位置
Pt_h(0)=IIf( FxPt(0) > EndPt(0), Pt_h(0) + 字高 * 2# , Pt_h(0) + 字高 * 2#)
'標注Y坐標
Set yyText = ThisDrawing.ModelSpace.AddText(Format(StartPt(0), XyFormat), Pt_h, 字高)
yyText.Layer = LayerName :yyText.Color = acByLayer :yyText.Update
Unload Me
End Sub
3.程序運行及效果
在AutoCAD集成的VBA 編輯器完成相關的窗體設計和代碼編寫后,按下F5鍵就可以執行程序了,首先出現如下窗體,我們可以在窗體相應欄目設置標注的一些參數。
程序的運行時的窗體
輸入完成后點擊”確定”按鍵,即可轉換到AutoCAD 的模型空間,在事先打開了的圖形上先后點擊特征點位置和標注點位置即可完成測量坐標的標注。效果如下圖。
程序的使用效果
三.結語
本文從工程實用的角度出發,列舉了在工程測繪制圖中快速標注特征點坐標的程序開發的實例,通過給出程序加有對應的中文注釋的主要VBA源碼。介紹了利用VBA如何進行AutoCAD的二次開發,如何編寫適合自己的制圖工具的一般方法。
基于VBA的AutoCAD二次開發方式有很好的實用價值,它可以讓我們很容易地編制出各種有針對性的工具,實現AutoCAD的功能擴展,更好更方便地完成我們的工作。
參考資料:
1. 《AutoCAD 2002/2000 VBA開發指南》,李鳳華 編著,清華大學出版社,2001
2. 《Visual Basic 與 AutoCAD 二次開發》, 張晉西 編著,清華大學出版社, 2002
3. 《AutoCAD 2002 VBA開發技術》, 張國寶 編著,清華大學出版社,2000
4. 《中華人民共和國CAD制圖標準》, 國家技術監督局
5. 《CAD制圖規則》, 國家技術監督局
注:文章內所有公式及圖表請用PDF形式查看。