Supplementary code and data for the manuscript Minimal surfaces from skeletal graphs: curve-driven distance fields for the generation, variation, and evaluation of quasi-minimal surfaces in architectural volumes (M. Aghaei Meibodi, DART Laboratory, Taubman College of Architecture and Urban Planning, University of Michigan), submitted to the Journal of Computational Design and Engineering.
MSSG generates quasi-minimal surfaces from two families of editable curves: the surface equidistant to both curve sets (the zero level set of the difference of their distance fields) is extracted by marching cubes — the organization behind triply periodic minimal surfaces (TPMS), but driven by curves rather than a fixed equation. The repository contains the reference implementation of the paper's pipeline (Algorithm 1, Listings 1–5), the interactive Rhino 8 / Grasshopper component, the full evaluation protocol (Section 6), and the precomputed benchmark outputs.
supplementary_code_updated/ all scripts + a file-by-file README
supplementary_data/ precomputed benchmark outputs (OBJ / PLY)
| File | Role |
|---|---|
mssg_pipeline.py |
Standalone reference pipeline (no Rhino): domain → voxel grid → difference field → marching cubes, plus Schwarz P / Schoen F-RD skeletal-graph builders and a morph helper. |
mssg_isosurface_gh.py |
Interactive implementation: Rhino 8 Grasshopper Python component (CPython 3; pinned # r: requirements install on first run). |
mssg_evaluate.py |
Evaluation protocol: jet-fitted and cotangent-Laplacian mean curvature, dimensionless H* statistics, topology checks, symmetric Hausdorff / mean distance, curvature-colored PLY export. |
mssg_batch.py |
Batch driver: weld, Taubin denoise, constrained fairing, and Section 6 metrics for every OBJ in a folder. |
conv_study.py |
Protocols P1 (resolution convergence) and P3 (orientation invariance) on the coded Schwarz P and F-RD tilings. |
p2_run.py |
Protocol P2 (morph-series continuity) on the series V reconstruction; produces p2_series.csv and p2_curve.png. |
test_estimator.py |
Curvature-estimator validation against analytic ground truth (sphere, catenoid). |
See supplementary_code_updated/README.md for full input/output details and the measured reference values (estimator validation numbers, nodal baselines, pipeline results).
| File | Content |
|---|---|
mssg_p_surface.obj |
Schwarz P quasi-minimal surface generated by mssg_pipeline.py (the pipeline's default output). |
p_mssg_curvature.ply |
Vertex-colored curvature map of the MSSG-generated Schwarz P surface (mssg_evaluate.py bisector). |
p_nodal_curvature.ply |
Vertex-colored curvature map of the nodal-approximation Schwarz P reference (mssg_evaluate.py nodal). |
pip install numpy scipy scikit-image # matplotlib optional, for figures
cd supplementary_code_updated
python3 test_estimator.py # validate the curvature estimator
python3 mssg_pipeline.py # generate mssg_p_surface.obj
python3 mssg_evaluate.py bisector # evaluate it (writes curvature PLY)The Grasshopper component (mssg_isosurface_gh.py) is pasted into a
Rhino 8 Python 3 script component; its inputs are box (Brep),
curves_A / curves_B (curve lists), res, iso, normalize,
field_sigma, smooth, exact, and it outputs mesh and info.
Its dependencies provision automatically on first solve.
- All quantities are in the world units of the input geometry; curvature statistics are reported dimensionless as H* = H·a (a = unit-cell edge).
- The pipeline is deterministic: identical inputs give identical meshes.
- Degenerate inputs (touching curve sets, empty regions) are reported, never silently repaired.
- DART-Research/BSSG — the BSSG Grasshopper plugin for Rhino 8, a packaged multi-component tool built on the same curve-driven distance-field approach.
Mania Aghaei Meibodi — DART Laboratory, Taubman College of Architecture and Urban Planning, University of Michigan. E-mail: meibodi@umich.edu