用VB對AutoCAD進行二次開發(fā)_第1頁
用VB對AutoCAD進行二次開發(fā)_第2頁
用VB對AutoCAD進行二次開發(fā)_第3頁
用VB對AutoCAD進行二次開發(fā)_第4頁
全文預覽已結束

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、用VB對AutoCAD進行二次開發(fā)|用VB對AutoCAD進行二次開發(fā)A utoCAD一直是CADT場中的主流產(chǎn)品。隨著 AutoCAD的日益普及,在其上進行二次開 發(fā)的工具也不斷更新。從早期的Auto Lisp、ADS DCL到現(xiàn)在流行的 Object ARXActiveX Automation、Visual Lisp ,均可十分方便地對 AutoCAD進行二次開發(fā)。本文主要討論 關于運用 Visual Basic 對AutoCAD基于ActiveX Automation的二次開發(fā)技術。選用ActiveX 有兩個原因,一是因為Visual Basic 的普及性與易用性,二是采用這種方法進行二

2、次開發(fā)可方便地實現(xiàn)與其它圖形軟件的接口,如與 Solid Works實現(xiàn)實體造型與二 維繪圖的結合,以及根據(jù)用戶的特殊需要開發(fā)出一定功能的軟件。2、 ActiveX Automation 技術AutoCAD中的ActiveX Automation 是微軟公司 ActiveX 規(guī)范的具體應用。它通過基于 ActiveX 的自動化對象,為其他應用程序提供了訪問AutoCAD 內(nèi)部功能的方法,是AutoCAD最新的開發(fā)接口。在運行時,AutoCAD與其他應用程序之間的關系是服務器與客戶的關系,開發(fā)人員使用支持ActiveX 規(guī)范的編程語言( 如 VB、 Dephi 等 ) 能通過訪問AutoCAD的

3、對象模型,把AutoCAD的強大功能集成到應用程序中.AutoCAD的對象模型是 一種樹型結構模型,根為 "AutoCAD Application" , AutoCAD中的所有對象都是 AutoCAD Application的子對象。圖1所示為AutoCAD對象模型的層次結構樹,其中父對象與子對象之間的關系并不是對象繼承關系,而是包含關系。圖 1 AutoCAD 中 ActiveX 對象的總結構圖3、 ActiveX Automation 的使用方法1. Application 對象如果在計算機系統(tǒng)上安裝了AutoCAD,則Windows會自動將其所有的信息注冊到系統(tǒng)注冊表

4、里。那么在啟動Visual Basic 后,用戶可以象調(diào)用VB 自己的對象一樣調(diào)用AutoCAD所提供的 ActiveX。在編程、調(diào)試或運行時至少應該有一個AutoCAD副本在運行??梢酝ㄟ^以下的代碼創(chuàng)建AutoCAD對象。Dim AcadApp as Object 定義一個對象 On Error Resume NextSet AcadApp =GetObject(,"AutoCAD.Application") If Err Then '如果沒有一個 AutoCAD副本在運行 Err.ClearSet AcadApp =CreateObject("Auto

5、CAD.Application")AcadApp.Visable =True '啟動一個 AutoCAD副本并設為可見 If Err Then MsgBox Err.Description 如果失敗,給出錯誤提示 Exit SubEnd If End If 2. Preferences 與 Document對象 與AutoCAD中的Preferences 對話框的作用相同, 通過Preferences 對象可以讀取 或設置AutoCAD的一些基本設置。Preferences對象通過Application 的Preferences 屬性返回。Dim AcadPref as Ob

6、jectSet AcadPref = AcadApp.Preferences比如,用戶可通過Preferences 對象進行如下的設置AcadPref.Cursorsize =100AcadPref.DisplayScreenMenu =acTrueAcadPref.DisplayScrollBars =Check1.valueDocument對象表示AutoCAD中中當前打開的文檔,對AutoCAD中的任何其它操作都 需用到Document對象,該對象可以通過 ActiveDocument屬性返回。Dim AcadDoc as ObjectSet AcadDoc = AcadApp.Acti

7、veDocumentAutoDesk公司使用了集合的概念。在Document對象中有14個集合,具體如圖 1所示。與VB 中的集合一樣,這些集合都支持Add、 Item 方法與 Count 屬性。例如Add方法可以向該集合中添加一個對象,Item(X)可以的得到該集合中的第 X個對象,Count 屬性可以得到該集合中的對象的個數(shù)。在一個AutoCAD副本運行時,只能同時打開一個Documento可以調(diào)用Document的New Save方法以及Saved屬性來打開或保存一個 AutoCAD文檔。If Not AcadDoc.Saved ThenAcadDoc.SaveElseSet AcadD

8、oc =AcadDoc.New("acad")End If3. 創(chuàng)建、查詢與修改 AutoCAD圖形對象在創(chuàng)建AutoCAD圖形對象之前,首先必須定義并創(chuàng)建 ModelSpace與PaperSpace集 合對象。這兩個對象可通過 Document對象的 ModelSpace屬性與PaperSpace屬性返回。Dim moSpace as Object,paSpace as ObjectSet moSpace = AcadDoc.ModelSpaceSet paSpace = AcadDoc.PaperSpace所有關于圖形對象操作的方法與屬性都包含在這兩個對象中。創(chuàng)建文本對

9、象:Dim moSpace as ObjectSet moSpace =AcadDoc.ModelSpaceDim Pnt(0 to 2) as Double '定義一個 AutoCAD三維點Dim TextH as Double 定義字符高度Dim Textstr as String 定義字符變量Dim TextObj as Object '定義一個 AutoCAD文本對象Pnt(0) =2:Pnt(1) =4: Pnt(2) =0 初始化坐標TextH =1TexrStr = “ This is a test ”Set TextObj=moSpace.AddText(Tex

10、tStr,Pnt,TextH) 創(chuàng)建文本對象查詢與修改圖形對象有時用戶不但要創(chuàng)建圖形對象,更多的情況是修改或控制已存在的對象,這就需要對已創(chuàng)建的對象進行查詢,從而得到所要操作的對象??梢酝ㄟ^屬性來得到圖形對象的個數(shù)。Dim noMSOBJ as String,noPSOBJ as StringNoMSOBJ=Str(moSpace.Count)NoPSOBJ=Str(paSpace.Count)MsgBox "Object:Mspace="& noMSOBJ & "Pspace="& noPSOBJ用戶也可以通過For.Loop

11、語句來遍歷所有的圖形對象或是通過方法來得到某個具體的對象。下面的代碼說明了如何來修改當前中的對象,如果對象為一直線,則修改其顏色為紅色,否則不做任何改動。Dim ent as objectFor each ent in mospaceIf ent.entityname= "acdline" thenEnt.color=acredEnt.updateEnd IfNext需要注意:如果對圖形對象做了改動,則需要調(diào)用Update方法在AutoCAD窗口中重畫該對象。同樣,可以得到Model Space 中最后生成的圖形對象。Dim ent as objectSet ent = m

12、oSpace.Item(moSpace.Count-1)4. 非圖形對象除了 ModelSpace與PaperSpace集合,Document對象中另外12個集合中的對象都 是非圖形對象,如 Layers集合包含了 AutoCAD當前文檔中所有的層,而 Linetypes和 TextStyles 則分別為線型對象與字符型對象的集合。創(chuàng)建層可以調(diào)用Layers集合的Add方法創(chuàng)建層。以下代碼創(chuàng)建一個名稱為LAYER1顏色為洋紅色的層。Dim layerobj as objectSet layerobj =acadDoc.Layers.Add("LAYER1")Layerobj

13、.Colors=acMagenta視口以下的代碼使用 ActiveSpace屬性設置一個活動的 Space,然后調(diào)用 Viewports集 合的Add方法創(chuàng)建一個名為"NEWVIEWPORT1視口。當視口建立后, Split方法可使原 視口與新視口呈上下排列,最后,ActiveViewport 屬性使新視口成為活動視口。Dim vport as objectAcadDoc.ActiveSpace=acModelSpaceSet vport=AcadDoc.Viewports.Add("NEW_VIEWPORT")Vport.Split acViewport2Ver

14、ticalSet AcadDoc.ActiveViewport=vport5. 用戶輸入Document對象中還包含有一個很重要的子對象Utility , Utility對象提供了一些其它的實用功能,如用戶輸入控制(user-input) 。user-input 方法可以在AutoCAD的命 令提示行中提示用戶輸入,并顯示相應的輸入數(shù)據(jù)類型。這種類型的輸入對于屏幕坐標系,實體選擇,短字符與數(shù)字的輸入有著極為重要的應用。以下的代碼定義了Utility 對象。Dim AcadUtil as objectSet AcadUtil =AcadDoc.Utility每個user-input 方法都在AutoCAD的命令行里給出了適當?shù)妮斎胩崾静⒎祷叵鄳臄?shù)據(jù)類型。如: GetString 返回一個字符串,GetPoint 返回一個點(三個雙精度數(shù)值)。也可以調(diào)用InitializeUserInput 方法進行更高級的輸入設置。用戶可以定義一個變量:NL=Chr(13)+Chr(10) , 將這個變量用于輸入提示的開始處。四、結束語AutoCAD 的 ActiveX Automation 技術的出現(xiàn), 標志著 AutoCAD 的二次開發(fā)技術取得了歷史性轉(zhuǎn)折。首

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論