Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/prusa3d/PrusaSlicer.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbubnikv <bubnikv@gmail.com>2017-05-19 20:24:21 +0300
committerbubnikv <bubnikv@gmail.com>2017-05-19 20:24:21 +0300
commit70db88dd90f741b89ad8b1ded7f4448864580e09 (patch)
treea3b57a077da3fc572910b103e6fb25d0e4ac0d7a /xs/src/libslic3r/Extruder.cpp
parent8bd3dec331b32a3a403a891e0bfd9fcf5745e5db (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.cpp70
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);
}