From 57a5442c11ee57ddb20a5673e43faa6d0119b751 Mon Sep 17 00:00:00 2001 From: tome9111991 <57866234+tome9111991@users.noreply.github.com> Date: Mon, 27 Apr 2026 16:46:31 +0200 Subject: [PATCH] Fix AMS filament preset switch crash --- src/slic3r/GUI/Plater.cpp | 6 +++++- src/slic3r/GUI/PresetComboBoxes.cpp | 5 +++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index 9a1eb804428..0c9ce41b160 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -3258,7 +3258,8 @@ std::map Sidebar::build_filament_ams_list(MachineObject tray_config.set_key_value("slot_id", new ConfigOptionStrings{slot_id}); tray_config.set_key_value("filament_type", new ConfigOptionStrings{tray.m_fila_type}); tray_config.set_key_value("tray_name", new ConfigOptionStrings{ name }); - tray_config.set_key_value("filament_colour", new ConfigOptionStrings{into_u8(wxColour("#" + tray.color).GetAsString(wxC2S_HTML_SYNTAX))}); + const std::string filament_color = into_u8(wxColour("#" + tray.color).GetAsString(wxC2S_HTML_SYNTAX)); + tray_config.set_key_value("filament_colour", new ConfigOptionStrings{filament_color}); tray_config.set_key_value("filament_multi_colour", new ConfigOptionStrings{}); tray_config.set_key_value("filament_colour_type", new ConfigOptionStrings{std::to_string(tray.ctype)}); tray_config.set_key_value("filament_exist", new ConfigOptionBools{tray.is_exists}); @@ -3271,6 +3272,9 @@ std::map Sidebar::build_filament_ams_list(MachineObject for (int i = 0; i < tray.cols.size(); ++i) { tray_config.opt("filament_multi_colour")->values.push_back(into_u8(wxColour("#" + tray.cols[i]).GetAsString(wxC2S_HTML_SYNTAX))); } + if (tray_config.opt("filament_multi_colour")->values.empty() && !filament_color.empty()) { + tray_config.opt("filament_multi_colour")->values.push_back(filament_color); + } return tray_config; }; diff --git a/src/slic3r/GUI/PresetComboBoxes.cpp b/src/slic3r/GUI/PresetComboBoxes.cpp index 9296d0100a2..e251a055b55 100644 --- a/src/slic3r/GUI/PresetComboBoxes.cpp +++ b/src/slic3r/GUI/PresetComboBoxes.cpp @@ -256,6 +256,11 @@ int PresetComboBox::update_ams_color() auto color_pack = static_cast(cfg->option("filament_multi_colour")->clone()); // multi color (all colors in all kinds of filament) auto color_type = static_cast(cfg->option("filament_colour_type")->clone()); // color type + if (m_filament_idx >= color_head->values.size()) color_head->values.resize(m_filament_idx + 1); + if (m_filament_idx >= color_pack->values.size()) color_pack->values.resize(m_filament_idx + 1); + if (m_filament_idx >= color_type->values.size()) color_type->values.resize(m_filament_idx + 1); + if (ctype.empty()) ctype = "1"; + color_head->values[m_filament_idx] = color; color_type->values[m_filament_idx] = ctype; std::string color_str = ""; // Translate multi color info to config storage format