geo/algorithm/relate/geomgraph/index/
simple_edge_set_intersector.rs

1use super::super::{Edge, GeometryGraph};
2use super::{EdgeSetIntersector, SegmentIntersector};
3use crate::GeoFloat;
4
5use std::cell::RefCell;
6use std::rc::Rc;
7
8pub(crate) struct SimpleEdgeSetIntersector;
9
10impl SimpleEdgeSetIntersector {
11    pub fn new() -> Self {
12        SimpleEdgeSetIntersector
13    }
14
15    fn compute_intersects<F: GeoFloat>(
16        &self,
17        edge0: &Rc<RefCell<Edge<F>>>,
18        edge1: &Rc<RefCell<Edge<F>>>,
19        segment_intersector: &mut SegmentIntersector<F>,
20    ) {
21        let edge0_coords_len = edge0.borrow().coords().len() - 1;
22        let edge1_coords_len = edge1.borrow().coords().len() - 1;
23        for i0 in 0..edge0_coords_len {
24            for i1 in 0..edge1_coords_len {
25                segment_intersector.add_intersections(edge0, i0, edge1, i1);
26            }
27        }
28    }
29}
30
31impl<F: GeoFloat> EdgeSetIntersector<F> for SimpleEdgeSetIntersector {
32    fn compute_intersections_within_set(
33        &self,
34        graph: &GeometryGraph<F>,
35        check_for_self_intersecting_edges: bool,
36        segment_intersector: &mut SegmentIntersector<F>,
37    ) {
38        let edges = graph.edges();
39        for edge0 in edges.iter() {
40            for edge1 in edges.iter() {
41                if check_for_self_intersecting_edges || edge0.as_ptr() != edge1.as_ptr() {
42                    self.compute_intersects(edge0, edge1, segment_intersector);
43                }
44            }
45        }
46    }
47
48    fn compute_intersections_between_sets<'a>(
49        &self,
50        graph_0: &GeometryGraph<'a, F>,
51        graph_1: &GeometryGraph<'a, F>,
52        segment_intersector: &mut SegmentIntersector<F>,
53    ) {
54        let edges_0 = graph_0.edges();
55        let edges_1 = graph_1.edges();
56
57        for edge0 in edges_0 {
58            for edge1 in edges_1 {
59                self.compute_intersects(edge0, edge1, segment_intersector);
60            }
61        }
62    }
63}