From 61e20a8cfa87a9254bf44dd06a704f85ba78c419 Mon Sep 17 00:00:00 2001 From: Lukas Matena Date: Mon, 7 Aug 2023 11:07:14 +0200 Subject: [PATCH] Wipe tower: skinnydip_extra_move, skinnydip_delay --- src/libslic3r/GCode/WipeTower.cpp | 11 ++++++++++- src/libslic3r/GCode/WipeTower.hpp | 2 ++ src/libslic3r/Preset.cpp | 2 +- src/libslic3r/Print.cpp | 2 ++ src/libslic3r/PrintConfig.cpp | 16 ++++++++++++++++ src/libslic3r/PrintConfig.hpp | 2 ++ src/slic3r/GUI/Tab.cpp | 2 ++ 7 files changed, 35 insertions(+), 2 deletions(-) diff --git a/src/libslic3r/GCode/WipeTower.cpp b/src/libslic3r/GCode/WipeTower.cpp index fb04b14f7b..25ecfea6a5 100644 --- a/src/libslic3r/GCode/WipeTower.cpp +++ b/src/libslic3r/GCode/WipeTower.cpp @@ -638,6 +638,8 @@ void WipeTower::set_extruder(size_t idx, const PrintConfig& config) 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_skinnydip_extra_move = float(config.filament_skinnydip_extra_move.get_at(idx)); + m_filpar[idx].filament_skinnydip_delay = float(config.filament_skinnydip_delay.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 @@ -1004,8 +1006,10 @@ void WipeTower::toolchange_Unload( // Skinnydip: if (! skinnydip_done && (m_filpar[m_current_tool].filament_skinnydip_move == i || i == number_of_moves)) { + float dist_e = m_filpar[m_current_tool].filament_skinnydip_distance + m_cooling_tube_length / 2.f; + for (int s=0; s 5) { @@ -1018,6 +1022,11 @@ void WipeTower::toolchange_Unload( } else writer.load_move_x_advanced_there_and_back(turning_point, dist_e, m_filpar[m_current_tool].filament_skinnydip_loading_speed, m_travel_speed); writer.load_move_x_advanced_there_and_back(turning_point, -dist_e, m_filpar[m_current_tool].filament_skinnydip_unloading_speed, 50); + + writer.wait(m_filpar[m_current_tool].filament_skinnydip_delay); + if (m_filpar[m_current_tool].filament_skinnydip_extra_move != 0.f) + dist_e += m_filpar[m_current_tool].filament_skinnydip_extra_move; + } skinnydip_done = true; } diff --git a/src/libslic3r/GCode/WipeTower.hpp b/src/libslic3r/GCode/WipeTower.hpp index b0f8043c4d..e94563dfe2 100644 --- a/src/libslic3r/GCode/WipeTower.hpp +++ b/src/libslic3r/GCode/WipeTower.hpp @@ -242,6 +242,8 @@ public: float filament_skinnydip_loading_speed = 0.f; float filament_skinnydip_unloading_speed = 0.f; float filament_skinnydip_distance = 0.f; + float filament_skinnydip_extra_move = 0.f; + float filament_skinnydip_delay = 0.f; int filament_skinnydip_number_of_dips = 0; int cooling_moves = 0; diff --git a/src/libslic3r/Preset.cpp b/src/libslic3r/Preset.cpp index 60181ee33d..4f5498a672 100644 --- a/src/libslic3r/Preset.cpp +++ b/src/libslic3r/Preset.cpp @@ -478,7 +478,7 @@ static std::vector 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_skinnydip_move", "filament_cold_ramming", "filament_skinnydip_loading_speed", "filament_skinnydip_unloading_speed", "filament_skinnydip_distance", "filament_skinnydip_number_of_dips", + "filament_unloading_speed", "filament_unloading_speed_start", "filament_unload_time", "filament_toolchange_delay", "filament_skinnydip_extra_move", "filament_skinnydip_delay", "filament_cooling_moves", "filament_skinnydip_move", "filament_cold_ramming", "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 4995177dd7..93685f842b 100644 --- a/src/libslic3r/Print.cpp +++ b/src/libslic3r/Print.cpp @@ -217,6 +217,8 @@ bool Print::invalidate_state_by_config_options(const ConfigOptionResolver & /* n || opt_key == "filament_unloading_speed" || opt_key == "filament_unloading_speed_start" || opt_key == "filament_toolchange_delay" + || opt_key == "filament_skinnydip_extra_move" + || opt_key == "filament_skinnydip_delay" || opt_key == "filament_cooling_moves" || opt_key == "filament_skinnydip_number_of_dips" || opt_key == "filament_skinnydip_move" diff --git a/src/libslic3r/PrintConfig.cpp b/src/libslic3r/PrintConfig.cpp index f1a6d88b21..0ac216b036 100644 --- a/src/libslic3r/PrintConfig.cpp +++ b/src/libslic3r/PrintConfig.cpp @@ -1135,6 +1135,22 @@ void PrintConfigDef::init_fff_params() def->mode = comExpert; def->set_default_value(new ConfigOptionFloats { 0. }); + def = this->add("filament_skinnydip_extra_move", coFloats); + def->label = L("ELIAS Skinnydip extension per dip"); + def->tooltip = L("..."); + def->sidetext = L("mm"); + def->min = 0; + def->mode = comExpert; + def->set_default_value(new ConfigOptionFloats { 0. }); + + def = this->add("filament_skinnydip_delay", coFloats); + def->label = L("ELIAS Skinnydip delay"); + def->tooltip = L("..."); + def->sidetext = L("s"); + 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 00c3956609..5050991d51 100644 --- a/src/libslic3r/PrintConfig.hpp +++ b/src/libslic3r/PrintConfig.hpp @@ -737,6 +737,8 @@ PRINT_CONFIG_CLASS_DEFINE( ((ConfigOptionFloats, filament_skinnydip_loading_speed)) ((ConfigOptionFloats, filament_skinnydip_unloading_speed)) ((ConfigOptionFloats, filament_skinnydip_distance)) + ((ConfigOptionFloats, filament_skinnydip_extra_move)) + ((ConfigOptionFloats, filament_skinnydip_delay)) ((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 96d47cafdc..d8ebc8ac57 100644 --- a/src/slic3r/GUI/Tab.cpp +++ b/src/slic3r/GUI/Tab.cpp @@ -2274,6 +2274,8 @@ void TabFilament::build() 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"); + optgroup->append_single_option_line("filament_skinnydip_extra_move"); + optgroup->append_single_option_line("filament_skinnydip_delay"); optgroup->append_single_option_line("filament_cold_ramming"); create_line_with_widget(optgroup.get(), "filament_ramming_parameters", "", [this](wxWindow* parent) {