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:
Diffstat (limited to 'src/libslic3r/Extruder.hpp')
-rw-r--r--src/libslic3r/Extruder.hpp81
1 files changed, 81 insertions, 0 deletions
diff --git a/src/libslic3r/Extruder.hpp b/src/libslic3r/Extruder.hpp
new file mode 100644
index 000000000..df92bf84b
--- /dev/null
+++ b/src/libslic3r/Extruder.hpp
@@ -0,0 +1,81 @@
+#ifndef slic3r_Extruder_hpp_
+#define slic3r_Extruder_hpp_
+
+#include "libslic3r.h"
+#include "Point.hpp"
+#include "PrintConfig.hpp"
+
+namespace Slic3r {
+
+class Extruder
+{
+public:
+ Extruder(unsigned int id, GCodeConfig *config);
+ virtual ~Extruder() {}
+
+ void reset() {
+ m_E = 0;
+ m_absolute_E = 0;
+ m_retracted = 0;
+ m_restart_extra = 0;
+ }
+
+ unsigned int id() const { return m_id; }
+
+ double extrude(double dE);
+ double retract(double length, double restart_extra);
+ double unretract();
+ double E() const { return m_E; }
+ void reset_E() { m_E = 0.; }
+ double e_per_mm(double mm3_per_mm) const { return mm3_per_mm * m_e_per_mm3; }
+ double e_per_mm3() const { return m_e_per_mm3; }
+ // Used filament volume in mm^3.
+ double extruded_volume() const;
+ // Used filament length in mm.
+ double used_filament() const;
+
+ double filament_diameter() const;
+ double filament_crossection() const { return this->filament_diameter() * this->filament_diameter() * 0.25 * PI; }
+ double filament_density() const;
+ double filament_cost() const;
+ double extrusion_multiplier() const;
+ double retract_before_wipe() const;
+ double retract_length() const;
+ double retract_lift() const;
+ int retract_speed() const;
+ int deretract_speed() const;
+ double retract_restart_extra() const;
+ double retract_length_toolchange() const;
+ double retract_restart_extra_toolchange() const;
+
+ // Constructor for a key object, to be used by the stdlib search functions.
+ static Extruder key(unsigned int id) { return Extruder(id); }
+
+private:
+ // Private constructor to create a key for a search in std::set.
+ Extruder(unsigned int id) : m_id(id) {}
+
+ // Reference to GCodeWriter instance owned by GCodeWriter.
+ GCodeConfig *m_config;
+ // Print-wide global ID of this extruder.
+ unsigned int m_id;
+ // Current state of the extruder axis, may be resetted if use_relative_e_distances.
+ double m_E;
+ // Current state of the extruder tachometer, used to output the extruded_volume() and used_filament() statistics.
+ double m_absolute_E;
+ // Current positive amount of retraction.
+ double m_retracted;
+ // When retracted, this value stores the extra amount of priming on deretraction.
+ double m_restart_extra;
+ double m_e_per_mm3;
+};
+
+// Sort Extruder objects by the extruder id by default.
+inline bool operator==(const Extruder &e1, const Extruder &e2) { return e1.id() == e2.id(); }
+inline bool operator!=(const Extruder &e1, const Extruder &e2) { return e1.id() != e2.id(); }
+inline bool operator< (const Extruder &e1, const Extruder &e2) { return e1.id() < e2.id(); }
+inline bool operator> (const Extruder &e1, const Extruder &e2) { return e1.id() > e2.id(); }
+
+}
+
+#endif