diff options
author | supermerill <merill@free.fr> | 2022-04-11 15:51:07 +0300 |
---|---|---|
committer | supermerill <merill@free.fr> | 2022-04-15 12:54:25 +0300 |
commit | 4bf1222ab5f8d263bb375730083fe253d6eca253 (patch) | |
tree | 28bcc88d55b4eca0af82f1f23f2829dff523a373 | |
parent | edaffa661c341c1c508ea7202e5fa8e7bef2a935 (diff) |
Don't remove solid infill on slope for spiral vase
also set solid_over_perimeters to 0 for spiral_vase
supermerill/SuperSlicer#2654
-rw-r--r-- | src/libslic3r/PrintBase.cpp | 2 | ||||
-rw-r--r-- | src/libslic3r/PrintConfig.cpp | 1 | ||||
-rw-r--r-- | src/libslic3r/PrintObject.cpp | 7 | ||||
-rw-r--r-- | src/slic3r/GUI/ConfigManipulation.cpp | 4 |
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 { |