#614 allow acceleration to be a % of default accel

also default accel can be a % of the max extruding accel
This commit is contained in:
supermerill 2020-10-30 01:30:05 +01:00
parent 151ea0a39f
commit df3f2113b5
4 changed files with 55 additions and 43 deletions

View File

@ -90,6 +90,13 @@ NEXT: ;
return ok; return ok;
} }
double get_default_acceleration(PrintConfig & config) {
double max = 0;
// on 2.3, check for enable/disable if(config.print_machine_envelope)
max = config.machine_max_acceleration_extruding.values.front();
return config.default_acceleration.get_abs_value(max);
}
void AvoidCrossingPerimeters::init_external_mp(const Print &print) void AvoidCrossingPerimeters::init_external_mp(const Print &print)
{ {
m_external_mp = Slic3r::make_unique<MotionPlanner>(union_ex(this->collect_contours_all_layers(print.objects()))); m_external_mp = Slic3r::make_unique<MotionPlanner>(union_ex(this->collect_contours_all_layers(print.objects())));
@ -2790,6 +2797,8 @@ std::string GCode::preamble()
before the first layer change will raise the extruder from the correct before the first layer change will raise the extruder from the correct
initial Z instead of 0. */ initial Z instead of 0. */
m_writer.travel_to_z(m_config.z_offset.value); m_writer.travel_to_z(m_config.z_offset.value);
//as this phony thing skip the acceleration writing, they have to be reset after that for real initialisation at the next move/extrusion
m_writer.set_acceleration(0);
return gcode; return gcode;
} }
@ -3181,7 +3190,7 @@ std::string GCode::extrude_loop_vase(const ExtrusionLoop &original_loop, const s
} }
// reset acceleration // reset acceleration
m_writer.set_acceleration((unsigned int)(m_config.default_acceleration.value + 0.5)); m_writer.set_acceleration((unsigned int)floor(get_default_acceleration(m_config) + 0.5));
//don't wipe here //don't wipe here
//if (m_wipe.enable) //if (m_wipe.enable)
@ -3579,7 +3588,7 @@ std::string GCode::extrude_loop(const ExtrusionLoop &original_loop, const std::s
} }
// reset acceleration // reset acceleration
m_writer.set_acceleration((unsigned int)(m_config.default_acceleration.value + 0.5)); m_writer.set_acceleration((unsigned int)floor(get_default_acceleration(m_config) + 0.5));
if (m_wipe.enable) if (m_wipe.enable)
m_wipe.path = paths.front().polyline; // TODO: don't limit wipe to last path m_wipe.path = paths.front().polyline; // TODO: don't limit wipe to last path
@ -3677,7 +3686,7 @@ std::string GCode::extrude_multi_path(const ExtrusionMultiPath &multipath, const
m_wipe.path.reverse(); m_wipe.path.reverse();
} }
// reset acceleration // reset acceleration
m_writer.set_acceleration((unsigned int)floor(m_config.default_acceleration.value + 0.5)); m_writer.set_acceleration((unsigned int)floor(get_default_acceleration(m_config) + 0.5));
return gcode; return gcode;
} }
@ -3714,7 +3723,7 @@ std::string GCode::extrude_multi_path3D(const ExtrusionMultiPath3D &multipath3D,
m_wipe.path.reverse(); m_wipe.path.reverse();
} }
// reset acceleration // reset acceleration
m_writer.set_acceleration((unsigned int)floor(m_config.default_acceleration.value + 0.5)); m_writer.set_acceleration((unsigned int)floor(get_default_acceleration(m_config) + 0.5));
return gcode; return gcode;
} }
@ -3799,7 +3808,7 @@ std::string GCode::extrude_path(const ExtrusionPath &path, const std::string &de
m_wipe.path.reverse(); m_wipe.path.reverse();
} }
// reset acceleration // reset acceleration
m_writer.set_acceleration((unsigned int)floor(m_config.default_acceleration.value + 0.5)); m_writer.set_acceleration((unsigned int)floor(get_default_acceleration(m_config) + 0.5));
return gcode; return gcode;
} }
@ -3833,7 +3842,7 @@ std::string GCode::extrude_path_3D(const ExtrusionPath3D &path, const std::strin
m_wipe.path.reverse(); m_wipe.path.reverse();
} }
// reset acceleration // reset acceleration
m_writer.set_acceleration((unsigned int)floor(m_config.default_acceleration.value + 0.5)); m_writer.set_acceleration((unsigned int)floor(get_default_acceleration(m_config) + 0.5));
return gcode; return gcode;
} }
@ -4129,17 +4138,15 @@ std::string GCode::_before_extrude(const ExtrusionPath &path, const std::string
// adjust acceleration // adjust acceleration
{ {
double acceleration; double acceleration = get_default_acceleration(m_config);
if (this->on_first_layer() && m_config.first_layer_acceleration.value > 0) { if (this->on_first_layer() && m_config.first_layer_acceleration.value > 0) {
acceleration = m_config.first_layer_acceleration.value; acceleration = m_config.first_layer_acceleration.get_abs_value(acceleration);
} else if (m_config.perimeter_acceleration.value > 0 && is_perimeter(path.role())) { } else if (m_config.perimeter_acceleration.value > 0 && is_perimeter(path.role())) {
acceleration = m_config.perimeter_acceleration.value; acceleration = m_config.perimeter_acceleration.get_abs_value(acceleration);
} else if (m_config.bridge_acceleration.value > 0 && is_bridge(path.role())) { } else if (m_config.bridge_acceleration.value > 0 && is_bridge(path.role())) {
acceleration = m_config.bridge_acceleration.value; acceleration = m_config.bridge_acceleration.get_abs_value(acceleration);
} else if (m_config.infill_acceleration.value > 0 && is_infill(path.role())) { } else if (m_config.infill_acceleration.value > 0 && is_infill(path.role())) {
acceleration = m_config.infill_acceleration.value; acceleration = m_config.infill_acceleration.get_abs_value(acceleration);
} else {
acceleration = m_config.default_acceleration.value;
}//TODO: add travel accel? }//TODO: add travel accel?
m_writer.set_acceleration((unsigned int)floor(acceleration + 0.5)); m_writer.set_acceleration((unsigned int)floor(acceleration + 0.5));
} }

View File

@ -250,16 +250,17 @@ void PrintConfigDef::init_fff_params()
def->min = 0; def->min = 0;
def->set_default_value(new ConfigOptionFloat(0.)); def->set_default_value(new ConfigOptionFloat(0.));
def = this->add("bridge_acceleration", coFloat); def = this->add("bridge_acceleration", coFloatOrPercent);
def->label = L("Bridge"); def->label = L("Bridge");
def->full_label = L("Bridge acceleration"); def->full_label = L("Bridge acceleration");
def->category = OptionCategory::speed; def->category = OptionCategory::speed;
def->tooltip = L("This is the acceleration your printer will use for bridges. " def->tooltip = L("This is the acceleration your printer will use for bridges."
"Set zero to disable acceleration control for bridges."); "\nCan be a % of the default acceleration"
def->sidetext = L("mm/s²"); "\nSet zero to disable acceleration control for bridges.");
def->sidetext = L("mm/s² or %");
def->min = 0; def->min = 0;
def->mode = comExpert; def->mode = comExpert;
def->set_default_value(new ConfigOptionFloat(0)); def->set_default_value(new ConfigOptionFloatOrPercent(0,false));
def = this->add("bridge_angle", coFloat); def = this->add("bridge_angle", coFloat);
def->label = L("Bridging"); def->label = L("Bridging");
@ -541,17 +542,18 @@ void PrintConfigDef::init_fff_params()
def->mode = comAdvanced; def->mode = comAdvanced;
def->set_default_value(new ConfigOptionFloat(5.f)); def->set_default_value(new ConfigOptionFloat(5.f));
def = this->add("default_acceleration", coFloat); def = this->add("default_acceleration", coFloatOrPercent);
def->label = L("Default"); def->label = L("Default");
def->category = OptionCategory::speed; def->category = OptionCategory::speed;
def->full_label = L("Default acceleration"); def->full_label = L("Default acceleration");
def->tooltip = L("This is the acceleration your printer will be reset to after " def->tooltip = L("This is the acceleration your printer will be reset to after "
"the role-specific acceleration values are used (perimeter/infill). " "the role-specific acceleration values are used (perimeter/infill). "
"Set zero to prevent resetting acceleration at all."); "\nYou can set it as a % of the max of the X/Y machine acceleration limit."
def->sidetext = L("mm/s²"); "\nSet zero to prevent resetting acceleration at all.");
def->sidetext = L("mm/s² or %");
def->min = 0; def->min = 0;
def->mode = comExpert; def->mode = comExpert;
def->set_default_value(new ConfigOptionFloat(0)); def->set_default_value(new ConfigOptionFloatOrPercent(0,false));
def = this->add("default_filament_profile", coStrings); def = this->add("default_filament_profile", coStrings);
def->label = L("Default filament profile"); def->label = L("Default filament profile");
@ -1585,16 +1587,17 @@ void PrintConfigDef::init_fff_params()
def->sidetext = L("%"); def->sidetext = L("%");
def->set_default_value(new ConfigOptionPercent(10)); def->set_default_value(new ConfigOptionPercent(10));
def = this->add("first_layer_acceleration", coFloat); def = this->add("first_layer_acceleration", coFloatOrPercent);
def->label = L("First layer"); def->label = L("First layer");
def->full_label = L("First layer acceleration"); def->full_label = L("First layer acceleration");
def->category = OptionCategory::speed; def->category = OptionCategory::speed;
def->tooltip = L("This is the acceleration your printer will use for first layer. Set zero " def->tooltip = L("This is the acceleration your printer will use for first layer."
"to disable acceleration control for first layer."); "\nCan be a % of the default acceleration"
def->sidetext = L("mm/s²"); "\nSet zero to disable acceleration control for first layer.");
def->sidetext = L("mm/s² or %");
def->min = 0; def->min = 0;
def->mode = comExpert; def->mode = comExpert;
def->set_default_value(new ConfigOptionFloat(0)); def->set_default_value(new ConfigOptionFloatOrPercent(0, false));
def = this->add("first_layer_bed_temperature", coInts); def = this->add("first_layer_bed_temperature", coInts);
def->label = L("First layer"); def->label = L("First layer");
@ -1782,16 +1785,17 @@ void PrintConfigDef::init_fff_params()
def->mode = comExpert; def->mode = comExpert;
def->set_default_value(new ConfigOptionBool(0)); def->set_default_value(new ConfigOptionBool(0));
def = this->add("infill_acceleration", coFloat); def = this->add("infill_acceleration", coFloatOrPercent);
def->label = L("Infill"); def->label = L("Infill");
def->full_label = L("Infill acceleration"); def->full_label = L("Infill acceleration");
def->category = OptionCategory::speed; def->category = OptionCategory::speed;
def->tooltip = L("This is the acceleration your printer will use for infill. Set zero to disable " def->tooltip = L("This is the acceleration your printer will use for infill."
"acceleration control for infill."); "\nCan be a % of the default acceleration"
def->sidetext = L("mm/s²"); "\nSet zero to disable acceleration control for infill.");
def->sidetext = L("mm/s² or %");
def->min = 0; def->min = 0;
def->mode = comExpert; def->mode = comExpert;
def->set_default_value(new ConfigOptionFloat(0)); def->set_default_value(new ConfigOptionFloatOrPercent(0,false));
def = this->add("infill_every_layers", coInt); def = this->add("infill_every_layers", coInt);
def->label = L("Combine infill every"); def->label = L("Combine infill every");
@ -2439,16 +2443,17 @@ void PrintConfigDef::init_fff_params()
def->mode = comAdvanced; def->mode = comAdvanced;
def->set_default_value(new ConfigOptionFloat(-2.f)); def->set_default_value(new ConfigOptionFloat(-2.f));
def = this->add("perimeter_acceleration", coFloat); def = this->add("perimeter_acceleration", coFloatOrPercent);
def->label = L("Perimeters"); def->label = L("Perimeters");
def->full_label = ("Perimeter acceleration"); def->full_label = ("Perimeter acceleration");
def->category = OptionCategory::speed; def->category = OptionCategory::speed;
def->tooltip = L("This is the acceleration your printer will use for perimeters. " def->tooltip = L("This is the acceleration your printer will use for perimeters. "
"A high value like 9000 usually gives good results if your hardware is up to the job. " "A high value like 9000 usually gives good results if your hardware is up to the job."
"Set zero to disable acceleration control for perimeters."); "\nCan be a % of the default acceleration"
def->sidetext = L("mm/s²"); "\nSet zero to disable acceleration control for perimeters.");
def->sidetext = L("mm/s² or %");
def->mode = comExpert; def->mode = comExpert;
def->set_default_value(new ConfigOptionFloat(0)); def->set_default_value(new ConfigOptionFloatOrPercent(0,false));
def = this->add("perimeter_extruder", coInt); def = this->add("perimeter_extruder", coInt);
def->label = L("Perimeter extruder"); def->label = L("Perimeter extruder");

View File

@ -1094,7 +1094,7 @@ public:
ConfigOptionBool avoid_crossing_not_first_layer; ConfigOptionBool avoid_crossing_not_first_layer;
ConfigOptionPoints bed_shape; ConfigOptionPoints bed_shape;
ConfigOptionInts bed_temperature; ConfigOptionInts bed_temperature;
ConfigOptionFloat bridge_acceleration; ConfigOptionFloatOrPercent bridge_acceleration;
ConfigOptionInts bridge_fan_speed; ConfigOptionInts bridge_fan_speed;
ConfigOptionInts chamber_temperature; ConfigOptionInts chamber_temperature;
ConfigOptionBool complete_objects; ConfigOptionBool complete_objects;
@ -1102,7 +1102,7 @@ public:
ConfigOptionEnum<CompleteObjectSort> complete_objects_sort; ConfigOptionEnum<CompleteObjectSort> complete_objects_sort;
ConfigOptionFloats colorprint_heights; ConfigOptionFloats colorprint_heights;
ConfigOptionBools cooling; ConfigOptionBools cooling;
ConfigOptionFloat default_acceleration; ConfigOptionFloatOrPercent default_acceleration;
ConfigOptionInts disable_fan_first_layers; ConfigOptionInts disable_fan_first_layers;
ConfigOptionFloat duplicate_distance; ConfigOptionFloat duplicate_distance;
ConfigOptionInts external_perimeter_fan_speed; ConfigOptionInts external_perimeter_fan_speed;
@ -1115,14 +1115,14 @@ public:
ConfigOptionStrings filament_colour; ConfigOptionStrings filament_colour;
ConfigOptionStrings filament_notes; ConfigOptionStrings filament_notes;
ConfigOptionPercents filament_shrink; ConfigOptionPercents filament_shrink;
ConfigOptionFloat first_layer_acceleration; ConfigOptionFloatOrPercent first_layer_acceleration;
ConfigOptionInts first_layer_bed_temperature; ConfigOptionInts first_layer_bed_temperature;
ConfigOptionFloatOrPercent first_layer_extrusion_width; ConfigOptionFloatOrPercent first_layer_extrusion_width;
ConfigOptionPercent first_layer_flow_ratio; ConfigOptionPercent first_layer_flow_ratio;
ConfigOptionFloatOrPercent first_layer_speed; ConfigOptionFloatOrPercent first_layer_speed;
ConfigOptionFloatOrPercent first_layer_infill_speed; ConfigOptionFloatOrPercent first_layer_infill_speed;
ConfigOptionInts first_layer_temperature; ConfigOptionInts first_layer_temperature;
ConfigOptionFloat infill_acceleration; ConfigOptionFloatOrPercent infill_acceleration;
ConfigOptionInts max_fan_speed; ConfigOptionInts max_fan_speed;
ConfigOptionFloats max_layer_height; ConfigOptionFloats max_layer_height;
ConfigOptionFloat max_print_height; ConfigOptionFloat max_print_height;
@ -1141,7 +1141,7 @@ public:
ConfigOptionBool only_retract_when_crossing_perimeters; ConfigOptionBool only_retract_when_crossing_perimeters;
ConfigOptionBool ooze_prevention; ConfigOptionBool ooze_prevention;
ConfigOptionString output_filename_format; ConfigOptionString output_filename_format;
ConfigOptionFloat perimeter_acceleration; ConfigOptionFloatOrPercent perimeter_acceleration;
ConfigOptionStrings post_process; ConfigOptionStrings post_process;
ConfigOptionBool print_machine_envelope; ConfigOptionBool print_machine_envelope;
ConfigOptionString printer_model; ConfigOptionString printer_model;

View File

@ -419,7 +419,7 @@ void ConfigManipulation::toggle_print_fff_options(DynamicPrintConfig* config)
for (auto el : { "top_infill_extrusion_width", "top_solid_infill_speed" }) for (auto el : { "top_infill_extrusion_width", "top_solid_infill_speed" })
toggle_field(el, has_top_solid_infill); toggle_field(el, has_top_solid_infill);
bool have_default_acceleration = config->opt_float("default_acceleration") > 0; bool have_default_acceleration = config->option<ConfigOptionFloatOrPercent>("default_acceleration")->value > 0;
for (auto el : { "perimeter_acceleration", "infill_acceleration", for (auto el : { "perimeter_acceleration", "infill_acceleration",
"bridge_acceleration", "first_layer_acceleration" }) "bridge_acceleration", "first_layer_acceleration" })
toggle_field(el, have_default_acceleration); toggle_field(el, have_default_acceleration);