delancy827/cad-skills/cad-automation

Claude Code and agent skill by delancy827/cad-skills

Trust tier 2
  • community
LLM review pending
Source check pending

Checking that the SKILL.md file is still in the repository.

CAD自动化绘图skill,内置完整的AutoCAD二次开发知识体系。支持通过Python(pyautocad/win32com)/AutoLISP/C#/VBA连接AutoCAD进行自动化绘图、编辑、图层管理、标注、块与属性、三维建模、批量处理、文件转换等。也涵盖国产中望CAD/浩辰CAD的兼容性。

Install

npx vskill@latest install delancy827/cad-skills/cad-automation

SKILL.md

CAD 自动化绘图 Skill(优化版)

本skill提供AutoCAD自动化绘图的完整知识体系,涵盖Python COM自动化、AutoLISP插件开发、国产CAD兼容等核心内容。

0. 2026-06-11 优化版使用原则

本版把 CAD 自动化从“只会调用 AutoCAD”升级为“三栈协同”:

场景首选技术原因降级方案
已安装 AutoCAD、要直接生成 DWGwin32com / pyautocad可调用真实 AutoCAD,适合出 DWG、标注、图层、打印SendCommand / SCR
没有 CAD 软件、要稳定生成交换文件ezdxf离线生成 DXF,适合 CI、服务器、批量草图生成 SVG/JSON 几何清单
参数化 3D、模具/夹具/结构件建模CadQuery / FreeCAD适合尺寸驱动和 STEP/STL 输出先生成 2D 总图,再转 3D
国产 CAD 兼容COM + 英文命令 + DXF中望/浩辰对 COM 和 DXF 兼容度通常较高AutoLISP
执行铁律
  1. 先判断环境:AutoCAD.Application 能连接则走 COM,不能连接则走离线 DXF。
  2. 模型空间永远按 1:1、毫米单位绘制;图纸空间只处理视口和出图比例。
  3. 每次自动绘图都要创建标准图层、锁定 WCS、清理选择集、执行 AUDIT/PURGE/ZOOM E/REGENALL。
  4. 输出前至少做 L3 验证:对象数量、关键图层、关键几何尺寸、文字/标注存在性。
  5. 使用外部开源项目的思路、API 或示例时,在交付包中保留 ATTRIBUTION.md,注明来源、许可证和本项目的使用方式。
外部开源资料吸收范围

本 skill 只吸收公开文档中的工程方法,不复制大段源代码。参考项目:

项目作用许可证使用方式
reclosedev/pyautocadAutoCAD ActiveX 自动化封装、坐标与对象遍历思路BSD-2-Clause作为 COM 自动化路线参考
mozman/ezdxf离线 DXF 创建/读写/修改MIT作为无 AutoCAD 环境的 fallback
CadQuery/cadqueryPython 参数化 3D CADApache-2.0作为 3D 参数化建模路线参考
开源CAD自动化项目行业最佳实践参考多种作为技术路线与接口设计参考

⚠️ Python AutoCAD COM 关键踩坑

环境
  • AutoCAD 2020+ (中文版), Python 3.10+ + pyautocad/pywin32, Windows 11
连接方式
方式结果
pyautocad.Autocad(create_if_not_exists=True)✅ 推荐,自动处理COM
win32com.client.Dispatch("AutoCAD.Application")✅ 底层连接
win32com.client.GetActiveObject("AutoCAD.Application")✅ 连接已运行的实例
win32com.client.Dispatch("AutoCAD.Application.24")✅ 指定版本(2021=24,2022=24.1,2023=24.2,2024=24.3)
核心踩坑
  1. pyautocad 安全数组: 坐标必须用 APoint(x,y,z) 包装
  2. COM对象生命周期: GetActiveObject失败则需Dispatch
  3. 单位: AutoCAD内部使用绘图单位,默认公制mm
  4. 中文命令: 用 acad.doc.SendCommand("_LINE ") 带下划线前缀
  5. 选择集: acad.doc.SelectionSets 使用后必须Delete(),否则累积报错
  6. 中望/浩辰兼容: pyautocad同样支持(COM接口兼容),但部分VLAX函数需要适配

一、AutoCAD 基础知识

1.1 AutoCAD 概述

AutoCAD是Autodesk公司开发的通用CAD软件,支持建筑、机械、电气、土木等领域。

1.2 坐标系
  • WCS (世界坐标系): 绝对坐标系,原点固定
  • UCS (用户坐标系): 可自定义原点和方向
  • 极坐标: @距离<角度 (如 @100<45)
  • 相对坐标: @x,y (如 @50,30)
1.3 文件类型
类型扩展名说明
图形文件.dwg标准图形文件
交换格式.dxf文本/二进制交换格式
模板.dwt含预设样式模板
标准.dws图层/标注/文字标准
脚本.scr批量命令脚本
线型.lin自定义线型定义
填充.pat自定义填充图案
1.4 常用API对象层次
AutoCAD.Application
├── ActiveDocument (Document)
│ ├── ModelSpace (模型空间)
│ ├── PaperSpace (图纸空间)
│ ├── Layers (图层集合)
│ ├── Linetypes (线型集合)
│ ├── TextStyles (文字样式)
│ ├── DimStyles (标注样式)
│ ├── Blocks (块集合)
│ ├── SelectionSets (选择集)
│ ├── Groups (组集合)
│ └── Utility (角度/距离/坐标工具)
├── Documents
├── Preferences (系统配置)
└── MenuGroups (菜单组)

二、绘图命令 (Drawing)

2.1 基本图元
python
from pyautocad import Autocad, APoint, aDouble
acad = Autocad(create_if_not_exists=True)
# 直线
line = acad.model.AddLine(APoint(0,0,0), APoint(100,50,0))
# 圆
circle = acad.model.AddCircle(APoint(50,50,0), 30)
# 圆弧 (center, radius, start_angle弧度, end_angle弧度)
arc = acad.model.AddArc(APoint(50,50,0), 30, 0, 3.14159)
# 轻量多段线 (2D, 推荐)
pts = aDouble(0,0, 100,0, 100,50, 50,50) # x,y交替
pline = acad.model.AddLightWeightPolyline(pts)
pline.Closed = True
pline.Color = 1 # 红色
# 椭圆
ellipse = acad.model.AddEllipse(APoint(50,50,0), APoint(30,0,0), 0.5)
# 样条曲线
fit_pts = aDouble(0,0,0, 20,30,0, 50,10,0, 80,60,0, 100,0,0)
spline = acad.model.AddSpline(fit_pts, aDouble(1,1,0), aDouble(1,0,0))
# 文字
text = acad.model.AddText("设计说明", APoint(10,10,0), 5)
mtext = acad.model.AddMText(APoint(10,10,0), 50, "多行\\P文字")
# 点
point = acad.model.AddPoint(APoint(50,50,0))
2.2 填充 (Hatch)
python
outer_loop = [pline]
hatch = acad.model.AddHatch(0, "ANSI31", True)
hatch.AppendOuterLoop(outer_loop)
hatch.Evaluate()
hatch.PatternScale = 2.0
hatch.PatternAngle = 0.785 # 45°
hatch.Color = 3
2.3 SendCommand 方式 (兼容性最好)
python
acad.doc.SendCommand("_CIRCLE 50,50 30 ")
acad.doc.SendCommand("_LINE 0,0 100,50 \n")
# \n = 回车, 空格 = 结束当前输入

三、编辑命令 (Modify)

3.1 基本编辑
python
# 移动
obj.Move(APoint(0,0,0), APoint(50,0,0))
# 复制
new_obj = obj.Copy()
new_obj.Move(APoint(0,0,0), APoint(100,0,0))
# 旋转 (基点, 角度弧度)
obj.Rotate(APoint(0,0,0), 1.5708) # 90°
# 缩放 (基点, 比例因子)
obj.ScaleEntity(APoint(0,0,0), 2.0)
# 镜像 (镜像线两点)
obj.Mirror(APoint(0,0,0), APoint(0,100,0))
# 偏移
obj.Offset(10) # 返回数组(可能多个结果)
# 阵列 (矩形)
obj.ArrayRectangular(3, 2, 1, 100, 50, 0) # rows,cols,levels,row_sp,col_sp,level_sp
3.2 通过SendCommand操作
python
acad.doc.SendCommand("_MOVE\n") # 移动
acad.doc.SendCommand("_COPY\n") # 复制
acad.doc.SendCommand("_ROTATE\n") # 旋转
acad.doc.SendCommand("_SCALE\n") # 缩放
acad.doc.SendCommand("_MIRROR\n") # 镜像
acad.doc.SendCommand("_OFFSET 10\n") # 偏移
acad.doc.SendCommand("_TRIM\n") # 修剪
acad.doc.SendCommand("_EXTEND\n") # 延伸
acad.doc.SendCommand("_FILLET R 5\n_FILLET\n") # 圆角R5
acad.doc.SendCommand("_CHAMFER D 3 3\n_CHAMFER\n") # 倒角3x3

四、图层管理 (Layers)

python
# 创建图层
layer = acad.doc.Layers.Add("WALL")
layer.Color = 1 # 红色 (ACI色号)
layer.Linetype = "Continuous"
# 设置当前图层
acad.doc.ActiveLayer = acad.doc.Layers("WALL")
# 遍历所有图层
for layer in acad.doc.Layers:
print(f"{layer.Name}: color={layer.Color}, linetype={layer.Linetype}")
# 锁定/冻结/关闭
ref = acad.doc.Layers("WALL")
ref.Lock = True # 锁定
ref.Freeze = False # 冻结
ref.LayerOn = True # 开关
# 修改对象图层
line.Layer = "DIM"
# 批量修改图层 (SendCommand)
acad.doc.SendCommand("_LAYMCH\n") # 图层匹配
acad.doc.SendCommand("_LAYISO\n") # 图层隔离
acad.doc.SendCommand("_LAYUNISO\n") # 取消隔离
ACI常用色号
色号颜色适用
1红标注/重点
2黄中心线
3绿辅助线
4青文字
5蓝轮廓
6品红剖面
7白/黑默认
8灰参考线

五、标注与文字 (Dimensions & Text)

5.1 标注
python
p1 = APoint(0, 0, 0)
p2 = APoint(100, 0, 0)
text_pos = APoint(50, -20, 0)
# 线性标注
dim = acad.model.AddDimAligned(p1, p2, text_pos)
# 旋转标注
dim = acad.model.AddDimRotated(p1, p2, text_pos, 0)
# 半径/直径标注
dim_rad = acad.model.AddDimRadial(APoint(50,50,0), circle, 10) # leader_length
dim_dia = acad.model.AddDimDiametric(APoint(50,50,0), circle, 10)
# 角度标注
dim_ang = acad.model.AddDimAngular(APoint(0,0,0), p1, p2, APoint(30,30,0))
# 坐标标注
dim_ord = acad.model.AddDimOrdinate(APoint(50,50,0), APoint(50,0,0), True) # X坐标
# 标注样式
dim_style = acad.doc.DimStyles.Add("GB_DIM")
dim.TextHeight = 3.5 # 字高
dim.ArrowheadSize = 2.5 # 箭头大小
dim.DecimalSeparator = "."
5.2 公差与粗糙度
python
# 公差标注(通过SendCommand兼容性好)
acad.doc.SendCommand("_TOLERANCE\n")
# 或使用Leader+文字模拟
leader = acad.model.AddLeader(points, annotation, 0)
5.3 特殊字符
代码字符
%%cφ 直径
%%d° 度
%%p± 正负号
%%u下划线开关
\\P换行(MTEXT)

六、块与属性 (Blocks & Attributes)

6.1 块定义
python
# 创建块定义
block = acad.doc.Blocks.Add(APoint(0,0,0), "MyBlock")
# 在块定义中添加对象
block.AddCircle(APoint(0,0,0), 10)
block.AddLine(APoint(-10,0,0), APoint(10,0,0))
# 插入块参照
insert_pt = APoint(50, 50, 0)
block_ref = acad.model.InsertBlock(insert_pt, "MyBlock", 1, 1, 1, 0)
6.2 带属性的块
python
# 创建属性定义
att = block.AddAttribute(
5, # 字高
0, # 模式(0=无)
"标签", # 提示
APoint(0,15,0), # 插入点
"TAG", # 标签
"默认值" # 默认值
)
# 插入后修改属性
for att in block_ref.GetAttributes():
if att.TagString == "TAG":
att.TextString = "零件-001"
att.Update()
6.3 外部参照 (Xref)
python
# 附着外部参照
xref = acad.model.AttachExternalReference(
"D:/ref/base.dwg", # 文件路径
"base", # 块名
APoint(0,0,0), # 插入点
1, 1, 1, 0 # 比例和旋转
)

七、选择集与过滤

python
# 创建选择集
ss = acad.doc.SelectionSets.Add("SS1")
# 全选
ss.Select(5) # acSelectionSetAll
# 窗口选择
ss.Select(0, APoint(0,0,0), APoint(100,100,0)) # acSelectionSetWindow
# 过滤选择 (所有圆,半径>10)
import win32com.client
ft = win32com.client.VARIANT(0, [0, "CIRCLE", 40, 10.0]) # DXF组码过滤
fd = win32com.client.VARIANT(0, [0, ">="])
ss.Select(5, 0, 0, ft, fd)
# 遍历选择集
for obj in ss:
print(f"对象类型: {obj.ObjectName}, 图层: {obj.Layer}")
# 删除选择集
ss.Delete()
DXF组码常用过滤
组码含义示例
0对象类型"CIRCLE","LINE","TEXT"
8图层名"WALL","DIM"
62颜色1(红), 2(黄)
40半径(圆)/字高(文字)10.0
10中心点/插入点坐标

八、三维建模 (3D Modeling)

8.1 基本3D实体
python
# 长方体
box = acad.model.AddBox(APoint(0,0,0), 100, 50, 30) # 角点,长,宽,高
# 圆柱体
cyl = acad.model.AddCylinder(APoint(50,50,0), 20, 100) # 底面中心,半径,高
# 球体
sphere = acad.model.AddSphere(APoint(50,50,30), 25)
# 圆锥体
cone = acad.model.AddCone(APoint(50,50,0), 15, 50)
# 圆环体
torus = acad.model.AddTorus(APoint(50,50,0), 30, 10) # 中心,大半径,管半径
8.2 拉伸与旋转
python
# 创建面域
regions = acad.model.AddRegion([pline])[0]
# 拉伸面域成实体
height = 50
taper_angle = 0 # 拔模角度(弧度)
solid = acad.model.AddExtrudedSolid(regions, height, taper_angle)
# 旋转面域成实体
solid = acad.model.AddRevolvedSolid(regions, APoint(0,0,0), APoint(0,0,100), 360)
8.3 布尔运算
python
# 并集
solid1.Boolean(0, solid2) # acUnion
# 差集
solid1.Boolean(1, solid2) # acSubtraction
# 交集
solid1.Boolean(2, solid2) # acIntersection
8.4 SendCommand 3D
python
acad.doc.SendCommand("_BOX\n0,0,0\nL\n100\n50\n30\n")
acad.doc.SendCommand("_CYLINDER\n50,50,0\n20\n100\n")
acad.doc.SendCommand("_SUBTRACT\n") # 差集
acad.doc.SendCommand("_UNION\n") # 并集

九、图纸空间与打印

9.1 布局操作
python
# 获取布局列表
for layout in acad.doc.Layouts:
print(f"布局: {layout.Name}")
# 创建新布局
acad.doc.Layouts.Add("A3_打印")
# 切换布局
acad.doc.ActiveLayout = acad.doc.Layouts("A3_打印")
# 创建视口
vp = acad.doc.PaperSpace.AddPViewport(
APoint(10,10,0), # 中心点
200, # 宽
150 # 高
)
vp.Display(True) # 显示视口内容
9.2 打印/导出PDF
python
# 通过SendCommand
acad.doc.SendCommand("_PLOT\n") # 打印
acad.doc.SendCommand("_EXPORTPDF\n") # 导出PDF
# 通过API
plot_cfg = acad.doc.Plot # ActivePlotConfiguration
plot_cfg.ConfigName = "DWG To PDF.pc3"
plot_cfg.PaperUnits = 1 # mm
plot_cfg.StandardScale = 0 # acScaleToFit
plot_cfg.PlotType = 4 # acExtents
acad.doc.Plot.PlotToFile("D:/output.pdf")

十、AutoLISP 自动化 (CAD知识库核心)

10.1 LISP基础

来自"CAD学习知识库"的308个插件揭示了LISP在工程领域的真实生产力。

lisp
;; 基础结构
(defun c:命令名 (/ 局部变量1 局部变量2)
(setq var1 value1) ; 设置变量
(setq ss (ssget)) ; 获取选择集
(princ "\\n提示文字") ; 命令行输出
(princ) ; 静默退出
)
;; 选择集遍历
(defun c:changecolor (/ ss i en)
(setq ss (ssget))
(setq i 0)
(repeat (sslength ss)
(setq en (ssname ss i))
(setq ed (entget en))
(entmod (subst (cons 62 1) (assoc 62 ed) ed)) ; 改为红色
(setq i (1+ i))
)
)
;; 坐标标注 (from ZBBZ.lsp)
(defun c:zbbz ()
;; 创建标注图层
(entmake (list '(0 . "LAYER") '(100 . "AcDbLayerTableRecord")
'(2 . "UserDimCoors") '(70 . 0) '(62 . 7) '(6 . "Continuous")))
;; 设置当前图层
(setvar "CLAYER" "UserDimCoors")
;; 获取点
(while (setq pt (getpoint "\\n拾取标注点:"))
(setq x (rtos (car pt) 2 3))
(setq y (rtos (cadr pt) 2 3))
(setq str (strcat "X=" x "\\PY=" y))
(entmake (list '(0 . "MTEXT") (cons 1 str) (cons 10 pt) '(40 . 3.5)))
)
)
10.2 批量处理框架 (mini_系列)

CAD学习知识库中最核心的模式——mini_前缀系列,提供了专业级工程自动化框架:

lisp
;; mini_ 系列的核心模式: 配置-选择-处理
(defun c:mini_任务名 ( / old_cmd config_file sel_set result)
;; 1. 保存当前环境
(setq old_cmd (getvar "CMDECHO"))
(setvar "CMDECHO" 0)
;; 2. 加载配置(如有)
;; (load "mini_config.lsp")
;; 3. 选择对象
(princ "\\n选择对象: ")
(setq sel_set (ssget))
;; 4. 处理逻辑
;; ...
;; 5. 恢复环境
(setvar "CMDECHO" old_cmd)
(princ)
)
10.3 LISP常用函数速查

This is the start of the file. Read the full SKILL.md on GitHub.

Security

  • Security scanPassed, 100 of 100Pattern checks on the skill's files.
  • Model reviewNot runA model review is scheduled for the next rescan.

Quality evaluation

  • Task evaluationNot runNo evaluation yet. Run one in Skill Studio.

Source

Popularity

Repository stars
103
Repository forks
15
7-day trend score
0

Stars and forks are for the whole GitHub repository, not this skill alone. Not refreshed yet.

Works with

Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.

  • Claude Code
  • Cursor
  • GitHub Copilot
  • Windsurf
  • Codex
  • Gemini CLI
  • Cline
  • Amp
  • Roo Code
  • Goose
  • Continue
  • Kilo Code
  • Junie
  • Trae
  • OpenHands
  • Qwen Code
  • AI Agent
  • Tabnine Chat
  • Sourcegraph Cody
  • Amazon Q
  • Firebase Genkit
  • Sweep
  • Devin
  • Phind
  • Mentat
  • Claude Desktop
  • Aider
  • GPT Pilot
  • Plandex
  • bolt.new
  • v0
  • Replit Agent
  • Anse
  • TypingMind
  • BetterChatGPT
  • LibreChat
  • Warp AI
  • Pieces
  • Fig AI
Embed badge
vskill VERIFIED badge
[![vskill VERIFIED](https://verified-skill.com/api/v1/skills/delancy827/cad-skills/cad-automation/badge)](https://verified-skill.com/skills/delancy827/cad-skills/cad-automation)

Something wrong with this skill or its page? Tell us.