app
KiCad - the KiCad Bridge
Public Made by Adomby adom
Reference implementation of the KiCad bridge: multi-instance Python server, forward path via kicad-cli, reverse path via in-process plugin. Most complex of the three bundled bridges.
← Commit history
v0.9.63: warm BOTH eeschema and pcbnew — Symbol Editor lives in eeschema, Footprint Editor in pcbnew
3 files changed
+17−7
adom-bridge-kicad-manifest.json+2−2@@ -3,8 +3,8 @@ "name": "kicad", "version": "0.9.63", "url": "https://wiki.adom.inc/download/adom/adom-desktop-kicad-bridge/0.9.63/adom-bridge-kicad-v0.9.63.zip",- "sha256": "5373614086b6cb5f3143cba5f03b46c0a027bb64799c847c8c78f48500fe212d",- "size": 352272,+ "sha256": "dc2c2a2fe92105b553c27e77ee33ed1079bc71d9f5ea52d8d1d85541c32b20a7",+ "size": 352487, "verbPrefixes": [ "kicad_" ],
adom-bridge-kicad-v0.9.63.zip⋯ 1 unchanged line ⋯
handlers/demo.py+15−5@@ -278,10 +278,18 @@ def _warm_kicad(kicad_info: dict, prep: dict) -> dict: Windows still open in the background; this only costs a few seconds. """ import time- r = handle_open_schematic(kicad_info, {"filePath": prep["schematic"]})- if r.get("success"):- time.sleep(8) # let eeschema finish loading its libraries- return {"warmed": bool(r.get("success")), "raw": r}+ # Symbol Editor is hosted inside EESCHEMA and Footprint Editor inside PCBNEW.+ # Warming only one leaves the other's editor with no host app, which fails as+ # "Could not open the Footprint Editor via the background (plugin) path".+ # So open BOTH documents up front; every later beat then takes the fast+ # in-process plugin pathway.+ sch = handle_open_schematic(kicad_info, {"filePath": prep["schematic"]})+ time.sleep(6)+ brd = handle_open_board(kicad_info, {"filePath": prep["board"]})+ time.sleep(8) # pcbnew is the slower of the two to paint+ return {"warmed": bool(sch.get("success") and brd.get("success")),+ "eeschema": bool(sch.get("success")), "pcbnew": bool(brd.get("success")),+ "raw": {"schematic": sch, "board": brd}} def _run_step(kicad_info: dict, step: str, prep: dict) -> dict:@@ -308,6 +316,7 @@ def _run_step(kicad_info: dict, step: str, prep: dict) -> dict: "the courtyard rectangle (keep-out for the assembler)"], "raw": r} if step == "footprint3d":+ import time; time.sleep(2) r = handle_open_3d_viewer(kicad_info, {"editor": "footprint"}) return {"ok": bool(r.get("success")), "window": "3D Viewer", "title": "3/6 · That part in 3D",@@ -337,6 +346,7 @@ def _run_step(kicad_info: dict, step: str, prep: dict) -> dict: "'Pads 12' in the status bar — proof the footprints loaded"], "raw": r} if step == "board3d":+ import time; time.sleep(2) r = handle_open_3d_viewer(kicad_info, {"editor": "pcb"}) return {"ok": bool(r.get("success")), "window": "3D Viewer", "title": "6/6 · The whole board in 3D",@@ -438,7 +448,7 @@ def handle_demo(kicad_info: dict, args: dict) -> dict: "models3d": prep.get("models3d"), "warnings": prep.get("warnings"), "installedKiCadJustNow": installed_now,- "warmedUp": (prep.get("warm") or {}).get("warmed"),+ "warmedUp": {k: (prep.get("warm") or {}).get(k) for k in ("warmed", "eeschema", "pcbnew")}, "nextCall": (f'kicad_demo {{"step": "{nxt}"}}' if nxt else None), "remainingSteps": STEPS[STEPS.index(last) + 1:] if last in STEPS else [], "screenshotVerb": "kicad_screenshot_all",