From 21e5481a58cf5af2110e3fd2a812177afebe4614 Mon Sep 17 00:00:00 2001 From: Vojtech Bubnik Date: Thu, 2 Dec 2021 16:40:18 +0100 Subject: [PATCH] Fix of fan control for raft layers. Fixes Fan starts at first layer, even though disabled for first layer. #7232 This is a regression due to cooling refactoring, which cooled support layers independently from object layers. The bug here was that all the raft layers were cooled together with the first object layer. --- src/libslic3r/GCode.cpp | 14 ++++++++++---- src/libslic3r/SupportMaterial.cpp | 2 +- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/src/libslic3r/GCode.cpp b/src/libslic3r/GCode.cpp index 4ce078136..cddb506c2 100644 --- a/src/libslic3r/GCode.cpp +++ b/src/libslic3r/GCode.cpp @@ -1998,13 +1998,19 @@ GCode::LayerResult GCode::process_layer( // Either printing all copies of all objects, or just a single copy of a single object. assert(single_object_instance_idx == size_t(-1) || layers.size() == 1); + // First object, support and raft layer, if available. const Layer *object_layer = nullptr; const SupportLayer *support_layer = nullptr; + const SupportLayer *raft_layer = nullptr; for (const LayerToPrint &l : layers) { - if (l.object_layer != nullptr && object_layer == nullptr) + if (l.object_layer && ! object_layer) object_layer = l.object_layer; - if (l.support_layer != nullptr && support_layer == nullptr) - support_layer = l.support_layer; + if (l.support_layer) { + if (! support_layer) + support_layer = l.support_layer; + if (! raft_layer && support_layer->id() < support_layer->object()->slicing_parameters().raft_layers()) + raft_layer = support_layer; + } } const Layer &layer = (object_layer != nullptr) ? *object_layer : *support_layer; GCode::LayerResult result { {}, layer.id(), false, last_layer }; @@ -2406,7 +2412,7 @@ GCode::LayerResult GCode::process_layer( log_memory_info(); result.gcode = std::move(gcode); - result.cooling_buffer_flush = object_layer || last_layer; + result.cooling_buffer_flush = object_layer || raft_layer || last_layer; return result; } diff --git a/src/libslic3r/SupportMaterial.cpp b/src/libslic3r/SupportMaterial.cpp index 9eb83eea1..647d4bce8 100644 --- a/src/libslic3r/SupportMaterial.cpp +++ b/src/libslic3r/SupportMaterial.cpp @@ -1480,7 +1480,7 @@ static inline std::tuple detect_overhangs( overhang_polygons = to_polygons(layer.lslices); #endif // Expand for better stability. - contact_polygons = expand(overhang_polygons, scaled(object_config.raft_expansion.value)); + contact_polygons = object_config.raft_expansion.value > 0 ? expand(overhang_polygons, scaled(object_config.raft_expansion.value)) : overhang_polygons; } else if (! layer.regions().empty()) {