From 0c6cac7aac348ae172c1249148739e4799d055e1 Mon Sep 17 00:00:00 2001 From: supermerill Date: Wed, 8 Dec 2021 12:42:08 +0100 Subject: fix bad initialization of extruder sized vector settings. supermerill/SuperSlicer#1938 --- src/libslic3r/Config.hpp | 10 +++++++--- src/slic3r/GUI/ConfigWizard.cpp | 12 ++++++------ src/slic3r/GUI/Tab.cpp | 8 ++++---- 3 files changed, 17 insertions(+), 13 deletions(-) (limited to 'src') diff --git a/src/libslic3r/Config.hpp b/src/libslic3r/Config.hpp index c451d5c66..9c172a493 100644 --- a/src/libslic3r/Config.hpp +++ b/src/libslic3r/Config.hpp @@ -413,8 +413,9 @@ public: virtual bool is_nil(size_t idx) const = 0; // Get if the size of this vector is/should be the same as nozzle_diameter bool is_extruder_size() const { return (flags & FCO_EXTRUDER_ARRAY) != 0; } - void set_is_extruder_size(bool is_extruder_size) { + ConfigOptionVectorBase* set_is_extruder_size(bool is_extruder_size) { if (is_extruder_size) this->flags |= FCO_EXTRUDER_ARRAY; else this->flags &= uint8_t(0xFF ^ FCO_EXTRUDER_ARRAY); + return this; } virtual double getFloat(int idx) const { throw BadOptionTypeException("Calling ConfigOption::getFloat(idx) on a non-numeric arrray ConfigOptionVectorBase"); } @@ -808,6 +809,7 @@ class ConfigOptionIntsTempl : public ConfigOptionVector { public: ConfigOptionIntsTempl() : ConfigOptionVector() {} + explicit ConfigOptionIntsTempl(int32_t default_value) : ConfigOptionVector(default_value) {} explicit ConfigOptionIntsTempl(size_t n, int32_t value) : ConfigOptionVector(n, value) {} explicit ConfigOptionIntsTempl(std::initializer_list il) : ConfigOptionVector(std::move(il)) {} @@ -1000,10 +1002,11 @@ class ConfigOptionPercentsTempl : public ConfigOptionFloatsTempl { public: ConfigOptionPercentsTempl() : ConfigOptionFloatsTempl() {} + explicit ConfigOptionPercentsTempl(double default_value) : ConfigOptionFloatsTempl(default_value) {} explicit ConfigOptionPercentsTempl(size_t n, double value) : ConfigOptionFloatsTempl(n, value) {} explicit ConfigOptionPercentsTempl(std::initializer_list il) : ConfigOptionFloatsTempl(std::move(il)) {} - explicit ConfigOptionPercentsTempl(const std::vector& vec) : ConfigOptionFloatsTempl(vec) {} - explicit ConfigOptionPercentsTempl(std::vector&& vec) : ConfigOptionFloatsTempl(std::move(vec)) {} + explicit ConfigOptionPercentsTempl(const std::vector& vec) : ConfigOptionFloatsTempl(vec) {} + explicit ConfigOptionPercentsTempl(std::vector&& vec) : ConfigOptionFloatsTempl(std::move(vec)) {} static ConfigOptionType static_type() { return coPercents; } ConfigOptionType type() const override { return static_type(); } @@ -1134,6 +1137,7 @@ class ConfigOptionFloatsOrPercentsTempl : public ConfigOptionVector() {} + explicit ConfigOptionFloatsOrPercentsTempl(FloatOrPercent default_value) : ConfigOptionVector(default_value) {} explicit ConfigOptionFloatsOrPercentsTempl(size_t n, FloatOrPercent value) : ConfigOptionVector(n, value) {} explicit ConfigOptionFloatsOrPercentsTempl(std::initializer_list il) : ConfigOptionVector(std::move(il)) {} explicit ConfigOptionFloatsOrPercentsTempl(const std::vector &vec) : ConfigOptionVector(vec) {} diff --git a/src/slic3r/GUI/ConfigWizard.cpp b/src/slic3r/GUI/ConfigWizard.cpp index 50d9d81c3..6838b53e2 100644 --- a/src/slic3r/GUI/ConfigWizard.cpp +++ b/src/slic3r/GUI/ConfigWizard.cpp @@ -1408,9 +1408,9 @@ void PageDiameters::apply_custom_config(DynamicPrintConfig &config) { auto *opt_nozzle = new ConfigOptionFloats(1, spin_nozzle->GetValue()); - config.set_key_value("nozzle_diameter", opt_nozzle); + config.set_key_value("nozzle_diameter", opt_nozzle->set_is_extruder_size(true)); auto *opt_filam = new ConfigOptionFloats(1, spin_filam->GetValue()); - config.set_key_value("filament_diameter", opt_filam); + config.set_key_value("filament_diameter", opt_filam->set_is_extruder_size(true)); config.set_key_value("extrusion_width", new ConfigOptionFloatOrPercent(105, true)); config.set_key_value("first_layer_extrusion_width", new ConfigOptionFloatOrPercent(140, true)); @@ -1487,13 +1487,13 @@ PageTemperatures::PageTemperatures(ConfigWizard *parent) void PageTemperatures::apply_custom_config(DynamicPrintConfig &config) { auto *opt_extr = new ConfigOptionInts(1, spin_extr->GetValue()); - config.set_key_value("temperature", opt_extr); + config.set_key_value("temperature", opt_extr->set_is_extruder_size(true)); auto *opt_extr1st = new ConfigOptionInts(1, spin_extr->GetValue()); - config.set_key_value("first_layer_temperature", opt_extr1st); + config.set_key_value("first_layer_temperature", opt_extr1st->set_is_extruder_size(true)); auto *opt_bed = new ConfigOptionInts(1, spin_bed->GetValue()); - config.set_key_value("bed_temperature", opt_bed); + config.set_key_value("bed_temperature", opt_bed->set_is_extruder_size(true)); auto *opt_bed1st = new ConfigOptionInts(1, spin_bed->GetValue()); - config.set_key_value("first_layer_bed_temperature", opt_bed1st); + config.set_key_value("first_layer_bed_temperature", opt_bed1st->set_is_extruder_size(true)); } diff --git a/src/slic3r/GUI/Tab.cpp b/src/slic3r/GUI/Tab.cpp index 2960b8b66..7fe2c5c7b 100644 --- a/src/slic3r/GUI/Tab.cpp +++ b/src/slic3r/GUI/Tab.cpp @@ -1686,7 +1686,7 @@ bool Tab::create_pages(std::string setting_type_name, int idx_page) for (size_t i = 1; i < nozzle_diameters.size(); i++) nozzle_diameters[i] = frst_diam; - new_conf.set_key_value("nozzle_diameter", new ConfigOptionFloats(nozzle_diameters)); + new_conf.set_key_value("nozzle_diameter", (new ConfigOptionFloats(nozzle_diameters))->set_is_extruder_size(true)); } else new_conf.set_key_value("single_extruder_multi_material", new ConfigOptionBool(false)); @@ -2147,7 +2147,7 @@ bool Tab::create_pages(std::string setting_type_name, int idx_page) } else nozzle_diameters[idx_page] = nozzle_diameters[idx_page == 0 ? 1 : 0]; - new_conf.set_key_value("nozzle_diameter", new ConfigOptionFloats(nozzle_diameters)); + new_conf.set_key_value("nozzle_diameter", (new ConfigOptionFloats(nozzle_diameters))->set_is_extruder_size(true)); load_config(new_conf); } } @@ -2172,7 +2172,7 @@ bool Tab::create_pages(std::string setting_type_name, int idx_page) colors[idx_page] = ""; DynamicPrintConfig new_conf = *m_config; - new_conf.set_key_value("extruder_colour", new ConfigOptionStrings(colors)); + new_conf.set_key_value("extruder_colour", (new ConfigOptionStrings(colors))->set_is_extruder_size(true)); load_config(new_conf); update_dirty(); @@ -3066,7 +3066,7 @@ void TabPrinter::toggle_options() } field = get_field("time_estimation_compensation"); if (field) field->toggle(machine_limits_usage->value <= MachineLimitsUsage::TimeEstimateOnly); - update_machine_limits_description(machine_limits_usage->value); + update_machine_limits_description(machine_limits_usage->value); } //z step checks -- cgit v1.2.3