Objectarx2008开发
基于ObjectArx的机械设计辅助绘图工具系统的开发

2 0 i 3年 6月
青 岛大学学报 ( 工程 技术版 ) J OU R N A L O F QI N G D A O U N I V E R S I T Y( E &T)
VoL 2 8 No. 2
J u n .2 0 1 3
证 。结果表 明 , 该 设计稳 定性 高 , 避 免 了不 必要 的重复 操作 , 缩 短 了设 计人 员 的绘 图时 问 ,
具有 广 阔的应用前 景 。 关键词 : 0b j e c t ARX;机 械 设 计 辅 助 工 具 ; Au t o C A D
中 图 分 类 号 :TH1 2 6 文 献 标 识 码 :A
文 章 编 号 :1 0 0 6—9 7 9 8 ( 2 0 1 3 ) 0 2—0 0 9 4 —0 5
基于 O b j e c t A r x的机械设计辅助绘 图工具 系统的开发
李 建 朋 ,沈 精 虎
( 青 岛大 学机 电工程 学院 ,山 东 青 岛 2 6 6 0 7 1 )
摘要 : 针 对 Au t o C AD 在 绘 图 方 面 存 在 的 不 足 , 本 文 在 Au t o C AD 平 台 上 , 基于 O b j e c t —
2 机 械 设 计 辅 助 工 具
系 统 选 用 的 开 发 平 台 是 Au t o C AD 2 0 1 0 , 以 Ob j e c t AR X 2 0 1 0作 为 开 发 工 具 , 配 以 Vi s u a l C+ + . NE T
2 0 0 8开 发语 言 , 对 Au t o C A D软 件进行 二 次开发 。 Vi s u a l C + +. NE T 2 0 0 8是一 款基 于 C ++语 言开 发 环境 , 它 的语 言 简 洁 , 具 有 智 能感 知功 能 , 开 发效 率快 , 已成 为世 界 主流 的 C + +语言 开 发工 具口 ] 。用 O b j e c t AR X 2 0 1 0对 Au t o C AD进 行二 次 开发 时 , 能 够 充分 利用 Vi s u a l C ++. NE T 2 0 0 8开发环 境 功 能强 大 、 界 面友好 、 操 作灵 活 、 效率高、 扩展 性 强 等 特点 实 现
ObjectARX

ObjectARX1. ObjectARX的介绍:ObjectARX是AutoDesk公司针对AutoCAD平台上的二次开发而推出的一个开发软件包,它提供了以C++为基础的面向对象的开发环境及应用程序接口,能真正快速的访问AutoCAD图形数据库。
与以往的AutuCAD 二次开发工具AutoLISP 和ADS不同,ObjectARX应用程序是一个DLL(动态链接库),共享AutoCAD的地址空间,对AutoCAD进行直接函数调用。
所以,使用ARX编程的函数的执行速度得以大大提高。
ARX 类库采用了标准的C++类库的封装形式,这也大大提高了程序员编程的可靠度和效率。
ObjectARX目前最新的版本是ObjectARX2002,它在原有Obj ectARX的基础上,特别增加了XML的支持。
XML是可扩展标记语言(eXtensible Markup Language)。
它是应用软件与Internet的接口。
通过支持XML,为Object ARX开发网络协作应用提供了有力的支持。
2. 开发环境的设置:运用ObjectARX进行二次开发,必须首先设置好ObjectARX的开发环境。
目前常用的开发环境是Microsoft Visual C++ 6.0。
同时,还需要安装ObjectARX SDK,ObjectARX SDK可以在AutoDesk公司的网站上免费下载。
不同的AutoCAD版本对应相应的ObjectARX SDK的版本,目前常用的是ObjectARX SDK for AutoCAD R14和ObjectARX SDK for AutoCAD2000i。
这两个开发工具在设置上略有不同,将进行对比介绍。
安装好VC++和ObjectARX后,就可以开始设置开发环境了。
1)设置INC和LIB文件寻找路径INC和LIB文件寻找路径为VC++的环境参数,设置一次即可,对以后的所有项目均有效。
选择Tools→Options …,出现Option对话框,选择Directories页,在Show Directories for中选择Include files,然后在Directo ries中加上ARX的INC目录路径c:\objectarx\inc(假定ARX的开发工具在c:\objec tarx\中)。
详解ObjectARX开发环境的...

详解ObjectARX开发环境的...在⼀个做CAD⼆次开发的公司做Web开发,感觉可提升的空间很⼩。
有必要研究⼀下公司的产品开发,以利发展。
⼀、⾸先安装好vs05与cad2008安装cad的时候也没有什么特别,加载到虚拟光驱,安装过程中有个错误提⽰,不影响继续。
⼆、安装ObjectArx2008直接打开解压缩到某个⽬录即可。
⽐如C:\ObjectARX 2008然后打开C:\ObjectARX 2008\utils\ObjARXWiz⽬录,运⾏ArxWizards.msi这样在新建C++项⽬的时候会出现ObjectARX项⽬,如图三、包含⽂件⼯具->选项->项⽬和解决⽅案->VC++⽬录,如图所⽰:包含⽂件(添加图中前两个⽬录即可)库⽂件(添加图中前两个⽬录即可)四、新建ObjectARX项⽬,完成后添加MFC⽀持,如图所⽰:然后直接点finish打开acrxEntryPoint.cpp点击左上⾓的a>按钮,然后新建⼀个命令。
如图:只需要修改Internation Name与Localized Name为testcmd即可添加完成后,会在acrxEntryPoint.cpp中⾃动添加⼀句如下的代码:然后添加⼀句AfxMessageBox(_T("this is a test command."));五、加载与运⾏在项⽬中win32\debug⽬录下,把ArxProject2.arx复制到桌⾯,注意先⽣成⼀下。
打开cad08输⼊命令:ap打开加载对话框。
找到.arx⽂件即可加载。
如图:然后输⼊⾃⼰的命令testcmd就能运⾏了。
如图:公司⾼⼿如云,希望能在CAD⼆次开发⽅⾯有些发展。
转⾏也⾏,呵呵。
到此这篇关于ObjectARX开发环境的创建与开发实例Hello World(VS2005+AutoCad2008+ObjectArx2008)的⽂章就介绍到这了,更多相关ObjectARX环境的创建内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!。
objectarx开发笔记2

刷新显示屏幕问题 (2)自定义实体时添加variable时相关问题 (2)用acdbOpenAcDbEntity打开实体后一定要关闭 (2)WCS到UCS的坐标转换 (2)选择过程中判断用户右键操作 (2)如何实现自定义实体Undo? (3)关于动态拖动的讨论 (3)刷新显示屏幕问题有时在程序中修改了实体,比如删除了实体,但在屏幕上没有及时地刷新,这时执行屏幕选取实体函数acedSSGet(),仍然能够选中原来的实体,明明它们已经删除了,这时怎么办呢,考虑用acedCommand(RTSTR, "REGEN", RTNONE);虽然也可以,但它会重新生成整个图形数据库,如果数据量很大,那么重生成的速度会很慢,这样就不可能在程序的一段循环语句中修改每一个实体后都对数据库重生成,那程序运行的时间大部分都花在刷新数据库上了,显然这不合理.解决方法:// 刷新显示屏幕actrTransactionManager->flushGraphics();acedUpdateDisplay();自定义实体时添加variable时相关问题问:用ObjectARX2007的Add Member Variable Wizard时出现页面错误怎么办?答:用vs2005自身的class view中的add variable就可以了。
用acdbOpenAcDbEntity打开实体后一定要关闭用acdbOpenAcDbEntity打开实体,不管是只读还是编辑方式,操作后都要关闭实体,否则再次打开时只能以只读方式打开。
WCS到UCS的坐标转换mbp为当前坐标(ads_point mbp),可以以下方法转换为wcs坐标。
struct resbuf wcs, ucs;wcs.restype = RTSHORT;wcs.resval.rint = 0;ucs.restype = RTSHORT;ucs.resval.rint = 1;acedTrans(mbp,&ucs,&wcs,0,mbp);选择过程中判断用户右键操作观察Acad2002的命令:mledit,这个命令运行后,用户需要选择操作对象,可是这个命令的选择功能有点特殊: 可以判断用户点了右键(等同直接按回车),,如果点了右键(或按回车),程序会退出.现在有个程序,也要选择一个对象,并且也想实现用户按回车(点击右键)后直接退出,我用的是acedEntSel函数,可是这些函数(包含acedNEntSelP..等.)都只能返回RENORM(正确选中),RTEROR(没有选中),用户按回车(点击右键)也是返回RTERROR请教下这里有没有解决的办法.int rc=acedEntSel("\nChoose a entity:",ent,pt);switch(rc){case RTCAN:acutPrintf("\nUser canceled.");break;case RTERROR:acutPrintf("\nNothing selected.");break;}如何实现自定义实体Undo?undo和redo实际上是调用了自定义实体的dwgInFields和dwgOutFields,你必须重载这个函数。
ObjectARX开发教程(转)——第1课:概述

ObjectARX开发教程(转)——第1课:概述第1课:概述介绍ObjectARX是AutoCAD运⾏时扩展。
使⽤ObjectARX SDK(软件开发⼯具包),您可以构建应⽤程序,以⽀持AutoCAD功能的开发,例如命令,对话框,实体,对象等。
ObjectARX应⽤程序本质上是⼀个动态链接的DLL库,可以将其加载到AutoCAD⼯作环境中,并允许您如上所述访问属性。
为了能够构建DLL库,在安装Microsoft Visual Studio .NET环境时需要遵循⼀些强制性规则,并确保该应⽤程序已被AutoCAD批准。
此应⽤程序的实现与本机功能相同。
这样,Autodesk⽤户可以使⽤ObjectARX直接构建您已经知道的产品,例如Autodesk MAP和Architectural Desktop等。
⽤户要求由于ObjectARX不是根据⽤户要求的简单⼯具,因此需要⼤量的精⼒和某些技能。
如果您不这样做,我建议您先学习更多的技能,然后再返回以继续该课程。
学习ObjectARX的最低要求基本上是:Visual Studio .NET基础;有点C ++知识;AutoCAD的⾼级知识;MFC概念(Microsoft基础类);⾯向对象技术(Objective-iented Techniques);话虽如此,本课程不是复杂的教程,也不是针对⾼级功能的。
我相信在学习了ObjectARX的基础知识和关键概念之后,您可以⾃⼰进⼀步发展。
我不会关注.NET使本课程尽可能简单的功能。
⼀旦您从内部学习并了解了AutoCAD的⼯作原理,您将了解ObjectARX的功能并能够构建出⾊的应⽤程序!如何使⽤ObjectARX SDK下载ObjectARX SDK并将其解压缩到硬盘后,您将在其中找到以下⽬录:\ arxlabs:⽬录包含代表ObjectARX不同⽅⾯的库(实验室)。
\ classmap:包含AutoCAD图形以及ObjectARX对象层次树的⽬录。
ObjectArx开发培训教程

华中科技大学CAD中心 武汉天喻软件有限责任公司 2010年2月
ObjectARX应用的介绍
• ObjectARX是一个仅在AutoCAD上进行二 次开发的一套开发环境,通俗点讲就是一 系列的API • ObjectARX的应用举例:
– 扩展AutoCAD功能 – 为各种工程设计开发便利的工具
• • • • • •
AcDbDatabase构造函数的noDocument参数控制打开的数据库是否与当前文档关联,此参数用 于“多文档处理”中。 • 注意:在这种情况下,AcDbdatabase()的参数必须指定为false(当然,0或者Adesk::kFalse都可 以)。因为使用pDb->readDwgFile()函数时,pDb必须是一个完全空白的数据库,也就是说,哪 怕使用了AcDbDatabase(false);新建数据库后,只要对数据库进行了操作,就不能再使用 readDwgFile()函数,否则会导致严重的内存错误。 Object ARX TianyuSoft 15
• 三、自定义对象生成与编缉
– 双击修改/Jig/属性页
Object ARX TianyuSoft 8
培训安排-2
• 四、一些重要对象
– 字典/层/线型/字体样式
• 五、扩展数据 • 六、反应器 • 八、总结
Object ARX
TianyuSoft
9
所需基础
• • • • • • ACAD基本操作 C++ VC MFC(界面) COM(属性页等) STL(提高效率)
11
AutoCAD图形数据库结构
• AcDbDatabase数据库 • |------AcDb符号表 • | |------块表(AcDbBlockTable) • | |------尺寸标注样式表(AcDbDimStyleTable) • | |------层表(AcDbLayerTable) • | |------线型表(AcDbLinetypeTable) • | |------已注册应用程序表(AcDbRegAppTable) • | |------字体样式表(AcDbTextStyleTable) • | |------用户坐标系表(AcDbUCSTable) • | |------视口表(AcDbViewportTable) • | |------视图表(AcDbViewTable) • |-------命名对象词典 • 访问:AcDbDatabase::getSymbolTable
利用ObjectARX技术开发边坡计算软件_林枢
2008年第8期总第122期福 建 建 筑F uji an A rchitec t ure &ConstructionN o8#2008V ol #122利用Ob jectARX 技术开发边坡计算软件林枢1、2(11中国地质大学工程学院430074;21福建省地质工程勘察院 350002)摘 要:针对目前岩土工程计算软件中普遍存在的边坡建模繁琐等问题,本文拟通过利用O bject ARX 编程技术在Au t oCAD 软件平台上进行边坡计算软件的开发。
通过工程实例计算说明,采用该方法编制的边坡计算软件,具有计算快捷,操作方便,应用广泛等特点,同时也为其它边坡计算软件开发提供新的思维与方法。
关键词:O bject ARX A utoCAD 建模 边坡中图分类号:TU 470+.3 文献标识码:A 文章编号:1004-6135(2008)08-0054-02U sing Object ARX technology develop slope analysis soft wareL i n Shu 1,2(11Co lleg e o f Eng i nee ri ng ,Ch i na U niversit y of G eosc iences 430074;21Fu jian G eolog i ca l Eng i neer i ng Investigati on Institute 350002)Abst ract :So far ,mo st geo techn ica l eng i neering analysis so ft ware ex ist som e proble m s ,such as slope ana l ysis m odeli ng is comp l ex 1Inthis article ,the O bject ARX techno l ogy i s app lied to deve l op a slope ana l ysis so ft wa re i n t he A utoCAD so ft wa re p latform 1T hrough the exa m-p l e o f an eng i neer i ng,by usi ng t h is me t hod the soft w are has the character i sti cs of qu i ck calcu lati on ,si m p le operati on and w i der applica -ti on ,and a l so prov i des a ne w way o f think i ng and m ethods for o the r s l ope analysis soft w are deve l ope rs 1K eywords :O bject ARX A utoCAD M odeli ng S lope 作者简介:林枢,1977年7月出生,男,岩土工程专业,工程师,主要从事地质灾害调查与治理工作。
objectarx 开发人员手册
ObjectARX开发人员手册目录一、ObjectARX开发简介1.1 什么是ObjectARX?1.2 ObjectARX的应用领域1.3 ObjectARX的基本原理1.4 ObjectARX的发展历程二、ObjectARX环境搭建2.1 开发环境准备2.2 ObjectARX SDK安装2.3 开发工具选择2.4 环境配置及注意事项三、ObjectARX开发入门3.1 基本概念及术语3.2 ObjectARX编程框架3.3 第一个ObjectARX程序四、ObjectARX开发核心知识4.1 对象模型4.2 数据访问和修改4.3 事件处理4.4 自定义命令和操作4.5 交互式绘图五、ObjectARX开发高级技巧5.1 高效数据管理5.2 多线程编程5.3 性能优化5.4 构建扩展应用程序六、ObjectARX开发实例6.1 绘图应用实例6.2 数据处理应用实例6.3 CAD环境集成实例6.4 其他领域实例七、ObjectARX开发注意事项7.1 内存管理7.2 线程安全7.3 安全性考虑7.4 与AutoCAD版本兼容性7.5 其他注意事项八、ObjectARX开发资源8.1 冠方文档和教程8.2 开发社区和论坛8.3 第三方扩展库8.4 实用工具和示例九、ObjectARX开发未来展望9.1 行业发展趋势9.2 技术更新和发展9.3 ObjectARX的发展方向一、ObjectARX开发简介1.1 什么是ObjectARX?ObjectARX是AutoCAD的二次开发接口,简单来说,它是AutoCAD的扩展开发评台。
通过ObjectARX,开发者可以利用C++、C#、VB等语言编写自定义应用程序,扩展和定制AutoCAD的功能,实现各种与CAD相关的应用开发。
1.2 ObjectARX的应用领域ObjectARX广泛应用于工程设计、土木工程、建筑设计、机械设计等领域。
开发者可以利用ObjectARX开发CAD扩展功能、自定义命令、数据处理工具、智能绘图等应用,帮助用户提高工作效率,满足特定行业的需求。
ObjectARX开发常用资料
ARX开发常用资料一、ADS函数与ARX函数对比 (2)二、ARX里定义的数据类型 (10)三、结果类型码 (11)四、函数返回结果类型代码: (12)五、其它代码 (12)六、用户输入控制位代码:由函数acedInitGet()先发控制 (13)七、对象捕捉编码及设置对象捕捉代码 (13)八、CAD环境变量 (14)一、ADS函数与ARX函数对比二、ARX里定义的数据类型三、结果类型码四、函数返回结果类型代码:五、其它代码六、用户输入控制位代码:由函数acedInitGet()先发控制七、对象捕捉编码及设置对象捕捉代码ObjectArx修改捕捉模式实现方式//获取捕捉模式struct resbuf rb;acedGetVar(_T("osmode"), &rb);//设置捕捉模式struct resbuf *newsnap;newsnap=ads_buildlist(RTSHORT,n,0);acedSetVar(_T("osmode"), newsnap);acutRelRb(newsnap);八、CAD环境变量所谓系统变量就是一些参数,这些参数有些是可以在“选项”或其他对话框中进行设置的,有些这必须通过在命令行输入变量名进行设置,当然对于高手来说,还可以通过二次开发程序来进行控制。
CAD有很多的变量,例如FILL或FILLMODE控制填充的显示,ATTMODE控制块属性的显示,等等,了解一些常用的系统变量,当你的图纸出现一些问题时,你可以对出现问题的原因有些初步的判断,并可以通过修改变量设置快速解决。
在CAD(无论是AUTOCAD 还是浩辰CAD等其他CAD)的帮助中通常有可以系统变量的介绍,随时到帮助查询也非常方便。
我在网上看到一个CAD系统变量大全,放到这里,希望对您了解系统变量的作用有点帮助。
CAD的系统变量非常多,我们不可能记住所有变量的作用,我会用红色将一些大家可能会用到的变量标示出来,如果这个变量在对话框中无法设置,建议大家关注或记住,其他变量大家如果有需要时可以再查帮助或打开这篇博文里来查一查。
arx环境配置及数据库设计
浅析面向ObjectARX二次开发技术的环境配置摘要:本文探讨了利用ObjectARX2008和VS2005对AutoCAD2008进行二次开发时开发环境的配置问题。
重点讨论了ObjectARX与MFC相结合实现友好程序界面以及实现数据库开发存在的问题,并给出了可行的解决方案。
关键字:ARX 开发环境 MFC ODBC数据源Abstrac:This text probe into utilize ObjectARX2008 and VS2005, carry on secondary development to AutoCAD2008, disposition issue of the development environment. Discuss ObjectARX realize friendly procedure interface and realize the existing problem of database development in conjunction with MFC especially, provide the feasible solution.Key words:ARX;development environment;MFC;ODBC data source1引言在众多开发AutoCAD的工具中,ObjectARX功能强大,适合开发大型软件。
但它也有个显著的缺点,AutoCAD的每个版本都要相对应的ObjectARX版本才能开发。
随着AutoCAD新版本的出现,开发ObjectARX程序的编译环境从VC6.0升级到VS2005或以上版本。
编译环境的改变也使二次开发时某些功能的运用发生变化。
ObjectARX2008在VS2005中对AutoCAD进行二次开发的相关资料非常有限,环境的配置和VC6.0又有很大区别,所以本文整理出其相关配置要点。
在VS2005中,MFC类的对话框类对数据库的引用是一个空白技术点。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
11
PDF 文件使用 "pdfFactory Pro" 试用版本创建
图 1-11 添加模块定义文件 7. 在 MyCmd.def 中添加内容。
ObjectARX 程序是一种可以共享 AutoCAD 地址空间并对 AutoCAD 进行直接调用的 动 态 链 接 库 , 所 有 的 ObjectAEX 应 用 程 序 都 需 要 有 一 个 处 理 消 息 的 主 接 入 点 : acrxEntryPoint()函数,AutoCAD 调用 ObjectARX 的模块 acrxEntryPoint()函数来向应用程 序传递消息,在 acrxEntryPoint()函数中可以用 switch 语句处理 AutoCAD 的各种返回信息, 根据不同信息执行不同的函数,并返回状态码, 最后,必须用 AcRx::kRetOk 作为函数 acrxEntryPoint()的最终返回值,以下是 acrxEntryPoint()函数的基本结构:
图 1.7 指定程序类型为 DLL 6. 点击【完成】完成工程的创建。 工程创建完成后,需要进行以下工程设置,可参考以下步骤完成。 1. 在方案浏览器中选择工程 CH01,右击弹出右击菜单,选择【属性】选项,可为此工 程调出【属性页】对话框。 2. 在【属性页】对话框中,选择【连接器】->【常规】在【输出文件】选项中, 将输出文件的扩展名.dll 改为.arx,如图 1-8。
图 1-5 添加 ObjectARX 的库文件目录
注意:ObjectARX 2004/2005/2006 的开发平台为 Microsoft Visual Studio 2002(V C++ 7.0),支持路径的设置类似在 Visual Studio 2005 中设置的过程。
1.1.4 ObjectARX 程序结构
图 1.9 指定库文件 我们的工程设置到此就完成了。接下来,我们就可以在程序中添加所需要的代码。 4. 从【项目】菜单中选择【添加新项】 ,在【添加新项】对话框中,选择"C++ File (.cpp)"选项,创建的名称为 MyCmd.cpp 的 cpp 文件, 如图 1-10。
图 1.10 添加 MyCmd.cpp 文件 5. 在 MyCmd.cpp 中添加代码。 其中,程序包含的两个 ObjectARX 头文件 aced.h 和 rxregsvc.h 包含了我们程序中 所用的函数。添加头文件的代码如下所示:
图 1-4 添加 ObjectARX 的包含文件目录 在【库文件】条目中添加 ObjectARX 的库文件(*.lib)目录 C:\CAD SDK\ObjectARX 2008\lib, 如图 1-5。
5
PDF 文件使用 "pdfFactory Pro" 试用版本创建
安装好 ObjectARX SDK 后,就可以开始设置开发环境了,环境设置的主要任务就是设 置头文件(*.h)和库文件(*.lib)的查找路径,头文件(*.h)和库文件(*.lib)的查找路径为 VC++的环境参数,设置一次即可,对以后的所有项目均有效。
在 Microsoft Visual Studio 2005 中选择【工具】菜单下的【选项】,启动【选项】对话 框,选择【项目和解决方案】下的【VC++目录】,在【包含文件】条目中添加 ObjectARX 的包含文件(*.h)目录 C:\CAD SDK\ObjectARX 2008\inc,如图 1-4。
从工程的实际需求来看,AutoCAD 有很好的开放性,而目前针对专业定制的开发的 需求又是非常之大的,所以基于 AutoCAD 平台定制专业的 CAD 系统或者行业解决方案 具有十分广阔的发展前景。
1.1.3 ObjectARX 开发环境
要运用 ObjectARX 进行二次开发,必须首先设置好 ObjectARX 的开发环境,以 AutoCAD 2008 为例来说明,首先要从 Autodesk 公司网站免费下载 ObjectARX 2008(2007) SDK,下载 后的安装包是个自解压文件,将其释放到指定的目录,如 C:\CAD SDK\ObjectARX 2008, ObjectARX 2008 SDK 开发环境是 Microsoft Visual Studio 2005(V C++ 8.0)。
#include "stdafx.h" #include <tchar.h> #include <rxregsvc.h> #include <aced.h> void HelloARX ()
10
PDF 文件使用 "pdfFactory Pro" 试用版本创建
{ acutPrintf(_T("\n 第一个 ObjectARX 程序!")); }
unloadApp(); break; default: break; } return AcRx::kRetOK;
6
PDF 文件使用 "pdfFactory Pro" 试用版本创建
} 在上面代码中,如果没有 acrxDynamicLinker->unlockApplication(pkt)语句,ObjectARX 程序不允许被卸载,除非 AutoCAD 退出。如果没有 acrxRegisterAppMDIAware(pkt)语句, 当程序被加载时,AutoCAD 将切换为单文档模式。 要完成 ObjectARX 程序的初始化必须在 acrxEntryPoint()函数的 AcRx::kInitAppMsg 事件中或者该事件调用的函数中对程序中自定义的所有类进行初始化,调用 acedRegCmds->addCommand()函数在 AutoCAD 命令堆栈中注册新命令,例如在 initApp ()函数中可注册一个新的命令:
void initApp() { // 注册新的命令 acedRegCmds->addCommand(_T("Cmd_Group"),
_T("HelloARX"), _T("HelloARX "), ACRX_CMD_TRANSPARENT, HelloARX); } 以上代码通过 addCommand()函数向命令栈中增加一个命令组 Cmd_Group,其中有一 个全局命令名和局部命令名均为 HelloARX 的命令,并指定执行该命令的函数 HelloARX, 该执行函数将在命令行中打印一行文本,内容如下: void HelloARX () { acutPrintf(_T("\n 第一个 ObjectARX 程序!")); } 用户必须在 acrxEntryPoint()函数的 AcRx:: kUnloadAppMsg 事件中或者该事件调用的 函数中,调用 acedRegCmds->removeGroup()函数将注册的新命令组从 AutoCAD 命令堆栈 中清除,调用 deleteAcRxClass()函数清除程序中自定义的任何类,例如 unloadApp()函 数中调用以下代码把在 initApp()函数中注册的命令组移除: void unloadApp() { acedRegCmds->removeGroup(_T("Cmd_Group ")); } 因为 ObjectARX 程序是一个动态库,所以需要指定一个 DEF 文件(*.def),使用 DEF 文件的 EXPORTS 项来输出动态库函数和库,如下内容所示: LIBRARY "CH01" EXPORTS acrxEntryPoint PRIVATE acrxGetApiVersion PRIVATE
比较内容 性能 执行速度 稳定性 易用性 开发技术难度
表 1-1 AutoCAD 各种 API 的比较
ObjectARX 非常强大
.NET VBA 强 一般
VisualLISP 一般
最快
快
快
慢
好好ຫໍສະໝຸດ 好好好好
好
一般
大
一般
小
小
从上面的比较中我们可以看出 VisualLISP /AutoLISP 和 VisualBASIC 方便易学,开发 周期短,适合开发一些小型的实用工具,但是,对开发速度和性能要求都很高的解决方案 或者大型 CAD 应用软件,建议使用 ObjectARX 作为开发工具,有时候也可以考虑各个 API 的优缺点,在开发的系统中使用多种 API 集成开发。
acedRegCmds->removeGroup(_T("Cmd_Group ")); //acedRegCmds->removectmd(_T("Cmd_Group"),_T("HelloARX"));
}
extern "C" AcRx::AppRetCode acrxEntryPoint(AcRx::AppMsgCode msg, void* pkt)
{ switch (msg) { case AcRx::kInitAppMsg: //是否允许程序被卸载。 acrxDynamicLinker->unlockApplication(pkt); //决定该程序是否支持多文档。 acrxRegisterAppMDIAware(pkt); initApp(); break; case AcRx::kUnloadAppMsg: unloadApp(); break; default: break; } return AcRx::kRetOK;
图 1.6 创建工程 4. 设置存放工程的文件夹位置,点击【确定】按钮,将调用【Win 32 应用程序向导】 对话框。 5. 在该向导对话框中的【应用还程序设置】标签中,在【应用程序类型】选择“DLL” 选项,如图 1-7。