fix bad initialization of extruder sized vector settings.

supermerill/SuperSlicer#1938
This commit is contained in:
supermerill 2021-12-08 12:42:08 +01:00
parent 5d622f6319
commit 0c6cac7aac
3 changed files with 17 additions and 13 deletions

View File

@ -413,8 +413,9 @@ public:
virtual bool is_nil(size_t idx) const = 0; virtual bool is_nil(size_t idx) const = 0;
// Get if the size of this vector is/should be the same as nozzle_diameter // 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; } 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); 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"); } 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<int32_t>
{ {
public: public:
ConfigOptionIntsTempl() : ConfigOptionVector<int32_t>() {} ConfigOptionIntsTempl() : ConfigOptionVector<int32_t>() {}
explicit ConfigOptionIntsTempl(int32_t default_value) : ConfigOptionVector<int32_t>(default_value) {}
explicit ConfigOptionIntsTempl(size_t n, int32_t value) : ConfigOptionVector<int32_t>(n, value) {} explicit ConfigOptionIntsTempl(size_t n, int32_t value) : ConfigOptionVector<int32_t>(n, value) {}
explicit ConfigOptionIntsTempl(std::initializer_list<int32_t> il) : ConfigOptionVector<int32_t>(std::move(il)) {} explicit ConfigOptionIntsTempl(std::initializer_list<int32_t> il) : ConfigOptionVector<int32_t>(std::move(il)) {}
@ -1000,6 +1002,7 @@ class ConfigOptionPercentsTempl : public ConfigOptionFloatsTempl<NULLABLE>
{ {
public: public:
ConfigOptionPercentsTempl() : ConfigOptionFloatsTempl<NULLABLE>() {} ConfigOptionPercentsTempl() : ConfigOptionFloatsTempl<NULLABLE>() {}
explicit ConfigOptionPercentsTempl(double default_value) : ConfigOptionFloatsTempl<NULLABLE>(default_value) {}
explicit ConfigOptionPercentsTempl(size_t n, double value) : ConfigOptionFloatsTempl<NULLABLE>(n, value) {} explicit ConfigOptionPercentsTempl(size_t n, double value) : ConfigOptionFloatsTempl<NULLABLE>(n, value) {}
explicit ConfigOptionPercentsTempl(std::initializer_list<double> il) : ConfigOptionFloatsTempl<NULLABLE>(std::move(il)) {} explicit ConfigOptionPercentsTempl(std::initializer_list<double> il) : ConfigOptionFloatsTempl<NULLABLE>(std::move(il)) {}
explicit ConfigOptionPercentsTempl(const std::vector<double>& vec) : ConfigOptionFloatsTempl<NULLABLE>(vec) {} explicit ConfigOptionPercentsTempl(const std::vector<double>& vec) : ConfigOptionFloatsTempl<NULLABLE>(vec) {}
@ -1134,6 +1137,7 @@ class ConfigOptionFloatsOrPercentsTempl : public ConfigOptionVector<FloatOrPerce
{ {
public: public:
ConfigOptionFloatsOrPercentsTempl() : ConfigOptionVector<FloatOrPercent>() {} ConfigOptionFloatsOrPercentsTempl() : ConfigOptionVector<FloatOrPercent>() {}
explicit ConfigOptionFloatsOrPercentsTempl(FloatOrPercent default_value) : ConfigOptionVector<FloatOrPercent>(default_value) {}
explicit ConfigOptionFloatsOrPercentsTempl(size_t n, FloatOrPercent value) : ConfigOptionVector<FloatOrPercent>(n, value) {} explicit ConfigOptionFloatsOrPercentsTempl(size_t n, FloatOrPercent value) : ConfigOptionVector<FloatOrPercent>(n, value) {}
explicit ConfigOptionFloatsOrPercentsTempl(std::initializer_list<FloatOrPercent> il) : ConfigOptionVector<FloatOrPercent>(std::move(il)) {} explicit ConfigOptionFloatsOrPercentsTempl(std::initializer_list<FloatOrPercent> il) : ConfigOptionVector<FloatOrPercent>(std::move(il)) {}
explicit ConfigOptionFloatsOrPercentsTempl(const std::vector<FloatOrPercent> &vec) : ConfigOptionVector<FloatOrPercent>(vec) {} explicit ConfigOptionFloatsOrPercentsTempl(const std::vector<FloatOrPercent> &vec) : ConfigOptionVector<FloatOrPercent>(vec) {}

View File

@ -1408,9 +1408,9 @@ void PageDiameters::apply_custom_config(DynamicPrintConfig &config)
{ {
auto *opt_nozzle = new ConfigOptionFloats(1, spin_nozzle->GetValue()); 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()); 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("extrusion_width", new ConfigOptionFloatOrPercent(105, true));
config.set_key_value("first_layer_extrusion_width", new ConfigOptionFloatOrPercent(140, 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) void PageTemperatures::apply_custom_config(DynamicPrintConfig &config)
{ {
auto *opt_extr = new ConfigOptionInts(1, spin_extr->GetValue()); 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()); 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()); 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()); 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));
} }

View File

@ -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++) for (size_t i = 1; i < nozzle_diameters.size(); i++)
nozzle_diameters[i] = frst_diam; 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 } else
new_conf.set_key_value("single_extruder_multi_material", new ConfigOptionBool(false)); 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 } else
nozzle_diameters[idx_page] = nozzle_diameters[idx_page == 0 ? 1 : 0]; 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); load_config(new_conf);
} }
} }
@ -2172,7 +2172,7 @@ bool Tab::create_pages(std::string setting_type_name, int idx_page)
colors[idx_page] = ""; colors[idx_page] = "";
DynamicPrintConfig new_conf = *m_config; 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); load_config(new_conf);
update_dirty(); update_dirty();