Créer une zone de cuivre (plan de masse) avec l'API Python de pcbnew
Générez une zone de cuivre reliée à un net et lancez son remplissage par script, avec pcbnew ou l'API IPC de KiCad.

Un plan de masse dessiné et rempli à la souris doit être refait à chaque modification du routage. En scriptant la création et le remplissage de la zone, on obtient un plan de masse reproductible, régénérable en une seule commande après chaque changement.
Sept zones de cuivre de formes différentes (cercle, étoile, anneau avec un trou, plan de masse hachuré…) dessinées par script, filmées en direct dans KiCad, puis vérifiées par le DRC (1 min 26) :
Créer la zone
On instancie un objet ZONE, on choisit sa couche, puis on l’ajoute à la board :
import pcbnew
board = pcbnew.GetBoard()
from pcbnew import ZONE, F_Cu
zone = ZONE(board)
zone.SetLayer(F_Cu)
board.Add(zone)Avec l’API IPC, on instancie un objet Zone vierge, puis on fixe son type (cuivre) :
from kipy import KiCad
from kipy.board_types import Zone, ZoneType
kicad = KiCad()
board = kicad.get_board()
zone = Zone()
zone.type = ZoneType.ZT_COPPERDéfinir le contour
Le contour est un SHAPE_POLY_SET auquel on ajoute les sommets du polygone, en unités internes :
from pcbnew import SHAPE_POLY_SET, FromMM
outline = SHAPE_POLY_SET()
outline.NewOutline()
for x, y in [(0, 0), (50, 0), (50, 30), (0, 30)]:
outline.Append(FromMM(x), FromMM(y))
zone.SetOutline(outline)Côté API IPC, le contour se construit avec une PolyLine de nœuds (en nanomètres, convertis avec from_mm), enveloppée dans un PolygonWithHoles :
from kipy.geometry import PolyLine, PolyLineNode
from kipy.common_types import PolygonWithHoles
from kipy.util.units import from_mm
outline = PolyLine()
for x, y in [(0, 0), (50, 0), (50, 30), (0, 30), (0, 0)]: # dernier point = fermeture de la boucle
outline.append(PolyLineNode.from_xy(from_mm(x), from_mm(y)))
polygon = PolygonWithHoles()
polygon.outline = outline
zone.outline = polygon
zone.layers = [board.get_layer_by_name("F.Cu")]Essayez ci-dessous : ajustez largeur et hauteur pour voir le contour de la zone évoluer sur le PCB.
Relier au net et remplir
On rattache la zone à un net, puis on déclenche le remplissage via ZONE_FILLER :
from pcbnew import ZONE_FILLER
zone.SetNet(board.FindNet("GND"))
filler = ZONE_FILLER(board)
filler.Fill(board.Zones())Même principe pour le rattachement au net. C’est aussi à ce moment, une fois toutes les propriétés fixées, que la zone est réellement créée sur le board — le déclenchement programmatique du remplissage n’a pas de méthode confirmée côté API IPC à ce jour :
from kipy.board_types import Net
zone.net = Net(name="GND")
board.create_items(zone)Pour aller plus loin
Ce squelette se réutilise pour générer un plan de masse complet par couche, découper des zones autour de composants sensibles, ou relancer automatiquement le remplissage après chaque modification de routage plutôt que de cliquer sur « Remplir toutes les zones » à la main.