Créer une grille de vias de stitching avec l'API Python de pcbnew

Publié le 13 septembre 2026 par leZ

Générez une grille complète de vias de stitching reliés à la masse par script, plutôt qu'un via à la fois — avec pcbnew ou l'API IPC de KiCad.

Grille de 4 × 4 vias de stitching sur le net GND au pas de 5 mm, générée par script Python dans KiCad
La grille de 16 vias GND, au pas de 5 mm.

Le tutoriel sur la création d’un via en pose un seul. Une grille de vias de stitching — reliée à la masse tout autour d’un plan de cuivre pour améliorer le retour de courant HF — se construit avec la même API, dans une double boucle sur les lignes et les colonnes.

Boucler sur les lignes et les colonnes

Chaque via est créé, positionné et rattaché au net dans la même itération :

import pcbnew

board = pcbnew.GetBoard()
from pcbnew import PCB_VIA, VECTOR2I, FromMM

rows, cols, spacing = 4, 4, 5  # mm
gnd = board.FindNet("GND")

for row in range(rows):
    for col in range(cols):
        via = PCB_VIA(board)
        via.SetPosition(VECTOR2I(FromMM(20 + col * spacing), FromMM(20 + row * spacing)))
        via.SetWidth(via.TopLayer(), FromMM(0.6))
        via.SetDrill(FromMM(0.3))
        via.SetNet(gnd)
        board.Add(via)

Même structure de boucle côté API IPC : la position se fixe en millimètres, mais le diamètre et le perçage sont des nanomètres bruts à convertir avec from_mm. Chaque via est un objet neuf, donc créé sur le board avec create_items :

from kipy import KiCad
from kipy.board_types import Via, Net
from kipy.geometry import Vector2
from kipy.util.units import from_mm

board = KiCad().get_board()

rows, cols, spacing = 4, 4, 5  # mm
gnd = Net(name="GND")

for row in range(rows):
    for col in range(cols):
        via = Via()
        via.position = Vector2.from_xy_mm(20 + col * spacing, 20 + row * spacing)
        via.diameter = from_mm(0.6)
        via.drill_diameter = from_mm(0.3)
        via.net = gnd
        board.create_items(via)

Essayez ci-dessous : ajustez lignes, colonnes et espacement pour voir la grille de vias se recomposer.

rows, cols, spacing = 3, 4, 5  # mm

for row in range(rows):
    for col in range(cols):
        via.SetPosition(VECTOR2I(FromMM(20 + col * spacing), FromMM(20 + row * spacing)))
3
4
5

Pour aller plus loin

Pour un stitching utile en pratique, on ne place généralement les vias qu’à l’intérieur du contour d’une zone de cuivre existante — un test d’appartenance point-dans-polygone avant chaque board.Add(via) suffit à filtrer la grille en fonction de la forme réelle du plan de masse.