广告

零基础也能上手:用 Python 操作 CAD 的 ezdxf 库入门教程

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。

创建一个独立工作目录并新建一个 虚拟环境,然后在其中安装所需库,这样做的好处是不会污染系统全局的包。

零基础也能上手:用 Python 操作 CAD 的 ezdxf 库入门教程

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_lineadd_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")

广告

后端开发标签