什么是Ezdxf?
Ezdxf是Autodesk开发的DXF(图形交换文件)格式的Python接口。
使用Ezdxf,我们可以轻松地读取、编辑现有的DXF文件,甚至从头开始创建新的文件。
有了Ezdxf,我们不必担心DXF格式背后的复杂技术细节。
更关键一点,有了它,我们可以在云端,集成数据库和LLM技术,生成各种图纸。
Ezdxf不能做什么?
- Ezdxf不是一个转换器:Ezdxf不能在不同的转换器版本之间转换。
- Ezdxf不是CAD文件格式转换器:Ezdxf不能将DXF文件转换为其他CAD格式,如DWG。
- Ezdxf不是一个CAD内核,它只是一个接口,以转换为CAD文件格式。如果想寻找一个支持Python脚本的CAD内核,可以体验FreeCAD。
支持的Python版本
Ezdxf需要Python 3.9以上版本。
Ezdxf是一个完全由Python编写的库,它还提供了Cython实现的数学类作为可选功能。
为了正常使用,它除了依赖Python的标准库外,还需要安装几个额外的库:pyparsing、numpy、fontTools和typing_extensions。
此外,如果你想要执行单元测试和集成测试,那么还需要安装Pytest这个测试框架。
支持的DXF版本
版本 | AutoCAD版本 |
AC1009 | AutoCAD R12 |
AC1012 | AutoCAD R13 -> R2000 |
AC1014 | AutoCAD R14 -> R2000 |
AC1015 | AutoCAD R2000 |
AC1018 | AutoCAD R2004 |
AC1021 | AutoCAD R2007 |
AC1024 | AutoCAD R2010 |
AC1027 | AutoCAD R2013 |
AC1032 | AutoCAD R2018(后面格式没有变化) |
有用的扩展插件
- drawing 附加组件是一个转换层,用于向渲染后端发送数据,matplotlib接口,可以将图像导出为PNG,PDF或SVG,并实现PyQt 5。
- r12writer 插件,用于将基本的XML实体直接快速写入到XML R12文件或流中
- iterdxf 插件,用于从无法放入内存的巨大文件(> 5GB)的模型空间中删除实体
- Importer 插件,用于从另一个XML文档导入实体、块和表条目
- dxf2code 插件,用于为从XML文档加载的XML结构生成Python代码,作为参数化XML实体创建的起点
- acadctb 读取/写入打印样式文件的附加组件(CTB/STB)
- pycsg 用于基本构造实体几何(CSG)建模的附加组件
- MTextExplode 用于将MTEXT图元分解为单行TEXT图元的附加组件
- meshex 用于与其他工具交换网格,如STL、OFF或OBJ文件
- openscad 插件,OpenSCAD的接口
- odafc ODA文件转换器的接口,用于读取和写入DWG文件
入门代码
绘制一条样条切线。
样条曲线的切线是曲线的一阶导数的方向。
# 导入ezdxf库
import ezdxf
from ezdxf.math import Vec3, estimate_tangents
import numpy as np
fit_points = Vec3.list(
[
(0, 0, 0),
(1000, 600, 0),
(1500, 1200, 0),
(500, 1250, 0),
(0, 0, 0),
]
)
spline = msp.add_spline(fit_points)
# 将曲线切线绘制为红线:
ct = spline.construction_tool()
for t in np.linspace(0, ct.max_t, 30):
point, derivative = ct.derivative(t, 1)
msp.add_line(point, point + derivative.normalize(200), dxfattribs={"color": 1})
doc.saveas("spline.dxf")
效果如下: