首页 > 范文大全 > 正文

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

开篇:润墨网以专业的文秘视角,为您筛选了一篇基于ObjectARX的AutoCAD尺寸标注测试系统二次开发范文,如需获取更多写作素材,在线客服老师一对一协助。欢迎您的阅读与分享!

摘要:分析了在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);

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环境下进行组合体三视图尺寸标注的自主学习模式。

设计思路是:根据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){

case 1:

{ if(fp==1||fp==3)

{ fp==0;

if((sp==3||sp==1)&&(flag[0]=-1))

{ accdCommand(RTSTR,”COLOR”,RTSTR,”red”,0);

x++;

flag[0]=1;

break; }

else if((sp==3||sp==1)&&(flag[0]=1))

{acecAlert(“\n长方体尺寸已经标注,请不要重复标注。“);

break; }

else if((sp==23||sp==4)

{ acedAlert(“\n尺寸不能标注在虚线上。“);

accdCommand(RTSTR,”COLOR”,RTSTR,”cyan”,0);

break;}

else

{accdAlert(“\n 所选定的点不能标注尺寸。“);}

break;}

尺寸标注测试系统有与学生进行可视化通信的图形界面,能对测试结果给出结论。因此图形设计的结果存在图形文件中,图形文件中要求包括几何的,文本的和其他补充信息。在这一问题上采用递归的方法进行描述。

描述:

PROCEDURE //创建二维图形

REPEAT UNTIL //创建图形任务终止

DO WHILE

//出现与数字仪的交互时数字仪接口任务;判断尺寸标注请求;

线:对线形的尺寸标注任务;

圆/圆弧:对圆/圆弧的尺寸标注任务;

END;

DO WHILE

//出现键盘的交互时

键盘接口任务;

选择任务;

标注:对组合体三视图的尺寸标注任务;

答案:给出所有尺寸标注的正确答案任务;

END;

END REPETITION;

END PROCEDRE

3 结语

ObjectARX应用程序在AutoCAD中运行稳定、可靠,能方便高效地实现许多复杂功能,利用Visual C++面向对象的特点和强大的开发功能,实现AutoCAD功能的拓展和参数化设计,对于开发对速度和性能要求很高的应用程序,使用ObjectARX具有明显的优势。随着AutoCAD软件在工业设计应用的不断深化,学习和使用ObjectARX对AutoCAD的二次开发有极其重要的意义。

参考文献

[1]闻涛,赵良臣.用Object ARX进行AutoCAD二次开发的研究[J].自动化技术与应用,2006.5.

[2]宋延杭,王川,李永宣.Object ARX实用指南——AutoCAD二次开发[M].人民邮电出版社,1999.8.

[3]邵俊昌.AutoCAD Object ARX二次开发技术[M].电子工业出版社,2000.27.

[4]刘同成,林愉.基于Object ARX的AutoCAD二次开发及应用实例[J].机械设计与制造,2012.3.

[5]蒋先刚,罗文俊,谢平.AutoCAD工程绘图与二次开发[M].西南交通大学出版社,2000,12;163.

[6]王围,李波,邹元平.AutoCAD二次开发中的若干问题[J].电脑知识与技术,2012.1,1;173-174.

[7]孙广伟,王祥瑞. AutoCAD二次开发中门的设计与实现[J].吉林建筑工程学院学报,2012.12;54.

[8]林少丹.VC++程序设计基础.人民交通出版社[M].2009.09;206.

[9]陈文呴.工程制图与机械常识——练习与技能训练[M].电子工业出版社,2010.9;38.