mesh_graph/ops/
cleanup.rs1use crate::{FaceId, HalfedgeId, MeshGraph, VertexId};
2
3impl MeshGraph {
4 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 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 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 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}