Toggle pin in pin selection upon click

This commit is contained in:
Mikolaj Wielgus 2026-03-14 23:31:29 +01:00
parent 13c7bbb061
commit a71df91fc1
2 changed files with 24 additions and 13 deletions

View File

@ -25,36 +25,47 @@ impl Viewport {
pub fn update(&mut self, ctx: &egui::Context, workspace: Option<&mut Workspace>) {
egui::CentralPanel::default().show(ctx, |ui| {
egui::Frame::canvas(ui.style()).show(ui, |ui| {
ui.ctx().request_repaint();
let zoom_range = 0.00001..=10000.0;
let viewport_rect = ui.available_rect_before_wrap();
let mut scene_rect = self.scene_rect.clone();
egui::Scene::new()
let response = egui::Scene::new()
.zoom_range(zoom_range.clone())
//.sense(egui::Sense::hover())
.show(ui, &mut scene_rect, |ui| {
if let Some(ref workspace) = workspace {
let mut display = Display::new();
display.update(ctx, ui, &self, workspace);
}
});
})
.response;
self.scene_rect = scene_rect;
let scene_to_viewport =
Self::fit_to_rect_in_scene(viewport_rect, scene_rect, zoom_range.into());
let response = ui.interact(viewport_rect, ui.id(), egui::Sense::click_and_drag());
let pointer_scene_pos = scene_to_viewport.inverse()
* (response.interact_pointer_pos().unwrap_or_else(|| {
ctx.input(|i| i.pointer.interact_pos().unwrap_or_default())
}));
if let Some(workspace) = workspace {
dbg!(workspace.navmesher_board.board().point_pin_selector(
0,
Vector2::new(pointer_scene_pos.x as i64, pointer_scene_pos.y as i64)
));
if let Some(pointer_viewport_pos) = ctx.input(|i| i.pointer.interact_pos()) {
let pointer_scene_pos = scene_to_viewport.inverse() * pointer_viewport_pos;
if response.clicked() {
if let Some(pin_selector) =
workspace.navmesher_board.board().point_pin_selector(
0,
Vector2::new(
pointer_scene_pos.x as i64,
pointer_scene_pos.y as i64,
),
)
{
workspace.pin_selection.toggle(pin_selector);
}
}
}
self.zoom_to_fit_if_scheduled(workspace);
}

View File

@ -140,6 +140,6 @@ impl Polygon {
}
pub fn contains_point(&self, point: Vector2<i64>) -> bool {
dbg!(point.inside_polygon(&self.vertices))
point.inside_polygon(&self.vertices)
}
}