diff --git a/src/libslic3r/Preset.cpp b/src/libslic3r/Preset.cpp index 3660d85db0..28f174399c 100644 --- a/src/libslic3r/Preset.cpp +++ b/src/libslic3r/Preset.cpp @@ -2235,7 +2235,7 @@ std::map> PresetCollection::get_filamen } //BBS: add project embedded preset logic -void PresetCollection::save_current_preset(const std::string &new_name, bool detach, bool save_to_project, Preset* _curr_preset) +void PresetCollection::save_current_preset(const std::string &new_name, bool detach, bool save_to_project, Preset* _curr_preset, const Preset* _current_printer) { Preset curr_preset = _curr_preset ? *_curr_preset : m_edited_preset; //BBS: add lock logic for sync preset in background @@ -2303,6 +2303,14 @@ void PresetCollection::save_current_preset(const std::string &new_name, bool det } else if (is_base_preset(preset)) { inherits = old_name; } + // Orca: check if compatible_printers exists and is not empty, set it to the current printer if it is empty + if (nullptr != _current_printer && preset.is_system && m_type == Preset::TYPE_FILAMENT) { + ConfigOptionStrings* compatible_printers = preset.config.option("compatible_printers"); + if (compatible_printers && compatible_printers->values.empty()) { + compatible_printers->values.push_back(_current_printer->name); + } + } + preset.is_default = false; preset.is_system = false; preset.is_external = false; diff --git a/src/libslic3r/Preset.hpp b/src/libslic3r/Preset.hpp index 0a365043d9..c1095c4e87 100644 --- a/src/libslic3r/Preset.hpp +++ b/src/libslic3r/Preset.hpp @@ -522,7 +522,7 @@ public: // a new preset is stored into the list of presets. // All presets are marked as not modified and the new preset is activated. //BBS: add project embedded preset logic - void save_current_preset(const std::string &new_name, bool detach = false, bool save_to_project = false, Preset* _curr_preset = nullptr); + void save_current_preset(const std::string &new_name, bool detach = false, bool save_to_project = false, Preset* _curr_preset = nullptr, const Preset* _current_printer = nullptr); // Delete the current preset, activate the first visible preset. // returns true if the preset was deleted successfully. @@ -566,6 +566,8 @@ public: Preset& get_edited_preset() { return m_edited_preset; } const Preset& get_edited_preset() const { return m_edited_preset; } + const Preset& get_selected_preset_base() const { return *get_preset_base(m_presets[m_idx_selected]); } + // Return the last saved preset. // const Preset& get_saved_preset() const { return m_saved_preset; } diff --git a/src/slic3r/GUI/Tab.cpp b/src/slic3r/GUI/Tab.cpp index d9a3567173..23bdfe554b 100644 --- a/src/slic3r/GUI/Tab.cpp +++ b/src/slic3r/GUI/Tab.cpp @@ -5561,8 +5561,12 @@ void Tab::save_preset(std::string name /*= ""*/, bool detach, bool save_to_proje exist_preset = true; } - // Save the preset into Slic3r::data_dir / presets / section_name / preset_name.ini - m_presets->save_current_preset(name, detach, save_to_project); + Preset* _current_printer = nullptr; + if (m_presets->type() == Preset::TYPE_FILAMENT) { + _current_printer = const_cast(&wxGetApp().preset_bundle->printers.get_selected_preset_base()); + } + // Save the preset into Slic3r::data_dir / presets / section_name / preset_name.json + m_presets->save_current_preset(name, detach, save_to_project, nullptr, _current_printer); //BBS create new settings new_preset = m_presets->find_preset(name, false, true);