From 46044a210f42bc974a1c298a88ff7e0b32e93a7c Mon Sep 17 00:00:00 2001 From: Filip Sykala Date: Thu, 10 Feb 2022 14:06:49 +0100 Subject: [PATCH] Fix SLA supports partialy --- src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp | 40 +++++++++++++++++--- 1 file changed, 35 insertions(+), 5 deletions(-) diff --git a/src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp b/src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp index e4b4bc1b2b..2dfd96c937 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp @@ -1123,20 +1123,50 @@ bool GLGizmoSlaSupports::on_mouse(const wxMouseEvent &mouse_event){ Selection &selection = m_parent.get_selection(); static bool pending_right_up = false; - if (mouse_event.RightDown() && - selection.get_object_idx() != -1 && + // when control is down we allow scene pan and rotation even when clicking + // over some object + bool control_down = mouse_event.CmdDown(); + bool grabber_contains_mouse = (get_hover_id() != -1); + int selected_object_idx = selection.get_object_idx(); + if (mouse_event.LeftDown() && (!control_down || grabber_contains_mouse)) { + if (gizmo_event(SLAGizmoEventType::LeftDown, mouse_pos, + mouse_event.ShiftDown(), mouse_event.AltDown(), false)) + return true; + } else if (mouse_event.Dragging()) { + if (m_parent.get_move_volume_id() != -1) { + // don't allow dragging objects with the Sla gizmo on + return true; + } else if (!control_down && + gizmo_event(SLAGizmoEventType::Dragging, mouse_pos, + mouse_event.ShiftDown(), mouse_event.AltDown(), false)) { + // the gizmo got the event and took some action, no need to do + // anything more here + m_parent.set_as_dirty(); + return true; + } else if (control_down && (mouse_event.LeftIsDown() || mouse_event.RightIsDown())){ + // CTRL has been pressed while already dragging -> stop current action + if (mouse_event.LeftIsDown()) + gizmo_event(SLAGizmoEventType::LeftUp, mouse_pos, mouse_event.ShiftDown(), mouse_event.AltDown(), true); + else if (mouse_event.RightIsDown()) + gizmo_event(SLAGizmoEventType::RightUp, mouse_pos, mouse_event.ShiftDown(), mouse_event.AltDown(), true); + } + } else if (mouse_event.LeftUp() && !m_parent.is_mouse_dragging()) { + // in case SLA/FDM gizmo is selected, we just pass the LeftUp event + // and stop processing - neither object moving or selecting is + // suppressed in that case + gizmo_event(SLAGizmoEventType::LeftUp, mouse_pos, mouse_event.ShiftDown(), mouse_event.AltDown(), control_down); + return true; + }else if (mouse_event.RightDown() && selection.get_object_idx() != -1 && gizmo_event(SLAGizmoEventType::RightDown, mouse_pos, false, false, false)) { // we need to set the following right up as processed to avoid showing // the context menu if the user release the mouse over the object pending_right_up = true; // event was taken care of by the SlaSupports gizmo return true; - } - if (pending_right_up && mouse_event.RightUp()) { + } else if (pending_right_up && mouse_event.RightUp()) { pending_right_up = false; return true; } - return false; }