Autodesk公司的AutoCAD軟件廣泛地應(yīng)用于設(shè)計(jì)領(lǐng)域。AutoCAD作為強(qiáng)大而專業(yè)的工程繪圖軟件,近幾年來在工程地質(zhì)制圖方面也得到了廣泛應(yīng)用,如鉆孔柱狀圖、剖面圖等。但由于CAD本身的原因以及地質(zhì)圖件的特殊性,完全依賴CAD而不借助第三方軟件或?qū)AD進(jìn)行二次開發(fā),實(shí)現(xiàn)地質(zhì)圖件的計(jì)算機(jī)化也是一件非常困難的事情。好在CAD是一個(gè)靈活而又開放的系統(tǒng),它提供了許多開放式的接口,允許用戶通過這些接口對CAD進(jìn)行二次開發(fā),以滿足不同用戶的需要。
在AutoCAD R14以前的版本中,最常用的開發(fā)工具是AutoLisp和ADS,這兩種開發(fā)工具都不適應(yīng)當(dāng)前可視化編程的需要。幸運(yùn)的是,在AutoCAD R14版本中,Autodesk公司在AutoCAD中加入了ActiveX自動化服務(wù)功能(ActiveX Automation server capabilities),使得用戶可以通過可視化編程工具,如Visual Basic(以下簡稱VB)、Delphi等對AutoCAD進(jìn)行二次開發(fā),不但提高了工作效率,也滿足了不同專業(yè)的需要。最近我院開發(fā)了“工程地質(zhì)CAD繪圖系統(tǒng)”軟件,榮獲本單位優(yōu)秀軟件三等獎。該系統(tǒng)我們以AutoCAD R14為平臺,VB為開發(fā)工具,應(yīng)用ActiveX技術(shù)對AutoCAD進(jìn)行了二次開發(fā)。本文簡略地說明AutoCAD中的ActiveX對象模型結(jié)構(gòu)及對模型對象的編程引用。
1 AutoCAD中的ActiveX對象模型
AutoCAD ActiveX提供了一種機(jī)制,或者說是一種方法,可以供開發(fā)者通過編程手段來操縱AutoCAD。ActiveX是由一系列的對象,按一定的層次結(jié)構(gòu)組成的,每一個(gè)對象都代表了AutoCAD中的一個(gè)明確的功能。每一個(gè)對象本身包含著自己的屬性和方法,通過方法可以實(shí)現(xiàn)對象的一些操作,如控制CAD的啟動,打開一個(gè)文檔,一條直線的生成。而屬性則是對象自己本身所具有的一些性質(zhì),如一個(gè)文本對象,它的屬性有文本的高度,寬度、文本的顏色,所在層等。應(yīng)用程序正是通過對AutoCAD暴露的各級對象的方法和屬性的引用控制AutoCAD工作的。
理解AutoCAD的對象模型是實(shí)現(xiàn)編程的基礎(chǔ)。AutoCAD以層次結(jié)構(gòu)組織對象(對象模型圖可以參考R14版本中的幫助文件)。在頂層是Application對象(即AutoCAD 本身),其他對象均為Application對象的子對象。在Application對象下面是Preferences(優(yōu)先設(shè)置)和Document(文檔)對象,通過Preferences對象可以對AutoCAD Tools>Preferences菜單項(xiàng)中的幾乎每一個(gè)選項(xiàng)進(jìn)行訪問和修改,以獲取或改變AutoCAD的優(yōu)先設(shè)置。Document對象是控制AutoCAD圖形文件的直接對象,它代表某一個(gè)裝入的CAD圖形文件(一般設(shè)為當(dāng)前激活的文件)。Document對象下面有Model Space(模型空間)和Paper Space(圖紙空間)對象及Blocks(塊)、Layers (層)、Plot(出圖)、Selectionsets(選擇集)、 views(視圖)、 utility(功能)等一系列對象(集合),其含義與AutoCAD中相似。Model Space是當(dāng)前圖形文件中圖形實(shí)體,如直線、圓、多義線等的集合,每個(gè)實(shí)體即是一個(gè)對象,可通過屬性和方法改變實(shí)體或生成新實(shí)體。對非圖形實(shí)體,如層(layer)、線形(line type)等的訪問則通過訪問Document對象下面的相應(yīng)的集合類型的子對象,如Layers 、LineTypes等來實(shí)現(xiàn)。集合類型的對象可以使用VB中所有的集合操作方法。Plot對象提供了訪問Plot對話框中各選項(xiàng)的橋梁,使應(yīng)用程序具有用不同方式控制AutoCAD出圖的能力。Utility對象使用戶在AutoCAD命令行與CAD交互成為可能,通過它可以處理整型、浮點(diǎn)型、字符型等用戶輸入,還可以接受點(diǎn)(Point)或角(Angle)等AutoCAD的特殊量。以上簡要地說明了CAD中的對象及其層次結(jié)構(gòu)關(guān)系,有了這些理解對編程控制CAD就不難了。
2 AutoCAD對象的使用
2.1 AutoCAD application對象
如前所述,Application對象位于AutoCAD層次對象結(jié)構(gòu)的頂層,它代表AutoCAD自身,所有的應(yīng)用程序必須從Appliction對象的建立開始。
Dim aCADapp As Object '建立Application對象
Dim aCADdoc As Object '建立Document對象
Dim mospace As Object '建立Model Space 對象
On Error Resume Next
Set aCADapp = GetObject(, "autoCAD.application")
If Err Then
Err.Clear
Set aCADapp = CreateObject("autoCAD.application") ‘
If Err Then
MsgBox Err.Description
Exit Sub
End If
End If
Set aCADDoc = aCADApp.ActiveDocument
上一語句是設(shè)aCADdoc為當(dāng)前圖形文檔。
Set aCADutil = aCADDoc.Utility '與用戶交互
aCADApp.Visible = True ‘此語句是使CAD可見。
Set mospace = aCADdoc.ModelSpace 設(shè)置mospace為當(dāng)前圖形文檔的模型空間。
以上程序段是應(yīng)用程序初始化的過程,即選擇性地啟動AutoCAD。如果CAD已經(jīng)啟動則跳此過程,反之則初始化啟動CAD。一般對AutoCAD圖形文檔的操作,主要是與Application、Document、Utility和Model Space等對象發(fā)生關(guān)系。
Application對象是一系列對象的父對象,可以通過它的屬性設(shè)置來改變AutoCAD的窗口設(shè)置。如下面代碼:
aCADapp.Top=100 '設(shè)置AutoCAD窗口的位置
aCADapp.Left=200
aCADapp.Height=1000 '調(diào)整AutoCAD窗口的大小
aCADapp.Width=800
2.2 Document對象
(1) 對文件的操作
Document對象提供了大多數(shù)AutoCAD軟件中有關(guān)文件的功能,可以通過它在AutoCAD中新建(New)、打開(Open)、輸出(Export)、輸入(Import)等文件功能操作。編程時(shí)先把Document對象設(shè)為Application對象的 ActiveDocument屬性,以返回當(dāng)前活動的圖形文檔。例:
Set aCADdoc=Application.ActiveDocument
請看下面的例子對文件的操作:
Dim Docname As String
Docname = "e:tempzk01.dwg"
If Dir(docname) <> "" Then
aCADdoc.Open docname '如果文件存在則打開CAD文件
Else
aCADdoc.new("aCAD") '若不存在則以aCAD.dwt為模板建立一個(gè)新文件。
End If
把當(dāng)前文檔存盤則可以用下面的語句:
if docname<>"" then 'docname不存在時(shí)存盤
aCADdoc.save
else
msgbox “該文件已經(jīng)存在!” '提示該文件已經(jīng)存在
end if
Document對象還提供了兩個(gè)非常有用的方法—SetVariable 和 GetVariable,通過它們可以得到(用GetVariable)或改變(用SetVariable )AutoCAD的系統(tǒng)變量。
如語句:
aCADdoc.SetVariable "Orthomode", 1 '打開正交模式
dim CADver As String
CADver=aCADdoc.Getvariable("ACADver") '獲取AutoCAD的版本號
(2) 對圖形實(shí)體的操作
圖形實(shí)體是指所有CAD的圖元物體,如點(diǎn)(point)、線(Line)、圓(Circle)、弧(Arc)、文字(Text)等,它們包含于ModelSpace和PaperSpace集合對象中。對實(shí)體的操作總要從這兩個(gè)集合開始,向下查找相應(yīng)實(shí)體所屬的方法或?qū)傩?。而圖形實(shí)體的操作包括實(shí)體的生成、編輯和查詢。 ModelSpace與PaperSpace是所有圖形實(shí)體的集合,因此要取得圖中的某一實(shí)體,一般采用遍歷查找的方法,下面代碼是CAD圖形實(shí)體的生成、編輯實(shí)體或查詢。
生成一條直線的代碼:
Dim lineobj As Object
Dim pt1(0 To 2) As Double
Dim pt2(0 to 2) as double
Pt1(0)=0#
Pt1(1)=0#
Pt1(2)=0#
Pt2(0)=100#
Pt2(1)=50#
Pt2(2)=0#
SetlineObj = moSpace.Addline(pt1,pt2)
‘畫從坐標(biāo)點(diǎn)pt1至坐標(biāo)點(diǎn)pt2的直線
改變這條直線的顏色(假設(shè)直線實(shí)體句柄為"4C")的代碼:
Dim tobj As object
Set tobj=aCADdoc.HandletoObject("4C")
tobj.Color=acRed ‘
tobj.Update
查詢圖形文件中所有實(shí)體的實(shí)體名、實(shí)體句柄、顏色、所在層、線形等參數(shù),如下面的代碼所示:
Dim ent As Object
Dim msgStr, NL As String
Dim I as Integer
NL = Chr(13) & Chr(10) ‘回車與換行
I=1
For Each ent in mospace
msgStr = "第" & Format(I) & "個(gè)實(shí)體信息" & NL & NL
msgStr = msgStr & "實(shí)體名: " & ent.EntityName & NL
msgStr = msgStr & "所在層: " & ent.Layer & NL
msgStr = msgStr & "顏色: " & Str(ent.Color) & NL
msgStr = msgStr & "線形: " & ent.Linetype & NL
msgStr = msgStr & "句柄: " & ent.Handle & NL
MsgBox msgStr
I=I+1
Next
相關(guān)文章
- 2021-09-08全國專業(yè)技術(shù)人員計(jì)算機(jī)應(yīng)用能力考試用書 AutoCAD2004
- 2021-08-30從零開始AutoCAD 2014中文版機(jī)械制圖基礎(chǔ)培訓(xùn)教程 [李
- 2021-08-30從零開始AutoCAD 2014中文版建筑制圖基礎(chǔ)培訓(xùn)教程 [朱
- 2021-08-30電氣CAD實(shí)例教程AutoCAD 2010中文版 [左昉 等編著] 20
- 2021-08-30高等院校藝術(shù)設(shè)計(jì)案例教程中文版AutoCAD 建筑設(shè)計(jì)案例
- 2021-08-29環(huán)境藝術(shù)制圖AutoCAD [徐幼光 編著] 2013年P(guān)DF下載
- 2021-08-29機(jī)械A(chǔ)utoCAD 項(xiàng)目教程 第3版 [繆希偉 主編] 2012年P(guān)DF
- 2021-08-29機(jī)械制圖與AutoCAD [李志明 主編] 2014年P(guān)DF下載
- 2021-08-29機(jī)械制圖與AutoCAD [陶素連,周欽河 主編] 2013年P(guān)DF下
- 2021-08-28機(jī)械制圖與AutoCAD 繪圖 [宋巧蓮,徐連孝 主編] 2012年P(guān)