Swiftray  1.0
gcode-generator.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include <sstream>
6 
7 /*
8 Basic GCode Generator for Grbl like machines.
9 */
10 class GCodeGenerator : public BaseGenerator {
11 public:
13  machine_width_ = machine.width;
14  machine_height_ = machine.height;
15  machine_origin_ = machine.origin;
16  }
17 
18  void moveTo(float x, float y, float speed, float power) override {
19  // Coordinate transform for different origin type
20  switch (machine_origin_) {
22  break;
24  x = machine_width_ - x;
25  break;
27  y = machine_height_ - y;
28  break;
30  y = machine_height_ - y;
31  x = machine_width_ - x;
32  break;
33  }
34  if (x_ == x && y_ == y && speed_ == speed && power_ == power)
35  return;
36  str_stream_ << "G1";
37  if (x_ != x) {
38  str_stream_ << "X" << round(x * 1000) / 1000;
39  x_ = x;
40  }
41  if (y_ != y) {
42  str_stream_ << "Y" << round(y * 1000) / 1000;
43  y_ = y;
44  }
45  if (speed_ != speed) {
46  str_stream_ << "F" << speed * 60; // mm/s to mm/min
47  speed_ = speed;
48  }
49 
50  if (power_ != power) {
51  str_stream_ << "S" << power * 10; // mm/s to mm/min
52  power_ = power;
53  }
54  str_stream_ << std::endl;
55  }
56 
57  void setLaserPower(float power) override {
58  str_stream_ << "M3S" << power * 10 << std::endl;
59  power_ = power;
60  }
61 
62  void turnOffLaser() override {
63  str_stream_ << "M5" << std::endl;
64  power_ = 0;
65  }
66 
67  void turnOnLaser() override {
68  str_stream_ << "M3" << std::endl;
69  power_ = 1;
70  }
71 
72  void useAbsolutePositioning() override {
73  str_stream_ << "G90" << std::endl;
74  }
75 
76  void useRelativePositioning() override {
77  // TODO (Support actual G91)
78  str_stream_ << "G91" << std::endl;
79  }
80 
81  void home() override {
82  str_stream_ << "$H" << std::endl;
83  x_ = y_ = 0;
84  }
85 
86 private:
87  int machine_width_;
88  int machine_height_;
90 };
Definition: base-generator.h:8
float y_
Definition: base-generator.h:77
std::stringstream str_stream_
Definition: base-generator.h:75
float x_
Definition: base-generator.h:76
float x()
Definition: base-generator.h:68
float y()
Definition: base-generator.h:70
float power_
Definition: base-generator.h:78
float power()
Definition: base-generator.h:66
float speed()
Definition: base-generator.h:72
float speed_
Definition: base-generator.h:79
Definition: gcode-generator.h:10
void home() override
Definition: gcode-generator.h:81
void useAbsolutePositioning() override
Definition: gcode-generator.h:72
void useRelativePositioning() override
Definition: gcode-generator.h:76
void moveTo(float x, float y, float speed, float power) override
Definition: gcode-generator.h:18
GCodeGenerator(const MachineSettings::MachineSet &machine)
Definition: gcode-generator.h:12
void setLaserPower(float power) override
Definition: gcode-generator.h:57
void turnOffLaser() override
Definition: gcode-generator.h:62
void turnOnLaser() override
Definition: gcode-generator.h:67
Definition: machine-settings.h:16
OriginType
Definition: machine-settings.h:17
int height
Definition: machine-settings.h:39
OriginType origin
Definition: machine-settings.h:37
int width
Definition: machine-settings.h:38