Migrer ses scripts pcbnew vers l'API IPC avant KiCad 11
pcbnew sera supprimé dans KiCad 11 : tableau de correspondance pcbnew → kipy, différences clés et méthode pour porter vos scripts Python KiCad.
Les bindings Python pcbnew (SWIG) sont dépréciés depuis KiCad 9, et la documentation officielle de KiCad indique que leur suppression est prévue pour KiCad 11. Tout script qui commence par import pcbnew devra alors passer par l’API IPC et son client Python, kipy. Ce guide rassemble les correspondances vérifiées sur les tutoriels du site, pour porter un script sans tâtonner.
Ce qui change vraiment
pcbnew |
API IPC (kipy) |
|
|---|---|---|
| Où tourne le script | Dans le process de KiCad, ou avec le Python fourni avec KiCad | Dans n’importe quel Python, qui dialogue avec KiCad par socket |
| Installation | Livré avec KiCad | pip install kicad-python |
| KiCad doit être ouvert | Non (en headless, LoadBoard suffit) |
Oui, ou démarré en headless par kipy (KiCad 11) |
| Modifier un objet | Effet immédiat | Modifier la copie locale, puis board.update_items(...) |
| Créer un objet | board.Add(item) |
board.create_items(item) |
| Unités | FromMM() / ToMM() |
from_mm() / to_mm() (nanomètres) |
Le point le plus déroutant : avec kipy, les objets lus sont des copies. Changer fp.position ne fait rien tant que vous n’appelez pas board.update_items(fp).
Tableau de correspondance
| Tâche | pcbnew |
kipy |
|---|---|---|
| Board ouverte | board = pcbnew.GetBoard() |
board = KiCad().get_board() |
| Enregistrer | pcbnew.SaveBoard(path, board) |
board.save() |
| Trouver un footprint | board.FindFootprintByReference("U1") |
next(f for f in board.get_footprints() if f.reference_field.text.value == "U1") |
| Position | fp.SetPosition(VECTOR2I(FromMM(30), FromMM(20))) |
fp.position = Vector2.from_xy_mm(30, 20) |
| Orientation | fp.SetOrientationDegrees(90) |
fp.orientation = Angle.from_degrees(90) |
| Appliquer les changements | (immédiat) | board.update_items(fp) |
| Basculer en face arrière | fp.Flip(fp.GetPosition(), True) |
board.flip_items(fp) |
| Piste | PCB_TRACK(board) + board.Add(track) |
Track() + board.create_items(track) |
| Via | PCB_VIA(board), SetWidth(via.TopLayer(), w), SetDrill(d) |
Via(), via.diameter = w, via.drill_diameter = d |
| Couche | pcbnew.F_Cu |
board.get_layer_by_name("F.Cu") |
| Net | board.FindNet("GND") |
Net(name="GND") |
| Zone | ZONE(board) + contour SHAPE_POLY_SET |
Zone() + zone.outline = PolygonWithHoles |
| Listes | board.GetFootprints(), board.Zones(), board.GetTracks() |
get_footprints(), get_zones(), get_tracks(), get_vias() |
| Export Gerber | PLOT_CONTROLLER(board) |
board.export_gerbers(...) (KiCad 11 + kicad-python 0.9) |
| Redessiner | pcbnew.Refresh() |
(automatique) |
Chaque ligne est détaillée, avec les deux versions côte à côte, dans le tutoriel correspondant du site : positionner un footprint, créer une piste, créer une via, créer une zone, exporter les Gerber.
Exemple : le même script dans les deux API
Déplacer et tourner U1, avec pcbnew :
import pcbnew
from pcbnew import VECTOR2I, FromMM
board = pcbnew.GetBoard()
fp = board.FindFootprintByReference("U1")
fp.SetPosition(VECTOR2I(FromMM(30), FromMM(20)))
fp.SetOrientationDegrees(90)
pcbnew.Refresh()
La même chose avec kipy :
from kipy import KiCad
from kipy.geometry import Angle, Vector2
board = KiCad().get_board()
fp = next(f for f in board.get_footprints() if f.reference_field.text.value == "U1")
fp.position = Vector2.from_xy_mm(30, 20)
fp.orientation = Angle.from_degrees(90)
board.update_items(fp)
Méthode de migration conseillée
- Inventorier : cherchez dans vos scripts tous les appels
pcbnew.etboard.pour savoir ce qu’il faut porter. - Isoler l’accès à la board dans un seul module (lecture des footprints, création des pistes…) : c’est le seul endroit à réécrire.
- Porter ligne par ligne avec le tableau ci-dessus, sans oublier les
update_items()etcreate_items(). - Comparer : lancez l’ancienne et la nouvelle version sur une copie de la même board, puis comparez les fichiers ou lancez le DRC avec kicad-cli.
Avant tout, activez l’API IPC dans les préférences de KiCad : elle est désactivée par défaut.
Pour aller plus loin
Les deux API coexistent dans KiCad 9 et 10 : vous pouvez migrer progressivement, script par script, sans attendre KiCad 11. Chaque tutoriel du site a un sélecteur en haut de page pour comparer les deux versions.