mirror of
https://github.com/OrcaSlicer/OrcaSlicer.git
synced 2026-05-19 19:33:47 +00:00
Clang-format Config.?pp
So difficult to work with ATM
This commit is contained in:
@@ -231,9 +231,7 @@ std::string escape_ampersand(const std::string& str)
|
|||||||
return std::string(out.data(), outptr - out.data());
|
return std::string(out.data(), outptr - out.data());
|
||||||
}
|
}
|
||||||
|
|
||||||
void ConfigOptionDeleter::operator()(ConfigOption* p) {
|
void ConfigOptionDeleter::operator()(ConfigOption* p) { delete p; }
|
||||||
delete p;
|
|
||||||
}
|
|
||||||
|
|
||||||
std::vector<std::string> ConfigOptionDef::cli_args(const std::string& key) const
|
std::vector<std::string> ConfigOptionDef::cli_args(const std::string& key) const
|
||||||
{
|
{
|
||||||
@@ -280,7 +278,8 @@ ConfigOption* ConfigOptionDef::create_empty_option() const
|
|||||||
case coFloatsOrPercents: return new ConfigOptionFloatsOrPercents();
|
case coFloatsOrPercents: return new ConfigOptionFloatsOrPercents();
|
||||||
case coPoint: return new ConfigOptionPoint();
|
case coPoint: return new ConfigOptionPoint();
|
||||||
case coPoints: return new ConfigOptionPoints();
|
case coPoints: return new ConfigOptionPoints();
|
||||||
case coPoint3: return new ConfigOptionPoint3();
|
case coPoint3:
|
||||||
|
return new ConfigOptionPoint3();
|
||||||
// case coPoint3s: return new ConfigOptionPoint3s();
|
// case coPoint3s: return new ConfigOptionPoint3s();
|
||||||
case coBool: return new ConfigOptionBool();
|
case coBool: return new ConfigOptionBool();
|
||||||
case coBools: return new ConfigOptionBools();
|
case coBools: return new ConfigOptionBools();
|
||||||
@@ -411,8 +410,8 @@ std::ostream& ConfigDef::print_cli_help(std::ostream& out, bool show_defaults, s
|
|||||||
// right: option description
|
// right: option description
|
||||||
std::string descr = def.tooltip;
|
std::string descr = def.tooltip;
|
||||||
bool show_defaults_this = show_defaults || def.opt_key == "config_compatibility";
|
bool show_defaults_this = show_defaults || def.opt_key == "config_compatibility";
|
||||||
if (show_defaults_this && def.default_value && def.type != coBool
|
if (show_defaults_this && def.default_value && def.type != coBool &&
|
||||||
&& (def.type != coString || !def.default_value->serialize().empty())) {
|
(def.type != coString || !def.default_value->serialize().empty())) {
|
||||||
descr += " (";
|
descr += " (";
|
||||||
if (!def.sidetext.empty()) {
|
if (!def.sidetext.empty()) {
|
||||||
descr += def.sidetext + ", ";
|
descr += def.sidetext + ", ";
|
||||||
@@ -535,7 +534,10 @@ void ConfigBase::set(const std::string &opt_key, int value, bool create)
|
|||||||
switch (opt->type()) {
|
switch (opt->type()) {
|
||||||
case coInt: static_cast<ConfigOptionInt*>(opt)->value = value; break;
|
case coInt: static_cast<ConfigOptionInt*>(opt)->value = value; break;
|
||||||
case coFloat: static_cast<ConfigOptionFloat*>(opt)->value = value; break;
|
case coFloat: static_cast<ConfigOptionFloat*>(opt)->value = value; break;
|
||||||
case coFloatOrPercent: static_cast<ConfigOptionFloatOrPercent*>(opt)->value = value; static_cast<ConfigOptionFloatOrPercent*>(opt)->percent = false; break;
|
case coFloatOrPercent:
|
||||||
|
static_cast<ConfigOptionFloatOrPercent*>(opt)->value = value;
|
||||||
|
static_cast<ConfigOptionFloatOrPercent*>(opt)->percent = false;
|
||||||
|
break;
|
||||||
case coString: static_cast<ConfigOptionString*>(opt)->value = std::to_string(value); break;
|
case coString: static_cast<ConfigOptionString*>(opt)->value = std::to_string(value); break;
|
||||||
default: throw BadOptionTypeException("Configbase::set() - conversion from int not possible");
|
default: throw BadOptionTypeException("Configbase::set() - conversion from int not possible");
|
||||||
}
|
}
|
||||||
@@ -546,13 +548,19 @@ void ConfigBase::set(const std::string &opt_key, double value, bool create)
|
|||||||
ConfigOption* opt = this->option_throw(opt_key, create);
|
ConfigOption* opt = this->option_throw(opt_key, create);
|
||||||
switch (opt->type()) {
|
switch (opt->type()) {
|
||||||
case coFloat: static_cast<ConfigOptionFloat*>(opt)->value = value; break;
|
case coFloat: static_cast<ConfigOptionFloat*>(opt)->value = value; break;
|
||||||
case coFloatOrPercent: static_cast<ConfigOptionFloatOrPercent*>(opt)->value = value; static_cast<ConfigOptionFloatOrPercent*>(opt)->percent = false; break;
|
case coFloatOrPercent:
|
||||||
|
static_cast<ConfigOptionFloatOrPercent*>(opt)->value = value;
|
||||||
|
static_cast<ConfigOptionFloatOrPercent*>(opt)->percent = false;
|
||||||
|
break;
|
||||||
case coString: static_cast<ConfigOptionString*>(opt)->value = float_to_string_decimal_point(value); break;
|
case coString: static_cast<ConfigOptionString*>(opt)->value = float_to_string_decimal_point(value); break;
|
||||||
default: throw BadOptionTypeException("Configbase::set() - conversion from float not possible");
|
default: throw BadOptionTypeException("Configbase::set() - conversion from float not possible");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ConfigBase::set_deserialize_nothrow(const t_config_option_key &opt_key_src, const std::string &value_src, ConfigSubstitutionContext& substitutions_ctxt, bool append)
|
bool ConfigBase::set_deserialize_nothrow(const t_config_option_key& opt_key_src,
|
||||||
|
const std::string& value_src,
|
||||||
|
ConfigSubstitutionContext& substitutions_ctxt,
|
||||||
|
bool append)
|
||||||
{
|
{
|
||||||
t_config_option_key opt_key = opt_key_src;
|
t_config_option_key opt_key = opt_key_src;
|
||||||
std::string value = value_src;
|
std::string value = value_src;
|
||||||
@@ -570,7 +578,10 @@ bool ConfigBase::set_deserialize_nothrow(const t_config_option_key &opt_key_src,
|
|||||||
return this->set_deserialize_raw(opt_key, value, substitutions_ctxt, append);
|
return this->set_deserialize_raw(opt_key, value, substitutions_ctxt, append);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ConfigBase::set_deserialize(const t_config_option_key &opt_key_src, const std::string &value_src, ConfigSubstitutionContext& substitutions_ctxt, bool append)
|
void ConfigBase::set_deserialize(const t_config_option_key& opt_key_src,
|
||||||
|
const std::string& value_src,
|
||||||
|
ConfigSubstitutionContext& substitutions_ctxt,
|
||||||
|
bool append)
|
||||||
{
|
{
|
||||||
if (!this->set_deserialize_nothrow(opt_key_src, value_src, substitutions_ctxt, append))
|
if (!this->set_deserialize_nothrow(opt_key_src, value_src, substitutions_ctxt, append))
|
||||||
throw BadOptionValueException(format("Invalid value provided for parameter %1%: %2%", opt_key_src, value_src));
|
throw BadOptionValueException(format("Invalid value provided for parameter %1%: %2%", opt_key_src, value_src));
|
||||||
@@ -582,7 +593,10 @@ void ConfigBase::set_deserialize(std::initializer_list<SetDeserializeItem> items
|
|||||||
this->set_deserialize(item.opt_key, item.opt_value, substitutions_ctxt, item.append);
|
this->set_deserialize(item.opt_key, item.opt_value, substitutions_ctxt, item.append);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ConfigBase::set_deserialize_raw(const t_config_option_key &opt_key_src, const std::string &value, ConfigSubstitutionContext& substitutions_ctxt, bool append)
|
bool ConfigBase::set_deserialize_raw(const t_config_option_key& opt_key_src,
|
||||||
|
const std::string& value,
|
||||||
|
ConfigSubstitutionContext& substitutions_ctxt,
|
||||||
|
bool append)
|
||||||
{
|
{
|
||||||
t_config_option_key opt_key = opt_key_src;
|
t_config_option_key opt_key = opt_key_src;
|
||||||
// Try to deserialize the option by its name.
|
// Try to deserialize the option by its name.
|
||||||
@@ -642,9 +656,11 @@ bool ConfigBase::set_deserialize_raw(const t_config_option_key &opt_key_src, con
|
|||||||
if (!success && substitutions_ctxt.rule != ForwardCompatibilitySubstitutionRule::Disable &&
|
if (!success && substitutions_ctxt.rule != ForwardCompatibilitySubstitutionRule::Disable &&
|
||||||
// Only allow substitutions of an enum value by another enum value or a boolean value with an enum value.
|
// Only allow substitutions of an enum value by another enum value or a boolean value with an enum value.
|
||||||
// That means, we expect enum values being added in the future and possibly booleans being converted to enums.
|
// That means, we expect enum values being added in the future and possibly booleans being converted to enums.
|
||||||
(optdef->type == coEnum || optdef->type == coEnums || optdef->type == coBool) /*&& ConfigHelpers::looks_like_enum_value(value)*/) {
|
(optdef->type == coEnum || optdef->type == coEnums ||
|
||||||
|
optdef->type == coBool) /*&& ConfigHelpers::looks_like_enum_value(value)*/) {
|
||||||
// Deserialize failed, try to substitute with a default value.
|
// Deserialize failed, try to substitute with a default value.
|
||||||
//assert(substitutions_ctxt.rule == ForwardCompatibilitySubstitutionRule::Enable || substitutions_ctxt.rule == ForwardCompatibilitySubstitutionRule::EnableSilent);
|
// assert(substitutions_ctxt.rule == ForwardCompatibilitySubstitutionRule::Enable || substitutions_ctxt.rule ==
|
||||||
|
// ForwardCompatibilitySubstitutionRule::EnableSilent);
|
||||||
if (optdef->type == coBool)
|
if (optdef->type == coBool)
|
||||||
static_cast<ConfigOptionBool*>(opt)->value = ConfigHelpers::enum_looks_like_true_value(value);
|
static_cast<ConfigOptionBool*>(opt)->value = ConfigHelpers::enum_looks_like_true_value(value);
|
||||||
else
|
else
|
||||||
@@ -708,17 +724,16 @@ double ConfigBase::get_abs_value(const t_config_option_key &opt_key) const
|
|||||||
throw NoDefinitionException(opt_key);
|
throw NoDefinitionException(opt_key);
|
||||||
const ConfigOptionDef* opt_def = def->get(opt_key);
|
const ConfigOptionDef* opt_def = def->get(opt_key);
|
||||||
|
|
||||||
|
|
||||||
assert(opt_def != nullptr);
|
assert(opt_def != nullptr);
|
||||||
if (opt_def->ratio_over == "")
|
if (opt_def->ratio_over == "")
|
||||||
return cast_opt->get_abs_value(1);
|
return cast_opt->get_abs_value(1);
|
||||||
// Compute absolute value over the absolute value of the base option.
|
// Compute absolute value over the absolute value of the base option.
|
||||||
// FIXME there are some ratio_over chains, which end with empty ratio_with.
|
// FIXME there are some ratio_over chains, which end with empty ratio_with.
|
||||||
// For example, XXX_extrusion_width parameters are not handled by get_abs_value correctly.
|
// For example, XXX_extrusion_width parameters are not handled by get_abs_value correctly.
|
||||||
return opt_def->ratio_over.empty() ? 0. :
|
return opt_def->ratio_over.empty() ?
|
||||||
|
0. :
|
||||||
static_cast<const ConfigOptionFloatOrPercent*>(raw_opt)->get_abs_value(this->get_abs_value(opt_def->ratio_over));
|
static_cast<const ConfigOptionFloatOrPercent*>(raw_opt)->get_abs_value(this->get_abs_value(opt_def->ratio_over));
|
||||||
|
|
||||||
|
|
||||||
throw ConfigurationError("ConfigBase::get_abs_value(): Not a valid option type for get_abs_value()");
|
throw ConfigurationError("ConfigBase::get_abs_value(): Not a valid option type for get_abs_value()");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -754,7 +769,8 @@ void ConfigBase::setenv_() const
|
|||||||
}
|
}
|
||||||
|
|
||||||
// BBS
|
// BBS
|
||||||
ConfigSubstitutions ConfigBase::load_string_map(std::map<std::string, std::string>& key_values, ForwardCompatibilitySubstitutionRule compatibility_rule)
|
ConfigSubstitutions ConfigBase::load_string_map(std::map<std::string, std::string>& key_values,
|
||||||
|
ForwardCompatibilitySubstitutionRule compatibility_rule)
|
||||||
{
|
{
|
||||||
CNumericLocalesSetter locales_setter;
|
CNumericLocalesSetter locales_setter;
|
||||||
|
|
||||||
@@ -764,8 +780,7 @@ ConfigSubstitutions ConfigBase::load_string_map(std::map<std::string, std::strin
|
|||||||
try {
|
try {
|
||||||
t_config_option_key opt_key = it->first;
|
t_config_option_key opt_key = it->first;
|
||||||
this->set_deserialize(opt_key, it->second, substitutions_ctxt);
|
this->set_deserialize(opt_key, it->second, substitutions_ctxt);
|
||||||
}
|
} catch (UnknownOptionException& /* e */) {
|
||||||
catch (UnknownOptionException& /* e */) {
|
|
||||||
// ignore
|
// ignore
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -781,8 +796,7 @@ ConfigSubstitutions ConfigBase::load(const std::string &file, ForwardCompatibili
|
|||||||
else if (is_json_file(file)) {
|
else if (is_json_file(file)) {
|
||||||
std::string reason;
|
std::string reason;
|
||||||
return this->load_from_json(file, compatibility_rule, key_values, reason);
|
return this->load_from_json(file, compatibility_rule, key_values, reason);
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << "unsupported format for config file" << file;
|
BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << "unsupported format for config file" << file;
|
||||||
return ConfigSubstitutions();
|
return ConfigSubstitutions();
|
||||||
// return this->load_from_ini(file, compatibility_rule);
|
// return this->load_from_ini(file, compatibility_rule);
|
||||||
@@ -790,7 +804,10 @@ ConfigSubstitutions ConfigBase::load(const std::string &file, ForwardCompatibili
|
|||||||
}
|
}
|
||||||
|
|
||||||
// BBS: add json support
|
// BBS: add json support
|
||||||
ConfigSubstitutions ConfigBase::load_from_json(const std::string &file, ForwardCompatibilitySubstitutionRule compatibility_rule, std::map<std::string, std::string>& key_values, std::string& reason)
|
ConfigSubstitutions ConfigBase::load_from_json(const std::string& file,
|
||||||
|
ForwardCompatibilitySubstitutionRule compatibility_rule,
|
||||||
|
std::map<std::string, std::string>& key_values,
|
||||||
|
std::string& reason)
|
||||||
{
|
{
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
ConfigSubstitutionContext substitutions_ctxt(compatibility_rule);
|
ConfigSubstitutionContext substitutions_ctxt(compatibility_rule);
|
||||||
@@ -799,7 +816,11 @@ ConfigSubstitutions ConfigBase::load_from_json(const std::string &file, ForwardC
|
|||||||
return std::move(substitutions_ctxt.substitutions);
|
return std::move(substitutions_ctxt.substitutions);
|
||||||
}
|
}
|
||||||
|
|
||||||
int ConfigBase::load_from_json(const std::string &file, ConfigSubstitutionContext& substitution_context, bool load_inherits_to_config, std::map<std::string, std::string>& key_values, std::string& reason)
|
int ConfigBase::load_from_json(const std::string& file,
|
||||||
|
ConfigSubstitutionContext& substitution_context,
|
||||||
|
bool load_inherits_to_config,
|
||||||
|
std::map<std::string, std::string>& key_values,
|
||||||
|
std::string& reason)
|
||||||
{
|
{
|
||||||
json j;
|
json j;
|
||||||
std::list<std::string> different_settings_append;
|
std::list<std::string> different_settings_append;
|
||||||
@@ -810,7 +831,9 @@ int ConfigBase::load_from_json(const std::string &file, ConfigSubstitutionContex
|
|||||||
|
|
||||||
CNumericLocalesSetter locales_setter;
|
CNumericLocalesSetter locales_setter;
|
||||||
|
|
||||||
std::function<bool(const json::const_iterator&, const char,const char,const bool,std::string&)> parse_str_arr = [&parse_str_arr](const json::const_iterator& it, const char single_sep,const char array_sep,const bool escape_string_style,std::string& value_str)->bool {
|
std::function<bool(const json::const_iterator&, const char, const char, const bool, std::string&)> parse_str_arr =
|
||||||
|
[&parse_str_arr](const json::const_iterator& it, const char single_sep, const char array_sep, const bool escape_string_style,
|
||||||
|
std::string& value_str) -> bool {
|
||||||
// must have consistent type name
|
// must have consistent type name
|
||||||
std::string consistent_type;
|
std::string consistent_type;
|
||||||
for (auto iter = it.value().begin(); iter != it.value().end(); ++iter) {
|
for (auto iter = it.value().begin(); iter != it.value().end(); ++iter) {
|
||||||
@@ -832,8 +855,7 @@ int ConfigBase::load_from_json(const std::string &file, ConfigSubstitutionContex
|
|||||||
bool success = parse_str_arr(iter, single_sep, array_sep, escape_string_style, value_str);
|
bool success = parse_str_arr(iter, single_sep, array_sep, escape_string_style, value_str);
|
||||||
if (!success)
|
if (!success)
|
||||||
return false;
|
return false;
|
||||||
}
|
} else if (iter.value().is_string()) {
|
||||||
else if (iter.value().is_string()) {
|
|
||||||
if (!first)
|
if (!first)
|
||||||
value_str += single_sep;
|
value_str += single_sep;
|
||||||
else
|
else
|
||||||
@@ -845,8 +867,7 @@ int ConfigBase::load_from_json(const std::string &file, ConfigSubstitutionContex
|
|||||||
value_str += escape_string_cstyle(iter.value());
|
value_str += escape_string_cstyle(iter.value());
|
||||||
value_str += "\"";
|
value_str += "\"";
|
||||||
}
|
}
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
// should not happen
|
// should not happen
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -868,37 +889,27 @@ int ConfigBase::load_from_json(const std::string &file, ConfigSubstitutionContex
|
|||||||
for (auto it = j.begin(); it != j.end(); it++) {
|
for (auto it = j.begin(); it != j.end(); it++) {
|
||||||
if (boost::iequals(it.key(), BBL_JSON_KEY_VERSION)) {
|
if (boost::iequals(it.key(), BBL_JSON_KEY_VERSION)) {
|
||||||
key_values.emplace(BBL_JSON_KEY_VERSION, it.value());
|
key_values.emplace(BBL_JSON_KEY_VERSION, it.value());
|
||||||
}
|
} else if (boost::iequals(it.key(), BBL_JSON_KEY_IS_CUSTOM)) {
|
||||||
else if (boost::iequals(it.key(), BBL_JSON_KEY_IS_CUSTOM)) {
|
|
||||||
// skip it
|
// skip it
|
||||||
}
|
} else if (boost::iequals(it.key(), BBL_JSON_KEY_NAME)) {
|
||||||
else if (boost::iequals(it.key(), BBL_JSON_KEY_NAME)) {
|
|
||||||
key_values.emplace(BBL_JSON_KEY_NAME, it.value());
|
key_values.emplace(BBL_JSON_KEY_NAME, it.value());
|
||||||
if (it.value() == "project_settings")
|
if (it.value() == "project_settings")
|
||||||
is_project_settings = true;
|
is_project_settings = true;
|
||||||
}
|
} else if (boost::iequals(it.key(), BBL_JSON_KEY_URL)) {
|
||||||
else if (boost::iequals(it.key(), BBL_JSON_KEY_URL)) {
|
|
||||||
key_values.emplace(BBL_JSON_KEY_URL, it.value());
|
key_values.emplace(BBL_JSON_KEY_URL, it.value());
|
||||||
}
|
} else if (boost::iequals(it.key(), BBL_JSON_KEY_TYPE)) {
|
||||||
else if (boost::iequals(it.key(), BBL_JSON_KEY_TYPE)) {
|
|
||||||
key_values.emplace(BBL_JSON_KEY_TYPE, it.value());
|
key_values.emplace(BBL_JSON_KEY_TYPE, it.value());
|
||||||
}
|
} else if (boost::iequals(it.key(), BBL_JSON_KEY_SETTING_ID)) {
|
||||||
else if (boost::iequals(it.key(), BBL_JSON_KEY_SETTING_ID)) {
|
|
||||||
key_values.emplace(BBL_JSON_KEY_SETTING_ID, it.value());
|
key_values.emplace(BBL_JSON_KEY_SETTING_ID, it.value());
|
||||||
}
|
} else if (boost::iequals(it.key(), BBL_JSON_KEY_FILAMENT_ID)) {
|
||||||
else if (boost::iequals(it.key(), BBL_JSON_KEY_FILAMENT_ID)) {
|
|
||||||
key_values.emplace(BBL_JSON_KEY_FILAMENT_ID, it.value());
|
key_values.emplace(BBL_JSON_KEY_FILAMENT_ID, it.value());
|
||||||
}
|
} else if (boost::iequals(it.key(), BBL_JSON_KEY_FROM)) {
|
||||||
else if (boost::iequals(it.key(), BBL_JSON_KEY_FROM)) {
|
|
||||||
key_values.emplace(BBL_JSON_KEY_FROM, it.value());
|
key_values.emplace(BBL_JSON_KEY_FROM, it.value());
|
||||||
}
|
} else if (boost::iequals(it.key(), BBL_JSON_KEY_DESCRIPTION)) {
|
||||||
else if (boost::iequals(it.key(), BBL_JSON_KEY_DESCRIPTION)) {
|
|
||||||
key_values.emplace(BBL_JSON_KEY_DESCRIPTION, it.value());
|
key_values.emplace(BBL_JSON_KEY_DESCRIPTION, it.value());
|
||||||
}
|
} else if (boost::iequals(it.key(), BBL_JSON_KEY_INSTANTIATION)) {
|
||||||
else if (boost::iequals(it.key(), BBL_JSON_KEY_INSTANTIATION)) {
|
|
||||||
key_values.emplace(BBL_JSON_KEY_INSTANTIATION, it.value());
|
key_values.emplace(BBL_JSON_KEY_INSTANTIATION, it.value());
|
||||||
}
|
} else if (!load_inherits_to_config && boost::iequals(it.key(), BBL_JSON_KEY_INHERITS)) {
|
||||||
else if (!load_inherits_to_config && boost::iequals(it.key(), BBL_JSON_KEY_INHERITS)) {
|
|
||||||
key_values.emplace(BBL_JSON_KEY_INHERITS, it.value());
|
key_values.emplace(BBL_JSON_KEY_INHERITS, it.value());
|
||||||
} else if (boost::iequals(it.key(), ORCA_JSON_KEY_RENAMED_FROM)) {
|
} else if (boost::iequals(it.key(), ORCA_JSON_KEY_RENAMED_FROM)) {
|
||||||
key_values.emplace(ORCA_JSON_KEY_RENAMED_FROM, it.value());
|
key_values.emplace(ORCA_JSON_KEY_RENAMED_FROM, it.value());
|
||||||
@@ -919,7 +930,8 @@ int ConfigBase::load_from_json(const std::string &file, ConfigSubstitutionContex
|
|||||||
}
|
}
|
||||||
} else if (opt_key == "wall_infill_order") {
|
} else if (opt_key == "wall_infill_order") {
|
||||||
// BBS: check wall_infill order to decide if it be different and append to diff_setting_append
|
// BBS: check wall_infill order to decide if it be different and append to diff_setting_append
|
||||||
if (it.value() == "outer wall/inner wall/infill" || it.value() == "infill/outer wall/inner wall" || it.value() == "inner-outer-inner wall/infill") {
|
if (it.value() == "outer wall/inner wall/infill" || it.value() == "infill/outer wall/inner wall" ||
|
||||||
|
it.value() == "inner-outer-inner wall/infill") {
|
||||||
get_wall_sequence = "wall_seq_diff_to_system";
|
get_wall_sequence = "wall_seq_diff_to_system";
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -928,8 +940,7 @@ int ConfigBase::load_from_json(const std::string &file, ConfigSubstitutionContex
|
|||||||
is_infill_first = "true";
|
is_infill_first = "true";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
} else if (it.value().is_array()) {
|
||||||
else if (it.value().is_array()) {
|
|
||||||
t_config_option_key opt_key_src = opt_key;
|
t_config_option_key opt_key_src = opt_key;
|
||||||
this->handle_legacy(opt_key, value_str);
|
this->handle_legacy(opt_key, value_str);
|
||||||
if (opt_key.empty()) {
|
if (opt_key.empty()) {
|
||||||
@@ -958,17 +969,13 @@ int ConfigBase::load_from_json(const std::string &file, ConfigSubstitutionContex
|
|||||||
char array_sep = '#'; // currenty not used
|
char array_sep = '#'; // currenty not used
|
||||||
bool escape_string_type = false;
|
bool escape_string_type = false;
|
||||||
if (optdef) {
|
if (optdef) {
|
||||||
switch (optdef->type)
|
switch (optdef->type) {
|
||||||
{
|
|
||||||
case coStrings:
|
case coStrings:
|
||||||
escape_string_type = true;
|
escape_string_type = true;
|
||||||
single_sep = ';';
|
single_sep = ';';
|
||||||
break;
|
break;
|
||||||
case coPointsGroups:
|
case coPointsGroups: single_sep = '#'; break;
|
||||||
single_sep = '#';
|
default: break;
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -980,8 +987,7 @@ int ConfigBase::load_from_json(const std::string &file, ConfigSubstitutionContex
|
|||||||
}
|
}
|
||||||
if (valid)
|
if (valid)
|
||||||
this->set_deserialize(opt_key, value_str, substitution_context);
|
this->set_deserialize(opt_key, value_str, substitution_context);
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
// should not happen
|
// should not happen
|
||||||
BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << ": parse " << file << " error, invalid json type for " << it.key();
|
BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << ": parse " << file << " error, invalid json type for " << it.key();
|
||||||
}
|
}
|
||||||
@@ -999,7 +1005,8 @@ int ConfigBase::load_from_json(const std::string &file, ConfigSubstitutionContex
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (is_project_settings) {
|
if (is_project_settings) {
|
||||||
std::vector<std::string>& different_settings = this->option<ConfigOptionStrings>("different_settings_to_system", true)->values;
|
std::vector<std::string>& different_settings = this->option<ConfigOptionStrings>("different_settings_to_system", true)
|
||||||
|
->values;
|
||||||
size_t size = different_settings.size();
|
size_t size = different_settings.size();
|
||||||
if (size == 0) {
|
if (size == 0) {
|
||||||
size = this->option<ConfigOptionStrings>("filament_settings_id")->values.size() + 2;
|
size = this->option<ConfigOptionStrings>("filament_settings_id")->values.size() + 2;
|
||||||
@@ -1008,12 +1015,10 @@ int ConfigBase::load_from_json(const std::string &file, ConfigSubstitutionContex
|
|||||||
|
|
||||||
std::vector<bool> is_first(size, false);
|
std::vector<bool> is_first(size, false);
|
||||||
std::vector<std::vector<std::string>> original_diffs(size);
|
std::vector<std::vector<std::string>> original_diffs(size);
|
||||||
for (int index = 0; index < size; index++)
|
for (int index = 0; index < size; index++) {
|
||||||
{
|
|
||||||
if (different_settings[index].empty()) {
|
if (different_settings[index].empty()) {
|
||||||
is_first[index] = true;
|
is_first[index] = true;
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
// remove unneeded key
|
// remove unneeded key
|
||||||
if (get_wall_sequence.empty()) {
|
if (get_wall_sequence.empty()) {
|
||||||
std::string wall_sqe_string = "wall_sequence";
|
std::string wall_sqe_string = "wall_sequence";
|
||||||
@@ -1025,7 +1030,6 @@ int ConfigBase::load_from_json(const std::string &file, ConfigSubstitutionContex
|
|||||||
erase_len++;
|
erase_len++;
|
||||||
different_settings[index].erase(pos, erase_len);
|
different_settings[index].erase(pos, erase_len);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (different_settings[index].empty()) {
|
if (different_settings[index].empty()) {
|
||||||
@@ -1037,8 +1041,7 @@ int ConfigBase::load_from_json(const std::string &file, ConfigSubstitutionContex
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (auto diff_key : different_settings_append)
|
for (auto diff_key : different_settings_append) {
|
||||||
{
|
|
||||||
// get the index in the group
|
// get the index in the group
|
||||||
int index = 0;
|
int index = 0;
|
||||||
bool need_insert = true;
|
bool need_insert = true;
|
||||||
@@ -1075,18 +1078,15 @@ int ConfigBase::load_from_json(const std::string &file, ConfigSubstitutionContex
|
|||||||
// Perform composite conversions, for example merging multiple keys into one key.
|
// Perform composite conversions, for example merging multiple keys into one key.
|
||||||
this->handle_legacy_composite();
|
this->handle_legacy_composite();
|
||||||
return 0;
|
return 0;
|
||||||
}
|
} catch (const std::ifstream::failure& err) {
|
||||||
catch (const std::ifstream::failure &err) {
|
|
||||||
BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << ": parse " << file << " got a ifstream error, reason = " << err.what();
|
BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << ": parse " << file << " got a ifstream error, reason = " << err.what();
|
||||||
reason = std::string("ifstreamError: ") + err.what();
|
reason = std::string("ifstreamError: ") + err.what();
|
||||||
// throw ConfigurationError(format("Failed loading configuration file \"%1%\": %2%", file, e.what()));
|
// throw ConfigurationError(format("Failed loading configuration file \"%1%\": %2%", file, e.what()));
|
||||||
}
|
} catch (nlohmann::detail::parse_error& err) {
|
||||||
catch(nlohmann::detail::parse_error &err) {
|
|
||||||
BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << ": parse " << file << " got a nlohmann::detail::parse_error, reason = " << err.what();
|
BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << ": parse " << file << " got a nlohmann::detail::parse_error, reason = " << err.what();
|
||||||
reason = std::string("JsonParseError: ") + err.what();
|
reason = std::string("JsonParseError: ") + err.what();
|
||||||
// throw ConfigurationError(format("Failed loading configuration file \"%1%\": %2%", file, err.what()));
|
// throw ConfigurationError(format("Failed loading configuration file \"%1%\": %2%", file, err.what()));
|
||||||
}
|
} catch (std::exception& err) {
|
||||||
catch(std::exception &err) {
|
|
||||||
BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << ": parse " << file << " got a generic exception, reason = " << err.what();
|
BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << ": parse " << file << " got a generic exception, reason = " << err.what();
|
||||||
reason = std::string("std::exception: ") + err.what();
|
reason = std::string("std::exception: ") + err.what();
|
||||||
}
|
}
|
||||||
@@ -1130,15 +1130,18 @@ ConfigSubstitutions ConfigBase::load_from_ini_string_commented(std::string &&dat
|
|||||||
++i;
|
++i;
|
||||||
}
|
}
|
||||||
// Skip all leading spaces;
|
// Skip all leading spaces;
|
||||||
for (; i < data.size() && (data[i] == ' ' || data[i] == '\t'); ++ i) ;
|
for (; i < data.size() && (data[i] == ' ' || data[i] == '\t'); ++i)
|
||||||
|
;
|
||||||
// Skip the semicolon (comment indicator).
|
// Skip the semicolon (comment indicator).
|
||||||
if (i < data.size() && data[i] == ';')
|
if (i < data.size() && data[i] == ';')
|
||||||
++i;
|
++i;
|
||||||
// Skip all leading spaces after semicolon.
|
// Skip all leading spaces after semicolon.
|
||||||
for (; i < data.size() && (data[i] == ' ' || data[i] == '\t'); ++ i) ;
|
for (; i < data.size() && (data[i] == ' ' || data[i] == '\t'); ++i)
|
||||||
|
;
|
||||||
if (strncmp(data.data() + i, "generated by ", 13) == 0) {
|
if (strncmp(data.data() + i, "generated by ", 13) == 0) {
|
||||||
// Skip the "; generated by ..." line.
|
// Skip the "; generated by ..." line.
|
||||||
for (; i < data.size() && data[i] != '\n'; ++ i);
|
for (; i < data.size() && data[i] != '\n'; ++i)
|
||||||
|
;
|
||||||
}
|
}
|
||||||
} else if (data[i] == '\r' && i + 1 < data.size() && data[i + 1] == '\n') {
|
} else if (data[i] == '\r' && i + 1 < data.size() && data[i + 1] == '\n') {
|
||||||
// Skip CR.
|
// Skip CR.
|
||||||
@@ -1175,13 +1178,15 @@ static bool is_end_of_line(char c) { return c == '\r' || c == '\n' || c
|
|||||||
static bool is_end_of_gcode_line(char c) { return c == ';' || is_end_of_line(c); }
|
static bool is_end_of_gcode_line(char c) { return c == ';' || is_end_of_line(c); }
|
||||||
static bool is_end_of_word(char c) { return is_whitespace(c) || is_end_of_gcode_line(c); }
|
static bool is_end_of_word(char c) { return is_whitespace(c) || is_end_of_gcode_line(c); }
|
||||||
|
|
||||||
static const char* skip_word(const char* c) {
|
static const char* skip_word(const char* c)
|
||||||
|
{
|
||||||
for (; !is_end_of_word(*c); ++c)
|
for (; !is_end_of_word(*c); ++c)
|
||||||
; // silence -Wempty-body
|
; // silence -Wempty-body
|
||||||
return c;
|
return c;
|
||||||
}
|
}
|
||||||
|
|
||||||
static const char* skip_whitespaces(const char* c) {
|
static const char* skip_whitespaces(const char* c)
|
||||||
|
{
|
||||||
for (; is_whitespace(*c); ++c)
|
for (; is_whitespace(*c); ++c)
|
||||||
; // silence -Wempty-body
|
; // silence -Wempty-body
|
||||||
return c;
|
return c;
|
||||||
@@ -1210,11 +1215,13 @@ size_t ConfigBase::load_from_gcode_string_legacy(ConfigBase& config, const char*
|
|||||||
size_t num_key_value_pairs = 0;
|
size_t num_key_value_pairs = 0;
|
||||||
for (;;) {
|
for (;;) {
|
||||||
// Extract next line.
|
// Extract next line.
|
||||||
for (--end; end > data_start && (*end == '\r' || *end == '\n'); --end);
|
for (--end; end > data_start && (*end == '\r' || *end == '\n'); --end)
|
||||||
|
;
|
||||||
if (end == data_start)
|
if (end == data_start)
|
||||||
break;
|
break;
|
||||||
const char* start = end++;
|
const char* start = end++;
|
||||||
for (; start > data_start && *start != '\r' && *start != '\n'; --start);
|
for (; start > data_start && *start != '\r' && *start != '\n'; --start)
|
||||||
|
;
|
||||||
if (start == data_start)
|
if (start == data_start)
|
||||||
break;
|
break;
|
||||||
// Extracted a line from start to end. Extract the key = value pair.
|
// Extracted a line from start to end. Extract the key = value pair.
|
||||||
@@ -1225,7 +1232,8 @@ size_t ConfigBase::load_from_gcode_string_legacy(ConfigBase& config, const char*
|
|||||||
// A key must start with a letter.
|
// A key must start with a letter.
|
||||||
break;
|
break;
|
||||||
const char* sep = key;
|
const char* sep = key;
|
||||||
for (; sep != end && *sep != '='; ++ sep) ;
|
for (; sep != end && *sep != '='; ++sep)
|
||||||
|
;
|
||||||
if (sep == end || sep[-1] != ' ' || sep[1] != ' ')
|
if (sep == end || sep[-1] != ' ' || sep[1] != ' ')
|
||||||
break;
|
break;
|
||||||
const char* value = sep + 2;
|
const char* value = sep + 2;
|
||||||
@@ -1245,8 +1253,7 @@ size_t ConfigBase::load_from_gcode_string_legacy(ConfigBase& config, const char*
|
|||||||
try {
|
try {
|
||||||
config.set_deserialize(std::string(key, key_end), std::string(value, end), substitutions);
|
config.set_deserialize(std::string(key, key_end), std::string(value, end), substitutions);
|
||||||
++num_key_value_pairs;
|
++num_key_value_pairs;
|
||||||
}
|
} catch (UnknownOptionException& /* e */) {
|
||||||
catch (UnknownOptionException & /* e */) {
|
|
||||||
// ignore
|
// ignore
|
||||||
}
|
}
|
||||||
end = start;
|
end = start;
|
||||||
@@ -1275,7 +1282,8 @@ public:
|
|||||||
m_block.assign(m_block_size, 0);
|
m_block.assign(m_block_size, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool getline(std::string &out) {
|
bool getline(std::string& out)
|
||||||
|
{
|
||||||
out.clear();
|
out.clear();
|
||||||
for (;;) {
|
for (;;) {
|
||||||
if (m_block_len == 0) {
|
if (m_block_len == 0) {
|
||||||
@@ -1369,8 +1377,7 @@ ConfigSubstitutions ConfigBase::load_from_gcode_file(const std::string &file, Fo
|
|||||||
ConfigSubstitutionContext substitutions_ctxt(compatibility_rule);
|
ConfigSubstitutionContext substitutions_ctxt(compatibility_rule);
|
||||||
size_t key_value_pairs = 0;
|
size_t key_value_pairs = 0;
|
||||||
|
|
||||||
if (has_delimiters)
|
if (has_delimiters) {
|
||||||
{
|
|
||||||
// BBS
|
// BBS
|
||||||
// PrusaSlicer starting with 2.4.0-alpha0 delimits the config section stored into G-code with
|
// PrusaSlicer starting with 2.4.0-alpha0 delimits the config section stored into G-code with
|
||||||
// ; CONFIG_BLOCK_START
|
// ; CONFIG_BLOCK_START
|
||||||
@@ -1385,7 +1392,8 @@ ConfigSubstitutions ConfigBase::load_from_gcode_file(const std::string &file, Fo
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (!begin_found) {
|
if (!begin_found) {
|
||||||
//BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << format("Configuration block closing tag \"; CONFIG_BLOCK_START\" not found when reading %1%", file);
|
// BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << format("Configuration block closing tag \"; CONFIG_BLOCK_START\" not found when
|
||||||
|
// reading %1%", file);
|
||||||
throw Slic3r::RuntimeError(format("Config tag \"; CONFIG_BLOCK_START\" not found"));
|
throw Slic3r::RuntimeError(format("Config tag \"; CONFIG_BLOCK_START\" not found"));
|
||||||
}
|
}
|
||||||
std::string key, value;
|
std::string key, value;
|
||||||
@@ -1410,12 +1418,11 @@ ConfigSubstitutions ConfigBase::load_from_gcode_file(const std::string &file, Fo
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!end_found) {
|
if (!end_found) {
|
||||||
//BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << format("Configuration block opening tag \"; CONFIG_BLOCK_END\" not found when reading %1%", file);
|
// BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << format("Configuration block opening tag \"; CONFIG_BLOCK_END\" not found when
|
||||||
|
// reading %1%", file);
|
||||||
throw Slic3r::RuntimeError(format("Config tag \"; CONFIG_BLOCK_END\" not found"));
|
throw Slic3r::RuntimeError(format("Config tag \"; CONFIG_BLOCK_END\" not found"));
|
||||||
}
|
}
|
||||||
}
|
} else {
|
||||||
else
|
|
||||||
{
|
|
||||||
auto header_end_pos = ifs.tellg();
|
auto header_end_pos = ifs.tellg();
|
||||||
// Slicer older than 2.4.0-alpha0 do not emit any delimiter.
|
// Slicer older than 2.4.0-alpha0 do not emit any delimiter.
|
||||||
// Try a heuristics reading the G-code from back.
|
// Try a heuristics reading the G-code from back.
|
||||||
@@ -1430,7 +1437,8 @@ ConfigSubstitutions ConfigBase::load_from_gcode_file(const std::string &file, Fo
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (key_value_pairs < 80) {
|
if (key_value_pairs < 80) {
|
||||||
BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << format("Suspiciously low number of configuration values extracted from %1%: %2%", file, key_value_pairs);
|
BOOST_LOG_TRIVIAL(error) << __FUNCTION__
|
||||||
|
<< format("Suspiciously low number of configuration values extracted from %1%: %2%", file, key_value_pairs);
|
||||||
throw Slic3r::RuntimeError(format("Suspiciously low number of configuration values extracted from %1%: %2%", file, key_value_pairs));
|
throw Slic3r::RuntimeError(format("Suspiciously low number of configuration values extracted from %1%: %2%", file, key_value_pairs));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1452,8 +1460,7 @@ void ConfigBase::save_to_json(const std::string &file, const std::string &name,
|
|||||||
j[BBL_JSON_KEY_FROM] = from;
|
j[BBL_JSON_KEY_FROM] = from;
|
||||||
|
|
||||||
// record all the key-values
|
// record all the key-values
|
||||||
for (const std::string &opt_key : this->keys())
|
for (const std::string& opt_key : this->keys()) {
|
||||||
{
|
|
||||||
const ConfigOption* opt = this->option(opt_key);
|
const ConfigOption* opt = this->option(opt_key);
|
||||||
if (opt->is_scalar()) {
|
if (opt->is_scalar()) {
|
||||||
if (opt->type() == coString && (opt_key != "bed_custom_texture" && opt_key != "bed_custom_model"))
|
if (opt->type() == coString && (opt_key != "bed_custom_texture" && opt_key != "bed_custom_model"))
|
||||||
@@ -1461,8 +1468,7 @@ void ConfigBase::save_to_json(const std::string &file, const std::string &name,
|
|||||||
j[opt_key] = (dynamic_cast<const ConfigOptionString*>(opt))->value;
|
j[opt_key] = (dynamic_cast<const ConfigOptionString*>(opt))->value;
|
||||||
else
|
else
|
||||||
j[opt_key] = opt->serialize();
|
j[opt_key] = opt->serialize();
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
const ConfigOptionVectorBase* vec = static_cast<const ConfigOptionVectorBase*>(opt);
|
const ConfigOptionVectorBase* vec = static_cast<const ConfigOptionVectorBase*>(opt);
|
||||||
// if (!vec->empty())
|
// if (!vec->empty())
|
||||||
std::vector<std::string> string_values = vec->vserialize();
|
std::vector<std::string> string_values = vec->vserialize();
|
||||||
@@ -1703,7 +1709,8 @@ t_config_option_keys DynamicConfig::keys() const
|
|||||||
return keys;
|
return keys;
|
||||||
}
|
}
|
||||||
|
|
||||||
DynamicConfig::DynamicConfigDifference DynamicConfig::diff_report(const DynamicConfig& rhs) const {
|
DynamicConfig::DynamicConfigDifference DynamicConfig::diff_report(const DynamicConfig& rhs) const
|
||||||
|
{
|
||||||
DynamicConfig::DynamicConfigDifference result;
|
DynamicConfig::DynamicConfigDifference result;
|
||||||
|
|
||||||
std::set<t_config_option_key> all_keys;
|
std::set<t_config_option_key> all_keys;
|
||||||
@@ -1724,27 +1731,19 @@ DynamicConfig::DynamicConfigDifference DynamicConfig::diff_report(const DynamicC
|
|||||||
|
|
||||||
if (left_has && right_has) {
|
if (left_has && right_has) {
|
||||||
if (*left_it->second != *right_it->second) {
|
if (*left_it->second != *right_it->second) {
|
||||||
result.differences[key] = {
|
result.differences[key] = {left_it->second->serialize(), right_it->second->serialize()};
|
||||||
left_it->second->serialize(),
|
|
||||||
right_it->second->serialize()
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
} else if (left_has) {
|
} else if (left_has) {
|
||||||
result.differences[key] = {
|
result.differences[key] = {left_it->second->serialize(), std::nullopt};
|
||||||
left_it->second->serialize(),
|
|
||||||
std::nullopt
|
|
||||||
};
|
|
||||||
} else if (right_has) {
|
} else if (right_has) {
|
||||||
result.differences[key] = {
|
result.differences[key] = {std::nullopt, right_it->second->serialize()};
|
||||||
std::nullopt,
|
|
||||||
right_it->second->serialize()
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::ostream& operator<<(std::ostream& os, const DynamicConfig::DynamicConfigDifference& diff) {
|
std::ostream& operator<<(std::ostream& os, const DynamicConfig::DynamicConfigDifference& diff)
|
||||||
|
{
|
||||||
if (!diff.is_different()) {
|
if (!diff.is_different()) {
|
||||||
os << "Configurations are identical.\n";
|
os << "Configurations are identical.\n";
|
||||||
return os;
|
return os;
|
||||||
@@ -1774,7 +1773,8 @@ std::ostream& operator<<(std::ostream& os, const DynamicConfig::DynamicConfigDif
|
|||||||
os << " -> Right Value: " << detail.right_value.value() << "\n";
|
os << " -> Right Value: " << detail.right_value.value() << "\n";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
os << "Summary: " << missing_right << " missing on right, " << missing_left << " missing on left, and " << differ << " have differing values\n";
|
os << "Summary: " << missing_right << " missing on right, " << missing_left << " missing on left, and " << differ
|
||||||
|
<< " have differing values\n";
|
||||||
return os;
|
return os;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1806,7 +1806,10 @@ t_config_option_keys StaticConfig::keys() const
|
|||||||
// Returns true on early exit by fn().
|
// Returns true on early exit by fn().
|
||||||
// BBS: add skipped key logic
|
// BBS: add skipped key logic
|
||||||
template<typename Fn>
|
template<typename Fn>
|
||||||
static inline bool dynamic_config_iterate(const DynamicConfig &lhs, const DynamicConfig &rhs, Fn fn, const std::set<std::string>* skipped_keys = nullptr)
|
static inline bool dynamic_config_iterate(const DynamicConfig& lhs,
|
||||||
|
const DynamicConfig& rhs,
|
||||||
|
Fn fn,
|
||||||
|
const std::set<std::string>* skipped_keys = nullptr)
|
||||||
{
|
{
|
||||||
std::map<t_config_option_key, std::unique_ptr<ConfigOption>>::const_iterator i = lhs.cbegin();
|
std::map<t_config_option_key, std::unique_ptr<ConfigOption>>::const_iterator i = lhs.cbegin();
|
||||||
std::map<t_config_option_key, std::unique_ptr<ConfigOption>>::const_iterator j = rhs.cbegin();
|
std::map<t_config_option_key, std::unique_ptr<ConfigOption>>::const_iterator j = rhs.cbegin();
|
||||||
@@ -1817,11 +1820,9 @@ static inline bool dynamic_config_iterate(const DynamicConfig &lhs, const Dynami
|
|||||||
++j;
|
++j;
|
||||||
else {
|
else {
|
||||||
assert(i->first == j->first);
|
assert(i->first == j->first);
|
||||||
if (skipped_keys && (skipped_keys->count(i->first) != 0))
|
if (skipped_keys && (skipped_keys->count(i->first) != 0)) {
|
||||||
{
|
|
||||||
// do nothing
|
// do nothing
|
||||||
}
|
} else if (fn(i->first, i->second.get(), j->second.get()))
|
||||||
else if (fn(i->first, i->second.get(), j->second.get()))
|
|
||||||
// Early exit by fn.
|
// Early exit by fn.
|
||||||
return true;
|
return true;
|
||||||
++i;
|
++i;
|
||||||
@@ -1835,8 +1836,8 @@ static inline bool dynamic_config_iterate(const DynamicConfig &lhs, const Dynami
|
|||||||
// BBS: add skipped keys logic
|
// BBS: add skipped keys logic
|
||||||
bool DynamicConfig::equals(const DynamicConfig& other, const std::set<std::string>* skipped_keys) const
|
bool DynamicConfig::equals(const DynamicConfig& other, const std::set<std::string>* skipped_keys) const
|
||||||
{
|
{
|
||||||
return ! dynamic_config_iterate(*this, other,
|
return !dynamic_config_iterate(
|
||||||
[](const t_config_option_key & /* key */, const ConfigOption *l, const ConfigOption *r) { return *l != *r; },
|
*this, other, [](const t_config_option_key& /* key */, const ConfigOption* l, const ConfigOption* r) { return *l != *r; },
|
||||||
skipped_keys);
|
skipped_keys);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1844,8 +1845,7 @@ bool DynamicConfig::equals(const DynamicConfig &other, const std::set<std::strin
|
|||||||
t_config_option_keys DynamicConfig::diff(const DynamicConfig& other) const
|
t_config_option_keys DynamicConfig::diff(const DynamicConfig& other) const
|
||||||
{
|
{
|
||||||
t_config_option_keys diff;
|
t_config_option_keys diff;
|
||||||
dynamic_config_iterate(*this, other,
|
dynamic_config_iterate(*this, other, [&diff](const t_config_option_key& key, const ConfigOption* l, const ConfigOption* r) {
|
||||||
[&diff](const t_config_option_key &key, const ConfigOption *l, const ConfigOption *r) {
|
|
||||||
if (*l != *r)
|
if (*l != *r)
|
||||||
diff.emplace_back(key);
|
diff.emplace_back(key);
|
||||||
// Continue iterating.
|
// Continue iterating.
|
||||||
@@ -1858,8 +1858,7 @@ t_config_option_keys DynamicConfig::diff(const DynamicConfig &other) const
|
|||||||
t_config_option_keys DynamicConfig::equal(const DynamicConfig& other) const
|
t_config_option_keys DynamicConfig::equal(const DynamicConfig& other) const
|
||||||
{
|
{
|
||||||
t_config_option_keys equal;
|
t_config_option_keys equal;
|
||||||
dynamic_config_iterate(*this, other,
|
dynamic_config_iterate(*this, other, [&equal](const t_config_option_key& key, const ConfigOption* l, const ConfigOption* r) {
|
||||||
[&equal](const t_config_option_key &key, const ConfigOption *l, const ConfigOption *r) {
|
|
||||||
if (*l == *r)
|
if (*l == *r)
|
||||||
equal.emplace_back(key);
|
equal.emplace_back(key);
|
||||||
// Continue iterating.
|
// Continue iterating.
|
||||||
@@ -1868,7 +1867,7 @@ t_config_option_keys DynamicConfig::equal(const DynamicConfig &other) const
|
|||||||
return equal;
|
return equal;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
} // namespace Slic3r
|
||||||
|
|
||||||
#include <cereal/types/polymorphic.hpp>
|
#include <cereal/types/polymorphic.hpp>
|
||||||
CEREAL_REGISTER_TYPE(Slic3r::ConfigOption)
|
CEREAL_REGISTER_TYPE(Slic3r::ConfigOption)
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user