diff --git a/src/libslic3r/Preset.cpp b/src/libslic3r/Preset.cpp index 59a3e5ef5..dbcd220a1 100644 --- a/src/libslic3r/Preset.cpp +++ b/src/libslic3r/Preset.cpp @@ -726,11 +726,19 @@ bool Preset::is_custom_defined() return false; } +// The method previously only supports to be called on preset_bundle->printers.get_edited_preset() +// I extened to support call on all presets bool Preset::is_bbl_vendor_preset(PresetBundle *preset_bundle) { bool is_bbl_vendor_preset = true; if (preset_bundle) { - auto config = &preset_bundle->printers.get_edited_preset().config; + auto config = &this->config; + auto printers = config->opt("compatible_printers"); + if (printers && !printers->values.empty()) { + auto printer = preset_bundle->printers.find_preset(printers->values.front()); + if (printer) + config = &printer->config; + } std::string vendor_name; for (auto vendor_profile : preset_bundle->vendors) { for (auto vendor_model : vendor_profile.second.models) @@ -1469,7 +1477,7 @@ bool PresetCollection::need_sync(std::string name, std::string setting_id, long } //BBS: get user presets -int PresetCollection::get_user_presets(std::vector& result_presets) +int PresetCollection::get_user_presets(PresetBundle *preset_bundle, std::vector &result_presets) { int count = 0; result_presets.clear(); @@ -1479,6 +1487,7 @@ int PresetCollection::get_user_presets(std::vector& result_presets) if (!preset.is_user()) continue; if (get_preset_base(preset) != &preset && preset.base_id.empty()) continue; if (!preset.setting_id.empty() && preset.sync_info.empty()) continue; + if (!preset.is_bbl_vendor_preset(preset_bundle)) continue; result_presets.push_back(preset); count++; diff --git a/src/libslic3r/Preset.hpp b/src/libslic3r/Preset.hpp index 159141a30..2545dc8ad 100644 --- a/src/libslic3r/Preset.hpp +++ b/src/libslic3r/Preset.hpp @@ -437,7 +437,7 @@ public: bool load_user_preset(std::string name, std::map preset_values, PresetsConfigSubstitutions& substitutions, ForwardCompatibilitySubstitutionRule rule); void update_after_user_presets_loaded(); //BBS: get user presets - int get_user_presets(std::vector& result_presets); + int get_user_presets(PresetBundle *preset_bundle, std::vector &result_presets); void set_sync_info_and_save(std::string name, std::string setting_id, std::string syncinfo, long long update_time); bool need_sync(std::string name, std::string setting_id, long long update_time); diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp index d738ad2ef..6c27a771a 100644 --- a/src/slic3r/GUI/GUI_App.cpp +++ b/src/slic3r/GUI/GUI_App.cpp @@ -4668,21 +4668,21 @@ void GUI_App::start_sync_user_preset(bool with_progress_dlg) //sync preset if (!preset_bundle) continue; - sync_count = preset_bundle->prints.get_user_presets(presets_to_sync); + sync_count = preset_bundle->prints.get_user_presets(preset_bundle, presets_to_sync); if (sync_count > 0) { for (Preset& preset : presets_to_sync) { sync_preset(&preset); } } - sync_count = preset_bundle->filaments.get_user_presets(presets_to_sync); + sync_count = preset_bundle->filaments.get_user_presets(preset_bundle, presets_to_sync); if (sync_count > 0) { for (Preset& preset : presets_to_sync) { sync_preset(&preset); } } - sync_count = preset_bundle->printers.get_user_presets(presets_to_sync); + sync_count = preset_bundle->printers.get_user_presets(preset_bundle, presets_to_sync); if (sync_count > 0) { for (Preset& preset : presets_to_sync) { sync_preset(&preset);