Initial attempt to make speed configs multi-variant

Co-authored-by: chunmao.guo <chunmao.guo@bambulab.com>
Co-authored-by: zhimin.zeng <zhimin.zeng@bambulab.com>
Co-authored-by: qing.zhang <qing.zhang@bambulab.com>
This commit is contained in:
Noisyfox
2026-05-19 22:11:56 +08:00
parent e87b0d57b4
commit 1c8c7820c8
22 changed files with 648 additions and 512 deletions

View File

@@ -1497,14 +1497,15 @@ void PrintConfigDef::init_fff_params()
def->mode = comAdvanced;
def->set_default_value(new ConfigOptionFloatOrPercent(50, true));
def = this->add("enable_overhang_speed", coBool);
def = this->add("enable_overhang_speed", coBools);
def->label = L("Slow down for overhang");
def->category = L("Speed");
def->tooltip = L("Enable this option to slow printing down for different overhang degree.");
def->mode = comAdvanced;
def->set_default_value(new ConfigOptionBool{ true });
def->nullable = true;
def->set_default_value(new ConfigOptionBoolsNullable{ true });
def = this->add("slowdown_for_curled_perimeters", coBool);
def = this->add("slowdown_for_curled_perimeters", coBools);
def->label = L("Slow down for curled perimeters");
def->category = L("Speed");
// xgettext:no-c-format, no-boost-format
@@ -1519,9 +1520,10 @@ void PrintConfigDef::init_fff_params()
"applied even if the overhanging perimeter is part of a bridge. For example, when the perimeters are 100% overhanging"
", with no wall supporting them from underneath, the 100% overhang speed will be applied.");
def->mode = comAdvanced;
def->set_default_value(new ConfigOptionBool{ true });
def->nullable = true;
def->set_default_value(new ConfigOptionBoolsNullable{ true });
def = this->add("overhang_1_4_speed", coFloatOrPercent);
def = this->add("overhang_1_4_speed", coFloatsOrPercents);
def->label = "10%";
def->category = L("Speed");
def->full_label = "10%";
@@ -1531,9 +1533,10 @@ void PrintConfigDef::init_fff_params()
def->ratio_over = "outer_wall_speed";
def->min = 0;
def->mode = comAdvanced;
def->set_default_value(new ConfigOptionFloatOrPercent(0, false));
def->nullable = true;
def->set_default_value(new ConfigOptionFloatsOrPercentsNullable{FloatOrPercent(0, false)});
def = this->add("overhang_2_4_speed", coFloatOrPercent);
def = this->add("overhang_2_4_speed", coFloatsOrPercents);
def->label = "25%";
def->category = L("Speed");
def->full_label = "25%";
@@ -1543,9 +1546,10 @@ void PrintConfigDef::init_fff_params()
def->ratio_over = "outer_wall_speed";
def->min = 0;
def->mode = comAdvanced;
def->set_default_value(new ConfigOptionFloatOrPercent(0, false));
def->nullable = true;
def->set_default_value(new ConfigOptionFloatsOrPercentsNullable{FloatOrPercent(0, false)});
def = this->add("overhang_3_4_speed", coFloatOrPercent);
def = this->add("overhang_3_4_speed", coFloatsOrPercents);
def->label = "50%";
def->category = L("Speed");
def->full_label = "50%";
@@ -1555,9 +1559,10 @@ void PrintConfigDef::init_fff_params()
def->ratio_over = "outer_wall_speed";
def->min = 0;
def->mode = comAdvanced;
def->set_default_value(new ConfigOptionFloatOrPercent(0, false));
def->nullable = true;
def->set_default_value(new ConfigOptionFloatsOrPercentsNullable{FloatOrPercent(0, false)});
def = this->add("overhang_4_4_speed", coFloatOrPercent);
def = this->add("overhang_4_4_speed", coFloatsOrPercents);
def->label = "75%";
def->category = L("Speed");
def->full_label = "75%";
@@ -1567,9 +1572,10 @@ void PrintConfigDef::init_fff_params()
def->ratio_over = "outer_wall_speed";
def->min = 0;
def->mode = comAdvanced;
def->set_default_value(new ConfigOptionFloatOrPercent(0, false));
def->nullable = true;
def->set_default_value(new ConfigOptionFloatsOrPercentsNullable{FloatOrPercent(0, false)});
def = this->add("bridge_speed", coFloat);
def = this->add("bridge_speed", coFloats);
def->label = L("External");
def->category = L("Speed");
def->tooltip = L("Speed of the externally visible bridge extrusions.\n\n"
@@ -1579,9 +1585,10 @@ void PrintConfigDef::init_fff_params()
def->sidetext = L("mm/s"); // millimeters per second, CIS languages need translation
def->min = 1;
def->mode = comAdvanced;
def->set_default_value(new ConfigOptionFloat(25));
def->nullable = true;
def->set_default_value(new ConfigOptionFloatsNullable{25});
def = this->add("internal_bridge_speed", coFloatOrPercent);
def = this->add("internal_bridge_speed", coFloatsOrPercents);
def->label = L("Internal");
def->category = L("Speed");
def->tooltip = L("Speed of internal bridges. If the value is expressed as a percentage, it will be calculated based on the bridge_speed. Default value is 150%.");
@@ -1589,7 +1596,8 @@ void PrintConfigDef::init_fff_params()
def->ratio_over = "bridge_speed";
def->min = 1;
def->mode = comAdvanced;
def->set_default_value(new ConfigOptionFloatOrPercent(150, true));
def->nullable = true;
def->set_default_value(new ConfigOptionFloatsOrPercentsNullable{FloatOrPercent(150, true)});
def = this->add("brim_width", coFloat);
def->label = L("Brim width");
@@ -1776,14 +1784,46 @@ void PrintConfigDef::init_fff_params()
"This can improve the cooling quality for needle and small details.");
def->set_default_value(new ConfigOptionBools { true });
def = this->add("default_acceleration", coFloat);
def = this->add("default_acceleration", coFloats);
def->label = L("Normal printing");
def->category = L("Speed");
def->tooltip = L("The default acceleration of both normal printing and travel except initial layer.");
def->sidetext = L(u8"mm/s²"); // millimeters per second per second, CIS languages need translation
def->min = 0;
def->mode = comAdvanced;
def->set_default_value(new ConfigOptionFloat(500.0));
def->nullable = true;
def->set_default_value(new ConfigOptionFloatsNullable{500.0});
def = this->add("travel_acceleration", coFloats);
def->label = L("Travel");
def->category = L("Speed");
def->tooltip = L("Acceleration of travel moves.");
def->sidetext = L(u8"mm/s²"); // millimeters per second per second, CIS languages need translation
def->min = 0;
def->mode = comAdvanced;
def->nullable = true;
def->set_default_value(new ConfigOptionFloatsNullable{10000.0});
def = this->add("initial_layer_travel_acceleration", coFloatsOrPercents);
def->label = L("First layer travel");
def->tooltip = L("Travel acceleration of first layer.\nThe percentage value is relative to Travel Acceleration.");
def->sidetext = L("mm/s² or %");
def->min = 0;
def->mode = comAdvanced;
def->ratio_over = "travel_acceleration";
def->nullable = true;
def->set_default_value(new ConfigOptionFloatsOrPercentsNullable{FloatOrPercent(100, true)});
def = this->add("bridge_acceleration", coFloatsOrPercents);
def->label = L("Bridge");
def->category = L("Speed");
def->tooltip = L("Acceleration of bridges. If the value is expressed as a percentage (e.g. 50%), it will be calculated based on the outer wall acceleration.");
def->sidetext = L("mm/s² or %");
def->min = 0;
def->mode = comAdvanced;
def->ratio_over = "outer_wall_acceleration";
def->nullable = true;
def->set_default_value(new ConfigOptionFloatsOrPercentsNullable{FloatOrPercent(50,true)});
def = this->add("default_filament_profile", coStrings);
def->label = L("Default filament profile");
@@ -2006,6 +2046,18 @@ void PrintConfigDef::init_fff_params()
def->enum_labels.push_back(L("Octagram Spiral"));
def->set_default_value(new ConfigOptionEnum<InfillPattern>(ipMonotonicLine));
def = this->add("top_surface_density", coPercent);
def->label = L("Top surface density");
def->category = L("Strength");
def->tooltip = L("Density of top surface layer. A value of 100% creates a fully solid, smooth top layer. "
"Reducing this value results in a textured top surface, according to the chosen top surface pattern. "
"A value of 0% will result in only the walls on the top layer being created. "
"Intended for aesthetic or functional purposes, not to fix issues such as over-extrusion.");
def->sidetext = ("%");
def->min = 0;
def->max = 100;
def->set_default_value(new ConfigOptionPercent(100));
def = this->add("bottom_surface_pattern", coEnum);
def->label = L("Bottom surface pattern");
def->category = L("Strength");
@@ -2015,6 +2067,17 @@ void PrintConfigDef::init_fff_params()
def->enum_labels = def_top_fill_pattern->enum_labels;
def->set_default_value(new ConfigOptionEnum<InfillPattern>(ipMonotonic));
def = this->add("bottom_surface_density", coPercent);
def->label = L("Bottom surface density");
def->category = L("Strength");
def->tooltip = L("Density of the bottom surface layer. "
"Intended for aesthetic or functional purposes, not to fix issues such as over-extrusion.\n"
"WARNING: Lowering this value may negatively affect bed adhesion.");
def->sidetext = ("%");
def->min = 10;
def->max = 100;
def->set_default_value(new ConfigOptionPercent(100));
def = this->add("internal_solid_infill_pattern", coEnum);
def->label = L("Internal solid infill pattern");
def->category = L("Strength");
@@ -2036,7 +2099,7 @@ void PrintConfigDef::init_fff_params()
def->mode = comAdvanced;
def->set_default_value(new ConfigOptionFloatOrPercent(0., false));
def = this->add("outer_wall_speed", coFloat);
def = this->add("outer_wall_speed", coFloats);
def->label = L("Outer wall");
def->category = L("Speed");
def->tooltip = L("Speed of outer wall which is outermost and visible. "
@@ -2044,9 +2107,10 @@ void PrintConfigDef::init_fff_params()
def->sidetext = L("mm/s"); // millimeters per second, CIS languages need translation
def->min = 1;
def->mode = comAdvanced;
def->set_default_value(new ConfigOptionFloat(60));
def->nullable = true;
def->set_default_value(new ConfigOptionFloatsNullable{60});
def = this->add("small_perimeter_speed", coFloatOrPercent);
def = this->add("small_perimeter_speed", coFloatsOrPercents);
def->label = L("Small perimeters");
def->category = L("Speed");
def->tooltip = L("This separate setting will affect the speed of perimeters having radius <= small_perimeter_threshold "
@@ -2056,16 +2120,18 @@ void PrintConfigDef::init_fff_params()
def->ratio_over = "outer_wall_speed";
def->min = 1;
def->mode = comAdvanced;
def->set_default_value(new ConfigOptionFloatOrPercent(50, true));
def->nullable = true;
def->set_default_value(new ConfigOptionFloatsOrPercentsNullable{FloatOrPercent(50, true)});
def = this->add("small_perimeter_threshold", coFloat);
def = this->add("small_perimeter_threshold", coFloats);
def->label = L("Small perimeters threshold");
def->category = L("Speed");
def->tooltip = L("This sets the threshold for small perimeter length. Default threshold is 0mm.");
def->sidetext = L("mm"); // millimeters, CIS languages need translation
def->min = 0;
def->mode = comAdvanced;
def->set_default_value(new ConfigOptionFloat(0));
def->nullable = true;
def->set_default_value(new ConfigOptionFloatsNullable{0});
def = this->add("wall_sequence", coEnum);
def->label = L("Walls printing order");
@@ -2427,18 +2493,6 @@ void PrintConfigDef::init_fff_params()
def->mode = comAdvanced;
def->set_default_value(new ConfigOptionEnum<FilamentMapMode>(fmmAutoForFlush));
def = this->add("enable_filament_dynamic_map", coBool);
def->label = L("Enable filament dynamic map");
def->tooltip = L("Enable dynamic filament mapping during print.");
def->mode = comDevelop;
def->set_default_value(new ConfigOptionBool(false));
def = this->add("has_filament_switcher", coBool);
def->label = L("Has filament switcher");
def->tooltip = L("Printer has a filament switcher hardware (e.g., AMS).");
def->mode = comDevelop;
def->set_default_value(new ConfigOptionBool(false));
def = this->add("filament_flush_temp", coInts);
def->label = L("Flush temperature");
def->tooltip = L("Temperature when flushing filament. 0 indicates the upper bound of the recommended nozzle temperature range.");
@@ -2984,134 +3038,37 @@ void PrintConfigDef::init_fff_params()
def->enum_labels.push_back(L("Octagram Spiral"));
def->set_default_value(new ConfigOptionEnum<InfillPattern>(ipCrossHatch));
def = this->add("lateral_lattice_angle_1", coFloat);
def->label = L("Lateral lattice angle 1");
def->category = L("Strength");
def->tooltip = L("The angle of the first set of Lateral lattice elements in the Z direction. Zero is vertical.");
def->sidetext = u8"°"; // degrees, don't need translation
def->min = -75;
def->max = 75;
def->mode = comAdvanced;
def->set_default_value(new ConfigOptionFloat(-45));
def = this->add("lateral_lattice_angle_2", coFloat);
def->label = L("Lateral lattice angle 2");
def->category = L("Strength");
def->tooltip = L("The angle of the second set of Lateral lattice elements in the Z direction. Zero is vertical.");
def->sidetext = u8"°"; // degrees, don't need translation
def->min = -75;
def->max = 75;
def->mode = comAdvanced;
def->set_default_value(new ConfigOptionFloat(45));
def = this->add("infill_overhang_angle", coFloat);
def->label = L("Infill overhang angle");
def->category = L("Strength");
def->tooltip = L("The angle of the infill angled lines. 60° will result in a pure honeycomb.");
def->sidetext = u8"°"; // degrees, don't need translation
def->min = 15;
def->max = 75;
def->mode = comAdvanced;
def->set_default_value(new ConfigOptionFloat(60));
auto def_infill_anchor_min = def = this->add("infill_anchor", coFloatOrPercent);
def->label = L("Sparse infill anchor length");
def->category = L("Strength");
def->tooltip = L("Connect an infill line to an internal perimeter with a short segment of an additional perimeter. "
"If expressed as percentage (example: 15%) it is calculated over infill extrusion width. "
"Orca Slicer tries to connect two close infill lines to a short perimeter segment. If no such perimeter segment "
"shorter than infill_anchor_max is found, the infill line is connected to a perimeter segment at just one side "
"and the length of the perimeter segment taken is limited to this parameter, but no longer than anchor_length_max.\n"
"Set this parameter to zero to disable anchoring perimeters connected to a single infill line.");
def->sidetext = L("mm or %");
def->ratio_over = "sparse_infill_line_width";
def->max_literal = 1000;
def->gui_type = ConfigOptionDef::GUIType::f_enum_open;
def->enum_values.push_back("0");
def->enum_values.push_back("1");
def->enum_values.push_back("2");
def->enum_values.push_back("5");
def->enum_values.push_back("10");
def->enum_values.push_back("1000");
def->enum_labels.push_back(L("0 (no open anchors)"));
def->enum_labels.push_back("1 mm");
def->enum_labels.push_back("2 mm");
def->enum_labels.push_back("5 mm");
def->enum_labels.push_back("10 mm");
def->enum_labels.push_back(L("1000 (unlimited)"));
def->mode = comAdvanced;
def->set_default_value(new ConfigOptionFloatOrPercent(400, true));
def = this->add("infill_anchor_max", coFloatOrPercent);
def->label = L("Maximum length of the infill anchor");
def->category = L("Strength");
def->tooltip = L("Connect an infill line to an internal perimeter with a short segment of an additional perimeter. "
"If expressed as percentage (example: 15%) it is calculated over infill extrusion width. "
"Orca Slicer tries to connect two close infill lines to a short perimeter segment. If no such perimeter segment "
"shorter than this parameter is found, the infill line is connected to a perimeter segment at just one side "
"and the length of the perimeter segment taken is limited to infill_anchor, but no longer than this parameter.\n"
"If set to 0, the old algorithm for infill connection will be used, it should create the same result as with 1000 & 0.");
def->sidetext = def_infill_anchor_min->sidetext;
def->ratio_over = def_infill_anchor_min->ratio_over;
def->gui_type = def_infill_anchor_min->gui_type;
def->enum_values = def_infill_anchor_min->enum_values;
def->max_literal = def_infill_anchor_min->max_literal;
def->enum_labels.push_back(L("0 (Simple connect)"));
def->enum_labels.push_back("1 mm");
def->enum_labels.push_back("2 mm");
def->enum_labels.push_back("5 mm");
def->enum_labels.push_back("10 mm");
def->enum_labels.push_back(L("1000 (unlimited)"));
def->mode = comAdvanced;
def->set_default_value(new ConfigOptionFloatOrPercent(20, false));
def = this->add("inner_wall_acceleration", coFloat);
def->label = L("Inner wall");
def->category = L("Speed");
def->tooltip = L("Acceleration of inner walls.");
def->sidetext = L(u8"mm/s²"); // millimeters per second per second, CIS languages need translation
def->min = 0;
def->mode = comAdvanced;
def->set_default_value(new ConfigOptionFloat(10000));
def = this->add("travel_acceleration", coFloat);
def->label = L("Travel");
def->category = L("Speed");
def->tooltip = L("Acceleration of travel moves.");
def->sidetext = L(u8"mm/s²"); // millimeters per second per second, CIS languages need translation
def->min = 0;
def->mode = comAdvanced;
def->set_default_value(new ConfigOptionFloat(10000));
def = this->add("top_surface_acceleration", coFloat);
def = this->add("top_surface_acceleration", coFloats);
def->label = L("Top surface");
def->category = L("Speed");
def->tooltip = L("Acceleration of top surface infill. Using a lower value may improve top surface quality.");
def->sidetext = L(u8"mm/s²"); // millimeters per second per second, CIS languages need translation
def->min = 0;
def->mode = comAdvanced;
def->set_default_value(new ConfigOptionFloat(500));
def->nullable = true;
def->set_default_value(new ConfigOptionFloatsNullable{500});
def = this->add("outer_wall_acceleration", coFloat);
def = this->add("outer_wall_acceleration", coFloats);
def->label = L("Outer wall");
def->category = L("Speed");
def->tooltip = L("Acceleration of outer wall. Using a lower value can improve quality.");
def->sidetext = L(u8"mm/s²"); // millimeters per second per second, CIS languages need translation
def->min = 0;
def->mode = comAdvanced;
def->set_default_value(new ConfigOptionFloat(500));
def->nullable = true;
def->set_default_value(new ConfigOptionFloatsNullable{500});
def = this->add("bridge_acceleration", coFloatOrPercent);
def->label = L("Bridge");
def = this->add("inner_wall_acceleration", coFloats);
def->label = L("Inner wall");
def->category = L("Speed");
def->tooltip = L("Acceleration of bridges. If the value is expressed as a percentage (e.g. 50%), it will be calculated based on the outer wall acceleration.");
def->sidetext = L("mm/s² or %");
def->tooltip = L("Acceleration of inner walls.");
def->sidetext = L(u8"mm/s²"); // millimeters per second per second, CIS languages need translation
def->min = 0;
def->mode = comAdvanced;
def->ratio_over = "outer_wall_acceleration";
def->set_default_value(new ConfigOptionFloatOrPercent(50,true));
def->nullable = true;
def->set_default_value(new ConfigOptionFloatsNullable{10000});
def = this->add("sparse_infill_acceleration", coFloatOrPercent);
def = this->add("sparse_infill_acceleration", coFloatsOrPercents);
def->label = L("Sparse infill");
def->category = L("Speed");
def->tooltip = L("Acceleration of sparse infill. If the value is expressed as a percentage (e.g. 100%), it will be calculated based on the default acceleration.");
@@ -3119,9 +3076,10 @@ void PrintConfigDef::init_fff_params()
def->min = 0;
def->mode = comAdvanced;
def->ratio_over = "default_acceleration";
def->set_default_value(new ConfigOptionFloatOrPercent(100, true));
def->nullable = true;
def->set_default_value(new ConfigOptionFloatsOrPercentsNullable{FloatOrPercent(100, true)});
def = this->add("internal_solid_infill_acceleration", coFloatOrPercent);
def = this->add("internal_solid_infill_acceleration", coFloatsOrPercents);
def->label = L("Internal solid infill");
def->category = L("Speed");
def->tooltip = L("Acceleration of internal solid infill. If the value is expressed as a percentage (e.g. 100%), it will be calculated based on the default acceleration.");
@@ -3129,25 +3087,18 @@ void PrintConfigDef::init_fff_params()
def->min = 0;
def->mode = comAdvanced;
def->ratio_over = "default_acceleration";
def->set_default_value(new ConfigOptionFloatOrPercent(100, true));
def->nullable = true;
def->set_default_value(new ConfigOptionFloatsOrPercentsNullable{FloatOrPercent(100, true)});
def = this->add("initial_layer_acceleration", coFloat);
def = this->add("initial_layer_acceleration", coFloats);
def->label = L("First layer");
def->category = L("Speed");
def->tooltip = L("Acceleration of the first layer. Using a lower value can improve build plate adhesion.");
def->sidetext = L(u8"mm/s²"); // millimeters per second per second, CIS languages need translation
def->min = 0;
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.\nThe percentage value is relative to Travel Acceleration.");
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->nullable = true;
def->set_default_value(new ConfigOptionFloatsNullable{300});
def = this->add("accel_to_decel_enable", coBool);
def->label = L("Enable accel_to_decel");
@@ -3166,16 +3117,17 @@ void PrintConfigDef::init_fff_params()
def->mode = comAdvanced;
def->set_default_value(new ConfigOptionPercent(50));
def = this->add("default_jerk", coFloat);
def = this->add("default_jerk", coFloats);
def->label = L("Default");
def->category = L("Speed");
def->tooltip = L("Default jerk.");
def->sidetext = L("mm/s"); // millimeters per second, CIS languages need translation
def->min = 0;
def->mode = comAdvanced;
def->set_default_value(new ConfigOptionFloat(0));
def->nullable = true;
def->set_default_value(new ConfigOptionFloatsNullable{0});
def = this->add("default_junction_deviation", coFloat);
def = this->add("default_junction_deviation", coFloats);
def->label = L("Junction Deviation");
def->category = L("Speed");
def->tooltip = L("Marlin Firmware Junction Deviation (replaces the traditional XY Jerk setting).");
@@ -3183,70 +3135,78 @@ void PrintConfigDef::init_fff_params()
def->min = 0.f;
def->max = 0.3f;
def->mode = comAdvanced;
def->set_default_value(new ConfigOptionFloat(0.f));
def->nullable = true;
def->set_default_value(new ConfigOptionFloatsNullable{0.f});
def = this->add("outer_wall_jerk", coFloat);
def = this->add("outer_wall_jerk", coFloats);
def->label = L("Outer wall");
def->category = L("Speed");
def->tooltip = L("Jerk of outer walls.");
def->sidetext = L("mm/s"); // millimeters per second, CIS languages need translation
def->min = 0;
def->mode = comAdvanced;
def->set_default_value(new ConfigOptionFloat(9));
def->nullable = true;
def->set_default_value(new ConfigOptionFloatsNullable{9});
def = this->add("inner_wall_jerk", coFloat);
def = this->add("inner_wall_jerk", coFloats);
def->label = L("Inner wall");
def->category = L("Speed");
def->tooltip = L("Jerk of inner walls.");
def->sidetext = L("mm/s"); // millimeters per second, CIS languages need translation
def->min = 0;
def->mode = comAdvanced;
def->set_default_value(new ConfigOptionFloat(9));
def->nullable = true;
def->set_default_value(new ConfigOptionFloatsNullable{9});
def = this->add("top_surface_jerk", coFloat);
def = this->add("top_surface_jerk", coFloats);
def->label = L("Top surface");
def->category = L("Speed");
def->nullable = true;
def->tooltip = L("Jerk for top surface.");
def->sidetext = L("mm/s"); // millimeters per second, CIS languages need translation
def->min = 0;
def->mode = comAdvanced;
def->set_default_value(new ConfigOptionFloat(9));
def->set_default_value(new ConfigOptionFloatsNullable{9});
def = this->add("infill_jerk", coFloat);
def = this->add("infill_jerk", coFloats);
def->label = L("Infill");
def->category = L("Speed");
def->tooltip = L("Jerk for infill.");
def->sidetext = L("mm/s"); // millimeters per second, CIS languages need translation
def->min = 0;
def->mode = comAdvanced;
def->set_default_value(new ConfigOptionFloat(9));
def->nullable = true;
def->set_default_value(new ConfigOptionFloatsNullable{9});
def = this->add("initial_layer_jerk", coFloat);
def = this->add("initial_layer_jerk", coFloats);
def->label = L("First layer");
def->category = L("Speed");
def->tooltip = L("Jerk for the first layer.");
def->sidetext = L("mm/s"); // millimeters per second, CIS languages need translation
def->min = 0;
def->mode = comAdvanced;
def->set_default_value(new ConfigOptionFloat(9));
def->nullable = true;
def->set_default_value(new ConfigOptionFloatsNullable{9});
def = this->add("travel_jerk", coFloat);
def = this->add("travel_jerk", coFloats);
def->label = L("Travel");
def->category = L("Speed");
def->tooltip = L("Jerk for travel.");
def->sidetext = L("mm/s"); // millimeters per second, CIS languages need translation
def->min = 0;
def->mode = comAdvanced;
def->set_default_value(new ConfigOptionFloat(12));
def->nullable = true;
def->set_default_value(new ConfigOptionFloatsNullable{12});
def = this->add("initial_layer_travel_jerk", coFloatOrPercent);
def = this->add("initial_layer_travel_jerk", coFloatsOrPercents);
def->label = L("First layer travel");
def->tooltip = L("Travel jerk of first layer.\nThe percentage value is relative to Travel Jerk.");
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->nullable = true;
def->set_default_value(new ConfigOptionFloatsOrPercentsNullable{FloatOrPercent(100, true)});
def = this->add("initial_layer_line_width", coFloatOrPercent);
def->label = L("First layer");
@@ -3260,7 +3220,6 @@ void PrintConfigDef::init_fff_params()
def->mode = comAdvanced;
def->set_default_value(new ConfigOptionFloatOrPercent(0., false));
def = this->add("initial_layer_print_height", coFloat);
def->label = L("First layer height");
def->category = L("Quality");
@@ -3277,23 +3236,25 @@ void PrintConfigDef::init_fff_params()
// "Note that this option only takes effect if no prime tower is generated in current plate.");
//def->set_default_value(new ConfigOptionBool(0));
def = this->add("initial_layer_speed", coFloat);
def = this->add("initial_layer_speed", coFloats);
def->label = L("First layer");
def->tooltip = L("Speed of the first layer except the solid infill part.");
def->sidetext = L("mm/s"); // millimeters per second, CIS languages need translation
def->min = 1;
def->mode = comAdvanced;
def->set_default_value(new ConfigOptionFloat(30));
def->nullable = true;
def->set_default_value(new ConfigOptionFloatsNullable{30});
def = this->add("initial_layer_infill_speed", coFloat);
def = this->add("initial_layer_infill_speed", coFloats);
def->label = L("First layer infill");
def->tooltip = L("Speed of solid infill part of the first layer.");
def->sidetext = L("mm/s"); // millimeters per second, CIS languages need translation
def->min = 1;
def->mode = comAdvanced;
def->set_default_value(new ConfigOptionFloat(60.0));
def->nullable = true;
def->set_default_value(new ConfigOptionFloatsNullable{60.0});
def = this->add("initial_layer_travel_speed", coFloatOrPercent);
def = this->add("initial_layer_travel_speed", coFloatsOrPercents);
def->label = L("First layer travel speed");
def->tooltip = L("Travel speed of the first layer.");
def->category = L("Speed");
@@ -3301,7 +3262,8 @@ void PrintConfigDef::init_fff_params()
def->ratio_over = "travel_speed";
def->min = 1;
def->mode = comAdvanced;
def->set_default_value(new ConfigOptionFloatOrPercent(100, true));
def->nullable = true;
def->set_default_value(new ConfigOptionFloatsOrPercentsNullable{FloatOrPercent(100, true)});
def = this->add("slow_down_layers", coInt);
def->label = L("Number of slow layers");
@@ -3584,14 +3546,15 @@ void PrintConfigDef::init_fff_params()
def->mode = comAdvanced;
def->set_default_value(new ConfigOptionFloat(0));
def = this->add("gap_infill_speed", coFloat);
def = this->add("gap_infill_speed", coFloats);
def->label = L("Gap infill");
def->category = L("Speed");
def->tooltip = L("Speed of gap infill. Gap usually has irregular line width and should be printed more slowly.");
def->sidetext = L("mm/s"); // millimeters per second, CIS languages need translation
def->min = 1;
def->mode = comAdvanced;
def->set_default_value(new ConfigOptionFloat(30));
def->nullable = true;
def->set_default_value(new ConfigOptionFloatsNullable{30});
// BBS
def = this->add("precise_z_height", coBool);
@@ -4004,6 +3967,87 @@ void PrintConfigDef::init_fff_params()
def->gui_type = ConfigOptionDef::GUIType::one_string;
def->set_default_value(new ConfigOptionPoints());
def = this->add("lateral_lattice_angle_1", coFloat);
def->label = L("Lateral lattice angle 1");
def->category = L("Strength");
def->tooltip = L("The angle of the first set of Lateral lattice elements in the Z direction. Zero is vertical.");
def->sidetext = u8"°"; // degrees, don't need translation
def->min = -75;
def->max = 75;
def->mode = comAdvanced;
def->set_default_value(new ConfigOptionFloat(-45));
def = this->add("lateral_lattice_angle_2", coFloat);
def->label = L("Lateral lattice angle 2");
def->category = L("Strength");
def->tooltip = L("The angle of the second set of Lateral lattice elements in the Z direction. Zero is vertical.");
def->sidetext = u8"°"; // degrees, don't need translation
def->min = -75;
def->max = 75;
def->mode = comAdvanced;
def->set_default_value(new ConfigOptionFloat(45));
def = this->add("infill_overhang_angle", coFloat);
def->label = L("Infill overhang angle");
def->category = L("Strength");
def->tooltip = L("The angle of the infill angled lines. 60° will result in a pure honeycomb.");
def->sidetext = u8"°"; // degrees, don't need translation
def->min = 15;
def->max = 75;
def->mode = comAdvanced;
def->set_default_value(new ConfigOptionFloat(60));
auto def_infill_anchor_min = def = this->add("infill_anchor", coFloatOrPercent);
def->label = L("Sparse infill anchor length");
def->category = L("Strength");
def->tooltip = L("Connect an infill line to an internal perimeter with a short segment of an additional perimeter. "
"If expressed as percentage (example: 15%) it is calculated over infill extrusion width. "
"Orca Slicer tries to connect two close infill lines to a short perimeter segment. If no such perimeter segment "
"shorter than infill_anchor_max is found, the infill line is connected to a perimeter segment at just one side "
"and the length of the perimeter segment taken is limited to this parameter, but no longer than anchor_length_max.\n"
"Set this parameter to zero to disable anchoring perimeters connected to a single infill line.");
def->sidetext = L("mm or %");
def->ratio_over = "sparse_infill_line_width";
def->max_literal = 1000;
def->gui_type = ConfigOptionDef::GUIType::f_enum_open;
def->enum_values.push_back("0");
def->enum_values.push_back("1");
def->enum_values.push_back("2");
def->enum_values.push_back("5");
def->enum_values.push_back("10");
def->enum_values.push_back("1000");
def->enum_labels.push_back(L("0 (no open anchors)"));
def->enum_labels.push_back("1 mm");
def->enum_labels.push_back("2 mm");
def->enum_labels.push_back("5 mm");
def->enum_labels.push_back("10 mm");
def->enum_labels.push_back(L("1000 (unlimited)"));
def->mode = comAdvanced;
def->set_default_value(new ConfigOptionFloatOrPercent(400, true));
def = this->add("infill_anchor_max", coFloatOrPercent);
def->label = L("Maximum length of the infill anchor");
def->category = L("Strength");
def->tooltip = L("Connect an infill line to an internal perimeter with a short segment of an additional perimeter. "
"If expressed as percentage (example: 15%) it is calculated over infill extrusion width. "
"Orca Slicer tries to connect two close infill lines to a short perimeter segment. If no such perimeter segment "
"shorter than this parameter is found, the infill line is connected to a perimeter segment at just one side "
"and the length of the perimeter segment taken is limited to infill_anchor, but no longer than this parameter.\n"
"If set to 0, the old algorithm for infill connection will be used, it should create the same result as with 1000 & 0.");
def->sidetext = def_infill_anchor_min->sidetext;
def->ratio_over = def_infill_anchor_min->ratio_over;
def->gui_type = def_infill_anchor_min->gui_type;
def->enum_values = def_infill_anchor_min->enum_values;
def->max_literal = def_infill_anchor_min->max_literal;
def->enum_labels.push_back(L("0 (Simple connect)"));
def->enum_labels.push_back("1 mm");
def->enum_labels.push_back("2 mm");
def->enum_labels.push_back("5 mm");
def->enum_labels.push_back("10 mm");
def->enum_labels.push_back(L("1000 (unlimited)"));
def->mode = comAdvanced;
def->set_default_value(new ConfigOptionFloatOrPercent(20, false));
def = this->add("sparse_infill_filament", coInt);
def->gui_type = ConfigOptionDef::GUIType::i_enum_open;
def->label = L("Infill");
@@ -4051,14 +4095,15 @@ void PrintConfigDef::init_fff_params()
def->mode = comAdvanced;
def->set_default_value(new ConfigOptionPercent(25));
def = this->add("sparse_infill_speed", coFloat);
def = this->add("sparse_infill_speed", coFloats);
def->label = L("Sparse infill");
def->category = L("Speed");
def->tooltip = L("Speed of internal sparse infill.");
def->sidetext = L("mm/s"); // millimeters per second, CIS languages need translation
def->min = 1;
def->mode = comAdvanced;
def->set_default_value(new ConfigOptionFloat(100));
def->nullable = true;
def->set_default_value(new ConfigOptionFloatsNullable{100});
def = this->add("inherits", coString);
def->label = L("Inherits profile");
@@ -5250,6 +5295,18 @@ void PrintConfigDef::init_fff_params()
def->tooltip = "AMS counts per extruder.";
def->set_default_value(new ConfigOptionStrings { });
def = this->add("enable_filament_dynamic_map", coBool);
def->label = L("Enable filament dynamic map");
def->tooltip = L("Enable dynamic filament mapping during print.");
def->mode = comDevelop;
def->set_default_value(new ConfigOptionBool(false));
def = this->add("has_filament_switcher", coBool);
def->label = L("Has filament switcher");
def->tooltip = L("Printer has a filament switcher hardware (e.g., AMS).");
def->mode = comDevelop;
def->set_default_value(new ConfigOptionBool(false));
def = this->add("printer_extruder_id", coInts);
// internal use only, don't need translation
def->label = "Printer extruder id";
@@ -5667,14 +5724,15 @@ void PrintConfigDef::init_fff_params()
def->mode = comAdvanced;
def->set_default_value(new ConfigOptionFloatOrPercent(0., false));
def = this->add("internal_solid_infill_speed", coFloat);
def = this->add("internal_solid_infill_speed", coFloats);
def->label = L("Internal solid infill");
def->category = L("Speed");
def->tooltip = L("Speed of internal solid infill, not the top and bottom surface.");
def->sidetext = L("mm/s"); // millimeters per second, CIS languages need translation
def->min = 1;
def->mode = comAdvanced;
def->set_default_value(new ConfigOptionFloat(100));
def->nullable = true;
def->set_default_value(new ConfigOptionFloatsNullable{100});
def = this->add("spiral_mode", coBool);
def->label = L("Spiral vase");
@@ -6122,14 +6180,15 @@ void PrintConfigDef::init_fff_params()
def->mode = comAdvanced;
def->set_default_value(new ConfigOptionFloat(0.5));
def = this->add("support_interface_speed", coFloat);
def = this->add("support_interface_speed", coFloats);
def->label = L("Support interface");
def->category = L("Speed");
def->tooltip = L("Speed of support interface.");
def->sidetext = L("mm/s"); // millimeters per second, CIS languages need translation
def->min = 1;
def->mode = comAdvanced;
def->set_default_value(new ConfigOptionFloat(80));
def->nullable = true;
def->set_default_value(new ConfigOptionFloatsNullable{80});
def = this->add("support_base_pattern", coEnum);
def->label = L("Base pattern");
@@ -6193,14 +6252,15 @@ void PrintConfigDef::init_fff_params()
def->mode = comAdvanced;
def->set_default_value(new ConfigOptionFloat(0));
def = this->add("support_speed", coFloat);
def = this->add("support_speed", coFloats);
def->label = L("Support");
def->category = L("Speed");
def->tooltip = L("Speed of support.");
def->sidetext = L("mm/s"); // millimeters per second, CIS languages need translation
def->min = 1;
def->mode = comAdvanced;
def->set_default_value(new ConfigOptionFloat(80));
def->nullable = true;
def->set_default_value(new ConfigOptionFloatsNullable{ 80 });
def = this->add("support_style", coEnum);
def->label = L("Style");
@@ -6553,14 +6613,15 @@ void PrintConfigDef::init_fff_params()
def->mode = comAdvanced;
def->set_default_value(new ConfigOptionFloatOrPercent(0., false));
def = this->add("top_surface_speed", coFloat);
def = this->add("top_surface_speed", coFloats);
def->label = L("Top surface");
def->category = L("Speed");
def->tooltip = L("Speed of top surface infill which is solid.");
def->sidetext = L("mm/s"); // millimeters per second, CIS languages need translation
def->min = 1;
def->mode = comAdvanced;
def->set_default_value(new ConfigOptionFloat(100));
def->nullable = true;
def->set_default_value(new ConfigOptionFloatsNullable{100});
def = this->add("top_shell_layers", coInt);
def->label = L("Top shell layers");
@@ -6584,39 +6645,17 @@ void PrintConfigDef::init_fff_params()
def->min = 0;
def->set_default_value(new ConfigOptionFloat(0.6));
def = this->add("top_surface_density", coPercent);
def->label = L("Top surface density");
def->category = L("Strength");
def->tooltip = L("Density of top surface layer. A value of 100% creates a fully solid, smooth top layer. "
"Reducing this value results in a textured top surface, according to the chosen top surface pattern. "
"A value of 0% will result in only the walls on the top layer being created. "
"Intended for aesthetic or functional purposes, not to fix issues such as over-extrusion.");
def->sidetext = ("%");
def->min = 0;
def->max = 100;
def->set_default_value(new ConfigOptionPercent(100));
def = this->add("bottom_surface_density", coPercent);
def->label = L("Bottom surface density");
def->category = L("Strength");
def->tooltip = L("Density of the bottom surface layer. "
"Intended for aesthetic or functional purposes, not to fix issues such as over-extrusion.\n"
"WARNING: Lowering this value may negatively affect bed adhesion.");
def->sidetext = ("%");
def->min = 10;
def->max = 100;
def->set_default_value(new ConfigOptionPercent(100));
def = this->add("travel_speed", coFloat);
def = this->add("travel_speed", coFloats);
def->label = L("Travel");
def->tooltip = L("Speed of travel which is faster and without extrusion.");
def->sidetext = L("mm/s"); // millimeters per second, CIS languages need translation
def->min = 1;
def->mode = comAdvanced;
def->set_default_value(new ConfigOptionFloat(120));
def->nullable = true;
def->set_default_value(new ConfigOptionFloatsNullable{120});
def = this->add("travel_speed_z", coFloat);
def = this->add("travel_speed_z", coFloats);
//def->label = L("Z travel");
//def->tooltip = L("Speed of vertical travel along z axis. "
// "This is typically lower because build plate or gantry is hard to be moved. "
@@ -6624,7 +6663,8 @@ void PrintConfigDef::init_fff_params()
def->sidetext = L("mm/s"); // millimeters per second, CIS languages need translation
def->min = 0;
def->mode = comDevelop;
def->set_default_value(new ConfigOptionFloat(0.));
def->nullable = true;
def->set_default_value(new ConfigOptionFloatsNullable{0.});
def = this->add("wipe", coBools);
def->label = L("Wipe while retracting");
@@ -8155,32 +8195,48 @@ const PrintConfigDef print_config_def;
//todo
std::set<std::string> print_options_with_variant = {
//"initial_layer_speed",
//"initial_layer_infill_speed",
//"outer_wall_speed",
"initial_layer_speed",
"initial_layer_infill_speed",
"outer_wall_speed",
"inner_wall_speed",
//"small_perimeter_speed", //coFloatsOrPercents
//"small_perimeter_threshold",
//"sparse_infill_speed",
//"internal_solid_infill_speed",
//"top_surface_speed",
//"enable_overhang_speed", //coBools
//"overhang_1_4_speed",
//"overhang_2_4_speed",
//"overhang_3_4_speed",
//"overhang_4_4_speed",
//"bridge_speed",
//"gap_infill_speed",
//"support_speed",
//"support_interface_speed",
//"travel_speed",
//"travel_speed_z",
//"default_acceleration",
//"initial_layer_acceleration",
//"outer_wall_acceleration",
//"inner_wall_acceleration",
//"sparse_infill_acceleration", //coFloatsOrPercents
//"top_surface_acceleration",
"small_perimeter_speed", //coFloatsOrPercents
"small_perimeter_threshold",
"sparse_infill_speed",
"internal_solid_infill_speed",
"top_surface_speed",
"enable_overhang_speed", //coBools
"overhang_1_4_speed",
"overhang_2_4_speed",
"overhang_3_4_speed",
"overhang_4_4_speed",
"slowdown_for_curled_perimeters",
"bridge_speed",
"internal_bridge_speed",
"gap_infill_speed",
"support_speed",
"support_interface_speed",
"travel_speed",
"travel_speed_z",
"initial_layer_travel_speed",
"default_acceleration",
"bridge_acceleration",
"travel_acceleration",
"initial_layer_travel_acceleration",
"initial_layer_acceleration",
"outer_wall_acceleration",
"inner_wall_acceleration",
"sparse_infill_acceleration", //coFloatsOrPercents
"internal_solid_infill_acceleration", //coFloatsOrPercents
"top_surface_acceleration",
"default_jerk",
"outer_wall_jerk",
"inner_wall_jerk",
"infill_jerk",
"top_surface_jerk",
"initial_layer_jerk",
"travel_jerk",
"initial_layer_travel_jerk",
"default_junction_deviation",
"print_extruder_id", //coInts
"print_extruder_variant" //coStrings
};