Storing and recovering the "compatible_printers_condition"

and "inherits" fields from / to the AMF/3MF/Config files.
The "compatible_printers_condition" are collected over all active profiles
(one print, possibly multiple filament, and one printer profile)
into a single vector.
This commit is contained in:
bubnikv 2018-06-26 10:50:50 +02:00
parent 082ed95a94
commit 1175dc95f6
6 changed files with 128 additions and 41 deletions

View file

@ -188,7 +188,10 @@ void ConfigBase::apply_only(const ConfigBase &other, const t_config_option_keys
throw UnknownOptionException(opt_key);
}
const ConfigOption *other_opt = other.option(opt_key);
if (other_opt != nullptr)
if (other_opt == nullptr) {
// The key was not found in the source config, therefore it will not be initialized!
// printf("Not found, therefore not initialized: %s\n", opt_key.c_str());
} else
my_opt->set(other_opt);
}
}

View file

@ -1419,7 +1419,10 @@ void GCode::append_full_config(const Print& print, std::string& str)
str += "; " + key + " = " + cfg->serialize(key) + "\n";
}
const DynamicConfig &full_config = print.placeholder_parser.config();
for (const char *key : { "print_settings_id", "filament_settings_id", "printer_settings_id" })
for (const char *key : {
"print_settings_id", "filament_settings_id", "printer_settings_id",
"printer_model", "printer_variant", "default_print_profile", "default_filament_profile",
"compatible_printers_condition", "inherits" })
str += std::string("; ") + key + " = " + full_config.serialize(key) + "\n";
}

View file

@ -147,12 +147,15 @@ PrintConfigDef::PrintConfigDef()
def->label = L("Compatible printers");
def->default_value = new ConfigOptionStrings();
def = this->add("compatible_printers_condition", coString);
// The following value is defined as a vector of strings, so it could
// collect the "inherits" values over the print and filaments profiles
// when storing into a project file (AMF, 3MF, Config ...)
def = this->add("compatible_printers_condition", coStrings);
def->label = L("Compatible printers condition");
def->tooltip = L("A boolean expression using the configuration values of an active printer profile. "
"If this expression evaluates to true, this profile is considered compatible "
"with the active printer profile.");
def->default_value = new ConfigOptionString();
def->default_value = new ConfigOptionStrings { "" };
def = this->add("complete_objects", coBool);
def->label = L("Complete individual objects");
@ -819,12 +822,15 @@ PrintConfigDef::PrintConfigDef()
def->min = 0;
def->default_value = new ConfigOptionFloat(80);
def = this->add("inherits", coString);
// The following value is defined as a vector of strings, so it could
// collect the "inherits" values over the print and filaments profiles
// when storing into a project file (AMF, 3MF, Config ...)
def = this->add("inherits", coStrings);
def->label = L("Inherits profile");
def->tooltip = L("Name of the profile, from which this profile inherits.");
def->full_width = true;
def->height = 50;
def->default_value = new ConfigOptionString("");
def->default_value = new ConfigOptionStrings { "" };
def = this->add("interface_shells", coBool);
def->label = L("Interface shells");