使用ObjectARX进行AutoCAD的二次开发 ——新建工程
2016-04-19 18:38
621 查看
前言
最近接手一个项目,需要对AutoCAD进行二次开发,简单地来讲,就是写一个插件。刚开始觉得应该不算很难,毕竟开发使用的是C++语言,界面也是MFC框架。真正入手之后才发现,光一个新建工程都要折腾好久,而且不同版本AutoCAD还需要配合特定的开发库以及特定的Visual Studio版本,更奇葩的是,官方给的Wizard还有一个致命的bug……为了不让这段惨痛的经历白白地度过,同时也希望能够帮到一些需要的人,所以就有了这篇博客。ObjectARX介绍
这里搬一下百度百科对于ObjectARX的介绍:ObjectARX是AutoDesk公司针对AutoCAD平台上的二次开发而推出的一个开发软件包,它提供了以C++为基础的面向对象的开发环境及应用程序接口,能真正快速的访问AutoCAD图形数据库。 与以往的 AutoCAD 二次开发工具 AutoLISP 和ADS不同,ObjectARX应用程序是一个DLL(动态链接库),共享AutoCAD的地址空间,对AutoCAD进行直接函数调用。所以,使用ARX编程的函数的执行速度得以大大提高。ARX 类库采用了标准的C++类库的封装形式,这也大大提高了程序员编程的可靠度和效率。
虽说ObjectARX应用程序是一个DLL,但是ObjectARX模块都会使用.arx或者.dbx扩展名而不是更为通用的.dll。
开发环境
ObjectARX的开发环境是Mircrosoft Visual Studio,但由于通过ObjectARX API使用的原生类和库在AutoCAD软件的代码中使用,因此,这些库只能使用特定的编译器进行编译,也只能被用同一编译器构建的AutoCAD软件使用。所以,ObjectARX开发者往往需要使用多个版本的Microsoft Visual Studio搭配不同版本的SDK来进行开发。(为了兼容不同版本的AutoCAD,我的电脑已经有了4个版本的VS了。)具体的版本对应关系如下所示:进行ObjectARX进行开发主要需要下载ObjectARX以及相应的Wizard(用于在VS中新建工程等)。2014以及2014年以前的ObjectARX网上搜搜就可以找到下载链接,Wizard官网上也都有:ObjectARX官方下载地址。
新建工程
Autocad2010+Visual Studio 2008 SP1+ObjectARX2010
安装ObjectARX2010,最好选择默认安装路径C:\ObjectARX 2010,运行C:\ObjectARX 2010\utils\ObjARXWiz下的ArxWizards.msi,可以安装新建工程向导。打开Visual Studio 2008,新建项目,你可以发现多了一个工程模板,选择、点击确认就可以直接新建工程了,这里面没有多少坑。VS菜单栏下会出现一块白区,这个是ObjectARX的菜单栏,但不知道除了什么bug无法显示,听说安装什么补丁就可以解决了。Autocad2013+Visual Studio 2010 SP1+ObjectARX2013
这个就比较坑了,ObjectARX和Wizard和前面一样,只不过Wizard另外单独提供了。安装Wizard的时候可能会出现失败的情况,右键安装文件,进行兼容性检查,之后点击测试程序,这时候安装就不会出现问题了。但继续按照之前的步骤新建工程时,你会发现新建工程失败,原因是编码错误。实际上,这是官方Wizard提供的模板中的Autodesk.arx-2013.props中的第一个字节有误(真不知道为什么Autodesk官方都没有测试就直接发布)。将第一行改成<?xml version="1.0" encoding="utf-8"?>
就可以了。
Autocad2015+Visual Studio 2012 Update 4+ObjectARX2013
步骤和前面两个一样,这个新建工程就没有之前的编码错误了,但是Wizard还是可能需要进行兼容性检查,其他就没什么坑了。总结
其他的版本开发新建工程过程和上面一样,可能会遇到以上的一些问题,按照上面的办法就应该可以解决了。第一次写博客,望多多支持。相关文章推荐
- objective-C基础----字典,集合
- 自动滚动的 tableView 和高度自适应的 textView
- JavaScript之引用类型Object类型
- Objective-C 字典的基本用法(NSDictionary和NSMutableDictionary)
- JsonObject和JsonArray的使用
- Effective Object C 2.0——对象、消息和运行期
- 为什么JavaScript里面typeof(null)的值是"object"?
- css z-index之object flash修正
- 详解Objective-C runtime
- [HSON : HC Script Object Notation] Finish Build 1 On GitHub
- Objective-C Runtime能做什么?
- 1.一对多双向关联(班级对学生):Object,hbm
- 1.一对多单向关联(班级对学生):Object,hbm
- object-c URL
- Type Object——类型对象
- 从Object对象中封装了其它对象,怎样取出呢?(Hibernate查询结果处理)
- psutil在rlimit方法在rhel6上报错AttributeError: 'Process' object has no attribute 'rlimit'
- 禅与 Objective-C 编程艺术
- objectToArray2stdClass Object.php
- java ObjectOutputStream