From 6a254c35d4aa9cb7ee5921641be35e1c17208a48 Mon Sep 17 00:00:00 2001 From: Noisyfox Date: Mon, 13 Jul 2026 09:52:18 +0800 Subject: [PATCH] Make printer profile swithing faster (#14437) * Fix issue that switching printer profile is slow. `wxGetApp().get_tab(preset_type)->select_preset(preset_name);` is called twice when switching printer profiles. Only one needed. * Avoid unnecessary type conversion & function call during printer profile switching: - Don't call `config->opt_string("printer_model")` repeatedly - Use ref when possible during iterating - Avoid unnecessary `wxString` to `std::string` conversion --- src/libslic3r/Preset.cpp | 18 ++++++++---------- src/slic3r/GUI/Plater.cpp | 11 +++++++---- src/slic3r/GUI/PresetComboBoxes.cpp | 2 +- 3 files changed, 16 insertions(+), 15 deletions(-) diff --git a/src/libslic3r/Preset.cpp b/src/libslic3r/Preset.cpp index b9319ec0e3..f41e05ebc5 100644 --- a/src/libslic3r/Preset.cpp +++ b/src/libslic3r/Preset.cpp @@ -890,12 +890,11 @@ std::string Preset::get_printer_type(PresetBundle *preset_bundle) { if (preset_bundle) { auto config = &preset_bundle->printers.get_edited_preset().config; - std::string vendor_name; - for (auto vendor_profile : preset_bundle->vendors) { - for (auto vendor_model : vendor_profile.second.models) - if (vendor_model.name == config->opt_string("printer_model")) + const auto& printer_model = config->opt_string("printer_model"); + for (const auto& vendor_profile : preset_bundle->vendors) { + for (const auto& vendor_model : vendor_profile.second.models) + if (vendor_model.name == printer_model) { - vendor_name = vendor_profile.first; return vendor_model.model_id; } } @@ -907,11 +906,10 @@ std::string Preset::get_current_printer_type(PresetBundle *preset_bundle) { if (preset_bundle) { auto config = &(this->config); - std::string vendor_name; - for (auto vendor_profile : preset_bundle->vendors) { - for (auto vendor_model : vendor_profile.second.models) - if (vendor_model.name == config->opt_string("printer_model")) { - vendor_name = vendor_profile.first; + const auto& printer_model = config->opt_string("printer_model"); + for (const auto& vendor_profile : preset_bundle->vendors) { + for (const auto& vendor_model : vendor_profile.second.models) + if (vendor_model.name == printer_model) { return vendor_model.model_id; } } diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index b8e13ed8ff..17015561ce 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -9684,11 +9684,14 @@ void Plater::priv::on_select_preset(wxCommandEvent &evt) } } } + } else { + // BBS + // wxWindowUpdateLocker noUpdates1(sidebar->print_panel()); + wxWindowUpdateLocker noUpdates2(sidebar->filament_panel()); + wxGetApp().get_tab(preset_type)->select_preset(preset_name); + // update plater with new config + q->on_config_change(wxGetApp().preset_bundle->full_config()); } - //BBS - //wxWindowUpdateLocker noUpdates1(sidebar->print_panel()); - wxWindowUpdateLocker noUpdates2(sidebar->filament_panel()); - wxGetApp().get_tab(preset_type)->select_preset(preset_name); } // ORCA: Always refresh the selected filament combo so its color swatch (clr_picker) diff --git a/src/slic3r/GUI/PresetComboBoxes.cpp b/src/slic3r/GUI/PresetComboBoxes.cpp index 87c15e5649..a6798c077e 100644 --- a/src/slic3r/GUI/PresetComboBoxes.cpp +++ b/src/slic3r/GUI/PresetComboBoxes.cpp @@ -1310,7 +1310,7 @@ void PlaterPresetComboBox::update() selected_in_ams = add_ams_filaments(into_u8(selected_user_preset.empty() ? selected_system_preset : selected_user_preset), true); } - std::vector filament_orders = {"Bambu PLA Basic", "Bambu PLA Matte", "Bambu PETG HF", "Bambu ABS", "Bambu PLA Silk", "Bambu PLA-CF", + std::vector filament_orders = {"Bambu PLA Basic", "Bambu PLA Matte", "Bambu PETG HF", "Bambu ABS", "Bambu PLA Silk", "Bambu PLA-CF", "Bambu PLA Galaxy", "Bambu PLA Metal", "Bambu PLA Marble", "Bambu PETG-CF", "Bambu PETG Translucent", "Bambu ABS-GF"}; std::vector first_vendors = {"", "Bambu", "Generic"}; // Empty vendor for non-system presets std::vector first_types = {"PLA", "PETG", "ABS", "TPU"};