app
Fusion - the Fusion 360 Bridge
Public Made by Adomby adom
Drive Autodesk Fusion 360 from the cloud via Adom Bridge: component libraries, IPC package generation, board layout, exports (STEP/Gerbers/BOM/CPL), fast APS cloud search, and parametric modeling.
← Commit history
v1.9.13: harness-contract tour payload
4 files changed
+16−8
BRIDGE_VERSION+1−1@@ -1 +1 @@-1.9.12+1.9.13
adom-bridge-fusion-manifest.json+4−4@@ -1,10 +1,10 @@ { "manifest_version": 1, "name": "fusion360",- "version": "1.9.12",- "url": "https://wiki.adom.inc/download/adom/fusion-bridge/1.9.12/adom-bridge-fusion-v1.9.12.zip",- "sha256": "0980efdacd06ebc1ebf6ceec5cfbfa06eae7ac8498d49dec7588c7fcb34e7cd4",- "size": 358995,+ "version": "1.9.13",+ "url": "https://wiki.adom.inc/download/adom/fusion-bridge/1.9.13/adom-bridge-fusion-v1.9.13.zip",+ "sha256": "1e24a64848d11e5735d58dc048656a9653cd38147dc307fac65ea85474d68031",+ "size": 359243, "verbPrefixes": [ "fusion_" ],
bridge.json+1−1@@ -2,7 +2,7 @@ "manifest_version": 1, "name": "fusion360", "displayName": "Autodesk Fusion 360",- "version": "1.9.12",+ "version": "1.9.13", "description": "Drive Autodesk Fusion 360 from the cloud: launch Fusion, electronics board layout, design rules, exports (STEP/IGES/STL/3MF/USDZ/OBJ/DXF/DWG/Gerbers/BOM/CPL), fast APS server-indexed cloud search plus browse/recent/file-info/versions, cloud file download/upload and folder creation, and in-app parametric modeling (fusion_run_modeling_script). Never-charge: APS calls are capped to the free tier.", "homepage": "https://wiki.adom.inc/adom/fusion-bridge", "author": "Adom Inc.",
server.py+10−2@@ -5625,10 +5625,12 @@ def _orchestrate_demo_tour(args: dict) -> dict: _DEMO_TOURS[demo_id] = state def _snap(label):+ # {title, image} is the ab web-control harness's gallery item contract (issue #29+ # reply, harness live in ab 2.0.39) - label kept as an alias. try: r = _handle_screenshot_fusion({}, {}) if r.get("success") and r.get("localSafePath"):- state["shots"].append({"label": label, "path": r.get("localSafePath")})+ state["shots"].append({"title": label, "label": label, "path": r.get("localSafePath")}) except Exception: pass @@ -5657,7 +5659,7 @@ def _orchestrate_demo_tour(args: dict) -> dict: if not r.get("success"): raise RuntimeError(str(r.get("error"))) if r.get("screenshot"):- state["shots"].append({"label": label, "path": r["screenshot"]})+ state["shots"].append({"title": label, "label": label, "path": r["screenshot"]}) elif key == "3d-package": cp = _proxy_to_addin("execute_text_command", {"command": "Electron.Create3DPackage %s" % state["sampleLbr"]}, timeout=60)@@ -5674,6 +5676,7 @@ def _orchestrate_demo_tour(args: dict) -> dict: pass else: state.setdefault("warnings", []).append("3d-package step skipped: " + str(cp.get("error")))+ state.setdefault("failedSteps", []).append(key) elif key == "open-design": r = dispatch_command("open_cloud_file", {"query": query, "wait": False}) deadline = time.time() + 170@@ -5690,10 +5693,15 @@ def _orchestrate_demo_tour(args: dict) -> dict: done_est += dur state.update(percent=int(100 * done_est / est), elapsedSec=int(time.time() - state["started"]))+ n_shots = len(state.get("shots") or []) state.update(done=True, percent=100, step="done", stepLabel="Tour complete",+ narrate="Fusion tour complete: %d views captured across the electronics library%s." % (+ n_shots, " and the board design" if include_design and query else ""), elapsedSec=int(time.time() - state["started"])) except Exception as e:+ state.setdefault("failedSteps", []).append(state.get("step")) state.update(failed=True, done=True, error=str(e)[:300],+ narrate="Fusion tour stopped at '%s': %s" % (state.get("stepLabel"), str(e)[:120]), elapsedSec=int(time.time() - state["started"])) threading.Thread(target=_run, daemon=True, name="fusion-demo-tour").start()