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/GCodeWriter.hpp')
-rw-r--r--src/libslic3r/GCodeWriter.hpp92
1 files changed, 92 insertions, 0 deletions
diff --git a/src/libslic3r/GCodeWriter.hpp b/src/libslic3r/GCodeWriter.hpp
new file mode 100644
index 000000000..664b0e3a1
--- /dev/null
+++ b/src/libslic3r/GCodeWriter.hpp
@@ -0,0 +1,92 @@
+#ifndef slic3r_GCodeWriter_hpp_
+#define slic3r_GCodeWriter_hpp_
+
+#include "libslic3r.h"
+#include <string>
+#include "Extruder.hpp"
+#include "Point.hpp"
+#include "PrintConfig.hpp"
+#include "GCode/CoolingBuffer.hpp"
+
+namespace Slic3r {
+
+class GCodeWriter {
+public:
+ GCodeConfig config;
+ bool multiple_extruders;
+
+ GCodeWriter() :
+ multiple_extruders(false), m_extrusion_axis("E"), m_extruder(nullptr),
+ m_single_extruder_multi_material(false),
+ m_last_acceleration(0), m_max_acceleration(0), m_last_fan_speed(0),
+ m_last_bed_temperature(0), m_last_bed_temperature_reached(true),
+ m_lifted(0)
+ {}
+ Extruder* extruder() { return m_extruder; }
+ const Extruder* extruder() const { return m_extruder; }
+
+ std::string extrusion_axis() const { return m_extrusion_axis; }
+ void apply_print_config(const PrintConfig &print_config);
+ // Extruders are expected to be sorted in an increasing order.
+ void set_extruders(const std::vector<unsigned int> &extruder_ids);
+ const std::vector<Extruder>& extruders() const { return m_extruders; }
+ std::vector<unsigned int> extruder_ids() const {
+ std::vector<unsigned int> out;
+ out.reserve(m_extruders.size());
+ for (const Extruder &e : m_extruders)
+ out.push_back(e.id());
+ return out;
+ }
+ std::string preamble();
+ std::string postamble() const;
+ std::string set_temperature(unsigned int temperature, bool wait = false, int tool = -1) const;
+ std::string set_bed_temperature(unsigned int temperature, bool wait = false);
+ std::string set_fan(unsigned int speed, bool dont_save = false);
+ std::string set_acceleration(unsigned int acceleration);
+ std::string reset_e(bool force = false);
+ std::string update_progress(unsigned int num, unsigned int tot, bool allow_100 = false) const;
+ // return false if this extruder was already selected
+ bool need_toolchange(unsigned int extruder_id) const
+ { return m_extruder == nullptr || m_extruder->id() != extruder_id; }
+ std::string set_extruder(unsigned int extruder_id)
+ { return this->need_toolchange(extruder_id) ? this->toolchange(extruder_id) : ""; }
+ // Prefix of the toolchange G-code line, to be used by the CoolingBuffer to separate sections of the G-code
+ // printed with the same extruder.
+ std::string toolchange_prefix() const;
+ std::string toolchange(unsigned int extruder_id);
+ std::string set_speed(double F, const std::string &comment = std::string(), const std::string &cooling_marker = std::string()) const;
+ std::string travel_to_xy(const Vec2d &point, const std::string &comment = std::string());
+ std::string travel_to_xyz(const Vec3d &point, const std::string &comment = std::string());
+ std::string travel_to_z(double z, const std::string &comment = std::string());
+ bool will_move_z(double z) const;
+ std::string extrude_to_xy(const Vec2d &point, double dE, const std::string &comment = std::string());
+ std::string extrude_to_xyz(const Vec3d &point, double dE, const std::string &comment = std::string());
+ std::string retract(bool before_wipe = false);
+ std::string retract_for_toolchange(bool before_wipe = false);
+ std::string unretract();
+ std::string lift();
+ std::string unlift();
+ Vec3d get_position() const { return m_pos; }
+
+private:
+ std::vector<Extruder> m_extruders;
+ std::string m_extrusion_axis;
+ bool m_single_extruder_multi_material;
+ Extruder* m_extruder;
+ unsigned int m_last_acceleration;
+ // Limit for setting the acceleration, to respect the machine limits set for the Marlin firmware.
+ // If set to zero, the limit is not in action.
+ unsigned int m_max_acceleration;
+ unsigned int m_last_fan_speed;
+ unsigned int m_last_bed_temperature;
+ bool m_last_bed_temperature_reached;
+ double m_lifted;
+ Vec3d m_pos = Vec3d::Zero();
+
+ std::string _travel_to_z(double z, const std::string &comment);
+ std::string _retract(double length, double restart_extra, const std::string &comment);
+};
+
+} /* namespace Slic3r */
+
+#endif /* slic3r_GCodeWriter_hpp_ */