diff --git a/resources/profiles/Anker/process/fdm_process_common.json b/resources/profiles/Anker/process/fdm_process_common.json index 7bf242ddb9..2a277cfd01 100644 --- a/resources/profiles/Anker/process/fdm_process_common.json +++ b/resources/profiles/Anker/process/fdm_process_common.json @@ -86,7 +86,7 @@ "top_solid_infill_flow_ratio": "1", "enable_prime_tower": "0", "wipe_tower_no_sparse_layers": "0", - "prime_tower_width": "35", + "prime_tower_width": "60", "xy_hole_compensation": "0", "xy_contour_compensation": "0", "layer_height": "0.2", diff --git a/resources/profiles/Anycubic/machine/Anycubic 4Max Pro 2 0.4 nozzle.json b/resources/profiles/Anycubic/machine/Anycubic 4Max Pro 2 0.4 nozzle.json index 144ca30f68..583653ce6e 100644 --- a/resources/profiles/Anycubic/machine/Anycubic 4Max Pro 2 0.4 nozzle.json +++ b/resources/profiles/Anycubic/machine/Anycubic 4Max Pro 2 0.4 nozzle.json @@ -100,7 +100,7 @@ "deretraction_speed": [ "25" ], - "single_extruder_multi_material": "0", + "single_extruder_multi_material": "1", "change_filament_gcode": "M600", "machine_pause_gcode": "M601", "default_filament_profile": [ diff --git a/resources/profiles/Anycubic/machine/Anycubic Chiron 0.4 nozzle.json b/resources/profiles/Anycubic/machine/Anycubic Chiron 0.4 nozzle.json index 0f437d53fa..b9b38159e2 100644 --- a/resources/profiles/Anycubic/machine/Anycubic Chiron 0.4 nozzle.json +++ b/resources/profiles/Anycubic/machine/Anycubic Chiron 0.4 nozzle.json @@ -104,7 +104,7 @@ "deretraction_speed": [ "0" ], - "single_extruder_multi_material": "0", + "single_extruder_multi_material": "1", "change_filament_gcode": "M600", "machine_pause_gcode": "M601", "default_filament_profile": [ diff --git a/resources/profiles/Anycubic/machine/Anycubic Kobra 2 0.4 nozzle.json b/resources/profiles/Anycubic/machine/Anycubic Kobra 2 0.4 nozzle.json index 454f3b49ff..67939352a5 100644 --- a/resources/profiles/Anycubic/machine/Anycubic Kobra 2 0.4 nozzle.json +++ b/resources/profiles/Anycubic/machine/Anycubic Kobra 2 0.4 nozzle.json @@ -100,7 +100,7 @@ "deretraction_speed": [ "80" ], - "single_extruder_multi_material": "0", + "single_extruder_multi_material": "1", "change_filament_gcode": "M600", "machine_pause_gcode": "M601", "default_filament_profile": [ diff --git a/resources/profiles/Anycubic/machine/Anycubic Kobra Max 0.4 nozzle.json b/resources/profiles/Anycubic/machine/Anycubic Kobra Max 0.4 nozzle.json index e1c2fa6f2c..8c8c4c12b9 100644 --- a/resources/profiles/Anycubic/machine/Anycubic Kobra Max 0.4 nozzle.json +++ b/resources/profiles/Anycubic/machine/Anycubic Kobra Max 0.4 nozzle.json @@ -104,7 +104,7 @@ "deretraction_speed": [ "40" ], - "single_extruder_multi_material": "0", + "single_extruder_multi_material": "1", "change_filament_gcode": "M600", "machine_pause_gcode": "M601", "default_filament_profile": [ diff --git a/resources/profiles/Anycubic/machine/Anycubic Kobra Plus 0.4 nozzle.json b/resources/profiles/Anycubic/machine/Anycubic Kobra Plus 0.4 nozzle.json index 71cfbf4e38..942e3e45d6 100644 --- a/resources/profiles/Anycubic/machine/Anycubic Kobra Plus 0.4 nozzle.json +++ b/resources/profiles/Anycubic/machine/Anycubic Kobra Plus 0.4 nozzle.json @@ -104,7 +104,7 @@ "deretraction_speed": [ "40" ], - "single_extruder_multi_material": "0", + "single_extruder_multi_material": "1", "change_filament_gcode": "M600", "machine_pause_gcode": "M601", "default_filament_profile": [ diff --git a/resources/profiles/Anycubic/machine/Anycubic Vyper 0.4 nozzle.json b/resources/profiles/Anycubic/machine/Anycubic Vyper 0.4 nozzle.json index 781dc9f953..01c8ff1d74 100644 --- a/resources/profiles/Anycubic/machine/Anycubic Vyper 0.4 nozzle.json +++ b/resources/profiles/Anycubic/machine/Anycubic Vyper 0.4 nozzle.json @@ -100,7 +100,7 @@ "deretraction_speed": [ "40" ], - "single_extruder_multi_material": "0", + "single_extruder_multi_material": "1", "change_filament_gcode": "M600", "machine_pause_gcode": "M601", "default_filament_profile": [ diff --git a/resources/profiles/Anycubic/machine/Anycubic i3 Mega S 0.4 nozzle.json b/resources/profiles/Anycubic/machine/Anycubic i3 Mega S 0.4 nozzle.json index 2281ae72ed..709dcf918f 100644 --- a/resources/profiles/Anycubic/machine/Anycubic i3 Mega S 0.4 nozzle.json +++ b/resources/profiles/Anycubic/machine/Anycubic i3 Mega S 0.4 nozzle.json @@ -104,7 +104,7 @@ "deretraction_speed": [ "50" ], - "single_extruder_multi_material": "0", + "single_extruder_multi_material": "1", "change_filament_gcode": "M600", "machine_pause_gcode": "M25", "default_filament_profile": [ diff --git a/resources/profiles/Anycubic/process/fdm_process_common.json b/resources/profiles/Anycubic/process/fdm_process_common.json index fd05875b11..faf2d9af79 100644 --- a/resources/profiles/Anycubic/process/fdm_process_common.json +++ b/resources/profiles/Anycubic/process/fdm_process_common.json @@ -84,9 +84,9 @@ "top_surface_pattern": "monotonic", "top_surface_line_width": "0.4", "top_shell_thickness": "0.8", - "enable_prime_tower": "1", + "enable_prime_tower": "0", "wipe_tower_no_sparse_layers": "0", - "prime_tower_width": "35", + "prime_tower_width": "60", "xy_hole_compensation": "0", "xy_contour_compensation": "0", "layer_height": "0.2", diff --git a/resources/profiles/Artillery/machine/Artillery Genius 0.4 nozzle.json b/resources/profiles/Artillery/machine/Artillery Genius 0.4 nozzle.json index 818f20279b..01535d296d 100644 --- a/resources/profiles/Artillery/machine/Artillery Genius 0.4 nozzle.json +++ b/resources/profiles/Artillery/machine/Artillery Genius 0.4 nozzle.json @@ -100,7 +100,7 @@ "deretraction_speed": [ "0" ], - "single_extruder_multi_material": "0", + "single_extruder_multi_material": "1", "change_filament_gcode": "", "machine_pause_gcode": "M0", "default_filament_profile": [ diff --git a/resources/profiles/Artillery/machine/Artillery Hornet 0.4 nozzle.json b/resources/profiles/Artillery/machine/Artillery Hornet 0.4 nozzle.json index e051b9cab0..17f7d71ff0 100644 --- a/resources/profiles/Artillery/machine/Artillery Hornet 0.4 nozzle.json +++ b/resources/profiles/Artillery/machine/Artillery Hornet 0.4 nozzle.json @@ -100,7 +100,7 @@ "deretraction_speed": [ "0" ], - "single_extruder_multi_material": "0", + "single_extruder_multi_material": "1", "change_filament_gcode": "", "machine_pause_gcode": "M0", "default_filament_profile": [ diff --git a/resources/profiles/Artillery/machine/Artillery Sidewinder X1 0.4 nozzle.json b/resources/profiles/Artillery/machine/Artillery Sidewinder X1 0.4 nozzle.json index e97a22f38f..7fbfaf193e 100644 --- a/resources/profiles/Artillery/machine/Artillery Sidewinder X1 0.4 nozzle.json +++ b/resources/profiles/Artillery/machine/Artillery Sidewinder X1 0.4 nozzle.json @@ -103,7 +103,7 @@ "deretraction_speed": [ "0" ], - "single_extruder_multi_material": "0", + "single_extruder_multi_material": "1", "change_filament_gcode": "", "machine_pause_gcode": "M0", "default_filament_profile": [ diff --git a/resources/profiles/Artillery/machine/Artillery Sidewinder X2 0.4 nozzle.json b/resources/profiles/Artillery/machine/Artillery Sidewinder X2 0.4 nozzle.json index 75f01e0ad6..bcf95b85ed 100644 --- a/resources/profiles/Artillery/machine/Artillery Sidewinder X2 0.4 nozzle.json +++ b/resources/profiles/Artillery/machine/Artillery Sidewinder X2 0.4 nozzle.json @@ -103,7 +103,7 @@ "deretraction_speed": [ "0" ], - "single_extruder_multi_material": "0", + "single_extruder_multi_material": "1", "change_filament_gcode": "", "machine_pause_gcode": "M0", "default_filament_profile": [ diff --git a/resources/profiles/Artillery/process/fdm_process_common.json b/resources/profiles/Artillery/process/fdm_process_common.json index fd05875b11..faf2d9af79 100644 --- a/resources/profiles/Artillery/process/fdm_process_common.json +++ b/resources/profiles/Artillery/process/fdm_process_common.json @@ -84,9 +84,9 @@ "top_surface_pattern": "monotonic", "top_surface_line_width": "0.4", "top_shell_thickness": "0.8", - "enable_prime_tower": "1", + "enable_prime_tower": "0", "wipe_tower_no_sparse_layers": "0", - "prime_tower_width": "35", + "prime_tower_width": "60", "xy_hole_compensation": "0", "xy_contour_compensation": "0", "layer_height": "0.2", diff --git a/resources/profiles/BBL.json b/resources/profiles/BBL.json index ef63d15ef6..e1e011d4da 100644 --- a/resources/profiles/BBL.json +++ b/resources/profiles/BBL.json @@ -1,7 +1,7 @@ { "name": "Bambulab", "url": "http://www.bambulab.com/Parameters/vendor/BBL.json", - "version": "01.07.00.10", + "version": "01.07.00.11", "force_update": "0", "description": "the initial version of BBL configurations", "machine_model_list": [ diff --git a/resources/profiles/BBL/machine/Bambu Lab P1P 0.4 nozzle.json b/resources/profiles/BBL/machine/Bambu Lab P1P 0.4 nozzle.json index fd4c684639..6118ac4bda 100644 --- a/resources/profiles/BBL/machine/Bambu Lab P1P 0.4 nozzle.json +++ b/resources/profiles/BBL/machine/Bambu Lab P1P 0.4 nozzle.json @@ -10,7 +10,7 @@ ], "printer_model": "Bambu Lab P1P", "printer_variant": "0.4", - "auxiliary_fan": "0", + "auxiliary_fan": "1", "bed_exclude_area": [ "0x0", "18x0", diff --git a/resources/profiles/BBL/machine/Bambu Lab X1 0.4 nozzle.json b/resources/profiles/BBL/machine/Bambu Lab X1 0.4 nozzle.json index b0ed303050..c7999d6cab 100644 --- a/resources/profiles/BBL/machine/Bambu Lab X1 0.4 nozzle.json +++ b/resources/profiles/BBL/machine/Bambu Lab X1 0.4 nozzle.json @@ -10,7 +10,7 @@ ], "printer_model": "Bambu Lab X1", "printer_variant": "0.4", - "auxiliary_fan": "0", + "auxiliary_fan": "1", "bed_exclude_area": [ "0x0", "18x0", diff --git a/resources/profiles/BBL/machine/fdm_bbl_3dp_001_common.json b/resources/profiles/BBL/machine/fdm_bbl_3dp_001_common.json index c217e13022..4abdcc61e1 100644 --- a/resources/profiles/BBL/machine/fdm_bbl_3dp_001_common.json +++ b/resources/profiles/BBL/machine/fdm_bbl_3dp_001_common.json @@ -160,5 +160,7 @@ "machine_pause_gcode": "M400 U1", "wipe": [ "1" - ] + ], + "purge_in_prime_tower": "0", + "enable_filament_ramming": "0" } diff --git a/resources/profiles/BBL/process/fdm_process_bbl_common.json b/resources/profiles/BBL/process/fdm_process_bbl_common.json index 43e5a02b8b..5cfd7e111c 100644 --- a/resources/profiles/BBL/process/fdm_process_bbl_common.json +++ b/resources/profiles/BBL/process/fdm_process_bbl_common.json @@ -108,5 +108,6 @@ "xy_hole_compensation": "0", "xy_contour_compensation": "0", "wall_generator": "arachne", - "gcode_label_objects": "0" + "gcode_label_objects": "0", + "flush_multiplier": "1.0" } diff --git a/resources/profiles/BIQU/machine/fdm_machine_common.json b/resources/profiles/BIQU/machine/fdm_machine_common.json index 4852f32686..4fc5f26bd7 100644 --- a/resources/profiles/BIQU/machine/fdm_machine_common.json +++ b/resources/profiles/BIQU/machine/fdm_machine_common.json @@ -105,7 +105,7 @@ "retraction_speed": [ "60" ], - "single_extruder_multi_material": "0", + "single_extruder_multi_material": "1", "change_filament_gcode": "", "wipe": [ "1" diff --git a/resources/profiles/BIQU/process/fdm_process_biqu_common.json b/resources/profiles/BIQU/process/fdm_process_biqu_common.json index 7fef4b7f6a..f6f264c868 100644 --- a/resources/profiles/BIQU/process/fdm_process_biqu_common.json +++ b/resources/profiles/BIQU/process/fdm_process_biqu_common.json @@ -98,7 +98,7 @@ "travel_speed": "150", "enable_prime_tower": "0", "wipe_tower_no_sparse_layers": "0", - "prime_tower_width": "35", + "prime_tower_width": "60", "xy_hole_compensation": "0", "xy_contour_compensation": "0" } diff --git a/resources/profiles/BIQU/process/fdm_process_hurakan_common.json b/resources/profiles/BIQU/process/fdm_process_hurakan_common.json index e1bf276aa6..2519589647 100644 --- a/resources/profiles/BIQU/process/fdm_process_hurakan_common.json +++ b/resources/profiles/BIQU/process/fdm_process_hurakan_common.json @@ -98,7 +98,7 @@ "travel_speed": "150", "enable_prime_tower": "0", "wipe_tower_no_sparse_layers": "0", - "prime_tower_width": "35", + "prime_tower_width": "60", "xy_hole_compensation": "0", "xy_contour_compensation": "0" } diff --git a/resources/profiles/Creality/machine/Creality CR-10 V2 0.4 nozzle.json b/resources/profiles/Creality/machine/Creality CR-10 V2 0.4 nozzle.json index ded563e91b..8d042e902c 100644 --- a/resources/profiles/Creality/machine/Creality CR-10 V2 0.4 nozzle.json +++ b/resources/profiles/Creality/machine/Creality CR-10 V2 0.4 nozzle.json @@ -97,7 +97,7 @@ "deretraction_speed": [ "40" ], - "single_extruder_multi_material": "0", + "single_extruder_multi_material": "1", "change_filament_gcode": "M600", "machine_pause_gcode": "M0", "default_filament_profile": [ diff --git a/resources/profiles/Creality/machine/Creality Ender-3 S1 0.4 nozzle.json b/resources/profiles/Creality/machine/Creality Ender-3 S1 0.4 nozzle.json index 783367e78f..eb73fdd825 100644 --- a/resources/profiles/Creality/machine/Creality Ender-3 S1 0.4 nozzle.json +++ b/resources/profiles/Creality/machine/Creality Ender-3 S1 0.4 nozzle.json @@ -97,7 +97,7 @@ "deretraction_speed": [ "40" ], - "single_extruder_multi_material": "0", + "single_extruder_multi_material": "1", "change_filament_gcode": "M600", "machine_pause_gcode": "M25", "default_filament_profile": [ diff --git a/resources/profiles/Creality/machine/Creality Ender-3 S1 Pro 0.4 nozzle.json b/resources/profiles/Creality/machine/Creality Ender-3 S1 Pro 0.4 nozzle.json index dedb887c0c..b1206d1273 100644 --- a/resources/profiles/Creality/machine/Creality Ender-3 S1 Pro 0.4 nozzle.json +++ b/resources/profiles/Creality/machine/Creality Ender-3 S1 Pro 0.4 nozzle.json @@ -100,7 +100,7 @@ "deretraction_speed": [ "30" ], - "single_extruder_multi_material": "0", + "single_extruder_multi_material": "1", "change_filament_gcode": "M600", "machine_pause_gcode": "M25", "default_filament_profile": [ diff --git a/resources/profiles/Creality/machine/Creality Ender-5 0.4 nozzle.json b/resources/profiles/Creality/machine/Creality Ender-5 0.4 nozzle.json index 5bf2ad400d..393659da71 100644 --- a/resources/profiles/Creality/machine/Creality Ender-5 0.4 nozzle.json +++ b/resources/profiles/Creality/machine/Creality Ender-5 0.4 nozzle.json @@ -97,7 +97,7 @@ "deretraction_speed": [ "40" ], - "single_extruder_multi_material": "0", + "single_extruder_multi_material": "1", "change_filament_gcode": "M600", "machine_pause_gcode": "M0", "default_filament_profile": [ diff --git a/resources/profiles/Creality/machine/Creality Ender-5 Plus 0.4 nozzle.json b/resources/profiles/Creality/machine/Creality Ender-5 Plus 0.4 nozzle.json index f8542c6a76..0b101422a1 100644 --- a/resources/profiles/Creality/machine/Creality Ender-5 Plus 0.4 nozzle.json +++ b/resources/profiles/Creality/machine/Creality Ender-5 Plus 0.4 nozzle.json @@ -100,7 +100,7 @@ "deretraction_speed": [ "40" ], - "single_extruder_multi_material": "0", + "single_extruder_multi_material": "1", "change_filament_gcode": "M600", "machine_pause_gcode": "M0", "default_filament_profile": [ diff --git a/resources/profiles/Creality/machine/Creality Ender-5 S1 0.4 nozzle.json b/resources/profiles/Creality/machine/Creality Ender-5 S1 0.4 nozzle.json index b9a4d10279..84f23c9f25 100644 --- a/resources/profiles/Creality/machine/Creality Ender-5 S1 0.4 nozzle.json +++ b/resources/profiles/Creality/machine/Creality Ender-5 S1 0.4 nozzle.json @@ -97,7 +97,7 @@ "deretraction_speed": [ "30" ], - "single_extruder_multi_material": "0", + "single_extruder_multi_material": "1", "change_filament_gcode": "M600", "machine_pause_gcode": "M25", "default_filament_profile": [ diff --git a/resources/profiles/Creality/machine/Creality Ender-5S 0.4 nozzle.json b/resources/profiles/Creality/machine/Creality Ender-5S 0.4 nozzle.json index 69a8e150b1..79c73d5d14 100644 --- a/resources/profiles/Creality/machine/Creality Ender-5S 0.4 nozzle.json +++ b/resources/profiles/Creality/machine/Creality Ender-5S 0.4 nozzle.json @@ -97,7 +97,7 @@ "deretraction_speed": [ "40" ], - "single_extruder_multi_material": "0", + "single_extruder_multi_material": "1", "change_filament_gcode": "M600", "machine_pause_gcode": "M0", "default_filament_profile": [ diff --git a/resources/profiles/Creality/machine/Creality Ender-6 0.4 nozzle.json b/resources/profiles/Creality/machine/Creality Ender-6 0.4 nozzle.json index 938f7ad0ac..6fe8d0ff19 100644 --- a/resources/profiles/Creality/machine/Creality Ender-6 0.4 nozzle.json +++ b/resources/profiles/Creality/machine/Creality Ender-6 0.4 nozzle.json @@ -97,7 +97,7 @@ "deretraction_speed": [ "40" ], - "single_extruder_multi_material": "0", + "single_extruder_multi_material": "1", "change_filament_gcode": "M600", "machine_pause_gcode": "M0", "default_filament_profile": [ diff --git a/resources/profiles/Creality/machine/fdm_machine_common.json b/resources/profiles/Creality/machine/fdm_machine_common.json index 96af9a8090..1c38dd8cc5 100644 --- a/resources/profiles/Creality/machine/fdm_machine_common.json +++ b/resources/profiles/Creality/machine/fdm_machine_common.json @@ -105,7 +105,7 @@ "retraction_speed": [ "60" ], - "single_extruder_multi_material": "0", + "single_extruder_multi_material": "1", "change_filament_gcode": "", "wipe": [ "1" diff --git a/resources/profiles/Creality/process/0.12mm Fine @Creality CR10Max.json b/resources/profiles/Creality/process/0.12mm Fine @Creality CR10Max.json index 8e0a80a141..1c3cefe233 100644 --- a/resources/profiles/Creality/process/0.12mm Fine @Creality CR10Max.json +++ b/resources/profiles/Creality/process/0.12mm Fine @Creality CR10Max.json @@ -99,7 +99,7 @@ "travel_speed": "150", "enable_prime_tower": "0", "wipe_tower_no_sparse_layers": "0", - "prime_tower_width": "35", + "prime_tower_width": "60", "xy_hole_compensation": "0", "xy_contour_compensation": "0", "compatible_printers": [ diff --git a/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3V2.json b/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3V2.json index 7fda785011..e4fff81299 100644 --- a/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3V2.json +++ b/resources/profiles/Creality/process/0.12mm Fine @Creality Ender3V2.json @@ -99,7 +99,7 @@ "travel_speed": "150", "enable_prime_tower": "0", "wipe_tower_no_sparse_layers": "0", - "prime_tower_width": "35", + "prime_tower_width": "60", "xy_hole_compensation": "0", "xy_contour_compensation": "0", "compatible_printers": [ diff --git a/resources/profiles/Creality/process/0.12mm Fine @Creality Ender5Pro (2019).json b/resources/profiles/Creality/process/0.12mm Fine @Creality Ender5Pro (2019).json index 2274637001..3613ada505 100644 --- a/resources/profiles/Creality/process/0.12mm Fine @Creality Ender5Pro (2019).json +++ b/resources/profiles/Creality/process/0.12mm Fine @Creality Ender5Pro (2019).json @@ -99,7 +99,7 @@ "travel_speed": "150", "enable_prime_tower": "0", "wipe_tower_no_sparse_layers": "0", - "prime_tower_width": "35", + "prime_tower_width": "60", "xy_hole_compensation": "0", "xy_contour_compensation": "0", "compatible_printers": [ diff --git a/resources/profiles/Creality/process/0.15mm Optimal @Creality CR10Max.json b/resources/profiles/Creality/process/0.15mm Optimal @Creality CR10Max.json index f901ff890e..3d0db3caa7 100644 --- a/resources/profiles/Creality/process/0.15mm Optimal @Creality CR10Max.json +++ b/resources/profiles/Creality/process/0.15mm Optimal @Creality CR10Max.json @@ -99,7 +99,7 @@ "travel_speed": "150", "enable_prime_tower": "0", "wipe_tower_no_sparse_layers": "0", - "prime_tower_width": "35", + "prime_tower_width": "60", "xy_hole_compensation": "0", "xy_contour_compensation": "0", "compatible_printers": [ diff --git a/resources/profiles/Creality/process/0.15mm Optimal @Creality Ender3V2.json b/resources/profiles/Creality/process/0.15mm Optimal @Creality Ender3V2.json index 7f26e1d90e..6856368697 100644 --- a/resources/profiles/Creality/process/0.15mm Optimal @Creality Ender3V2.json +++ b/resources/profiles/Creality/process/0.15mm Optimal @Creality Ender3V2.json @@ -99,7 +99,7 @@ "travel_speed": "150", "enable_prime_tower": "0", "wipe_tower_no_sparse_layers": "0", - "prime_tower_width": "35", + "prime_tower_width": "60", "xy_hole_compensation": "0", "xy_contour_compensation": "0", "compatible_printers": [ diff --git a/resources/profiles/Creality/process/0.15mm Optimal @Creality Ender5Pro (2019).json b/resources/profiles/Creality/process/0.15mm Optimal @Creality Ender5Pro (2019).json index 5cf210d5e6..c67ceeda6a 100644 --- a/resources/profiles/Creality/process/0.15mm Optimal @Creality Ender5Pro (2019).json +++ b/resources/profiles/Creality/process/0.15mm Optimal @Creality Ender5Pro (2019).json @@ -99,7 +99,7 @@ "travel_speed": "150", "enable_prime_tower": "0", "wipe_tower_no_sparse_layers": "0", - "prime_tower_width": "35", + "prime_tower_width": "60", "xy_hole_compensation": "0", "xy_contour_compensation": "0", "compatible_printers": [ diff --git a/resources/profiles/Creality/process/0.16mm Optimal @Creality K1 (0.4 nozzle).json b/resources/profiles/Creality/process/0.16mm Optimal @Creality K1 (0.4 nozzle).json index 16c82e9fa7..d40f18e953 100644 --- a/resources/profiles/Creality/process/0.16mm Optimal @Creality K1 (0.4 nozzle).json +++ b/resources/profiles/Creality/process/0.16mm Optimal @Creality K1 (0.4 nozzle).json @@ -103,9 +103,9 @@ "top_shell_layers": "3", "top_shell_thickness": "0.6", "travel_speed": "500", - "enable_prime_tower": "1", + "enable_prime_tower": "0", "wipe_tower_no_sparse_layers": "0", - "prime_tower_width": "35", + "prime_tower_width": "60", "xy_hole_compensation": "0", "xy_contour_compensation": "0", "gcode_label_objects": "0", diff --git a/resources/profiles/Creality/process/0.16mm Optimal @Creality K1Max (0.4 nozzle).json b/resources/profiles/Creality/process/0.16mm Optimal @Creality K1Max (0.4 nozzle).json index cb9b8205ae..30ac1cc624 100644 --- a/resources/profiles/Creality/process/0.16mm Optimal @Creality K1Max (0.4 nozzle).json +++ b/resources/profiles/Creality/process/0.16mm Optimal @Creality K1Max (0.4 nozzle).json @@ -103,9 +103,9 @@ "top_shell_layers": "3", "top_shell_thickness": "0.6", "travel_speed": "500", - "enable_prime_tower": "1", + "enable_prime_tower": "0", "wipe_tower_no_sparse_layers": "0", - "prime_tower_width": "35", + "prime_tower_width": "60", "xy_hole_compensation": "0", "xy_contour_compensation": "0", "gcode_label_objects": "0", diff --git a/resources/profiles/Creality/process/0.20mm Standard @Creality CR10Max.json b/resources/profiles/Creality/process/0.20mm Standard @Creality CR10Max.json index 70b82a7b80..a2ca2e66c9 100644 --- a/resources/profiles/Creality/process/0.20mm Standard @Creality CR10Max.json +++ b/resources/profiles/Creality/process/0.20mm Standard @Creality CR10Max.json @@ -99,7 +99,7 @@ "travel_speed": "150", "enable_prime_tower": "0", "wipe_tower_no_sparse_layers": "0", - "prime_tower_width": "35", + "prime_tower_width": "60", "xy_hole_compensation": "0", "xy_contour_compensation": "0", "compatible_printers": [ diff --git a/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3V2.json b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3V2.json index b1e5c03750..b7bcff8bbb 100644 --- a/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3V2.json +++ b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender3V2.json @@ -99,7 +99,7 @@ "travel_speed": "150", "enable_prime_tower": "0", "wipe_tower_no_sparse_layers": "0", - "prime_tower_width": "35", + "prime_tower_width": "60", "xy_hole_compensation": "0", "xy_contour_compensation": "0", "compatible_printers": [ diff --git a/resources/profiles/Creality/process/0.20mm Standard @Creality Ender5Pro (2019).json b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender5Pro (2019).json index 8e58693e9f..48d4d98e51 100644 --- a/resources/profiles/Creality/process/0.20mm Standard @Creality Ender5Pro (2019).json +++ b/resources/profiles/Creality/process/0.20mm Standard @Creality Ender5Pro (2019).json @@ -99,7 +99,7 @@ "travel_speed": "150", "enable_prime_tower": "0", "wipe_tower_no_sparse_layers": "0", - "prime_tower_width": "35", + "prime_tower_width": "60", "xy_hole_compensation": "0", "xy_contour_compensation": "0", "compatible_printers": [ diff --git a/resources/profiles/Creality/process/0.20mm Standard @Creality K1 (0.4 nozzle).json b/resources/profiles/Creality/process/0.20mm Standard @Creality K1 (0.4 nozzle).json index e9a8ad5cec..370d3cf6c9 100644 --- a/resources/profiles/Creality/process/0.20mm Standard @Creality K1 (0.4 nozzle).json +++ b/resources/profiles/Creality/process/0.20mm Standard @Creality K1 (0.4 nozzle).json @@ -103,9 +103,9 @@ "top_shell_layers": "3", "top_shell_thickness": "0.6", "travel_speed": "500", - "enable_prime_tower": "1", + "enable_prime_tower": "0", "wipe_tower_no_sparse_layers": "0", - "prime_tower_width": "35", + "prime_tower_width": "60", "xy_hole_compensation": "0", "xy_contour_compensation": "0", "gcode_label_objects": "0", diff --git a/resources/profiles/Creality/process/0.20mm Standard @Creality K1Max (0.4 nozzle).json b/resources/profiles/Creality/process/0.20mm Standard @Creality K1Max (0.4 nozzle).json index bc75a6fef9..acb91b51bf 100644 --- a/resources/profiles/Creality/process/0.20mm Standard @Creality K1Max (0.4 nozzle).json +++ b/resources/profiles/Creality/process/0.20mm Standard @Creality K1Max (0.4 nozzle).json @@ -103,9 +103,9 @@ "top_shell_layers": "3", "top_shell_thickness": "0.6", "travel_speed": "500", - "enable_prime_tower": "1", + "enable_prime_tower": "0", "wipe_tower_no_sparse_layers": "0", - "prime_tower_width": "35", + "prime_tower_width": "60", "xy_hole_compensation": "0", "xy_contour_compensation": "0", "gcode_label_objects": "0", diff --git a/resources/profiles/Creality/process/0.24mm Draft @Creality CR10Max.json b/resources/profiles/Creality/process/0.24mm Draft @Creality CR10Max.json index bd675a7caa..209ded8211 100644 --- a/resources/profiles/Creality/process/0.24mm Draft @Creality CR10Max.json +++ b/resources/profiles/Creality/process/0.24mm Draft @Creality CR10Max.json @@ -99,7 +99,7 @@ "travel_speed": "150", "enable_prime_tower": "0", "wipe_tower_no_sparse_layers": "0", - "prime_tower_width": "35", + "prime_tower_width": "60", "xy_hole_compensation": "0", "xy_contour_compensation": "0", "compatible_printers": [ diff --git a/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3V2.json b/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3V2.json index dfc051573a..b2db3fb562 100644 --- a/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3V2.json +++ b/resources/profiles/Creality/process/0.24mm Draft @Creality Ender3V2.json @@ -99,7 +99,7 @@ "travel_speed": "150", "enable_prime_tower": "0", "wipe_tower_no_sparse_layers": "0", - "prime_tower_width": "35", + "prime_tower_width": "60", "xy_hole_compensation": "0", "xy_contour_compensation": "0", "compatible_printers": [ diff --git a/resources/profiles/Creality/process/0.24mm Draft @Creality Ender5Pro (2019).json b/resources/profiles/Creality/process/0.24mm Draft @Creality Ender5Pro (2019).json index 2eb20a75e5..7354faf490 100644 --- a/resources/profiles/Creality/process/0.24mm Draft @Creality Ender5Pro (2019).json +++ b/resources/profiles/Creality/process/0.24mm Draft @Creality Ender5Pro (2019).json @@ -99,7 +99,7 @@ "travel_speed": "150", "enable_prime_tower": "0", "wipe_tower_no_sparse_layers": "0", - "prime_tower_width": "35", + "prime_tower_width": "60", "xy_hole_compensation": "0", "xy_contour_compensation": "0", "compatible_printers": [ diff --git a/resources/profiles/Creality/process/0.24mm Draft @Creality K1 (0.4 nozzle).json b/resources/profiles/Creality/process/0.24mm Draft @Creality K1 (0.4 nozzle).json index 37ddb20730..aff9685f8b 100644 --- a/resources/profiles/Creality/process/0.24mm Draft @Creality K1 (0.4 nozzle).json +++ b/resources/profiles/Creality/process/0.24mm Draft @Creality K1 (0.4 nozzle).json @@ -103,9 +103,9 @@ "top_shell_layers": "3", "top_shell_thickness": "0.6", "travel_speed": "500", - "enable_prime_tower": "1", + "enable_prime_tower": "0", "wipe_tower_no_sparse_layers": "0", - "prime_tower_width": "35", + "prime_tower_width": "60", "xy_hole_compensation": "0", "xy_contour_compensation": "0", "gcode_label_objects": "0", diff --git a/resources/profiles/Creality/process/0.24mm Draft @Creality K1Max (0.4 nozzle).json b/resources/profiles/Creality/process/0.24mm Draft @Creality K1Max (0.4 nozzle).json index 583c2c4790..7e7d68f574 100644 --- a/resources/profiles/Creality/process/0.24mm Draft @Creality K1Max (0.4 nozzle).json +++ b/resources/profiles/Creality/process/0.24mm Draft @Creality K1Max (0.4 nozzle).json @@ -103,9 +103,9 @@ "top_shell_layers": "3", "top_shell_thickness": "0.6", "travel_speed": "500", - "enable_prime_tower": "1", + "enable_prime_tower": "0", "wipe_tower_no_sparse_layers": "0", - "prime_tower_width": "35", + "prime_tower_width": "60", "xy_hole_compensation": "0", "xy_contour_compensation": "0", "gcode_label_objects": "0", diff --git a/resources/profiles/Creality/process/0.24mm Optimal @Creality K1 (0.6 nozzle).json b/resources/profiles/Creality/process/0.24mm Optimal @Creality K1 (0.6 nozzle).json index 8e75b10259..14ddd750eb 100644 --- a/resources/profiles/Creality/process/0.24mm Optimal @Creality K1 (0.6 nozzle).json +++ b/resources/profiles/Creality/process/0.24mm Optimal @Creality K1 (0.6 nozzle).json @@ -103,9 +103,9 @@ "top_shell_layers": "3", "top_shell_thickness": "0.6", "travel_speed": "500", - "enable_prime_tower": "1", + "enable_prime_tower": "0", "wipe_tower_no_sparse_layers": "0", - "prime_tower_width": "35", + "prime_tower_width": "60", "xy_hole_compensation": "0", "xy_contour_compensation": "0", "gcode_label_objects": "0", diff --git a/resources/profiles/Creality/process/0.24mm Optimal @Creality K1Max (0.6 nozzle).json b/resources/profiles/Creality/process/0.24mm Optimal @Creality K1Max (0.6 nozzle).json index de3663270f..7ac9cbe9f1 100644 --- a/resources/profiles/Creality/process/0.24mm Optimal @Creality K1Max (0.6 nozzle).json +++ b/resources/profiles/Creality/process/0.24mm Optimal @Creality K1Max (0.6 nozzle).json @@ -103,9 +103,9 @@ "top_shell_layers": "3", "top_shell_thickness": "0.6", "travel_speed": "500", - "enable_prime_tower": "1", + "enable_prime_tower": "0", "wipe_tower_no_sparse_layers": "0", - "prime_tower_width": "35", + "prime_tower_width": "60", "xy_hole_compensation": "0", "xy_contour_compensation": "0", "gcode_label_objects": "0", diff --git a/resources/profiles/Creality/process/0.30mm Standard @Creality K1 (0.6 nozzle).json b/resources/profiles/Creality/process/0.30mm Standard @Creality K1 (0.6 nozzle).json index 62b98ee4fb..9c47f7d942 100644 --- a/resources/profiles/Creality/process/0.30mm Standard @Creality K1 (0.6 nozzle).json +++ b/resources/profiles/Creality/process/0.30mm Standard @Creality K1 (0.6 nozzle).json @@ -103,9 +103,9 @@ "top_shell_layers": "3", "top_shell_thickness": "0.6", "travel_speed": "500", - "enable_prime_tower": "1", + "enable_prime_tower": "0", "wipe_tower_no_sparse_layers": "0", - "prime_tower_width": "35", + "prime_tower_width": "60", "xy_hole_compensation": "0", "xy_contour_compensation": "0", "gcode_label_objects": "0", diff --git a/resources/profiles/Creality/process/0.30mm Standard @Creality K1Max (0.6 nozzle).json b/resources/profiles/Creality/process/0.30mm Standard @Creality K1Max (0.6 nozzle).json index 35c05bc788..ead330c693 100644 --- a/resources/profiles/Creality/process/0.30mm Standard @Creality K1Max (0.6 nozzle).json +++ b/resources/profiles/Creality/process/0.30mm Standard @Creality K1Max (0.6 nozzle).json @@ -103,9 +103,9 @@ "top_shell_layers": "3", "top_shell_thickness": "0.6", "travel_speed": "500", - "enable_prime_tower": "1", + "enable_prime_tower": "0", "wipe_tower_no_sparse_layers": "0", - "prime_tower_width": "35", + "prime_tower_width": "60", "xy_hole_compensation": "0", "xy_contour_compensation": "0", "gcode_label_objects": "0", diff --git a/resources/profiles/Creality/process/0.32mm Optimal @Creality K1 (0.8 nozzle).json b/resources/profiles/Creality/process/0.32mm Optimal @Creality K1 (0.8 nozzle).json index 9d6215dd60..4349548d87 100644 --- a/resources/profiles/Creality/process/0.32mm Optimal @Creality K1 (0.8 nozzle).json +++ b/resources/profiles/Creality/process/0.32mm Optimal @Creality K1 (0.8 nozzle).json @@ -103,9 +103,9 @@ "top_shell_layers": "3", "top_shell_thickness": "0.6", "travel_speed": "500", - "enable_prime_tower": "1", + "enable_prime_tower": "0", "wipe_tower_no_sparse_layers": "0", - "prime_tower_width": "35", + "prime_tower_width": "60", "xy_hole_compensation": "0", "xy_contour_compensation": "0", "gcode_label_objects": "0", diff --git a/resources/profiles/Creality/process/0.32mm Optimal @Creality K1Max (0.8 nozzle).json b/resources/profiles/Creality/process/0.32mm Optimal @Creality K1Max (0.8 nozzle).json index a1f34a2032..21eac2347e 100644 --- a/resources/profiles/Creality/process/0.32mm Optimal @Creality K1Max (0.8 nozzle).json +++ b/resources/profiles/Creality/process/0.32mm Optimal @Creality K1Max (0.8 nozzle).json @@ -103,9 +103,9 @@ "top_shell_layers": "3", "top_shell_thickness": "0.6", "travel_speed": "500", - "enable_prime_tower": "1", + "enable_prime_tower": "0", "wipe_tower_no_sparse_layers": "0", - "prime_tower_width": "35", + "prime_tower_width": "60", "xy_hole_compensation": "0", "xy_contour_compensation": "0", "gcode_label_objects": "0", diff --git a/resources/profiles/Creality/process/0.36mm Draft @Creality K1 (0.6 nozzle).json b/resources/profiles/Creality/process/0.36mm Draft @Creality K1 (0.6 nozzle).json index 75b62fe90d..6b54d3c3e6 100644 --- a/resources/profiles/Creality/process/0.36mm Draft @Creality K1 (0.6 nozzle).json +++ b/resources/profiles/Creality/process/0.36mm Draft @Creality K1 (0.6 nozzle).json @@ -103,9 +103,9 @@ "top_shell_layers": "3", "top_shell_thickness": "0.6", "travel_speed": "500", - "enable_prime_tower": "1", + "enable_prime_tower": "0", "wipe_tower_no_sparse_layers": "0", - "prime_tower_width": "35", + "prime_tower_width": "60", "xy_hole_compensation": "0", "xy_contour_compensation": "0", "gcode_label_objects": "0", diff --git a/resources/profiles/Creality/process/0.36mm Draft @Creality K1Max (0.6 nozzle).json b/resources/profiles/Creality/process/0.36mm Draft @Creality K1Max (0.6 nozzle).json index 7b1b504554..cf796e77cf 100644 --- a/resources/profiles/Creality/process/0.36mm Draft @Creality K1Max (0.6 nozzle).json +++ b/resources/profiles/Creality/process/0.36mm Draft @Creality K1Max (0.6 nozzle).json @@ -103,9 +103,9 @@ "top_shell_layers": "3", "top_shell_thickness": "0.6", "travel_speed": "500", - "enable_prime_tower": "1", + "enable_prime_tower": "0", "wipe_tower_no_sparse_layers": "0", - "prime_tower_width": "35", + "prime_tower_width": "60", "xy_hole_compensation": "0", "xy_contour_compensation": "0", "gcode_label_objects": "0", diff --git a/resources/profiles/Creality/process/0.40mm Standard @Creality K1 (0.8 nozzle).json b/resources/profiles/Creality/process/0.40mm Standard @Creality K1 (0.8 nozzle).json index 10e4403891..a4c4cef212 100644 --- a/resources/profiles/Creality/process/0.40mm Standard @Creality K1 (0.8 nozzle).json +++ b/resources/profiles/Creality/process/0.40mm Standard @Creality K1 (0.8 nozzle).json @@ -103,9 +103,9 @@ "top_shell_layers": "3", "top_shell_thickness": "0.6", "travel_speed": "500", - "enable_prime_tower": "1", + "enable_prime_tower": "0", "wipe_tower_no_sparse_layers": "0", - "prime_tower_width": "35", + "prime_tower_width": "60", "xy_hole_compensation": "0", "xy_contour_compensation": "0", "gcode_label_objects": "0", diff --git a/resources/profiles/Creality/process/0.40mm Standard @Creality K1Max (0.8 nozzle).json b/resources/profiles/Creality/process/0.40mm Standard @Creality K1Max (0.8 nozzle).json index b7697a2126..73ffc4dcd5 100644 --- a/resources/profiles/Creality/process/0.40mm Standard @Creality K1Max (0.8 nozzle).json +++ b/resources/profiles/Creality/process/0.40mm Standard @Creality K1Max (0.8 nozzle).json @@ -103,9 +103,9 @@ "top_shell_layers": "3", "top_shell_thickness": "0.6", "travel_speed": "500", - "enable_prime_tower": "1", + "enable_prime_tower": "0", "wipe_tower_no_sparse_layers": "0", - "prime_tower_width": "35", + "prime_tower_width": "60", "xy_hole_compensation": "0", "xy_contour_compensation": "0", "gcode_label_objects": "0", diff --git a/resources/profiles/Creality/process/0.48mm Draft @Creality K1 (0.8 nozzle).json b/resources/profiles/Creality/process/0.48mm Draft @Creality K1 (0.8 nozzle).json index e15bea7c19..aa22d082e0 100644 --- a/resources/profiles/Creality/process/0.48mm Draft @Creality K1 (0.8 nozzle).json +++ b/resources/profiles/Creality/process/0.48mm Draft @Creality K1 (0.8 nozzle).json @@ -103,9 +103,9 @@ "top_shell_layers": "3", "top_shell_thickness": "0.6", "travel_speed": "500", - "enable_prime_tower": "1", + "enable_prime_tower": "0", "wipe_tower_no_sparse_layers": "0", - "prime_tower_width": "35", + "prime_tower_width": "60", "xy_hole_compensation": "0", "xy_contour_compensation": "0", "gcode_label_objects": "0", diff --git a/resources/profiles/Creality/process/0.48mm Draft @Creality K1Max (0.8 nozzle).json b/resources/profiles/Creality/process/0.48mm Draft @Creality K1Max (0.8 nozzle).json index e095329a9d..3f50fcec4c 100644 --- a/resources/profiles/Creality/process/0.48mm Draft @Creality K1Max (0.8 nozzle).json +++ b/resources/profiles/Creality/process/0.48mm Draft @Creality K1Max (0.8 nozzle).json @@ -103,9 +103,9 @@ "top_shell_layers": "3", "top_shell_thickness": "0.6", "travel_speed": "500", - "enable_prime_tower": "1", + "enable_prime_tower": "0", "wipe_tower_no_sparse_layers": "0", - "prime_tower_width": "35", + "prime_tower_width": "60", "xy_hole_compensation": "0", "xy_contour_compensation": "0", "gcode_label_objects": "0", diff --git a/resources/profiles/Creality/process/fdm_process_creality_common.json b/resources/profiles/Creality/process/fdm_process_creality_common.json index c652dd2960..5d6c90e849 100644 --- a/resources/profiles/Creality/process/fdm_process_creality_common.json +++ b/resources/profiles/Creality/process/fdm_process_creality_common.json @@ -98,7 +98,7 @@ "travel_speed": "150", "enable_prime_tower": "0", "wipe_tower_no_sparse_layers": "0", - "prime_tower_width": "35", + "prime_tower_width": "60", "xy_hole_compensation": "0", "xy_contour_compensation": "0" } diff --git a/resources/profiles/Custom/machine/fdm_machine_common.json b/resources/profiles/Custom/machine/fdm_machine_common.json index 76cfe3d36c..28ee8f30b5 100644 --- a/resources/profiles/Custom/machine/fdm_machine_common.json +++ b/resources/profiles/Custom/machine/fdm_machine_common.json @@ -105,7 +105,7 @@ "retraction_speed": [ "60" ], - "single_extruder_multi_material": "0", + "single_extruder_multi_material": "1", "change_filament_gcode": "", "wipe": [ "1" diff --git a/resources/profiles/Custom/process/fdm_process_klipper_common.json b/resources/profiles/Custom/process/fdm_process_klipper_common.json index 99e4d84fe1..111573307d 100644 --- a/resources/profiles/Custom/process/fdm_process_klipper_common.json +++ b/resources/profiles/Custom/process/fdm_process_klipper_common.json @@ -98,7 +98,7 @@ "travel_speed": "350", "enable_prime_tower": "0", "wipe_tower_no_sparse_layers": "0", - "prime_tower_width": "35", + "prime_tower_width": "60", "xy_hole_compensation": "0", "xy_contour_compensation": "0", "enable_arc_fitting": "0", diff --git a/resources/profiles/Custom/process/fdm_process_marlin_common.json b/resources/profiles/Custom/process/fdm_process_marlin_common.json index 125431d1ea..4ca361a2ed 100644 --- a/resources/profiles/Custom/process/fdm_process_marlin_common.json +++ b/resources/profiles/Custom/process/fdm_process_marlin_common.json @@ -98,7 +98,7 @@ "travel_speed": "150", "enable_prime_tower": "0", "wipe_tower_no_sparse_layers": "0", - "prime_tower_width": "35", + "prime_tower_width": "60", "xy_hole_compensation": "0", "xy_contour_compensation": "0", "enable_arc_fitting": "0", diff --git a/resources/profiles/Elegoo/machine/Elegoo Neptune 0.4 nozzle.json b/resources/profiles/Elegoo/machine/Elegoo Neptune 0.4 nozzle.json index d0e7069db6..6a143def8d 100644 --- a/resources/profiles/Elegoo/machine/Elegoo Neptune 0.4 nozzle.json +++ b/resources/profiles/Elegoo/machine/Elegoo Neptune 0.4 nozzle.json @@ -100,7 +100,7 @@ "deretraction_speed": [ "40" ], - "single_extruder_multi_material": "0", + "single_extruder_multi_material": "1", "change_filament_gcode": "", "machine_pause_gcode": "M0", "default_filament_profile": [ diff --git a/resources/profiles/Elegoo/machine/Elegoo Neptune 2 0.4 nozzle.json b/resources/profiles/Elegoo/machine/Elegoo Neptune 2 0.4 nozzle.json index 1829a28c7f..12232ca4c6 100644 --- a/resources/profiles/Elegoo/machine/Elegoo Neptune 2 0.4 nozzle.json +++ b/resources/profiles/Elegoo/machine/Elegoo Neptune 2 0.4 nozzle.json @@ -100,7 +100,7 @@ "deretraction_speed": [ "40" ], - "single_extruder_multi_material": "0", + "single_extruder_multi_material": "1", "change_filament_gcode": "", "machine_pause_gcode": "M0", "default_filament_profile": [ diff --git a/resources/profiles/Elegoo/machine/Elegoo Neptune 2S 0.4 nozzle.json b/resources/profiles/Elegoo/machine/Elegoo Neptune 2S 0.4 nozzle.json index f1f9bb254f..8a8a25be54 100644 --- a/resources/profiles/Elegoo/machine/Elegoo Neptune 2S 0.4 nozzle.json +++ b/resources/profiles/Elegoo/machine/Elegoo Neptune 2S 0.4 nozzle.json @@ -100,7 +100,7 @@ "deretraction_speed": [ "40" ], - "single_extruder_multi_material": "0", + "single_extruder_multi_material": "1", "change_filament_gcode": "", "machine_pause_gcode": "M0", "default_filament_profile": [ diff --git a/resources/profiles/Elegoo/machine/Elegoo Neptune 3 0.4 nozzle.json b/resources/profiles/Elegoo/machine/Elegoo Neptune 3 0.4 nozzle.json index e948cdf344..2797bf8141 100644 --- a/resources/profiles/Elegoo/machine/Elegoo Neptune 3 0.4 nozzle.json +++ b/resources/profiles/Elegoo/machine/Elegoo Neptune 3 0.4 nozzle.json @@ -97,7 +97,7 @@ "deretraction_speed": [ "0" ], - "single_extruder_multi_material": "0", + "single_extruder_multi_material": "1", "change_filament_gcode": "", "machine_pause_gcode": "M0", "default_filament_profile": [ diff --git a/resources/profiles/Elegoo/machine/Elegoo Neptune 3 Max 0.4 nozzle.json b/resources/profiles/Elegoo/machine/Elegoo Neptune 3 Max 0.4 nozzle.json index 7976ac0c94..444ec5061d 100644 --- a/resources/profiles/Elegoo/machine/Elegoo Neptune 3 Max 0.4 nozzle.json +++ b/resources/profiles/Elegoo/machine/Elegoo Neptune 3 Max 0.4 nozzle.json @@ -100,7 +100,7 @@ "deretraction_speed": [ "0" ], - "single_extruder_multi_material": "0", + "single_extruder_multi_material": "1", "change_filament_gcode": "", "machine_pause_gcode": "M0", "default_filament_profile": [ diff --git a/resources/profiles/Elegoo/machine/Elegoo Neptune 3 Plus 0.4 nozzle.json b/resources/profiles/Elegoo/machine/Elegoo Neptune 3 Plus 0.4 nozzle.json index e6b96b2bf0..307a349215 100644 --- a/resources/profiles/Elegoo/machine/Elegoo Neptune 3 Plus 0.4 nozzle.json +++ b/resources/profiles/Elegoo/machine/Elegoo Neptune 3 Plus 0.4 nozzle.json @@ -100,7 +100,7 @@ "deretraction_speed": [ "0" ], - "single_extruder_multi_material": "0", + "single_extruder_multi_material": "1", "change_filament_gcode": "", "machine_pause_gcode": "M0", "default_filament_profile": [ diff --git a/resources/profiles/Elegoo/machine/Elegoo Neptune 3 Pro 0.4 nozzle.json b/resources/profiles/Elegoo/machine/Elegoo Neptune 3 Pro 0.4 nozzle.json index 84b1084216..25f1a5dad6 100644 --- a/resources/profiles/Elegoo/machine/Elegoo Neptune 3 Pro 0.4 nozzle.json +++ b/resources/profiles/Elegoo/machine/Elegoo Neptune 3 Pro 0.4 nozzle.json @@ -100,7 +100,7 @@ "deretraction_speed": [ "0" ], - "single_extruder_multi_material": "0", + "single_extruder_multi_material": "1", "change_filament_gcode": "", "machine_pause_gcode": "M0", "default_filament_profile": [ diff --git a/resources/profiles/Elegoo/machine/Elegoo Neptune X 0.4 nozzle.json b/resources/profiles/Elegoo/machine/Elegoo Neptune X 0.4 nozzle.json index 25055f6b2b..8f108f6865 100644 --- a/resources/profiles/Elegoo/machine/Elegoo Neptune X 0.4 nozzle.json +++ b/resources/profiles/Elegoo/machine/Elegoo Neptune X 0.4 nozzle.json @@ -100,7 +100,7 @@ "deretraction_speed": [ "40" ], - "single_extruder_multi_material": "0", + "single_extruder_multi_material": "1", "change_filament_gcode": "", "machine_pause_gcode": "M0", "default_filament_profile": [ diff --git a/resources/profiles/Elegoo/machine/fdm_machine_common.json b/resources/profiles/Elegoo/machine/fdm_machine_common.json index 41b1832169..a1dc826252 100644 --- a/resources/profiles/Elegoo/machine/fdm_machine_common.json +++ b/resources/profiles/Elegoo/machine/fdm_machine_common.json @@ -105,7 +105,7 @@ "retraction_speed": [ "35" ], - "single_extruder_multi_material": "0", + "single_extruder_multi_material": "1", "change_filament_gcode": "", "wipe": [ "1" diff --git a/resources/profiles/FLSun/machine/FLSun Q5 0.4 nozzle.json b/resources/profiles/FLSun/machine/FLSun Q5 0.4 nozzle.json index 2960a0f2fd..0e17d1200a 100644 --- a/resources/profiles/FLSun/machine/FLSun Q5 0.4 nozzle.json +++ b/resources/profiles/FLSun/machine/FLSun Q5 0.4 nozzle.json @@ -176,7 +176,7 @@ "deretraction_speed": [ "40" ], - "single_extruder_multi_material": "0", + "single_extruder_multi_material": "1", "change_filament_gcode": "", "machine_pause_gcode": "M400 U1\n", "default_filament_profile": [ diff --git a/resources/profiles/FLSun/machine/FLSun QQ-S Pro 0.4 nozzle.json b/resources/profiles/FLSun/machine/FLSun QQ-S Pro 0.4 nozzle.json index b49b467e5c..6b62e0e2fc 100644 --- a/resources/profiles/FLSun/machine/FLSun QQ-S Pro 0.4 nozzle.json +++ b/resources/profiles/FLSun/machine/FLSun QQ-S Pro 0.4 nozzle.json @@ -176,7 +176,7 @@ "deretraction_speed": [ "40" ], - "single_extruder_multi_material": "0", + "single_extruder_multi_material": "1", "change_filament_gcode": "", "machine_pause_gcode": "M400 U1\n", "default_filament_profile": [ diff --git a/resources/profiles/FLSun/process/fdm_process_common.json b/resources/profiles/FLSun/process/fdm_process_common.json index f2bc39f18c..ec9c890150 100644 --- a/resources/profiles/FLSun/process/fdm_process_common.json +++ b/resources/profiles/FLSun/process/fdm_process_common.json @@ -84,9 +84,9 @@ "top_surface_pattern": "monotonic", "top_surface_line_width": "0.4", "top_shell_thickness": "0.8", - "enable_prime_tower": "1", + "enable_prime_tower": "0", "wipe_tower_no_sparse_layers": "0", - "prime_tower_width": "35", + "prime_tower_width": "60", "xy_hole_compensation": "0", "xy_contour_compensation": "0", "layer_height": "0.2", diff --git a/resources/profiles/Folgertech/machine/fdm_machine_common.json b/resources/profiles/Folgertech/machine/fdm_machine_common.json index 41d458f5b2..fe27b6027b 100644 --- a/resources/profiles/Folgertech/machine/fdm_machine_common.json +++ b/resources/profiles/Folgertech/machine/fdm_machine_common.json @@ -105,7 +105,7 @@ "retraction_speed": [ "60" ], - "single_extruder_multi_material": "0", + "single_extruder_multi_material": "1", "change_filament_gcode": "", "wipe": [ "1" diff --git a/resources/profiles/Folgertech/process/fdm_process_folgertech_common.json b/resources/profiles/Folgertech/process/fdm_process_folgertech_common.json index be856a99a3..8a37312557 100644 --- a/resources/profiles/Folgertech/process/fdm_process_folgertech_common.json +++ b/resources/profiles/Folgertech/process/fdm_process_folgertech_common.json @@ -98,7 +98,7 @@ "travel_speed": "150", "enable_prime_tower": "0", "wipe_tower_no_sparse_layers": "0", - "prime_tower_width": "35", + "prime_tower_width": "60", "xy_hole_compensation": "0", "xy_contour_compensation": "0" } \ No newline at end of file diff --git a/resources/profiles/Kingroon/process/fdm_process_common.json b/resources/profiles/Kingroon/process/fdm_process_common.json index 919b751d28..daf672e289 100644 --- a/resources/profiles/Kingroon/process/fdm_process_common.json +++ b/resources/profiles/Kingroon/process/fdm_process_common.json @@ -94,7 +94,7 @@ "post_process": [], "precise_outer_wall": "0", "prime_tower_brim_width": "3", - "prime_tower_width": "35", + "prime_tower_width": "60", "prime_volume": "45", "print_flow_ratio": "1", "print_sequence": "by layer", diff --git a/resources/profiles/OrcaArena/machine/fdm_machine_common.json b/resources/profiles/OrcaArena/machine/fdm_machine_common.json index fc6f3492c5..7552d1251f 100644 --- a/resources/profiles/OrcaArena/machine/fdm_machine_common.json +++ b/resources/profiles/OrcaArena/machine/fdm_machine_common.json @@ -105,7 +105,7 @@ "retraction_speed": [ "60" ], - "single_extruder_multi_material": "0", + "single_extruder_multi_material": "1", "change_filament_gcode": "", "wipe": [ "1" diff --git a/resources/profiles/OrcaArena/process/0.20mm Bambu Support W @Arena X1C.json b/resources/profiles/OrcaArena/process/0.20mm Bambu Support W @Arena X1C.json index 5b43bbb1c3..b31526453e 100644 --- a/resources/profiles/OrcaArena/process/0.20mm Bambu Support W @Arena X1C.json +++ b/resources/profiles/OrcaArena/process/0.20mm Bambu Support W @Arena X1C.json @@ -13,7 +13,7 @@ "support_interface_speed": "80", "support_filament": "0", "support_interface_filament": "0", - "enable_prime_tower": "1", + "enable_prime_tower": "0", "compatible_printers": [ "Orca Arena X1 Carbon 0.4 nozzle", "Orca Arena X1 0.4 nozzle" diff --git a/resources/profiles/OrcaArena/process/fdm_process_bbl_common.json b/resources/profiles/OrcaArena/process/fdm_process_bbl_common.json index 9115d69522..c5505d4381 100644 --- a/resources/profiles/OrcaArena/process/fdm_process_bbl_common.json +++ b/resources/profiles/OrcaArena/process/fdm_process_bbl_common.json @@ -102,9 +102,9 @@ "top_shell_layers": "3", "top_shell_thickness": "0.8", "travel_speed": "500", - "enable_prime_tower": "1", + "enable_prime_tower": "0", "wipe_tower_no_sparse_layers": "0", - "prime_tower_width": "35", + "prime_tower_width": "60", "xy_hole_compensation": "0", "xy_contour_compensation": "0", "gcode_label_objects": "0" diff --git a/resources/profiles/Prusa/process/fdm_process_common.json b/resources/profiles/Prusa/process/fdm_process_common.json index 9bff8921f6..59955bd92b 100644 --- a/resources/profiles/Prusa/process/fdm_process_common.json +++ b/resources/profiles/Prusa/process/fdm_process_common.json @@ -85,7 +85,7 @@ "detect_thin_wall": "0", "top_surface_pattern": "monotonic", "top_shell_thickness": "0.8", - "enable_prime_tower": "1", + "enable_prime_tower": "0", "wipe_tower_no_sparse_layers": "0", "prime_tower_width": "60", "xy_hole_compensation": "0", @@ -102,5 +102,6 @@ "internal_solid_infill_speed": "150", "top_surface_speed": "50", "gap_infill_speed": "30", - "travel_speed": "200" + "travel_speed": "200", + "prime_tower_width": "60" } diff --git a/resources/profiles/Qidi/machine/Qidi X-CF Pro 0.4 nozzle.json b/resources/profiles/Qidi/machine/Qidi X-CF Pro 0.4 nozzle.json index 62a6acc62c..0ac09ea7ac 100644 --- a/resources/profiles/Qidi/machine/Qidi X-CF Pro 0.4 nozzle.json +++ b/resources/profiles/Qidi/machine/Qidi X-CF Pro 0.4 nozzle.json @@ -94,7 +94,7 @@ "deretraction_speed": [ "0" ], - "single_extruder_multi_material": "0", + "single_extruder_multi_material": "1", "change_filament_gcode": "", "machine_pause_gcode": "M0", "default_filament_profile": [ diff --git a/resources/profiles/Qidi/machine/Qidi X-Max 0.4 nozzle.json b/resources/profiles/Qidi/machine/Qidi X-Max 0.4 nozzle.json index 2505730d9e..4415483f2c 100644 --- a/resources/profiles/Qidi/machine/Qidi X-Max 0.4 nozzle.json +++ b/resources/profiles/Qidi/machine/Qidi X-Max 0.4 nozzle.json @@ -94,7 +94,7 @@ "deretraction_speed": [ "0" ], - "single_extruder_multi_material": "0", + "single_extruder_multi_material": "1", "change_filament_gcode": "", "machine_pause_gcode": "M0", "default_filament_profile": [ diff --git a/resources/profiles/Qidi/machine/Qidi X-Max 3 0.4 nozzle.json b/resources/profiles/Qidi/machine/Qidi X-Max 3 0.4 nozzle.json index b2c8a1840c..4ae4633743 100644 --- a/resources/profiles/Qidi/machine/Qidi X-Max 3 0.4 nozzle.json +++ b/resources/profiles/Qidi/machine/Qidi X-Max 3 0.4 nozzle.json @@ -39,7 +39,7 @@ "deretraction_speed": [ "0" ], - "single_extruder_multi_material": "0", + "single_extruder_multi_material": "1", "change_filament_gcode": "", "machine_pause_gcode": "M0", "default_filament_profile": [ diff --git a/resources/profiles/Qidi/machine/Qidi X-Plus 0.4 nozzle.json b/resources/profiles/Qidi/machine/Qidi X-Plus 0.4 nozzle.json index c722d7ca34..678df6a8d8 100644 --- a/resources/profiles/Qidi/machine/Qidi X-Plus 0.4 nozzle.json +++ b/resources/profiles/Qidi/machine/Qidi X-Plus 0.4 nozzle.json @@ -94,7 +94,7 @@ "deretraction_speed": [ "0" ], - "single_extruder_multi_material": "0", + "single_extruder_multi_material": "1", "change_filament_gcode": "", "machine_pause_gcode": "M0", "default_filament_profile": [ diff --git a/resources/profiles/Qidi/machine/Qidi X-Plus 3 0.4 nozzle.json b/resources/profiles/Qidi/machine/Qidi X-Plus 3 0.4 nozzle.json index 71723a2a86..21b889fdff 100644 --- a/resources/profiles/Qidi/machine/Qidi X-Plus 3 0.4 nozzle.json +++ b/resources/profiles/Qidi/machine/Qidi X-Plus 3 0.4 nozzle.json @@ -38,7 +38,7 @@ "deretraction_speed": [ "0" ], - "single_extruder_multi_material": "0", + "single_extruder_multi_material": "1", "change_filament_gcode": "", "machine_pause_gcode": "M0", "default_filament_profile": [ diff --git a/resources/profiles/Qidi/machine/Qidi X-Smart 3 0.4 nozzle.json b/resources/profiles/Qidi/machine/Qidi X-Smart 3 0.4 nozzle.json index 6b366aad7a..960088e7b7 100644 --- a/resources/profiles/Qidi/machine/Qidi X-Smart 3 0.4 nozzle.json +++ b/resources/profiles/Qidi/machine/Qidi X-Smart 3 0.4 nozzle.json @@ -39,7 +39,7 @@ "deretraction_speed": [ "0" ], - "single_extruder_multi_material": "0", + "single_extruder_multi_material": "1", "change_filament_gcode": "", "machine_pause_gcode": "M0", "default_filament_profile": [ diff --git a/resources/profiles/Qidi/machine/fdm_machine_common.json b/resources/profiles/Qidi/machine/fdm_machine_common.json index 41d458f5b2..fe27b6027b 100644 --- a/resources/profiles/Qidi/machine/fdm_machine_common.json +++ b/resources/profiles/Qidi/machine/fdm_machine_common.json @@ -105,7 +105,7 @@ "retraction_speed": [ "60" ], - "single_extruder_multi_material": "0", + "single_extruder_multi_material": "1", "change_filament_gcode": "", "wipe": [ "1" diff --git a/resources/profiles/Qidi/process/fdm_process_qidi_common.json b/resources/profiles/Qidi/process/fdm_process_qidi_common.json index 1f0df8f0b9..5edeca4933 100644 --- a/resources/profiles/Qidi/process/fdm_process_qidi_common.json +++ b/resources/profiles/Qidi/process/fdm_process_qidi_common.json @@ -97,7 +97,7 @@ "travel_speed": "150", "enable_prime_tower": "0", "wipe_tower_no_sparse_layers": "0", - "prime_tower_width": "35", + "prime_tower_width": "60", "xy_hole_compensation": "0", "xy_contour_compensation": "0" } diff --git a/resources/profiles/Raise3D/machine/Raise3D Pro3 0.4 nozzle (Dual).json b/resources/profiles/Raise3D/machine/Raise3D Pro3 0.4 nozzle (Dual).json index 5dace67d12..e4d75cb2b4 100644 --- a/resources/profiles/Raise3D/machine/Raise3D Pro3 0.4 nozzle (Dual).json +++ b/resources/profiles/Raise3D/machine/Raise3D Pro3 0.4 nozzle (Dual).json @@ -137,7 +137,7 @@ "1", "1" ], - "single_extruder_multi_material": "0", + "single_extruder_multi_material": "1", "change_filament_gcode": "", "machine_pause_gcode": "; pause print\nM2000", "default_filament_profile": [ diff --git a/resources/profiles/Raise3D/machine/Raise3D Pro3 0.4 nozzle (Left).json b/resources/profiles/Raise3D/machine/Raise3D Pro3 0.4 nozzle (Left).json index d79d069db5..8c89040903 100644 --- a/resources/profiles/Raise3D/machine/Raise3D Pro3 0.4 nozzle (Left).json +++ b/resources/profiles/Raise3D/machine/Raise3D Pro3 0.4 nozzle (Left).json @@ -137,7 +137,7 @@ "1", "1" ], - "single_extruder_multi_material": "0", + "single_extruder_multi_material": "1", "change_filament_gcode": "", "machine_pause_gcode": "; pause print\nM2000", "default_filament_profile": [ diff --git a/resources/profiles/Raise3D/machine/Raise3D Pro3 0.4 nozzle (Right).json b/resources/profiles/Raise3D/machine/Raise3D Pro3 0.4 nozzle (Right).json index 4ebee246cd..6c1eb6a984 100644 --- a/resources/profiles/Raise3D/machine/Raise3D Pro3 0.4 nozzle (Right).json +++ b/resources/profiles/Raise3D/machine/Raise3D Pro3 0.4 nozzle (Right).json @@ -137,7 +137,7 @@ "1", "1" ], - "single_extruder_multi_material": "0", + "single_extruder_multi_material": "1", "change_filament_gcode": "", "machine_pause_gcode": "; pause print\nM2000", "default_filament_profile": [ diff --git a/resources/profiles/Raise3D/machine/Raise3D Pro3 Plus 0.4 nozzle (Dual).json b/resources/profiles/Raise3D/machine/Raise3D Pro3 Plus 0.4 nozzle (Dual).json index 27d82e0508..dd127639e6 100644 --- a/resources/profiles/Raise3D/machine/Raise3D Pro3 Plus 0.4 nozzle (Dual).json +++ b/resources/profiles/Raise3D/machine/Raise3D Pro3 Plus 0.4 nozzle (Dual).json @@ -137,7 +137,7 @@ "1", "1" ], - "single_extruder_multi_material": "0", + "single_extruder_multi_material": "1", "change_filament_gcode": "", "machine_pause_gcode": "; pause print\nM2000", "default_filament_profile": [ diff --git a/resources/profiles/Raise3D/machine/Raise3D Pro3 Plus 0.4 nozzle (Left).json b/resources/profiles/Raise3D/machine/Raise3D Pro3 Plus 0.4 nozzle (Left).json index ea2ec01cd3..de1b5a6412 100644 --- a/resources/profiles/Raise3D/machine/Raise3D Pro3 Plus 0.4 nozzle (Left).json +++ b/resources/profiles/Raise3D/machine/Raise3D Pro3 Plus 0.4 nozzle (Left).json @@ -137,7 +137,7 @@ "1", "1" ], - "single_extruder_multi_material": "0", + "single_extruder_multi_material": "1", "change_filament_gcode": "", "machine_pause_gcode": "; pause print\nM2000", "default_filament_profile": [ diff --git a/resources/profiles/Raise3D/machine/Raise3D Pro3 Plus 0.4 nozzle (Right).json b/resources/profiles/Raise3D/machine/Raise3D Pro3 Plus 0.4 nozzle (Right).json index d03f8ff915..a341ff76f8 100644 --- a/resources/profiles/Raise3D/machine/Raise3D Pro3 Plus 0.4 nozzle (Right).json +++ b/resources/profiles/Raise3D/machine/Raise3D Pro3 Plus 0.4 nozzle (Right).json @@ -137,7 +137,7 @@ "1", "1" ], - "single_extruder_multi_material": "0", + "single_extruder_multi_material": "1", "change_filament_gcode": "", "machine_pause_gcode": "; pause print\nM2000", "default_filament_profile": [ diff --git a/resources/profiles/Raise3D/machine/fdm_machine_common.json b/resources/profiles/Raise3D/machine/fdm_machine_common.json index 56e8374ef7..f537b78c6f 100644 --- a/resources/profiles/Raise3D/machine/fdm_machine_common.json +++ b/resources/profiles/Raise3D/machine/fdm_machine_common.json @@ -105,7 +105,7 @@ "retraction_speed": [ "60" ], - "single_extruder_multi_material": "0", + "single_extruder_multi_material": "1", "change_filament_gcode": "", "wipe": [ "1" diff --git a/resources/profiles/Ratrig/machine/fdm_machine_common.json b/resources/profiles/Ratrig/machine/fdm_machine_common.json index f99c783367..a18c3333ca 100644 --- a/resources/profiles/Ratrig/machine/fdm_machine_common.json +++ b/resources/profiles/Ratrig/machine/fdm_machine_common.json @@ -105,7 +105,7 @@ "retraction_speed": [ "60" ], - "single_extruder_multi_material": "0", + "single_extruder_multi_material": "1", "change_filament_gcode": "", "wipe": [ "1" diff --git a/resources/profiles/Ratrig/process/0.20mm Bambu Support W @RatRig.json b/resources/profiles/Ratrig/process/0.20mm Bambu Support W @RatRig.json index 6a253ce865..80f22216af 100644 --- a/resources/profiles/Ratrig/process/0.20mm Bambu Support W @RatRig.json +++ b/resources/profiles/Ratrig/process/0.20mm Bambu Support W @RatRig.json @@ -13,7 +13,7 @@ "support_interface_speed": "80", "support_filament": "0", "support_interface_filament": "0", - "enable_prime_tower": "1", + "enable_prime_tower": "0", "initial_layer_speed": "50", "initial_layer_infill_speed": "105", "outer_wall_speed": "120", diff --git a/resources/profiles/Ratrig/process/fdm_process_ratrig_common.json b/resources/profiles/Ratrig/process/fdm_process_ratrig_common.json index 57e768e1ac..136a4295d2 100644 --- a/resources/profiles/Ratrig/process/fdm_process_ratrig_common.json +++ b/resources/profiles/Ratrig/process/fdm_process_ratrig_common.json @@ -99,7 +99,7 @@ "travel_speed": "350", "enable_prime_tower": "0", "wipe_tower_no_sparse_layers": "0", - "prime_tower_width": "35", + "prime_tower_width": "60", "xy_hole_compensation": "0", "xy_contour_compensation": "0", "enable_arc_fitting": "0", diff --git a/resources/profiles/SecKit/machine/fdm_machine_common.json b/resources/profiles/SecKit/machine/fdm_machine_common.json index 9163690443..1e8a72ddfc 100644 --- a/resources/profiles/SecKit/machine/fdm_machine_common.json +++ b/resources/profiles/SecKit/machine/fdm_machine_common.json @@ -108,7 +108,7 @@ "retraction_speed": [ "120" ], - "single_extruder_multi_material": "0", + "single_extruder_multi_material": "1", "change_filament_gcode": "", "wipe": [ "1" diff --git a/resources/profiles/SecKit/process/fdm_process_seckit_common.json b/resources/profiles/SecKit/process/fdm_process_seckit_common.json index 7c8e6df434..1ad7b2d9a7 100644 --- a/resources/profiles/SecKit/process/fdm_process_seckit_common.json +++ b/resources/profiles/SecKit/process/fdm_process_seckit_common.json @@ -97,7 +97,7 @@ "travel_speed": "235", "enable_prime_tower": "0", "wipe_tower_no_sparse_layers": "0", - "prime_tower_width": "35", + "prime_tower_width": "60", "xy_hole_compensation": "0", "xy_contour_compensation": "0", "enable_arc_fitting": "0", diff --git a/resources/profiles/Snapmaker/process/fdm_process_common.json b/resources/profiles/Snapmaker/process/fdm_process_common.json index 877f08b9fb..6cfb587794 100644 --- a/resources/profiles/Snapmaker/process/fdm_process_common.json +++ b/resources/profiles/Snapmaker/process/fdm_process_common.json @@ -83,9 +83,9 @@ "top_surface_pattern": "monotonic", "top_surface_line_width": "0.4", "top_shell_thickness": "0.8", - "enable_prime_tower": "1", + "enable_prime_tower": "0", "wipe_tower_no_sparse_layers": "0", - "prime_tower_width": "35", + "prime_tower_width": "60", "xy_hole_compensation": "0", "xy_contour_compensation": "0", "layer_height": "0.2", diff --git a/resources/profiles/Sovol/machine/Sovol SV01 Pro 0.4 nozzle.json b/resources/profiles/Sovol/machine/Sovol SV01 Pro 0.4 nozzle.json index 6e74b58852..5702397a43 100644 --- a/resources/profiles/Sovol/machine/Sovol SV01 Pro 0.4 nozzle.json +++ b/resources/profiles/Sovol/machine/Sovol SV01 Pro 0.4 nozzle.json @@ -97,7 +97,7 @@ "deretraction_speed": [ "40" ], - "single_extruder_multi_material": "0", + "single_extruder_multi_material": "1", "change_filament_gcode": "M600", "machine_pause_gcode": "M0", "default_filament_profile": [ diff --git a/resources/profiles/Sovol/machine/Sovol SV05 0.4 nozzle.json b/resources/profiles/Sovol/machine/Sovol SV05 0.4 nozzle.json index ee4c86210a..dc3a2aa435 100644 --- a/resources/profiles/Sovol/machine/Sovol SV05 0.4 nozzle.json +++ b/resources/profiles/Sovol/machine/Sovol SV05 0.4 nozzle.json @@ -97,7 +97,7 @@ "deretraction_speed": [ "40" ], - "single_extruder_multi_material": "0", + "single_extruder_multi_material": "1", "change_filament_gcode": "M600", "machine_pause_gcode": "M0", "default_filament_profile": [ diff --git a/resources/profiles/Sovol/machine/Sovol SV06 0.4 nozzle.json b/resources/profiles/Sovol/machine/Sovol SV06 0.4 nozzle.json index 2db824de74..fec43b9303 100644 --- a/resources/profiles/Sovol/machine/Sovol SV06 0.4 nozzle.json +++ b/resources/profiles/Sovol/machine/Sovol SV06 0.4 nozzle.json @@ -100,7 +100,7 @@ "deretraction_speed": [ "30" ], - "single_extruder_multi_material": "0", + "single_extruder_multi_material": "1", "change_filament_gcode": "M600\nG1 E0.4 F1500 ; prime after color change", "machine_pause_gcode": "M601", "default_filament_profile": [ diff --git a/resources/profiles/Sovol/machine/Sovol SV06 Plus 0.4 nozzle.json b/resources/profiles/Sovol/machine/Sovol SV06 Plus 0.4 nozzle.json index 63133e1b1a..d75d181a11 100644 --- a/resources/profiles/Sovol/machine/Sovol SV06 Plus 0.4 nozzle.json +++ b/resources/profiles/Sovol/machine/Sovol SV06 Plus 0.4 nozzle.json @@ -100,7 +100,7 @@ "deretraction_speed": [ "30" ], - "single_extruder_multi_material": "0", + "single_extruder_multi_material": "1", "change_filament_gcode": "M600\nG1 E0.4 F1500 ; prime after color change", "machine_pause_gcode": "M601", "default_filament_profile": [ diff --git a/resources/profiles/Sovol/machine/fdm_machine_common.json b/resources/profiles/Sovol/machine/fdm_machine_common.json index 56e8374ef7..f537b78c6f 100644 --- a/resources/profiles/Sovol/machine/fdm_machine_common.json +++ b/resources/profiles/Sovol/machine/fdm_machine_common.json @@ -105,7 +105,7 @@ "retraction_speed": [ "60" ], - "single_extruder_multi_material": "0", + "single_extruder_multi_material": "1", "change_filament_gcode": "", "wipe": [ "1" diff --git a/resources/profiles/Tronxy/machine/fdm_machine_common.json b/resources/profiles/Tronxy/machine/fdm_machine_common.json index 08a818ba46..5eaa07e526 100644 --- a/resources/profiles/Tronxy/machine/fdm_machine_common.json +++ b/resources/profiles/Tronxy/machine/fdm_machine_common.json @@ -105,7 +105,7 @@ "retraction_speed": [ "60" ], - "single_extruder_multi_material": "0", + "single_extruder_multi_material": "1", "change_filament_gcode": "", "wipe": [ "1" diff --git a/resources/profiles/Tronxy/process/fdm_process_common.json b/resources/profiles/Tronxy/process/fdm_process_common.json index 0513467cac..d9b11e2551 100644 --- a/resources/profiles/Tronxy/process/fdm_process_common.json +++ b/resources/profiles/Tronxy/process/fdm_process_common.json @@ -94,7 +94,7 @@ "travel_speed": "350", "enable_prime_tower": "0", "wipe_tower_no_sparse_layers": "0", - "prime_tower_width": "35", + "prime_tower_width": "60", "xy_hole_compensation": "0", "xy_contour_compensation": "0", "compatible_printers": [ diff --git a/resources/profiles/Tronxy/process/fdm_process_tronxy_common.json b/resources/profiles/Tronxy/process/fdm_process_tronxy_common.json index 2d6fa3ff06..99b1ec95ff 100644 --- a/resources/profiles/Tronxy/process/fdm_process_tronxy_common.json +++ b/resources/profiles/Tronxy/process/fdm_process_tronxy_common.json @@ -95,7 +95,7 @@ "travel_speed": "350", "enable_prime_tower": "0", "wipe_tower_no_sparse_layers": "0", - "prime_tower_width": "35", + "prime_tower_width": "60", "xy_hole_compensation": "0", "xy_contour_compensation": "0", "compatible_printers": [ diff --git a/resources/profiles/TwoTrees/machine/fdm_machine_common.json b/resources/profiles/TwoTrees/machine/fdm_machine_common.json index 08a818ba46..5eaa07e526 100644 --- a/resources/profiles/TwoTrees/machine/fdm_machine_common.json +++ b/resources/profiles/TwoTrees/machine/fdm_machine_common.json @@ -105,7 +105,7 @@ "retraction_speed": [ "60" ], - "single_extruder_multi_material": "0", + "single_extruder_multi_material": "1", "change_filament_gcode": "", "wipe": [ "1" diff --git a/resources/profiles/TwoTrees/process/fdm_process_TwoTrees_common.json b/resources/profiles/TwoTrees/process/fdm_process_TwoTrees_common.json index 80927634fd..73b67bc1c3 100644 --- a/resources/profiles/TwoTrees/process/fdm_process_TwoTrees_common.json +++ b/resources/profiles/TwoTrees/process/fdm_process_TwoTrees_common.json @@ -95,7 +95,7 @@ "travel_speed": "350", "enable_prime_tower": "0", "wipe_tower_no_sparse_layers": "0", - "prime_tower_width": "35", + "prime_tower_width": "60", "xy_hole_compensation": "0", "xy_contour_compensation": "0", "compatible_printers": [ diff --git a/resources/profiles/TwoTrees/process/fdm_process_common.json b/resources/profiles/TwoTrees/process/fdm_process_common.json index fd2dbb99ee..f3033727b3 100644 --- a/resources/profiles/TwoTrees/process/fdm_process_common.json +++ b/resources/profiles/TwoTrees/process/fdm_process_common.json @@ -93,7 +93,7 @@ "travel_speed": "350", "enable_prime_tower": "0", "wipe_tower_no_sparse_layers": "0", - "prime_tower_width": "35", + "prime_tower_width": "60", "xy_hole_compensation": "0", "xy_contour_compensation": "0", "enable_arc_fitting": "0", diff --git a/resources/profiles/UltiMaker/machine/UltiMaker 2 0.4 nozzle.json b/resources/profiles/UltiMaker/machine/UltiMaker 2 0.4 nozzle.json index c7166bc030..70f54edf1b 100644 --- a/resources/profiles/UltiMaker/machine/UltiMaker 2 0.4 nozzle.json +++ b/resources/profiles/UltiMaker/machine/UltiMaker 2 0.4 nozzle.json @@ -103,7 +103,7 @@ "wipe_distance": [ "0.2" ], - "single_extruder_multi_material": "0", + "single_extruder_multi_material": "1", "change_filament_gcode": "", "machine_pause_gcode": "M0", "default_filament_profile": [ diff --git a/resources/profiles/UltiMaker/machine/fdm_machine_common.json b/resources/profiles/UltiMaker/machine/fdm_machine_common.json index bb2cfc5823..b048451fd8 100644 --- a/resources/profiles/UltiMaker/machine/fdm_machine_common.json +++ b/resources/profiles/UltiMaker/machine/fdm_machine_common.json @@ -105,7 +105,7 @@ "retraction_speed": [ "50" ], - "single_extruder_multi_material": "0", + "single_extruder_multi_material": "1", "change_filament_gcode": "", "wipe": [ "1" diff --git a/resources/profiles/Vivedino/machine/fdm_machine_common.json b/resources/profiles/Vivedino/machine/fdm_machine_common.json index 76cfe3d36c..28ee8f30b5 100644 --- a/resources/profiles/Vivedino/machine/fdm_machine_common.json +++ b/resources/profiles/Vivedino/machine/fdm_machine_common.json @@ -105,7 +105,7 @@ "retraction_speed": [ "60" ], - "single_extruder_multi_material": "0", + "single_extruder_multi_material": "1", "change_filament_gcode": "", "wipe": [ "1" diff --git a/resources/profiles/Vivedino/process/fdm_process_klipper_common.json b/resources/profiles/Vivedino/process/fdm_process_klipper_common.json index 8f4936a889..19176b5504 100644 --- a/resources/profiles/Vivedino/process/fdm_process_klipper_common.json +++ b/resources/profiles/Vivedino/process/fdm_process_klipper_common.json @@ -99,7 +99,7 @@ "travel_speed": "350", "enable_prime_tower": "0", "wipe_tower_no_sparse_layers": "0", - "prime_tower_width": "35", + "prime_tower_width": "60", "xy_hole_compensation": "0", "xy_contour_compensation": "0", "enable_arc_fitting": "0", diff --git a/resources/profiles/Voron/machine/fdm_machine_common.json b/resources/profiles/Voron/machine/fdm_machine_common.json index 5d141cce1b..8d4fb897f1 100644 --- a/resources/profiles/Voron/machine/fdm_machine_common.json +++ b/resources/profiles/Voron/machine/fdm_machine_common.json @@ -105,7 +105,7 @@ "retraction_speed": [ "60" ], - "single_extruder_multi_material": "0", + "single_extruder_multi_material": "1", "change_filament_gcode": "", "wipe": [ "1" diff --git a/resources/profiles/Voron/process/fdm_process_voron_common.json b/resources/profiles/Voron/process/fdm_process_voron_common.json index 48d8772e96..5701d30664 100644 --- a/resources/profiles/Voron/process/fdm_process_voron_common.json +++ b/resources/profiles/Voron/process/fdm_process_voron_common.json @@ -99,7 +99,7 @@ "travel_speed": "350", "enable_prime_tower": "0", "wipe_tower_no_sparse_layers": "0", - "prime_tower_width": "35", + "prime_tower_width": "60", "xy_hole_compensation": "0", "xy_contour_compensation": "0", "enable_arc_fitting": "0", diff --git a/resources/profiles/Voxelab/machine/Voxelab Aquila X2 0.4 nozzle.json b/resources/profiles/Voxelab/machine/Voxelab Aquila X2 0.4 nozzle.json index 23674b2f26..9fbb7e6cda 100644 --- a/resources/profiles/Voxelab/machine/Voxelab Aquila X2 0.4 nozzle.json +++ b/resources/profiles/Voxelab/machine/Voxelab Aquila X2 0.4 nozzle.json @@ -97,7 +97,7 @@ "deretraction_speed": [ "40" ], - "single_extruder_multi_material": "0", + "single_extruder_multi_material": "1", "change_filament_gcode": "M600", "machine_pause_gcode": "M0", "default_filament_profile": [ diff --git a/resources/profiles/Voxelab/machine/fdm_machine_common.json b/resources/profiles/Voxelab/machine/fdm_machine_common.json index 56e8374ef7..f537b78c6f 100644 --- a/resources/profiles/Voxelab/machine/fdm_machine_common.json +++ b/resources/profiles/Voxelab/machine/fdm_machine_common.json @@ -105,7 +105,7 @@ "retraction_speed": [ "60" ], - "single_extruder_multi_material": "0", + "single_extruder_multi_material": "1", "change_filament_gcode": "", "wipe": [ "1" diff --git a/resources/profiles/Vzbot/machine/fdm_machine_common.json b/resources/profiles/Vzbot/machine/fdm_machine_common.json index 885d9dfd69..52345bfae7 100644 --- a/resources/profiles/Vzbot/machine/fdm_machine_common.json +++ b/resources/profiles/Vzbot/machine/fdm_machine_common.json @@ -105,7 +105,7 @@ "retraction_speed": [ "60" ], - "single_extruder_multi_material": "0", + "single_extruder_multi_material": "1", "change_filament_gcode": "", "wipe": [ "1" diff --git a/resources/profiles/Vzbot/process/fdm_process_Vzbot_common.json b/resources/profiles/Vzbot/process/fdm_process_Vzbot_common.json index b4e8f184f4..bf6689508d 100644 --- a/resources/profiles/Vzbot/process/fdm_process_Vzbot_common.json +++ b/resources/profiles/Vzbot/process/fdm_process_Vzbot_common.json @@ -101,7 +101,7 @@ "travel_speed": "800", "enable_prime_tower": "0", "wipe_tower_no_sparse_layers": "0", - "prime_tower_width": "35", + "prime_tower_width": "60", "xy_hole_compensation": "0.075", "xy_contour_compensation": "0", "compatible_printers": [ diff --git a/resources/profiles/Vzbot/process/fdm_process_Vzbot_common_0.5_nozzle.json b/resources/profiles/Vzbot/process/fdm_process_Vzbot_common_0.5_nozzle.json index 2aa584dd86..c496eb764b 100644 --- a/resources/profiles/Vzbot/process/fdm_process_Vzbot_common_0.5_nozzle.json +++ b/resources/profiles/Vzbot/process/fdm_process_Vzbot_common_0.5_nozzle.json @@ -100,7 +100,7 @@ "travel_speed": "800", "enable_prime_tower": "0", "wipe_tower_no_sparse_layers": "0", - "prime_tower_width": "35", + "prime_tower_width": "60", "xy_hole_compensation": "0.075", "xy_contour_compensation": "0", "compatible_printers": [ diff --git a/resources/profiles/Vzbot/process/fdm_process_Vzbot_common_0.6_nozzle.json b/resources/profiles/Vzbot/process/fdm_process_Vzbot_common_0.6_nozzle.json index 8a22c5d9be..b3d54e197e 100644 --- a/resources/profiles/Vzbot/process/fdm_process_Vzbot_common_0.6_nozzle.json +++ b/resources/profiles/Vzbot/process/fdm_process_Vzbot_common_0.6_nozzle.json @@ -100,7 +100,7 @@ "travel_speed": "800", "enable_prime_tower": "0", "wipe_tower_no_sparse_layers": "0", - "prime_tower_width": "35", + "prime_tower_width": "60", "xy_hole_compensation": "0.075", "xy_contour_compensation": "0", "compatible_printers": [ diff --git a/src/libslic3r/GCode.cpp b/src/libslic3r/GCode.cpp index 750282f1e0..f14be40fcb 100644 --- a/src/libslic3r/GCode.cpp +++ b/src/libslic3r/GCode.cpp @@ -22,6 +22,7 @@ #include #include #include +#include #include #include #include @@ -380,7 +381,7 @@ static std::vector get_path_of_change_filament(const Print& print) return Point(scale_(wipe_tower_pt.x() - gcodegen.origin()(0)), scale_(wipe_tower_pt.y() - gcodegen.origin()(1))); } - std::string WipeTowerIntegration::append_tcr(GCode& gcodegen, const WipeTower::ToolChangeResult& tcr, int new_extruder_id, double z) const + std::string WipeTowerIntegration::append_tcr(GCode &gcodegen, const WipeTower::ToolChangeResult &tcr, int new_extruder_id, double z) const { if (new_extruder_id != -1 && new_extruder_id != tcr.new_tool) throw Slic3r::InvalidArgument("Error: WipeTowerIntegration::append_tcr was asked to do a toolchange it didn't expect."); @@ -391,20 +392,20 @@ static std::vector get_path_of_change_filament(const Print& print) // We want to rotate and shift all extrusions (gcode postprocessing) and starting and ending position float alpha = m_wipe_tower_rotation / 180.f * float(M_PI); - auto transform_wt_pt = [&alpha, this](const Vec2f& pt) -> Vec2f { + auto transform_wt_pt = [&alpha, this](const Vec2f &pt) -> Vec2f { Vec2f out = Eigen::Rotation2Df(alpha) * pt; out += m_wipe_tower_pos; return out; }; Vec2f start_pos = tcr.start_pos; - Vec2f end_pos = tcr.end_pos; - if (! tcr.priming) { + Vec2f end_pos = tcr.end_pos; + if (!tcr.priming) { start_pos = transform_wt_pt(start_pos); - end_pos = transform_wt_pt(end_pos); + end_pos = transform_wt_pt(end_pos); } - Vec2f wipe_tower_offset = tcr.priming ? Vec2f::Zero() : m_wipe_tower_pos; + Vec2f wipe_tower_offset = tcr.priming ? Vec2f::Zero() : m_wipe_tower_pos; float wipe_tower_rotation = tcr.priming ? 0.f : alpha; std::string tcr_rotated_gcode = post_process_wipe_tower_moves(tcr, wipe_tower_offset, wipe_tower_rotation); @@ -415,42 +416,39 @@ static std::vector get_path_of_change_filament(const Print& print) // BBS: toolchange gcode will move to start_pos, // so only perform movement when printing sparse partition to support upper layer. // start_pos is the position in plate coordinate. - if (! tcr.priming && tcr.is_finish_first) { + if (!tcr.priming && tcr.is_finish_first) { // Move over the wipe tower. gcode += gcodegen.retract(); gcodegen.m_avoid_crossing_perimeters.use_external_mp_once(); - gcode += gcodegen.travel_to( - wipe_tower_point_to_object_point(gcodegen, start_pos + plate_origin_2d), - erMixed, - "Travel to a Wipe Tower"); + gcode += gcodegen.travel_to(wipe_tower_point_to_object_point(gcodegen, start_pos + plate_origin_2d), erMixed, + "Travel to a Wipe Tower"); gcode += gcodegen.unretract(); } - //BBS: if needed, write the gcode_label_objects_end then priming tower, if the retract, didn't did it. + // BBS: if needed, write the gcode_label_objects_end then priming tower, if the retract, didn't did it. gcodegen.m_writer.add_object_end_labels(gcode); double current_z = gcodegen.writer().get_position().z(); if (z == -1.) // in case no specific z was provided, print at current_z pos z = current_z; - if (! is_approx(z, current_z)) { + if (!is_approx(z, current_z)) { gcode += gcodegen.writer().retract(); gcode += gcodegen.writer().travel_to_z(z, "Travel down to the last wipe tower layer."); gcode += gcodegen.writer().unretract(); } - // Process the end filament gcode. std::string end_filament_gcode_str; if (gcodegen.writer().extruder() != nullptr) { // Process the custom filament_end_gcode in case of single_extruder_multi_material. - unsigned int old_extruder_id = gcodegen.writer().extruder()->id(); - const std::string& filament_end_gcode = gcodegen.config().filament_end_gcode.get_at(old_extruder_id); + unsigned int old_extruder_id = gcodegen.writer().extruder()->id(); + const std::string &filament_end_gcode = gcodegen.config().filament_end_gcode.get_at(old_extruder_id); if (gcodegen.writer().extruder() != nullptr && !filament_end_gcode.empty()) { end_filament_gcode_str = gcodegen.placeholder_parser_process("filament_end_gcode", filament_end_gcode, old_extruder_id); check_add_eol(end_filament_gcode_str); } } - //BBS: increase toolchange count + // BBS: increase toolchange count gcodegen.m_toolchange_count++; // BBS: should be placed before toolchange parsing @@ -459,45 +457,57 @@ static std::vector get_path_of_change_filament(const Print& print) // Process the custom change_filament_gcode. If it is empty, provide a simple Tn command to change the filament. // Otherwise, leave control to the user completely. - std::string toolchange_gcode_str; - const std::string& change_filament_gcode = gcodegen.config().change_filament_gcode.value; -// m_max_layer_z = std::max(m_max_layer_z, tcr.print_z); - if (! change_filament_gcode.empty()) { + std::string toolchange_gcode_str; + const std::string &change_filament_gcode = gcodegen.config().change_filament_gcode.value; + // m_max_layer_z = std::max(m_max_layer_z, tcr.print_z); + if (!change_filament_gcode.empty()) { DynamicConfig config; - int previous_extruder_id = gcodegen.writer().extruder() ? (int)gcodegen.writer().extruder()->id() : -1; + int previous_extruder_id = gcodegen.writer().extruder() ? (int) gcodegen.writer().extruder()->id() : -1; config.set_key_value("previous_extruder", new ConfigOptionInt(previous_extruder_id)); - config.set_key_value("next_extruder", new ConfigOptionInt((int)new_extruder_id)); + config.set_key_value("next_extruder", new ConfigOptionInt((int) new_extruder_id)); config.set_key_value("layer_num", new ConfigOptionInt(gcodegen.m_layer_index)); config.set_key_value("layer_z", new ConfigOptionFloat(tcr.print_z)); config.set_key_value("toolchange_z", new ConfigOptionFloat(z)); -// config.set_key_value("max_layer_z", new ConfigOptionFloat(m_max_layer_z)); + // config.set_key_value("max_layer_z", new ConfigOptionFloat(m_max_layer_z)); // BBS { - GCodeWriter& gcode_writer = gcodegen.m_writer; - FullPrintConfig& full_config = gcodegen.m_config; - float old_retract_length = gcode_writer.extruder() != nullptr ? full_config.retraction_length.get_at(previous_extruder_id) : 0; + GCodeWriter &gcode_writer = gcodegen.m_writer; + FullPrintConfig &full_config = gcodegen.m_config; + float old_retract_length = gcode_writer.extruder() != nullptr ? full_config.retraction_length.get_at(previous_extruder_id) : + 0; float new_retract_length = full_config.retraction_length.get_at(new_extruder_id); - float old_retract_length_toolchange = gcode_writer.extruder() != nullptr ? full_config.retract_length_toolchange.get_at(previous_extruder_id) : 0; + float old_retract_length_toolchange = gcode_writer.extruder() != nullptr ? + full_config.retract_length_toolchange.get_at(previous_extruder_id) : + 0; float new_retract_length_toolchange = full_config.retract_length_toolchange.get_at(new_extruder_id); - int old_filament_temp = gcode_writer.extruder() != nullptr ? (gcodegen.on_first_layer()? full_config.nozzle_temperature_initial_layer.get_at(previous_extruder_id) : full_config.nozzle_temperature.get_at(previous_extruder_id)) : 210; - int new_filament_temp = gcodegen.on_first_layer() ? full_config.nozzle_temperature_initial_layer.get_at(new_extruder_id) : full_config.nozzle_temperature.get_at(new_extruder_id); - Vec3d nozzle_pos = gcode_writer.get_position(); + int old_filament_temp = gcode_writer.extruder() != nullptr ? + (gcodegen.on_first_layer() ? + full_config.nozzle_temperature_initial_layer.get_at(previous_extruder_id) : + full_config.nozzle_temperature.get_at(previous_extruder_id)) : + 210; + int new_filament_temp = gcodegen.on_first_layer() ? full_config.nozzle_temperature_initial_layer.get_at(new_extruder_id) : + full_config.nozzle_temperature.get_at(new_extruder_id); + Vec3d nozzle_pos = gcode_writer.get_position(); - float purge_volume = tcr.purge_volume < EPSILON ? 0 : std::max(tcr.purge_volume, g_min_purge_volume); + float purge_volume = tcr.purge_volume < EPSILON ? 0 : std::max(tcr.purge_volume, g_min_purge_volume); float filament_area = float((M_PI / 4.f) * pow(full_config.filament_diameter.get_at(new_extruder_id), 2)); - float purge_length = purge_volume / filament_area; + float purge_length = purge_volume / filament_area; - int old_filament_e_feedrate = gcode_writer.extruder() != nullptr ? (int)(60.0 * full_config.filament_max_volumetric_speed.get_at(previous_extruder_id) / filament_area) : 200; - old_filament_e_feedrate = old_filament_e_feedrate == 0 ? 100 : old_filament_e_feedrate; - int new_filament_e_feedrate = (int)(60.0 * full_config.filament_max_volumetric_speed.get_at(new_extruder_id) / filament_area); - new_filament_e_feedrate = new_filament_e_feedrate == 0 ? 100 : new_filament_e_feedrate; + int old_filament_e_feedrate = gcode_writer.extruder() != nullptr ? + (int) (60.0 * full_config.filament_max_volumetric_speed.get_at(previous_extruder_id) / + filament_area) : + 200; + old_filament_e_feedrate = old_filament_e_feedrate == 0 ? 100 : old_filament_e_feedrate; + int new_filament_e_feedrate = (int) (60.0 * full_config.filament_max_volumetric_speed.get_at(new_extruder_id) / + filament_area); + new_filament_e_feedrate = new_filament_e_feedrate == 0 ? 100 : new_filament_e_feedrate; config.set_key_value("max_layer_z", new ConfigOptionFloat(gcodegen.m_max_layer_z)); config.set_key_value("relative_e_axis", new ConfigOptionBool(full_config.use_relative_e_distances)); - config.set_key_value("toolchange_count", new ConfigOptionInt((int)gcodegen.m_toolchange_count)); - //BBS: fan speed is useless placeholer now, but we don't remove it to avoid - //slicing error in old change_filament_gcode in old 3MF - config.set_key_value("fan_speed", new ConfigOptionInt((int)0)); + config.set_key_value("toolchange_count", new ConfigOptionInt((int) gcodegen.m_toolchange_count)); + // BBS: fan speed is useless placeholer now, but we don't remove it to avoid + // slicing error in old change_filament_gcode in old 3MF + config.set_key_value("fan_speed", new ConfigOptionInt((int) 0)); config.set_key_value("old_retract_length", new ConfigOptionFloat(old_retract_length)); config.set_key_value("new_retract_length", new ConfigOptionFloat(new_retract_length)); config.set_key_value("old_retract_length_toolchange", new ConfigOptionFloat(old_retract_length_toolchange)); @@ -518,44 +528,46 @@ static std::vector get_path_of_change_filament(const Print& print) config.set_key_value("travel_point_3_x", new ConfigOptionFloat(float(travel_point_3.x()))); config.set_key_value("travel_point_3_y", new ConfigOptionFloat(float(travel_point_3.y()))); - int flush_count = std::min(g_max_flush_count, (int)std::round(purge_volume / g_purge_volume_one_time)); - float flush_unit = purge_length / flush_count; - int flush_idx = 0; + int flush_count = std::min(g_max_flush_count, (int) std::round(purge_volume / g_purge_volume_one_time)); + float flush_unit = purge_length / flush_count; + int flush_idx = 0; for (; flush_idx < flush_count; flush_idx++) { - char key_value[64] = { 0 }; + char key_value[64] = {0}; snprintf(key_value, sizeof(key_value), "flush_length_%d", flush_idx + 1); config.set_key_value(key_value, new ConfigOptionFloat(flush_unit)); } for (; flush_idx < g_max_flush_count; flush_idx++) { - char key_value[64] = { 0 }; + char key_value[64] = {0}; snprintf(key_value, sizeof(key_value), "flush_length_%d", flush_idx + 1); config.set_key_value(key_value, new ConfigOptionFloat(0.f)); } } - toolchange_gcode_str = gcodegen.placeholder_parser_process("change_filament_gcode", change_filament_gcode, new_extruder_id, &config); + toolchange_gcode_str = gcodegen.placeholder_parser_process("change_filament_gcode", change_filament_gcode, new_extruder_id, + &config); check_add_eol(toolchange_gcode_str); // retract before toolchange toolchange_gcode_str = toolchange_retract_str + toolchange_gcode_str; - //BBS + // BBS { - //BBS: current position and fan_speed is unclear after interting change_filament_gcode + // BBS: current position and fan_speed is unclear after interting change_filament_gcode check_add_eol(toolchange_gcode_str); toolchange_gcode_str += ";_FORCE_RESUME_FAN_SPEED\n"; gcodegen.writer().set_current_position_clear(false); - //BBS: check whether custom gcode changes the z position. Update if changed + // BBS: check whether custom gcode changes the z position. Update if changed double temp_z_after_tool_change; if (GCodeProcessor::get_last_z_from_gcode(toolchange_gcode_str, temp_z_after_tool_change)) { Vec3d pos = gcodegen.writer().get_position(); - pos(2) = temp_z_after_tool_change; + pos(2) = temp_z_after_tool_change; gcodegen.writer().set_position(pos); } } // move to start_pos for wiping after toolchange std::string start_pos_str; - start_pos_str = gcodegen.travel_to(wipe_tower_point_to_object_point(gcodegen, start_pos + plate_origin_2d), erMixed, "Move to start pos"); + start_pos_str = gcodegen.travel_to(wipe_tower_point_to_object_point(gcodegen, start_pos + plate_origin_2d), erMixed, + "Move to start pos"); check_add_eol(start_pos_str); toolchange_gcode_str += start_pos_str; @@ -576,13 +588,14 @@ static std::vector get_path_of_change_filament(const Print& print) gcodegen.placeholder_parser().set("current_extruder", new_extruder_id); // Process the start filament gcode. - std::string start_filament_gcode_str; - const std::string& filament_start_gcode = gcodegen.config().filament_start_gcode.get_at(new_extruder_id); + std::string start_filament_gcode_str; + const std::string &filament_start_gcode = gcodegen.config().filament_start_gcode.get_at(new_extruder_id); if (!filament_start_gcode.empty()) { // Process the filament_start_gcode for the active filament only. DynamicConfig config; config.set_key_value("filament_extruder_id", new ConfigOptionInt(new_extruder_id)); - start_filament_gcode_str = gcodegen.placeholder_parser_process("filament_start_gcode", filament_start_gcode, new_extruder_id, &config); + start_filament_gcode_str = gcodegen.placeholder_parser_process("filament_start_gcode", filament_start_gcode, new_extruder_id, + &config); check_add_eol(start_filament_gcode_str); } @@ -591,12 +604,13 @@ static std::vector get_path_of_change_filament(const Print& print) config.set_key_value("filament_end_gcode", new ConfigOptionString(end_filament_gcode_str)); config.set_key_value("change_filament_gcode", new ConfigOptionString(toolchange_gcode_str)); config.set_key_value("filament_start_gcode", new ConfigOptionString(start_filament_gcode_str)); - std::string tcr_gcode, tcr_escaped_gcode = gcodegen.placeholder_parser_process("tcr_rotated_gcode", tcr_rotated_gcode, new_extruder_id, &config); + std::string tcr_gcode, + tcr_escaped_gcode = gcodegen.placeholder_parser_process("tcr_rotated_gcode", tcr_rotated_gcode, new_extruder_id, &config); unescape_string_cstyle(tcr_escaped_gcode, tcr_gcode); gcode += tcr_gcode; check_add_eol(toolchange_gcode_str); - //SoftFever: set new PA for new filament + // SoftFever: set new PA for new filament if (gcodegen.config().enable_pressure_advance.get_at(new_extruder_id)) { gcode += gcodegen.writer().set_pressure_advance(gcodegen.config().pressure_advance.get_at(new_extruder_id)); } @@ -613,7 +627,193 @@ static std::vector get_path_of_change_filament(const Print& print) else { // Prepare a future wipe. gcodegen.m_wipe.reset_path(); - for (const Vec2f& wipe_pt : tcr.wipe_path) + for (const Vec2f &wipe_pt : tcr.wipe_path) + gcodegen.m_wipe.path.points.emplace_back(wipe_tower_point_to_object_point(gcodegen, transform_wt_pt(wipe_pt))); + } + + // Let the planner know we are traveling between objects. + gcodegen.m_avoid_crossing_perimeters.use_external_mp_once(); + return gcode; + } + + std::string WipeTowerIntegration::append_tcr2(GCode &gcodegen, + const WipeTower::ToolChangeResult &tcr, + int new_extruder_id, + double z) const + { + if (new_extruder_id != -1 && new_extruder_id != tcr.new_tool) + throw Slic3r::InvalidArgument("Error: WipeTowerIntegration::append_tcr was asked to do a toolchange it didn't expect."); + + std::string gcode; + + // Toolchangeresult.gcode assumes the wipe tower corner is at the origin (except for priming lines) + // We want to rotate and shift all extrusions (gcode postprocessing) and starting and ending position + float alpha = m_wipe_tower_rotation / 180.f * float(M_PI); + + auto transform_wt_pt = [&alpha, this](const Vec2f &pt) -> Vec2f { + Vec2f out = Eigen::Rotation2Df(alpha) * pt; + out += m_wipe_tower_pos; + return out; + }; + + Vec2f start_pos = tcr.start_pos; + Vec2f end_pos = tcr.end_pos; + if (!tcr.priming) { + start_pos = transform_wt_pt(start_pos); + end_pos = transform_wt_pt(end_pos); + } + + Vec2f wipe_tower_offset = tcr.priming ? Vec2f::Zero() : m_wipe_tower_pos; + float wipe_tower_rotation = tcr.priming ? 0.f : alpha; + + std::string tcr_rotated_gcode = post_process_wipe_tower_moves(tcr, wipe_tower_offset, wipe_tower_rotation); + + gcode += gcodegen.writer().unlift(); // Make sure there is no z-hop (in most cases, there isn't). + + double current_z = gcodegen.writer().get_position().z(); + if (z == -1.) // in case no specific z was provided, print at current_z pos + z = current_z; + + const bool needs_toolchange = gcodegen.writer().need_toolchange(new_extruder_id); + const bool will_go_down = !is_approx(z, current_z); + const bool is_ramming = (gcodegen.config().single_extruder_multi_material) || + (!gcodegen.config().single_extruder_multi_material && + gcodegen.config().filament_multitool_ramming.get_at(tcr.initial_tool)); + const bool should_travel_to_tower = !tcr.priming && (tcr.force_travel // wipe tower says so + || !needs_toolchange // this is just finishing the tower with no toolchange + || is_ramming); + + if (should_travel_to_tower) { + // FIXME: It would be better if the wipe tower set the force_travel flag for all toolchanges, + // then we could simplify the condition and make it more readable. + gcode += gcodegen.retract(); + gcodegen.m_avoid_crossing_perimeters.use_external_mp_once(); + gcode += gcodegen.travel_to(wipe_tower_point_to_object_point(gcodegen, start_pos), erMixed, "Travel to a Wipe Tower"); + gcode += gcodegen.unretract(); + } else { + // When this is multiextruder printer without any ramming, we can just change + // the tool without travelling to the tower. + } + + if (will_go_down) { + gcode += gcodegen.writer().retract(); + gcode += gcodegen.writer().travel_to_z(z, "Travel down to the last wipe tower layer."); + gcode += gcodegen.writer().unretract(); + } + + std::string toolchange_gcode_str; + std::string deretraction_str; + if (tcr.priming || (new_extruder_id >= 0 && needs_toolchange)) { + if (is_ramming) + gcodegen.m_wipe.reset_path(); // We don't want wiping on the ramming lines. + toolchange_gcode_str = gcodegen.set_extruder(new_extruder_id, tcr.print_z); // TODO: toolchange_z vs print_z + if (gcodegen.config().has_prime_tower) + deretraction_str = gcodegen.unretract(); + } + + // Insert the toolchange and deretraction gcode into the generated gcode. + + DynamicConfig config; + config.set_key_value("change_filament_gcode", new ConfigOptionString(toolchange_gcode_str)); + config.set_key_value("deretraction_from_wipe_tower_generator", new ConfigOptionString(deretraction_str)); + + int previous_extruder_id = gcodegen.writer().extruder() ? (int) gcodegen.writer().extruder()->id() : -1; + config.set_key_value("previous_extruder", new ConfigOptionInt(previous_extruder_id)); + config.set_key_value("next_extruder", new ConfigOptionInt((int) new_extruder_id)); + config.set_key_value("layer_num", new ConfigOptionInt(gcodegen.m_layer_index)); + config.set_key_value("layer_z", new ConfigOptionFloat(tcr.print_z)); + config.set_key_value("toolchange_z", new ConfigOptionFloat(z)); + GCodeWriter &gcode_writer = gcodegen.m_writer; + FullPrintConfig &full_config = gcodegen.m_config; + float old_retract_length = gcode_writer.extruder() != nullptr ? full_config.retraction_length.get_at(previous_extruder_id) : 0; + float new_retract_length = full_config.retraction_length.get_at(new_extruder_id); + float old_retract_length_toolchange = gcode_writer.extruder() != nullptr ? + full_config.retract_length_toolchange.get_at(previous_extruder_id) : + 0; + float new_retract_length_toolchange = full_config.retract_length_toolchange.get_at(new_extruder_id); + int old_filament_temp = gcode_writer.extruder() != nullptr ? + (gcodegen.on_first_layer() ? full_config.nozzle_temperature_initial_layer.get_at(previous_extruder_id) : + full_config.nozzle_temperature.get_at(previous_extruder_id)) : + 210; + int new_filament_temp = gcodegen.on_first_layer() ? full_config.nozzle_temperature_initial_layer.get_at(new_extruder_id) : + full_config.nozzle_temperature.get_at(new_extruder_id); + Vec3d nozzle_pos = gcode_writer.get_position(); + + float purge_volume = tcr.purge_volume < EPSILON ? 0 : std::max(tcr.purge_volume, g_min_purge_volume); + float filament_area = float((M_PI / 4.f) * pow(full_config.filament_diameter.get_at(new_extruder_id), 2)); + float purge_length = purge_volume / filament_area; + + int old_filament_e_feedrate = gcode_writer.extruder() != nullptr ? + (int) (60.0 * full_config.filament_max_volumetric_speed.get_at(previous_extruder_id) / + filament_area) : + 200; + old_filament_e_feedrate = old_filament_e_feedrate == 0 ? 100 : old_filament_e_feedrate; + int new_filament_e_feedrate = (int) (60.0 * full_config.filament_max_volumetric_speed.get_at(new_extruder_id) / filament_area); + new_filament_e_feedrate = new_filament_e_feedrate == 0 ? 100 : new_filament_e_feedrate; + + config.set_key_value("max_layer_z", new ConfigOptionFloat(gcodegen.m_max_layer_z)); + config.set_key_value("relative_e_axis", new ConfigOptionBool(full_config.use_relative_e_distances)); + config.set_key_value("toolchange_count", new ConfigOptionInt((int) gcodegen.m_toolchange_count)); + config.set_key_value("fan_speed", new ConfigOptionInt((int) 0)); + config.set_key_value("old_retract_length", new ConfigOptionFloat(old_retract_length)); + config.set_key_value("new_retract_length", new ConfigOptionFloat(new_retract_length)); + config.set_key_value("old_retract_length_toolchange", new ConfigOptionFloat(old_retract_length_toolchange)); + config.set_key_value("new_retract_length_toolchange", new ConfigOptionFloat(new_retract_length_toolchange)); + config.set_key_value("old_filament_temp", new ConfigOptionInt(old_filament_temp)); + config.set_key_value("new_filament_temp", new ConfigOptionInt(new_filament_temp)); + config.set_key_value("x_after_toolchange", new ConfigOptionFloat(start_pos(0))); + config.set_key_value("y_after_toolchange", new ConfigOptionFloat(start_pos(1))); + config.set_key_value("z_after_toolchange", new ConfigOptionFloat(nozzle_pos(2))); + config.set_key_value("first_flush_volume", new ConfigOptionFloat(purge_length / 2.f)); + config.set_key_value("second_flush_volume", new ConfigOptionFloat(purge_length / 2.f)); + config.set_key_value("old_filament_e_feedrate", new ConfigOptionInt(old_filament_e_feedrate)); + config.set_key_value("new_filament_e_feedrate", new ConfigOptionInt(new_filament_e_feedrate)); + config.set_key_value("travel_point_1_x", new ConfigOptionFloat(float(travel_point_1.x()))); + config.set_key_value("travel_point_1_y", new ConfigOptionFloat(float(travel_point_1.y()))); + config.set_key_value("travel_point_2_x", new ConfigOptionFloat(float(travel_point_2.x()))); + config.set_key_value("travel_point_2_y", new ConfigOptionFloat(float(travel_point_2.y()))); + config.set_key_value("travel_point_3_x", new ConfigOptionFloat(float(travel_point_3.x()))); + config.set_key_value("travel_point_3_y", new ConfigOptionFloat(float(travel_point_3.y()))); + + int flush_count = std::min(g_max_flush_count, (int) std::round(purge_volume / g_purge_volume_one_time)); + float flush_unit = purge_length / flush_count; + int flush_idx = 0; + for (; flush_idx < flush_count; flush_idx++) { + char key_value[64] = {0}; + snprintf(key_value, sizeof(key_value), "flush_length_%d", flush_idx + 1); + config.set_key_value(key_value, new ConfigOptionFloat(flush_unit)); + } + + for (; flush_idx < g_max_flush_count; flush_idx++) { + char key_value[64] = {0}; + snprintf(key_value, sizeof(key_value), "flush_length_%d", flush_idx + 1); + config.set_key_value(key_value, new ConfigOptionFloat(0.f)); + } + + std::string tcr_gcode, + tcr_escaped_gcode = gcodegen.placeholder_parser_process("tcr_rotated_gcode", tcr_rotated_gcode, new_extruder_id, &config); + unescape_string_cstyle(tcr_escaped_gcode, tcr_gcode); + gcode += tcr_gcode; + check_add_eol(toolchange_gcode_str); + + // SoftFever: set new PA for new filament + if (gcodegen.config().enable_pressure_advance.get_at(new_extruder_id)) { + gcode += gcodegen.writer().set_pressure_advance(gcodegen.config().pressure_advance.get_at(new_extruder_id)); + } + + // A phony move to the end position at the wipe tower. + gcodegen.writer().travel_to_xy(end_pos.cast()); + gcodegen.set_last_pos(wipe_tower_point_to_object_point(gcodegen, end_pos)); + if (!is_approx(z, current_z)) { + gcode += gcodegen.writer().retract(); + gcode += gcodegen.writer().travel_to_z(current_z, "Travel back up to the topmost object layer."); + gcode += gcodegen.writer().unretract(); + } + + else { + // Prepare a future wipe. + gcodegen.m_wipe.reset_path(); + for (const Vec2f &wipe_pt : tcr.wipe_path) gcodegen.m_wipe.path.points.emplace_back(wipe_tower_point_to_object_point(gcodegen, transform_wt_pt(wipe_pt))); } @@ -703,49 +903,77 @@ static std::vector get_path_of_change_filament(const Print& print) return gcode_out; } - - std::string WipeTowerIntegration::prime(GCode& gcodegen) + std::string WipeTowerIntegration::prime(GCode &gcodegen) { std::string gcode; - // if (!gcodegen.is_BBL_Printer()) { - // for (const WipeTower::ToolChangeResult &tcr : m_priming) { - // if (!tcr.extrusions.empty()) - // gcode += append_tcr(gcodegen, tcr, tcr.new_tool); - // } - // } + if (!gcodegen.is_BBL_Printer()) { + for (const WipeTower::ToolChangeResult &tcr : m_priming) { + if (!tcr.extrusions.empty()) + gcode += append_tcr(gcodegen, tcr, tcr.new_tool); + } + } return gcode; } - std::string WipeTowerIntegration::tool_change(GCode& gcodegen, int extruder_id, bool finish_layer) + std::string WipeTowerIntegration::tool_change(GCode &gcodegen, int extruder_id, bool finish_layer) { std::string gcode; assert(m_layer_idx >= 0); - if (m_layer_idx >= (int) m_tool_changes.size()) return gcode; + if (m_layer_idx >= (int) m_tool_changes.size()) + return gcode; + if (gcodegen.config().purge_in_prime_tower) { + if (gcodegen.writer().need_toolchange(extruder_id) || finish_layer) { + if (m_layer_idx < (int) m_tool_changes.size()) { + if (!(size_t(m_tool_change_idx) < m_tool_changes[m_layer_idx].size())) + throw Slic3r::RuntimeError("Wipe tower generation failed, possibly due to empty first layer."); - // Calculate where the wipe tower layer will be printed. -1 means that print z will not change, - // resulting in a wipe tower with sparse layers. - double wipe_tower_z = -1; - bool ignore_sparse = false; - if (gcodegen.config().wipe_tower_no_sparse_layers.value) { - wipe_tower_z = m_last_wipe_tower_print_z; - ignore_sparse = (m_tool_changes[m_layer_idx].size() == 1 && m_tool_changes[m_layer_idx].front().initial_tool == m_tool_changes[m_layer_idx].front().new_tool); - if (m_tool_change_idx == 0 && !ignore_sparse) - wipe_tower_z = m_last_wipe_tower_print_z + m_tool_changes[m_layer_idx].front().layer_height; - } + // Calculate where the wipe tower layer will be printed. -1 means that print z will not change, + // resulting in a wipe tower with sparse layers. + double wipe_tower_z = -1; + bool ignore_sparse = false; + if (gcodegen.config().wipe_tower_no_sparse_layers.value) { + wipe_tower_z = m_last_wipe_tower_print_z; + ignore_sparse = (m_tool_changes[m_layer_idx].size() == 1 && + m_tool_changes[m_layer_idx].front().initial_tool == m_tool_changes[m_layer_idx].front().new_tool && + m_layer_idx != 0); + if (m_tool_change_idx == 0 && !ignore_sparse) + wipe_tower_z = m_last_wipe_tower_print_z + m_tool_changes[m_layer_idx].front().layer_height; + } - if (m_enable_timelapse_print && m_is_first_print) { - gcode += append_tcr(gcodegen, m_tool_changes[m_layer_idx][0], m_tool_changes[m_layer_idx][0].new_tool, wipe_tower_z); - m_tool_change_idx++; - m_is_first_print = false; - } + if (!ignore_sparse) { + gcode += append_tcr2(gcodegen, m_tool_changes[m_layer_idx][m_tool_change_idx++], extruder_id, wipe_tower_z); + m_last_wipe_tower_print_z = wipe_tower_z; + } + } + } + } else { + // Calculate where the wipe tower layer will be printed. -1 means that print z will not change, + // resulting in a wipe tower with sparse layers. + double wipe_tower_z = -1; + bool ignore_sparse = false; + if (gcodegen.config().wipe_tower_no_sparse_layers.value) { + wipe_tower_z = m_last_wipe_tower_print_z; + ignore_sparse = (m_tool_changes[m_layer_idx].size() == 1 && + m_tool_changes[m_layer_idx].front().initial_tool == m_tool_changes[m_layer_idx].front().new_tool); + if (m_tool_change_idx == 0 && !ignore_sparse) + wipe_tower_z = m_last_wipe_tower_print_z + m_tool_changes[m_layer_idx].front().layer_height; + } - if (gcodegen.writer().need_toolchange(extruder_id) || finish_layer) { - if (!(size_t(m_tool_change_idx) < m_tool_changes[m_layer_idx].size())) throw Slic3r::RuntimeError("Wipe tower generation failed, possibly due to empty first layer."); + if (m_enable_timelapse_print && m_is_first_print) { + gcode += append_tcr(gcodegen, m_tool_changes[m_layer_idx][0], m_tool_changes[m_layer_idx][0].new_tool, wipe_tower_z); + m_tool_change_idx++; + m_is_first_print = false; + } - if (!ignore_sparse) { - gcode += append_tcr(gcodegen, m_tool_changes[m_layer_idx][m_tool_change_idx++], extruder_id, wipe_tower_z); - m_last_wipe_tower_print_z = wipe_tower_z; + if (gcodegen.writer().need_toolchange(extruder_id) || finish_layer) { + if (!(size_t(m_tool_change_idx) < m_tool_changes[m_layer_idx].size())) + throw Slic3r::RuntimeError("Wipe tower generation failed, possibly due to empty first layer."); + + if (!ignore_sparse) { + gcode += append_tcr(gcodegen, m_tool_changes[m_layer_idx][m_tool_change_idx++], extruder_id, wipe_tower_z); + m_last_wipe_tower_print_z = wipe_tower_z; + } } } @@ -753,14 +981,14 @@ static std::vector get_path_of_change_filament(const Print& print) } // Print is finished. Now it remains to unload the filament safely with ramming over the wipe tower. - std::string WipeTowerIntegration::finalize(GCode& gcodegen) + std::string WipeTowerIntegration::finalize(GCode &gcodegen) { std::string gcode; - // if (!gcodegen.is_BBL_Printer()) { - // if (std::abs(gcodegen.writer().get_position()(2) - m_final_purge.print_z) > EPSILON) - // gcode += gcodegen.change_layer(m_final_purge.print_z); - // gcode += append_tcr(gcodegen, m_final_purge, -1); - // } + if (!gcodegen.is_BBL_Printer()) { + if (std::abs(gcodegen.writer().get_position().z() - m_final_purge.print_z) > EPSILON) + gcode += gcodegen.change_layer(m_final_purge.print_z); + gcode += append_tcr(gcodegen, m_final_purge, -1); + } return gcode; } diff --git a/src/libslic3r/GCode.hpp b/src/libslic3r/GCode.hpp index 5a6c6c4a8d..c604d200ef 100644 --- a/src/libslic3r/GCode.hpp +++ b/src/libslic3r/GCode.hpp @@ -104,10 +104,10 @@ public: private: WipeTowerIntegration& operator=(const WipeTowerIntegration&); std::string append_tcr(GCode &gcodegen, const WipeTower::ToolChangeResult &tcr, int new_extruder_id, double z = -1.) const; + std::string append_tcr2(GCode &gcodegen, const WipeTower::ToolChangeResult &tcr, int new_extruder_id, double z = -1.) const; // Postprocesses gcode: rotates and moves G1 extrusions and returns result std::string post_process_wipe_tower_moves(const WipeTower::ToolChangeResult& tcr, const Vec2f& translation, float angle) const; - // Left / right edges of the wipe tower, for the planning of wipe moves. const float m_left; const float m_right; diff --git a/src/libslic3r/GCode/WipeTower.cpp b/src/libslic3r/GCode/WipeTower.cpp index 32dad15cd6..f88e0d56a1 100644 --- a/src/libslic3r/GCode/WipeTower.cpp +++ b/src/libslic3r/GCode/WipeTower.cpp @@ -128,9 +128,9 @@ public: } WipeTowerWriter& disable_linear_advance() { - if(m_gcode_flavor == gcfKlipper) + if (m_gcode_flavor == gcfKlipper) m_gcode += "SET_PRESSURE_ADVANCE ADVANCE=0\n"; - else if(m_gcode_flavor == gcfRepRapFirmware) + else if (m_gcode_flavor == gcfRepRapFirmware) m_gcode += std::string("M572 D") + std::to_string(m_current_tool) + " S0\n"; else m_gcode += "M900 K0\n"; @@ -418,30 +418,36 @@ public: // Let the firmware back up the active speed override value. WipeTowerWriter& speed_override_backup() { - // This is only supported by Prusa at this point (https://github.com/prusa3d/PrusaSlicer/issues/3114) + // BBS: BBL machine don't support speed backup +#if 0 if (m_gcode_flavor == gcfMarlinLegacy || m_gcode_flavor == gcfMarlinFirmware) m_gcode += "M220 B\n"; +#endif return *this; } // Let the firmware restore the active speed override value. WipeTowerWriter& speed_override_restore() { + // BBS: BBL machine don't support speed restore +#if 0 if (m_gcode_flavor == gcfMarlinLegacy || m_gcode_flavor == gcfMarlinFirmware) m_gcode += "M220 R\n"; +#endif return *this; } // Set digital trimpot motor WipeTowerWriter& set_extruder_trimpot(int current) { - if (m_gcode_flavor == gcfKlipper) - return *this; + // BBS: don't control trimpot +#if 0 if (m_gcode_flavor == gcfRepRapSprinter || m_gcode_flavor == gcfRepRapFirmware) m_gcode += "M906 E"; else m_gcode += "M907 E"; m_gcode += std::to_string(current) + "\n"; +#endif return *this; } @@ -1328,33 +1334,6 @@ WipeTower::ToolChangeResult WipeTower::finish_layer(bool extrude_perimeter, bool return construct_tcr(writer, false, old_tool, true, 0.f); } -// Static method to extract wipe_volumes[from][to] from the configuration. -std::vector> WipeTower::extract_wipe_volumes(const PrintConfig& config) -{ - // Get wiping matrix to get number of extruders and convert vector to vector: - std::vector wiping_matrix(cast(config.flush_volumes_matrix.values)); - auto scale = config.flush_multiplier; - - // Orca todo: currently we only/always support SEMM. - // The values shall only be used when SEMM is enabled. The purging for other printers - // is determined by filament_minimal_purge_on_wipe_tower. - // if (! config.single_extruder_multi_material.value) - // std::fill(wiping_matrix.begin(), wiping_matrix.end(), 0.f); - - // Extract purging volumes for each extruder pair: - std::vector> wipe_volumes; - const unsigned int number_of_extruders = (unsigned int)(sqrt(wiping_matrix.size())+EPSILON); - for (unsigned int i = 0; i(wiping_matrix.begin()+i*number_of_extruders, wiping_matrix.begin()+(i+1)*number_of_extruders)); - - // Also include filament_minimal_purge_on_wipe_tower. This is needed for the preview. - for (unsigned int i = 0; i(wipe_volumes[i][j] * scale, config.filament_minimal_purge_on_wipe_tower.get_at(j)); - - return wipe_volumes; -} - // Appends a toolchange into m_plan and calculates neccessary depth of the corresponding box void WipeTower::plan_toolchange(float z_par, float layer_height_par, unsigned int old_tool, unsigned int new_tool, float wipe_volume, float purge_volume) diff --git a/src/libslic3r/GCode/WipeTower.hpp b/src/libslic3r/GCode/WipeTower.hpp index 73cd15cccb..e4dfcb67eb 100644 --- a/src/libslic3r/GCode/WipeTower.hpp +++ b/src/libslic3r/GCode/WipeTower.hpp @@ -25,7 +25,6 @@ public: // WipeTower height to minimum depth map static const std::map min_depth_per_height; - static std::vector> extract_wipe_volumes(const PrintConfig& config); struct Extrusion { @@ -256,15 +255,14 @@ public: bool is_support = false; int nozzle_temperature = 0; int nozzle_temperature_initial_layer = 0; - // BBS: remove useless config - //float loading_speed = 0.f; - //float loading_speed_start = 0.f; - //float unloading_speed = 0.f; - //float unloading_speed_start = 0.f; - //float delay = 0.f ; - //int cooling_moves = 0; - //float cooling_initial_speed = 0.f; - //float cooling_final_speed = 0.f; + float loading_speed = 0.f; + float loading_speed_start = 0.f; + float unloading_speed = 0.f; + float unloading_speed_start = 0.f; + float delay = 0.f ; + int cooling_moves = 0; + float cooling_initial_speed = 0.f; + float cooling_final_speed = 0.f; float ramming_line_width_multiplicator = 1.f; float ramming_step_multiplicator = 1.f; float max_e_speed = std::numeric_limits::max(); @@ -288,6 +286,7 @@ private: bool m_enable_timelapse_print = false; bool m_semm = true; // Are we using a single extruder multimaterial printer? + bool m_purge_in_prime_tower = false; // Do we purge in the prime tower? Vec2f m_wipe_tower_pos; // Left front corner of the wipe tower in mm. float m_wipe_tower_width; // Width of the wipe tower. float m_wipe_tower_depth = 0.f; // Depth of the wipe tower @@ -307,15 +306,13 @@ private: size_t m_first_layer_idx = size_t(-1); // G-code generator parameters. - // BBS: remove useless config - //float m_cooling_tube_retraction = 0.f; - //float m_cooling_tube_length = 0.f; - //float m_parking_pos_retraction = 0.f; - //float m_extra_loading_move = 0.f; + float m_cooling_tube_retraction = 0.f; + float m_cooling_tube_length = 0.f; + float m_parking_pos_retraction = 0.f; + float m_extra_loading_move = 0.f; float m_bridging = 0.f; bool m_no_sparse_layers = false; - // BBS: remove useless config - //bool m_set_extruder_trimpot = false; + bool m_set_extruder_trimpot = false; bool m_adhesion = true; GCodeFlavor m_gcode_flavor; diff --git a/src/libslic3r/GCode/WipeTower2.cpp b/src/libslic3r/GCode/WipeTower2.cpp index 443d2f6699..d27a4052f9 100644 --- a/src/libslic3r/GCode/WipeTower2.cpp +++ b/src/libslic3r/GCode/WipeTower2.cpp @@ -1,3 +1,6 @@ +// Orca: This file is ported from latest PrusaSlicer + +// Original PrusaSlicer Copyright: ///|/ Copyright (c) Prusa Research 2017 - 2023 Lukáš Matěna @lukasmatena, Vojtěch Bubník @bubnikv, Enrico Turri @enricoturri1966 ///|/ Copyright (c) SuperSlicer 2023 Remi Durand @supermerill ///|/ Copyright (c) 2020 Paul Arden @ardenpm @@ -141,8 +144,8 @@ public: float get_and_reset_used_filament_length() { float temp = m_used_filament_length; m_used_filament_length = 0.f; return temp; } // Extrude with an explicitely provided amount of extrusion. - WipeTowerWriter2& extrude_explicit(float x, float y, float e, float f = 0.f, bool record_length = false, bool limit_volumetric_flow = true) - { + WipeTowerWriter2& extrude_explicit(float x, float y, float e, float f = 0.f, bool record_length = false, bool limit_volumetric_flow = true) + { if (x == m_current_pos.x() && y == m_current_pos.y() && e == 0.f && (f == 0.f || f == m_current_feedrate)) // Neither extrusion nor a travel move. return *this; @@ -205,17 +208,17 @@ public: return *this; } - WipeTowerWriter2& extrude_explicit(const Vec2f &dest, float e, float f = 0.f, bool record_length = false, bool limit_volumetric_flow = true) - { return extrude_explicit(dest.x(), dest.y(), e, f, record_length); } + WipeTowerWriter2& extrude_explicit(const Vec2f &dest, float e, float f = 0.f, bool record_length = false, bool limit_volumetric_flow = true) + { return extrude_explicit(dest.x(), dest.y(), e, f, record_length); } - // Travel to a new XY position. f=0 means use the current value. + // Travel to a new XY position. f=0 means use the current value. WipeTowerWriter2& travel(float x, float y, float f = 0.f) - { return extrude_explicit(x, y, 0.f, f); } + { return extrude_explicit(x, y, 0.f, f); } - WipeTowerWriter2& travel(const Vec2f &dest, float f = 0.f) - { return extrude_explicit(dest.x(), dest.y(), 0.f, f); } + WipeTowerWriter2& travel(const Vec2f &dest, float f = 0.f) + { return extrude_explicit(dest.x(), dest.y(), 0.f, f); } - // Extrude a line from current position to x, y with the extrusion amount given by m_extrusion_flow. + // Extrude a line from current position to x, y with the extrusion amount given by m_extrusion_flow. WipeTowerWriter2& extrude(float x, float y, float f = 0.f) { float dx = x - m_current_pos.x(); @@ -223,8 +226,8 @@ public: return extrude_explicit(x, y, std::sqrt(dx*dx+dy*dy) * m_extrusion_flow, f, true); } - WipeTowerWriter2& extrude(const Vec2f &dest, const float f = 0.f) - { return extrude(dest.x(), dest.y(), f); } + WipeTowerWriter2& extrude(const Vec2f &dest, const float f = 0.f) + { return extrude(dest.x(), dest.y(), f); } WipeTowerWriter2& rectangle(const Vec2f& ld,float width,float height,const float f = 0.f) { @@ -310,8 +313,8 @@ public: // extrude quickly amount e to x2 with feed f. WipeTowerWriter2& ram(float x1, float x2, float dy, float e0, float e, float f) { - extrude_explicit(x1, m_current_pos.y() + dy, e0, f, true, false); - extrude_explicit(x2, m_current_pos.y(), e, 0.f, true, false); + extrude_explicit(x1, m_current_pos.y() + dy, e0, f, true, false); + extrude_explicit(x2, m_current_pos.y(), e, 0.f, true, false); return *this; } @@ -505,7 +508,8 @@ private: WipeTower::ToolChangeResult WipeTower2::construct_tcr(WipeTowerWriter2& writer, bool priming, - size_t old_tool) const + size_t old_tool, + bool is_finish) const { WipeTower::ToolChangeResult result; result.priming = priming; @@ -519,6 +523,7 @@ WipeTower::ToolChangeResult WipeTower2::construct_tcr(WipeTowerWriter2& writer, result.gcode = std::move(writer.gcode()); result.extrusions = std::move(writer.extrusions()); result.wipe_path = std::move(writer.wipe_path()); + result.is_finish_first = is_finish; return result; } @@ -526,6 +531,7 @@ WipeTower::ToolChangeResult WipeTower2::construct_tcr(WipeTowerWriter2& writer, WipeTower2::WipeTower2(const PrintConfig& config, const PrintRegionConfig& default_region_config,int plate_idx, Vec3d plate_origin, const std::vector>& wiping_matrix, size_t initial_tool) : m_semm(config.single_extruder_multi_material.value), + m_enable_filament_ramming(config.enable_filament_ramming.value), m_wipe_tower_pos(config.wipe_tower_x.get_at(plate_idx), config.wipe_tower_y.get_at(plate_idx)), m_wipe_tower_width(float(config.prime_tower_width)), m_wipe_tower_rotation_angle(float(config.wipe_tower_rotation_angle)), @@ -752,7 +758,7 @@ std::vector WipeTower2::prime( "\n\n"); } - results.emplace_back(construct_tcr(writer, true, old_tool)); + results.emplace_back(construct_tcr(writer, true, old_tool, true)); } m_old_temperature = -1; // If the priming is turned off in config, the temperature changing commands will not actually appear @@ -839,7 +845,7 @@ WipeTower::ToolChangeResult WipeTower2::tool_change(size_t tool) if (m_current_tool < m_used_filament_length.size()) m_used_filament_length[m_current_tool] += writer.get_and_reset_used_filament_length(); - return construct_tcr(writer, false, old_tool); + return construct_tcr(writer, false, old_tool, false); } @@ -866,7 +872,7 @@ void WipeTower2::toolchange_Unload( float remaining = xr - xl ; // keeps track of distance to the next turnaround float e_done = 0; // measures E move done from each segment - const bool do_ramming = m_semm || m_filpar[m_current_tool].multitool_ramming; + const bool do_ramming = m_enable_filament_ramming && (m_semm || m_filpar[m_current_tool].multitool_ramming); if (do_ramming) { writer.travel(ramming_start_pos); // move to starting position @@ -906,6 +912,7 @@ void WipeTower2::toolchange_Unload( } + writer.append("; Ramming\n"); // now the ramming itself: while (do_ramming && i < m_filpar[m_current_tool].ramming_speed.size()) { @@ -933,6 +940,7 @@ void WipeTower2::toolchange_Unload( Vec2f end_of_ramming(writer.x(),writer.y()); writer.change_analyzer_line_width(m_perimeter_width); // so the next lines are not affected by ramming_line_width_multiplier + writer.append("; Retract(unload)\n"); // Retraction: float old_x = writer.x(); float turning_point = (!m_left_to_right ? xl : xr ); @@ -957,6 +965,7 @@ void WipeTower2::toolchange_Unload( } } + writer.append("; Cooling\n"); // Cooling: const int& number_of_moves = m_filpar[m_current_tool].cooling_moves; if (m_semm && number_of_moves > 0) { @@ -978,6 +987,7 @@ void WipeTower2::toolchange_Unload( } if (m_semm) { + writer.append("; Cooling park\n"); // let's wait is necessary: writer.wait(m_filpar[m_current_tool].delay); // we should be at the beginning of the cooling tube again - let's move to parking position: @@ -1006,25 +1016,21 @@ void WipeTower2::toolchange_Change( if (m_current_tool < m_used_filament_length.size()) m_used_filament_length[m_current_tool] += writer.get_and_reset_used_filament_length(); - // Orca TODO: handle multi extruders + // This is where we want to place the custom gcodes. We will use placeholders for this. // These will be substituted by the actual gcodes when the gcode is generated. - //writer.append("[end_filament_gcode]\n"); - //writer.append("[toolchange_gcode]\n"); - writer.append("[filament_end_gcode]\n"); writer.append("[change_filament_gcode]\n"); // Travel to where we assume we are. Custom toolchange or some special T code handling (parking extruder etc) // gcode could have left the extruder somewhere, we cannot just start extruding. We should also inform the // postprocessor that we absolutely want to have this in the gcode, even if it thought it is the same as before. - // Vec2f current_pos = writer.pos_rotated(); - // writer.feedrate(m_travel_speed * 60.f) // see https://github.com/prusa3d/PrusaSlicer/issues/5483 - // .append(std::string("G1 X") + Slic3r::float_to_string_decimal_point(current_pos.x()) - // + " Y" + Slic3r::float_to_string_decimal_point(current_pos.y()) - // + never_skip_tag() + "\n"); - // Orca todo: handle deretraction_from_wipe_tower_generator - // writer.append("[deretraction_from_wipe_tower_generator]"); + Vec2f current_pos = writer.pos_rotated(); + writer.feedrate(m_travel_speed * 60.f) // see https://github.com/prusa3d/PrusaSlicer/issues/5483 + .append(std::string("G1 X") + Slic3r::float_to_string_decimal_point(current_pos.x()) + + " Y" + Slic3r::float_to_string_decimal_point(current_pos.y()) + + never_skip_tag() + "\n"); + writer.append("[deretraction_from_wipe_tower_generator]"); // Orca TODO: handle multi extruders // The toolchange Tn command will be inserted later, only in case that the user does @@ -1379,7 +1385,7 @@ WipeTower::ToolChangeResult WipeTower2::finish_layer() m_current_height += m_layer_info->height; } - return construct_tcr(writer, false, old_tool); + return construct_tcr(writer, false, old_tool, true); } // Static method to get the radius and x-scaling of the stabilizing cone base. @@ -1404,10 +1410,12 @@ std::vector> WipeTower2::extract_wipe_volumes(const PrintConf { // Get wiping matrix to get number of extruders and convert vector to vector: std::vector wiping_matrix(cast(config.flush_volumes_matrix.values)); + auto scale = config.flush_multiplier; + // Orca todo: currently we only/always support SEMM. // The values shall only be used when SEMM is enabled. The purging for other printers // is determined by filament_minimal_purge_on_wipe_tower. - if (! config.single_extruder_multi_material.value) + if (! config.purge_in_prime_tower.value) std::fill(wiping_matrix.begin(), wiping_matrix.end(), 0.f); // Extract purging volumes for each extruder pair: @@ -1419,7 +1427,7 @@ std::vector> WipeTower2::extract_wipe_volumes(const PrintConf // Also include filament_minimal_purge_on_wipe_tower. This is needed for the preview. for (unsigned int i = 0; i(wipe_volumes[i][j], config.filament_minimal_purge_on_wipe_tower.get_at(j)); + wipe_volumes[i][j] = std::max(wipe_volumes[i][j] * scale, config.filament_minimal_purge_on_wipe_tower.get_at(j)); return wipe_volumes; } diff --git a/src/libslic3r/GCode/WipeTower2.hpp b/src/libslic3r/GCode/WipeTower2.hpp index f7de97c444..8fd5d5de31 100644 --- a/src/libslic3r/GCode/WipeTower2.hpp +++ b/src/libslic3r/GCode/WipeTower2.hpp @@ -1,3 +1,6 @@ +// Orca: This file is ported from latest PrusaSlicer + +// Original PrusaSlicer Copyright: ///|/ Copyright (c) Prusa Research 2017 - 2023 Lukáš Matěna @lukasmatena, Vojtěch Bubník @bubnikv ///|/ ///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher @@ -31,7 +34,8 @@ public: // WipeTowerWriter2 is moved from ! WipeTower::ToolChangeResult construct_tcr(WipeTowerWriter2& writer, bool priming, - size_t old_tool) const; + size_t old_tool, + bool is_finish) const; // x -- x coordinates of wipe tower in mm ( left bottom corner ) // y -- y coordinates of wipe tower in mm ( left bottom corner ) @@ -168,6 +172,7 @@ private: bool m_semm = true; // Are we using a single extruder multimaterial printer? + bool m_enable_filament_ramming = true; Vec2f m_wipe_tower_pos; // Left front corner of the wipe tower in mm. float m_wipe_tower_width; // Width of the wipe tower. float m_wipe_tower_depth = 0.f; // Depth of the wipe tower @@ -314,9 +319,6 @@ private: float wipe_volume); }; - - - } // namespace Slic3r #endif // WipeTowerPrusaMM_hpp_ diff --git a/src/libslic3r/Preset.cpp b/src/libslic3r/Preset.cpp index f9e3ac6303..276eea4f2f 100644 --- a/src/libslic3r/Preset.cpp +++ b/src/libslic3r/Preset.cpp @@ -764,7 +764,7 @@ static std::vector s_Preset_print_options { "bridge_density", "precise_outer_wall", "overhang_speed_classic", "bridge_acceleration", "sparse_infill_acceleration", "internal_solid_infill_acceleration", "tree_support_adaptive_layer_height", "tree_support_auto_brim", "tree_support_brim_width", "gcode_comments", "gcode_label_objects", - "initial_layer_travel_speed", "exclude_object", "slow_down_layers", "infill_anchor", "infill_anchor_max", + "initial_layer_travel_speed", "exclude_object", "slow_down_layers", "infill_anchor", "infill_anchor_max","initial_layer_min_bead_width", "make_overhang_printable", "make_overhang_printable_angle", "make_overhang_printable_hole_size" ,"notes", "wipe_tower_cone_angle", "wipe_tower_extra_spacing", "wipe_tower_extruder", "wiping_volumes_extruders","wipe_tower_bridging", "single_extruder_multi_material_priming", "wipe_tower_rotation_angle" @@ -795,7 +795,7 @@ static std::vector s_Preset_filament_options { "enable_pressure_advance", "pressure_advance","chamber_temperature", "filament_shrink", "support_material_interface_fan_speed", "filament_notes" /*,"filament_seam_gap"*/, "filament_loading_speed", "filament_loading_speed_start", "filament_load_time", "filament_unloading_speed", "filament_unloading_speed_start", "filament_unload_time", "filament_toolchange_delay", "filament_cooling_moves", - "filament_cooling_initial_speed", "filament_cooling_final_speed", "filament_ramming_parameters", "filament_minimal_purge_on_wipe_tower", + "filament_cooling_initial_speed", "filament_cooling_final_speed", "filament_ramming_parameters", "filament_multitool_ramming", "filament_multitool_ramming_volume", "filament_multitool_ramming_flow", }; @@ -825,7 +825,7 @@ static std::vector s_Preset_printer_options { "printhost_user", "printhost_password", "printhost_ssl_ignore_revoke", "thumbnails", "use_firmware_retraction", "use_relative_e_distances", "printer_notes", "cooling_tube_retraction", - "cooling_tube_length", "high_current_on_filament_swap", "parking_pos_retraction", "extra_loading_move"}; + "cooling_tube_length", "high_current_on_filament_swap", "parking_pos_retraction", "extra_loading_move", "purge_in_prime_tower", "enable_filament_ramming"}; static std::vector s_Preset_sla_print_options { "layer_height", diff --git a/src/libslic3r/Print.cpp b/src/libslic3r/Print.cpp index aa08bec2ae..f59c9cd617 100644 --- a/src/libslic3r/Print.cpp +++ b/src/libslic3r/Print.cpp @@ -224,7 +224,6 @@ bool Print::invalidate_state_by_config_options(const ConfigOptionResolver & /* n || opt_key == "filament_unloading_speed_start" || opt_key == "filament_toolchange_delay" || opt_key == "filament_cooling_moves" - || opt_key == "filament_minimal_purge_on_wipe_tower" || opt_key == "filament_cooling_initial_speed" || opt_key == "filament_cooling_final_speed" || opt_key == "filament_ramming_parameters" @@ -259,6 +258,8 @@ bool Print::invalidate_state_by_config_options(const ConfigOptionResolver & /* n || opt_key == "wipe_tower_extra_spacing" || opt_key == "wipe_tower_extruder" || opt_key == "wiping_volumes_extruders" + || opt_key == "enable_filament_ramming" + || opt_key == "purge_in_prime_tower" ) { //|| opt_key == "z_offset") { steps.emplace_back(psWipeTower); @@ -2177,36 +2178,16 @@ bool Print::has_wipe_tower() const return false; } -const WipeTowerData& Print::wipe_tower_data(size_t filaments_cnt) const +const WipeTowerData &Print::wipe_tower_data(size_t filaments_cnt) const { // If the wipe tower wasn't created yet, make sure the depth and brim_width members are set to default. - if (! is_step_done(psWipeTower) && filaments_cnt !=0) { - if (true || is_BBL_printer()) { // BBS - double width = m_config.prime_tower_width; - double layer_height = 0.2; // hard code layer height - double wipe_volume = m_config.prime_volume; - if (filaments_cnt == 1 && enable_timelapse_print()) { - const_cast(this)->m_wipe_tower_data.depth = wipe_volume / (layer_height * width); - } else { - auto scale = m_config.flush_multiplier; - // Calculating depth should take into account currently set wiping volumes. - // For a long time, the initial preview would just use 900/width per toolchange (15mm on a 60mm wide tower) - // and it worked well enough. Let's try to do slightly better by accounting for the purging volumes. - std::vector> wipe_volumes = WipeTower2::extract_wipe_volumes(m_config); - std::vector max_wipe_volumes; - for (const std::vector &v : wipe_volumes) - max_wipe_volumes.emplace_back(scale*(*std::max_element(v.begin(), v.end()))); - float maximum = std::accumulate(max_wipe_volumes.begin(), max_wipe_volumes.end(), 0.f); - maximum = maximum * filaments_cnt / max_wipe_volumes.size(); - - const_cast(this)->m_wipe_tower_data.depth = maximum * (filaments_cnt - 1) / (layer_height * width); - } - const_cast(this)->m_wipe_tower_data.brim_width = m_config.prime_tower_brim_width; - } - else{ - // If the wipe tower wasn't created yet, make sure the depth and brim_width members are set to default. - const_cast(this)->m_wipe_tower_data.brim_width = m_config.prime_tower_brim_width; - + if (!is_step_done(psWipeTower) && filaments_cnt != 0) { + double width = m_config.prime_tower_width; + double layer_height = 0.2; // hard code layer height + double wipe_volume = m_config.prime_volume; + if (m_config.purge_in_prime_tower || (filaments_cnt == 1 && enable_timelapse_print())) { + const_cast(this)->m_wipe_tower_data.depth = wipe_volume / (layer_height * width); + } else { // Calculating depth should take into account currently set wiping volumes. // For a long time, the initial preview would just use 900/width per toolchange (15mm on a 60mm wide tower) // and it worked well enough. Let's try to do slightly better by accounting for the purging volumes. @@ -2217,12 +2198,9 @@ const WipeTowerData& Print::wipe_tower_data(size_t filaments_cnt) const float maximum = std::accumulate(max_wipe_volumes.begin(), max_wipe_volumes.end(), 0.f); maximum = maximum * filaments_cnt / max_wipe_volumes.size(); - float width = float(m_config.prime_tower_width); - float layer_height = 0.2f; // just assume fixed value, it will still be better than before. - - const_cast(this)->m_wipe_tower_data.depth = (maximum / layer_height) / width; - const_cast(this)->m_wipe_tower_data.height = -1.f; // unknown yet + const_cast(this)->m_wipe_tower_data.depth = maximum / (layer_height * width); } + const_cast(this)->m_wipe_tower_data.brim_width = m_config.prime_tower_brim_width; } return m_wipe_tower_data; @@ -2292,10 +2270,11 @@ void Print::_make_wipe_tower() } this->throw_if_canceled(); - // Initialize the wipe tower. - if(true || is_BBL_printer()) { + if (!m_config.purge_in_prime_tower) { + // in BBL machine, wipe tower is only use to prime extruder. So just use a global wipe volume. WipeTower wipe_tower(m_config, m_plate_index, m_origin, m_config.prime_volume, m_wipe_tower_data.tool_ordering.first_extruder(), m_wipe_tower_data.tool_ordering.empty() ? 0.f : m_wipe_tower_data.tool_ordering.back().print_z); + // wipe_tower.set_retract(); // wipe_tower.set_zhop(); @@ -2338,7 +2317,7 @@ void Print::_make_wipe_tower() // request a toolchange at the wipe tower with at least volume_to_wipe purging amount wipe_tower.plan_toolchange((float) layer_tools.print_z, (float) layer_tools.wipe_tower_layer_height, - current_extruder_id, extruder_id, volume_to_purge, volume_to_purge); + current_extruder_id, extruder_id, m_config.prime_volume, volume_to_purge); current_extruder_id = extruder_id; } } @@ -2387,90 +2366,93 @@ void Print::_make_wipe_tower() m_fake_wipe_tower.set_fake_extrusion_data(wipe_tower.position(), wipe_tower.width(), wipe_tower.get_height(), wipe_tower.get_layer_height(), m_wipe_tower_data.depth, m_wipe_tower_data.brim_width, {scale_(origin.x()), scale_(origin.y())}); - } - else{ - // Initialize the wipe tower. - WipeTower2 wipe_tower(m_config, m_default_region_config, m_plate_index, m_origin, wipe_volumes, m_wipe_tower_data.tool_ordering.first_extruder()); + } else { + // Initialize the wipe tower. + WipeTower2 wipe_tower(m_config, m_default_region_config, m_plate_index, m_origin, wipe_volumes, + m_wipe_tower_data.tool_ordering.first_extruder()); - //wipe_tower.set_retract(); - //wipe_tower.set_zhop(); + // wipe_tower.set_retract(); + // wipe_tower.set_zhop(); - // Set the extruder & material properties at the wipe tower object. - for (size_t i = 0; i < number_of_extruders; ++i) + // Set the extruder & material properties at the wipe tower object. + for (size_t i = 0; i < number_of_extruders; ++i) wipe_tower.set_extruder(i, m_config); - // m_wipe_tower_data.priming = Slic3r::make_unique>( - // wipe_tower.prime((float)this->skirt_first_layer_height(), m_wipe_tower_data.tool_ordering.all_extruders(), false)); + // m_wipe_tower_data.priming = Slic3r::make_unique>( + // wipe_tower.prime((float)this->skirt_first_layer_height(), m_wipe_tower_data.tool_ordering.all_extruders(), false)); - // Lets go through the wipe tower layers and determine pairs of extruder changes for each - // to pass to wipe_tower (so that it can use it for planning the layout of the tower) - { - unsigned int current_extruder_id = m_wipe_tower_data.tool_ordering.first_extruder(); - for (auto &layer_tools : m_wipe_tower_data.tool_ordering.layer_tools()) { // for all layers - if (!layer_tools.has_wipe_tower) continue; - bool first_layer = &layer_tools == &m_wipe_tower_data.tool_ordering.front(); - wipe_tower.plan_toolchange((float) layer_tools.print_z, (float) layer_tools.wipe_tower_layer_height, current_extruder_id, - current_extruder_id, false); - for (const auto extruder_id : layer_tools.extruders) { - if (/*(first_layer && extruder_id == m_wipe_tower_data.tool_ordering.all_extruders().back()) || */extruder_id != current_extruder_id) { - float volume_to_wipe = wipe_volumes[current_extruder_id][extruder_id]; // total volume to wipe after this toolchange - volume_to_wipe *= m_config.flush_multiplier; - // Not all of that can be used for infill purging: - volume_to_wipe -= (float)m_config.filament_minimal_purge_on_wipe_tower.get_at(extruder_id); + // Lets go through the wipe tower layers and determine pairs of extruder changes for each + // to pass to wipe_tower (so that it can use it for planning the layout of the tower) + { + unsigned int current_extruder_id = m_wipe_tower_data.tool_ordering.first_extruder(); + for (auto &layer_tools : m_wipe_tower_data.tool_ordering.layer_tools()) { // for all layers + if (!layer_tools.has_wipe_tower) + continue; + bool first_layer = &layer_tools == &m_wipe_tower_data.tool_ordering.front(); + wipe_tower.plan_toolchange((float) layer_tools.print_z, (float) layer_tools.wipe_tower_layer_height, current_extruder_id, + current_extruder_id, false); + for (const auto extruder_id : layer_tools.extruders) { + if (/*(first_layer && extruder_id == m_wipe_tower_data.tool_ordering.all_extruders().back()) || */ extruder_id != + current_extruder_id) { + float volume_to_wipe = wipe_volumes[current_extruder_id][extruder_id]; // total volume to wipe after this toolchange + volume_to_wipe *= m_config.flush_multiplier; + // Not all of that can be used for infill purging: + volume_to_wipe -= (float) m_config.filament_minimal_purge_on_wipe_tower.get_at(extruder_id); - // try to assign some infills/objects for the wiping: - volume_to_wipe = layer_tools.wiping_extrusions().mark_wiping_extrusions(*this, current_extruder_id, extruder_id, volume_to_wipe); + // try to assign some infills/objects for the wiping: + volume_to_wipe = layer_tools.wiping_extrusions().mark_wiping_extrusions(*this, current_extruder_id, extruder_id, + volume_to_wipe); - // add back the minimal amount toforce on the wipe tower: - volume_to_wipe += (float)m_config.filament_minimal_purge_on_wipe_tower.get_at(extruder_id); + // add back the minimal amount toforce on the wipe tower: + volume_to_wipe += (float) m_config.filament_minimal_purge_on_wipe_tower.get_at(extruder_id); - // request a toolchange at the wipe tower with at least volume_to_wipe purging amount - wipe_tower.plan_toolchange((float)layer_tools.print_z, (float)layer_tools.wipe_tower_layer_height, - current_extruder_id, extruder_id, volume_to_wipe); - current_extruder_id = extruder_id; + // request a toolchange at the wipe tower with at least volume_to_wipe purging amount + wipe_tower.plan_toolchange((float) layer_tools.print_z, (float) layer_tools.wipe_tower_layer_height, + current_extruder_id, extruder_id, volume_to_wipe); + current_extruder_id = extruder_id; + } } + layer_tools.wiping_extrusions().ensure_perimeters_infills_order(*this); + if (&layer_tools == &m_wipe_tower_data.tool_ordering.back() || (&layer_tools + 1)->wipe_tower_partitions == 0) + break; } - layer_tools.wiping_extrusions().ensure_perimeters_infills_order(*this); - if (&layer_tools == &m_wipe_tower_data.tool_ordering.back() || (&layer_tools + 1)->wipe_tower_partitions == 0) - break; } - } - // Generate the wipe tower layers. - m_wipe_tower_data.tool_changes.reserve(m_wipe_tower_data.tool_ordering.layer_tools().size()); - wipe_tower.generate(m_wipe_tower_data.tool_changes); - m_wipe_tower_data.depth = wipe_tower.get_depth(); - m_wipe_tower_data.z_and_depth_pairs = wipe_tower.get_z_and_depth_pairs(); - m_wipe_tower_data.brim_width = wipe_tower.get_brim_width(); - m_wipe_tower_data.height = wipe_tower.get_wipe_tower_height(); + // Generate the wipe tower layers. + m_wipe_tower_data.tool_changes.reserve(m_wipe_tower_data.tool_ordering.layer_tools().size()); + wipe_tower.generate(m_wipe_tower_data.tool_changes); + m_wipe_tower_data.depth = wipe_tower.get_depth(); + m_wipe_tower_data.z_and_depth_pairs = wipe_tower.get_z_and_depth_pairs(); + m_wipe_tower_data.brim_width = wipe_tower.get_brim_width(); + m_wipe_tower_data.height = wipe_tower.get_wipe_tower_height(); - // Unload the current filament over the purge tower. - coordf_t layer_height = m_objects.front()->config().layer_height.value; - if (m_wipe_tower_data.tool_ordering.back().wipe_tower_partitions > 0) { - // The wipe tower goes up to the last layer of the print. - if (wipe_tower.layer_finished()) { - // The wipe tower is printed to the top of the print and it has no space left for the final extruder purge. - // Lift Z to the next layer. - wipe_tower.set_layer(float(m_wipe_tower_data.tool_ordering.back().print_z + layer_height), float(layer_height), 0, false, true); + // Unload the current filament over the purge tower. + coordf_t layer_height = m_objects.front()->config().layer_height.value; + if (m_wipe_tower_data.tool_ordering.back().wipe_tower_partitions > 0) { + // The wipe tower goes up to the last layer of the print. + if (wipe_tower.layer_finished()) { + // The wipe tower is printed to the top of the print and it has no space left for the final extruder purge. + // Lift Z to the next layer. + wipe_tower.set_layer(float(m_wipe_tower_data.tool_ordering.back().print_z + layer_height), float(layer_height), 0, false, + true); + } else { + // There is yet enough space at this layer of the wipe tower for the final purge. + } } else { - // There is yet enough space at this layer of the wipe tower for the final purge. + // The wipe tower does not reach the last print layer, perform the pruge at the last print layer. + assert(m_wipe_tower_data.tool_ordering.back().wipe_tower_partitions == 0); + wipe_tower.set_layer(float(m_wipe_tower_data.tool_ordering.back().print_z), float(layer_height), 0, false, true); } - } else { - // The wipe tower does not reach the last print layer, perform the pruge at the last print layer. - assert(m_wipe_tower_data.tool_ordering.back().wipe_tower_partitions == 0); - wipe_tower.set_layer(float(m_wipe_tower_data.tool_ordering.back().print_z), float(layer_height), 0, false, true); - } - m_wipe_tower_data.final_purge = Slic3r::make_unique( - wipe_tower.tool_change((unsigned int)(-1))); + m_wipe_tower_data.final_purge = Slic3r::make_unique(wipe_tower.tool_change((unsigned int) (-1))); - m_wipe_tower_data.used_filament = wipe_tower.get_used_filament(); - m_wipe_tower_data.number_of_toolchanges = wipe_tower.get_number_of_toolchanges(); - const Vec3d origin = Vec3d::Zero(); - m_fake_wipe_tower.set_fake_extrusion_data(wipe_tower.position(), wipe_tower.width(), wipe_tower.get_wipe_tower_height(), - config().initial_layer_print_height, m_wipe_tower_data.depth, - m_wipe_tower_data.z_and_depth_pairs, m_wipe_tower_data.brim_width, - config().wipe_tower_rotation_angle, config().wipe_tower_cone_angle, - {scale_(origin.x()), scale_(origin.y())}); + m_wipe_tower_data.used_filament = wipe_tower.get_used_filament(); + m_wipe_tower_data.number_of_toolchanges = wipe_tower.get_number_of_toolchanges(); + const Vec3d origin = Vec3d::Zero(); + m_fake_wipe_tower.set_fake_extrusion_data(wipe_tower.position(), wipe_tower.width(), wipe_tower.get_wipe_tower_height(), + config().initial_layer_print_height, m_wipe_tower_data.depth, + m_wipe_tower_data.z_and_depth_pairs, m_wipe_tower_data.brim_width, + config().wipe_tower_rotation_angle, config().wipe_tower_cone_angle, + {scale_(origin.x()), scale_(origin.y())}); } } diff --git a/src/libslic3r/PrintConfig.cpp b/src/libslic3r/PrintConfig.cpp index 8d0e942210..a4b9603fc5 100644 --- a/src/libslic3r/PrintConfig.cpp +++ b/src/libslic3r/PrintConfig.cpp @@ -1369,17 +1369,6 @@ void PrintConfigDef::init_fff_params() def->mode = comAdvanced; def->set_default_value(new ConfigOptionFloats { 2. }); - def = this->add("filament_minimal_purge_on_wipe_tower", coFloats); - def->label = L("Minimal purge on wipe tower"); - def->tooltip = L("After a tool change, the exact position of the newly loaded filament inside " - "the nozzle may not be known, and the filament pressure is likely not yet stable. " - "Before purging the print head into an infill or a sacrificial object, Slic3r will always prime " - "this amount of material into the wipe tower to produce successive infill or sacrificial object extrusions reliably."); - def->sidetext = L("mm³"); - def->min = 0; - def->mode = comAdvanced; - def->set_default_value(new ConfigOptionFloats { 15. }); - def = this->add("machine_load_filament_time", coFloat); def->label = L("Filament load time"); def->tooltip = L("Time to load new filament when switch filament. For statistics only"); @@ -3197,7 +3186,21 @@ def = this->add("filament_loading_speed", coFloats); def->label = L("Single Extruder Multi Material"); def->tooltip = L("Use single nozzle to print multi filament"); def->mode = comAdvanced; - def->set_default_value(new ConfigOptionBool(false)); + def->readonly = true; + def->set_default_value(new ConfigOptionBool(true)); + + def = this->add("purge_in_prime_tower", coBool); + def->label = L("Purge in prime tower"); + def->tooltip = L("Purge remaining filament into prime tower"); + def->mode = comAdvanced; + def->set_default_value(new ConfigOptionBool(true)); + + def = this->add("enable_filament_ramming", coBool); + def->label = L("Enable filament ramming"); + def->tooltip = L("Enable filament ramming"); + def->mode = comAdvanced; + def->set_default_value(new ConfigOptionBool(true)); + def = this->add("wipe_tower_no_sparse_layers", coBool); def->label = L("No sparse layers (EXPERIMENTAL)"); @@ -3853,7 +3856,7 @@ def = this->add("filament_loading_speed", coFloats); def->label = L("Flush multiplier"); def->tooltip = L("The actual flushing volumes is equal to the flush multiplier multiplied by the flushing volumes in the table."); def->sidetext = ""; - def->set_default_value(new ConfigOptionFloat(1.0)); + def->set_default_value(new ConfigOptionFloat(0.3)); // BBS def = this->add("prime_volume", coFloat); @@ -3886,7 +3889,7 @@ def = this->add("filament_loading_speed", coFloats); def->sidetext = L("mm"); def->min = 2.0; def->mode = comSimple; - def->set_default_value(new ConfigOptionFloat(35.)); + def->set_default_value(new ConfigOptionFloat(60.)); def = this->add("wipe_tower_rotation_angle", coFloat); def->label = L("Wipe tower rotation angle"); @@ -4912,7 +4915,9 @@ void PrintConfigDef::handle_legacy(t_config_option_key &opt_key, std::string &va } } else if (opt_key == "overhang_fan_threshold" && value == "5%") { value = "10%"; - } + } else if(opt_key == "single_extruder_multi_material") { + value = "1"; + } // Ignore the following obsolete configuration keys: static std::set ignore = { diff --git a/src/libslic3r/PrintConfig.hpp b/src/libslic3r/PrintConfig.hpp index c7ea723b8e..03c1f75c30 100644 --- a/src/libslic3r/PrintConfig.hpp +++ b/src/libslic3r/PrintConfig.hpp @@ -941,6 +941,8 @@ PRINT_CONFIG_CLASS_DEFINE( ((ConfigOptionBools, filament_multitool_ramming)) ((ConfigOptionFloats, filament_multitool_ramming_volume)) ((ConfigOptionFloats, filament_multitool_ramming_flow)) + ((ConfigOptionBool, purge_in_prime_tower)) + ((ConfigOptionBool, enable_filament_ramming)) ) diff --git a/src/slic3r/GUI/ConfigManipulation.cpp b/src/slic3r/GUI/ConfigManipulation.cpp index ff1d5c9b97..28f5189a72 100644 --- a/src/slic3r/GUI/ConfigManipulation.cpp +++ b/src/slic3r/GUI/ConfigManipulation.cpp @@ -647,14 +647,21 @@ void ConfigManipulation::toggle_print_fff_options(DynamicPrintConfig *config, co // Orca todo: enable/disable wipe tower parameters // for (auto el : - // {"wipe_tower_x", "wipe_tower_y", "wipe_tower_width", "wipe_tower_rotation_angle", "wipe_tower_brim_width", "wipe_tower_cone_angle", + // {"wipe_tower_x", "wipe_tower_y", , "wipe_tower_rotation_angle", "wipe_tower_brim_width", "wipe_tower_cone_angle", // "wipe_tower_extra_spacing", "wipe_tower_bridging", "wipe_tower_no_sparse_layers", "single_extruder_multi_material_priming"}) // toggle_field(el, have_wipe_tower); bool have_prime_tower = config->opt_bool("enable_prime_tower"); - for (auto el : { "prime_tower_width", "prime_volume", "prime_tower_brim_width"}) + for (auto el : { "prime_tower_width", "prime_tower_brim_width"}) toggle_line(el, have_prime_tower); + bool purge_in_primetower = preset_bundle->printers.get_edited_preset().config.opt_bool("purge_in_prime_tower"); + + for (auto el : {"wipe_tower_rotation_angle", "wipe_tower_cone_angle", "wipe_tower_extra_spacing", "wipe_tower_bridging", "wipe_tower_no_sparse_layers"}) + toggle_line(el, have_prime_tower && purge_in_primetower); + + toggle_line("prime_volume",have_prime_tower && !purge_in_primetower); + for (auto el : {"flush_into_infill", "flush_into_support", "flush_into_objects"}) toggle_field(el, have_prime_tower); diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index fbef103121..c9f324fd35 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -11303,7 +11303,7 @@ void Plater::on_config_change(const DynamicPrintConfig &config) else if (boost::starts_with(opt_key, "enable_prime_tower") || boost::starts_with(opt_key, "prime_tower") || boost::starts_with(opt_key, "wipe_tower") || - // opt_key == "filament_minimal_purge_on_wipe_tower" // ? #ys_FIXME + opt_key == "filament_minimal_purge_on_wipe_tower" || opt_key == "single_extruder_multi_material" || // BBS opt_key == "prime_volume") { diff --git a/src/slic3r/GUI/Tab.cpp b/src/slic3r/GUI/Tab.cpp index c872d65555..d183e4528d 100644 --- a/src/slic3r/GUI/Tab.cpp +++ b/src/slic3r/GUI/Tab.cpp @@ -1591,15 +1591,15 @@ void Tab::activate_option(const std::string& opt_key, const wxString& category) wxPostEvent(m_page_view, evt); } } - //else if (category == "Single extruder MM setup") { - // // When we show and hide "Single extruder MM setup" page, - // // related options are still in the search list - // // So, let's hightlighte a "single_extruder_multi_material" option, - // // as a "way" to show hidden page again - // field = get_field("single_extruder_multi_material"); - // if (field) - // set_focus(field->getWindow()); - //} + else if (category == "Single extruder MM setup") { + // When we show and hide "Single extruder MM setup" page, + // related options are still in the search list + // So, let's hightlighte a "single_extruder_multi_material" option, + // as a "way" to show hidden page again + field = get_field("single_extruder_multi_material"); + if (field) + set_focus(field->getWindow()); + } m_highlighter.init(get_custom_ctrl_with_blinking_ptr(opt_key)); } @@ -2078,7 +2078,7 @@ void TabPrint::build() optgroup->append_single_option_line("wipe_tower_cone_angle"); optgroup->append_single_option_line("wipe_tower_extra_spacing"); optgroup->append_single_option_line("wipe_tower_no_sparse_layers"); - optgroup->append_single_option_line("single_extruder_multi_material_priming"); + // optgroup->append_single_option_line("single_extruder_multi_material_priming"); optgroup = page->new_optgroup(L("Flush options"), L"param_flush"); @@ -2822,12 +2822,6 @@ void TabFilament::build() //BBS add_filament_overrides_page(); -#if 0 - //page = add_options_page(L("Advanced"), "advanced"); - // optgroup = page->new_optgroup(L("Wipe tower parameters")); - // optgroup->append_single_option_line("filament_minimal_purge_on_wipe_tower"); -#endif - const int gcode_field_height = 15; // 150 const int notes_field_height = 25; // 250 @@ -2852,8 +2846,8 @@ void TabFilament::build() option.opt.height = gcode_field_height;// 150; optgroup->append_single_option_line(option); - page = add_options_page(L("MMU"), "advanced"); - optgroup = page->new_optgroup(L("Wipe tower parameters")); + page = add_options_page(L("Multimaterial"), "advanced"); + optgroup = page->new_optgroup(L("Wipe tower parameters")); optgroup->append_single_option_line("filament_minimal_purge_on_wipe_tower"); optgroup = page->new_optgroup(L("Toolchange parameters with single extruder MM printers")); @@ -2886,13 +2880,15 @@ void TabFilament::build() return sizer; }); - + // Orca: multi tool is not supported yet. +#ifdef ORCA_MULTI_TOOL optgroup = page->new_optgroup(L("Toolchange parameters with multi extruder MM printers")); optgroup->append_single_option_line("filament_multitool_ramming"); optgroup->append_single_option_line("filament_multitool_ramming_volume"); optgroup->append_single_option_line("filament_multitool_ramming_flow"); +#endif - page = add_options_page(L("Notes"), "note"); + page = add_options_page(L("Notes"), "note"); optgroup = page->new_optgroup(L("Notes"),"note", 0); optgroup->label_width = 0; option = optgroup->get_option("filament_notes"); @@ -2965,7 +2961,7 @@ void TabFilament::toggle_options() wxGetApp().preset_bundle->is_bbl_vendor(); } - if (m_active_page->title() == "Cooling") { + if (m_active_page->title() == L("Cooling")) { bool cooling = m_config->opt_bool("slow_down_for_layer_cooling", 0); toggle_option("slow_down_min_speed", cooling); @@ -2977,7 +2973,7 @@ void TabFilament::toggle_options() "additional_cooling_fan_speed", m_preset_bundle->printers.get_edited_preset().config.option("auxiliary_fan")->value); } - if (m_active_page->title() == "Filament") + if (m_active_page->title() == L("Filament")) { bool pa = m_config->opt_bool("enable_pressure_advance", 0); toggle_option("pressure_advance", pa); @@ -2987,8 +2983,17 @@ void TabFilament::toggle_options() toggle_line("textured_plate_temp_initial_layer", is_BBL_printer); toggle_option("chamber_temperature", !is_BBL_printer); } - if (m_active_page->title() == "Setting Overrides") + if (m_active_page->title() == L("Setting Overrides")) update_filament_overrides_page(); + + if (m_active_page->title() == L("Multimaterial")) { + // Orca: hide specific settings for BBL printers + for (auto el : + {"filament_minimal_purge_on_wipe_tower", "filament_loading_speed_start", "filament_loading_speed", + "filament_unloading_speed_start", "filament_unloading_speed", "filament_load_time", "filament_unload_time", + "filament_toolchange_delay", "filament_cooling_moves", "filament_cooling_initial_speed", "filament_cooling_final_speed"}) + toggle_option(el, !is_BBL_printer); + } } void TabFilament::update() @@ -3089,12 +3094,12 @@ void TabPrinter::build_fff() // optgroup->append_single_option_line("printable_area"); optgroup->append_single_option_line("printable_height"); optgroup->append_single_option_line("nozzle_volume"); - // BBS + #if 0 //optgroup->append_single_option_line("z_offset"); +#endif - //optgroup = page->new_optgroup(L("Capabilities")); - //ConfigOptionDef def; + // ConfigOptionDef def; // def.type = coInt, // def.set_default_value(new ConfigOptionInt(1)); // def.label = L("Extruders"); @@ -3103,87 +3108,8 @@ void TabPrinter::build_fff() // def.max = 256; // //BBS // def.mode = comDevelop; - //Option option(def, "extruders_count"); - //optgroup->append_single_option_line(option); - //optgroup->append_single_option_line("single_extruder_multi_material"); - - //optgroup->m_on_change = [this, optgroup](t_config_option_key opt_key, boost::any value) { - // // optgroup->get_value() return int for def.type == coInt, - // // Thus, there should be boost::any_cast ! - // // Otherwise, boost::any_cast causes an "unhandled unknown exception" - // size_t extruders_count = size_t(boost::any_cast(optgroup->get_value("extruders_count"))); - // wxTheApp->CallAfter([this, opt_key, value, extruders_count]() { - // if (opt_key == "extruders_count" || opt_key == "single_extruder_multi_material") { - // extruders_count_changed(extruders_count); - // init_options_list(); // m_options_list should be updated before UI updating - // update_dirty(); - // if (opt_key == "single_extruder_multi_material") { // the single_extruder_multimaterial was added to force pages - // on_value_change(opt_key, value); // rebuild - let's make sure the on_value_change is not skipped - - // if (boost::any_cast(value) && m_extruders_count > 1) { - // SuppressBackgroundProcessingUpdate sbpu; - // std::vector nozzle_diameters = static_cast(m_config->option("nozzle_diameter"))->values; - // const double frst_diam = nozzle_diameters[0]; - - // for (auto cur_diam : nozzle_diameters) { - // // if value is differs from first nozzle diameter value - // if (fabs(cur_diam - frst_diam) > EPSILON) { - // const wxString msg_text = _(L("Single Extruder Multi Material is selected, \n" - // "and all extruders must have the same diameter.\n" - // "Do you want to change the diameter for all extruders to first extruder nozzle diameter value?")); - // //wxMessageDialog dialog(parent(), msg_text, _(L("Nozzle diameter")), wxICON_WARNING | wxYES_NO); - // MessageDialog dialog(parent(), msg_text, _(L("Nozzle diameter")), wxICON_WARNING | wxYES_NO); - - // DynamicPrintConfig new_conf = *m_config; - // if (dialog.ShowModal() == wxID_YES) { - // for (size_t i = 1; i < nozzle_diameters.size(); i++) - // nozzle_diameters[i] = frst_diam; - - // new_conf.set_key_value("nozzle_diameter", new ConfigOptionFloats(nozzle_diameters)); - // } - // else - // new_conf.set_key_value("single_extruder_multi_material", new ConfigOptionBool(false)); - - // load_config(new_conf); - // break; - // } - // } - // } - // } - // } - // else { - // update_dirty(); - // on_value_change(opt_key, value); - // } - // }); - //}; - - //optgroup = page->new_optgroup(L("Firmware")); - - //optgroup->append_single_option_line("silent_mode"); - - //optgroup->m_on_change = [this, optgroup](t_config_option_key opt_key, boost::any value) { - // wxTheApp->CallAfter([this, opt_key, value]() { - // if (opt_key == "silent_mode") { - // bool val = boost::any_cast(value); - // if (m_use_silent_mode != val) { - // m_rebuild_kinematics_page = true; - // m_use_silent_mode = val; - // } - // } - // if (opt_key == "gcode_flavor") { - // bool supports_travel_acceleration = (boost::any_cast(value) == int(gcfMarlinFirmware)); - // if (supports_travel_acceleration != m_supports_travel_acceleration) { - // m_rebuild_kinematics_page = true; - // m_supports_travel_acceleration = supports_travel_acceleration; - // } - // } - // build_unregular_pages(); - // update_dirty(); - // on_value_change(opt_key, value); - // }); - //}; -#endif + // Option option(def, "extruders_count"); + // optgroup->append_single_option_line(option); optgroup = page->new_optgroup(L("Advanced"), L"param_advanced"); optgroup->append_single_option_line("gcode_flavor"); @@ -3500,35 +3426,31 @@ void TabPrinter::build_unregular_pages(bool from_initial_build/* = false*/) n_before_extruders++; size_t n_after_single_extruder_MM = 2; // Count of pages after single_extruder_multi_material page - //if (m_extruders_count_old == m_extruders_count || - // (m_has_single_extruder_MM_page && m_extruders_count == 1)) - //{ - // // if we have a single extruder MM setup, add a page with configuration options: - // for (size_t i = 0; i < m_pages.size(); ++i) // first make sure it's not there already - // if (m_pages[i]->title().find(L("Single extruder MM setup")) != std::string::npos) { - // m_pages.erase(m_pages.begin() + i); - // break; - // } - // m_has_single_extruder_MM_page = false; - //} + if (from_initial_build) { + // create a page, but pretend it's an extruder page, so we can add it to m_pages ourselves + auto page = add_options_page(L("Multimaterial"), "printer", true); + auto optgroup = page->new_optgroup(L("Single extruder multimaterial setup")); + optgroup->append_single_option_line("single_extruder_multi_material"); + optgroup->m_on_change = [this, optgroup](const t_config_option_key &opt_key, const boost::any &value) { + wxTheApp->CallAfter([this, opt_key, value]() { + if (opt_key == "single_extruder_multi_material") { + build_unregular_pages(); + } + }); + }; + optgroup = page->new_optgroup(L("Wipe tower")); + optgroup->append_single_option_line("purge_in_prime_tower"); + optgroup->append_single_option_line("enable_filament_ramming"); - //BBS: please add our single extruder multimaterial parameters here. Currently - //comment this part because we have no such config in this page. -#if 0 - //if (from_initial_build || - // (m_extruders_count > 1 && m_config->opt_bool("single_extruder_multi_material") && !m_has_single_extruder_MM_page)) { - // // create a page, but pretend it's an extruder page, so we can add it to m_pages ourselves - // auto page = add_options_page(L("Single extruder MM setup"), "printer", true); - // auto optgroup = page->new_optgroup(L("Single extruder multimaterial parameters")); - // - // if (from_initial_build) - // page->clear(); - // else { - // m_pages.insert(m_pages.end() - n_after_single_extruder_MM, page); - // m_has_single_extruder_MM_page = true; - // } - //} -#endif + + optgroup = page->new_optgroup(L("Single extruder multimaterial parameters")); + optgroup->append_single_option_line("cooling_tube_retraction"); + optgroup->append_single_option_line("cooling_tube_length"); + optgroup->append_single_option_line("parking_pos_retraction"); + optgroup->append_single_option_line("extra_loading_move"); + optgroup->append_single_option_line("high_current_on_filament_swap"); + m_pages.insert(m_pages.end() - n_after_single_extruder_MM, page); + } // BBS. Just create one extruder page because BBL machine has only on physical extruder. // Build missed extruder pages @@ -3688,6 +3610,7 @@ void TabPrinter::on_preset_loaded() // update the GUI field according to the number of nozzle diameters supplied extruders_count_changed(extruders_count); #endif + build_unregular_pages(); } void TabPrinter::update_pages() @@ -3770,8 +3693,7 @@ void TabPrinter::toggle_options() //if (m_active_page->title() == "Custom G-code") { // toggle_option("change_filament_gcode", have_multiple_extruders); //} - if (m_active_page->title() == "Basic information") { - toggle_option("single_extruder_multi_material", have_multiple_extruders); + if (m_active_page->title() == L("Basic information")) { // SoftFever: hide BBL specific settings for (auto el : @@ -3783,9 +3705,18 @@ void TabPrinter::toggle_options() toggle_line(el, !is_BBL_printer); } + if (m_active_page->title() == L("Multimaterial")) { + // toggle_option("single_extruder_multi_material", have_multiple_extruders); + + // SoftFever: hide specific settings for BBL printer + for (auto el : + {"purge_in_prime_tower", "enable_filament_ramming", "cooling_tube_retraction", "cooling_tube_length", "parking_pos_retraction", "extra_loading_move", "high_current_on_filament_swap", }) + toggle_option(el, !is_BBL_printer); + + } wxString extruder_number; long val = 1; - if ( m_active_page->title().IsSameAs("Extruder") || + if ( m_active_page->title().IsSameAs(L("Extruder")) || (m_active_page->title().StartsWith("Extruder ", &extruder_number) && extruder_number.ToLong(&val) && val > 0 && (size_t)val <= m_extruders_count)) { @@ -3852,7 +3783,7 @@ void TabPrinter::toggle_options() toggle_option("retract_restart_extra_toolchange", have_multiple_extruders && toolchange_retraction, i); } - if (m_active_page->title() == "Motion ability") { + if (m_active_page->title() == L("Motion ability")) { auto gcf = m_config->option>("gcode_flavor")->value; assert(gcf == gcfMarlinLegacy || gcf == gcfMarlinFirmware || gcf == gcfKlipper); bool silent_mode = m_config->opt_bool("silent_mode"); diff --git a/src/slic3r/GUI/Tab.hpp b/src/slic3r/GUI/Tab.hpp index 551eabd829..586573f181 100644 --- a/src/slic3r/GUI/Tab.hpp +++ b/src/slic3r/GUI/Tab.hpp @@ -547,7 +547,6 @@ public: class TabPrinter : public Tab { private: - bool m_has_single_extruder_MM_page = false; bool m_use_silent_mode = false; void append_option_line(ConfigOptionsGroupShp optgroup, const std::string opt_key); bool m_rebuild_kinematics_page = false;