AutoCAD二次开发以实现参数化绘制螺钉
[摘要]简单介绍AutoCAD二次开发的工具ObjectARX应用程序的概况,并分析了运用该工具实现六角螺钉参数化绘制程序的编写基本过程和编写要点。
[关键词]AutoCAD;ObjectARX;Visual C++;二次开发;参数化
中图分类号:TP391.72文献标识码: A
1、前言
AutoCAD是目前在Windows环境下应用最广泛,使用人数最多的CAD软件。但AutoCAD所提供给的只是一般的通用的CAD功能,如造型、绘图、编辑、注释等,要想完成一个设计项目,尤其当项目中不同规格的同一零件(通常指标准件)数量庞大时,单纯CAD中的通用功能就显捉襟见肘了。 因此,对AutoCAD的二次开发十分必要。目前在AutoCAD中能使用二次开发工具的有:ObjectARX、AutoLisp、Visual Lisp、Java、Visual Basic等。其中ObjectARX技术逐渐成为AutoCAD二次开发的主流。0bjectARX(ARX表示AutoCAD运行时扩展——AutoCAD Runtime eXtension)是上个世纪末Autodesk公司随AutoCAD推出的新一代功能强大的AutoCAD二次开发工具,面向对象的C++编程环境,在其环境下开发的ObjcctARX应用程序与AutoCAD在同一地址空间内运行并能直接利用AutoCAD核心数据库和代码,利用AutoCAD的开放结构,可以直接访问AutoCAD数据库结构、图形系统以及CAD几何造型核心,因此,ObjectARX应用程序具有模块性好、独立性强、连接简单、使用方便、内部功能高效实用、代码可重用性强、支持MFC等优点而被愈来愈多的人们所使用[1]。
参数化设计(Parametric,也叫尺寸驱动Dimension-Driven)是CAD技术在实际应用中提出的课题,它不仅可使CAD系统具有交互式绘图功能,还具有自动绘图的功能。利用参数化设计手段开发的专用产品设计系统,可使设计人员从大量繁重而琐碎的绘图工作中解脱出来,可以大大提高设计速度,并减少信息的存储量。本文试图通过利用0bjectARX开发工具编写一个基于命令行的参数化绘制螺钉的ARX程序,为广大地AutoCAD二次开发程序员提供帮助及参考。
ARX应用程序的运行机制请读者参阅相关资料,在此不一一赘述,本文着重分析参数化绘制螺钉的ARX程序的功能分析以及如何通过编制程序实现。
2、ARX应用程序的编写
2.1 在编写应用程序之前,需要了解ObjectARX主体程序的结构
ARX程序通常由初始化程序和用户定义的命令函数两部分组成[2]。初始化部分主要由入口函数acrxEntrypoint()定义、初始化函数initApp()定义和ARX卸载程序的函数定义组成。ARX初始化函数initApp()通常是调用addCommand()函数注册用户定义的AutoCAD命令,而卸载函数unloadApp()调用RemoveGroup()函数释放addCommand()函数定义的命令组。
ARX编程的一般结构为:
#include <aced.h> //包含头文件
#include <rxregsvc.h>
#include<adslib.h>
……
void function();//声明用户定义的命令函数
void initApp() //ARX程序初始化,往命令堆栈中添加命令
{……}
void unloadApp() //删除该程序的命令组
{……}
extem”c”AcRx::AppRetcode acrxEntrypoint(AcRx::AppMsgcode msg,void* pkt)
//程序入口函数,AcRx::AppRetcode为返回给AutoCAD的状态码,msg为ARX内核向应用程序发出的消息,pkt为回调数据信息指针
{switch(msg)//对msg消息的类型进行判别
{
case AcRx::klnitAppMsg: //载ARx应用程序时,AutoCAD发给应用程序的消息
acrxDynamicLinker->unloadApplication(pkt);//允许卸载应用程序
initApp()://调用initApp()初始化函数
break;
case AcRx::kUnloadAppMsg;//用户卸载应用程序或关闭当前绘图任务时AutoCAD发给应用程序的消息
unloadApp();//调用卸载函数
break;
default;
break;
{
return AcRx::kReto;//ARX程序返回给AutoCAD的状态码
}
void function() //用户为完成特定任务而编写的命令函数
{……}
2.2 ObjectARX应用程序的编译和链接
不同版本的ObjectARX的应用程序需在不同版本的Visual C++环境下进行编译、链接生成.arx文件,才能在AutoCAD中加载、运行[3].在进行编译前还要对Visual C++中的一些选项(如Projlect\settings…\link)进行设置,可参考有关资料,此处不再赘述。 编译链接选项:Build\Build xxx.arx。
3、前期准备工作
在充分了解了ARX程序的运行机制和程序的主体结构以后,就可以着手准备开发应用程序了。首先,手头上应具备以下几个开发工具软件:①Microsoft Visual Studio C++ 6.0;②AutoCAD2000或更高版本;③对应上述AutoCAD版本的ObjectARX开发工具包(可以从autodesk官方网站上下载);
然后将ObjectARX嵌入VC。其中包括为ARX程序指定包含库文件和头文件的路径和安装ObjectARX程序向导等[4],具体方法请参阅相关书籍。需要注意的是,必须要安装ObjectARX 2000 AppWizard,这一步骤可谓至关重要,因为若是用VC原有的DLL程序向导编写,则本例源程序中需调用的库文件名和头文件都要在VC应用环境设置中逐个手工输入,工作量较大且费时。如果将来开发另一个ARX程序又不清楚会用到哪个库文件和头文件,或者在VC应用环境设置中遗漏某个库文件和头文件,将会给程序编写带来极大困难。安装ObjectARX程序向导后,该向导能自动为你的程序添加所有需要的库文件和头文件(甚至有时这些文件你可能用不着),将为程序员节约大量时间,从而缩短CAD二次开发的周期。
4、参数化螺钉绘制程序实现过程
4.1 基于命令行的参数化绘制螺钉的ARX程序功能分析
本文需要实现的AutoCAD应用程序是一个基于命令行的参数化绘制螺钉的ARX程序,其主要功能是加载该程序以后,根据AutoCAD绘图区下方命令行的提示,只要依次拾取螺钉插入点,输入螺钉的长度和螺钉大径后,该程序能直接为设计人员绘制出符合输入参数的螺钉。
4.2 螺钉绘制思路
螺钉的主要参数包括公称长度和螺纹大径,其他部分可以根据螺纹连接件的比例画法[5]画出。关键在于找出螺钉图形各个关键点和插入点(p0)之间的相对关系和换算坐标,然后用直线将所有各点连接起来即可。螺钉各尺寸参数之间的关系如图1所示(由于版面限制只标出p0,各关键点,螺钉头部圆弧圆心应该有二十多个)
图1螺钉绘制原理
4.3 ARX程序的编写
前文已经介绍过ObjectARX程序结构,其中程序末尾是用户为完成特定任务而编写的命令函数function(),也是实现本文程序功能的关键部分,按照上述思路在这个部分编写用户主体函数中的程序(在本文中命令函数取名“mydraw”),其正视图的主要实现代码如下:
void myDraw()
{
double x0,y0;
double x1,y1,x2,y2;
//命令行提示拾取螺钉定位点
ads_point pt;
acedGetPoint(NULL,"请拾取螺钉定位点:",pt);
//将拾取点的X坐标和Y坐标存入内存变量x0和y0
x0=pt[X];
y0=pt[Y];
//命令行提示输入螺钉长度,取得参数存入内存变量l
double l;
acedGetDist(NULL,"请输入螺钉长度:",&l);
//命令行提示输入螺钉大径,取得参数存入内存变量d
double d;
acedGetDist(NULL,"请输入螺钉大径:",&d);
//绘制螺钉(使用自定义函数CreateLine)
//lp0>p1,调用CreateLine函数绘制p0到p1之间的直线
x1=x0;y1=y0;x2=x1;y2=y0+0.5*d;
AcGePoint3d p1(x1,y1,0.0);
AcGePoint3d p2(x2,y2,0.0);
CreateLine(p1,p2);
……
//绘制螺钉头部的圆弧(调用AotuCAD的画圆弧命令先起点,弧心,终点)
ads_point p001,p002,p003,p004,p005,p006,p007,p008,p009;
//弧p21(start)>p23(center)>p22(end)确定各点坐标
p001[X]=x0-0.6*d;p001[Y]=y0+0.5*d;p001[Z]=0.0;
p002[X]=x0+0.8*d;p002[Y]=y0;p002[Z]=0.0;
p003[X]=x0-0.6*d;p003[Y]=y0-0.5*d;p003[Z]=0.0;
……
acedCommand(RTSTR,"arc",
RTSTR,"ce",
RTPOINT,p002,
RTPOINT,p001,
RTPOINT,p003,
……}
//直线绘制函数CreateLine()
AcDbObjectId
CreateLine(AcGePoint3d point1,AcGePoint3d point2)
{
AcDbLine *pLine=new AcDbLine(point1,point2);
AcDbBlockTable *pBlockTable;
acdbHostApplicationServices()->workingDatabase()
->getSymbolTable(pBlockTable,AcDb::kForRead);
AcDbBlockTableRecord *pBlockTableRecord;
pBlockTable->getAt(ACDB_MODEL_SPACE,pBlockTableRecord,
AcDb::kForWrite);
pBlockTable->close();
AcDbObjectId lineId;
pBlockTableRecord->appendAcDbEntity(lineId,pLine);
pBlockTableRecord->close();
pLine->close();
return lineId;
}
4.4加载和运行
1)启动AutoCAD,选择菜单“工具/加载应用程序”,出现“加载/卸载应用程序”对话框,选取刚才生成的.arx格式文件,然后单击“加载”,确认对话框最下面的状态对话框中显示加载成功,单击“关闭”按钮。
2)在命令行中键入命令在initApp()中定义过“mydraw”,系统将提示用户“请拾取螺钉定位点:”,用鼠标点选AutoCAD绘图窗口中的某一点后,系统接着提示 “请输入螺钉公称长度:”,在你输入公称长度值后,系统最后会提示“请输入螺钉螺纹大径:”,在用户输入螺纹大径值后,系统将会按照输入的尺寸在相应位置绘出螺钉的图象,如图2
图2螺钉的侧视图
5、运行时需注意的问题
1)编写C++程序代码时,除注释文本部分外,所有代码包括符号必须使用英文输入法,尤其是逗号分号等,否则会导致程序编译出错,无法生成ARX程序。
2) 受AutoCAD本身软件的限制,在低倍放大窗口中执行此程序会令直线命令自动捕捉邻近点,有些时候这些邻近点并不是程序中计算出的关键点,导致直线连接错误。所以在运行此程序时需关闭AutoCAD的对象捕捉功能就不会出现螺钉外型错误的情况。
3) 根据螺纹连接件的比例画法,螺纹长度是大径的两倍,应该比公称长度要短,即l>2d,这条原则已经写入程序源代码,所以在输入的公称长度和螺纹大径数值时应予与注意。否则画出的螺钉将会变形。
6、结束语
文介绍的一个基于命令行的参数化绘制螺钉的ARX程序编写过程和其中要点,希望能给广大程序设计人员一点参考,起到抛砖引玉的作用。随着CAD在企业应用的不断深化,开发符合企业自身特点的软件势在必行。ObjectARX应用程序在AutoCAD中运行稳定、可靠,可充分利用Visual C++面向对象、以及MFC丰富的资源和强大的开发功能,实现AutoCAD功能的拓展和参数化设计。对于开发速度和性能要求都很高的应用程序或大型CAD应用软件,ObjectARX能发挥巨大的作用,因而学习和掌握ObjectARX对AutoCAD的二次开发具有重要的现实意义。
参考文献
[1]《0bjectARX实用指南--AutoCAD二次开发》 宋延杭 王川 永宣编著 人民邮电出版杜 1999.8
[2]《AutoCAD2000 ARX二次开发实例精粹》 老大中,起占强编 国防工业出版社2001.1
[3]《AutoCAD 2000 ObjectARX编程指南》(爱尔兰)麦克奥理〔McAuley, C.〕著;李世国等译机械工业出版社,2000.7
[4]《AutoCAD高级开发技术:ARX编程及应用》李世国编著 机械丁业出版社
1999.9
[5]《机械制图》第四版 大连理工大学工程画教研室编 高等教育出版社 1993
[6]《用0bjectARX开发AutoCAD 2000应用程序》老虎工作室 陈杉 王宁 郭剑峰人民邮电出版社 2000.1
“本文中所涉及到的图表、注解、公式等内容请以PDF格式阅读原文”
版权声明:
1.十号范文网的资料来自互联网以及用户的投稿,用于非商业性学习目的免费阅览。
2.《AutoCAD二次开发以实现参数化绘制螺钉》一文的著作权归原作者所有,仅供学习参考,转载或引用时请保留版权信息。
3.如果本网所转载内容不慎侵犯了您的权益,请联系我们,我们将会及时删除。
本栏目阅读排行
栏目最新
- 1在农民收入调查工作动员培训会上讲话
- 22024年领导干部政治素质自评材料(完整)
- 3公司党委党建工作总结报告【完整版】
- 42024年主题教育党建调研开展情况总结
- 52024年度区妇联关于党建工作述职报告(完整)
- 6关于加强企业人才队伍建设调研与思考(完整文档)
- 72024县党员干部抓基层党建工作述职报告
- 8第二批主题教育研讨发言:时刻“以民为本”,听“实言实语”,办实事好事
- 92024关于党员干部法治信仰情况调研报告(2024年)
- 10局网络安全工作责任制落实自查报告(全文)
- 11XX国企分管领导关于党建设引领企业高质量发展研讨发言(范文推荐)
- 122024年第二批主题教育专题读书班研讨发言提纲(6)【完整版】