本篇目录
一、版本及下载
-
开发前须知:必须熟悉C++,包括头文件,库函数,指针,类(继承、虚函数。。。),重载等,可参见笔记–》传送门
-
官方开发者文档(就没中文,妈蛋的):这是个超级大宝库,可以直接搜索,类及方法(重点),后期推一遍开发者文档,修改网址
2020
为2018~2022,可获得对应版本CAD的开发文档,翻译可以用谷歌浏览器中英文转换,或者百度翻译,或者有道浏览器插件,这玩意英文是个龙门–》 传送门
1.1 文档学习方法:
- 查找到不懂的方法
- 点到基类看所有可用方法
- 之后选取感兴趣的:研究函数参数、返回值 及 描述等(单词不多,啃啃就习惯了)
小贴士:遇到陌生宏或者函数,按住Ctrl点进去,可以直接跳到该函数声明的头文件,查文档前可以先进行这一步
1.2 版本对应表
注意:高版本arx不可在低版本上运行
1.3 下载链接
- CAD下载:百度,笔记开发的是AutoCAD2020版本ARX
- objectarx链接:http://bbs.xdcad.net/thread-668209-1-1.html(注册下,豆子就一堆)
- objectarx wizard编程向导链接:https://www.autodesk.com/developer-network/platform-technologies/autocad
页面最下面tools目录下ObjectARX 2020 Wizard
- objectarx wizard编程向导链接:https://www.autodesk.com/developer-network/platform-technologies/autocad
- visual studio最新版链接:https://visualstudio.microsoft.com/zh-hans/(其他版本需百度)
二、 环境设置
2.1 objecarx配置
- 操作:解压(即运行安装包)到C盘根目录,重命名为object2020
- 子目录简介
文件夹名 功能 classmap object2020的类图(dwg格式) docs 开发文本指南,其中setup.exe会将帮助文档集成到VS中,运行并记住安装路径 inc 头文件 inc-x64 面向64位PC开发的头文件 lib-x64 面向64位PC开发的库函数 samples 样例的文件夹 utils 专用程序(影像、三维实体等) - 注释:
- 头文件:为了方便使用,通常将各种函数声明,宏和全局变量的声明放到一个单独的文件中,这个文件就是头文件
- 库函数:函数库是将一系列常会用的函数编译成目标代码(这些代码常常有优化,运行效率更高),然后给出这些函数的声明放到头文件里,在连接时,将代码导入到EXE中
- 注释:
- objectarx示例文档:
C:\ObjectARX\samples\SamplesReadMe.htm
,官方代码示例,值得一行行研究
- objectarx帮助文档:
C:\ObjectARX\docs
,官方帮助文档,很多已经有中文译本,对应找
2.2 环境配置
-
安装VS2017
-
用向导创建arx
-
将objectarx arx解压到C:\objectarx 2020目录内
-
安装向导objectarx wizard:功能是将cad和arx做链接,安装过程会自动识别二者目录
-
创建arx项目,并一路next
-
这里选这个(否则不能用_T和弹出对话框)
- 设置环境
-
三、文件初识
3.1 编写首个arx插件
- 进入编程界面
- 选择:菜单栏中Release,x64
- 解决方案资源管理器中找到:acrxEntryPoint.cpp文件
功能:acad.exe是CAD接入操作系统的入口,此文件是编写的arx进入CAD的入口
- 添加命令(宏方法)
注意:以下/*…*/行即为需修改行
#include "StdAfx.h" #include "resource.h" // 定义组名:新建arx项目时填在方框内的 #define szRDS _RXST("ADSK") // 程序自动创建项目类CArxProject1,解决方案名ArxProject1 class CArxProject1App : public AcRxArxApp { public: // 类默认构造函数:此处取空,啥也不做 CArxProject1App () : AcRxArxApp () {} // 加载并初始化应用:第二篇注册命令方法二会在此处注册命令 virtual AcRx::AppRetCode On_kInitAppMsg (void *pkt) { AcRx::AppRetCode retCode =AcRxArxApp::On_kInitAppMsg (pkt) ; // 返回AcRx::AppRetCode类型的状态码给主程序以明确此函数执行正常或异常类型 return (retCode) ; } // 卸载应用:注册的命令必须在此处卸载命令 virtual AcRx::AppRetCode On_kUnloadAppMsg (void *pkt) { //此处为开发者调用卸载命令卸载命令组,命令组来自于页面底部宏 // 向导写的后续卸载操作 AcRx::AppRetCode retCode =AcRxArxApp::On_kUnloadAppMsg (pkt) ; // 卸载依赖项,开发者根据需要填写 return (retCode) ; } // 注册服务组件区:默认不动 virtual void RegisterServerComponents () {} /* --- 宏注册命令会调用的函数: 注意函数写法是:组名+命令名(){}, 二者名字来自于页面底宏--- */ static void ADSKMyGroupMyCommand () { // cad打印函数:_T解释见代码底注释,全文件只加了这一句 acutPrintf(_T("\n这是第一个arx程序")); } // 选择集相关:默认不动 static void ADSKMyGroupMyPickFirst () { ads_name result ; int iRet =acedSSGet (ACRX_T("_I"), NULL, NULL, NULL, result) ; if ( iRet == RTNORM ){} else{} } // 会话命令:默认不动 static void ADSKMyGroupMySessionCmd () {} // lisp命令:默认不动 static int ads_MyLispFunction () { return (RTNORM) ; } } ; // 宏区域 IMPLEMENT_ARX_ENTRYPOINT(CArxProject1App) /* --- 宏对应ADSKMyGroupMyCommand函数 宏注册命令: 项目名, 组名, 命令名(跟ADSKMyGroupMyCommand对应), 命令别名(随便写), 命令参数(下篇写), 默认调用函数(NULL即为上面ADSKMyGroupMyCommand函数)---*/ ACED_ARXCOMMAND_ENTRY_AUTO(CArxProject1App, ADSKMyGroup, MyCommand, MyCommandLocal, ACRX_CMD_MODAL, NULL) // 宏对应CHUMyGroupMyPickFirst函数 ACED_ARXCOMMAND_ENTRY_AUTO(CArxProject1App, ADSKMyGroup, MyPickFirst, MyPickFirstLocal, ACRX_CMD_MODAL | ACRX_CMD_USEPICKSET, NULL) // 宏对应CHUMyGroupMySessionCmd函数 ACED_ARXCOMMAND_ENTRY_AUTO(CArxProject1App, ADSKMyGroup, MySessionCmd, MySessionCmdLocal, ACRX_CMD_MODAL | ACRX_CMD_SESSION, NULL) // 宏对应ads_MyLispFunction函数 ACED_ADSSYMBOL_ENTRY_AUTO(CArxProject1App, MyLispFunction, false)
- _T功能:_T是一个宏,如果项目使用了Unicode字符集(定义了UNICODE宏),则自动在字符串前面加上L,否则字符串不变。因此,Visual C++里面,定义字符串的时候,用_T来保证兼容性。VC支持ascii和unicode两种字符类型,用_T可以保证从ascii编码类型转换到unicode编码类型的时候,程序不需要修改。
3.2 编译
- 按F5:程序会自动打开CAD2020,下方调出调试界面,需要手动加载,见下节
- 常见问题
- 找不到ctype.h
回复:用everything软件找下ctype.h,然后将路径添加到VC++目录的包含目录中
注意:类似于C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\ucrt
- 找不到ucrt.lib
回复:用everything软件找下ucrt.lib,然后将路径添加到VC++目录的库目录中
注意:类似于C:\Program Files (x86)\Windows Kits\10\Lib\10.0.17763.0\ucrt\x64
- 找不到ctype.h
3.3 加载及运行
- 方法一:
- CAD中加载:
arx
选择L
- CAD中输入:
MyCommand
来验证结果,输入MyCommandLocal
来验证结果 - CAD中卸载:
arx
选择U
- CAD中加载:
- 方法二:界面加载:菜单栏:工具==>加载应用==》找到arx加载,卸载同位置
- 方法三:应用内加载:acedArxLoad函数、卸载:acedArxUnload函数,后续篇
四、vs问题补充
- 解决方案资源管理器误关
解决方法:菜单栏==>视图==>解决方案资源管理器
- 筛选器丢失
解决方法:点下显示所有文件那个切换按钮即可
- 拖动到项目文件夹的文件在筛选器中看不到
解决方法:见上图