第一章 ObjectARX入門


ObjectARX中的ARX表示AutoCAD運行時擴展(AutoCAD Runtime eXtension)。
1、CAD二次開發時對應的Visual C++版本

CAD版本 ObjectARX版本 VS版本 
 VS版本
 CAD R12   ARX 1  VC2  
 CAD R14   ARX 202   VC4.2  
 CAD2000/2002即R15、R15.0.7  ObjectARX 2002  VC6.0  _MSC_VER = 1200 
 CAD2004-AutoCAD2006 即R16  ObjectARX 2005  VC2002(即7.0)  _MSC_VER = 1300
 CAD2007-AutoCAD2009 即R17   ObjectARX 2007   VS2005(即8.0) _MSC_VER = 1400
 CAD2010/CAD2011   Arx2010  vs2008  (即9.0)  _MSC_VER = 1500

2、ARX入口點函數:
  exern "C" AcRx::AppRetCode
  AcrxEntryPoint(AcRx::AppMsgCode msg,void* pKt);
extern "C" 通知AutoCAD acrxEntryPoint是一個外部函數。
參數: AutoCAD消息:
KInitAppMsg         當應用程序加載后進行AutoCAD與應用程序之間的通信時發送。
KUnloadAppMsg    當卸載ARX應用程序時(用戶卸載應用程序或者AutoCAD本身中斷程序時)發送,關閉文件並完成清除操作。
KLoadDwgMsg      當打開繪圖文件時發送。使應用程序的函數可以調用ADSRX函數庫,只有在應用程序用acedDefun()注冊為一個AutoLISP函數后才能發送消息。
返回值:
KUnloadDwgMsg  當用戶退出繪圖並卸載ADS函數庫時發送。
enum AppRetCode{
KRetOk    =0,
KRetError =3 };

3、課程入門第一個程序:Hello Word

 1     #include "stdafx.h"  
 2     #include <aced.h>  
 3     #include <rxregsvc.h>   
 4     #include <TCHAR.h>  
 5       
 6       
 7     void initApp();  
 8     void unloadApp();   
 9     void helloWorld();  
10       
11       
12       
13     void initApp()  
14     {   
15         // register a command with the AutoCAD command mechanism  
16         acedRegCmds->addCommand(_T("HELLOWORLD_COMMANDS"),  //hello world commands
17             _T("Hello"),  
18             _T("jianglei"),  
19             ACRX_CMD_TRANSPARENT,  
20             helloWorld);  
21     }  
22       
23       
24     void unloadApp()  
25     {   
26         acedRegCmds->removeGroup(_T("HELLOWORLD_COMMANDS"));  
27     }  
28       
29       
30       
31       
32     void helloWorld()  
33     {   
34         acutPrintf(_T("\nHello World!"));  
35       
36     }  
37       
38     extern "C" AcRx::AppRetCode  
39     acrxEntryPoint(AcRx::AppMsgCode msg, void* pkt)  
40     {   switch (msg)  
41         {  
42       
43         case AcRx::kInitAppMsg:  
44             acrxDynamicLinker->unlockApplication(pkt);  
45             acrxRegisterAppMDIAware(pkt);  
46             initApp();  
47             break;  
48         case AcRx::kUnloadAppMsg:  
49             unloadApp();  
50             break;  
51         default:  
52             break;  
53       
54         }  
55       
56         return AcRx::kRetOK;  
57       
58     } 

 其中最常用的函數是: acutPrintf(_T("\nHello World!")); 相當於C語言中的printf函數。

      最重要的是: acedRegCmds->addCommand()宏,把自定義命令加入到CAD的命令列表中。

4、定制類

其中CAD大部分類都是從類AcRxObject派生出來的。所以相當於C++中的類CObject;例如從這個類派生出來的AcDbObject類,它包含了CAD數據庫常駐對象,例如符號表,實體等;而cad中 所以實體都是從AcDbEntity類派生的,如AcDbLine.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM