Split method

This commit is contained in:
Hanno Braun 2022-04-11 16:25:13 +02:00
parent d275c676bc
commit 7e3bd1c120

View File

@ -69,9 +69,12 @@ impl Polygon {
// cleaned up a bit, once `array_windows` is stable. // cleaned up a bit, once `array_windows` is stable.
let edge = Segment::from([edge[0], edge[1]]); let edge = Segment::from([edge[0], edge[1]]);
let is_exterior_edge = self.contains_exterior_edge(edge);
let is_interior_edge = self.contains_interior_edge(edge);
// If the segment is an edge of the face, we don't need to take a // If the segment is an edge of the face, we don't need to take a
// closer look. // closer look.
if self.contains_edge(edge) { if is_exterior_edge || is_interior_edge {
continue; continue;
} }
@ -89,10 +92,15 @@ impl Polygon {
true true
} }
pub fn contains_edge(&self, edge: Segment<2>) -> bool { pub fn contains_exterior_edge(&self, edge: Segment<2>) -> bool {
self.exterior.segments().contains(&edge)
|| self.exterior.segments().contains(&edge.reverse())
}
pub fn contains_interior_edge(&self, edge: Segment<2>) -> bool {
let mut contains = false; let mut contains = false;
for chain in Some(&self.exterior).into_iter().chain(&self.interiors) { for chain in &self.interiors {
contains |= chain.segments().contains(&edge); contains |= chain.segments().contains(&edge);
contains |= chain.segments().contains(&edge.reverse()); contains |= chain.segments().contains(&edge.reverse());
} }