Router une piste avec l'API Python de pcbnew
Créez une piste de cuivre entre deux points, avec une largeur définie, par script — avec pcbnew ou l'API IPC de KiCad.

Router à la souris une nappe de pistes identiques (un bus de données, une série de connexions vers un connecteur) est répétitif et propice aux erreurs de largeur. Scripter la création de pistes garantit une largeur et un tracé reproductibles, point de départ de tout routeur automatique maison.
La piste (et une via) créées par script, filmées en direct dans KiCad (1 min 16) :
Créer la piste
On instancie un objet PCB_TRACK rattaché à la board, puis on l’ajoute :
import pcbnew
board = pcbnew.GetBoard()
from pcbnew import PCB_TRACK
track = PCB_TRACK(board)
board.Add(track)Avec l’API IPC, on instancie un objet Track vierge ; il n’existe pas encore sur le board tant qu’il n’a pas été créé explicitement :
from kipy import KiCad
from kipy.board_types import Track
kicad = KiCad()
board = kicad.get_board()
track = Track()Définir le tracé, la largeur et la couche
Le début et la fin de la piste se fixent en unités internes, la largeur et la couche séparément :
from pcbnew import VECTOR2I, FromMM, F_Cu
track.SetStart(VECTOR2I(FromMM(10), FromMM(20)))
track.SetEnd(VECTOR2I(FromMM(40), FromMM(20)))
track.SetWidth(FromMM(0.25))
track.SetLayer(F_Cu)Le début et la fin se fixent en millimètres via Vector2.from_xy_mm, mais la largeur est un entier en nanomètres à convertir avec from_mm :
from kipy.geometry import Vector2
from kipy.util.units import from_mm
track.start = Vector2.from_xy_mm(10, 20)
track.end = Vector2.from_xy_mm(40, 20)
track.width = from_mm(0.25)
track.layer = board.get_layer_by_name("F.Cu")⚠️ track.layer attend une valeur BoardLayer, pas une chaîne : track.layer = "F.Cu" lève une ValueError. get_layer_by_name fait la conversion.
Essayez ci-dessous : ajustez la longueur et la largeur pour voir la piste évoluer sur le PCB.
Relier la piste à un net
Comme pour un via, la piste doit être rattachée à un net existant :
track.SetNet(board.FindNet("GND"))Côté API IPC, le net se référence directement par son nom. C’est aussi à ce moment, une fois toutes les propriétés fixées, que la piste est réellement créée sur le board :
from kipy.board_types import Net
track.net = Net(name="GND")
board.create_items(track)Pour aller plus loin
Ce squelette se généralise à une boucle qui relie automatiquement une série de pads entre eux — la base d’un petit routeur maison pour des topologies répétitives (bus, rangées de connecteurs), plutôt que de tracer chaque piste à la main.