KiKit
KiKit copied to clipboard
Only CLI fails to panelize for more than 2 x 2
Prerequisites
- [x] I have read FAQ
- [x] I have searched existing issues (including closed ones)
- [x] I use KiKit at least version 1.7.2 (older version are not supported)
KiKit version
kikit, version 1.7.2
KiCAD version (only KiCAD 8 and 9 are supported)
9.0.3
Operating system
macOS 15.6, Windows 11
Description
I'm trying to panelize the attached PCB. This is the minimal example I could get to generate the error. Using the GUI approach with the KiCad plugin works as expected (tested on Windows).
Using these commands to panelize from CLI fails
"/Applications/KiCad/KiCad.app/Contents/Frameworks/Python.framework/Versions/3.9/bin/kikit" panelize --layout 'grid; rows: 4; cols: 4;' "Panelize Fail.kicad_pcb" "Panel.kicad_pcb"- `"${KICAD9_3RD_PARTY}\Python311\Scripts\kikit.exe" panelize --layout 'grid; rows: 4; cols: 4;' "Panelize Fail.kicad_pcb" "Panel.kicad_pcb"``
with the error message both on macOS and Windows:
An error occurred: Board rotation has to be passed as EDA_ANGLE, not a number
No output files produced
Interestingly when changing the panel size to 2 x 2 or 1 x 1 it works as expected.
Steps to Reproduce
Here to output with debug option set from macOS
"/Applications/KiCad/KiCad.app/Contents/Frameworks/Python.framework/Versions/3.9/bin/kikit" panelize --debug 'trace: true' --layout 'grid; rows: 4; cols: 4;' "Panelize Fail.kicad_pcb" "Panel.kicad_pcb"
12:12:28 AM: Debug: Adding duplicate image handler for 'PNG file'
12:12:28 AM: Debug: Adding duplicate image handler for 'JPEG file'
12:12:28 AM: Debug: Adding duplicate image handler for 'TIFF file'
12:12:28 AM: Debug: Adding duplicate image handler for 'GIF file'
12:12:28 AM: Debug: Adding duplicate image handler for 'PNM file'
12:12:28 AM: Debug: Adding duplicate image handler for 'PCX file'
12:12:28 AM: Debug: Adding duplicate image handler for 'IFF file'
12:12:28 AM: Debug: Adding duplicate image handler for 'Windows icon file'
12:12:28 AM: Debug: Adding duplicate image handler for 'Windows cursor file'
12:12:28 AM: Debug: Adding duplicate image handler for 'Windows animated cursor file'
12:12:28 AM: Debug: Adding duplicate image handler for 'TGA file'
12:12:28 AM: Debug: Adding duplicate image handler for 'XPM file'
12:12:28 AM: Debug: Adding duplicate image handler for 'PNG file'
12:12:28 AM: Debug: Adding duplicate image handler for 'JPEG file'
12:12:28 AM: Debug: Adding duplicate image handler for 'TIFF file'
12:12:28 AM: Debug: Adding duplicate image handler for 'GIF file'
12:12:28 AM: Debug: Adding duplicate image handler for 'PNM file'
12:12:28 AM: Debug: Adding duplicate image handler for 'PCX file'
12:12:28 AM: Debug: Adding duplicate image handler for 'IFF file'
12:12:28 AM: Debug: Adding duplicate image handler for 'Windows icon file'
12:12:28 AM: Debug: Adding duplicate image handler for 'Windows cursor file'
12:12:28 AM: Debug: Adding duplicate image handler for 'Windows animated cursor file'
12:12:28 AM: Debug: Adding duplicate image handler for 'TGA file'
12:12:28 AM: Debug: Adding duplicate image handler for 'XPM file'
12:12:28 AM: Debug: Adding duplicate image handler for 'PNG file'
12:12:28 AM: Debug: Adding duplicate image handler for 'JPEG file'
12:12:28 AM: Debug: Adding duplicate image handler for 'TIFF file'
12:12:28 AM: Debug: Adding duplicate image handler for 'GIF file'
12:12:28 AM: Debug: Adding duplicate image handler for 'PNM file'
12:12:28 AM: Debug: Adding duplicate image handler for 'PCX file'
12:12:28 AM: Debug: Adding duplicate image handler for 'IFF file'
12:12:28 AM: Debug: Adding duplicate image handler for 'Windows icon file'
12:12:28 AM: Debug: Adding duplicate image handler for 'Windows cursor file'
12:12:28 AM: Debug: Adding duplicate image handler for 'Windows animated cursor file'
12:12:28 AM: Debug: Adding duplicate image handler for 'TGA file'
12:12:28 AM: Debug: Adding duplicate image handler for 'XPM file'
12:12:28 AM: Debug: Adding duplicate image handler for 'PNG file'
12:12:28 AM: Debug: Adding duplicate image handler for 'JPEG file'
12:12:28 AM: Debug: Adding duplicate image handler for 'TIFF file'
12:12:28 AM: Debug: Adding duplicate image handler for 'GIF file'
12:12:28 AM: Debug: Adding duplicate image handler for 'PNM file'
12:12:28 AM: Debug: Adding duplicate image handler for 'PCX file'
12:12:28 AM: Debug: Adding duplicate image handler for 'IFF file'
12:12:28 AM: Debug: Adding duplicate image handler for 'Windows icon file'
12:12:28 AM: Debug: Adding duplicate image handler for 'Windows cursor file'
12:12:28 AM: Debug: Adding duplicate image handler for 'Windows animated cursor file'
12:12:28 AM: Debug: Adding duplicate image handler for 'TGA file'
12:12:28 AM: Debug: Adding duplicate image handler for 'XPM file'
12:12:28 AM: Debug: Adding duplicate image handler for 'PNG file'
12:12:28 AM: Debug: Adding duplicate image handler for 'JPEG file'
12:12:28 AM: Debug: Adding duplicate image handler for 'TIFF file'
12:12:28 AM: Debug: Adding duplicate image handler for 'GIF file'
12:12:28 AM: Debug: Adding duplicate image handler for 'PNM file'
12:12:28 AM: Debug: Adding duplicate image handler for 'PCX file'
12:12:28 AM: Debug: Adding duplicate image handler for 'IFF file'
12:12:28 AM: Debug: Adding duplicate image handler for 'Windows icon file'
12:12:28 AM: Debug: Adding duplicate image handler for 'Windows cursor file'
12:12:28 AM: Debug: Adding duplicate image handler for 'Windows animated cursor file'
12:12:28 AM: Debug: Adding duplicate image handler for 'TGA file'
12:12:28 AM: Debug: Adding duplicate image handler for 'XPM file'
12:12:28 AM: Debug: Adding duplicate image handler for 'PNG file'
12:12:28 AM: Debug: Adding duplicate image handler for 'JPEG file'
12:12:28 AM: Debug: Adding duplicate image handler for 'TIFF file'
12:12:28 AM: Debug: Adding duplicate image handler for 'GIF file'
12:12:28 AM: Debug: Adding duplicate image handler for 'PNM file'
12:12:28 AM: Debug: Adding duplicate image handler for 'PCX file'
12:12:28 AM: Debug: Adding duplicate image handler for 'IFF file'
12:12:28 AM: Debug: Adding duplicate image handler for 'Windows icon file'
12:12:28 AM: Debug: Adding duplicate image handler for 'Windows cursor file'
12:12:28 AM: Debug: Adding duplicate image handler for 'Windows animated cursor file'
12:12:28 AM: Debug: Adding duplicate image handler for 'TGA file'
12:12:28 AM: Debug: Adding duplicate image handler for 'XPM file'
12:12:28 AM: Debug: Adding duplicate image handler for 'PNG file'
12:12:28 AM: Debug: Adding duplicate image handler for 'JPEG file'
12:12:28 AM: Debug: Adding duplicate image handler for 'TIFF file'
12:12:28 AM: Debug: Adding duplicate image handler for 'GIF file'
12:12:28 AM: Debug: Adding duplicate image handler for 'PNM file'
12:12:28 AM: Debug: Adding duplicate image handler for 'PCX file'
12:12:28 AM: Debug: Adding duplicate image handler for 'IFF file'
12:12:28 AM: Debug: Adding duplicate image handler for 'Windows icon file'
12:12:28 AM: Debug: Adding duplicate image handler for 'Windows cursor file'
12:12:28 AM: Debug: Adding duplicate image handler for 'Windows animated cursor file'
12:12:28 AM: Debug: Adding duplicate image handler for 'TGA file'
12:12:28 AM: Debug: Adding duplicate image handler for 'XPM file'
12:12:28 AM: Debug: Adding duplicate image handler for 'PNG file'
12:12:28 AM: Debug: Adding duplicate image handler for 'JPEG file'
12:12:28 AM: Debug: Adding duplicate image handler for 'TIFF file'
12:12:28 AM: Debug: Adding duplicate image handler for 'GIF file'
12:12:28 AM: Debug: Adding duplicate image handler for 'PNM file'
12:12:28 AM: Debug: Adding duplicate image handler for 'PCX file'
12:12:28 AM: Debug: Adding duplicate image handler for 'IFF file'
12:12:28 AM: Debug: Adding duplicate image handler for 'Windows icon file'
12:12:28 AM: Debug: Adding duplicate image handler for 'Windows cursor file'
12:12:28 AM: Debug: Adding duplicate image handler for 'Windows animated cursor file'
12:12:28 AM: Debug: Adding duplicate image handler for 'TGA file'
12:12:28 AM: Debug: Adding duplicate image handler for 'XPM file'
12:12:28 AM: Debug: Adding duplicate image handler for 'PNG file'
12:12:28 AM: Debug: Adding duplicate image handler for 'JPEG file'
12:12:28 AM: Debug: Adding duplicate image handler for 'TIFF file'
12:12:28 AM: Debug: Adding duplicate image handler for 'GIF file'
12:12:28 AM: Debug: Adding duplicate image handler for 'PNM file'
12:12:28 AM: Debug: Adding duplicate image handler for 'PCX file'
12:12:28 AM: Debug: Adding duplicate image handler for 'IFF file'
12:12:28 AM: Debug: Adding duplicate image handler for 'Windows icon file'
12:12:28 AM: Debug: Adding duplicate image handler for 'Windows cursor file'
12:12:28 AM: Debug: Adding duplicate image handler for 'Windows animated cursor file'
12:12:28 AM: Debug: Adding duplicate image handler for 'TGA file'
12:12:28 AM: Debug: Adding duplicate image handler for 'XPM file'
12:12:28 AM: Debug: Adding duplicate image handler for 'PNG file'
12:12:28 AM: Debug: Adding duplicate image handler for 'JPEG file'
12:12:28 AM: Debug: Adding duplicate image handler for 'TIFF file'
12:12:28 AM: Debug: Adding duplicate image handler for 'GIF file'
12:12:28 AM: Debug: Adding duplicate image handler for 'PNM file'
12:12:28 AM: Debug: Adding duplicate image handler for 'PCX file'
12:12:28 AM: Debug: Adding duplicate image handler for 'IFF file'
12:12:28 AM: Debug: Adding duplicate image handler for 'Windows icon file'
12:12:28 AM: Debug: Adding duplicate image handler for 'Windows cursor file'
12:12:28 AM: Debug: Adding duplicate image handler for 'Windows animated cursor file'
12:12:28 AM: Debug: Adding duplicate image handler for 'TGA file'
12:12:28 AM: Debug: Adding duplicate image handler for 'XPM file'
12:12:28 AM: Debug: Adding duplicate image handler for 'PNG file'
12:12:28 AM: Debug: Adding duplicate image handler for 'JPEG file'
12:12:28 AM: Debug: Adding duplicate image handler for 'TIFF file'
12:12:28 AM: Debug: Adding duplicate image handler for 'GIF file'
12:12:28 AM: Debug: Adding duplicate image handler for 'PNM file'
12:12:28 AM: Debug: Adding duplicate image handler for 'PCX file'
12:12:28 AM: Debug: Adding duplicate image handler for 'IFF file'
12:12:28 AM: Debug: Adding duplicate image handler for 'Windows icon file'
12:12:28 AM: Debug: Adding duplicate image handler for 'Windows cursor file'
12:12:28 AM: Debug: Adding duplicate image handler for 'Windows animated cursor file'
12:12:28 AM: Debug: Adding duplicate image handler for 'TGA file'
12:12:28 AM: Debug: Adding duplicate image handler for 'XPM file'
swig/python detected a memory leak of type 'BOX2< VECTOR2< int > > *', no destructor found.
swig/python detected a memory leak of type 'VECTOR2< int > *', no destructor found.
swig/python detected a memory leak of type 'VECTOR2< int > *', no destructor found.
swig/python detected a memory leak of type 'EDA_ANGLE *', no destructor found.
An error occurred: Board rotation has to be passed as EDA_ANGLE, not a number
No output files produced
Traceback (most recent call last):
File "/Applications/KiCad/KiCad.app/Contents/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/kikit/panelize_ui.py", line 217, in panelize
doPanelization(input, output, preset, plugin)
File "/Applications/KiCad/KiCad.app/Contents/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/kikit/panelize_ui.py", line 271, in doPanelization
ki.buildLayout(preset, panel, input, sourceArea)
File "/Applications/KiCad/KiCad.app/Contents/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/kikit/panelize_ui_impl.py", line 257, in buildLayout
substrates = panel.makeGrid(
File "/Applications/KiCad/KiCad.app/Contents/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/kikit/panelize.py", line 1375, in makeGrid
boardSize = self.appendBoard(
File "/Applications/KiCad/KiCad.app/Contents/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/kikit/panelize.py", line 1027, in appendBoard
raise RuntimeError("Board rotation has to be passed as EDA_ANGLE, not a number")
RuntimeError: Board rotation has to be passed as EDA_ANGLE, not a number
swig/python detected a memory leak of type 'VECTOR2< int > *', no destructor found.
swig/python detected a memory leak of type 'BOX2< VECTOR2< int > > *', no destructor found.
swig/python detected a memory leak of type 'BOX2< VECTOR2< int > > *', no destructor found.
swig/python detected a memory leak of type 'VECTOR2< int > *', no destructor found.
swig/python detected a memory leak of type 'EDA_ANGLE *', no destructor found.
swig/python detected a memory leak of type 'BOX2< VECTOR2< int > > *', no destructor found.
swig/python detected a memory leak of type 'VECTOR2< int > *', no destructor found.
swig/python detected a memory leak of type 'VECTOR2< int > *', no destructor found.
swig/python detected a memory leak of type 'EDA_ANGLE *', no destructor found.
swig/python detected a memory leak of type 'VECTOR2< int > *', no destructor found.
swig/python detected a memory leak of type 'VECTOR2< int > *', no destructor found.
swig/python detected a memory leak of type 'EDA_ANGLE *', no destructor found.
swig/python detected a memory leak of type 'VECTOR2< int > *', no destructor found.
swig/python detected a memory leak of type 'VECTOR2< int > *', no destructor found.
swig/python detected a memory leak of type 'EDA_ANGLE *', no destructor found.
swig/python detected a memory leak of type 'VECTOR2< int > *', no destructor found.
swig/python detected a memory leak of type 'VECTOR2< int > *', no destructor found.
swig/python detected a memory leak of type 'EDA_ANGLE *', no destructor found.
swig/python detected a memory leak of type 'VECTOR2< int > *', no destructor found.
swig/python detected a memory leak of type 'VECTOR2< int > *', no destructor found.
swig/python detected a memory leak of type 'EDA_ANGLE *', no destructor found.
swig/python detected a memory leak of type 'VECTOR2< int > *', no destructor found.
swig/python detected a memory leak of type 'VECTOR2< int > *', no destructor found.
swig/python detected a memory leak of type 'EDA_ANGLE *', no destructor found.
swig/python detected a memory leak of type 'VECTOR2< int > *', no destructor found.
swig/python detected a memory leak of type 'VECTOR2< int > *', no destructor found.
swig/python detected a memory leak of type 'EDA_ANGLE *', no destructor found.
swig/python detected a memory leak of type 'VECTOR2< int > *', no destructor found.
swig/python detected a memory leak of type 'VECTOR2< int > *', no destructor found.
swig/python detected a memory leak of type 'EDA_ANGLE *', no destructor found.
swig/python detected a memory leak of type 'VECTOR2< int > *', no destructor found.
swig/python detected a memory leak of type 'VECTOR2< int > *', no destructor found.
swig/python detected a memory leak of type 'EDA_ANGLE *', no destructor found.
swig/python detected a memory leak of type 'VECTOR2< int > *', no destructor found.
swig/python detected a memory leak of type 'VECTOR2< int > *', no destructor found.
swig/python detected a memory leak of type 'EDA_ANGLE *', no destructor found.
swig/python detected a memory leak of type 'std::vector< ZONE * > *', no destructor found.
swig/python detected a memory leak of type 'EDA_ANGLE *', no destructor found.
swig/python detected a memory leak of type 'EDA_ANGLE *', no destructor found.
swig/python detected a memory leak of type 'EDA_ANGLE *', no destructor found.
swig/python detected a memory leak of type 'EDA_ANGLE *', no destructor found.
swig/python detected a memory leak of type 'EDA_ANGLE *', no destructor found.
swig/python detected a memory leak of type 'EDA_ANGLE *', no destructor found.
swig/python detected a memory leak of type 'EDA_ANGLE *', no destructor found.
swig/python detected a memory leak of type 'EDA_ANGLE *', no destructor found.
swig/python detected a memory leak of type 'EDA_ANGLE *', no destructor found.
swig/python detected a memory leak of type 'EDA_ANGLE *', no destructor found.
swig/python detected a memory leak of type 'EDA_ANGLE *', no destructor found.
swig/python detected a memory leak of type 'EDA_ANGLE *', no destructor found.
Please, attach the output when running with --debug 'trace: true'.
I did. Here is the highlight:
An error occurred: Board rotation has to be passed as EDA_ANGLE, not a number
No output files produced
Traceback (most recent call last):
File "/Applications/KiCad/KiCad.app/Contents/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/kikit/panelize_ui.py", line 217, in panelize
doPanelization(input, output, preset, plugin)
File "/Applications/KiCad/KiCad.app/Contents/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/kikit/panelize_ui.py", line 271, in doPanelization
ki.buildLayout(preset, panel, input, sourceArea)
File "/Applications/KiCad/KiCad.app/Contents/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/kikit/panelize_ui_impl.py", line 257, in buildLayout
substrates = panel.makeGrid(
File "/Applications/KiCad/KiCad.app/Contents/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/kikit/panelize.py", line 1375, in makeGrid
boardSize = self.appendBoard(
File "/Applications/KiCad/KiCad.app/Contents/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/kikit/panelize.py", line 1027, in appendBoard
raise RuntimeError("Board rotation has to be passed as EDA_ANGLE, not a number")
RuntimeError: Board rotation has to be passed as EDA_ANGLE, not a number