-
Notifications
You must be signed in to change notification settings - Fork 189
Expand file tree
/
Copy pathSliceSettingsFields.cs
More file actions
3023 lines (3012 loc) · 137 KB
/
SliceSettingsFields.cs
File metadata and controls
3023 lines (3012 loc) · 137 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
/*
Copyright (c) 2019, Lars Brubaker, John Lewin
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
The views and conclusions contained in the software and documentation are those
of the authors and should not be interpreted as representing official policies,
either expressed or implied, of the FreeBSD Project.
*/
using System.Collections.Generic;
using MatterHackers.Agg;
using MatterHackers.Localizations;
using MatterHackers.MatterControl.SlicerConfiguration.MappingClasses;
using static MatterHackers.MatterControl.SlicerConfiguration.SliceSettingData;
namespace MatterHackers.MatterControl.SlicerConfiguration
{
public static class SliceSettingsExtensions
{
// Add extension method to List<QuickMenuNameValue> for simplified collection initializer without type names
// e.g. QuickMenuSettings = { { "PLA", "1.24" }, { "PET", "1.27" }, { "ABS","1.04" } },
public static void Add(this List<QuickMenuNameValue> list, string menuName, string value)
{
list.Add(new QuickMenuNameValue()
{
MenuName = menuName,
Value = value
});
}
}
public static class SliceSettingsFields
{
// Apparently VisualStudio fails to format code in collection initializers (which is the entirely of this file). After too much time
// trying to work around the issue I realized I could temporarily switch the statement to look like params args to a function and work around this issue...
//public void DummyMethod(params [] SliceSettingData)
//{
//}
//public void GetSettings()
//{
// this.DummyMethod(
public static IEnumerable<SliceSettingData> AllSettings()
{
return new[]
{
new SliceSettingData()
{
SlicerConfigName = SettingsKey.avoid_crossing_perimeters,
PresentationName = "Avoid Crossing Perimeters".Localize(),
HelpText = "Forces the slicer to attempt to avoid having the perimeter line cross over existing perimeter lines. This can help with oozing or strings.".Localize(),
DataEditType = DataEditTypes.CHECK_BOX,
DefaultValue = "1",
UiUpdate = UiUpdateRequired.SliceSettings,
Converter = new MappedToBoolString(),
},
new SliceSettingData()
{
SlicerConfigName = SettingsKey.monotonic_solid_infill,
PresentationName = "Monotonic Solid Infill".Localize(),
HelpText = "When filling bottom and top solid layers always create them so that each new print segment side is touching a previous segment on the same side.".Localize(),
DataEditType = DataEditTypes.CHECK_BOX,
DefaultValue = "1",
Converter = new MappedToBoolString(),
},
new SliceSettingData()
{
SlicerConfigName = SettingsKey.sla_mirror_mode,
PresentationName = "Mirror Mode".Localize(),
HelpText = "Set how the printed output should be altered to compensate for the printers mirror.".Localize(),
DataEditType = DataEditTypes.LIST,
ListValues = "None,Mirror X,Mirror Y",
RequiredDisplayDetail = DisplayDetailRequired.Advanced,
DefaultValue = "None",
},
new SliceSettingData()
{
SlicerConfigName = SettingsKey.bed_shape,
PresentationName = "Bed Shape".Localize(),
HelpText = "The shape of the physical print bed.".Localize(),
DataEditType = DataEditTypes.LIST,
ListValues = "rectangular,circular",
RequiredDisplayDetail = DisplayDetailRequired.Simple,
DefaultValue = "rectangular",
RebuildGCodeOnChange = false
},
new SliceSettingData()
{
SlicerConfigName = SettingsKey.bed_size,
PresentationName = "Bed Size".Localize(),
HelpText = "The X and Y values of the size of the print bed, in millimeters. For printers with a circular bed, these values are the diameters on the X and Y axes.".Localize(),
DataEditType = DataEditTypes.VECTOR2,
RequiredDisplayDetail = DisplayDetailRequired.Simple,
Units = "mm".Localize(),
DefaultValue = "200,200"
},
new SliceSettingData()
{
SlicerConfigName = SettingsKey.sla_resolution,
PresentationName = "Resolution".Localize(),
HelpText = "The X and Y resolution of the print bed in pixels.".Localize(),
DataEditType = DataEditTypes.VECTOR2,
Units = "px".Localize(),
DefaultValue = "1024,800"
},
new SliceSettingData()
{
SlicerConfigName = SettingsKey.bed_temperature,
PresentationName = "Bed Temperature".Localize(),
HelpText = "The temperature to which the bed will be set for the duration of the print. Set to 0 to disable.".Localize(),
DataEditType = DataEditTypes.POSITIVE_DOUBLE,
RequiredDisplayDetail = DisplayDetailRequired.Simple,
Units = "°C".Localize(),
Show = (settings) => settings.GetBool(SettingsKey.has_heated_bed),
DefaultValue = "70"
},
new SliceSettingData()
{
SlicerConfigName = SettingsKey.bed_temperature_blue_tape,
PresentationName = "Blue Tape Bed Temperature".Localize(),
HelpText = "The temperature to print when the bed is coverd with blue tape. Set to 0 to disable or 'NC' if Not Compatible.".Localize(),
DataEditType = DataEditTypes.POSITIVE_DOUBLE_OR_INCOMPATIBLE,
Units = "°C".Localize(),
Show = (settings) => settings.GetBool(SettingsKey.has_heated_bed)
&& settings.GetBool(SettingsKey.has_swappable_bed),
DefaultValue = "0"
},
new SliceSettingData()
{
SlicerConfigName = SettingsKey.bed_temperature_buildtak,
PresentationName = "BuildTak Bed Temperature".Localize(),
HelpText = "The temperature to print when the bed is using BuildTak. Set to 0 to disable or 'NC' if Not Compatible.".Localize(),
DataEditType = DataEditTypes.POSITIVE_DOUBLE_OR_INCOMPATIBLE,
Units = "°C".Localize(),
Show = (settings) => settings.GetBool(SettingsKey.has_heated_bed)
&& settings.GetBool(SettingsKey.has_swappable_bed),
DefaultValue = "0"
},
new SliceSettingData()
{
SlicerConfigName = SettingsKey.bed_temperature_garolite,
PresentationName = "Garolite Bed Temperature".Localize(),
HelpText = "The temperature to print when the bed is using garolite. Set to 0 to disable or 'NC' if Not Compatible.".Localize(),
DataEditType = DataEditTypes.POSITIVE_DOUBLE_OR_INCOMPATIBLE,
Units = "°C".Localize(),
Show = (settings) => settings.GetBool(SettingsKey.has_heated_bed)
&& settings.GetBool(SettingsKey.has_swappable_bed),
DefaultValue = "0"
},
new SliceSettingData()
{
SlicerConfigName = SettingsKey.bed_temperature_glass,
PresentationName = "Glass Bed Temperature".Localize(),
HelpText = "The temperature to print when the bed is using glass. Set to 0 to disable or 'NC' if Not Compatible.".Localize(),
DataEditType = DataEditTypes.POSITIVE_DOUBLE_OR_INCOMPATIBLE,
Units = "°C".Localize(),
Show = (settings) => settings.GetBool(SettingsKey.has_heated_bed)
&& settings.GetBool(SettingsKey.has_swappable_bed),
DefaultValue = "0"
},
new SliceSettingData()
{
SlicerConfigName = SettingsKey.bed_temperature_kapton,
PresentationName = "Kapton Bed Temperature".Localize(),
HelpText = "The temperature to print when the bed is coverd in kapton tape. Set to 0 to disable or 'NC' if Not Compatible.".Localize(),
DataEditType = DataEditTypes.POSITIVE_DOUBLE_OR_INCOMPATIBLE,
Units = "°C".Localize(),
Show = (settings) => settings.GetBool(SettingsKey.has_heated_bed)
&& settings.GetBool(SettingsKey.has_swappable_bed),
DefaultValue = "0"
},
new SliceSettingData()
{
SlicerConfigName = SettingsKey.bed_temperature_pei,
PresentationName = "PEI Bed Temperature".Localize(),
HelpText = "The temperature to print when the bed is using PEI. Set to 0 to disable or 'NC' if Not Compatible.".Localize(),
DataEditType = DataEditTypes.POSITIVE_DOUBLE_OR_INCOMPATIBLE,
Units = "°C".Localize(),
Show = (settings) => settings.GetBool(SettingsKey.has_heated_bed)
&& settings.GetBool(SettingsKey.has_swappable_bed),
DefaultValue = "0"
},
new SliceSettingData()
{
SlicerConfigName = SettingsKey.bed_temperature_pp,
PresentationName = "Polypropylene Bed Temperature".Localize(),
HelpText = "The temperature to print when the bed is polypropylene. Set to 0 to disable or 'NC' if Not Compatible.".Localize(),
DataEditType = DataEditTypes.POSITIVE_DOUBLE_OR_INCOMPATIBLE,
Units = "°C".Localize(),
Show = (settings) => settings.GetBool(SettingsKey.has_heated_bed)
&& settings.GetBool(SettingsKey.has_swappable_bed),
DefaultValue = "0"
},
new SliceSettingData()
{
SlicerConfigName = SettingsKey.has_swappable_bed,
PresentationName = "Has Swappable Bed".Localize(),
HelpText = "This should be checked if the printer supports multiple bed surfaces and the bed temperature for the different surfaces needs to vary.".Localize(),
DataEditType = DataEditTypes.CHECK_BOX,
RequiredDisplayDetail = DisplayDetailRequired.Advanced,
Show = (settings) => settings.GetBool(SettingsKey.has_heated_bed),
UiUpdate = UiUpdateRequired.Application,
DefaultValue = "0"
},
new SliceSettingData()
{
SlicerConfigName = SettingsKey.bed_surface,
PresentationName = "Bed Surface".Localize(),
// the below text creates a bad markdown layout when the tool tip appears
//HelpText = "The current bed surfaces that the printer is using. This is used to set the correct bed temperature for a given material.".Localize(),
HelpText = "This should be set to the current bed surfaces of the printer. It is used to select the correct bed temperature for a given material and bed surface combination.".Localize(),
DataEditType = DataEditTypes.LIST,
Show = (settings) => settings.GetBool(SettingsKey.has_heated_bed)
&& settings.GetBool(SettingsKey.has_swappable_bed),
ListValues = "Default,Blue Tape,BuildTak,Garolite,Glass,Kapton,PEI,Polypropylene",
DefaultValue = "Default"
},
new SliceSettingData()
{
SlicerConfigName = SettingsKey.first_layer_bed_temperature,
PresentationName = "First Layer Bed Temperature".Localize(),
HelpText = "The target temperature the bed will attempt to reach during the first layer of the print.".Localize(),
DataEditType = DataEditTypes.POSITIVE_DOUBLE,
Units = "°C".Localize(),
Show = (settings) => settings.GetBool(SettingsKey.has_heated_bed),
DefaultValue = "70"
},
new SliceSettingData()
{
SlicerConfigName = SettingsKey.inactive_cool_down,
PresentationName = "Inactive Cool Down".Localize(),
HelpText = "The amount to lower the temperature when the hotend is inactive.".Localize(),
DataEditType = DataEditTypes.POSITIVE_DOUBLE,
RequiredDisplayDetail = DisplayDetailRequired.Advanced,
Units = "°C".Localize(),
Show = (settings) => settings.GetInt(SettingsKey.extruder_count) > 1,
DefaultValue = "0"
},
new SliceSettingData()
{
SlicerConfigName = SettingsKey.slice_engine,
PresentationName = "Slice Engine".Localize(),
HelpText = "The slicer to use.".Localize(),
DataEditType = DataEditTypes.SLICE_ENGINE,
RequiredDisplayDetail = DisplayDetailRequired.Advanced,
DefaultValue = "MatterSlice",
UiUpdate = UiUpdateRequired.Application,
},
new SliceSettingData()
{
SlicerConfigName = SettingsKey.sla_exposure_time,
PresentationName = "Exposure Time".Localize(),
HelpText = "The time in seconds to expose the normal layers of the print.".Localize(),
DataEditType = DataEditTypes.POSITIVE_DOUBLE,
RequiredDisplayDetail = DisplayDetailRequired.Advanced,
DefaultValue = "5",
Units = "s",
},
new SliceSettingData()
{
SlicerConfigName = SettingsKey.sla_base_exposure_time,
PresentationName = "Base Exposure Time".Localize(),
HelpText = "The number of seconds to expose the base layers. This can increase the bonding to the build plate.".Localize(),
DataEditType = DataEditTypes.POSITIVE_DOUBLE,
RequiredDisplayDetail = DisplayDetailRequired.Advanced,
Units = "s".Localize(),
DefaultValue = "45",
},
new SliceSettingData()
{
SlicerConfigName = SettingsKey.sla_base_min_off_time,
PresentationName = "Base Min Off Time".Localize(),
HelpText = "The minimum amount of time the light must be off between exposures.".Localize(),
DataEditType = DataEditTypes.POSITIVE_DOUBLE,
RequiredDisplayDetail = DisplayDetailRequired.Advanced,
Units = "s".Localize(),
DefaultValue = "0",
},
new SliceSettingData()
{
SlicerConfigName = SettingsKey.sla_min_off_time,
PresentationName = "Base Min Off Time".Localize(),
HelpText = "The minimum amount of time the light must be off between exposures.".Localize(),
DataEditType = DataEditTypes.POSITIVE_DOUBLE,
RequiredDisplayDetail = DisplayDetailRequired.Advanced,
Units = "s".Localize(),
DefaultValue = "0",
},
new SliceSettingData()
{
SlicerConfigName = SettingsKey.seconds_to_reheat,
PresentationName = "Warm up Time".Localize(),
HelpText = "The time it takes to heat back up from a cool down.".Localize(),
RequiredDisplayDetail = DisplayDetailRequired.Advanced,
DataEditType = DataEditTypes.POSITIVE_DOUBLE,
Units = "s".Localize(),
Show = (settings) => settings.GetInt(SettingsKey.extruder_count) > 1,
DefaultValue = "0"
},
new SliceSettingData()
{
SlicerConfigName = SettingsKey.load_filament_length,
PresentationName = "Load Filament Length".Localize(),
HelpText = "The amount of filament to insert into the printer when loading.".Localize(),
DataEditType = DataEditTypes.POSITIVE_DOUBLE,
Units = "mm".Localize(),
DefaultValue = "20"
},
new SliceSettingData()
{
SlicerConfigName = SettingsKey.load_filament_speed,
PresentationName = "Filament Speed".Localize(),
HelpText = "The speed to run filament into and out of the printer.".Localize(),
DataEditType = DataEditTypes.POSITIVE_DOUBLE,
RequiredDisplayDetail = DisplayDetailRequired.Advanced,
Units = "mm/s".Localize(),
DefaultValue = "80"
},
new SliceSettingData()
{
SlicerConfigName = SettingsKey.unload_filament_length,
PresentationName = "Unload Filament Length".Localize(),
HelpText = "The amount of filament to remove from the printer while unloading.".Localize(),
DataEditType = DataEditTypes.POSITIVE_DOUBLE,
Units = "mm".Localize(),
DefaultValue = "70"
},
new SliceSettingData()
{
SlicerConfigName = SettingsKey.trim_filament_markdown,
PresentationName = "Trim Filament Page".Localize(),
HelpText = "The Markdown that will be shown on the Trim Filament page.".Localize(),
DataEditType = DataEditTypes.MARKDOWN_TEXT,
RequiredDisplayDetail = DisplayDetailRequired.Advanced,
DefaultValue = "Trim the end of the filament to ensure a good load. \n \nMake sure you trim it at a slight angle"
},
new SliceSettingData()
{
SlicerConfigName = SettingsKey.insert_filament_markdown2,
PresentationName = "Insert Filament Page".Localize(),
HelpText = "The Markdown that will be shown on the Insert Filament page.".Localize(),
RequiredDisplayDetail = DisplayDetailRequired.Advanced,
DataEditType = DataEditTypes.MARKDOWN_TEXT,
DefaultValue = "* Insert filament into the extruder until you feel it start to feed\\n * Make sure the filament is all the way into the extruder\\n * Hold the filament for several seconds until it catches\\n * Test that it is inserted by gently pulling down, there should be some resistance \\n* Click 'Next' \\n"
},
new SliceSettingData()
{
SlicerConfigName = SettingsKey.insert_filament_1_markdown,
PresentationName = "Insert Filament 2 Page".Localize(),
HelpText = "The Markdown that will be shown on the second extruders Insert Filament page.".Localize(),
RequiredDisplayDetail = DisplayDetailRequired.Advanced,
DataEditType = DataEditTypes.MARKDOWN_TEXT,
Show = (settings) => settings.GetInt(SettingsKey.extruder_count) > 1,
DefaultValue = "* Insert filament into extruder 2 until you feel it start to feed\\n * Make sure the filament is all the way into the extruder\\n * Hold the filament for several seconds until it catches\\n * Test that it is inserted by gently pulling down, there should be some resistance \\n* Click 'Next' \\n"
},
new SliceSettingData()
{
SlicerConfigName = SettingsKey.running_clean_markdown2,
PresentationName = "Clean Filament Page".Localize(),
HelpText = "The Markdown that will be shown on the Clean Filament page.".Localize(),
DataEditType = DataEditTypes.MARKDOWN_TEXT,
RequiredDisplayDetail = DisplayDetailRequired.Advanced,
DefaultValue = "In a few seconds filament should be coming out of the extruder\\n* Wait for the new filament to be coming out with no trace of the previous filament\\n* Click 'Next' when the new filament is running cleanly"
},
new SliceSettingData()
{
SlicerConfigName = SettingsKey.running_clean_1_markdown,
PresentationName = "Extruder 2 Clean Page".Localize(),
HelpText = "The Markdown that will be shown on the second extruders Clean Filament page.".Localize(),
DataEditType = DataEditTypes.MARKDOWN_TEXT,
RequiredDisplayDetail = DisplayDetailRequired.Advanced,
Show = (settings) => settings.GetInt(SettingsKey.extruder_count) > 1,
DefaultValue = "In a few seconds filament should be coming out of the second extruder\\n* Wait for the new filament to be coming out with no trace of the previous filament\\n* Click 'Next' when the new filament is running cleanly"
},
new SliceSettingData()
{
SlicerConfigName = SettingsKey.bottom_solid_layers,
PresentationName = "Bottom Solid Layers".Localize(),
HelpText = "The number of layers or the distance in millimeters to solid fill on the bottom surface(s) of the object. Add mm to the end of the number to specify distance in millimeters.".Localize(),
DataEditType = DataEditTypes.INT_OR_MM,
Units = "count or mm".Localize(),
DefaultValue = "1mm",
Converter = new AsCountOrDistance(SettingsKey.layer_height),
},
new SliceSettingData()
{
SlicerConfigName = SettingsKey.sla_base_layers,
PresentationName = "Base Layers".Localize(),
HelpText = "The number of layers or the distance in millimeters to print bottom layers. Bottom layers help adhere parts to the build plate. Add mm to the end of the number to specify distance in millimeters.".Localize(),
DataEditType = DataEditTypes.INT_OR_MM,
Units = "count or mm".Localize(),
DefaultValue = ".25mm",
Converter = new AsCountOrDistance(SettingsKey.sla_layer_height),
},
new SliceSettingData()
{
SlicerConfigName = SettingsKey.sla_base_lift_distance,
PresentationName = "Base Lift Distance".Localize(),
HelpText = "The distance to move the build plate after each base layer prints.".Localize(),
DataEditType = DataEditTypes.POSITIVE_DOUBLE,
RequiredDisplayDetail = DisplayDetailRequired.Advanced,
Units = "mm".Localize(),
DefaultValue = "5",
},
new SliceSettingData()
{
SlicerConfigName = SettingsKey.sla_lift_distance,
PresentationName = "Lift Distance".Localize(),
HelpText = "The distance to move the build plate after each layer prints.".Localize(),
RequiredDisplayDetail = DisplayDetailRequired.Advanced,
DataEditType = DataEditTypes.POSITIVE_DOUBLE,
Units = "mm".Localize(),
DefaultValue = "5",
},
new SliceSettingData()
{
SlicerConfigName = SettingsKey.sla_base_lift_speed,
PresentationName = "Base Lift Speed".Localize(),
HelpText = "The speed to move the build plate after each base layer prints.".Localize(),
DataEditType = DataEditTypes.POSITIVE_DOUBLE,
RequiredDisplayDetail = DisplayDetailRequired.Advanced,
Units = "mm/min".Localize(),
DefaultValue = "90",
},
new SliceSettingData()
{
SlicerConfigName = SettingsKey.sla_lift_speed,
PresentationName = "Lift Speed".Localize(),
HelpText = "The speed to move the build plate after each layer prints.".Localize(),
DataEditType = DataEditTypes.POSITIVE_DOUBLE,
RequiredDisplayDetail = DisplayDetailRequired.Advanced,
Units = "mm/min".Localize(),
DefaultValue = "90",
},
new SliceSettingData()
{
SlicerConfigName = SettingsKey.sla_decend_speed,
PresentationName = "Decend Speed".Localize(),
HelpText = "The speed to move the build plate back down after lifting.".Localize(),
DataEditType = DataEditTypes.POSITIVE_DOUBLE,
RequiredDisplayDetail = DisplayDetailRequired.Advanced,
Units = "mm/min".Localize(),
DefaultValue = "150",
},
new SliceSettingData()
{
SlicerConfigName = SettingsKey.layer_to_pause,
PresentationName = "Layer(s) To Pause".Localize(),
HelpText = "The layer(s) at which the print will pause, allowing for a change in filament. Printer is paused before starting the given layer. Leave blank to disable. To pause on multiple layers, separate the layer numbers with semicolons. For example: \"16; 37\". Rafts layers are not considered. The 1st pause layer is the first above the raft.".Localize(),
DataEditType = DataEditTypes.STRING,
RequiredDisplayDetail = DisplayDetailRequired.Simple,
ResetAtEndOfPrint = true,
DefaultValue = ""
},
new SliceSettingData()
{
SlicerConfigName = SettingsKey.bridge_speed,
PresentationName = "Bridges".Localize(),
HelpText = "The speed at which bridging between walls will print.".Localize(),
DataEditType = DataEditTypes.POSITIVE_DOUBLE,
Units = "mm/s".Localize(),
DefaultValue = "3",
Converter = new ClampToMinValue(SettingsKey.max_print_speed, new AsPercentOfReferenceOrDirect(SettingsKey.infill_speed)),
},
new SliceSettingData()
{
SlicerConfigName = SettingsKey.air_gap_speed,
PresentationName = "Air Gapped Layer".Localize(),
HelpText = "The speed at which the layer on top of the air gap will print.".Localize(),
DataEditType = DataEditTypes.POSITIVE_DOUBLE,
RequiredDisplayDetail = DisplayDetailRequired.Advanced,
Units = "mm/s".Localize(),
DefaultValue = "15",
Converter = new ClampToMinValue(SettingsKey.max_print_speed, new AsPercentOfReferenceOrDirect(SettingsKey.infill_speed)),
},
new SliceSettingData()
{
SlicerConfigName = SettingsKey.bottom_infill_speed,
PresentationName = "Bottom Solid Infill".Localize(),
HelpText = "The speed at which the bottom solid layers will print. Can be set explicitly or as a percentage of the Infill speed. Use 0 to match infill speed.".Localize(),
DataEditType = DataEditTypes.DOUBLE_OR_PERCENT,
Units = "mm/s or %".Localize(),
DefaultValue = "0",
Converter = new ClampToMinValue(SettingsKey.max_print_speed, new AsPercentOfReferenceOrDirect(SettingsKey.infill_speed)),
},
new SliceSettingData()
{
SlicerConfigName = SettingsKey.build_height,
PresentationName = "Build Height".Localize(),
HelpText = "The height of the printer's printable volume, in millimeters. Controls the height of the visual print area displayed in 3D View.".Localize(),
RequiredDisplayDetail = DisplayDetailRequired.Simple,
DataEditType = DataEditTypes.POSITIVE_DOUBLE,
Units = "mm".Localize(),
DefaultValue = "0",
RebuildGCodeOnChange = false
},
new SliceSettingData()
{
SlicerConfigName = SettingsKey.cancel_gcode,
PresentationName = "Cancel G-Code".Localize(),
HelpText = "G-Code to run when a print is canceled.".Localize(),
DataEditType = DataEditTypes.MULTI_LINE_TEXT,
DefaultValue = "",
RebuildGCodeOnChange = false
},
new SliceSettingData()
{
SlicerConfigName = SettingsKey.complete_objects,
PresentationName = "Complete Individual Objects".Localize(),
HelpText = "Each individual part is printed to completion then the nozzle is lowered back to the bed and the next part is printed.".Localize(),
DataEditType = DataEditTypes.CHECK_BOX,
DefaultValue = "0"
},
new SliceSettingData()
{
SlicerConfigName = SettingsKey.connect_gcode,
PresentationName = "On Connect G-Code".Localize(),
HelpText = "G-Code to run upon successful connection to a printer. This can be useful to set settings specific to a given printer.".Localize(),
RequiredDisplayDetail = DisplayDetailRequired.Advanced,
DataEditType = DataEditTypes.MULTI_LINE_TEXT,
DefaultValue = ""
},
new SliceSettingData()
{
SlicerConfigName = SettingsKey.cool_extruder_lift,
PresentationName = "Enable Extruder Lift".Localize(),
HelpText = "Moves the nozzle up and off the part to allow cooling.".Localize(),
DataEditType = DataEditTypes.CHECK_BOX,
DefaultValue = "0"
},
new SliceSettingData()
{
SlicerConfigName = SettingsKey.cooling,
PresentationName = "Enable Auto Cooling".Localize(),
HelpText = "Turns on and off all cooling settings (all settings below this one).".Localize(),
DataEditType = DataEditTypes.CHECK_BOX,
DefaultValue = "1"
},
new SliceSettingData()
{
SlicerConfigName = SettingsKey.create_raft,
PresentationName = "Create Raft".Localize(),
HelpText = "Creates a raft under the printed part. Useful to prevent warping when printing ABS (and other warping-prone plastics) as it helps parts adhere to the bed.".Localize(),
DataEditType = DataEditTypes.CHECK_BOX,
DefaultValue = "0",
UiUpdate = UiUpdateRequired.SliceSettings,
RequiredDisplayDetail = DisplayDetailRequired.Simple,
Converter = new MappedToBoolString(),
},
new SliceSettingData()
{
SlicerConfigName = SettingsKey.sla_create_raft,
PresentationName = "Create Raft".Localize(),
HelpText = "Creates a raft under the printed part. Useful to help parts stick to the build plate.".Localize(),
DataEditType = DataEditTypes.CHECK_BOX,
DefaultValue = "0",
UiUpdate = UiUpdateRequired.SliceSettings,
RequiredDisplayDetail = DisplayDetailRequired.Simple,
Converter = new MappedToBoolString(),
},
new SliceSettingData()
{
SlicerConfigName = SettingsKey.raft_extra_distance_around_part,
PresentationName = "Expand Distance".Localize(),
HelpText = "The extra distance the raft will extend around the edge of the part.".Localize(),
DataEditType = DataEditTypes.POSITIVE_DOUBLE,
Units = "mm".Localize(),
RequiredDisplayDetail = DisplayDetailRequired.Advanced,
EnableIfSet = "create_raft",
DefaultValue = "5",
Converter = new AsCountOrDistance(SettingsKey.nozzle_diameter),
},
new SliceSettingData()
{
SlicerConfigName = SettingsKey.raft_air_gap,
PresentationName = "Air Gap".Localize(),
HelpText = "The distance between the top of the raft and the bottom of the model. 0.6 mm is a good starting point for PLA and 0.4 mm is a good starting point for ABS. Lower values give a smoother surface, higher values make the print easier to remove.".Localize(),
DataEditType = DataEditTypes.POSITIVE_DOUBLE,
Units = "mm".Localize(),
RequiredDisplayDetail = DisplayDetailRequired.Advanced,
EnableIfSet = "create_raft",
DefaultValue = ".2",
Converter = new ValueConverter(),
},
new SliceSettingData()
{
SlicerConfigName = SettingsKey.raft_print_speed,
PresentationName = "Raft".Localize(),
HelpText = "The speed at which the layers of the raft (other than the first layer) will print. This can be set explicitly or as a percentage of the Infill speed.".Localize(),
DataEditType = DataEditTypes.DOUBLE_OR_PERCENT,
RequiredDisplayDetail = DisplayDetailRequired.Advanced,
Units = "mm/s or %".Localize(),
DefaultValue = "100%",
Converter = new ClampToMinValue(SettingsKey.max_print_speed, new AsPercentOfReferenceOrDirect(SettingsKey.infill_speed)),
},
new SliceSettingData()
{
SlicerConfigName = SettingsKey.end_gcode,
PresentationName = "End G-Code".Localize(),
HelpText = "G-Code to be run at the end of all automatic output (the very end of the G-Code commands).".Localize(),
DataEditType = DataEditTypes.MULTI_LINE_TEXT,
DefaultValue = "M140 S0 ; turn off bed temperature\nM104 S0 ; turn off temperature\nG28 X0 ; home X axis\nM84 ; disable motors",
Converter = new GCodeMapping(),
},
new SliceSettingData()
{
SlicerConfigName = SettingsKey.clear_bed_gcode,
PresentationName = "Clear Bed G-Code".Localize(),
HelpText = "G-Code used by Autopilot to clear the bed after a print completes. This is only useful on a printer designed to clear the bed.".Localize(),
RequiredDisplayDetail = DisplayDetailRequired.Advanced,
DataEditType = DataEditTypes.MULTI_LINE_TEXT,
DefaultValue = "",
RebuildGCodeOnChange = false,
Converter = new GCodeMapping(),
},
new SliceSettingData()
{
SlicerConfigName = SettingsKey.external_perimeter_speed,
PresentationName = "Outside Perimeter".Localize(),
HelpText = "The speed at which outside, external, or the otherwise visible perimeters will print.".Localize(),
DataEditType = DataEditTypes.DOUBLE_OR_PERCENT,
Units = "mm/s or %".Localize(),
DefaultValue = "70%",
Converter = new ClampToMinValue(SettingsKey.max_print_speed, new AsPercentOfReferenceOrDirect(SettingsKey.perimeter_speed)),
},
new SliceSettingData()
{
SlicerConfigName = SettingsKey.external_perimeters_first,
PresentationName = "External Perimeters First".Localize(),
HelpText = "Forces external perimeters to be printed first. By default, they will print last. Using 3 or more perimeters will result in better quality.".Localize(),
DataEditType = DataEditTypes.CHECK_BOX,
RequiredDisplayDetail = DisplayDetailRequired.Advanced,
DefaultValue = "0",
Converter = new MappedToBoolString(),
},
new SliceSettingData()
{
SlicerConfigName = SettingsKey.extruder_count,
PresentationName = "Extruder Count".Localize(),
HelpText = "The number of extruders the printer has.".Localize(),
DataEditType = DataEditTypes.INT,
DefaultValue = "1",
UiUpdate = UiUpdateRequired.Application,
Converter = new ValueConverter(),
},
new SliceSettingData()
{
SlicerConfigName = SettingsKey.extruder_offset,
PresentationName = "Nozzle Offsets".Localize(),
HelpText = "The offset of each nozzle relative to the first nozzle. Only useful for multiple extruder machines.".Localize(),
DataEditType = DataEditTypes.OFFSET3,
RequiredDisplayDetail = DisplayDetailRequired.Advanced,
Units = "mm".Localize(),
DefaultValue = "0x0,0x0,0x0,0x0"
},
new SliceSettingData()
{
SlicerConfigName = SettingsKey.baby_step_z_offset,
PresentationName = "Baby Step Offset".Localize(),
HelpText = "The z offset to apply to improve the first layer adhesion.".Localize(),
DataEditType = DataEditTypes.DOUBLE,
Units = "mm".Localize(),
DefaultValue = "0",
RebuildGCodeOnChange = false,
PerToolName = (toolIndex) => $"{SettingsKey.baby_step_z_offset}_{toolIndex}"
},
new SliceSettingData()
{
SlicerConfigName = SettingsKey.extruders_share_temperature,
PresentationName = "Share Temperature".Localize(),
HelpText = "Used to specify if more than one extruder share a common heater cartridge.".Localize(),
DataEditType = DataEditTypes.CHECK_BOX,
RequiredDisplayDetail = DisplayDetailRequired.Advanced,
DefaultValue = "0",
Show = (settings) => settings.GetInt(SettingsKey.extruder_count) > 1,
UiUpdate = UiUpdateRequired.Application
},
new SliceSettingData()
{
SlicerConfigName = SettingsKey.heat_extruder_before_homing,
PresentationName = "Heat Before Homing".Localize(),
HelpText = "Forces the printer to heat the nozzle before homing.".Localize(),
DataEditType = DataEditTypes.CHECK_BOX,
DefaultValue = "0"
},
new SliceSettingData()
{
SlicerConfigName = SettingsKey.seam_placement,
PresentationName = "Seam Placement".Localize(),
HelpText = "What to do when there is not a good place to hide the seam.".Localize(),
DataEditType = DataEditTypes.LIST,
ListValues = "Furthest Back,Centered In Back,Always Centered In Back,Randomized,Fastest",
DefaultValue = "Furthest Back",
},
new SliceSettingData()
{
SlicerConfigName = SettingsKey.merge_overlapping_lines,
PresentationName = "Merge Overlapping Lines".Localize(),
HelpText = "Detect perimeters that cross over themselves and combine them.".Localize(),
DataEditType = DataEditTypes.CHECK_BOX,
RequiredDisplayDetail = DisplayDetailRequired.Advanced,
DefaultValue = "1",
Converter = new MappedToBoolString(),
},
new SliceSettingData()
{
SlicerConfigName = SettingsKey.expand_thin_walls,
PresentationName = "Expand Thin Walls".Localize(),
HelpText = "Detects sections of the model that would be too thin to print and expands them to make them printable.".Localize(),
DataEditType = DataEditTypes.CHECK_BOX,
RequiredDisplayDetail = DisplayDetailRequired.Advanced,
DefaultValue = "1",
Converter = new MappedToBoolString(),
},
new SliceSettingData()
{
SlicerConfigName = SettingsKey.extrusion_multiplier,
PresentationName = "Extrusion Multiplier".Localize(),
HelpText = "All extrusions are multiplied by this value. Increasing it above 1 will increase the amount of filament being extruded (1.1 is a good max value); decreasing it will decrease the amount being extruded (.9 is a good minimum value).".Localize(),
DataEditType = DataEditTypes.DOUBLE_OR_PERCENT,
Units = "Ratio or %".Localize(),
DefaultValue = "100%",
Converter = new AsPercentOrDirect(),
},
new SliceSettingData()
{
SlicerConfigName = SettingsKey.avoid_crossing_max_ratio,
PresentationName = "Max Ratio".Localize(),
HelpText = "The maximum amount that an avoid crossing travel can exceed the direct distance. If the avoid travel is too long, a direct move will be executed.".Localize(),
DataEditType = DataEditTypes.DOUBLE_OR_PERCENT,
Units = "Ratio or %".Localize(),
RequiredDisplayDetail = DisplayDetailRequired.Advanced,
DefaultValue = "3",
Converter = new AsPercentOrDirect(),
},
new SliceSettingData()
{
SlicerConfigName = SettingsKey.filament_cost,
PresentationName = "Cost".Localize(),
HelpText = "The price of one kilogram of filament. Used for estimating the cost of a print in the Layer View.".Localize(),
DataEditType = DataEditTypes.POSITIVE_DOUBLE,
RequiredDisplayDetail = DisplayDetailRequired.Advanced,
Units = "$/kg".Localize(),
DefaultValue = "0",
RebuildGCodeOnChange = false
},
new SliceSettingData()
{
SlicerConfigName = SettingsKey.filament_density,
PresentationName = "Density".Localize(),
HelpText = "Material density. Only used for estimating mass in the Layer View.".Localize(),
DataEditType = DataEditTypes.POSITIVE_DOUBLE,
RequiredDisplayDetail = DisplayDetailRequired.Advanced,
Units = "g/cm³".Localize(),
DefaultValue = "1.24",
RebuildGCodeOnChange = false,
QuickMenuSettings = { { "PLA", "1.24" }, { "PET", "1.27" }, { "ABS", "1.04" } },
},
new SliceSettingData()
{
SlicerConfigName = SettingsKey.resin_cost,
PresentationName = "Cost".Localize(),
HelpText = "The price of one kilogram of resin. Used for estimating the cost of a print in the Layer View.".Localize(),
DataEditType = DataEditTypes.POSITIVE_DOUBLE,
RequiredDisplayDetail = DisplayDetailRequired.Advanced,
Units = "$/kg".Localize(),
DefaultValue = "0",
RebuildGCodeOnChange = false,
},
new SliceSettingData()
{
SlicerConfigName = SettingsKey.resin_density,
PresentationName = "Density".Localize(),
HelpText = "Resin density. Only used for estimating mass in the Layer View.".Localize(),
DataEditType = DataEditTypes.POSITIVE_DOUBLE,
RequiredDisplayDetail = DisplayDetailRequired.Advanced,
Units = "g/cm³".Localize(),
DefaultValue = "1.24",
RebuildGCodeOnChange = false,
},
new SliceSettingData()
{
QuickMenuSettings = { { "Standard 1.75", "1.75" }, { "Wide 2.85", "2.85" } },
SlicerConfigName = SettingsKey.filament_diameter,
PresentationName = "Diameter".Localize(),
HelpText = "The actual diameter of the filament used for printing.".Localize(),
DataEditType = DataEditTypes.POSITIVE_DOUBLE,
RequiredDisplayDetail = DisplayDetailRequired.Advanced,
Units = "mm".Localize(),
DefaultValue = "3",
Converter = new ValueConverter(),
},
new SliceSettingData()
{
SlicerConfigName = SettingsKey.fill_angle,
PresentationName = "Starting Angle".Localize(),
HelpText = "The angle of the infill, measured from the X axis. Not used when bridging.".Localize(),
DataEditType = DataEditTypes.POSITIVE_DOUBLE,
Units = "°".Localize(),
DefaultValue = "45",
Converter = new ValueConverter(),
},
new SliceSettingData()
{
SlicerConfigName = SettingsKey.fuzzy_thickness,
PresentationName = "Fuzzy Thickness".Localize(),
HelpText = @"The maximum thickness the fuzz will be from the surface.
To Create:
- Right Click a part
- Modify
- Printing
- Convert to Fuzzy Region
- Place over the area you want to make Fuzzy".Replace("\r", "").Localize(),
DataEditType = DataEditTypes.POSITIVE_DOUBLE,
Units = "mm".Localize(),
DefaultValue = ".3",
RequiredDisplayDetail = DisplayDetailRequired.Advanced,
Converter = new ValueConverter(),
},
new SliceSettingData()
{
SlicerConfigName = SettingsKey.fuzzy_frequency,
PresentationName = "Fuzzy Frequency".Localize(),
HelpText = @"The average distance along the perimeter to change the depth of the fuzzy pattern. You can think of this as the smoothness of the pattern.
To Create:
- Right Click a part
- Modify
- Printing
- Convert to Fuzzy Region
- Place over the area you want to make Fuzzy".Replace("\r", "").Localize(),
DataEditType = DataEditTypes.POSITIVE_DOUBLE,
Units = "mm".Localize(),
DefaultValue = ".8",
RequiredDisplayDetail = DisplayDetailRequired.Advanced,
Converter = new ValueConverter(),
},
new SliceSettingData()
{
SlicerConfigName = SettingsKey.fill_density,
QuickMenuSettings = { { "Light", "10%" }, { "Standard", "30%" }, { "Heavy", "90%" } },
PresentationName = "Fill Density".Localize(),
HelpText = "The amount of infill material to generate, expressed as a ratio or a percentage.".Localize(),
DataEditType = DataEditTypes.DOUBLE_OR_PERCENT,
DefaultValue = "0.4",
RequiredDisplayDetail = DisplayDetailRequired.Simple,
Converter = new AsPercentOrDirectFirst(),
},
new SliceSettingData()
{
SlicerConfigName = SettingsKey.fill_thin_gaps,
PresentationName = "Fill Thin Gaps".Localize(),
HelpText = "Detect gaps between perimeters that are too thin to fill with normal infill and attempt to fill them.".Localize(),
DataEditType = DataEditTypes.CHECK_BOX,
DefaultValue = "1",
Converter = new MappedToBoolString(),
},
new SliceSettingData()
{
SlicerConfigName = SettingsKey.first_layer_extrusion_width,
PresentationName = "First Layer".Localize(),
HelpText = "A modifier of the width of the extrusion for the first layer of the print. A value greater than 100% can help with adhesion to the print bed.".Localize(),
DataEditType = DataEditTypes.DOUBLE_OR_PERCENT,
RequiredDisplayDetail = DisplayDetailRequired.Advanced,
Units = "mm or %".Localize(),
DefaultValue = "100%",
Converter = new AsPercentOfReferenceOrDirect(SettingsKey.nozzle_diameter),
},
new SliceSettingData()
{
SlicerConfigName = SettingsKey.first_layer_height,
PresentationName = "First Layer Thickness".Localize(),
HelpText = "The thickness of the first layer. A first layer taller than the default layer thickness can ensure good adhesion to the build plate.".Localize(),
DataEditType = DataEditTypes.DOUBLE_OR_PERCENT,
Units = "mm or %".Localize(),
DefaultValue = "0.3",
Converter = new AsPercentOfReferenceOrDirect(SettingsKey.layer_height),
},
new SliceSettingData()
{
SlicerConfigName = SettingsKey.first_layer_speed,
PresentationName = "Initial Layer Speed".Localize(),
HelpText = "The speed at which the nozzle will move when printing the initial layers. If expressed as a percentage the Infill speed is modified.".Localize(),
DataEditType = DataEditTypes.DOUBLE_OR_PERCENT,
Units = "mm/s or %".Localize(),
DefaultValue = "30%",
Converter = new ClampToMinValue(SettingsKey.max_print_speed, new AsPercentOfReferenceOrDirect(SettingsKey.infill_speed)),
},
new SliceSettingData()
{
SlicerConfigName = SettingsKey.number_of_first_layers,
PresentationName = "Initial Layers".Localize(),
HelpText = "The number of layers to consider as the beginning of the print. These will print at initial layer speed.".Localize(),
DataEditType = DataEditTypes.INT_OR_MM,
RequiredDisplayDetail = DisplayDetailRequired.Advanced,
Units = "layers or mm".Localize(),
DefaultValue = "1",
Converter = new AsCountOrDistance(SettingsKey.layer_height),
},
new SliceSettingData()
{
SlicerConfigName = SettingsKey.recover_first_layer_speed,
PresentationName = "Recover Layer Speed".Localize(),
HelpText = "The speed at which the nozzle will move when recovering a failed print, for 1 layer.".Localize(),
DataEditType = DataEditTypes.POSITIVE_DOUBLE,
Units = "mm/s".Localize(),
Show = (settings) => !settings.GetBool(SettingsKey.has_hardware_leveling)
&& settings.GetBool(SettingsKey.recover_is_enabled),
DefaultValue = "10",
RebuildGCodeOnChange = false
},
new SliceSettingData()
{
SlicerConfigName = SettingsKey.recover_is_enabled,
PresentationName = "Enable Recovery".Localize(),
HelpText = "When this is checked MatterControl will attempt to recover a print in the event of a failure, such as lost connection or lost power.".Localize(),
DataEditType = DataEditTypes.CHECK_BOX,
Show = (settings) => !settings.GetBool(SettingsKey.has_hardware_leveling),
DefaultValue = "0",
UiUpdate = UiUpdateRequired.SliceSettings,
RebuildGCodeOnChange = false
},
new SliceSettingData()
{
SlicerConfigName = SettingsKey.validate_layer_height,
PresentationName = "Validate Layer Height".Localize(),
HelpText = "Checks before each print that the layer height is less than the nozzle diameter (important for filament adhesion)".Localize(),
DataEditType = DataEditTypes.CHECK_BOX,
Units = "",
RequiredDisplayDetail = DisplayDetailRequired.Simple,
ShowAsOverride = true,
DefaultValue = "1",
RebuildGCodeOnChange = false
},
new SliceSettingData()
{
SlicerConfigName = SettingsKey.z_homes_to_max,
PresentationName = "Home Z Max".Localize(),
HelpText = "Indicates that the Z axis homes the hot end away from the bed (z-max homing)".Localize(),
DataEditType = DataEditTypes.CHECK_BOX,
Show = (settings) => !settings.GetBool(SettingsKey.has_hardware_leveling),
DefaultValue = "0",
UiUpdate = UiUpdateRequired.SliceSettings,
RebuildGCodeOnChange = false
},
new SliceSettingData()
{
SlicerConfigName = SettingsKey.recover_position_before_z_home,
PresentationName = "XY Homing Position".Localize(),
HelpText = "The X and Y position of the hot end that minimizes the chance of colliding with the parts on the bed.".Localize(),
DataEditType = DataEditTypes.VECTOR2,
Units = "mm".Localize(),
Show = (settings) => !settings.GetBool(SettingsKey.has_hardware_leveling)
&& settings.GetBool(SettingsKey.recover_is_enabled),
DefaultValue = "0,0",
RebuildGCodeOnChange = false
},
new SliceSettingData()
{
SlicerConfigName = SettingsKey.first_layer_temperature,
PresentationName = "Extrude First Layer".Localize(),
HelpText = "The temperature to which the nozzle will be heated before printing the first layer of a part. The printer will wait until this temperature has been reached before printing.".Localize(),
DataEditType = DataEditTypes.POSITIVE_DOUBLE,
Units = "°C".Localize(),
DefaultValue = "205"
},
new SliceSettingData()
{
SlicerConfigName = SettingsKey.auto_release_motors,
PresentationName = "Auto Release Motors".Localize(),
HelpText = "Turn off motor current at end of print or after cancel print.".Localize(),
DataEditType = DataEditTypes.CHECK_BOX,
DefaultValue = "1"
},
new SliceSettingData()
{
SlicerConfigName = SettingsKey.g0,
PresentationName = "Use G0".Localize(),
HelpText = "Use G0 for moves rather than G1.".Localize(),