mesh_graph/ops/
cleanup.rs

1use crate::{FaceId, HalfedgeId, MeshGraph, VertexId};
2
3impl MeshGraph {
4    /// Test if two faces have at least one halfedge in common.
5    pub fn faces_share_edge(&self, face_id1: FaceId, face_id2: FaceId) -> bool {
6        let face1 = self.faces[face_id1];
7        let face2 = self.faces[face_id2];
8
9        for edge_id1 in face1.halfedges(self) {
10            let edge1 = self.halfedges[edge_id1];
11
12            let start1 = self.positions[edge1.start_vertex(self)];
13            let end1 = self.positions[edge1.end_vertex];
14
15            for edge_id2 in face2.halfedges(self) {
16                let edge2 = self.halfedges[edge_id2];
17
18                let start2 = self.positions[edge2.start_vertex(self)];
19                let end2 = self.positions[edge2.end_vertex];
20
21                if start1 == start2 && end1 == end2 {
22                    return true;
23                }
24            }
25        }
26
27        false
28    }
29
30    /// Test if two faces share all vertices.
31    pub fn faces_share_all_vertices(&self, face_id1: FaceId, face_id2: FaceId) -> bool {
32        let face1 = self.faces[face_id1];
33        let face2 = self.faces[face_id2];
34
35        let face2_vertices = face2.vertices(self);
36
37        'outer: for vertex_id1 in face1.vertices(self) {
38            let pos1 = self.positions[vertex_id1];
39
40            for &vertex_id2 in &face2_vertices {
41                let pos2 = self.positions[vertex_id2];
42
43                if pos1 == pos2 {
44                    continue 'outer;
45                }
46            }
47
48            return false;
49        }
50
51        true
52    }
53
54    /// Test if two halfedges share all vertices.
55    pub fn halfedges_share_all_vertices(
56        &self,
57        halfedge_id1: HalfedgeId,
58        halfedge_id2: HalfedgeId,
59    ) -> bool {
60        let edge1 = self.halfedges[halfedge_id1];
61        let edge2 = self.halfedges[halfedge_id2];
62
63        let start1 = self.positions[edge1.start_vertex(self)];
64        let end1 = self.positions[edge1.end_vertex];
65
66        let start2 = self.positions[edge2.start_vertex(self)];
67        let end2 = self.positions[edge2.end_vertex];
68
69        start1 == start2 && end1 == end2
70    }
71
72    /// Test if two vertices have the exact same position.
73    pub fn vertices_share_position(&self, vertex_id1: VertexId, vertex_id2: VertexId) -> bool {
74        self.positions[vertex_id1] == self.positions[vertex_id2]
75    }
76
77    pub fn make_outgoing_halfedge_boundary_if_possible(&mut self, _vertex_id: VertexId) {
78        todo!()
79    }
80}