forked from 1b-agent/fieldcraft-upstream
Co-Authored-By: Claude Opus 5.5 <[email protected]> Claude-Session: https://claude.ai/code/session_01UhhZMBTviDQxZvwnyP89fo
15 KiB
15 KiB
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³ | boundary | genus | feature edges | check ms | CDT tets | Steiner | cavities | tet gate | CDT ms | quality tets | min dihedral ° | max dihedral ° | min radius ratio | slivers CDT → mesh | quality gate | quality ms | hex | hex elements | hex8 min SJ | hex20 min SJ | hex ms | octree hexes | min SJ | mean SJ | hex vol. diff | octree ms |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| bent-tube | sweepable, thin-wall, genus | 1 | 18 | 4296 | 0.121 | 458 | 4213.1 | 4159.4 | 1.3e-2 | 4159.8 | ok, 2148 vertices | 1 | 268 | 14.5 | 15300 | 2338 | 0 | 20 flat | 600 | 25100 | 27.4 | 149.0 | 0.091 | 3208 → 0 | pass | 3687 | sweep | 192 | 0.859 | 0.997 | 65 | no: Tube: meshing failed: octree hex meshing failed after 2 builds: the core's boundary has components of genus [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | 2565 | |||
| bolted-assembly | assembly, blocky | 3 | 22 | 284 | 0.117 | 57 | 33004.7 | 32999.0 | 1.7e-4 | 32998.9 | ok, 144 vertices | 0, 1, 1 | 104 | 0.7 | 687 | 181 | 0 | pass | 34 | 14750 | 33.0 | 143.2 | 0.236 | 189 → 0 | pass | 1270 | extrude | 377 | 0.446 | 0.446 | 2462 | 41344 | 0.323 | 0.961 | 2.0e-4 | 11596 |
| cantilever-i-beam | sweepable, thin-wall | 1 | 14 | 44 | 0.208 | 4 | 61600.0 | 61600.0 | 0.0e0 | 61600.0 | ok, 24 vertices | 0 | 36 | 0.2 | 90 | 24 | 0 | pass | 3 | 6357 | 29.9 | 149.4 | 0.070 | 70 → 0 | pass | 1373 | extrude | 480 | 0.308 | 0.308 | 55 | 351220 | 0.308 | 0.977 | -9.1e-14 | 208396 |
| cross-cylinders | boolean, sharp | 1 | 10 | 1539 | 0.087 | 6789 | 32196.4 | 32357.4 | -5.0e-3 | 32365.8 | error: Cross: invalid boundary surface: 28 defects; triangles 142 and 254 are oriented inconsistently across edge 0–396 at (-15.488656021315903, 4.577998041166734, 7.853092194999726); triangles 251 and 254 are oriented inconsistently across edge 0–553 at (-18.75000000000002, 5.634596901641276, 7.632255089815496); edge 103–108 at (-0.16007784063084018, 0.03984236936862052, 9.998639270596865) is shared by 3 triangles; … | error: Cross: invalid boundary surface: 28 defects; triangles 142 and 254 are oriented inconsistently across edge 0–396 at (-15.488656021315903, 4.577998041166734, 7.853092194999726); triangles 251 and 254 are oriented inconsistently across edge 0–553 at (-18.75000000000002, 5.634596901641276, 7.632255089815496); edge 103–108 at (-0.16007784063084018, 0.03984236936862052, 9.998639270596865) is shared by 3 triangles; … | error: Cross: invalid boundary surface: 28 defects; triangles 142 and 254 are oriented inconsistently across edge 0–396 at (-15.488656021315903, 4.577998041166734, 7.853092194999726); triangles 251 and 254 are oriented inconsistently across edge 0–553 at (-18.75000000000002, 5.634596901641276, 7.632255089815496); edge 103–108 at (-0.16007784063084018, 0.03984236936862052, 9.998639270596865) is shared by 3 triangles; … | error: Cross: invalid boundary surface: 28 defects; triangles 142 and 254 are oriented inconsistently across edge 0–396 at (-15.488656021315903, 4.577998041166734, 7.853092194999726); triangles 251 and 254 are oriented inconsistently across edge 0–553 at (-18.75000000000002, 5.634596901641276, 7.632255089815496); edge 103–108 at (-0.16007784063084018, 0.03984236936862052, 9.998639270596865) is shared by 3 triangles; … | error: Cross: invalid boundary surface: 28 defects; triangles 142 and 254 are oriented inconsistently across edge 0–396 at (-15.488656021315903, 4.577998041166734, 7.853092194999726); triangles 251 and 254 are oriented inconsistently across edge 0–553 at (-18.75000000000002, 5.634596901641276, 7.632255089815496); edge 103–108 at (-0.16007784063084018, 0.03984236936862052, 9.998639270596865) is shared by 3 triangles; … | |||||||||||||||||||||
| filleted-bracket | fillet, genus, sweepable | 1 | 13 | 544 | 0.088 | 453 | 32162.3 | 32145.0 | 5.4e-4 | 32144.8 | ok, 270 vertices | 2 | 135 | 1.9 | 5576 | 1613 | 0 | pass | 206 | 15665 | 28.4 | 149.2 | 0.097 | 2158 → 0 | pass | 2757 | no: Bracket: not supported yet: no structured hex method fits this body (extrude: cylindrical face 8 is not parallel to the direction; sweep: from face 1: linking face 6 has 2 boundary loops (periodic or holed linking faces are not swept); from face 6: | 5 | 30676 | 0.305 | 0.963 | 8.3e-4 | 16975 | |||
| filleted-bracket-blocks | fillet, genus, partitioned | 30 | 190 | 712 | 0.088 | 2081 | 32169.8 | 32145.1 | 7.7e-4 | 32144.8 | ok, 416 vertices | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 | 474 | 3.9 | 1414 | 349 | 0 | 2 flat | 93 | 176280 | 33.6 | 142.7 | 0.190 | 282 → 0 | pass | 15596 | blocks (30 cells, 45 shared faces) | 4986 | 0.705 | 0.705 | 836 | 149898 | 0.157 | 0.935 | 9.7e-4 | 44280 |
| i-beam | sweepable, thin-wall | 1 | 14 | 44 | 0.208 | 3 | 61600.0 | 61600.0 | 0.0e0 | 61600.0 | ok, 24 vertices | 0 | 36 | 0.1 | 91 | 24 | 0 | 1 flat | 4 | 6154 | 26.4 | 153.6 | 0.053 | 71 → 0 | pass | 1514 | extrude | 480 | 0.308 | 0.308 | 59 | 351220 | 0.308 | 0.977 | 2.3e-13 | 116641 |
| loft-transition | organic | 1 | 6 | 292 | 0.075 | 60 | 56390.2 | 56450.6 | -1.1e-3 | – | ok, 148 vertices | 0 | 40 | 0.8 | 1328 | 256 | 1 | pass | 37 | 9691 | 31.2 | 140.6 | 0.133 | 591 → 0 | pass | 1116 | sweep | 2873 | 0.189 | 0.189 | 339 | 67188 | 0.210 | 0.959 | -1.2e-3 | 16530 |
| perforated-plate | genus, thin-wall, sweepable | 1 | 54 | 1644 | 0.144 | 236 | 26822.2 | 26764.6 | 2.2e-3 | 26764.2 | ok, 776 vertices | 24 | 828 | 5.2 | 33560 | 9798 | 0 | 1 flat | 1293 | 44028 | 27.8 | 148.7 | 0.126 | 11707 → 0 | pass | 8434 | extrude | 768 | 0.496 | 0.496 | 224 | 185128 | 0.300 | 0.958 | 2.5e-3 | 72087 |
| pinhole-block | small-feature, genus | 1 | 38 | 4044 | 0.073 | 903 | 49919.4 | 49909.6 | 2.0e-4 | 49909.5 | ok, 1992 vertices | 16 | 1548 | 14.4 | 96203 | 30221 | 0 | 17 flat | 6474 | 843460 | 14.0 | 166.0 | 0.000 | 65489 → 0 | pass | 124949 | extrude | 5236 | 0.408 | 0.392 | 1368 | no: Block: limit reached: the grid has 675798 elements; the limit is 500000 | 2246 | |||
| rounded-box | fillet | 1 | 26 | 2540 | 0.054 | 157 | 23325.7 | 23340.5 | -6.3e-4 | 23340.8 | ok, 1272 vertices | 0 | 216 | 7.2 | 11348 | 1906 | 0 | 18 flat | 385 | 62949 | 24.8 | 160.2 | 0.001 | 8780 → 0 | pass | 24516 | no: Box: not supported yet: no structured hex method fits this body (extrude: cylindrical face 7 is not parallel to the direction; sweep: from face 0: 12 faces are not on the sweep path; from face 5: 12 faces are not on the sweep path; revolve: plan | 21 | 76430 | 0.561 | 0.985 | -1.3e-3 | 39852 | |||
| shallow-groove | near-tangent, boolean | 1 | 8 | 62 | 0.075 | 41 | 47795.2 | 47782.3 | 2.7e-4 | 47781.5 | ok, 33 vertices | 0 | 24 | 0.2 | 266 | 87 | 0 | pass | 14 | 6318 | 37.8 | 136.6 | 0.297 | 85 → 0 | pass | 811 | extrude | 1960 | 0.991 | 0.986 | 295 | 2926 | 0.301 | 0.920 | 3.4e-4 | 1525 |
| sharp-wedge | sharp, thin-wall, sweepable | 1 | 5 | 8 | 0.083 | 10 | 3200.0 | 3200.0 | 0.0e0 | 3200.0 | ok, 6 vertices | 0 | 9 | 0.1 | 11 | 3 | 0 | pass | 1 | 1273 | 2.9 | 176.6 | 0.003 | 3 → 24 | pass | 544 | extrude | 1674 | 0.014 | 0.014 | 415 | 84952 | 0.003 | 0.980 | -3.5e-2 | 35349 |
| sphere-on-plate | near-tangent, boolean | 1 | 12 | 2826 | 0.098 | 1306 | 69353.3 | 69509.0 | -2.2e-3 | 69509.7 | ok, 1415 vertices | 0 | 124 | 7.9 | 4370 | 309 | 9 | pass | 298 | 11792 | 32.7 | 141.3 | 0.235 | 3001 → 0 | pass | 2893 | no: Plate: not supported yet: no structured hex method fits this body (extrude: face 6 is curved across the direction; sweep: from face 0: 6 faces are not on the sweep path; from face 5: linking face 11 has 2 boundary loops (periodic or holed linking | 17 | 25194 | 0.065 | 0.945 | 4.3e-2 | 31594 | |||
| spline-vase | organic | 1 | 11 | 3890 | 0.106 | 214 | 94891.2 | 94948.5 | -6.0e-4 | – | ok, 1947 vertices | 0 | 243 | 10.3 | 11859 | 1512 | 0 | 72 flat | 468 | 38225 | 29.1 | 150.8 | 0.033 | 7206 → 0 | pass | 15955 | sweep | 4536 | 0.665 | 0.665 | 555 | 43579 | 0.387 | 0.927 | -1.5e-3 | 18037 |
| stepped-block | blocky, sharp | 1 | 14 | 52 | 0.078 | 556 | 47000.0 | 47000.0 | 0.0e0 | 47000.0 | ok, 26 vertices | 1 | 36 | 0.3 | 143 | 32 | 0 | pass | 7 | 5063 | 38.3 | 139.2 | 0.225 | 15 → 0 | pass | 677 | extrude | 1416 | 1.000 | 1.000 | 342 | no: Steps: meshing failed: octree hex meshing failed after 2 builds: 4 elements fail the certified validity check; refining for another build needs more than 250000 grid cells (the grid needs more than 250000 cells) | 15666 | |||
| thin-ribs | thin-wall, blocky | 1 | 26 | 92 | 0.119 | 619 | 32000.0 | 32000.0 | -4.5e-16 | 32000.0 | ok, 48 vertices | 0 | 72 | 0.7 | 171 | 33 | 0 | pass | 13 | 23922 | 24.2 | 155.7 | 0.058 | 141 → 0 | pass | 9970 | extrude | 1659 | 0.124 | 0.124 | 351 | no: Plate: limit reached: the part has walls 0.8000 thick, which 3 cells across need cells of 0.2667: 3 levels below a size of 4.7625, more than 2588948 grid cells by level 3; or 2 levels below a size of 2.4000, more than 1284890 grid cells by level 2 | 234 | |||
| thin-wall-enclosure | thin-wall, blocky | 1 | 11 | 28 | 0.108 | 54 | 15564.0 | 15564.0 | 0.0e0 | 15564.0 | ok, 16 vertices | 0 | 24 | 0.1 | 80 | 18 | 4 | pass | 3 | 19237 | 23.8 | 153.6 | 0.037 | 78 → 0 | pass | 6188 | extrude | 926 | 0.707 | 0.707 | 118 | no: Enclosure: limit reached: the part has walls 1.0000 thick, which 3 cells across need cells of 0.3333: 3 levels below a size of 4.3081, more than 3945836 grid cells by level 3; or 2 levels below a size of 3.0000, more than 1023496 grid cells by level 2 | 183 | |||
| analytic-sphere | analytic | 1 | 6 | 2784 | 0.069 | 309 | 33353.4 | 33507.9 | -4.6e-3 | 33510.3 | ok, 1394 vertices | 0 | 96 | 7.7 | 3671 | 58 | 0 | pass | 334 | 10074 | 37.0 | 140.1 | 0.230 | 2448 → 0 | pass | 1958 | no: Sphere: not supported yet: no structured hex method fits this body (extrude: no direction to try; sweep: no planar face to sweep from; revolve: no axis to try; mapped: meshing failed: meshing failed: mesh validity gate: 8 inverted or degenerate ele | 28 | 2400 | 0.538 | 0.866 | -1.3e-2 | 1033 | |||
| analytic-torus | analytic, genus | 1 | 6 | 7230 | 0.109 | 317 | 37644.1 | 37893.7 | -6.6e-3 | 37899.3 | ok, 3615 vertices | 1 | 180 | 18.5 | 18528 | 466 | 0 | 9 flat | 812 | 22988 | 33.4 | 145.0 | 0.154 | 12988 → 0 | pass | 4503 | revolve | 1080 | 0.834 | 0.834 | 165 | 18814 | 0.460 | 0.881 | -1.2e-2 | 5674 |
| analytic-cylinder | analytic, sweepable | 1 | 4 | 1004 | 0.049 | 26 | 12533.1 | 12564.7 | -2.5e-3 | 12566.4 | ok, 504 vertices | 0 | 106 | 3.0 | 7382 | 1568 | 0 | pass | 269 | 20056 | 26.2 | 152.2 | 0.089 | 4373 → 0 | pass | 6907 | extrude | 3200 | 0.850 | 0.850 | 346 | 2424 | 0.532 | 0.919 | -9.1e-3 | 701 |
| analytic-pipe | analytic, genus, sweepable | 1 | 6 | 1448 | 0.104 | 44 | 94150.9 | 94238.0 | -9.3e-4 | 94247.8 | ok, 724 vertices | 1 | 220 | 4.3 | 6193 | 1340 | 0 | pass | 280 | 16627 | 31.4 | 145.5 | 0.150 | 1445 → 0 | pass | 2490 | extrude | 1288 | 0.998 | 0.998 | 149 | 53680 | 0.520 | 0.944 | -7.8e-4 | 21679 |
| analytic-plate-hole | analytic, genus, sweepable | 1 | 8 | 112 | 0.224 | 65 | 98449.1 | 98429.5 | 2.0e-4 | 98429.2 | ok, 56 vertices | 1 | 62 | 0.9 | 1848 | 543 | 0 | pass | 87 | 2394 | 31.4 | 145.3 | 0.230 | 342 → 0 | pass | 904 | extrude | 488 | 0.642 | 0.655 | 403 | 163664 | 0.309 | 0.989 | 2.2e-4 | 112185 |
Categories
| category | stresses | parts |
|---|---|---|
| thin-wall | walls thin against the part's size | 7 |
| small-feature | features much smaller than the part | 1 |
| fillet | blends between faces | 3 |
| genus | through holes (genus > 0) | 8 |
| 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) | 9 |
| blocky | axis-aligned blocks (polycube-friendly) | 4 |
| organic | free-form, lofted or revolved spline surfaces | 2 |
| assembly | several bodies placed by component transforms | 1 |
| partitioned | split into cells that each mesh as a mapped block (conforming multi-block hex) | 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.cantilever-i-beam: The 200 mm I-beam ofi-beamlying along X with its web upright (Z up): a sweep along a horizontal axis, and the cantilever of the README demo.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.filleted-bracket-blocks: The filleted bracket split into 30 cells with SolidCraft's Split Body (three slabs across its width, the corner halved along its diagonal, an O-grid of four cells round each hole) so that every cell is a mapped block: conforming multi-block hex meshing.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.