利用ObjectARX開發(fā)基于AutoCAD的法蘭盤設計(1)_第1頁
利用ObjectARX開發(fā)基于AutoCAD的法蘭盤設計(1)_第2頁
利用ObjectARX開發(fā)基于AutoCAD的法蘭盤設計(1)_第3頁
全文預覽已結(jié)束

下載本文檔

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

文檔簡介

1、利用ObjectARX開發(fā)基于AutoCAD的法蘭盤設計(1)    摘 要本文討論了在Visual C 6 0的集成開發(fā)環(huán)境下,結(jié)合Object ARX和MFC開發(fā)AutoCAD2002應用程序的設計技術(shù)和方法,針對特定零件族的高效率繪制進行探討,并圍繞法蘭盤設計繪制實例詳細闡述了此CAD二次開發(fā)技術(shù)。     關(guān)鍵詞ObjectARX;MFC;法蘭盤    1 概述    在實際產(chǎn)品的設計中,對于產(chǎn)品的尺寸及工藝參數(shù)已經(jīng)系列化的零件

2、族, AutoCAD提供給的通用功能難以滿足其快速生成圖紙的需要。為適應快速繪制零件圖、工藝路線設置、工藝參數(shù)設置、以及其它要求,必須在AutoCAD這種通用的繪圖環(huán)境下建立一個集中的使用非常簡潔的用戶操作環(huán)境。    本文擬構(gòu)建一個操作環(huán)境,包括AutoCAD數(shù)據(jù)庫、文件讀入、交互式界面幾個部分。 2 Object ARX與MFC簡介 2.1 ObjectARX的類庫構(gòu)成    (1)AcRx庫,提供系統(tǒng)層次的類,用于動態(tài)鏈接庫的初始化以及運行時刻類的注冊和標識。    (

3、2)AcEd庫,提供一組用于定義和注冊新的AutoCAD命令的類。    (3)AcDb庫,提供一組用于存取AutoCAD圖形數(shù)據(jù)庫結(jié)構(gòu)的類。    (4)AcGi庫,提供繪制AutoCAD實體圖形界面的類。    (5)AcGe庫,提供的實用類用于執(zhí)行二維和三維幾何操作。 2.2 MFC    MFC(Microsoft Foundation Class Library)是Windows環(huán)境下的編程應用程序框架,是封裝的C 類庫的擴展

4、。ObjectARX(AutoCAD Runtime Extension)是AutoCAD采用面向?qū)ο蟮腃 應用程序機制進行二次開發(fā)的有效工具,它的一個動態(tài)鏈接庫(DLL),與AutoCAD共享一個地址空間,    能夠直接被后者調(diào)用,使開發(fā)者能夠更直接地完成其深層數(shù)據(jù)結(jié)構(gòu)、圖形系統(tǒng)編程和用戶命令的定義。ObjectARX提供了一套與MFC用戶界面(UI)相關(guān)的類,MFC用戶界面可以具有和AutoCAD用戶界面一樣的外觀和行為。 3 系統(tǒng)總體設計 3.1 AutoCAD數(shù)據(jù)庫    AutoCAD基本的數(shù)據(jù)庫對象是

5、實體、符號表和詞典。實體是在AutoCAD圖內(nèi)部表示圖的一種特殊數(shù)據(jù)庫對象,用戶可以在屏幕上看見實體并能對其進行操作。符號表和詞典是用于存儲數(shù)據(jù)庫對象的容器,這兩個容器對象都映射一個符號名到一個數(shù)據(jù)庫對象。    一個AutoCAD數(shù)據(jù)庫包含一套固定的符號表,每一個符號表包含一個特定符號表記錄類的實例,用戶不能向數(shù)據(jù)庫添加新符號表。符號表包含層表和塊表。所有AutoCAD實體都屬于塊表記錄。詞典為存儲對象提供了比符號表更加普通的容器。一個詞典可以包含任何類型的AcDbObject及其子類的對象。當AutoCAD創(chuàng)建新圖時,AutoCAD數(shù)據(jù)庫創(chuàng)建一個叫做

6、“命名對象詞典”的詞典。AutoCAD數(shù)據(jù)庫主要結(jié)構(gòu)如圖1。 圖1 數(shù)據(jù)庫結(jié)構(gòu) 3.2 ARX程序自動加載和DWG文件讀入    對于已創(chuàng)建好的.arx程序,ARX程序的自動加載可以省去每次進入AutoCAD環(huán)境后手動加載程序的過程。有幾種方法可以實現(xiàn)。最簡便易行的方法是進入AutoCAD環(huán)境,選擇“工具”菜單>“加載應用程序”>選擇啟動組的“內(nèi)容”>“添加”。將已生成的ARX應用程序添加進來,下次啟動AutoCAD環(huán)境時,該程序已被加載。在命令行中鍵入該程序的執(zhí)行命令即可運行。程序運行流程圖如圖2。   

7、 圖2 程序運行流程圖    利用ObjectARX AppWizard的addCommand()創(chuàng)建新Command,F(xiàn)unction name為“OPEN”,部分代碼如下: void OpenDoc( void *pData)     AcApDocument* pDoc = acDocManager-> curDocument();    if (acDocManager->isApplicationContext()  

8、60;     acDocManager->appContextOpenDocument (const char *)pData);        else        acutPrintf("nERROR To Open Doc!n");     void OPEN()     

9、/打開系統(tǒng)中存在的路徑為e:test.dwg 的DWG文件,    static char pData = "e:test.dwg"    acDocManager->executeInApplicationContext(OpenDoc, (void *)pData); 3.3 無模式對話框建立    對話框是Windows應用程序常用的與用戶對話通訊的窗口界面,對話框可分為模式(Model)對話框和無模式對話框(Modeless),模式對話框要求

10、用戶在使用程序的其它任何部分之前關(guān)閉對話框。AutoCAD總是試圖不使系統(tǒng)聚焦于其子窗口,故使用無模式對話框。    初始化函數(shù):Create函數(shù)。其功能為使用資源中的對話框模板創(chuàng)建無模式對話框。 Create函數(shù)參數(shù)說明         參數(shù)說明lpszTemplateName包含對話框模板的空中止字符串nIDTemplate包含對話框模板的資源中ID號pParentWnd對話框的父窗體的指針,如果此值為NULL,則對話框的父窗體為主應用程序窗體  &#

11、160; 在一常規(guī)間歇內(nèi),無模式對話框收到WM_ACAD_KEEPFOCUS窗口消息。當對話框接收到此消息時,如想保持聚焦則應返回TRUE,否則返回FALSE(缺省值),此時鼠標一離開對話框系統(tǒng)就不再聚焦于對話框。在對話框的消息映射中ON_MESSAGE()函數(shù)如下: BEGIN_MESSAGE_MAP(HelloDlg CDialog) ON_COMMAND(IDCLOSE,OnClose) ON_COMMAND(IDC_DRAW_CIRCLE,OnDrawCircle) ON_ MESSAGE(WM_ACAD_KEEPFOCUS,OnAcadKeepFocus) END_MESS

12、AGE_MAP()    在這里應用對話框類為HelloDlg,它由Cdialog類派生。當將這一入口加入到消息映射中時必須為該消息寫一句柄函數(shù)。假定我們已寫了一函數(shù)keepFocus(),它在對話框保持聚焦時返回TRUE,反之返回FALSE。消息句柄函數(shù)為:    Afx msg LONG HelloDlg:onAcadKeepFocus(UINT,LONG) return keepTheFocus()? TRUE:FALSE; 3.4 用戶界面設計    下面以法蘭盤的設

13、計為例,介紹以ObjectARX對AutoCAD進行二次開發(fā)的過程。    (1)創(chuàng)建ObjectARX MFC應用程序框架。在Microsoft Visual C 中用利用ObjectARX AppWizard新創(chuàng)建一個工程。選擇MFC Extension DLL,結(jié)束創(chuàng)建。(2)創(chuàng)建MFC對話框。在Visual C App Studio加入一個對話框資源。(3)創(chuàng)建類和控件。用ClassWizard創(chuàng)建新對話框類,并給對話框命名。本例中采用默認選項。為對話框內(nèi)的資源添加相應的類控件。 C_BUTTON資源添加CButton類控件;IDC_EDIT資源

14、添加Cedit類控件;IDC_COMBO資源添加CComboBox類控件。(4)創(chuàng)建對話框控制函數(shù)。在ClassWizard中為對話框添加“DoModal”與“OnInitDialog”函數(shù)。(5)給對話框控制函數(shù)添加代碼。部分代碼如下: /讀ID號為“IDC_EDIT1”的EditBox中輸入值至變量m_edit1     CEdit* pE = (CEdit*)GetDlgItem(IDC_EDIT1);    CString szO;    pE->GetWindowText(szO);    float m_edit1 = atof(szO); /創(chuàng)建直線     AcGePoint3d startPt(x,y,0.0);    AcGePoi

溫馨提示

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

評論

0/150

提交評論