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
This commit is contained in:
remi durand 2022-02-10 18:24:28 +01:00 committed by supermerill
parent 3795a55e68
commit 66941e7e96
4 changed files with 18 additions and 9 deletions

View File

@ -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

View File

@ -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);
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);
}

View File

@ -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;

View File

@ -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<InfillPattern>("top_fill_pattern") == InfillPattern::ipSmooth
|| config->opt_enum<InfillPattern>("bottom_fill_pattern") == InfillPattern::ipSmooth
|| config->opt_enum<InfillPattern>("solid_fill_pattern") == InfillPattern::ipSmooth;