From a996188e38f9b14a687f17070deee3fa342152ce Mon Sep 17 00:00:00 2001 From: Ioannis Giannakas <59056762+igiannakas@users.noreply.github.com> Date: Sun, 14 Jan 2024 17:38:34 +0200 Subject: [PATCH] [Bug fix] Fixes lightning infill with sparse infill width set to 0 causes "divide by zero" fatal error (#3592) * Fix issue #3567 - Lightning infill with sparse infill width set to 0 causes "divide by zero" fatal error * Merge branch 'SoftFever:main' into Fix-#3567---Lightning-infill-with-sparse-infill-width-set-to-0-causes-divide-by-zero-fatal-error * Merge branch 'main' into Fix-#3567---Lightning-infill-with-sparse-infill-width-set-to-0-causes-divide-by-zero-fatal-error --- src/libslic3r/Fill/Lightning/Generator.cpp | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/src/libslic3r/Fill/Lightning/Generator.cpp b/src/libslic3r/Fill/Lightning/Generator.cpp index 6b453ca8ef..309b576e01 100644 --- a/src/libslic3r/Fill/Lightning/Generator.cpp +++ b/src/libslic3r/Fill/Lightning/Generator.cpp @@ -76,6 +76,16 @@ Generator::Generator(const PrintObject &print_object, const std::function(object_config.layer_height.value); m_infill_extrusion_width = scaled(region_config.sparse_infill_line_width.get_abs_value(max_nozzle_diameter)); + // Orca: fix lightning infill divide by zero when infill line width is set to 0. + // firstly attempt to set it to the default line width. If that is not provided either, set it to a sane default + // based on the nozzle diameter. + if (m_infill_extrusion_width < EPSILON) + m_infill_extrusion_width = scaled( + object_config.line_width.get_abs_value(max_nozzle_diameter) < EPSILON ? + default_infill_extrusion_width : + object_config.line_width.get_abs_value(max_nozzle_diameter) + ); + m_supporting_radius = coord_t(m_infill_extrusion_width) * 100 / region_config.sparse_infill_density; const double lightning_infill_overhang_angle = M_PI / 4; // 45 degrees @@ -102,6 +112,15 @@ Generator::Generator(PrintObject* m_object, std::vector& contours, std const double layer_thickness = scaled(object_config.layer_height.value); m_infill_extrusion_width = scaled(region_config.sparse_infill_line_width.get_abs_value(max_nozzle_diameter)); + // Orca: fix lightning infill divide by zero when infill line width is set to 0. + // firstly attempt to set it to the default line width. If that is not provided either, set it to a sane default + // based on the nozzle diameter. + if (m_infill_extrusion_width < EPSILON) + m_infill_extrusion_width = scaled( + object_config.line_width.get_abs_value(max_nozzle_diameter) < EPSILON ? + default_infill_extrusion_width : + object_config.line_width.get_abs_value(max_nozzle_diameter) + ); //m_supporting_radius: against to the density of lightning, failures may happen if set to high density //higher density lightning makes support harder, more time-consuming on computing and printing, but more reliable on supporting overhangs //lower density lightning performs opposite