Ajouter un via de changement de couche au milieu d'un routage avec l'API Python de pcbnew

Publié le 18 septembre 2026 par leZ

Faites passer une piste de la face avant à la face arrière via un via placé au milieu du routage, par script — avec pcbnew ou l'API IPC de KiCad.

Router entièrement sur une seule couche n’est pas toujours possible : il faut parfois traverser vers l’autre face pour contourner un obstacle. La transition se fait avec un via placé exactement au point où une piste se termine et où la suivante commence, sur l’autre couche.

Router, traverser, puis continuer sur l’autre couche

Le via se positionne au point de jonction entre les deux segments, chacun sur sa propre couche :

from pcbnew import PCB_TRACK, PCB_VIA, VECTOR2I, FromMM, F_Cu, B_Cu

track1 = PCB_TRACK(board)
track1.SetStart(VECTOR2I(FromMM(10), FromMM(20)))
track1.SetEnd(VECTOR2I(FromMM(30), FromMM(20)))
track1.SetLayer(F_Cu)
board.Add(track1)

via = PCB_VIA(board)
via.SetPosition(VECTOR2I(FromMM(30), FromMM(20)))
via.SetWidth(FromMM(0.6))
via.SetDrill(FromMM(0.3))
board.Add(via)

track2 = PCB_TRACK(board)
track2.SetStart(VECTOR2I(FromMM(30), FromMM(20)))
track2.SetEnd(VECTOR2I(FromMM(50), FromMM(20)))
track2.SetLayer(B_Cu)
board.Add(track2)

Même structure : deux pistes sur des couches différentes, reliées par un via à leur point commun :

from kicad.geometry import Vector2

track1 = board.create_track()
track1.start = Vector2.from_mm(10, 20)
track1.end = Vector2.from_mm(30, 20)
track1.layer = "F.Cu"

via = board.create_via()
via.position = Vector2.from_mm(30, 20)
via.pad_diameter = 0.6
via.drill_diameter = 0.3

track2 = board.create_track()
track2.start = Vector2.from_mm(30, 20)
track2.end = Vector2.from_mm(50, 20)
track2.layer = "B.Cu"

board.update_items([track1, via, track2])

Pour aller plus loin

Ce motif — piste, via, piste — est la brique de base de tout routeur qui doit alterner entre couches pour éviter les obstacles ou équilibrer la densité de cuivre entre le dessus et le dessous de la board.