diff --git a/src/libslic3r/GCode.cpp b/src/libslic3r/GCode.cpp index 2dfec3740eb..fabf6a0e65a 100644 --- a/src/libslic3r/GCode.cpp +++ b/src/libslic3r/GCode.cpp @@ -3394,7 +3394,8 @@ std::string GCodeGenerator::_extrude( } // calculate extrusion length per distance unit - double e_per_mm = m_writer.extruder()->e_per_mm3() * path_attr.mm3_per_mm; + double e_per_mm = m_writer.extruder()->e_per_mm3() * path_attr.mm3_per_mm * + m_config.print_extrusion_multiplier.value; if (m_writer.extrusion_axis().empty()) // gcfNoExtrusion e_per_mm = 0; diff --git a/src/libslic3r/Layer.cpp b/src/libslic3r/Layer.cpp index 3cfac1e673d..f68a6100c18 100644 --- a/src/libslic3r/Layer.cpp +++ b/src/libslic3r/Layer.cpp @@ -661,6 +661,7 @@ inline bool has_compatible_layer_regions(const PrintRegionConfig &config, const config.thin_walls == other_config.thin_walls && config.external_perimeters_first == other_config.external_perimeters_first && config.infill_overlap == other_config.infill_overlap && + config.print_extrusion_multiplier == other_config.print_extrusion_multiplier && has_compatible_dynamic_overhang_speed(config, other_config); } diff --git a/src/libslic3r/Preset.cpp b/src/libslic3r/Preset.cpp index d8da904b904..88ee7c0c6cc 100644 --- a/src/libslic3r/Preset.cpp +++ b/src/libslic3r/Preset.cpp @@ -570,6 +570,8 @@ static std::vector s_Preset_print_options { "first_layer_flow_ratio", "top_layer_flow_ratio", + + "print_extrusion_multiplier", }; static std::vector s_Preset_filament_options { diff --git a/src/libslic3r/PrintConfig.cpp b/src/libslic3r/PrintConfig.cpp index f33fb0abd11..42d02a9eebb 100644 --- a/src/libslic3r/PrintConfig.cpp +++ b/src/libslic3r/PrintConfig.cpp @@ -766,6 +766,19 @@ void PrintConfigDef::init_fff_params() def->mode = comAdvanced; def->set_default_value(new ConfigOptionFloat(1)); + def = this->add("print_extrusion_multiplier", coFloat); + def->label = L("Extrusion multiplier"); + def->category = L("Advanced"); + def->tooltip = L("This factor changes the amount of flow proportionally. You may need to tweak " + "this setting to get nice surface finish and correct single wall widths. " + "Usual values are between 90% and 110%. This print setting is multiplied " + "with the extrusion_multiplier from the filament tab. Its only purpose is to " + "offer the same functionality but on a per-object basis."); + def->mode = comAdvanced; + def->min = 0.5; + def->max = 1.5; + def->set_default_value(new ConfigOptionFloat(1)); + def = this->add("bridge_speed", coFloat); def->label = L("Bridges"); def->category = L("Speed"); diff --git a/src/libslic3r/PrintConfig.hpp b/src/libslic3r/PrintConfig.hpp index 28756224b7e..4de78c66059 100644 --- a/src/libslic3r/PrintConfig.hpp +++ b/src/libslic3r/PrintConfig.hpp @@ -767,10 +767,13 @@ PRINT_CONFIG_CLASS_DEFINE( // SuperSlicer ((ConfigOptionEnum, solid_fill_pattern)) + // Reverse extrusion direction ((ConfigOptionBool, overhangs_reverse)) ((ConfigOptionBool, infill_reverse)) ((ConfigOptionBool, internal_perimeters_reverse)) + + ((ConfigOptionFloat, print_extrusion_multiplier)) ) PRINT_CONFIG_CLASS_DEFINE(