FIX:center object should select its plate first

jira: none
Change-Id: I0f52bc12ac70e55135a5d1cce16163f9c7e32803
(cherry picked from commit 0a55e520bcca36a5994316e0ed73a6132b8a8d0e)
This commit is contained in:
zhou.xu 2024-09-06 14:42:16 +08:00 committed by Lane.Wei
parent 91d135a4de
commit d1d60d0af2
3 changed files with 12 additions and 4 deletions

View File

@ -1542,13 +1542,20 @@ void MenuFactory::append_menu_item_center(wxMenu* menu)
{ {
append_menu_item(menu, wxID_ANY, _L("Center") , "", append_menu_item(menu, wxID_ANY, _L("Center") , "",
[this](wxCommandEvent&) { [this](wxCommandEvent&) {
auto canvas3d = plater()->get_view3D_canvas3D();
canvas3d->get_gizmos_manager().check_object_located_outside_plate(true);
plater()->center_selection(); plater()->center_selection();
}, "", nullptr, }, "", nullptr,
[]() { []() {
if (plater()->canvas3D()->get_canvas_type() != GLCanvas3D::ECanvasType::CanvasView3D) if (plater()->canvas3D()->get_canvas_type() != GLCanvas3D::ECanvasType::CanvasView3D)
return false; return false;
else { 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(); PartPlate* plate = plater()->get_partplate_list().get_selected_plate();
Vec3d model_pos = selection.get_bounding_box().center(); Vec3d model_pos = selection.get_bounding_box().center();
Vec3d center_pos = plate->get_center_origin(); Vec3d center_pos = plate->get_center_origin();

View File

@ -701,7 +701,8 @@ bool GLGizmosManager::get_gizmo_active_condition(GLGizmosManager::EType type) {
return false; 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(); PartPlateList &plate_list = wxGetApp().plater()->get_partplate_list();
auto curr_plate_index = plate_list.get_curr_plate_index(); auto curr_plate_index = plate_list.get_curr_plate_index();
Selection & selection = m_parent.get_selection(); 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(); ModelObjectPtrs objects = plate->get_objects_on_this_plate();
for (auto object : objects) { for (auto object : objects) {
if (model_object == object) { 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); wxGetApp().plater()->get_partplate_list().select_plate(i);
} }
find_object = true; find_object = true;

View File

@ -288,7 +288,7 @@ public:
bool is_gizmo_click_empty_not_exit(); bool is_gizmo_click_empty_not_exit();
bool is_show_only_active_plate(); bool is_show_only_active_plate();
bool get_gizmo_active_condition(GLGizmosManager::EType type); 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 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 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(); bool is_paint_gizmo();