Placer une grille de footprints avec l'API Python de pcbnew
Positionnez plusieurs footprints identiques en grille par script — utile pour un panneau de LED ou une rangée de connecteurs — avec pcbnew ou l'API IPC de KiCad.
Le tutoriel sur le placement d’un footprint traite un seul composant à la fois. Dès qu’il s’agit d’un panneau de LED ou d’une rangée de connecteurs identiques, une boucle qui calcule chaque position à partir d’un nombre de lignes, de colonnes et d’un espacement remplace des dizaines de clics par quelques lignes de code.
Récupérer la liste des footprints
On récupère chaque footprint par sa référence, dans l’ordre où ils doivent apparaître dans la grille :
refs = ["D1", "D2", "D3", "D4", "D5", "D6"]
footprints = [board.FindFootprintByReference(ref) for ref in refs]Avec l’API IPC, on indexe d’abord tous les footprints par référence, puis on reconstitue la liste dans l’ordre voulu :
refs = ["D1", "D2", "D3", "D4", "D5", "D6"]
by_ref = {fp.reference_field.text.value: fp for fp in board.get_footprints()}
footprints = [by_ref[ref] for ref in refs]Calculer la position de chaque footprint
L’indice i dans la boucle donne la ligne et la colonne via une division et un modulo :
from pcbnew import VECTOR2I, FromMM
cols = 3
spacing = 8 # mm
for i, fp in enumerate(footprints):
x = 20 + (i % cols) * spacing
y = 20 + (i // cols) * spacing
fp.SetPosition(VECTOR2I(FromMM(x), FromMM(y)))Même calcul de grille, avec l’API IPC qui travaille directement en millimètres :
from kicad.geometry import Vector2
cols = 3
spacing = 8 # mm
for i, fp in enumerate(footprints):
x = 20 + (i % cols) * spacing
y = 20 + (i // cols) * spacing
fp.position = Vector2.from_mm(x, y)
board.update_items(fp)Essayez ci-dessous : ajustez lignes, colonnes et espacement pour voir la grille se recomposer.
Pour aller plus loin
Le même principe se combine avec une grille de vias de stitching autour du panneau, ou se généralise à une disposition circulaire en remplaçant le calcul x, y par une position sur un cercle plutôt qu’un quadrillage.