Placer un footprint avec l'API Python de pcbnew

Publié le 7 septembre 2026 par leZ

Apprenez à positionner et faire pivoter un footprint sur un PCB en scriptant directement l'API Python de pcbnew, sans passer par l'interface graphique.

Quand on conçoit un PCB avec plusieurs dizaines de composants identiques (un panneau de LED, une grille de connecteurs), positionner chaque footprint à la souris devient vite répétitif et source d’erreurs. KiCad expose deux façons de scripter ce placement : pcbnew, la liaison Python/C++ historique, et l’API IPC, la nouvelle interface arrivée avec KiCad 10/11. Utilisez le sélecteur ci-dessus pour comparer les deux.

Récupérer le footprint

Avec pcbnew, on retrouve l’objet FOOTPRINT sur la board directement en mémoire, généralement par sa référence (U1, R4, etc.) :

fp = board.FindFootprintByReference("U1")

Avec l’API IPC, le script est un processus séparé qui communique avec une instance de KiCad en cours d’exécution. On récupère d’abord la board, puis on filtre les footprints par référence :

from kicad import KiCad

kicad = KiCad()
board = kicad.get_board()
fp = next(f for f in board.get_footprints() if f.reference_field.text.value == "U1")

Définir la position

La position se fixe avec SetPosition, qui attend un objet VECTOR2I exprimé en unités internes KiCad (nanomètres). La plupart des scripts utilisent un utilitaire de conversion mm → unités internes pour rester lisibles :

fp.SetPosition(VECTOR2I(FromMM(30), FromMM(20)))

L’API IPC travaille directement en unités réelles (mm) via une classe Vector2, sans conversion manuelle. Les modifications sont ensuite renvoyées explicitement à KiCad :

from kicad.geometry import Vector2

fp.position = Vector2.from_mm(30, 20)
board.update_items(fp)

Faire pivoter le footprint

La rotation se fixe séparément, en degrés, avec SetOrientationDegrees :

fp.SetOrientationDegrees(90)

Côté API IPC, l’orientation s’assigne aussi en degrés, puis se synchronise avec la même méthode update_items :

fp.orientation = 90
board.update_items(fp)

Essayez ci-dessous : déplacez les curseurs pour voir comment la position et la rotation affectent le placement du footprint sur le PCB.

fp = board.FindFootprintByReference("U1")
fp.SetPosition(VECTOR2I(30, 20))
fp.SetOrientationDegrees(0)
30
0
U1

Pour aller plus loin

Cette approche se généralise facilement à une boucle sur plusieurs footprints — utile pour placer une grille entière de composants en quelques lignes plutôt qu’un clic à la fois. C’est aussi la base de tout script d’automatisation de layout plus complexe (génération procédurale, import depuis un fichier de coordonnées externe, etc.), que ce soit avec pcbnew ou avec l’API IPC.