From 0b0709b3d8654c4c07ac9dd0510751119c1e4ccb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Hejl?= <hejl.lukas@gmail.com> Date: Fri, 25 Sep 2020 09:54:27 +0200 Subject: [PATCH] Fix crash in adaptive infill when an extrusion line width is zero. When an extrusion line width is set to zero, then an extrusion line width is calculated from nozzle diameter. --- src/libslic3r/Fill/FillAdaptive.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/libslic3r/Fill/FillAdaptive.cpp b/src/libslic3r/Fill/FillAdaptive.cpp index eebded55b..7813d64a3 100644 --- a/src/libslic3r/Fill/FillAdaptive.cpp +++ b/src/libslic3r/Fill/FillAdaptive.cpp @@ -13,6 +13,7 @@ #include <cstdlib> #include <cmath> +#include <algorithm> // Boost pool: Don't use mutexes to synchronize memory allocation. #define BOOST_POOL_NO_MT @@ -284,7 +285,10 @@ std::pair<double, double> adaptive_fill_line_spacing(const PrintObject &print_ob }; std::vector<RegionFillData> region_fill_data; region_fill_data.reserve(print_object.print()->regions().size()); - bool build_octree = false; + bool build_octree = false; + const std::vector<double> &nozzle_diameters = print_object.print()->config().nozzle_diameter.values; + double max_nozzle_diameter = *std::max_element(nozzle_diameters.begin(), nozzle_diameters.end()); + double default_infill_extrusion_width = Flow::auto_extrusion_width(FlowRole::frInfill, max_nozzle_diameter); for (const PrintRegion *region : print_object.print()->regions()) { const PrintRegionConfig &config = region->config(); bool nonempty = config.fill_density > 0; @@ -294,7 +298,7 @@ std::pair<double, double> adaptive_fill_line_spacing(const PrintObject &print_ob has_adaptive_infill ? Tristate::Maybe : Tristate::No, has_support_infill ? Tristate::Maybe : Tristate::No, config.fill_density, - config.infill_extrusion_width + config.infill_extrusion_width != 0. ? config.infill_extrusion_width : default_infill_extrusion_width })); build_octree |= has_adaptive_infill || has_support_infill; }