Dynamic overhang speed could sometimes wrongly apply volumtric limits Also, setting speed to zero will now cause the algorithm to use base external perim speed.
This commit is contained in:
parent
68d0f2da2b
commit
2b85615b31
@ -3020,9 +3020,16 @@ std::string GCode::_extrude(const ExtrusionPath &path, const std::string_view de
|
|||||||
{100, ConfigOptionInts{0}}};
|
{100, ConfigOptionInts{0}}};
|
||||||
}
|
}
|
||||||
|
|
||||||
double external_perim_reference_speed = std::min(m_config.get_abs_value("external_perimeter_speed"),
|
double external_perim_reference_speed = m_config.get_abs_value("external_perimeter_speed");
|
||||||
std::min(EXTRUDER_CONFIG(filament_max_volumetric_speed) / path.mm3_per_mm,
|
if (external_perim_reference_speed == 0)
|
||||||
m_config.max_volumetric_speed.value / path.mm3_per_mm));
|
external_perim_reference_speed = m_volumetric_speed / path.mm3_per_mm;
|
||||||
|
if (m_config.max_volumetric_speed.value > 0)
|
||||||
|
external_perim_reference_speed = std::min(external_perim_reference_speed, m_config.max_volumetric_speed.value / path.mm3_per_mm);
|
||||||
|
if (EXTRUDER_CONFIG(filament_max_volumetric_speed) > 0) {
|
||||||
|
external_perim_reference_speed = std::min(external_perim_reference_speed,
|
||||||
|
EXTRUDER_CONFIG(filament_max_volumetric_speed) / path.mm3_per_mm);
|
||||||
|
}
|
||||||
|
|
||||||
new_points = m_extrusion_quality_estimator.estimate_extrusion_quality(path, overhangs_with_speeds, overhang_w_fan_speeds,
|
new_points = m_extrusion_quality_estimator.estimate_extrusion_quality(path, overhangs_with_speeds, overhang_w_fan_speeds,
|
||||||
m_writer.extruder()->id(), external_perim_reference_speed,
|
m_writer.extruder()->id(), external_perim_reference_speed,
|
||||||
speed);
|
speed);
|
||||||
|
@ -272,6 +272,7 @@ public:
|
|||||||
float distance = path.width * (1.0 - (overhangs_w_speeds[i].first / 100.0));
|
float distance = path.width * (1.0 - (overhangs_w_speeds[i].first / 100.0));
|
||||||
float speed = overhangs_w_speeds[i].second.percent ? (speed_base * overhangs_w_speeds[i].second.value / 100.0) :
|
float speed = overhangs_w_speeds[i].second.percent ? (speed_base * overhangs_w_speeds[i].second.value / 100.0) :
|
||||||
overhangs_w_speeds[i].second.value;
|
overhangs_w_speeds[i].second.value;
|
||||||
|
if (speed < EPSILON) speed = speed_base;
|
||||||
speed_sections[distance] = speed;
|
speed_sections[distance] = speed;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user