forked from 1b-agent/fieldcraft-upstream
* 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>
75 lines
5.7 KiB
Markdown
75 lines
5.7 KiB
Markdown
# Meshing test corpus
|
||
|
||
Generated by `cargo xtask corpus`; do not edit. The parts are our own: SolidCraft recipes in
|
||
`tests/corpus/<name>/recipe.json` and analytic shapes generated in code
|
||
(`crates/testkit/src/corpus.rs`). Each run rebuilds every part, tessellates it at a chordal
|
||
tolerance of 1e-3 of its bounding-box diagonal and runs every stage on it. Times are wall
|
||
clock on the machine that ran it; every other column is deterministic.
|
||
|
||
## Results
|
||
|
||
| part | categories | bodies | faces | triangles | tol. mm | build ms | enclosed mm³ | SolidCraft mm³ | rel. diff | exact mm³ |
|
||
|---|---|---|---|---|---|---|---|---|---|---|
|
||
| bent-tube | sweepable, thin-wall, genus | 1 | 18 | 4296 | 0.121 | 443 | 4213.1 | 4159.4 | 1.3e-2 | 4159.8 |
|
||
| bolted-assembly | assembly, blocky | 3 | 22 | 284 | 0.117 | 53 | 33004.7 | 32999.0 | 1.7e-4 | 32998.9 |
|
||
| cross-cylinders | boolean, sharp | 1 | 10 | 1395 | 0.087 | 7912 | 32197.4 | 32357.8 | -5.0e-3 | 32365.8 |
|
||
| filleted-bracket | fillet, genus, sweepable | 1 | 13 | 540 | 0.088 | 387 | 32162.3 | 32145.0 | 5.4e-4 | 32144.8 |
|
||
| i-beam | sweepable, thin-wall | 1 | 14 | 44 | 0.208 | 3 | 61600.0 | 61600.0 | 0.0e0 | 61600.0 |
|
||
| loft-transition | organic | 1 | 6 | 292 | 0.075 | 56 | 56390.2 | 56450.6 | -1.1e-3 | – |
|
||
| perforated-plate | genus, thin-wall, sweepable | 1 | 54 | 1644 | 0.144 | 269 | 26822.2 | 26764.6 | 2.2e-3 | 26764.2 |
|
||
| pinhole-block | small-feature, genus | 1 | 38 | 4044 | 0.073 | 203 | 49919.4 | 49909.6 | 2.0e-4 | 49909.5 |
|
||
| rounded-box | fillet | 1 | 26 | 2540 | 0.054 | 148 | 23325.7 | 23340.5 | -6.3e-4 | 23340.8 |
|
||
| shallow-groove | near-tangent, boolean | 1 | 8 | 62 | 0.075 | 11 | 47795.2 | 47782.3 | 2.7e-4 | 47781.5 |
|
||
| sharp-wedge | sharp, thin-wall, sweepable | 1 | 5 | 8 | 0.083 | 2 | 3200.0 | 3200.0 | 0.0e0 | 3200.0 |
|
||
| sphere-on-plate | near-tangent, boolean | 1 | 12 | 2826 | 0.098 | 687 | 69353.3 | 69509.0 | -2.2e-3 | 69509.7 |
|
||
| spline-vase | organic | 1 | 11 | 3890 | 0.106 | 218 | 94891.2 | 94948.5 | -6.0e-4 | – |
|
||
| stepped-block | blocky, sharp | 1 | 14 | 96 | 0.078 | 32 | 47000.0 | 47000.0 | 0.0e0 | 47000.0 |
|
||
| thin-ribs | thin-wall, blocky | 1 | 26 | 92 | 0.119 | 65 | 32000.0 | 32000.0 | -4.5e-16 | 32000.0 |
|
||
| thin-wall-enclosure | thin-wall, blocky | 1 | 11 | 36 | 0.108 | 8 | 15564.0 | 15564.0 | 0.0e0 | 15564.0 |
|
||
| analytic-sphere | analytic | 1 | 6 | 2784 | 0.069 | 248 | 33353.4 | 33507.9 | -4.6e-3 | 33510.3 |
|
||
| analytic-torus | analytic, genus | 1 | 6 | 7230 | 0.109 | 338 | 37644.1 | 37893.7 | -6.6e-3 | 37899.3 |
|
||
| analytic-cylinder | analytic, sweepable | 1 | 4 | 1004 | 0.049 | 25 | 12533.1 | 12564.7 | -2.5e-3 | 12566.4 |
|
||
| analytic-pipe | analytic, genus, sweepable | 1 | 6 | 1448 | 0.104 | 42 | 94150.9 | 94238.0 | -9.3e-4 | 94247.8 |
|
||
| analytic-plate-hole | analytic, genus, sweepable | 1 | 8 | 112 | 0.224 | 11 | 98449.1 | 98429.5 | 2.0e-4 | 98429.2 |
|
||
|
||
## Categories
|
||
|
||
| category | stresses | parts |
|
||
|---|---|---|
|
||
| thin-wall | walls thin against the part's size | 6 |
|
||
| small-feature | features much smaller than the part | 1 |
|
||
| fillet | blends between faces | 2 |
|
||
| genus | through holes (genus > 0) | 7 |
|
||
| sharp | sharp edges and acute dihedral angles | 3 |
|
||
| near-tangent | faces meeting at a shallow angle | 2 |
|
||
| boolean | intersection curves from booleans | 3 |
|
||
| sweepable | extrusions and sweeps (one-to-one sweep meshing) | 8 |
|
||
| blocky | axis-aligned blocks (polycube-friendly) | 4 |
|
||
| organic | free-form, lofted or revolved spline surfaces | 2 |
|
||
| assembly | several bodies placed by component transforms | 1 |
|
||
| analytic | closed-form geometry for solver verification | 5 |
|
||
|
||
## Parts
|
||
|
||
- `bent-tube`: A 10 mm tube with a 1 mm wall, bent through R30: a thin-walled sweep along a line-arc-line path.
|
||
- `bolted-assembly`: A base plate with a clamp block component placed twice, once turned 90 degrees: bodies placed by component transforms.
|
||
- `cross-cylinders`: Two orthogonal R10 cylinders joined: equal radii, so the intersection curves cross at two singular points.
|
||
- `filleted-bracket`: An 8 mm L-bracket with an R6 inside fillet and a hole through each leg: a blend beside holes.
|
||
- `i-beam`: A 200 mm I-beam with 3 mm flanges and a 2 mm web: a long sweepable prism with thin walls.
|
||
- `loft-transition`: A 40 mm square lofted to an R15 circle 50 mm above: a ruled free-form surface between unlike sections.
|
||
- `perforated-plate`: A 3 mm plate perforated by a 6 x 4 grid of 6 mm holes: genus 24 in a thin sheet.
|
||
- `pinhole-block`: A 50 mm block drilled through by sixteen 0.6 mm pinholes: features 80 times smaller than the part, genus 16.
|
||
- `rounded-box`: A 40 x 30 x 20 box with every edge rounded R3: cylinder and sphere blends meeting at the corners.
|
||
- `shallow-groove`: A block with a 0.5 mm deep groove cut by an R30 cylinder: groove walls 10 degrees off the top face.
|
||
- `sharp-wedge`: A wedge whose faces meet at under 3 degrees: a sharp edge with a needle-thin cross-section.
|
||
- `sphere-on-plate`: A sphere sunk 0.1 mm into a plate: the faces meet at under 6 degrees around a 2 mm circle.
|
||
- `spline-vase`: A vase revolved from a spline profile: doubly curved faces of varying curvature around a closed axis.
|
||
- `stepped-block`: Three stacked blocks with a slot cut through the base: axis-aligned steps for polycube and octree meshers.
|
||
- `thin-ribs`: A 4 mm plate carrying five 0.8 mm ribs 20 mm tall: thin walls standing on a thicker base.
|
||
- `thin-wall-enclosure`: An 80 x 60 x 40 box shelled to 1 mm walls, open on top: thin walls over a large span.
|
||
- `analytic-sphere`: Sphere r 20: curvature everywhere, no edges.
|
||
- `analytic-torus`: Torus 30/8: genus 1 with doubly curved faces and no edges.
|
||
- `analytic-cylinder`: Cylinder r 10, h 40: the round bar of beam and torsion checks.
|
||
- `analytic-pipe`: Thick-walled pipe 20/30, length 60: the Lamé cylinder.
|
||
- `analytic-plate-hole`: Plate 200 x 100 x 5 with a 20 mm hole: the Kirsch plate.
|