diff --git a/src/slic3r/GUI/GUI_ObjectList.cpp b/src/slic3r/GUI/GUI_ObjectList.cpp index a33e442ff..bb824ab00 100644 --- a/src/slic3r/GUI/GUI_ObjectList.cpp +++ b/src/slic3r/GUI/GUI_ObjectList.cpp @@ -798,17 +798,19 @@ void ObjectList::show_context_menu() void ObjectList::copy() { - if (m_selection_mode & smLayer) - fill_layer_config_ranges_cache(); - else + // if (m_selection_mode & smLayer) + // fill_layer_config_ranges_cache(); + // else { + // m_layer_config_ranges_cache.clear(); wxPostEvent((wxEvtHandler*)wxGetApp().plater()->canvas3D()->get_wxglcanvas(), SimpleEvent(EVT_GLTOOLBAR_COPY)); + // } } void ObjectList::paste() { - if (!m_layer_config_ranges_cache.empty()) - paste_layers_into_list(); - else + // if (!m_layer_config_ranges_cache.empty()) + // paste_layers_into_list(); + // else wxPostEvent((wxEvtHandler*)wxGetApp().plater()->canvas3D()->get_wxglcanvas(), SimpleEvent(EVT_GLTOOLBAR_PASTE)); } @@ -2809,7 +2811,8 @@ void ObjectList::update_selections_on_canvas() std::vector volume_idxs; Selection::EMode mode = Selection::Volume; - auto add_to_selection = [this, &volume_idxs](const wxDataViewItem& item, const Selection& selection, int instance_idx, Selection::EMode& mode) + bool single_selection = sel_cnt == 1; + auto add_to_selection = [this, &volume_idxs, &single_selection](const wxDataViewItem& item, const Selection& selection, int instance_idx, Selection::EMode& mode) { const ItemType& type = m_objects_model->GetItemType(item); const int obj_idx = m_objects_model->GetObjectIdByItem(item); @@ -2828,6 +2831,7 @@ void ObjectList::update_selections_on_canvas() else { mode = Selection::Instance; + single_selection = false; std::vector idxs = selection.get_volume_idxs_from_object(obj_idx); volume_idxs.insert(volume_idxs.end(), idxs.begin(), idxs.end()); } @@ -2869,7 +2873,7 @@ void ObjectList::update_selections_on_canvas() // add volume_idxs = selection.get_unselected_volume_idxs_from(volume_idxs); Plater::TakeSnapshot snapshot(wxGetApp().plater(), _(L("Selection-Add from list"))); - selection.add_volumes(mode, volume_idxs, sel_cnt == 1); + selection.add_volumes(mode, volume_idxs, single_selection); } wxGetApp().plater()->canvas3D()->update_gizmos_on_off_state(); @@ -2934,6 +2938,7 @@ void ObjectList::select_item_all_children() // update selection mode for non-multiple selection void ObjectList::update_selection_mode() { + m_selected_layers_range_idx=-1; // All items are unselected if (!GetSelection()) { diff --git a/src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp b/src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp index 267c4f899..8929bd5dc 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp @@ -59,7 +59,7 @@ bool GLGizmoSlaSupports::on_init() void GLGizmoSlaSupports::set_sla_support_data(ModelObject* model_object, const Selection& selection) { - if (selection.is_empty()) { + if (! model_object || selection.is_empty()) { m_model_object = nullptr; return; } @@ -1031,13 +1031,18 @@ RENDER_AGAIN: if (remove_selected || remove_all) { force_refresh = false; m_parent.set_as_dirty(); + bool was_in_editing = m_editing_mode; + if (! was_in_editing) + switch_to_editing_mode(); if (remove_all) { - if (!m_editing_mode) - switch_to_editing_mode(); select_point(AllPoints); delete_selected_points(true); // true - delete regardless of locked status - editing_mode_apply_changes(); } + if (remove_selected) + delete_selected_points(false); // leave locked points + if (! was_in_editing) + editing_mode_apply_changes(); + if (first_run) { first_run = false; goto RENDER_AGAIN; @@ -1172,7 +1177,8 @@ void GLGizmoSlaSupports::on_load(cereal::BinaryInputArchive& ar) m_model_object_id, m_new_point_head_diameter, m_normal_cache, - m_editing_cache + m_editing_cache, + m_selection_empty ); } @@ -1185,7 +1191,8 @@ void GLGizmoSlaSupports::on_save(cereal::BinaryOutputArchive& ar) const m_model_object_id, m_new_point_head_diameter, m_normal_cache, - m_editing_cache + m_editing_cache, + m_selection_empty ); }