跳转到主要内容

Gingerbread是Winterbloom使用的Python工具集

项目描述

🍪 Gingerbread

Gingerbread 是Winterbloom用于创建装饰性印刷电路板(PCB)的Python工具集,例如我们用于前面板的PCB

Front panels made from PCBs

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

Affinity page settings

为什么是特定的 DPI 呢?因为 2540 DPI 正好是 1000 点/毫米,这在从 Affinity 导出设计和转换轮廓和钻孔时有助于避免舍入问题。您可以使用其他 DPI,但请确保使用 --dpi 标志告诉 convert

创建轮廓

轮廓应该在 Affinity 中名为 Edge.Cuts(或 EdgeCuts)的图层上绘制。convert 以特定方式处理 Edge.Cuts,以确保 Affinity 和 KiCAD 中的尺寸和单位之间有一对一匹配。这种方法无法像图形图层使用的光栅化方法那样处理许多复杂的边缘情况,但只要您的路径已转换为曲线,它应该可以很好地处理它们。Edge.Cuts 还可以包含“切孔”——在整体板形状内的封闭路径。

示例文件有一个具有四个内部切孔的复杂轮廓。

图形图层

在 Affinity 中的 F.SilkSB.SilkSF.CuB.Cu 图层上的不透明区域将直接转换为 KiCAD 中的相应图层。F.MaskB.Mask 与 KiCAD 中的相同,这意味着不透明区域表示要 移除 焊膏的地方。对于所有这些图层,convert 通过将单个图层光栅化成黑白图像,使用 trace 重新向量化,并将结果作为 KiCAD 封装绘制。

示例文件在 F.SilkSF.CuF.Mask 图层上有图形。

钻孔

Drills 图层上的项目也单独处理。convert 会遍历 Drills 图层中的所有形状,并将 圆形转换为钻孔。这样做是为了在 Affinity 和 KiCAD 之间保留位置和尺寸。

示例文件中心有一个钻孔。

导出设计

当将设计导出为 SVG 时,点击 更多 按钮,设置导出参数。请确保将 光栅化 设置为“无”,勾选 导出文本为曲线,并勾选 平坦转换

Affinity export settings

您可以将其保存为预设,以避免每次导出时都需要更改。

运行转换

一旦设计以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"

这将生成一个简单的文本标签

A simple text label

这个基础示例并不比KiCAD的文本功能更有用,但Fancytext为您提供了更多的控制。

您可以根据需要更改文本的渲染方式

python3 -m gingerbread.fancytext --font "Pluto" --italic --size 3 "example"

A fancier text label

您可以通过运行python3 -m gingerbread.fancytext --help获取完整的选项列表。

Fancytext还有一个花哨的技巧——轮廓。您可以使用轮廓来更吸引人的关注您的文本标签。有多种轮廓样式,从--outline-stroke开始

python3 -m gingerbread.fancytext --outline-stroke 0.5 "example"

A fancy stroked outline

还有更吸引眼球的--outline-fill

python3 -m gingerbread.fancytext --outline-fill --outline-stroke 0.2 "example"

A fancy filled outline

通过将文本包裹在[]||<>()//\\中,可以更改端帽的形状,并且您可以混合搭配

python3 -m gingerbread.fancytext --outline-fill --outline-stroke 0.2 "/example>"

A fancy filled outline with fancy caps

很多选项可以自定义这些标签的外观。您可以通过运行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"

最终看起来像这样

Winterbloom style fancy text

使用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建立在其他开源项目的卓越工作之上

  • cairosvgconvert用来对SVG文件进行位图化。
  • cairo(通过cairocffi)被convertfancytext用来渲染2D图形。
  • pango(通过pangocffi)被fancytext用来布局文本。
  • svgpathtoolsconvert用来处理板轮廓。
  • 全文使用 rich 来实现美观的终端输出。
  • 使用 pyperclip 将内容复制到剪贴板。
  • 广泛使用 numpy 在各个库之间处理数据。
  • 通过 pyvips(基于 vips)高效处理图像。
  • 使用 potrace(通过 potracecffi)在 trace 中将位图图像转换为多边形。
  • 使用 Gdsdk 及其底层的 Clipper 库来处理多边形和在其上打孔。

在构建 Gingerbread 时,还使用了以下项目的信息和想法:

贡献

由于这个工具非常专门地针对 Winterbloom 的工作流程,我们并不期望有很多外部贡献。然而,如果您想贡献,请在开始编写代码之前提交问题或与我们联系,以确保它对我们所有人都有益。 :)

许可证

Gingerbread 在 MIT 许可证 下发布。

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。

源代码分布

gingerbread-2022.8.23.tar.gz (3.2 MB 查看哈希值

上传时间 源代码

构建分布

gingerbread-2022.8.23-py3-none-any.whl (29.2 kB 查看哈希值

上传时间 Python 3

由以下组织支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面