Skip to content

Results at a glance (no Grasshopper required)

See what the plugin does without opening a single .gh. All numbers are machine-measured (live solves / headless harness / test suite). Style: short sentences, no em dashes.

Hero: fracture modelling -> block packing

fracture block packing

Staged wire-saw guillotine recovery of intact blocks from a fractured bench: blue/green blocks are the recovered, saw-separable stock; the green surfaces are the mapped fracture planes the cut avoids; orange marks the kerf/edge blocks. Mode 5 (staged guillotine) = 49.3% yield at 100% saw-separable; mode 4 (voxel-DLBF) = 53.3% yield, not saw-cuttable. Workflows: 03_quarry_to_slabs, 03_gpr_fracture_granite.

Example workflows (live-built, correct per-application scale, on the z=0 ground)

Each was built + solved live, captured, and set to its real physical scale (meters for slab / block / monument; millimetres for mosaic / vessel). Full set + numbers in ../../examples/; scale + tolerance basis in ../../wiki/research/tolerances_dimensions_slm_roses.md.

2D slab nest (m) 3D quarry block (m) Trencadis mosaic (mm)
2D 3D mosaic
3.2x2.0 m slab, 18 parts, 0-overlap (exact NFP-BLF) 3.0x1.5x1.5 m block, 12/12 packed (guillotine) 1100 mm panel, 100 shards, 5 mm grout
Surfaces from a solid (mm) Trencadis on the twist (mm) Kintsugi reassembly (mm)
surf clad kintsugi
1.2x1.2x3.5 m monument, 6 surfaces (CGAL angle split) 408 cladding shards, 4 mm grout 2 fragments meet at the crack (point-cloud display), verifier 0.71 STRONG

Do they work at their scales? Yes, and they are performant

Verified live at each example's physical scale (doc units meters for site/quarry, millimetres for shop):

Workflow Scale Result Solve time
2D slab nest 3.2x2.0 m 18 parts, 0-overlap ~0.2 s
3D quarry block 3.0x1.5x1.5 m 12/12 packed < 0.1 s
Trencadis mosaic 1100 mm 100/100 placed ~0.26 s
Surface segmentation 1.2x1.2x3.5 m 6 surfaces ~0.01 s
Kintsugi (Port mode) natural (auto-scale off) 2/2 fragments joined at crack, verifier 0.71 ~30 s (GPU diffusion, by design)

Performance is scale-robust: the NFP / Clipper cost is driven by vertex count, not coordinate magnitude, and the integer scaling is int64-safe at both metre and millimetre scale near the origin. The component defaults self-scale (auto geometric tolerance = scale-relative; auto 3D cell size; strict no-overlap), so no per-scale tuning is needed. The one case that DOES need care is site / UTM layout (far from origin, 1e5-1e6 m), where float precision drops; the fix is recenter-before-compute in the shared GeometryNumerics layer (study section 5B), relevant only when packing on real-world coordinates, not the bundled examples.

Benchmark studies (headless harness)

2D selection 2D stock-utilization: green = valid (0-overlap), red = invalid. The evolved exact NFP-BLF is the only 0-overlap packer crossing 80% with holes (82.0% oversub, 84.7% L+hole, 89.6% hard 3-hole).

oversub bars

hole-aware h2h Hole-aware nesting (HoleNest / ContactNfpHoleNester) vs the OpenNest reference physics nester, independently shapely-validated (2026-06-13 h2h). HoleNest wins the rect fast-path (5.2 vs 71 ms) and the tight density contest (0.74 vs 0.56; 12 vs 9 placed) and matches validity everywhere; it trades slower general-irregular NFP time. Real packed sheets: hole-aware layouts

2026-07-05 re-match vs OpenNest 2.89's NEW native NFP engine (nfp_nest.dll, exactNfp=1, 5 s GA budget, rotations 4, seed 42; both engines in one Rhino 8 process; one shared hole-aware boolean-intersection validity checker applied to both): shields-7 concave - both 7/7 valid, CNH 853 ms vs 5000 ms; blobs-25 tight 95x70 - CNH K=1 17/25 util 0.775 VALID 770 ms, K=4 18/25 util 0.762 VALID 3.0 s, OpenNest 18/25 util 0.695 INVALID (1965 sq-units true overlap + 5 parts out of sheet; identical at curveTolerance 0.05); true-hole instance (sheet defect + 4 hosts with part-holes + 8 fillers) - both 12/12 valid, CNH <1 ms (rect-shelf) vs 5001 ms. CNH = equal-or-better placements among VALID layouts, +8 pp utilization on the tight instance, 6-5000x faster, exact 0-overlap.

2026-07-05 consolidation, field-validated on canvas: Sheet Nest (Live) (async, Run-gated) nests 240 parts into an irregular concave sheet with boundary mode ON in 7.3 s end to end (single pass; +native-nfp lane on the post-rim bulk) while drawing the partial layout progressively in the viewport (~5 Hz). Boundary mode ("boundary hug") seats parts against the sheet rim scored by measured outline contact at verified NFP poses, spread by arc-interval occupancy, with bottom-left fallback below the contact threshold; jobs over 120 parts clamp multi-start to one pass (noted in the Report). Robot handoff verified against the installed visose/Robots plugin: Planes to Robot Targets output ingested by Create Target producing real GH_Target objects (Joint/Linear motion mapping intact).

3d volumetric 3D volumetric: Dlbf best-of-orientation 70.4% (vs 66.4% baseline); TreePackForest 37.2% (100% guillotine); masonry BestFit 65.2% / Ashlar 60.8%. Domains are not cross-comparable. Those are bbox-volume figures.

2026-07-06, first HEADLESS C# honest-density measurement (no Rhino): the shipping GreedyMeshHeightmapPacker on the 16 real ETH1100 subset stones (data/eth1100_subset, loaded by the Rhino-free ObjMeshReader), scored with the new signed-tetra MeshVolume, places 16/16 and reports rho_honest = 0.073 vs rho_bbox = 0.195 - a 2.68x bbox over-report. The over-report factor is the container-independent finding (a property of the irregular stones), and it is the measured C# confirmation that bbox-based density figures over-state true fill. Test: ETH C# honest 3D density headless bench (H1). This closes the measurement-infrastructure half of risk H1; a container-tuned per-packer comparison at verified-zero interpenetration is the remaining follow-up (issue #13).

packbench masonry quarry fracture recovery RecoveryCascade recovers +21% over single-scale BlockCutOpt by re-cutting cracked blocks at finer scales.

Test + build health

1056 tests pass, 0 fail, 154 skip (2026-07-05) from a clean clone (FRAHAN_SKIP_NATIVE=1); skips are Rhino-runtime + optional-dataset gates. All projects build green. See ../INSTALL.md.

Where the numbers come from

../../wiki/research/packing/: PACK2D_STUDY_REPORT, PACK3D_STUDY_REPORT, ROSES_2D_PACKER_GUIDE, MASONRY_QUARRY_DECISION, SYNTHESIS_2D/3D/BEYOND_BLF. Tolerance + scale basis: ../../wiki/research/tolerances_dimensions_slm_roses.md. Regenerate with tools/Frahan.StonePack.Harness --packbench / --pack2dstudy.