From 3a8b799083bb3a4634a82f004b2721af2c030526 Mon Sep 17 00:00:00 2001 From: Ioannis Giannakas <59056762+igiannakas@users.noreply.github.com> Date: Fri, 1 Dec 2023 15:50:58 +0000 Subject: [PATCH] Internal Bridge Flow rate parameter introduction Updated internal bridging flow change and reverted bridge PR (#2943) Updated internal bridging flow change & reverted bridge PR (cherry picked from commit ae9a2d5929d893b632c8414b0f386f754c61bd13) Internal Bridge Flow rate parameter introduction (#2859) * Internal Bridge Flow rate parameter introduction * updated incorrect capitalisation * Updated parameter ordering (cherry picked from commit ce9a8d7b20b336319bec7c79554ca24192e38d94) --- src/libslic3r/GCode.cpp | 2 ++ src/libslic3r/Preset.cpp | 2 +- src/libslic3r/PrintConfig.cpp | 14 ++++++++++++++ src/libslic3r/PrintConfig.hpp | 1 + src/libslic3r/PrintObject.cpp | 2 +- src/slic3r/GUI/Tab.cpp | 1 + 6 files changed, 20 insertions(+), 2 deletions(-) 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");