diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp index c83a5a038..fad99f6fe 100644 --- a/src/slic3r/GUI/GLCanvas3D.cpp +++ b/src/slic3r/GUI/GLCanvas3D.cpp @@ -4106,10 +4106,16 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt) #if ENABLE_EXTENDED_SELECTION if (evt.LeftDown() && (m_hover_volume_id != -1)) { - if (!evt.ShiftDown() || !m_selection.contains_volume(m_hover_volume_id)) - m_selection.add(m_hover_volume_id, !evt.ShiftDown()); - else + bool already_selected = m_selection.contains_volume(m_hover_volume_id); + bool shift_down = evt.ShiftDown(); + + if (already_selected && shift_down) m_selection.remove(m_hover_volume_id); + else + { + bool add_as_single = !already_selected && !evt.ShiftDown(); + m_selection.add(m_hover_volume_id, add_as_single); + } m_gizmos.update_on_off_state(m_selection); update_gizmos_data(); @@ -4229,8 +4235,8 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt) float z0 = 0.0f; float z1 = 1.0f; #if ENABLE_EXTENDED_SELECTION - // we do not want to translate objects if the user just clicked on an object while pressing shift (to add/remove it from the selection) and then drag - Vec3d cur_pos = evt.ShiftDown() ? m_mouse.drag.start_position_3D : Linef3(_mouse_to_3d(pos, &z0), _mouse_to_3d(pos, &z1)).intersect_plane(m_mouse.drag.start_position_3D(2)); + // we do not want to translate objects if the user just clicked on an object while pressing shift to remove it from the selection and then drag + Vec3d cur_pos = m_selection.contains_volume(m_hover_volume_id) ? Linef3(_mouse_to_3d(pos, &z0), _mouse_to_3d(pos, &z1)).intersect_plane(m_mouse.drag.start_position_3D(2)) : m_mouse.drag.start_position_3D; #else Vec3d cur_pos = Linef3(_mouse_to_3d(pos, &z0), _mouse_to_3d(pos, &z1)).intersect_plane(m_mouse.drag.start_position_3D(2)); #endif // ENABLE_EXTENDED_SELECTION diff --git a/src/slic3r/GUI/GLGizmo.cpp b/src/slic3r/GUI/GLGizmo.cpp index e190b1b3a..6965d95b7 100644 --- a/src/slic3r/GUI/GLGizmo.cpp +++ b/src/slic3r/GUI/GLGizmo.cpp @@ -1531,13 +1531,13 @@ void GLGizmoFlatten::on_render(const BoundingBoxf3& box) const // does not work correctly when there are multiple copies. Vec3d dragged_offset(Vec3d::Zero()); #if ENABLE_EXTENDED_SELECTION - if (m_starting_center == Vec3d::Zero()) - m_starting_center = selection.get_bounding_box().center(); - dragged_offset = selection.get_bounding_box().center() - m_starting_center; + if (m_starting_center == Vec3d::Zero()) + m_starting_center = selection.get_bounding_box().center(); + dragged_offset = selection.get_bounding_box().center() - m_starting_center; #else - if (m_starting_center == Vec3d::Zero()) - m_starting_center = box.center(); - dragged_offset(box.center() - m_starting_center); + if (m_starting_center == Vec3d::Zero()) + m_starting_center = box.center(); + dragged_offset = box.center() - m_starting_center; #endif // ENABLE_EXTENDED_SELECTION ::glEnable(GL_BLEND); diff --git a/src/slic3r/GUI/GLGizmo.hpp b/src/slic3r/GUI/GLGizmo.hpp index 14eac77e7..838c7b787 100644 --- a/src/slic3r/GUI/GLGizmo.hpp +++ b/src/slic3r/GUI/GLGizmo.hpp @@ -342,8 +342,6 @@ protected: virtual void on_start_dragging(const GLCanvas3D::Selection& selection); #else virtual void on_start_dragging(const BoundingBoxf3& box); - virtual void on_stop_dragging() { m_show_starting_box = false; } - #endif // ENABLE_EXTENDED_SELECTION virtual void on_update(const Linef3& mouse_ray, const Point* mouse_pos); #if ENABLE_GIZMOS_RESET