用户操作
[即时聊天] [发私信] [加为好友]
洪赫ID:Suprman
312599次访问,排名184,好友1人,关注者2人。
Suprman的文章
原创 68 篇
翻译 31 篇
转载 418 篇
评论 53 篇
洪赫的公告


博客人自己的广告网




经典华容道游戏下载

数独游戏下载

推箱子游戏下载

3D魔方游戏下载

最近评论
LINDA:Thank you very much!
wo:球都没发用 草哦
fhtwins:原来如此!
谷谷:WINDOWS XP下文件夹应该怎么加密呢?
国际米兰:你这傻逼
文章分类
收藏
    相册
    博客logo
    风雪送春归
    华容道布局
    神奇的图片
    VC必备
    VC知识库文档中心
    中华视频网
    代码仓储
    补脑益智
    mathe的专栏
    mathworld
    三思论坛
    中国数学建模
    北大骄子
    智星论坛(IQSTAR BBS)
    计算机围棋
    程序员们(PGMAN)
    Linux 宝库
    Python标准文档
    友情连接
    Google AdSense 资源整合
    博物思远
    我的博客我做主
    水梦犹蓝
    存档
    软件项目交易
    订阅我的博客
    XML聚合  FeedSky
    订阅到鲜果
    订阅到Google
    订阅到抓虾
    订阅到BlogLines
    订阅到Yahoo
    订阅到GouGou
    订阅到飞鸽
    订阅到Rojo
    订阅到newsgator
    订阅到netvibes

    转载 AutoCad二次开发:ObjectARX技术谈收藏

    新一篇: 世界上最贵的十幅画 | 旧一篇: 汪国真抒情诗

    基于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程序


    发表于 @ 2006年09月21日 11:09:00|评论(loading...)|编辑

    新一篇: 世界上最贵的十幅画 | 旧一篇: 汪国真抒情诗

    评论

    #dsffsd 发表于2008-04-28 21:14:04  IP: 202.115.141.*
    ddfdf
    #tplank 发表于2008-07-02 12:59:47  IP: 222.171.7.*
    太感谢您了!!!
    发表评论  


    登录
    Csdn Blog version 3.1a
    Copyright © 洪赫