From b02661e85f2ce426881d6603bcf8a45be89ba4e7 Mon Sep 17 00:00:00 2001 From: "zhou.xu" Date: Thu, 9 May 2024 09:21:43 +0800 Subject: [PATCH] FIX:add exit_gizmo before slice model jira: STUDIO-5531 Change-Id: Icddc9d73b3d91bb68e9768d13e48cbae0680e58e --- src/slic3r/GUI/GLCanvas3D.cpp | 7 +++++++ src/slic3r/GUI/GLCanvas3D.hpp | 1 + src/slic3r/GUI/GUI_Preview.cpp | 6 ++++++ src/slic3r/GUI/GUI_Preview.hpp | 1 + src/slic3r/GUI/MainFrame.cpp | 1 + src/slic3r/GUI/Plater.cpp | 7 +++++++ src/slic3r/GUI/Plater.hpp | 1 + 7 files changed, 24 insertions(+) diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp index e2cfa2874..235b7bec0 100644 --- a/src/slic3r/GUI/GLCanvas3D.cpp +++ b/src/slic3r/GUI/GLCanvas3D.cpp @@ -2148,6 +2148,13 @@ void GLCanvas3D::deselect_all() post_event(SimpleEvent(EVT_GLCANVAS_OBJECT_SELECT)); } +void GLCanvas3D::exit_gizmo() { + if (m_gizmos.get_current_type() != GLGizmosManager::Undefined) { + m_gizmos.reset_all_states(); + m_gizmos.update_data(); + } +} + void GLCanvas3D::set_selected_visible(bool visible) { for (unsigned int i : m_selection.get_volume_idxs()) { diff --git a/src/slic3r/GUI/GLCanvas3D.hpp b/src/slic3r/GUI/GLCanvas3D.hpp index 84d417046..188ddb494 100644 --- a/src/slic3r/GUI/GLCanvas3D.hpp +++ b/src/slic3r/GUI/GLCanvas3D.hpp @@ -872,6 +872,7 @@ public: void select_all(); void deselect_all(); + void exit_gizmo(); void set_selected_visible(bool visible); void delete_selected(); void ensure_on_bed(unsigned int object_idx, bool allow_negative_z); diff --git a/src/slic3r/GUI/GUI_Preview.cpp b/src/slic3r/GUI/GUI_Preview.cpp index 46b799ad5..62f1a9466 100644 --- a/src/slic3r/GUI/GUI_Preview.cpp +++ b/src/slic3r/GUI/GUI_Preview.cpp @@ -149,6 +149,12 @@ void View3D::deselect_all() m_canvas->deselect_all(); } +void View3D::exit_gizmo() +{ + if (m_canvas != nullptr) + m_canvas->exit_gizmo(); +} + void View3D::delete_selected() { if (m_canvas != nullptr) diff --git a/src/slic3r/GUI/GUI_Preview.hpp b/src/slic3r/GUI/GUI_Preview.hpp index 9cb20f657..7d6a332bc 100644 --- a/src/slic3r/GUI/GUI_Preview.hpp +++ b/src/slic3r/GUI/GUI_Preview.hpp @@ -63,6 +63,7 @@ public: void select_all(); void deselect_all(); + void exit_gizmo(); void delete_selected(); void center_selected(); void center_selected_plate(const int plate_idx); diff --git a/src/slic3r/GUI/MainFrame.cpp b/src/slic3r/GUI/MainFrame.cpp index 340503318..070d3b73b 100644 --- a/src/slic3r/GUI/MainFrame.cpp +++ b/src/slic3r/GUI/MainFrame.cpp @@ -1600,6 +1600,7 @@ wxBoxSizer* MainFrame::create_side_tools() m_slice_btn->Bind(wxEVT_BUTTON, [this](wxCommandEvent& event) { //this->m_plater->select_view_3D("Preview"); + m_plater->exit_gizmo(); m_plater->update(true, true); if (m_slice_select == eSliceAll) wxPostEvent(m_plater, SimpleEvent(EVT_GLTOOLBAR_SLICE_ALL)); diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index 7e45caa3b..78c5e83d1 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -2438,6 +2438,7 @@ struct Plater::priv void select_all(); void deselect_all(); + void exit_gizmo(); void remove(size_t obj_idx); bool delete_object_from_model(size_t obj_idx, bool refresh_immediately = true); //BBS void delete_all_objects_from_model(); @@ -4719,6 +4720,11 @@ void Plater::priv::deselect_all() view3D->deselect_all(); } +void Plater::priv::exit_gizmo() +{ + view3D->exit_gizmo(); +} + void Plater::priv::remove(size_t obj_idx) { if (view3D->is_layers_editing_enabled()) @@ -10602,6 +10608,7 @@ void Plater::remove_curr_plate_all() { p->remove_curr_plate_all(); } void Plater::select_all() { p->select_all(); } void Plater::deselect_all() { p->deselect_all(); } +void Plater::exit_gizmo() { p->exit_gizmo(); } void Plater::remove(size_t obj_idx) { p->remove(obj_idx); } void Plater::reset(bool apply_presets_change) { p->reset(apply_presets_change); } diff --git a/src/slic3r/GUI/Plater.hpp b/src/slic3r/GUI/Plater.hpp index 0c1d57231..14ce5befd 100644 --- a/src/slic3r/GUI/Plater.hpp +++ b/src/slic3r/GUI/Plater.hpp @@ -324,6 +324,7 @@ public: void select_all(); void deselect_all(); + void exit_gizmo(); void remove(size_t obj_idx); void reset(bool apply_presets_change = false); void reset_with_confirm();