本文记录一次从零跑通的实践流程:让 Codex 在 Windows 本机协助 AutoCAD 绘制二维图,并进一步读取 STEP 三维模型,通过 FreeCAD/OpenCascade 生成二维三视图,最终画入当前 DWG。

适用场景:

  • 用自然语言描述图纸需求,由 Codex 生成脚本和绘图指令。
  • 在 AutoCAD 当前打开的 DWG 中绘制二维图元。
  • .step/.stp/.iges/.igs 三维模型转换为主视图、俯视图、左视图等二维线稿。
  • 为后续批量制图、参数化出图、自动标注打基础。

1. 本次跑通的总体架构

最终采用的是“文件桥接”方案:

用户提出绘图需求
  -> Codex 编写/生成 JSON 绘图指令
  -> cad_bridge.py 监听 bridge/commands
  -> cad_bridge.py 通过 AutoCAD COM 执行到当前 DWG
  -> 结果写入 bridge/results

三维转二维时,多加一层 FreeCAD:

STEP 三维模型
  -> FreeCADCmd.exe 读取模型
  -> TechDraw.project 生成二维投影边
  -> step_to_three_views.py 转成桥接 JSON
  -> cad_bridge.py 画进 AutoCAD 当前 DWG

本次已验证成功:

  • AutoCAD COM 连接成功:AutoCAD.Application.23.1
  • 当前图纸:Drawing1.dwg
  • Python 虚拟环境可用
  • FreeCAD 1.1.1 可读取 GML.stp
  • 已成功生成并绘制 GML.stp 的三视图,执行动作数:548

2. 需要的软件和组件

必需软件

  1. AutoCAD

    • 本次使用 AutoCAD 2020。
    • 需要支持 COM/ActiveX 自动化。
    • 绘图前应打开目标 DWG。
  2. Python

    • 本次虚拟环境中为 Python 3.13.1
    • 推荐创建项目级虚拟环境,不污染系统 Python。
  3. Python 包

    • pywin32:连接 AutoCAD COM。
    • ezdxf:备用 DXF 读写能力。
    • numpy:后续几何计算备用。
  4. FreeCAD

    • 本次使用 FreeCAD 1.1.1
    • 图形程序路径示例:
      D:\Program Files\FreeCAD 1.1\bin\freecad.exe
      
    • 自动处理推荐使用命令行程序:
      D:\Program Files\FreeCAD 1.1\bin\FreeCADCmd.exe
      
  5. Codex Desktop

    • 负责读写工作目录、生成脚本、生成桥接指令。
    • 不需要额外 AutoCAD 插件即可跑通第一版。

可选软件

  1. Ansys SpaceClaim / Discovery

    • 用于把 .scdoc 转成 .step.iges
    • .scdoc 是 SpaceClaim/Discovery 原生格式,不建议直接解析。
  2. AutoCAD 字体/文字样式

    • 如需中文标注稳定显示,建议提前配置中文字体样式。
    • 第一版建议使用 ASCII 英文标注,减少编码问题。

3. 推荐项目目录

本次工作目录:

C:\Users\XIE\Desktop\AI_CAD

推荐结构:

AI_CAD
  ├─ .venv
  ├─ bridge
  │  ├─ commands       # 待执行 JSON 指令
  │  ├─ processed      # 已成功执行的指令
  │  ├─ failed         # 执行失败的指令
  │  ├─ results        # 执行结果 JSON
  │  └─ examples       # 示例指令
  ├─ docs
  ├─ scripts
  │  ├─ cad_bridge.py
  │  ├─ enqueue_cad_command.py
  │  ├─ test_autocad_com.py
  │  ├─ draw_rectangle_com.py
  │  └─ step_to_three_views.py
  ├─ Drawing1.dwg
  └─ GML.stp

4. 环境安装与检查流程

4.1 创建 Python 虚拟环境

在 PowerShell 中执行:

cd C:\Users\XIE\Desktop\AI_CAD
py -m venv .venv
.\.venv\Scripts\Activate.ps1
python -m pip install --upgrade pip
pip install pywin32 ezdxf numpy

如果 py --version 显示:

No installed Python found!

.venv\Scripts\python.exe --version 正常,则后续直接使用:

.\.venv\Scripts\python.exe

验证依赖:

python -c "import win32com.client, ezdxf, numpy; print('CAD Python environment OK')"

4.2 检查 AutoCAD COM 是否可连接

确保 AutoCAD 已打开,并打开目标 DWG。

运行:

python .\scripts\test_autocad_com.py

成功输出类似:

CONNECTED=AutoCAD.Application.23.1
VERSION=23.1s (LMS Tech)
DOCUMENT=Drawing1.dwg
FULLNAME=C:\Users\XIE\Desktop\AI_CAD\Drawing1.dwg

4.3 启动 CAD 桥接程序

在能连接 AutoCAD COM 的 PowerShell 中执行:

cd C:\Users\XIE\Desktop\AI_CAD
.\.venv\Scripts\Activate.ps1
python .\scripts\cad_bridge.py --verbose

保持这个窗口不要关闭。桥接程序会持续监听:

C:\Users\XIE\Desktop\AI_CAD\bridge\commands

4.4 测试桥接绘图

另开一个 PowerShell,投递示例指令:

cd C:\Users\XIE\Desktop\AI_CAD
.\.venv\Scripts\Activate.ps1
python .\scripts\enqueue_cad_command.py --file .\bridge\examples\rectangle.json

桥接程序会自动绘制示例矩形,并把执行结果写入:

bridge\results

5. 桥接程序的工作机制

核心文件:

scripts\cad_bridge.py

监听目录:

bridge\commands

每当出现 .json 指令文件,桥接程序会:

  1. 读取 JSON。
  2. 连接当前 AutoCAD COM。
  3. 检查当前 DWG 是否匹配 target_document
  4. 执行 actions 中的绘图动作。
  5. 写入结果到 bridge\results
  6. 成功则移动到 bridge\processed,失败则移动到 bridge\failed

支持的动作类型:

  • rectangle
  • line
  • polyline
  • circle
  • text
  • zoom_extents
  • save

示例指令:

{
  "target_document": "Drawing1.dwg",
  "zoom_extents": true,
  "save": false,
  "actions": [
    {
      "type": "rectangle",
      "x": 0,
      "y": 0,
      "width": 1000,
      "height": 600,
      "layer": "AI_RECTANGLE",
      "color": 1
    },
    {
      "type": "text",
      "text": "AI CAD BRIDGE",
      "insert": [80, 680, 0],
      "height": 80,
      "layer": "AI_TEXT",
      "color": 3
    }
  ]
}

6. 为什么采用桥接方案

一开始尝试让 Codex 后台进程直接连接 AutoCAD COM,但遇到:

MK_E_UNAVAILABLE

原因是 Codex 的后台执行环境和用户手动打开的 AutoCAD/PowerShell 可能处在不同权限、桌面会话或受控沙盒中。用户自己打开的 PowerShell 可以连接 AutoCAD,但 Codex 后台未必能直接看到同一个 COM 活动对象。

桥接方案解决了这个问题:

用户启动 cad_bridge.py
  -> 它和 AutoCAD 在同一用户会话中
  -> 它可以稳定连接 AutoCAD COM
  -> Codex 只负责写 JSON 指令文件

这样既稳定,也更安全,因为 Codex 不需要直接控制窗口或模拟鼠标键盘。

7. 二维绘图流程

二维绘图推荐流程:

  1. 用户描述要画什么。
  2. Codex 生成 JSON 指令到 bridge\commands
  3. cad_bridge.py 自动执行。
  4. 检查 bridge\results 是否 ok: true
  5. 在 AutoCAD 中查看图形。

例如“画一个圆柱体三视图”时,Codex 可投递:

  • 主视图矩形
  • 俯视图圆
  • 左视图矩形
  • 中心线
  • 投影辅助线
  • 文字标注

执行结果成功时:

ok: true
document: Drawing1.dwg

8. 三维 STEP 转二维三视图流程

8.1 文件准备

推荐三维格式:

.step / .stp

也可考虑:

.iges / .igs

SpaceClaim 原生文件:

.scdoc

不建议直接解析。推荐先在 SpaceClaim/Discovery 中导出为 .step

8.2 检查 FreeCADCmd

运行:

& "D:\Program Files\FreeCAD 1.1\bin\FreeCADCmd.exe" --version

本次输出:

FreeCAD 1.1.1 Revision: 20260414

8.3 生成三视图

本次三维模型:

C:\Users\XIE\Desktop\AI_CAD\GML.stp

运行:

& "D:\Program Files\FreeCAD 1.1\bin\FreeCADCmd.exe" .\scripts\step_to_three_views.py

脚本执行逻辑:

  1. 导入 GML.stp
  2. 从 FreeCAD 文档中选择最大的有限实体形体,本次选择对象为 GML
  3. 调用 TechDraw.project 生成投影视图。
  4. 将投影边离散成二维 polyline
  5. 生成三视图 JSON 指令。
  6. 写入 bridge\commands
  7. 桥接程序自动画入 AutoCAD。

本次模型信息:

solids = 109
faces  = 768
edges  = 1992

本次输出:

Projecting FRONT VIEW...
  polylines=235
Projecting TOP VIEW...
  polylines=258
Projecting LEFT VIEW...
  polylines=49
QUEUED=...\bridge\commands\20260526_154959_gml_three_views.json
ACTIONS=548

桥接结果:

ok = True
document = Drawing1.dwg
executed = 548

8.4 默认视图方向

本次脚本默认:

FRONT VIEW: 观察方向 [0, -1, 0]
TOP VIEW:   观察方向 [0,  0, 1]
LEFT VIEW:  观察方向 [1,  0, 0]

注意:不同建模软件导出的模型坐标方向可能不同。三维转二维前应明确:

  • 哪个方向是“正面”?
  • 哪个轴代表高度?
  • 哪个方向作为俯视图向下看?
  • 是否需要左视图、右视图、剖视图?

如果模型方向不对,应先调整脚本里的方向向量,或在 FreeCAD/SpaceClaim 中旋转模型后再导出 STEP。

9. 本次遇到的问题和解决办法

问题 1:py --version 显示没有 Python

现象:

No installed Python found!

解决:

  • 用户创建虚拟环境后,.venv\Scripts\python.exe 可用。
  • 后续命令统一在激活 .venv 后使用 python

问题 2:Codex 后台无法直接连接 AutoCAD COM

现象:

MK_E_UNAVAILABLE

解决:

  • 在用户 PowerShell 中启动 cad_bridge.py
  • Codex 不直接连接 COM,只写桥接 JSON。
  • 桥接程序由用户会话启动,所以能稳定连接 AutoCAD。

问题 3:AutoCAD COM ProgID 不同

本次有效 ProgID:

AutoCAD.Application.23.1

脚本中也兼容尝试:

AutoCAD.Application.23
AutoCAD.Application

如果换 AutoCAD 版本,需要检查注册表或 COM ProgID。

问题 4:中文文字出现乱码

现象:

  • PowerShell/JSON 中中文可能显示乱码。
  • AutoCAD 文字也可能受字体样式影响。

解决建议:

  • 第一版自动生成图纸时优先用英文/数字标注,如 FRONT VIEW
  • 如需中文,后续应在 AutoCAD 中建立中文文字样式,并在桥接程序中支持指定 TextStyle

问题 5:FreeCADCmd 输出 system.cfg/user.cfg 警告

现象:

unable to open file '.../system.cfg'
unable to open file '.../user.cfg'

本次不影响 STEP 导入和投影生成,可暂时忽略。

问题 6:把坐标轴、基准面也混进投影

现象:

  • 初期探测时 FreeCAD 文档中包含 X_AxisXY_Plane 等无穷大对象。
  • 这些对象包围盒为 1e+100,不能参与三视图投影。

解决:

  • 只选择有限包围盒且包含实体的 Shape。
  • 再按 solids/faces/edges 数量选择最大的总成对象。

问题 7:投影线太密

原因:

  • 三维模型包含大量边、倒角、光顺边、隐藏边。

解决:

  • 第一版只绘制主要可见硬边和少量隐藏边。
  • step_to_three_views.py 默认不包含 smooth/tangent 边。
  • 如需更完整线稿,可启用 include_smooth 思路,但图面会更密,AutoCAD 执行也会更慢。

10. 注意事项

  1. 先备份 DWG

    • 自动绘图前建议保留 .bak 或另存副本。
    • 桥接指令默认 save: false,确认无误后再手动保存。
  2. 确认当前活动图纸

    • JSON 中建议写:
      "target_document": "Drawing1.dwg"
      
    • 防止画到错误 DWG。
  3. 保持桥接窗口开启

    • cad_bridge.py 关闭后,Codex 写入指令不会自动执行。
  4. 明确单位

    • AutoCAD 坐标本身没有单位。
    • 建议每次说明:毫米、米、英寸。
  5. 明确图层规范

    • 例如:
      GML_VISIBLE   可见轮廓线
      GML_HIDDEN    隐藏线
      GML_CENTER    中心线
      GML_TEXT      文字
      
  6. 明确视图方向

    • 三维转二维时,必须说明正面、顶部、左/右方向。
    • 不说明时只能按脚本默认轴向处理。
  7. 性能控制

    • 大模型不要一开始画全部曲线和隐藏线。
    • 先生成“清爽线稿”,确认方向和布局,再增加细节。
  8. .scdoc 文件

    • 先用 SpaceClaim/Discovery 导出 STEP。
    • 再交给 FreeCAD 生成三视图。

11. 常用提示词模板

11.1 直接绘制二维图纸

请通过 cad_bridge.py 在当前 AutoCAD 图纸中绘制二维图。

图纸内容:
- 类型:机械零件/平面布置/结构示意/三视图
- 单位:mm
- 坐标原点:从 (0,0) 开始,或放到现有图纸右侧
- 尺寸:长 ___,宽 ___,高 ___,孔径 ___
- 图层:
  - 可见轮廓线:AI_VISIBLE,颜色 7
  - 中心线:AI_CENTER,颜色 3
  - 隐藏线:AI_HIDDEN,颜色 8
  - 文字:AI_TEXT,颜色 2
- 是否保存 DWG:否,先不保存

请先生成桥接 JSON 并投递,执行后检查 bridge/results 是否 ok:true。

11.2 绘制标准三视图

请绘制零件的三视图,布局采用第三角法/第一角法:

零件说明:
- 类型:圆柱体/支架/板件/轴类/箱体
- 主尺寸:长 ___,宽 ___,高 ___
- 关键特征:孔、槽、倒角、台阶、圆角等

视图要求:
- 主视图放在左上
- 俯视图放在主视图下方
- 左视图放在主视图右侧
- 加中心线和必要投影辅助线
- 文字标注使用英文,避免中文编码问题
- 不自动保存 DWG

11.3 STEP 三维模型转三视图

请把这个 STEP 模型生成三视图并画入当前 AutoCAD:

模型路径:
C:\Users\XIE\Desktop\AI_CAD\____.stp

视图方向:
- 主视图:从 ___ 方向看,例如 [0,-1,0]
- 俯视图:从 ___ 方向看,例如 [0,0,1]
- 左视图:从 ___ 方向看,例如 [1,0,0]

输出要求:
- 只画主要可见硬边,先不要画所有光顺边
- 隐藏线可少量保留
- 三视图放到当前图纸右侧空白区域
- 图层:GML_VISIBLE、GML_HIDDEN、GML_TEXT
- 先不保存 DWG

请运行 FreeCADCmd 生成 bridge/commands JSON,然后检查 bridge/results。

11.4 如果不知道模型方向

我不确定 STEP 模型方向。
请先用 FreeCAD 读取模型,报告包围盒尺寸、长宽高方向、候选主视方向。
先不要画入 AutoCAD。
给出推荐的 FRONT/TOP/LEFT 方向后,再生成三视图。

11.5 生成更规范工程图

请按机械制图习惯优化当前三视图:

- 清理重复线
- 可见轮廓线加粗
- 隐藏线使用单独图层
- 添加中心线
- 添加视图标题
- 添加总尺寸:长、宽、高
- 保持不自动保存,完成后检查结果文件

11.6 修改已有自动生成图纸

请基于当前 AutoCAD 图纸继续修改,不要删除已有图元:

修改内容:
- 将三视图整体向右移动 ___
- 增加/删除 ___
- 增加尺寸标注 ___
- 改图层颜色/线宽 ___
- 完成后 zoom_extents
- 不自动保存 DWG

12. 后续可改进方向

  1. 支持 AutoCAD 线型

    • 隐藏线改为虚线。
    • 中心线改为中心线线型。
  2. 支持中文文字样式

    • 在桥接程序中创建/指定中文 TextStyle
    • 解决中文乱码和字体缺失问题。
  3. 支持尺寸标注

    • 增加 dim_lineardim_diameterdim_radius 动作。
  4. 支持比例和图框

    • 自动插入 A3/A4 图框。
    • 自动布局视口或模型空间图纸。
  5. 支持更多三维格式

    • STEP/IGES 已具备基础。
    • .scdoc 建议外部先转 STEP。
  6. 支持配置文件

    • 把 FreeCAD 路径、默认 STEP 文件、视图方向、图层标准写入配置 JSON。
    • 避免每次修改脚本。
  7. 支持预览图

    • 三维转二维后先输出 SVG/PNG 预览,再决定是否写入 AutoCAD。

13. 最小复现流程

如果别人要复现本流程,按下面顺序即可:

cd C:\Users\XIE\Desktop\AI_CAD
.\.venv\Scripts\Activate.ps1
python .\scripts\test_autocad_com.py
python .\scripts\cad_bridge.py --verbose

另开 PowerShell:

cd C:\Users\XIE\Desktop\AI_CAD
.\.venv\Scripts\Activate.ps1
python .\scripts\enqueue_cad_command.py --file .\bridge\examples\rectangle.json

三维转二维:

& "D:\Program Files\FreeCAD 1.1\bin\FreeCADCmd.exe" .\scripts\step_to_three_views.py

检查结果:

bridge\results\*.result.json

看到:

{
  "ok": true
}

即说明流程跑通。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐