mirror of
https://git.mirrors.martin98.com/https://github.com/prusa3d/PrusaSlicer.git
synced 2025-08-04 05:30:37 +08:00
First skinnydip implementation
This commit is contained in:
parent
d7cd43e8a7
commit
0dba13d862
@ -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<number_of_moves; ++i) {
|
||||
for (int i=0; i<=number_of_moves; ++i) { // the last one is for skinnydip
|
||||
|
||||
// Skinnydip:
|
||||
if (! skinnydip_done && (m_filpar[m_current_tool].filament_skinnydip_move == i || i == number_of_moves)) {
|
||||
for (int s=0; s<m_filpar[m_current_tool].filament_skinnydip_number_of_dips; ++s) {
|
||||
float dist = m_filpar[m_current_tool].filament_skinnydip_distance + m_cooling_tube_length / 2.f;
|
||||
writer.load_move_x_advanced(turning_point, dist, m_filpar[m_current_tool].filament_skinnydip_loading_speed);
|
||||
writer.load_move_x_advanced(old_x, -dist, m_filpar[m_current_tool].filament_skinnydip_unloading_speed);
|
||||
}
|
||||
skinnydip_done = true;
|
||||
}
|
||||
if (i == number_of_moves)
|
||||
break;
|
||||
|
||||
|
||||
float speed = initial_speed + speed_inc * 2*i;
|
||||
writer.load_move_x_advanced(turning_point, m_cooling_tube_length, speed);
|
||||
speed += speed_inc;
|
||||
|
@ -236,6 +236,13 @@ public:
|
||||
float unloading_speed = 0.f;
|
||||
float unloading_speed_start = 0.f;
|
||||
float delay = 0.f ;
|
||||
|
||||
int filament_skinnydip_move = 0;
|
||||
float filament_skinnydip_loading_speed = 0.f;
|
||||
float filament_skinnydip_unloading_speed = 0.f;
|
||||
float filament_skinnydip_distance = 0.f;
|
||||
int filament_skinnydip_number_of_dips = 0;
|
||||
|
||||
int cooling_moves = 0;
|
||||
float cooling_initial_speed = 0.f;
|
||||
float cooling_final_speed = 0.f;
|
||||
|
@ -478,7 +478,7 @@ static std::vector<std::string> s_Preset_print_options {
|
||||
static std::vector<std::string> 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",
|
||||
|
@ -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"
|
||||
|
@ -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 "
|
||||
|
@ -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<GCodeFlavor>, gcode_flavor))
|
||||
((ConfigOptionEnum<LabelObjectsStyle>, gcode_label_objects))
|
||||
|
@ -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);
|
||||
|
Loading…
x
Reference in New Issue
Block a user