This project generates 3D-printable voronoi shell geometry from parametric inputs. Each run produces a unique shape driven by radius, spacing, seed, and extrusion parameters.
- Lofted surface — 8 circles at different radii stacked along Z, lofted into a surface
- Voronoi cells — random seed points generate bounded voronoi cells
- Intersection curves — voronoi cells intersect the lofted surface, producing polyline curves
- Per-cell solids — each cell patch is scaled, its open edges lofted into walls, and closed into a watertight solid
- Plane face offset — faces at the cutting plane (x=0) are offset by -2mm to prevent thin-wall artifacts
- Assembly — all cell solids are combined, normals oriented outward, and exported as STL via trimesh
- Auto-retry — if the mesh fails volume validation, the pipeline retries with different voronoi seeds (up to 10 attempts)
| Axis | Max size (units) | Real-world note |
|---|---|---|
| X / Y | 150 | Treat as 150 mm in the plane |
| Z | 150 | Height along Z (7 spacings) |
Circle radius is constrained to 5–75 units.
| Parameter | Range / rule |
|---|---|
| Radius | 5.00–75.00 (three decimals), one per circle |
| Spacing | 4.00–21.43 between circles |
| Points | 2–300 voronoi seed points |
| Seed | 0–9999 random seed |
| Extrusion | -3.00 to 3.00 |
| Scale X/Y | 0.10–1.50 non-uniform XY scaling |
Slider values can be saved/loaded via the Config dropdown in the notebook. Configs are stored as JSON in the configs/ directory with timestamps. Duplicate configs are not saved.
data/lofted_surface_inputs.json— default radii and spacingdata/voronoi_points_inputs.json— default seed count and random seedsrc/compass_web/lofted_surface_voronoi.py— all geometry functionslofted_surface_voronoi_generation.ipynb— interactive notebookexports/— timestamped STL outputs (gitignored)configs/— saved parameter configs (gitignored)