From 128d0f77081712d92e5478e1a8ad04e29d026fe3 Mon Sep 17 00:00:00 2001 From: YuSanka Date: Tue, 31 Jul 2018 12:04:01 +0200 Subject: [PATCH] Correct object splitting to parts (sub-objects) --- xs/src/slic3r/GUI/GUI_ObjectParts.cpp | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/xs/src/slic3r/GUI/GUI_ObjectParts.cpp b/xs/src/slic3r/GUI/GUI_ObjectParts.cpp index 3bfbfe736..07bc115b7 100644 --- a/xs/src/slic3r/GUI/GUI_ObjectParts.cpp +++ b/xs/src/slic3r/GUI/GUI_ObjectParts.cpp @@ -608,7 +608,6 @@ void add_object_to_list(const std::string &name, ModelObject* model_object) for (auto id = 0; id < model_object->volumes.size(); id++) m_objects_model->AddChild(item, model_object->volumes[id]->name, m_icon_solidmesh, false); - ModelObjectPtrs* objects = m_objects; // part_selection_changed(); #ifdef __WXMSW__ object_ctrl_selection_changed(); @@ -841,6 +840,14 @@ void get_settings_choice(wxMenu *menu, int id, bool is_part) update_settings_list(); } +bool cur_item_hase_children() +{ + wxDataViewItemArray children; + if (m_objects_model->GetChildren(m_objects_ctrl->GetSelection(), children) > 0) + return true; + return false; +} + wxMenu *create_add_part_popupmenu() { wxMenu *menu = new wxMenu; @@ -860,6 +867,7 @@ wxMenu *create_add_part_popupmenu() auto menu_item = new wxMenuItem(menu, config_id_base + 3, _(L("Split to sub-objects"))); menu_item->SetBitmap(m_bmp_split); menu->Append(menu_item); + menu_item->Enable(!cur_item_hase_children()); wxWindow* win = get_tab_panel()->GetPage(0); @@ -1111,11 +1119,15 @@ void on_btn_split() volume = (*m_objects)[m_selected_object_id]->volumes[volume_id]; DynamicPrintConfig& config = get_preset_bundle()->printers.get_edited_preset().config; auto nozzle_dmrs_cnt = config.option("nozzle_diameter")->values.size(); - if (volume->split(nozzle_dmrs_cnt) > 1) { - auto model_object = (*m_objects)[m_selected_object_id]; - for (auto id = 0; id < model_object->volumes.size(); id++) - m_objects_model->AddChild(item, model_object->volumes[id]->name, m_icon_solidmesh, false); - } + auto split_rez = volume->split(nozzle_dmrs_cnt); + if (split_rez == 1) { + wxMessageBox(_(L("The selected object couldn't be split because it contains only one part."))); + return; + } + + auto model_object = (*m_objects)[m_selected_object_id]; + for (auto id = 0; id < model_object->volumes.size(); id++) + m_objects_model->AddChild(item, model_object->volumes[id]->name, m_icon_solidmesh, false); } void on_btn_move_up(){