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.
Créer la zone
On instancie un objet ZONE, on choisit sa couche, puis on l’ajoute à la board :
from pcbnew import ZONE, F_Cu
zone = ZONE(board)
zone.SetLayer(F_Cu)
board.Add(zone)Avec l’API IPC, la création et le choix de couche se font en un seul appel :
from kicad import KiCad
kicad = KiCad()
board = kicad.get_board()
zone = board.create_zone(layer="F.Cu")Dé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 est une simple liste de points en millimètres :
from kicad.geometry import Vector2
points = [(0, 0), (50, 0), (50, 30), (0, 30)]
zone.outline = [Vector2.from_mm(x, y) for x, y in points]
board.update_items(zone)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, avec une commande de remplissage globale côté API IPC :
zone.net = board.get_net("GND")
board.update_items(zone)
board.refill_zones()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.