From 003f2523860b53c7b9f3032c37c881e3e38eb7df Mon Sep 17 00:00:00 2001 From: Chris Hodapp Date: Sun, 9 Feb 2020 10:26:18 -0500 Subject: [PATCH] Fixed small connect_single bug --- README.md | 5 ++--- src/main.rs | 22 +++++++++++++--------- 2 files changed, 15 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index efe8dd1..3f89f79 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,7 @@ - `curve_horn_*`: actually *combine* geometry properly. -- https://docs.rs/nalgebra/0.19.0/nalgebra/geometry/struct.Translation.html#method.prepend_translation - - see this for how to create Matrix4 from a translation -- Try a translation on an OpenMesh, and then try connect_single! +- https://docs.rs/nalgebra/0.19.0/nalgebra/geometry/index.html - try + some other transformations from here (with to_homogeneous) - Look at everything in README.md in automata_scratch. - Implement some of the tougher examples from the above too, e.g. the diff --git a/src/main.rs b/src/main.rs index 9202736..79cabc6 100644 --- a/src/main.rs +++ b/src/main.rs @@ -47,7 +47,7 @@ impl OpenMesh { } fn connect_single(&self, other: &OpenMesh) -> OpenMesh { - let mut v: Vec = vec![vertex(0.0,0.0,0.0); self.verts.len()]; + let mut v: Vec = vec![vertex(0.0,0.0,0.0); self.idxs_body.1]; // Start out by cloning just entrance & body vertices: v.copy_from_slice(&self.verts[0..self.idxs_body.1]); let mut f = self.faces.clone(); @@ -485,12 +485,13 @@ fn main() { vertex(1.0, 1.0, 1.0), ], faces: vec![ - 0, 3, 1, - 0, 2, 3, + // End caps disabled for now to test connect_single + // 0, 3, 1, + // 0, 2, 3, 1, 7, 5, 1, 3, 7, - 5, 6, 4, - 5, 7, 6, + // 5, 6, 4, + // 5, 7, 6, 4, 2, 0, 4, 6, 2, 2, 7, 3, @@ -498,14 +499,16 @@ fn main() { 0, 1, 5, 0, 5, 4, ], - idxs_entrance: vec![], - idxs_exit: vec![], - idxs_body: (0, 0), + idxs_entrance: vec![0, 1, 2, 3], + idxs_exit: vec![4, 5, 6, 7], + idxs_body: (4, 4), }; - let xform = nalgebra::geometry::Translation3::new(2.0, 0.0, 0.0).to_homogeneous(); + let xform = nalgebra::geometry::Translation3::new(0.0, 0.0, 1.0).to_homogeneous(); let m2 = m.transform(xform); + let m3 = m.connect_single(&m2); + let try_save = |m: OpenMesh, fname: &str| { let m_trimesh = m.to_trimesh().unwrap(); std::fs::write(fname, m_trimesh.parse_as_obj()).unwrap(); @@ -513,6 +516,7 @@ fn main() { try_save(m, "openmesh_cube.obj"); try_save(m2, "openmesh_cube2.obj"); + try_save(m3, "openmesh_cube3.obj"); // Construct any mesh, this time, we will construct a simple icosahedron let mesh = MeshBuilder::new().icosahedron().build().unwrap();