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();