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

github.com/supermerill/SuperSlicer.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorsupermerill <merill@free.fr>2021-12-08 14:42:08 +0300
committersupermerill <merill@free.fr>2021-12-09 14:42:50 +0300
commit0c6cac7aac348ae172c1249148739e4799d055e1 (patch)
treec55b5f20c0972a4bb5c3c493620396da17a0d619 /src
parent5d622f631927b6e1d821d14e120ff68b20b76d6a (diff)
fix bad initialization of extruder sized vector settings.
supermerill/SuperSlicer#1938
Diffstat (limited to 'src')
-rw-r--r--src/libslic3r/Config.hpp10
-rw-r--r--src/slic3r/GUI/ConfigWizard.cpp12
-rw-r--r--src/slic3r/GUI/Tab.cpp8
3 files changed, 17 insertions, 13 deletions
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<int32_t>
{
public:
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(std::initializer_list<int32_t> il) : ConfigOptionVector<int32_t>(std::move(il)) {}
@@ -1000,10 +1002,11 @@ class ConfigOptionPercentsTempl : public ConfigOptionFloatsTempl<NULLABLE>
{
public:
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(std::initializer_list<double> il) : ConfigOptionFloatsTempl<NULLABLE>(std::move(il)) {}
- explicit ConfigOptionPercentsTempl(const std::vector<double>& vec) : ConfigOptionFloatsTempl<NULLABLE>(vec) {}
- explicit ConfigOptionPercentsTempl(std::vector<double>&& vec) : ConfigOptionFloatsTempl<NULLABLE>(std::move(vec)) {}
+ explicit ConfigOptionPercentsTempl(const std::vector<double>& vec) : ConfigOptionFloatsTempl<NULLABLE>(vec) {}
+ explicit ConfigOptionPercentsTempl(std::vector<double>&& vec) : ConfigOptionFloatsTempl<NULLABLE>(std::move(vec)) {}
static ConfigOptionType static_type() { return coPercents; }
ConfigOptionType type() const override { return static_type(); }
@@ -1134,6 +1137,7 @@ class ConfigOptionFloatsOrPercentsTempl : public ConfigOptionVector<FloatOrPerce
{
public:
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(std::initializer_list<FloatOrPercent> il) : ConfigOptionVector<FloatOrPercent>(std::move(il)) {}
explicit ConfigOptionFloatsOrPercentsTempl(const std::vector<FloatOrPercent> &vec) : ConfigOptionVector<FloatOrPercent>(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