AutoCAD 2025 ObjectARX 学习实践记录(编辑中)

最近更新于 2024-07-21 00:48

环境

AutoCAD 机械版 2025
ObjectARX 2025
Visual Studio 2022

ObjectARX 开发环境配置参考:https://blog.iyatt.com/?p=16480
代码托管在 GitHub:https://github.com/IYATT-yx/ObjectARX-Learning
ObjectARX 2025 官方文档:https://help.autodesk.com/view/OARX/2025/CHS/

注:如果直接 clone 我提供的源码编译,可能需要先修改项目中 Autodesk.arx-2024.props 文件里的 ObjectARX SDK 路径,如果要沿用调试还要修改这个文件里的 CAD 路径,关于环境配置篇有提及这两个路径。

arx 开发实践

简单直线绘制 MyLineProject

C++ 开发时,对于头文件,我是使用 .hpp 的扩展名,也和 VS 生成模板文件使用的 .h 很好的区分,知道哪些是自己写的,头文件通常对应会写一个同名的 .cpp 源文件。
file

这个例子中定义了一个 MyLine 的类,写了三个静态方法:初始化、卸载、直线绘制,在初始化方法中注册了一个命令 MyLine(全局)- ml(本地),并调用直线绘制方法。

在 acrxEntryPoint.cpp 中 On_kInitAppMsg 方法里添加自定义的初始化方法,在 On_kUnloadAppMsg 方法中添加自定义的卸载方法
file

file

执行生成Ctrl+Shift+B
file

在项目目录中可以看到生成的 .arx 文件(x64/Debug 或 x64/Release,对应配置生成的)
file

打开 AutoCAD 输入 ap 命令打开“加载/卸载应用程序”,找到生成的 .arx 文件进行加载
file

执行注册的命令 ml 可以看到绘制出了一条红色的直线
file

注意 AutoCAD 加载后会占用 .arx 文件,如果这个时候更新代码重新生成可能会失败,需要先在 AutoCAD 中卸载
file

补充说明1:颜色索引

其中 MyLine.cpp 中 drawLine 方法里用 setColorIndex 设置绘制直线的颜色值,这个颜色值对应的颜色可以打开 CAD 查看。
color 命令,光标放到某个颜色上就会显示“索引颜色”的数值,比如下图颜色为 55
file

最简单入手 HelloProject

这个案例在执行以后会打印输出
file

补充说明1:打印输出

使用 acutPrintf 进行打印输出,方法和 C 语言中 printf 差不多
file

绘制圆弧 CreateArcProject

file

补充1:绘制图形的基本流程

前面绘制直线的例子其实也是一样的套路,获取当前数据库,再拿到数据库中的块表,接着得到块表的写权限,再把创建的图形对象添加到块表里就会绘制在图纸上
file

补充2:C++ (MSVC)中使用 C 语言数学库常量

C 语言中标准库的头文件,在 C++ 中有对应的头文件,比如 C 语言的标准输入输出 stdio.h,在 C++ 中提供了 cstdio,就是在 C 库去扩展名的基础上另外在名字前添加 c。
C 语言标准库 math.h 有定义一些数学常量,在绘图中可能会用到,这里 C++ 中可以通过引用 cmath 库使用,另外需要在最前面定义 _USE_MATH_DEFINES,最好是添加到项目属性的预处理定义里,避免出现提示未定义的错误
file

至于为什么要添加那个定义,可以看下面
对数学常量溯源
在 cmath 中引用了 cstdlib
file
在 cstdlib 中引用了 math.h
file
math.h 中通过条件控制是否引用 corecrt_math_defines.h
file
而 corecrt_math_defines.h 中就放置了数学库的常量,其实也可以引用 corecrt_math_defines.h 直接得到常量定义,但是这个不是标准库名,属于编译器对标准库实现的一个组件,不太建议引用它,最好还是用标准库 cmath
file

画圆 CreateCircleProject

给定圆心和半径画圆、两点画圆及三点画圆,可以自定义绘制平面
file
file

标注 CreateDimensionProject

file

自定义直线绘制 MyLineCmdProject

模拟 LINE 命令的功能
file

简单选择集示例 SimpleSelectSetExample

将选中对象的类型一一保存到文件中
file

AutoCAD 2025 ObjectARX 学习实践记录(编辑中)
Scroll to top