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>2022-04-11 15:51:07 +0300
committersupermerill <merill@free.fr>2022-04-15 12:54:25 +0300
commit4bf1222ab5f8d263bb375730083fe253d6eca253 (patch)
tree28bcc88d55b4eca0af82f1f23f2829dff523a373 /src
parentedaffa661c341c1c508ea7202e5fa8e7bef2a935 (diff)
Don't remove solid infill on slope for spiral vase
also set solid_over_perimeters to 0 for spiral_vase supermerill/SuperSlicer#2654
Diffstat (limited to 'src')
-rw-r--r--src/libslic3r/PrintBase.cpp2
-rw-r--r--src/libslic3r/PrintConfig.cpp1
-rw-r--r--src/libslic3r/PrintObject.cpp7
-rw-r--r--src/slic3r/GUI/ConfigManipulation.cpp4
4 files changed, 10 insertions, 4 deletions
diff --git a/src/libslic3r/PrintBase.cpp b/src/libslic3r/PrintBase.cpp
index 0627e06be..43e9759bc 100644
--- a/src/libslic3r/PrintBase.cpp
+++ b/src/libslic3r/PrintBase.cpp
@@ -76,7 +76,7 @@ std::string PrintBase::output_filename(const std::string &format, const std::str
cfg.set_key_value("input_filename_base", new ConfigOptionString(filename_base));
}
try {
- uint16_t extruder_initial = config_override->option("initial_extruder") != nullptr ? config_override->option("initial_extruder")->getInt() : 0;
+ uint16_t extruder_initial = config_override->option("initial_extruder") != nullptr && config_override->option("initial_extruder")->type() == coInt ? config_override->option("initial_extruder")->getInt() : 0;
boost::filesystem::path filepath = format.empty() ?
cfg.opt_string("input_filename_base") + default_ext :
this->placeholder_parser().process(format, extruder_initial, &cfg);
diff --git a/src/libslic3r/PrintConfig.cpp b/src/libslic3r/PrintConfig.cpp
index 9272b8534..e0db228a2 100644
--- a/src/libslic3r/PrintConfig.cpp
+++ b/src/libslic3r/PrintConfig.cpp
@@ -7483,6 +7483,7 @@ void DynamicPrintConfig::normalize_fdm()
this->opt<ConfigOptionInt>("top_solid_layers", true)->value = 0;
this->opt<ConfigOptionPercent>("fill_density", true)->value = 0;
this->opt<ConfigOptionBool>("support_material", true)->value = false;
+ this->opt<ConfigOptionInt>("solid_over_perimeters")->value = 0;
this->opt<ConfigOptionInt>("support_material_enforce_layers")->value = 0;
this->opt<ConfigOptionBool>("exact_last_layer_height", true)->value = false;
this->opt<ConfigOptionBool>("ensure_vertical_shell_thickness", true)->value = false;
diff --git a/src/libslic3r/PrintObject.cpp b/src/libslic3r/PrintObject.cpp
index 82c679326..d91031ff6 100644
--- a/src/libslic3r/PrintObject.cpp
+++ b/src/libslic3r/PrintObject.cpp
@@ -1698,8 +1698,8 @@ bool PrintObject::invalidate_state_by_config_options(
ExPolygons bottom_perimeter_surfaces;
ExPolygons holes;
};
- bool spiral_vase = this->print()->config().spiral_vase.value;
- size_t num_layers = spiral_vase ? std::min(size_t(this->printing_region(0).config().bottom_solid_layers), m_layers.size()) : m_layers.size();
+ bool spiral_vase = this->print()->config().spiral_vase.value;
+ size_t num_layers = spiral_vase ? std::min(size_t(this->printing_region(0).config().bottom_solid_layers), m_layers.size()) : m_layers.size();
coordf_t min_layer_height = this->slicing_parameters().min_layer_height;
// Does this region possibly produce more than 1 top or bottom layer?
auto has_extra_layers_fn = [min_layer_height](const PrintRegionConfig& config) {
@@ -2749,11 +2749,12 @@ PrintRegionConfig region_config_from_model_volume(const PrintRegionConfig &defau
}
}
- if (region_config.fill_density.value == 0) {
+ if (region_config.fill_density.value == 0 && !m_print->config().spiral_vase.value) {
// if we're printing a hollow object we discard any solid shell thinner
// than a perimeter width, since it's probably just crossing a sloping wall
// and it's not wanted in a hollow print even if it would make sense when
// obeying the solid shell count option strictly (DWIM!)
+ // (disregard if sprial vase, as it's a completly different process)
float margin = float(neighbor_layerm->flow(frExternalPerimeter).scaled_width());
ExPolygons too_narrow = diff_ex(
new_internal_solid,
diff --git a/src/slic3r/GUI/ConfigManipulation.cpp b/src/slic3r/GUI/ConfigManipulation.cpp
index 90182f00c..e050ff9d4 100644
--- a/src/slic3r/GUI/ConfigManipulation.cpp
+++ b/src/slic3r/GUI/ConfigManipulation.cpp
@@ -91,6 +91,7 @@ void ConfigManipulation::update_print_fff_config(DynamicPrintConfig* config, con
"- 0% fill density\n"
"- no support material\n"
"- Ensure vertical shell thickness enabled\n"
+ "- disabled 'no solid infill over perimeters'\n"
"- unchecked 'exact last layer height'\n"
"- unchecked 'dense infill'\n"
"- unchecked 'extra perimeters'"));
@@ -128,6 +129,8 @@ void ConfigManipulation::update_print_fff_config(DynamicPrintConfig* config, con
new_conf.set_key_value("extra_perimeters_odd_layers", new ConfigOptionBool(false));
else if (this->local_config->get().optptr("overhangs_reverse"))
new_conf.set_key_value("overhangs_reverse", new ConfigOptionBool(false));
+ else if (this->local_config->get().optptr("solid_over_perimeters"))
+ new_conf.set_key_value("solid_over_perimeters", new ConfigOptionInt(0));
this->local_config->apply_only(new_conf, this->local_config->keys(), true);
} else if (answer == wxID_YES) {
new_conf.set_key_value("perimeters", new ConfigOptionInt(1));
@@ -142,6 +145,7 @@ void ConfigManipulation::update_print_fff_config(DynamicPrintConfig* config, con
new_conf.set_key_value("extra_perimeters_overhangs", new ConfigOptionBool(false));
new_conf.set_key_value("extra_perimeters_odd_layers", new ConfigOptionBool(false));
new_conf.set_key_value("overhangs_reverse", new ConfigOptionBool(false));
+ new_conf.set_key_value("solid_over_perimeters", new ConfigOptionInt(0));
fill_density = 0;
support = false;
} else {