diff --git a/src/libslic3r/GCodeWriter.cpp b/src/libslic3r/GCodeWriter.cpp index 1be5518b9..5388e560f 100644 --- a/src/libslic3r/GCodeWriter.cpp +++ b/src/libslic3r/GCodeWriter.cpp @@ -227,6 +227,7 @@ std::string GCodeWriter::set_fan(const unsigned int speed, bool dont_save, uint1 if (tool != nullptr) fan_speed += int8_t(tool->fan_offset()); fan_speed = std::max(int16_t(0), std::min(int16_t(100), fan_speed)); + const auto fan_baseline = (this->config.fan_percentage.value ? 100.0 : 255.0); // fan_speed has an effective minimum value of 0, so this cast is safe. //test if it's useful to write it @@ -258,7 +259,7 @@ std::string GCodeWriter::set_fan(const unsigned int speed, bool dont_save, uint1 } else { gcode << "S"; } - gcode << (255.0 * fan_speed / 100.0); + gcode << (fan_baseline * (fan_speed / 100.0)); } if (this->config.gcode_comments) gcode << " ; enable fan"; gcode << "\n"; diff --git a/src/libslic3r/PrintConfig.cpp b/src/libslic3r/PrintConfig.cpp index 987e5784c..1c442d4ce 100644 --- a/src/libslic3r/PrintConfig.cpp +++ b/src/libslic3r/PrintConfig.cpp @@ -2528,6 +2528,14 @@ void PrintConfigDef::init_fff_params() def->mode = comSimple; def->set_default_value(new ConfigOptionInts{ 35 }); + def = this->add("fan_percentage", coBool); + def->label = _("Fan PWM from 0-100"); + def->category = OptionCategory::output; + def->tooltip = _("Set this if your printer uses control values from 0-100 instead of 0-255."); + def->cli = "fan-percentage"; + def->mode = comAdvanced; + def->set_default_value(new ConfigOptionBool(false)); + def = this->add("min_layer_height", coFloats); def->label = L("Min"); def->full_label = ("Min layer height"); diff --git a/src/libslic3r/PrintConfig.hpp b/src/libslic3r/PrintConfig.hpp index fab0e1d50..31330a942 100644 --- a/src/libslic3r/PrintConfig.hpp +++ b/src/libslic3r/PrintConfig.hpp @@ -1011,6 +1011,7 @@ public: ConfigOptionFloats extruder_temperature_offset; ConfigOptionString extrusion_axis; ConfigOptionFloats extrusion_multiplier; + ConfigOptionBool fan_percentage; ConfigOptionFloat fan_kickstart; ConfigOptionBool fan_speedup_overhangs; ConfigOptionFloat fan_speedup_time; @@ -1121,6 +1122,7 @@ protected: OPT_PTR(extruder_temperature_offset); OPT_PTR(extrusion_axis); OPT_PTR(extrusion_multiplier); + OPT_PTR(fan_percentage); OPT_PTR(fan_kickstart); OPT_PTR(fan_speedup_overhangs); OPT_PTR(fan_speedup_time);