mirror of
https://github.com/SoftFever/OrcaSlicer.git
synced 2025-07-24 15:13:58 -06:00
Improved retract handling on bowden extruders:
Separated deretract speed from a retract speed, allowed a partial retract before wipe.
This commit is contained in:
parent
8bd3dec331
commit
70db88dd90
20 changed files with 246 additions and 108 deletions
|
@ -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);
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue