From 66941e7e96792cb65f8c6ee0226ba44676b07153 Mon Sep 17 00:00:00 2001 From: remi durand Date: Thu, 10 Feb 2022 18:24:28 +0100 Subject: [PATCH] small_perimeter now disable that modifier if set to 0 first_layer_infill_speed now take the first_layer_speed if set tot 0 supermerill/SuperSlicer#1948 --- resources/ui_layout/print.ui | 2 +- src/libslic3r/GCode.cpp | 11 +++++++---- src/libslic3r/PrintConfig.cpp | 10 ++++++---- src/slic3r/GUI/ConfigManipulation.cpp | 4 ++++ 4 files changed, 18 insertions(+), 9 deletions(-) diff --git a/resources/ui_layout/print.ui b/resources/ui_layout/print.ui index e12aea65b..6f91d4f39 100644 --- a/resources/ui_layout/print.ui +++ b/resources/ui_layout/print.ui @@ -267,9 +267,9 @@ group:sidetext_width$7:Modifiers setting:label_width$8:width$4:first_layer_infill_speed end_line line:Small perimeter speed + setting:label_width$8:width$4:small_perimeter_speed setting:label_width$8:width$4:small_perimeter_min_length setting:label_width$8:width$4:small_perimeter_max_length - setting:label_width$8:width$4:small_perimeter_speed group:Acceleration control (advanced) setting:default_acceleration setting:perimeter_acceleration diff --git a/src/libslic3r/GCode.cpp b/src/libslic3r/GCode.cpp index 4258f6370..0f3b6abd6 100644 --- a/src/libslic3r/GCode.cpp +++ b/src/libslic3r/GCode.cpp @@ -3033,7 +3033,7 @@ std::string GCode::extrude_loop_vase(const ExtrusionLoop &original_loop, const s if (paths.empty()) return ""; // apply the small/external? perimeter speed - if (speed == -1 && is_perimeter(paths.front().role())){ + if (speed == -1 && is_perimeter(paths.front().role()) && this->m_config.small_perimeter_speed.value > 0){ coordf_t min_length = scale_d(this->m_config.small_perimeter_min_length.get_abs_value(EXTRUDER_CONFIG_WITH_DEFAULT(nozzle_diameter, 0))); coordf_t max_length = scale_d(this->m_config.small_perimeter_max_length.get_abs_value(EXTRUDER_CONFIG_WITH_DEFAULT(nozzle_diameter, 0))); max_length = std::max(min_length, max_length); @@ -4077,18 +4077,21 @@ double_t GCode::_compute_speed_mm_per_sec(const ExtrusionPath& path, double spee // don't modify bridge speed if (factor < 1 && !(is_bridge(path.role()))) { float small_speed = (float)m_config.small_perimeter_speed.get_abs_value(m_config.perimeter_speed); - //apply factor between feature speed and small speed - speed = (speed * factor) + double((1.f - factor) * small_speed); + if (small_speed > 0) + //apply factor between feature speed and small speed + speed = (speed * factor) + double((1.f - factor) * small_speed); } // Apply first layer modifier if (this->on_first_layer()) { const double base_speed = speed; + double first_layer_speed = m_config.first_layer_speed.get_abs_value(base_speed); if (path.role() == erInternalInfill || path.role() == erSolidInfill) { double first_layer_infill_speed = m_config.first_layer_infill_speed.get_abs_value(base_speed); if (first_layer_infill_speed > 0) speed = std::min(first_layer_infill_speed, speed); + else if (first_layer_speed > 0) + speed = std::min(first_layer_speed, speed); } else { - double first_layer_speed = m_config.first_layer_speed.get_abs_value(base_speed); if (first_layer_speed > 0) speed = std::min(first_layer_speed, speed); } diff --git a/src/libslic3r/PrintConfig.cpp b/src/libslic3r/PrintConfig.cpp index 11468c959..b9e7e63f6 100644 --- a/src/libslic3r/PrintConfig.cpp +++ b/src/libslic3r/PrintConfig.cpp @@ -1994,12 +1994,13 @@ void PrintConfigDef::init_fff_params() def->set_default_value(new ConfigOptionFloatOrPercent(30, false)); def = this->add("first_layer_infill_speed", coFloatOrPercent); - def->label = L("Infill"); - def->full_label = L("Infill first layer speed"); + def->label = L("Max infill"); + def->full_label = L("Infill max first layer speed"); def->category = OptionCategory::speed; def->tooltip = L("If expressed as absolute value in mm/s, this speed will be applied as a maximum for all infill print moves of the first layer." "\nIf expressed as a percentage it will scale the current infill speed." - "\nSet it at 100% to remove any infill first layer speed modification."); + "\nSet it at 100% to remove any infill first layer speed modification." + "\nSet zero to disable (using first_layer_speed instead)."); def->sidetext = L("mm/s or %"); def->ratio_over = "depends"; def->min = 0; @@ -3696,7 +3697,8 @@ void PrintConfigDef::init_fff_params() def->category = OptionCategory::speed; def->tooltip = L("This separate setting will affect the speed of perimeters having radius <= 6.5mm " "(usually holes). If expressed as percentage (for example: 80%) it will be calculated " - "on the perimeters speed setting above. Set zero for auto."); + "on the perimeters speed setting above." + "\nSet zero to disable."); def->sidetext = L("mm/s or %"); def->ratio_over = "perimeter_speed"; def->min = 0; diff --git a/src/slic3r/GUI/ConfigManipulation.cpp b/src/slic3r/GUI/ConfigManipulation.cpp index 0a1f2ae1a..fc20a3d36 100644 --- a/src/slic3r/GUI/ConfigManipulation.cpp +++ b/src/slic3r/GUI/ConfigManipulation.cpp @@ -390,6 +390,10 @@ void ConfigManipulation::toggle_print_fff_options(DynamicPrintConfig* config) // gap fill can appear in infill //toggle_field("gap_fill_speed", have_perimeters && config->opt_bool("gap_fill")); + //speed + for (auto el : { "small_perimeter_min_length", "small_perimeter_max_length" }) + toggle_field(el, config->option("small_perimeter_speed")->getFloat() > 0); + bool has_ironing_pattern = config->opt_enum("top_fill_pattern") == InfillPattern::ipSmooth || config->opt_enum("bottom_fill_pattern") == InfillPattern::ipSmooth || config->opt_enum("solid_fill_pattern") == InfillPattern::ipSmooth;