diff --git a/plugins/BlackBeltPlugin/BlackBeltPlugin.py b/plugins/BlackBeltPlugin/BlackBeltPlugin.py index e6463d00f7..454955a6ad 100644 --- a/plugins/BlackBeltPlugin/BlackBeltPlugin.py +++ b/plugins/BlackBeltPlugin/BlackBeltPlugin.py @@ -128,9 +128,13 @@ class BlackBeltPlugin(Extension): global_stack = Application.getInstance().getGlobalContainerStack() enable_secondary_fans = global_stack.getProperty("blackbelt_secondary_fans_enabled", "value") - if not enable_secondary_fans: + repetitions = global_stack.getProperty("blackbelt_repetitions", "value") + if not (enable_secondary_fans or repetitions > 1): return + repetitions_distance = global_stack.getProperty("blackbelt_repetitions_distance", "value") + repetitions_gcode = global_stack.getProperty("blackbelt_repetitions_gcode", "value") + scene = Application.getInstance().getController().getScene() gcode_dict = getattr(scene, "gcode_dict", {}) if not gcode_dict: # this also checks for an empty dict @@ -143,11 +147,21 @@ class BlackBeltPlugin(Extension): gcode_list = gcode_dict[plate_id] if gcode_list: if ";BLACKBELTPROCESSED" not in gcode_list[0]: - search_regex = re.compile(r"M106 S(\d*\.?\d*?)") - replace_pattern = r"M106 P1 S\1\nM106 S\1" + if enable_secondary_fans: + search_regex = re.compile(r"M106 S(\d*\.?\d*?)") + replace_pattern = r"M106 P1 S\1\nM106 S\1" - for layer_number, layer in enumerate(gcode_list): - gcode_list[layer_number] = re.sub(search_regex, replace_pattern, layer) #Replace all. + for layer_number, layer in enumerate(gcode_list): + gcode_list[layer_number] = re.sub(search_regex, replace_pattern, layer) #Replace all. + + if repetitions > 1 and len(gcode_list) > 2: + # gcode_list[0]: curaengine header + # gcode_list[1]: start gcode + # gcode_list[2] - gcode_list[n-1]: layers + # gcode_list[n]: end gcode + layers = gcode_list[2:-1] + layers.append(repetitions_gcode.replace("{blackbelt_repetitions_distance}", str(repetitions_distance))) + gcode_list[2:-1] = (layers * int(repetitions))[0:-1] gcode_list[0] += ";BLACKBELTPROCESSED\n" gcode_dict[plate_id] = gcode_list diff --git a/resources/definitions/blackbelt.def.json b/resources/definitions/blackbelt.def.json index efa204d848..d96250fbce 100644 --- a/resources/definitions/blackbelt.def.json +++ b/resources/definitions/blackbelt.def.json @@ -115,6 +115,27 @@ "enabled": "blackbelt_belt_wall_enabled", "settable_per_mesh": true, "settable_per_extruder": true + }, + "blackbelt_repetitions": + { + "label": "Copies", + "description": "The number of times the objects on the build plate are printed. Note that the repetitions will not be visible in Layer View.", + "type": "int", + "minimum_value": "1", + "default_value": 1, + "settable_per_mesh": false, + "settable_per_extruder": false + }, + "blackbelt_repetitions_distance": + { + "label": "Distance Between Copies", + "description": "The distance the belt moves between repetitions.", + "type": "float", + "minimum_value": "0", + "default_value": 15, + "enabled": "blackbelt_repetitions > 1", + "settable_per_mesh": false, + "settable_per_extruder": false } } }, @@ -150,6 +171,16 @@ "maximum_value_warning": "machine_nozzle_size", "settable_per_mesh": false, "settable_per_extruder": false + }, + "blackbelt_repetitions_gcode": + { + "label": "Repetitions GCode", + "description": "Gcode commands to be executed between repetitions - separated by \\n.", + "type": "str", + "default_value": "\nG92 E0 ; Set Extruder to zero\nG1 E-6 ; Retract 6mm\nG92 Z0 ; Set Belt to zero\nG1 Z{blackbelt_repetitions_distance} ; Advance belt between repetitions\nG92 Z0 ; Set Belt to zero again\n\n;˄˄˄˄˄˄˄˄˄˄˄˄˄˄˄˄ - repetition - ˄˄˄˄˄˄˄˄˄˄˄˄˄˄˄˄\n\nM107 ; Start with the fan off\n\n", + "enabled": "blackbelt_repetitions > 1", + "settable_per_mesh": false, + "settable_per_extruder": false } } } @@ -160,10 +191,10 @@ "default_value": "BLACKBELT 3D Printer" }, "machine_start_gcode" : { - "default_value": "G90 ; Set to Absolute Positioning\nM82 ; Set extruder to absolute mode\nG21 ; metric values\nM107 ; start with the fan off\nG92 X0 Y{blackbelt_z_offset} Z0 E0 ; Set all axis to 0. Set Y offset to the belt (Y0.1 = big gap, Y0.3 = small gap)\nG1 Y1 ; Move print head up 1mm\nG28 X0 F2000 ; Home X axis\nG1 E15 ; Extruder 15mm material (purge nozzle)\nG1 Z20 E30 F500 ; Move belt and keep extruding\nG1 Z30 E20 ; Stop extruding, move the belt a bit further\nG92 Z0 E-14 ; Zero Belt and Extuder\nG1 F1000 ; Move to the next point with a Speed of 1000mm per minute\nM117 BLACKBELT Printing...\n\n˅˅˅˅˅˅˅˅˅˅˅˅˅˅˅˅ - copy from here / paste codes just under here - ˅˅˅˅˅˅˅˅˅˅˅˅˅˅˅˅\n\nM107 ;start with the fan off" + "default_value": "G90 ; Set to Absolute Positioning\nM82 ; Set extruder to absolute mode\nG21 ; Metric values\nM107 ; Start with the fan off\nG92 X0 Y{blackbelt_z_offset} Z0 E0 ; Set all axis to 0. Set Y offset to the belt (Y0.1 = big gap, Y0.3 = small gap)\nG1 Y1 ; Move print head up 1mm\nG28 X0 F2000 ; Home X axis\nG1 E15 ; Extruder 15mm material (purge nozzle)\nG1 Z20 E30 F500 ; Move belt and keep extruding\nG1 Z30 E20 ; Stop extruding, move the belt a bit further\nG92 Z0 E-14 ; Zero Belt and Extuder\nG1 F1000 ; Move to the next point with a Speed of 1000mm per minute\nM117 BLACKBELT Printing...\n\n;˅˅˅˅˅˅˅˅˅˅˅˅˅˅˅˅ - copy from here / paste codes just under here - ˅˅˅˅˅˅˅˅˅˅˅˅˅˅˅˅\n\nM107 ;start with the fan off" }, "machine_end_gcode" : { - "default_value": "G92 E0 ;set Extruder to zero\nG1 E-6 ;Retract 6mm\nG92 Z0 ;set Belt to zero\nG1 Z15 ;move Belt 10mm before starting up the next product\nG92 Z0 ;set Belt to zero again\n\n˄˄˄˄˄˄˄˄˄˄˄˄˄˄˄˄ - copy up to here / paste codes just above here- ˄˄˄˄˄˄˄˄˄˄˄˄˄˄˄˄\nM104 S0 ;extruder heater off\nM140 S0 ;heated bed heater off\nG92 Z0\nG1 Z10 F1000\nG28 X0 F2000\nG1 Z20 F1000\nG1 X170 F2000\nG1 Y 1 F2000\nM18 ; Disable all stepper motors" + "default_value": "G92 E0 ; Set Extruder to zero\nG1 E-6 ; Retract 6mm\nG92 Z0 ; Set Belt to zero\nG1 Z{blackbelt_repetitions_distance} ; Move Belt 15mm before starting up the next product\nG92 Z0 ; Set Belt to zero again\n\n;˄˄˄˄˄˄˄˄˄˄˄˄˄˄˄˄ - copy up to here / paste codes just above here - ˄˄˄˄˄˄˄˄˄˄˄˄˄˄˄˄\nM104 S0 ; Extruder heater off\nM140 S0 ; Heated bed heater off\nG92 Z0\nG1 Z10 F1000\nG28 X0 F2000\nG1 Z20 F1000\nG1 X170 F2000\nG1 Y 1 F2000\nM18 ; Disable all stepper motors" }, "machine_width": { "default_value": 340