Add PrintConfig options for future more general z-hop implementation.

The parameters are also presented in the GUI.
This commit is contained in:
Martin Šach 2023-11-06 19:59:06 +01:00 committed by SachCZ
parent 39e4d1269f
commit 3ed86a820a
5 changed files with 101 additions and 24 deletions

View File

@ -485,7 +485,8 @@ static std::vector<std::string> s_Preset_filament_options {
"overhang_fan_speed_0", "overhang_fan_speed_1", "overhang_fan_speed_2", "overhang_fan_speed_3",
// Retract overrides
"filament_retract_length", "filament_retract_lift", "filament_retract_lift_above", "filament_retract_lift_below", "filament_retract_speed", "filament_deretract_speed", "filament_retract_restart_extra", "filament_retract_before_travel",
"filament_retract_layer_change", "filament_wipe", "filament_retract_before_wipe", "filament_retract_length_toolchange", "filament_retract_restart_extra_toolchange",
"filament_retract_layer_change", "filament_wipe", "filament_retract_before_wipe", "filament_retract_length_toolchange", "filament_retract_restart_extra_toolchange", "filament_travel_ramping_lift",
"filament_travel_slope", "filament_travel_max_lift", "filament_travel_lift_before_obstacle",
// Profile compatibility
"filament_vendor", "compatible_prints", "compatible_prints_condition", "compatible_printers", "compatible_printers_condition", "inherits"
};

View File

@ -141,6 +141,11 @@ bool Print::invalidate_state_by_config_options(const ConfigOptionResolver & /* n
"gcode_substitutions",
"gcode_binary",
"printer_notes",
"travel_ramping_lift",
"travel_initial_part_length",
"travel_slope",
"travel_max_lift",
"travel_lift_before_obstacle",
"retract_before_travel",
"retract_before_wipe",
"retract_layer_change",

View File

@ -2316,7 +2316,7 @@ void PrintConfigDef::init_fff_params()
def->set_default_value(new ConfigOptionBools { false });
def = this->add("retract_length", coFloats);
def->label = L("Length");
def->label = L("Retraction length");
def->full_label = L("Retraction Length");
def->tooltip = L("When retraction is triggered, filament is pulled back by the specified amount "
"(the length is measured on raw filament, before it enters the extruder).");
@ -2333,13 +2333,49 @@ void PrintConfigDef::init_fff_params()
def->mode = comExpert;
def->set_default_value(new ConfigOptionFloats { 10. });
def = this->add("retract_lift", coFloats);
def->label = L("Lift Z");
def->tooltip = L("If you set this to a positive value, Z is quickly raised every time a retraction "
"is triggered. When using multiple extruders, only the setting for the first extruder "
"will be considered.");
def = this->add("travel_slope", coPercents);
def->label = L("Ramping slope angle");
def->tooltip = L("During travel there is a part of the travel that is sloped upwards. "
"This number indicates the slope of the travel as mm raised per mm traveled in percent.");
def->sidetext = L("°");
def->min = 0;
def->max_literal = 1000;
def->mode = comAdvanced;
def->set_default_value(new ConfigOptionPercents{0.0});
def = this->add("travel_ramping_lift", coBools);
def->label = L("Use ramping lift");
def->tooltip = L("Generates a ramping lift instead of lifting the extruder directly upwards. "
"This option helps reduce stringing.");
def->mode = comAdvanced;
def->set_default_value(new ConfigOptionBools{ false });
def = this->add("travel_max_lift", coFloats);
def->label = L("Maximum ramping lift");
def->tooltip = L("Maximum lift height of the ramping lift. It may not be reached if the next position "
"is close to the old one.");
def->sidetext = L("mm");
def->set_default_value(new ConfigOptionFloats { 0. });
def->min = 0;
def->max_literal = 1000;
def->mode = comAdvanced;
def->set_default_value(new ConfigOptionFloats{0.0});
def = this->add("travel_lift_before_obstacle", coBools);
def->label = L("Steeper ramp before obstacles");
def->tooltip = L("If enabled, enables dynamic tuning of the 'travel slope end' parameter. "
"If there is an obstacle in the travel path, the 'travel slope end' is set to the obstacle distance, "
"effectively ensuring that the print head will travel in 'lift height' above the obstacle.");
def->mode = comExpert;
def->set_default_value(new ConfigOptionBools{false});
def = this->add("retract_lift", coFloats);
def->label = L("Lift height");
def->tooltip = L("TODO");
def->sidetext = L("mm");
def->min = 0;
def->max_literal = 1000;
def->mode = comSimple;
def->set_default_value(new ConfigOptionFloats{0.});
def = this->add("retract_lift_above", coFloats);
def->label = L("Above Z");
@ -2361,7 +2397,7 @@ void PrintConfigDef::init_fff_params()
def->set_default_value(new ConfigOptionFloats { 0. });
def = this->add("retract_restart_extra", coFloats);
def->label = L("Extra length on restart");
def->label = L("Deretraction extra length");
def->tooltip = L("When the retraction is compensated after the travel move, the extruder will push "
"this additional amount of filament. This setting is rarely needed.");
def->sidetext = L("mm");
@ -3450,11 +3486,12 @@ void PrintConfigDef::init_fff_params()
for (const char *opt_key : {
// floats
"retract_length", "retract_lift", "retract_lift_above", "retract_lift_below", "retract_speed",
"travel_max_lift",
"deretract_speed", "retract_restart_extra", "retract_before_travel", "retract_length_toolchange", "retract_restart_extra_toolchange",
// bools
"retract_layer_change", "wipe",
"retract_layer_change", "wipe", "travel_lift_before_obstacle", "travel_ramping_lift",
// percents
"retract_before_wipe"}) {
"retract_before_wipe", "travel_slope"}) {
auto it_opt = options.find(opt_key);
assert(it_opt != options.end());
def = this->add_nullable(std::string("filament_") + opt_key, it_opt->second.type);
@ -3479,6 +3516,7 @@ void PrintConfigDef::init_extruder_option_keys()
"nozzle_diameter", "min_layer_height", "max_layer_height", "extruder_offset",
"retract_length", "retract_lift", "retract_lift_above", "retract_lift_below", "retract_speed", "deretract_speed",
"retract_before_wipe", "retract_restart_extra", "retract_before_travel", "wipe",
"travel_slope", "travel_max_lift", "travel_ramping_lift", "travel_lift_before_obstacle",
"retract_layer_change", "retract_length_toolchange", "retract_restart_extra_toolchange", "extruder_colour",
"default_filament_profile"
};
@ -3496,6 +3534,10 @@ void PrintConfigDef::init_extruder_option_keys()
"retract_restart_extra",
"retract_restart_extra_toolchange",
"retract_speed",
"travel_lift_before_obstacle",
"travel_max_lift",
"travel_ramping_lift",
"travel_slope",
"wipe"
};
assert(std::is_sorted(m_extruder_retract_keys.begin(), m_extruder_retract_keys.end()));

View File

@ -745,6 +745,10 @@ PRINT_CONFIG_CLASS_DEFINE(
((ConfigOptionFloat, max_volumetric_speed))
((ConfigOptionFloat, max_volumetric_extrusion_rate_slope_positive))
((ConfigOptionFloat, max_volumetric_extrusion_rate_slope_negative))
((ConfigOptionBools, travel_ramping_lift))
((ConfigOptionFloats, travel_max_lift))
((ConfigOptionPercents, travel_slope))
((ConfigOptionBools, travel_lift_before_obstacle))
((ConfigOptionPercents, retract_before_wipe))
((ConfigOptionFloats, retract_length))
((ConfigOptionFloats, retract_length_toolchange))

View File

@ -1989,12 +1989,16 @@ void TabFilament::update_line_with_near_label_widget(ConfigOptionsGroupShp optgr
void TabFilament::add_filament_overrides_page()
{
PageShp page = add_options_page(L("Filament Overrides"), "wrench");
ConfigOptionsGroupShp optgroup = page->new_optgroup(L("Retraction"));
ConfigOptionsGroupShp optgroup = page->new_optgroup(L("Travels"));
const int extruder_idx = 0; // #ys_FIXME
for (const std::string opt_key : { "filament_retract_length",
for (const std::string opt_key : {
"filament_travel_ramping_lift",
"filament_travel_slope",
"filament_retract_lift",
"filament_travel_max_lift",
"filament_retract_length",
"filament_retract_lift_above",
"filament_retract_lift_below",
"filament_retract_speed",
@ -2003,7 +2007,8 @@ void TabFilament::add_filament_overrides_page()
"filament_retract_before_travel",
"filament_retract_layer_change",
"filament_wipe",
"filament_retract_before_wipe"
"filament_retract_before_wipe",
"filament_travel_lift_before_obstacle"
})
create_line_with_near_label_widget(optgroup, opt_key, extruder_idx);
@ -2021,13 +2026,12 @@ void TabFilament::update_filament_overrides_page()
return;
Page* page = m_active_page;
auto og_it = std::find_if(page->m_optgroups.begin(), page->m_optgroups.end(), [](const ConfigOptionsGroupShp og) { return og->title == "Retraction"; });
auto og_it = std::find_if(page->m_optgroups.begin(), page->m_optgroups.end(), [](const ConfigOptionsGroupShp og) { return og->title == "Travels"; });
if (og_it == page->m_optgroups.end())
return;
ConfigOptionsGroupShp optgroup = *og_it;
std::vector<std::string> opt_keys = { "filament_retract_length",
"filament_retract_lift",
"filament_retract_lift_above",
"filament_retract_lift_below",
"filament_retract_speed",
@ -2036,7 +2040,11 @@ void TabFilament::update_filament_overrides_page()
"filament_retract_before_travel",
"filament_retract_layer_change",
"filament_wipe",
"filament_retract_before_wipe"
"filament_retract_before_wipe",
"filament_travel_slope",
"filament_travel_max_lift",
"filament_retract_lift",
"filament_travel_lift_before_obstacle"
};
const int extruder_idx = 0; // #ys_FIXME
@ -3102,7 +3110,8 @@ const std::vector<std::string> extruder_options = {
"min_layer_height", "max_layer_height", "extruder_offset",
"retract_length", "retract_lift", "retract_lift_above", "retract_lift_below",
"retract_speed", "deretract_speed", "retract_restart_extra", "retract_before_travel",
"retract_layer_change", "wipe", "retract_before_wipe",
"retract_layer_change", "wipe", "retract_before_wipe", "travel_ramping_lift",
"travel_slope", "travel_max_lift", "travel_lift_before_obstacle",
"retract_length_toolchange", "retract_restart_extra_toolchange",
};
@ -3256,14 +3265,20 @@ void TabPrinter::build_extruder_pages(size_t n_before_extruders)
optgroup = page->new_optgroup(L("Position (for multi-extruder printers)"));
optgroup->append_single_option_line("extruder_offset", "", extruder_idx);
optgroup = page->new_optgroup(L("Retraction"));
optgroup->append_single_option_line("retract_length", "", extruder_idx);
optgroup = page->new_optgroup(L("Travel lift"));
optgroup->append_single_option_line("retract_lift", "", extruder_idx);
line = { L("Only lift Z"), "" };
optgroup->append_single_option_line("travel_ramping_lift");
optgroup->append_single_option_line("travel_max_lift", "", extruder_idx);
optgroup->append_single_option_line("travel_slope", "", extruder_idx);
optgroup->append_single_option_line("travel_lift_before_obstacle", "", extruder_idx);
line = { L("Only lift"), "" };
line.append_option(optgroup->get_option("retract_lift_above", extruder_idx));
line.append_option(optgroup->get_option("retract_lift_below", extruder_idx));
optgroup->append_line(line);
optgroup = page->new_optgroup(L("Retraction"));
optgroup->append_single_option_line("retract_length", "", extruder_idx);
optgroup->append_single_option_line("retract_speed", "", extruder_idx);
optgroup->append_single_option_line("deretract_speed", "", extruder_idx);
optgroup->append_single_option_line("retract_restart_extra", "", extruder_idx);
@ -3471,26 +3486,34 @@ void TabPrinter::toggle_options()
{
size_t i = size_t(val - 1);
bool have_retract_length = m_config->opt_float("retract_length", i) > 0;
const bool ramping_lift = m_config->opt_bool("travel_ramping_lift", i);
const bool lifts_z = (ramping_lift && m_config->opt_float("travel_max_lift", i) > 0)
|| (! ramping_lift && m_config->opt_float("retract_lift", i) > 0);
// when using firmware retraction, firmware decides retraction length
bool use_firmware_retraction = m_config->opt_bool("use_firmware_retraction");
toggle_option("retract_length", !use_firmware_retraction, i);
toggle_option("retract_lift", ! ramping_lift, i);
toggle_option("travel_max_lift", ramping_lift, i);
toggle_option("travel_slope", ramping_lift, i);
// user can customize travel length if we have retraction length or we"re using
// firmware retraction
toggle_option("retract_before_travel", have_retract_length || use_firmware_retraction, i);
// user can customize other retraction options if retraction is enabled
bool retraction = (have_retract_length || use_firmware_retraction);
std::vector<std::string> vec = { "retract_lift", "retract_layer_change" };
std::vector<std::string> vec = { };
for (auto el : vec)
toggle_option(el, retraction, i);
toggle_option("retract_layer_change", retraction, i);
// retract lift above / below only applies if using retract lift
vec.resize(0);
vec = { "retract_lift_above", "retract_lift_below" };
for (auto el : vec)
toggle_option(el, retraction && (m_config->opt_float("retract_lift", i) > 0), i);
toggle_option(el, lifts_z, i);
// some options only apply when not using firmware retraction
vec.resize(0);
@ -3521,6 +3544,8 @@ void TabPrinter::toggle_options()
load_config(new_conf);
}
toggle_option("travel_lift_before_obstacle", ramping_lift, i);
toggle_option("retract_length_toolchange", have_multiple_extruders, i);
bool toolchange_retraction = m_config->opt_float("retract_length_toolchange", i) > 0;