From 9690d37d032660264d0a56ace03e864392ed7bc6 Mon Sep 17 00:00:00 2001 From: Hakan Seven Date: Tue, 21 Jul 2026 23:14:08 +0300 Subject: [PATCH] fix(view): window corner picks exempt from Ortho/Polar (#363) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ZOOM WINDOW's opposite corner was pinned to an axis with Ortho on, collapsing the window to a line. Extend the #291 window_corner_pick exemption to ZOOM WINDOW, PLOTWINDOW and WIPEOUT's rectangular mode (polygon mode keeps the constraints — axis-aligned edges are a legitimate use). Co-Authored-By: Claude Fable 5 --- src/modules/draw/draw/wipeout.rs | 7 +++++++ src/modules/view/plot_window.rs | 5 +++++ src/modules/view/zoom_window.rs | 7 +++++++ 3 files changed, 19 insertions(+) diff --git a/src/modules/draw/draw/wipeout.rs b/src/modules/draw/draw/wipeout.rs index bce92b5b2..cd854ae10 100644 --- a/src/modules/draw/draw/wipeout.rs +++ b/src/modules/draw/draw/wipeout.rs @@ -107,6 +107,13 @@ impl CadCommand for WipeoutCommand { } } + fn window_corner_pick(&self) -> bool { + // Rectangular mode picks free window corners — exempt from Ortho/Polar + // (#363/#291 class). Polygon points keep the constraints (axis-aligned + // polygon edges are a legitimate use). + matches!(self.mode, WipeoutMode::Rectangular) + } + fn on_mouse_move(&mut self, pt: DVec3) -> Option { let pt = pt.as_vec3(); match &self.mode { WipeoutMode::Rectangular => { diff --git a/src/modules/view/plot_window.rs b/src/modules/view/plot_window.rs index 82fe34210..c0f40d0d5 100644 --- a/src/modules/view/plot_window.rs +++ b/src/modules/view/plot_window.rs @@ -44,6 +44,11 @@ impl CadCommand for PlotWindowCommand { CmdResult::Cancel } + fn window_corner_pick(&self) -> bool { + // Free rectangle corners — exempt from Ortho/Polar (#363/#291 class). + true + } + fn on_mouse_move(&mut self, pt: DVec3) -> Option { let pt = pt.as_vec3(); let p1 = self.p1?.as_vec3(); // Draw the selection rectangle. diff --git a/src/modules/view/zoom_window.rs b/src/modules/view/zoom_window.rs index 85f896ef8..a0565b23d 100644 --- a/src/modules/view/zoom_window.rs +++ b/src/modules/view/zoom_window.rs @@ -59,6 +59,13 @@ impl CadCommand for ZoomWindowCommand { CmdResult::Cancel } + fn window_corner_pick(&self) -> bool { + // Both zoom-window corners are free points; Ortho/Polar must not pin + // the opposite corner to an axis or the window collapses to a line + // (#363, same class as #291). + true + } + fn on_mouse_move(&mut self, pt: DVec3) -> Option { let pt = pt.as_vec3(); let p1 = self.first?; let min = p1.min(pt);