diff --git a/src/libslic3r/PresetBundle.cpp b/src/libslic3r/PresetBundle.cpp index 12b1164b4f..02642ad145 100644 --- a/src/libslic3r/PresetBundle.cpp +++ b/src/libslic3r/PresetBundle.cpp @@ -3386,6 +3386,14 @@ std::pair PresetBundle::load_vendor_configs_ return std::make_pair(std::move(substitutions), presets_loaded); } +void PresetBundle::on_extruders_count_changed(int extruders_count) +{ + printers.get_edited_preset().set_num_extruders(extruders_count); + update_multi_material_filament_presets(); + reset_default_nozzle_volume_type(); + extruder_ams_counts.resize(extruders_count); +} + void PresetBundle::update_multi_material_filament_presets(size_t to_delete_filament_id) { if (printers.get_edited_preset().printer_technology() != ptFFF) diff --git a/src/libslic3r/PresetBundle.hpp b/src/libslic3r/PresetBundle.hpp index e36bace897..742c6de218 100644 --- a/src/libslic3r/PresetBundle.hpp +++ b/src/libslic3r/PresetBundle.hpp @@ -256,6 +256,8 @@ public: // update size and content of filament_presets. void update_multi_material_filament_presets(size_t to_delete_filament_id = size_t(-1)); + void on_extruders_count_changed(int extruder_count); + // Update the is_compatible flag of all print and filament presets depending on whether they are marked // as compatible with the currently selected printer (and print in case of filament presets). // Also updates the is_visible flag of each preset. diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index e466631872..1d6c052622 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -1199,12 +1199,14 @@ void Sidebar::priv::update_sync_status(const MachineObject *obj) } std::vector> extruder_ams_counts = wxGetApp().preset_bundle->extruder_ams_counts; - for (size_t i = 0; i < extruder_ams_counts.size(); ++i) { - for (auto iter = extruder_ams_counts[i].begin(); iter != extruder_ams_counts[i].end(); ++iter){ - if (iter->first == 4) - extruder_infos[i].ams_4 = iter->second; - if (iter->first == 1) - extruder_infos[i].ams_1 = iter->second; + if (extruder_ams_counts.size() >= extruder_nums) { + for (size_t i = 0; i < extruder_nums; ++i) { + for (auto iter = extruder_ams_counts[i].begin(); iter != extruder_ams_counts[i].end(); ++iter) { + if (iter->first == 4) + extruder_infos[i].ams_4 = iter->second; + if (iter->first == 1) + extruder_infos[i].ams_1 = iter->second; + } } } diff --git a/src/slic3r/GUI/Tab.cpp b/src/slic3r/GUI/Tab.cpp index 4f484168b8..7c64536cec 100644 --- a/src/slic3r/GUI/Tab.cpp +++ b/src/slic3r/GUI/Tab.cpp @@ -4278,9 +4278,7 @@ void TabPrinter::extruders_count_changed(size_t extruders_count) bool is_count_changed = false; if (m_extruders_count != extruders_count) { m_extruders_count = extruders_count; - m_preset_bundle->printers.get_edited_preset().set_num_extruders(extruders_count); - m_preset_bundle->update_multi_material_filament_presets(); - m_preset_bundle->reset_default_nozzle_volume_type(); + m_preset_bundle->on_extruders_count_changed(extruders_count); is_count_changed = true; wxGetApp().plater()->get_partplate_list().on_extruder_count_changed((int)m_extruders_count);