From 3488ac62927aa0202d4f6c3c3be981da96ea5363 Mon Sep 17 00:00:00 2001 From: "xun.zhang" Date: Sat, 28 Dec 2024 15:10:55 +0800 Subject: [PATCH] FIX: crash of filament group in cli mode 1. Add protection for building machine filaments.Sometimes we don't know the info about maahcine filament jira:NONE Signed-off-by: xun.zhang Change-Id: I3198d3a1a8825aa50aa49734f60a32620fc4f890 (cherry picked from commit 0c60cefe5e188ba966f4c254f833ae81bc5da476) --- src/OrcaSlicer.cpp | 9 +++++++++ src/libslic3r/FilamentGroupUtils.cpp | 21 ++++++++++++++------- 2 files changed, 23 insertions(+), 7 deletions(-) diff --git a/src/OrcaSlicer.cpp b/src/OrcaSlicer.cpp index fb2b37fda7..b88db1c465 100644 --- a/src/OrcaSlicer.cpp +++ b/src/OrcaSlicer.cpp @@ -5147,6 +5147,10 @@ int CLI::run(int argc, char **argv) std::vector extruder_ams_count(new_extruder_count, ""); std::vector> extruder_filament_info(new_extruder_count, std::vector()); int color_count = 0; + + const ConfigOptionStrings* filament_type = dynamic_cast(m_print_config.option("filament_type")); + std::vector types = filament_type ? filament_type->vserialize() : std::vector{"PLA"}; + for (int e_index = 0; e_index < new_extruder_count; e_index++) { extruder_ams_count[e_index] = "1#0|4#1"; @@ -5154,10 +5158,15 @@ int CLI::run(int argc, char **argv) { DynamicPrintConfig temp_config; std::vector temp_colors(1, "#FFFFFFFF"); + std::vector temp_types(1, "PLA"); //if (filament_color) { // temp_colors[0] = colors[color_count % colors.size()]; //} + if (filament_type) + temp_types[0] = types[color_count % types.size()]; + temp_config.option("filament_colour", true)->values = temp_colors; + temp_config.option("filament_type", true)->values = temp_types; extruder_filament_info[e_index].push_back(std::move(temp_config)); color_count++; } diff --git a/src/libslic3r/FilamentGroupUtils.cpp b/src/libslic3r/FilamentGroupUtils.cpp index 7875ad9fb8..3f2bb5c5f7 100644 --- a/src/libslic3r/FilamentGroupUtils.cpp +++ b/src/libslic3r/FilamentGroupUtils.cpp @@ -79,14 +79,21 @@ namespace FilamentGroupUtils auto& arr = filament_configs[idx]; for (auto& item : arr) { FilamentInfo temp; - std::string color_str = item.option("filament_colour")->get_at(0); - if (color_str.empty()) - temp.color = Color(); - else - temp.color = Color(color_str); - temp.type = item.option("filament_type")->get_at(0); + std::string type = "PLA"; + std::string color = "#FFFFFF"; + std::string tray_name; + + if (auto color_ptr = item.option("filament_colour"); color_ptr) + color = color_ptr->get_at(0); + if (auto type_ptr = item.option("filament_type"); type_ptr) + type = type_ptr->get_at(0); + if (auto tray_ptr = item.option("tray_name"); tray_ptr) + tray_name = tray_ptr->get_at(0); + + temp.color = color.empty() ? Color() : Color(color); + temp.type =type; temp.extruder_id = idx; - temp.is_extended = item.option("tray_name")->get_at(0) == "Ext"; // hard-coded ext flag + temp.is_extended = tray_name == "Ext"; // hard-coded ext flag machine_filaments[idx].emplace_back(std::move(temp)); } }