Gingerbread是Winterbloom使用的Python工具集
项目描述
🍪 Gingerbread
Gingerbread 是Winterbloom用于创建装饰性印刷电路板(PCB)的Python工具集,例如我们用于前面板的PCB
Gingerbread由三个工具组成
convert
帮助将使用Affinity Designer创建的设计转换为KiCAD PCB文件。fancytext
用于为KiCAD PCB生成美观的文本标签。trace
是KiCAD的“图像转换器”程序(bitmap2component)的重新实现,作为一个Python库和命令行工具,以实现自动化。
注意:此工具非常符合Winterbloom的需求。它并不完美,也不是通用的,可能不会按您想象的方式工作。因此,它不提供任何保修和任何支持承诺——再次强调,我们不会为此提供任何免费支持。
话虽如此,您仍然可以尝试它,从中学习,从中取代码,并提供反馈或甚至贡献。如果您想付费让我们添加功能或支持某些用例,联系我们。
有几个类似的项目可能更适合您的用例。
安装
目前我们仅在macOS和Linux上进行了测试。无论平台如何,都可能难以使其工作,并且可能不在Windows上工作,除非在WSL下。有一个Docker选项,但有一些缺点。
macOS
您需要 homebrew 以及一些依赖项。
brew install cairo pango pangocairo potrace
您还需要 Python 3.10 或更高版本。使用 pip
进行安装。
python3 -m pip install gingerbread
Linux / WSL
在撰写本文时,Ubuntu 22.04 或更高版本是您的最佳选择。如果您想使用 Debian,则需要构建 Python 3.10 或更高版本和 pango 1.50 或更高版本,因为当前版本落后。这 应该 在 WSL(Windows Subsystem for Linux)下工作,只需确保使用 Ubuntu 22.04 或更高版本。
您至少需要以下系统软件包
sudo apt install -y \
build-essential \
cmake \
libpotrace-dev \
libvips-dev \
libcairo2 \
libpango1.0-0 \
libpangocairo-1.0-0 \
libvips42
一旦安装了所需软件,您就可以安装 Gingerbread。
python3 -m pip install --user gingerbread
Docker
如果您尝试了所有其他方法,仍然可以使用 Gingerbread 的 Docker 版本。在我们的有限测试中,convert
功能正常(虽然稍微慢一些),但 fancytext
完全无法工作。
要使用 Docker 版本,请克隆此仓库
git clone https://github.com/wntrblm/Gingerbread.git
cd Gingerbread
构建镜像——我们未将其发布到 Dockerhub,因为它处于实验阶段
docker build -t gingerbread .
现在您可以使用 Docker 运行 Gingerbread。您需要将当前工作目录作为卷传递,以便 Gingerbread 可以读取和写入文件。您可以在包含的示例文件上测试这一点。
cd example
docker run --rm -v "$PWD":/workdir gingerbread -m gingerbread.convert example.svg
使用 convert
convert
被设计用来将使用 Affinity Designer 创建的设计转换为 KiCAD PCB 文件。convert
需要一些设置工作,但一旦运行,您可以快速迭代您的设计。
在 ./example
目录中有一个示例,包括源 afdesign
文件、导出的 svg
文件和生成的 kicad_pcb
文件。在阅读这些文档时查看示例可能很有用。
页面设置
强烈建议您在 Affinity 中设置文档以使用毫米,并保持 DPI 为 2540
。
为什么是特定的 DPI 呢?因为 2540 DPI 正好是 1000 点/毫米,这在从 Affinity 导出设计和转换轮廓和钻孔时有助于避免舍入问题。您可以使用其他 DPI,但请确保使用 --dpi
标志告诉 convert
。
创建轮廓
轮廓应该在 Affinity 中名为 Edge.Cuts
(或 EdgeCuts
)的图层上绘制。convert
以特定方式处理 Edge.Cuts
,以确保 Affinity 和 KiCAD 中的尺寸和单位之间有一对一匹配。这种方法无法像图形图层使用的光栅化方法那样处理许多复杂的边缘情况,但只要您的路径已转换为曲线,它应该可以很好地处理它们。Edge.Cuts
还可以包含“切孔”——在整体板形状内的封闭路径。
示例文件有一个具有四个内部切孔的复杂轮廓。
图形图层
在 Affinity 中的 F.SilkS
、B.SilkS
、F.Cu
和 B.Cu
图层上的不透明区域将直接转换为 KiCAD 中的相应图层。F.Mask
和 B.Mask
与 KiCAD 中的相同,这意味着不透明区域表示要 移除 焊膏的地方。对于所有这些图层,convert
通过将单个图层光栅化成黑白图像,使用 trace
重新向量化,并将结果作为 KiCAD 封装绘制。
示例文件在 F.SilkS
、F.Cu
和 F.Mask
图层上有图形。
钻孔
在 Drills
图层上的项目也单独处理。convert
会遍历 Drills
图层中的所有形状,并将 仅 圆形转换为钻孔。这样做是为了在 Affinity 和 KiCAD 之间保留位置和尺寸。
示例文件中心有一个钻孔。
导出设计
当将设计导出为 SVG 时,点击 更多 按钮,设置导出参数。请确保将 光栅化 设置为“无”,勾选 导出文本为曲线,并勾选 平坦转换。
您可以将其保存为预设,以避免每次导出时都需要更改。
运行转换
一旦设计以SVG格式导出,您就可以运行convert
将其转换为KiCAD PCB。
python3 -m gingerbread.convert design.svg
convert
将报告转换后的PCB的详细信息。请仔细检查此输出以确保一切符合您的预期。例如,在示例设计中运行convert
会显示
convert: Converting board outline
convert: Outline converted: overall board size is 100.00 mm x 100.00 mm (10000.00 mm²).
convert: Converting drills
convert: Drills converted: 1
convert: Converting graphic layers
convert: F.SilkS converted
convert: B.SilkS not found
convert: F.Cu converted
convert: B.Cu not found
convert: F.Mask converted
convert: B.Mask not found
convert: Writing...
convert: Written to example.kicad_pcb 💜
convert
提供了一些自定义转换过程和输出的选项。运行python3 -m gingerbread.convert --help
获取完整的选项列表。
使用fancytext
fancytext
旨在易于使用。它是一个终端应用程序,将结果标签复制到您的剪贴板。
最基础的例子是
python3 -m gingerbread.fancytext "example"
这将生成一个简单的文本标签
这个基础示例并不比KiCAD的文本功能更有用,但Fancytext为您提供了更多的控制。
您可以根据需要更改文本的渲染方式
python3 -m gingerbread.fancytext --font "Pluto" --italic --size 3 "example"
您可以通过运行python3 -m gingerbread.fancytext --help
获取完整的选项列表。
Fancytext还有一个花哨的技巧——轮廓。您可以使用轮廓来更吸引人的关注您的文本标签。有多种轮廓样式,从--outline-stroke
开始
python3 -m gingerbread.fancytext --outline-stroke 0.5 "example"
还有更吸引眼球的--outline-fill
python3 -m gingerbread.fancytext --outline-fill --outline-stroke 0.2 "example"
通过将文本包裹在[]
、||
、<>
、()
、//
或\\
中,可以更改端帽的形状,并且您可以混合搭配
python3 -m gingerbread.fancytext --outline-fill --outline-stroke 0.2 "/example>"
有很多选项可以自定义这些标签的外观。您可以通过运行python3 -m gingerbread.fancytext --help
获取完整的选项列表。作为一个例子,我们喜欢使用以下设置来创建标签
python3 -m gingerbread.fancytext --font "Space Mono" --bold --italic --stroke 0.1 --padding 0 0 --outline-stroke 0.2 --outline-fill "fancytext"
最终看起来像这样
使用trace
trace
与其他Gingerbread工具相比相当简单。提供图像给它,它将提供KiCAD封装
python3 -m gingerbread.trace footprint.png
trace
有几个选项,包括重要的--dpi
选项,它告诉trace
封装的物理大小。运行python3 -m gingerbread.trace --help
查看所有选项。
类似项目
与Gingerbread的convert
类似的项目
- svg2shenzhen是一个基于Inkscape的工具,可以从SVG创建PCB和封装。Gingerbread与svg2shenzhen的内部工作有很多共同之处,但svg2shenzhen的应用范围更广,可以处理更多的用例。
- Gerbolyze将矢量艺术和位图艺术渲染到现有的Gerber文件中。这与Gingerbread和svg2shenzhen采用的方法大不相同,并通过其灰度仿真可以产生一些令人难以置信的结果。
- PCBmodE是一个基于Inkscape的电路板设计程序。
与Fancytext类似的项目
- KiBuzzard创建漂亮的文本标签。Fancytext实际上受到了Buzzard的启发,并继承了许多风格选择。然而,它们在实现上有所不同——Buzzard完全使用矢量图形,而Fancytext有一个中间的位图化步骤。KiBuzzard也是一个带有GUI的KiCAD插件,而Fancytext(目前)是一个终端应用程序。
致谢
Gingerbread建立在其他开源项目的卓越工作之上
- cairosvg被
convert
用来对SVG文件进行位图化。 - cairo(通过cairocffi)被
convert
和fancytext
用来渲染2D图形。 - pango(通过pangocffi)被
fancytext
用来布局文本。 - svgpathtools被
convert
用来处理板轮廓。 - 全文使用 rich 来实现美观的终端输出。
- 使用 pyperclip 将内容复制到剪贴板。
- 广泛使用 numpy 在各个库之间处理数据。
- 通过 pyvips(基于 vips)高效处理图像。
- 使用 potrace(通过 potracecffi)在
trace
中将位图图像转换为多边形。 - 使用 Gdsdk 及其底层的 Clipper 库来处理多边形和在其上打孔。
在构建 Gingerbread 时,还使用了以下项目的信息和想法:
- svg2shenzhen 将 SVG 转换为 KiCAD PCB 的整体策略是 Gingerbread
convert
的起点。 - 在实现
fancytext
的文本布局时,使用了 pangocairocffi 的测试 作为起点。 - 实现
fancytext
的文本布局时,以 librsvg 的 text.rs 为参考。 - 将 KiCAD 的 bitmap2component 作为参考来实施
trace
并测试其输出。 - 将 KiCAD 的 kimath 作为参考来实现
trace
的多边形处理。 - KiCAD 的 S-Expression 参考。
贡献
由于这个工具非常专门地针对 Winterbloom 的工作流程,我们并不期望有很多外部贡献。然而,如果您想贡献,请在开始编写代码之前提交问题或与我们联系,以确保它对我们所有人都有益。 :)
许可证
Gingerbread 在 MIT 许可证 下发布。
项目详情
下载文件
下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。
源代码分布
构建分布
gingerbread-2022.8.23.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 4133657a35a5db56898520dd722a829cfea9ac31dc4657a521889fc9b43096c4 |
|
MD5 | 40e6c50418418cb34695ca0488526bc5 |
|
BLAKE2b-256 | 3f77f22d860b09173545fb9655bd47c90a17a64e16bc68779715a72e7793da1e |