prosha/src/lib.rs
2021-07-27 13:41:44 -04:00

135 lines
3.8 KiB
Rust

pub mod mesh;
#[macro_use]
pub mod prim;
#[macro_use]
pub mod util;
pub mod examples;
pub mod xform;
//pub use crate::examples;
//pub use crate::openmesh::test_thing;
#[cfg(test)]
mod tests {
use super::*;
use nalgebra::*;
use std::rc::Rc;
use std::time::Instant;
#[test]
fn xform_order() {
let geom = prim::cube();
let y = &Vector3::y_axis();
let dx = 4.0;
let r = -0.5;
let trans = xform::Transform::new().translate(dx, 0.0, 0.0);
let rot = xform::Transform::new().rotate(y, r);
let xf1 = trans.rotate(y, r);
let xf2 = rot.translate(dx, 0.0, 0.0);
// Rotate entire space, *then* translate in that rotated plane:
geom.transform(&trans)
.transform(&rot)
.write_stl_file("xform_apply_trans_rot.stl")
.unwrap();
geom.transform(&(rot * trans))
.write_stl_file("xform_mul_rot_trans.stl")
.unwrap();
geom.transform(&xf2)
.write_stl_file("xform_rot_trans.stl")
.unwrap();
// Translate cube, *then* rotate it:
geom.transform(&rot)
.transform(&trans)
.write_stl_file("xform_apply_rot_trans.stl")
.unwrap();
geom.transform(&(trans * rot))
.write_stl_file("xform_mul_trans_rot.stl")
.unwrap();
geom.transform(&xf1)
.write_stl_file("xform_trans_rot.stl")
.unwrap();
}
// TODO: These tests don't test any conditions, so this is useful
// short-hand to run, but not very meaningful as a test.
#[test]
fn barbs() {
let name = "barbs";
println!("---------------------------------------------------");
let b = examples::Barbs::new();
let m = b.run(100);
println!("Got {} verts...", m.verts.len());
let fname = format!("{}.stl", name);
println!("Writing {}...", fname);
m.write_stl_file(&fname).unwrap();
}
#[test]
fn tree_thing1() {
let name = "tree_thing";
println!("---------------------------------------------------");
let b = examples::TreeThing::new(0.6, 10);
let m = b.run();
println!("Got {} verts...", m.verts.len());
let fname = format!("{}.stl", name);
println!("Writing {}...", fname);
m.write_stl_file(&fname).unwrap();
}
#[test]
fn tree_thing2() {
let name = "tree_thing2";
println!("---------------------------------------------------");
let b = examples::TreeThing::new(0.6, 10);
let m = b.run2();
println!("Got {} verts...", m.verts.len());
let fname = format!("{}.stl", name);
println!("Writing {}...", fname);
m.write_stl_file(&fname).unwrap();
}
#[test]
fn sierpinski() {
let name = "sierpinski";
println!("---------------------------------------------------");
let b = examples::Sierpinski::new(0.50, 0.10, 0.0);
//let b = examples::Sierpinski::new(0.51, 0.10, 0.1);
let m = b.run();
println!("Got {} verts...", m.verts.len());
let fname = format!("{}.stl", name);
println!("Writing {}...", fname);
m.write_stl_file(&fname).unwrap();
}
#[test]
fn nested_spiral() {
let name = "nested_spiral";
println!("---------------------------------------------------");
let b = examples::NestedSpiral::new();
//let b = examples::Sierpinski::new(0.51, 0.10, 0.1);
let m = b.run();
println!("Got {} verts...", m.verts.len());
let fname = format!("{}.stl", name);
println!("Writing {}...", fname);
m.write_stl_file(&fname).unwrap();
}
}
// need this for now:
// cargo test -- --nocapture
// or: cargo test cube_thing -- --nocapture