From d1d60d0af277b534aa566aabcac06fc3f18f8d32 Mon Sep 17 00:00:00 2001 From: "zhou.xu" Date: Fri, 6 Sep 2024 14:42:16 +0800 Subject: [PATCH] FIX:center object should select its plate first jira: none Change-Id: I0f52bc12ac70e55135a5d1cce16163f9c7e32803 (cherry picked from commit 0a55e520bcca36a5994316e0ed73a6132b8a8d0e) --- src/slic3r/GUI/GUI_Factories.cpp | 9 ++++++++- src/slic3r/GUI/Gizmos/GLGizmosManager.cpp | 5 +++-- src/slic3r/GUI/Gizmos/GLGizmosManager.hpp | 2 +- 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/src/slic3r/GUI/GUI_Factories.cpp b/src/slic3r/GUI/GUI_Factories.cpp index 381085d22..d204721fe 100644 --- a/src/slic3r/GUI/GUI_Factories.cpp +++ b/src/slic3r/GUI/GUI_Factories.cpp @@ -1542,13 +1542,20 @@ void MenuFactory::append_menu_item_center(wxMenu* menu) { append_menu_item(menu, wxID_ANY, _L("Center") , "", [this](wxCommandEvent&) { + auto canvas3d = plater()->get_view3D_canvas3D(); + canvas3d->get_gizmos_manager().check_object_located_outside_plate(true); plater()->center_selection(); }, "", nullptr, []() { if (plater()->canvas3D()->get_canvas_type() != GLCanvas3D::ECanvasType::CanvasView3D) return false; else { - Selection& selection = plater()->get_view3D_canvas3D()->get_selection(); + auto canvas3d = plater()->get_view3D_canvas3D(); + canvas3d->get_gizmos_manager().check_object_located_outside_plate(false); + if (canvas3d->get_gizmos_manager().get_object_located_outside_plate()) { //_outside_plate + return false; + } + Selection &selection = canvas3d->get_selection(); PartPlate* plate = plater()->get_partplate_list().get_selected_plate(); Vec3d model_pos = selection.get_bounding_box().center(); Vec3d center_pos = plate->get_center_origin(); diff --git a/src/slic3r/GUI/Gizmos/GLGizmosManager.cpp b/src/slic3r/GUI/Gizmos/GLGizmosManager.cpp index b5bce94e1..c791930d5 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmosManager.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmosManager.cpp @@ -701,7 +701,8 @@ bool GLGizmosManager::get_gizmo_active_condition(GLGizmosManager::EType type) { return false; } -void GLGizmosManager::check_object_located_outside_plate() { +void GLGizmosManager::check_object_located_outside_plate(bool change_plate) +{ PartPlateList &plate_list = wxGetApp().plater()->get_partplate_list(); auto curr_plate_index = plate_list.get_curr_plate_index(); Selection & selection = m_parent.get_selection(); @@ -719,7 +720,7 @@ void GLGizmosManager::check_object_located_outside_plate() { ModelObjectPtrs objects = plate->get_objects_on_this_plate(); for (auto object : objects) { if (model_object == object) { - if (curr_plate_index != i) { // confirm selected model_object at corresponding plate + if (change_plate && curr_plate_index != i) { // confirm selected model_object at corresponding plate wxGetApp().plater()->get_partplate_list().select_plate(i); } find_object = true; diff --git a/src/slic3r/GUI/Gizmos/GLGizmosManager.hpp b/src/slic3r/GUI/Gizmos/GLGizmosManager.hpp index c99e7d7c2..425941d12 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmosManager.hpp +++ b/src/slic3r/GUI/Gizmos/GLGizmosManager.hpp @@ -288,7 +288,7 @@ public: bool is_gizmo_click_empty_not_exit(); bool is_show_only_active_plate(); bool get_gizmo_active_condition(GLGizmosManager::EType type); - void check_object_located_outside_plate(); + void check_object_located_outside_plate(bool change_plate =true); bool get_object_located_outside_plate() { return m_object_located_outside_plate; } bool gizmo_event(SLAGizmoEventType action, const Vec2d& mouse_position = Vec2d::Zero(), bool shift_down = false, bool alt_down = false, bool control_down = false); bool is_paint_gizmo();