diff --git a/src/libslic3r/Preset.cpp b/src/libslic3r/Preset.cpp index 4e78b31b46..a1d5f576cb 100644 --- a/src/libslic3r/Preset.cpp +++ b/src/libslic3r/Preset.cpp @@ -2422,7 +2422,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, const Preset* _current_printer) +void PresetCollection::save_current_preset(const std::string &new_name, bool detach, bool save_to_project, Preset* _curr_preset) { Preset curr_preset = _curr_preset ? *_curr_preset : m_edited_preset; //BBS: add lock logic for sync preset in background @@ -2490,13 +2490,6 @@ 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; diff --git a/src/libslic3r/Preset.hpp b/src/libslic3r/Preset.hpp index da3fb7edac..6afda07426 100644 --- a/src/libslic3r/Preset.hpp +++ b/src/libslic3r/Preset.hpp @@ -538,7 +538,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, const Preset* _current_printer = nullptr); + void save_current_preset(const std::string &new_name, bool detach = false, bool save_to_project = false, Preset* _curr_preset = nullptr); // Delete the current preset, activate the first visible preset. // returns true if the preset was deleted successfully. diff --git a/src/slic3r/GUI/Tab.cpp b/src/slic3r/GUI/Tab.cpp index d4d31a3573..d79b151b55 100644 --- a/src/slic3r/GUI/Tab.cpp +++ b/src/slic3r/GUI/Tab.cpp @@ -6387,7 +6387,8 @@ void Tab::save_preset(std::string name /*= ""*/, bool detach, bool save_to_proje } //BBS record current preset name - std::string curr_preset_name = m_presets->get_edited_preset().name; + Preset& edited_preset = m_presets->get_edited_preset(); + std::string curr_preset_name = edited_preset.name; bool exist_preset = false; Preset* new_preset = m_presets->find_preset(name, false); @@ -6395,12 +6396,17 @@ void Tab::save_preset(std::string name /*= ""*/, bool detach, bool save_to_proje exist_preset = true; } - Preset* _current_printer = nullptr; - if (m_presets->type() == Preset::TYPE_FILAMENT) { - _current_printer = const_cast(&wxGetApp().preset_bundle->printers.get_selected_preset_base()); + // Orca: check if compatible_printers exists and is not empty, set it to the current printer if it is empty + // Ensures that custom filaments based on system are not accidentally allowed for all printers + // Can still be set for all after creation + if (m_presets->type() == Preset::TYPE_FILAMENT && !exist_preset && edited_preset.is_system) { + Preset* _curr_printer = const_cast(&wxGetApp().preset_bundle->printers.get_selected_preset_base()); + ConfigOptionStrings* compatible_printers = m_config->option("compatible_printers"); + if (nullptr != _curr_printer && compatible_printers && compatible_printers->values.empty()) + compatible_printers->values.push_back(_curr_printer->name); } // 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); + m_presets->save_current_preset(name, detach, save_to_project, nullptr); //BBS create new settings new_preset = m_presets->find_preset(name, false, true);