From 99993170ebd1ea4fd1644972a2bbfd5708da966a Mon Sep 17 00:00:00 2001 From: Enrico Turri Date: Thu, 11 Apr 2019 11:09:32 +0200 Subject: [PATCH] Copy and paste -> Fixed copy of multiple instances and volumes insertion into objects list --- src/slic3r/GUI/GUI_ObjectList.cpp | 6 ++++-- src/slic3r/GUI/Selection.cpp | 4 ++-- src/slic3r/GUI/wxExtensions.cpp | 5 +++-- src/slic3r/GUI/wxExtensions.hpp | 3 ++- 4 files changed, 11 insertions(+), 7 deletions(-) diff --git a/src/slic3r/GUI/GUI_ObjectList.cpp b/src/slic3r/GUI/GUI_ObjectList.cpp index 4d205fa5f..fd2c43806 100644 --- a/src/slic3r/GUI/GUI_ObjectList.cpp +++ b/src/slic3r/GUI/GUI_ObjectList.cpp @@ -1630,7 +1630,8 @@ void ObjectList::split() model_object->volumes[id]->is_modifier() ? ModelVolumeType::PARAMETER_MODIFIER : ModelVolumeType::MODEL_PART, model_object->volumes[id]->config.has("extruder") ? - model_object->volumes[id]->config.option("extruder")->value : 0); + model_object->volumes[id]->config.option("extruder")->value : 0, + false); // add settings to the part, if it has those auto opt_keys = model_object->volumes[id]->config.keys(); if ( !(opt_keys.size() == 1 && opt_keys[0] == "extruder") ) { @@ -1824,7 +1825,8 @@ void ObjectList::add_object_to_list(size_t obj_idx) from_u8(model_object->volumes[id]->name), model_object->volumes[id]->type(), !model_object->volumes[id]->config.has("extruder") ? 0 : - model_object->volumes[id]->config.option("extruder")->value); + model_object->volumes[id]->config.option("extruder")->value, + false); auto opt_keys = model_object->volumes[id]->config.keys(); if (!opt_keys.empty() && !(opt_keys.size() == 1 && opt_keys[0] == "extruder")) { select_item(m_objects_model->AddSettingsChild(vol_item)); diff --git a/src/slic3r/GUI/Selection.cpp b/src/slic3r/GUI/Selection.cpp index cb5add462..02149f275 100644 --- a/src/slic3r/GUI/Selection.cpp +++ b/src/slic3r/GUI/Selection.cpp @@ -1045,12 +1045,12 @@ void Selection::copy_to_clipboard() for (unsigned int i : m_list) { const GLVolume* volume = (*m_volumes)[i]; - if (volume->object_idx() == object.first) + if ((volume->object_idx() == object.first) && (volume->instance_idx() == *object.second.begin())) { int volume_idx = volume->volume_idx(); if ((0 <= volume_idx) && (volume_idx < (int)src_object->volumes.size())) { - ModelVolume* src_volume = src_object->volumes[volume->volume_idx()]; + ModelVolume* src_volume = src_object->volumes[volume_idx]; ModelVolume* dst_volume = dst_object->add_volume(*src_volume); dst_volume->set_new_unique_id(); dst_volume->config = src_volume->config; diff --git a/src/slic3r/GUI/wxExtensions.cpp b/src/slic3r/GUI/wxExtensions.cpp index a6b879297..356977b3a 100644 --- a/src/slic3r/GUI/wxExtensions.cpp +++ b/src/slic3r/GUI/wxExtensions.cpp @@ -531,7 +531,8 @@ wxDataViewItem PrusaObjectDataViewModel::Add(const wxString &name, const int ext wxDataViewItem PrusaObjectDataViewModel::AddVolumeChild(const wxDataViewItem &parent_item, const wxString &name, const Slic3r::ModelVolumeType volume_type, - const int extruder/* = 0*/) + const int extruder/* = 0*/, + const bool create_frst_child/* = true*/) { PrusaObjectDataViewModelNode *root = (PrusaObjectDataViewModelNode*)parent_item.GetID(); if (!root) return wxDataViewItem(0); @@ -543,7 +544,7 @@ wxDataViewItem PrusaObjectDataViewModel::AddVolumeChild(const wxDataViewItem &pa if (insert_position < 0 || root->GetNthChild(insert_position)->m_type != itInstanceRoot) insert_position = -1; - if (root->m_volumes_cnt == 0) + if (create_frst_child && root->m_volumes_cnt == 0) { const auto node = new PrusaObjectDataViewModelNode(root, root->m_name, *m_volume_bmps[0], extruder_str, 0); insert_position < 0 ? root->Append(node) : root->Insert(node, insert_position); diff --git a/src/slic3r/GUI/wxExtensions.hpp b/src/slic3r/GUI/wxExtensions.hpp index 19c4e7759..b935448d9 100644 --- a/src/slic3r/GUI/wxExtensions.hpp +++ b/src/slic3r/GUI/wxExtensions.hpp @@ -457,7 +457,8 @@ public: wxDataViewItem AddVolumeChild(const wxDataViewItem &parent_item, const wxString &name, const Slic3r::ModelVolumeType volume_type, - const int extruder = 0); + const int extruder = 0, + const bool create_frst_child = true); wxDataViewItem AddSettingsChild(const wxDataViewItem &parent_item); wxDataViewItem AddInstanceChild(const wxDataViewItem &parent_item, size_t num); wxDataViewItem Delete(const wxDataViewItem &item);