最近更新于 2024-08-13 19:48
基本环境
AutoCAD 机械版 2025
Visual Studio 2022(需要安装“C++ 桌面开发”,建议右侧手动增加勾选“MFC”)
开发环境
下载
百度网盘
https://pan.baidu.com/s/115Lk6uom7vF70_WyJdUMYA?pwd=h2a6
官网下载
(1)ObjectARX SDK 下载(提供开发使用的 API):https://aps.autodesk.com/developer/overview/autocad-objectarx-sdk-downloads
直接下载地址:https://damassets.autodesk.net/content/dam/autodesk/files/esd/objectarx/2025/objectarx-for-autocad-2025-win-64bit-dlm.sfx.exe
(2)ObjectARX Wizard 下载(项目创建向导):https://aps.autodesk.com/developer/overview/autocad
直接下载地址:https://github.com/ADN-DevTech/ObjectARX-Wizards/raw/ForAutoCAD2025/ObjectARXWizardsInstaller/ObjectARXWizard.zip
安装
SDK
SDK 下载的是一个自解压程序,自定义解压路径,注意记住路径,后面要用
Wizard(项目创建向导(模板))
Wizard 下载的包解压出来,直接运行安装
这里的路径不用管,改了也不生效
打开路径 D:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\VC\vcprojects\Autodesk (路径要看实际的VS 安装在哪里,以及是社区版、专业版还是企业版)
分别以管理员权限打开编辑器编辑这两个文件
ArxAppWiz2025.vsz 中 [TARGETDIR]ArxAppWiz 改为 C:\Program Files (x86)\Autodesk\ObjectARX 2025 Wizards\ArxAppWiz
ArxAppWizOMF2025.vsz 中 [TARGETDIR]ArxAppWiz182 改为 C:\Program Files (x86)\Autodesk\ObjectARX 2025 Wizards\ArxAppWiz182
打开路径 C:\Program Files (x86)\Autodesk\ObjectARX 2025 Wizards\ArxAppWiz\Templates\1033 以管理员权限编辑 Autodesk.arx-2025.props(属性模板)
把 AcadDir 处路径改为实际的 AutoCAD 路径(注意路径后加上反斜杠)
把 ArxSdkDir 处路径改为 ObjectRAX 解压路径再加上“CDROM1”
这里改的两项就对应安装 wizard 时填选的两个路径,但是安装的时候改了也没用,这里直接手动改模板文件,在使用向导创建项目后在项目目录中就有一个 Autodesk.arx-2025.props 文件的副本,用于实际在当前项目中控制调试程序和链接路径。
禁用安全检查(属性预设)【可选】
以管理员权限编辑 C:\Program Files (x86)\Autodesk\ObjectARX 2025 Wizards\ArxAppWiz\Templates\1033\Autodesk.arx-2025.props
不想用 VS 自创的安全函数,又不想手动禁用就这里直接改模板
在 Project 层内找到一个空位置,插入下面内容
<ItemDefinitionGroup>
<ClCompile>
<BufferSecurityCheck>false</BufferSecurityCheck>
</ClCompile>
</ItemDefinitionGroup>
禁用较小类型检查(属性预设)
VS 中 Debug 默认开启了较小类型检查
可能会导致报错/RTCc rejects conformant code
以管理员权限编辑 C:\Program Files (x86)\Autodesk\ObjectARX 2025 Wizards\ArxAppWiz\Templates\1033\Autodesk.arx-2025.props
在 Project 层内找到一个空位置,插入下面内容
<ItemDefinitionGroup>
<ClCompile>
<SmallerTypeCheck>false</SmallerTypeCheck>
</ClCompile>
</ItemDefinitionGroup>
修改默认“注册开发者符号”【可选】
以管理员权限编辑 C:\Program Files (x86)\Autodesk\ObjectARX 2025 Wizards\ArxAppWiz\HTML\1033\default.htm,搜索关键词“RDS_SYMB”,默认值是 “ADSK” 改成自己的标识就行,向导界面只能填写不超过四位,这里修改向导界面代码可以实现预填超过四位,不建议使用符号,可能导致项目没法构建(路径无法识别)
填在 VALUE= 里面
实现调试自动加载【可选】
思路是创建一个 scr 脚本,注明要自动加载的程序(修改向导源码实现自动创建这个 scr 脚本及写入匹配的内容)。再配置调试命令的属性预设,在 CAD 启动时指定要执行的 scr 脚本,实现自动加载程序。
注意:创建的项目所在路径的文件名中不能存在空格,否则会导致无法正常加载。遇到调试出现“找不到指定的图形文件,请确认文件存在”,请检查文件名是否存在空格。
(1)修改向导程序源码
以管理员权限编辑 C:\Program Files (x86)\Autodesk\ObjectARX 2025 Wizards\ArxAppWiz\Scripts\1033\default.js
找到function CreateArxProject,在 return oProj; 前面插入下面代码
// 创建 scr 脚本
/////////////////////////////////////////////
// 写 scr 文件
function writeScrFile(filename, content)
{
var fso = new ActiveXObject("Scripting.FileSystemObject");
var startScrPath = strProjectPath + "\\" + filename;
var startScrFile = fso.CreateTextFile(startScrPath, true);
startScrFile.Write(content);
startScrFile.Close();
}
// 确定程序扩展名
var extension = "";
if (wizard.FindSymbol("APP_ARX_TYPE")) {
extension = ".arx";
} else if (wizard.FindSymbol("APP_DBX_TYPE")) {
extension = ".dbx";
} else if (wizard.FindSymbol("APP_CRX_TYPE")) {
extension = ".crx";
} else {
extension = ".arx";
}
debugFilename = "debug.scr"; // 调试版脚本
releaseFilename = "release.scr"; // 发布版脚本
var debugContent = "ARX L " + "\"" + strProjectPath + "\\x64\\Debug\\" + wizard.FindSymbol("RDS_SYMB") + strProjectName + extension + "\" ";
var releaseContent = "ARX L " + "\"" + strProjectPath + "\\x64\\Release\\" + wizard.FindSymbol("RDS_SYMB") + strProjectName + extension + "\" ";
writeScrFile(debugFilename, debugContent);
writeScrFile(releaseFilename, releaseContent);
/////////////////////////////////////////////
(2)修改属性模板
以管理员权限编辑 C:\Program Files (x86)\Autodesk\ObjectARX 2025 Wizards\ArxAppWiz\Templates\1033\Autodesk.arx-2025.props
查找关键字“LocalDebuggerCommand”,将其所在的 PropertyGroup 整个代码块替换为下面的
<PropertyGroup Condition="'$(Configuration)'=='Debug'">
<!-- Local Windows debugger -->
<LocalDebuggerDebuggerType>Auto</LocalDebuggerDebuggerType>
<LocalDebuggerCommand>$(AcadDir)$(AcadExe)</LocalDebuggerCommand>
<LocalDebuggerCommandArguments>/nologo /b $(ProjectDir)debug.scr</LocalDebuggerCommandArguments>
<LocalDebuggerWorkingDirectory>$(ProjectDir)</LocalDebuggerWorkingDirectory>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)'=='Release'">
<!-- Local Windows debugger -->
<LocalDebuggerDebuggerType>Auto</LocalDebuggerDebuggerType>
<LocalDebuggerCommand>$(AcadDir)$(AcadExe)</LocalDebuggerCommand>
<LocalDebuggerCommandArguments>/nologo /b $(ProjectDir)release.scr</LocalDebuggerCommandArguments>
<LocalDebuggerWorkingDirectory>$(ProjectDir)</LocalDebuggerWorkingDirectory>
</PropertyGroup>
(3)添加信任
经过上面的修改已经可以实现调试启动 CAD 后自动加载自己编写的程序,但是因为没有签名也不在信任路径,可能导致需要手动确认是否加载
需要打开 CAD,op 命令打开选项-》系统-》安全选项
把开发路径添加到受信任文件夹,注意如果直接把文件夹路径复制进去,那么就只是信任文件夹下一层的程序,如果还有子目录,那依旧是不信任的,要想目录中所有路径都信任,需要加上三个英文句点
比如 C:\ 就只是信任 C:\ 下的程序,C:\User 下有程序就不是信任的,即不包含子目录
但是如果输入 C:\… ,那么就是信任 C:\ 下及子目录下所有文件
固定入口源文件名【可选】
按照我的习惯,会把程序的入口函数所在的文件命名为 main(main 函数所在的文件)。而这个 ObjectARX 向导程序创建的模板会把入口源文件名字设置成“项目名.cpp”,如果有和我一样的需求可以这样改。
以管理员身份编辑C:\Program Files (x86)\Autodesk\ObjectARX 2025 Wizards\ArxAppWiz\Scripts\1033\default.js,找到GetTargetName函数
将
strTarget = strProjectName + strName.substr(4, strName.length - 4);
中的 strProjectName 改成
"main"
这样使用向导创建出来的入口源文件名字就是main了
测试创建项目
创建
现在在 VS 中可以看到,测试创建一个 ARX 项目
框里可以输入自己(开发者)的标识,会携带在最终生成文件的名字中
使用
编译
尝试编译创建的模板
可以在项目目录中看到生成的 arx 插件
测试使用
打开 CAD 并新建图纸,输入 AP 命令回车打开扩展程序加载对话框,在里面找到编译好的插件,测试加载
成功加载
调试
在 VS 中直接运行调试
VS 会启动 CAD,加载插件的操作和上面使用的一样,只是通过 VS 调试的时候可以显示 CAD 的堆栈信息等,也可以在 VS 中打断点,便于调试控制。如果按我上面的说明配置过的,那么可以实现调试自动加载插件,直接测试。
添加成品插件自启动
在 CAD 中处于打开图纸状态,执行 APPLOAD 命令打开加载器,点击公文包图标下的内容按钮
点击添加,选中插件文件,询问加载方式选始终加载,以后启动 CAD 也会自动加载
添加 AutoCAD Mechanical API (AutoCAD 机械版 API)开发支持【未成功,研究中】
上面的开发配置是针对标准版 CAD 开发的,但是没有机械版特有功能的开发支持。
机械版 API 相当于是在 ObjectARX 基础上扩展的,前提需要先配置好 ObjectARX
下载 AutoCAD Mechanical API:https://aps.autodesk.com/developer/overview/autocad-mechanical
下载后解压出来,将四个文件夹移动到 ObjectRAX 所在路径
以管理员身份编辑C:\Program Files (x86)\Autodesk\ObjectARX 2025 Wizards\ArxAppWiz\Templates\1033\Autodesk.arx-2025.props,找到AdditionalDependencies所在行,改为
(链接 mcadapi_crx.lib 和 acmsymbb_crx.lib)
<AdditionalDependencies>%(AdditionalDependencies);mcadapi_crx.lib;acmsymbb_crx.lib</AdditionalDependencies>