fix: Flip() after board.Add() to avoid 30s hang in KiCAD 9

FootprintLoad+Flip() on standalone footprint (not yet in board) causes
a 30-second block in KiCAD 9 pcbnew. Solution: add footprint to board
first, then call Flip() with board context available.

Fixes B.Cu placement timeout that killed the Python process.
This commit is contained in:
Tom
2026-03-07 00:59:32 +01:00
parent f3078b7a02
commit f4d516f5c3

View File

@@ -125,19 +125,20 @@ class ComponentCommands:
angle = pcbnew.EDA_ANGLE(rotation, pcbnew.DEGREES_T)
module.SetOrientation(angle)
# Set layer for B.Cu the footprint must be flipped (mirrored),
# not just layer-assigned. Flip() handles layer + mirror in one step.
if layer == "B.Cu":
if not module.IsFlipped():
module.Flip(module.GetPosition(), False)
else:
# Set layer for F.Cu (or non-B.Cu) before adding to board
if layer != "B.Cu":
layer_id = self.board.GetLayerID(layer)
if layer_id >= 0:
module.SetLayer(layer_id)
# Add to board
# Add to board first — Flip() requires board context in KiCAD 9
self.board.Add(module)
# Flip to B.Cu after add (board context needed, otherwise hangs 30s)
if layer == "B.Cu":
if not module.IsFlipped():
module.Flip(module.GetPosition(), False)
return {
"success": True,
"message": f"Placed component: {component_id}",