From 1af51d66c677a61938165d0ae9508d80e6635c92 Mon Sep 17 00:00:00 2001 From: xiaoyeliu <166936931+womendoushihaoyin@users.noreply.github.com> Date: Sat, 14 Dec 2024 14:38:35 +0800 Subject: [PATCH] =?UTF-8?q?Fix:=20Switching=20between=20multi-extruder=20p?= =?UTF-8?q?rinters=20using=20tabs=20can=20cause=20t=E2=80=A6=20(#7483)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit fix: Switching between multi-extruder printers using tabs can cause the filament count to be incorrect. --- src/slic3r/GUI/Tab.cpp | 15 +++++++++++---- src/slic3r/GUI/UnsavedChangesDialog.cpp | 12 +++++++----- 2 files changed, 18 insertions(+), 9 deletions(-) diff --git a/src/slic3r/GUI/Tab.cpp b/src/slic3r/GUI/Tab.cpp index 715ec7e533..9ec397be77 100644 --- a/src/slic3r/GUI/Tab.cpp +++ b/src/slic3r/GUI/Tab.cpp @@ -5115,8 +5115,14 @@ bool Tab::select_preset(std::string preset_name, bool delete_current /*=false*/, // Orca: update presets for the selected printer 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()); + m_preset_bundle->update_selections(*wxGetApp().app_config); + int extruders_count = m_preset_bundle->printers.get_edited_preset().config.opt("nozzle_diameter")->values.size(); + if (extruders_count > 1) { + // multi tool + wxGetApp().plater()->sidebar().on_filaments_change(extruders_count); + } else { + wxGetApp().plater()->sidebar().on_filaments_change(m_preset_bundle->filament_presets.size()); + } } load_current_preset(); @@ -6098,8 +6104,9 @@ void Page::update_visibility(ConfigOptionMode mode, bool update_contolls_visibil #ifdef __WXMSW__ if (!m_show) return; // BBS: fix field control position - wxTheApp->CallAfter([this]() { - for (auto group : m_optgroups) { + auto groups = this->m_optgroups; + wxTheApp->CallAfter([groups]() { + for (auto group : groups) { if (group->custom_ctrl) group->custom_ctrl->fixup_items_positions(); } }); diff --git a/src/slic3r/GUI/UnsavedChangesDialog.cpp b/src/slic3r/GUI/UnsavedChangesDialog.cpp index a4797fdc27..85b718d0b8 100644 --- a/src/slic3r/GUI/UnsavedChangesDialog.cpp +++ b/src/slic3r/GUI/UnsavedChangesDialog.cpp @@ -1664,17 +1664,19 @@ void UnsavedChangesDialog::update_tree(Preset::Type type, PresetCollection* pres // process changes of extruders count if (type == Preset::TYPE_PRINTER && old_pt == ptFFF && - old_config.opt("extruder_colour")->values.size() != new_config.opt("extruder_colour")->values.size()) { + old_config.opt("nozzle_diameter")->values.size() != new_config.opt("nozzle_diameter")->values.size()) { wxString local_label = _L("Extruders count"); - wxString old_val = from_u8((boost::format("%1%") % old_config.opt("extruder_colour")->values.size()).str()); - wxString new_val = from_u8((boost::format("%1%") % new_config.opt("extruder_colour")->values.size()).str()); + wxString old_val = from_u8((boost::format("%1%") % old_config.opt("nozzle_diameter")->values.size()).str()); + wxString new_val = from_u8((boost::format("%1%") % new_config.opt("nozzle_diameter")->values.size()).str()); //BBS: the page "General" changed to "Basic information" instead //m_tree->Append("extruders_count", type, _L("General"), _L("Capabilities"), local_label, old_val, new_val, category_icon_map.at("Basic information")); //m_tree->Append("extruders_count", type, _L("General"), _L("Capabilities"), local_label, old_val, new_val, category_icon_map.at("General")); - PresetItem pi = {type, "extruders_count", _L("General"), _L("Capabilities"), local_label, old_val, new_val}; - m_presetitems.push_back(pi); + if (old_val != new_val) { + PresetItem pi = {type, "extruders_count", _L("General"), _L("Capabilities"), local_label, old_val, new_val}; + m_presetitems.push_back(pi); + } } for (const std::string& opt_key : dirty_options) {