← Commit history

Review fixes: single lbr with all 4 pins (clean short names), 4-pin animated lead 3D, drop no-silkscreen board + per-pin shots, no em-dashes

John Lauer ·1732b9ba22 ·3mo ago ·parent 7276b5a
6 files changed +125−151
AdomMachinePins-4pin-animated.glbadded
⋯ 1 unchanged line ⋯
AdomMachinePins.lbr+20−20
@@ -105,7 +105,7 @@ </packages> <packages3d><package3d name="MachinePinMediumStandard" urn="" wip_urn="urn:adsk.wipprod:fs.file:vf.IbXT030ISmSAFkzwx75Rtg?version=1" locally_modified="yes" type="model"><description>MachinePinMediumStandard</description><packageinstances><packageinstance name="MachinePinMediumStandard"/></packageinstances></package3d><package3d name="MachinePinMediumShort" urn="" wip_urn="urn:adsk.wipprod:fs.file:vf.1-YHegY6RlGs5F7RuYlCmA?version=1" locally_modified="yes" type="model"><description>MachinePinMediumShort</description><packageinstances><packageinstance name="MachinePinMediumShort"/></packageinstances></package3d><package3d name="MachinePinLargeStandard" urn="" wip_urn="urn:adsk.wipprod:fs.file:vf.ReKsBke6RBmV0DXFVfl0UA?version=1" locally_modified="yes" type="model"><description>MachinePinLargeStandard</description><packageinstances><packageinstance name="MachinePinLargeStandard"/></packageinstances></package3d><package3d name="MachinePinLargeShort" urn="" wip_urn="urn:adsk.wipprod:fs.file:vf.QzlhCZQxS1KQro5vx0zgKg?version=1" locally_modified="yes" type="model"><description>MachinePinLargeShort</description><packageinstances><packageinstance name="MachinePinLargeShort"/></packageinstances></package3d></packages3d> <symbols>-<symbol name="MachinePinMediumStandard">+<symbol name="MP-MED-STD">   <wire x1="0.2442" y1="-4.9400" x2="0.2456" y2="-4.6874" width="0.1016" layer="94"/>   <wire x1="0.2456" y1="-4.6874" x2="0.2456" y2="-4.4333" width="0.1016" layer="94"/>   <wire x1="0.2456" y1="-4.4333" x2="0.2456" y2="-4.1807" width="0.1016" layer="94"/>@@ -188,10 +188,10 @@   <wire x1="-0.2442" y1="-4.9400" x2="0.2442" y2="-4.9400" width="0.1016" layer="94"/>   <text x="0" y="10" size="1.27" layer="95" align="bottom-center">&gt;NAME</text>   <text x="0" y="-10" size="1.27" layer="96" align="top-center">&gt;VALUE</text>-  <pin name="MachinePinMediumStandard" x="5.08" y="0" length="short" direction="pas" rot="R180"/>+  <pin name="MP-MED-STD" x="5.08" y="0" length="short" direction="pas" rot="R180"/> </symbol> -<symbol name="MachinePinMediumShort">+<symbol name="MP-MED-SHT">   <wire x1="0.3176" y1="-4.9400" x2="0.3331" y2="-4.6874" width="0.1016" layer="94"/>   <wire x1="0.3331" y1="-4.6874" x2="0.3331" y2="-4.4333" width="0.1016" layer="94"/>   <wire x1="0.3331" y1="-4.4333" x2="0.3331" y2="-4.1807" width="0.1016" layer="94"/>@@ -274,10 +274,10 @@   <wire x1="-0.3176" y1="-4.9400" x2="0.3176" y2="-4.9400" width="0.1016" layer="94"/>   <text x="0" y="10" size="1.27" layer="95" align="bottom-center">&gt;NAME</text>   <text x="0" y="-10" size="1.27" layer="96" align="top-center">&gt;VALUE</text>-  <pin name="MachinePinMediumShort" x="5.08" y="0" length="short" direction="pas" rot="R180"/>+  <pin name="MP-MED-SHT" x="5.08" y="0" length="short" direction="pas" rot="R180"/> </symbol> -<symbol name="MachinePinLargeStandard">+<symbol name="MP-LRG-STD">   <wire x1="0.3839" y1="-4.9400" x2="0.4347" y2="-4.6874" width="0.1016" layer="94"/>   <wire x1="0.4347" y1="-4.6874" x2="0.4347" y2="-4.4333" width="0.1016" layer="94"/>   <wire x1="0.4347" y1="-4.4333" x2="0.4347" y2="-4.1807" width="0.1016" layer="94"/>@@ -360,10 +360,10 @@   <wire x1="-0.3839" y1="-4.9400" x2="0.3839" y2="-4.9400" width="0.1016" layer="94"/>   <text x="0" y="10" size="1.27" layer="95" align="bottom-center">&gt;NAME</text>   <text x="0" y="-10" size="1.27" layer="96" align="top-center">&gt;VALUE</text>-  <pin name="MachinePinLargeStandard" x="5.08" y="0" length="short" direction="pas" rot="R180"/>+  <pin name="MP-LRG-STD" x="5.08" y="0" length="short" direction="pas" rot="R180"/> </symbol> -<symbol name="MachinePinLargeShort">+<symbol name="MP-LRG-SHT">   <wire x1="0.4263" y1="-4.9400" x2="0.4982" y2="-4.6874" width="0.1016" layer="94"/>   <wire x1="0.4982" y1="-4.6874" x2="0.4996" y2="-4.4333" width="0.1016" layer="94"/>   <wire x1="0.4996" y1="-4.4333" x2="0.4996" y2="-4.1807" width="0.1016" layer="94"/>@@ -446,19 +446,19 @@   <wire x1="-0.4263" y1="-4.9400" x2="0.4263" y2="-4.9400" width="0.1016" layer="94"/>   <text x="0" y="10" size="1.27" layer="95" align="bottom-center">&gt;NAME</text>   <text x="0" y="-10" size="1.27" layer="96" align="top-center">&gt;VALUE</text>-  <pin name="MachinePinLargeShort" x="5.08" y="0" length="short" direction="pas" rot="R180"/>+  <pin name="MP-LRG-SHT" x="5.08" y="0" length="short" direction="pas" rot="R180"/> </symbol> </symbols> <devicesets>-<deviceset name="MachinePinMediumStandard" prefix="MP">+<deviceset name="MP-MED-STD" prefix="MP">   <description></description>   <gates>-    <gate name="G$1" symbol="MachinePinMediumStandard" x="0" y="0"/>+    <gate name="G$1" symbol="MP-MED-STD" x="0" y="0"/>   </gates>   <devices>     <device name="" package="MachinePinMediumStandard">       <connects>-        <connect gate="G$1" pin="MachinePinMediumStandard" pad="1"/>+        <connect gate="G$1" pin="MP-MED-STD" pad="1"/>       </connects> <package3dinstances><package3dinstance package3d_urn="urn:adsk.wipprod:fs.file:vf.IbXT030ISmSAFkzwx75Rtg?version=1"/></package3dinstances>       <technologies><technology name=""/></technologies>@@ -466,15 +466,15 @@   </devices> </deviceset> -<deviceset name="MachinePinMediumShort" prefix="MP">+<deviceset name="MP-MED-SHT" prefix="MP">   <description></description>   <gates>-    <gate name="G$1" symbol="MachinePinMediumShort" x="0" y="0"/>+    <gate name="G$1" symbol="MP-MED-SHT" x="0" y="0"/>   </gates>   <devices>     <device name="" package="MachinePinMediumShort">       <connects>-        <connect gate="G$1" pin="MachinePinMediumShort" pad="1"/>+        <connect gate="G$1" pin="MP-MED-SHT" pad="1"/>       </connects> <package3dinstances><package3dinstance package3d_urn="urn:adsk.wipprod:fs.file:vf.1-YHegY6RlGs5F7RuYlCmA?version=1"/></package3dinstances>       <technologies><technology name=""/></technologies>@@ -482,15 +482,15 @@   </devices> </deviceset> -<deviceset name="MachinePinLargeStandard" prefix="MP">+<deviceset name="MP-LRG-STD" prefix="MP">   <description></description>   <gates>-    <gate name="G$1" symbol="MachinePinLargeStandard" x="0" y="0"/>+    <gate name="G$1" symbol="MP-LRG-STD" x="0" y="0"/>   </gates>   <devices>     <device name="" package="MachinePinLargeStandard">       <connects>-        <connect gate="G$1" pin="MachinePinLargeStandard" pad="1"/>+        <connect gate="G$1" pin="MP-LRG-STD" pad="1"/>       </connects> <package3dinstances><package3dinstance package3d_urn="urn:adsk.wipprod:fs.file:vf.ReKsBke6RBmV0DXFVfl0UA?version=1"/></package3dinstances>       <technologies><technology name=""/></technologies>@@ -498,15 +498,15 @@   </devices> </deviceset> -<deviceset name="MachinePinLargeShort" prefix="MP">+<deviceset name="MP-LRG-SHT" prefix="MP">   <description></description>   <gates>-    <gate name="G$1" symbol="MachinePinLargeShort" x="0" y="0"/>+    <gate name="G$1" symbol="MP-LRG-SHT" x="0" y="0"/>   </gates>   <devices>     <device name="" package="MachinePinLargeShort">       <connects>-        <connect gate="G$1" pin="MachinePinLargeShort" pad="1"/>+        <connect gate="G$1" pin="MP-LRG-SHT" pad="1"/>       </connects> <package3dinstances><package3dinstance package3d_urn="urn:adsk.wipprod:fs.file:vf.QzlhCZQxS1KQro5vx0zgKg?version=1"/></package3dinstances>       <technologies><technology name=""/></technologies>
README.md+88−113
@@ -1,90 +1,76 @@-# Adom Machine Pins — Fusion 360 Library + Sample Board+# Adom Machine Pins, Fusion 360 Library + Sample Board -All four **Adom press-fit machine pins** (Medium/Large × Standard/Short) in one Fusion 360 `.lbr`-with **working 3D components**, plus a **sample board** that gangs all four together — 2D, 3D, and-silkscreen. Everything here was built end-to-end from the AI, driving Fusion **in the background**,-and this page documents the whole process so anyone can rebuild it or just download it.+**One** Fusion 360 `.lbr` containing all four **Adom press-fit machine pins** (Medium/Large,+Standard/Short) with **working 3D components**, plus a **sample board** that gangs all four together in+2D, 3D, and silkscreen. It is a single library (not a library per pin), so you drop it into Fusion once+and place any of the four. Everything here was built by the AI driving Fusion **in the background**, and+this page documents the whole process so you can rebuild it or just download it.  ![The four pins in 3D](screenshots/pins-3d-montage.png) ------## What's in this library+## What is in this library  | Ref | Pin | Body OD (press-fit) | Drill (plated) | Pad | Annular ring | Height | |---|---|---|---|---|---|---|-| MP1 | Medium-Standard | Ø1.20 mm | Ø1.10 mm | Ø1.60 mm | **0.250 mm** | 10.6 mm |-| MP2 | Medium-Short | Ø1.20 mm | Ø1.10 mm | Ø1.60 mm | **0.250 mm** | 7.8 mm |-| MP3 | Large-Standard | Ø3.60 mm | Ø3.45 mm | Ø5.20 mm | **0.875 mm** | 21.6 mm |-| MP4 | Large-Short | Ø3.60 mm | Ø3.45 mm | Ø5.20 mm | **0.875 mm** | 18.8 mm |+| MP-MED-STD | Medium-Standard | 1.20 mm | 1.10 mm | 1.60 mm | **0.250 mm** | 10.6 mm |+| MP-MED-SHT | Medium-Short | 1.20 mm | 1.10 mm | 1.60 mm | **0.250 mm** | 7.8 mm |+| MP-LRG-STD | Large-Standard | 3.60 mm | 3.45 mm | 5.20 mm | **0.875 mm** | 21.6 mm |+| MP-LRG-SHT | Large-Short | 3.60 mm | 3.45 mm | 5.20 mm | **0.875 mm** | 18.8 mm | -**These are PRESS-FIT** (Mill-Max style): the body OD is deliberately **larger** than the plated-drill (Medium 0.10 mm interference, Large 0.15 mm). The undersized hole is **correct** — do not-"fix" it to a clearance hole. Solder-assisted with 300 µm InstaPCB jet paste on the annular ring.+**These are PRESS-FIT** (Mill-Max style): the body OD is deliberately **larger** than the plated drill+(Medium 0.10 mm interference, Large 0.15 mm). The undersized hole is **correct**, do not "fix" it to a+clearance hole. Solder-assisted with 300 um InstaPCB jet paste on the annular ring. -Each `.lbr` device is a full component: a **round thru-hole footprint** (real drill + annular ring),-a **per-pin-accurate schematic symbol** (silhouette from the actual STEP, so the four look different),-and a **real 3D body** bound from the pin's STEP.+Each device is a full component: a **round thru-hole footprint** (real drill + annular ring), a+**per-pin-accurate schematic symbol** (silhouette from the actual STEP, so the four look different), and+a **real 3D body** bound from the pin's STEP. ----+## The library: all four pins in ONE `.lbr` -## Screenshots+![One library, all four pins](screenshots/library-4pins-clean.png) -### The library — all four pins, each with a working 3D component-![Library with all 4 pins + 3D](screenshots/library-4pins-3d.png)-The Fusion Electronics Library editor: the four devicesets in the list, the symbol (center), the-footprint preview (round pad + silk, bottom), and the **real 3D pin** in the lower-right preview-(Package column reads *Mapped*, not *Placeholder*).+The Fusion Electronics Library editor with **AdomMachinePins** open: the four devicesets in one list+(MP-LRG-SHT, MP-LRG-STD, MP-MED-SHT, MP-MED-STD), the schematic symbol (center), the footprint preview+(round pad + silk, bottom), and the **real 3D pin** in the lower-right preview. The Package column reads+**Mapped**, not Placeholder, so the 3D is live for every part. -### Each pin — symbol + footprint in Fusion-| | |-|---|---|-| ![Medium-Standard](screenshots/pin-med-std-fusion.png) | ![Medium-Short](screenshots/pin-med-sht-fusion.png) |-| ![Large-Standard](screenshots/pin-lrg-std-fusion.png) | ![Large-Short](screenshots/pin-lrg-sht-fusion.png) |+## The sample board: all four ganged together -### The sample board — all four ganged together-| 2D (dimensioned) | 2D with silkscreen |+| 2D, dimensioned | 2D, silkscreen | |---|---| | ![2D dimensioned](screenshots/board-2d-dimensioned.png) | ![2D silkscreen](screenshots/board-2d-silkscreen.png) | -| 3D — all four pins standing | 3D with silkscreen labels |-|---|---|-| ![3D all four](screenshots/board-3d-all4.png) | ![3D silkscreen](screenshots/board-3d-silkscreen.png) |+![3D with silkscreen](screenshots/board-3d-silkscreen.png) -The board is 50 × 50 × 1.6 mm; each pin carries a silkscreen callout of its **name, drill, and-annular ring**.+The board is 50 x 50 x 1.6 mm. Each pin carries a silkscreen callout of its **name, drill, and annular+ring**, and the 3D PCB shows the real pin bodies standing on the FR4. ----+## Download and use it -## Download / use it--**Fusion 360 library:** [`AdomMachinePins.lbr`](AdomMachinePins.lbr) — open in Fusion via *Electronics-→ Library Manager → Open*, or with the Adom bridge `fusion_open_lbr`. This `.lbr` already carries the-3D bindings (see the [3D section](#the-3d-files-the-important-part) — you may need to re-bind on your-own account).+**Fusion 360 library:** [`AdomMachinePins.lbr`](AdomMachinePins.lbr), one library, all four pins. Open in+Fusion (*Electronics, Library Manager, Open*) or with the Adom bridge `fusion_open_lbr`. It already+carries the 3D bindings; see [the 3D section](#the-3d-files-the-part-that-matters), you may need to+re-bind on your own Autodesk account.  **Sample board:** [`AdomPinsBoard.brd`](AdomPinsBoard.brd) (EAGLE/Fusion) and [`AdomPinsBoard.kicad_pcb`](AdomPinsBoard.kicad_pcb) + [`AdomPinsBoard.svg`](AdomPinsBoard.svg) (KiCad). -**Per-pin sources** (in [`sources/`](sources/)): each pin's `.kicad_sym`, `.kicad_mod`, `.step`,-`.glb`, and single-pin `.lbr`.-----+**Per-pin sources** (in [`sources/`](sources/)): each pin's `.kicad_sym`, `.kicad_mod`, `.step`, `.glb`,+and single-pin `.lbr` (for building your own merged library).  ## Where the originals came from -The canonical KiCad source is **[`adom-inc/adom-kicad-library`](https://github.com/adom-inc/adom-kicad-library/tree/new-v1.1)**-(branch `new-v1.1`): `footprints/*.kicad_mod`, `symbols/*.kicad_sym`, `3dmodels/*.step` for-MachineContact (MC, Large/Medium) and MachinePin (MP, Large/Medium × Standard/Short). Each pin also-has an individual Adom Wiki component page with native symbol / footprint / 3D viewers:+The canonical KiCad source is+**[`adom-inc/adom-kicad-library`](https://github.com/adom-inc/adom-kicad-library/tree/new-v1.1)** (branch+`new-v1.1`): `footprints/*.kicad_mod`, `symbols/*.kicad_sym`, `3dmodels/*.step` for MachineContact (MC,+Large/Medium) and MachinePin (MP, Large/Medium, Standard/Short). Each pin also has an individual Adom+Wiki component page with native symbol, footprint, and 3D viewers:  - [Machine Pin Medium Standard](https://wiki.adom.inc/adom/machinepinmediumstandard) - [Machine Pin Medium Short](https://wiki.adom.inc/adom/machinepinmediumshort)⋯ 1 unchanged line ⋯ - [Machine Pin Large Short](https://wiki.adom.inc/adom/machinepinlargeshort) ----- ## How to rebuild the whole thing  ### 1. Generate the four `.lbr` from the KiCad sources (adom-lbr 2.4.0+)@@ -99,34 +85,33 @@ adom-lbr generate \   -o <MPN>.lbr ``` -- `--symbol-art` overrides the shared/generic `kicad_sym` drawing with **this pin's** outline-  (the outline-contract `<mpn>-symbol-outline.mm.svg` + its `.json` sidecar, placed 1:1). Without it,-  all four symbols look identical.-- 2.4.0 emits a native **round** thru-hole pad, the real **`fp_circle` silk**, and names the pin from-  the **pad number** (an empty pin name makes Fusion reject the `.lbr` with *"has errors and cannot-  be opened"*). Lint each with `adom-lbr lint`.+- `--symbol-art` overrides the shared/generic `kicad_sym` drawing with **this pin's** outline (the+  outline-contract `<mpn>-symbol-outline.mm.svg` + its `.json` sidecar, placed 1:1). Without it, all four+  symbols look identical.+- 2.4.0 emits a native **round** thru-hole pad, the real **`fp_circle` silk**, and names the pin from the+  **pad number** (an empty pin name makes Fusion reject the `.lbr` with "has errors and cannot be+  opened"). Lint each with `adom-lbr lint`. -Merge the four into one library `.lbr` (one `<layers>` skeleton + concatenated-packages/symbols/devicesets; give each symbol's pin a **unique name** or the lint flags duplicates).+Merge the four into **one** library: one `<layers>` skeleton + concatenated packages/symbols/devicesets.+Give each symbol's pin a **unique name** (or the linter flags duplicates), and give each **deviceset a+short clean name** (MP-MED-STD, not MachinePinMediumStandard), because the deviceset name renders as the+`>NAME` in the symbol and a long name looks terrible. -### 2. Bind the real 3D to each pin+### 2. Bind the real 3D, ONE pin at a time -This is the part that needs care — see the next section. Short version: bind **one pin at a time**,-collect each fresh Hub `wip_urn`, and write them into the library.+See [the 3D section](#the-3d-files-the-part-that-matters). Short version: bind each pin with+`fusion_make_3d_package`, collect each fresh Hub `wip_urn`, and write them into the library.  ### 3. Author the sample board (background, no dialogs)  Hand-write an EAGLE `.brd`: `<layers>`, a board outline on **layer 20**, the embedded `<library>`-(packages), and `<elements>` placing the four pins. Then open it with `fusion_open_board` — which uses+(packages), and `<elements>` placing the four pins. Open it with `fusion_open_board`, which uses `Document.newDesignFromLocal` to **instantiate the placed parts with zero modal file-dialogs** (do NOT use the dialog-driven EAGLE importer; its Open dialogs steal focus). `fusion_show_3d_board` renders the-3D. Add silkscreen with `<text ... layer="21">` in `<plain>`.--A DRC-clean KiCad `.kicad_pcb` equivalent is also here (rendered via `service-kicad pcb export svg`).-----+3D. Add silkscreen with `<text ... layer="21">` in `<plain>`. A DRC-clean KiCad `.kicad_pcb` equivalent+is also here (rendered via `service-kicad pcb export svg`). -## The 3D files — the important part+## The 3D files, the part that matters  **The `.lbr`/`.brd` is 2D XML; the 3D lives in the Autodesk Hub.** Fusion's 3D for an electronics component is a **`package3d`** binding that points at a cloud f3d file by **`wip_urn`**. So:@@ -134,71 +119,61 @@ component is a **`package3d`** binding that points at a cloud f3d file by **`wip - In the **library** `.lbr`, each part needs BOTH a library-level `<package3d name=... wip_urn=urn:...>`   AND a per-`<device>` `<package3dinstances><package3dinstance package3d_urn="urn:..."/></package3dinstances>`   (after `</connects>`). **The per-device instance is what makes the library editor show the real 3D-  instead of a "Placeholder"** — the #1 gotcha.+  instead of a "Placeholder".** That is the number one gotcha. - On the **board** `.brd`, embed a `<packages3d>` in the library AND give every `<element>` a-  `package3d_urn="<that pin's wip_urn>"`. No urn on the element ⇒ a flat pad instead of a 3D body.+  `package3d_urn="<that pin's wip_urn>"`. No urn on the element means a flat pad instead of a 3D body. -### If you import this `.lbr` and the 3D doesn't show (or shows a flat pad)+### If you import this `.lbr` and the 3D does not show (or shows a flat pad) -The `wip_urn`s in this file are bound to the account that built it — **they may not resolve on yours**.+The `wip_urn`s in this file are bound to the account that built it, so **they may not resolve on yours**. Re-bind on your own account (all background, no dialogs):  ```-# per pin, ONE AT A TIME (the batch build times out — see below):+# per pin, ONE AT A TIME (the batch build times out, see below): fusion_make_3d_package {lbrPath:<pin>.lbr, modelPath:<pin>.step, orient:false} #   -> returns a fresh wip_urn for that pin ```  Then rewrite the library's `<package3d>`/`<package3dinstances>` (and the board's element-`package3d_urn`s) with your fresh urns and re-open. That's exactly how this library's 3D was made 4/4.+`package3d_urn`s) with your fresh urns and re-open. That is exactly how this library got to 4/4. -Requires an **APS sign-in** (`fusion_aps_signin`, warm SSO — never your password) so the f3d can-upload to your Hub. Free/never-charged (PKCE app + free-endpoint allowlist + monthly cap).-----+Requires an **APS sign-in** (`fusion_aps_signin`, warm SSO, never your password) so the f3d can upload to+your Hub. Free and never-charged (PKCE app + free-endpoint allowlist + monthly cap).  ## The Fusion-bridge features that made this possible  All of this ran from the AI **in the background** (Fusion never had to steal your focus), thanks to recent Adom Desktop Fusion bridge work: -- **Background, no-dialog board import** — `fusion_open_board` (`Document.newDesignFromLocal`)-  instantiates a placed `.brd` with **zero modal Open dialogs**. Fusion's native EAGLE importer-  (`ImportSCHAndBRDCmd`) pops two file-pickers that foreground Fusion; this route avoids them entirely.-- **`package3d_urn`-on-board** support — real 3D component bodies on an imported board (documented in-  the `fusion_new_electronics_from_eagle` verb).-- **Async-survivable long ops** — the cloud Package3D + Hub upload takes minutes, but AD's relay caps-  a request at ~60s. `fusion_build_library_3d` now runs **detached + pollable** so it isn't killed-  mid-run. (Even so, per-pin `fusion_make_3d_package` proved more reliable than the batch — bind one-  at a time.)-- **Universal error-dialog guard** — every open/mutating verb screenshots owned popups and flips-  `success:false` on a Fusion "Error" dialog, so a malformed `.lbr` can't be reported as "opened".-- **Notify-before-foreground** — on the rare unavoidable foreground, the bridge fires an AD notify-  explaining why (and ribs Fusion for not being AI-native yet).-- **APS integration** — PKCE OAuth with a warm-SSO sign-in, a browser-profile cache (remembers which+- **Background, no-dialog board import.** `fusion_open_board` (`Document.newDesignFromLocal`) instantiates+  a placed `.brd` with **zero modal Open dialogs**. Fusion's native EAGLE importer (`ImportSCHAndBRDCmd`)+  pops two file-pickers that foreground Fusion; this route avoids them entirely.+- **`package3d_urn`-on-board** support, real 3D component bodies on an imported board.+- **Async-survivable long ops.** The cloud Package3D + Hub upload takes minutes, but AD's relay caps a+  request at 60s. `fusion_build_library_3d` now runs **detached + pollable** so it is not killed mid-run.+  (Even so, per-pin `fusion_make_3d_package` proved more reliable than the batch. Bind one at a time.)+- **Universal error-dialog guard.** Every open/mutating verb screenshots owned popups and flips+  `success:false` on a Fusion "Error" dialog, so a malformed `.lbr` cannot be reported as "opened".+- **Notify-before-foreground.** On the rare unavoidable foreground, the bridge fires an AD notify+  explaining why.+- **APS integration.** PKCE OAuth with a warm-SSO sign-in, a browser-profile cache (remembers which   browser authed to Autodesk), and a never-charge cap; used to upload the f3d packages.-- **HWND-truncation + parent/child screenshot** fixes so the bridge can see and drive Fusion windows-  and owned dialogs in the background.-----+- **HWND-truncation + parent/child screenshot** fixes so the bridge can see and drive Fusion windows and+  owned dialogs in the background.  ## Skills used to build this -- **[fusion-libraries](https://wiki.adom.inc/adom/fusion-libraries)** — symbol → footprint → `.lbr` →+- **[fusion-libraries](https://wiki.adom.inc/adom/fusion-libraries)**, symbol to footprint to `.lbr` to   Fusion, and attaching the real 3D chip.-- **[adom-lbr](https://wiki.adom.inc/adom/adom-lbr)** — the EAGLE `.lbr` generator/linter (round pad,+- **[adom-lbr](https://wiki.adom.inc/adom/adom-lbr)**, the EAGLE `.lbr` generator/linter (round pad,   `fp_circle` silk, `--symbol-art`).-- **adom-symbol / adom-footprint / step2glb / adom-chipfit** — symbol art, footprint + paste dots,-  STEP→GLB, seat-plane checks.-- **[fusion-aps-signin](https://wiki.adom.inc/adom/fusion-aps-signin)** + **fusion-aps-search** — the-  APS sign-in (warm SSO) so the 3D packages can upload to the Hub.-- **fusion-electronics / fusion-driving / adom-desktop-window-capture** — driving Fusion + capturing-  its windows and owned dialogs in the background.-- **[adom-machine-pin-fusion-library](https://wiki.adom.inc/adom/adom-machine-pin-fusion-library)** —-  the dedicated skill for this exact build (companion to this page).-- **adom-shotlog / pup** — visual logging of every step.-----+- **adom-symbol / adom-footprint / step2glb / adom-chipfit**, symbol art, footprint + paste dots,+  STEP to GLB, seat-plane checks.+- **[fusion-aps-signin](https://wiki.adom.inc/adom/fusion-aps-signin)** and **fusion-aps-search**, the APS+  sign-in (warm SSO) so the 3D packages can upload to the Hub.+- **fusion-electronics / fusion-driving / adom-desktop-window-capture**, driving Fusion + capturing its+  windows and owned dialogs in the background.+- The **Skills tab** on this page carries the dedicated build recipe.  *Built by the Adom AI, background-driven end to end. Source of truth for the pins: `adom-inc/[email protected]`.*
SKILL.md+13−13
@@ -13,13 +13,13 @@ description: >   pad, placeholder 3d, scaffold pin, 32mm grid pin, sample board machine pins. --- -# Adom machine-pin Fusion library + board — the full recipe+# Adom machine-pin Fusion library + board, the full recipe  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. The pins (all PRESS-FIT — this is the key fact)+## 0. The pins (all PRESS-FIT, this is the key fact)  | Pin | Body OD | Drill | Pad | Ring | Interference | |---|---|---|---|---|---|@@ -27,7 +27,7 @@ downloads + screenshots: **wiki.adom.inc/adom/adom-machine-pins-fusion-lbr**. | Large-Standard / -Short | Ø3.60 | Ø3.45 | Ø5.20 | 0.875 | 0.15 mm |  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.+300 µm jet paste). The undersized hole is CORRECT, never "fix" it to a clearance hole.  ## 1. Generate the four `.lbr` (adom-lbr 2.4.0+) @@ -40,11 +40,11 @@ adom-lbr generate --sym <MPN>.kicad_sym --fp <MPN>.kicad_mod \   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.+  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`). -## 2. Bind the real 3D — ONE PIN AT A TIME (do NOT trust the batch)+## 2. Bind the real 3D, ONE PIN AT A TIME (do NOT trust the batch)  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**@@ -56,10 +56,10 @@ the password) so the f3d uploads to the Hub. ``` 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)+    -> record wip_urn   (orient:false, the STEP is already Z-up; tall pins must not be flattened) ``` -## 3. Write the 3D into the library — BOTH places (the #1 gotcha)+## 3. Write the 3D into the library, BOTH places (the #1 gotcha)  For each part the `.lbr` needs: 1. a library-level `<package3d name="PKG" urn="" wip_urn="urn:..." locally_modified="yes"@@ -69,13 +69,13 @@ For each part the `.lbr` needs:    `<package3dinstances><package3dinstance package3d_urn="urn:..."/></package3dinstances>`.  **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.+pin. The bridge's `_inject_package3d_bindings` does exactly this (merge-aware/idempotent), reuse it. -## 4. The sample board — background, NO modal dialogs+## 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+`<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>`. @@ -84,7 +84,7 @@ 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+⛔ 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`.)@@ -100,7 +100,7 @@ element `package3d_urn`s with your fresh urns, and re-open. Same procedure as th - `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+- `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@@ -110,4 +110,4 @@ element `package3d_urn`s with your fresh urns, and re-open. Same procedure as th - 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.+- Batch `build_library_3d` reliability on slow/cluttered sessions, per-pin binding is the workaround.
page.json+4−5
@@ -2,8 +2,8 @@   "schema_version": 1,   "type": "component",   "slug": "adom-machine-pins-fusion-lbr",-  "title": "Adom Machine Pins — Fusion Library + Sample Board",-  "brief": "All four Adom press-fit machine pins in one Fusion 360 .lbr with working 3D, plus a sample board (2D/3D/silkscreen) ganging all four together. Fully documented + rebuildable.",+  "title": "Adom Machine Pins, Fusion Library + Sample Board",+  "brief": "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.",   "version": "2.0.0",   "tags": ["machine-pin", "fusion", "lbr", "press-fit", "adom-modular", "board", "3d"],   "license": "proprietary",@@ -17,11 +17,10 @@     "subcategory": "Machine Pin library",     "series": "Machine Pins",     "parts": {-      "model_3d": "sources/MachinePinLargeStandard.glb",-      "step": "sources/MachinePinLargeStandard.step"+      "model_3d": "AdomMachinePins-4pin-animated.glb"     },     "specs": {-      "pins": "Medium-Standard, Medium-Short, Large-Standard, Large-Short",+      "pins": "MP-MED-STD, MP-MED-SHT, MP-LRG-STD, MP-LRG-SHT",       "mount": "press-fit (Mill-Max style)",       "medium_body_od_mm": 1.2, "medium_drill_mm": 1.1, "medium_pad_mm": 1.6, "medium_ring_mm": 0.25,       "large_body_od_mm": 3.6, "large_drill_mm": 3.45, "large_pad_mm": 5.2, "large_ring_mm": 0.875,
screenshots/library-4pins-clean.pngadded
⋯ 1 unchanged line ⋯