AutoCAD2017AutoCAD二次开发简介

第19章AutoCAD二次开发简介
本章简介
本章主要介绍以下内容
zObjectARX的概念和使用 
zVBA编程的概念和使用 
zAutoLISP的概念和基本函数 
zVisual LISP的使用 
19.1  ObjectARX简介
19.1.1  ObjectARX简介
ObjectARX 应用程序是动态链接库DLL可以和AutoCAD共享地址空间直接调用AutoCAD的内部函数在ObjectARX应用程序中定义的命令与AutoCAD的内部命令运行方式相同而在ObjectARX应用程序中创建的实体对象也和AutoCAD中创建的实体对象没有区别
目前ObjectARX的版本是ObjectARX for AutoCAD 2004它是由Autodesk公司在发布AutoCAD 2004时推出的
使用ObjectARX的用户可以完成各种开发工作例如
z直接访问AutoCAD的图形数据库
z和AutoCAD编辑器进行交互
z使用MFC创建标准的Windows用户界面
z支持AutoCAD的多文档接口MDI
音节带声调吗z在应用程序中自定义类
浅谈科学发展与城市经济管理
z与Visual LISP ActiveX COM等编程接口通信
19.1.2  系统的软硬件要求
使用ObjectARX for AutoCAD 2004开发工具的软件配置要求为
1Microsoft Visual C++ 6.0版本
2Microsoft Windows 95或Windows NT4.0以上版本
使用ObjectARX for AutoCAD 2004开发工具的硬件配置要求为
1PU至少为Inter Pentium 90 MHz或更高
2存至少为32M
800600 SVGA显示适配器或更高
19.1.3  ObjectARX目录结构
ObjectARX开发工具包括如下几个目录
404  第19章  AutoCAD二次开发简介
1ARXLABS该目录中包含有9个子目录分别从9个方面对ObjectARX程序开发进行说明和示范
2CLASSMAP该目录中只有一个名为classmap.dwg的图形文件其内容是说明
ObjectARX类的层次结构
3DOCS该目录中包含有ObjectARX的联机帮助文件
4DOCSAMPS该目录中包含有32个子目录分别保存着ObjectARX Developer's Guide 中所用到的例程
5INC该目录中包含有ObjectARX的头文件
6LIB该目录中包含有ObjectARX的库文件
7REDISTRIB该目录中包含有ObjectARX应用程序可能用到的DLL文件
8SAMPLES该目录中包含有22个子目录分别保存着一个完整的具有代表性的ObjectARX例程
9UTILS该目录下包含有ObjectARX扩展应用程序使用的文件
19.1.4  ObjectARX的类库简介
ObjectARX开发工具中提供了如下几种类库
1AcRx类库 
该类库提供了系统级的类和C++的宏指令集用于约束一个应用程序以及实时类注册和识别该类的基类为AcRxObject提供了如下功能
1对象实时类的标识及继承分析
2对现有类的扩充定义
3对象的比较及检验
4对象的复制
2AcEd类库 
该类库用于注册本地命令和系统事件通知
3AcDb类库 
该类库提供了可直接访问AutoCAD数据库结构的类用于对AutoCAD实体和对象进行各种操作
4AcGi类库 
该类库提供了图形界面工具用于绘制和渲染AutoCAD实体
5AcGe类库 
该类库可被AcDb类所引用可用于线形代数和几何实体的操作
19.1.5  ObjectARX的变量与常量
1数据类型
为了提高程序的可读性ObjectARX中定义了如下几种数据类型
typedef double ads_real//实数
第19章AutoCAD二次开发简介  405
typedef ads_real ads_point[3]//点
typedef ads_real ads_matrix[4][4]//转换矩阵
榆林学院图书馆typedef long ads_name[2]//实体和选择集名称
2常量
ObjectARX中定义了如下几种常量值
#define TRUE 1
#define FALSE 0
#define X 0
#define Y 1
#define Z 2
#define EOS ‘\0’ //字符串结束符
#define PAUSE \\ //暂停符
3结果缓冲区和数据类型码
结果缓冲区result buffer结构可以用来表示AutoCAD中所有数据类型该结构中的数据定义为一个联合体所以数据类型可发生变化结果缓冲区中的数据的类型通过结构中的数据类型码type codes来定义结果缓冲区结构的定义如下
union ads_u_val{
中国达人秀海派清口ads_real rreal;
ads_real rpoint[3];
short rint;
char *rsting;
long rlname[2];
long rlong;
struct ads_binary rbinary;
};
struct resbuf{
struct resbuf *rbnext//链表指针
short restype//数据类型码或DXF组码
union ads_u_val resval//数据
};
其中常用的数据类型码及其意义如表19-1所示
表19-1 结果缓冲区结构中的数据类型码
数据类型码意义
RTNONE 无数据
RTREAL 实数
RTPOINT 二维点
RTSHORT 短整型
406  第19章  AutoCAD二次开发简介
续表
数据类型码意义
RTANG 角度
RTSTR 字符串
RTENAME 实体名称
RTPICKS 选择集名称
RT3DPOINT 三维点
RTLONG 长整型
通常使用链表作为结果缓冲区的数据结构图19-1表示了一个具有3个结点的结果缓冲区链表
图19-1  结果缓冲区链表示例
4函数返回的结果类型码
ObjectARX全局函数的返回值可以是其结果值也可以是结果类型码通常全局函数返回结果类型码以反映函数操作情况结果类型码的种类及其意义如表19-2所示
表19-2  ObjectARX函数返回的结果类型码
结果类型码意义
RTNORM 函数操作成功
RTERROR 函数操作失败
RTCAN 用户按下ESC键取消操作
RTREJ 拒绝执行操作操作不合法
RTFAIL 与AutoLISP通信失败
RTKWORD 用户键入了关键字或其他文本
19.1.6  使用Visual C++创建ARX程序
本小节通过一个简单的实例来讲述ARX程序的创建过程介绍编制Object ARX程序的一些基本步骤和原则并初步了解ARX程序与AutoCAD进行通讯的方式如同学习其他计算机语言一样首先来创建一个最简单的ARX程序Hello.ARX在AutoCAD 2004中加载并运行该程序将会在命令行出现Hello, ObjectARX!
19.1.7  建立ARX程序的基本步骤
由于ARX程序是一种可以共享AutoCAD地址空间并对AutoCAD进行直接调用的动态链接库因此应该按照下列基本步骤建立ARX程序
第19章AutoCAD二次开发简介  407
1创建自定义类来实现新的命令用户可以从ARX类层次关系中的大多数类和符号表类中派生自己的类
2决定ARX程序应该响应的AutoCAD消息AutoCAD通过向ARX程序发出一系列的消息指明在它内部发生的特殊事件ARX程序必须对其中的某些消息作出反映并触发相应的操作
3实现应用程序与AutoCAD通信的入口AutoCAD通过函数acrxEntryPoint()来调用ARX程序而不是象普通的C++程序那样使用main()函数函数acrxEntryPoint()中可以用switch语句处理AutoCAD的各种返回信息根据不同信息执行不同的函数并返回状
态码如果针对特定的消息返回出错代码则必须用case语句来处理最后必须用
AcRx::kRetOk作为函数acrxEntryPoint()的最终返回值
4完成ARX程序的初始化用户必须在acrxEntryPoint()函数的AcRx::kInitAppMsg 事件中或者该事件调用的函数例如initApp函数中对程序中自定义的所有类进
行初始化然后调用acedRegCmds->addCommand()函数在AutoCAD命令堆栈中注册新命令
5实现卸载Unload功能用户必须在acrxEntryPoint()函数的AcRx::
kUnloadAppMsg事件中或者该事件调用的函数例如unloadApp函数中调用
acedRegCmds->removeGroup()函数将initApp函数中注册的新命令组从AutoCAD命令
堆栈中清除调用deleteAcRxClass()函数清除程序中自定义的任何类然后删除所有由应用程序添加到AutoCAD中的对象并清除所有与AcDbObject AcDbDatabase
AcRxDynamicLinker或AcEditor对象相关联的事件反应器
19.1.8  AutoCAD与ARX程序之间的消息传递fsr
AutoCAD向ARX程序发送4类消息
1发送给所有ARX程序的消息kInitAppMsg kUnloadAppMsg kLoadDwgMsg
邱宗志
kPreQuitMsg
2只发送给通过调用acedDefun() 函数注册AutoLISP函数的ARX程序的消息
kUnloadDwgMsg kInvkSubrMsg kEndMsg kQuitMsg kSaveMsgkCfgMsg
3只发送给注册service对象的ARX程序的消息kDependencyMsg
kNoDependencyMsg
4只发送给使用ActiveX控件对象的ARX程序的消息kOleUnloadAppMsg 普通的ARX程序仅需要响应消息kInitAppMsg和kUnloadAppMsg这两种消息的含义和ARX程序对它们的响应方式为
1消息kInitAppMsg当AutoCAD 加载ObjectARX应用程序并开始进行与应用程序的通信时发送此消息
2对于此消息ARX程序应该注册服务对象类AcEd命令和事件反应器以及
AcRxDynamicLinker类事件反应器初始化应用程序的系统资源如设备窗口并执行简单的初始化操作这时AcRx AcEd和AcGe类库都应该被激活如果需要对应用程序进行解锁或重新加锁操作还应该保存pkt参数
但是这里不能进行下列操作初始化设备驱动程序激活用户界面资源按特殊顺序

本文发布于:2024-09-21 19:49:24,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/118836.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:程序   函数   结果   应用程序   操作
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议