135 lines
3.8 KiB
Rust
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
|