From 22fcf245c406305e7095074d5694d2dbc2b21e10 Mon Sep 17 00:00:00 2001 From: YuSanka Date: Wed, 13 Mar 2019 16:40:11 +0100 Subject: [PATCH] Fixed updating of the extruder value for last part in the object after deleting another parts (#1931) --- src/slic3r/GUI/GUI_ObjectList.cpp | 26 +++++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/src/slic3r/GUI/GUI_ObjectList.cpp b/src/slic3r/GUI/GUI_ObjectList.cpp index 04fb9b7ca..57469a0c6 100644 --- a/src/slic3r/GUI/GUI_ObjectList.cpp +++ b/src/slic3r/GUI/GUI_ObjectList.cpp @@ -1407,12 +1407,14 @@ bool ObjectList::del_subobject_from_object(const int obj_idx, const int idx, con // Cannot delete a wipe tower. return false; + ModelObject* object = (*m_objects)[obj_idx]; + if (type == itVolume) { - const auto volume = (*m_objects)[obj_idx]->volumes[idx]; + const auto volume = object->volumes[idx]; // if user is deleting the last solid part, throw error int solid_cnt = 0; - for (auto vol : (*m_objects)[obj_idx]->volumes) + for (auto vol : object->volumes) if (vol->is_model_part()) ++solid_cnt; if (volume->is_model_part() && solid_cnt == 1) { @@ -1420,14 +1422,23 @@ bool ObjectList::del_subobject_from_object(const int obj_idx, const int idx, con return false; } - (*m_objects)[obj_idx]->delete_volume(idx); + object->delete_volume(idx); + + if (object->volumes.size() == 1) + { + const auto last_volume = object->volumes[0]; + if (!last_volume->config.empty()) { + object->config.apply(last_volume->config); + last_volume->config.clear(); + } + } } else if (type == itInstance) { - if ((*m_objects)[obj_idx]->instances.size() == 1) { + if (object->instances.size() == 1) { Slic3r::GUI::show_error(nullptr, _(L("You can't delete the last intance from object."))); return false; } - (*m_objects)[obj_idx]->delete_instance(idx); + object->delete_instance(idx); } else return false; @@ -1752,6 +1763,11 @@ void ObjectList::delete_from_model_and_list(const std::vector& it if (item->type&itVolume) { m_objects_model->Delete(m_objects_model->GetItemByVolumeId(item->obj_idx, item->sub_obj_idx)); + if ((*m_objects)[item->obj_idx]->volumes.size() == 1) + { + const wxString extruder = wxString::Format("%d", (*m_objects)[item->obj_idx]->config.option("extruder")->value); + m_objects_model->SetValue(extruder, m_objects_model->GetItemById(item->obj_idx), 1); + } wxGetApp().plater()->canvas3D()->ensure_on_bed(item->obj_idx); } else