diff --git a/src/libslic3r/ExtrusionEntity.hpp b/src/libslic3r/ExtrusionEntity.hpp index 3d2221cf3..0d9069050 100644 --- a/src/libslic3r/ExtrusionEntity.hpp +++ b/src/libslic3r/ExtrusionEntity.hpp @@ -122,7 +122,8 @@ inline bool is_solid_infill(ExtrusionRole role) inline bool is_bridge(ExtrusionRole role) { return role == erBridgeInfill - || role == erInternalBridgeInfill; + || role == erInternalBridgeInfill + || role == erOverhangPerimeter; } diff --git a/src/libslic3r/GCode.cpp b/src/libslic3r/GCode.cpp index 1f03f4039..8db67be4f 100644 --- a/src/libslic3r/GCode.cpp +++ b/src/libslic3r/GCode.cpp @@ -3701,7 +3701,8 @@ std::string GCode::_before_extrude(const ExtrusionPath &path, const std::string acceleration = m_config.first_layer_acceleration.get_abs_value(acceleration); } else if (m_config.perimeter_acceleration.value > 0 && is_perimeter(path.role())) { acceleration = m_config.perimeter_acceleration.get_abs_value(acceleration); - } else if (m_config.bridge_acceleration.value > 0 && is_bridge(path.role())) { + } else if (m_config.bridge_acceleration.value > 0 && is_bridge(path.role()) + && path.role() != erOverhangPerimeter ) { acceleration = m_config.bridge_acceleration.get_abs_value(acceleration); } else if (m_config.infill_acceleration.value > 0 && is_infill(path.role())) { acceleration = m_config.infill_acceleration.get_abs_value(acceleration); @@ -3746,7 +3747,7 @@ std::string GCode::_before_extrude(const ExtrusionPath &path, const std::string throw Slic3r::InvalidArgument("Invalid speed"); } //don't modify bridge speed - if (factor < 1 && !(path.role() == erOverhangPerimeter || is_bridge(path.role()))) { + if (factor < 1 && !(is_bridge(path.role()))) { float small_speed = m_config.small_perimeter_speed.get_abs_value(m_config.perimeter_speed); //apply factor between feature speed and small speed speed = speed * factor + (1.f - factor) * small_speed; @@ -3850,8 +3851,7 @@ std::string GCode::_before_extrude(const ExtrusionPath &path, const std::string std::string comment; if (m_enable_cooling_markers) { - if (is_bridge(path.role()) - || path.role() == ExtrusionRole::erOverhangPerimeter) + if (is_bridge(path.role())) gcode += ";_BRIDGE_FAN_START\n"; else if (ExtrusionRole::erTopSolidInfill == path.role()) gcode += ";_TOP_FAN_START\n"; @@ -3870,8 +3870,7 @@ std::string GCode::_before_extrude(const ExtrusionPath &path, const std::string std::string GCode::_after_extrude(const ExtrusionPath &path) { std::string gcode; if (m_enable_cooling_markers) - if (is_bridge(path.role()) - || path.role() == ExtrusionRole::erOverhangPerimeter) + if (is_bridge(path.role())) gcode += ";_BRIDGE_FAN_END\n"; else if (ExtrusionRole::erTopSolidInfill == path.role()) gcode += ";_TOP_FAN_END\n"; diff --git a/src/libslic3r/PerimeterGenerator.cpp b/src/libslic3r/PerimeterGenerator.cpp index 08c71bae1..732a6e813 100644 --- a/src/libslic3r/PerimeterGenerator.cpp +++ b/src/libslic3r/PerimeterGenerator.cpp @@ -1075,7 +1075,7 @@ template ExtrusionPaths PerimeterGenerator::create_overhangs(LINE loop_polygons, ExtrusionRole role, bool is_external) const { ExtrusionPaths paths; double nozzle_diameter = this->print_config->nozzle_diameter.get_at(this->config->perimeter_extruder - 1); - if (this->config->overhangs_width.get_abs_value(nozzle_diameter) ==0 && 0== this->config->overhangs_width_speed.get_abs_value(nozzle_diameter)) { + if (this->config->overhangs_width.get_abs_value(nozzle_diameter) == 0 && 0 == this->config->overhangs_width_speed.get_abs_value(nozzle_diameter)) { //error return paths; @@ -1113,7 +1113,7 @@ ExtrusionPaths PerimeterGenerator::create_overhangs(LINE loop_polygons, Extrusio (this->config->overhangs_width_speed.value > 0 ? diff_pl(poly_speed, this->_lower_slices_bridge_flow): diff_pl(std::vector{ loop_polygons }, this->_lower_slices_bridge_flow)), - erBridgeInfill, + erOverhangPerimeter, this->_mm3_per_mm_overhang, this->overhang_flow.width, this->overhang_flow.height); @@ -1138,7 +1138,7 @@ ExtrusionPaths PerimeterGenerator::create_overhangs(LINE loop_polygons, Extrusio extrusion_paths_append( paths, diff_pl(std::vector{ loop_polygons }, this->_lower_slices_bridge_flow), - erBridgeInfill, + erOverhangPerimeter, this->_mm3_per_mm_overhang, this->overhang_flow.width, this->overhang_flow.height); diff --git a/src/libslic3r/PrintConfig.cpp b/src/libslic3r/PrintConfig.cpp index b9462967a..7986275f8 100644 --- a/src/libslic3r/PrintConfig.cpp +++ b/src/libslic3r/PrintConfig.cpp @@ -304,7 +304,8 @@ void PrintConfigDef::init_fff_params() def->category = OptionCategory::speed; def->tooltip = L("This is the acceleration your printer will use for bridges." "\nCan be a % of the default acceleration" - "\nSet zero to disable acceleration control for bridges."); + "\nSet zero to disable acceleration control for bridges." + "\nNote that it won't be applied to overhangs, they still use the perimeter acceleration."); def->sidetext = L("mm/s² or %"); def->min = 0; def->mode = comExpert;