找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 159|回复: 0

第一章 ObjectARX入门

[复制链接]

主题

0

回帖

0

积分

管理员

积分
0
发表于 2024-3-9 13:31:53 | 显示全部楼层 |阅读模式
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. 1     #include "stdafx.h"  
  2. 2     #include <aced.h>  
  3. 3     #include <rxregsvc.h>   
  4. 4     #include <TCHAR.h>  
  5. 5      
  6. 6      
  7. 7     void initApp();  
  8. 8     void unloadApp();   
  9. 9     void helloWorld();  
  10. 10      
  11. 11      
  12. 12      
  13. 13     void initApp()  
  14. 14     {   
  15. 15         // register a command with the AutoCAD command mechanism  
  16. 16         acedRegCmds->addCommand(采用T("HELLOWORLD采用COMMANDS"),  //hello world commands
  17. 17             采用T("Hello"),  
  18. 18             采用T("jianglei"),  
  19. 19             ACRX采用CMD采用TRANSPARENT,  
  20. 20             helloWorld);  
  21. 21     }  
  22. 22      
  23. 23      
  24. 24     void unloadApp()  
  25. 25     {   
  26. 26         acedRegCmds->removeGroup(采用T("HELLOWORLD采用COMMANDS"));  
  27. 27     }  
  28. 28      
  29. 29      
  30. 30      
  31. 31      
  32. 32     void helloWorld()  
  33. 33     {   
  34. 34         acutPrintf(采用T("\nHello World!"));  
  35. 35      
  36. 36     }  
  37. 37      
  38. 38     extern "C" AcRx::AppRetCode  
  39. 39     acrxEntryPoint(AcRx::AppMsgCode msg, void* pkt)  
  40. 40     {   switch (msg)  
  41. 41         {  
  42. 42      
  43. 43         case AcRx::kInitAppMsg:  
  44. 44             acrxDynamicLinker->unlockApplication(pkt);  
  45. 45             acrxRegisterAppMDIAware(pkt);  
  46. 46             initApp();  
  47. 47             break;  
  48. 48         case AcRx::kUnloadAppMsg:  
  49. 49             unloadApp();  
  50. 50             break;  
  51. 51         default:  
  52. 52             break;  
  53. 53      
  54. 54         }  
  55. 55      
  56. 56         return AcRx::kRetOK;  
  57. 57      
  58. 58     }
复制代码
其中最常用的函数是: acutPrintf(采用T("\nHello World!")); 相当于C语言中的printf函数。

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

4、定制类

其中CAD大部分类都是从类AcRxObject派生出来的。所以相当于C++中的类CObject;例如从这个类派生出来的AcDbObject类,它包含了CAD数据库常驻对象,例如符号表,实体等;而cad中 所以实体都是从AcDbEntity类派生的,如AcDbLine.
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|膜结构网

GMT+8, 2024-12-28 13:47 , Processed in 0.103448 second(s), 21 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表