diff --git a/src/libslic3r/Preset.cpp b/src/libslic3r/Preset.cpp index c5513df..93a2e87 100644 --- a/src/libslic3r/Preset.cpp +++ b/src/libslic3r/Preset.cpp @@ -1215,15 +1215,27 @@ Preset* PresetCollection::find_preset(const std::string &name, bool first_visibl } // Return index of the first visible preset. Certainly at least the '- default -' preset shall be visible. +//B40 size_t PresetCollection::first_visible_idx() const { - size_t idx = m_default_suppressed ? m_num_default_presets : 0; - for (; idx < m_presets.size(); ++ idx) - if (m_presets[idx].is_visible) - break; - if (idx == m_presets.size()) - idx = 0; - return idx; + size_t first_visible = -1; + size_t idx = m_default_suppressed ? m_num_default_presets : 0; + for (; idx < m_presets.size(); ++idx) + if (m_presets[idx].is_visible) { + if (first_visible == -1) + first_visible = idx; + if (m_type != Preset::TYPE_FILAMENT) + break; + else { + if (m_presets[idx].name.find("PLA") != std::string::npos) { + first_visible = idx; + break; + } + } + } + if (first_visible == -1) + first_visible = 0; + return first_visible; } void PresetCollection::set_default_suppressed(bool default_suppressed) diff --git a/src/libslic3r/PresetBundle.cpp b/src/libslic3r/PresetBundle.cpp index bd37800..a69dd42 100644 --- a/src/libslic3r/PresetBundle.cpp +++ b/src/libslic3r/PresetBundle.cpp @@ -48,7 +48,7 @@ PresetBundle::PresetBundle() : // The following keys are handled by the UI, they do not have a counterpart in any StaticPrintConfig derived classes, // therefore they need to be handled differently. As they have no counterpart in StaticPrintConfig, they are not being // initialized based on PrintConfigDef(), but to empty values (zeros, empty vectors, empty strings). - // + // "compatible_printers", "compatible_printers_condition", "inherits", // "print_settings_id", "filament_settings_id", "printer_settings_id", "printer_settings_id" // "printer_vendor", "printer_model", "printer_variant", "default_print_profile", "default_filament_profile" @@ -1679,8 +1679,15 @@ void PresetBundle::update_multi_material_filament_presets() auto *nozzle_diameter = static_cast(printers.get_edited_preset().config.option("nozzle_diameter")); size_t num_extruders = nozzle_diameter->values.size(); // Verify validity of the current filament presets. - for (size_t i = 0; i < std::min(this->extruders_filaments.size(), num_extruders); ++i) - this->extruders_filaments[i].select_filament(this->filaments.find_preset(this->extruders_filaments[i].get_selected_preset_name(), true)->name); + //B40 + for (size_t i = 0; i < std::min(this->extruders_filaments.size(), num_extruders); ++i) { + this->extruders_filaments[i].select_filament(this->filaments + .find_preset(this->filaments.get_selected_idx() == size_t(-1) ? + this->filaments.first_visible().name : + this->extruders_filaments[i].get_selected_preset_name(), + true) + ->name); + } if (this->extruders_filaments.size() > num_extruders) this->extruders_filaments.resize(num_extruders);