从 Python ezdxf 源码生成、重新生成和验证 2D DXF 图纸。用于 DXF 文件、gen_dxf() 源码、2D 轮廓、外形、模板、垫片、面板、平板图案、激光/等离子/水刀切割布局以及 CAD 几何体的 2D 图纸导出。
DXF 生成与验证
来源:维护于 earthtojake/text-to-cad。
使用本地安装的技能文件作为运行时真实来源;
仓库链接仅用于来源追溯和发布审查。
目的
根据自然语言需求或 CAD 几何体创建或修改 2D DXF 图纸,生成已验证的 .dxf 工件,并返回检查后的输出。DXF 源是定义 gen_dxf() 并返回 ezdxf 文档的 Python 文件;CLI 负责输出路径。
支持两种源形式:
- 独立绘图:仅定义
gen_dxf()的 Python 源。用于纯 2D 输出——垫片、面板、模板、切割布局——无需背后的 3D 模型。 - CAD 投影:在同时定义
gen_step()的 CAD 生成器源中添加gen_dxf()。当 DXF 是 3D 零件的图纸或轮廓时使用;先用$cad创建并验证 STEP 几何体,然后在同一源文件中添加投影。
何时使用此技能
当用户要求 DXF 文件、2D 图纸、轮廓、外形、模板、垫片、面板、平板图案或用于激光、等离子、水刀或 CNC 雕刻的切割布局时使用。
对于 DXF 所源自的 3D 零件或装配体,使用 $cad。对于 SendCutSend 特定的上传预检,使用 $sendcutsend。
默认设置
除非用户另有指定,否则使用以下默认值:
- 单位:毫米;在文档上显式设置(
doc.units = ezdxf.units.MM)。 - 几何体位于模型空间,比例为 1:1。
- 切割轮廓为闭合多段线或闭合直线/圆弧环;开放轮廓仅用于雕刻或参考几何体。
- 对于基于 CAD 的零件,优先从同一生成器脚本中的实际 STEP/实体拓扑导出 DXF 切割轮廓:构建 3D 形状,选择/投影实际平面,将其展开为平面坐标,并从这些投影的面线发出闭合轮廓。仅当没有可靠的 3D 拓扑可投影时,才使用手绘参数化轮廓。
- 图层承载意图:将切割几何体和折弯/折叠线放在不同图层上,并在折弯图层名称中包含“bend”,以便下游工具将其分类为折弯而非切割。
- DXF 图层是绘图结构,而非 STEP 零件/装配体结构。
工具
启动器位于 DXF 技能目录中:
python scripts/dxf targets... [flags]
使用活动项目的 Python 解释器;将 python 视为解释器占位符,使用 --help 查看完整接口。目标路径从命令的当前工作目录解析;从拥有工件的 workspace 运行,使用相对于 cwd 的目标路径。除非用户另有要求,否则将 DXF 输出及其 Python 生成器放在同一目录中,使用相同的基本名称。
DXF 目标是定义以下内容的 Python 源:
def gen_dxf():
...
return document
普通生成的 Python 目标会写入同级的 .dxf 输出。仅当只有一个普通生成的 Python 目标时使用 -o/--output,或使用 SOURCE.py=OUTPUT.dxf 位置对进行每个目标的自定义输出。不要将输出路径放在 gen_dxf() 的返回值中。
scripts/dxf 是一个生成器;它不检查现有的 .dxf 文件。对于现有 DXF 的检查,使用 ezdxf 进行实体/图层检查,使用 $cad-viewer 进行视觉审查。
工作流程
- 将请求转换为简短摘要:轮廓尺寸、孔和槽、图层、单位、输出路径和验证目标。
- 对于 CAD 投影,先用
$cad生成并验证 STEP 几何体,然后在同一源中添加或更新gen_dxf()。尽可能从内存中的 STEP/实体拓扑导出 DXF,而不是重复几何公式,以便 DXF 保持为所导出零件的直接投影/展开。 - 编写或编辑 Python 源,使用有意义的尺寸作为命名参数。
- 仅对显式的 Python 源目标运行
scripts/dxf;不要运行目录范围的生成。
python scripts/dxf path/to/source.py
python scripts/dxf path/to/source.py -o path/to/output.dxf
python scripts/dxf path/to/a.py=out/a.dxf path/to/b.py=out/b.dxf
- 确定性验证生成的 DXF,然后移交并报告。
验证
使用有针对性的 ezdxf 检查验证生成的文件,而非目视检查:按类型和图层的实体计数、切割轮廓的闭合标志、绘图范围以及用户指定的每个尺寸。
import ezdxf
doc = ezdxf.readfile("path/to/output.dxf")
msp = doc.modelspace()
profiles = [e for e in msp.query("LWPOLYLINE") if e.closed]
holes = msp.query('CIRCLE[layer=="0"]')
仅报告实际运行的检查。
移交
创建或修改 .dxf 工件后,如果安装了 $cad-viewer 技能,则必须始终将显式文件路径移交给 $cad-viewer,并在最终响应中包含其实时查看器链接。如果 $cad-viewer 不可用或启动失败,请报告该情况,并依赖 ezdxf 检查,而不是静默省略移交。
最终响应应包括生成的文件、返回的查看器链接、实际运行的验证以及假设。






