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
import_step name; tool_update check budget
3 files changed
+10−1
CHANGELOG.md+8@@ -3,6 +3,14 @@ All notable changes to the Adom Bridge Fusion 360 bridge, newest first. Canonical: https://wiki.adom.inc/adom/fusion-bridge ยท GitHub backup: `adom-inc/fusion-bridge` +## 1.13.34 (unreleased)++- `fusion_import_step` names the placed component after the import (Fusion's import renamed it, seen live as+ Component376). Checked live on 1.13.33: a SOT-23-5 STEP placed in lane-BQ25792-copy's 3D PCB at (10, 10, 5) mm, turned+ 90 degrees, 6 bodies, no new document; then deleted again.+- `fusion_tool_update` check: 25 s budget (it took 42 s on the laptop with the 40 s budget). Live: Fusion 2706.1.14,+ no update offered, auto on.+ ## 1.13.33 (2026-10-30) - `fusion_import_step` reaches the exe's board form: 1.13.32 still routed it to the add-in's import, which opened the
rust/bridge/src/maintenance.rs+1−1@@ -202,7 +202,7 @@ pub fn tool_update(ctx: &Ctx, args: &Value, pass: &dyn Fn(&str, Value) -> Value) let current = v["data"]["result"]["version"].clone(); match args["action"].as_str().unwrap_or("check") { "check" => {- let offer = find_update_offer_within(ctx, Some(Duration::from_secs(40)));+ let offer = find_update_offer_within(ctx, Some(Duration::from_secs(25))); let offered = offer["offered"].as_bool() == Some(true); json!({"success": true, "mutated": false, "action": "check", "current": current, "offered": if offered { offer["button"].clone() } else { Value::Null }, "complete": offer["complete"].as_bool().unwrap_or(true), "updateOffered": offered, "auto": auto, "applied": false, "needsRestart": false,
rust/bridge/src/services.rs+1@@ -602,6 +602,7 @@ else: occ.deleteMe() result = {'success': False, 'errorCode': 'import_failed', 'error': 'Fusion imported nothing from %s into the 3D PCB (the component was removed again)' % path} else:+ occ.component.name = __NAME__ # the import renames the component it fills: name it after b = occ.boundingBox result = {'success': True, 'mutated': True, 'id': occ.fullPathName, 'name': occ.component.name, 'bodies': bodies, 'documentsOpened': app.documents.count - before, 'bboxMm': [round(v * 10, 3) for v in (b.minPoint.x, b.minPoint.y, b.minPoint.z, b.maxPoint.x, b.maxPoint.y, b.maxPoint.z)]}