diff --git a/plugins/BlackBeltPlugin/BlackBeltPlugin.py b/plugins/BlackBeltPlugin/BlackBeltPlugin.py index 72fb5d7e70..d6983be1e2 100644 --- a/plugins/BlackBeltPlugin/BlackBeltPlugin.py +++ b/plugins/BlackBeltPlugin/BlackBeltPlugin.py @@ -264,99 +264,101 @@ class BlackBeltPlugin(Extension): dict_changed = False enable_secondary_fans = global_stack.extruders["0"].getProperty("blackbelt_secondary_fans_enabled", "value") - repetitions = global_stack.getProperty("blackbelt_repetitions", "value") or 1 - enable_belt_wall = global_stack.getProperty("blackbelt_belt_wall_enabled", "value") - - if not (enable_secondary_fans or enable_belt_wall or repetitions > 1): - return - if enable_secondary_fans: secondary_fans_speed = global_stack.extruders["0"].getProperty("blackbelt_secondary_fans_speed", "value") / 100 + enable_belt_wall = global_stack.getProperty("blackbelt_belt_wall_enabled", "value") if enable_belt_wall: belt_wall_flow = global_stack.getProperty("blackbelt_belt_wall_flow", "value") / 100 belt_wall_speed = global_stack.getProperty("blackbelt_belt_wall_speed", "value") * 60 minimum_y = global_stack.extruders["0"].getProperty("wall_line_width_0", "value") / 2 + repetitions = global_stack.getProperty("blackbelt_repetitions", "value") or 1 if repetitions > 1: repetitions_distance = global_stack.getProperty("blackbelt_repetitions_distance", "value") repetitions_gcode = global_stack.getProperty("blackbelt_repetitions_gcode", "value") + if not (enable_secondary_fans or enable_belt_wall or repetitions > 1): + return + for plate_id in gcode_dict: gcode_list = gcode_dict[plate_id] - if gcode_list: - if ";BLACKBELTPROCESSED" not in gcode_list[0]: - # secondary fans should similar things as print cooling fans - if enable_secondary_fans: - search_regex = re.compile(r"M106 S(\d*\.?\d*)") + if not gcode_list: + continue - for layer_number, layer in enumerate(gcode_list): - gcode_list[layer_number] = re.sub(search_regex, lambda m: "M106 P1 S%d\nM106 S%s" % (int(min(255, float(m.group(1)) * secondary_fans_speed)), m.group(1)), layer) #Replace all. + if ";BLACKBELTPROCESSED" in gcode_list[0]: + Logger.log("e", "Already post processed") + continue - # adjust walls that touch the belt - if enable_belt_wall: - #wall_line_width_0 - last_y = None - last_e = None - extruding_move_regex = re.compile(r"(G[0|1] .*) Y(\d*\.?\d*) E(-?\d*\.?\d*)(.*)") - extruding_regex = re.compile(r"G[0|1].* E(-?\d*\.?\d*)") - speed_regex = re.compile(r" F\d*\.?\d*") - extrude_regex = re.compile(r" E-?\d*\.?\d*") + # secondary fans should similar things as print cooling fans + if enable_secondary_fans: + search_regex = re.compile(r"M106 S(\d*\.?\d*)") - for layer_number, layer in enumerate(gcode_list): - if layer_number < 2 or layer_number > len(gcode_list) - 1: - # gcode_list[0]: curaengine header - # gcode_list[1]: start gcode - # gcode_list[2] - gcode_list[n-1]: layers - # gcode_list[n]: end gcode - continue + for layer_number, layer in enumerate(gcode_list): + gcode_list[layer_number] = re.sub(search_regex, lambda m: "M106 P1 S%d\nM106 S%s" % (int(min(255, float(m.group(1)) * secondary_fans_speed)), m.group(1)), layer) #Replace all. - lines = layer.splitlines() - for line_number, line in enumerate(lines): - match = re.search(extruding_move_regex, line) - if match: - y = float(match.group(2)) - e = float(match.group(3)) - if y <= minimum_y and (last_y is not None and last_y <= minimum_y): - if belt_wall_flow != 1.0: - new_e = last_e + (e - last_e) * belt_wall_flow - line = re.sub(extrude_regex, " E%f" % new_e, line) + # adjust walls that touch the belt + if enable_belt_wall: + #wall_line_width_0 + last_y = None + last_e = None + extruding_move_regex = re.compile(r"(G[0|1] .*) Y(\d*\.?\d*) E(-?\d*\.?\d*)(.*)") + extruding_regex = re.compile(r"G[0|1].* E(-?\d*\.?\d*)") + speed_regex = re.compile(r" F\d*\.?\d*") + extrude_regex = re.compile(r" E-?\d*\.?\d*") - # Remove pre-existing move speed and add our own - line = re.sub(speed_regex, r"", line) - line += " F%d ; Adjusted belt wall" % belt_wall_speed - - # Reset E value as if nothing happened - if belt_wall_flow != 1.0: - line += "\nG92 E%f ; Reset E to pre-compensated value" % e - lines[line_number] = line - last_e = e - last_y = y - elif belt_wall_flow != 1.0: - # Keep track of previous E value - match = re.search(extruding_regex, line) - if match: - print(line, match.group(0), match.group(1)) - last_e = float(match.group(1)) - - edited_layer = "\n".join(lines) - gcode_list[layer_number] = edited_layer - - # make repetitions - if repetitions > 1 and len(gcode_list) > 2: + for layer_number, layer in enumerate(gcode_list): + if layer_number < 2 or layer_number > len(gcode_list) - 1: # 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] + continue - gcode_list[0] += ";BLACKBELTPROCESSED\n" - gcode_dict[plate_id] = gcode_list - dict_changed = True - else: - Logger.log("e", "Already post processed") + lines = layer.splitlines() + for line_number, line in enumerate(lines): + match = re.search(extruding_move_regex, line) + if match: + y = float(match.group(2)) + e = float(match.group(3)) + if y <= minimum_y and (last_y is not None and last_y <= minimum_y): + if belt_wall_flow != 1.0: + new_e = last_e + (e - last_e) * belt_wall_flow + line = re.sub(extrude_regex, " E%f" % new_e, line) + + # Remove pre-existing move speed and add our own + line = re.sub(speed_regex, r"", line) + line += " F%d ; Adjusted belt wall" % belt_wall_speed + + # Reset E value as if nothing happened + if belt_wall_flow != 1.0: + line += "\nG92 E%f ; Reset E to pre-compensated value" % e + lines[line_number] = line + last_e = e + last_y = y + elif belt_wall_flow != 1.0: + # Keep track of previous E value + match = re.search(extruding_regex, line) + if match: + print(line, match.group(0), match.group(1)) + last_e = float(match.group(1)) + + edited_layer = "\n".join(lines) + gcode_list[layer_number] = edited_layer + + # make repetitions + 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 + dict_changed = True if dict_changed: setattr(scene, "gcode_dict", gcode_dict)