Added a threshold for purging on the wipe tower (before it goes into infill/sacrificial object)

This commit is contained in:
Lukas Matena 2018-08-02 15:14:12 +02:00
parent 6fe2f963b1
commit cc24861042
5 changed files with 33 additions and 9 deletions

View File

@ -205,6 +205,7 @@ bool Print::invalidate_state_by_config_options(const std::vector<t_config_option
|| opt_key == "filament_unloading_speed" || opt_key == "filament_unloading_speed"
|| opt_key == "filament_toolchange_delay" || opt_key == "filament_toolchange_delay"
|| opt_key == "filament_cooling_moves" || opt_key == "filament_cooling_moves"
|| opt_key == "filament_minimal_purge_on_wipe_tower"
|| opt_key == "filament_cooling_initial_speed" || opt_key == "filament_cooling_initial_speed"
|| opt_key == "filament_cooling_final_speed" || opt_key == "filament_cooling_final_speed"
|| opt_key == "filament_ramming_parameters" || opt_key == "filament_ramming_parameters"
@ -1145,12 +1146,19 @@ void Print::_make_wipe_tower()
wipe_tower.plan_toolchange(layer_tools.print_z, layer_tools.wipe_tower_layer_height, current_extruder_id, current_extruder_id,false); wipe_tower.plan_toolchange(layer_tools.print_z, layer_tools.wipe_tower_layer_height, current_extruder_id, current_extruder_id,false);
for (const auto extruder_id : layer_tools.extruders) { for (const auto extruder_id : layer_tools.extruders) {
if ((first_layer && extruder_id == m_tool_ordering.all_extruders().back()) || extruder_id != current_extruder_id) { if ((first_layer && extruder_id == m_tool_ordering.all_extruders().back()) || extruder_id != current_extruder_id) {
float volume_to_wipe = wipe_volumes[current_extruder_id][extruder_id]; // total volume to wipe after this toolchange float volume_to_wipe = wipe_volumes[current_extruder_id][extruder_id]; // total volume to wipe after this toolchange
// Not all of that can be used for infill purging:
volume_to_wipe -= config.filament_minimal_purge_on_wipe_tower.get_at(extruder_id);
// try to assign some infills/objects for the wiping: // try to assign some infills/objects for the wiping:
volume_to_wipe = layer_tools.wiping_extrusions().mark_wiping_extrusions(*this, current_extruder_id, extruder_id, wipe_volumes[current_extruder_id][extruder_id]); volume_to_wipe = layer_tools.wiping_extrusions().mark_wiping_extrusions(*this, current_extruder_id, extruder_id, volume_to_wipe);
wipe_tower.plan_toolchange(layer_tools.print_z, layer_tools.wipe_tower_layer_height, current_extruder_id, extruder_id, first_layer && extruder_id == m_tool_ordering.all_extruders().back(), volume_to_wipe); // add back the minimal amount toforce on the wipe tower:
volume_to_wipe += config.filament_minimal_purge_on_wipe_tower.get_at(extruder_id);
// request a toolchange at the wipe tower with at least volume_to_wipe purging amount
wipe_tower.plan_toolchange(layer_tools.print_z, layer_tools.wipe_tower_layer_height, current_extruder_id, extruder_id,
first_layer && extruder_id == m_tool_ordering.all_extruders().back(), volume_to_wipe);
current_extruder_id = extruder_id; current_extruder_id = extruder_id;
} }
} }

View File

@ -504,15 +504,27 @@ PrintConfigDef::PrintConfigDef()
def = this->add("filament_cooling_initial_speed", coFloats); def = this->add("filament_cooling_initial_speed", coFloats);
def->label = L("Speed of the first cooling move"); def->label = L("Speed of the first cooling move");
def->tooltip = L("Cooling moves are gradually accelerating beginning at this speed. "); def->tooltip = L("Cooling moves are gradually accelerating beginning at this speed. ");
def->cli = "filament-cooling-initial-speed=i@"; def->cli = "filament-cooling-initial-speed=f@";
def->sidetext = L("mm/s"); def->sidetext = L("mm/s");
def->min = 0; def->min = 0;
def->default_value = new ConfigOptionFloats { 2.2f }; def->default_value = new ConfigOptionFloats { 2.2f };
def = this->add("filament_minimal_purge_on_wipe_tower", coFloats);
def->label = L("Minimal purge on wipe tower");
def->tooltip = L("After a toolchange, certain amount of filament is used for purging. This "
"can end up on the wipe tower, infill or sacrificial object. If there was "
"enough infill etc. available, this could result in bad quality at the beginning "
"of purging. This is a minimum that must be wiped on the wipe tower before "
"Slic3r considers moving elsewhere. ");
def->cli = "filament-minimal-purge-on-wipe-tower=f@";
def->sidetext = L("mm³");
def->min = 0;
def->default_value = new ConfigOptionFloats { 5.f };
def = this->add("filament_cooling_final_speed", coFloats); def = this->add("filament_cooling_final_speed", coFloats);
def->label = L("Speed of the last cooling move"); def->label = L("Speed of the last cooling move");
def->tooltip = L("Cooling moves are gradually accelerating towards this speed. "); def->tooltip = L("Cooling moves are gradually accelerating towards this speed. ");
def->cli = "filament-cooling-final-speed=i@"; def->cli = "filament-cooling-final-speed=f@";
def->sidetext = L("mm/s"); def->sidetext = L("mm/s");
def->min = 0; def->min = 0;
def->default_value = new ConfigOptionFloats { 3.4f }; def->default_value = new ConfigOptionFloats { 3.4f };

View File

@ -532,6 +532,7 @@ public:
ConfigOptionFloats filament_toolchange_delay; ConfigOptionFloats filament_toolchange_delay;
ConfigOptionInts filament_cooling_moves; ConfigOptionInts filament_cooling_moves;
ConfigOptionFloats filament_cooling_initial_speed; ConfigOptionFloats filament_cooling_initial_speed;
ConfigOptionFloats filament_minimal_purge_on_wipe_tower;
ConfigOptionFloats filament_cooling_final_speed; ConfigOptionFloats filament_cooling_final_speed;
ConfigOptionStrings filament_ramming_parameters; ConfigOptionStrings filament_ramming_parameters;
ConfigOptionBool gcode_comments; ConfigOptionBool gcode_comments;
@ -594,6 +595,7 @@ protected:
OPT_PTR(filament_toolchange_delay); OPT_PTR(filament_toolchange_delay);
OPT_PTR(filament_cooling_moves); OPT_PTR(filament_cooling_moves);
OPT_PTR(filament_cooling_initial_speed); OPT_PTR(filament_cooling_initial_speed);
OPT_PTR(filament_minimal_purge_on_wipe_tower);
OPT_PTR(filament_cooling_final_speed); OPT_PTR(filament_cooling_final_speed);
OPT_PTR(filament_ramming_parameters); OPT_PTR(filament_ramming_parameters);
OPT_PTR(gcode_comments); OPT_PTR(gcode_comments);

View File

@ -314,10 +314,11 @@ const std::vector<std::string>& Preset::filament_options()
static std::vector<std::string> s_opts { static std::vector<std::string> s_opts {
"filament_colour", "filament_diameter", "filament_type", "filament_soluble", "filament_notes", "filament_max_volumetric_speed", "filament_colour", "filament_diameter", "filament_type", "filament_soluble", "filament_notes", "filament_max_volumetric_speed",
"extrusion_multiplier", "filament_density", "filament_cost", "filament_loading_speed", "filament_unloading_speed", "filament_toolchange_delay", "extrusion_multiplier", "filament_density", "filament_cost", "filament_loading_speed", "filament_unloading_speed", "filament_toolchange_delay",
"filament_cooling_moves", "filament_cooling_initial_speed", "filament_cooling_final_speed", "filament_ramming_parameters", "temperature", "filament_cooling_moves", "filament_cooling_initial_speed", "filament_cooling_final_speed", "filament_ramming_parameters",
"first_layer_temperature", "bed_temperature", "first_layer_bed_temperature", "fan_always_on", "cooling", "min_fan_speed", "max_fan_speed", "filament_minimal_purge_on_wipe_tower", "temperature", "first_layer_temperature", "bed_temperature", "first_layer_bed_temperature",
"bridge_fan_speed", "disable_fan_first_layers", "fan_below_layer_time", "slowdown_below_layer_time", "min_print_speed", "fan_always_on", "cooling", "min_fan_speed", "max_fan_speed", "bridge_fan_speed", "disable_fan_first_layers", "fan_below_layer_time",
"start_filament_gcode", "end_filament_gcode","compatible_printers", "compatible_printers_condition", "inherits" "slowdown_below_layer_time", "min_print_speed", "start_filament_gcode", "end_filament_gcode","compatible_printers", "compatible_printers_condition",
"inherits"
}; };
return s_opts; return s_opts;
} }

View File

@ -1296,6 +1296,7 @@ void TabFilament::build()
optgroup->append_single_option_line("filament_cooling_moves"); optgroup->append_single_option_line("filament_cooling_moves");
optgroup->append_single_option_line("filament_cooling_initial_speed"); optgroup->append_single_option_line("filament_cooling_initial_speed");
optgroup->append_single_option_line("filament_cooling_final_speed"); optgroup->append_single_option_line("filament_cooling_final_speed");
optgroup->append_single_option_line("filament_minimal_purge_on_wipe_tower");
line = { _(L("Ramming")), "" }; line = { _(L("Ramming")), "" };
line.widget = [this](wxWindow* parent){ line.widget = [this](wxWindow* parent){