app
Adom Footprint
Public Made by Adomby adom
KiCad footprint creator with layer HUD viewer and delivery to KiCad/Fusion 360
← Commit history
Publish 1.0.9
7 files changed
+43−13
Cargo.lock+1−1@@ -4,7 +4,7 @@ version = 4 [[package]] name = "adom-footprint"-version = "0.1.6"+version = "0.1.7" dependencies = [ "anyhow", "clap",
Cargo.toml+1−1@@ -1,6 +1,6 @@ [package] name = "adom-footprint"-version = "0.1.6"+version = "0.1.7" edition = "2021" description = "Create, preview, lint, and deliver KiCad footprints (.kicad_mod) with interactive FpView viewer"
VERSION+1−1@@ -1 +1 @@-0.1.6+0.1.7
bin/adom-footprint⋯ 1 unchanged line ⋯
package.json+15−3@@ -1,6 +1,6 @@ { "slug": "adom-footprint",- "version": "1.0.8",+ "version": "1.0.9", "type": "app", "description": "KiCad footprint creator with layer HUD viewer and delivery to KiCad/Fusion 360", "dependencies": {@@ -15,5 +15,17 @@ "headline": "KiCad footprints, instantly", "subhead": "Toggle copper, fab and paste; render and deliver footprints to KiCad and Fusion 360.", "screenshot": "screenshots/shot.png"- }-}+ },+ "tags": [+ "kicad",+ "footprint",+ "pcb",+ "eda",+ "kicad_mod",+ "fusion",+ "cad",+ "library",+ "smd",+ "pads"+ ]+}
page.json+13−6@@ -1,21 +1,28 @@ { "slug": "adom-footprint",- "version": "1.0.8",+ "version": "1.0.9", "type": "app", "description": "KiCad footprint creator with layer HUD viewer and delivery to KiCad/Fusion 360", "dependencies": { "adom/adom-lbr": "*" }, "tags": [- "eda",- "layers",+ "kicad", "footprint", "pcb",- "instapcb"+ "eda",+ "kicad_mod",+ "fusion",+ "cad",+ "library",+ "smd",+ "pads" ], "hero": {- "type": "image",- "path": "adom-footprint.png"+ "type": "billboard",+ "headline": "KiCad footprints, instantly",+ "subhead": "Toggle copper, fab and paste; render and deliver footprints to KiCad and Fusion 360.",+ "screenshot": "screenshots/shot.png" }, "scripts": { "install": "./install.sh",
src/fp_gen.rs+12−1@@ -86,7 +86,18 @@ pub fn generate_kicad_mod(input: &FpInput) -> String { // Pads for pad in &input.pads { let shape = pad.shape.clone().unwrap_or_else(|| "roundrect".to_string());- let layers = pad.layers.clone().unwrap_or_else(|| "\"F.Cu\" \"F.Paste\" \"F.Mask\"".to_string());+ // Normalise the layer list to valid KiCad syntax: space-separated, each name quoted.+ // Callers historically passed comma-separated/unquoted layers ("F.Cu,F.Paste,F.Mask"),+ // which KiCad fails to match to a real copper layer -> the pad shows as an SMD *aperture*+ // (no copper). Accept comma or whitespace separators and any quoting, always emit clean.+ let raw = pad.layers.clone().unwrap_or_else(|| "F.Cu F.Paste F.Mask".to_string());+ let layers = raw+ .split(|c| c == ',' || c == ' ' || c == '\t')+ .map(|t| t.trim().trim_matches('"'))+ .filter(|t| !t.is_empty())+ .map(|t| format!("\"{}\"", t))+ .collect::<Vec<_>>()+ .join(" "); let angle = match pad.angle { Some(a) if a != 0.0 => format!(" {}", n(a)), _ => String::new(),