C++ Builder開發(fā)AutoCAD應(yīng)用程序的方法

C++ Builder開發(fā)AutoCAD應(yīng)用程序的方法


周永軍(水利部山西水利水電勘測設(shè)計(jì)研究院 030024)


【摘要】進(jìn)行AutoCAD二次開發(fā)的程序設(shè)計(jì)方法為數(shù)眾多,本文著重介紹用C++ Builder方法開發(fā)AutoCAD應(yīng)用程序的一種通用方法。用這種方法開發(fā)的應(yīng)用程序移植性較好,且不需要其它輔助系統(tǒng)支持,應(yīng)用方便快捷。本文介紹的程序設(shè)計(jì)方法是目前較為流行的ActiveX組件方法,在C++ Builder中也叫做組件對象模型(Component Object Model)。


【關(guān)鍵字】COM程序設(shè)計(jì) ActiveX接口 類型庫 C++ Builder AutoCAD


1 C++ Builder開發(fā)平臺簡介


C++ Builder是美國Borland公司在1997年推出的一個(gè)優(yōu)秀的可視化編程環(huán)境。它在32位Windows環(huán)境下為我們提供了一種極具吸引力的快速應(yīng)用程序開發(fā)系統(tǒng)(RAD);是基于最流行的面向?qū)ο蟮某绦蛟O(shè)計(jì)語言C++,并擁有廣泛的程序員基礎(chǔ);它提供了對ActiveX無懈可擊的支持,對Windows API和DirectX也進(jìn)行了全面包裝。C++ Builder的易用性遠(yuǎn)超過Visual C++和Borland C++等開發(fā)環(huán)境,但它強(qiáng)大的開發(fā)功能并沒有因之而削弱,可以說C++ Builder在軟件開發(fā)的功能性和易用性之間架起了一座橋梁。


C++Builder是在Borland C++和Delphi基礎(chǔ)上發(fā)展起來的。它采用具世界領(lǐng)先水平的Borland C++的編譯器和高度可視化的圖形平臺,可開發(fā)出非常高效和可獨(dú)立執(zhí)行的程序。與AutoCAD其它開發(fā)工具相比,可使程序員擺脫AutoLISP繁多括號的困擾和解釋執(zhí)行的低效率,也可開發(fā)出比VBA程序更高效和保密性更強(qiáng)的二進(jìn)制代碼。


C++ Builder具有代表性的版本是3.0和5.0版。2002年2月推出的6.0版是目前的最新版本。本文介紹的程序開發(fā)是基于5.0版本。


2 AutoCAD版本的發(fā)展


AutoDesk公司1996年推出AutoCAD R14版本,使得AutoCAD成為標(biāo)準(zhǔn)Windows應(yīng)用程序。AutoCAD 2000版本開始正式成為Microsoft標(biāo)準(zhǔn)的多文檔管理程序。另一個(gè)特征是嵌入了VBA(Visual Basic Application),使AutoCAD的開發(fā)和定制功能大大增強(qiáng)。2002和2003版本主要是使AutoCAD在易用性和網(wǎng)絡(luò)功能方面的功能得到加強(qiáng)。


3 為什么選用C++ Builder開發(fā)AutoCAD應(yīng)用程序


本文推薦使用C++ Builder開發(fā)AutoCAD應(yīng)用程序主要原因如下。


(1) C++ Builder開發(fā)平臺是非常易用且功能強(qiáng)大,并有為數(shù)眾多的圖形化組件,可以滿足我們?nèi)粘5木幊痰男枰?,可以大大提高程序員編程效率。


(2) C++ Builder開發(fā)的應(yīng)用程序可以脫離C++ Builder開發(fā)平臺和AutoCAD應(yīng)用平臺而獨(dú)立運(yùn)行,不象VBA程序要依賴于某個(gè)AutoCAD的圖形文件,使用時(shí)需要加載和卸載。


(3) C++ Builder應(yīng)用程序是真正的編譯程序,執(zhí)行程序短小,執(zhí)行效率高,方便在網(wǎng)絡(luò)間傳送,且保密性強(qiáng)。


另一個(gè)外在原因,目前學(xué)習(xí)和使用C/C++語言的人非常普遍,而LISP語言和VBA語言的使用并不十分普及,所以用C++ Builder開發(fā)AutoCAD應(yīng)用程序是非常具有優(yōu)勢的。


4 C++ Builder開發(fā)AutoCAD應(yīng)用程序基本方法


C++ Builder開發(fā)AutoCAD應(yīng)用程序的基本方法是采用Microsoft公司的ActiveX Automation技術(shù)。該技術(shù)是一種可從一個(gè)程序內(nèi)部編程控制另外一個(gè)或幾個(gè)程序的技術(shù),其中作為控制方的程序叫做Automation客戶或控制器,被控制方的程序叫做Automation服務(wù)器。這里我們所開發(fā)的應(yīng)用程序就是客戶程序,而AutoCAD程序就是服務(wù)器程序。


本文所使用的開發(fā)平臺是基于C++ Builder 5,要求AutoCAD為2000以上版本。另外在AutoCAD軟件安裝目錄(默認(rèn)為“C:\Program Files\AutoCAD 2002\”)下有一個(gè)ACAD.TLB文件,該文件是AutoCAD的類型庫文件,本文所介紹的程序設(shè)計(jì)就是依賴這個(gè)文件的。


本文介紹一個(gè)簡單的程序,它的功能僅僅是在AutoCAD模型空間畫一個(gè)圓。這個(gè)程序雖然功能比較簡單,但它幾乎包括了AutoCAD ActiveX程序設(shè)計(jì)的全部思想和方法??梢允棺x者對AutoCAD的ActiveX Automation程序設(shè)計(jì)有一個(gè)直觀和快捷的了解。



圖1 Imports Type Libray對話框



圖2 程序設(shè)計(jì)窗體界面


(1) 啟動(dòng)C++Builder。


(2) 保存項(xiàng)目。將窗體文件保存為CadU1.cpp,將項(xiàng)目保存為CadP。這時(shí)C++Builder IDE窗口標(biāo)題欄中出現(xiàn)被保存的項(xiàng)目名稱。


(3) 引入類型庫。選擇Project菜單中“Import Type Libray”子菜單,出現(xiàn)對話框(圖1)。


在對話框中列出所有已注冊的類型庫,從中選擇AutoCAD 2000 Type Libray [Version 1.1] (AutoCAD2000的類型庫,2002和2003版的類型庫同樣適用)。如果列表中沒有AutoCAD的類型庫,說明它還沒有被注冊,單擊[Add]按鈕,在AutoCAD的程序目錄中找到acad.tlb文件,選中后單擊[OK]按鈕,隨后就在列表中增加了“AutoCAD 2000的類型庫”。


選中AutoCAD2000類型庫,單擊[Create Unit]按鈕,稍候系統(tǒng)將自動(dòng)生成AutoCAD類型庫的外套文件及其頭文件,默認(rèn)文件名為AutoCAD_TLB.cpp和AutoCAD_TLB.h。并且自動(dòng)將外套文件添加到CadP項(xiàng)目中。


(4) 設(shè)計(jì)窗體中。按照圖2所示設(shè)計(jì)Form1的窗體。選擇工具欄中Button按鈕,將其放置在Form1的合適位置,系統(tǒng)自動(dòng)將其命名為Button1,然后將Caption屬性改為“啟動(dòng)CAD”;再往窗體中放置一個(gè)Button按鈕,系統(tǒng)自動(dòng)命名為Button2,再將其Caption屬性改為“畫圓”。最后將Form1的Caption屬性改為“AutoCAD ActiveX Automation”。設(shè)置完成后的窗體界面如圖2所示。


(5) 添加代碼。選擇菜單[View]→[Toggle Form/Unit],或者直接按F12按鈕,跳轉(zhuǎn)到代碼編輯窗口,在成員函數(shù)體定義之前添加以下代碼。


IAcadApplicationDisp ICad; //聲明程序?qū)ο?/p>

雙擊Button1,系統(tǒng)自動(dòng)生成名為Button1Click成員函數(shù),光標(biāo)定位在函數(shù)體的空白處,繼續(xù)添加如下代碼:


ICad.BindDefault(); //連接到服務(wù)器程序中


ICad.Visible=True; //設(shè)置程序?qū)ο鬄榭梢?/p>

雙擊Button2,系統(tǒng)自動(dòng)生成名為Button2Click成員函數(shù),光標(biāo)定位在函數(shù)體的空白處,在此添加如下代碼:


IAcadDocumentDisp Doc=ICad.ActiveDocument; //將活動(dòng)文檔傳給文檔對象


IAcadModelSpaceDisp Mds=Doc.ModelSpace; //將模型空間傳給其對象


ACAD_POINT Cen; //定義圓心點(diǎn)


Variant Pt1; //定義Variant臨時(shí)變量


double tmp; //定義臨時(shí)變量


Pt1=VarArrayCreate(OPENARRAY(int,(0,2)),varDouble); //創(chuàng)建Variant類型數(shù)組,數(shù)據(jù)類型為double


tmp=200.0;


Pt1.PutElement(tmp,0); //給數(shù)組第一個(gè)分量賦值


tmp=200.0;


Pt1.PutElement(tmp,1); //給數(shù)組第二個(gè)分量賦值


tmp=0.0;


Pt1.PutElement(tmp,2); //給數(shù)組第三個(gè)分量賦值


Cen=Pt1; //將臨時(shí)變量數(shù)組賦給圓心點(diǎn)


Mds.AddCircle(Cen,100.0); //調(diào)用畫圓方法在模型空間畫圓


ICad.ZoomAll(); //更新程序?qū)ο?/p>

(6) 包含頭文件。在File菜單中選擇“Include Unit Hdr...”子菜單,出現(xiàn)“Use Unit”對話框,選擇AutoCAD_TLB,單擊[OK]按鈕,系統(tǒng)自動(dòng)在TForm1的單元文件中增加一行:


#include "AutoCAD_TLB.h"


(7) 編譯和連接。選擇Project菜單中Make選項(xiàng),系統(tǒng)進(jìn)行一系列的編譯、連接工作,如果沒有錯(cuò)誤,將創(chuàng)建執(zhí)行文件CadP.EXE。


(8) 運(yùn)行程序。在C++Builder IDE環(huán)境中或脫離IDE環(huán)境都可運(yùn)行CadP。我們選擇脫離IDE環(huán)境方式。在Windows資源管理器中找到CadP.EXE文件(默認(rèn)路徑為工程文件所在的目錄),雙擊則可運(yùn)行該程序。單擊[啟動(dòng)CAD]按鈕,稍候?qū)?dòng)AutoCAD程序,然后點(diǎn)擊[畫圓]按鈕,程序?qū)⒃谄淠P涂臻g畫一個(gè)圓。


5 其它問題


在進(jìn)行專業(yè)程序設(shè)計(jì)時(shí),可以將以上實(shí)例中為ACAD_POINT類型的點(diǎn)分量賦值及讀取分量的過程設(shè)計(jì)為一個(gè)函數(shù),使用起來就會(huì)非常方便。


作者已將本文介紹的程序設(shè)計(jì)方法應(yīng)用于多個(gè)專業(yè)繪圖軟件的開發(fā),應(yīng)用情況良好。


對本文中介紹的程序設(shè)計(jì)方法有興趣的讀者,可以致信于作者本人或工程地質(zhì)計(jì)算機(jī)應(yīng)用協(xié)作網(wǎng)(Geocom.hhcc.net.cn)與作者共同討論,作者的電子信箱地址:zzyyjj@sina.com。

登錄后免費(fèi)查看全文
立即登錄
App下載
技術(shù)鄰APP
工程師必備
  • 項(xiàng)目客服
  • 培訓(xùn)客服
  • 平臺客服

TOP

1