Adom Desktop - Fusion 360 Bridge
Public Made by Adomby adom
Drive Autodesk Fusion 360 from the cloud via Adom Desktop: component libraries, IPC package generation, board layout, exports (STEP/Gerbers/BOM/CPL), fast APS cloud search, and parametric modeling.
name: fusion-electronics description: How to drive Fusion 360 Electronics (the EAGLE-based schematic + PCB editor) through the Adom Fusion bridge - the file hierarchy (open the PROJECT, never the schematic/.brd/3D), switching between schematic / 2D board / 3D PCB views, and moving the editor for demos and screen recordings (zoom, pan, frame a region, orbit the 3D board, select parts, surface the properties panel). Read before opening or recording any PCB. Trigger words - fusion electronics, fusion pcb, open the board, open the schematic, fusion_show_2d_board, fusion_show_3d_board, eagle editor, zoom the board, pan the board, orbit the 3d pcb, select a part, properties panel, record the schematic, record the board, board out of date, empty 2d board, EcadDesignProductType, parent child electronics design.
Fusion Electronics - drive the schematic, board, and 3D PCB
1. ALWAYS open the PROJECT, never a child file
A Fusion electronics design is NOT one file. It is a parent/child chain of separate files, each a
distinct productType:
PROJECT EcadDesignProductType <- OPEN THIS ONE
|- schematic SchematicProductType
|- board/.brd BoardProductType
|- 3D PCB DesignProductType (generated FROM the .brd - the LEAF; opening it gives NO editable board)
- Open the PROJECT with
fusion_open_cloud_file/fusion_open_by_urn. Then the schematic and board are children you switch between - they are VIEWS of the one design, not separate things to open. - Opening a schematic / .brd / 3D directly gives an isolated or empty view, and you cannot derive
the board from the 3D (it is the leaf). The open verbs reprimand you in the response
_hintwhen the opened file is notEcadDesignProductType- read it and reopen the project. - Same-named copies in OTHER projects (e.g. a drone assembly that imported the board) are usually
3D-model derivatives (
DesignProductType), not the project. Do not open those. - An EMPTY 2D board (
fusion_board_inforeturns 0 elements) almost always means you opened the wrong file. Reopen the parent PROJECT and switch to its board.
2. Switch between the views
The design is open; switch the LIVE editor between its three views with the symmetric trio:
fusion_show_schematic- the schematic (circuit diagram). Uses Fusion'sSwitchSchDocCmd.fusion_show_2d_board- the 2D PCB Editor (board layout / copper).SwitchPcbDocCmd.fusion_show_3d_board- the populated 3D PCB.Switch3dPcbDocCmd.
All three move the VISIBLE editor (not just the API's active doc), so they're what you use to set up a
recording of a given view. Schematic queries also run via the Electron.sch_* text commands. These are
VIEWS of the open project - if a view is empty, you opened a child/derivative (see section 1).
3. Move the editor for demos / screen recordings
Give a recording "life" with these FIRST-CLASS verbs. Each runs its WHOLE motion inside the add-in -
one call = one smooth move, a repaint per frame (the 2D analogue of vp.refresh()):
Zoom (schematic / 2D board)
fusion_electron_zoom {factor, steps?, frameDelayMs?} - factor>1 zooms in, <1 out; or {fit:true}.
e.g. adom-desktop fusion_electron_zoom '{"factor":3,"steps":20}' (smooth zoom in over 20 frames).
Pan + frame a region (or a part)
fusion_electron_pan {x1,y1,x2,y2, steps?, frameDelayMs?} - glide+zoom to a board-coordinate box (mm).
Animates from where the view last was. Get part coordinates from fusion_board_info or the CPL export
(fusion_export_cpl gives every part's Mid X / Mid Y) - frame a small box around a part to "go to" it.
e.g. adom-desktop fusion_electron_pan '{"x1":10,"y1":15,"x2":22,"y2":38,"steps":16}'.
Select a part + surface its properties
fusion_electron_select {name} (reference designator) or {x,y} (board mm) - selects the part the way
clicking it reveals the properties panel, and returns its device info. (Select highlights; pair with
fusion_electron_pan to also center on it - the "select chip -> zoom to it" tour.)
e.g. adom-desktop fusion_electron_select '{"name":"U1"}'.
Orbit / zoom the 3D PCB (Fusion camera)
fusion_show_3d_board, then fusion_run_modeling_script with a camera loop: app.activeViewport.camera,
step the eye around the target in azimuth (vary radius to zoom), cam.isSmoothTransition=False,
vp.camera=cam, vp.refresh() + adsk.doEvents() + a short time.sleep() each frame. The
vp.refresh() is what makes the in-between frames render.
Lower-level building blocks (what the verbs above wrap)
fusion_electron_run runs raw EAGLE: WINDOW FIT, WINDOW <factor>, WINDOW (x1 y1)(x2 y2), DISPLAY,
RATSNEST, GRID. fusion_execute_text_command runs Electron.*: SelectbyName, LeftButtonDown /
Select x y (+ ContinueSelect / EndSelect for a marquee), ImmediateRepaint /full,
sch_get_deviceinfo. Reach for these only when a first-class verb doesn't cover what you need.
Capture without disrupting the user
Record with WGC (desktop_record_window_start) - background, no focus steal, and it grabs the LIVE EAGLE
GL canvas. PrintWindow (desktop_screenshot_window) shows the chrome but does NOT reflect the GL view
changing, so verify motion by the verb's ok + a WGC frame, not a PrintWindow pixel-diff. A black canvas
means an empty/wrong file - see section 1.
Gotcha: file paths WITH SPACES (fixed in v1.6.90 - issue #196)
executeTextCommand is a space-delimited command string, so Document.newDesignFromLocal
used to receive an unquoted path and split it at the first space:
C:/Users/drew/Downloads/e2e-pmcoil/PM COIL Molecule.brd
^ Fusion only ever saw ".../PM"
The open then silently no-op'd - no dialog, no document, just the generic "Fusion 360 may not support this file" hint - which sent the reporting agent hunting for a file-format problem when it was pure path handling. (Caught by Drew's agent: the identical file opened instantly once copied to a space-free name.)
Fixed in _open_local_document() (commands/open_electronics_file.py), now used by
fusion_open_board, fusion_open_schematic, fusion_import_electronics and fusion_open_lbr:
- Quote the path, then
- if that fails and the path has spaces, retry with the Windows 8.3 short path
(
GetShortPathNameW) - same file, no spaces, nothing copied.
If you are writing a new verb that hands a path to executeTextCommand, use that helper. Never
interpolate a bare path into a text command; assume every user path has spaces in it, because
Downloads and OneDrive folders routinely do.
---
name: fusion-electronics
description: How to drive Fusion 360 Electronics (the EAGLE-based schematic + PCB editor) through the Adom Fusion bridge - the file hierarchy (open the PROJECT, never the schematic/.brd/3D), switching between schematic / 2D board / 3D PCB views, and moving the editor for demos and screen recordings (zoom, pan, frame a region, orbit the 3D board, select parts, surface the properties panel). Read before opening or recording any PCB. Trigger words - fusion electronics, fusion pcb, open the board, open the schematic, fusion_show_2d_board, fusion_show_3d_board, eagle editor, zoom the board, pan the board, orbit the 3d pcb, select a part, properties panel, record the schematic, record the board, board out of date, empty 2d board, EcadDesignProductType, parent child electronics design.
---
# Fusion Electronics - drive the schematic, board, and 3D PCB
## 1. ALWAYS open the PROJECT, never a child file
A Fusion electronics design is NOT one file. It is a parent/child chain of separate files, each a
distinct `productType`:
```
PROJECT EcadDesignProductType <- OPEN THIS ONE
|- schematic SchematicProductType
|- board/.brd BoardProductType
|- 3D PCB DesignProductType (generated FROM the .brd - the LEAF; opening it gives NO editable board)
```
- Open the PROJECT with `fusion_open_cloud_file` / `fusion_open_by_urn`. Then the schematic and board
are children you switch between - they are VIEWS of the one design, not separate things to open.
- **Opening a schematic / .brd / 3D directly** gives an isolated or empty view, and you cannot derive
the board from the 3D (it is the leaf). The open verbs **reprimand you in the response `_hint`** when
the opened file is not `EcadDesignProductType` - read it and reopen the project.
- Same-named copies in OTHER projects (e.g. a drone assembly that imported the board) are usually
3D-model derivatives (`DesignProductType`), not the project. Do not open those.
- An EMPTY 2D board (`fusion_board_info` returns 0 elements) almost always means you opened the wrong
file. Reopen the parent PROJECT and switch to its board.
## 2. Switch between the views
The design is open; switch the LIVE editor between its three views with the symmetric trio:
- `fusion_show_schematic` - the schematic (circuit diagram). Uses Fusion's `SwitchSchDocCmd`.
- `fusion_show_2d_board` - the 2D PCB Editor (board layout / copper). `SwitchPcbDocCmd`.
- `fusion_show_3d_board` - the populated 3D PCB. `Switch3dPcbDocCmd`.
All three move the VISIBLE editor (not just the API's active doc), so they're what you use to set up a
recording of a given view. Schematic queries also run via the `Electron.sch_*` text commands. These are
VIEWS of the open project - if a view is empty, you opened a child/derivative (see section 1).
## 3. Move the editor for demos / screen recordings
Give a recording "life" with these FIRST-CLASS verbs. Each runs its WHOLE motion inside the add-in -
one call = one smooth move, a repaint per frame (the 2D analogue of `vp.refresh()`):
### Zoom (schematic / 2D board)
`fusion_electron_zoom {factor, steps?, frameDelayMs?}` - `factor>1` zooms in, `<1` out; or `{fit:true}`.
e.g. `adom-desktop fusion_electron_zoom '{"factor":3,"steps":20}'` (smooth zoom in over 20 frames).
### Pan + frame a region (or a part)
`fusion_electron_pan {x1,y1,x2,y2, steps?, frameDelayMs?}` - glide+zoom to a board-coordinate box (mm).
Animates from where the view last was. Get part coordinates from `fusion_board_info` or the CPL export
(`fusion_export_cpl` gives every part's Mid X / Mid Y) - frame a small box around a part to "go to" it.
e.g. `adom-desktop fusion_electron_pan '{"x1":10,"y1":15,"x2":22,"y2":38,"steps":16}'`.
### Select a part + surface its properties
`fusion_electron_select {name}` (reference designator) or `{x,y}` (board mm) - selects the part the way
clicking it reveals the properties panel, and returns its device info. (Select highlights; pair with
`fusion_electron_pan` to also center on it - the "select chip -> zoom to it" tour.)
e.g. `adom-desktop fusion_electron_select '{"name":"U1"}'`.
### Orbit / zoom the 3D PCB (Fusion camera)
`fusion_show_3d_board`, then `fusion_run_modeling_script` with a camera loop: `app.activeViewport.camera`,
step the eye around the target in azimuth (vary radius to zoom), `cam.isSmoothTransition=False`,
`vp.camera=cam`, **`vp.refresh()`** + `adsk.doEvents()` + a short `time.sleep()` each frame. The
`vp.refresh()` is what makes the in-between frames render.
### Lower-level building blocks (what the verbs above wrap)
`fusion_electron_run` runs raw EAGLE: `WINDOW FIT`, `WINDOW <factor>`, `WINDOW (x1 y1)(x2 y2)`, `DISPLAY`,
`RATSNEST`, `GRID`. `fusion_execute_text_command` runs `Electron.*`: `SelectbyName`, `LeftButtonDown` /
`Select` x y (+ `ContinueSelect` / `EndSelect` for a marquee), `ImmediateRepaint /full`,
`sch_get_deviceinfo`. Reach for these only when a first-class verb doesn't cover what you need.
### Capture without disrupting the user
Record with WGC (`desktop_record_window_start`) - background, no focus steal, and it grabs the LIVE EAGLE
GL canvas. PrintWindow (`desktop_screenshot_window`) shows the chrome but does NOT reflect the GL view
changing, so verify motion by the verb's `ok` + a WGC frame, not a PrintWindow pixel-diff. A black canvas
means an empty/wrong file - see section 1.
## Gotcha: file paths WITH SPACES (fixed in v1.6.90 - issue #196)
`executeTextCommand` is a **space-delimited** command string, so `Document.newDesignFromLocal`
used to receive an unquoted path and split it at the first space:
```
C:/Users/drew/Downloads/e2e-pmcoil/PM COIL Molecule.brd
^ Fusion only ever saw ".../PM"
```
The open then **silently no-op'd** - no dialog, no document, just the generic "Fusion 360 may not
support this file" hint - which sent the reporting agent hunting for a file-format problem when it
was pure path handling. (Caught by Drew's agent: the identical file opened instantly once copied to
a space-free name.)
Fixed in `_open_local_document()` (`commands/open_electronics_file.py`), now used by
`fusion_open_board`, `fusion_open_schematic`, `fusion_import_electronics` and `fusion_open_lbr`:
1. **Quote the path**, then
2. if that fails and the path has spaces, retry with the Windows **8.3 short path**
(`GetShortPathNameW`) - same file, no spaces, nothing copied.
**If you are writing a new verb that hands a path to `executeTextCommand`, use that helper.** Never
interpolate a bare path into a text command; assume every user path has spaces in it, because
Downloads and OneDrive folders routinely do.