nkmjg 发表于 2024-3-9 13:31:53

第一章 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.
页: [1]
查看完整版本: 第一章 ObjectARX入门