AutoCad二次开发:ObjectARX技术谈

162 篇文章 1 订阅
43 篇文章 0 订阅
基于ObjectARX的开发和调试技术
柯宇   舒宣武
华南理工大学建筑设计研究院
【摘要】 本文介绍了ObjectARX for AutoCAD R14和ObjectARX for AutoCAD2000i程序的开发环境的设置以及程序的调试设置和方法。
【关键词】 ObjectARX
 
1. ObjectARX的介绍
ObjectARX是AutoDesk公司针对AutoCAD平台上的二次开发而推出的一个开发软件包,它提供了以C++为基础的面向对象的开发环境及应用程序接口,能真正快速的访问AutoCAD图形数据库。
与以往的 AutuCAD二次开发工具AutoLISP和ADS不同,ObjectARX应用程序是一个DLL(动态链接库),共享AutoCAD的地址空间,对AutoCAD进行直接函数调用。所以,使用ARX编程的函数的执行速度得以大大提高。ARX类库采用了标准的C++类库的封装形式,这也大大提高了程序员编程的可靠度和效率。
ObjectARX目前最新的版本是ObjectARX2002,它在原有ObjectARX的基础上,特别增加了XML的支持。XML是可扩展标记语言(eXtensible Markup Language)。它是应用软件与Internet的接口。通过支持XML,为ObjectARX开发网络协作应用提供了有力的支持。
2. 开发环境的设置
运用ObjectARX进行二次开发,必须首先设置好ObjectARX的开发环境。目前常用的开发环境是Microsoft Visual C++ 6.0。同时,还需要安装ObjectARX SDK,ObjectARX SDK可以在AutoDesk公司的网站上免费下载。不同的AutoCAD版本对应相应的ObjectARX SDK的版本,目前常用的是ObjectARX SDK for AutoCADR14和ObjectARX SDK for AutoCAD2000i。这两个开发工具在设置上略有不同,将进行对比介绍。
安装好VC++和ObjectARX后,就可以开始设置开发环境了。
1)     设置INC和LIB文件寻找路径
INC和LIB文件寻找路径为VC++的环境参数,设置一次即可,对以后的所有项目均有效。
选择Tools→Options…,出现Option对话框,选择Directories页,在Show Directories for中选择Include files,然后在Directories中加上ARX的INC目录路径c:/objectarx/inc(假定ARX的开发工具在c:/objectarx/中)。
在Show Directories for中选择Library files,然后在Directories中加上ARX的LIB目录路径c:/objectarx/lib(假定ARX的开发工具在c:/objectarx/中)。
2)     建立项目并设置编译环境
一般来说,开发的ObjectARX应用程序都需要支持MFC(如采用对话框等),因此,我们可以直接建立支持MFC的ObjectARX开发项目。每个项目均应设置编译环境,一般项目的编译环境可以有两个设置,分别为发布版本(Win32 Release)和调试版本(Win32 Debug)。在本节里,介绍的是发布版本的设置,而调试版本的设置将在下一节介绍。ObjectARX SDK for AutoCADR14和ObjectARX SDK for AutoCAD2000i在设置上面存在着差别,下面分别进行介绍。
对于ObjectARX SDK for ACADR14
a.     选择File→New,选择projects页→MFC AppWizard,给定项目名(helloR14)及位置,选OK,在DLL type中选择MFC Extension DLL(using share MFC DLL),再选择Finish。建立项目。
b.     选择Build→Set Active Configration…→helloR14 Win32 Release,然后选OK。
c.     选择Project→Setting,出现Project Settings对话框,开始设置编译环境。
d.     General中,Microsoft Foundation Classes选择Use MFC in a Share DLL。
e.     C/C++→Code Generation中,Use run-time library选择Multithreaded DLL。
f.     C/C++→Preprocessor中,Preprocessor definitions填入ACRXAPP,RADPACK,WIN32,NDEBUG,_WINDOWS。
g.     Link→General中,Output file Name填入helloR14.arx。
h.     Link→Input中,Object/library modules添加Acad.lib acedapi.lib rxapi.lib libacge.lib库文件名。
i.     Link→Output中,Base address填入0xc10000,Entry-point symbol中填入DllEntryPoing@12。
j.     点击OK退出Project Settings对话框。
k.     添加HelloR14.cpp主程序,为了使ARX支持MFC,把 HelloR14.cpp的内容直接替换为ObjectARX/UTILS/MFCEXTRAS/目录下ARXMFCTMPL.CPP的内容,其中包含了MFC所需的支持函数。同时加入公用头文件resourcehelper.h到项目中去,这个头文件也可以在上面的目录找到。
l.     添加注册命令,在initApp()函数中,用acedRegCmds->addCommand()册新的AutoCAD命令。
m.     添加HelloR14.def定义文件,EXPORTS下加入
acrxEntryPoint
acrxGetApiVersion
n.     对话框的可以采用一般VC++的对话框,继承CDialog类。
对于ObjectARX SDK for ACAD2000i
a.     选择File→New,选择projects页→MFC AppWizard,给定项目名(hello2000)及位置,选OK,在DLL type中选择MFC Extension DLL(using share MFC DLL),再选择Finish。建立项目。
b.     选择Build→Set Active Configration…→hello2000 Win32 Release,然后选OK。
c.     选择Project→Setting,出现Project Settings对话框,开始设置编译环境。
d.     C/C++→Code Generation中,Use run-time library选择Multithreaded DLL。
e.     C/C++→Preprocessor中,Preprocessor definitions填入ACRXAPP, WIN32,NDEBUG,_WINDOWS,_WINDLL,_AFXDLL,AFXEXT。
f.     Link→General中,Output file Name填入hello2000.arx。
g.     Link→Input中,Object/library modules添加acge15.lib acad.lib acedapi.lib acrx15.lib acdb15.lib acutil15.lib rxapi.lib acui15.lib adui15.lib库文件名。
h.     Link→Output中,Base address填入0xc1000000。
i.     点击OK退出Project Settings对话框。
j.     添加Hello2000.cpp主程序,为了使ARX支持MFC,需要把 Hello2000.cpp的内容直接替换为ObjectARX/DOCSAMPS/MFCSAMPS/DYNAMIC/目录下ARXMFCTMPL.CPP的内容,其中包含了MFC所需的支持函数。同时加入两个公用头文件resourcehelper.h和stdafx.h到项目中去,这两个头文件也可以在上面的目录找到。
k.     添加注册命令,在initApp()函数中,用acedRegCmds->addCommand()新的AutoCAD命令。
l.     修改Hello2000.def文件,在EXPORTS下加入
acrxEntryPoint
acrxGetApiVersion
m.     对话框采用的是ObjectARX提供的对话框类型,采用MFC UI提供的相关类。类的头文件为acui.h和adui.h。使用时可以先按照一般VC++的对话框建立对话框,然后修改该对话框继承的类为CAcUiDialog。可以通过查找和替换,直接把项目中的CDialog全部替换为CAcUiDialog。在引用该对话框时用采用下面的方法,如:
HelloDlg Hello2000dlg(CWnd::FromHandle(adsw_acadMainWnd()))
3)     项目的加载、运行和卸载
项目编译完成后,就可以在AutoCAD中加载运行了。加载ObjectARX程序,可以选择Tools→Load Application…,然后选择相应的arx文件,点击Load即可。
运行ObjectARX程序则通过键入程序中所注册的命令进行调用。
需要卸载程序时,可以选择Tools→Load Application…,然后选择相应的arx文件,点击Unload即可。也可以直接键入(arxunload “ARX 程序名 )。
3. 调试技巧
程序编写中需要进行大量的调试工作,ObjectARX程序的调试可以跟普通的VC++程序一样通过设置断点来跟踪,同时,还有一些ObjectARX独特的调试技巧。
1)     通过断点跟踪进行调试
ObjectARX的跟踪调试需要首先设置调试版本(Win32 Debug)的编译环境。不同版本的调试环境设置也略有不同。
对于ObjectARX SDK for ACADR14
a.     选择Build→Set Active Configration…→helloR14 Win32 Debug,然后选OK。
b.     选择Project→Setting,出现Project Settings对话框,开始设置编译环境。
c.     General中,Microsoft Foundation Classes选择Use MFC in a Share DLL。
d.     Debug→General中,Executable for debug session中选择AutocadR14运行程序的位置,如C:/Program Files/AutoCAD R14/acad.exe。
e.     C/C++→Code Generation中,Use run-time library选择Debug Multithreaded DLL。
f.     C/C++→Preprocessor、Link→General、Link→Input、Link→Output的设置均同发布版本(Win32 Release)
g.     点击OK退出Project Settings对话框。
h.     编译完成后,点击F9在相应位置设置断点。
i.     点击F5开始跟踪调试,调试开始时会自动打开AutoCAD,加载运行ARX后,到达断点的位置,进入调试界面,可以查询程序中变量的当前值,点击F5可以继续调试。
j.     程序运行完成后,退出AutoCAD,结束调试。
对于ObjectARX SDK for 2000i,调试环境的设置与R14的基本相同,主要的区别在于第e步中,Use run-time library需要选择Multithreaded DLL,否则会出现DLL的版本问题,而导致ARX无法加载。
2)     其他调试技巧
ObjectARX的程序由于是运行在AutoCAD图形支撑环境下的,程序中很多元素都是对应着图形中的相应位置,因此,在调试的时候,除了通过设置断点跟踪变量外,还可以通过图形显示来观察变量。
但是,ObjectARX在AutoCAD里面进行绘制时,需要与AutoCAD数据库进行交互,代码比较长,直接在程序里面写入容易造成混乱。因此,可以利用我们开发的ObjectARX基本绘图函数库(Plot1和Plot2)。该函数库提供了大量的图形绘制函数、文字输出函数以及图形编辑函数,调用时只需一行代码就可以完成,十分方便。其中常用的函数有以下这些:
l         绘图相关函数
              createLine                           画直线
              createDimR                        倾斜尺寸标注
              createDim                           水平或竖直尺寸标注
              createPoint                         创建点
              createCircle                        画圆
              createArc                           画圆弧
              createText                          写字符串
              createTextN                        写 一整数
              createTextR                        写 一实数
              createPline                          画等宽多义线
              createHatch                        区域填充
              insertBlock                         插入图块
l         图形编辑相关函数
              eraseByName                      按实体的 ads_name删除实体
              eraseById                           按实体的ID删除实体
              changeLayerByName           按实体的 ads_name改变实体的层
              changeColorByName           按实体的 ads_name改变实体的颜色
              changeTextByName             按实体的 ads_name改变实体字符内容
有了这个函数库,就可以通过添加辅助线和辅助图元、显示不同位置的变量值、改变图元的颜色等调试方法进行程序的调试了。
 
由于篇幅所限,以上范例程序的源代码、相关程序、库文件以及详细的程序使用说明可以在下面网址下载:
http://www.adri.scut.edu.cn/yke/。
ObjectARX是进行CAD软件开发的优秀的开发环境。以上的开发和调试技术,是笔者在使用和开发中学习和摸索出来的,希望能与同道 者交流。以上步骤,在VC++ 6.0 sp4、AutoCADR14、AutoCAD2000i环境下通过。

 CAD开发社区

使用Visual C++创建ARX程序


<script type="text/javascript"> google_ad_client = "pub-2416224910262877"; google_ad_width = 728; google_ad_height = 90; google_ad_format = "728x90_as"; google_ad_channel = ""; google_color_border = "E1771E"; google_color_bg = "FFFFFF"; google_color_link = "0000FF"; google_color_text = "000000"; google_color_url = "008000"; </script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
打开方式:pdg格式的文件,采用超星浏览器可以打开。 内容介绍:本书共分三篇,分别是入门篇、基础篇、高级篇。 入门篇对ObjectARX的入门知识和编程环境做了大量介绍图文并茂,非常适合初学者。 基础篇对ObjectARX的基础知识和基本理论做了详细论述,本篇列举了很多实例供读者钻研体会。通过对本篇的学习,读者基本上可以独立地完成大部分AutoCAD二次开发任务。 高级篇对ObjectARX的一些高级应用做了简要的说明,以开拓读者的眼界,带领有兴趣的读者走向一个更高的境界。 目录: 入门篇 第1章 ObjectARX简介 1.1 AutoCAD二次开发工具的综述 1.1.1 AutoLISP语言概述 1.1.2 ADS语言概述 1.1.3 Visual AutoLISP、ObjectARX及VBA 1.1.4 ObjectARX与其他开发工具的比较 1.2 ObjectARX程序设计环境 1.2.1 ObjectARX的运行环境 1.2.2 ObjectARX的功能简介 1.3 ObjectARX与Visual C++ 1.3.1 ObjectARX是Visual C++ 1.3.2 动态链接库 1.4 生成一个简单的ObjectARX程序 1.4.1 创建简单工程 1.4.2 输入程序代码 1.4.3 设置编译器选项 1.4.4 应用程序的调试 1.5 在AutoCAD中使用该应用程序 1.5.1 应用程序的装载和卸载 1.5.2 在AutoCAD中的加载、运行该应用程序 1.5.3 在AutoCAD中卸载该应用程序 第2章 ObjectARX基础 2.1 ObjectARX的数据及函数 2.2 ObjectARX类库 2.3 ObjectARX程序框架 第3章 ObjectARX的安装及使用 3.1 ObjectARX的安装 3.2 ObjectARX的定制及使用 3.3 ObjectARX工具的使用 第4章 ObjectARX数据库 4.1 数据库概述 4.2 操作数据库 4.3 数据库对象 第5章 ObjectARX实体对象 第6章 容器、选择集和实体 第7章 ObjectARX派生类 第8章 ObjectARX用户界面 第9章 关于几个高级问题的探讨 第10章 ObjectDBX库 页数:380页
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值