|0.2.3||Apr 19, 2021|
|0.2.2||Dec 28, 2020|
|0.2.0||Nov 29, 2020|
|0.1.3||Nov 24, 2020|
#53 in Math
56 downloads per month
Used in nsi
This is an experiment to improve my understanding of iterators in Rust. It is based on Kit Wallace’s OpenSCAD code. As OpenSCAD Language is functional it lends itself well to translation into functional Rust.
use polyhedron_ops::Polyhedron; use std::path::Path; // Conway notation: gapcD let polyhedron = Polyhedron::dodecahedron() // D .chamfer(None, true) // c .propellor(None, true) // p .ambo(None, true) // a .gyro(None, None, true) // g .finalize(); // Export as ./polyhedron-gapcD.obj polyhedron.write_to_obj(&Path::new("."), false);
The above code starts from a dodecahedron and iteratively applies four operators.
The resulting shape is shown below.
This is in a rough shape. Probably buggy. Documentation sucks.
In short: use at your own risk.
nsi– Adds support for sending a polyhedron to an offline renderer via the ɴsɪ crate.
obj– Adds support for writing data out as Wavefront OBJ.
- Platonic solids
- Johnson Solids
- a - ambo
- b - bevel (equiv. to ta)
- c - chamfer
- d - dual
- e - expand (a.k.a. explode, equiv. to aa)
- g - gyro
- i - inset/loft (equiv. to x,N)
- j - join (equiv. to dad)
- k - kis
- M - medial (equiv. to dta)
- m - meta (equiv. to k,,3j)
- n - needle (equiv. to dt)
- o - ortho (equiv. to jj)
- p - propeller
- q - quinto
- r - reflect
- s - snub (equiv. to dgd)
- t - truncate (equiv. to dkd)
- v - subdivide (Catmull-Clark)
- w - whirl
- x - extrude
- z - zip (equiv. to dk)
- H - hollow (called ’intrude‘ in Wings3D)
- h - hexpropellor
- l - stellate
- z - triangulate
There is a playground example app to test things & have fun:
cargo run --release --example playground --features obj,nsi
If you want to produce images like the ones above you need to download the free version of the 3Delight renderer and install that. After that, run the example with ɴsɪ support:
cargo run --release --example playground --features nsi,obj
Use keys matching the operator name from the above list to apply.
Down to adjust the parameter of the the last operator.
Shift for 10× the change.
Delete undoes the last (and only the last) operation.
Enter to render with 3Delight (requires a 3Delight|ɴsɪ
Shift to render with 3Delight Cloud (requires
Space to save as
kiss3d for realtime preview which, for now,
limits meshes to 64k vertices. This means the preview will be broken/missing bits
once your mesh hits this limit.
Export & render will always yield a correct OBJ though. Which you can view in Wings, Blender or another DCC app.