diff --git a/src/libslic3r/GCode/WipeTower.cpp b/src/libslic3r/GCode/WipeTower.cpp index a19371ac89..0d86abd3ec 100644 --- a/src/libslic3r/GCode/WipeTower.cpp +++ b/src/libslic3r/GCode/WipeTower.cpp @@ -613,6 +613,11 @@ void WipeTower::set_extruder(size_t idx, const PrintConfig& config) m_filpar[idx].cooling_moves = config.filament_cooling_moves.get_at(idx); m_filpar[idx].cooling_initial_speed = float(config.filament_cooling_initial_speed.get_at(idx)); m_filpar[idx].cooling_final_speed = float(config.filament_cooling_final_speed.get_at(idx)); + m_filpar[idx].filament_skinnydip_move = config.filament_skinnydip_move.get_at(idx); + m_filpar[idx].filament_skinnydip_loading_speed = float(config.filament_skinnydip_loading_speed.get_at(idx)); + m_filpar[idx].filament_skinnydip_unloading_speed = float(config.filament_skinnydip_unloading_speed.get_at(idx)); + m_filpar[idx].filament_skinnydip_distance = float(config.filament_skinnydip_distance.get_at(idx)); + m_filpar[idx].filament_skinnydip_number_of_dips = config.filament_skinnydip_number_of_dips.get_at(idx); } m_filpar[idx].filament_area = float((M_PI/4.f) * pow(config.filament_diameter.get_at(idx), 2)); // all extruders are assumed to have the same filament diameter at this point @@ -959,17 +964,32 @@ void WipeTower::toolchange_Unload( // Cooling: const int& number_of_moves = m_filpar[m_current_tool].cooling_moves; - if (m_semm && number_of_moves > 0) { + if (m_semm && (number_of_moves > 0 || m_filpar[m_current_tool].filament_skinnydip_number_of_dips > 0)) { const float& initial_speed = m_filpar[m_current_tool].cooling_initial_speed; const float& final_speed = m_filpar[m_current_tool].cooling_final_speed; float speed_inc = (final_speed - initial_speed) / (2.f * number_of_moves - 1.f); + bool skinnydip_done = false; writer.suppress_preview() .travel(writer.x(), writer.y() + y_step); old_x = writer.x(); turning_point = xr-old_x > old_x-xl ? xr : xl; - for (int i=0; i s_Preset_print_options { static std::vector s_Preset_filament_options { "filament_colour", "filament_diameter", "filament_type", "filament_soluble", "filament_notes", "filament_max_volumetric_speed", "extrusion_multiplier", "filament_density", "filament_cost", "filament_spool_weight", "filament_loading_speed", "filament_loading_speed_start", "filament_load_time", - "filament_unloading_speed", "filament_unloading_speed_start", "filament_unload_time", "filament_toolchange_delay", "filament_cooling_moves", + "filament_unloading_speed", "filament_unloading_speed_start", "filament_unload_time", "filament_toolchange_delay", "filament_cooling_moves", "filament_skinnydip_move", "filament_skinnydip_loading_speed", "filament_skinnydip_unloading_speed", "filament_skinnydip_distance", "filament_skinnydip_number_of_dips", "filament_cooling_initial_speed", "filament_cooling_final_speed", "filament_ramming_parameters", "filament_minimal_purge_on_wipe_tower", "filament_multitool_ramming", "filament_multitool_ramming_volume", "filament_multitool_ramming_flow", "temperature", "idle_temperature", "first_layer_temperature", "bed_temperature", "first_layer_bed_temperature", "fan_always_on", "cooling", "min_fan_speed", diff --git a/src/libslic3r/Print.cpp b/src/libslic3r/Print.cpp index f69720d6d6..e5ac50e2e9 100644 --- a/src/libslic3r/Print.cpp +++ b/src/libslic3r/Print.cpp @@ -218,6 +218,11 @@ bool Print::invalidate_state_by_config_options(const ConfigOptionResolver & /* n || opt_key == "filament_unloading_speed_start" || opt_key == "filament_toolchange_delay" || opt_key == "filament_cooling_moves" + || opt_key == "filament_skinnydip_number_of_dips" + || opt_key == "filament_skinnydip_move" + || opt_key == "filament_skinnydip_loading_speed" + || opt_key == "filament_skinnydip_unloading_speed" + || opt_key == "filament_skinnydip_distance" || opt_key == "filament_minimal_purge_on_wipe_tower" || opt_key == "filament_cooling_initial_speed" || opt_key == "filament_cooling_final_speed" diff --git a/src/libslic3r/PrintConfig.cpp b/src/libslic3r/PrintConfig.cpp index 4404aea7be..cb5c980ac7 100644 --- a/src/libslic3r/PrintConfig.cpp +++ b/src/libslic3r/PrintConfig.cpp @@ -1093,6 +1093,41 @@ void PrintConfigDef::init_fff_params() def->mode = comExpert; def->set_default_value(new ConfigOptionFloats { 0. }); + def = this->add("filament_skinnydip_move", coInts); + def->label = L("ELIAS: Skinnydip is performed after N-th cooling move"); + def->tooltip = L("Zero - before cooling. Larger than number of cooling moves - after cooling."); + def->min = 0; + def->mode = comExpert; + def->set_default_value(new ConfigOptionInts { 0 }); + + def = this->add("filament_skinnydip_number_of_dips", coInts); + def->label = L("ELIAS: Number of skinnydips"); + def->tooltip = L(""); + def->min = 0; + def->mode = comExpert; + def->set_default_value(new ConfigOptionInts { 0 }); + + def = this->add("filament_skinnydip_loading_speed", coFloats); + def->label = L("ELIAS: Skinnydip loading speed"); + def->tooltip = L(""); + def->min = 0; + def->mode = comExpert; + def->set_default_value(new ConfigOptionFloats { 0. }); + + def = this->add("filament_skinnydip_unloading_speed", coFloats); + def->label = L("ELIAS: Skinnydip unloading speed"); + def->tooltip = L(""); + def->min = 0; + def->mode = comExpert; + def->set_default_value(new ConfigOptionFloats { 0. }); + + def = this->add("filament_skinnydip_distance", coFloats); + def->label = L("ELIAS: Skinnydip distance measured from the center of the cooling tube"); + def->tooltip = L(""); + def->min = 0; + def->mode = comExpert; + def->set_default_value(new ConfigOptionFloats { 0. }); + def = this->add("filament_cooling_moves", coInts); def->label = L("Number of cooling moves"); def->tooltip = L("Filament is cooled by being moved back and forth in the " diff --git a/src/libslic3r/PrintConfig.hpp b/src/libslic3r/PrintConfig.hpp index f1dc6b96a4..9ec88ec4f8 100644 --- a/src/libslic3r/PrintConfig.hpp +++ b/src/libslic3r/PrintConfig.hpp @@ -724,6 +724,7 @@ PRINT_CONFIG_CLASS_DEFINE( ((ConfigOptionFloats, filament_toolchange_delay)) ((ConfigOptionFloats, filament_unload_time)) ((ConfigOptionInts, filament_cooling_moves)) + ((ConfigOptionInts, filament_skinnydip_number_of_dips)) ((ConfigOptionFloats, filament_cooling_initial_speed)) ((ConfigOptionFloats, filament_minimal_purge_on_wipe_tower)) ((ConfigOptionFloats, filament_cooling_final_speed)) @@ -731,6 +732,10 @@ PRINT_CONFIG_CLASS_DEFINE( ((ConfigOptionBools, filament_multitool_ramming)) ((ConfigOptionFloats, filament_multitool_ramming_volume)) ((ConfigOptionFloats, filament_multitool_ramming_flow)) + ((ConfigOptionInts, filament_skinnydip_move)) + ((ConfigOptionFloats, filament_skinnydip_loading_speed)) + ((ConfigOptionFloats, filament_skinnydip_unloading_speed)) + ((ConfigOptionFloats, filament_skinnydip_distance)) ((ConfigOptionBool, gcode_comments)) ((ConfigOptionEnum, gcode_flavor)) ((ConfigOptionEnum, gcode_label_objects)) diff --git a/src/slic3r/GUI/Tab.cpp b/src/slic3r/GUI/Tab.cpp index c0a232e85d..37fff78e58 100644 --- a/src/slic3r/GUI/Tab.cpp +++ b/src/slic3r/GUI/Tab.cpp @@ -2269,6 +2269,11 @@ void TabFilament::build() optgroup->append_single_option_line("filament_cooling_moves"); optgroup->append_single_option_line("filament_cooling_initial_speed"); optgroup->append_single_option_line("filament_cooling_final_speed"); + optgroup->append_single_option_line("filament_skinnydip_number_of_dips"); + optgroup->append_single_option_line("filament_skinnydip_move"); + optgroup->append_single_option_line("filament_skinnydip_loading_speed"); + optgroup->append_single_option_line("filament_skinnydip_unloading_speed"); + optgroup->append_single_option_line("filament_skinnydip_distance"); create_line_with_widget(optgroup.get(), "filament_ramming_parameters", "", [this](wxWindow* parent) { auto ramming_dialog_btn = new wxButton(parent, wxID_ANY, _(L("Ramming settings"))+dots, wxDefaultPosition, wxDefaultSize, wxBU_EXACTFIT);