mirror of
https://github.com/SoftFever/OrcaSlicer.git
synced 2025-07-06 22:47:32 -06:00
Fix PA calib crash when default line width is set to 0 (#9146)
Fix PA calib crash when default line width is set to 0 (SoftFever/OrcaSlicer#9144)
This commit is contained in:
parent
697fc5b8d3
commit
d54c139cdb
3 changed files with 9 additions and 6 deletions
|
@ -11,7 +11,9 @@ float CalibPressureAdvance::find_optimal_PA_speed(const DynamicPrintConfig &conf
|
||||||
{
|
{
|
||||||
const double general_suggested_min_speed = 100.0;
|
const double general_suggested_min_speed = 100.0;
|
||||||
double filament_max_volumetric_speed = config.option<ConfigOptionFloats>("filament_max_volumetric_speed")->get_at(0);
|
double filament_max_volumetric_speed = config.option<ConfigOptionFloats>("filament_max_volumetric_speed")->get_at(0);
|
||||||
Flow pattern_line = Flow(line_width, layer_height, config.option<ConfigOptionFloats>("nozzle_diameter")->get_at(0));
|
const float nozzle_diameter = config.option<ConfigOptionFloats>("nozzle_diameter")->get_at(0);
|
||||||
|
if (line_width <= 0.) line_width = Flow::auto_extrusion_width(frPerimeter, nozzle_diameter);
|
||||||
|
Flow pattern_line = Flow(line_width, layer_height, nozzle_diameter);
|
||||||
auto pa_speed = std::min(std::max(general_suggested_min_speed, config.option<ConfigOptionFloat>("outer_wall_speed")->value),
|
auto pa_speed = std::min(std::max(general_suggested_min_speed, config.option<ConfigOptionFloat>("outer_wall_speed")->value),
|
||||||
filament_max_volumetric_speed / pattern_line.mm3_per_mm());
|
filament_max_volumetric_speed / pattern_line.mm3_per_mm());
|
||||||
|
|
||||||
|
@ -565,9 +567,10 @@ double CalibPressureAdvancePattern::flow_val() const
|
||||||
double flow_mult = m_config.option<ConfigOptionFloats>("filament_flow_ratio")->get_at(0);
|
double flow_mult = m_config.option<ConfigOptionFloats>("filament_flow_ratio")->get_at(0);
|
||||||
double nozzle_diameter = m_config.option<ConfigOptionFloats>("nozzle_diameter")->get_at(0);
|
double nozzle_diameter = m_config.option<ConfigOptionFloats>("nozzle_diameter")->get_at(0);
|
||||||
double line_width = m_config.get_abs_value("line_width", nozzle_diameter);
|
double line_width = m_config.get_abs_value("line_width", nozzle_diameter);
|
||||||
|
if (line_width <= 0.) line_width = Flow::auto_extrusion_width(frPerimeter, nozzle_diameter);
|
||||||
double layer_height = m_config.get_abs_value("layer_height");
|
double layer_height = m_config.get_abs_value("layer_height");
|
||||||
double speed = speed_perimeter();
|
double speed = speed_perimeter();
|
||||||
Flow pattern_line = Flow(line_width, layer_height, m_config.option<ConfigOptionFloats>("nozzle_diameter")->get_at(0));
|
Flow pattern_line = Flow(line_width, layer_height, nozzle_diameter);
|
||||||
|
|
||||||
return speed * pattern_line.mm3_per_mm() * flow_mult;
|
return speed * pattern_line.mm3_per_mm() * flow_mult;
|
||||||
};
|
};
|
||||||
|
|
|
@ -286,7 +286,9 @@ protected:
|
||||||
{
|
{
|
||||||
// TODO: FIXME: find out current filament/extruder?
|
// TODO: FIXME: find out current filament/extruder?
|
||||||
const double nozzle_diameter = m_config.opt_float("nozzle_diameter", 0);
|
const double nozzle_diameter = m_config.opt_float("nozzle_diameter", 0);
|
||||||
return m_config.get_abs_value("line_width", nozzle_diameter);
|
const double width = m_config.get_abs_value("line_width", nozzle_diameter);
|
||||||
|
if (width <= 0.) return Flow::auto_extrusion_width(frExternalPerimeter, nozzle_diameter);
|
||||||
|
return width;
|
||||||
};
|
};
|
||||||
int wall_count() const { return m_config.option<ConfigOptionInt>("wall_loops")->value; };
|
int wall_count() const { return m_config.option<ConfigOptionInt>("wall_loops")->value; };
|
||||||
|
|
||||||
|
|
|
@ -9592,9 +9592,7 @@ void Plater::_calib_pa_pattern(const Calib_Params& params)
|
||||||
if (speeds.empty()) {
|
if (speeds.empty()) {
|
||||||
double speed = CalibPressureAdvance::find_optimal_PA_speed(
|
double speed = CalibPressureAdvance::find_optimal_PA_speed(
|
||||||
wxGetApp().preset_bundle->full_config(),
|
wxGetApp().preset_bundle->full_config(),
|
||||||
(fabs(print_config.get_abs_value("line_width", nozzle_diameter)) <= DBL_EPSILON) ?
|
print_config.get_abs_value("line_width", nozzle_diameter),
|
||||||
(nozzle_diameter * 1.125) :
|
|
||||||
print_config.get_abs_value("line_width", nozzle_diameter),
|
|
||||||
print_config.get_abs_value("layer_height"), 0);
|
print_config.get_abs_value("layer_height"), 0);
|
||||||
print_config.set_key_value("outer_wall_speed", new ConfigOptionFloat(speed));
|
print_config.set_key_value("outer_wall_speed", new ConfigOptionFloat(speed));
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue