master
John Lauer Add Fusion 24-net crossover routing, shared vias, and captioned demo b3f148d 1mo ago

Fusion 24-net crossover

This is the Fusion counterpart of the second KiCad Astra video. It uses a constructed test fixture and freshly calculated waypoints, with no Freerouting or other external router. KiCad files are read as a reference and remain intact.

For input i = 0..23, calculate j = (7*i) mod 24, row y = 52 + 2.54*i and column x = 65 + 2.54*j mm. J1 at x=45 feeds the selected J2 pad at y=35 and branches to J3 at y=125. Top copper carries horizontal rows; bottom copper carries vertical columns. Two vias per net connect the top SMD endpoints and bottom routing. The branch's J3 pad is through-hole. Width is 0.30 mm, via outer diameter 0.60 mm, drill 0.30 mm; pads are 1.50 mm with 2.54 mm pitch. Fusion's positive Y points upward, so this exact numeric geometry appears vertically flipped relative to KiCad's canvas.

make_crossbar.py authors the separate unrouted Fusion/EAGLE board and plan. record_crossbar.py reads the active board, dry-runs all net plans, records the actual Fusion window, and commits each trace/via with consecutive revisions. It verifies the copper after every call and invokes native DRC after each net. Timestamps and every response are retained in take-01/calls.json.

The bridge extension in 1.10.0-dev.routing.2 deduplicates identical planned vias shared by multiple branches of a net. Its regression test adds all 24 nets to the geometry model in sequence and checks 120 segments and 48 vias. This conservative preflight is not native DRC; the live result is recorded separately and intermediate boards can still have airwires.

python3 demo/routing/crossbar/make_crossbar.py
python3 -m unittest discover -s tests -p test_routing.py -v
# Stage/open the new board and resolve the live Fusion HWND first.
python3 demo/routing/crossbar/record_crossbar.py --hwnd <hwnd> \
  --take demo/routing/crossbar/new-take

Measured live result — AdomLapper, 2026-09-05

The native run completed with 24 connected nets, 72 pads, 120 trace segments and 48 through vias. Autodesk DRC reported zero errors, zero warnings and zero airwires. All 168 mutations passed copper read-back; the revision was updated after every edit. All 24 net-level native DRC checks reported no physical violations. take-01/final.json contains the measured result. The complete request/response log is preserved locally as calls.json and on the branch as calls.json.gz. The initial six-net demo and all KiCad files were preserved.

Routed .brd and .fbrd exports are in take-01/ and on Windows under C:/Users/john/Documents/fusion-crossbar-dev/. Fusion remains open on the completed board. The development runtime remains pinned at 1.10.0-dev.routing.2; the previous executable was backed up (see install.json).

The raw native AB recording is preserved locally under take-01/window-*.mp4. It contains 5,800 frames (193.333 seconds at 30 fps); the recorder reports 206.642 seconds of wall time. These are separate measurements. The edited video accelerates the retained recorded frames at 3x, not a claim of elapsed end-to-end routing time. find_action.py detects copper changes within the board, trims idle intervals with handles around changes, and retains the final DRC view. Its boundaries are visually reviewed before delivery.

Delivered video

fusion-crossbar-24-3x.mp4 is 41.667 seconds, H.264/yuv420p, 1920x1080 at 30 fps, with no audio. It retains 3,299 source frames at 3x and adds a five-second final hold. Roughly 83.37 seconds of recorded waits were omitted. The persistent speed/edit labels and captions explain actual Fusion verbs, the formula, layer assignment and measured native DRC. The .ass and .edit.json contain caption timing and exact selected source frame ranges.

Full decode, constant source frame rate, output dimensions, duration and the 168-edit revision chain passed verification. Initial, sequential, transition and final frames were visually inspected. See video-verification.json.

Delivered to Windows and verified visibly playing in Media Player: C:/Users/john/Documents/Adom Routing Demos/fusion-crossbar-24-3x.mp4.

python3 demo/routing/crossbar/find_action.py <raw-window-mp4>
python3 demo/routing/crossbar/render_crossbar.py <take-directory>

The edit uses frame-index ranges after verifying constant 30 fps. This avoids floating-point boundary differences between FFprobe timestamps and FFmpeg's select expression. A variable-rate recording requires timestamp-aware editing.