1
#ifndef slic3r_PrintConfig_hpp_
2
#define slic3r_PrintConfig_hpp_
9
gcfRepRap, gcfTeacup, gcfMakerWare, gcfSailfish, gcfMach3, gcfNoExtrusion,
13
ipRectilinear, ipLine, ipConcentric, ipHoneycomb,
14
ipHilbertCurve, ipArchimedeanChords, ipOctagramSpiral,
17
enum SupportMaterialPattern {
18
smpRectilinear, smpRectilinearGrid, smpHoneycomb, smpPillars,
22
spRandom, spNearest, spAligned
25
template<> inline t_config_enum_values ConfigOptionEnum<GCodeFlavor>::get_enum_values() {
26
t_config_enum_values keys_map;
27
keys_map["reprap"] = gcfRepRap;
28
keys_map["teacup"] = gcfTeacup;
29
keys_map["makerware"] = gcfMakerWare;
30
keys_map["sailfish"] = gcfSailfish;
31
keys_map["mach3"] = gcfMach3;
32
keys_map["no-extrusion"] = gcfNoExtrusion;
36
template<> inline t_config_enum_values ConfigOptionEnum<InfillPattern>::get_enum_values() {
37
t_config_enum_values keys_map;
38
keys_map["rectilinear"] = ipRectilinear;
39
keys_map["line"] = ipLine;
40
keys_map["concentric"] = ipConcentric;
41
keys_map["honeycomb"] = ipHoneycomb;
42
keys_map["hilbertcurve"] = ipHilbertCurve;
43
keys_map["archimedeanchords"] = ipArchimedeanChords;
44
keys_map["octagramspiral"] = ipOctagramSpiral;
48
template<> inline t_config_enum_values ConfigOptionEnum<SupportMaterialPattern>::get_enum_values() {
49
t_config_enum_values keys_map;
50
keys_map["rectilinear"] = smpRectilinear;
51
keys_map["rectilinear-grid"] = smpRectilinearGrid;
52
keys_map["honeycomb"] = smpHoneycomb;
53
keys_map["pillars"] = smpPillars;
57
template<> inline t_config_enum_values ConfigOptionEnum<SeamPosition>::get_enum_values() {
58
t_config_enum_values keys_map;
59
keys_map["random"] = spRandom;
60
keys_map["nearest"] = spNearest;
61
keys_map["aligned"] = spAligned;
68
static t_optiondef_map def;
70
static t_optiondef_map build_def () {
71
t_optiondef_map Options;
73
Options["avoid_crossing_perimeters"].type = coBool;
74
Options["avoid_crossing_perimeters"].label = "Avoid crossing perimeters";
75
Options["avoid_crossing_perimeters"].tooltip = "Optimize travel moves in order to minimize the crossing of perimeters. This is mostly useful with Bowden extruders which suffer from oozing. This feature slows down both the print and the G-code generation.";
76
Options["avoid_crossing_perimeters"].cli = "avoid-crossing-perimeters!";
78
Options["bed_size"].type = coPoint;
79
Options["bed_size"].label = "Bed size";
80
Options["bed_size"].tooltip = "Size of your bed. This is used to adjust the preview in the plater and for auto-arranging parts in it.";
81
Options["bed_size"].sidetext = "mm";
82
Options["bed_size"].cli = "bed-size=s";
84
Options["bed_temperature"].type = coInt;
85
Options["bed_temperature"].label = "Other layers";
86
Options["bed_temperature"].tooltip = "Bed temperature for layers after the first one. Set this to zero to disable bed temperature control commands in the output.";
87
Options["bed_temperature"].sidetext = "Ā°C";
88
Options["bed_temperature"].cli = "bed-temperature=i";
89
Options["bed_temperature"].full_label = "Bed temperature";
90
Options["bed_temperature"].min = 0;
91
Options["bed_temperature"].max = 300;
93
Options["bottom_solid_layers"].type = coInt;
94
Options["bottom_solid_layers"].label = "Bottom";
95
Options["bottom_solid_layers"].category = "Layers and Perimeters";
96
Options["bottom_solid_layers"].tooltip = "Number of solid layers to generate on bottom surfaces.";
97
Options["bottom_solid_layers"].cli = "bottom-solid-layers=i";
98
Options["bottom_solid_layers"].full_label = "Bottom solid layers";
100
Options["bridge_acceleration"].type = coFloat;
101
Options["bridge_acceleration"].label = "Bridge";
102
Options["bridge_acceleration"].tooltip = "This is the acceleration your printer will use for bridges. Set zero to disable acceleration control for bridges.";
103
Options["bridge_acceleration"].sidetext = "mm/sĀ²";
104
Options["bridge_acceleration"].cli = "bridge-acceleration=f";
106
Options["bridge_fan_speed"].type = coInt;
107
Options["bridge_fan_speed"].label = "Bridges fan speed";
108
Options["bridge_fan_speed"].tooltip = "This fan speed is enforced during all bridges and overhangs.";
109
Options["bridge_fan_speed"].sidetext = "%";
110
Options["bridge_fan_speed"].cli = "bridge-fan-speed=i";
111
Options["bridge_fan_speed"].max = 100;
113
Options["bridge_flow_ratio"].type = coFloat;
114
Options["bridge_flow_ratio"].label = "Bridge flow ratio";
115
Options["bridge_flow_ratio"].tooltip = "This factor affects the amount of plastic for bridging. You can decrease it slightly to pull the extrudates and prevent sagging, although default settings are usually good and you should experiment with cooling (use a fan) before tweaking this.";
116
Options["bridge_flow_ratio"].cli = "bridge-flow-ratio=f";
118
Options["bridge_speed"].type = coFloat;
119
Options["bridge_speed"].label = "Bridges";
120
Options["bridge_speed"].category = "Speed";
121
Options["bridge_speed"].tooltip = "Speed for printing bridges.";
122
Options["bridge_speed"].sidetext = "mm/s";
123
Options["bridge_speed"].cli = "bridge-speed=f";
124
Options["bridge_speed"].aliases.push_back("bridge_feed_rate");
126
Options["brim_width"].type = coFloat;
127
Options["brim_width"].label = "Brim width";
128
Options["brim_width"].tooltip = "Horizontal width of the brim that will be printed around each object on the first layer.";
129
Options["brim_width"].sidetext = "mm";
130
Options["brim_width"].cli = "brim-width=f";
132
Options["complete_objects"].type = coBool;
133
Options["complete_objects"].label = "Complete individual objects";
134
Options["complete_objects"].tooltip = "When printing multiple objects or copies, this feature will complete each object before moving onto next one (and starting it from its bottom layer). This feature is useful to avoid the risk of ruined prints. Slic3r should warn and prevent you from extruder collisions, but beware.";
135
Options["complete_objects"].cli = "complete-objects!";
137
Options["cooling"].type = coBool;
138
Options["cooling"].label = "Enable auto cooling";
139
Options["cooling"].tooltip = "This flag enables the automatic cooling logic that adjusts print speed and fan speed according to layer printing time.";
140
Options["cooling"].cli = "cooling!";
142
Options["default_acceleration"].type = coFloat;
143
Options["default_acceleration"].label = "Default";
144
Options["default_acceleration"].tooltip = "This is the acceleration your printer will be reset to after the role-specific acceleration values are used (perimeter/infill). Set zero to prevent resetting acceleration at all.";
145
Options["default_acceleration"].sidetext = "mm/sĀ²";
146
Options["default_acceleration"].cli = "default-acceleration=f";
148
Options["disable_fan_first_layers"].type = coInt;
149
Options["disable_fan_first_layers"].label = "Disable fan for the first";
150
Options["disable_fan_first_layers"].tooltip = "You can set this to a positive value to disable fan at all during the first layers, so that it does not make adhesion worse.";
151
Options["disable_fan_first_layers"].sidetext = "layers";
152
Options["disable_fan_first_layers"].cli = "disable-fan-first-layers=i";
153
Options["disable_fan_first_layers"].max = 1000;
155
Options["dont_support_bridges"].type = coBool;
156
Options["dont_support_bridges"].label = "Don't support bridges";
157
Options["dont_support_bridges"].tooltip = "Experimental option for preventing support material from being generated under bridged areas.";
158
Options["dont_support_bridges"].cli = "dont-support-bridges!";
160
Options["duplicate_distance"].type = coFloat;
161
Options["duplicate_distance"].label = "Distance between copies";
162
Options["duplicate_distance"].tooltip = "Distance used for the auto-arrange feature of the plater.";
163
Options["duplicate_distance"].sidetext = "mm";
164
Options["duplicate_distance"].cli = "duplicate-distance=f";
165
Options["duplicate_distance"].aliases.push_back("multiply_distance");
167
Options["end_gcode"].type = coString;
168
Options["end_gcode"].label = "End G-code";
169
Options["end_gcode"].tooltip = "This end procedure is inserted at the end of the output file. Note that you can use placeholder variables for all Slic3r settings.";
170
Options["end_gcode"].cli = "end-gcode=s";
171
Options["end_gcode"].multiline = true;
172
Options["end_gcode"].full_width = true;
173
Options["end_gcode"].height = 120;
175
Options["external_perimeter_speed"].type = coFloatOrPercent;
176
Options["external_perimeter_speed"].label = "External perimeters";
177
Options["external_perimeter_speed"].category = "Speed";
178
Options["external_perimeter_speed"].tooltip = "This separate setting will affect the speed of external perimeters (the visible ones). If expressed as percentage (for example: 80%) it will be calculated on the perimeters speed setting above.";
179
Options["external_perimeter_speed"].sidetext = "mm/s or %";
180
Options["external_perimeter_speed"].cli = "external-perimeter-speed=s";
181
Options["external_perimeter_speed"].ratio_over = "perimeter_speed";
183
Options["external_perimeters_first"].type = coBool;
184
Options["external_perimeters_first"].label = "External perimeters first";
185
Options["external_perimeters_first"].tooltip = "Print contour perimeters from the outermost one to the innermost one instead of the default inverse order.";
186
Options["external_perimeters_first"].cli = "external-perimeters-first!";
188
Options["extra_perimeters"].type = coBool;
189
Options["extra_perimeters"].label = "Extra perimeters if needed";
190
Options["extra_perimeters"].category = "Layers and Perimeters";
191
Options["extra_perimeters"].tooltip = "Add more perimeters when needed for avoiding gaps in sloping walls.";
192
Options["extra_perimeters"].cli = "extra-perimeters!";
194
Options["extruder"].type = coInt;
195
Options["extruder"].label = "Default extruder";
196
Options["extruder"].category = "Extruders";
197
Options["extruder"].tooltip = "The extruder to use (unless more specific extruder settings are specified).";
198
Options["extruder"].cli = "extruder=i";
199
Options["extruder"].min = 1;
201
Options["extruder_clearance_height"].type = coFloat;
202
Options["extruder_clearance_height"].label = "Height";
203
Options["extruder_clearance_height"].tooltip = "Set this to the vertical distance between your nozzle tip and (usually) the X carriage rods. In other words, this is the height of the clearance cylinder around your extruder, and it represents the maximum depth the extruder can peek before colliding with other printed objects.";
204
Options["extruder_clearance_height"].sidetext = "mm";
205
Options["extruder_clearance_height"].cli = "extruder-clearance-height=f";
207
Options["extruder_clearance_radius"].type = coFloat;
208
Options["extruder_clearance_radius"].label = "Radius";
209
Options["extruder_clearance_radius"].tooltip = "Set this to the clearance radius around your extruder. If the extruder is not centered, choose the largest value for safety. This setting is used to check for collisions and to display the graphical preview in the plater.";
210
Options["extruder_clearance_radius"].sidetext = "mm";
211
Options["extruder_clearance_radius"].cli = "extruder-clearance-radius=f";
213
Options["extruder_offset"].type = coPoints;
214
Options["extruder_offset"].label = "Extruder offset";
215
Options["extruder_offset"].tooltip = "If your firmware doesn't handle the extruder displacement you need the G-code to take it into account. This option lets you specify the displacement of each extruder with respect to the first one. It expects positive coordinates (they will be subtracted from the XY coordinate).";
216
Options["extruder_offset"].sidetext = "mm";
217
Options["extruder_offset"].cli = "extruder-offset=s@";
219
Options["extrusion_axis"].type = coString;
220
Options["extrusion_axis"].label = "Extrusion axis";
221
Options["extrusion_axis"].tooltip = "Use this option to set the axis letter associated to your printer's extruder (usually E but some printers use A).";
222
Options["extrusion_axis"].cli = "extrusion-axis=s";
224
Options["extrusion_multiplier"].type = coFloats;
225
Options["extrusion_multiplier"].label = "Extrusion multiplier";
226
Options["extrusion_multiplier"].tooltip = "This factor changes the amount of flow proportionally. You may need to tweak this setting to get nice surface finish and correct single wall widths. Usual values are between 0.9 and 1.1. If you think you need to change this more, check filament diameter and your firmware E steps.";
227
Options["extrusion_multiplier"].cli = "extrusion-multiplier=f@";
229
Options["extrusion_width"].type = coFloatOrPercent;
230
Options["extrusion_width"].label = "Default extrusion width";
231
Options["extrusion_width"].category = "Extrusion Width";
232
Options["extrusion_width"].tooltip = "Set this to a non-zero value to set a manual extrusion width. If left to zero, Slic3r calculates a width automatically. If expressed as percentage (for example: 230%) it will be computed over layer height.";
233
Options["extrusion_width"].sidetext = "mm or % (leave 0 for auto)";
234
Options["extrusion_width"].cli = "extrusion-width=s";
236
Options["fan_always_on"].type = coBool;
237
Options["fan_always_on"].label = "Keep fan always on";
238
Options["fan_always_on"].tooltip = "If this is enabled, fan will never be disabled and will be kept running at least at its minimum speed. Useful for PLA, harmful for ABS.";
239
Options["fan_always_on"].cli = "fan-always-on!";
241
Options["fan_below_layer_time"].type = coInt;
242
Options["fan_below_layer_time"].label = "Enable fan if layer print time is below";
243
Options["fan_below_layer_time"].tooltip = "If layer print time is estimated below this number of seconds, fan will be enabled and its speed will be calculated by interpolating the minimum and maximum speeds.";
244
Options["fan_below_layer_time"].sidetext = "approximate seconds";
245
Options["fan_below_layer_time"].cli = "fan-below-layer-time=i";
246
Options["fan_below_layer_time"].width = 60;
247
Options["fan_below_layer_time"].min = 0;
248
Options["fan_below_layer_time"].max = 1000;
250
Options["filament_diameter"].type = coFloats;
251
Options["filament_diameter"].label = "Diameter";
252
Options["filament_diameter"].tooltip = "Enter your filament diameter here. Good precision is required, so use a caliper and do multiple measurements along the filament, then compute the average.";
253
Options["filament_diameter"].sidetext = "mm";
254
Options["filament_diameter"].cli = "filament-diameter=f@";
255
Options["filament_diameter"].min = 0;
257
Options["fill_angle"].type = coInt;
258
Options["fill_angle"].label = "Fill angle";
259
Options["fill_angle"].category = "Infill";
260
Options["fill_angle"].tooltip = "Default base angle for infill orientation. Cross-hatching will be applied to this. Bridges will be infilled using the best direction Slic3r can detect, so this setting does not affect them.";
261
Options["fill_angle"].sidetext = "Ā°";
262
Options["fill_angle"].cli = "fill-angle=i";
263
Options["fill_angle"].min = 0;
264
Options["fill_angle"].max = 359;
266
Options["fill_density"].type = coPercent;
267
Options["fill_density"].label = "Fill density";
268
Options["fill_density"].category = "Infill";
269
Options["fill_density"].tooltip = "Density of internal infill, expressed in the range 0% - 100%.";
270
Options["fill_density"].sidetext = "%";
271
Options["fill_density"].cli = "fill-density=s";
272
Options["fill_density"].min = 0;
273
Options["fill_density"].max = 100;
274
Options["fill_density"].enum_values.push_back("0");
275
Options["fill_density"].enum_values.push_back("5");
276
Options["fill_density"].enum_values.push_back("10");
277
Options["fill_density"].enum_values.push_back("15");
278
Options["fill_density"].enum_values.push_back("20");
279
Options["fill_density"].enum_values.push_back("25");
280
Options["fill_density"].enum_values.push_back("30");
281
Options["fill_density"].enum_values.push_back("40");
282
Options["fill_density"].enum_values.push_back("50");
283
Options["fill_density"].enum_values.push_back("60");
284
Options["fill_density"].enum_values.push_back("70");
285
Options["fill_density"].enum_values.push_back("80");
286
Options["fill_density"].enum_values.push_back("90");
287
Options["fill_density"].enum_values.push_back("100");
288
Options["fill_density"].enum_labels.push_back("0%");
289
Options["fill_density"].enum_labels.push_back("5%");
290
Options["fill_density"].enum_labels.push_back("10%");
291
Options["fill_density"].enum_labels.push_back("15%");
292
Options["fill_density"].enum_labels.push_back("20%");
293
Options["fill_density"].enum_labels.push_back("25%");
294
Options["fill_density"].enum_labels.push_back("30%");
295
Options["fill_density"].enum_labels.push_back("40%");
296
Options["fill_density"].enum_labels.push_back("50%");
297
Options["fill_density"].enum_labels.push_back("60%");
298
Options["fill_density"].enum_labels.push_back("70%");
299
Options["fill_density"].enum_labels.push_back("80%");
300
Options["fill_density"].enum_labels.push_back("90%");
301
Options["fill_density"].enum_labels.push_back("100%");
303
Options["fill_pattern"].type = coEnum;
304
Options["fill_pattern"].label = "Fill pattern";
305
Options["fill_pattern"].category = "Infill";
306
Options["fill_pattern"].tooltip = "Fill pattern for general low-density infill.";
307
Options["fill_pattern"].cli = "fill-pattern=s";
308
Options["fill_pattern"].enum_keys_map = ConfigOptionEnum<InfillPattern>::get_enum_values();
309
Options["fill_pattern"].enum_values.push_back("rectilinear");
310
Options["fill_pattern"].enum_values.push_back("line");
311
Options["fill_pattern"].enum_values.push_back("concentric");
312
Options["fill_pattern"].enum_values.push_back("honeycomb");
313
Options["fill_pattern"].enum_values.push_back("hilbertcurve");
314
Options["fill_pattern"].enum_values.push_back("archimedeanchords");
315
Options["fill_pattern"].enum_values.push_back("octagramspiral");
316
Options["fill_pattern"].enum_labels.push_back("rectilinear");
317
Options["fill_pattern"].enum_labels.push_back("line");
318
Options["fill_pattern"].enum_labels.push_back("concentric");
319
Options["fill_pattern"].enum_labels.push_back("honeycomb");
320
Options["fill_pattern"].enum_labels.push_back("hilbertcurve (slow)");
321
Options["fill_pattern"].enum_labels.push_back("archimedeanchords (slow)");
322
Options["fill_pattern"].enum_labels.push_back("octagramspiral (slow)");
324
Options["first_layer_acceleration"].type = coFloat;
325
Options["first_layer_acceleration"].label = "First layer";
326
Options["first_layer_acceleration"].tooltip = "This is the acceleration your printer will use for first layer. Set zero to disable acceleration control for first layer.";
327
Options["first_layer_acceleration"].sidetext = "mm/sĀ²";
328
Options["first_layer_acceleration"].cli = "first-layer-acceleration=f";
330
Options["first_layer_bed_temperature"].type = coInt;
331
Options["first_layer_bed_temperature"].label = "First layer";
332
Options["first_layer_bed_temperature"].tooltip = "Heated build plate temperature for the first layer. Set this to zero to disable bed temperature control commands in the output.";
333
Options["first_layer_bed_temperature"].sidetext = "Ā°C";
334
Options["first_layer_bed_temperature"].cli = "first-layer-bed-temperature=i";
335
Options["first_layer_bed_temperature"].max = 0;
336
Options["first_layer_bed_temperature"].max = 300;
338
Options["first_layer_extrusion_width"].type = coFloatOrPercent;
339
Options["first_layer_extrusion_width"].label = "First layer";
340
Options["first_layer_extrusion_width"].tooltip = "Set this to a non-zero value to set a manual extrusion width for first layer. You can use this to force fatter extrudates for better adhesion. If expressed as percentage (for example 120%) it will be computed over first layer height.";
341
Options["first_layer_extrusion_width"].sidetext = "mm or % (leave 0 for default)";
342
Options["first_layer_extrusion_width"].cli = "first-layer-extrusion-width=s";
343
Options["first_layer_extrusion_width"].ratio_over = "first_layer_height";
345
Options["first_layer_height"].type = coFloatOrPercent;
346
Options["first_layer_height"].label = "First layer height";
347
Options["first_layer_height"].category = "Layers and Perimeters";
348
Options["first_layer_height"].tooltip = "When printing with very low layer heights, you might still want to print a thicker bottom layer to improve adhesion and tolerance for non perfect build plates. This can be expressed as an absolute value or as a percentage (for example: 150%) over the default layer height.";
349
Options["first_layer_height"].sidetext = "mm or %";
350
Options["first_layer_height"].cli = "first-layer-height=s";
351
Options["first_layer_height"].ratio_over = "layer_height";
353
Options["first_layer_speed"].type = coFloatOrPercent;
354
Options["first_layer_speed"].label = "First layer speed";
355
Options["first_layer_speed"].tooltip = "If expressed as absolute value in mm/s, this speed will be applied to all the print moves of the first layer, regardless of their type. If expressed as a percentage (for example: 40%) it will scale the default speeds.";
356
Options["first_layer_speed"].sidetext = "mm/s or %";
357
Options["first_layer_speed"].cli = "first-layer-speed=s";
359
Options["first_layer_temperature"].type = coInts;
360
Options["first_layer_temperature"].label = "First layer";
361
Options["first_layer_temperature"].tooltip = "Extruder temperature for first layer. If you want to control temperature manually during print, set this to zero to disable temperature control commands in the output file.";
362
Options["first_layer_temperature"].sidetext = "Ā°C";
363
Options["first_layer_temperature"].cli = "first-layer-temperature=i@";
364
Options["first_layer_temperature"].max = 0;
365
Options["first_layer_temperature"].max = 400;
367
Options["g0"].type = coBool;
368
Options["g0"].label = "Use G0 for travel moves";
369
Options["g0"].tooltip = "Only enable this if your firmware supports G0 properly (thus decouples all axes using their maximum speeds instead of synchronizing them). Travel moves and retractions will be combined in single commands, speeding them print up.";
370
Options["g0"].cli = "g0!";
372
Options["gap_fill_speed"].type = coFloat;
373
Options["gap_fill_speed"].label = "Gap fill";
374
Options["gap_fill_speed"].category = "Speed";
375
Options["gap_fill_speed"].tooltip = "Speed for filling small gaps using short zigzag moves. Keep this reasonably low to avoid too much shaking and resonance issues. Set zero to disable gaps filling.";
376
Options["gap_fill_speed"].sidetext = "mm/s";
377
Options["gap_fill_speed"].cli = "gap-fill-speed=f";
379
Options["gcode_arcs"].type = coBool;
380
Options["gcode_arcs"].label = "Use native G-code arcs";
381
Options["gcode_arcs"].tooltip = "This experimental feature tries to detect arcs from segments and generates G2/G3 arc commands instead of multiple straight G1 commands.";
382
Options["gcode_arcs"].cli = "gcode-arcs!";
384
Options["gcode_comments"].type = coBool;
385
Options["gcode_comments"].label = "Verbose G-code";
386
Options["gcode_comments"].tooltip = "Enable this to get a commented G-code file, with each line explained by a descriptive text. If you print from SD card, the additional weight of the file could make your firmware slow down.";
387
Options["gcode_comments"].cli = "gcode-comments!";
389
Options["gcode_flavor"].type = coEnum;
390
Options["gcode_flavor"].label = "G-code flavor";
391
Options["gcode_flavor"].tooltip = "Some G/M-code commands, including temperature control and others, are not universal. Set this option to your printer's firmware to get a compatible output. The \"No extrusion\" flavor prevents Slic3r from exporting any extrusion value at all.";
392
Options["gcode_flavor"].cli = "gcode-flavor=s";
393
Options["gcode_flavor"].enum_keys_map = ConfigOptionEnum<GCodeFlavor>::get_enum_values();
394
Options["gcode_flavor"].enum_values.push_back("reprap");
395
Options["gcode_flavor"].enum_values.push_back("teacup");
396
Options["gcode_flavor"].enum_values.push_back("makerware");
397
Options["gcode_flavor"].enum_values.push_back("sailfish");
398
Options["gcode_flavor"].enum_values.push_back("mach3");
399
Options["gcode_flavor"].enum_values.push_back("no-extrusion");
400
Options["gcode_flavor"].enum_labels.push_back("RepRap (Marlin/Sprinter/Repetier)");
401
Options["gcode_flavor"].enum_labels.push_back("Teacup");
402
Options["gcode_flavor"].enum_labels.push_back("MakerWare (MakerBot)");
403
Options["gcode_flavor"].enum_labels.push_back("Sailfish (MakerBot)");
404
Options["gcode_flavor"].enum_labels.push_back("Mach3/LinuxCNC");
405
Options["gcode_flavor"].enum_labels.push_back("No extrusion");
407
Options["infill_acceleration"].type = coFloat;
408
Options["infill_acceleration"].label = "Infill";
409
Options["infill_acceleration"].tooltip = "This is the acceleration your printer will use for infill. Set zero to disable acceleration control for infill.";
410
Options["infill_acceleration"].sidetext = "mm/sĀ²";
411
Options["infill_acceleration"].cli = "infill-acceleration=f";
413
Options["infill_every_layers"].type = coInt;
414
Options["infill_every_layers"].label = "Combine infill every";
415
Options["infill_every_layers"].category = "Infill";
416
Options["infill_every_layers"].tooltip = "This feature allows to combine infill and speed up your print by extruding thicker infill layers while preserving thin perimeters, thus accuracy.";
417
Options["infill_every_layers"].sidetext = "layers";
418
Options["infill_every_layers"].cli = "infill-every-layers=i";
419
Options["infill_every_layers"].full_label = "Combine infill every n layers";
420
Options["infill_every_layers"].min = 1;
422
Options["infill_extruder"].type = coInt;
423
Options["infill_extruder"].label = "Infill extruder";
424
Options["infill_extruder"].category = "Extruders";
425
Options["infill_extruder"].tooltip = "The extruder to use when printing infill.";
426
Options["infill_extruder"].cli = "infill-extruder=i";
427
Options["infill_extruder"].min = 1;
429
Options["infill_extrusion_width"].type = coFloatOrPercent;
430
Options["infill_extrusion_width"].label = "Infill";
431
Options["infill_extrusion_width"].category = "Extrusion Width";
432
Options["infill_extrusion_width"].tooltip = "Set this to a non-zero value to set a manual extrusion width for infill. You may want to use fatter extrudates to speed up the infill and make your parts stronger. If expressed as percentage (for example 90%) it will be computed over layer height.";
433
Options["infill_extrusion_width"].sidetext = "mm or % (leave 0 for default)";
434
Options["infill_extrusion_width"].cli = "infill-extrusion-width=s";
436
Options["infill_first"].type = coBool;
437
Options["infill_first"].label = "Infill before perimeters";
438
Options["infill_first"].tooltip = "This option will switch the print order of perimeters and infill, making the latter first.";
439
Options["infill_first"].cli = "infill-first!";
441
Options["infill_only_where_needed"].type = coBool;
442
Options["infill_only_where_needed"].label = "Only infill where needed";
443
Options["infill_only_where_needed"].category = "Infill";
444
Options["infill_only_where_needed"].tooltip = "This option will limit infill to the areas actually needed for supporting ceilings (it will act as internal support material).";
445
Options["infill_only_where_needed"].cli = "infill-only-where-needed!";
447
Options["infill_speed"].type = coFloat;
448
Options["infill_speed"].label = "Infill";
449
Options["infill_speed"].category = "Speed";
450
Options["infill_speed"].tooltip = "Speed for printing the internal fill.";
451
Options["infill_speed"].sidetext = "mm/s";
452
Options["infill_speed"].cli = "infill-speed=f";
453
Options["infill_speed"].aliases.push_back("print_feed_rate");
454
Options["infill_speed"].aliases.push_back("infill_feed_rate");
456
Options["interface_shells"].type = coBool;
457
Options["interface_shells"].label = "Interface shells";
458
Options["interface_shells"].tooltip = "Force the generation of solid shells between adjacent materials/volumes. Useful for multi-extruder prints with translucent materials or manual soluble support material.";
459
Options["interface_shells"].cli = "interface-shells!";
460
Options["interface_shells"].category = "Layers and Perimeters";
462
Options["layer_gcode"].type = coString;
463
Options["layer_gcode"].label = "Layer change G-code";
464
Options["layer_gcode"].tooltip = "This custom code is inserted at every layer change, right after the Z move and before the extruder moves to the first layer point. Note that you can use placeholder variables for all Slic3r settings.";
465
Options["layer_gcode"].cli = "layer-gcode=s";
466
Options["layer_gcode"].multiline = true;
467
Options["layer_gcode"].full_width = true;
468
Options["layer_gcode"].height = 50;
470
Options["layer_height"].type = coFloat;
471
Options["layer_height"].label = "Layer height";
472
Options["layer_height"].category = "Layers and Perimeters";
473
Options["layer_height"].tooltip = "This setting controls the height (and thus the total number) of the slices/layers. Thinner layers give better accuracy but take more time to print.";
474
Options["layer_height"].sidetext = "mm";
475
Options["layer_height"].cli = "layer-height=f";
477
Options["max_fan_speed"].type = coInt;
478
Options["max_fan_speed"].label = "Max";
479
Options["max_fan_speed"].tooltip = "This setting represents the maximum speed of your fan.";
480
Options["max_fan_speed"].sidetext = "%";
481
Options["max_fan_speed"].cli = "max-fan-speed=i";
482
Options["max_fan_speed"].max = 100;
484
Options["min_fan_speed"].type = coInt;
485
Options["min_fan_speed"].label = "Min";
486
Options["min_fan_speed"].tooltip = "This setting represents the minimum PWM your fan needs to work.";
487
Options["min_fan_speed"].sidetext = "%";
488
Options["min_fan_speed"].cli = "min-fan-speed=i";
489
Options["min_fan_speed"].max = 100;
491
Options["min_print_speed"].type = coInt;
492
Options["min_print_speed"].label = "Min print speed";
493
Options["min_print_speed"].tooltip = "Slic3r will not scale speed down below this speed.";
494
Options["min_print_speed"].sidetext = "mm/s";
495
Options["min_print_speed"].cli = "min-print-speed=f";
496
Options["min_print_speed"].max = 1000;
498
Options["min_skirt_length"].type = coFloat;
499
Options["min_skirt_length"].label = "Minimum extrusion length";
500
Options["min_skirt_length"].tooltip = "Generate no less than the number of skirt loops required to consume the specified amount of filament on the bottom layer. For multi-extruder machines, this minimum applies to each extruder.";
501
Options["min_skirt_length"].sidetext = "mm";
502
Options["min_skirt_length"].cli = "min-skirt-length=f";
503
Options["min_skirt_length"].min = 0;
505
Options["notes"].type = coString;
506
Options["notes"].label = "Configuration notes";
507
Options["notes"].tooltip = "You can put here your personal notes. This text will be added to the G-code header comments.";
508
Options["notes"].cli = "notes=s";
509
Options["notes"].multiline = true;
510
Options["notes"].full_width = true;
511
Options["notes"].height = 130;
513
Options["nozzle_diameter"].type = coFloats;
514
Options["nozzle_diameter"].label = "Nozzle diameter";
515
Options["nozzle_diameter"].tooltip = "This is the diameter of your extruder nozzle (for example: 0.5, 0.35 etc.)";
516
Options["nozzle_diameter"].sidetext = "mm";
517
Options["nozzle_diameter"].cli = "nozzle-diameter=f@";
519
Options["only_retract_when_crossing_perimeters"].type = coBool;
520
Options["only_retract_when_crossing_perimeters"].label = "Only retract when crossing perimeters";
521
Options["only_retract_when_crossing_perimeters"].tooltip = "Disables retraction when the travel path does not exceed the upper layer's perimeters (and thus any ooze will be probably invisible).";
522
Options["only_retract_when_crossing_perimeters"].cli = "only-retract-when-crossing-perimeters!";
524
Options["ooze_prevention"].type = coBool;
525
Options["ooze_prevention"].label = "Enable";
526
Options["ooze_prevention"].tooltip = "This option will drop the temperature of the inactive extruders to prevent oozing. It will enable a tall skirt automatically and move extruders outside such skirt when changing temperatures.";
527
Options["ooze_prevention"].cli = "ooze-prevention!";
529
Options["output_filename_format"].type = coString;
530
Options["output_filename_format"].label = "Output filename format";
531
Options["output_filename_format"].tooltip = "You can use all configuration options as variables inside this template. For example: [layer_height], [fill_density] etc. You can also use [timestamp], [year], [month], [day], [hour], [minute], [second], [version], [input_filename], [input_filename_base].";
532
Options["output_filename_format"].cli = "output-filename-format=s";
533
Options["output_filename_format"].full_width = true;
535
Options["overhangs"].type = coBool;
536
Options["overhangs"].label = "Detect bridging perimeters";
537
Options["overhangs"].category = "Layers and Perimeters";
538
Options["overhangs"].tooltip = "Experimental option to adjust flow for overhangs (bridge flow will be used), to apply bridge speed to them and enable fan.";
539
Options["overhangs"].cli = "overhangs!";
541
Options["perimeter_acceleration"].type = coFloat;
542
Options["perimeter_acceleration"].label = "Perimeters";
543
Options["perimeter_acceleration"].tooltip = "This is the acceleration your printer will use for perimeters. A high value like 9000 usually gives good results if your hardware is up to the job. Set zero to disable acceleration control for perimeters.";
544
Options["perimeter_acceleration"].sidetext = "mm/sĀ²";
545
Options["perimeter_acceleration"].cli = "perimeter-acceleration=f";
547
Options["perimeter_extruder"].type = coInt;
548
Options["perimeter_extruder"].label = "Perimeter extruder";
549
Options["perimeter_extruder"].category = "Extruders";
550
Options["perimeter_extruder"].tooltip = "The extruder to use when printing perimeters. First extruder is 1.";
551
Options["perimeter_extruder"].cli = "perimeter-extruder=i";
552
Options["perimeter_extruder"].aliases.push_back("perimeters_extruder");
553
Options["perimeter_extruder"].min = 1;
555
Options["perimeter_extrusion_width"].type = coFloatOrPercent;
556
Options["perimeter_extrusion_width"].label = "Perimeters";
557
Options["perimeter_extrusion_width"].category = "Extrusion Width";
558
Options["perimeter_extrusion_width"].tooltip = "Set this to a non-zero value to set a manual extrusion width for perimeters. You may want to use thinner extrudates to get more accurate surfaces. If expressed as percentage (for example 90%) it will be computed over layer height.";
559
Options["perimeter_extrusion_width"].sidetext = "mm or % (leave 0 for default)";
560
Options["perimeter_extrusion_width"].cli = "perimeter-extrusion-width=s";
561
Options["perimeter_extrusion_width"].aliases.push_back("perimeters_extrusion_width");
563
Options["perimeter_speed"].type = coFloat;
564
Options["perimeter_speed"].label = "Perimeters";
565
Options["perimeter_speed"].category = "Speed";
566
Options["perimeter_speed"].tooltip = "Speed for perimeters (contours, aka vertical shells).";
567
Options["perimeter_speed"].sidetext = "mm/s";
568
Options["perimeter_speed"].cli = "perimeter-speed=f";
569
Options["perimeter_speed"].aliases.push_back("perimeter_feed_rate");
571
Options["perimeters"].type = coInt;
572
Options["perimeters"].label = "Perimeters (minimum)";
573
Options["perimeters"].category = "Layers and Perimeters";
574
Options["perimeters"].tooltip = "This option sets the number of perimeters to generate for each layer. Note that Slic3r may increase this number automatically when it detects sloping surfaces which benefit from a higher number of perimeters if the Extra Perimeters option is enabled.";
575
Options["perimeters"].cli = "perimeters=i";
576
Options["perimeters"].aliases.push_back("perimeter_offsets");
578
Options["post_process"].type = coStrings;
579
Options["post_process"].label = "Post-processing scripts";
580
Options["post_process"].tooltip = "If you want to process the output G-code through custom scripts, just list their absolute paths here. Separate multiple scripts with a semicolon. Scripts will be passed the absolute path to the G-code file as the first argument, and they can access the Slic3r config settings by reading environment variables.";
581
Options["post_process"].cli = "post-process=s@";
582
Options["post_process"].multiline = true;
583
Options["post_process"].full_width = true;
584
Options["post_process"].height = 60;
586
Options["print_center"].type = coPoint;
587
Options["print_center"].label = "Print center";
588
Options["print_center"].tooltip = "These G-code coordinates are used to center your plater viewport.";
589
Options["print_center"].sidetext = "mm";
590
Options["print_center"].cli = "print-center=s";
592
Options["raft_layers"].type = coInt;
593
Options["raft_layers"].label = "Raft layers";
594
Options["raft_layers"].category = "Support material";
595
Options["raft_layers"].tooltip = "The object will be raised by this number of layers, and support material will be generated under it.";
596
Options["raft_layers"].sidetext = "layers";
597
Options["raft_layers"].cli = "raft-layers=i";
599
Options["resolution"].type = coFloat;
600
Options["resolution"].label = "Resolution";
601
Options["resolution"].tooltip = "Minimum detail resolution, used to simplify the input file for speeding up the slicing job and reducing memory usage. High-resolution models often carry more detail than printers can render. Set to zero to disable any simplification and use full resolution from input.";
602
Options["resolution"].sidetext = "mm";
603
Options["resolution"].cli = "resolution=f";
604
Options["resolution"].min = 0;
606
Options["retract_before_travel"].type = coFloats;
607
Options["retract_before_travel"].label = "Minimum travel after retraction";
608
Options["retract_before_travel"].tooltip = "Retraction is not triggered when travel moves are shorter than this length.";
609
Options["retract_before_travel"].sidetext = "mm";
610
Options["retract_before_travel"].cli = "retract-before-travel=f@";
612
Options["retract_layer_change"].type = coBools;
613
Options["retract_layer_change"].label = "Retract on layer change";
614
Options["retract_layer_change"].tooltip = "This flag enforces a retraction whenever a Z move is done.";
615
Options["retract_layer_change"].cli = "retract-layer-change!";
617
Options["retract_length"].type = coFloats;
618
Options["retract_length"].label = "Length";
619
Options["retract_length"].tooltip = "When retraction is triggered, filament is pulled back by the specified amount (the length is measured on raw filament, before it enters the extruder).";
620
Options["retract_length"].sidetext = "mm (zero to disable)";
621
Options["retract_length"].cli = "retract-length=f@";
623
Options["retract_length_toolchange"].type = coFloats;
624
Options["retract_length_toolchange"].label = "Length";
625
Options["retract_length_toolchange"].tooltip = "When retraction is triggered before changing tool, filament is pulled back by the specified amount (the length is measured on raw filament, before it enters the extruder).";
626
Options["retract_length_toolchange"].sidetext = "mm (zero to disable)";
627
Options["retract_length_toolchange"].cli = "retract-length-toolchange=f@";
629
Options["retract_lift"].type = coFloats;
630
Options["retract_lift"].label = "Lift Z";
631
Options["retract_lift"].tooltip = "If you set this to a positive value, Z is quickly raised every time a retraction is triggered. When using multiple extruders, only the setting for the first extruder will be considered.";
632
Options["retract_lift"].sidetext = "mm";
633
Options["retract_lift"].cli = "retract-lift=f@";
635
Options["retract_restart_extra"].type = coFloats;
636
Options["retract_restart_extra"].label = "Extra length on restart";
637
Options["retract_restart_extra"].tooltip = "When the retraction is compensated after the travel move, the extruder will push this additional amount of filament. This setting is rarely needed.";
638
Options["retract_restart_extra"].sidetext = "mm";
639
Options["retract_restart_extra"].cli = "retract-restart-extra=f@";
641
Options["retract_restart_extra_toolchange"].type = coFloats;
642
Options["retract_restart_extra_toolchange"].label = "Extra length on restart";
643
Options["retract_restart_extra_toolchange"].tooltip = "When the retraction is compensated after changing tool, the extruder will push this additional amount of filament.";
644
Options["retract_restart_extra_toolchange"].sidetext = "mm";
645
Options["retract_restart_extra_toolchange"].cli = "retract-restart-extra-toolchange=f@";
647
Options["retract_speed"].type = coInts;
648
Options["retract_speed"].label = "Speed";
649
Options["retract_speed"].tooltip = "The speed for retractions (it only applies to the extruder motor).";
650
Options["retract_speed"].sidetext = "mm/s";
651
Options["retract_speed"].cli = "retract-speed=f@";
652
Options["retract_speed"].max = 1000;
654
Options["seam_position"].type = coEnum;
655
Options["seam_position"].label = "Seam position";
656
Options["seam_position"].category = "Layers and perimeters";
657
Options["seam_position"].tooltip = "Position of perimeters starting points.";
658
Options["seam_position"].cli = "seam-position=s";
659
Options["seam_position"].enum_keys_map = ConfigOptionEnum<SeamPosition>::get_enum_values();
660
Options["seam_position"].enum_values.push_back("random");
661
Options["seam_position"].enum_values.push_back("nearest");
662
Options["seam_position"].enum_values.push_back("aligned");
663
Options["seam_position"].enum_labels.push_back("Random");
664
Options["seam_position"].enum_labels.push_back("Nearest");
665
Options["seam_position"].enum_labels.push_back("Aligned");
667
Options["skirt_distance"].type = coFloat;
668
Options["skirt_distance"].label = "Distance from object";
669
Options["skirt_distance"].tooltip = "Distance between skirt and object(s). Set this to zero to attach the skirt to the object(s) and get a brim for better adhesion.";
670
Options["skirt_distance"].sidetext = "mm";
671
Options["skirt_distance"].cli = "skirt-distance=f";
673
Options["skirt_height"].type = coInt;
674
Options["skirt_height"].label = "Skirt height";
675
Options["skirt_height"].tooltip = "Height of skirt expressed in layers. Set this to a tall value to use skirt as a shield against drafts.";
676
Options["skirt_height"].sidetext = "layers";
677
Options["skirt_height"].cli = "skirt-height=i";
679
Options["skirts"].type = coInt;
680
Options["skirts"].label = "Loops";
681
Options["skirts"].tooltip = "Number of loops for this skirt, in other words its thickness. Set this to zero to disable skirt.";
682
Options["skirts"].cli = "skirts=i";
684
Options["slowdown_below_layer_time"].type = coInt;
685
Options["slowdown_below_layer_time"].label = "Slow down if layer print time is below";
686
Options["slowdown_below_layer_time"].tooltip = "If layer print time is estimated below this number of seconds, print moves speed will be scaled down to extend duration to this value.";
687
Options["slowdown_below_layer_time"].sidetext = "approximate seconds";
688
Options["slowdown_below_layer_time"].cli = "slowdown-below-layer-time=i";
689
Options["slowdown_below_layer_time"].width = 60;
690
Options["slowdown_below_layer_time"].max = 1000;
692
Options["small_perimeter_speed"].type = coFloatOrPercent;
693
Options["small_perimeter_speed"].label = "Small perimeters";
694
Options["small_perimeter_speed"].category = "Speed";
695
Options["small_perimeter_speed"].tooltip = "This separate setting will affect the speed of perimeters having radius <= 6.5mm (usually holes). If expressed as percentage (for example: 80%) it will be calculated on the perimeters speed setting above.";
696
Options["small_perimeter_speed"].sidetext = "mm/s or %";
697
Options["small_perimeter_speed"].cli = "small-perimeter-speed=s";
698
Options["small_perimeter_speed"].ratio_over = "perimeter_speed";
700
Options["solid_fill_pattern"].type = coEnum;
701
Options["solid_fill_pattern"].label = "Top/bottom fill pattern";
702
Options["solid_fill_pattern"].category = "Infill";
703
Options["solid_fill_pattern"].tooltip = "Fill pattern for top/bottom infill.";
704
Options["solid_fill_pattern"].cli = "solid-fill-pattern=s";
705
Options["solid_fill_pattern"].enum_keys_map = ConfigOptionEnum<InfillPattern>::get_enum_values();
706
Options["solid_fill_pattern"].enum_values.push_back("rectilinear");
707
Options["solid_fill_pattern"].enum_values.push_back("concentric");
708
Options["solid_fill_pattern"].enum_values.push_back("hilbertcurve");
709
Options["solid_fill_pattern"].enum_values.push_back("archimedeanchords");
710
Options["solid_fill_pattern"].enum_values.push_back("octagramspiral");
711
Options["solid_fill_pattern"].enum_labels.push_back("rectilinear");
712
Options["solid_fill_pattern"].enum_labels.push_back("concentric");
713
Options["solid_fill_pattern"].enum_labels.push_back("hilbertcurve (slow)");
714
Options["solid_fill_pattern"].enum_labels.push_back("archimedeanchords (slow)");
715
Options["solid_fill_pattern"].enum_labels.push_back("octagramspiral (slow)");
717
Options["solid_infill_below_area"].type = coFloat;
718
Options["solid_infill_below_area"].label = "Solid infill threshold area";
719
Options["solid_infill_below_area"].category = "Infill";
720
Options["solid_infill_below_area"].tooltip = "Force solid infill for regions having a smaller area than the specified threshold.";
721
Options["solid_infill_below_area"].sidetext = "mmĀ²";
722
Options["solid_infill_below_area"].cli = "solid-infill-below-area=f";
724
Options["solid_infill_every_layers"].type = coInt;
725
Options["solid_infill_every_layers"].label = "Solid infill every";
726
Options["solid_infill_every_layers"].category = "Infill";
727
Options["solid_infill_every_layers"].tooltip = "This feature allows to force a solid layer every given number of layers. Zero to disable. You can set this to any value (for example 9999); Slic3r will automatically choose the maximum possible number of layers to combine according to nozzle diameter and layer height.";
728
Options["solid_infill_every_layers"].sidetext = "layers";
729
Options["solid_infill_every_layers"].cli = "solid-infill-every-layers=i";
730
Options["solid_infill_every_layers"].min = 0;
732
Options["solid_infill_extrusion_width"].type = coFloatOrPercent;
733
Options["solid_infill_extrusion_width"].label = "Solid infill";
734
Options["solid_infill_extrusion_width"].category = "Extrusion Width";
735
Options["solid_infill_extrusion_width"].tooltip = "Set this to a non-zero value to set a manual extrusion width for infill for solid surfaces. If expressed as percentage (for example 90%) it will be computed over layer height.";
736
Options["solid_infill_extrusion_width"].sidetext = "mm or % (leave 0 for default)";
737
Options["solid_infill_extrusion_width"].cli = "solid-infill-extrusion-width=s";
739
Options["solid_infill_speed"].type = coFloatOrPercent;
740
Options["solid_infill_speed"].label = "Solid infill";
741
Options["solid_infill_speed"].category = "Speed";
742
Options["solid_infill_speed"].tooltip = "Speed for printing solid regions (top/bottom/internal horizontal shells). This can be expressed as a percentage (for example: 80%) over the default infill speed above.";
743
Options["solid_infill_speed"].sidetext = "mm/s or %";
744
Options["solid_infill_speed"].cli = "solid-infill-speed=s";
745
Options["solid_infill_speed"].ratio_over = "infill_speed";
746
Options["solid_infill_speed"].aliases.push_back("solid_infill_feed_rate");
748
Options["solid_layers"].type = coInt;
749
Options["solid_layers"].label = "Solid layers";
750
Options["solid_layers"].tooltip = "Number of solid layers to generate on top and bottom surfaces.";
751
Options["solid_layers"].cli = "solid-layers=i";
752
Options["solid_layers"].shortcut.push_back("top_solid_layers");
753
Options["solid_layers"].shortcut.push_back("bottom_solid_layers");
755
Options["spiral_vase"].type = coBool;
756
Options["spiral_vase"].label = "Spiral vase";
757
Options["spiral_vase"].tooltip = "This experimental feature will raise Z gradually while printing a single-walled object in order to remove any visible seam. By enabling this option other settings will be overridden to enforce a single perimeter, no infill, no top solid layers, no support material. You can still set any number of bottom solid layers as well as skirt/brim loops. It won't work when printing more than an object.";
758
Options["spiral_vase"].cli = "spiral-vase!";
760
Options["standby_temperature_delta"].type = coInt;
761
Options["standby_temperature_delta"].label = "Temperature variation";
762
Options["standby_temperature_delta"].tooltip = "Temperature difference to be applied when an extruder is not active.";
763
Options["standby_temperature_delta"].sidetext = "āĀ°C";
764
Options["standby_temperature_delta"].cli = "standby-temperature-delta=i";
765
Options["standby_temperature_delta"].min = -400;
766
Options["standby_temperature_delta"].max = 400;
768
Options["start_gcode"].type = coString;
769
Options["start_gcode"].label = "Start G-code";
770
Options["start_gcode"].tooltip = "This start procedure is inserted at the beginning, after bed has reached the target temperature and extruder just started heating, and before extruder has finished heating. If Slic3r detects M104 or M190 in your custom codes, such commands will not be prepended automatically so you're free to customize the order of heating commands and other custom actions. Note that you can use placeholder variables for all Slic3r settings, so you can put a \"M109 S[first_layer_temperature]\" command wherever you want.";
771
Options["start_gcode"].cli = "start-gcode=s";
772
Options["start_gcode"].multiline = true;
773
Options["start_gcode"].full_width = true;
774
Options["start_gcode"].height = 120;
776
Options["support_material"].type = coBool;
777
Options["support_material"].label = "Generate support material";
778
Options["support_material"].category = "Support material";
779
Options["support_material"].tooltip = "Enable support material generation.";
780
Options["support_material"].cli = "support-material!";
782
Options["support_material_angle"].type = coInt;
783
Options["support_material_angle"].label = "Pattern angle";
784
Options["support_material_angle"].category = "Support material";
785
Options["support_material_angle"].tooltip = "Use this setting to rotate the support material pattern on the horizontal plane.";
786
Options["support_material_angle"].sidetext = "Ā°";
787
Options["support_material_angle"].cli = "support-material-angle=i";
789
Options["support_material_enforce_layers"].type = coInt;
790
Options["support_material_enforce_layers"].label = "Enforce support for the first";
791
Options["support_material_enforce_layers"].category = "Support material";
792
Options["support_material_enforce_layers"].tooltip = "Generate support material for the specified number of layers counting from bottom, regardless of whether normal support material is enabled or not and regardless of any angle threshold. This is useful for getting more adhesion of objects having a very thin or poor footprint on the build plate.";
793
Options["support_material_enforce_layers"].sidetext = "layers";
794
Options["support_material_enforce_layers"].cli = "support-material-enforce-layers=f";
795
Options["support_material_enforce_layers"].full_label = "Enforce support for the first n layers";
797
Options["support_material_extruder"].type = coInt;
798
Options["support_material_extruder"].label = "Support material extruder";
799
Options["support_material_extruder"].category = "Extruders";
800
Options["support_material_extruder"].tooltip = "The extruder to use when printing support material. This affects brim and raft too.";
801
Options["support_material_extruder"].cli = "support-material-extruder=i";
802
Options["support_material_extruder"].min = 1;
804
Options["support_material_extrusion_width"].type = coFloatOrPercent;
805
Options["support_material_extrusion_width"].label = "Support material";
806
Options["support_material_extrusion_width"].category = "Extrusion Width";
807
Options["support_material_extrusion_width"].tooltip = "Set this to a non-zero value to set a manual extrusion width for support material. If expressed as percentage (for example 90%) it will be computed over layer height.";
808
Options["support_material_extrusion_width"].sidetext = "mm or % (leave 0 for default)";
809
Options["support_material_extrusion_width"].cli = "support-material-extrusion-width=s";
811
Options["support_material_interface_extruder"].type = coInt;
812
Options["support_material_interface_extruder"].label = "Support material interface extruder";
813
Options["support_material_interface_extruder"].category = "Extruders";
814
Options["support_material_interface_extruder"].tooltip = "The extruder to use when printing support material interface. This affects raft too.";
815
Options["support_material_interface_extruder"].cli = "support-material-interface-extruder=i";
816
Options["support_material_interface_extruder"].min = 1;
818
Options["support_material_interface_layers"].type = coInt;
819
Options["support_material_interface_layers"].label = "Interface layers";
820
Options["support_material_interface_layers"].category = "Support material";
821
Options["support_material_interface_layers"].tooltip = "Number of interface layers to insert between the object(s) and support material.";
822
Options["support_material_interface_layers"].sidetext = "layers";
823
Options["support_material_interface_layers"].cli = "support-material-interface-layers=i";
825
Options["support_material_interface_spacing"].type = coFloat;
826
Options["support_material_interface_spacing"].label = "Interface pattern spacing";
827
Options["support_material_interface_spacing"].category = "Support material";
828
Options["support_material_interface_spacing"].tooltip = "Spacing between interface lines. Set zero to get a solid interface.";
829
Options["support_material_interface_spacing"].sidetext = "mm";
830
Options["support_material_interface_spacing"].cli = "support-material-interface-spacing=f";
832
Options["support_material_interface_speed"].type = coFloatOrPercent;
833
Options["support_material_interface_speed"].label = "Support material interface";
834
Options["support_material_interface_speed"].category = "Support material";
835
Options["support_material_interface_speed"].tooltip = "Speed for printing support material interface layers. If expressed as percentage (for example 50%) it will be calculated over support material speed.";
836
Options["support_material_interface_speed"].sidetext = "mm/s or %";
837
Options["support_material_interface_speed"].cli = "support-material-interface-speed=s";
838
Options["support_material_interface_speed"].ratio_over = "support_material_speed";
840
Options["support_material_pattern"].type = coEnum;
841
Options["support_material_pattern"].label = "Pattern";
842
Options["support_material_pattern"].category = "Support material";
843
Options["support_material_pattern"].tooltip = "Pattern used to generate support material.";
844
Options["support_material_pattern"].cli = "support-material-pattern=s";
845
Options["support_material_pattern"].enum_keys_map = ConfigOptionEnum<SupportMaterialPattern>::get_enum_values();
846
Options["support_material_pattern"].enum_values.push_back("rectilinear");
847
Options["support_material_pattern"].enum_values.push_back("rectilinear-grid");
848
Options["support_material_pattern"].enum_values.push_back("honeycomb");
849
Options["support_material_pattern"].enum_values.push_back("pillars");
850
Options["support_material_pattern"].enum_labels.push_back("rectilinear");
851
Options["support_material_pattern"].enum_labels.push_back("rectilinear grid");
852
Options["support_material_pattern"].enum_labels.push_back("honeycomb");
853
Options["support_material_pattern"].enum_labels.push_back("pillars");
855
Options["support_material_spacing"].type = coFloat;
856
Options["support_material_spacing"].label = "Pattern spacing";
857
Options["support_material_spacing"].category = "Support material";
858
Options["support_material_spacing"].tooltip = "Spacing between support material lines.";
859
Options["support_material_spacing"].sidetext = "mm";
860
Options["support_material_spacing"].cli = "support-material-spacing=f";
862
Options["support_material_speed"].type = coFloat;
863
Options["support_material_speed"].label = "Support material";
864
Options["support_material_speed"].category = "Support material";
865
Options["support_material_speed"].tooltip = "Speed for printing support material.";
866
Options["support_material_speed"].sidetext = "mm/s";
867
Options["support_material_speed"].cli = "support-material-speed=f";
869
Options["support_material_threshold"].type = coInt;
870
Options["support_material_threshold"].label = "Overhang threshold";
871
Options["support_material_threshold"].category = "Support material";
872
Options["support_material_threshold"].tooltip = "Support material will not be generated for overhangs whose slope angle (90Ā° = vertical) is above the given threshold. In other words, this value represent the most horizontal slope (measured from the horizontal plane) that you can print without support material. Set to zero for automatic detection (recommended).";
873
Options["support_material_threshold"].sidetext = "Ā°";
874
Options["support_material_threshold"].cli = "support-material-threshold=i";
876
Options["temperature"].type = coInts;
877
Options["temperature"].label = "Other layers";
878
Options["temperature"].tooltip = "Extruder temperature for layers after the first one. Set this to zero to disable temperature control commands in the output.";
879
Options["temperature"].sidetext = "Ā°C";
880
Options["temperature"].cli = "temperature=i@";
881
Options["temperature"].full_label = "Temperature";
882
Options["temperature"].max = 0;
883
Options["temperature"].max = 400;
885
Options["thin_walls"].type = coBool;
886
Options["thin_walls"].label = "Detect thin walls";
887
Options["thin_walls"].category = "Layers and Perimeters";
888
Options["thin_walls"].tooltip = "Detect single-width walls (parts where two extrusions don't fit and we need to collapse them into a single trace).";
889
Options["thin_walls"].cli = "thin-walls!";
891
Options["threads"].type = coInt;
892
Options["threads"].label = "Threads";
893
Options["threads"].tooltip = "Threads are used to parallelize long-running tasks. Optimal threads number is slightly above the number of available cores/processors. Beware that more threads consume more memory.";
894
Options["threads"].sidetext = "(more speed but more memory usage)";
895
Options["threads"].cli = "threads|j=i";
896
Options["threads"].readonly = true;
897
Options["threads"].min = 1;
898
Options["threads"].max = 16;
900
Options["toolchange_gcode"].type = coString;
901
Options["toolchange_gcode"].label = "Tool change G-code";
902
Options["toolchange_gcode"].tooltip = "This custom code is inserted at every extruder change. Note that you can use placeholder variables for all Slic3r settings as well as [previous_extruder] and [next_extruder].";
903
Options["toolchange_gcode"].cli = "toolchange-gcode=s";
904
Options["toolchange_gcode"].multiline = true;
905
Options["toolchange_gcode"].full_width = true;
906
Options["toolchange_gcode"].height = 50;
908
Options["top_infill_extrusion_width"].type = coFloatOrPercent;
909
Options["top_infill_extrusion_width"].label = "Top solid infill";
910
Options["top_infill_extrusion_width"].category = "Extrusion Width";
911
Options["top_infill_extrusion_width"].tooltip = "Set this to a non-zero value to set a manual extrusion width for infill for top surfaces. You may want to use thinner extrudates to fill all narrow regions and get a smoother finish. If expressed as percentage (for example 90%) it will be computed over layer height.";
912
Options["top_infill_extrusion_width"].sidetext = "mm or % (leave 0 for default)";
913
Options["top_infill_extrusion_width"].cli = "top-infill-extrusion-width=s";
915
Options["top_solid_infill_speed"].type = coFloatOrPercent;
916
Options["top_solid_infill_speed"].label = "Top solid infill";
917
Options["top_solid_infill_speed"].category = "Speed";
918
Options["top_solid_infill_speed"].tooltip = "Speed for printing top solid layers (it only applies to the uppermost external layers and not to their internal solid layers). You may want to slow down this to get a nicer surface finish. This can be expressed as a percentage (for example: 80%) over the solid infill speed above.";
919
Options["top_solid_infill_speed"].sidetext = "mm/s or %";
920
Options["top_solid_infill_speed"].cli = "top-solid-infill-speed=s";
921
Options["top_solid_infill_speed"].ratio_over = "solid_infill_speed";
923
Options["top_solid_layers"].type = coInt;
924
Options["top_solid_layers"].label = "Top";
925
Options["top_solid_layers"].category = "Layers and Perimeters";
926
Options["top_solid_layers"].tooltip = "Number of solid layers to generate on top surfaces.";
927
Options["top_solid_layers"].cli = "top-solid-layers=i";
928
Options["top_solid_layers"].full_label = "Top solid layers";
930
Options["travel_speed"].type = coFloat;
931
Options["travel_speed"].label = "Travel";
932
Options["travel_speed"].tooltip = "Speed for travel moves (jumps between distant extrusion points).";
933
Options["travel_speed"].sidetext = "mm/s";
934
Options["travel_speed"].cli = "travel-speed=f";
935
Options["travel_speed"].aliases.push_back("travel_feed_rate");
937
Options["use_firmware_retraction"].type = coBool;
938
Options["use_firmware_retraction"].label = "Use firmware retraction";
939
Options["use_firmware_retraction"].tooltip = "This experimental setting uses G10 and G11 commands to have the firmware handle the retraction. This is only supported in recent Marlin.";
940
Options["use_firmware_retraction"].cli = "use-firmware-retraction!";
942
Options["use_relative_e_distances"].type = coBool;
943
Options["use_relative_e_distances"].label = "Use relative E distances";
944
Options["use_relative_e_distances"].tooltip = "If your firmware requires relative E values, check this, otherwise leave it unchecked. Most firmwares use absolute values.";
945
Options["use_relative_e_distances"].cli = "use-relative-e-distances!";
947
Options["vibration_limit"].type = coFloat;
948
Options["vibration_limit"].label = "Vibration limit";
949
Options["vibration_limit"].tooltip = "This experimental option will slow down those moves hitting the configured frequency limit. The purpose of limiting vibrations is to avoid mechanical resonance. Set zero to disable.";
950
Options["vibration_limit"].sidetext = "Hz";
951
Options["vibration_limit"].cli = "vibration-limit=f";
953
Options["wipe"].type = coBools;
954
Options["wipe"].label = "Wipe while retracting";
955
Options["wipe"].tooltip = "This flag will move the nozzle while retracting to minimize the possible blob on leaky extruders.";
956
Options["wipe"].cli = "wipe!";
958
Options["z_offset"].type = coFloat;
959
Options["z_offset"].label = "Z offset";
960
Options["z_offset"].tooltip = "This value will be added (or subtracted) from all the Z coordinates in the output G-code. It is used to compensate for bad Z endstop position: for example, if your endstop zero actually leaves the nozzle 0.3mm far from the print bed, set this to -0.3 (or fix your endstop).";
961
Options["z_offset"].sidetext = "mm";
962
Options["z_offset"].cli = "z-offset=f";
968
class DynamicPrintConfig : public DynamicConfig
971
DynamicPrintConfig() {
972
this->def = &PrintConfigDef::def;
976
if (this->has("extruder")) {
977
int extruder = this->option("extruder")->getInt();
978
this->erase("extruder");
979
if (!this->has("infill_extruder"))
980
this->option("infill_extruder", true)->setInt(extruder);
981
if (!this->has("perimeter_extruder"))
982
this->option("perimeter_extruder", true)->setInt(extruder);
983
if (!this->has("support_material_extruder"))
984
this->option("support_material_extruder", true)->setInt(extruder);
985
if (!this->has("support_material_interface_extruder"))
986
this->option("support_material_interface_extruder", true)->setInt(extruder);
988
if (this->has("spiral_vase") && this->opt<ConfigOptionBool>("spiral_vase", true)->value) {
990
// this should be actually done only on the spiral layers instead of all
991
ConfigOptionBools* opt = this->opt<ConfigOptionBools>("retract_layer_change", true);
992
opt->values.assign(opt->values.size(), false); // set all values to false
998
class StaticPrintConfig : public virtual StaticConfig
1001
StaticPrintConfig() {
1002
this->def = &PrintConfigDef::def;
1006
class PrintObjectConfig : public virtual StaticPrintConfig
1009
ConfigOptionBool dont_support_bridges;
1010
ConfigOptionFloatOrPercent extrusion_width;
1011
ConfigOptionFloatOrPercent first_layer_height;
1012
ConfigOptionBool infill_only_where_needed;
1013
ConfigOptionBool interface_shells;
1014
ConfigOptionFloat layer_height;
1015
ConfigOptionInt raft_layers;
1016
ConfigOptionEnum<SeamPosition> seam_position;
1017
ConfigOptionBool support_material;
1018
ConfigOptionInt support_material_angle;
1019
ConfigOptionInt support_material_enforce_layers;
1020
ConfigOptionInt support_material_extruder;
1021
ConfigOptionFloatOrPercent support_material_extrusion_width;
1022
ConfigOptionInt support_material_interface_extruder;
1023
ConfigOptionInt support_material_interface_layers;
1024
ConfigOptionFloat support_material_interface_spacing;
1025
ConfigOptionFloatOrPercent support_material_interface_speed;
1026
ConfigOptionEnum<SupportMaterialPattern> support_material_pattern;
1027
ConfigOptionFloat support_material_spacing;
1028
ConfigOptionFloat support_material_speed;
1029
ConfigOptionInt support_material_threshold;
1031
PrintObjectConfig() : StaticPrintConfig() {
1032
this->dont_support_bridges.value = true;
1033
this->extrusion_width.value = 0;
1034
this->extrusion_width.percent = false;
1035
this->first_layer_height.value = 0.35;
1036
this->first_layer_height.percent = false;
1037
this->infill_only_where_needed.value = false;
1038
this->interface_shells.value = false;
1039
this->layer_height.value = 0.4;
1040
this->raft_layers.value = 0;
1041
this->seam_position.value = spAligned;
1042
this->support_material.value = false;
1043
this->support_material_angle.value = 0;
1044
this->support_material_enforce_layers.value = 0;
1045
this->support_material_extruder.value = 1;
1046
this->support_material_extrusion_width.value = 0;
1047
this->support_material_extrusion_width.percent = false;
1048
this->support_material_interface_extruder.value = 1;
1049
this->support_material_interface_layers.value = 3;
1050
this->support_material_interface_spacing.value = 0;
1051
this->support_material_interface_speed.value = 100;
1052
this->support_material_interface_speed.percent = true;
1053
this->support_material_pattern.value = smpPillars;
1054
this->support_material_spacing.value = 2.5;
1055
this->support_material_speed.value = 60;
1056
this->support_material_threshold.value = 0;
1059
ConfigOption* option(const t_config_option_key opt_key, bool create = false) {
1060
if (opt_key == "dont_support_bridges") return &this->dont_support_bridges;
1061
if (opt_key == "extrusion_width") return &this->extrusion_width;
1062
if (opt_key == "first_layer_height") return &this->first_layer_height;
1063
if (opt_key == "infill_only_where_needed") return &this->infill_only_where_needed;
1064
if (opt_key == "interface_shells") return &this->interface_shells;
1065
if (opt_key == "layer_height") return &this->layer_height;
1066
if (opt_key == "raft_layers") return &this->raft_layers;
1067
if (opt_key == "seam_position") return &this->seam_position;
1068
if (opt_key == "support_material") return &this->support_material;
1069
if (opt_key == "support_material_angle") return &this->support_material_angle;
1070
if (opt_key == "support_material_enforce_layers") return &this->support_material_enforce_layers;
1071
if (opt_key == "support_material_extruder") return &this->support_material_extruder;
1072
if (opt_key == "support_material_extrusion_width") return &this->support_material_extrusion_width;
1073
if (opt_key == "support_material_interface_extruder") return &this->support_material_interface_extruder;
1074
if (opt_key == "support_material_interface_layers") return &this->support_material_interface_layers;
1075
if (opt_key == "support_material_interface_spacing") return &this->support_material_interface_spacing;
1076
if (opt_key == "support_material_interface_speed") return &this->support_material_interface_speed;
1077
if (opt_key == "support_material_pattern") return &this->support_material_pattern;
1078
if (opt_key == "support_material_spacing") return &this->support_material_spacing;
1079
if (opt_key == "support_material_speed") return &this->support_material_speed;
1080
if (opt_key == "support_material_threshold") return &this->support_material_threshold;
1086
class PrintRegionConfig : public virtual StaticPrintConfig
1089
ConfigOptionInt bottom_solid_layers;
1090
ConfigOptionFloat bridge_speed;
1091
ConfigOptionFloatOrPercent external_perimeter_speed;
1092
ConfigOptionBool extra_perimeters;
1093
ConfigOptionInt fill_angle;
1094
ConfigOptionPercent fill_density;
1095
ConfigOptionEnum<InfillPattern> fill_pattern;
1096
ConfigOptionFloat gap_fill_speed;
1097
ConfigOptionInt infill_extruder;
1098
ConfigOptionFloatOrPercent infill_extrusion_width;
1099
ConfigOptionInt infill_every_layers;
1100
ConfigOptionFloat infill_speed;
1101
ConfigOptionBool overhangs;
1102
ConfigOptionInt perimeter_extruder;
1103
ConfigOptionFloatOrPercent perimeter_extrusion_width;
1104
ConfigOptionFloat perimeter_speed;
1105
ConfigOptionInt perimeters;
1106
ConfigOptionFloatOrPercent small_perimeter_speed;
1107
ConfigOptionEnum<InfillPattern> solid_fill_pattern;
1108
ConfigOptionFloat solid_infill_below_area;
1109
ConfigOptionFloatOrPercent solid_infill_extrusion_width;
1110
ConfigOptionInt solid_infill_every_layers;
1111
ConfigOptionFloatOrPercent solid_infill_speed;
1112
ConfigOptionBool thin_walls;
1113
ConfigOptionFloatOrPercent top_infill_extrusion_width;
1114
ConfigOptionInt top_solid_layers;
1115
ConfigOptionFloatOrPercent top_solid_infill_speed;
1117
PrintRegionConfig() : StaticPrintConfig() {
1118
this->bottom_solid_layers.value = 3;
1119
this->bridge_speed.value = 60;
1120
this->external_perimeter_speed.value = 70;
1121
this->external_perimeter_speed.percent = true;
1122
this->extra_perimeters.value = true;
1123
this->fill_angle.value = 45;
1124
this->fill_density.value = 40;
1125
this->fill_pattern.value = ipHoneycomb;
1126
this->gap_fill_speed.value = 20;
1127
this->infill_extruder.value = 1;
1128
this->infill_extrusion_width.value = 0;
1129
this->infill_extrusion_width.percent = false;
1130
this->infill_every_layers.value = 1;
1131
this->infill_speed.value = 60;
1132
this->overhangs.value = true;
1133
this->perimeter_extruder.value = 1;
1134
this->perimeter_extrusion_width.value = 0;
1135
this->perimeter_extrusion_width.percent = false;
1136
this->perimeter_speed.value = 30;
1137
this->perimeters.value = 3;
1138
this->small_perimeter_speed.value = 30;
1139
this->small_perimeter_speed.percent = false;
1140
this->solid_fill_pattern.value = ipRectilinear;
1141
this->solid_infill_below_area.value = 70;
1142
this->solid_infill_extrusion_width.value = 0;
1143
this->solid_infill_extrusion_width.percent = false;
1144
this->solid_infill_every_layers.value = 0;
1145
this->solid_infill_speed.value = 60;
1146
this->solid_infill_speed.percent = false;
1147
this->thin_walls.value = true;
1148
this->top_infill_extrusion_width.value = 0;
1149
this->top_infill_extrusion_width.percent = false;
1150
this->top_solid_infill_speed.value = 50;
1151
this->top_solid_infill_speed.percent = false;
1152
this->top_solid_layers.value = 3;
1155
ConfigOption* option(const t_config_option_key opt_key, bool create = false) {
1156
if (opt_key == "bottom_solid_layers") return &this->bottom_solid_layers;
1157
if (opt_key == "bridge_speed") return &this->bridge_speed;
1158
if (opt_key == "external_perimeter_speed") return &this->external_perimeter_speed;
1159
if (opt_key == "extra_perimeters") return &this->extra_perimeters;
1160
if (opt_key == "fill_angle") return &this->fill_angle;
1161
if (opt_key == "fill_density") return &this->fill_density;
1162
if (opt_key == "fill_pattern") return &this->fill_pattern;
1163
if (opt_key == "gap_fill_speed") return &this->gap_fill_speed;
1164
if (opt_key == "infill_extruder") return &this->infill_extruder;
1165
if (opt_key == "infill_extrusion_width") return &this->infill_extrusion_width;
1166
if (opt_key == "infill_every_layers") return &this->infill_every_layers;
1167
if (opt_key == "infill_speed") return &this->infill_speed;
1168
if (opt_key == "overhangs") return &this->overhangs;
1169
if (opt_key == "perimeter_extruder") return &this->perimeter_extruder;
1170
if (opt_key == "perimeter_extrusion_width") return &this->perimeter_extrusion_width;
1171
if (opt_key == "perimeter_speed") return &this->perimeter_speed;
1172
if (opt_key == "perimeters") return &this->perimeters;
1173
if (opt_key == "small_perimeter_speed") return &this->small_perimeter_speed;
1174
if (opt_key == "solid_fill_pattern") return &this->solid_fill_pattern;
1175
if (opt_key == "solid_infill_below_area") return &this->solid_infill_below_area;
1176
if (opt_key == "solid_infill_extrusion_width") return &this->solid_infill_extrusion_width;
1177
if (opt_key == "solid_infill_every_layers") return &this->solid_infill_every_layers;
1178
if (opt_key == "solid_infill_speed") return &this->solid_infill_speed;
1179
if (opt_key == "thin_walls") return &this->thin_walls;
1180
if (opt_key == "top_infill_extrusion_width") return &this->top_infill_extrusion_width;
1181
if (opt_key == "top_solid_infill_speed") return &this->top_solid_infill_speed;
1182
if (opt_key == "top_solid_layers") return &this->top_solid_layers;
1188
class PrintConfig : public virtual StaticPrintConfig
1191
ConfigOptionBool avoid_crossing_perimeters;
1192
ConfigOptionPoint bed_size;
1193
ConfigOptionInt bed_temperature;
1194
ConfigOptionFloat bridge_acceleration;
1195
ConfigOptionInt bridge_fan_speed;
1196
ConfigOptionFloat bridge_flow_ratio;
1197
ConfigOptionFloat brim_width;
1198
ConfigOptionBool complete_objects;
1199
ConfigOptionBool cooling;
1200
ConfigOptionFloat default_acceleration;
1201
ConfigOptionInt disable_fan_first_layers;
1202
ConfigOptionFloat duplicate_distance;
1203
ConfigOptionString end_gcode;
1204
ConfigOptionBool external_perimeters_first;
1205
ConfigOptionFloat extruder_clearance_height;
1206
ConfigOptionFloat extruder_clearance_radius;
1207
ConfigOptionPoints extruder_offset;
1208
ConfigOptionString extrusion_axis;
1209
ConfigOptionFloats extrusion_multiplier;
1210
ConfigOptionBool fan_always_on;
1211
ConfigOptionInt fan_below_layer_time;
1212
ConfigOptionFloats filament_diameter;
1213
ConfigOptionFloat first_layer_acceleration;
1214
ConfigOptionInt first_layer_bed_temperature;
1215
ConfigOptionFloatOrPercent first_layer_extrusion_width;
1216
ConfigOptionFloatOrPercent first_layer_speed;
1217
ConfigOptionInts first_layer_temperature;
1218
ConfigOptionBool g0;
1219
ConfigOptionBool gcode_arcs;
1220
ConfigOptionBool gcode_comments;
1221
ConfigOptionEnum<GCodeFlavor> gcode_flavor;
1222
ConfigOptionFloat infill_acceleration;
1223
ConfigOptionBool infill_first;
1224
ConfigOptionString layer_gcode;
1225
ConfigOptionInt max_fan_speed;
1226
ConfigOptionInt min_fan_speed;
1227
ConfigOptionInt min_print_speed;
1228
ConfigOptionFloat min_skirt_length;
1229
ConfigOptionString notes;
1230
ConfigOptionFloats nozzle_diameter;
1231
ConfigOptionBool only_retract_when_crossing_perimeters;
1232
ConfigOptionBool ooze_prevention;
1233
ConfigOptionString output_filename_format;
1234
ConfigOptionFloat perimeter_acceleration;
1235
ConfigOptionStrings post_process;
1236
ConfigOptionPoint print_center;
1237
ConfigOptionFloat resolution;
1238
ConfigOptionFloats retract_before_travel;
1239
ConfigOptionBools retract_layer_change;
1240
ConfigOptionFloats retract_length;
1241
ConfigOptionFloats retract_length_toolchange;
1242
ConfigOptionFloats retract_lift;
1243
ConfigOptionFloats retract_restart_extra;
1244
ConfigOptionFloats retract_restart_extra_toolchange;
1245
ConfigOptionInts retract_speed;
1246
ConfigOptionFloat skirt_distance;
1247
ConfigOptionInt skirt_height;
1248
ConfigOptionInt skirts;
1249
ConfigOptionInt slowdown_below_layer_time;
1250
ConfigOptionBool spiral_vase;
1251
ConfigOptionInt standby_temperature_delta;
1252
ConfigOptionString start_gcode;
1253
ConfigOptionInts temperature;
1254
ConfigOptionInt threads;
1255
ConfigOptionString toolchange_gcode;
1256
ConfigOptionFloat travel_speed;
1257
ConfigOptionBool use_firmware_retraction;
1258
ConfigOptionBool use_relative_e_distances;
1259
ConfigOptionFloat vibration_limit;
1260
ConfigOptionBools wipe;
1261
ConfigOptionFloat z_offset;
1263
PrintConfig() : StaticPrintConfig() {
1264
this->avoid_crossing_perimeters.value = false;
1265
this->bed_size.point = Pointf(200,200);
1266
this->bed_temperature.value = 0;
1267
this->bridge_acceleration.value = 0;
1268
this->bridge_fan_speed.value = 100;
1269
this->bridge_flow_ratio.value = 1;
1270
this->brim_width.value = 0;
1271
this->complete_objects.value = false;
1272
this->cooling.value = true;
1273
this->default_acceleration.value = 0;
1274
this->disable_fan_first_layers.value = 1;
1275
this->duplicate_distance.value = 6;
1276
this->end_gcode.value = "M104 S0 ; turn off temperature\nG28 X0 ; home X axis\nM84 ; disable motors\n";
1277
this->external_perimeters_first.value = false;
1278
this->extruder_clearance_height.value = 20;
1279
this->extruder_clearance_radius.value = 20;
1280
this->extruder_offset.values.resize(1);
1281
this->extruder_offset.values[0] = Pointf(0,0);
1282
this->extrusion_axis.value = "E";
1283
this->extrusion_multiplier.values.resize(1);
1284
this->extrusion_multiplier.values[0] = 1;
1285
this->fan_always_on.value = false;
1286
this->fan_below_layer_time.value = 60;
1287
this->filament_diameter.values.resize(1);
1288
this->filament_diameter.values[0] = 3;
1289
this->first_layer_acceleration.value = 0;
1290
this->first_layer_bed_temperature.value = 0;
1291
this->first_layer_extrusion_width.value = 200;
1292
this->first_layer_extrusion_width.percent = true;
1293
this->first_layer_speed.value = 30;
1294
this->first_layer_speed.percent = true;
1295
this->first_layer_temperature.values.resize(1);
1296
this->first_layer_temperature.values[0] = 200;
1297
this->g0.value = false;
1298
this->gcode_arcs.value = false;
1299
this->gcode_comments.value = false;
1300
this->gcode_flavor.value = gcfRepRap;
1301
this->infill_acceleration.value = 0;
1302
this->infill_first.value = false;
1303
this->layer_gcode.value = "";
1304
this->max_fan_speed.value = 100;
1305
this->min_fan_speed.value = 35;
1306
this->min_print_speed.value = 10;
1307
this->min_skirt_length.value = 0;
1308
this->notes.value = "";
1309
this->nozzle_diameter.values.resize(1);
1310
this->nozzle_diameter.values[0] = 0.5;
1311
this->only_retract_when_crossing_perimeters.value = true;
1312
this->ooze_prevention.value = false;
1313
this->output_filename_format.value = "[input_filename_base].gcode";
1314
this->perimeter_acceleration.value = 0;
1315
this->print_center.point = Pointf(100,100);
1316
this->resolution.value = 0;
1317
this->retract_before_travel.values.resize(1);
1318
this->retract_before_travel.values[0] = 2;
1319
this->retract_layer_change.values.resize(1);
1320
this->retract_layer_change.values[0] = true;
1321
this->retract_length.values.resize(1);
1322
this->retract_length.values[0] = 1;
1323
this->retract_length_toolchange.values.resize(1);
1324
this->retract_length_toolchange.values[0] = 10;
1325
this->retract_lift.values.resize(1);
1326
this->retract_lift.values[0] = 0;
1327
this->retract_restart_extra.values.resize(1);
1328
this->retract_restart_extra.values[0] = 0;
1329
this->retract_restart_extra_toolchange.values.resize(1);
1330
this->retract_restart_extra_toolchange.values[0] = 0;
1331
this->retract_speed.values.resize(1);
1332
this->retract_speed.values[0] = 30;
1333
this->skirt_distance.value = 6;
1334
this->skirt_height.value = 1;
1335
this->skirts.value = 1;
1336
this->slowdown_below_layer_time.value = 30;
1337
this->spiral_vase.value = false;
1338
this->standby_temperature_delta.value = -5;
1339
this->start_gcode.value = "G28 ; home all axes\nG1 Z5 F5000 ; lift nozzle\n";
1340
this->temperature.values.resize(1);
1341
this->temperature.values[0] = 200;
1342
this->threads.value = 2;
1343
this->toolchange_gcode.value = "";
1344
this->travel_speed.value = 130;
1345
this->use_firmware_retraction.value = false;
1346
this->use_relative_e_distances.value = false;
1347
this->vibration_limit.value = 0;
1348
this->wipe.values.resize(1);
1349
this->wipe.values[0] = false;
1350
this->z_offset.value = 0;
1353
ConfigOption* option(const t_config_option_key opt_key, bool create = false) {
1354
if (opt_key == "avoid_crossing_perimeters") return &this->avoid_crossing_perimeters;
1355
if (opt_key == "bed_size") return &this->bed_size;
1356
if (opt_key == "bed_temperature") return &this->bed_temperature;
1357
if (opt_key == "bridge_acceleration") return &this->bridge_acceleration;
1358
if (opt_key == "bridge_fan_speed") return &this->bridge_fan_speed;
1359
if (opt_key == "bridge_flow_ratio") return &this->bridge_flow_ratio;
1360
if (opt_key == "brim_width") return &this->brim_width;
1361
if (opt_key == "complete_objects") return &this->complete_objects;
1362
if (opt_key == "cooling") return &this->cooling;
1363
if (opt_key == "default_acceleration") return &this->default_acceleration;
1364
if (opt_key == "disable_fan_first_layers") return &this->disable_fan_first_layers;
1365
if (opt_key == "duplicate_distance") return &this->duplicate_distance;
1366
if (opt_key == "end_gcode") return &this->end_gcode;
1367
if (opt_key == "external_perimeters_first") return &this->external_perimeters_first;
1368
if (opt_key == "extruder_clearance_height") return &this->extruder_clearance_height;
1369
if (opt_key == "extruder_clearance_radius") return &this->extruder_clearance_radius;
1370
if (opt_key == "extruder_offset") return &this->extruder_offset;
1371
if (opt_key == "extrusion_axis") return &this->extrusion_axis;
1372
if (opt_key == "extrusion_multiplier") return &this->extrusion_multiplier;
1373
if (opt_key == "fan_always_on") return &this->fan_always_on;
1374
if (opt_key == "fan_below_layer_time") return &this->fan_below_layer_time;
1375
if (opt_key == "filament_diameter") return &this->filament_diameter;
1376
if (opt_key == "first_layer_acceleration") return &this->first_layer_acceleration;
1377
if (opt_key == "first_layer_bed_temperature") return &this->first_layer_bed_temperature;
1378
if (opt_key == "first_layer_extrusion_width") return &this->first_layer_extrusion_width;
1379
if (opt_key == "first_layer_speed") return &this->first_layer_speed;
1380
if (opt_key == "first_layer_temperature") return &this->first_layer_temperature;
1381
if (opt_key == "g0") return &this->g0;
1382
if (opt_key == "gcode_arcs") return &this->gcode_arcs;
1383
if (opt_key == "gcode_comments") return &this->gcode_comments;
1384
if (opt_key == "gcode_flavor") return &this->gcode_flavor;
1385
if (opt_key == "infill_acceleration") return &this->infill_acceleration;
1386
if (opt_key == "infill_first") return &this->infill_first;
1387
if (opt_key == "layer_gcode") return &this->layer_gcode;
1388
if (opt_key == "max_fan_speed") return &this->max_fan_speed;
1389
if (opt_key == "min_fan_speed") return &this->min_fan_speed;
1390
if (opt_key == "min_print_speed") return &this->min_print_speed;
1391
if (opt_key == "min_skirt_length") return &this->min_skirt_length;
1392
if (opt_key == "notes") return &this->notes;
1393
if (opt_key == "nozzle_diameter") return &this->nozzle_diameter;
1394
if (opt_key == "only_retract_when_crossing_perimeters") return &this->only_retract_when_crossing_perimeters;
1395
if (opt_key == "ooze_prevention") return &this->ooze_prevention;
1396
if (opt_key == "output_filename_format") return &this->output_filename_format;
1397
if (opt_key == "perimeter_acceleration") return &this->perimeter_acceleration;
1398
if (opt_key == "post_process") return &this->post_process;
1399
if (opt_key == "print_center") return &this->print_center;
1400
if (opt_key == "resolution") return &this->resolution;
1401
if (opt_key == "retract_before_travel") return &this->retract_before_travel;
1402
if (opt_key == "retract_layer_change") return &this->retract_layer_change;
1403
if (opt_key == "retract_length") return &this->retract_length;
1404
if (opt_key == "retract_length_toolchange") return &this->retract_length_toolchange;
1405
if (opt_key == "retract_lift") return &this->retract_lift;
1406
if (opt_key == "retract_restart_extra") return &this->retract_restart_extra;
1407
if (opt_key == "retract_restart_extra_toolchange") return &this->retract_restart_extra_toolchange;
1408
if (opt_key == "retract_speed") return &this->retract_speed;
1409
if (opt_key == "skirt_distance") return &this->skirt_distance;
1410
if (opt_key == "skirt_height") return &this->skirt_height;
1411
if (opt_key == "skirts") return &this->skirts;
1412
if (opt_key == "slowdown_below_layer_time") return &this->slowdown_below_layer_time;
1413
if (opt_key == "spiral_vase") return &this->spiral_vase;
1414
if (opt_key == "standby_temperature_delta") return &this->standby_temperature_delta;
1415
if (opt_key == "start_gcode") return &this->start_gcode;
1416
if (opt_key == "temperature") return &this->temperature;
1417
if (opt_key == "threads") return &this->threads;
1418
if (opt_key == "toolchange_gcode") return &this->toolchange_gcode;
1419
if (opt_key == "travel_speed") return &this->travel_speed;
1420
if (opt_key == "use_firmware_retraction") return &this->use_firmware_retraction;
1421
if (opt_key == "use_relative_e_distances") return &this->use_relative_e_distances;
1422
if (opt_key == "vibration_limit") return &this->vibration_limit;
1423
if (opt_key == "wipe") return &this->wipe;
1424
if (opt_key == "z_offset") return &this->z_offset;
1430
class FullPrintConfig : public PrintObjectConfig, public PrintRegionConfig, public PrintConfig {
1432
ConfigOption* option(const t_config_option_key opt_key, bool create = false) {
1434
if ((opt = PrintObjectConfig::option(opt_key, create)) != NULL) return opt;
1435
if ((opt = PrintRegionConfig::option(opt_key, create)) != NULL) return opt;
1436
if ((opt = PrintConfig::option(opt_key, create)) != NULL) return opt;
1440
std::string get_extrusion_axis() {
1441
if (this->gcode_flavor == gcfMach3) {
1442
return std::string("A");
1443
} else if (this->gcode_flavor == gcfNoExtrusion) {
1444
return std::string("");
1446
return this->extrusion_axis;