|
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. |
|