diff --git a/src/libslic3r/calib.cpp b/src/libslic3r/calib.cpp index 81d5d507f2..ad52476dbd 100644 --- a/src/libslic3r/calib.cpp +++ b/src/libslic3r/calib.cpp @@ -11,7 +11,9 @@ float CalibPressureAdvance::find_optimal_PA_speed(const DynamicPrintConfig &conf { const double general_suggested_min_speed = 100.0; double filament_max_volumetric_speed = config.option("filament_max_volumetric_speed")->get_at(0); - Flow pattern_line = Flow(line_width, layer_height, config.option("nozzle_diameter")->get_at(0)); + const float nozzle_diameter = config.option("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("outer_wall_speed")->value), filament_max_volumetric_speed / pattern_line.mm3_per_mm()); @@ -565,9 +567,10 @@ double CalibPressureAdvancePattern::flow_val() const double flow_mult = m_config.option("filament_flow_ratio")->get_at(0); double nozzle_diameter = m_config.option("nozzle_diameter")->get_at(0); 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 speed = speed_perimeter(); - Flow pattern_line = Flow(line_width, layer_height, m_config.option("nozzle_diameter")->get_at(0)); + Flow pattern_line = Flow(line_width, layer_height, nozzle_diameter); return speed * pattern_line.mm3_per_mm() * flow_mult; }; diff --git a/src/libslic3r/calib.hpp b/src/libslic3r/calib.hpp index 32c516c778..c9a950d886 100644 --- a/src/libslic3r/calib.hpp +++ b/src/libslic3r/calib.hpp @@ -286,7 +286,9 @@ protected: { // TODO: FIXME: find out current filament/extruder? 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("wall_loops")->value; }; diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index c05e6b4c5e..cb44a641fb 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -9592,9 +9592,7 @@ void Plater::_calib_pa_pattern(const Calib_Params& params) if (speeds.empty()) { double speed = CalibPressureAdvance::find_optimal_PA_speed( wxGetApp().preset_bundle->full_config(), - (fabs(print_config.get_abs_value("line_width", nozzle_diameter)) <= DBL_EPSILON) ? - (nozzle_diameter * 1.125) : - print_config.get_abs_value("line_width", nozzle_diameter), + print_config.get_abs_value("line_width", nozzle_diameter), print_config.get_abs_value("layer_height"), 0); print_config.set_key_value("outer_wall_speed", new ConfigOptionFloat(speed));