app
Adom Symbol
Public Made by Adomby adom
KiCad symbol creator with interactive viewer and delivery to KiCad/Fusion 360
← Commit history
1.2.3: baked chip-outline polylines are a 0.0254 mm hairline (was icon/120 floored at 0.12 mm, which smeared on screen); same rule adom-lbr applies for Altium and Fusion (John, 2026-09-19)
6 files changed
+22−7
Cargo.toml+1−1@@ -1,6 +1,6 @@ [package] name = "adom-symbol"-version = "1.2.2"+version = "1.2.3" edition = "2021" description = "Create and preview KiCad/Fusion 360 schematic symbols with interactive viewer"
SKILL.md+6@@ -109,6 +109,12 @@ markings / other top-face features. The tool cannot see that; you can. If it did Re-run `create` after the revision and look again. Ship only when the thumbnail reads cleanly. Report which source and placement you shipped in one line. +**Outline stroke (1.2.3).** Baked chip-outline polylines are written with a 0.0254 mm (1 mil)+stroke. KiCad draws any stroke at least one pixel wide, so the dense thumbnailer art reads as a+crisp single-pixel line at every zoom; the old icon/120 rule (0.14-0.17 mm) smeared it into a+blob (John, 2026-09-19: "smooshy/blurry"). adom-lbr maps strokes <= 8 mil to Altium's Smallest+and to 0.0254 mm EAGLE wires, so the same hairline reaches Fusion and Altium from this one symbol.+ ## KiCad Service All service-kicad operations (SVG export, linting, STEP/GLB export) are served by **service-kicad** — the shared headless KiCad container. **Always shell out to the `service-kicad` CLI**, never call its HTTP endpoints directly:
VERSION+1−1@@ -1 +1 @@-1.2.2+1.2.3
package.json+1−1@@ -1,6 +1,6 @@ { "slug": "adom-symbol",- "version": "1.2.2",+ "version": "1.2.3", "type": "app", "description": "KiCad symbol creator with interactive viewer and delivery to KiCad/Fusion 360", "dependencies": {
page.json+1−1@@ -1,6 +1,6 @@ { "slug": "adom-symbol",- "version": "1.2.2",+ "version": "1.2.3", "type": "app", "description": "KiCad symbol creator with interactive viewer and delivery to KiCad/Fusion 360", "dependencies": {
src/sym_gen.rs+12−3@@ -146,6 +146,9 @@ pub fn icon_box(body: [f64; 4], free: [f64; 4], designators: &[(f64, f64)], frac /// block plus, for outlines that do not carry the name, a `(text …)` lasered /// on the chip's top face. Returns None when the icon would be too small to /// read (under MIN_ICON_MM × 0.6). `name` is the part name to laser.+/// Stroke width (mm) of every baked chip-outline polyline: a 1 mil hairline.+pub const BAKED_OUTLINE_STROKE_MM: f64 = 0.0254;+ pub fn bake_chip_outline(outline: &ChipOutline, name: &str, body: [f64; 4], free: [f64; 4], designators: &[(f64, f64)]) -> Option<(Vec<String>, bool)> { let frac = chip_size_frac(&outline.size); let (cx, cy, w, h) = icon_box(body, free, designators, frac);@@ -157,9 +160,15 @@ pub fn bake_chip_outline(outline: &ChipOutline, name: &str, body: [f64; 4], free } let (scx, scy) = (vx0 + vw / 2.0, vy0 + vh / 2.0); let map = |px: f64, py: f64| (cx + (px - scx) * scale, cy - (py - scy) * scale);- // Hairline for small icons so segments never merge into a blob (same rule- // as the outline contract's stroke_mm), never thinner than KiCad's 0.12.- let stroke = fx3((scale * vw / 120.0).max(0.12));+ // A true hairline. KiCad draws any stroke at least one pixel wide, so 0.0254 mm+ // (1 mil) reads as a crisp single-pixel line at every zoom, while the old+ // icon/120 rule (0.14-0.17 mm on a 17 mm icon, floored at 0.12) smeared the+ // dense thumbnailer art into a blob on screen. John, 2026-09-19, after the same+ // fix landed in adom-lbr for Altium (Smallest) and Fusion (0.0254 mm wires):+ // "they look smooshy/blurry ... can you do the same for kicad?". adom-lbr maps+ // anything <= 8 mil to its hairline on the other lanes, so this carries through.+ let _ = scale * vw; // icon size no longer sets the stroke+ let stroke = fx3(BAKED_OUTLINE_STROKE_MM); let mut lines = Vec::new(); for pl in &outline.polylines { if pl.len() < 2 {