From 61331ce1132ed77a510785c2c697d4177c873089 Mon Sep 17 00:00:00 2001 From: Noisyfox Date: Wed, 22 Jan 2025 10:02:57 +0800 Subject: [PATCH] Fix extruder number issue when SEMM is not enabled (#8027) * Revert ac80575b28901a46468920cf1707213de4c86d22 * Fix issue that extruder number is not initialized properly when SEMM is not enabled --- src/libslic3r/Preset.cpp | 24 +++++++++++++++++------- src/slic3r/GUI/Tab.cpp | 5 ++--- 2 files changed, 19 insertions(+), 10 deletions(-) diff --git a/src/libslic3r/Preset.cpp b/src/libslic3r/Preset.cpp index 1906013cbd..cfc777c8cc 100644 --- a/src/libslic3r/Preset.cpp +++ b/src/libslic3r/Preset.cpp @@ -318,17 +318,27 @@ std::string Preset::remove_suffix_modified(const std::string &name) // Update new extruder fields at the printer profile. void Preset::normalize(DynamicPrintConfig &config) { - // BBS - auto* filament_diameter = dynamic_cast(config.option("filament_diameter")); - if (filament_diameter != nullptr) - // Loaded the FFF Printer settings. Verify, that all extruder dependent values have enough values. - config.set_num_filaments((unsigned int)filament_diameter->values.size()); + size_t n = 1; + if (config.option("single_extruder_multi_material") == nullptr || config.opt_bool("single_extruder_multi_material")) { + // BBS + auto* filament_diameter = dynamic_cast(config.option("filament_diameter")); + if (filament_diameter != nullptr) { + n = filament_diameter->values.size(); + // Loaded the FFF Printer settings. Verify, that all extruder dependent values have enough values. + config.set_num_filaments((unsigned int) n); + } + } else { + auto* nozzle_diameter = dynamic_cast(config.option("nozzle_diameter")); + if (nozzle_diameter != nullptr) { + n = nozzle_diameter->values.size(); + // Loaded the FFF Printer settings. Verify, that all extruder dependent values have enough values. + config.set_num_extruders((unsigned int) n); + } + } if (config.option("filament_diameter") != nullptr) { // This config contains single or multiple filament presets. // Ensure that the filament preset vector options contain the correct number of values. - // BBS - size_t n = (filament_diameter == nullptr) ? 1 : filament_diameter->values.size(); const auto &defaults = FullPrintConfig::defaults(); for (const std::string &key : Preset::filament_options()) { if (key == "compatible_prints" || key == "compatible_printers") diff --git a/src/slic3r/GUI/Tab.cpp b/src/slic3r/GUI/Tab.cpp index 6ef7e30b34..7ec6d1b976 100644 --- a/src/slic3r/GUI/Tab.cpp +++ b/src/slic3r/GUI/Tab.cpp @@ -5118,13 +5118,12 @@ bool Tab::select_preset(std::string preset_name, bool delete_current /*=false*/, apply_config_from_cache(); // Orca: update presets for the selected printer - load_current_preset(); - if (m_type == Preset::TYPE_PRINTER && wxGetApp().app_config->get_bool("remember_printer_config")) { m_preset_bundle->update_selections(*wxGetApp().app_config); wxGetApp().plater()->sidebar().on_filaments_change(m_preset_bundle->filament_presets.size()); } - + load_current_preset(); + if (delete_third_printer) { wxGetApp().CallAfter([filament_presets, process_presets]() {