Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/prusa3d/PrusaSlicer.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbubnikv <bubnikv@gmail.com>2018-05-22 15:17:27 +0300
committerbubnikv <bubnikv@gmail.com>2018-05-22 15:17:27 +0300
commite8247c5646d512da4c8060ecd7d0a6a3232a6c28 (patch)
treef61a86acc35cd14163a6c202c07cc96aeb75d0e9 /xs/src/slic3r/GUI/PresetBundle.cpp
parent6ea81279ff1a49d60e5000148b3f82f9bfbbf101 (diff)
When loading a config bundle, make sure a config value is not accepted
if it is placed in a wrong group (for example, max_print_height does not belong to print settings, but a printer settings, so Slic3r will now complain about it being in print settings, and it will remove the value from the print settings).
Diffstat (limited to 'xs/src/slic3r/GUI/PresetBundle.cpp')
-rw-r--r--xs/src/slic3r/GUI/PresetBundle.cpp52
1 files changed, 37 insertions, 15 deletions
diff --git a/xs/src/slic3r/GUI/PresetBundle.cpp b/xs/src/slic3r/GUI/PresetBundle.cpp
index ef48eb6d4..a34640da7 100644
--- a/xs/src/slic3r/GUI/PresetBundle.cpp
+++ b/xs/src/slic3r/GUI/PresetBundle.cpp
@@ -53,27 +53,31 @@ PresetBundle::PresetBundle() :
wxImage::AddHandler(new wxPNGHandler);
// Create the ID config keys, as they are not part of the Static print config classes.
- this->prints.preset(0).config.opt_string("print_settings_id", true);
- this->filaments.preset(0).config.opt_string("filament_settings_id", true);
- this->printers.preset(0).config.opt_string("print_settings_id", true);
+ this->prints.default_preset().config.opt_string("print_settings_id", true);
+ this->filaments.default_preset().config.opt_string("filament_settings_id", true);
+ this->printers.default_preset().config.opt_string("printer_settings_id", true);
// Create the "compatible printers" keys, as they are not part of the Static print config classes.
- this->filaments.preset(0).config.optptr("compatible_printers", true);
- this->filaments.preset(0).config.optptr("compatible_printers_condition", true);
- this->prints.preset(0).config.optptr("compatible_printers", true);
- this->prints.preset(0).config.optptr("compatible_printers_condition", true);
+ this->filaments.default_preset().config.optptr("compatible_printers", true);
+ this->filaments.default_preset().config.optptr("compatible_printers_condition", true);
+ this->prints.default_preset().config.optptr("compatible_printers", true);
+ this->prints.default_preset().config.optptr("compatible_printers_condition", true);
// Create the "inherits" keys.
- this->prints.preset(0).config.optptr("inherits", true);
- this->filaments.preset(0).config.optptr("inherits", true);
- this->printers.preset(0).config.optptr("inherits", true);
+ this->prints.default_preset().config.optptr("inherits", true);
+ this->filaments.default_preset().config.optptr("inherits", true);
+ this->printers.default_preset().config.optptr("inherits", true);
// Create the "printer_vendor", "printer_model" and "printer_variant" keys.
- this->printers.preset(0).config.optptr("printer_vendor", true);
- this->printers.preset(0).config.optptr("printer_model", true);
- this->printers.preset(0).config.optptr("printer_variant", true);
-
+ this->printers.default_preset().config.optptr("printer_vendor", true);
+ this->printers.default_preset().config.optptr("printer_model", true);
+ this->printers.default_preset().config.optptr("printer_variant", true);
+ // Load the default preset bitmaps.
this->prints .load_bitmap_default("cog.png");
this->filaments.load_bitmap_default("spool.png");
this->printers .load_bitmap_default("printer_empty.png");
this->load_compatible_bitmaps();
+ // Re-activate the default presets, so their "edited" preset copies will be updated with the additional configuration values above.
+ this->prints .select_preset(0);
+ this->filaments.select_preset(0);
+ this->printers .select_preset(0);
this->project_config.apply_only(FullPrintConfig::defaults(), s_project_options);
}
@@ -832,10 +836,28 @@ size_t PresetBundle::load_configbundle(const std::string &path, unsigned int fla
continue;
if (presets != nullptr) {
// Load the print, filament or printer preset.
- DynamicPrintConfig config(presets->default_preset().config);
+ const DynamicPrintConfig &default_config = presets->default_preset().config;
+ DynamicPrintConfig config(default_config);
for (auto &kvp : section.second)
config.set_deserialize(kvp.first, kvp.second.data());
Preset::normalize(config);
+ // Report configuration fields, which are misplaced into a wrong group.
+ std::string incorrect_keys;
+ size_t n_incorrect_keys = 0;
+ for (const std::string &key : config.keys())
+ if (! default_config.has(key)) {
+ if (incorrect_keys.empty())
+ incorrect_keys = key;
+ else {
+ incorrect_keys += ", ";
+ incorrect_keys += key;
+ }
+ config.erase(key);
+ ++ n_incorrect_keys;
+ }
+ if (! incorrect_keys.empty())
+ BOOST_LOG_TRIVIAL(error) << "Error in a Vendor Config Bundle \"" << path << "\": The printer preset \"" <<
+ section.first << "\" contains the following incorrect keys: " << incorrect_keys << ", which were removed";
if ((flags & LOAD_CFGBNDLE_SYSTEM) && presets == &printers) {
// Filter out printer presets, which are not mentioned in the vendor profile.
// These presets are considered not installed.