forked from 1b-agent/fieldcraft-upstream
Meshing test corpus built with SolidCraft; assembly placement in open_design (#11)
* geometry: build designs from SolidCraft command scripts (feature scripts) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NmAttHhUZTokgPeEJia8sm * geometry: place component bodies through their occurrences when opening a design An assembly's instances were missing and moved components sat at their own origin. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NmAttHhUZTokgPeEJia8sm * Meshing test corpus: 16 SolidCraft recipes, analytic shapes, loader and runner modelcraft-testkit holds the corpus (tests/corpus/<name>/recipe.json run through SolidCraft's engine, then opened as a design) and the runner binary behind cargo xtask corpus. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NmAttHhUZTokgPeEJia8sm * docs: corpus results, test corpus architecture and the scripts feature; licences Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NmAttHhUZTokgPeEJia8sm * corpus: measure each body once, check stage widths, simpler loader and runner Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NmAttHhUZTokgPeEJia8sm --------- Co-authored-by: jyviko <2501648+jyviko@users.noreply.github.com> Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
49 files changed
+1770
-84
No files matched your search
@@ -28,6 +28,7 @@ crates in strictly lower layers.
|
||||
| L3 | `modelcraft-io` | `.modelcraft` files, result files. | planned |
|
||||
| L4 | `modelcraft-engine` | Commands (`CommandSpec`), `Session::execute` with rollback and the panic guard, scripts. | started |
|
||||
| L5 | `modelcraft-ui-egui`, `modelcraft-mcp` | Desktop UI, control channel and MCP server. | planned |
|
||||
| testkit | `modelcraft-testkit` | Test tooling, a dev-dependency only: the meshing test corpus (`tests/corpus/*/recipe.json`, analytic shapes) and its runner (`cargo xtask corpus`). | started |
|
||||
| apps | `modelcraft`, `modelcraft-cli`, `modelcraft-web` | Desktop, command line, browser. | cli started |
|
||||
|
||||
Rules beyond the layer order:
|
||||
@@ -36,6 +37,9 @@ Rules beyond the layer order:
|
||||
SolidCraft's `[patch.crates-io]` (its fixed truck crates) does not reach dependents, so the
|
||||
workspace repeats it from the same rev; bump both together.
|
||||
- Everything below the apps builds for `wasm32-unknown-unknown`.
|
||||
- `modelcraft-geometry`'s non-default `scripts` feature builds designs from SolidCraft command
|
||||
scripts (`script_design`, through `solidcraft-engine`) for the test corpus; the library opens
|
||||
designs without it.
|
||||
|
||||
## Meshing pipeline
|
||||
|
||||
@@ -43,6 +47,8 @@ Rules beyond the layer order:
|
||||
so feature edges and face-based loads and BCs survive meshing. Faces of an opened design also
|
||||
carry SolidCraft's persistent names (`F2:side:l4`, from the feature and sketch curve that made
|
||||
them), so a load on a named face follows it when the design is edited and opened again.
|
||||
Bodies of components are placed in the world through their occurrences (one body per
|
||||
placement), as SolidCraft displays and exports them.
|
||||
2. **Surface preparation.** Weld coincident vertices, check the surface is closed, manifold and
|
||||
consistently oriented, find feature edges (face boundaries, sharp dihedral angles).
|
||||
3. **Tetrahedral meshing.** Bowyer–Watson Delaunay on Shewchuk's adaptive predicates (symbolic
|
||||
@@ -66,3 +72,16 @@ Every user-visible action is a `CommandSpec` in `crates/engine/src/cmd/<area>.rs
|
||||
form. `Session::execute` clones the model, runs the command under `catch_unwind`, and restores
|
||||
the model on an error or a panic; commands that changed the model are journalled, so the
|
||||
journal replays as a script.
|
||||
|
||||
## Test corpus
|
||||
|
||||
Meshers are measured on our own parts (`docs/adr/0001-libraries.md`, test geometry). Each part is
|
||||
a SolidCraft command script in `tests/corpus/<name>/recipe.json` (the file `solidcraft-cli run`
|
||||
takes, plus a `corpus` object with its categories and, when it has one, its closed-form volume)
|
||||
with a one-line `README.md`; analytic shapes (sphere, torus, cylinder, thick-walled pipe, plate
|
||||
with a hole) are generated in code. `modelcraft-testkit` runs a recipe in SolidCraft's engine,
|
||||
saves the design and opens it through `open_design`, the path a person's design takes, so no
|
||||
geometry is stored. `cargo xtask corpus` (a release build of the testkit's `corpus` binary)
|
||||
builds every part, tessellates it and runs each stage of `modelcraft_testkit::runner`, writing
|
||||
docs/meshing/corpus.md. A mesher joins by implementing `runner::Stage` (its columns, and a run
|
||||
over the part's tessellated surfaces) and adding itself to `runner::stages()`.
|
||||
Reference in new issue
Block a user