component
Adom Machine Pins, Fusion Library + Sample Board
Public Made by Adomby adom
One Fusion 360 .lbr with all four Adom press-fit machine pins (working 3D), plus a sample board (2D/3D/silkscreen) ganging all four together. Fully documented and rebuildable.
← Commit history
Add the full machine-pin Fusion-library build skill (per-pin 3D binding, background board import, bridge features)
1 file changed
+91−63
SKILL.md+91−63@@ -1,85 +1,113 @@ --- name: adom-machine-pin-fusion-library description: >- Build a correct Fusion 360 .lbr for an Adom press-fit machine pin (or the whole set) from the- KiCad source: round thru-hole footprint, a real per-pin outline symbol derived from the STEP, an- interactive transparent-board 3D viewer GLB (annular pads both sides, 300um jet-paste hemispheres,- animated press-fit insertion), and the correct press-fit mounting spec. Use when creating or- correcting the Adom machine-pin / machine-contact Fusion libraries or their wiki component pages.- Trigger words: machine pin, machine contact, MachinePin, MachineContact, press-fit pin, adom- modular pins, machine pin lbr, fusion machine pin library, scaffold pin, 32mm grid pin.+ Build the complete Adom press-fit machine-pin Fusion 360 library (all 4 pins: Medium/Large ×+ Standard/Short) WITH working 3D, and a sample board that gangs them together (2D + 3D + silkscreen),+ entirely in the background. Covers: generating the .lbr from KiCad (round pad, fp_circle silk,+ per-pin --symbol-art), the CRITICAL 3D-binding process (per-pin make_3d_package + wip_urn ++ package3d/package3dinstances), authoring + opening the board with NO modal dialogs+ (fusion_open_board / newDesignFromLocal), and the bridge/APS features that make it all background.+ Use when creating/correcting the Adom machine-pin Fusion library, its board, or when a pin's 3D+ shows as a flat pad / Placeholder. Triggers: machine pin, machine contact, MachinePin, press-fit+ pin, adom modular pins, machine pin lbr, fusion machine pin library, package3d, wip_urn, 3d flat+ pad, placeholder 3d, scaffold pin, 32mm grid pin, sample board machine pins. --- -# Adom machine-pin Fusion library recipe+# Adom machine-pin Fusion library + board — the full recipe -The Adom machine **pins** (`MP`) press-fit into a plated through-hole and mate with machine-**contacts** (`MC`) on a stacked board across the 32mm scaffold grid. This is the proven,-reproducible recipe for turning the KiCad source into a correct Fusion `.lbr` + wiki page.+Reproducible, background, end-to-end. Source of truth: **`adom-inc/[email protected]`**+(`footprints/*.kicad_mod`, `symbols/*.kicad_sym`, `3dmodels/*.step`). Live result ++downloads + screenshots: **wiki.adom.inc/adom/adom-machine-pins-fusion-lbr**. -## 0. Source of truth+## 0. The pins (all PRESS-FIT — this is the key fact) -- **`adom-inc/adom-kicad-library`** (branch `new-v1.1`): `footprints/*.kicad_mod`, `symbols/*.kicad_sym`,- `3dmodels/*.step` for MachineContact (Large, Medium) and MachinePin (Large/Medium x Standard/Short).-- The per-pin wiki pages carry the same files + the corrected Fusion `.lbr` + the 3D viewer.+| Pin | Body OD | Drill | Pad | Ring | Interference |+|---|---|---|---|---|---|+| Medium-Standard / -Short | Ø1.20 | Ø1.10 | Ø1.60 | 0.25 | 0.10 mm |+| Large-Standard / -Short | Ø3.60 | Ø3.45 | Ø5.20 | 0.875 | 0.15 mm | -## 1. Mounting = PRESS-FIT (this is the key fact, and it is undocumented elsewhere)+The body OD is **larger** than the plated drill on purpose (Mill-Max press-fit, solder-assisted with+300 µm jet paste). The undersized hole is CORRECT — never "fix" it to a clearance hole. -Measure the pin body from the STEP: its uniform barrel OD is **larger than the footprint drill**-(Medium: Ø1.20 body / Ø1.10 drill = 0.10mm interference; Large: Ø3.60 / Ø3.45 = 0.15mm). That is-**intentional** - a Mill-Max-style solderless press-fit (solder-assisted with the 300um jet paste).-So the footprint's undersized plated hole is CORRECT; do NOT "fix" it to a clearance hole. The-STEP's z=0 is the board seating plane (footprint `model offset 0`), flange OD seats on the board,-the body presses into the hole, a thin tip leads it in.+## 1. Generate the four `.lbr` (adom-lbr 2.4.0+) -## 2. Footprint -> Fusion .lbr pad (round, not oblong)+```+adom-lbr generate --sym <MPN>.kicad_sym --fp <MPN>.kicad_mod \+ --symbol-art <MPN>-symbol-outline.mm.svg -o <MPN>.lbr+``` -`adom-lbr generate --sym x.kicad_sym --fp x.kicad_mod --name <NAME> -o <NAME>.lbr` currently emits-thru-hole pads as EAGLE `shape="long"` (oblong) and drops the silk `fp_circle` (a known adom-lbr-bug - a fix is filed). Until that lands, POST-PROCESS the `.lbr`: set the pad `shape="round"`,-`diameter="<pad>"`, `drill="<drill>"`. A round Ø-pad + real drill is what a machine pin needs.+- `--symbol-art` (outline-contract `.mm.svg` + `.json` sidecar, placed 1:1) OVERRIDES the shared+ generic kicad_sym drawing so each size's symbol is distinct. adom-symbol makes the outline.+- 2.4.0 natively emits a **round** thru-hole pad, the real **`fp_circle` silk**, and names the pin+ from the **pad number**. ⚠️ An EMPTY pin name (`<pin name="">` + `<connect pin="">`) makes Fusion+ reject the `.lbr` with *"has errors and cannot be opened"* — verify `adom-lbr lint` is clean.+- Merge the four into one library: one `<layers>` skeleton + concatenated+ packages/symbols/devicesets; give each symbol's single pin a UNIQUE name (else `duplicate-pin-name`). -## 3. Symbol = the pin's REAL outline, per pin (not the shared generic drawing)+## 2. Bind the real 3D — ONE PIN AT A TIME (do NOT trust the batch) -The four KiCad symbols share ONE generic pin drawing, so they are not accurate per size. Derive-each pin's real silhouette from its STEP and feed it as `--symbol-art`:-- Convert the STEP -> GLB (`step2glb convert`), Draco-decode it (`DracoPy`) applying node transforms- (trimesh alone collapses the instanced step2glb GLB), get the surface radius-vs-height profile.-- Emit an `<NAME>-symbol-outline.mm.svg` (a closed polyline of the profile, mirrored) + `.json`- sidecar, and `adom-lbr generate ... --symbol-art <that.svg>` (contract mode, 1:1).-Result: Med-Std, Med-Short, Lrg-Std, Lrg-Short each get their true proportions.+The batch `fusion_build_library_3d` reliably TIMED OUT / stalled (cluttered Fusion state + the 60s+relay cap); a demo board came back with 3/4 pins as flat pads. What WORKS: a **single**+`fusion_make_3d_package` per pin completes < 60s in a clean Fusion and returns a fresh `wip_urn`. -## 4. The 3D viewer GLB (bake it in - the native wiki Babylon viewer renders it, no platform change)+Prereqs: a clean-ish Fusion (restart if many tabs are open) + `fusion_aps_signin` (warm SSO, NEVER+the password) so the f3d uploads to the Hub. -The wiki `/viewer/3d` loads the page's `.glb` in Babylon (zUp, auto-plays glTF animations). Build ONE-rich GLB the native viewer renders:-- the **real pin** (Draco-decoded, Z-up);-- a **1.6mm FR4 slab**, 50%-alpha material (see the press-fit through transparent FR4);-- **annular copper pads on TOP and BOTTOM** + a plated barrel (through-hole = both copper layers);-- **300um jetted solder-paste dots as HEMISPHERES** (flat side on the copper, dome up), on the- annular ring, both sides - reuse `adom-footprint/src/paste.rs`'s dot math (`DOT_DIA=0.30`,- `DOT_PITCH=0.45`); NB the adom-footprint SKILL text says 250um - reconcile to the code's 300um;-- a baked **glTF keyframe animation**: the pin lifts by `-zmin` so its tail reaches the FR4 top,- then presses back, looping (per-pin depth);-- assign PBR materials (FR4 transparent BLEND doubleSided; gold pin; copper pads; teal paste) with- `pygltflib`; drop trimesh vertex-colors so `baseColorFactor` is the true color.-Put the animated GLB on the page as `parts.model_3d`; the viewer shows it. (`showGround:false` and-baked billboard dim-text need a small viewer/git-wiki enhancement - keep dims in the page Specs.)+```+for pin in the four:+ fusion_make_3d_package {lbrPath:<pin>.lbr, modelPath:<pin>.step, orient:false}+ -> record wip_urn (orient:false — the STEP is already Z-up; tall pins must not be flattened)+``` -## 5. The wiki page+## 3. Write the 3D into the library — BOTH places (the #1 gotcha) -`component` block in `page.json` with `mpn`, `package`, `body_size`, and a `specs` block-(`body_od_mm`, `drill_mm`, `mount:"press-fit"`, `interference_mm`); README with the press-fit spec, a-dims table, and links to the individual pages + the KiCad source. Push `README.md`, `page.json`,-`<MPN>.kicad_sym/.kicad_mod/.step/.glb/.lbr` via `adom-wiki repo push`.+For each part the `.lbr` needs:+1. a library-level `<package3d name="PKG" urn="" wip_urn="urn:..." locally_modified="yes"+ type="model"><description>PKG</description><packageinstances><packageinstance name="PKG"/>+ </packageinstances></package3d>` (in a `<packages3d>` block after `</packages>`), AND+2. inside every `<device package="PKG">`, after `</connects>`:+ `<package3dinstances><package3dinstance package3d_urn="urn:..."/></package3dinstances>`. -## 6. Consolidated library+**Both are required.** With only (1), the Fusion library editor shows a **"Placeholder"** 3D, not the+pin. The bridge's `_inject_package3d_bindings` does exactly this (merge-aware/idempotent) — reuse it. -Merge the four per-pin `.lbr` (one `<layers>` skeleton, concat packages/symbols/devicesets) into-`AdomMachinePins.lbr`; publish the consolidated page linking every individual + KiCad path.+## 4. The sample board — background, NO modal dialogs++Hand-author an EAGLE `.brd` (well-formed XML): `<settings>/<grid>`, the full `<layers>`, a board+outline on **layer 20**, an embedded `<library>` with `<packages>` + `<packages3d>` (fresh urns), and+`<elements>` placing the four pins — **each element with `package3d_urn="<that pin's wip_urn>"`** (no+urn ⇒ flat pad). Add silkscreen with `<text x y size layer="21">name / drill / ring</text>` in+`<plain>`.++Open it in the BACKGROUND:+```+fusion_open_board {filePath:<.brd>} # newDesignFromLocal -> instantiates placed parts, ZERO dialogs+fusion_show_3d_board {} # renders the 3D PCB with the real pin bodies+```+⛔ Do NOT use `fusion_new_electronics_from_eagle` / `ImportSCHAndBRDCmd` for a placed board — its two+native Open dialogs are MODAL and STEAL the user's focus. There is no background way to drive them;+`fusion_open_board` is the background route. (A DRC-clean KiCad `.kicad_pcb` equivalent can be rendered+headlessly via `service-kicad pcb export svg`.)++## 5. If you IMPORT this library and the 3D is flat / Placeholder++The `wip_urn`s are bound to the account that built it and may not resolve on yours. Re-bind on your+own account (§2), then rewrite the `.lbr`'s `<package3d>`/`<package3dinstances>` and the board's+element `package3d_urn`s with your fresh urns, and re-open. Same procedure as the original build.++## Bridge features this relies on (all keep Fusion in the background)++- `fusion_open_board` = `Document.newDesignFromLocal` → **no-dialog** placed-board import.+- `package3d_urn` on `.brd` elements → real 3D bodies on the board (`fusion_new_electronics_from_eagle`+ docstring documents it).+- `fusion_build_library_3d` runs **detached + pollable** (survives AD's 60s relay cap) — but prefer+ per-pin `fusion_make_3d_package`.+- Universal error-dialog guard (flips success:false on a Fusion "Error" popup); notify-before-+ foreground; APS warm-SSO sign-in + browser-profile cache + never-charge cap; HWND/parent-child+ screenshot fixes. ## Known follow-ups-- adom-lbr: round-pad `shape` + `fp_circle` silk + carry kicad_sym art (fix filed to its thread).-- Fusion `fusion_build_library_3d` per-part 3D binding times out at the ~60s relay cap on slow runs- and aborts; bind interactively or raise the cap. The 2D `.lbr` is correct + placeable meanwhile.-- 300um solder-ball layer standard: persist to a dedicated hidden User layer in every footprint- (see the solder-ball-layer standard page); today paste.rs computes it on the fly for SMD only.+- adom-lbr: the empty-pin-name and round-pad fixes landed in 2.4.0; `--symbol-art` restored there too.+- 300 µm solder-ball layer standard: a hidden `User.*` layer in every footprint (see the+ solder-ball-layer standard page); paste.rs computes it on the fly for SMD only today.+- Batch `build_library_3d` reliability on slow/cluttered sessions — per-pin binding is the workaround.