yaqwsx / KiKit

Automation tools for KiCAD
https://yaqwsx.github.io/KiKit
MIT License
1.49k stars 200 forks source link

An error occurred... Multiple outlines #684

Closed idank closed 3 months ago

idank commented 3 months ago

Prerequisites

KiKit version

kikit, version 1.5.1

KiCAD version

8.0.2

Operating system

Ubuntu

Description

Trying to panelize this shape which I manually modified into a single piece, but kikit seems to think they're separated?

image

Steps to Reproduce

kicad_pcb file is at https://gist.github.com/idank/135c4e77218d9c83f3f2acf14279a467.

kikit panelize \
    --layout 'grid; rows: 2; cols: 2; space: 2mm' \
    --tabs 'fixed; width: 3mm' \
    --cuts 'mousebites; drill: 0.5mm; spacing: 1mm; offset: 0.2mm; prolong: 0.5mm' \
    --post 'millradius: 1mm' --debug 'trace: true;' \
test.kicad_pcb panel.kicad_pcb
An error occurred: test.kicad_pcb: Multiple outlines (4) at [53.650531, 52.219228]
No output files produced
Traceback (most recent call last):
  File "/home/idank/.local/lib/python3.11/site-packages/kikit/panelize.py", line 1044, in appendBoard
    s = Substrate(edges, 0,
        ^^^^^^^^^^^^^^^^^^^
  File "/home/idank/.local/lib/python3.11/site-packages/kikit/substrate.py", line 589, in __init__
    polygons = [toShapely(ring, geometryList) for ring in extractRings(geometryList)]
                                                          ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/idank/.local/lib/python3.11/site-packages/kikit/substrate.py", line 123, in extractRings
    raise PositionError("Multiple outlines ({}) at [{{}}, {{}}]".format(l), point)
kikit.substrate.PositionError: Multiple outlines (4) at [-2.5284, 39.6224]

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/idank/.local/lib/python3.11/site-packages/kikit/panelize_ui.py", line 217, in panelize
    doPanelization(input, output, preset, plugin)
  File "/home/idank/.local/lib/python3.11/site-packages/kikit/panelize_ui.py", line 267, in doPanelization
    ki.buildLayout(preset, panel, input, sourceArea)
  File "/home/idank/.local/lib/python3.11/site-packages/kikit/panelize_ui_impl.py", line 255, in buildLayout
    substrates = panel.makeGrid(
                 ^^^^^^^^^^^^^^^
  File "/home/idank/.local/lib/python3.11/site-packages/kikit/panelize.py", line 1276, in makeGrid
    boardSize = self.appendBoard(
                ^^^^^^^^^^^^^^^^^
  File "/home/idank/.local/lib/python3.11/site-packages/kikit/panelize.py", line 1051, in appendBoard
    raise substrate.PositionError(f"{filename}: {e.origMessage}", point)
kikit.substrate.PositionError: test.kicad_pcb: Multiple outlines (4) at [53.650531, 52.219228]
yaqwsx commented 3 months ago

There is a zero-length segment in your source file at the specified coordinates. If you remove it, everything works.

Nevertheless, KiKit should ignore such segments, however, there was a bug. This is fixed in a7873c2.