diff --git a/topola-egui/src/viewport.rs b/topola-egui/src/viewport.rs index fe0d2a1..877470f 100644 --- a/topola-egui/src/viewport.rs +++ b/topola-egui/src/viewport.rs @@ -29,8 +29,8 @@ impl Viewport { .zoom_range(0.00001..=10000.0) .show(ui, &mut scene_rect, |ui| { if let Some(ref workspace) = workspace { - let mut displayer = Display::new(); - displayer.update(ctx, ui, &self, workspace); + let mut display = Display::new(); + display.update(ctx, ui, &self, workspace); } }); diff --git a/topola/src/layout.rs b/topola/src/layout.rs index 6ba7cb5..110bc62 100644 --- a/topola/src/layout.rs +++ b/topola/src/layout.rs @@ -185,6 +185,41 @@ impl Layout { Rectangle::from_corners([min_x, min_y, layer], [max_x, max_y, layer]) } + pub fn locate_joints_at_point( + &self, + layer: usize, + point: [i64; 2], + ) -> impl Iterator { + self.joints_rtree + .as_ref() + .locate_all_at_point(&[point[0], point[1], layer as i64]) + .map(|geom_with_data| geom_with_data.data) + } + + pub fn locate_segments_at_point( + &self, + layer: usize, + point: [i64; 2], + ) -> impl Iterator { + self.segments_rtree + .as_ref() + .locate_all_at_point(&[point[0], point[1], layer as i64]) + .map(|geom_with_data| geom_with_data.data) + } + + // TODO: vias. + + pub fn locate_polygons_at_point( + &self, + layer: usize, + point: [i64; 2], + ) -> impl Iterator { + self.polygons_rtree + .as_ref() + .locate_all_at_point(&[point[0], point[1], layer as i64]) + .map(|geom_with_data| geom_with_data.data) + } + pub fn pin(&self, pin: PinId) -> &Pin { &self.pins[pin.id()] }