diff --git a/experiments/2024-12-09/src/topology/face.rs b/experiments/2024-12-09/src/topology/face.rs index 2e158b718..19aad4ab4 100644 --- a/experiments/2024-12-09/src/topology/face.rs +++ b/experiments/2024-12-09/src/topology/face.rs @@ -9,12 +9,12 @@ use crate::{ object::{Handle, HandleAny, Object}, }; -use super::vertex::Vertex; +use super::{half_edge::HalfEdge, vertex::Vertex}; #[derive(Debug)] pub struct Face { surface: Plane, - vertices: Vec>, + vertices: Vec>, } impl Face { @@ -22,7 +22,10 @@ impl Face { surface: Plane, vertices: impl IntoIterator>, ) -> Self { - let vertices = vertices.into_iter().collect(); + let vertices = vertices + .into_iter() + .map(|vertex| Handle::new(HalfEdge::new(vertex))) + .collect(); Self { surface, vertices } } @@ -31,14 +34,14 @@ impl Face { } pub fn vertices(&self) -> impl Iterator> { - self.vertices.iter() + self.vertices.iter().map(|half_edge| half_edge.start()) } pub fn half_edges(&self) -> impl Iterator; 2]> { self.vertices .iter() .circular_tuple_windows() - .map(|(a, b)| [a, b]) + .map(|(a, b)| [a.start(), b.start()]) } } @@ -48,7 +51,10 @@ impl Object for Face { } fn tri_mesh(&self) -> TriMesh { - triangulate(&self.vertices, self.surface()) + let mut vertices = Vec::new(); + vertices.extend(self.vertices().cloned()); + + triangulate(&vertices, self.surface()) } fn children(&self) -> Vec { diff --git a/experiments/2024-12-09/src/topology/half_edge.rs b/experiments/2024-12-09/src/topology/half_edge.rs new file mode 100644 index 000000000..b9d9ed827 --- /dev/null +++ b/experiments/2024-12-09/src/topology/half_edge.rs @@ -0,0 +1,17 @@ +use crate::object::Handle; + +use super::vertex::Vertex; + +pub struct HalfEdge { + start: Handle, +} + +impl HalfEdge { + pub fn new(start: Handle) -> Self { + Self { start } + } + + pub fn start(&self) -> &Handle { + &self.start + } +} diff --git a/experiments/2024-12-09/src/topology/mod.rs b/experiments/2024-12-09/src/topology/mod.rs index bfbf28cd6..46317f1cf 100644 --- a/experiments/2024-12-09/src/topology/mod.rs +++ b/experiments/2024-12-09/src/topology/mod.rs @@ -1,3 +1,4 @@ pub mod face; +pub mod half_edge; pub mod solid; pub mod vertex;