Placer une grille de footprints avec l'API Python de pcbnew

Publié le 13 septembre 2026 par leZ

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.

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)))
2
3
8

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.