diff --git a/src/libslic3r/GCode.cpp b/src/libslic3r/GCode.cpp index ecb9806275..818ad7b4f7 100644 --- a/src/libslic3r/GCode.cpp +++ b/src/libslic3r/GCode.cpp @@ -4588,6 +4588,8 @@ std::string GCode::_extrude(const ExtrusionPath &path, std::string description, _mm3_per_mm *= m_config.top_solid_infill_flow_ratio; else if (path.role() == erBottomSurface) _mm3_per_mm *= m_config.bottom_solid_infill_flow_ratio; + else if (path.role() == erInternalBridgeInfill) + _mm3_per_mm *= m_config.internal_bridge_flow; double e_per_mm = m_writer.extruder()->e_per_mm3() * _mm3_per_mm; diff --git a/src/libslic3r/Preset.cpp b/src/libslic3r/Preset.cpp index c8c158f930..ed778e2f4c 100644 --- a/src/libslic3r/Preset.cpp +++ b/src/libslic3r/Preset.cpp @@ -749,7 +749,7 @@ static std::vector s_Preset_print_options { "sparse_infill_filament", "solid_infill_filament", "support_filament", "support_interface_filament", "ooze_prevention", "standby_temperature_delta", "interface_shells", "line_width", "initial_layer_line_width", "inner_wall_line_width", "outer_wall_line_width", "sparse_infill_line_width", "internal_solid_infill_line_width", - "top_surface_line_width", "support_line_width", "infill_wall_overlap", "bridge_flow", + "top_surface_line_width", "support_line_width", "infill_wall_overlap", "bridge_flow", "internal_bridge_flow", "elefant_foot_compensation", "elefant_foot_compensation_layers", "xy_contour_compensation", "xy_hole_compensation", "resolution", "enable_prime_tower", "prime_tower_width", "prime_tower_brim_width", "prime_volume", "wipe_tower_no_sparse_layers", "compatible_printers", "compatible_printers_condition", "inherits", diff --git a/src/libslic3r/PrintConfig.cpp b/src/libslic3r/PrintConfig.cpp index 723398f751..ed8d283075 100644 --- a/src/libslic3r/PrintConfig.cpp +++ b/src/libslic3r/PrintConfig.cpp @@ -776,6 +776,15 @@ void PrintConfigDef::init_fff_params() def->mode = comAdvanced; def->set_default_value(new ConfigOptionFloat(1)); + def = this->add("internal_bridge_flow", coFloat); + def->label = L("Internal bridge flow"); + def->category = L("Quality"); + def->tooltip = L("This value governs the thickness of the internal bridge layer. This is the first layer over sparse infill. Decrease this value slightly (for example 0.9) to improve surface quality over sparse infill."); + def->min = 0; + def->max = 2.0; + def->mode = comAdvanced; + def->set_default_value(new ConfigOptionFloat(1)); + def = this->add("top_solid_infill_flow_ratio", coFloat); def->label = L("Top surface flow ratio"); def->category = L("Advanced"); @@ -5702,6 +5711,11 @@ std::map validate(const FullPrintConfig &cfg, bool und if (cfg.bridge_flow <= 0) { error_message.emplace("bridge_flow", L("invalid value ") + std::to_string(cfg.bridge_flow)); } + + // --bridge-flow-ratio + if (cfg.bridge_flow <= 0) { + error_message.emplace("internal_bridge_flow", L("invalid value ") + std::to_string(cfg.internal_bridge_flow)); + } // extruder clearance if (cfg.extruder_clearance_radius <= 0) { diff --git a/src/libslic3r/PrintConfig.hpp b/src/libslic3r/PrintConfig.hpp index 6404b367ae..653bdfb002 100644 --- a/src/libslic3r/PrintConfig.hpp +++ b/src/libslic3r/PrintConfig.hpp @@ -796,6 +796,7 @@ PRINT_CONFIG_CLASS_DEFINE( ((ConfigOptionFloat, bottom_shell_thickness)) ((ConfigOptionFloat, bridge_angle)) ((ConfigOptionFloat, bridge_flow)) + ((ConfigOptionFloat, internal_bridge_flow)) ((ConfigOptionFloat, bridge_speed)) ((ConfigOptionFloatOrPercent, internal_bridge_speed)) ((ConfigOptionBool, ensure_vertical_shell_thickness)) diff --git a/src/libslic3r/PrintObject.cpp b/src/libslic3r/PrintObject.cpp index 8d6175cc0a..f373727c0c 100644 --- a/src/libslic3r/PrintObject.cpp +++ b/src/libslic3r/PrintObject.cpp @@ -1105,7 +1105,7 @@ bool PrintObject::invalidate_state_by_config_options( || opt_key == "overhang_speed_classic") { steps.emplace_back(posPerimeters); steps.emplace_back(posSupportMaterial); - } else if (opt_key == "bridge_flow") { + } else if (opt_key == "bridge_flow" || opt_key == "internal_bridge_flow") { if (m_config.support_top_z_distance > 0.) { // Only invalidate due to bridging if bridging is enabled. // If later "support_top_z_distance" is modified, the complete PrintObject is invalidated anyway. diff --git a/src/slic3r/GUI/Tab.cpp b/src/slic3r/GUI/Tab.cpp index 9a38c7409a..cb8be2843b 100644 --- a/src/slic3r/GUI/Tab.cpp +++ b/src/slic3r/GUI/Tab.cpp @@ -1896,6 +1896,7 @@ void TabPrint::build() optgroup->append_single_option_line("wall_infill_order"); optgroup->append_single_option_line("print_flow_ratio"); optgroup->append_single_option_line("bridge_flow"); + optgroup->append_single_option_line("internal_bridge_flow"); optgroup->append_single_option_line("bridge_density"); optgroup->append_single_option_line("thick_bridges"); optgroup->append_single_option_line("top_solid_infill_flow_ratio");