diff --git a/src/slic3r/GUI/GUI_ObjectList.cpp b/src/slic3r/GUI/GUI_ObjectList.cpp index bcd615278..243da5136 100644 --- a/src/slic3r/GUI/GUI_ObjectList.cpp +++ b/src/slic3r/GUI/GUI_ObjectList.cpp @@ -150,7 +150,8 @@ void ObjectList::set_tooltip_for_item(const wxPoint& pt) GetMainWindow()->SetToolTip(""); // hide tooltip } -wxPoint ObjectList::get_mouse_position_in_control() { +wxPoint ObjectList::get_mouse_position_in_control() +{ const wxPoint& pt = wxGetMousePosition(); // wxWindow* win = GetMainWindow(); // wxPoint screen_pos = win->GetScreenPosition(); @@ -159,10 +160,9 @@ wxPoint ObjectList::get_mouse_position_in_control() { int ObjectList::get_selected_obj_idx() const { - if (GetSelectedItemsCount() == 1) { - auto item = GetSelection(); - return m_objects_model->GetIdByItem(item); - } + if (GetSelectedItemsCount() == 1) + return m_objects_model->GetIdByItem(m_objects_model->GetTopParent(GetSelection())); + return -1; } @@ -687,6 +687,7 @@ void ObjectList::load_part( ModelObject* model_object, { wxWindow* parent = wxGetApp().tab_panel()->GetPage(0); + m_parts_changed = false; wxArrayString input_files; wxGetApp().open_model(parent, input_files); for (int i = 0; i < input_files.size(); ++i) { @@ -739,6 +740,7 @@ void ObjectList::load_lambda( ModelObject* model_object, { auto dlg = new LambdaObjectDialog(GetMainWindow()); if (dlg->ShowModal() == wxID_CANCEL) { + m_parts_changed = false; return; } @@ -1002,9 +1004,17 @@ bool ObjectList::is_splittable_object(const bool split_part) return splittable; } +void ObjectList::part_settings_changed() +{ + m_part_settings_changed = true; + wxGetApp().plater()->changed_object(get_selected_obj_idx()); + m_part_settings_changed = false; +} + void ObjectList::parts_changed(int obj_idx) { - wxGetApp().mainframe->m_plater->changed_object_settings(obj_idx); + wxGetApp().plater()->changed_object(get_selected_obj_idx()); + m_parts_changed = false; } void ObjectList::part_selection_changed() diff --git a/src/slic3r/GUI/GUI_ObjectList.hpp b/src/slic3r/GUI/GUI_ObjectList.hpp index db07073d9..0c680c6ac 100644 --- a/src/slic3r/GUI/GUI_ObjectList.hpp +++ b/src/slic3r/GUI/GUI_ObjectList.hpp @@ -99,6 +99,7 @@ public: int get_selected_obj_idx() const; bool is_parts_changed() const { return m_parts_changed; } bool is_part_settings_changed() const { return m_part_settings_changed; } + void part_settings_changed(); void parts_changed(int obj_idx); void part_selection_changed(); diff --git a/src/slic3r/GUI/GUI_ObjectManipulation.cpp b/src/slic3r/GUI/GUI_ObjectManipulation.cpp index 8b3d796bd..78031cf30 100644 --- a/src/slic3r/GUI/GUI_ObjectManipulation.cpp +++ b/src/slic3r/GUI/GUI_ObjectManipulation.cpp @@ -225,6 +225,9 @@ void ObjectManipulation::update_settings_list() optgroup->label_width = 150; optgroup->sidetext_width = 70; + optgroup->m_on_change = [](const t_config_option_key& opt_id, const boost::any& value) { + wxGetApp().obj_list()->part_settings_changed(); }; + for (auto& opt : cat.second) { if (opt == "extruder") diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index 04f47228b..0f6d59947 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -2608,7 +2608,7 @@ wxGLCanvas* Plater::canvas3D() return p->canvas3D; } -void Plater::changed_object_settings(int obj_idx) +void Plater::changed_object(int obj_idx) { if (obj_idx < 0) return; @@ -2622,6 +2622,7 @@ void Plater::changed_object_settings(int obj_idx) auto model_object = p->model.objects[obj_idx]; model_object->center_around_origin(); model_object->ensure_on_bed(); + _3DScene::reload_scene(p->canvas3D, false); } // update print @@ -2632,7 +2633,6 @@ void Plater::changed_object_settings(int obj_idx) auto selections = p->collect_selections(); _3DScene::set_objects_selections(p->canvas3D, selections); #endif // !ENABLE_EXTENDED_SELECTION - _3DScene::reload_scene(p->canvas3D, false); #if !ENABLE_MODIFIED_CAMERA_TARGET _3DScene::zoom_to_volumes(p->canvas3D); #endif // !ENABLE_MODIFIED_CAMERA_TARGET diff --git a/src/slic3r/GUI/Plater.hpp b/src/slic3r/GUI/Plater.hpp index 0a69e68bd..aa243d5fb 100644 --- a/src/slic3r/GUI/Plater.hpp +++ b/src/slic3r/GUI/Plater.hpp @@ -123,7 +123,7 @@ public: void export_amf(); void export_3mf(); void reslice(); - void changed_object_settings(int obj_idx); + void changed_object(int obj_idx); void send_gcode(); void on_extruders_change(int extruders_count);