Prusa Slicer 2.6.0
Loading...
Searching...
No Matches
Slic3r::GCodeReader Class Reference

#include <src/libslic3r/GCodeReader.hpp>

Classes

class  GCodeLine
 

Public Types

typedef std::function< void(GCodeReader &, const GCodeLine &)> callback_t
 
typedef std::function< void(GCodeReader &, const char *, const char *)> raw_line_callback_t
 

Public Member Functions

 GCodeReader ()
 
void reset ()
 
void apply_config (const GCodeConfig &config)
 
void apply_config (const DynamicPrintConfig &config)
 
template<typename Callback >
void parse_buffer (const std::string &buffer, Callback callback)
 
void parse_buffer (const std::string &buffer)
 
template<typename Callback >
const char * parse_line (const char *ptr, const char *end, GCodeLine &gline, Callback &callback)
 
template<typename Callback >
void parse_line (const std::string &line, Callback callback)
 
bool parse_file (const std::string &file, callback_t callback)
 
bool parse_file (const std::string &file, callback_t callback, std::vector< size_t > &lines_ends)
 
bool parse_file_raw (const std::string &file, raw_line_callback_t callback)
 
void quit_parsing ()
 
float & x ()
 
float x () const
 
float & y ()
 
float y () const
 
float & z ()
 
float z () const
 
float & e ()
 
float e () const
 
float & f ()
 
float f () const
 
Point xy_scaled () const
 
char extrusion_axis () const
 

Private Member Functions

template<typename ParseLineCallback , typename LineEndCallback >
bool parse_file_raw_internal (const std::string &filename, ParseLineCallback parse_line_callback, LineEndCallback line_end_callback)
 
template<typename ParseLineCallback , typename LineEndCallback >
bool parse_file_internal (const std::string &filename, ParseLineCallback parse_line_callback, LineEndCallback line_end_callback)
 
const char * parse_line_internal (const char *ptr, const char *end, GCodeLine &gline, std::pair< const char *, const char * > &command)
 
void update_coordinates (GCodeLine &gline, std::pair< const char *, const char * > &command)
 

Static Private Member Functions

static bool is_whitespace (char c)
 
static bool is_end_of_line (char c)
 
static bool is_end_of_gcode_line (char c)
 
static bool is_end_of_word (char c)
 
static const char * skip_whitespaces (const char *c)
 
static const char * skip_word (const char *c)
 
static const char * axis_pos (const char *raw_str, char axis)
 

Private Attributes

GCodeConfig m_config
 
char m_extrusion_axis
 
float m_position [NUM_AXES]
 
bool m_verbose
 
bool m_parsing { false }
 

Detailed Description

Member Typedef Documentation

◆ callback_t

◆ raw_line_callback_t

typedef std::function<void(GCodeReader&, const char*, const char*)> Slic3r::GCodeReader::raw_line_callback_t

Constructor & Destructor Documentation

◆ GCodeReader()

Slic3r::GCodeReader::GCodeReader ( )
inline
95: m_verbose(false), m_extrusion_axis('E') { this->reset(); }
bool m_verbose
Definition GCodeReader.hpp:186
void reset()
Definition GCodeReader.hpp:96
char m_extrusion_axis
Definition GCodeReader.hpp:184

References reset().

+ Here is the call graph for this function:

Member Function Documentation

◆ apply_config() [1/2]

void Slic3r::GCodeReader::apply_config ( const DynamicPrintConfig config)
32{
33 m_config.apply(config, true);
35}
GCodeConfig m_config
Definition GCodeReader.hpp:183
static char get_extrusion_axis_char(const GCodeConfig &config)
Definition GCodeReader.cpp:17

References Slic3r::get_extrusion_axis_char(), m_config, and m_extrusion_axis.

+ Here is the call graph for this function:

◆ apply_config() [2/2]

void Slic3r::GCodeReader::apply_config ( const GCodeConfig &  config)

References Slic3r::get_extrusion_axis_char(), m_config, and m_extrusion_axis.

Referenced by Slic3r::SpiralVase::SpiralVase(), Slic3r::GCodeProcessor::apply_config(), and Slic3r::GCodeProcessor::apply_config().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ axis_pos()

const char * Slic3r::GCodeReader::axis_pos ( const char *  raw_str,
char  axis 
)
staticprivate
212{
213 const char *c = raw_str;
214 // Skip the whitespaces.
215 c = skip_whitespaces(c);
216 // Skip the command.
217 c = skip_word(c);
218 // Up to the end of line or comment.
219 while (! is_end_of_gcode_line(*c)) {
220 // Skip whitespaces.
221 c = skip_whitespaces(c);
222 if (is_end_of_gcode_line(*c))
223 break;
224 // Check the name of the axis.
225 if (*c == axis)
226 return c;
227 // Skip the rest of the word.
228 c = skip_word(c);
229 }
230 return nullptr;
231}
static bool is_end_of_gcode_line(char c)
Definition GCodeReader.hpp:169
static const char * skip_word(const char *c)
Definition GCodeReader.hpp:176
static const char * skip_whitespaces(const char *c)
Definition GCodeReader.hpp:171

References is_end_of_gcode_line(), skip_whitespaces(), and skip_word().

Referenced by Slic3r::GCodeReader::GCodeLine::has(), Slic3r::GCodeReader::GCodeLine::has_value(), and Slic3r::GCodeReader::GCodeLine::has_value().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ e() [1/2]

float & Slic3r::GCodeReader::e ( )
inline
147{ return m_position[E]; }
float m_position[NUM_AXES]
Definition GCodeReader.hpp:185
@ E
Definition libslic3r.h:101

References Slic3r::E, and m_position.

Referenced by Slic3r::GCodeReader::GCodeLine::dist_E(), and Slic3r::GCodeReader::GCodeLine::new_E().

+ Here is the caller graph for this function:

◆ e() [2/2]

float Slic3r::GCodeReader::e ( ) const
inline
148{ return m_position[E]; }

References Slic3r::E, and m_position.

◆ extrusion_axis()

char Slic3r::GCodeReader::extrusion_axis ( ) const
inline
155{ return m_extrusion_axis; }

References m_extrusion_axis.

Referenced by Slic3r::GCodeReader::GCodeLine::set().

+ Here is the caller graph for this function:

◆ f() [1/2]

float & Slic3r::GCodeReader::f ( )
inline
149{ return m_position[F]; }
@ F
Definition libslic3r.h:102

References Slic3r::F, and m_position.

Referenced by Slic3r::GCodeReader::GCodeLine::new_F().

+ Here is the caller graph for this function:

◆ f() [2/2]

float Slic3r::GCodeReader::f ( ) const
inline
150{ return m_position[F]; }

References Slic3r::F, and m_position.

◆ is_end_of_gcode_line()

static bool Slic3r::GCodeReader::is_end_of_gcode_line ( char  c)
inlinestaticprivate
169{ return c == ';' || is_end_of_line(c); }
static bool is_end_of_line(char c)
Definition GCodeReader.hpp:168

References is_end_of_line().

Referenced by axis_pos(), is_end_of_word(), and parse_line_internal().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ is_end_of_line()

static bool Slic3r::GCodeReader::is_end_of_line ( char  c)
inlinestaticprivate
168{ return c == '\r' || c == '\n' || c == 0; }

Referenced by is_end_of_gcode_line(), and parse_line_internal().

+ Here is the caller graph for this function:

◆ is_end_of_word()

static bool Slic3r::GCodeReader::is_end_of_word ( char  c)
inlinestaticprivate
170{ return is_whitespace(c) || is_end_of_gcode_line(c); }
static bool is_whitespace(char c)
Definition GCodeReader.hpp:167

References is_end_of_gcode_line(), and is_whitespace().

Referenced by Slic3r::GCodeReader::GCodeLine::cmd_is(), Slic3r::GCodeReader::GCodeLine::has_value(), Slic3r::GCodeReader::GCodeLine::has_value(), parse_line_internal(), and skip_word().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ is_whitespace()

static bool Slic3r::GCodeReader::is_whitespace ( char  c)
inlinestaticprivate
167{ return c == ' ' || c == '\t'; }

Referenced by is_end_of_word(), and skip_whitespaces().

+ Here is the caller graph for this function:

◆ parse_buffer() [1/2]

void Slic3r::GCodeReader::parse_buffer ( const std::string &  buffer)
inline
114 { this->parse_buffer(buffer, [](GCodeReader&, const GCodeReader::GCodeLine&){}); }
void parse_buffer(const std::string &buffer, Callback callback)
Definition GCodeReader.hpp:101
GCodeReader()
Definition GCodeReader.hpp:95

References parse_buffer().

+ Here is the call graph for this function:

◆ parse_buffer() [2/2]

template<typename Callback >
void Slic3r::GCodeReader::parse_buffer ( const std::string &  buffer,
Callback  callback 
)
inline
102 {
103 const char *ptr = buffer.c_str();
104 const char *end = ptr + buffer.size();
105 GCodeLine gline;
106 m_parsing = true;
107 while (m_parsing && *ptr != 0) {
108 gline.reset();
109 ptr = this->parse_line(ptr, end, gline, callback);
110 }
111 }
const char * parse_line(const char *ptr, const char *end, GCodeLine &gline, Callback &callback)
Definition GCodeReader.hpp:117
bool m_parsing
Definition GCodeReader.hpp:188
S::iterator end(S &sh, const PathTag &)
Definition geometry_traits.hpp:620

References m_parsing, parse_line(), and Slic3r::GCodeReader::GCodeLine::reset().

Referenced by Slic3r::GCodeProcessor::contains_reserved_tag(), Slic3r::GCodeProcessor::contains_reserved_tags(), parse_buffer(), Slic3r::GCodeProcessor::process_buffer(), and Slic3r::SpiralVase::process_layer().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ parse_file() [1/2]

bool Slic3r::GCodeReader::parse_file ( const std::string &  file,
callback_t  callback 
)
194{
195 return this->parse_file_internal(file, callback, [](size_t){});
196}
bool parse_file_internal(const std::string &filename, ParseLineCallback parse_line_callback, LineEndCallback line_end_callback)
Definition GCodeReader.cpp:182

References parse_file_internal().

Referenced by Slic3r::GCodeProcessor::process_file().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ parse_file() [2/2]

bool Slic3r::GCodeReader::parse_file ( const std::string &  file,
callback_t  callback,
std::vector< size_t > &  lines_ends 
)
199{
200 lines_ends.clear();
201 return this->parse_file_internal(file, callback, [&lines_ends](size_t file_pos){ lines_ends.emplace_back(file_pos); });
202}

References parse_file_internal().

+ Here is the call graph for this function:

◆ parse_file_internal()

template<typename ParseLineCallback , typename LineEndCallback >
bool Slic3r::GCodeReader::parse_file_internal ( const std::string &  filename,
ParseLineCallback  parse_line_callback,
LineEndCallback  line_end_callback 
)
private
183{
184 GCodeLine gline;
185 return this->parse_file_raw_internal(filename,
186 [this, &gline, parse_line_callback](const char *begin, const char *end) {
187 gline.reset();
188 this->parse_line(begin, end, gline, parse_line_callback);
189 },
190 line_end_callback);
191}
bool parse_file_raw_internal(const std::string &filename, ParseLineCallback parse_line_callback, LineEndCallback line_end_callback)
Definition GCodeReader.cpp:126

References parse_file_raw_internal(), parse_line(), and Slic3r::GCodeReader::GCodeLine::reset().

Referenced by parse_file(), and parse_file().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ parse_file_raw()

bool Slic3r::GCodeReader::parse_file_raw ( const std::string &  file,
raw_line_callback_t  callback 
)
205{
206 return this->parse_file_raw_internal(filename,
207 [this, line_callback](const char *begin, const char *end) { line_callback(*this, begin, end); },
208 [](size_t){});
209}

References parse_file_raw_internal().

Referenced by Slic3r::GCodeProcessor::apply_config_kissslicer(), Slic3r::GCodeProcessor::apply_config_simplify3d(), and Slic3r::GCodeProcessor::process_file().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ parse_file_raw_internal()

template<typename ParseLineCallback , typename LineEndCallback >
bool Slic3r::GCodeReader::parse_file_raw_internal ( const std::string &  filename,
ParseLineCallback  parse_line_callback,
LineEndCallback  line_end_callback 
)
private
127{
128 FilePtr in{ boost::nowide::fopen(filename.c_str(), "rb") };
129
130 // Read the input stream 64kB at a time, extract lines and process them.
131 std::vector<char> buffer(65536 * 10, 0);
132 // Line buffer.
133 std::string gcode_line;
134 size_t file_pos = 0;
135 m_parsing = true;
136 for (;;) {
137 size_t cnt_read = ::fread(buffer.data(), 1, buffer.size(), in.f);
138 if (::ferror(in.f))
139 return false;
140 bool eof = cnt_read == 0;
141 auto it = buffer.begin();
142 auto it_bufend = buffer.begin() + cnt_read;
143 while (it != it_bufend || (eof && ! gcode_line.empty())) {
144 // Find end of line.
145 bool eol = false;
146 auto it_end = it;
147 for (; it_end != it_bufend && ! (eol = *it_end == '\r' || *it_end == '\n'); ++ it_end)
148 if (*it_end == '\n')
149 line_end_callback(file_pos + (it_end - buffer.begin()) + 1);
150 // End of line is indicated also if end of file was reached.
151 eol |= eof && it_end == it_bufend;
152 if (eol) {
153 if (gcode_line.empty())
154 parse_line_callback(&(*it), &(*it_end));
155 else {
156 gcode_line.insert(gcode_line.end(), it, it_end);
157 parse_line_callback(gcode_line.c_str(), gcode_line.c_str() + gcode_line.size());
158 gcode_line.clear();
159 }
160 if (! m_parsing)
161 // The callback wishes to exit.
162 return true;
163 } else
164 gcode_line.insert(gcode_line.end(), it, it_end);
165 // Skip EOL.
166 it = it_end;
167 if (it != it_bufend && *it == '\r')
168 ++ it;
169 if (it != it_bufend && *it == '\n') {
170 line_end_callback(file_pos + (it - buffer.begin()) + 1);
171 ++ it;
172 }
173 }
174 if (eof)
175 break;
176 file_pos += cnt_read;
177 }
178 return true;
179}

References m_parsing.

Referenced by parse_file_internal(), and parse_file_raw().

+ Here is the caller graph for this function:

◆ parse_line() [1/2]

template<typename Callback >
const char * Slic3r::GCodeReader::parse_line ( const char *  ptr,
const char *  end,
GCodeLine gline,
Callback &  callback 
)
inline
118 {
119 std::pair<const char*, const char*> cmd;
120 const char *line_end = parse_line_internal(ptr, end, gline, cmd);
121 callback(*this, gline);
122 update_coordinates(gline, cmd);
123 return line_end;
124 }
void update_coordinates(GCodeLine &gline, std::pair< const char *, const char * > &command)
Definition GCodeReader.cpp:112
const char * parse_line_internal(const char *ptr, const char *end, GCodeLine &gline, std::pair< const char *, const char * > &command)
Definition GCodeReader.cpp:37
struct command cmd[]
Definition term.c:94

References cmd, parse_line_internal(), and update_coordinates().

Referenced by parse_buffer(), parse_file_internal(), parse_line(), Slic3r::GCodeProcessor::post_process(), and Slic3r::GCodeProcessor::process_G28().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ parse_line() [2/2]

template<typename Callback >
void Slic3r::GCodeReader::parse_line ( const std::string &  line,
Callback  callback 
)
inline
128 { GCodeLine gline; this->parse_line(line.c_str(), line.c_str() + line.size(), gline, callback); }

References parse_line().

+ Here is the call graph for this function:

◆ parse_line_internal()

const char * Slic3r::GCodeReader::parse_line_internal ( const char *  ptr,
const char *  end,
GCodeLine gline,
std::pair< const char *, const char * > &  command 
)
private
38{
40
41 // command and args
42 const char *c = ptr;
43 {
44 // Skip the whitespaces.
45 command.first = skip_whitespaces(c);
46 // Skip the command.
47 c = command.second = skip_word(command.first);
48 // Up to the end of line or comment.
49 while (! is_end_of_gcode_line(*c)) {
50 // Skip whitespaces.
53 break;
54 // Check the name of the axis.
56 switch (*c) {
57 case 'X': axis = X; break;
58 case 'Y': axis = Y; break;
59 case 'Z': axis = Z; break;
60 case 'F': axis = F; break;
61 default:
62 if (*c == m_extrusion_axis) {
63 if (m_extrusion_axis != 0)
64 axis = E;
65 } else if (*c >= 'A' && *c <= 'Z')
66 // Unknown axis, but we still want to remember that such a axis was seen.
67 axis = UNKNOWN_AXIS;
68 break;
69 }
70 if (axis != NUM_AXES_WITH_UNKNOWN) {
71 // Try to parse the numeric value.
72 double v;
73 c = skip_whitespaces(++ c);
74 auto [pend, ec] = fast_float::from_chars(c, end, v);
75 if (pend != c && is_end_of_word(*pend)) {
76 // The axis value has been parsed correctly.
77 if (axis != UNKNOWN_AXIS)
78 gline.m_axis[int(axis)] = float(v);
79 gline.m_mask |= 1 << int(axis);
80 c = pend;
81 } else
82 // Skip the rest of the word.
83 c = skip_word(c);
84 } else
85 // Skip the rest of the word.
86 c = skip_word(c);
87 }
88 }
89
90 if (gline.has(E) && m_config.use_relative_e_distances)
91 m_position[E] = 0;
92
93 // Skip the rest of the line.
94 for (; ! is_end_of_line(*c); ++ c);
95
96 // Copy the raw string including the comment, without the trailing newlines.
97 if (c > ptr)
98 gline.m_raw.assign(ptr, c);
99
100 // Skip the trailing newlines.
101 if (*c == '\r')
102 ++ c;
103 if (*c == '\n')
104 ++ c;
105
106 if (m_verbose)
107 std::cout << gline.m_raw << std::endl;
108
109 return c;
110}
static bool is_end_of_word(char c)
Definition GCodeReader.hpp:170
bool is_decimal_separator_point()
Definition LocalesUtils.cpp:47
Axis
Definition libslic3r.h:97
@ Y
Definition libslic3r.h:99
@ Z
Definition libslic3r.h:100
@ NUM_AXES_WITH_UNKNOWN
Definition libslic3r.h:106
@ UNKNOWN_AXIS
Definition libslic3r.h:105
@ X
Definition libslic3r.h:98
from_chars_result from_chars(const char *first, const char *last, T &value, chars_format fmt=chars_format::general) noexcept
Definition fast_float.h:2401
Definition term.c:39

References Slic3r::E, Slic3r::F, fast_float::from_chars(), Slic3r::GCodeReader::GCodeLine::has(), Slic3r::is_decimal_separator_point(), is_end_of_gcode_line(), is_end_of_line(), is_end_of_word(), Slic3r::GCodeReader::GCodeLine::m_axis, m_config, m_extrusion_axis, Slic3r::GCodeReader::GCodeLine::m_mask, m_position, Slic3r::GCodeReader::GCodeLine::m_raw, m_verbose, Slic3r::NUM_AXES_WITH_UNKNOWN, skip_whitespaces(), skip_word(), Slic3r::UNKNOWN_AXIS, Slic3r::X, Slic3r::Y, and Slic3r::Z.

Referenced by parse_line().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ quit_parsing()

void Slic3r::GCodeReader::quit_parsing ( )
inline
139{ m_parsing = false; }

References m_parsing.

Referenced by Slic3r::GCodeProcessor::apply_config_kissslicer(), Slic3r::GCodeProcessor::apply_config_simplify3d(), and Slic3r::GCodeProcessor::process_file().

+ Here is the caller graph for this function:

◆ reset()

void Slic3r::GCodeReader::reset ( )
inline
96{ memset(m_position, 0, sizeof(m_position)); }

References m_position.

Referenced by GCodeReader(), Slic3r::GCodeProcessor::apply_config_kissslicer(), and Slic3r::GCodeProcessor::process_file().

+ Here is the caller graph for this function:

◆ skip_whitespaces()

static const char * Slic3r::GCodeReader::skip_whitespaces ( const char *  c)
inlinestaticprivate
171 {
172 for (; is_whitespace(*c); ++ c)
173 ; // silence -Wempty-body
174 return c;
175 }

References is_whitespace().

Referenced by axis_pos(), Slic3r::GCodeReader::GCodeLine::cmd(), Slic3r::GCodeReader::GCodeLine::cmd_is(), Slic3r::GCodeReader::GCodeLine::cmd_starts_with(), and parse_line_internal().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ skip_word()

static const char * Slic3r::GCodeReader::skip_word ( const char *  c)
inlinestaticprivate
176 {
177 for (; ! is_end_of_word(*c); ++ c)
178 ; // silence -Wempty-body
179 return c;
180 }

References is_end_of_word().

Referenced by axis_pos(), Slic3r::GCodeReader::GCodeLine::cmd(), and parse_line_internal().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ update_coordinates()

void Slic3r::GCodeReader::update_coordinates ( GCodeLine gline,
std::pair< const char *, const char * > &  command 
)
private
113{
114 if (*command.first == 'G') {
115 int cmd_len = int(command.second - command.first);
116 if ((cmd_len == 2 && (command.first[1] == '0' || command.first[1] == '1')) ||
117 (cmd_len == 3 && command.first[1] == '9' && command.first[2] == '2')) {
118 for (size_t i = 0; i < NUM_AXES; ++ i)
119 if (gline.has(Axis(i)))
120 m_position[i] = gline.value(Axis(i));
121 }
122 }
123}
@ NUM_AXES
Definition libslic3r.h:103

References Slic3r::GCodeReader::GCodeLine::has(), m_position, Slic3r::NUM_AXES, and Slic3r::GCodeReader::GCodeLine::value().

Referenced by parse_line().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ x() [1/2]

float & Slic3r::GCodeReader::x ( )
inline
141{ return m_position[X]; }

References m_position, and Slic3r::X.

Referenced by Slic3r::GCodeReader::GCodeLine::dist_X(), Slic3r::GCodeReader::GCodeLine::dist_XY(), Slic3r::GCodeReader::GCodeLine::new_X(), and xy_scaled().

+ Here is the caller graph for this function:

◆ x() [2/2]

float Slic3r::GCodeReader::x ( ) const
inline
142{ return m_position[X]; }

References m_position, and Slic3r::X.

◆ xy_scaled()

Point Slic3r::GCodeReader::xy_scaled ( ) const
inline
151{ return Point::new_scale(this->x(), this->y()); }
float & y()
Definition GCodeReader.hpp:143
float & x()
Definition GCodeReader.hpp:141

References x(), and y().

+ Here is the call graph for this function:

◆ y() [1/2]

float & Slic3r::GCodeReader::y ( )
inline
143{ return m_position[Y]; }

References m_position, and Slic3r::Y.

Referenced by Slic3r::GCodeReader::GCodeLine::dist_XY(), Slic3r::GCodeReader::GCodeLine::dist_Y(), Slic3r::GCodeReader::GCodeLine::new_Y(), and xy_scaled().

+ Here is the caller graph for this function:

◆ y() [2/2]

float Slic3r::GCodeReader::y ( ) const
inline
144{ return m_position[Y]; }

References m_position, and Slic3r::Y.

◆ z() [1/2]

float & Slic3r::GCodeReader::z ( )
inline
145{ return m_position[Z]; }

References m_position, and Slic3r::Z.

Referenced by Slic3r::SpiralVase::SpiralVase(), Slic3r::GCodeReader::GCodeLine::dist_Z(), and Slic3r::GCodeReader::GCodeLine::new_Z().

+ Here is the caller graph for this function:

◆ z() [2/2]

float Slic3r::GCodeReader::z ( ) const
inline
146{ return m_position[Z]; }

References m_position, and Slic3r::Z.

Member Data Documentation

◆ m_config

GCodeConfig Slic3r::GCodeReader::m_config
private

◆ m_extrusion_axis

char Slic3r::GCodeReader::m_extrusion_axis
private

◆ m_parsing

bool Slic3r::GCodeReader::m_parsing { false }
private

◆ m_position

float Slic3r::GCodeReader::m_position[NUM_AXES]
private

◆ m_verbose

bool Slic3r::GCodeReader::m_verbose
private

Referenced by parse_line_internal().


The documentation for this class was generated from the following files: