From 4b02e888ee67ee9c86075feb1ae359a7ad9b3a0d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Hejl?= 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 eebded55bfe..7813d64a312 100644 --- a/src/libslic3r/Fill/FillAdaptive.cpp +++ b/src/libslic3r/Fill/FillAdaptive.cpp @@ -13,6 +13,7 @@ #include #include +#include // Boost pool: Don't use mutexes to synchronize memory allocation. #define BOOST_POOL_NO_MT @@ -284,7 +285,10 @@ std::pair adaptive_fill_line_spacing(const PrintObject &print_ob }; std::vector region_fill_data; region_fill_data.reserve(print_object.print()->regions().size()); - bool build_octree = false; + bool build_octree = false; + const std::vector &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 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; }