diff --git a/src/libslic3r/Model.cpp b/src/libslic3r/Model.cpp index b7623e27a..9fe12bb3b 100644 --- a/src/libslic3r/Model.cpp +++ b/src/libslic3r/Model.cpp @@ -3107,7 +3107,7 @@ void ModelVolume::update_extruder_count_when_delete_filament(size_t extruder_cou std::vector used_extruders = get_extruders(); for (int extruder_id : used_extruders) { if (extruder_id == filament_id) { - mmu_segmentation_facets.set_enforcer_block_type_limit(*this, (EnforcerBlockerType)(extruder_count + 1), (EnforcerBlockerType)(filament_id + 1), (EnforcerBlockerType)(replace_filament_id + 1)); + mmu_segmentation_facets.set_enforcer_block_type_limit(*this, (EnforcerBlockerType)(extruder_count), (EnforcerBlockerType)(filament_id), (EnforcerBlockerType)(replace_filament_id)); break; } } diff --git a/src/libslic3r/TriangleSelector.cpp b/src/libslic3r/TriangleSelector.cpp index 222c7e668..d9e8b8654 100644 --- a/src/libslic3r/TriangleSelector.cpp +++ b/src/libslic3r/TriangleSelector.cpp @@ -1768,13 +1768,17 @@ void TriangleSelector::deserialize(const std::pair max_ebt || state == to_delete_filament) + if (state == to_delete_filament) state = replace_filament; - - if (to_delete_filament != EnforcerBlockerType::NONE && state != EnforcerBlockerType::NONE) { + else if (to_delete_filament != EnforcerBlockerType::NONE && state != EnforcerBlockerType::NONE) { state = state > to_delete_filament ? EnforcerBlockerType((int)state - 1) : state; } + if (state > max_ebt) { + assert(false); + state = EnforcerBlockerType::NONE; + } + // Only valid if is_split. int special_side = code >> 2; diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index a49c6c6e4..0978afb57 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -1974,7 +1974,7 @@ void Sidebar::delete_filament(size_t filament_id, int replace_filament_id) { wxGetApp().preset_bundle->update_num_filaments(filament_id); wxGetApp().plater()->get_partplate_list().on_filament_deleted(filament_count, filament_id); - wxGetApp().plater()->on_filaments_delete(filament_count, filament_id, replace_filament_id > filament_id ? (replace_filament_id - 1) : replace_filament_id); + wxGetApp().plater()->on_filaments_delete(filament_count, filament_id, replace_filament_id > (int)filament_id ? (replace_filament_id - 1) : replace_filament_id); wxGetApp().get_tab(Preset::TYPE_PRINT)->update(); wxGetApp().preset_bundle->export_selections(*wxGetApp().app_config); } @@ -13422,7 +13422,7 @@ void Plater::on_filaments_delete(size_t num_filaments, size_t filament_id, int r // update mmu info for (ModelObject *mo : wxGetApp().model().objects) { for (ModelVolume *mv : mo->volumes) { - mv->update_extruder_count_when_delete_filament(num_filaments, filament_id, replace_filament_id); + mv->update_extruder_count_when_delete_filament(num_filaments, filament_id + 1, replace_filament_id + 1); // this function is 1 base } } diff --git a/src/slic3r/GUI/Plater.hpp b/src/slic3r/GUI/Plater.hpp index 6f02def15..9906097e1 100644 --- a/src/slic3r/GUI/Plater.hpp +++ b/src/slic3r/GUI/Plater.hpp @@ -141,7 +141,7 @@ public: void on_filaments_delete(size_t filament_id); void add_filament(); - void delete_filament(size_t filament_id = size_t(-1), int replace_filament_id = -1); // 0 base + void delete_filament(size_t filament_id = size_t(-1), int replace_filament_id = -1); // 0 base, -1 means default void change_filament(size_t from_id, size_t to_id); // 0 base void edit_filament(); void add_custom_filament(wxColour new_col);