math_utils/geometry/mesh/
half_edge.rs

1use stash::Stash;
2
3use crate::*;
4
5pub struct HalfEdgeMesh <S> {
6  pub vertices : Stash <Vertex <S>, u32>,
7  pub edges    : Stash <Edge, u32>,
8  pub faces    : Stash <Face, u32>
9}
10
11pub struct Vertex <S> {
12  pub point : Point3 <S>,
13  pub edge  : EdgeId
14}
15
16pub struct Edge {
17  pub base : VertexId,
18  pub twin : Option <EdgeId>,
19  pub face : Option <FaceId>,
20  pub next : Option <EdgeId>
21}
22
23pub struct Face {
24  pub edge : EdgeId
25}
26
27#[derive(Clone, Copy, Debug, Eq, Ord, PartialEq, PartialOrd)]
28pub struct VertexId (pub u32);
29#[derive(Clone, Copy, Debug, Eq, Ord, PartialEq, PartialOrd)]
30pub struct EdgeId (pub u32);
31#[derive(Clone, Copy, Debug, Eq, Ord, PartialEq, PartialOrd)]
32pub struct FaceId (pub u32);
33
34/// Print the sizes of some types
35pub fn report_sizes() {
36  use std::mem::size_of;
37  println!("half edge mesh report sizes...");
38  show!(size_of::<Vertex <f32>>());
39  show!(size_of::<Vertex <f64>>());
40  show!(size_of::<Face>());
41  show!(size_of::<Edge>());
42  println!("...half edge mesh report sizes");
43}