Créer un via avec l'API Python de pcbnew

Publié le 8 septembre 2026 par leZ

Ajoutez, positionnez et dimensionnez un via de traversée sur un PCB par script, avec pcbnew ou l'API IPC de KiCad.

Via de 0,6 mm de diamètre et 0,3 mm de perçage sur le net GND, créée en (40, 25) mm par script Python dans KiCad
La via créée par le script, sur le net GND.

Une grille de vias de stitching autour d’un plan de masse, ou une rangée de vias thermiques sous un footprint : dès qu’il faut poser plus de quelques vias identiques, le placement manuel devient long et peu précis. pcbnew comme l’API IPC permettent de créer ces vias par script, avec un contrôle exact de la position, du diamètre et du perçage.

Une via (et la piste qui y mène) créées par script, filmées en direct dans KiCad (1 min 16) :

Créer le via

On instancie un objet PCB_VIA rattaché à la board, puis on l’ajoute :

import pcbnew

board = pcbnew.GetBoard()
from pcbnew import PCB_VIA

via = PCB_VIA(board)
board.Add(via)

Avec l’API IPC, on instancie un objet Via 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 Via

kicad = KiCad()
board = kicad.get_board()
via = Via()

Positionner et dimensionner le via

Position, diamètre de pastille et perçage se fixent séparément, en unités internes (nanomètres), converties depuis des millimètres avec FromMM :

from pcbnew import VECTOR2I, FromMM

via.SetPosition(VECTOR2I(FromMM(40), FromMM(25)))
via.SetWidth(via.TopLayer(), FromMM(0.6))
via.SetDrill(FromMM(0.3))

La position se fixe en millimètres via Vector2.from_xy_mm, mais le diamètre et le perçage sont des entiers en nanomètres : il faut les convertir explicitement avec from_mm :

from kipy.geometry import Vector2
from kipy.util.units import from_mm

via.position = Vector2.from_xy_mm(40, 25)
via.diameter = from_mm(0.6)
via.drill_diameter = from_mm(0.3)

Essayez ci-dessous : déplacez les curseurs pour voir comment position, diamètre de pastille et perçage affectent le via sur le PCB.

via.SetPosition(VECTOR2I(FromMM(40), FromMM(25)))
via.SetWidth(FromMM(0.6))
via.SetDrill(FromMM(0.3))
40
25
0.6
0.3

Relier le via à un net

Le via doit être rattaché à un net existant (typiquement GND pour un via de stitching) :

via.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 le via est réellement créé sur le board :

from kipy.board_types import Net

via.net = Net(name="GND")
board.create_items(via)

Pour aller plus loin

Placer un via isolé n’est presque jamais le but final. La vraie valeur du scripting est de générer une grille entière de vias de stitching autour d’un plan de masse, ou une rangée de vias thermiques sous un footprint de puissance, en quelques lignes de boucle plutôt qu’à la main.