diff options
author | bubnikv <bubnikv@gmail.com> | 2017-05-19 20:24:21 +0300 |
---|---|---|
committer | bubnikv <bubnikv@gmail.com> | 2017-05-19 20:24:21 +0300 |
commit | 70db88dd90f741b89ad8b1ded7f4448864580e09 (patch) | |
tree | a3b57a077da3fc572910b103e6fb25d0e4ac0d7a /xs/src/libslic3r/Extruder.cpp | |
parent | 8bd3dec331b32a3a403a891e0bfd9fcf5745e5db (diff) |
Improved retract handling on bowden extruders:
Separated deretract speed from a retract speed,
allowed a partial retract before wipe.
Diffstat (limited to 'xs/src/libslic3r/Extruder.cpp')
-rw-r--r-- | xs/src/libslic3r/Extruder.cpp | 70 |
1 files changed, 28 insertions, 42 deletions
diff --git a/xs/src/libslic3r/Extruder.cpp b/xs/src/libslic3r/Extruder.cpp index 31523cb48..19f08d907 100644 --- a/xs/src/libslic3r/Extruder.cpp +++ b/xs/src/libslic3r/Extruder.cpp @@ -15,20 +15,9 @@ Extruder::Extruder(unsigned int id, GCodeConfig *config) this->e_per_mm3 = this->extrusion_multiplier() * (4 / ((this->filament_diameter() * this->filament_diameter()) * PI)); } - this->retract_speed_mm_min = this->retract_speed() * 60; } -void -Extruder::reset() -{ - this->E = 0; - this->absolute_E = 0; - this->retracted = 0; - this->restart_extra = 0; -} - -double -Extruder::extrude(double dE) +double Extruder::extrude(double dE) { // in case of relative E distances we always reset to 0 before any output if (m_config->use_relative_e_distances) @@ -46,8 +35,7 @@ Extruder::extrude(double dE) The restart_extra argument sets the extra length to be used for unretraction. If we're actually performing a retraction, any restart_extra value supplied will overwrite the previous one if any. */ -double -Extruder::retract(double length, double restart_extra) +double Extruder::retract(double length, double restart_extra) { // in case of relative E distances we always reset to 0 before any output if (m_config->use_relative_e_distances) @@ -65,8 +53,7 @@ Extruder::retract(double length, double restart_extra) } } -double -Extruder::unretract() +double Extruder::unretract() { double dE = this->retracted + this->restart_extra; this->extrude(dE); @@ -75,14 +62,12 @@ Extruder::unretract() return dE; } -double -Extruder::e_per_mm(double mm3_per_mm) const +double Extruder::e_per_mm(double mm3_per_mm) const { return mm3_per_mm * this->e_per_mm3; } -double -Extruder::extruded_volume() const +double Extruder::extruded_volume() const { if (m_config->use_volumetric_e) { // Any current amount of retraction should not affect used filament, since @@ -93,8 +78,7 @@ Extruder::extruded_volume() const return this->used_filament() * (this->filament_diameter() * this->filament_diameter()) * PI/4; } -double -Extruder::used_filament() const +double Extruder::used_filament() const { if (m_config->use_volumetric_e) { return this->extruded_volume() / (this->filament_diameter() * this->filament_diameter() * PI/4); @@ -105,62 +89,64 @@ Extruder::used_filament() const return this->absolute_E + this->retracted; } -double -Extruder::filament_diameter() const +double Extruder::filament_diameter() const { return m_config->filament_diameter.get_at(this->id); } -double -Extruder::filament_density() const +double Extruder::filament_density() const { return m_config->filament_density.get_at(this->id); } -double -Extruder::filament_cost() const +double Extruder::filament_cost() const { return m_config->filament_cost.get_at(this->id); } -double -Extruder::extrusion_multiplier() const +double Extruder::extrusion_multiplier() const { return m_config->extrusion_multiplier.get_at(this->id); } -double -Extruder::retract_length() const +// Return a "retract_before_wipe" percentage as a factor clamped to <0, 1> +double Extruder::retract_before_wipe() const +{ + return std::min(1., std::max(0., m_config->retract_before_wipe.get_at(this->id) * 0.01)); +} + +double Extruder::retract_length() const { return m_config->retract_length.get_at(this->id); } -double -Extruder::retract_lift() const +double Extruder::retract_lift() const { return m_config->retract_lift.get_at(this->id); } -int -Extruder::retract_speed() const +int Extruder::retract_speed() const { return m_config->retract_speed.get_at(this->id); } -double -Extruder::retract_restart_extra() const +int Extruder::deretract_speed() const +{ + int speed = m_config->deretract_speed.get_at(this->id); + return (speed > 0) ? speed : this->retract_speed(); +} + +double Extruder::retract_restart_extra() const { return m_config->retract_restart_extra.get_at(this->id); } -double -Extruder::retract_length_toolchange() const +double Extruder::retract_length_toolchange() const { return m_config->retract_length_toolchange.get_at(this->id); } -double -Extruder::retract_restart_extra_toolchange() const +double Extruder::retract_restart_extra_toolchange() const { return m_config->retract_restart_extra_toolchange.get_at(this->id); } |