1#![forbid(unsafe_code)]
2#![doc = include_str!("../README.md")]
3
4#[derive(Debug, Clone, Copy, PartialEq, Eq)]
6pub enum TriangulationMethod {
7 EarClipping,
9 Delaunay,
11 Constrained,
13}
14
15impl TriangulationMethod {
16 #[must_use]
18 pub const fn name(self) -> &'static str {
19 match self {
20 Self::EarClipping => "ear-clipping",
21 Self::Delaunay => "delaunay",
22 Self::Constrained => "constrained",
23 }
24 }
25}
26
27#[derive(Debug, Clone, PartialEq, Eq)]
29pub struct Triangulation2 {
30 triangles: Vec<[usize; 3]>,
31}
32
33impl Triangulation2 {
34 #[must_use]
36 pub const fn new(triangles: Vec<[usize; 3]>) -> Self {
37 Self { triangles }
38 }
39
40 #[must_use]
42 pub fn triangles(&self) -> &[[usize; 3]] {
43 &self.triangles
44 }
45
46 #[must_use]
48 pub fn triangle_count(&self) -> usize {
49 self.triangles.len()
50 }
51}
52
53#[cfg(test)]
54mod tests {
55 use super::{Triangulation2, TriangulationMethod};
56
57 #[test]
58 fn stores_indexed_triangles() {
59 let triangulation = Triangulation2::new(vec![[0, 1, 2], [0, 2, 3]]);
60
61 assert_eq!(triangulation.triangle_count(), 2);
62 assert_eq!(triangulation.triangles()[0], [0, 1, 2]);
63 assert_eq!(TriangulationMethod::EarClipping.name(), "ear-clipping");
64 }
65}