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
adom-lbr 2.47.1: KiCad pins of a non-EAGLE length keep their true length (point pin plus a lead), so a 1.27 mm inductor lead no longer runs under the humps
7 files changed
+18−5
CHANGELOG.md+3@@ -1,5 +1,8 @@ # Changelog +## 2.47.1 (2026-10-07)+- A KiCad pin whose length is not one of EAGLE's four (0, 2.54, 5.08, 7.62 mm) keeps its true length. It used to be rounded to the nearest EAGLE length, so a 1.27 mm pin became 2.54 mm and ran back over the body: on the AMPLH5030S-150MT inductor the two leads drew a line under the humps. Such a pin is now a `point` pin at KiCad's connection point with a lead drawn on the symbol layer at its exact length, so the Fusion symbol matches the KiCad one and the connection points do not move. Pins of an exact EAGLE length are unchanged.+ ## 2.46.3 (2026-09-23) - Pad clearance measures a round pad against a rectangular one as copper: off a corner it is the circle-to-corner distance, not the gap between bounding boxes. KiCad's stock staggered `TO-92` (square pad 1 at (0,0), round pad 2 at (1.27,-1.27), 1.3 mm) has 0.227 mm of real clearance but overlapping boxes, so every TO-92 part failed `pads 1 and 2 OVERLAP` and dropped out of the component factory. Real overlaps still fail. - A rectangular thru pad is no longer drawn as a square on its LONG side. KiCad's `TO-92_Inline` pad 1 (1.05 x 1.5 mm at 1.27 mm pitch) became a 1.5 mm square whose copper reached into pad 2, a real short the clearance lint rightly rejected. An elongated rect is now drawn `long` on its short side along its length (with a warning that the square pin-1 corner is lost), a squarish one square on its short side, the same rule roundrect already used. Of KiCad's 11 `TO-92*` footprints, 8 failed the lint on 2.46.2 and none do on 2.46.3.
Cargo.lock+1−1@@ -10,7 +10,7 @@ checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" [[package]] name = "adom-lbr"-version = "2.47.0"+version = "2.47.1" dependencies = [ "altium-codec", "anyhow",
Cargo.toml+1−1@@ -1,6 +1,6 @@ [package] name = "adom-lbr"-version = "2.47.0"+version = "2.47.1" edition = "2021" description = "adom-lbr generator / EDA translator: the canonical adom-lbr JSON is the hub, with native converters to Altium (.SchLib/.PcbLib/.IntLib), EAGLE/Fusion (.lbr), and KiCad. Altium output is written natively — no Altium needed at conversion time."
VERSION+1−1@@ -1 +1 @@-2.47.0+2.47.1
bin/adom-lbr⋯ 1 unchanged line ⋯
package.json+1−1@@ -1,6 +1,6 @@ { "slug": "adom-lbr",- "version": "2.47.0",+ "version": "2.47.1", "type": "app", "description": "adom-lbr \u2014 the EDA library translator. Bring a component in from any supported EDA tool and convert it to any other (KiCad \u21c4 Altium \u21c4 EAGLE/Fusion) through one canonical adom-lbr JSON \u2014 symbol + footprint + 3D + pin\u2194pad 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.", "dependencies": {},
src/main.rs+11−1@@ -2281,10 +2281,20 @@ fn emit_symbol_block(xml: &mut String, sym: &ParsedSymbol, symbol_art: Option<&S println!("HINT: glyph symbol ({} pins, no body box): pin NAMES hidden and pad numbers shown, so the names do not print on top of the drawing.", sym.pins.len()); } for (i, pin) in sym.pins.iter().enumerate() {+ // EAGLE pins come in four lengths (0, 2.54, 5.08, 7.62 mm). A KiCad pin of any other length+ // rounded to the nearest one draws too long (over the body: a 1.27 mm inductor pin ran under+ // its humps) or too short (a gap). Keep KiCad's connection point, make the pin a point, and+ // draw the lead at its true length toward the body.+ let exact = [0.0, 2.54, 5.08, 7.62].iter().any(|s| (pin.length - s).abs() < 0.01);+ if !exact && pin.length > 0.0 {+ let (dx, dy) = match ((pin.angle % 360) + 360) % 360 { 90 => (0.0, 1.0), 180 => (-1.0, 0.0), 270 => (0.0, -1.0), _ => (1.0, 0.0) };+ xml.push_str(&format!(" <wire x1=\"{:.4}\" y1=\"{:.4}\" x2=\"{:.4}\" y2=\"{:.4}\" width=\"0.254\" layer=\"94\"/>\n",+ pin.x, pin.y, pin.x + dx * pin.length, pin.y + dy * pin.length));+ } xml.push_str(&format!( " <pin name=\"{}\" x=\"{}\" y=\"{}\" length=\"{}\" direction=\"{}\"{}{}/>\n", esc_xml(&deduped_names[i]), pin.x, pin.y,- pin_length_keyword(pin.length),+ if exact || pin.length <= 0.0 { pin_length_keyword(pin.length) } else { "point" }, pin_direction(&pin.pin_type), pin_rotation(pin.angle), if glyph_only { " visible=\"pad\"" } else { "" }