基于ObjectARX的AutoCAD尺寸标注测试系统二次开发

龙源期刊网 http://www.qikan.com.cn

基于ObjectARX的AutoCAD尺寸标注测试系统二次开发

作者:王传俊

来源:《数字技术与应用》2013年第03期

摘要:分析了在Windows操作系统下,基于Visual C++运行环境,利用ObjectARX应用程序对AutoCAD进行二次开发的优点和基本方法。以AutoCAD尺寸标注测试系统为实例,给出开发组合体三视图尺寸标注测试系统的方法,进一步验证了在Visual C++环境下用ObjectARX对AutoCAD二次开发的可行性。

关键词:ObjectARX AutoCAD 二次开发 尺寸标注测试系统

中图分类号:TB237 文献标识码:A 文章编号:1007-9416(2013)03-0195-02

AutoCAD是当今应用最为广泛的计算机辅助绘图软件之一,目前已经成为工程设计领域普遍使用的技术标准。同时由于AutoCAD采用了开放的软件设计风格,留有包括C/C++在内的多种二次开发接口,使得用户可以根据自身要求,定制、开发不同的功能模块,便于准确、快速、高效地完成更繁琐的工程设计工作[1]。目前AutoCAD二次开发常用的工具有:Visual LISP、ObjectARX、ADS、VBA等[2]。其中ObjectARX以Visual C++为编程环境,最大的特点是包括一组动态链接库(DLL),可以直接访问AutoCAD核心数据结构、图形系统[3],同时在运行时可以扩展命令,大大提高了功能模块的安全性、高效性和代码可重复使用性。 1 程序设计的编写 1.1 程序的结构

ObjectARX程序实质上是一个动态链接库(DLL),Windows与DLL之间采用消息传递机制通信,通过acrxEntryPoint( )来调用ARX程序,并向其发出载入消息[4]。由入口程序中的switch( )调用初始化函数完成程序的初始化工作。基本结构如下: extem “C” Acrx:: AppRetCode

AcrxEntryPoint (Acrx::AppMsgCode msg, void* pkt) { switch(msg)

{case AcRx::KinitAppMsg:

acrxDynamicLinker->unlock Application(pkt);

龙源期刊网 http://www.qikan.com.cn

acrxRegisterAppMDIAware (pkt); InitApp(); break ;

case AcRx::kUnloadAppMsg: UnloadApp (); break; default: break; }

return AcRx::kRetOK;} [5]

其中Object ARX应用程序定义的外部命令可以通过acedRegCmds()宏的addCommand函数在AutoCAD命令堆栈中注册新命令[6],同时指定所要调用的函数。 1.2 定义模块

由于ARX应用程序是一个动态链接库,因此要正确生成程序模块,必须有一个相应的模块定义文件,该文件中必须定义AutoCAD调入的入口函数名,便于AutoCAD访问该函数[7]。模块定义如下:

DESCRIPTION ‘ARX sample application’ LIBRARY ARX EXPORTS

AcrxEntryPoint PRIVATE AcrxGetApiVersion PRIVATE 2 实例设计方法

基于ObjectARX的练习测试系统是以AutoCAD 2004为基本绘图界面,通过可视化通信的图形界面,用鼠标点击完成组合体三视图的尺寸标注,同时更能够对答案进行判断,实现了学生在AutoCAD 2004环境下进行组合体三视图尺寸标注的自主学习模式。

龙源期刊网 http://www.qikan.com.cn

设计思路是:根据AutoCAD尺寸标注方式,线形尺寸通过选择尺寸的起点pt1,终点pt2和尺寸线pt_temp的位置点确定,圆弧通过圆心cp和尺寸线的定位点pt_temp来进行标注,所以这些点是尺寸标注的关键因素。在编程之前对组合体三视图本需要标注的各个特征端点按照顺序依次编号sp,测试系统主要是根据这几个特征点的选择来判断分析尺寸标注是否正确。 由于组合体三视图在进行尺寸标注时,各个视图内的节点在表达上需要形成良好的内在逻辑关系和存储方式,便于逻辑结构上的统一,因此采用的数据结构为数组[8]。数组元素可以随机访问,所以将三视图中的节点分别定义为:pt1[i](主视图),pt2[j](俯视图), pt3[k](左视图),其中i,j,k分别表示结点个数,便于实现对数组的遍历。 struct sturcts_points

{ ads_point first_pt;//坐标起点 ads_point second_pt;//坐标终点 ads_point pt_temp;//尺寸线的定位点 int fp; //尺寸的起点编号 int sp; //尺寸的终点编号 }

组合体尺寸标注的个数是固定的,但在平面投影图上进行尺寸标注的时候,还必须考虑尺寸标注的多解问题[9]。如:长方体的长可以在主视图上标注,也可以在俯视图上标注;标注定形尺寸后,定位尺寸间接标注出,如果必须标注,那么就要调整定形尺寸的标注,这些问题必须动态调整。

(1)选择所要进行尺寸标注的特征点;

(2)判断所选择的点是否为特征点,如果不是在系统提示下重新选取特征点; (3)判断所选特征点Di是否属于特征点集合D[];

(4)判断该处尺寸标注标志flash[i]的值,flash[i]=-1该处未被标注。 部分实现代码如下: case 1:

{ select_point(); switch(k){

联系客服:779662525#qq.com(#替换为@) 苏ICP备20003344号-4