← Commit history

standard 0.8.0, engine 0.5.0: wire generate_body (PR #2, #20) into the writers: STEP AP214 from a package family and its JEDEC letters (pins the total, D2/E2 the exposed pad), matching Fusion's generator on 0603, SOIC-8, QFN-32 and QFP-48

Colby Knox ·5a6440a524 ·13d ago ·parent 7de9099
8 files changed +15−9
README.md+4−1
@@ -44,7 +44,8 @@ links the crate (vendored at a tagged standard version, since Cargo cannot fetch answers each check under its own prefix. It now answers `copper_balance`, `return_path`, `fab_check`, `impedance`, `current_capacity`, `height_check`, `placement_check`, `thermal_vias` and `via_fence`, moved over from the Altium bridge (all but the via plans give the same answers as the Altium bridge on its test boards). It also-carries board-file writers (`export_gencad`, `export_dxf`, `import_svg`) for a bridge whose tool has no native exporter. Its+carries board-file writers (`export_gencad`, `export_dxf`, `import_svg`, `generate_body`) for a bridge whose tool has no+native exporter. Its conformance tests read a bridge's saved replies from `ADOM_EDA_FIXTURES`; fixtures live on each bridge's own page (Altium's: [adom/altium-bridge](https://wiki.adom.inc/adom/altium-bridge) `fixtures/`). @@ -157,6 +158,8 @@ Decisions so far (proposals from the KiCad and Fusion bridges, 2026-10-27; issue  ## Status +Version 0.8.0: the engine (0.5.0) writes a part's 3D body as STEP from its package dimensions (`generate_body`, from the+Altium bridge's body3d.rs, PR #2, #20); it matches Fusion's generator on a 0603, SOIC-8, QFN-32 and QFP-48. Version 0.7.1: the engine (0.4.1)'s `placement_check` lists a part under a raised one (an Adom molecule on pins) as `stacked`, not as a courtyard overlap, when their pads stay apart and no bodies meet in 3D (fusion-lane #19). Version 0.7.0: the engine (0.4.0) adds `height_check` and `placement_check` from the Altium bridge, reading the 3D bodies
engine/Cargo.lock+1−1
@@ -4,7 +4,7 @@ version = 4  [[package]] name = "adom-eda-checks"-version = "0.4.1"+version = "0.5.0" dependencies = [  "roxmltree",  "serde_json",
engine/Cargo.toml+1−1
@@ -1,6 +1,6 @@ [package] name = "adom-eda-checks"-version = "0.4.1"+version = "0.5.0" edition = "2021" description = "The EDA Bridge Standard's checks and board-file writers, computed from the board model JSON: no bridge calls, no tool." license = "MIT"
engine/README.md+2−1
@@ -38,6 +38,7 @@ regions, with `writtenFrom`, and the bridge writes the file or places the region |---|---|---| | `export_gencad` | board | GenCAD 1.4 text, in inches: outline, pads and padstacks, shapes, components (a bottom part `MIRRORX FLIP`, as KiCad writes it), devices, signals, routes | | `export_dxf` | board, pours? | one DXF (R12) per layer in `args.layers`: Edge.Cuts as lines and arcs or one closed polyline (`contours`), copper as tracks, arcs, pads, vias and pours. With `pours` a copper layer shows the copper actually poured; without, `poursAsDrawn` names the layers that show the pour as drawn |+| `generate_body` | args only | a part's 3D body as STEP AP214 text from its package family and JEDEC letters (`family`, `dimensionsMm` with `pins` the total pin count and `D2`/`E2` an exposed pad, `marking?`), plus its box in the bodies companion's form; families chip, soic, qfn, qfp, sot23, dfn, bga, melf, ecap, crystal, header (#20) | | `import_svg` | svg (text) | `regions` in board mm (y up) for a layer: each shape with its holes as one contour reaching the holes through zero-width slits |  ## Input@@ -88,7 +89,7 @@ adom-eda-checks import_svg --svg logo.svg --args '{"at": [10, 10], "widthMm": 20  Replies keep the standard envelope (`success`, `errorCode`, `error`, `_hint`) and name verbs without a prefix (`apply_pours`, `add_rule`, `place_vias`): a bridge adds its own. Every reply also carries `engine`-(`"adom-eda-checks 0.4.1"`), so a bridge reports the engine it runs without writing the version by hand.+(`"adom-eda-checks 0.5.0"`), so a bridge reports the engine it runs without writing the version by hand.  ## Tests 
engine/src/writers/mod.rs+4−2
@@ -1,15 +1,16 @@ //! Board-file writers for a bridge whose tool has no native exporter (EDA Bridge Standard #16): GenCAD and DXF from the-//! board model, and SVG artwork as regions for a layer. Like the checks, no I/O and no tool: each returns the file text+//! board model, SVG artwork as regions for a layer, and a part's 3D body as STEP from its package dimensions (#20). Like the checks, no I/O and no tool: each returns the file text //! or the regions as JSON, says it was written from the board model (`writtenFrom`), and the bridge writes the files or //! places the regions. A bridge whose tool has a native exporter keeps it. use serde_json::Value; +pub mod body3d; pub mod dxf; pub mod gencad; pub mod svgart;  /// The verbs these writers answer, by standard name.-pub const WRITERS: &[&str] = &["export_dxf", "export_gencad", "import_svg"];+pub const WRITERS: &[&str] = &["export_dxf", "export_gencad", "generate_body", "import_svg"];  pub use dxf::dxf_layers; pub use gencad::gencad;@@ -20,6 +21,7 @@ pub fn run(verb: &str, input: &Value) -> Option<Value> {     Some(match verb {         "export_dxf" => dxf_layers(input),         "export_gencad" => gencad(input),+        "generate_body" => body3d::generate_body(input),         "import_svg" => svg_to_regions(input),         _ => return None,     })
package.json+1−1
@@ -1,6 +1,6 @@ {   "slug": "eda-bridge-standard",-  "version": "0.7.1",+  "version": "0.8.0",   "type": "skill",   "title": "EDA Bridge Standard: one way for an AI to drive every PCB tool",   "description": "The standard every Adom EDA bridge follows so one AI can drive Altium, KiCad, Fusion 360 and any future PCB tool the same way: shared verb names in tiers, the board model JSON, reply and refusal conventions, and a coverage table of each bridge against the Altium reference.",
verbs/coverage.json+1−1
@@ -1,5 +1,5 @@ {- "standard": "0.7.1",+ "standard": "0.8.0",  "reference": {   "bridge": "altium",   "version": "0.2.79"
verbs/standard.json+1−1
@@ -1,5 +1,5 @@ {- "standard": "0.7.1",+ "standard": "0.8.0",  "reference": {   "bridge": "altium",   "version": "0.2.79"