make initial layer travel move acceleration and jerk configurable (#11674)

* make initial layer travel move acceleration and jerk configurable

* Update spelling to match UI pattern

* Update min integer and re-order to match patterns

---------

Co-authored-by: Thomas Scheiblauer <tom@sharkbay.at>
Co-authored-by: Ioannis Giannakas <59056762+igiannakas@users.noreply.github.com>
This commit is contained in:
Richard Copra
2026-04-22 03:55:24 +02:00
committed by GitHub
parent a2cff48a46
commit 00704c368f
9 changed files with 68 additions and 6 deletions

View File

@@ -12999,6 +12999,18 @@ msgstr ""
msgid "Travel speed of the first layer."
msgstr ""
msgid "First layer travel acceleration"
msgstr ""
msgid "Travel acceleration of first layer."
msgstr ""
msgid "First layer travel jerk"
msgstr ""
msgid "Travel jerk of first layer."
msgstr ""
msgid "Number of slow layers"
msgstr ""

View File

@@ -15193,6 +15193,18 @@ msgstr "Bewegung"
msgid "Travel speed of the first layer."
msgstr "Bewegungsgeschwindigkeit der ersten Schicht"
msgid "First layer travel acceleration"
msgstr "Eilgang Beschleunigung"
msgid "Travel acceleration of first layer."
msgstr "Eilgang Beschleunigung der ersten Schicht."
msgid "First layer travel jerk"
msgstr "Eilgang Ruck"
msgid "Travel jerk of first layer."
msgstr "Eilgang Ruck der ersten Schicht."
msgid "Number of slow layers"
msgstr "Anzahl der langsamen Schichten"

View File

@@ -13280,6 +13280,18 @@ msgstr ""
msgid "Travel speed of the first layer."
msgstr ""
msgid "First layer travel acceleration"
msgstr ""
msgid "Travel acceleration of first layer."
msgstr ""
msgid "First layer travel jerk"
msgstr ""
msgid "Travel jerk of first layer."
msgstr ""
#, fuzzy
msgid "Number of slow layers"
msgstr "This is the number of top interface layers."

View File

@@ -7084,12 +7084,14 @@ std::string GCode::travel_to(const Point& point, ExtrusionRole role, std::string
unsigned int acceleration_to_set = 0;
if (this->on_first_layer()) {
if (m_config.default_acceleration.value > 0 && m_config.initial_layer_acceleration.value > 0) {
acceleration_to_set = (unsigned int) floor(m_config.initial_layer_acceleration.value + 0.5);
}
unsigned int initial_layer_travel_acceleration = m_config.get_abs_value("initial_layer_travel_acceleration");
double initial_layer_travel_jerk = m_config.get_abs_value("initial_layer_travel_jerk");
if (m_config.default_jerk.value > 0 && m_config.initial_layer_jerk.value > 0) {
jerk_to_set = m_config.initial_layer_jerk.value;
if (m_config.default_acceleration.value > 0 && initial_layer_travel_acceleration > 0) {
acceleration_to_set = (unsigned int) floor(initial_layer_travel_acceleration + 0.5);
}
if (m_config.default_jerk.value > 0 && initial_layer_travel_jerk > 0) {
jerk_to_set = initial_layer_travel_jerk;
}
} else { // ORCA: Handle short-travel acceleration and jerk for outer perimeters (if applicable)
const bool is_short_travel = travel.length() < scale_(EXTRUDER_CONFIG(retraction_minimum_travel));

View File

@@ -944,7 +944,7 @@ static std::vector<std::string> s_Preset_print_options {
"bridge_density","internal_bridge_density", "precise_outer_wall", "bridge_acceleration",
"sparse_infill_acceleration", "internal_solid_infill_acceleration", "tree_support_auto_brim",
"tree_support_brim_width", "gcode_comments", "gcode_label_objects",
"initial_layer_travel_speed", "exclude_object", "slow_down_layers", "infill_anchor", "infill_anchor_max","initial_layer_min_bead_width",
"initial_layer_travel_speed", "initial_layer_travel_acceleration", "initial_layer_travel_jerk", "exclude_object", "slow_down_layers", "infill_anchor", "infill_anchor_max","initial_layer_min_bead_width",
"make_overhang_printable", "make_overhang_printable_angle", "make_overhang_printable_hole_size" ,"notes",
"wipe_tower_cone_angle", "wipe_tower_extra_spacing","wipe_tower_max_purge_speed",
"wipe_tower_wall_type", "wipe_tower_extra_rib_length", "wipe_tower_rib_width", "wipe_tower_fillet_wall",

View File

@@ -343,6 +343,8 @@ bool Print::invalidate_state_by_config_options(const ConfigOptionResolver & /* n
|| opt_key == "travel_speed_z"
|| opt_key == "initial_layer_speed"
|| opt_key == "initial_layer_travel_speed"
|| opt_key == "initial_layer_travel_acceleration"
|| opt_key == "initial_layer_travel_jerk"
|| opt_key == "slow_down_layers"
|| opt_key == "idle_temperature"
|| opt_key == "wipe_tower_cone_angle"

View File

@@ -3031,6 +3031,15 @@ void PrintConfigDef::init_fff_params()
def->mode = comAdvanced;
def->set_default_value(new ConfigOptionFloat(300));
def = this->add("initial_layer_travel_acceleration", coFloatOrPercent);
def->label = L("First layer travel");
def->tooltip = L("Travel acceleration of first layer.");
def->sidetext = L("mm/s² or %");
def->min = 0;
def->mode = comAdvanced;
def->ratio_over = "travel_acceleration";
def->set_default_value(new ConfigOptionFloatOrPercent(100, true));
def = this->add("accel_to_decel_enable", coBool);
def->label = L("Enable accel_to_decel");
def->category = L("Speed");
@@ -3121,6 +3130,15 @@ void PrintConfigDef::init_fff_params()
def->mode = comAdvanced;
def->set_default_value(new ConfigOptionFloat(12));
def = this->add("initial_layer_travel_jerk", coFloatOrPercent);
def->label = L("First layer travel");
def->tooltip = L("Travel jerk of first layer.");
def->sidetext = L("mm/s or %");
def->min = 0;
def->mode = comAdvanced;
def->ratio_over = "travel_jerk";
def->set_default_value(new ConfigOptionFloatOrPercent(100, true));
def = this->add("initial_layer_line_width", coFloatOrPercent);
def->label = L("First layer");
def->category = L("Quality");

View File

@@ -1361,6 +1361,8 @@ PRINT_CONFIG_CLASS_DEFINE(
((ConfigOptionBool, accel_to_decel_enable))
((ConfigOptionPercent, accel_to_decel_factor))
((ConfigOptionFloatOrPercent, initial_layer_travel_speed))
((ConfigOptionFloatOrPercent, initial_layer_travel_acceleration))
((ConfigOptionFloatOrPercent, initial_layer_travel_jerk))
((ConfigOptionBool, bbl_calib_mark_logo))
((ConfigOptionBool, disable_m73))

View File

@@ -2503,6 +2503,7 @@ void TabPrint::build()
optgroup->append_single_option_line("sparse_infill_acceleration", "speed_settings_acceleration#sparse-infill");
optgroup->append_single_option_line("internal_solid_infill_acceleration", "speed_settings_acceleration#internal-solid-infill");
optgroup->append_single_option_line("initial_layer_acceleration", "speed_settings_acceleration#initial-layer");
optgroup->append_single_option_line("initial_layer_travel_acceleration");
optgroup->append_single_option_line("top_surface_acceleration", "speed_settings_acceleration#top-surface");
optgroup->append_single_option_line("travel_acceleration", "speed_settings_acceleration#travel");
optgroup->append_single_option_line("accel_to_decel_enable", "speed_settings_acceleration");
@@ -2516,6 +2517,7 @@ void TabPrint::build()
optgroup->append_single_option_line("infill_jerk", "speed_settings_jerk_xy#infill");
optgroup->append_single_option_line("top_surface_jerk", "speed_settings_jerk_xy#top-surface");
optgroup->append_single_option_line("initial_layer_jerk", "speed_settings_jerk_xy#initial-layer");
optgroup->append_single_option_line("initial_layer_travel_jerk");
optgroup->append_single_option_line("travel_jerk", "speed_settings_jerk_xy#travel");
optgroup = page->new_optgroup(L("Advanced"), L"param_advanced", 15);