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.