app
Adom Library
Public Made by Adomby adom
adom-lbr — the EDA library translator. Bring a component in from any supported EDA tool and convert it to any other (KiCad ⇄ Altium ⇄ EAGLE/Fusion) through one canonical adom-lbr JSON — symbol + footprint + 3D + pin↔pad map. Altium is written natively (no Altium needed). Includes the adom-lbr Manager: browse wiki components and view symbol/footprint/3D + the per-EDA layer stackup.
← Commit history
Publish 1.2.0
9 files changed
+56−7
Cargo.lock+1−1@@ -4,7 +4,7 @@ version = 4 [[package]] name = "adom-lbr"-version = "1.1.2"+version = "1.2.0" dependencies = [ "anyhow", "clap",
Cargo.toml+1−1@@ -1,6 +1,6 @@ [package] name = "adom-lbr"-version = "1.1.2"+version = "1.2.0" edition = "2021" description = "EAGLE .lbr generator, linter, and validator for Fusion 360 Electronics. Converts KiCad symbols + footprints to complete EAGLE libraries."
README.md+5@@ -48,6 +48,11 @@ adom-lbr bind-3d --lbr part.lbr --wip-urn "urn:adsk.wipprod:fs.file:vf.<id>?vers → **Full walkthrough: [docs/fusion-export.md](docs/fusion-export.md)** — pad-mapping, the verified 3D markup, the bridge attach vs. the `bind-3d` fast-path, and Altium/OrCAD notes. +📘 **Companion skill: [Adom LBR Fusion 360 Export](https://wiki.adom.inc/adom/adom-lbr-fusion-export)** —+a focused field guide to the four Fusion-export traps (placeholder footprint, the+bridge attach, `wip_urn` vs `eagle`, `dm.lineage`). It installs automatically with+this app (it's a dependency), and surfaces on its own when you're exporting to Fusion.+ ## The 3-column library viewer — and an interactive embed 
VERSION+1−1@@ -1 +1 @@-1.1.2+1.2.0
bin/adom-lbr⋯ 1 unchanged line ⋯
package.json+4−2@@ -1,9 +1,11 @@ { "slug": "adom-lbr",- "version": "1.1.2",+ "version": "1.2.0", "type": "app", "description": "Symbol, footprint and 3D side by side with the pin to pad map and datasheet descriptions, exportable as one embeddable file.",- "dependencies": {},+ "dependencies": {+ "adom/adom-lbr-fusion-export": "*"+ }, "tags": [ "eda", "kicad",
page.json+4−2@@ -1,9 +1,11 @@ { "slug": "adom-lbr",- "version": "1.1.2",+ "version": "1.2.0", "type": "app", "description": "Symbol, footprint and 3D side by side with the pin to pad map and datasheet descriptions, exportable as one embeddable file.",- "dependencies": {},+ "dependencies": {+ "adom/adom-lbr-fusion-export": "*"+ }, "tags": [ "eda", "kicad",
screenshots/hero.png⋯ 1 unchanged line ⋯
src/main.rs+40@@ -624,6 +624,28 @@ fn parse_mod_pads(km: &str) -> Vec<ModPad> { pads } +/// One-line summary of a footprint's pad distribution for a moment-of-use hint,+/// e.g. "64 pads: 16 left / 16 right / 16 top / 16 bottom". Buckets by dominant+/// axis so a QFP reads as 4-sided and an SOIC/dual reads as left/right.+fn footprint_side_summary(fp_content: Option<&str>) -> String {+ let pads = fp_content.map(parse_mod_pads).unwrap_or_default();+ if pads.is_empty() {+ return "0 pads".to_string();+ }+ let (mut l, mut r, mut t, mut b) = (0u32, 0u32, 0u32, 0u32);+ for p in &pads {+ if p.x.abs() >= p.y.abs() {+ if p.x < 0.0 { l += 1 } else { r += 1 }+ } else if p.y > 0.0 { t += 1 } else { b += 1 }+ }+ let mut parts = Vec::new();+ if l > 0 { parts.push(format!("{l} left")); }+ if r > 0 { parts.push(format!("{r} right")); }+ if t > 0 { parts.push(format!("{t} top")); }+ if b > 0 { parts.push(format!("{b} bottom")); }+ format!("{} pads: {}", pads.len(), parts.join(" / "))+}+ /// Map a KiCad pad rotation (degrees) to an EAGLE `rot=` attribute, matching /// Fusion 360's own library export convention: the KiCad angle maps directly /// (KiCad 90 → `R90`), so a non-square pad on a QFP/SOIC top/bottom side is@@ -1245,6 +1267,24 @@ fn main() { println!("OK: Generated {} ({} pins, {} bytes)", out_path.display(), parsed.pins.len(), lbr.len()); println!("HINT: Lint {} with {} error(s), {} warning(s)", if lint.passed { "PASSED" } else { "FAILED" }, lint.errors.len(), lint.warnings.len()); + // Progressive, moment-of-use hints — surface the pitfalls right where+ // they bite, so an agent that never read the skill still does the+ // right thing. (Same idea as adom-wiki/adom-desktop `hint[…]` lines.)+ if fp.is_none() {+ println!("HINT: no --fp given → the package is a 2-COLUMN PLACEHOLDER, not the real footprint.");+ println!(" For anything you'll fabricate, pass --fp <part.kicad_mod> so pads land in their true positions.");+ } else {+ let sides = footprint_side_summary(fp_content.as_deref());+ println!("HINT: footprint built from the real .kicad_mod ({sides}).");+ if sym.is_none() {+ println!("HINT: no --sym → the symbol was SYNTHESIZED from the footprint pads (balanced L/R). Pass --sym <part.kicad_sym> for the real schematic symbol.");+ }+ if model.is_none() {+ println!("HINT: add --model <part.step> to also emit a Fusion 3D handoff sidecar (the bridge attaches the body).");+ }+ }+ println!("NEXT: this .lbr imports directly into Fusion 360 / Altium / OrCAD. For KiCad: `adom-lbr import {} -o part.kicad_sym`.", out_path.display());+ // 3D model: emit a sidecar manifest for the Fusion bridge. A valid // Fusion 3D reference needs an Autodesk cloud URN, which only Fusion // can mint — so the .lbr stays 2D and the bridge does the upload +