(2021年整理)AUTOCAD二次开发笔记(ObjectARX)---全部_第1页
(2021年整理)AUTOCAD二次开发笔记(ObjectARX)---全部_第2页
(2021年整理)AUTOCAD二次开发笔记(ObjectARX)---全部_第3页
(2021年整理)AUTOCAD二次开发笔记(ObjectARX)---全部_第4页
已阅读5页,还剩43页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、autocad二次开发笔记(objectarx)-全部autocad二次开发笔记(objectarx)-全部 编辑整理:尊敬的读者朋友们:这里是精品文档编辑中心,本文档内容是由我和我的同事精心编辑整理后发布的,发布之前我们对文中内容进行仔细校对,但是难免会有疏漏的地方,但是任然希望(autocad二次开发笔记(objectarx)-全部)的内容能够给您的工作和学习带来便利。同时也真诚的希望收到您的建议和反馈,这将是我们进步的源泉,前进的动力。本文可编辑可修改,如果觉得对您有帮助请收藏以便随时查阅,最后祝您生活愉快 业绩进步,以下为autocad二次开发笔记(objectarx)-全部的全部内容

2、。objectarx开发环境的创建与开发实例hello world(vs2005+autocad2008+objectarx2008) 在一个做cad二次开发的公司做web开发,感觉可提升的空间很小。有必要研究一下公司的产品开发,以利发展。一、首先安装好vs05与cad2008安装cad的时候也没有什么特别,加载到虚拟光驱,安装过程中有个错误提示,不影响继续。二、安装objectarx2008直接打开解压缩到某个目录即可。比如c:objectarx 2008然后打开c:objectarx 2008utilsobjarxwiz目录,运行arxwizards.msi这样在新建c+项目的时候会出现o

3、bjectarx项目,如图三、包含文件工具选项项目和解决方案-vc+目录,如图所示:包含文件(添加图中前两个目录即可)库文件(添加图中前两个目录即可)四、新建objectarx项目,完成后添加mfc支持,如图所示:然后直接点finish打开acrxentrypoint.cpp点击左上角的a按钮,然后新建一个命令。如图:只需要修改internation name与localized name为testcmd即可添加完成后,会在acrxentrypoint。cpp中自动添加一句如下的代码:然后添加一句afxmessagebox(_t(this is a test command。”);五、加载与运

4、行在项目中win32debug目录下,把arxproject2.arx复制到桌面,注意先生成一下。打开cad08输入命令:ap打开加载对话框。找到。arx文件即可加载。如图:然后输入自己的命令testcmd就能运行了.如图:公司高手如云,希望能在cad二次开发方面有些发展。转行也行,呵呵.凡事以大气象去面对,优秀是一种习惯。 cad二次开发学习笔记一(画一条直接) arx内部是不需要调用cad命令的。调用 arx 函数或对象就可以象cad一样绘制、编辑实体.在autocad中画直接的命令是line0,01000,100通过objectarx画,新建一个命令cmd1代码如下:代码 /-arxpr

5、oject2。cmd1commandstaticvoidarxproject2cmd1(void)/addyourcodeforcommandarxproject2._mycommand1hereacutprintf(_t(”helloworld”);/在内存上创建一个新的acdbline对象acgepoint3dptstart(0,0,0);acgepoint3dptend(10000,10000,0);acdblinepline=newacdbline(ptstart,ptend);/基于autocad内部的实现机制,必须在堆上创建对象。acdbhostapplicationservice

6、s()workingdatabase()获得指向当前活动的图形数据库的指针。*/获得指向块表的指针acdbblocktable*pblocktable;acdbhostapplicationservices()-workingdatabase()getblocktable(pblocktable,acdb::kforread);/获得指向特定的块表记录(模型空间)的指针acdbblocktablerecord*pblocktablerecord;pblocktablegetat(acdb_model_space,pblocktablerecord,acdb::kforwrite);/将acdb

7、line类的对象添加到块表记录中acdbobjectidlineid;pblocktablerecordappendacdbentity(lineid,pline);/关闭图形数据库的各种对象pblocktable-close();pblocktablerecord-close();plineclose();ap加载然后cmd1运行.凡事以大气象去面对,优秀是一种习惯。 cad二次开发学习笔记二(创建一个对话框) 打开资源视图右击-添加资源-dialog双击对话框,弹出mfc类向导,输入类名firstclass,确定,创建对话框类。firstclass.h与firstclass.cpp需要在f

8、irstclass.h中包含#include ”resource.h”代码如下:大气象 #pragmaonce/firstclass对话框includeresource.h/这里包含资源头文件classfirstclass:publiccdialogdeclare_dynamic(firstclass)public:firstclass(cwnd*pparent=null);/标准构造函数virtualfirstclass();/对话框数据enumidd=idd_dialog1;protected:virtualvoiddodataexchange(cdataexchangepdx);/ddx

9、/ddv支持declare_message_map();新建一个cad命令,在acrxentrypoint.cpp添加如下代码:大气象 staticvoidarxproject2cmd2(void)/addyourcodeforcommandarxproject2。cmd2here/*cad维护的有自己的资源空间,我们添加对话框的时候,使用的是自己的资源空间,这个相当于通知cad准备下可能要开新的资源空间。这两个混一块一般没问题,但是如果出问题,就非常难找了,所以一般在命令中直接调用对话框中时,都要加上。*/cacmoduleresourceoverridemyresources;firstc

10、lassdlg;dlg.domodal();记得包含对话框头文件include firstclass。h”然后ap加载cmd2运行凡事以大气象去面对,优秀是一种习惯。 cad二次开发学习笔记三(封装添加实体到数据库函数) 学会查看objectarx帮助文档。acge开头图形计算.acdb图形数据库.在acrxentrypoint。cpp添加如下代码: 大气象 /将实体添加到数据库/cad中的实体最终都要添加到数据库中才能被显示(图纸其实是一个数据库格式的),所以它的作用就是添加实体到数据库中staticacad:errorstatusaddtodb(acdbentityent,acdbobje

11、ctidobjid)acad::errorstatuses;acdbblocktable*pblocktable;acdbblocktablerecord*pspacerecord;if((es=acdbhostapplicationservices()-workingdatabase()-getblocktable(pblocktable,acdb:kforread)!=acad::eok)returnes;if((es=pblocktablegetat(acdb_model_space,pspacerecord,acdb::kforwrite))!=acad:eok)returnes;if

12、(es=pblocktable-close())!=acad:eok)returnes;if(es=pspacerecordappendacdbentity(objid,ent)!=acad:eok)returnes;returnpspacerecord-close();public:/arxproject2.cmd3command(donotrename)staticvoidarxproject2cmd3(void)/addyourcodeforcommandarxproject2。cmd3hereacgepoint3dptstart(0,0,0);acdbcircle*pcircle=ne

13、wacdbcircle();pcirclesetcenter(ptstart);pcircle-setradius(1000);/也可以这样定义圆/acdbcircle*pcircle=newacdbcircle(ptstart,acgevector3d(0,0,1),100);acdbobjectidcircleid;/调用画实体函数if(addtodb(pcircle,circleid)!=acad:eok)/传入指针,传出idafxmessagebox(_t(”加入实体到数据库失败!”);pcircleclose();凡事以大气象去面对,优秀是一种习惯。 cad二次开发学习笔记四(得到选

14、中的实体,修改实体,如等分线段) acgevector3d是点阵的集合,通过等分点的差集得到.新的点可以通过点与点阵相差得到。大气象 public:/-arxproject2。partlinecommand(donotrename)staticvoidarxproject2partline(void)/addyourcodeforcommandarxproject2。partlinehereads_nameentname;ads_pointpt;acedentsel(_t(”n选择:),entname,pt);/得到选中的实体acdbobjectidobjid;/得到实体idif(acdbge

15、tobjectid(objid,entname)!=acad:eok)/如果没有选中的实体则返回acutprintf(_t(”nno”));return;acdbentitypent;/得到实体if(acdbopenobject(pent,objid,acdb::kforread)=acad:eok)acutprintf(_t(”nok));acdbline*pline=(acdbline)pent;/强制转换acgepoint3dptstart=plinestartpoint();/得到起点acgepoint3dptend=pline-endpoint();pentclose();/根据点和

16、线的方向生成点组,绘制线段intnpart=5;/五等分acgevector3dvect=(ptend-ptstart)/npart;/矩阵,点与点的差集平分可得到for(intn=0;nnpart;n+)acdbobjectidobjidnew;makeline(ptstart+n*vect,ptstart+(n+1)*vect,objidnew);/等分线段的方法/将选中的线段删除,if(acdbopenobject(pent,objid,acdb:kforwrite)=acad::eok)pent-erase();pent-close();/将实体添加到数据库/cad中的实体最终都要添加

17、到数据库中才能被显示(图纸其实是一个数据库格式的),所以它的作用就是添加实体到数据库中staticacad::errorstatusaddtodb(acdbentity*ent,acdbobjectidobjid)acad::errorstatuses;acdbblocktable*pblocktable;acdbblocktablerecord*pspacerecord;if((es=acdbhostapplicationservices()workingdatabase()getblocktable(pblocktable,acdb::kforread))!=acad::eok)retur

18、nes;if(es=pblocktable-getat(acdb_model_space,pspacerecord,acdb::kforwrite)!=acad::eok)returnes;if((es=pblocktableclose()!=acad:eok)returnes;if((es=pspacerecord-appendacdbentity(objid,ent)!=acad::eok)returnes;returnpspacerecordclose();private:/画线函数staticvoidmakeline(acgepoint3dptstart,acgepoint3dpten

19、d,acdbobjectidlineid)acdbline*pline=newacdbline(ptstart,ptend);if(addtodb(pline,lineid)!=acad:eok)/传入指针,传出idafxmessagebox(_t(”加入实体到数据库失败!”);pline-close();另外是几个cad用法:1.移动命令的使用输入m然后选择线段,或者线段的端点,就出现移动的辅助线。2.ap可以加载也可以卸载,选中要卸载的。凡事以大气象去面对,优秀是一种习惯. cad二次开发学习笔记五(在objectarx中使用mfc) 要实现的功能是:执行arxmodal命令,弹出如图所示

20、对话框选择点,则得到点坐标,选择角度则得到角度值。步骤一:新建基于mfc的objectarx项目,参考:/greatverve/archive/2010/05/31/objectarx-helloworld。html打开资源视图添加一个对话框id修改为idd_arx_modal(右击资源视图中的对话框打开属性面板,可以修改id)设计如图界面,id如下:idc_button_pointidc_button_angleidc_edit_xptidc_edit_yptidc_edit_zptidc_edit_angle选择两个button把owner dra

21、w设置为true完成界面。步骤二:打开类视图,右击项目添加类(这里不是右击对话框添加类)这张图有点小错误,这里dialog id:idd_arx_modal class name:carxdialog在类视图中右击carxdialog类添加变量这样会在头文件中生成源文件中生成根据这个规律添加其他变量大气象 private:cacuipickbuttonm_btnangle;cacuipickbuttonm_btnpoint;cacuinumericeditm_editxpt;cacuinumericeditm_editypt;cacuinumericeditm_editzpt;cacuiang

22、leeditm_editangle;voidcarxdialog:dodataexchange(cdataexchange*pdx)cacuidialog::dodataexchange(pdx);ddx_control(pdx,idc_button_angle,m_btnangle);ddx_control(pdx,idc_button_point,m_btnpoint);ddx_control(pdx,idc_edit_xpt,m_editxpt);ddx_control(pdx,idc_edit_ypt,m_editypt);ddx_control(pdx,idc_edit_zpt,m_

23、editzpt);ddx_control(pdx,idc_edit_angle,m_editangle);步骤三:为carxdialog添加initdialog消息响应。方法是打开类视图,右击属性再添加onclose()响应函数在头文件中添加几个变量public: cstring m_strangle; cstring m_strzpt; cstring m_strypt; cstring m_strxpt;在头文件中定义两函数 void displaypoint(); void displayangle();分别为两个按钮添加单击事件,为四个编辑框添加失去焦点事件。步骤四:打开acrxent

24、rypoint.cpp添加include “arxdialog。h”运行结果如图源码如下acrxentrypoint.cpp /(c)copyright2002-2005byautodesk,inc。/permissiontouse,copy,modify,anddistributethissoftwarein/objectcodeformforanypurposeandwithoutfeeisherebygranted,/providedthattheabovecopyrightnoticeappearsinallcopiesand/thatboththatcopyrightnoticean

25、dthelimitedwarrantyand/restrictedrightsnoticebelowappearinallsupporting/documentation。/autodeskprovidesthisprogram”asis”andwithallfaults。/autodeskspecificallydisclaimsanyimpliedwarrantyof/merchantabilityorfitnessforaparticularuse.autodesk,inc./doesnotwarrantthattheoperationoftheprogramwillbe/uninter

26、ruptedorerrorfree。/use,duplication,ordisclosurebytheu。s.governmentissubjectto/restrictionssetforthinfar52。22719(commercialcomputer/software-restrictedrights)anddfar252.2277013(c)(1)(ii)/(rightsintechnicaldataandcomputersoftware),asapplicable./-/-acrxentrypoint.h/-include”stdafx.hinclude”resource。h”#

27、include”arxdialog.h”/-#defineszrds_rxst(”)/-/-objectarxentrypointclassccadmfcapp:publicacrxarxapppublic:ccadmfcapp():acrxarxapp()virtualacrx::appretcodeon_kinitappmsg(void*pkt)/todo:loaddependencieshere/you*must*callon_kinitappmsghereacrx::appretcoderetcode=acrxarxapp:on_kinitappmsg(pkt);/todo:addyo

28、urinitializationcodeherereturn(retcode);virtualacrx:appretcodeon_kunloadappmsg(void*pkt)/todo:addyourcodehere/youmust*callon_kunloadappmsghereacrx::appretcoderetcode=acrxarxapp::on_kunloadappmsg(pkt);/todo:unloaddependenciesherereturn(retcode);virtualvoidregisterservercomponents()/cadmfc.showdlgcomm

29、and(donotrename)staticvoidcadmfcshowdlg(void)/addyourcodeforcommandcadmfc.showdlghere/防止资源冲突cacmoduleresourceoverrideresoverride;/显示objectarx的模态对话框carxdialogthedialog;thedialog。domodal();/-implement_arx_entrypoint(ccadmfcapp)aced_arxcommand_entry_auto(ccadmfcapp,cadmfc,showdlg,mycommand1,acrx_cmd_tr

30、ansparent,null)arxdialog。h /(c)copyright2002-2005byautodesk,inc。/permissiontouse,copy,modify,anddistributethissoftwarein/objectcodeformforanypurposeandwithoutfeeisherebygranted,/providedthattheabovecopyrightnoticeappearsinallcopiesand/thatboththatcopyrightnoticeandthelimitedwarrantyand/restrictedrig

31、htsnoticebelowappearinallsupporting/documentation。/autodeskprovidesthisprogram”asis”andwithallfaults./autodeskspecificallydisclaimsanyimpliedwarrantyof/merchantabilityorfitnessforaparticularuse.autodesk,inc./doesnotwarrantthattheoperationoftheprogramwillbe/uninterruptedorerrorfree./use,duplication,o

32、rdisclosurebytheu.s.governmentissubjectto/restrictionssetforthinfar52。22719(commercialcomputer/softwarerestrictedrights)anddfar252.2277013(c)(1)(ii)/(rightsintechnicaldataandcomputersoftware),asapplicable。/-/-arxdialog.h:declarationofthecarxdialog/-pragmaonce/-include”acui.h”/-classcarxdialog:public

33、cacuidialogdeclare_dynamic(carxdialog)public:carxdialog(cwndpparent=null,hinstancehinstance=null);enumidd=idd_arx_modal;protected:virtualvoiddodataexchange(cdataexchange*pdx);afx_msglresultonacadkeepfocus(wparam,lparam);declare_message_map()private:cacuipickbuttonm_btnangle;cacuipickbuttonm_btnpoint

34、;cacuinumericeditm_editxpt;cacuinumericeditm_editypt;cacuinumericeditm_editzpt;cacuiangleeditm_editangle;public:virtualbooloninitdialog();afx_msgvoidonclose();public:cstringm_strangle;cstringm_strzpt;cstringm_strypt;cstringm_strxpt;voiddisplaypoint();voiddisplayangle();afx_msgvoidonbnclickedbuttonpo

35、int();afx_msgvoidonbnclickedbuttonangle();afx_msgvoidonenkillfocuseditxpt();afx_msgvoidonenkillfocuseditypt();afx_msgvoidonenkillfocuseditzpt();afx_msgvoidonenkillfocuseditangle();;arxdialog。cpp /(c)copyright2002-2005byautodesk,inc./permissiontouse,copy,modify,anddistributethissoftwarein/objectcodef

36、ormforanypurposeandwithoutfeeisherebygranted,/providedthattheabovecopyrightnoticeappearsinallcopiesand/thatboththatcopyrightnoticeandthelimitedwarrantyand/restrictedrightsnoticebelowappearinallsupporting/documentation./autodeskprovidesthisprogram”asis”andwithallfaults。/autodeskspecificallydisclaimsa

37、nyimpliedwarrantyof/merchantabilityorfitnessforaparticularuse。autodesk,inc./doesnotwarrantthattheoperationoftheprogramwillbe/uninterruptedorerrorfree。/use,duplication,ordisclosurebytheu.s.governmentissubjectto/restrictionssetforthinfar52。22719(commercialcomputer/software-restrictedrights)anddfar252.

38、2277013(c)(1)(ii)/(rightsintechnicaldataandcomputersoftware),asapplicable./-/-arxdialog.cpp:implementationofcarxdialog/-includestdafx。h”#include”resource.h”include”arxdialog。h”/-implement_dynamic(carxdialog,cacuidialog)begin_message_map(carxdialog,cacuidialog)on_message(wm_acad_keepfocus,onacadkeepf

39、ocus)on_wm_close()on_bn_clicked(idc_button_point,carxdialog::onbnclickedbuttonpoint)on_bn_clicked(idc_button_angle,carxdialog::onbnclickedbuttonangle)on_en_killfocus(idc_edit_xpt,&carxdialog:onenkillfocuseditxpt)on_en_killfocus(idc_edit_ypt,carxdialog::onenkillfocuseditypt)on_en_killfocus(idc_edit_z

40、pt,carxdialog::onenkillfocuseditzpt)on_en_killfocus(idc_edit_angle,&carxdialog::onenkillfocuseditangle)end_message_map()/-carxdialog::carxdialog(cwnd*pparent/=null*/,hinstancehinstance/=null*/):cacuidialog(carxdialog::idd,pparent,hinstance)/-voidcarxdialog::dodataexchange(cdataexchangepdx)cacuidialo

41、g::dodataexchange(pdx);ddx_control(pdx,idc_button_angle,m_btnangle);ddx_control(pdx,idc_button_point,m_btnpoint);ddx_control(pdx,idc_edit_xpt,m_editxpt);ddx_control(pdx,idc_edit_ypt,m_editypt);ddx_control(pdx,idc_edit_zpt,m_editzpt);ddx_control(pdx,idc_edit_angle,m_editangle);/-/-neededformodelessdi

42、alogstokeepfocus./-returnfalsetonotkeepthefocus,returntruetokeepthefocuslresultcarxdialog:onacadkeepfocus(wparam,lparam)return(true);boolcarxdialog:oninitdialog()cacuidialog:oninitdialog();/todo:在此添加额外的初始化/设置点的范围m_editxpt.setrange(-100。0,100。0);m_editypt。setrange(100.0,100。0);m_editzpt。setrange(100.0,100。0);/设置角度的输入范围m_editangle.setrange(0.0,90。0);/加载默认的位图m_btnpoint.autoload();m_btnangle。autoload();/

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论