From 45db1c13bad6d0558a35a977e7378edbf1b8b2ce Mon Sep 17 00:00:00 2001 From: enricoturri1966 Date: Mon, 4 Oct 2021 08:30:04 +0200 Subject: [PATCH] Tech ENABLE_OUT_OF_BED_DETECTION_IMPROVEMENTS - Faster update of object manipulation fields while dragging gizmo Move/Rotate/Scale --- src/slic3r/GUI/GLCanvas3D.cpp | 5 +++++ src/slic3r/GUI/GUI_ObjectManipulation.cpp | 7 ++++++- src/slic3r/GUI/Selection.cpp | 7 +++++++ src/slic3r/GUI/Selection.hpp | 8 ++++++++ 4 files changed, 26 insertions(+), 1 deletion(-) diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp index 84c5053ef5..2cc92f9873 100644 --- a/src/slic3r/GUI/GLCanvas3D.cpp +++ b/src/slic3r/GUI/GLCanvas3D.cpp @@ -3215,6 +3215,11 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt) } } else if (evt.LeftUp() || evt.MiddleUp() || evt.RightUp()) { +#if ENABLE_OUT_OF_BED_DETECTION_IMPROVEMENTS + if (evt.LeftUp()) + m_selection.stop_dragging(); +#endif // ENABLE_OUT_OF_BED_DETECTION_IMPROVEMENTS + if (m_layers_editing.state != LayersEditing::Unknown) { m_layers_editing.state = LayersEditing::Unknown; _stop_timer(); diff --git a/src/slic3r/GUI/GUI_ObjectManipulation.cpp b/src/slic3r/GUI/GUI_ObjectManipulation.cpp index 6eaa6316da..0f68d01c97 100644 --- a/src/slic3r/GUI/GUI_ObjectManipulation.cpp +++ b/src/slic3r/GUI/GUI_ObjectManipulation.cpp @@ -631,7 +631,6 @@ void ObjectManipulation::update_if_dirty() update(m_cache.rotation, m_cache.rotation_rounded, meRotation, m_new_rotation); } - if (selection.requires_uniform_scale()) { m_lock_bnt->SetLock(true); m_lock_bnt->SetToolTip(_L("You cannot use non-uniform scaling mode for multiple objects/parts selection")); @@ -654,8 +653,14 @@ void ObjectManipulation::update_if_dirty() else m_og->disable(); +#if ENABLE_OUT_OF_BED_DETECTION_IMPROVEMENTS + if (!selection.is_dragging()) { +#endif // ENABLE_OUT_OF_BED_DETECTION_IMPROVEMENTS update_reset_buttons_visibility(); update_mirror_buttons_visibility(); +#if ENABLE_OUT_OF_BED_DETECTION_IMPROVEMENTS + } +#endif // ENABLE_OUT_OF_BED_DETECTION_IMPROVEMENTS m_dirty = false; } diff --git a/src/slic3r/GUI/Selection.cpp b/src/slic3r/GUI/Selection.cpp index 0c863665d6..6aff77cf73 100644 --- a/src/slic3r/GUI/Selection.cpp +++ b/src/slic3r/GUI/Selection.cpp @@ -112,6 +112,9 @@ Selection::Selection() , m_type(Empty) , m_valid(false) , m_scale_factor(1.0f) +#if ENABLE_OUT_OF_BED_DETECTION_IMPROVEMENTS + , m_dragging(false) +#endif // ENABLE_OUT_OF_BED_DETECTION_IMPROVEMENTS { this->set_bounding_boxes_dirty(); } @@ -676,6 +679,10 @@ void Selection::start_dragging() if (!m_valid) return; +#if ENABLE_OUT_OF_BED_DETECTION_IMPROVEMENTS + m_dragging = true; +#endif // ENABLE_OUT_OF_BED_DETECTION_IMPROVEMENTS + set_caches(); } diff --git a/src/slic3r/GUI/Selection.hpp b/src/slic3r/GUI/Selection.hpp index dea5075114..cb8f38d50c 100644 --- a/src/slic3r/GUI/Selection.hpp +++ b/src/slic3r/GUI/Selection.hpp @@ -220,6 +220,10 @@ private: float m_scale_factor; +#if ENABLE_OUT_OF_BED_DETECTION_IMPROVEMENTS + bool m_dragging; +#endif // ENABLE_OUT_OF_BED_DETECTION_IMPROVEMENTS + public: Selection(); @@ -312,6 +316,10 @@ public: const BoundingBoxf3& get_scaled_instance_bounding_box() const; void start_dragging(); +#if ENABLE_OUT_OF_BED_DETECTION_IMPROVEMENTS + void stop_dragging() { m_dragging = false; } + bool is_dragging() const { return m_dragging; } +#endif // ENABLE_OUT_OF_BED_DETECTION_IMPROVEMENTS void translate(const Vec3d& displacement, bool local = false); void rotate(const Vec3d& rotation, TransformationType transformation_type);