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.
This commit is contained in:
Vojtech Bubnik 2021-12-02 16:40:18 +01:00
parent efbf64fdea
commit 21e5481a58
2 changed files with 11 additions and 5 deletions

View file

@ -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;
}

View file

@ -1480,7 +1480,7 @@ static inline std::tuple<Polygons, Polygons, Polygons, float> detect_overhangs(
overhang_polygons = to_polygons(layer.lslices);
#endif
// Expand for better stability.
contact_polygons = expand(overhang_polygons, scaled<float>(object_config.raft_expansion.value));
contact_polygons = object_config.raft_expansion.value > 0 ? expand(overhang_polygons, scaled<float>(object_config.raft_expansion.value)) : overhang_polygons;
}
else if (! layer.regions().empty())
{