diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index 30e1ae1313..f7b22eddc5 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -1572,8 +1572,10 @@ bool Sidebar::priv::switch_diameter(bool single) auto* nozzle_diameter = dynamic_cast(printer_preset.config.option("nozzle_diameter")); if (nozzle_diameter && nozzle_diameter->size() > 0) { auto current_nozzle_dia = get_diameter_string(nozzle_diameter->values[0]); - // If the selected diameter is the same as current nozzle, don't switch profiles - if (current_nozzle_dia == diameter.ToStdString()) { + // A named variant can share this diameter; selecting the plain diameter + // must still switch back to the standard profile. + if (current_nozzle_dia == diameter.ToStdString() && + printer_preset.config.opt_string("printer_variant") == diameter.ToStdString()) { return true; } } @@ -3677,11 +3679,16 @@ void Sidebar::update_presets(Preset::Type preset_type) extruder.combo_flow->SetSelection(select); }; - auto update_extruder_diameter = [&diameters, &nozzle_diameter](int extruder_index,ExtruderGroup & extruder) { + auto update_extruder_diameter = [&diameters, &nozzle_diameter, &diameter](int extruder_index,ExtruderGroup & extruder) { extruder.combo_diameter->Clear(); int select = -1; // ORCA get the actual nozzle diameter from printer config auto nozzle_dia = get_diameter_string(nozzle_diameter->values[extruder_index]); + // Named variants such as "0.4 High Flow" share a physical diameter. + // Retain the variant selection unless the diameter was customized. + const auto selected_variant = + (diameter == nozzle_dia || boost::algorithm::starts_with(diameter, nozzle_dia + " ")) && + std::find(diameters.begin(), diameters.end(), diameter) != diameters.end() ? diameter : nozzle_dia; // ORCA try to add nozzle diameter from config if list is empty. fixes blank nozzle combo box when preset has no alias if(diameters[0].empty() && !nozzle_dia.empty()){ diameters[0] = nozzle_dia; @@ -3691,7 +3698,7 @@ void Sidebar::update_presets(Preset::Type preset_type) diameters.push_back(nozzle_dia); } for (size_t i = 0; i < diameters.size(); ++i) { - if (diameters[i] == nozzle_dia) + if (diameters[i] == selected_variant) select = extruder.combo_diameter->GetCount(); extruder.combo_diameter->Append(diameters[i], {}); }