01. 零基础入门:认识 ezdxf 与 CAD
如果你需要在无需 CAD 软件界面就能自动化绘制和修改图纸,Python + ezdxf 提供了一条简洁的路径。ezdxf 是一个纯 Python 库,用来创建、读取和修改 DXF 文件,而 DXF 是 CAD 行业的通用文件格式。通过它,你可以用代码生成几何图形、提取坐标信息、批量处理图层与实体。
零基础 的读者也能上手,核心在于理解几何实体与坐标系,以及如何用 简单的 API 去创建常见的 直线、圆、多段线 等对象。本文将通过循序渐进的示例,带你完成从环境搭建到生成 DXF 的完整流程。
在 CAD 项目中,自动化脚本 可以节省大量重复工作 —— 如批量绘制符号、批量导出图纸、或把数据转换成 可共享的 DXF 文件。学习 ezdxf 还可以帮助你理解 坐标系、单位与图层 的关系,从而避免常见错误。
02. 环境准备与安装
02.01 安装 Python 与虚拟环境
要开始使用 ezdxf,首先需要一份干净的 Python 环境。Python 3.x 是推荐版本,配合虚拟环境可以避免包冲突。以下步骤适用于 Windows、macOS、Linux。
创建一个独立工作目录并新建一个 虚拟环境,然后在其中安装所需库,这样做的好处是不会污染系统全局的包。

02.02 安装 ezdxf
在激活的虚拟环境中,通过 pip 安装 ezdxf,即可开始编写 CAD 脚本。
python -m venv venv
# Linux / macOS
source venv/bin/activate
# Windows
.\venv\Scripts\activatepip install ezdxf
安装完成后,你就可以在 Python 脚本 中导入 ezdxf,并逐步尝试创建或修改 DXF 文件。
03. 第一个 DXF 图:用 ezdxf 创建一个简单图形
03.01 新建一个 DXF 文件
在开始绘制之前,先了解 模型空间 与 图层 的概念。ezdxf 提供了一个简单的入口来创建新的 DXF 文档,并把基本几何放入 模型空间。
接下来用一个最小示例来演示创建过程:直线、坐标对、以及保存为 example.dxf。
import ezdxf# 创建一个新的 DXF 文档,R2010 是 DXF 版本标识
doc = ezdxf.new('R2010')
# 取得默认的模型空间(用于放置实体的工作区域)
msp = doc.modelspace()# 添加一个水平直线,放在名为 TEST 的图层
msp.add_line((0, 0), (100, 0), dxfattribs={'layer': 'TEST'})# 保存到文件
doc.saveas('example.dxf')
通过 add_line、add_circle、以及 add_lwpolyline 等 API,我们可以快速将简单的图形转化为可用的 DXF 文件。关键是正确设置 坐标 与 图层,以便后续在 CAD 软件中查看。
04. 读取与修改现有 DXF 文件
04.01 读取 DXF
读取现有的 DXF 文件时,ezdxf 提供了 readfile 函数,它会返回一个 Document 对象,包含 模型空间 等节点。
import ezdxfdoc = ezdxf.readfile('example.dxf')
msp = doc.modelspace()# 打印模型空间中所有实体的简要信息
for e in msp:print(type(e).__name__, 'layer=', e.dxf.layer)
遍历实体可以帮助你理解 图形结构,以及哪些实体来自于哪一个 图层。
04.02 修改实体
你也可以对已存在的实体进行修改,例如更改所在的 图层、颜色或线型。修改后需要重新保存,以生成新的 DXF 文件。
line = msp.query('LINE')[0] # 获取第一条直线
line.dxf.layer = 'ALTERED'
line.dxf.color = 4 # 颜色索引doc.saveas('example_modified.dxf')
05. 常见实体操作:线、圆、多段线
05.01 绘制直线与圆
直线与圆是CAD 最基础的两个实体。通过 模型空间 的容器,我们可以将它们放置在任意坐标。以下示例演示了创建直线和圆的基本方法。
# 直线
msp.add_line((10, 10), (60, 10), dxfattribs={'layer': 'geom'})# 圆心与半径
msp.add_circle((30, 30), radius=15, dxfattribs={'layer': 'geom'})
05.02 绘制多段线
多段线(Polyline 或 LWPolyline)是表示连续点的常用方式。使用 add_lwpolyline,可以快速绘制闭合或开放的多段路线,并且能够与 CAD 的图块或标注对齐。
points = [(0,0), (50,0), (50,50), (0,50), (0,0)]
msp.add_lwpolyline(points, dxfattribs={'layer': 'geom'})doc.saveas('polyline.dxf')
06. 导出与脚本化:将 CAD 工作流自动化
06.01 批量生成 DXF 文件
借助 循环、数据映射,你可以把外部数据转成 DXF 图形,从而实现批量生成。这样可以提升设计、制图或参数化建模的效率。
import ezdxfdata = [{'name': 'part1', 'line': ((0,0),(100,0))},{'name': 'part2', 'line': ((0,0),(0,100))},
]for item in data:doc = ezdxf.new('R2010')msp = doc.modelspace()msp.add_line(*item['line'], dxfattribs={'layer': 'parts'})doc.saveas(f"{item['name']}.dxf")


