VB用DDE開發AutoCAD for Windows

發表于:2007-07-14來源:作者:點擊數: 標簽:
目前,許多工程CAD系統是以AutoCAD作為支撐軟件,在其基礎上進行二次開發而形成的。AutoCAD R12 for Windows 以AutoLISP和ADS作為二次開發工具,但它們都有不足之處,AutoLISP速度慢,沒有友好的開發環境,ADS是基于C語言的開發環境,而C語言面向Windows編程
  目前,許多工程CAD系統是以AutoCAD作為支撐軟件,在其基礎上進行二次開發而形成的。AutoCAD R12 for Windows 以AutoLISP和ADS作為二次開發工具,但它們都有不足之處,AutoLISP速度慢,沒有友好的開發環境,ADS是基于C語言的開發環境,而C語言面向Windows編程本身難以掌握,因此AutoLISP和ADS的使用都受到一定的限制。VB是Windows下主要的開發工具之一,它的“可視性”和“事件驅動性”簡化了面向Windows的編程,深受廣大用戶的青睞。Windows下,VB和AutoCAD都支持強有力的DDE(動態數據交換)功能,用VB編寫具有DDE功能的程序來控制AutoCAD,既能與AutoCAD交換各種復雜的數據結構,又能向AutoCAD發送命令,由此開發出的應用程序能滿足用戶的需要,同時又縮短了開發周期。本文結合實例介紹了用VB開發AutoCAD的途徑與方法。

  一、直接利用DDE功能開發

  DDE是Windows的強大功能之一,它可以使應用程序自動地接收由其它應用程序發送來的數據,當傳送端的數據有變化時,接收端的數據也會隨之改變,也可將命令或鍵盤輸入傳遞給其它程序,實現遠程控制。

  在VB編程環境中,創建應用程序的方法很簡單,首先是設計用戶界面,也就是在空白窗體中放入所需要的控件,如命令按鈕,單選鈕,文本框,標簽,圖片框等,然后針對各控件上要發生的事件(如鼠標單擊,鼠標移動等)書寫事件過程,最后將編寫的應用程序運行,調試,生成執行文件即可。VB中能和其它Window應用程序建立DDE通道的控件有文本框,標簽和圖片框。下面結合簡單實例,說明VB應用程序與AutoCAD間建立DDE通道和交換數據的方法。

  在VB中啟動一個新項目,參見圖(1)建立窗體,其中“建立鏈接”,“直線”,“標注”,“退出”為命令按鈕,標有“Text1”的為文本框,用于建立DDE通道,并輸入下面的事件代碼。

Option Explicit

 Private Sub cmdLine_Click() '畫直線

  Text1.LinkExecute " [^3^3line 3,3 8,8 ^3]"

 End Sub

 Private Sub cmdText_Click() '標注文字

  Text1.LinkExecute " [^3^3text 10,10 1 90 AUTOCAD!^10]"

 End Sub

 Private Sub cmdLink_click() '建立鏈接

  Text1.LinkMode = 0

  Text1.LinkTopic = "autocad.dde|system"

  Text1.LinkMode = 2

 End Sub

 Private Sub cmdExit_click() '退出

  End

 End Sub

 
  運行此應用程序,注意在運行前,一定要先加載AutoCAD。單擊“建立鏈接”按扭,cmdLink_Click()過程被執行,執行時設置文本框Text1的LinkTopic和LinkMode的屬性,完成VB應用程序與AutoCAD間DDE通道的建立。LinkTopic屬性用于通知AutoCAD由誰來提供數據,它被管道符“|”分成兩部分,第一部分“AutoCAD.DDE”為應用程序名,第二部分“System”是通訊的主題。LinkMode屬性用于切實建立鏈接,在LinkMode=0時,表示關閉以前的DDE通道,在LinkMode=2時,表示以手動模式激活DDE通道。

  在完成DDE鏈接后,VB應用程序就可以與AutoCAD間進行數據交換或命令傳送了。單擊“直線”按扭,cmdLine_Click()過程被執行,應用程序通過LinkExecute方法向AutoCAD發送命令,在AutoCAD中以點(3,3)和(8,8)為端心,畫一條直線。語句中的^3相當于AutoCAD中的取消鍵Ctrl+C,空格相當于AutoCAD中的回車鍵。單擊“標注”按扭,執行cmdText_Click()過程,可在AutoCAD中顯示以(10,10)為基點,高為1,旋轉角度為90的字符串“AutoCAD!”。語句中的^10相當于AutoCAD中的回車鍵,在標注文字時不能用空格代替回車鍵。

  根據需要,可用上面的方法傳送AutoCAD的其它命令,實現對AutoCAD的開發。

  二、通過調用VB ADS開發

  上面介紹了在VB應用程序中直接利用DDE與AutoCAD作用實現開發的方法,此方法要求用戶自己建立與AutoCAD間的DDE通道,此外,我們還可以通過調用VB ADS函數對AutoCAD進行開發。在VB ADS函數庫中已有專門的函數負責建立應用程序與AutoCAD間的DDE通道,而不需用戶親自建立,較為方便。另外,VB應用程序還可以通過VB ADS函數向AutoCAD發送數據和命令,同時也可以利用VB ADS函數的返回值來獲得AutoCAD的數據,實現對AutoCAD更深入的開發。

  為了利用AutoCAD的VB ADS函數建立VB的應用程序,AutoCAD提供了幾個VB ADS支撐文件,這些文件除DDEBAS.EXE和ACADVB.DLL存放在C:\ACADWIN子目錄外,其余都存放在C:\ACADWIN\VB\NEW子目錄中。文件如下:

  1. DDEBAS.EXE-ADS/DDE服務者,為保證VB于AutoCAD 間正常通信,此命令必須首先在AutoCAD中用XLOAD命令加載運行。

  2. ACADVB.DLL-VB ADS動態連接庫,在運行VB應用程序前,應將其拷到C:\WINDOWS\SYSTEM\子目錄下。

  3. GLOBAL.BAS-VB ADS應用程序中所需要使用的全局變量定義文件。

  4. ADSFUNCS.BAS-VB ADS函數庫,可以在VB應用程序中直接調用。

  5. ADSFUNCS.FRM-包含有應用程序和AutoCAD間建立DDE鏈接的窗體文件。 下面結合具體的例子,說明利用VB ADS函數開發應用程序的方法。 [HJ]     啟動VB,打開C:\ACADWIN\VB\NEW\NEWPROJ.MAK項目文件,建立新窗體,并輸入如下的事件代碼。

Option Explicit

 Private Sub Form_Load()

  DDE_TIMEOUT = -1  '等待DDE事件

  txtX.Text = 5  '圓心,半徑的隱含值

  txtY.Text = 5

  txtRadius = 3

 End Sub

 Private Sub cmdCircle_Click()  '畫圓過程

  Dim ret As Integer

  Dim pt As ads_point  '定義Ads點類型

  Dim Radius As Double

  Dim Apndll As ApndLLType  '定義增加鏈表類型

  Dim Resbuf As ResbufType  '定義結果緩沖器

  pt.X = val(Trim(txtX.Text)) '給圓心,半徑賦值

  pt.Y = val(Trim(txtY.Text))

   Radius = val(Trim(txtRadius.Text))

  ret% = ads_newrb(10, Resbuf) '建立新的結果緩沖器

  Resbuf.hResbuf = 0

  Apndll.apType = RTSTR '說明鏈表類型為字符串

  Apndll.apString = "circle" + Chr$(0) '鏈表賦值

  ret% = ApndLLNode(Resbuf, Apndll)  '增加鏈表到結果緩沖器

  Apndll.apType = RTPOINT

  Apndll.apPoint = pt

  ret% = ApndLLNode(Resbuf, Apndll)

  Apndll.apType = RTREAL

  Apndll.apReal = Radius

  ret% = ApndLLNode(Resbuf, Apndll)

  Apndll.apType = RTNONE   '鏈表結束值類型

  ret% = ApndLLNode(Resbuf, Apndll)

  ret% = ads_cmd(Resbuf)   '執行結果緩沖器的命令

  ret% = ads_relrb(Resbuf)   '釋放結果緩沖器

  End Sub

Private Sub cmdExit_Click()   '退出過程

  End

 End Sub

 
  在應用程序運行前,必須首先運行AutoCAD,并用命令(XLOAD "DDEBAS")加載DDEBAS. EXE。在上面的應用程序中,除語句DDE_TimeOut=-1外,沒有其它涉及建立DDE通道的語句,因為應用程序與AutoCAD間建立DDE通道所需要的代碼已保存在VB ADS 函數庫中,打開支撐文件adsfuncs.bas,可以發現Sub OPENDDE()過程,它負責VB應用程序與AutoCAD間DDE通道的建立,所以用戶在開發應用程序時,只管調用VB ADS函數即可。例子中的cmdCircle_Click()過程,是在VB 4.0編程環境通過調用VB ADS函數開發的,運行程序后在文本框中輸入半徑和圓心的值,單擊“畫圖”按扭,即可在AutoCAD中得到所需的圓。

原文轉自:http://www.anti-gravitydesign.com

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97