overhangs are now overhangs again and not bridged infill supermerill/SuperSlicer#1186

instead of excluding overhang from "bridged" tag and making exceptions to use overhangs alongside bridges,
now revert back to when overhangs are bridge and make a unique exception to not apply bridge acceleration to them.
This commit is contained in:
supermerill 2021-05-27 16:18:37 +02:00
parent ebbd2f7a4b
commit 95535e68f6
4 changed files with 12 additions and 11 deletions

View File

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

View File

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

View File

@ -1075,7 +1075,7 @@ template<typename LINE>
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<LINE>{ 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<LINE>{ loop_polygons }, this->_lower_slices_bridge_flow),
erBridgeInfill,
erOverhangPerimeter,
this->_mm3_per_mm_overhang,
this->overhang_flow.width,
this->overhang_flow.height);

View File

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