Paper folder provides a way to work with FOLD (Flexible Origami List Datastructure).
Draw crease patterns and simulate them, freeze the intermediate results as key frames.
Export precomputed folding animation as an easy to parse series of meshes.
My research curiosity here is to classify locally flat-foldable graphs,
with the condition that their dual graphs also retain interior flat-foldability.
One example is a hyperbolic paraboloid origami without a central square.
- FOLD specification (version 1.2) validation.
- Convert from and to FOLD, SVG, OBJ files.
- Generate locally flat-foldable SVG crease patterns.
| State | Module | Commentary |
|---|---|---|
| 🟨 | collections | Feels a bit undercooked. |
| ✅ | definitions | Modern, Rust-like syntax sugar. |
| 🟨 | fold_deserialization | No support for SVG triangulation yet. Math module needs BVH2 and Bezier2. |
| ✅ | fold_generation | Desperate for clever math optimizations. |
| ❌ | fold_graph | Work in progress! Basic methods only. Math module needs 3x3 covariance matrix. fold_graph_VV_from_FV 2D example.fold_graph_VF_from_VV complex walk.fold_graph_EF_from_FV more hard math.fold_graph_FV_* family not implemented. |
| 🟨 | fold_serialization | OBJ writing is very primitive. Unique vertices are not tracked properly. SVG could support more visual modes. |
| ❌ | fold_simulation | Considering a different approach. More research is necessary. |
| ✅ | fold_specification | Pretty much complete. Supports generic mesh arrays. |
| ✅ | fold_validation | 100% bullet-proof, very fast. |
| ✅ | lua_modules | Lua bindings, see the example. |
| ✅ | lua_scripts | Command line parsing routines. |
| 🟨 | math | Needs full BVH2, BVH3 accelerators. Matrix, Plane, Bezier curves are missing. Triangle/Polygon helpers would be nice. |
Run the command inside a terminal.
make && \
./paper-folder validate \
"assets/rabbit-ear/kissing-squares.fold"⛔INVALID: "assets/rabbit-ear/kissing-squares.fold"
⚠️frame:0: faces_vertices and faces_edges mismatching winding
⚠️frame:0: faces_vertices and faces_faces mismatching winding
⚠️frame:0: faces_edges and faces_faces mismatching winding