Files
jyvikoandClaude Opus 5.5 71cc39213c testkit: octree hex column in the meshing corpus
The corpus runs mesh.hex.octree's mesher on every part at 1/25 of its diagonal (the size of
the structured hex column) and reports hexahedra, the smallest and mean scaled Jacobian, the
mesh volume against SolidCraft's and the time; a part it cannot mesh gets the reason. The
column caps the elements at 500 000 so a part whose grid explodes is refused in seconds.
Loaded parts carry their bounding-box diagonal for the stages. docs/meshing/corpus.md
regenerated: 15 of 21 parts mesh, including filleted-bracket, rounded-box, sphere-on-plate
and the analytic sphere.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01NmAttHhUZTokgPeEJia8sm
2026-10-14 07:38:11 -04:00

14 KiB
Raw Permalink Blame History

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 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 433 4213.1 4159.4 1.3e-2 4159.8 ok, 2148 vertices 1 268 11.4 15550 2338 0 pass 609 sweep 192 0.859 0.997 63 no: Tube: meshing failed: the core's boundary has components of genus [0, 0, 0, 0], the part [1]: the part has walls 0.984 thick, thinner than 3 cells of the deepest level (0.536); use a smaller size, more levels, or a structured (swept) hex mesh 572
bolted-assembly assembly, blocky 3 22 284 0.117 54 33004.7 32999.0 1.7e-4 32998.9 ok, 144 vertices 0, 1, 1 104 0.7 690 181 0 pass 35 extrude 357 0.398 0.222 42 41344 0.323 0.961 2.0e-4 11261
cantilever-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.2 90 24 0 pass 3 extrude 336 0.707 0.707 34 no: Beam: meshing failed: the core's boundary has components of genus [0, 0], the part [0]: the part has walls 2.000 thick, thinner than 3 cells of the deepest level (0.924); use a smaller size, more levels, or a structured (swept) hex mesh 908
cross-cylinders boolean, sharp 1 10 1395 0.087 7820 32197.4 32357.8 -5.0e-3 32365.8 error: Cross: invalid boundary surface: 28 defects; triangles 142 and 184 are oriented inconsistently across edge 0–396 at (-15.488656021315903, 4.577998041166734, 7.853092194999726); triangles 184 and 239 are oriented inconsistently across edge 0–554 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 184 are oriented inconsistently across edge 0–396 at (-15.488656021315903, 4.577998041166734, 7.853092194999726); triangles 184 and 239 are oriented inconsistently across edge 0–554 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 184 are oriented inconsistently across edge 0–396 at (-15.488656021315903, 4.577998041166734, 7.853092194999726); triangles 184 and 239 are oriented inconsistently across edge 0–554 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 184 are oriented inconsistently across edge 0–396 at (-15.488656021315903, 4.577998041166734, 7.853092194999726); triangles 184 and 239 are oriented inconsistently across edge 0–554 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 540 0.088 388 32162.3 32145.0 5.4e-4 32144.8 ok, 268 vertices 2 135 1.4 5582 1613 0 pass 201 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 10213
filleted-bracket-blocks fillet, genus, partitioned 30 190 712 0.088 1006 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 1.6 1423 349 0 pass 56 blocks (30 cells, 45 shared faces) 4986 0.705 0.705 542 149898 0.156 0.935 9.7e-4 36760
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 94 24 0 pass 4 extrude 336 0.707 0.707 33 no: Beam: meshing failed: the core's boundary has components of genus [0, 0], the part [0]: the part has walls 2.000 thick, thinner than 3 cells of the deepest level (0.924); use a smaller size, more levels, or a structured (swept) hex mesh 874
loft-transition organic 1 6 292 0.075 56 56390.2 56450.6 -1.1e-3 – ok, 148 vertices 0 40 0.7 1329 256 1 pass 36 sweep 2873 0.189 0.189 329 67188 0.210 0.959 -1.2e-3 16559
perforated-plate genus, thin-wall, sweepable 1 54 1644 0.144 252 26822.2 26764.6 2.2e-3 26764.2 ok, 776 vertices 24 828 4.7 33611 9798 0 pass 1276 extrude 467 0.304 0.033 98 185128 0.300 0.958 2.5e-3 70289
pinhole-block small-feature, genus 1 38 4044 0.073 195 49919.4 49909.6 2.0e-4 49909.5 ok, 1992 vertices 16 1548 12.7 96411 30221 0 pass 4479 extrude 5236 0.408 0.392 587 no: Block: meshing failed: octree hex meshing failed after 2 builds: the feature corner at [9.76, 10.180000000000001, 10.526315789473685] has no vertex; refining for another build needs more than 250000 grid cells (the grid needs more than 250000 cell 2009
rounded-box fillet 1 26 2540 0.054 147 23325.7 23340.5 -6.3e-4 23340.8 ok, 1272 vertices 0 216 6.3 11701 1928 0 pass 387 no: Box: not supported yet: no structured hex method fits this body (extrude: cylindrical face 6 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 14 76430 0.561 0.985 -1.3e-3 26673
shallow-groove near-tangent, boolean 1 8 62 0.075 11 47795.2 47782.3 2.7e-4 47781.5 ok, 33 vertices 0 24 0.2 267 87 0 pass 12 extrude 1960 0.991 0.986 196 2926 0.301 0.920 3.4e-4 982
sharp-wedge sharp, thin-wall, sweepable 1 5 8 0.083 2 3200.0 3200.0 0.0e0 3200.0 ok, 6 vertices 0 9 0.0 11 3 0 pass 0 extrude 294 0.050 0.050 30 84952 0.003 0.980 -3.5e-2 23994
sphere-on-plate near-tangent, boolean 1 12 2826 0.098 686 69353.3 69509.0 -2.2e-3 69509.7 ok, 1415 vertices 0 124 5.9 4898 309 9 pass 227 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 10 25194 0.065 0.945 4.4e-2 20477
spline-vase organic 1 11 3890 0.106 217 94891.2 94948.5 -6.0e-4 – ok, 1947 vertices 0 243 8.6 12461 1512 0 pass 439 sweep 4554 0.649 0.649 522 no: Vase: limit reached: the grid needs more than 500000 cells 2308
stepped-block blocky, sharp 1 14 96 0.078 29 47000.0 47000.0 0.0e0 47000.0 ok, 48 vertices 1 60 0.4 223 41 0 pass 7 extrude 1416 0.999 0.999 137 52274 0.076 0.975 -2.7e-6 14558
thin-ribs thin-wall, blocky 1 26 92 0.119 62 32000.0 32000.0 -4.5e-16 32000.0 ok, 48 vertices 0 72 0.5 171 33 0 pass 7 extrude 777 0.844 0.844 76 no: Plate: limit reached: the grid needs more than 500000 cells 1111
thin-wall-enclosure thin-wall, blocky 1 11 36 0.108 8 15564.0 15564.0 0.0e0 15564.0 ok, 20 vertices 0 28 0.1 191 47 2 pass 5 extrude 894 0.297 0.297 89 no: Enclosure: meshing failed: the core's boundary has components of genus [0, 0], the part [0]: the part has walls 1.000 thick, thinner than 3 cells of the deepest level (0.479); use a smaller size, more levels, or a structured (swept) hex mesh 1623
analytic-sphere analytic 1 6 2784 0.069 247 33353.4 33507.9 -4.6e-3 33510.3 ok, 1394 vertices 0 96 5.9 4211 58 0 pass 266 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 23 2400 0.538 0.866 -1.3e-2 966
analytic-torus analytic, genus 1 6 7230 0.109 337 37644.1 37893.7 -6.6e-3 37899.3 ok, 3615 vertices 1 180 15.8 19790 466 0 pass 761 revolve 1134 0.706 0.706 168 18814 0.460 0.881 -1.2e-2 5646
analytic-cylinder analytic, sweepable 1 4 1004 0.049 26 12533.1 12564.7 -2.5e-3 12566.4 ok, 504 vertices 0 106 2.7 7437 1568 0 pass 267 extrude 3200 0.707 0.707 331 2424 0.532 0.919 -9.1e-3 699
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 3.8 6238 1340 0 pass 272 extrude 1288 0.998 0.998 145 53680 0.520 0.944 -7.8e-4 14728
analytic-plate-hole analytic, genus, sweepable 1 8 112 0.224 11 98449.1 98429.5 2.0e-4 98429.2 ok, 56 vertices 1 62 0.4 1868 543 0 pass 53 extrude 321 0.320 0.142 38 163664 0.309 0.989 2.2e-4 51714

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 of i-beam lying 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.