Implemented parameter in GUI

This commit is contained in:
igiannakas
2023-09-18 17:13:14 +03:00
parent 1e1680abbd
commit e83ff6739e
8 changed files with 28 additions and 46 deletions

View File

@@ -1874,8 +1874,7 @@ void GCode::_do_export(Print& print, GCodeOutputStream &file, ThumbnailsGenerato
if (print.config().spiral_mode.value) if (print.config().spiral_mode.value)
m_spiral_vase = make_unique<SpiralVase>(print.config()); m_spiral_vase = make_unique<SpiralVase>(print.config());
if (print.config().max_volumetric_extrusion_rate_slope_positive.value > 0 || if (print.config().max_volumetric_extrusion_rate_slope.value > 0){
print.config().max_volumetric_extrusion_rate_slope_negative.value > 0){
m_pressure_equalizer = make_unique<PressureEqualizer>(print.config()); m_pressure_equalizer = make_unique<PressureEqualizer>(print.config());
m_enable_extrusion_role_markers = (bool)m_pressure_equalizer; m_enable_extrusion_role_markers = (bool)m_pressure_equalizer;
} else } else
@@ -2599,8 +2598,6 @@ void GCode::process_layers(
++layer_to_print_idx; ++layer_to_print_idx;
return LayerResult::make_nop_layer_result(); return LayerResult::make_nop_layer_result();
} }
//fc.stop();
//return {};
} else { } else {
const std::pair<coordf_t, std::vector<LayerToPrint>>& layer = layers_to_print[layer_to_print_idx++]; const std::pair<coordf_t, std::vector<LayerToPrint>>& layer = layers_to_print[layer_to_print_idx++];
const LayerTools& layer_tools = tool_ordering.tools_for_layer(layer.first); const LayerTools& layer_tools = tool_ordering.tools_for_layer(layer.first);

View File

@@ -29,10 +29,6 @@
#include <set> #include <set>
#include <string> #include <string>
#ifdef HAS_PRESSURE_EQUALIZER
#include "GCode/PressureEqualizer.hpp"
#endif /* HAS_PRESSURE_EQUALIZER */
namespace Slic3r { namespace Slic3r {
// Forward declarations. // Forward declarations.

View File

@@ -26,7 +26,7 @@ static const std::string EXTERNAL_PERIMETER_TAG = ";_EXTERNAL_PERIMETER";
// Maximum segment length to split a long segment if the initial and the final flow rate differ. // Maximum segment length to split a long segment if the initial and the final flow rate differ.
// Smaller value means a smoother transition between two different flow rates. // Smaller value means a smoother transition between two different flow rates.
static constexpr float max_segment_length = 0.7f; static constexpr float max_segment_length = 1.0f;
// For how many GCode lines back will adjust a flow rate from the latest line. // For how many GCode lines back will adjust a flow rate from the latest line.
// Bigger values affect the GCode export speed a lot, and smaller values could // Bigger values affect the GCode export speed a lot, and smaller values could
@@ -37,7 +37,7 @@ static constexpr int max_look_back_limit = 128;
// its all one continous extruded line. Above this distance we assume extruder pressure hits 0 // its all one continous extruded line. Above this distance we assume extruder pressure hits 0
// This exists because often there's tiny travel moves between stuff like infill // This exists because often there's tiny travel moves between stuff like infill
// lines where some extruder pressure will remain (so we should equalize between these small travels) // lines where some extruder pressure will remain (so we should equalize between these small travels)
static constexpr long max_ignored_gap_between_extruding_segments = 3; static constexpr long max_ignored_gap_between_extruding_segments = 10;
PressureEqualizer::PressureEqualizer(const Slic3r::GCodeConfig &config) : m_use_relative_e_distances(config.use_relative_e_distances.value) PressureEqualizer::PressureEqualizer(const Slic3r::GCodeConfig &config) : m_use_relative_e_distances(config.use_relative_e_distances.value)
{ {
@@ -64,9 +64,9 @@ PressureEqualizer::PressureEqualizer(const Slic3r::GCodeConfig &config) : m_use_
// Volumetric rate of a 0.45mm x 0.2mm extrusion at 20mm/s XY movement: 0.45*0.2*20*60=1.8*60 = 108 mm^3/min // Volumetric rate of a 0.45mm x 0.2mm extrusion at 20mm/s XY movement: 0.45*0.2*20*60=1.8*60 = 108 mm^3/min
// Slope of the volumetric rate, changing from 20mm/s to 60mm/s over 2 seconds: (5.4-1.8)*60*60/2=60*60*1.8 = 6480 mm^3/min^2 = 1.8 mm^3/s^2 // Slope of the volumetric rate, changing from 20mm/s to 60mm/s over 2 seconds: (5.4-1.8)*60*60/2=60*60*1.8 = 6480 mm^3/min^2 = 1.8 mm^3/s^2
if(config.max_volumetric_extrusion_rate_slope_positive.value > 0 || config.max_volumetric_extrusion_rate_slope_negative.value > 0){ if(config.max_volumetric_extrusion_rate_slope.value > 0){
m_max_volumetric_extrusion_rate_slope_positive = float(config.max_volumetric_extrusion_rate_slope_positive.value) * 60.f * 60.f; m_max_volumetric_extrusion_rate_slope_positive = float(config.max_volumetric_extrusion_rate_slope.value) * 60.f * 60.f;
m_max_volumetric_extrusion_rate_slope_negative = float(config.max_volumetric_extrusion_rate_slope_negative.value) * 60.f * 60.f; m_max_volumetric_extrusion_rate_slope_negative = float(config.max_volumetric_extrusion_rate_slope.value) * 60.f * 60.f;
} }
for (ExtrusionRateSlope &extrusion_rate_slope : m_max_volumetric_extrusion_rate_slopes) { for (ExtrusionRateSlope &extrusion_rate_slope : m_max_volumetric_extrusion_rate_slopes) {

View File

@@ -725,7 +725,7 @@ static std::vector<std::string> s_Preset_print_options {
"ironing_type", "ironing_pattern", "ironing_flow", "ironing_speed", "ironing_spacing", "ironing_type", "ironing_pattern", "ironing_flow", "ironing_speed", "ironing_spacing",
"max_travel_detour_distance", "max_travel_detour_distance",
"fuzzy_skin", "fuzzy_skin_thickness", "fuzzy_skin_point_distance", "fuzzy_skin", "fuzzy_skin_thickness", "fuzzy_skin_point_distance",
"max_volumetric_extrusion_rate_slope_positive", "max_volumetric_extrusion_rate_slope_negative", "max_volumetric_extrusion_rate_slope",
"inner_wall_speed", "outer_wall_speed", "sparse_infill_speed", "internal_solid_infill_speed", "inner_wall_speed", "outer_wall_speed", "sparse_infill_speed", "internal_solid_infill_speed",
"top_surface_speed", "support_speed", "support_object_xy_distance", "support_interface_speed", "top_surface_speed", "support_speed", "support_object_xy_distance", "support_interface_speed",
"bridge_speed", "internal_bridge_speed", "gap_infill_speed", "travel_speed", "travel_speed_z", "initial_layer_speed", "bridge_speed", "internal_bridge_speed", "gap_infill_speed", "travel_speed", "travel_speed_z", "initial_layer_speed",

View File

@@ -128,10 +128,7 @@ bool Print::invalidate_state_by_config_options(const ConfigOptionResolver & /* n
"fan_max_speed", "fan_max_speed",
"printable_height", "printable_height",
"slow_down_min_speed", "slow_down_min_speed",
#ifdef HAS_PRESSURE_EQUALIZER "max_volumetric_extrusion_rate_slope",
"max_volumetric_extrusion_rate_slope_positive",
"max_volumetric_extrusion_rate_slope_negative",
#endif /* HAS_PRESSURE_EQUALIZER */
"reduce_infill_retraction", "reduce_infill_retraction",
"filename_format", "filename_format",
"retraction_minimum_travel", "retraction_minimum_travel",

View File

@@ -2470,23 +2470,21 @@ def = this->add("filament_loading_speed", coFloats);
def->mode = comAdvanced; def->mode = comAdvanced;
def->set_default_value(new ConfigOptionFloats { 0. }); def->set_default_value(new ConfigOptionFloats { 0. });
def = this->add("max_volumetric_extrusion_rate_slope_positive", coFloat); def = this->add("max_volumetric_extrusion_rate_slope", coFloat);
def->label = L("Max volumetric slope positive"); def->label = L("Extrusion rate smoothing");
def->tooltip = L("This experimental setting is used to limit the speed of change in extrusion rate. " def->tooltip = L("This parameter smooths out sudden extrusion rate changes that happen when "
"A value of 1.8 mm³/s² ensures, that a change from the extrusion rate " "the printer transitions from printing a high flow (high speed/larger width) "
"of 1.8 mm³/s (0.45mm extrusion width, 0.2mm extrusion height, feedrate 20 mm/s) " "extrusion to a lower flow (lower speed/smaller width) extrusion and vice versa.\n\n"
"to 5.4 mm³/s (feedrate 60 mm/s) will take at least 2 seconds."); "It defines the maximum rate by which the extruded volumetric flow in mm3/sec can change over time. "
def->sidetext = L("mm³/s²"); "Higher values mean higher extrusion rate changes are allowed, resulting in faster speed transitions.\n\n"
def->min = 0; "A value of 0 disables the feature. \n\n"
def->mode = comAdvanced; "For a high speed, high flow direct drive printer (like the Bambu lab or Voron) a sensible value is around "
def->set_default_value(new ConfigOptionFloat(0)); "5x to 10x the maximum volumetric flow rate the hot end is capable off under ideal conditions. This allows "
"for just enough smoothing to assist pressure advance in areas where sudden flow changes happen. A value of "
def = this->add("max_volumetric_extrusion_rate_slope_negative", coFloat); "250-300 is a good starting point.\n\n"
def->label = L("Max volumetric slope negative"); "For slower printers without pressure advance, the value should be set much lower. A value of 10-15 is a "
def->tooltip = L("This experimental setting is used to limit the speed of change in extrusion rate. " "good starting point for direct drive extruders and 2-3 for Bowden style. \n\n"
"A value of 1.8 mm³/s² ensures, that a change from the extrusion rate " "Note: this parameter disables arc fitting.");
"of 1.8 mm³/s (0.45mm extrusion width, 0.2mm extrusion height, feedrate 20 mm/s) "
"to 5.4 mm³/s (feedrate 60 mm/s) will take at least 2 seconds.");
def->sidetext = L("mm³/s²"); def->sidetext = L("mm³/s²");
def->min = 0; def->min = 0;
def->mode = comAdvanced; def->mode = comAdvanced;
@@ -4960,9 +4958,6 @@ void PrintConfigDef::handle_legacy(t_config_option_key &opt_key, std::string &va
"acceleration", "scale", "rotate", "duplicate", "duplicate_grid", "acceleration", "scale", "rotate", "duplicate", "duplicate_grid",
"bed_size", "bed_size",
"print_center", "g0", "wipe_tower_per_color_wipe" "print_center", "g0", "wipe_tower_per_color_wipe"
#ifndef HAS_PRESSURE_EQUALIZER
, "max_volumetric_extrusion_rate_slope_positive", "max_volumetric_extrusion_rate_slope_negative"
#endif /* HAS_PRESSURE_EQUALIZER */
// BBS // BBS
, "support_sharp_tails","support_remove_small_overhangs", "support_with_sheath", , "support_sharp_tails","support_remove_small_overhangs", "support_with_sheath",
"tree_support_collision_resolution", "tree_support_with_infill", "tree_support_collision_resolution", "tree_support_with_infill",

View File

@@ -27,8 +27,6 @@
#include <boost/preprocessor/tuple/elem.hpp> #include <boost/preprocessor/tuple/elem.hpp>
#include <boost/preprocessor/tuple/to_seq.hpp> #include <boost/preprocessor/tuple/to_seq.hpp>
// #define HAS_PRESSURE_EQUALIZER
namespace Slic3r { namespace Slic3r {
enum GCodeFlavor : unsigned char { enum GCodeFlavor : unsigned char {
@@ -883,10 +881,9 @@ PRINT_CONFIG_CLASS_DEFINE(
((ConfigOptionEnum<GCodeFlavor>, gcode_flavor)) ((ConfigOptionEnum<GCodeFlavor>, gcode_flavor))
((ConfigOptionString, layer_change_gcode)) ((ConfigOptionString, layer_change_gcode))
//#ifdef HAS_PRESSURE_EQUALIZER
((ConfigOptionFloat, max_volumetric_extrusion_rate_slope_positive)) ((ConfigOptionFloat, max_volumetric_extrusion_rate_slope))
((ConfigOptionFloat, max_volumetric_extrusion_rate_slope_negative))
//#endif
((ConfigOptionPercents, retract_before_wipe)) ((ConfigOptionPercents, retract_before_wipe))
((ConfigOptionFloats, retraction_length)) ((ConfigOptionFloats, retraction_length))
((ConfigOptionFloats, retract_length_toolchange)) ((ConfigOptionFloats, retract_length_toolchange))

View File

@@ -1996,8 +1996,8 @@ void TabPrint::build()
optgroup->append_single_option_line("initial_layer_jerk"); optgroup->append_single_option_line("initial_layer_jerk");
optgroup->append_single_option_line("travel_jerk"); optgroup->append_single_option_line("travel_jerk");
optgroup->append_single_option_line("max_volumetric_extrusion_rate_slope_positive"); optgroup = page->new_optgroup(L("Advanced"), L"param_advanced", 15);
optgroup->append_single_option_line("max_volumetric_extrusion_rate_slope_negative"); optgroup->append_single_option_line("max_volumetric_extrusion_rate_slope");
page = add_options_page(L("Support"), "support"); page = add_options_page(L("Support"), "support");
optgroup = page->new_optgroup(L("Support"), L"param_support"); optgroup = page->new_optgroup(L("Support"), L"param_support");