diff options
author | supermerill <merill@free.fr> | 2021-11-07 20:53:56 +0300 |
---|---|---|
committer | supermerill <merill@free.fr> | 2021-11-07 20:54:14 +0300 |
commit | b5ae93d202120a4cbcdbc19afd73192df43d6cef (patch) | |
tree | e590c13c811720b29081dd40f67ca4f941951223 | |
parent | 078fbfc33a0d905b7ecea102247c0865f67fdea1 (diff) |
Fix fan interactions & hints.
supermerill/SuperSlicer#1820
-rw-r--r-- | src/libslic3r/GCode/CoolingBuffer.cpp | 17 | ||||
-rw-r--r-- | src/slic3r/GUI/PresetHints.cpp | 20 |
2 files changed, 23 insertions, 14 deletions
diff --git a/src/libslic3r/GCode/CoolingBuffer.cpp b/src/libslic3r/GCode/CoolingBuffer.cpp index a146210df..236d0190b 100644 --- a/src/libslic3r/GCode/CoolingBuffer.cpp +++ b/src/libslic3r/GCode/CoolingBuffer.cpp @@ -774,24 +774,25 @@ std::string CoolingBuffer::apply_layer_cooldown( //if (EXTRUDER_CONFIG(cooling)) { if (layer_time < slowdown_below_layer_time && fan_below_layer_time > 0) { // Layer time very short. Enable the fan to a full throttle. - fan_speed_new = max_fan_speed; - bridge_fan_speed = max_fan_speed; - bridge_internal_fan_speed = max_fan_speed; - ext_peri_fan_speed = max_fan_speed; - top_fan_speed = max_fan_speed; + fan_speed_new = std::max(max_fan_speed, fan_speed_new); + bridge_fan_speed = std::max(max_fan_speed, bridge_fan_speed); + bridge_internal_fan_speed = std::max(max_fan_speed, bridge_internal_fan_speed); + ext_peri_fan_speed = std::max(max_fan_speed, ext_peri_fan_speed); // cannot be ovveridden + //top_fan_speed = std::max(max_fan_speed, top_fan_speed); } else if (layer_time < fan_below_layer_time) { // Layer time quite short. Enable the fan proportionally according to the current layer time. assert(layer_time >= slowdown_below_layer_time); double t = (layer_time - slowdown_below_layer_time) / (fan_below_layer_time - slowdown_below_layer_time); - fan_speed_new = int(floor(t * min_fan_speed + (1. - t) * max_fan_speed) + 0.5); + if (fan_speed_new < max_fan_speed) + fan_speed_new = int(floor(t * min_fan_speed + (1. - t) * max_fan_speed) + 0.5); if (bridge_fan_speed >= 0 && bridge_fan_speed < max_fan_speed) bridge_fan_speed = int(floor(t * bridge_fan_speed + (1. - t) * max_fan_speed) + 0.5); if (bridge_internal_fan_speed >= 0 && bridge_internal_fan_speed < max_fan_speed) bridge_internal_fan_speed = int(floor(t * bridge_internal_fan_speed + (1. - t) * max_fan_speed) + 0.5); - if (top_fan_speed >= 0 && top_fan_speed < max_fan_speed) - top_fan_speed = int(floor(t * top_fan_speed + (1. - t) * max_fan_speed) + 0.5); if (ext_peri_fan_speed >= 0 && ext_peri_fan_speed < max_fan_speed) ext_peri_fan_speed = int(floor(t * ext_peri_fan_speed + (1. - t) * max_fan_speed) + 0.5); + //if (top_fan_speed >= 0 && top_fan_speed < max_fan_speed) // cannot be ovveridden + // top_fan_speed = int(floor(t * top_fan_speed + (1. - t) * max_fan_speed) + 0.5); } //} diff --git a/src/slic3r/GUI/PresetHints.cpp b/src/slic3r/GUI/PresetHints.cpp index 92538aaaf..11931d155 100644 --- a/src/slic3r/GUI/PresetHints.cpp +++ b/src/slic3r/GUI/PresetHints.cpp @@ -25,6 +25,7 @@ std::string PresetHints::cooling_description(const Preset &preset) int bridge_internal_fan_speed = preset.config.opt_int("bridge_internal_fan_speed", 0); int ext_peri_fan_speed = preset.config.opt_int("external_perimeter_fan_speed", 0); int disable_fan_first_layers = preset.config.opt_int("disable_fan_first_layers", 0); + int full_fan_speed_layer = preset.config.opt_int("full_fan_speed_layer", 0); int slowdown_below_layer_time = preset.config.opt_int("slowdown_below_layer_time", 0); int min_print_speed = int(preset.config.opt_float("min_print_speed", 0) + 0.5); int max_speed_reduc = int(preset.config.opt_float("max_speed_reduction", 0)); @@ -69,6 +70,8 @@ std::string PresetHints::cooling_description(const Preset &preset) out += ", " + (boost::format(_utf8(L("except for the first %1% layers where the fan is disabled"))) % disable_fan_first_layers).str(); else if (disable_fan_first_layers == 1) out += ", " + _utf8(L("except for the first layer where the fan is disabled")); + if(full_fan_speed_layer > disable_fan_first_layers + 1 && disable_fan_first_layers > 0) + out += (boost::format(_utf8(L(" and will gradually speed-up to the above speeds over %1% layers"))) % (full_fan_speed_layer - disable_fan_first_layers)).str(); out += "."; } else out += " " + _utf8(L("will be turned off by default.")); @@ -85,7 +88,7 @@ std::string PresetHints::cooling_description(const Preset &preset) if (ext_peri_fan_speed > max_fan_speed) { out += ", " + (boost::format(_utf8(L("at %1%%% over external perimeters"))) % ext_peri_fan_speed).str(); } else if (ext_peri_fan_speed > min_fan_speed) { - out += ", " + (boost::format(_utf8(L("at %1%%% over external perimeters"))) % ext_peri_fan_speed).str() + " " + L("if it's above the current computed fan speed value"); + out += ", " + (boost::format(_utf8(L("between %1%%% %2%%% over external perimeters"))) % ext_peri_fan_speed % max_fan_speed).str(); } if (top_fan_speed >= 0) { out += ", " + (boost::format(_utf8(L("at %1%%% over top fill surfaces"))) % top_fan_speed).str(); @@ -93,17 +96,19 @@ std::string PresetHints::cooling_description(const Preset &preset) if (bridge_fan_speed > max_fan_speed) { out += ", " + (boost::format(_utf8(L("at %1%%% over bridges"))) % bridge_fan_speed).str(); } else if (bridge_fan_speed > min_fan_speed) { - out += ", " + (boost::format(_utf8(L("at %1%%% over bridges"))) % bridge_fan_speed).str() + " " + L("if it's above the current computed fan speed value"); + out += ", " + (boost::format(_utf8(L("between %1%%% %2%%% over bridges"))) % bridge_fan_speed % max_fan_speed).str(); } if (bridge_internal_fan_speed > max_fan_speed) { out += ", " + (boost::format(_utf8(L("at %1%%% over infill bridges"))) % bridge_internal_fan_speed).str(); } else if (bridge_internal_fan_speed > min_fan_speed) { - out += ", " + (boost::format(_utf8(L("at %1%%% over infill bridges"))) % bridge_internal_fan_speed).str() + " " + L("if it's above the current computed fan speed value"); + out += ", " + (boost::format(_utf8(L("between %1%%% %2%%% over infill bridges"))) % bridge_internal_fan_speed % max_fan_speed).str(); } if (disable_fan_first_layers > 1) out += " ; " + ((boost::format(_utf8(L("except for the first %1% layers where the fan is disabled"))) % disable_fan_first_layers).str()); else if (disable_fan_first_layers == 1) out += " ; "+ _utf8(L("except for the first layer where the fan is disabled")); + if (full_fan_speed_layer > disable_fan_first_layers + 1 && disable_fan_first_layers > 0) + out += (boost::format(_utf8(L(" and will gradually speed-up to the above speeds over %1% layers"))) % (full_fan_speed_layer - disable_fan_first_layers)).str(); out += "."; } @@ -116,10 +121,13 @@ std::string PresetHints::cooling_description(const Preset &preset) % max_fan_speed).str(); if (disable_fan_first_layers > 1) - out += " (" + (boost::format(_utf8(L("except for the first %1% layers where the fan is disabled"))) % disable_fan_first_layers).str() + ")"; + out += " (" + (boost::format(_utf8(L("except for the first %1% layers where the fan is disabled"))) % disable_fan_first_layers).str(); else if (disable_fan_first_layers == 1) - out += " (" + _utf8(L("except for the first layer where the fan is disabled")) + ")"; - + out += " (" + _utf8(L("except for the first layer where the fan is disabled")); + if (full_fan_speed_layer > disable_fan_first_layers + 1 && disable_fan_first_layers > 0) + out += (boost::format(_utf8(L(" and will gradually speed-up to the above speeds over %1% layers"))) % (full_fan_speed_layer - disable_fan_first_layers)).str(); + if(disable_fan_first_layers > 0) + out += ")"; out += " and"; } |