从代码生成 Fritzing 草图
本技能提供的能力
- 一种将网表(连接在一起的引脚列表)转换为包含三个视图(面包板、原理图和 PCB)的
.fzz文件的方法。 - 两个可运行的生成器示例。可以复制其中一个,然后修改部件和网表。
scripts/build_fzz_battery_led.py仅使用 Fritzing 自带的部件:电池座、按钮、电阻和 LED。可以从这个开始。scripts/build_fzz_header_led.py演示了如何将自定义部件(一个.fzp文件和四个 SVG 文件)写入草图。
- 部件检查器
scripts/check_core_part.py。它可以告知核心部件是否包含所有必需的图像文件。 - 无头检查器
scripts/fritzing_export.py。它在 Fritzing 中加载草图并将三个视图导出为 SVG 文件。 - 窗口检查器
scripts/fritzing_gui_shot.ps1(Windows)。它截取 Fritzing 窗口的屏幕截图,以便读取状态栏信息。 - 文件格式事实记录在
references/fz-file-format.md中。在编写任何.fzXML 之前,请先阅读此文件。
测试内容
- 已验证:Windows 11 + Fritzing 1.0.x,安装在
C:\Program Files\Fritzing。examples/中的两个示例草图均能构建、导出为 SVG、在 Fritzing 窗口中打开并显示三个视图的“Routing completed”,且通过了 PCB 设计规则检查。检查日期:2026-11-07。 - 未测试:macOS、Linux、Fritzing 1.0.x 以外的版本、自动布线以及包含多个部件的电路。
Claude 的规则
- 不要猜测部件的引脚。请读取其
.fzp文件并列出其连接器。在构建之前,将其与网表进行比较。 - 在使用每个核心部件之前,先用
scripts/check_core_part.py进行检查。如果部件的图像文件缺失,绘制时将是空白的。 - 未经用户同意,不要下载任何文件,除非用户提供了链接。请告知文件名、来源和大小。将每个下载放在其自己的新空文件夹中。不要运行其中的任何内容。
- 不要因为生成器运行成功就说草图“工作正常”。Fritzing 必须能够加载它,并且每个视图都必须显示每个部件。报告你没有检查的内容。
- 最后的检查需要人工完成:让用户在 Fritzing 窗口中打开文件,并描述他们所看到的内容。应修复生成器,而不是手动修复文件。
- 每次都要写出每个文件和部件的完整名称。
工作流程
找到 Fritzing 及其部件库
- Windows(已验证):Fritzing 位于
C:\Program Files\Fritzing\Fritzing.exe。部件库位于C:\Program Files\Fritzing\fritzing-parts。示例草图位于C:\Program Files\Fritzing\sketches\core。阅读它们以复制 Fritzing 自己编写的精确 XML。 - Linux(本仓库未测试):Fritzing AppImage 可以使用其
--appimage-extract选项解压到一个新的空文件夹中。部件库随后位于squashfs-root/fritzing-parts。 - macOS(未测试):部件库位于 Fritzing 应用程序内部。寻找名为
fritzing-parts的文件夹。 - 脚本将从用户自己的 Fritzing 安装目录读取部件库。将环境变量
FRITZING_PARTS设置为该文件夹。
检查部件
- 列出你需要的部件,并逐一查找:
python scripts\check_core_part.py "C:\Program Files\Fritzing\fritzing-parts" <部件名称>。添加--all battery可列出标题中包含“battery”的所有核心部件。 - 每个部件会输出
OK或MISSING,以及连接器数量和模块 ID。显示MISSING的部件将在图像文件缺失的视图中绘制为空白。 - 2026-11-07 测试安装中的示例:核心部件
screw_terminal_2_100mil缺少其原理图和 PCB 图像,核心部件Battery block 9V缺少其 PCB 封装(jumper_2_100mil_pcb.svg)。核心部件4 x AAA Battery Mount是完整的。 - 如果没有合适的核心部件,可以绘制一个。
scripts/build_fzz_header_led.py有一个示例:一个.fzp文件和四个 SVG 文件。 - 如果来自其他来源的部件缺少引脚,请复制该部件,为其赋予一个新的
moduleId,并添加连接器。将引脚添加到面包板 SVG、原理图 SVG 和 PCB SVG 中。
构建
- 复制
scripts/build_fzz_battery_led.py。修改部件、孔名称、坐标和网表。 - 将网表写成一个成员列表。脚本会根据自己的接线列表在所有三个视图中检查接线,并检查 PCB 走线间距。
- 首先选择面包板布局,然后是原理图,最后是 PCB。使用
references/fz-file-format.md了解孔名称、比例、图层名称和变换。 - 对于具有可弯曲引脚的部件,请从 Fritzing 示例草图中复制引脚的 XML。不要猜测(参见“之前出现的问题”)。
检查
- 运行
python scripts\fritzing_export.py "C:\Program Files\Fritzing\Fritzing.exe" <sketch.fzz> <new empty folder>。阅读打印的每一行。它会输出<name>_breadboard.svg、<name>_schematic.svg和<name>_pcb.svg。 - 以图片形式查看 SVG 文件。在 Windows 上的一种方法:编写一个包含
<img>标签显示 SVG 文件的 HTML 页面,然后运行msedge.exe --headless --window-size=W,H --screenshot=<out.png> file:///<page.html>。查看生成的 PNG 图片。导出只显示铜层,不显示丝印轮廓。要获取带轮廓的 PCB 图片,请使用scripts\fritzing_gui_shot.ps1在 Fritzing 窗口中截取 PCB 视图的屏幕截图,并裁剪出板子(examples/中的 PCB 图片就是通过这种方式制作的)。 - 对于每个部件,检查三件事:它被绘制出来、它的引脚位于孔上、以及每条导线端部都接触一个引脚。
- SVG 导出不会绘制飞线(显示未连接连接的细线)。因此它不能证明 Fritzing 已注册连接。在 Fritzing 窗口中打开草图。
- Windows,在实际的 Fritzing 窗口中:
- 使用
Start-Process启动Fritzing.exe "<sketch.fzz>"。等待 25 秒。 - 运行
scripts\fritzing_gui_shot.ps1 -Out <png>获取当前视图,然后使用-Keys "^3"获取原理图视图,使用-Keys "^4"获取 PCB 视图。读取每个 PNG 图片。 - 在每个视图的状态栏中查找“Routing completed”,并查找绿色的连接点。
- 对于设计规则检查,在 PCB 视图中使用
-Keys "^+d" -Wait 5运行脚本。干净的草图应显示“Your sketch is ready for production: there are no connectors or traces that overlap or are too close together.” - 关闭对话框并运行
Stop-Process -Name Fritzing。
- 使用
报告
- 说明你检查了什么以及如何检查的。说明你没有检查什么。以完整路径命名你编写的文件。
- 告诉用户如何打开文件:在 Fritzing 中,
File→Open。
之前出现的问题
- 核心部件的图像文件从安装目录中丢失了。 部件绘制为空白。在使用部件之前运行
scripts/check_core_part.py。 - 部件绘制为空白。 当面包板 SVG 没有
<g id="breadboard">组时,Fritzing 1.0.x 不会绘制任何内容。将整个内容包裹在该组中。 - 导线端部看起来正确但未连接。
.fz文件必须在两个项目中都列出每个连接。每对连接写一个link()调用,并发出两侧。 - 具有可弯曲引脚的部件(LED、电阻、二极管、电池座)。 在
.fz文件中,连接器<geometry x y>是 SVG 中引脚线体端的位置,乘以比例。<leg>的第二个点是尖端,相对于该点。对于 5mm LED,尖端偏移量为(0, 30.5172)。对于电池座,偏移量为(6.25, 0)。Fritzing 自己的示例草图显示了这一点。 - 比例错误。 场景单位是 1/90 英寸。使用
in单位的 SVG 按90 × width_in / viewBox_width缩放。使用普通px单位的 Illustrator SVG 被视为 72 dpi,因此乘以 1.25。 - 找不到原理图端子。 某些原理图 SVG 文件将端子隐藏在
<g>元素内,而有些则根本没有端子。读取 SVG 文件,取引脚线的外端。LED 原理图led.svg的阴极端子位于 (9.9005, 21.8165),阳极端子位于 (9.9005, 0.2165),单位为 72 dpi。 - 旋转后的部件落在孔外。 使用参考文件中的变换公式。通过一个引脚的位置(而不是通过其角落)来放置部件。
- 走线交叉。 将两条走线放在不同的层上。通孔焊盘连接两个层,因此不需要过孔。
- Python。 脚本仅使用标准库。它们不需要安装任何额外的包。
技能中的文件
SKILL.md:本文件。references/fz-file-format.md:.fzz和.fz格式,包含 XML 示例、比例、图层名称和公式。scripts/build_fzz_battery_led.py:仅使用核心部件(电池座、按钮、电阻、LED)的生成器。scripts/build_fzz_header_led.py:同时编写自定义部件(一个 2 针排针)的生成器。scripts/check_core_part.py:检查核心部件是否拥有其所有图像文件。scripts/fritzing_export.py:无头加载和导出检查器。scripts/fritzing_gui_shot.ps1:激活 Fritzing 窗口,可以发送按键,并保存屏幕截图(Windows)。examples/battery_led.fzz和examples/header_led.fzz:两个生成器编写的草图,附有每个视图的图片。