diff --git a/src/libslic3r/Config.cpp b/src/libslic3r/Config.cpp index e826bb4c5b..57f51f0b23 100644 --- a/src/libslic3r/Config.cpp +++ b/src/libslic3r/Config.cpp @@ -839,8 +839,9 @@ int ConfigBase::load_from_json(const std::string &file, ConfigSubstitutionContex } else if (!load_inherits_to_config && boost::iequals(it.key(), BBL_JSON_KEY_INHERITS)) { key_values.emplace(BBL_JSON_KEY_INHERITS, it.value()); - } - else { + } else if (boost::iequals(it.key(), ORCA_JSON_KEY_RENAMED_FROM)) { + key_values.emplace(ORCA_JSON_KEY_RENAMED_FROM, it.value()); + } else { t_config_option_key opt_key = it.key(); std::string value_str; diff --git a/src/libslic3r/Preset.cpp b/src/libslic3r/Preset.cpp index b09171ee0e..102f02d0f9 100644 --- a/src/libslic3r/Preset.cpp +++ b/src/libslic3r/Preset.cpp @@ -1137,7 +1137,7 @@ void PresetCollection::load_presets( if (key_values.find("instantiation") != key_values.end()) preset.is_visible = key_values["instantiation"] != "false"; - //BBS: use inherit config as the base + //Orca: find and use the inherit config as the base Preset* inherit_preset = nullptr; ConfigOption* inherits_config = config.option(BBL_JSON_KEY_INHERITS); @@ -1146,6 +1146,12 @@ void PresetCollection::load_presets( ConfigOptionString * option_str = dynamic_cast (inherits_config); std::string inherits_value = option_str->value; inherit_preset = this->find_preset(inherits_value, false, true); + // Orca: try to find if the parent preset has been renamed + if (inherit_preset == nullptr) { + auto it = this->find_preset_renamed(inherits_value); + if (it != m_presets.end()) + inherit_preset = &(*it); + } } else { ; } diff --git a/src/libslic3r/Preset.hpp b/src/libslic3r/Preset.hpp index 145ae5b6f7..cf88071748 100644 --- a/src/libslic3r/Preset.hpp +++ b/src/libslic3r/Preset.hpp @@ -63,7 +63,8 @@ #define BBL_JSON_KEY_DEFAULT_MATERIALS "default_materials" #define BBL_JSON_KEY_MODEL_ID "model_id" -//BBL: json path +// Orca extension +#define ORCA_JSON_KEY_RENAMED_FROM "renamed_from" namespace Slic3r { diff --git a/src/libslic3r/PresetBundle.cpp b/src/libslic3r/PresetBundle.cpp index 0f6a4cc569..bb5a39271d 100644 --- a/src/libslic3r/PresetBundle.cpp +++ b/src/libslic3r/PresetBundle.cpp @@ -3533,6 +3533,7 @@ std::pair PresetBundle::load_vendor_configs_ //parse the json elements DynamicPrintConfig config_src; + std::string _renamed_from_str; config_src.load_from_json(subfile, substitution_context, false, key_values, reason); if (!reason.empty()) { ++m_errors; @@ -3586,9 +3587,12 @@ std::pair PresetBundle::load_vendor_configs_ } if (config.has("alias")) alias_name = (dynamic_cast(config.option("alias")))->value; - if (config.has("renamed_from")) { - const ConfigOptionVectorBase *vec = static_cast(config.option("renamed_from")); - renamed_from = vec->vserialize(); + + if (key_values.find(ORCA_JSON_KEY_RENAMED_FROM) != key_values.end()) { + if (!unescape_strings_cstyle(key_values[ORCA_JSON_KEY_RENAMED_FROM], renamed_from)) { + BOOST_LOG_TRIVIAL(error) << "Error in a Config \"" << path << "\": The preset \"" << preset_name + << "\" contains invalid \"renamed_from\" key, which is being ignored."; + } } Preset::normalize(config); }