8{
9
10
11
12
13
14
15
16
17
18
22 }
23
24
25 float total_layer_length = 0;
27 float z = 0.f;
28
29 {
30
32 bool set_z = false;
34 (GCodeReader &reader, const GCodeReader::GCodeLine &line) {
35 if (line.cmd_is("G1")) {
36 if (line.extruding(reader)) {
37 total_layer_length += line.dist_XY(reader);
38 }
else if (line.has(
Z)) {
39 layer_height += line.dist_Z(reader);
40 if (!set_z) {
41 z = line.new_Z(reader);
42 set_z = true;
43 }
44 }
45 }
46 });
47 }
48
49
51
52 std::string new_gcode;
53
54
55
56
58 float layer_height_factor =
layer_height / total_layer_length;
59 float len = 0.f;
60 m_reader.
parse_buffer(gcode, [&new_gcode, &z, total_layer_length, layer_height_factor, transition, &len]
61 (GCodeReader &reader, GCodeReader::GCodeLine line) {
62 if (line.cmd_is("G1")) {
63 if (line.has_z()) {
64
65
66 line.set(reader, Z, z);
67 new_gcode += line.raw() + '\n';
68 return;
69 } else {
70 float dist_XY = line.dist_XY(reader);
71 if (dist_XY > 0) {
72
73 if (line.extruding(reader)) {
74 len += dist_XY;
75 line.set(reader, Z, z + len * layer_height_factor);
76 if (transition && line.has(E))
77
78 line.set(reader, E, line.value(E) * len / total_layer_length);
79 new_gcode += line.raw() + '\n';
80 }
81 return;
82
83
84
85
86
87
88 }
89 }
90 }
91 new_gcode += line.raw() + '\n';
92 });
93
94 return new_gcode;
95}
void parse_buffer(const std::string &buffer, Callback callback)
Definition GCodeReader.hpp:101
if(!(yy_init))
Definition lexer.c:1190
layer_height((ConfigOptionInt, faded_layers))((ConfigOptionFloat
@ Z
Definition libslic3r.h:100