From f6469032c66e7797d585b01ae594e577b57b754c Mon Sep 17 00:00:00 2001 From: GregValiant <64202104+GregValiant@users.noreply.github.com> Date: Sun, 6 Apr 2025 11:06:47 -0400 Subject: [PATCH 01/26] Create ZHopOnTravel.py New script to customize Z-hops in a gcode file. --- .../scripts/ZHopOnTravel.py | 544 ++++++++++++++++++ 1 file changed, 544 insertions(+) create mode 100644 plugins/PostProcessingPlugin/scripts/ZHopOnTravel.py diff --git a/plugins/PostProcessingPlugin/scripts/ZHopOnTravel.py b/plugins/PostProcessingPlugin/scripts/ZHopOnTravel.py new file mode 100644 index 0000000000..82a60239be --- /dev/null +++ b/plugins/PostProcessingPlugin/scripts/ZHopOnTravel.py @@ -0,0 +1,544 @@ +""" + By GregValiant (Greg Foresi) July of 2024 + Insert Z-hops for travel moves regardless of retraction. The 'Layer Range' (or comma delimited 'Layer List'), 'Minimum Travel Distance' and the 'Hop-Height' are user defined. + This script is compatible with Z-hops enabled in Cura. If Z-hops are enabled: There will occasionally be a hop on top of a hop, but the 'resume Z height' will be correct. + It is not necessary to have "retractions" enabled. If retractions are disabled in Cura you may elect to have this script add retractions. The Cura retraction distance and speeds are used. + + Compatibility: + Multi-Extruder printers: NOTE - The retraction settings for a multi-extruder printer are always taken from Extruder 1 (T0). + There is support for: + Absolute and Relative Extrusion + Firmware Retraction + Extra Prime Amount > 0 + Adaptive Layers + G2/G3 arc moves are supported but are treated as straight line moves. + + Incompatibility: + "One at a Time" mode is not supported + + Please Note: + This is a slow running post processor as it must check the cumulative distances of all travel moves (G0 moves) in the range of layers. +""" + +from UM.Application import Application +from ..Script import Script +import re +from UM.Message import Message +import math +from UM.Logger import Logger + +class ZHopOnTravel(Script): + + def getSettingDataString(self): + return """{ + "name": "Z-Hop on Travel", + "key": "ZHopOnTravel", + "metadata": {}, + "version": 2, + "settings": { + "zhop_travel_enabled": { + "label": "Enable script", + "description": "Enables the script so it will run. 'One-at-a-Time' is not supported. This script is slow running because it must check the length of all travel moves in your layer range. ", + "type": "bool", + "default_value": true, + "enabled": true + }, + "list_or_range": + { + "label": "Layer List or Range", + "description": "Using a list allows you to call out one or more individual layers delimited by commas (Ex: 23,29,35). A layer range has a start layer and an end layer.", + "type": "enum", + "options": { + "range_of_layers": "Range of Layers", + "list_of_layers": "Layer List" }, + "default_value": "range_of_layers", + "enabled": "zhop_travel_enabled" + }, + "layers_of_interest": + { + "label": "List of Layers", + "description": "Use the Cura preview layer numbers. Enter 'individual layer' numbers delimited by commas. Spaces are not allowed.", + "type": "str", + "default_value": "10,28,31,54", + "enabled": "zhop_travel_enabled and list_or_range == 'list_of_layers'" + }, + "start_layer": { + "label": "Start Layer", + "description": "Layer number to start the changes at. Use the Cura preview layer numbers. The changes will start at the start of the layer.", + "unit": "Lay# ", + "type": "int", + "default_value": 1, + "minimum_value": "1", + "enabled": "zhop_travel_enabled and list_or_range == 'range_of_layers'" + }, + "end_layer": { + "label": "End Layer", + "description": "Enter '-1' to indicate the top layer, or enter a specific Layer number from the Cura preview. The changes will end at the end of this layer.", + "unit": "Lay# ", + "type": "int", + "default_value": -1, + "minimum_value": "-1", + "enabled": "zhop_travel_enabled and list_or_range == 'range_of_layers'" + }, + "hop_height": { + "label": "Z-Hop Height", + "description": "I refuse to provide a description for this.", + "unit": "mm ", + "type": "float", + "default_value": 0.5, + "minimum_value": "0", + "maximum_value_warning": 5, + "enabled": "zhop_travel_enabled" + }, + "min_travel_dist": { + "label": "Minimum Travel Distance", + "description": "Travel distances longer than this will cause a Z-Hop to occur.", + "unit": "mm ", + "type": "int", + "default_value": 10, + "minimum_value": "1", + "maximum_value": "200", + "enabled": "zhop_travel_enabled" + }, + "add_retract": { + "label": "Add retraction when necessary", + "description": "Depending on your travel settings there may not be a retraction prior to a travel move. When enabled, if there is no retraction prior to an added z-hop, this setting will add a retraction before the Z-hop, and a prime after returning to the working layer height. If retractions are disabled in Cura this setting is still available and will add retractions based on the Cura settings for Retraction Amount and Retract and Prime Speeds. All retraction settings are from the settings for 'Extruder 1' regardless of the number of extruders.", + "type": "bool", + "default_value": false, + "enabled": "zhop_travel_enabled" + }, + "infill_only": { + "label": "Add Z-hops to Infill Only", + "description": "Only add Z-hops to 'Infill' within the layer range.", + "type": "bool", + "default_value": false, + "enabled": "zhop_travel_enabled" + } + } + }""" + + def execute(self, data): + """ + The script will parse the gcode and check the cumulative length of travel moves. When they exceed the "min_travel_dist" then hop-ups are added before the travel and at the end of the travel. The user may select to add retractions/primes if there were none. + params: + layer_list: The list of 'layers-of-interest' for both 'Layer Range' and a 'Layer List'. + index_list: A list of the indexes within the data[] for the layers-of-interest. + self._cur_z: The variable used to track the working Z-height through the gcode + self._add_retract: User setting of whether to insure a retraction at inserted Z-hops + self._is_retracted: Whether a retraction has occurred prior to the added Z-hop + min_travel_dist: The user setting for the minimum distance of travel for Z-hops to be inserted + start_index: The index (in data[]) of the first layer-of-interest. The Z-hops start at the beginning of this layer. + end_index: The index (in data[]) of the last layer-of-interest. The Z-hops end at the end of this layer. + hop_up_lines: The string to insert for 'Hop up' + hop_down_lines: The string to insert for 'Hop down' + hop_start: The index within a layer where a 'Hop up' is inserted + hop_end: The index within a layer where a 'Hop down' is inserted + extra_prime_dist: Is calculated from the Cura extra_prime_volume and if > 0 is used to reset the E location prior to unretracting. + """ + + # Exit if the script is not enabled + if not self.getSettingValueByKey("zhop_travel_enabled"): + data[0] += "; [Z-Hop on Travel] Not enabled\n" + Logger.log("i", "[Z-Hop on Travel] Not enabled") + return data + + # Exit if the gcode has already been post-processed + if ";POSTPROCESSED" in data[0]: + return data + + # Define the global_stack to access the Cura settings + global_stack = Application.getInstance().getGlobalContainerStack() + + # Exit if the Print Sequence is One-at-a-Time + if global_stack.getProperty("print_sequence", "value") == "one_at_a_time": + Message(title = "[ZHop On Travel]", text = "Is not compatible with 'One at a Time' print sequence.").show() + data[0] += "; [ZHop On Travel] did not run because One at a Time is enabled" + return data + + # Define some variables + extruder = global_stack.extruderList + speed_zhop = extruder[0].getProperty("speed_z_hop", "value") * 60 + speed_travel = extruder[0].getProperty("speed_travel", "value") * 60 + retraction_enabled = extruder[0].getProperty("retraction_enable", "value") + retraction_amount = extruder[0].getProperty("retraction_amount", "value") + retract_speed = int(extruder[0].getProperty("retraction_retract_speed", "value")) * 60 + prime_speed = int(extruder[0].getProperty("retraction_prime_speed", "value")) * 60 + firmware_retract = global_stack.getProperty("machine_firmware_retract", "value") + relative_extrusion = global_stack.getProperty("relative_extrusion", "value") + self._cur_z = float(global_stack.getProperty("layer_height_0", "value")) + filament_dia = extruder[0].getProperty("material_diameter", "value") + extra_prime_vol = extruder[0].getProperty("retraction_extra_prime_amount", "value") + extra_prime_dist = extra_prime_vol / (math.pi * (filament_dia / 2)**2) + self._add_retract = self.getSettingValueByKey("add_retract") + min_travel_dist = self.getSettingValueByKey("min_travel_dist") + hop_height = round(self.getSettingValueByKey("hop_height"),2) + list_or_range = self.getSettingValueByKey("list_or_range") + infill_only = self.getSettingValueByKey("infill_only") + layer_list = [] + index_list = [] + + # Get either the 'range_of_layers' or the 'list_of_layers' and convert them to 'layer_list' and then 'index_list' + if list_or_range == "list_of_layers": + layer_string = self.getSettingValueByKey("layers_of_interest") + layer_list = layer_string.split(",") + layer_list.sort() + for layer in layer_list: + for num in range(2, len(data) - 1): + if ";LAYER:" + str(int(layer) - 1) + "\n" in data[num]: + index_list.append(num) + start_index = index_list[0] + end_index = index_list[len(index_list) - 1] + + elif list_or_range == "range_of_layers": + start_layer = self.getSettingValueByKey("start_layer") + end_layer = self.getSettingValueByKey("end_layer") + + # Get the indexes for the start and end layers + start_index = 2 + for num in range(1, len(data) - 1): + if ";LAYER:" + str(start_layer - 1) + "\n" in data[num]: + start_index = num + break + if end_layer == -1: + if retraction_enabled: + end_index = len(data) - 3 + else: + end_index = len(data) - 2 + elif end_layer != -1: + for num in range(1, len(data) - 1): + if ";LAYER:" + str(end_layer) + "\n" in data[num]: + end_layer = data[num].splitlines()[0].split(":")[1] + end_index = num + break + for num in range(start_index, end_index): + index_list.append(num) + + # Track the Z up to the starting layer + for num in range(1, start_index): + lines = data[num].splitlines() + for line in lines: + if " Z" in line and self.getValue(line, "Z"): + self._cur_z = self.getValue(line, "Z") + + # Use 'start_here' to avoid a zhop on the first move of the initial layer because a double-retraction may occur. + if start_index == 2: + start_here = False + else: + start_here = True + + # Initialize variables + self._is_retracted = False + hop_up_lines = "" + hop_down_lines = "" + hop_start = 0 + hop_end = 0 + self._cur_x = 0.0 + self._cur_y = 0.0 + self._prev_x = 0.0 + self._prev_y = 0.0 + self._cur_e = 0.0 + self._prev_e = 0.0 + cmd_list = ["G0 ", "G1 ", "G2 ", "G3 "] + self.reset_type = 0 + + # Keep track of the axes locations if the start layer > layer:0 + if start_index > 2: + self._track_all_axes(data, cmd_list, start_index, relative_extrusion) + + # Make the insertions + in_the_infill = False + for num in index_list: + lines = data[num].splitlines() + for index, line in enumerate(lines): + if num == 2: + if line.startswith(";TYPE"): + start_here = True + if line.startswith(";") and in_the_infill == True: + in_the_infill = False + if line.startswith(";TYPE:FILL"): + in_the_infill = True + if line.startswith("G92") and " E" in line: + self._cur_e = self.getValue(line, "E") + self._prev_e = self._cur_e + continue + # Get the XYZ values from movement commands + if line[0:3] in cmd_list: + if " X" in line and self.getValue(line, "X"): + self._prev_x = self._cur_x + self._cur_x = self.getValue(line, "X") + if " Y" in line and self.getValue(line, "Y"): + self._prev_y = self._cur_y + self._cur_y = self.getValue(line, "Y") + if " Z" in line and self.getValue(line, "Z"): + self._cur_z = self.getValue(line, "Z") + + # Check whether retractions have occured + if line[0:3] in ["G1 ", "G2 ", "G3 "] and "X" in line and "Y" in line and "E" in line: + self._is_retracted = False + self._cur_e = self.getValue(line, "E") + elif (line.startswith("G1") and "F" in line and "E" in line and not "X" in line or not "Y" in line) or "G10" in line: + if self.getValue(line, "E"): + self._cur_e = self.getValue(line, "E") + if not relative_extrusion: + if self._cur_e < self._prev_e or "G10" in line: + self._is_retracted = True + elif relative_extrusion: + if self._cur_e < 0 or "G10" in line: + self._is_retracted = True + if line.startswith(";TYPE"): + start_here = True + if not start_here: + continue + + # All travels are checked for their cumulative length + if line.startswith("G0 ") and hop_start == 0: + hop_indexes = self._total_travel_length(index, lines) + hop_start = int(hop_indexes[0]) + hop_end = int(hop_indexes[1]) + if infill_only and not in_the_infill: + hop_start = 0 + hop_end = 0 + if hop_start > 0: + # For any lines that are XYZ moves right before layer change + if " Z" in line: + lines[index] = lines[index].replace("Z" + str(self._cur_z), "Z" + str(self._cur_z + hop_height)) + # If there is no 'F' in the next line then add one at the Travel Speed so the z-hop speed doesn't carry over + if not " F" in lines[index] and lines[index].startswith("G0"): + lines[index] = lines[index].replace("G0", f"G0 F{speed_travel}") + if "X" in lines[index - 1] and "Y" in lines[index - 1] and "E" in lines[index - 1]: + self._is_retracted = False + hop_up_lines = self.get_hop_up_lines(retraction_amount, speed_zhop, retract_speed, prime_speed, extra_prime_dist, firmware_retract, relative_extrusion, hop_height) + lines[index] = hop_up_lines + lines[index] + + # Make the 'Zhop down' insertion at the correct index location (or as soon as practicable after it) + if hop_end > 0 and index >= hop_end: + # If there is no 'F' in the next line then add one to reinstate the Travel Speed (so the z-hop speed doesn't carry over through the travel moves) + if not " F" in lines[index] and lines[index].startswith("G0"): + lines[index] = lines[index].replace("G0", f"G0 F{speed_travel}") + hop_down_lines = self.get_hop_down_lines(retraction_amount, speed_zhop, retract_speed, prime_speed, extra_prime_dist, firmware_retract, relative_extrusion, hop_height, lines[index]) + lines[index] = hop_down_lines + lines[index] + self._is_retracted = False + hop_end = 0 + hop_start = 0 + hop_down = "" + if line.startswith(";"): + continue + self._prev_e = self._cur_e + data[num] = "\n".join(lines) + "\n" + + # Message to the user informing them of the number of Z-hops and retractions added + hop_cnt = 0 + retract_cnt = 0 + try: + for index_nr in index_list: + hop_cnt += data[index_nr].count("; Hop Up") + retract_cnt += data[index_nr].count("; Retract") + msg_txt = str(hop_cnt) + " Z-Hops were added to the file\n" + if self._add_retract: + msg_txt += str(retract_cnt) + " Retracts and unretracts were added to the file" + Message(title = "[Z-hop On Travel]", text = msg_txt).show() + except: + pass + return data + + def _total_travel_length(self, l_index: int, lines: str) -> float: + """ + This function gets the cummulative total travel distance of each individual travel move. + :parameters: + g_num: is the line index as passed from the calling function and when returned indicates the end of travel + travel_total: is the cummulative travel distance + """ + g_num = l_index + travel_total = 0.0 + # Total the lengths of each move and compare them to the Minimum Distance for a Z-hop to occur + while lines[g_num].startswith("G0 "): + travel_total += self._get_distance() + self._prev_x = self._cur_x + if self.getValue(lines[g_num], "X"): + self._cur_x = self.getValue(lines[g_num], "X") + self._prev_y = self._cur_y + if self.getValue(lines[g_num], "Y"): + self._cur_y = self.getValue(lines[g_num], "Y") + g_num += 1 + if g_num == len(lines): + break + if travel_total > self.getSettingValueByKey("min_travel_dist"): + return l_index, g_num + else: + return 0, 0 + + def _get_distance(self) -> float: + """ + This function gets the distance from the previous location to the current location. + """ + try: + dist = math.sqrt((self._prev_x - self._cur_x)**2 + (self._prev_y - self._cur_y)**2) + except ValueError: + return 0 + return dist + + def get_hop_up_lines(self, retraction_amount: float, speed_zhop: str, retract_speed: str, prime_speed: str, extra_prime_dist: float, firmware_retract: bool, relative_extrusion: bool, hop_height: str) -> str: + """ + Determine if the hop will require a retraction + :parameters: + reset_type: An indicator to handle differences when Firmware Retraction, and Relative Extrusion, and Extra Prime are enabled + up_lines: The inserted line(s) for the Z-hop Up + front_text and back_text: Are the line splits to account for existing gcode lines that have comments in them + """ + hop_retraction = not self._is_retracted + if not self._add_retract: + hop_retraction = False + reset_type = 0 # no other options + if hop_retraction: + reset_type += 1 + if firmware_retract and hop_retraction: + reset_type += 2 + if relative_extrusion and hop_retraction: + reset_type += 4 + if extra_prime_dist > 0 and hop_retraction: + reset_type += 8 + up_lines = f"G0 F{speed_zhop} Z{round(self._cur_z + hop_height,2)} ; Hop Up" + if reset_type in [1, 9] and hop_retraction: # add retract only when necessary + up_lines = f"G1 F{retract_speed} E{round(self._cur_e - retraction_amount, 5)} ; Retract\n" + up_lines + self._cur_e = round(self._cur_e - retraction_amount, 5) + if reset_type in [3, 7] and hop_retraction: # add retract and firmware retract + up_lines = "G10 ; Retract\n" + up_lines + if reset_type in [5, 13] and hop_retraction: # add retract and relative extrusion + up_lines = f"G1 F{retract_speed} E-{retraction_amount} ; Retract\n" + up_lines + self._cur_e = 0 + if reset_type in [11, 15] and hop_retraction: # add retract, firmware retraction, extra prime + up_lines = "G10 ; Retract\n" + up_lines + + # Format the added lines for readability + if "\n" in up_lines: # for lines that include a retraction + lines = up_lines.split("\n") + for index, line in enumerate(lines): + front_txt = lines[index].split(";")[0] + back_txt = lines[index].split(";")[1] + lines[index] = front_txt + str(" " * (40 - len(front_txt))) +";" + back_txt + up_lines = "\n".join(lines) + "\n" + else: # for lines without a retraction + front_txt = up_lines.split(";")[0] + back_txt = up_lines.split(";")[1] + up_lines = front_txt + str(" " * (40 - len(front_txt))) +";" + back_txt + "\n" + return up_lines + + # The Zhop down may require different kinds of primes depending on the Cura settings. + def get_hop_down_lines(self, retraction_amount: float, speed_zhop: str, retract_speed: str, prime_speed: str, extra_prime_dist: str, firmware_retract: bool, relative_extrusion: bool, hop_height: str, next_line: str) -> str: + + """ + Determine if the hop will require a prime + :parameters: + reset_type: An indicator to handle differences when Firmware Retraction, and Relative Extrusion, and Extra Prime are enabled + dn_lines: The inserted line(s) for the Z-hop Down + front_text and back_text: Are the line splits to account for existing gcode lines that have comments in them + """ + hop_retraction = not self._is_retracted + if not self._add_retract: + hop_retraction = False + # Base the prime on the combination of Cura settings + reset_type = 0 + if hop_retraction: + reset_type += 1 + if firmware_retract and hop_retraction: + reset_type += 2 + if relative_extrusion and hop_retraction: + reset_type += 4 + if extra_prime_dist > 0.0 and hop_retraction: + reset_type += 8 + dn_lines = f"G0 F{speed_zhop} Z{self._cur_z} ; Hop Down" + # Format the line and return if the retraction option is unchecked + if "G11" in next_line or re.search("G1 F(\d+\.\d+|\d+) E(-?\d+\.\d+|-?\d+)", next_line) and reset_type == 0: + front_txt = dn_lines.split(";")[0] + back_txt = dn_lines.split(";")[1] + dn_lines = front_txt + str(" " * (40 - len(front_txt))) +";" + back_txt + "\n" + self._is_retracted = False + return dn_lines + # If the retraction option is checked then determine the required unretract code for the particular combination of Cura settings. + # Add retract 1 + if reset_type == 1 and hop_retraction: + dn_lines += f"\nG1 F{prime_speed} E{round(self._prev_e + retraction_amount, 5)} ; Unretract" + # Add retract 1 + firmware retract 2 + if reset_type == 3 and hop_retraction: + dn_lines += "\nG11 ; UnRetract" + # Add retract 1 + relative extrusion 4 + if reset_type == 5 and hop_retraction: + dn_lines += f"\nG1 F{prime_speed} E{retraction_amount} ; UnRetract" + # Add retract 1 + firmware retraction 2 + relative extrusion 4 + if reset_type == 7 and hop_retraction: + dn_lines += f"\nG11 ; Unretract" + # Add retract 1 + extra prime 8 + if reset_type == 9 and hop_retraction: + dn_lines += f"\nG92 E{round(self._prev_e - extra_prime_dist,5)} ; Extra prime adjustment" + dn_lines += f"\nG1 F{prime_speed} E{round(self._prev_e + retraction_amount, 5)} ; UnRetract" + self._cur_e = round(self._prev_e + retraction_amount, 5) + # Add retract 1 + firmware retraction 2 + extra prime 8 + if reset_type == 11 and hop_retraction: + dn_lines += "\nG11 ; UnRetract" + dn_lines += "\nM83 ; Relative extrusion" + dn_lines += f"\nG1 F{prime_speed} E{round(extra_prime_dist, 5)} ; Extra prime" + if not relative_extrusion: + dn_lines += "\nM82 ; Absolute extrusion" + # Add retract 1 + relative extrusion 4 + extra prime 8 + if reset_type == 13 and hop_retraction: + dn_lines += f"\nG1 F{prime_speed} E{round(retraction_amount + extra_prime_dist, 5)} ; Unretract with extra prime" + # Add retract 1 + firmware retraction 2 + relative extrusion 4 + extra prime 8 + if reset_type == 15 and hop_retraction: + dn_lines += "\nG11 ; UnRetract" + dn_lines += f"\nG1 F{prime_speed} E{round(extra_prime_dist, 5)} ; Extra prime" + + # Format the added lines for readability + if "\n" in dn_lines: # for lines with primes + lines = dn_lines.split("\n") + for index, line in enumerate(lines): + front_txt = lines[index].split(";")[0] + back_txt = lines[index].split(";")[1] + lines[index] = front_txt + str(" " * (40 - len(front_txt))) +";" + back_txt + dn_lines = "\n".join(lines) + "\n" + else: # for lines with no prime + front_txt = dn_lines.split(";")[0] + back_txt = dn_lines.split(";")[1] + dn_lines = front_txt + str(" " * (40 - len(front_txt))) +";" + back_txt + "\n" + self._is_retracted = False + return dn_lines + + def _track_all_axes(self, data: str, cmd_list: int, start_index: int, relative_extrusion: bool) -> str: + """ + This function tracks the XYZE locations prior to the beginning of the first 'layer-of-interest' + + """ + for num in range(2, start_index - 1): + lines = data[num].split("\n") + for line in lines: + # Get the XYZ values from movement commands + if line[0:3] in cmd_list: + if " X" in line and self.getValue(line, "X"): + self._prev_x = self._cur_x + self._cur_x = self.getValue(line, "X") + if " Y" in line and self.getValue(line, "Y"): + self._prev_y = self._cur_y + self._cur_y = self.getValue(line, "Y") + if " Z" in line and self.getValue(line, "Z"): + self._cur_z = self.getValue(line, "Z") + + # Check whether retractions have occured and track the E location + if not relative_extrusion: + if line.startswith("G1 ") and " X" in line and " Y" in line and " E" in line: + self._is_retracted = False + self._cur_e = self.getValue(line, "E") + elif line.startswith("G1 ") and " F" in line and " E" in line and not " X" in line and not " Y" in line: + if self.getValue(line, "E"): + self._cur_e = self.getValue(line, "E") + elif line.startswith("G10"): + self._is_retracted = True + elif line.startswith("G11"): + self._is_retracted = False + elif relative_extrusion: + if self._cur_e < 0 or "G10" in line: + self._is_retracted = True + self._cur_e = 0 + if line.startswith("G11"): + self._is_retracted = False + self._cur_e = 0 + self._prev_e = self._cur_e + return From 65ecca94f26563482df40dbb0c0992bd20ca5e09 Mon Sep 17 00:00:00 2001 From: GregValiant <64202104+GregValiant@users.noreply.github.com> Date: Thu, 24 Apr 2025 08:48:20 -0400 Subject: [PATCH 02/26] Update ZHopOnTravel.py Update per RBurema requested changes. --- .../scripts/ZHopOnTravel.py | 33 ++++++++----------- 1 file changed, 14 insertions(+), 19 deletions(-) diff --git a/plugins/PostProcessingPlugin/scripts/ZHopOnTravel.py b/plugins/PostProcessingPlugin/scripts/ZHopOnTravel.py index 82a60239be..588e642d4d 100644 --- a/plugins/PostProcessingPlugin/scripts/ZHopOnTravel.py +++ b/plugins/PostProcessingPlugin/scripts/ZHopOnTravel.py @@ -28,7 +28,9 @@ import math from UM.Logger import Logger class ZHopOnTravel(Script): - + def __init__(self): + super().__init__() + def getSettingDataString(self): return """{ "name": "Z-Hop on Travel", @@ -170,7 +172,6 @@ class ZHopOnTravel(Script): extra_prime_vol = extruder[0].getProperty("retraction_extra_prime_amount", "value") extra_prime_dist = extra_prime_vol / (math.pi * (filament_dia / 2)**2) self._add_retract = self.getSettingValueByKey("add_retract") - min_travel_dist = self.getSettingValueByKey("min_travel_dist") hop_height = round(self.getSettingValueByKey("hop_height"),2) list_or_range = self.getSettingValueByKey("list_or_range") infill_only = self.getSettingValueByKey("infill_only") @@ -187,7 +188,6 @@ class ZHopOnTravel(Script): if ";LAYER:" + str(int(layer) - 1) + "\n" in data[num]: index_list.append(num) start_index = index_list[0] - end_index = index_list[len(index_list) - 1] elif list_or_range == "range_of_layers": start_layer = self.getSettingValueByKey("start_layer") @@ -307,7 +307,7 @@ class ZHopOnTravel(Script): lines[index] = lines[index].replace("G0", f"G0 F{speed_travel}") if "X" in lines[index - 1] and "Y" in lines[index - 1] and "E" in lines[index - 1]: self._is_retracted = False - hop_up_lines = self.get_hop_up_lines(retraction_amount, speed_zhop, retract_speed, prime_speed, extra_prime_dist, firmware_retract, relative_extrusion, hop_height) + hop_up_lines = self.get_hop_up_lines(retraction_amount, speed_zhop, retract_speed, extra_prime_dist, firmware_retract, relative_extrusion, hop_height) lines[index] = hop_up_lines + lines[index] # Make the 'Zhop down' insertion at the correct index location (or as soon as practicable after it) @@ -320,7 +320,7 @@ class ZHopOnTravel(Script): self._is_retracted = False hop_end = 0 hop_start = 0 - hop_down = "" + hop_down_lines = "" if line.startswith(";"): continue self._prev_e = self._cur_e @@ -341,7 +341,7 @@ class ZHopOnTravel(Script): pass return data - def _total_travel_length(self, l_index: int, lines: str) -> float: + def _total_travel_length(self, l_index: int, lines: str) -> int: """ This function gets the cummulative total travel distance of each individual travel move. :parameters: @@ -363,9 +363,9 @@ class ZHopOnTravel(Script): if g_num == len(lines): break if travel_total > self.getSettingValueByKey("min_travel_dist"): - return l_index, g_num + return [l_index, g_num] else: - return 0, 0 + return [0, 0] def _get_distance(self) -> float: """ @@ -377,7 +377,7 @@ class ZHopOnTravel(Script): return 0 return dist - def get_hop_up_lines(self, retraction_amount: float, speed_zhop: str, retract_speed: str, prime_speed: str, extra_prime_dist: float, firmware_retract: bool, relative_extrusion: bool, hop_height: str) -> str: + def get_hop_up_lines(self, retraction_amount: float, speed_zhop: str, retract_speed: str, extra_prime_dist: float, firmware_retract: bool, relative_extrusion: bool, hop_height: str) -> str: """ Determine if the hop will require a retraction :parameters: @@ -401,13 +401,11 @@ class ZHopOnTravel(Script): if reset_type in [1, 9] and hop_retraction: # add retract only when necessary up_lines = f"G1 F{retract_speed} E{round(self._cur_e - retraction_amount, 5)} ; Retract\n" + up_lines self._cur_e = round(self._cur_e - retraction_amount, 5) - if reset_type in [3, 7] and hop_retraction: # add retract and firmware retract + if reset_type in [3, 7, 11, 15] and hop_retraction: # add retract and firmware retract up_lines = "G10 ; Retract\n" + up_lines if reset_type in [5, 13] and hop_retraction: # add retract and relative extrusion up_lines = f"G1 F{retract_speed} E-{retraction_amount} ; Retract\n" + up_lines self._cur_e = 0 - if reset_type in [11, 15] and hop_retraction: # add retract, firmware retraction, extra prime - up_lines = "G10 ; Retract\n" + up_lines # Format the added lines for readability if "\n" in up_lines: # for lines that include a retraction @@ -458,15 +456,12 @@ class ZHopOnTravel(Script): # Add retract 1 if reset_type == 1 and hop_retraction: dn_lines += f"\nG1 F{prime_speed} E{round(self._prev_e + retraction_amount, 5)} ; Unretract" - # Add retract 1 + firmware retract 2 - if reset_type == 3 and hop_retraction: + # Add retract 1 + firmware retract 2 and Add retract 1 + firmware retraction 2 + relative extrusion 4 + if reset_type in [3, 7] and hop_retraction: dn_lines += "\nG11 ; UnRetract" # Add retract 1 + relative extrusion 4 if reset_type == 5 and hop_retraction: dn_lines += f"\nG1 F{prime_speed} E{retraction_amount} ; UnRetract" - # Add retract 1 + firmware retraction 2 + relative extrusion 4 - if reset_type == 7 and hop_retraction: - dn_lines += f"\nG11 ; Unretract" # Add retract 1 + extra prime 8 if reset_type == 9 and hop_retraction: dn_lines += f"\nG92 E{round(self._prev_e - extra_prime_dist,5)} ; Extra prime adjustment" @@ -502,7 +497,7 @@ class ZHopOnTravel(Script): self._is_retracted = False return dn_lines - def _track_all_axes(self, data: str, cmd_list: int, start_index: int, relative_extrusion: bool) -> str: + def _track_all_axes(self, data: str, cmd_list: str, start_index: int, relative_extrusion: bool) -> str: """ This function tracks the XYZE locations prior to the beginning of the first 'layer-of-interest' @@ -541,4 +536,4 @@ class ZHopOnTravel(Script): self._is_retracted = False self._cur_e = 0 self._prev_e = self._cur_e - return + return None From 1eaed0fb3c3e6ac799e863b7571d47a28f5b72a3 Mon Sep 17 00:00:00 2001 From: RedBlackAka <140876408+RedBlackAka@users.noreply.github.com> Date: Sun, 4 May 2025 01:29:54 +0200 Subject: [PATCH 03/26] Remove NSIS uninstall shortcut removal Remove NSIS uninstall shortcut removal that I accidentally left behind. This is no longer needed. --- packaging/NSIS/Ultimaker-Cura.nsi.jinja | 2 -- 1 file changed, 2 deletions(-) diff --git a/packaging/NSIS/Ultimaker-Cura.nsi.jinja b/packaging/NSIS/Ultimaker-Cura.nsi.jinja index 9f61e6950c..f3bb2572be 100644 --- a/packaging/NSIS/Ultimaker-Cura.nsi.jinja +++ b/packaging/NSIS/Ultimaker-Cura.nsi.jinja @@ -158,12 +158,10 @@ RmDir /r /REBOOTOK "$INSTDIR" !ifdef REG_START_MENU Delete "$SMPROGRAMS\${APP_NAME}.lnk" -Delete "$SMPROGRAMS\Uninstall ${APP_NAME}.lnk" !endif !ifndef REG_START_MENU Delete "$SMPROGRAMS\${APP_NAME}.lnk" -Delete "$SMPROGRAMS\Uninstall ${APP_NAME}.lnk" !endif !insertmacro APP_UNASSOCIATE "stl" "Cura.model" From 264a63103f81d3b43de3f32b37113a67d61477e4 Mon Sep 17 00:00:00 2001 From: GregValiant <64202104+GregValiant@users.noreply.github.com> Date: Mon, 12 May 2025 23:33:50 -0400 Subject: [PATCH 04/26] Update script Changed the inserted "G0 F Z" lines to "G1 F Z" so they match the existing Cura syntax. --- plugins/PostProcessingPlugin/scripts/ZHopOnTravel.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/PostProcessingPlugin/scripts/ZHopOnTravel.py b/plugins/PostProcessingPlugin/scripts/ZHopOnTravel.py index 588e642d4d..f6191f6cc9 100644 --- a/plugins/PostProcessingPlugin/scripts/ZHopOnTravel.py +++ b/plugins/PostProcessingPlugin/scripts/ZHopOnTravel.py @@ -397,7 +397,7 @@ class ZHopOnTravel(Script): reset_type += 4 if extra_prime_dist > 0 and hop_retraction: reset_type += 8 - up_lines = f"G0 F{speed_zhop} Z{round(self._cur_z + hop_height,2)} ; Hop Up" + up_lines = f"G1 F{speed_zhop} Z{round(self._cur_z + hop_height,2)} ; Hop Up" if reset_type in [1, 9] and hop_retraction: # add retract only when necessary up_lines = f"G1 F{retract_speed} E{round(self._cur_e - retraction_amount, 5)} ; Retract\n" + up_lines self._cur_e = round(self._cur_e - retraction_amount, 5) @@ -444,7 +444,7 @@ class ZHopOnTravel(Script): reset_type += 4 if extra_prime_dist > 0.0 and hop_retraction: reset_type += 8 - dn_lines = f"G0 F{speed_zhop} Z{self._cur_z} ; Hop Down" + dn_lines = f"G1 F{speed_zhop} Z{self._cur_z} ; Hop Down" # Format the line and return if the retraction option is unchecked if "G11" in next_line or re.search("G1 F(\d+\.\d+|\d+) E(-?\d+\.\d+|-?\d+)", next_line) and reset_type == 0: front_txt = dn_lines.split(";")[0] From bdb771682dae54626cc217463e609c002a9a96ca Mon Sep 17 00:00:00 2001 From: GregValiant <64202104+GregValiant@users.noreply.github.com> Date: Wed, 21 May 2025 08:41:58 -0400 Subject: [PATCH 05/26] Update ZHopOnTravel.py Bug fix in line 505 that resulted in the first hop being the wrong Z. --- plugins/PostProcessingPlugin/scripts/ZHopOnTravel.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/PostProcessingPlugin/scripts/ZHopOnTravel.py b/plugins/PostProcessingPlugin/scripts/ZHopOnTravel.py index f6191f6cc9..5d58c2d35e 100644 --- a/plugins/PostProcessingPlugin/scripts/ZHopOnTravel.py +++ b/plugins/PostProcessingPlugin/scripts/ZHopOnTravel.py @@ -502,7 +502,7 @@ class ZHopOnTravel(Script): This function tracks the XYZE locations prior to the beginning of the first 'layer-of-interest' """ - for num in range(2, start_index - 1): + for num in range(2, start_index): lines = data[num].split("\n") for line in lines: # Get the XYZ values from movement commands From 3f16cc917af43905db5114f3437e6c1a7a7806e2 Mon Sep 17 00:00:00 2001 From: GregValiant <64202104+GregValiant@users.noreply.github.com> Date: Thu, 5 Jun 2025 07:19:07 -0400 Subject: [PATCH 06/26] Update ZHopOnTravel.py Bug fix for End_Layer when the entered layer > total layer count. Update ZHopOnTravel.py I'm not sure why git desktop did this. Update ZHopOnTravel.py I'm not sure why git desktop did this. Bug fix Bug fix for End_Layer when the entered layer > total layer count. Bug fix for 'index_list' when using a layer list. It now tracks the Z through the file rather than just the layers of interest. --- .../scripts/ZHopOnTravel.py | 98 ++++++++++++++++++- 1 file changed, 97 insertions(+), 1 deletion(-) diff --git a/plugins/PostProcessingPlugin/scripts/ZHopOnTravel.py b/plugins/PostProcessingPlugin/scripts/ZHopOnTravel.py index 5d58c2d35e..dd3d0296d7 100644 --- a/plugins/PostProcessingPlugin/scripts/ZHopOnTravel.py +++ b/plugins/PostProcessingPlugin/scripts/ZHopOnTravel.py @@ -192,7 +192,7 @@ class ZHopOnTravel(Script): elif list_or_range == "range_of_layers": start_layer = self.getSettingValueByKey("start_layer") end_layer = self.getSettingValueByKey("end_layer") - + end_index = None # Get the indexes for the start and end layers start_index = 2 for num in range(1, len(data) - 1): @@ -210,6 +210,8 @@ class ZHopOnTravel(Script): end_layer = data[num].splitlines()[0].split(":")[1] end_index = num break + if end_index == None: + end_index = len(data)-1 for num in range(start_index, end_index): index_list.append(num) @@ -247,6 +249,96 @@ class ZHopOnTravel(Script): # Make the insertions in_the_infill = False +<<<<<<< Updated upstream +<<<<<<< Updated upstream + for num in range(start_index, len(data)-1): + if num not in index_list: + lines = data[num].splitlines() + for line in lines: + if " Z" in line and self.getValue(line, "Z"): + self._cur_z = self.getValue(line, "Z") + continue + elif num in index_list: + lines = data[num].splitlines() + for index, line in enumerate(lines): + if num == 2: + if line.startswith(";TYPE"): + start_here = True + if line.startswith(";") and in_the_infill == True: + in_the_infill = False + if line.startswith(";TYPE:FILL"): + in_the_infill = True + if line.startswith("G92") and " E" in line: + self._cur_e = self.getValue(line, "E") + self._prev_e = self._cur_e + continue + # Get the XYZ values from movement commands + if line[0:3] in cmd_list: + if " X" in line and self.getValue(line, "X"): + self._prev_x = self._cur_x + self._cur_x = self.getValue(line, "X") + if " Y" in line and self.getValue(line, "Y"): + self._prev_y = self._cur_y + self._cur_y = self.getValue(line, "Y") + if " Z" in line and self.getValue(line, "Z"): + self._cur_z = self.getValue(line, "Z") + + # Check whether retractions have occured + if line[0:3] in ["G1 ", "G2 ", "G3 "] and "X" in line and "Y" in line and "E" in line: + self._is_retracted = False + self._cur_e = self.getValue(line, "E") + elif (line.startswith("G1") and "F" in line and "E" in line and not "X" in line or not "Y" in line) or "G10" in line: + if self.getValue(line, "E"): + self._cur_e = self.getValue(line, "E") + if not relative_extrusion: + if self._cur_e < self._prev_e or "G10" in line: + self._is_retracted = True + elif relative_extrusion: + if self._cur_e < 0 or "G10" in line: + self._is_retracted = True + if line.startswith(";TYPE"): + start_here = True + if not start_here: + continue + + # All travels are checked for their cumulative length + if line.startswith("G0 ") and hop_start == 0: + hop_indexes = self._total_travel_length(index, lines) + hop_start = int(hop_indexes[0]) + hop_end = int(hop_indexes[1]) + if infill_only and not in_the_infill: + hop_start = 0 + hop_end = 0 + if hop_start > 0: + # For any lines that are XYZ moves right before layer change + if " Z" in line: + lines[index] = lines[index].replace("Z" + str(self._cur_z), "Z" + str(self._cur_z + hop_height)) + # If there is no 'F' in the next line then add one at the Travel Speed so the z-hop speed doesn't carry over + if not " F" in lines[index] and lines[index].startswith("G0"): + lines[index] = lines[index].replace("G0", f"G0 F{speed_travel}") + if "X" in lines[index - 1] and "Y" in lines[index - 1] and "E" in lines[index - 1]: + self._is_retracted = False + hop_up_lines = self.get_hop_up_lines(retraction_amount, speed_zhop, retract_speed, extra_prime_dist, firmware_retract, relative_extrusion, hop_height) + lines[index] = hop_up_lines + lines[index] + + # Make the 'Zhop down' insertion at the correct index location (or as soon as practicable after it) + if hop_end > 0 and index >= hop_end: + # If there is no 'F' in the next line then add one to reinstate the Travel Speed (so the z-hop speed doesn't carry over through the travel moves) + if not " F" in lines[index] and lines[index].startswith("G0"): + lines[index] = lines[index].replace("G0", f"G0 F{speed_travel}") + hop_down_lines = self.get_hop_down_lines(retraction_amount, speed_zhop, retract_speed, prime_speed, extra_prime_dist, firmware_retract, relative_extrusion, hop_height, lines[index]) + lines[index] = hop_down_lines + lines[index] + self._is_retracted = False + hop_end = 0 + hop_start = 0 + hop_down_lines = "" + if line.startswith(";"): + continue + self._prev_e = self._cur_e + data[num] = "\n".join(lines) + "\n" +======= +======= +>>>>>>> Stashed changes for num in index_list: lines = data[num].splitlines() for index, line in enumerate(lines): @@ -325,6 +417,10 @@ class ZHopOnTravel(Script): continue self._prev_e = self._cur_e data[num] = "\n".join(lines) + "\n" +<<<<<<< Updated upstream +>>>>>>> Stashed changes +======= +>>>>>>> Stashed changes # Message to the user informing them of the number of Z-hops and retractions added hop_cnt = 0 From 81dc20ce1842e6ef20f5d483bbac36b75a17c842 Mon Sep 17 00:00:00 2001 From: GregValiant <64202104+GregValiant@users.noreply.github.com> Date: Sat, 7 Jun 2025 07:59:44 -0400 Subject: [PATCH 07/26] Update ZHopOnTravel.py Removed the Stashed Changes beginning and ends. Update ZHopOnTravel.py Add comments. --- .../scripts/ZHopOnTravel.py | 92 +------------------ 1 file changed, 5 insertions(+), 87 deletions(-) diff --git a/plugins/PostProcessingPlugin/scripts/ZHopOnTravel.py b/plugins/PostProcessingPlugin/scripts/ZHopOnTravel.py index dd3d0296d7..7ac57a308e 100644 --- a/plugins/PostProcessingPlugin/scripts/ZHopOnTravel.py +++ b/plugins/PostProcessingPlugin/scripts/ZHopOnTravel.py @@ -249,15 +249,18 @@ class ZHopOnTravel(Script): # Make the insertions in_the_infill = False -<<<<<<< Updated upstream -<<<<<<< Updated upstream for num in range(start_index, len(data)-1): + # Leave if the num > highest index number to speed up the script. + if num > index_list[len(index_list)-1]: + break + # If the num is not an "index of interest" then just track the Z through the layer if num not in index_list: lines = data[num].splitlines() for line in lines: if " Z" in line and self.getValue(line, "Z"): self._cur_z = self.getValue(line, "Z") continue + # If the num is in the index_list then make changes elif num in index_list: lines = data[num].splitlines() for index, line in enumerate(lines): @@ -336,91 +339,6 @@ class ZHopOnTravel(Script): continue self._prev_e = self._cur_e data[num] = "\n".join(lines) + "\n" -======= -======= ->>>>>>> Stashed changes - for num in index_list: - lines = data[num].splitlines() - for index, line in enumerate(lines): - if num == 2: - if line.startswith(";TYPE"): - start_here = True - if line.startswith(";") and in_the_infill == True: - in_the_infill = False - if line.startswith(";TYPE:FILL"): - in_the_infill = True - if line.startswith("G92") and " E" in line: - self._cur_e = self.getValue(line, "E") - self._prev_e = self._cur_e - continue - # Get the XYZ values from movement commands - if line[0:3] in cmd_list: - if " X" in line and self.getValue(line, "X"): - self._prev_x = self._cur_x - self._cur_x = self.getValue(line, "X") - if " Y" in line and self.getValue(line, "Y"): - self._prev_y = self._cur_y - self._cur_y = self.getValue(line, "Y") - if " Z" in line and self.getValue(line, "Z"): - self._cur_z = self.getValue(line, "Z") - - # Check whether retractions have occured - if line[0:3] in ["G1 ", "G2 ", "G3 "] and "X" in line and "Y" in line and "E" in line: - self._is_retracted = False - self._cur_e = self.getValue(line, "E") - elif (line.startswith("G1") and "F" in line and "E" in line and not "X" in line or not "Y" in line) or "G10" in line: - if self.getValue(line, "E"): - self._cur_e = self.getValue(line, "E") - if not relative_extrusion: - if self._cur_e < self._prev_e or "G10" in line: - self._is_retracted = True - elif relative_extrusion: - if self._cur_e < 0 or "G10" in line: - self._is_retracted = True - if line.startswith(";TYPE"): - start_here = True - if not start_here: - continue - - # All travels are checked for their cumulative length - if line.startswith("G0 ") and hop_start == 0: - hop_indexes = self._total_travel_length(index, lines) - hop_start = int(hop_indexes[0]) - hop_end = int(hop_indexes[1]) - if infill_only and not in_the_infill: - hop_start = 0 - hop_end = 0 - if hop_start > 0: - # For any lines that are XYZ moves right before layer change - if " Z" in line: - lines[index] = lines[index].replace("Z" + str(self._cur_z), "Z" + str(self._cur_z + hop_height)) - # If there is no 'F' in the next line then add one at the Travel Speed so the z-hop speed doesn't carry over - if not " F" in lines[index] and lines[index].startswith("G0"): - lines[index] = lines[index].replace("G0", f"G0 F{speed_travel}") - if "X" in lines[index - 1] and "Y" in lines[index - 1] and "E" in lines[index - 1]: - self._is_retracted = False - hop_up_lines = self.get_hop_up_lines(retraction_amount, speed_zhop, retract_speed, extra_prime_dist, firmware_retract, relative_extrusion, hop_height) - lines[index] = hop_up_lines + lines[index] - - # Make the 'Zhop down' insertion at the correct index location (or as soon as practicable after it) - if hop_end > 0 and index >= hop_end: - # If there is no 'F' in the next line then add one to reinstate the Travel Speed (so the z-hop speed doesn't carry over through the travel moves) - if not " F" in lines[index] and lines[index].startswith("G0"): - lines[index] = lines[index].replace("G0", f"G0 F{speed_travel}") - hop_down_lines = self.get_hop_down_lines(retraction_amount, speed_zhop, retract_speed, prime_speed, extra_prime_dist, firmware_retract, relative_extrusion, hop_height, lines[index]) - lines[index] = hop_down_lines + lines[index] - self._is_retracted = False - hop_end = 0 - hop_start = 0 - hop_down_lines = "" - if line.startswith(";"): - continue - self._prev_e = self._cur_e - data[num] = "\n".join(lines) + "\n" -<<<<<<< Updated upstream ->>>>>>> Stashed changes -======= ->>>>>>> Stashed changes # Message to the user informing them of the number of Z-hops and retractions added hop_cnt = 0 From 187237519d758600461a94ad7709300d90c08af9 Mon Sep 17 00:00:00 2001 From: Frederic Meeuwissen <13856291+Frederic98@users.noreply.github.com> Date: Thu, 26 Jun 2025 16:21:03 +0200 Subject: [PATCH 08/26] [PP-574] Add BVOH profiles --- .../um_f4_bb0.4_bvoh_0.15mm.inst.cfg | 43 ++++++++++++++++++ .../um_f4_bb0.4_bvoh_0.1mm.inst.cfg | 43 ++++++++++++++++++ .../um_f4_bb0.4_bvoh_0.2mm.inst.cfg | 43 ++++++++++++++++++ .../um_f4_bb0.4_bvoh_0.3mm.inst.cfg | 44 +++++++++++++++++++ .../um_f4_bb0.8_bvoh_0.2mm.inst.cfg | 43 ++++++++++++++++++ .../um_f4_bb0.8_bvoh_0.3mm.inst.cfg | 43 ++++++++++++++++++ .../um_f4_bb0.8_bvoh_0.4mm.inst.cfg | 43 ++++++++++++++++++ .../um_s3_bb0.4_bvoh_0.15mm.inst.cfg | 35 +++++++++++++++ .../um_s3_bb0.4_bvoh_0.1mm.inst.cfg | 36 +++++++++++++++ .../um_s3_bb0.4_bvoh_0.2mm.inst.cfg | 35 +++++++++++++++ .../um_s3_bb0.4_bvoh_0.3mm.inst.cfg | 37 ++++++++++++++++ .../um_s3_bb0.8_bvoh_0.2mm.inst.cfg | 34 ++++++++++++++ .../um_s3_bb0.8_bvoh_0.3mm.inst.cfg | 36 +++++++++++++++ .../um_s3_bb0.8_bvoh_0.4mm.inst.cfg | 35 +++++++++++++++ .../um_s5_bb0.4_bvoh_0.15mm.inst.cfg | 35 +++++++++++++++ .../um_s5_bb0.4_bvoh_0.1mm.inst.cfg | 36 +++++++++++++++ .../um_s5_bb0.4_bvoh_0.2mm.inst.cfg | 35 +++++++++++++++ .../um_s5_bb0.4_bvoh_0.3mm.inst.cfg | 37 ++++++++++++++++ .../um_s5_bb0.8_bvoh_0.2mm.inst.cfg | 34 ++++++++++++++ .../um_s5_bb0.8_bvoh_0.3mm.inst.cfg | 36 +++++++++++++++ .../um_s5_bb0.8_bvoh_0.4mm.inst.cfg | 35 +++++++++++++++ .../um_s8_bb0.4_bvoh_0.15mm.inst.cfg | 35 +++++++++++++++ .../um_s8_bb0.4_bvoh_0.1mm.inst.cfg | 36 +++++++++++++++ .../um_s8_bb0.4_bvoh_0.2mm.inst.cfg | 35 +++++++++++++++ .../um_s8_bb0.4_bvoh_0.3mm.inst.cfg | 37 ++++++++++++++++ .../um_s8_bb0.8_bvoh_0.2mm.inst.cfg | 34 ++++++++++++++ .../um_s8_bb0.8_bvoh_0.3mm.inst.cfg | 36 +++++++++++++++ .../um_s8_bb0.8_bvoh_0.4mm.inst.cfg | 35 +++++++++++++++ 28 files changed, 1046 insertions(+) create mode 100644 resources/quality/ultimaker_factor4/um_f4_bb0.4_bvoh_0.15mm.inst.cfg create mode 100644 resources/quality/ultimaker_factor4/um_f4_bb0.4_bvoh_0.1mm.inst.cfg create mode 100644 resources/quality/ultimaker_factor4/um_f4_bb0.4_bvoh_0.2mm.inst.cfg create mode 100644 resources/quality/ultimaker_factor4/um_f4_bb0.4_bvoh_0.3mm.inst.cfg create mode 100644 resources/quality/ultimaker_factor4/um_f4_bb0.8_bvoh_0.2mm.inst.cfg create mode 100644 resources/quality/ultimaker_factor4/um_f4_bb0.8_bvoh_0.3mm.inst.cfg create mode 100644 resources/quality/ultimaker_factor4/um_f4_bb0.8_bvoh_0.4mm.inst.cfg create mode 100644 resources/quality/ultimaker_s3/um_s3_bb0.4_bvoh_0.15mm.inst.cfg create mode 100644 resources/quality/ultimaker_s3/um_s3_bb0.4_bvoh_0.1mm.inst.cfg create mode 100644 resources/quality/ultimaker_s3/um_s3_bb0.4_bvoh_0.2mm.inst.cfg create mode 100644 resources/quality/ultimaker_s3/um_s3_bb0.4_bvoh_0.3mm.inst.cfg create mode 100644 resources/quality/ultimaker_s3/um_s3_bb0.8_bvoh_0.2mm.inst.cfg create mode 100644 resources/quality/ultimaker_s3/um_s3_bb0.8_bvoh_0.3mm.inst.cfg create mode 100644 resources/quality/ultimaker_s3/um_s3_bb0.8_bvoh_0.4mm.inst.cfg create mode 100644 resources/quality/ultimaker_s5/um_s5_bb0.4_bvoh_0.15mm.inst.cfg create mode 100644 resources/quality/ultimaker_s5/um_s5_bb0.4_bvoh_0.1mm.inst.cfg create mode 100644 resources/quality/ultimaker_s5/um_s5_bb0.4_bvoh_0.2mm.inst.cfg create mode 100644 resources/quality/ultimaker_s5/um_s5_bb0.4_bvoh_0.3mm.inst.cfg create mode 100644 resources/quality/ultimaker_s5/um_s5_bb0.8_bvoh_0.2mm.inst.cfg create mode 100644 resources/quality/ultimaker_s5/um_s5_bb0.8_bvoh_0.3mm.inst.cfg create mode 100644 resources/quality/ultimaker_s5/um_s5_bb0.8_bvoh_0.4mm.inst.cfg create mode 100644 resources/quality/ultimaker_s8/um_s8_bb0.4_bvoh_0.15mm.inst.cfg create mode 100644 resources/quality/ultimaker_s8/um_s8_bb0.4_bvoh_0.1mm.inst.cfg create mode 100644 resources/quality/ultimaker_s8/um_s8_bb0.4_bvoh_0.2mm.inst.cfg create mode 100644 resources/quality/ultimaker_s8/um_s8_bb0.4_bvoh_0.3mm.inst.cfg create mode 100644 resources/quality/ultimaker_s8/um_s8_bb0.8_bvoh_0.2mm.inst.cfg create mode 100644 resources/quality/ultimaker_s8/um_s8_bb0.8_bvoh_0.3mm.inst.cfg create mode 100644 resources/quality/ultimaker_s8/um_s8_bb0.8_bvoh_0.4mm.inst.cfg diff --git a/resources/quality/ultimaker_factor4/um_f4_bb0.4_bvoh_0.15mm.inst.cfg b/resources/quality/ultimaker_factor4/um_f4_bb0.4_bvoh_0.15mm.inst.cfg new file mode 100644 index 0000000000..c6548f0173 --- /dev/null +++ b/resources/quality/ultimaker_factor4/um_f4_bb0.4_bvoh_0.15mm.inst.cfg @@ -0,0 +1,43 @@ +[general] +definition = ultimaker_factor4 +name = Normal +version = 4 + +[metadata] +material = generic_bvoh +quality_type = fast +setting_version = 25 +type = quality +variant = BB 0.4 +weight = -1 + +[values] +acceleration_print = 1000.0 +acceleration_support_bottom = 100 +acceleration_support_interface = 1000 +brim_replaces_support = False +build_volume_temperature = =40 if extruders_enabled_count > 1 else 35 +default_material_bed_temperature = =0 if extruders_enabled_count > 1 else 60 +gradual_flow_discretisation_step_size = 0.1 +gradual_flow_enabled = True +gradual_support_infill_steps = 0 +initial_layer_line_width_factor = 125 +jerk_print = 10 +material_flow_layer_0 = 90 +max_flow_acceleration = 1 +minimum_support_area = 4 +prime_tower_flow = 90 +prime_tower_min_volume = 15 +retraction_min_travel = 5.0 +retraction_prime_speed = 10.0 +skin_material_flow = =material_flow * 0.93 +speed_print = 30 +support_angle = 45 +support_infill_rate = 20 +support_infill_sparse_thickness = =min(layer_height * 2, machine_nozzle_size * 3 / 4) if layer_height <= 0.15 / 0.4 * machine_nozzle_size else layer_height +support_interface_offset = 1 +support_offset = 3 +support_xy_distance = 2 +support_z_distance = 0 +switch_extruder_prime_speed = 10.0 + diff --git a/resources/quality/ultimaker_factor4/um_f4_bb0.4_bvoh_0.1mm.inst.cfg b/resources/quality/ultimaker_factor4/um_f4_bb0.4_bvoh_0.1mm.inst.cfg new file mode 100644 index 0000000000..6f1b986c4e --- /dev/null +++ b/resources/quality/ultimaker_factor4/um_f4_bb0.4_bvoh_0.1mm.inst.cfg @@ -0,0 +1,43 @@ +[general] +definition = ultimaker_factor4 +name = Fine +version = 4 + +[metadata] +material = generic_bvoh +quality_type = normal +setting_version = 25 +type = quality +variant = BB 0.4 +weight = 0 + +[values] +acceleration_print = 1000.0 +acceleration_support_bottom = 100 +acceleration_support_interface = 1000 +brim_replaces_support = False +build_volume_temperature = =40 if extruders_enabled_count > 1 else 35 +default_material_bed_temperature = =0 if extruders_enabled_count > 1 else 60 +gradual_flow_discretisation_step_size = 0.1 +gradual_flow_enabled = True +gradual_support_infill_steps = 0 +initial_layer_line_width_factor = 125 +jerk_print = 10 +material_flow_layer_0 = 90 +max_flow_acceleration = 1 +minimum_support_area = 4 +prime_tower_flow = 90 +prime_tower_min_volume = 15 +retraction_min_travel = 5.0 +retraction_prime_speed = 10.0 +skin_material_flow = =material_flow * 0.93 +speed_print = 30 +support_angle = 45 +support_infill_rate = 20 +support_infill_sparse_thickness = =min(layer_height * 2, machine_nozzle_size * 3 / 4) if layer_height <= 0.15 / 0.4 * machine_nozzle_size else layer_height +support_interface_offset = 1 +support_offset = 3 +support_xy_distance = 2 +support_z_distance = 0 +switch_extruder_prime_speed = 10.0 + diff --git a/resources/quality/ultimaker_factor4/um_f4_bb0.4_bvoh_0.2mm.inst.cfg b/resources/quality/ultimaker_factor4/um_f4_bb0.4_bvoh_0.2mm.inst.cfg new file mode 100644 index 0000000000..ff49315c1e --- /dev/null +++ b/resources/quality/ultimaker_factor4/um_f4_bb0.4_bvoh_0.2mm.inst.cfg @@ -0,0 +1,43 @@ +[general] +definition = ultimaker_factor4 +name = Fast +version = 4 + +[metadata] +material = generic_bvoh +quality_type = draft +setting_version = 25 +type = quality +variant = BB 0.4 +weight = -2 + +[values] +acceleration_print = 1000.0 +acceleration_support_bottom = 100 +acceleration_support_interface = 1000 +brim_replaces_support = False +build_volume_temperature = =40 if extruders_enabled_count > 1 else 35 +default_material_bed_temperature = =0 if extruders_enabled_count > 1 else 60 +gradual_flow_discretisation_step_size = 0.1 +gradual_flow_enabled = True +gradual_support_infill_steps = 0 +initial_layer_line_width_factor = 125 +jerk_print = 10 +material_flow_layer_0 = 90 +max_flow_acceleration = 1 +minimum_support_area = 4 +prime_tower_flow = 90 +prime_tower_min_volume = 15 +retraction_min_travel = 5.0 +retraction_prime_speed = 10.0 +skin_material_flow = =material_flow * 0.93 +speed_print = 30 +support_angle = 45 +support_infill_rate = 20 +support_infill_sparse_thickness = =min(layer_height * 2, machine_nozzle_size * 3 / 4) if layer_height <= 0.15 / 0.4 * machine_nozzle_size else layer_height +support_interface_offset = 1 +support_offset = 3 +support_xy_distance = 2 +support_z_distance = 0 +switch_extruder_prime_speed = 10.0 + diff --git a/resources/quality/ultimaker_factor4/um_f4_bb0.4_bvoh_0.3mm.inst.cfg b/resources/quality/ultimaker_factor4/um_f4_bb0.4_bvoh_0.3mm.inst.cfg new file mode 100644 index 0000000000..209b16b697 --- /dev/null +++ b/resources/quality/ultimaker_factor4/um_f4_bb0.4_bvoh_0.3mm.inst.cfg @@ -0,0 +1,44 @@ +[general] +definition = ultimaker_factor4 +name = Extra Fast - Experimental +version = 4 + +[metadata] +is_experimental = True +material = generic_bvoh +quality_type = verydraft +setting_version = 25 +type = quality +variant = BB 0.4 +weight = -3 + +[values] +acceleration_print = 1000.0 +acceleration_support_bottom = 100 +acceleration_support_interface = 1000 +brim_replaces_support = False +build_volume_temperature = =40 if extruders_enabled_count > 1 else 35 +default_material_bed_temperature = =0 if extruders_enabled_count > 1 else 60 +gradual_flow_discretisation_step_size = 0.1 +gradual_flow_enabled = True +gradual_support_infill_steps = 0 +initial_layer_line_width_factor = 125 +jerk_print = 10 +material_flow_layer_0 = 90 +max_flow_acceleration = 1 +minimum_support_area = 4 +prime_tower_flow = 90 +prime_tower_min_volume = 15 +retraction_min_travel = 5.0 +retraction_prime_speed = 10.0 +skin_material_flow = =material_flow * 0.93 +speed_print = 30 +support_angle = 45 +support_infill_rate = 20 +support_infill_sparse_thickness = =min(layer_height * 2, machine_nozzle_size * 3 / 4) if layer_height <= 0.15 / 0.4 * machine_nozzle_size else layer_height +support_interface_offset = 1 +support_offset = 3 +support_xy_distance = 2 +support_z_distance = 0 +switch_extruder_prime_speed = 10.0 + diff --git a/resources/quality/ultimaker_factor4/um_f4_bb0.8_bvoh_0.2mm.inst.cfg b/resources/quality/ultimaker_factor4/um_f4_bb0.8_bvoh_0.2mm.inst.cfg new file mode 100644 index 0000000000..d10b0c939e --- /dev/null +++ b/resources/quality/ultimaker_factor4/um_f4_bb0.8_bvoh_0.2mm.inst.cfg @@ -0,0 +1,43 @@ +[general] +definition = ultimaker_factor4 +name = Fast +version = 4 + +[metadata] +material = generic_bvoh +quality_type = draft +setting_version = 25 +type = quality +variant = BB 0.8 +weight = -2 + +[values] +acceleration_print = 1000.0 +acceleration_support_bottom = 100 +acceleration_support_interface = 1000 +brim_replaces_support = False +build_volume_temperature = =40 if extruders_enabled_count > 1 else 35 +default_material_bed_temperature = =0 if extruders_enabled_count > 1 else 60 +gradual_flow_discretisation_step_size = 0.1 +gradual_flow_enabled = True +gradual_support_infill_steps = 0 +initial_layer_line_width_factor = 125 +jerk_print = 10 +material_flow_layer_0 = 90 +max_flow_acceleration = 1 +minimum_support_area = 4 +prime_tower_flow = 90 +prime_tower_min_volume = 15 +retraction_min_travel = 5.0 +retraction_prime_speed = 10.0 +skin_material_flow = =material_flow * 0.93 +speed_print = 30 +support_angle = 45 +support_infill_rate = 20 +support_infill_sparse_thickness = =min(layer_height * 2, machine_nozzle_size * 3 / 4) if layer_height <= 0.15 / 0.4 * machine_nozzle_size else layer_height +support_interface_offset = 1 +support_offset = 3 +support_xy_distance = 2 +support_z_distance = 0 +switch_extruder_prime_speed = 10.0 + diff --git a/resources/quality/ultimaker_factor4/um_f4_bb0.8_bvoh_0.3mm.inst.cfg b/resources/quality/ultimaker_factor4/um_f4_bb0.8_bvoh_0.3mm.inst.cfg new file mode 100644 index 0000000000..dd2e2da565 --- /dev/null +++ b/resources/quality/ultimaker_factor4/um_f4_bb0.8_bvoh_0.3mm.inst.cfg @@ -0,0 +1,43 @@ +[general] +definition = ultimaker_factor4 +name = Extra Fast +version = 4 + +[metadata] +material = generic_bvoh +quality_type = verydraft +setting_version = 25 +type = quality +variant = BB 0.8 +weight = -3 + +[values] +acceleration_print = 1000.0 +acceleration_support_bottom = 100 +acceleration_support_interface = 1000 +brim_replaces_support = False +build_volume_temperature = =40 if extruders_enabled_count > 1 else 35 +default_material_bed_temperature = =0 if extruders_enabled_count > 1 else 60 +gradual_flow_discretisation_step_size = 0.1 +gradual_flow_enabled = True +gradual_support_infill_steps = 0 +initial_layer_line_width_factor = 125 +jerk_print = 10 +material_flow_layer_0 = 90 +max_flow_acceleration = 1 +minimum_support_area = 4 +prime_tower_flow = 90 +prime_tower_min_volume = 15 +retraction_min_travel = 5.0 +retraction_prime_speed = 10.0 +skin_material_flow = =material_flow * 0.93 +speed_print = 30 +support_angle = 45 +support_infill_rate = 20 +support_infill_sparse_thickness = =min(layer_height * 2, machine_nozzle_size * 3 / 4) if layer_height <= 0.15 / 0.4 * machine_nozzle_size else layer_height +support_interface_offset = 1 +support_offset = 3 +support_xy_distance = 2 +support_z_distance = 0 +switch_extruder_prime_speed = 10.0 + diff --git a/resources/quality/ultimaker_factor4/um_f4_bb0.8_bvoh_0.4mm.inst.cfg b/resources/quality/ultimaker_factor4/um_f4_bb0.8_bvoh_0.4mm.inst.cfg new file mode 100644 index 0000000000..fa230a1f5f --- /dev/null +++ b/resources/quality/ultimaker_factor4/um_f4_bb0.8_bvoh_0.4mm.inst.cfg @@ -0,0 +1,43 @@ +[general] +definition = ultimaker_factor4 +name = Sprint +version = 4 + +[metadata] +material = generic_bvoh +quality_type = superdraft +setting_version = 25 +type = quality +variant = BB 0.8 +weight = -4 + +[values] +acceleration_print = 1000.0 +acceleration_support_bottom = 100 +acceleration_support_interface = 1000 +brim_replaces_support = False +build_volume_temperature = =40 if extruders_enabled_count > 1 else 35 +default_material_bed_temperature = =0 if extruders_enabled_count > 1 else 60 +gradual_flow_discretisation_step_size = 0.1 +gradual_flow_enabled = True +gradual_support_infill_steps = 0 +initial_layer_line_width_factor = 125 +jerk_print = 10 +material_flow_layer_0 = 90 +max_flow_acceleration = 1 +minimum_support_area = 4 +prime_tower_flow = 90 +prime_tower_min_volume = 15 +retraction_min_travel = 5.0 +retraction_prime_speed = 10.0 +skin_material_flow = =material_flow * 0.93 +speed_print = 30 +support_angle = 45 +support_infill_rate = 20 +support_infill_sparse_thickness = =min(layer_height * 2, machine_nozzle_size * 3 / 4) if layer_height <= 0.15 / 0.4 * machine_nozzle_size else layer_height +support_interface_offset = 1 +support_offset = 3 +support_xy_distance = 2 +support_z_distance = 0 +switch_extruder_prime_speed = 10.0 + diff --git a/resources/quality/ultimaker_s3/um_s3_bb0.4_bvoh_0.15mm.inst.cfg b/resources/quality/ultimaker_s3/um_s3_bb0.4_bvoh_0.15mm.inst.cfg new file mode 100644 index 0000000000..93c1d4947d --- /dev/null +++ b/resources/quality/ultimaker_s3/um_s3_bb0.4_bvoh_0.15mm.inst.cfg @@ -0,0 +1,35 @@ +[general] +definition = ultimaker_s3 +name = Normal +version = 4 + +[metadata] +material = generic_bvoh +quality_type = fast +setting_version = 25 +type = quality +variant = BB 0.4 +weight = -1 + +[values] +acceleration_prime_tower = 1500 +acceleration_support = 1500 +brim_replaces_support = False +build_volume_temperature = =70 if extruders_enabled_count > 1 else 35 +cool_fan_enabled = =not (support_enable and (extruder_nr == support_infill_extruder_nr)) +default_material_bed_temperature = =0 if extruders_enabled_count > 1 else 60 +initial_layer_line_width_factor = 150 +jerk_prime_tower = 20 +jerk_support = 20 +minimum_support_area = 4 +retraction_amount = 6.5 +retraction_count_max = 5 +skirt_brim_minimal_length = =min(2000, 175 / (layer_height * line_width)) +speed_prime_tower = 50 +speed_support = 50 +speed_support_interface = 50 +support_bottom_density = 70 +support_infill_sparse_thickness = =2 * layer_height +support_interface_enable = True +support_z_distance = 0 + diff --git a/resources/quality/ultimaker_s3/um_s3_bb0.4_bvoh_0.1mm.inst.cfg b/resources/quality/ultimaker_s3/um_s3_bb0.4_bvoh_0.1mm.inst.cfg new file mode 100644 index 0000000000..f06f8deb6f --- /dev/null +++ b/resources/quality/ultimaker_s3/um_s3_bb0.4_bvoh_0.1mm.inst.cfg @@ -0,0 +1,36 @@ +[general] +definition = ultimaker_s3 +name = Fine +version = 4 + +[metadata] +material = generic_bvoh +quality_type = normal +setting_version = 25 +type = quality +variant = BB 0.4 +weight = 0 + +[values] +acceleration_prime_tower = 1500 +acceleration_support = 1500 +brim_replaces_support = False +build_volume_temperature = =70 if extruders_enabled_count > 1 else 35 +cool_fan_enabled = =not (support_enable and (extruder_nr == support_infill_extruder_nr)) +default_material_bed_temperature = =0 if extruders_enabled_count > 1 else 60 +initial_layer_line_width_factor = 150 +jerk_prime_tower = 20 +jerk_support = 20 +material_print_temperature = =default_material_print_temperature - 5 +minimum_support_area = 4 +retraction_amount = 6.5 +retraction_count_max = 5 +skirt_brim_minimal_length = =min(2000, 175 / (layer_height * line_width)) +speed_prime_tower = 50 +speed_support = 50 +speed_support_interface = 50 +support_bottom_density = 70 +support_infill_sparse_thickness = =2 * layer_height +support_interface_enable = True +support_z_distance = 0 + diff --git a/resources/quality/ultimaker_s3/um_s3_bb0.4_bvoh_0.2mm.inst.cfg b/resources/quality/ultimaker_s3/um_s3_bb0.4_bvoh_0.2mm.inst.cfg new file mode 100644 index 0000000000..61059651ef --- /dev/null +++ b/resources/quality/ultimaker_s3/um_s3_bb0.4_bvoh_0.2mm.inst.cfg @@ -0,0 +1,35 @@ +[general] +definition = ultimaker_s3 +name = Fast +version = 4 + +[metadata] +material = generic_bvoh +quality_type = draft +setting_version = 25 +type = quality +variant = BB 0.4 +weight = -2 + +[values] +acceleration_prime_tower = 1500 +acceleration_support = 1500 +brim_replaces_support = False +build_volume_temperature = =70 if extruders_enabled_count > 1 else 35 +cool_fan_enabled = =not (support_enable and (extruder_nr == support_infill_extruder_nr)) +default_material_bed_temperature = =0 if extruders_enabled_count > 1 else 60 +initial_layer_line_width_factor = 150 +jerk_prime_tower = 20 +jerk_support = 20 +material_print_temperature = =default_material_print_temperature + 5 +minimum_support_area = 4 +retraction_amount = 6.5 +retraction_count_max = 5 +skirt_brim_minimal_length = =min(2000, 175 / (layer_height * line_width)) +speed_prime_tower = 50 +speed_support = 50 +speed_support_interface = 50 +support_bottom_density = 70 +support_interface_enable = True +support_z_distance = 0 + diff --git a/resources/quality/ultimaker_s3/um_s3_bb0.4_bvoh_0.3mm.inst.cfg b/resources/quality/ultimaker_s3/um_s3_bb0.4_bvoh_0.3mm.inst.cfg new file mode 100644 index 0000000000..8f06dd0562 --- /dev/null +++ b/resources/quality/ultimaker_s3/um_s3_bb0.4_bvoh_0.3mm.inst.cfg @@ -0,0 +1,37 @@ +[general] +definition = ultimaker_s3 +name = Extra Fast - Experimental +version = 4 + +[metadata] +is_experimental = True +material = generic_bvoh +quality_type = verydraft +setting_version = 25 +type = quality +variant = BB 0.4 +weight = -3 + +[values] +acceleration_prime_tower = 1500 +acceleration_support = 1500 +brim_replaces_support = False +build_volume_temperature = =70 if extruders_enabled_count > 1 else 35 +cool_fan_enabled = =not (support_enable and (extruder_nr == support_infill_extruder_nr)) +default_material_bed_temperature = =0 if extruders_enabled_count > 1 else 60 +initial_layer_line_width_factor = 150 +jerk_prime_tower = 20 +jerk_support = 20 +material_print_temperature = =default_material_print_temperature - 5 +minimum_support_area = 4 +retraction_amount = 6.5 +retraction_count_max = 5 +skirt_brim_minimal_length = =min(2000, 175 / (layer_height * line_width)) +speed_prime_tower = 50 +speed_support = 50 +speed_support_interface = 50 +support_bottom_density = 70 +support_infill_sparse_thickness = 0.3 +support_interface_enable = True +support_z_distance = 0 + diff --git a/resources/quality/ultimaker_s3/um_s3_bb0.8_bvoh_0.2mm.inst.cfg b/resources/quality/ultimaker_s3/um_s3_bb0.8_bvoh_0.2mm.inst.cfg new file mode 100644 index 0000000000..a9d67b0552 --- /dev/null +++ b/resources/quality/ultimaker_s3/um_s3_bb0.8_bvoh_0.2mm.inst.cfg @@ -0,0 +1,34 @@ +[general] +definition = ultimaker_s3 +name = Fast +version = 4 + +[metadata] +material = generic_bvoh +quality_type = draft +setting_version = 25 +type = quality +variant = BB 0.8 +weight = -2 + +[values] +acceleration_prime_tower = 1500 +acceleration_support = 1500 +brim_replaces_support = False +build_volume_temperature = =70 if extruders_enabled_count > 1 else 35 +cool_fan_enabled = =not (support_enable and (extruder_nr == support_infill_extruder_nr)) +default_material_bed_temperature = =0 if extruders_enabled_count > 1 else 60 +initial_layer_line_width_factor = 150 +jerk_prime_tower = 20 +jerk_support = 20 +minimum_support_area = 4 +retraction_amount = 6.5 +retraction_count_max = 5 +skirt_brim_minimal_length = =min(2000, 175 / (layer_height * line_width)) +speed_prime_tower = 50 +speed_support = 50 +speed_support_interface = 50 +support_bottom_density = 70 +support_interface_enable = True +support_z_distance = 0 + diff --git a/resources/quality/ultimaker_s3/um_s3_bb0.8_bvoh_0.3mm.inst.cfg b/resources/quality/ultimaker_s3/um_s3_bb0.8_bvoh_0.3mm.inst.cfg new file mode 100644 index 0000000000..016887c23c --- /dev/null +++ b/resources/quality/ultimaker_s3/um_s3_bb0.8_bvoh_0.3mm.inst.cfg @@ -0,0 +1,36 @@ +[general] +definition = ultimaker_s3 +name = Extra Fast +version = 4 + +[metadata] +material = generic_bvoh +quality_type = verydraft +setting_version = 25 +type = quality +variant = BB 0.8 +weight = -3 + +[values] +acceleration_prime_tower = 1500 +acceleration_support = 1500 +brim_replaces_support = False +build_volume_temperature = =70 if extruders_enabled_count > 1 else 35 +cool_fan_enabled = =not (support_enable and (extruder_nr == support_infill_extruder_nr)) +default_material_bed_temperature = =0 if extruders_enabled_count > 1 else 60 +initial_layer_line_width_factor = 150 +jerk_prime_tower = 20 +jerk_support = 20 +material_print_temperature = =default_material_print_temperature + 5 +minimum_support_area = 4 +retraction_amount = 6.5 +retraction_count_max = 5 +skirt_brim_minimal_length = =min(2000, 175 / (layer_height * line_width)) +speed_prime_tower = 50 +speed_support = 50 +speed_support_interface = 50 +support_bottom_density = 70 +support_infill_sparse_thickness = 0.3 +support_interface_enable = True +support_z_distance = 0 + diff --git a/resources/quality/ultimaker_s3/um_s3_bb0.8_bvoh_0.4mm.inst.cfg b/resources/quality/ultimaker_s3/um_s3_bb0.8_bvoh_0.4mm.inst.cfg new file mode 100644 index 0000000000..4d4bffbab9 --- /dev/null +++ b/resources/quality/ultimaker_s3/um_s3_bb0.8_bvoh_0.4mm.inst.cfg @@ -0,0 +1,35 @@ +[general] +definition = ultimaker_s3 +name = Sprint +version = 4 + +[metadata] +material = generic_bvoh +quality_type = superdraft +setting_version = 25 +type = quality +variant = BB 0.8 +weight = -4 + +[values] +acceleration_prime_tower = 1500 +acceleration_support = 1500 +brim_replaces_support = False +build_volume_temperature = =70 if extruders_enabled_count > 1 else 35 +cool_fan_enabled = =not (support_enable and (extruder_nr == support_infill_extruder_nr)) +default_material_bed_temperature = =0 if extruders_enabled_count > 1 else 60 +initial_layer_line_width_factor = 150 +jerk_prime_tower = 20 +jerk_support = 20 +material_print_temperature = =default_material_print_temperature + 5 +minimum_support_area = 4 +retraction_amount = 6.5 +retraction_count_max = 5 +skirt_brim_minimal_length = =min(2000, 175 / (layer_height * line_width)) +speed_prime_tower = 50 +speed_support = 50 +speed_support_interface = 50 +support_bottom_density = 70 +support_interface_enable = True +support_z_distance = 0 + diff --git a/resources/quality/ultimaker_s5/um_s5_bb0.4_bvoh_0.15mm.inst.cfg b/resources/quality/ultimaker_s5/um_s5_bb0.4_bvoh_0.15mm.inst.cfg new file mode 100644 index 0000000000..e5dc8e7295 --- /dev/null +++ b/resources/quality/ultimaker_s5/um_s5_bb0.4_bvoh_0.15mm.inst.cfg @@ -0,0 +1,35 @@ +[general] +definition = ultimaker_s5 +name = Normal +version = 4 + +[metadata] +material = generic_bvoh +quality_type = fast +setting_version = 25 +type = quality +variant = BB 0.4 +weight = -1 + +[values] +acceleration_prime_tower = 1500 +acceleration_support = 1500 +brim_replaces_support = False +build_volume_temperature = =70 if extruders_enabled_count > 1 else 35 +cool_fan_enabled = =not (support_enable and (extruder_nr == support_infill_extruder_nr)) +default_material_bed_temperature = =0 if extruders_enabled_count > 1 else 60 +initial_layer_line_width_factor = 150 +jerk_prime_tower = 20 +jerk_support = 20 +minimum_support_area = 4 +retraction_amount = 6.5 +retraction_count_max = 5 +skirt_brim_minimal_length = =min(2000, 175 / (layer_height * line_width)) +speed_prime_tower = 50 +speed_support = 50 +speed_support_interface = 50 +support_bottom_density = 70 +support_infill_sparse_thickness = =2 * layer_height +support_interface_enable = True +support_z_distance = 0 + diff --git a/resources/quality/ultimaker_s5/um_s5_bb0.4_bvoh_0.1mm.inst.cfg b/resources/quality/ultimaker_s5/um_s5_bb0.4_bvoh_0.1mm.inst.cfg new file mode 100644 index 0000000000..ed7638a4e0 --- /dev/null +++ b/resources/quality/ultimaker_s5/um_s5_bb0.4_bvoh_0.1mm.inst.cfg @@ -0,0 +1,36 @@ +[general] +definition = ultimaker_s5 +name = Fine +version = 4 + +[metadata] +material = generic_bvoh +quality_type = normal +setting_version = 25 +type = quality +variant = BB 0.4 +weight = 0 + +[values] +acceleration_prime_tower = 1500 +acceleration_support = 1500 +brim_replaces_support = False +build_volume_temperature = =70 if extruders_enabled_count > 1 else 35 +cool_fan_enabled = =not (support_enable and (extruder_nr == support_infill_extruder_nr)) +default_material_bed_temperature = =0 if extruders_enabled_count > 1 else 60 +initial_layer_line_width_factor = 150 +jerk_prime_tower = 20 +jerk_support = 20 +material_print_temperature = =default_material_print_temperature - 5 +minimum_support_area = 4 +retraction_amount = 6.5 +retraction_count_max = 5 +skirt_brim_minimal_length = =min(2000, 175 / (layer_height * line_width)) +speed_prime_tower = 50 +speed_support = 50 +speed_support_interface = 50 +support_bottom_density = 70 +support_infill_sparse_thickness = =2 * layer_height +support_interface_enable = True +support_z_distance = 0 + diff --git a/resources/quality/ultimaker_s5/um_s5_bb0.4_bvoh_0.2mm.inst.cfg b/resources/quality/ultimaker_s5/um_s5_bb0.4_bvoh_0.2mm.inst.cfg new file mode 100644 index 0000000000..1d02c886bc --- /dev/null +++ b/resources/quality/ultimaker_s5/um_s5_bb0.4_bvoh_0.2mm.inst.cfg @@ -0,0 +1,35 @@ +[general] +definition = ultimaker_s5 +name = Fast +version = 4 + +[metadata] +material = generic_bvoh +quality_type = draft +setting_version = 25 +type = quality +variant = BB 0.4 +weight = -2 + +[values] +acceleration_prime_tower = 1500 +acceleration_support = 1500 +brim_replaces_support = False +build_volume_temperature = =70 if extruders_enabled_count > 1 else 35 +cool_fan_enabled = =not (support_enable and (extruder_nr == support_infill_extruder_nr)) +default_material_bed_temperature = =0 if extruders_enabled_count > 1 else 60 +initial_layer_line_width_factor = 150 +jerk_prime_tower = 20 +jerk_support = 20 +material_print_temperature = =default_material_print_temperature + 5 +minimum_support_area = 4 +retraction_amount = 6.5 +retraction_count_max = 5 +skirt_brim_minimal_length = =min(2000, 175 / (layer_height * line_width)) +speed_prime_tower = 50 +speed_support = 50 +speed_support_interface = 50 +support_bottom_density = 70 +support_interface_enable = True +support_z_distance = 0 + diff --git a/resources/quality/ultimaker_s5/um_s5_bb0.4_bvoh_0.3mm.inst.cfg b/resources/quality/ultimaker_s5/um_s5_bb0.4_bvoh_0.3mm.inst.cfg new file mode 100644 index 0000000000..b759ae0bb3 --- /dev/null +++ b/resources/quality/ultimaker_s5/um_s5_bb0.4_bvoh_0.3mm.inst.cfg @@ -0,0 +1,37 @@ +[general] +definition = ultimaker_s5 +name = Extra Fast - Experimental +version = 4 + +[metadata] +is_experimental = True +material = generic_bvoh +quality_type = verydraft +setting_version = 25 +type = quality +variant = BB 0.4 +weight = -3 + +[values] +acceleration_prime_tower = 1500 +acceleration_support = 1500 +brim_replaces_support = False +build_volume_temperature = =70 if extruders_enabled_count > 1 else 35 +cool_fan_enabled = =not (support_enable and (extruder_nr == support_infill_extruder_nr)) +default_material_bed_temperature = =0 if extruders_enabled_count > 1 else 60 +initial_layer_line_width_factor = 150 +jerk_prime_tower = 20 +jerk_support = 20 +material_print_temperature = =default_material_print_temperature - 5 +minimum_support_area = 4 +retraction_amount = 6.5 +retraction_count_max = 5 +skirt_brim_minimal_length = =min(2000, 175 / (layer_height * line_width)) +speed_prime_tower = 50 +speed_support = 50 +speed_support_interface = 50 +support_bottom_density = 70 +support_infill_sparse_thickness = 0.3 +support_interface_enable = True +support_z_distance = 0 + diff --git a/resources/quality/ultimaker_s5/um_s5_bb0.8_bvoh_0.2mm.inst.cfg b/resources/quality/ultimaker_s5/um_s5_bb0.8_bvoh_0.2mm.inst.cfg new file mode 100644 index 0000000000..58875826ad --- /dev/null +++ b/resources/quality/ultimaker_s5/um_s5_bb0.8_bvoh_0.2mm.inst.cfg @@ -0,0 +1,34 @@ +[general] +definition = ultimaker_s5 +name = Fast +version = 4 + +[metadata] +material = generic_bvoh +quality_type = draft +setting_version = 25 +type = quality +variant = BB 0.8 +weight = -2 + +[values] +acceleration_prime_tower = 1500 +acceleration_support = 1500 +brim_replaces_support = False +build_volume_temperature = =70 if extruders_enabled_count > 1 else 35 +cool_fan_enabled = =not (support_enable and (extruder_nr == support_infill_extruder_nr)) +default_material_bed_temperature = =0 if extruders_enabled_count > 1 else 60 +initial_layer_line_width_factor = 150 +jerk_prime_tower = 20 +jerk_support = 20 +minimum_support_area = 4 +retraction_amount = 6.5 +retraction_count_max = 5 +skirt_brim_minimal_length = =min(2000, 175 / (layer_height * line_width)) +speed_prime_tower = 50 +speed_support = 50 +speed_support_interface = 50 +support_bottom_density = 70 +support_interface_enable = True +support_z_distance = 0 + diff --git a/resources/quality/ultimaker_s5/um_s5_bb0.8_bvoh_0.3mm.inst.cfg b/resources/quality/ultimaker_s5/um_s5_bb0.8_bvoh_0.3mm.inst.cfg new file mode 100644 index 0000000000..74b33f5366 --- /dev/null +++ b/resources/quality/ultimaker_s5/um_s5_bb0.8_bvoh_0.3mm.inst.cfg @@ -0,0 +1,36 @@ +[general] +definition = ultimaker_s5 +name = Extra Fast +version = 4 + +[metadata] +material = generic_bvoh +quality_type = verydraft +setting_version = 25 +type = quality +variant = BB 0.8 +weight = -3 + +[values] +acceleration_prime_tower = 1500 +acceleration_support = 1500 +brim_replaces_support = False +build_volume_temperature = =70 if extruders_enabled_count > 1 else 35 +cool_fan_enabled = =not (support_enable and (extruder_nr == support_infill_extruder_nr)) +default_material_bed_temperature = =0 if extruders_enabled_count > 1 else 60 +initial_layer_line_width_factor = 150 +jerk_prime_tower = 20 +jerk_support = 20 +material_print_temperature = =default_material_print_temperature + 5 +minimum_support_area = 4 +retraction_amount = 6.5 +retraction_count_max = 5 +skirt_brim_minimal_length = =min(2000, 175 / (layer_height * line_width)) +speed_prime_tower = 50 +speed_support = 50 +speed_support_interface = 50 +support_bottom_density = 70 +support_infill_sparse_thickness = 0.3 +support_interface_enable = True +support_z_distance = 0 + diff --git a/resources/quality/ultimaker_s5/um_s5_bb0.8_bvoh_0.4mm.inst.cfg b/resources/quality/ultimaker_s5/um_s5_bb0.8_bvoh_0.4mm.inst.cfg new file mode 100644 index 0000000000..cd501dcf0e --- /dev/null +++ b/resources/quality/ultimaker_s5/um_s5_bb0.8_bvoh_0.4mm.inst.cfg @@ -0,0 +1,35 @@ +[general] +definition = ultimaker_s5 +name = Sprint +version = 4 + +[metadata] +material = generic_bvoh +quality_type = superdraft +setting_version = 25 +type = quality +variant = BB 0.8 +weight = -4 + +[values] +acceleration_prime_tower = 1500 +acceleration_support = 1500 +brim_replaces_support = False +build_volume_temperature = =70 if extruders_enabled_count > 1 else 35 +cool_fan_enabled = =not (support_enable and (extruder_nr == support_infill_extruder_nr)) +default_material_bed_temperature = =0 if extruders_enabled_count > 1 else 60 +initial_layer_line_width_factor = 150 +jerk_prime_tower = 20 +jerk_support = 20 +material_print_temperature = =default_material_print_temperature + 5 +minimum_support_area = 4 +retraction_amount = 6.5 +retraction_count_max = 5 +skirt_brim_minimal_length = =min(2000, 175 / (layer_height * line_width)) +speed_prime_tower = 50 +speed_support = 50 +speed_support_interface = 50 +support_bottom_density = 70 +support_interface_enable = True +support_z_distance = 0 + diff --git a/resources/quality/ultimaker_s8/um_s8_bb0.4_bvoh_0.15mm.inst.cfg b/resources/quality/ultimaker_s8/um_s8_bb0.4_bvoh_0.15mm.inst.cfg new file mode 100644 index 0000000000..e10db6b743 --- /dev/null +++ b/resources/quality/ultimaker_s8/um_s8_bb0.4_bvoh_0.15mm.inst.cfg @@ -0,0 +1,35 @@ +[general] +definition = ultimaker_s8 +name = Normal +version = 4 + +[metadata] +material = generic_bvoh +quality_type = fast +setting_version = 25 +type = quality +variant = BB 0.4 +weight = -1 + +[values] +acceleration_prime_tower = 1500 +acceleration_support = 1500 +brim_replaces_support = False +build_volume_temperature = =70 if extruders_enabled_count > 1 else 35 +cool_fan_enabled = =not (support_enable and (extruder_nr == support_infill_extruder_nr)) +default_material_bed_temperature = =0 if extruders_enabled_count > 1 else 60 +initial_layer_line_width_factor = 150 +jerk_prime_tower = 4000 +jerk_support = 4000 +minimum_support_area = 4 +retraction_amount = 6.5 +retraction_count_max = 5 +skirt_brim_minimal_length = =min(2000, 175 / (layer_height * line_width)) +speed_prime_tower = 50 +speed_support = 50 +speed_support_interface = 50 +support_bottom_density = 70 +support_infill_sparse_thickness = =2 * layer_height +support_interface_enable = True +support_z_distance = 0 + diff --git a/resources/quality/ultimaker_s8/um_s8_bb0.4_bvoh_0.1mm.inst.cfg b/resources/quality/ultimaker_s8/um_s8_bb0.4_bvoh_0.1mm.inst.cfg new file mode 100644 index 0000000000..9c5d0e9bd8 --- /dev/null +++ b/resources/quality/ultimaker_s8/um_s8_bb0.4_bvoh_0.1mm.inst.cfg @@ -0,0 +1,36 @@ +[general] +definition = ultimaker_s8 +name = Fine +version = 4 + +[metadata] +material = generic_bvoh +quality_type = normal +setting_version = 25 +type = quality +variant = BB 0.4 +weight = 0 + +[values] +acceleration_prime_tower = 1500 +acceleration_support = 1500 +brim_replaces_support = False +build_volume_temperature = =70 if extruders_enabled_count > 1 else 35 +cool_fan_enabled = =not (support_enable and (extruder_nr == support_infill_extruder_nr)) +default_material_bed_temperature = =0 if extruders_enabled_count > 1 else 60 +initial_layer_line_width_factor = 150 +jerk_prime_tower = 4000 +jerk_support = 4000 +material_print_temperature = =default_material_print_temperature - 5 +minimum_support_area = 4 +retraction_amount = 6.5 +retraction_count_max = 5 +skirt_brim_minimal_length = =min(2000, 175 / (layer_height * line_width)) +speed_prime_tower = 50 +speed_support = 50 +speed_support_interface = 50 +support_bottom_density = 70 +support_infill_sparse_thickness = =2 * layer_height +support_interface_enable = True +support_z_distance = 0 + diff --git a/resources/quality/ultimaker_s8/um_s8_bb0.4_bvoh_0.2mm.inst.cfg b/resources/quality/ultimaker_s8/um_s8_bb0.4_bvoh_0.2mm.inst.cfg new file mode 100644 index 0000000000..8f4c52d7b5 --- /dev/null +++ b/resources/quality/ultimaker_s8/um_s8_bb0.4_bvoh_0.2mm.inst.cfg @@ -0,0 +1,35 @@ +[general] +definition = ultimaker_s8 +name = Fast +version = 4 + +[metadata] +material = generic_bvoh +quality_type = draft +setting_version = 25 +type = quality +variant = BB 0.4 +weight = -2 + +[values] +acceleration_prime_tower = 1500 +acceleration_support = 1500 +brim_replaces_support = False +build_volume_temperature = =70 if extruders_enabled_count > 1 else 35 +cool_fan_enabled = =not (support_enable and (extruder_nr == support_infill_extruder_nr)) +default_material_bed_temperature = =0 if extruders_enabled_count > 1 else 60 +initial_layer_line_width_factor = 150 +jerk_prime_tower = 4000 +jerk_support = 4000 +material_print_temperature = =default_material_print_temperature + 5 +minimum_support_area = 4 +retraction_amount = 6.5 +retraction_count_max = 5 +skirt_brim_minimal_length = =min(2000, 175 / (layer_height * line_width)) +speed_prime_tower = 50 +speed_support = 50 +speed_support_interface = 50 +support_bottom_density = 70 +support_interface_enable = True +support_z_distance = 0 + diff --git a/resources/quality/ultimaker_s8/um_s8_bb0.4_bvoh_0.3mm.inst.cfg b/resources/quality/ultimaker_s8/um_s8_bb0.4_bvoh_0.3mm.inst.cfg new file mode 100644 index 0000000000..e37500de1a --- /dev/null +++ b/resources/quality/ultimaker_s8/um_s8_bb0.4_bvoh_0.3mm.inst.cfg @@ -0,0 +1,37 @@ +[general] +definition = ultimaker_s8 +name = Extra Fast - Experimental +version = 4 + +[metadata] +is_experimental = True +material = generic_bvoh +quality_type = verydraft +setting_version = 25 +type = quality +variant = BB 0.4 +weight = -3 + +[values] +acceleration_prime_tower = 1500 +acceleration_support = 1500 +brim_replaces_support = False +build_volume_temperature = =70 if extruders_enabled_count > 1 else 35 +cool_fan_enabled = =not (support_enable and (extruder_nr == support_infill_extruder_nr)) +default_material_bed_temperature = =0 if extruders_enabled_count > 1 else 60 +initial_layer_line_width_factor = 150 +jerk_prime_tower = 4000 +jerk_support = 4000 +material_print_temperature = =default_material_print_temperature - 5 +minimum_support_area = 4 +retraction_amount = 6.5 +retraction_count_max = 5 +skirt_brim_minimal_length = =min(2000, 175 / (layer_height * line_width)) +speed_prime_tower = 50 +speed_support = 50 +speed_support_interface = 50 +support_bottom_density = 70 +support_infill_sparse_thickness = 0.3 +support_interface_enable = True +support_z_distance = 0 + diff --git a/resources/quality/ultimaker_s8/um_s8_bb0.8_bvoh_0.2mm.inst.cfg b/resources/quality/ultimaker_s8/um_s8_bb0.8_bvoh_0.2mm.inst.cfg new file mode 100644 index 0000000000..9a8e2a51c4 --- /dev/null +++ b/resources/quality/ultimaker_s8/um_s8_bb0.8_bvoh_0.2mm.inst.cfg @@ -0,0 +1,34 @@ +[general] +definition = ultimaker_s8 +name = Fast +version = 4 + +[metadata] +material = generic_bvoh +quality_type = draft +setting_version = 25 +type = quality +variant = BB 0.8 +weight = -2 + +[values] +acceleration_prime_tower = 1500 +acceleration_support = 1500 +brim_replaces_support = False +build_volume_temperature = =70 if extruders_enabled_count > 1 else 35 +cool_fan_enabled = =not (support_enable and (extruder_nr == support_infill_extruder_nr)) +default_material_bed_temperature = =0 if extruders_enabled_count > 1 else 60 +initial_layer_line_width_factor = 150 +jerk_prime_tower = 4000 +jerk_support = 4000 +minimum_support_area = 4 +retraction_amount = 6.5 +retraction_count_max = 5 +skirt_brim_minimal_length = =min(2000, 175 / (layer_height * line_width)) +speed_prime_tower = 50 +speed_support = 50 +speed_support_interface = 50 +support_bottom_density = 70 +support_interface_enable = True +support_z_distance = 0 + diff --git a/resources/quality/ultimaker_s8/um_s8_bb0.8_bvoh_0.3mm.inst.cfg b/resources/quality/ultimaker_s8/um_s8_bb0.8_bvoh_0.3mm.inst.cfg new file mode 100644 index 0000000000..f325937cb9 --- /dev/null +++ b/resources/quality/ultimaker_s8/um_s8_bb0.8_bvoh_0.3mm.inst.cfg @@ -0,0 +1,36 @@ +[general] +definition = ultimaker_s8 +name = Extra Fast +version = 4 + +[metadata] +material = generic_bvoh +quality_type = verydraft +setting_version = 25 +type = quality +variant = BB 0.8 +weight = -3 + +[values] +acceleration_prime_tower = 1500 +acceleration_support = 1500 +brim_replaces_support = False +build_volume_temperature = =70 if extruders_enabled_count > 1 else 35 +cool_fan_enabled = =not (support_enable and (extruder_nr == support_infill_extruder_nr)) +default_material_bed_temperature = =0 if extruders_enabled_count > 1 else 60 +initial_layer_line_width_factor = 150 +jerk_prime_tower = 4000 +jerk_support = 4000 +material_print_temperature = =default_material_print_temperature + 5 +minimum_support_area = 4 +retraction_amount = 6.5 +retraction_count_max = 5 +skirt_brim_minimal_length = =min(2000, 175 / (layer_height * line_width)) +speed_prime_tower = 50 +speed_support = 50 +speed_support_interface = 50 +support_bottom_density = 70 +support_infill_sparse_thickness = 0.3 +support_interface_enable = True +support_z_distance = 0 + diff --git a/resources/quality/ultimaker_s8/um_s8_bb0.8_bvoh_0.4mm.inst.cfg b/resources/quality/ultimaker_s8/um_s8_bb0.8_bvoh_0.4mm.inst.cfg new file mode 100644 index 0000000000..e26028fdc1 --- /dev/null +++ b/resources/quality/ultimaker_s8/um_s8_bb0.8_bvoh_0.4mm.inst.cfg @@ -0,0 +1,35 @@ +[general] +definition = ultimaker_s8 +name = Sprint +version = 4 + +[metadata] +material = generic_bvoh +quality_type = superdraft +setting_version = 25 +type = quality +variant = BB 0.8 +weight = -4 + +[values] +acceleration_prime_tower = 1500 +acceleration_support = 1500 +brim_replaces_support = False +build_volume_temperature = =70 if extruders_enabled_count > 1 else 35 +cool_fan_enabled = =not (support_enable and (extruder_nr == support_infill_extruder_nr)) +default_material_bed_temperature = =0 if extruders_enabled_count > 1 else 60 +initial_layer_line_width_factor = 150 +jerk_prime_tower = 4000 +jerk_support = 4000 +material_print_temperature = =default_material_print_temperature + 5 +minimum_support_area = 4 +retraction_amount = 6.5 +retraction_count_max = 5 +skirt_brim_minimal_length = =min(2000, 175 / (layer_height * line_width)) +speed_prime_tower = 50 +speed_support = 50 +speed_support_interface = 50 +support_bottom_density = 70 +support_interface_enable = True +support_z_distance = 0 + From 0c408cb43cc2a9626597f033af9110c598d14f03 Mon Sep 17 00:00:00 2001 From: Frederic Meeuwissen <13856291+Frederic98@users.noreply.github.com> Date: Thu, 26 Jun 2025 16:21:03 +0200 Subject: [PATCH 09/26] [PP-574] Add BVOH profiles --- .../um_f4_bb0.4_bvoh_0.15mm.inst.cfg | 43 ++++++++++++++++++ .../um_f4_bb0.4_bvoh_0.1mm.inst.cfg | 43 ++++++++++++++++++ .../um_f4_bb0.4_bvoh_0.2mm.inst.cfg | 43 ++++++++++++++++++ .../um_f4_bb0.4_bvoh_0.3mm.inst.cfg | 44 +++++++++++++++++++ .../um_f4_bb0.8_bvoh_0.2mm.inst.cfg | 43 ++++++++++++++++++ .../um_f4_bb0.8_bvoh_0.3mm.inst.cfg | 43 ++++++++++++++++++ .../um_f4_bb0.8_bvoh_0.4mm.inst.cfg | 43 ++++++++++++++++++ .../um_s3_bb0.4_bvoh_0.15mm.inst.cfg | 35 +++++++++++++++ .../um_s3_bb0.4_bvoh_0.1mm.inst.cfg | 36 +++++++++++++++ .../um_s3_bb0.4_bvoh_0.2mm.inst.cfg | 35 +++++++++++++++ .../um_s3_bb0.4_bvoh_0.3mm.inst.cfg | 37 ++++++++++++++++ .../um_s3_bb0.8_bvoh_0.2mm.inst.cfg | 34 ++++++++++++++ .../um_s3_bb0.8_bvoh_0.3mm.inst.cfg | 36 +++++++++++++++ .../um_s3_bb0.8_bvoh_0.4mm.inst.cfg | 35 +++++++++++++++ .../um_s5_bb0.4_bvoh_0.15mm.inst.cfg | 35 +++++++++++++++ .../um_s5_bb0.4_bvoh_0.1mm.inst.cfg | 36 +++++++++++++++ .../um_s5_bb0.4_bvoh_0.2mm.inst.cfg | 35 +++++++++++++++ .../um_s5_bb0.4_bvoh_0.3mm.inst.cfg | 37 ++++++++++++++++ .../um_s5_bb0.8_bvoh_0.2mm.inst.cfg | 34 ++++++++++++++ .../um_s5_bb0.8_bvoh_0.3mm.inst.cfg | 36 +++++++++++++++ .../um_s5_bb0.8_bvoh_0.4mm.inst.cfg | 35 +++++++++++++++ .../um_s8_bb0.4_bvoh_0.15mm.inst.cfg | 35 +++++++++++++++ .../um_s8_bb0.4_bvoh_0.1mm.inst.cfg | 36 +++++++++++++++ .../um_s8_bb0.4_bvoh_0.2mm.inst.cfg | 35 +++++++++++++++ .../um_s8_bb0.4_bvoh_0.3mm.inst.cfg | 37 ++++++++++++++++ .../um_s8_bb0.8_bvoh_0.2mm.inst.cfg | 34 ++++++++++++++ .../um_s8_bb0.8_bvoh_0.3mm.inst.cfg | 36 +++++++++++++++ .../um_s8_bb0.8_bvoh_0.4mm.inst.cfg | 35 +++++++++++++++ 28 files changed, 1046 insertions(+) create mode 100644 resources/quality/ultimaker_factor4/um_f4_bb0.4_bvoh_0.15mm.inst.cfg create mode 100644 resources/quality/ultimaker_factor4/um_f4_bb0.4_bvoh_0.1mm.inst.cfg create mode 100644 resources/quality/ultimaker_factor4/um_f4_bb0.4_bvoh_0.2mm.inst.cfg create mode 100644 resources/quality/ultimaker_factor4/um_f4_bb0.4_bvoh_0.3mm.inst.cfg create mode 100644 resources/quality/ultimaker_factor4/um_f4_bb0.8_bvoh_0.2mm.inst.cfg create mode 100644 resources/quality/ultimaker_factor4/um_f4_bb0.8_bvoh_0.3mm.inst.cfg create mode 100644 resources/quality/ultimaker_factor4/um_f4_bb0.8_bvoh_0.4mm.inst.cfg create mode 100644 resources/quality/ultimaker_s3/um_s3_bb0.4_bvoh_0.15mm.inst.cfg create mode 100644 resources/quality/ultimaker_s3/um_s3_bb0.4_bvoh_0.1mm.inst.cfg create mode 100644 resources/quality/ultimaker_s3/um_s3_bb0.4_bvoh_0.2mm.inst.cfg create mode 100644 resources/quality/ultimaker_s3/um_s3_bb0.4_bvoh_0.3mm.inst.cfg create mode 100644 resources/quality/ultimaker_s3/um_s3_bb0.8_bvoh_0.2mm.inst.cfg create mode 100644 resources/quality/ultimaker_s3/um_s3_bb0.8_bvoh_0.3mm.inst.cfg create mode 100644 resources/quality/ultimaker_s3/um_s3_bb0.8_bvoh_0.4mm.inst.cfg create mode 100644 resources/quality/ultimaker_s5/um_s5_bb0.4_bvoh_0.15mm.inst.cfg create mode 100644 resources/quality/ultimaker_s5/um_s5_bb0.4_bvoh_0.1mm.inst.cfg create mode 100644 resources/quality/ultimaker_s5/um_s5_bb0.4_bvoh_0.2mm.inst.cfg create mode 100644 resources/quality/ultimaker_s5/um_s5_bb0.4_bvoh_0.3mm.inst.cfg create mode 100644 resources/quality/ultimaker_s5/um_s5_bb0.8_bvoh_0.2mm.inst.cfg create mode 100644 resources/quality/ultimaker_s5/um_s5_bb0.8_bvoh_0.3mm.inst.cfg create mode 100644 resources/quality/ultimaker_s5/um_s5_bb0.8_bvoh_0.4mm.inst.cfg create mode 100644 resources/quality/ultimaker_s8/um_s8_bb0.4_bvoh_0.15mm.inst.cfg create mode 100644 resources/quality/ultimaker_s8/um_s8_bb0.4_bvoh_0.1mm.inst.cfg create mode 100644 resources/quality/ultimaker_s8/um_s8_bb0.4_bvoh_0.2mm.inst.cfg create mode 100644 resources/quality/ultimaker_s8/um_s8_bb0.4_bvoh_0.3mm.inst.cfg create mode 100644 resources/quality/ultimaker_s8/um_s8_bb0.8_bvoh_0.2mm.inst.cfg create mode 100644 resources/quality/ultimaker_s8/um_s8_bb0.8_bvoh_0.3mm.inst.cfg create mode 100644 resources/quality/ultimaker_s8/um_s8_bb0.8_bvoh_0.4mm.inst.cfg diff --git a/resources/quality/ultimaker_factor4/um_f4_bb0.4_bvoh_0.15mm.inst.cfg b/resources/quality/ultimaker_factor4/um_f4_bb0.4_bvoh_0.15mm.inst.cfg new file mode 100644 index 0000000000..c6548f0173 --- /dev/null +++ b/resources/quality/ultimaker_factor4/um_f4_bb0.4_bvoh_0.15mm.inst.cfg @@ -0,0 +1,43 @@ +[general] +definition = ultimaker_factor4 +name = Normal +version = 4 + +[metadata] +material = generic_bvoh +quality_type = fast +setting_version = 25 +type = quality +variant = BB 0.4 +weight = -1 + +[values] +acceleration_print = 1000.0 +acceleration_support_bottom = 100 +acceleration_support_interface = 1000 +brim_replaces_support = False +build_volume_temperature = =40 if extruders_enabled_count > 1 else 35 +default_material_bed_temperature = =0 if extruders_enabled_count > 1 else 60 +gradual_flow_discretisation_step_size = 0.1 +gradual_flow_enabled = True +gradual_support_infill_steps = 0 +initial_layer_line_width_factor = 125 +jerk_print = 10 +material_flow_layer_0 = 90 +max_flow_acceleration = 1 +minimum_support_area = 4 +prime_tower_flow = 90 +prime_tower_min_volume = 15 +retraction_min_travel = 5.0 +retraction_prime_speed = 10.0 +skin_material_flow = =material_flow * 0.93 +speed_print = 30 +support_angle = 45 +support_infill_rate = 20 +support_infill_sparse_thickness = =min(layer_height * 2, machine_nozzle_size * 3 / 4) if layer_height <= 0.15 / 0.4 * machine_nozzle_size else layer_height +support_interface_offset = 1 +support_offset = 3 +support_xy_distance = 2 +support_z_distance = 0 +switch_extruder_prime_speed = 10.0 + diff --git a/resources/quality/ultimaker_factor4/um_f4_bb0.4_bvoh_0.1mm.inst.cfg b/resources/quality/ultimaker_factor4/um_f4_bb0.4_bvoh_0.1mm.inst.cfg new file mode 100644 index 0000000000..6f1b986c4e --- /dev/null +++ b/resources/quality/ultimaker_factor4/um_f4_bb0.4_bvoh_0.1mm.inst.cfg @@ -0,0 +1,43 @@ +[general] +definition = ultimaker_factor4 +name = Fine +version = 4 + +[metadata] +material = generic_bvoh +quality_type = normal +setting_version = 25 +type = quality +variant = BB 0.4 +weight = 0 + +[values] +acceleration_print = 1000.0 +acceleration_support_bottom = 100 +acceleration_support_interface = 1000 +brim_replaces_support = False +build_volume_temperature = =40 if extruders_enabled_count > 1 else 35 +default_material_bed_temperature = =0 if extruders_enabled_count > 1 else 60 +gradual_flow_discretisation_step_size = 0.1 +gradual_flow_enabled = True +gradual_support_infill_steps = 0 +initial_layer_line_width_factor = 125 +jerk_print = 10 +material_flow_layer_0 = 90 +max_flow_acceleration = 1 +minimum_support_area = 4 +prime_tower_flow = 90 +prime_tower_min_volume = 15 +retraction_min_travel = 5.0 +retraction_prime_speed = 10.0 +skin_material_flow = =material_flow * 0.93 +speed_print = 30 +support_angle = 45 +support_infill_rate = 20 +support_infill_sparse_thickness = =min(layer_height * 2, machine_nozzle_size * 3 / 4) if layer_height <= 0.15 / 0.4 * machine_nozzle_size else layer_height +support_interface_offset = 1 +support_offset = 3 +support_xy_distance = 2 +support_z_distance = 0 +switch_extruder_prime_speed = 10.0 + diff --git a/resources/quality/ultimaker_factor4/um_f4_bb0.4_bvoh_0.2mm.inst.cfg b/resources/quality/ultimaker_factor4/um_f4_bb0.4_bvoh_0.2mm.inst.cfg new file mode 100644 index 0000000000..ff49315c1e --- /dev/null +++ b/resources/quality/ultimaker_factor4/um_f4_bb0.4_bvoh_0.2mm.inst.cfg @@ -0,0 +1,43 @@ +[general] +definition = ultimaker_factor4 +name = Fast +version = 4 + +[metadata] +material = generic_bvoh +quality_type = draft +setting_version = 25 +type = quality +variant = BB 0.4 +weight = -2 + +[values] +acceleration_print = 1000.0 +acceleration_support_bottom = 100 +acceleration_support_interface = 1000 +brim_replaces_support = False +build_volume_temperature = =40 if extruders_enabled_count > 1 else 35 +default_material_bed_temperature = =0 if extruders_enabled_count > 1 else 60 +gradual_flow_discretisation_step_size = 0.1 +gradual_flow_enabled = True +gradual_support_infill_steps = 0 +initial_layer_line_width_factor = 125 +jerk_print = 10 +material_flow_layer_0 = 90 +max_flow_acceleration = 1 +minimum_support_area = 4 +prime_tower_flow = 90 +prime_tower_min_volume = 15 +retraction_min_travel = 5.0 +retraction_prime_speed = 10.0 +skin_material_flow = =material_flow * 0.93 +speed_print = 30 +support_angle = 45 +support_infill_rate = 20 +support_infill_sparse_thickness = =min(layer_height * 2, machine_nozzle_size * 3 / 4) if layer_height <= 0.15 / 0.4 * machine_nozzle_size else layer_height +support_interface_offset = 1 +support_offset = 3 +support_xy_distance = 2 +support_z_distance = 0 +switch_extruder_prime_speed = 10.0 + diff --git a/resources/quality/ultimaker_factor4/um_f4_bb0.4_bvoh_0.3mm.inst.cfg b/resources/quality/ultimaker_factor4/um_f4_bb0.4_bvoh_0.3mm.inst.cfg new file mode 100644 index 0000000000..209b16b697 --- /dev/null +++ b/resources/quality/ultimaker_factor4/um_f4_bb0.4_bvoh_0.3mm.inst.cfg @@ -0,0 +1,44 @@ +[general] +definition = ultimaker_factor4 +name = Extra Fast - Experimental +version = 4 + +[metadata] +is_experimental = True +material = generic_bvoh +quality_type = verydraft +setting_version = 25 +type = quality +variant = BB 0.4 +weight = -3 + +[values] +acceleration_print = 1000.0 +acceleration_support_bottom = 100 +acceleration_support_interface = 1000 +brim_replaces_support = False +build_volume_temperature = =40 if extruders_enabled_count > 1 else 35 +default_material_bed_temperature = =0 if extruders_enabled_count > 1 else 60 +gradual_flow_discretisation_step_size = 0.1 +gradual_flow_enabled = True +gradual_support_infill_steps = 0 +initial_layer_line_width_factor = 125 +jerk_print = 10 +material_flow_layer_0 = 90 +max_flow_acceleration = 1 +minimum_support_area = 4 +prime_tower_flow = 90 +prime_tower_min_volume = 15 +retraction_min_travel = 5.0 +retraction_prime_speed = 10.0 +skin_material_flow = =material_flow * 0.93 +speed_print = 30 +support_angle = 45 +support_infill_rate = 20 +support_infill_sparse_thickness = =min(layer_height * 2, machine_nozzle_size * 3 / 4) if layer_height <= 0.15 / 0.4 * machine_nozzle_size else layer_height +support_interface_offset = 1 +support_offset = 3 +support_xy_distance = 2 +support_z_distance = 0 +switch_extruder_prime_speed = 10.0 + diff --git a/resources/quality/ultimaker_factor4/um_f4_bb0.8_bvoh_0.2mm.inst.cfg b/resources/quality/ultimaker_factor4/um_f4_bb0.8_bvoh_0.2mm.inst.cfg new file mode 100644 index 0000000000..d10b0c939e --- /dev/null +++ b/resources/quality/ultimaker_factor4/um_f4_bb0.8_bvoh_0.2mm.inst.cfg @@ -0,0 +1,43 @@ +[general] +definition = ultimaker_factor4 +name = Fast +version = 4 + +[metadata] +material = generic_bvoh +quality_type = draft +setting_version = 25 +type = quality +variant = BB 0.8 +weight = -2 + +[values] +acceleration_print = 1000.0 +acceleration_support_bottom = 100 +acceleration_support_interface = 1000 +brim_replaces_support = False +build_volume_temperature = =40 if extruders_enabled_count > 1 else 35 +default_material_bed_temperature = =0 if extruders_enabled_count > 1 else 60 +gradual_flow_discretisation_step_size = 0.1 +gradual_flow_enabled = True +gradual_support_infill_steps = 0 +initial_layer_line_width_factor = 125 +jerk_print = 10 +material_flow_layer_0 = 90 +max_flow_acceleration = 1 +minimum_support_area = 4 +prime_tower_flow = 90 +prime_tower_min_volume = 15 +retraction_min_travel = 5.0 +retraction_prime_speed = 10.0 +skin_material_flow = =material_flow * 0.93 +speed_print = 30 +support_angle = 45 +support_infill_rate = 20 +support_infill_sparse_thickness = =min(layer_height * 2, machine_nozzle_size * 3 / 4) if layer_height <= 0.15 / 0.4 * machine_nozzle_size else layer_height +support_interface_offset = 1 +support_offset = 3 +support_xy_distance = 2 +support_z_distance = 0 +switch_extruder_prime_speed = 10.0 + diff --git a/resources/quality/ultimaker_factor4/um_f4_bb0.8_bvoh_0.3mm.inst.cfg b/resources/quality/ultimaker_factor4/um_f4_bb0.8_bvoh_0.3mm.inst.cfg new file mode 100644 index 0000000000..dd2e2da565 --- /dev/null +++ b/resources/quality/ultimaker_factor4/um_f4_bb0.8_bvoh_0.3mm.inst.cfg @@ -0,0 +1,43 @@ +[general] +definition = ultimaker_factor4 +name = Extra Fast +version = 4 + +[metadata] +material = generic_bvoh +quality_type = verydraft +setting_version = 25 +type = quality +variant = BB 0.8 +weight = -3 + +[values] +acceleration_print = 1000.0 +acceleration_support_bottom = 100 +acceleration_support_interface = 1000 +brim_replaces_support = False +build_volume_temperature = =40 if extruders_enabled_count > 1 else 35 +default_material_bed_temperature = =0 if extruders_enabled_count > 1 else 60 +gradual_flow_discretisation_step_size = 0.1 +gradual_flow_enabled = True +gradual_support_infill_steps = 0 +initial_layer_line_width_factor = 125 +jerk_print = 10 +material_flow_layer_0 = 90 +max_flow_acceleration = 1 +minimum_support_area = 4 +prime_tower_flow = 90 +prime_tower_min_volume = 15 +retraction_min_travel = 5.0 +retraction_prime_speed = 10.0 +skin_material_flow = =material_flow * 0.93 +speed_print = 30 +support_angle = 45 +support_infill_rate = 20 +support_infill_sparse_thickness = =min(layer_height * 2, machine_nozzle_size * 3 / 4) if layer_height <= 0.15 / 0.4 * machine_nozzle_size else layer_height +support_interface_offset = 1 +support_offset = 3 +support_xy_distance = 2 +support_z_distance = 0 +switch_extruder_prime_speed = 10.0 + diff --git a/resources/quality/ultimaker_factor4/um_f4_bb0.8_bvoh_0.4mm.inst.cfg b/resources/quality/ultimaker_factor4/um_f4_bb0.8_bvoh_0.4mm.inst.cfg new file mode 100644 index 0000000000..fa230a1f5f --- /dev/null +++ b/resources/quality/ultimaker_factor4/um_f4_bb0.8_bvoh_0.4mm.inst.cfg @@ -0,0 +1,43 @@ +[general] +definition = ultimaker_factor4 +name = Sprint +version = 4 + +[metadata] +material = generic_bvoh +quality_type = superdraft +setting_version = 25 +type = quality +variant = BB 0.8 +weight = -4 + +[values] +acceleration_print = 1000.0 +acceleration_support_bottom = 100 +acceleration_support_interface = 1000 +brim_replaces_support = False +build_volume_temperature = =40 if extruders_enabled_count > 1 else 35 +default_material_bed_temperature = =0 if extruders_enabled_count > 1 else 60 +gradual_flow_discretisation_step_size = 0.1 +gradual_flow_enabled = True +gradual_support_infill_steps = 0 +initial_layer_line_width_factor = 125 +jerk_print = 10 +material_flow_layer_0 = 90 +max_flow_acceleration = 1 +minimum_support_area = 4 +prime_tower_flow = 90 +prime_tower_min_volume = 15 +retraction_min_travel = 5.0 +retraction_prime_speed = 10.0 +skin_material_flow = =material_flow * 0.93 +speed_print = 30 +support_angle = 45 +support_infill_rate = 20 +support_infill_sparse_thickness = =min(layer_height * 2, machine_nozzle_size * 3 / 4) if layer_height <= 0.15 / 0.4 * machine_nozzle_size else layer_height +support_interface_offset = 1 +support_offset = 3 +support_xy_distance = 2 +support_z_distance = 0 +switch_extruder_prime_speed = 10.0 + diff --git a/resources/quality/ultimaker_s3/um_s3_bb0.4_bvoh_0.15mm.inst.cfg b/resources/quality/ultimaker_s3/um_s3_bb0.4_bvoh_0.15mm.inst.cfg new file mode 100644 index 0000000000..93c1d4947d --- /dev/null +++ b/resources/quality/ultimaker_s3/um_s3_bb0.4_bvoh_0.15mm.inst.cfg @@ -0,0 +1,35 @@ +[general] +definition = ultimaker_s3 +name = Normal +version = 4 + +[metadata] +material = generic_bvoh +quality_type = fast +setting_version = 25 +type = quality +variant = BB 0.4 +weight = -1 + +[values] +acceleration_prime_tower = 1500 +acceleration_support = 1500 +brim_replaces_support = False +build_volume_temperature = =70 if extruders_enabled_count > 1 else 35 +cool_fan_enabled = =not (support_enable and (extruder_nr == support_infill_extruder_nr)) +default_material_bed_temperature = =0 if extruders_enabled_count > 1 else 60 +initial_layer_line_width_factor = 150 +jerk_prime_tower = 20 +jerk_support = 20 +minimum_support_area = 4 +retraction_amount = 6.5 +retraction_count_max = 5 +skirt_brim_minimal_length = =min(2000, 175 / (layer_height * line_width)) +speed_prime_tower = 50 +speed_support = 50 +speed_support_interface = 50 +support_bottom_density = 70 +support_infill_sparse_thickness = =2 * layer_height +support_interface_enable = True +support_z_distance = 0 + diff --git a/resources/quality/ultimaker_s3/um_s3_bb0.4_bvoh_0.1mm.inst.cfg b/resources/quality/ultimaker_s3/um_s3_bb0.4_bvoh_0.1mm.inst.cfg new file mode 100644 index 0000000000..f06f8deb6f --- /dev/null +++ b/resources/quality/ultimaker_s3/um_s3_bb0.4_bvoh_0.1mm.inst.cfg @@ -0,0 +1,36 @@ +[general] +definition = ultimaker_s3 +name = Fine +version = 4 + +[metadata] +material = generic_bvoh +quality_type = normal +setting_version = 25 +type = quality +variant = BB 0.4 +weight = 0 + +[values] +acceleration_prime_tower = 1500 +acceleration_support = 1500 +brim_replaces_support = False +build_volume_temperature = =70 if extruders_enabled_count > 1 else 35 +cool_fan_enabled = =not (support_enable and (extruder_nr == support_infill_extruder_nr)) +default_material_bed_temperature = =0 if extruders_enabled_count > 1 else 60 +initial_layer_line_width_factor = 150 +jerk_prime_tower = 20 +jerk_support = 20 +material_print_temperature = =default_material_print_temperature - 5 +minimum_support_area = 4 +retraction_amount = 6.5 +retraction_count_max = 5 +skirt_brim_minimal_length = =min(2000, 175 / (layer_height * line_width)) +speed_prime_tower = 50 +speed_support = 50 +speed_support_interface = 50 +support_bottom_density = 70 +support_infill_sparse_thickness = =2 * layer_height +support_interface_enable = True +support_z_distance = 0 + diff --git a/resources/quality/ultimaker_s3/um_s3_bb0.4_bvoh_0.2mm.inst.cfg b/resources/quality/ultimaker_s3/um_s3_bb0.4_bvoh_0.2mm.inst.cfg new file mode 100644 index 0000000000..61059651ef --- /dev/null +++ b/resources/quality/ultimaker_s3/um_s3_bb0.4_bvoh_0.2mm.inst.cfg @@ -0,0 +1,35 @@ +[general] +definition = ultimaker_s3 +name = Fast +version = 4 + +[metadata] +material = generic_bvoh +quality_type = draft +setting_version = 25 +type = quality +variant = BB 0.4 +weight = -2 + +[values] +acceleration_prime_tower = 1500 +acceleration_support = 1500 +brim_replaces_support = False +build_volume_temperature = =70 if extruders_enabled_count > 1 else 35 +cool_fan_enabled = =not (support_enable and (extruder_nr == support_infill_extruder_nr)) +default_material_bed_temperature = =0 if extruders_enabled_count > 1 else 60 +initial_layer_line_width_factor = 150 +jerk_prime_tower = 20 +jerk_support = 20 +material_print_temperature = =default_material_print_temperature + 5 +minimum_support_area = 4 +retraction_amount = 6.5 +retraction_count_max = 5 +skirt_brim_minimal_length = =min(2000, 175 / (layer_height * line_width)) +speed_prime_tower = 50 +speed_support = 50 +speed_support_interface = 50 +support_bottom_density = 70 +support_interface_enable = True +support_z_distance = 0 + diff --git a/resources/quality/ultimaker_s3/um_s3_bb0.4_bvoh_0.3mm.inst.cfg b/resources/quality/ultimaker_s3/um_s3_bb0.4_bvoh_0.3mm.inst.cfg new file mode 100644 index 0000000000..8f06dd0562 --- /dev/null +++ b/resources/quality/ultimaker_s3/um_s3_bb0.4_bvoh_0.3mm.inst.cfg @@ -0,0 +1,37 @@ +[general] +definition = ultimaker_s3 +name = Extra Fast - Experimental +version = 4 + +[metadata] +is_experimental = True +material = generic_bvoh +quality_type = verydraft +setting_version = 25 +type = quality +variant = BB 0.4 +weight = -3 + +[values] +acceleration_prime_tower = 1500 +acceleration_support = 1500 +brim_replaces_support = False +build_volume_temperature = =70 if extruders_enabled_count > 1 else 35 +cool_fan_enabled = =not (support_enable and (extruder_nr == support_infill_extruder_nr)) +default_material_bed_temperature = =0 if extruders_enabled_count > 1 else 60 +initial_layer_line_width_factor = 150 +jerk_prime_tower = 20 +jerk_support = 20 +material_print_temperature = =default_material_print_temperature - 5 +minimum_support_area = 4 +retraction_amount = 6.5 +retraction_count_max = 5 +skirt_brim_minimal_length = =min(2000, 175 / (layer_height * line_width)) +speed_prime_tower = 50 +speed_support = 50 +speed_support_interface = 50 +support_bottom_density = 70 +support_infill_sparse_thickness = 0.3 +support_interface_enable = True +support_z_distance = 0 + diff --git a/resources/quality/ultimaker_s3/um_s3_bb0.8_bvoh_0.2mm.inst.cfg b/resources/quality/ultimaker_s3/um_s3_bb0.8_bvoh_0.2mm.inst.cfg new file mode 100644 index 0000000000..a9d67b0552 --- /dev/null +++ b/resources/quality/ultimaker_s3/um_s3_bb0.8_bvoh_0.2mm.inst.cfg @@ -0,0 +1,34 @@ +[general] +definition = ultimaker_s3 +name = Fast +version = 4 + +[metadata] +material = generic_bvoh +quality_type = draft +setting_version = 25 +type = quality +variant = BB 0.8 +weight = -2 + +[values] +acceleration_prime_tower = 1500 +acceleration_support = 1500 +brim_replaces_support = False +build_volume_temperature = =70 if extruders_enabled_count > 1 else 35 +cool_fan_enabled = =not (support_enable and (extruder_nr == support_infill_extruder_nr)) +default_material_bed_temperature = =0 if extruders_enabled_count > 1 else 60 +initial_layer_line_width_factor = 150 +jerk_prime_tower = 20 +jerk_support = 20 +minimum_support_area = 4 +retraction_amount = 6.5 +retraction_count_max = 5 +skirt_brim_minimal_length = =min(2000, 175 / (layer_height * line_width)) +speed_prime_tower = 50 +speed_support = 50 +speed_support_interface = 50 +support_bottom_density = 70 +support_interface_enable = True +support_z_distance = 0 + diff --git a/resources/quality/ultimaker_s3/um_s3_bb0.8_bvoh_0.3mm.inst.cfg b/resources/quality/ultimaker_s3/um_s3_bb0.8_bvoh_0.3mm.inst.cfg new file mode 100644 index 0000000000..016887c23c --- /dev/null +++ b/resources/quality/ultimaker_s3/um_s3_bb0.8_bvoh_0.3mm.inst.cfg @@ -0,0 +1,36 @@ +[general] +definition = ultimaker_s3 +name = Extra Fast +version = 4 + +[metadata] +material = generic_bvoh +quality_type = verydraft +setting_version = 25 +type = quality +variant = BB 0.8 +weight = -3 + +[values] +acceleration_prime_tower = 1500 +acceleration_support = 1500 +brim_replaces_support = False +build_volume_temperature = =70 if extruders_enabled_count > 1 else 35 +cool_fan_enabled = =not (support_enable and (extruder_nr == support_infill_extruder_nr)) +default_material_bed_temperature = =0 if extruders_enabled_count > 1 else 60 +initial_layer_line_width_factor = 150 +jerk_prime_tower = 20 +jerk_support = 20 +material_print_temperature = =default_material_print_temperature + 5 +minimum_support_area = 4 +retraction_amount = 6.5 +retraction_count_max = 5 +skirt_brim_minimal_length = =min(2000, 175 / (layer_height * line_width)) +speed_prime_tower = 50 +speed_support = 50 +speed_support_interface = 50 +support_bottom_density = 70 +support_infill_sparse_thickness = 0.3 +support_interface_enable = True +support_z_distance = 0 + diff --git a/resources/quality/ultimaker_s3/um_s3_bb0.8_bvoh_0.4mm.inst.cfg b/resources/quality/ultimaker_s3/um_s3_bb0.8_bvoh_0.4mm.inst.cfg new file mode 100644 index 0000000000..4d4bffbab9 --- /dev/null +++ b/resources/quality/ultimaker_s3/um_s3_bb0.8_bvoh_0.4mm.inst.cfg @@ -0,0 +1,35 @@ +[general] +definition = ultimaker_s3 +name = Sprint +version = 4 + +[metadata] +material = generic_bvoh +quality_type = superdraft +setting_version = 25 +type = quality +variant = BB 0.8 +weight = -4 + +[values] +acceleration_prime_tower = 1500 +acceleration_support = 1500 +brim_replaces_support = False +build_volume_temperature = =70 if extruders_enabled_count > 1 else 35 +cool_fan_enabled = =not (support_enable and (extruder_nr == support_infill_extruder_nr)) +default_material_bed_temperature = =0 if extruders_enabled_count > 1 else 60 +initial_layer_line_width_factor = 150 +jerk_prime_tower = 20 +jerk_support = 20 +material_print_temperature = =default_material_print_temperature + 5 +minimum_support_area = 4 +retraction_amount = 6.5 +retraction_count_max = 5 +skirt_brim_minimal_length = =min(2000, 175 / (layer_height * line_width)) +speed_prime_tower = 50 +speed_support = 50 +speed_support_interface = 50 +support_bottom_density = 70 +support_interface_enable = True +support_z_distance = 0 + diff --git a/resources/quality/ultimaker_s5/um_s5_bb0.4_bvoh_0.15mm.inst.cfg b/resources/quality/ultimaker_s5/um_s5_bb0.4_bvoh_0.15mm.inst.cfg new file mode 100644 index 0000000000..e5dc8e7295 --- /dev/null +++ b/resources/quality/ultimaker_s5/um_s5_bb0.4_bvoh_0.15mm.inst.cfg @@ -0,0 +1,35 @@ +[general] +definition = ultimaker_s5 +name = Normal +version = 4 + +[metadata] +material = generic_bvoh +quality_type = fast +setting_version = 25 +type = quality +variant = BB 0.4 +weight = -1 + +[values] +acceleration_prime_tower = 1500 +acceleration_support = 1500 +brim_replaces_support = False +build_volume_temperature = =70 if extruders_enabled_count > 1 else 35 +cool_fan_enabled = =not (support_enable and (extruder_nr == support_infill_extruder_nr)) +default_material_bed_temperature = =0 if extruders_enabled_count > 1 else 60 +initial_layer_line_width_factor = 150 +jerk_prime_tower = 20 +jerk_support = 20 +minimum_support_area = 4 +retraction_amount = 6.5 +retraction_count_max = 5 +skirt_brim_minimal_length = =min(2000, 175 / (layer_height * line_width)) +speed_prime_tower = 50 +speed_support = 50 +speed_support_interface = 50 +support_bottom_density = 70 +support_infill_sparse_thickness = =2 * layer_height +support_interface_enable = True +support_z_distance = 0 + diff --git a/resources/quality/ultimaker_s5/um_s5_bb0.4_bvoh_0.1mm.inst.cfg b/resources/quality/ultimaker_s5/um_s5_bb0.4_bvoh_0.1mm.inst.cfg new file mode 100644 index 0000000000..ed7638a4e0 --- /dev/null +++ b/resources/quality/ultimaker_s5/um_s5_bb0.4_bvoh_0.1mm.inst.cfg @@ -0,0 +1,36 @@ +[general] +definition = ultimaker_s5 +name = Fine +version = 4 + +[metadata] +material = generic_bvoh +quality_type = normal +setting_version = 25 +type = quality +variant = BB 0.4 +weight = 0 + +[values] +acceleration_prime_tower = 1500 +acceleration_support = 1500 +brim_replaces_support = False +build_volume_temperature = =70 if extruders_enabled_count > 1 else 35 +cool_fan_enabled = =not (support_enable and (extruder_nr == support_infill_extruder_nr)) +default_material_bed_temperature = =0 if extruders_enabled_count > 1 else 60 +initial_layer_line_width_factor = 150 +jerk_prime_tower = 20 +jerk_support = 20 +material_print_temperature = =default_material_print_temperature - 5 +minimum_support_area = 4 +retraction_amount = 6.5 +retraction_count_max = 5 +skirt_brim_minimal_length = =min(2000, 175 / (layer_height * line_width)) +speed_prime_tower = 50 +speed_support = 50 +speed_support_interface = 50 +support_bottom_density = 70 +support_infill_sparse_thickness = =2 * layer_height +support_interface_enable = True +support_z_distance = 0 + diff --git a/resources/quality/ultimaker_s5/um_s5_bb0.4_bvoh_0.2mm.inst.cfg b/resources/quality/ultimaker_s5/um_s5_bb0.4_bvoh_0.2mm.inst.cfg new file mode 100644 index 0000000000..1d02c886bc --- /dev/null +++ b/resources/quality/ultimaker_s5/um_s5_bb0.4_bvoh_0.2mm.inst.cfg @@ -0,0 +1,35 @@ +[general] +definition = ultimaker_s5 +name = Fast +version = 4 + +[metadata] +material = generic_bvoh +quality_type = draft +setting_version = 25 +type = quality +variant = BB 0.4 +weight = -2 + +[values] +acceleration_prime_tower = 1500 +acceleration_support = 1500 +brim_replaces_support = False +build_volume_temperature = =70 if extruders_enabled_count > 1 else 35 +cool_fan_enabled = =not (support_enable and (extruder_nr == support_infill_extruder_nr)) +default_material_bed_temperature = =0 if extruders_enabled_count > 1 else 60 +initial_layer_line_width_factor = 150 +jerk_prime_tower = 20 +jerk_support = 20 +material_print_temperature = =default_material_print_temperature + 5 +minimum_support_area = 4 +retraction_amount = 6.5 +retraction_count_max = 5 +skirt_brim_minimal_length = =min(2000, 175 / (layer_height * line_width)) +speed_prime_tower = 50 +speed_support = 50 +speed_support_interface = 50 +support_bottom_density = 70 +support_interface_enable = True +support_z_distance = 0 + diff --git a/resources/quality/ultimaker_s5/um_s5_bb0.4_bvoh_0.3mm.inst.cfg b/resources/quality/ultimaker_s5/um_s5_bb0.4_bvoh_0.3mm.inst.cfg new file mode 100644 index 0000000000..b759ae0bb3 --- /dev/null +++ b/resources/quality/ultimaker_s5/um_s5_bb0.4_bvoh_0.3mm.inst.cfg @@ -0,0 +1,37 @@ +[general] +definition = ultimaker_s5 +name = Extra Fast - Experimental +version = 4 + +[metadata] +is_experimental = True +material = generic_bvoh +quality_type = verydraft +setting_version = 25 +type = quality +variant = BB 0.4 +weight = -3 + +[values] +acceleration_prime_tower = 1500 +acceleration_support = 1500 +brim_replaces_support = False +build_volume_temperature = =70 if extruders_enabled_count > 1 else 35 +cool_fan_enabled = =not (support_enable and (extruder_nr == support_infill_extruder_nr)) +default_material_bed_temperature = =0 if extruders_enabled_count > 1 else 60 +initial_layer_line_width_factor = 150 +jerk_prime_tower = 20 +jerk_support = 20 +material_print_temperature = =default_material_print_temperature - 5 +minimum_support_area = 4 +retraction_amount = 6.5 +retraction_count_max = 5 +skirt_brim_minimal_length = =min(2000, 175 / (layer_height * line_width)) +speed_prime_tower = 50 +speed_support = 50 +speed_support_interface = 50 +support_bottom_density = 70 +support_infill_sparse_thickness = 0.3 +support_interface_enable = True +support_z_distance = 0 + diff --git a/resources/quality/ultimaker_s5/um_s5_bb0.8_bvoh_0.2mm.inst.cfg b/resources/quality/ultimaker_s5/um_s5_bb0.8_bvoh_0.2mm.inst.cfg new file mode 100644 index 0000000000..58875826ad --- /dev/null +++ b/resources/quality/ultimaker_s5/um_s5_bb0.8_bvoh_0.2mm.inst.cfg @@ -0,0 +1,34 @@ +[general] +definition = ultimaker_s5 +name = Fast +version = 4 + +[metadata] +material = generic_bvoh +quality_type = draft +setting_version = 25 +type = quality +variant = BB 0.8 +weight = -2 + +[values] +acceleration_prime_tower = 1500 +acceleration_support = 1500 +brim_replaces_support = False +build_volume_temperature = =70 if extruders_enabled_count > 1 else 35 +cool_fan_enabled = =not (support_enable and (extruder_nr == support_infill_extruder_nr)) +default_material_bed_temperature = =0 if extruders_enabled_count > 1 else 60 +initial_layer_line_width_factor = 150 +jerk_prime_tower = 20 +jerk_support = 20 +minimum_support_area = 4 +retraction_amount = 6.5 +retraction_count_max = 5 +skirt_brim_minimal_length = =min(2000, 175 / (layer_height * line_width)) +speed_prime_tower = 50 +speed_support = 50 +speed_support_interface = 50 +support_bottom_density = 70 +support_interface_enable = True +support_z_distance = 0 + diff --git a/resources/quality/ultimaker_s5/um_s5_bb0.8_bvoh_0.3mm.inst.cfg b/resources/quality/ultimaker_s5/um_s5_bb0.8_bvoh_0.3mm.inst.cfg new file mode 100644 index 0000000000..74b33f5366 --- /dev/null +++ b/resources/quality/ultimaker_s5/um_s5_bb0.8_bvoh_0.3mm.inst.cfg @@ -0,0 +1,36 @@ +[general] +definition = ultimaker_s5 +name = Extra Fast +version = 4 + +[metadata] +material = generic_bvoh +quality_type = verydraft +setting_version = 25 +type = quality +variant = BB 0.8 +weight = -3 + +[values] +acceleration_prime_tower = 1500 +acceleration_support = 1500 +brim_replaces_support = False +build_volume_temperature = =70 if extruders_enabled_count > 1 else 35 +cool_fan_enabled = =not (support_enable and (extruder_nr == support_infill_extruder_nr)) +default_material_bed_temperature = =0 if extruders_enabled_count > 1 else 60 +initial_layer_line_width_factor = 150 +jerk_prime_tower = 20 +jerk_support = 20 +material_print_temperature = =default_material_print_temperature + 5 +minimum_support_area = 4 +retraction_amount = 6.5 +retraction_count_max = 5 +skirt_brim_minimal_length = =min(2000, 175 / (layer_height * line_width)) +speed_prime_tower = 50 +speed_support = 50 +speed_support_interface = 50 +support_bottom_density = 70 +support_infill_sparse_thickness = 0.3 +support_interface_enable = True +support_z_distance = 0 + diff --git a/resources/quality/ultimaker_s5/um_s5_bb0.8_bvoh_0.4mm.inst.cfg b/resources/quality/ultimaker_s5/um_s5_bb0.8_bvoh_0.4mm.inst.cfg new file mode 100644 index 0000000000..cd501dcf0e --- /dev/null +++ b/resources/quality/ultimaker_s5/um_s5_bb0.8_bvoh_0.4mm.inst.cfg @@ -0,0 +1,35 @@ +[general] +definition = ultimaker_s5 +name = Sprint +version = 4 + +[metadata] +material = generic_bvoh +quality_type = superdraft +setting_version = 25 +type = quality +variant = BB 0.8 +weight = -4 + +[values] +acceleration_prime_tower = 1500 +acceleration_support = 1500 +brim_replaces_support = False +build_volume_temperature = =70 if extruders_enabled_count > 1 else 35 +cool_fan_enabled = =not (support_enable and (extruder_nr == support_infill_extruder_nr)) +default_material_bed_temperature = =0 if extruders_enabled_count > 1 else 60 +initial_layer_line_width_factor = 150 +jerk_prime_tower = 20 +jerk_support = 20 +material_print_temperature = =default_material_print_temperature + 5 +minimum_support_area = 4 +retraction_amount = 6.5 +retraction_count_max = 5 +skirt_brim_minimal_length = =min(2000, 175 / (layer_height * line_width)) +speed_prime_tower = 50 +speed_support = 50 +speed_support_interface = 50 +support_bottom_density = 70 +support_interface_enable = True +support_z_distance = 0 + diff --git a/resources/quality/ultimaker_s8/um_s8_bb0.4_bvoh_0.15mm.inst.cfg b/resources/quality/ultimaker_s8/um_s8_bb0.4_bvoh_0.15mm.inst.cfg new file mode 100644 index 0000000000..e10db6b743 --- /dev/null +++ b/resources/quality/ultimaker_s8/um_s8_bb0.4_bvoh_0.15mm.inst.cfg @@ -0,0 +1,35 @@ +[general] +definition = ultimaker_s8 +name = Normal +version = 4 + +[metadata] +material = generic_bvoh +quality_type = fast +setting_version = 25 +type = quality +variant = BB 0.4 +weight = -1 + +[values] +acceleration_prime_tower = 1500 +acceleration_support = 1500 +brim_replaces_support = False +build_volume_temperature = =70 if extruders_enabled_count > 1 else 35 +cool_fan_enabled = =not (support_enable and (extruder_nr == support_infill_extruder_nr)) +default_material_bed_temperature = =0 if extruders_enabled_count > 1 else 60 +initial_layer_line_width_factor = 150 +jerk_prime_tower = 4000 +jerk_support = 4000 +minimum_support_area = 4 +retraction_amount = 6.5 +retraction_count_max = 5 +skirt_brim_minimal_length = =min(2000, 175 / (layer_height * line_width)) +speed_prime_tower = 50 +speed_support = 50 +speed_support_interface = 50 +support_bottom_density = 70 +support_infill_sparse_thickness = =2 * layer_height +support_interface_enable = True +support_z_distance = 0 + diff --git a/resources/quality/ultimaker_s8/um_s8_bb0.4_bvoh_0.1mm.inst.cfg b/resources/quality/ultimaker_s8/um_s8_bb0.4_bvoh_0.1mm.inst.cfg new file mode 100644 index 0000000000..9c5d0e9bd8 --- /dev/null +++ b/resources/quality/ultimaker_s8/um_s8_bb0.4_bvoh_0.1mm.inst.cfg @@ -0,0 +1,36 @@ +[general] +definition = ultimaker_s8 +name = Fine +version = 4 + +[metadata] +material = generic_bvoh +quality_type = normal +setting_version = 25 +type = quality +variant = BB 0.4 +weight = 0 + +[values] +acceleration_prime_tower = 1500 +acceleration_support = 1500 +brim_replaces_support = False +build_volume_temperature = =70 if extruders_enabled_count > 1 else 35 +cool_fan_enabled = =not (support_enable and (extruder_nr == support_infill_extruder_nr)) +default_material_bed_temperature = =0 if extruders_enabled_count > 1 else 60 +initial_layer_line_width_factor = 150 +jerk_prime_tower = 4000 +jerk_support = 4000 +material_print_temperature = =default_material_print_temperature - 5 +minimum_support_area = 4 +retraction_amount = 6.5 +retraction_count_max = 5 +skirt_brim_minimal_length = =min(2000, 175 / (layer_height * line_width)) +speed_prime_tower = 50 +speed_support = 50 +speed_support_interface = 50 +support_bottom_density = 70 +support_infill_sparse_thickness = =2 * layer_height +support_interface_enable = True +support_z_distance = 0 + diff --git a/resources/quality/ultimaker_s8/um_s8_bb0.4_bvoh_0.2mm.inst.cfg b/resources/quality/ultimaker_s8/um_s8_bb0.4_bvoh_0.2mm.inst.cfg new file mode 100644 index 0000000000..8f4c52d7b5 --- /dev/null +++ b/resources/quality/ultimaker_s8/um_s8_bb0.4_bvoh_0.2mm.inst.cfg @@ -0,0 +1,35 @@ +[general] +definition = ultimaker_s8 +name = Fast +version = 4 + +[metadata] +material = generic_bvoh +quality_type = draft +setting_version = 25 +type = quality +variant = BB 0.4 +weight = -2 + +[values] +acceleration_prime_tower = 1500 +acceleration_support = 1500 +brim_replaces_support = False +build_volume_temperature = =70 if extruders_enabled_count > 1 else 35 +cool_fan_enabled = =not (support_enable and (extruder_nr == support_infill_extruder_nr)) +default_material_bed_temperature = =0 if extruders_enabled_count > 1 else 60 +initial_layer_line_width_factor = 150 +jerk_prime_tower = 4000 +jerk_support = 4000 +material_print_temperature = =default_material_print_temperature + 5 +minimum_support_area = 4 +retraction_amount = 6.5 +retraction_count_max = 5 +skirt_brim_minimal_length = =min(2000, 175 / (layer_height * line_width)) +speed_prime_tower = 50 +speed_support = 50 +speed_support_interface = 50 +support_bottom_density = 70 +support_interface_enable = True +support_z_distance = 0 + diff --git a/resources/quality/ultimaker_s8/um_s8_bb0.4_bvoh_0.3mm.inst.cfg b/resources/quality/ultimaker_s8/um_s8_bb0.4_bvoh_0.3mm.inst.cfg new file mode 100644 index 0000000000..e37500de1a --- /dev/null +++ b/resources/quality/ultimaker_s8/um_s8_bb0.4_bvoh_0.3mm.inst.cfg @@ -0,0 +1,37 @@ +[general] +definition = ultimaker_s8 +name = Extra Fast - Experimental +version = 4 + +[metadata] +is_experimental = True +material = generic_bvoh +quality_type = verydraft +setting_version = 25 +type = quality +variant = BB 0.4 +weight = -3 + +[values] +acceleration_prime_tower = 1500 +acceleration_support = 1500 +brim_replaces_support = False +build_volume_temperature = =70 if extruders_enabled_count > 1 else 35 +cool_fan_enabled = =not (support_enable and (extruder_nr == support_infill_extruder_nr)) +default_material_bed_temperature = =0 if extruders_enabled_count > 1 else 60 +initial_layer_line_width_factor = 150 +jerk_prime_tower = 4000 +jerk_support = 4000 +material_print_temperature = =default_material_print_temperature - 5 +minimum_support_area = 4 +retraction_amount = 6.5 +retraction_count_max = 5 +skirt_brim_minimal_length = =min(2000, 175 / (layer_height * line_width)) +speed_prime_tower = 50 +speed_support = 50 +speed_support_interface = 50 +support_bottom_density = 70 +support_infill_sparse_thickness = 0.3 +support_interface_enable = True +support_z_distance = 0 + diff --git a/resources/quality/ultimaker_s8/um_s8_bb0.8_bvoh_0.2mm.inst.cfg b/resources/quality/ultimaker_s8/um_s8_bb0.8_bvoh_0.2mm.inst.cfg new file mode 100644 index 0000000000..9a8e2a51c4 --- /dev/null +++ b/resources/quality/ultimaker_s8/um_s8_bb0.8_bvoh_0.2mm.inst.cfg @@ -0,0 +1,34 @@ +[general] +definition = ultimaker_s8 +name = Fast +version = 4 + +[metadata] +material = generic_bvoh +quality_type = draft +setting_version = 25 +type = quality +variant = BB 0.8 +weight = -2 + +[values] +acceleration_prime_tower = 1500 +acceleration_support = 1500 +brim_replaces_support = False +build_volume_temperature = =70 if extruders_enabled_count > 1 else 35 +cool_fan_enabled = =not (support_enable and (extruder_nr == support_infill_extruder_nr)) +default_material_bed_temperature = =0 if extruders_enabled_count > 1 else 60 +initial_layer_line_width_factor = 150 +jerk_prime_tower = 4000 +jerk_support = 4000 +minimum_support_area = 4 +retraction_amount = 6.5 +retraction_count_max = 5 +skirt_brim_minimal_length = =min(2000, 175 / (layer_height * line_width)) +speed_prime_tower = 50 +speed_support = 50 +speed_support_interface = 50 +support_bottom_density = 70 +support_interface_enable = True +support_z_distance = 0 + diff --git a/resources/quality/ultimaker_s8/um_s8_bb0.8_bvoh_0.3mm.inst.cfg b/resources/quality/ultimaker_s8/um_s8_bb0.8_bvoh_0.3mm.inst.cfg new file mode 100644 index 0000000000..f325937cb9 --- /dev/null +++ b/resources/quality/ultimaker_s8/um_s8_bb0.8_bvoh_0.3mm.inst.cfg @@ -0,0 +1,36 @@ +[general] +definition = ultimaker_s8 +name = Extra Fast +version = 4 + +[metadata] +material = generic_bvoh +quality_type = verydraft +setting_version = 25 +type = quality +variant = BB 0.8 +weight = -3 + +[values] +acceleration_prime_tower = 1500 +acceleration_support = 1500 +brim_replaces_support = False +build_volume_temperature = =70 if extruders_enabled_count > 1 else 35 +cool_fan_enabled = =not (support_enable and (extruder_nr == support_infill_extruder_nr)) +default_material_bed_temperature = =0 if extruders_enabled_count > 1 else 60 +initial_layer_line_width_factor = 150 +jerk_prime_tower = 4000 +jerk_support = 4000 +material_print_temperature = =default_material_print_temperature + 5 +minimum_support_area = 4 +retraction_amount = 6.5 +retraction_count_max = 5 +skirt_brim_minimal_length = =min(2000, 175 / (layer_height * line_width)) +speed_prime_tower = 50 +speed_support = 50 +speed_support_interface = 50 +support_bottom_density = 70 +support_infill_sparse_thickness = 0.3 +support_interface_enable = True +support_z_distance = 0 + diff --git a/resources/quality/ultimaker_s8/um_s8_bb0.8_bvoh_0.4mm.inst.cfg b/resources/quality/ultimaker_s8/um_s8_bb0.8_bvoh_0.4mm.inst.cfg new file mode 100644 index 0000000000..e26028fdc1 --- /dev/null +++ b/resources/quality/ultimaker_s8/um_s8_bb0.8_bvoh_0.4mm.inst.cfg @@ -0,0 +1,35 @@ +[general] +definition = ultimaker_s8 +name = Sprint +version = 4 + +[metadata] +material = generic_bvoh +quality_type = superdraft +setting_version = 25 +type = quality +variant = BB 0.8 +weight = -4 + +[values] +acceleration_prime_tower = 1500 +acceleration_support = 1500 +brim_replaces_support = False +build_volume_temperature = =70 if extruders_enabled_count > 1 else 35 +cool_fan_enabled = =not (support_enable and (extruder_nr == support_infill_extruder_nr)) +default_material_bed_temperature = =0 if extruders_enabled_count > 1 else 60 +initial_layer_line_width_factor = 150 +jerk_prime_tower = 4000 +jerk_support = 4000 +material_print_temperature = =default_material_print_temperature + 5 +minimum_support_area = 4 +retraction_amount = 6.5 +retraction_count_max = 5 +skirt_brim_minimal_length = =min(2000, 175 / (layer_height * line_width)) +speed_prime_tower = 50 +speed_support = 50 +speed_support_interface = 50 +support_bottom_density = 70 +support_interface_enable = True +support_z_distance = 0 + From 68d631921ece237c1a882f44cb68a71336c0bbbd Mon Sep 17 00:00:00 2001 From: Paul Kuiper <46715907+pkuiper-ultimaker@users.noreply.github.com> Date: Wed, 3 Sep 2025 16:51:54 +0200 Subject: [PATCH 10/26] Reliability improvements to the RapidRinse raft settings (less chance on jamming). PP-622 --- ...um_methodx_2xa_um-rapidrinse-175_0.2mm.inst.cfg | 14 ++++++++++---- ...m_methodxl_2xa_um-rapidrinse-175_0.2mm.inst.cfg | 14 ++++++++++---- 2 files changed, 20 insertions(+), 8 deletions(-) diff --git a/resources/quality/ultimaker_methodx/um_methodx_2xa_um-rapidrinse-175_0.2mm.inst.cfg b/resources/quality/ultimaker_methodx/um_methodx_2xa_um-rapidrinse-175_0.2mm.inst.cfg index 4897ef28bc..e5cff57c0e 100644 --- a/resources/quality/ultimaker_methodx/um_methodx_2xa_um-rapidrinse-175_0.2mm.inst.cfg +++ b/resources/quality/ultimaker_methodx/um_methodx_2xa_um-rapidrinse-175_0.2mm.inst.cfg @@ -16,10 +16,16 @@ brim_replaces_support = False cool_fan_enabled = False cool_min_temperature = =material_print_temperature raft_airgap = 0.0 -raft_interface_flow = 110 -raft_interface_infill_overlap = 25 -raft_interface_speed = 90 -raft_interface_z_offset = -0.1 +raft_interface_flow = 108 +raft_interface_infill_overlap = 35 +raft_interface_layers = 2 +raft_interface_line_width = 0.52 +raft_interface_speed = 60 +raft_interface_thickness = 0.25 +raft_interface_z_offset = -0.15 +raft_surface_flow = 105 +raft_surface_layers = 2 +raft_surface_z_offset = -0.1 retract_at_layer_change = True retraction_min_travel = 5 speed_prime_tower = 25.0 diff --git a/resources/quality/ultimaker_methodxl/um_methodxl_2xa_um-rapidrinse-175_0.2mm.inst.cfg b/resources/quality/ultimaker_methodxl/um_methodxl_2xa_um-rapidrinse-175_0.2mm.inst.cfg index 3c5935b341..f76ef0fe9b 100644 --- a/resources/quality/ultimaker_methodxl/um_methodxl_2xa_um-rapidrinse-175_0.2mm.inst.cfg +++ b/resources/quality/ultimaker_methodxl/um_methodxl_2xa_um-rapidrinse-175_0.2mm.inst.cfg @@ -16,10 +16,16 @@ brim_replaces_support = False cool_fan_enabled = False cool_min_temperature = =material_print_temperature raft_airgap = 0.0 -raft_interface_flow = 110 -raft_interface_infill_overlap = 25 -raft_interface_speed = 90 -raft_interface_z_offset = -0.1 +raft_interface_flow = 108 +raft_interface_infill_overlap = 35 +raft_interface_layers = 2 +raft_interface_line_width = 0.52 +raft_interface_speed = 60 +raft_interface_thickness = 0.25 +raft_interface_z_offset = -0.15 +raft_surface_flow = 105 +raft_surface_layers = 2 +raft_surface_z_offset = -0.1 retract_at_layer_change = True retraction_min_travel = 5 speed_prime_tower = 25.0 From 986ff9b1694de6c3cdb0bf4af5a2fade183377a6 Mon Sep 17 00:00:00 2001 From: Paul Kuiper <46715907+pkuiper-ultimaker@users.noreply.github.com> Date: Thu, 4 Sep 2025 10:57:06 +0200 Subject: [PATCH 11/26] Print profile for Method Nylon in 1A, !C and LABS extruder. PP-577 --- .../definitions/ultimaker_method.def.json | 1 - .../ultimaker_method_base.def.json | 2 +- .../definitions/ultimaker_methodx.def.json | 1 - ...d_1a_um-nylon-175_0.2mm_highspeed.inst.cfg | 25 ++++++++ ...um-nylon-175_0.2mm_highspeedsolid.inst.cfg | 31 ++++++++++ ...ethod_1a_um-nylon-175_0.2mm_solid.inst.cfg | 22 +++++++ ...d_1c_um-nylon-175_0.2mm_highspeed.inst.cfg | 25 ++++++++ ...um-nylon-175_0.2mm_highspeedsolid.inst.cfg | 31 ++++++++++ ...ethod_1c_um-nylon-175_0.2mm_solid.inst.cfg | 22 +++++++ ...labs_um-nylon-175_0.2mm_highspeed.inst.cfg | 25 ++++++++ ...um-nylon-175_0.2mm_highspeedsolid.inst.cfg | 31 ++++++++++ ...hod_labs_um-nylon-175_0.2mm_solid.inst.cfg | 22 +++++++ ...x_1a_um-nylon-175_0.2mm_highspeed.inst.cfg | 25 ++++++++ ...um-nylon-175_0.2mm_highspeedsolid.inst.cfg | 31 ++++++++++ ...thodx_1a_um-nylon-175_0.2mm_solid.inst.cfg | 22 +++++++ ...x_1c_um-nylon-175_0.2mm_highspeed.inst.cfg | 25 ++++++++ ...um-nylon-175_0.2mm_highspeedsolid.inst.cfg | 31 ++++++++++ ...thodx_1c_um-nylon-175_0.2mm_solid.inst.cfg | 22 +++++++ ...labs_um-nylon-175_0.2mm_highspeed.inst.cfg | 25 ++++++++ ...um-nylon-175_0.2mm_highspeedsolid.inst.cfg | 31 ++++++++++ ...odx_labs_um-nylon-175_0.2mm_solid.inst.cfg | 22 +++++++ .../um_method_1a_um-nylon-175_0.2mm.inst.cfg | 58 +++++++++++++++++++ .../um_method_1c_um-nylon-175_0.2mm.inst.cfg | 58 +++++++++++++++++++ ...um_method_labs_um-nylon-175_0.2mm.inst.cfg | 58 +++++++++++++++++++ .../um_methodx_1a_um-nylon-175_0.2mm.inst.cfg | 58 +++++++++++++++++++ .../um_methodx_1c_um-nylon-175_0.2mm.inst.cfg | 58 +++++++++++++++++++ ...m_methodx_labs_um-nylon-175_0.2mm.inst.cfg | 58 +++++++++++++++++++ 27 files changed, 817 insertions(+), 3 deletions(-) create mode 100644 resources/intent/ultimaker_method/um_method_1a_um-nylon-175_0.2mm_highspeed.inst.cfg create mode 100644 resources/intent/ultimaker_method/um_method_1a_um-nylon-175_0.2mm_highspeedsolid.inst.cfg create mode 100644 resources/intent/ultimaker_method/um_method_1a_um-nylon-175_0.2mm_solid.inst.cfg create mode 100644 resources/intent/ultimaker_method/um_method_1c_um-nylon-175_0.2mm_highspeed.inst.cfg create mode 100644 resources/intent/ultimaker_method/um_method_1c_um-nylon-175_0.2mm_highspeedsolid.inst.cfg create mode 100644 resources/intent/ultimaker_method/um_method_1c_um-nylon-175_0.2mm_solid.inst.cfg create mode 100644 resources/intent/ultimaker_method/um_method_labs_um-nylon-175_0.2mm_highspeed.inst.cfg create mode 100644 resources/intent/ultimaker_method/um_method_labs_um-nylon-175_0.2mm_highspeedsolid.inst.cfg create mode 100644 resources/intent/ultimaker_method/um_method_labs_um-nylon-175_0.2mm_solid.inst.cfg create mode 100644 resources/intent/ultimaker_methodx/um_methodx_1a_um-nylon-175_0.2mm_highspeed.inst.cfg create mode 100644 resources/intent/ultimaker_methodx/um_methodx_1a_um-nylon-175_0.2mm_highspeedsolid.inst.cfg create mode 100644 resources/intent/ultimaker_methodx/um_methodx_1a_um-nylon-175_0.2mm_solid.inst.cfg create mode 100644 resources/intent/ultimaker_methodx/um_methodx_1c_um-nylon-175_0.2mm_highspeed.inst.cfg create mode 100644 resources/intent/ultimaker_methodx/um_methodx_1c_um-nylon-175_0.2mm_highspeedsolid.inst.cfg create mode 100644 resources/intent/ultimaker_methodx/um_methodx_1c_um-nylon-175_0.2mm_solid.inst.cfg create mode 100644 resources/intent/ultimaker_methodx/um_methodx_labs_um-nylon-175_0.2mm_highspeed.inst.cfg create mode 100644 resources/intent/ultimaker_methodx/um_methodx_labs_um-nylon-175_0.2mm_highspeedsolid.inst.cfg create mode 100644 resources/intent/ultimaker_methodx/um_methodx_labs_um-nylon-175_0.2mm_solid.inst.cfg create mode 100644 resources/quality/ultimaker_method/um_method_1a_um-nylon-175_0.2mm.inst.cfg create mode 100644 resources/quality/ultimaker_method/um_method_1c_um-nylon-175_0.2mm.inst.cfg create mode 100644 resources/quality/ultimaker_method/um_method_labs_um-nylon-175_0.2mm.inst.cfg create mode 100644 resources/quality/ultimaker_methodx/um_methodx_1a_um-nylon-175_0.2mm.inst.cfg create mode 100644 resources/quality/ultimaker_methodx/um_methodx_1c_um-nylon-175_0.2mm.inst.cfg create mode 100644 resources/quality/ultimaker_methodx/um_methodx_labs_um-nylon-175_0.2mm.inst.cfg diff --git a/resources/definitions/ultimaker_method.def.json b/resources/definitions/ultimaker_method.def.json index d2813ea8a3..c1a820f834 100644 --- a/resources/definitions/ultimaker_method.def.json +++ b/resources/definitions/ultimaker_method.def.json @@ -45,7 +45,6 @@ "ultimaker_bvoh_175", "ultimaker_cffpa_175", "ultimaker_cpe_175", - "ultimaker_nylon_175", "ultimaker_hips_175", "ultimaker_pc_175", "ultimaker_tpu_175", diff --git a/resources/definitions/ultimaker_method_base.def.json b/resources/definitions/ultimaker_method_base.def.json index e421b20529..ac37078571 100644 --- a/resources/definitions/ultimaker_method_base.def.json +++ b/resources/definitions/ultimaker_method_base.def.json @@ -701,7 +701,7 @@ 45 ] }, - "support_infill_rate": { "value": 20.0 }, + "support_infill_rate": { "value": "0 if support_structure == 'tree' else 20.0" }, "support_infill_sparse_thickness": { "value": "layer_height" }, "support_interface_enable": { "value": true }, "support_interface_height": { "value": "4*support_infill_sparse_thickness" }, diff --git a/resources/definitions/ultimaker_methodx.def.json b/resources/definitions/ultimaker_methodx.def.json index 37b11ad4ef..e5aa87afc1 100644 --- a/resources/definitions/ultimaker_methodx.def.json +++ b/resources/definitions/ultimaker_methodx.def.json @@ -44,7 +44,6 @@ "zyyx_pro_", "octofiber_", "fiberlogy_", - "ultimaker_nylon_175", "ultimaker_metallic_pla_175" ], "has_machine_materials": true, diff --git a/resources/intent/ultimaker_method/um_method_1a_um-nylon-175_0.2mm_highspeed.inst.cfg b/resources/intent/ultimaker_method/um_method_1a_um-nylon-175_0.2mm_highspeed.inst.cfg new file mode 100644 index 0000000000..a864337115 --- /dev/null +++ b/resources/intent/ultimaker_method/um_method_1a_um-nylon-175_0.2mm_highspeed.inst.cfg @@ -0,0 +1,25 @@ +[general] +definition = ultimaker_method +name = High Speed +version = 4 + +[metadata] +intent_category = highspeed +is_experimental = True +material = ultimaker_nylon_175 +quality_type = draft +setting_version = 25 +type = intent +variant = 1A + +[values] +acceleration_print = 3500 +bridge_wall_speed = 300 +cool_min_layer_time = 3 +infill_pattern = zigzag +jerk_print = 35 +speed_layer_0 = 55 +speed_print = 300 +speed_travel = 500 +support_pattern = zigzag + diff --git a/resources/intent/ultimaker_method/um_method_1a_um-nylon-175_0.2mm_highspeedsolid.inst.cfg b/resources/intent/ultimaker_method/um_method_1a_um-nylon-175_0.2mm_highspeedsolid.inst.cfg new file mode 100644 index 0000000000..9dd0d6c8fa --- /dev/null +++ b/resources/intent/ultimaker_method/um_method_1a_um-nylon-175_0.2mm_highspeedsolid.inst.cfg @@ -0,0 +1,31 @@ +[general] +definition = ultimaker_method +name = High Speed Solid +version = 4 + +[metadata] +intent_category = highspeedsolid +is_experimental = True +material = ultimaker_nylon_175 +quality_type = draft +setting_version = 25 +type = intent +variant = 1A + +[values] +acceleration_print = 3500 +bottom_thickness = =top_bottom_thickness +bridge_wall_speed = 300 +cool_min_layer_time = 3 +infill_angles = [45,135] +infill_material_flow = 97 +infill_pattern = zigzag +infill_sparse_density = 99 +jerk_print = 35 +speed_layer_0 = 55 +speed_print = 300 +speed_travel = 500 +support_pattern = zigzag +top_bottom_thickness = =layer_height * 2 +top_thickness = =top_bottom_thickness + diff --git a/resources/intent/ultimaker_method/um_method_1a_um-nylon-175_0.2mm_solid.inst.cfg b/resources/intent/ultimaker_method/um_method_1a_um-nylon-175_0.2mm_solid.inst.cfg new file mode 100644 index 0000000000..912d71d2eb --- /dev/null +++ b/resources/intent/ultimaker_method/um_method_1a_um-nylon-175_0.2mm_solid.inst.cfg @@ -0,0 +1,22 @@ +[general] +definition = ultimaker_method +name = Solid +version = 4 + +[metadata] +intent_category = solid +material = ultimaker_nylon_175 +quality_type = draft +setting_version = 25 +type = intent +variant = 1A + +[values] +bottom_thickness = =top_bottom_thickness +infill_angles = [45,135] +infill_material_flow = 97 +infill_pattern = zigzag +infill_sparse_density = 99 +top_bottom_thickness = =layer_height * 2 +top_thickness = =top_bottom_thickness + diff --git a/resources/intent/ultimaker_method/um_method_1c_um-nylon-175_0.2mm_highspeed.inst.cfg b/resources/intent/ultimaker_method/um_method_1c_um-nylon-175_0.2mm_highspeed.inst.cfg new file mode 100644 index 0000000000..8e9ae1594a --- /dev/null +++ b/resources/intent/ultimaker_method/um_method_1c_um-nylon-175_0.2mm_highspeed.inst.cfg @@ -0,0 +1,25 @@ +[general] +definition = ultimaker_method +name = High Speed +version = 4 + +[metadata] +intent_category = highspeed +is_experimental = True +material = ultimaker_nylon_175 +quality_type = draft +setting_version = 25 +type = intent +variant = 1C + +[values] +acceleration_print = 3500 +bridge_wall_speed = 300 +cool_min_layer_time = 3 +infill_pattern = zigzag +jerk_print = 35 +speed_layer_0 = 55 +speed_print = 300 +speed_travel = 500 +support_pattern = zigzag + diff --git a/resources/intent/ultimaker_method/um_method_1c_um-nylon-175_0.2mm_highspeedsolid.inst.cfg b/resources/intent/ultimaker_method/um_method_1c_um-nylon-175_0.2mm_highspeedsolid.inst.cfg new file mode 100644 index 0000000000..65918cdec0 --- /dev/null +++ b/resources/intent/ultimaker_method/um_method_1c_um-nylon-175_0.2mm_highspeedsolid.inst.cfg @@ -0,0 +1,31 @@ +[general] +definition = ultimaker_method +name = High Speed Solid +version = 4 + +[metadata] +intent_category = highspeedsolid +is_experimental = True +material = ultimaker_nylon_175 +quality_type = draft +setting_version = 25 +type = intent +variant = 1C + +[values] +acceleration_print = 3500 +bottom_thickness = =top_bottom_thickness +bridge_wall_speed = 300 +cool_min_layer_time = 3 +infill_angles = [45,135] +infill_material_flow = 97 +infill_pattern = zigzag +infill_sparse_density = 99 +jerk_print = 35 +speed_layer_0 = 55 +speed_print = 300 +speed_travel = 500 +support_pattern = zigzag +top_bottom_thickness = =layer_height * 2 +top_thickness = =top_bottom_thickness + diff --git a/resources/intent/ultimaker_method/um_method_1c_um-nylon-175_0.2mm_solid.inst.cfg b/resources/intent/ultimaker_method/um_method_1c_um-nylon-175_0.2mm_solid.inst.cfg new file mode 100644 index 0000000000..ed8949a519 --- /dev/null +++ b/resources/intent/ultimaker_method/um_method_1c_um-nylon-175_0.2mm_solid.inst.cfg @@ -0,0 +1,22 @@ +[general] +definition = ultimaker_method +name = Solid +version = 4 + +[metadata] +intent_category = solid +material = ultimaker_nylon_175 +quality_type = draft +setting_version = 25 +type = intent +variant = 1C + +[values] +bottom_thickness = =top_bottom_thickness +infill_angles = [45,135] +infill_material_flow = 97 +infill_pattern = zigzag +infill_sparse_density = 99 +top_bottom_thickness = =layer_height * 2 +top_thickness = =top_bottom_thickness + diff --git a/resources/intent/ultimaker_method/um_method_labs_um-nylon-175_0.2mm_highspeed.inst.cfg b/resources/intent/ultimaker_method/um_method_labs_um-nylon-175_0.2mm_highspeed.inst.cfg new file mode 100644 index 0000000000..c8e31af0be --- /dev/null +++ b/resources/intent/ultimaker_method/um_method_labs_um-nylon-175_0.2mm_highspeed.inst.cfg @@ -0,0 +1,25 @@ +[general] +definition = ultimaker_method +name = High Speed +version = 4 + +[metadata] +intent_category = highspeed +is_experimental = True +material = ultimaker_nylon_175 +quality_type = draft +setting_version = 25 +type = intent +variant = LABS + +[values] +acceleration_print = 3500 +bridge_wall_speed = 300 +cool_min_layer_time = 3 +infill_pattern = zigzag +jerk_print = 35 +speed_layer_0 = 55 +speed_print = 300 +speed_travel = 500 +support_pattern = zigzag + diff --git a/resources/intent/ultimaker_method/um_method_labs_um-nylon-175_0.2mm_highspeedsolid.inst.cfg b/resources/intent/ultimaker_method/um_method_labs_um-nylon-175_0.2mm_highspeedsolid.inst.cfg new file mode 100644 index 0000000000..94aa6c8267 --- /dev/null +++ b/resources/intent/ultimaker_method/um_method_labs_um-nylon-175_0.2mm_highspeedsolid.inst.cfg @@ -0,0 +1,31 @@ +[general] +definition = ultimaker_method +name = High Speed Solid +version = 4 + +[metadata] +intent_category = highspeedsolid +is_experimental = True +material = ultimaker_nylon_175 +quality_type = draft +setting_version = 25 +type = intent +variant = LABS + +[values] +acceleration_print = 3500 +bottom_thickness = =top_bottom_thickness +bridge_wall_speed = 300 +cool_min_layer_time = 3 +infill_angles = [45,135] +infill_material_flow = 97 +infill_pattern = zigzag +infill_sparse_density = 99 +jerk_print = 35 +speed_layer_0 = 55 +speed_print = 300 +speed_travel = 500 +support_pattern = zigzag +top_bottom_thickness = =layer_height * 2 +top_thickness = =top_bottom_thickness + diff --git a/resources/intent/ultimaker_method/um_method_labs_um-nylon-175_0.2mm_solid.inst.cfg b/resources/intent/ultimaker_method/um_method_labs_um-nylon-175_0.2mm_solid.inst.cfg new file mode 100644 index 0000000000..f77d77afa2 --- /dev/null +++ b/resources/intent/ultimaker_method/um_method_labs_um-nylon-175_0.2mm_solid.inst.cfg @@ -0,0 +1,22 @@ +[general] +definition = ultimaker_method +name = Solid +version = 4 + +[metadata] +intent_category = solid +material = ultimaker_nylon_175 +quality_type = draft +setting_version = 25 +type = intent +variant = LABS + +[values] +bottom_thickness = =top_bottom_thickness +infill_angles = [45,135] +infill_material_flow = 97 +infill_pattern = zigzag +infill_sparse_density = 99 +top_bottom_thickness = =layer_height * 2 +top_thickness = =top_bottom_thickness + diff --git a/resources/intent/ultimaker_methodx/um_methodx_1a_um-nylon-175_0.2mm_highspeed.inst.cfg b/resources/intent/ultimaker_methodx/um_methodx_1a_um-nylon-175_0.2mm_highspeed.inst.cfg new file mode 100644 index 0000000000..967aa0dbf8 --- /dev/null +++ b/resources/intent/ultimaker_methodx/um_methodx_1a_um-nylon-175_0.2mm_highspeed.inst.cfg @@ -0,0 +1,25 @@ +[general] +definition = ultimaker_methodx +name = High Speed +version = 4 + +[metadata] +intent_category = highspeed +is_experimental = True +material = ultimaker_nylon_175 +quality_type = draft +setting_version = 25 +type = intent +variant = 1A + +[values] +acceleration_print = 3500 +bridge_wall_speed = 300 +cool_min_layer_time = 3 +infill_pattern = zigzag +jerk_print = 35 +speed_layer_0 = 55 +speed_print = 300 +speed_travel = 500 +support_pattern = zigzag + diff --git a/resources/intent/ultimaker_methodx/um_methodx_1a_um-nylon-175_0.2mm_highspeedsolid.inst.cfg b/resources/intent/ultimaker_methodx/um_methodx_1a_um-nylon-175_0.2mm_highspeedsolid.inst.cfg new file mode 100644 index 0000000000..a08f2e1948 --- /dev/null +++ b/resources/intent/ultimaker_methodx/um_methodx_1a_um-nylon-175_0.2mm_highspeedsolid.inst.cfg @@ -0,0 +1,31 @@ +[general] +definition = ultimaker_methodx +name = High Speed Solid +version = 4 + +[metadata] +intent_category = highspeedsolid +is_experimental = True +material = ultimaker_nylon_175 +quality_type = draft +setting_version = 25 +type = intent +variant = 1A + +[values] +acceleration_print = 3500 +bottom_thickness = =top_bottom_thickness +bridge_wall_speed = 300 +cool_min_layer_time = 3 +infill_angles = [45,135] +infill_material_flow = 97 +infill_pattern = zigzag +infill_sparse_density = 99 +jerk_print = 35 +speed_layer_0 = 55 +speed_print = 300 +speed_travel = 500 +support_pattern = zigzag +top_bottom_thickness = =layer_height * 2 +top_thickness = =top_bottom_thickness + diff --git a/resources/intent/ultimaker_methodx/um_methodx_1a_um-nylon-175_0.2mm_solid.inst.cfg b/resources/intent/ultimaker_methodx/um_methodx_1a_um-nylon-175_0.2mm_solid.inst.cfg new file mode 100644 index 0000000000..e9d7188457 --- /dev/null +++ b/resources/intent/ultimaker_methodx/um_methodx_1a_um-nylon-175_0.2mm_solid.inst.cfg @@ -0,0 +1,22 @@ +[general] +definition = ultimaker_methodx +name = Solid +version = 4 + +[metadata] +intent_category = solid +material = ultimaker_nylon_175 +quality_type = draft +setting_version = 25 +type = intent +variant = 1A + +[values] +bottom_thickness = =top_bottom_thickness +infill_angles = [45,135] +infill_material_flow = 97 +infill_pattern = zigzag +infill_sparse_density = 99 +top_bottom_thickness = =layer_height * 2 +top_thickness = =top_bottom_thickness + diff --git a/resources/intent/ultimaker_methodx/um_methodx_1c_um-nylon-175_0.2mm_highspeed.inst.cfg b/resources/intent/ultimaker_methodx/um_methodx_1c_um-nylon-175_0.2mm_highspeed.inst.cfg new file mode 100644 index 0000000000..d31a6542b6 --- /dev/null +++ b/resources/intent/ultimaker_methodx/um_methodx_1c_um-nylon-175_0.2mm_highspeed.inst.cfg @@ -0,0 +1,25 @@ +[general] +definition = ultimaker_methodx +name = High Speed +version = 4 + +[metadata] +intent_category = highspeed +is_experimental = True +material = ultimaker_nylon_175 +quality_type = draft +setting_version = 25 +type = intent +variant = 1C + +[values] +acceleration_print = 3500 +bridge_wall_speed = 300 +cool_min_layer_time = 3 +infill_pattern = zigzag +jerk_print = 35 +speed_layer_0 = 55 +speed_print = 300 +speed_travel = 500 +support_pattern = zigzag + diff --git a/resources/intent/ultimaker_methodx/um_methodx_1c_um-nylon-175_0.2mm_highspeedsolid.inst.cfg b/resources/intent/ultimaker_methodx/um_methodx_1c_um-nylon-175_0.2mm_highspeedsolid.inst.cfg new file mode 100644 index 0000000000..29bd7371a0 --- /dev/null +++ b/resources/intent/ultimaker_methodx/um_methodx_1c_um-nylon-175_0.2mm_highspeedsolid.inst.cfg @@ -0,0 +1,31 @@ +[general] +definition = ultimaker_methodx +name = High Speed Solid +version = 4 + +[metadata] +intent_category = highspeedsolid +is_experimental = True +material = ultimaker_nylon_175 +quality_type = draft +setting_version = 25 +type = intent +variant = 1C + +[values] +acceleration_print = 3500 +bottom_thickness = =top_bottom_thickness +bridge_wall_speed = 300 +cool_min_layer_time = 3 +infill_angles = [45,135] +infill_material_flow = 97 +infill_pattern = zigzag +infill_sparse_density = 99 +jerk_print = 35 +speed_layer_0 = 55 +speed_print = 300 +speed_travel = 500 +support_pattern = zigzag +top_bottom_thickness = =layer_height * 2 +top_thickness = =top_bottom_thickness + diff --git a/resources/intent/ultimaker_methodx/um_methodx_1c_um-nylon-175_0.2mm_solid.inst.cfg b/resources/intent/ultimaker_methodx/um_methodx_1c_um-nylon-175_0.2mm_solid.inst.cfg new file mode 100644 index 0000000000..ae2bc39db8 --- /dev/null +++ b/resources/intent/ultimaker_methodx/um_methodx_1c_um-nylon-175_0.2mm_solid.inst.cfg @@ -0,0 +1,22 @@ +[general] +definition = ultimaker_methodx +name = Solid +version = 4 + +[metadata] +intent_category = solid +material = ultimaker_nylon_175 +quality_type = draft +setting_version = 25 +type = intent +variant = 1C + +[values] +bottom_thickness = =top_bottom_thickness +infill_angles = [45,135] +infill_material_flow = 97 +infill_pattern = zigzag +infill_sparse_density = 99 +top_bottom_thickness = =layer_height * 2 +top_thickness = =top_bottom_thickness + diff --git a/resources/intent/ultimaker_methodx/um_methodx_labs_um-nylon-175_0.2mm_highspeed.inst.cfg b/resources/intent/ultimaker_methodx/um_methodx_labs_um-nylon-175_0.2mm_highspeed.inst.cfg new file mode 100644 index 0000000000..e54a52ba05 --- /dev/null +++ b/resources/intent/ultimaker_methodx/um_methodx_labs_um-nylon-175_0.2mm_highspeed.inst.cfg @@ -0,0 +1,25 @@ +[general] +definition = ultimaker_methodx +name = High Speed +version = 4 + +[metadata] +intent_category = highspeed +is_experimental = True +material = ultimaker_nylon_175 +quality_type = draft +setting_version = 25 +type = intent +variant = LABS + +[values] +acceleration_print = 3500 +bridge_wall_speed = 300 +cool_min_layer_time = 3 +infill_pattern = zigzag +jerk_print = 35 +speed_layer_0 = 55 +speed_print = 300 +speed_travel = 500 +support_pattern = zigzag + diff --git a/resources/intent/ultimaker_methodx/um_methodx_labs_um-nylon-175_0.2mm_highspeedsolid.inst.cfg b/resources/intent/ultimaker_methodx/um_methodx_labs_um-nylon-175_0.2mm_highspeedsolid.inst.cfg new file mode 100644 index 0000000000..d1402a3140 --- /dev/null +++ b/resources/intent/ultimaker_methodx/um_methodx_labs_um-nylon-175_0.2mm_highspeedsolid.inst.cfg @@ -0,0 +1,31 @@ +[general] +definition = ultimaker_methodx +name = High Speed Solid +version = 4 + +[metadata] +intent_category = highspeedsolid +is_experimental = True +material = ultimaker_nylon_175 +quality_type = draft +setting_version = 25 +type = intent +variant = LABS + +[values] +acceleration_print = 3500 +bottom_thickness = =top_bottom_thickness +bridge_wall_speed = 300 +cool_min_layer_time = 3 +infill_angles = [45,135] +infill_material_flow = 97 +infill_pattern = zigzag +infill_sparse_density = 99 +jerk_print = 35 +speed_layer_0 = 55 +speed_print = 300 +speed_travel = 500 +support_pattern = zigzag +top_bottom_thickness = =layer_height * 2 +top_thickness = =top_bottom_thickness + diff --git a/resources/intent/ultimaker_methodx/um_methodx_labs_um-nylon-175_0.2mm_solid.inst.cfg b/resources/intent/ultimaker_methodx/um_methodx_labs_um-nylon-175_0.2mm_solid.inst.cfg new file mode 100644 index 0000000000..e5a0fe6dc8 --- /dev/null +++ b/resources/intent/ultimaker_methodx/um_methodx_labs_um-nylon-175_0.2mm_solid.inst.cfg @@ -0,0 +1,22 @@ +[general] +definition = ultimaker_methodx +name = Solid +version = 4 + +[metadata] +intent_category = solid +material = ultimaker_nylon_175 +quality_type = draft +setting_version = 25 +type = intent +variant = LABS + +[values] +bottom_thickness = =top_bottom_thickness +infill_angles = [45,135] +infill_material_flow = 97 +infill_pattern = zigzag +infill_sparse_density = 99 +top_bottom_thickness = =layer_height * 2 +top_thickness = =top_bottom_thickness + diff --git a/resources/quality/ultimaker_method/um_method_1a_um-nylon-175_0.2mm.inst.cfg b/resources/quality/ultimaker_method/um_method_1a_um-nylon-175_0.2mm.inst.cfg new file mode 100644 index 0000000000..13b5c6c4f1 --- /dev/null +++ b/resources/quality/ultimaker_method/um_method_1a_um-nylon-175_0.2mm.inst.cfg @@ -0,0 +1,58 @@ +[general] +definition = ultimaker_method +name = Fast +version = 4 + +[metadata] +material = ultimaker_nylon_175 +quality_type = draft +setting_version = 25 +type = quality +variant = 1A +weight = -2 + +[values] +cool_fan_enabled = True +cool_fan_speed = 0 +cool_fan_speed_max = 0 +cool_min_layer_time = 8 +cool_min_speed = 10 +cool_min_temperature = 250 +material_final_print_temperature = =default_material_print_temperature-5 +material_initial_print_temperature = =default_material_print_temperature-5 +raft_airgap = 0.3 +raft_base_flow = 105 +raft_base_line_width = 1.2 +raft_base_speed = 10 +raft_base_thickness = 0.6 +raft_interface_thickness = 0.25 +retraction_amount = 0.5 +retraction_min_travel = 3.2ƒ√ +small_skin_width = 3.6 +speed_prime_tower = =speed_print +speed_print = 50 +speed_roofing = =speed_print * 3/5 +speed_topbottom = =speed_roofing +speed_wall = =speed_print * 3/5 +speed_wall_0 = =speed_wall * 5/6 +speed_wall_x = =speed_wall +support_angle = 30 +support_bottom_density = 24 +support_bottom_distance = =layer_height +support_bottom_enable = False +support_bottom_line_width = 0.6 +support_bottom_stair_step_height = 0 +support_infill_rate = =0 if support_structure == tree else 12.0 +support_interface_height = 0.406 +support_interface_material_flow = 95 +support_interface_pattern = lines +support_line_width = =line_width * 0.75 +support_material_flow = 92 +support_roof_density = 50 +support_roof_height = =support_interface_height +support_structure = tree +support_supported_skin_fan_speed = 75 +support_wall_count = 1 +support_xy_distance = 0.3 +support_z_distance = 0.3 + diff --git a/resources/quality/ultimaker_method/um_method_1c_um-nylon-175_0.2mm.inst.cfg b/resources/quality/ultimaker_method/um_method_1c_um-nylon-175_0.2mm.inst.cfg new file mode 100644 index 0000000000..6a7fb34999 --- /dev/null +++ b/resources/quality/ultimaker_method/um_method_1c_um-nylon-175_0.2mm.inst.cfg @@ -0,0 +1,58 @@ +[general] +definition = ultimaker_method +name = Fast +version = 4 + +[metadata] +material = ultimaker_nylon_175 +quality_type = draft +setting_version = 25 +type = quality +variant = 1C +weight = -2 + +[values] +cool_fan_enabled = True +cool_fan_speed = 0 +cool_fan_speed_max = 0 +cool_min_layer_time = 8 +cool_min_speed = 10 +cool_min_temperature = 250 +material_final_print_temperature = =default_material_print_temperature-5 +material_initial_print_temperature = =default_material_print_temperature-5 +raft_airgap = 0.3 +raft_base_flow = 105 +raft_base_line_width = 1.2 +raft_base_speed = 10 +raft_base_thickness = 0.6 +raft_interface_thickness = 0.25 +retraction_amount = 0.5 +retraction_min_travel = 3.2ƒ√ +small_skin_width = 3.6 +speed_prime_tower = =speed_print +speed_print = 50 +speed_roofing = =speed_print * 3/5 +speed_topbottom = =speed_roofing +speed_wall = =speed_print * 3/5 +speed_wall_0 = =speed_wall * 5/6 +speed_wall_x = =speed_wall +support_angle = 30 +support_bottom_density = 24 +support_bottom_distance = =layer_height +support_bottom_enable = False +support_bottom_line_width = 0.6 +support_bottom_stair_step_height = 0 +support_infill_rate = =0 if support_structure == tree else 12.0 +support_interface_height = 0.406 +support_interface_material_flow = 95 +support_interface_pattern = lines +support_line_width = =line_width * 0.75 +support_material_flow = 92 +support_roof_density = 50 +support_roof_height = =support_interface_height +support_structure = tree +support_supported_skin_fan_speed = 75 +support_wall_count = 1 +support_xy_distance = 0.3 +support_z_distance = 0.3 + diff --git a/resources/quality/ultimaker_method/um_method_labs_um-nylon-175_0.2mm.inst.cfg b/resources/quality/ultimaker_method/um_method_labs_um-nylon-175_0.2mm.inst.cfg new file mode 100644 index 0000000000..5b85e94356 --- /dev/null +++ b/resources/quality/ultimaker_method/um_method_labs_um-nylon-175_0.2mm.inst.cfg @@ -0,0 +1,58 @@ +[general] +definition = ultimaker_method +name = Fast +version = 4 + +[metadata] +material = ultimaker_nylon_175 +quality_type = draft +setting_version = 25 +type = quality +variant = LABS +weight = -2 + +[values] +cool_fan_enabled = True +cool_fan_speed = 0 +cool_fan_speed_max = 0 +cool_min_layer_time = 8 +cool_min_speed = 10 +cool_min_temperature = 250 +material_final_print_temperature = =default_material_print_temperature-5 +material_initial_print_temperature = =default_material_print_temperature-5 +raft_airgap = 0.3 +raft_base_flow = 105 +raft_base_line_width = 1.2 +raft_base_speed = 10 +raft_base_thickness = 0.6 +raft_interface_thickness = 0.25 +retraction_amount = 0.5 +retraction_min_travel = 3.2ƒ√ +small_skin_width = 3.6 +speed_prime_tower = =speed_print +speed_print = 50 +speed_roofing = =speed_print * 3/5 +speed_topbottom = =speed_roofing +speed_wall = =speed_print * 3/5 +speed_wall_0 = =speed_wall * 5/6 +speed_wall_x = =speed_wall +support_angle = 30 +support_bottom_density = 24 +support_bottom_distance = =layer_height +support_bottom_enable = False +support_bottom_line_width = 0.6 +support_bottom_stair_step_height = 0 +support_infill_rate = =0 if support_structure == tree else 12.0 +support_interface_height = 0.406 +support_interface_material_flow = 95 +support_interface_pattern = lines +support_line_width = =line_width * 0.75 +support_material_flow = 92 +support_roof_density = 50 +support_roof_height = =support_interface_height +support_structure = tree +support_supported_skin_fan_speed = 75 +support_wall_count = 1 +support_xy_distance = 0.3 +support_z_distance = 0.3 + diff --git a/resources/quality/ultimaker_methodx/um_methodx_1a_um-nylon-175_0.2mm.inst.cfg b/resources/quality/ultimaker_methodx/um_methodx_1a_um-nylon-175_0.2mm.inst.cfg new file mode 100644 index 0000000000..dd622e65bf --- /dev/null +++ b/resources/quality/ultimaker_methodx/um_methodx_1a_um-nylon-175_0.2mm.inst.cfg @@ -0,0 +1,58 @@ +[general] +definition = ultimaker_methodx +name = Fast +version = 4 + +[metadata] +material = ultimaker_nylon_175 +quality_type = draft +setting_version = 25 +type = quality +variant = 1A +weight = -2 + +[values] +cool_fan_enabled = True +cool_fan_speed = 0 +cool_fan_speed_max = 0 +cool_min_layer_time = 8 +cool_min_speed = 10 +cool_min_temperature = 250 +material_final_print_temperature = =default_material_print_temperature-5 +material_initial_print_temperature = =default_material_print_temperature-5 +raft_airgap = 0.3 +raft_base_flow = 105 +raft_base_line_width = 1.2 +raft_base_speed = 10 +raft_base_thickness = 0.6 +raft_interface_thickness = 0.25 +retraction_amount = 0.5 +retraction_min_travel = 3.2ƒ√ +small_skin_width = 3.6 +speed_prime_tower = =speed_print +speed_print = 50 +speed_roofing = =speed_print * 3/5 +speed_topbottom = =speed_roofing +speed_wall = =speed_print * 3/5 +speed_wall_0 = =speed_wall * 5/6 +speed_wall_x = =speed_wall +support_angle = 30 +support_bottom_density = 24 +support_bottom_distance = =layer_height +support_bottom_enable = False +support_bottom_line_width = 0.6 +support_bottom_stair_step_height = 0 +support_infill_rate = =0 if support_structure == tree else 12.0 +support_interface_height = 0.406 +support_interface_material_flow = 95 +support_interface_pattern = lines +support_line_width = =line_width * 0.75 +support_material_flow = 92 +support_roof_density = 50 +support_roof_height = =support_interface_height +support_structure = tree +support_supported_skin_fan_speed = 75 +support_wall_count = 1 +support_xy_distance = 0.3 +support_z_distance = 0.3 + diff --git a/resources/quality/ultimaker_methodx/um_methodx_1c_um-nylon-175_0.2mm.inst.cfg b/resources/quality/ultimaker_methodx/um_methodx_1c_um-nylon-175_0.2mm.inst.cfg new file mode 100644 index 0000000000..8aef5be946 --- /dev/null +++ b/resources/quality/ultimaker_methodx/um_methodx_1c_um-nylon-175_0.2mm.inst.cfg @@ -0,0 +1,58 @@ +[general] +definition = ultimaker_methodx +name = Fast +version = 4 + +[metadata] +material = ultimaker_nylon_175 +quality_type = draft +setting_version = 25 +type = quality +variant = 1C +weight = -2 + +[values] +cool_fan_enabled = True +cool_fan_speed = 0 +cool_fan_speed_max = 0 +cool_min_layer_time = 8 +cool_min_speed = 10 +cool_min_temperature = 250 +material_final_print_temperature = =default_material_print_temperature-5 +material_initial_print_temperature = =default_material_print_temperature-5 +raft_airgap = 0.3 +raft_base_flow = 105 +raft_base_line_width = 1.2 +raft_base_speed = 10 +raft_base_thickness = 0.6 +raft_interface_thickness = 0.25 +retraction_amount = 0.5 +retraction_min_travel = 3.2ƒ√ +small_skin_width = 3.6 +speed_prime_tower = =speed_print +speed_print = 50 +speed_roofing = =speed_print * 3/5 +speed_topbottom = =speed_roofing +speed_wall = =speed_print * 3/5 +speed_wall_0 = =speed_wall * 5/6 +speed_wall_x = =speed_wall +support_angle = 30 +support_bottom_density = 24 +support_bottom_distance = =layer_height +support_bottom_enable = False +support_bottom_line_width = 0.6 +support_bottom_stair_step_height = 0 +support_infill_rate = =0 if support_structure == tree else 12.0 +support_interface_height = 0.406 +support_interface_material_flow = 95 +support_interface_pattern = lines +support_line_width = =line_width * 0.75 +support_material_flow = 92 +support_roof_density = 50 +support_roof_height = =support_interface_height +support_structure = tree +support_supported_skin_fan_speed = 75 +support_wall_count = 1 +support_xy_distance = 0.3 +support_z_distance = 0.3 + diff --git a/resources/quality/ultimaker_methodx/um_methodx_labs_um-nylon-175_0.2mm.inst.cfg b/resources/quality/ultimaker_methodx/um_methodx_labs_um-nylon-175_0.2mm.inst.cfg new file mode 100644 index 0000000000..08e5a9f7a2 --- /dev/null +++ b/resources/quality/ultimaker_methodx/um_methodx_labs_um-nylon-175_0.2mm.inst.cfg @@ -0,0 +1,58 @@ +[general] +definition = ultimaker_methodx +name = Fast +version = 4 + +[metadata] +material = ultimaker_nylon_175 +quality_type = draft +setting_version = 25 +type = quality +variant = LABS +weight = -2 + +[values] +cool_fan_enabled = True +cool_fan_speed = 0 +cool_fan_speed_max = 0 +cool_min_layer_time = 8 +cool_min_speed = 10 +cool_min_temperature = 250 +material_final_print_temperature = =default_material_print_temperature-5 +material_initial_print_temperature = =default_material_print_temperature-5 +raft_airgap = 0.3 +raft_base_flow = 105 +raft_base_line_width = 1.2 +raft_base_speed = 10 +raft_base_thickness = 0.6 +raft_interface_thickness = 0.25 +retraction_amount = 0.5 +retraction_min_travel = 3.2ƒ√ +small_skin_width = 3.6 +speed_prime_tower = =speed_print +speed_print = 50 +speed_roofing = =speed_print * 3/5 +speed_topbottom = =speed_roofing +speed_wall = =speed_print * 3/5 +speed_wall_0 = =speed_wall * 5/6 +speed_wall_x = =speed_wall +support_angle = 30 +support_bottom_density = 24 +support_bottom_distance = =layer_height +support_bottom_enable = False +support_bottom_line_width = 0.6 +support_bottom_stair_step_height = 0 +support_infill_rate = =0 if support_structure == tree else 12.0 +support_interface_height = 0.406 +support_interface_material_flow = 95 +support_interface_pattern = lines +support_line_width = =line_width * 0.75 +support_material_flow = 92 +support_roof_density = 50 +support_roof_height = =support_interface_height +support_structure = tree +support_supported_skin_fan_speed = 75 +support_wall_count = 1 +support_xy_distance = 0.3 +support_z_distance = 0.3 + From 25c494a75c4c80aeeb31ab48b984bfb80c40defe Mon Sep 17 00:00:00 2001 From: Paul Kuiper <46715907+pkuiper-ultimaker@users.noreply.github.com> Date: Mon, 8 Sep 2025 10:34:12 +0200 Subject: [PATCH 12/26] Increased support z distance for better release of self support. PP-577 --- .../ultimaker_method/um_method_1a_um-nylon-175_0.2mm.inst.cfg | 4 ++-- .../ultimaker_method/um_method_1c_um-nylon-175_0.2mm.inst.cfg | 4 ++-- .../um_method_labs_um-nylon-175_0.2mm.inst.cfg | 4 ++-- .../um_methodx_1a_um-nylon-175_0.2mm.inst.cfg | 4 ++-- .../um_methodx_1c_um-nylon-175_0.2mm.inst.cfg | 4 ++-- .../um_methodx_labs_um-nylon-175_0.2mm.inst.cfg | 4 ++-- 6 files changed, 12 insertions(+), 12 deletions(-) diff --git a/resources/quality/ultimaker_method/um_method_1a_um-nylon-175_0.2mm.inst.cfg b/resources/quality/ultimaker_method/um_method_1a_um-nylon-175_0.2mm.inst.cfg index 13b5c6c4f1..6859b6c0b2 100644 --- a/resources/quality/ultimaker_method/um_method_1a_um-nylon-175_0.2mm.inst.cfg +++ b/resources/quality/ultimaker_method/um_method_1a_um-nylon-175_0.2mm.inst.cfg @@ -27,7 +27,7 @@ raft_base_speed = 10 raft_base_thickness = 0.6 raft_interface_thickness = 0.25 retraction_amount = 0.5 -retraction_min_travel = 3.2ƒ√ +retraction_min_travel = 3.2 small_skin_width = 3.6 speed_prime_tower = =speed_print speed_print = 50 @@ -54,5 +54,5 @@ support_structure = tree support_supported_skin_fan_speed = 75 support_wall_count = 1 support_xy_distance = 0.3 -support_z_distance = 0.3 +support_z_distance = =layer_height*2 diff --git a/resources/quality/ultimaker_method/um_method_1c_um-nylon-175_0.2mm.inst.cfg b/resources/quality/ultimaker_method/um_method_1c_um-nylon-175_0.2mm.inst.cfg index 6a7fb34999..57a0c78003 100644 --- a/resources/quality/ultimaker_method/um_method_1c_um-nylon-175_0.2mm.inst.cfg +++ b/resources/quality/ultimaker_method/um_method_1c_um-nylon-175_0.2mm.inst.cfg @@ -27,7 +27,7 @@ raft_base_speed = 10 raft_base_thickness = 0.6 raft_interface_thickness = 0.25 retraction_amount = 0.5 -retraction_min_travel = 3.2ƒ√ +retraction_min_travel = 3.2 small_skin_width = 3.6 speed_prime_tower = =speed_print speed_print = 50 @@ -54,5 +54,5 @@ support_structure = tree support_supported_skin_fan_speed = 75 support_wall_count = 1 support_xy_distance = 0.3 -support_z_distance = 0.3 +support_z_distance = =layer_height*2 diff --git a/resources/quality/ultimaker_method/um_method_labs_um-nylon-175_0.2mm.inst.cfg b/resources/quality/ultimaker_method/um_method_labs_um-nylon-175_0.2mm.inst.cfg index 5b85e94356..cf87c5c74b 100644 --- a/resources/quality/ultimaker_method/um_method_labs_um-nylon-175_0.2mm.inst.cfg +++ b/resources/quality/ultimaker_method/um_method_labs_um-nylon-175_0.2mm.inst.cfg @@ -27,7 +27,7 @@ raft_base_speed = 10 raft_base_thickness = 0.6 raft_interface_thickness = 0.25 retraction_amount = 0.5 -retraction_min_travel = 3.2ƒ√ +retraction_min_travel = 3.2 small_skin_width = 3.6 speed_prime_tower = =speed_print speed_print = 50 @@ -54,5 +54,5 @@ support_structure = tree support_supported_skin_fan_speed = 75 support_wall_count = 1 support_xy_distance = 0.3 -support_z_distance = 0.3 +support_z_distance = =layer_height*2 diff --git a/resources/quality/ultimaker_methodx/um_methodx_1a_um-nylon-175_0.2mm.inst.cfg b/resources/quality/ultimaker_methodx/um_methodx_1a_um-nylon-175_0.2mm.inst.cfg index dd622e65bf..e2f294f391 100644 --- a/resources/quality/ultimaker_methodx/um_methodx_1a_um-nylon-175_0.2mm.inst.cfg +++ b/resources/quality/ultimaker_methodx/um_methodx_1a_um-nylon-175_0.2mm.inst.cfg @@ -27,7 +27,7 @@ raft_base_speed = 10 raft_base_thickness = 0.6 raft_interface_thickness = 0.25 retraction_amount = 0.5 -retraction_min_travel = 3.2ƒ√ +retraction_min_travel = 3.2 small_skin_width = 3.6 speed_prime_tower = =speed_print speed_print = 50 @@ -54,5 +54,5 @@ support_structure = tree support_supported_skin_fan_speed = 75 support_wall_count = 1 support_xy_distance = 0.3 -support_z_distance = 0.3 +support_z_distance = =layer_height*2 diff --git a/resources/quality/ultimaker_methodx/um_methodx_1c_um-nylon-175_0.2mm.inst.cfg b/resources/quality/ultimaker_methodx/um_methodx_1c_um-nylon-175_0.2mm.inst.cfg index 8aef5be946..788d768ff2 100644 --- a/resources/quality/ultimaker_methodx/um_methodx_1c_um-nylon-175_0.2mm.inst.cfg +++ b/resources/quality/ultimaker_methodx/um_methodx_1c_um-nylon-175_0.2mm.inst.cfg @@ -27,7 +27,7 @@ raft_base_speed = 10 raft_base_thickness = 0.6 raft_interface_thickness = 0.25 retraction_amount = 0.5 -retraction_min_travel = 3.2ƒ√ +retraction_min_travel = 3.2 small_skin_width = 3.6 speed_prime_tower = =speed_print speed_print = 50 @@ -54,5 +54,5 @@ support_structure = tree support_supported_skin_fan_speed = 75 support_wall_count = 1 support_xy_distance = 0.3 -support_z_distance = 0.3 +support_z_distance = =layer_height*2 diff --git a/resources/quality/ultimaker_methodx/um_methodx_labs_um-nylon-175_0.2mm.inst.cfg b/resources/quality/ultimaker_methodx/um_methodx_labs_um-nylon-175_0.2mm.inst.cfg index 08e5a9f7a2..d5f520eb71 100644 --- a/resources/quality/ultimaker_methodx/um_methodx_labs_um-nylon-175_0.2mm.inst.cfg +++ b/resources/quality/ultimaker_methodx/um_methodx_labs_um-nylon-175_0.2mm.inst.cfg @@ -27,7 +27,7 @@ raft_base_speed = 10 raft_base_thickness = 0.6 raft_interface_thickness = 0.25 retraction_amount = 0.5 -retraction_min_travel = 3.2ƒ√ +retraction_min_travel = 3.2 small_skin_width = 3.6 speed_prime_tower = =speed_print speed_print = 50 @@ -54,5 +54,5 @@ support_structure = tree support_supported_skin_fan_speed = 75 support_wall_count = 1 support_xy_distance = 0.3 -support_z_distance = 0.3 +support_z_distance = =layer_height*2 From 34eac462bd5655e2b8075966afab6cd46fd55973 Mon Sep 17 00:00:00 2001 From: Remco Burema Date: Wed, 23 Jul 2025 16:58:09 +0200 Subject: [PATCH 13/26] More authentication, since printer-API call-responses can include user-info. The new regulations make a decent amount of sense -- but just because we agree with them doesn't mean we'd implemented this yet. Anyway, information wich can be used to personally identify people should be kept behind (virtual) locks and bars. The new firmware will only allow certain operations _after_ a request has been made to the .../auth/request endpoint, and someone in the physical vicinity (of the printer) has pressed ALLOW on a popup (with the application and name of the requester shown, on the printers' UI). After that, _as long as you put the relevant Authorization Digest in your HTTP headers_ (and use at least SHA-256), you may proceed to make other requests without the printer-server flipping out with a FORBIDDEN error. The current commit _should_ also still work with printers that still have old (well, current I guess...) firmware -- but I didn't test that yet. CURA-12624 --- .../src/Network/ClusterApiClient.py | 90 +++++++++++++++++-- 1 file changed, 85 insertions(+), 5 deletions(-) diff --git a/plugins/UM3NetworkPrinting/src/Network/ClusterApiClient.py b/plugins/UM3NetworkPrinting/src/Network/ClusterApiClient.py index fd8118306b..a1f7a47da6 100644 --- a/plugins/UM3NetworkPrinting/src/Network/ClusterApiClient.py +++ b/plugins/UM3NetworkPrinting/src/Network/ClusterApiClient.py @@ -1,6 +1,8 @@ -# Copyright (c) 2019 Ultimaker B.V. +# Copyright (c) 2025 UltiMaker # Cura is released under the terms of the LGPLv3 or higher. +import hashlib import json +import secrets from json import JSONDecodeError from typing import Callable, List, Optional, Dict, Union, Any, Type, cast, TypeVar, Tuple @@ -9,6 +11,8 @@ from PyQt6.QtNetwork import QNetworkAccessManager, QNetworkRequest, QNetworkRepl from UM.Logger import Logger +from cura.CuraApplication import CuraApplication + from ..Models.BaseModel import BaseModel from ..Models.Http.ClusterPrintJobStatus import ClusterPrintJobStatus from ..Models.Http.ClusterPrinterStatus import ClusterPrinterStatus @@ -27,6 +31,14 @@ class ClusterApiClient: PRINTER_API_PREFIX = "/api/v1" CLUSTER_API_PREFIX = "/cluster-api/v1" + AUTH_REALM = "Jedi-API" + AUTH_QOP = "auth" + AUTH_NC = "00000001" + AUTH_NONCE_LEN = 16 + AUTH_CNONCE_LEN = 8 + + AUTH_MAX_TRIES = 5 + # In order to avoid garbage collection we keep the callbacks in this list. _anti_gc_callbacks = [] # type: List[Callable[[], None]] @@ -40,6 +52,8 @@ class ClusterApiClient: self._manager = QNetworkAccessManager() self._address = address self._on_error = on_error + self._auth_info = None + self._auth_tries = 0 def getSystem(self, on_finished: Callable) -> None: """Get printer system information. @@ -81,13 +95,13 @@ class ClusterApiClient: """Move a print job to the top of the queue.""" url = "{}/print_jobs/{}/action/move".format(self.CLUSTER_API_PREFIX, print_job_uuid) - self._manager.post(self._createEmptyRequest(url), json.dumps({"to_position": 0, "list": "queued"}).encode()) + self._manager.post(self._createEmptyRequest(url, method="POST"), json.dumps({"to_position": 0, "list": "queued"}).encode()) def forcePrintJob(self, print_job_uuid: str) -> None: """Override print job configuration and force it to be printed.""" url = "{}/print_jobs/{}".format(self.CLUSTER_API_PREFIX, print_job_uuid) - self._manager.put(self._createEmptyRequest(url), json.dumps({"force": True}).encode()) + self._manager.put(self._createEmptyRequest(url, method="PUT"), json.dumps({"force": True}).encode()) def deletePrintJob(self, print_job_uuid: str) -> None: """Delete a print job from the queue.""" @@ -101,7 +115,7 @@ class ClusterApiClient: url = "{}/print_jobs/{}/action".format(self.CLUSTER_API_PREFIX, print_job_uuid) # We rewrite 'resume' to 'print' here because we are using the old print job action endpoints. action = "print" if state == "resume" else state - self._manager.put(self._createEmptyRequest(url), json.dumps({"action": action}).encode()) + self._manager.put(self._createEmptyRequest(url, method="PUT"), json.dumps({"action": action}).encode()) def getPrintJobPreviewImage(self, print_job_uuid: str, on_finished: Callable) -> None: """Get the preview image data of a print job.""" @@ -110,16 +124,23 @@ class ClusterApiClient: reply = self._manager.get(self._createEmptyRequest(url)) self._addCallback(reply, on_finished) - def _createEmptyRequest(self, path: str, content_type: Optional[str] = "application/json") -> QNetworkRequest: + def _createEmptyRequest(self, path: str, content_type: Optional[str] = "application/json", method: str = "GET", skip_auth: bool = False) -> QNetworkRequest: """We override _createEmptyRequest in order to add the user credentials. :param url: The URL to request :param content_type: The type of the body contents. + :param method: The HTTP method to use, such as GET, POST, PUT, etc. + :param skip_auth: Skips the authentication step if set; prevents a loop on request of authentication token. """ url = QUrl("http://" + self._address + path) request = QNetworkRequest(url) if content_type: request.setHeader(QNetworkRequest.KnownHeaders.ContentTypeHeader, content_type) + if self._auth_info: + digest_str = self._makeAuthDigestHeaderPart(path, method=method) + request.setRawHeader(b"Authorization", f"Digest {digest_str}".encode("utf-8")) + elif not skip_auth: + self._setupAuth() return request @staticmethod @@ -158,6 +179,65 @@ class ClusterApiClient: except (JSONDecodeError, TypeError, ValueError): Logger.log("e", "Could not parse response from network: %s", str(response)) + def _makeAuthDigestHeaderPart(self, url_part: str, method: str = "GET") -> str: + """ Make the data-part for a Digest Authentication HTTP-header. + + :param url_part: The part of the URL beyond the host name. + :param method: The HTTP method to use, such as GET, POST, PUT, etc. + :return: A string with the data, can be used as in `f"Digest {return_value}".encode()`. + """ + + def sha256_utf8(x: str) -> str: + return hashlib.sha256(x.encode("utf-8")).hexdigest() + + nonce = secrets.token_hex(ClusterApiClient.AUTH_NONCE_LEN) + cnonce = secrets.token_hex(ClusterApiClient.AUTH_CNONCE_LEN) + + ha1 = sha256_utf8(f"{self._auth_info["id"]}:{ClusterApiClient.AUTH_REALM}:{self._auth_info["key"]}") + ha2 = sha256_utf8(f"{method}:{url_part}") + resp_digest = sha256_utf8(f"{ha1}:{nonce}:{ClusterApiClient.AUTH_NC}:{cnonce}:{ClusterApiClient.AUTH_QOP}:{ha2}") + return ", ".join([ + f'username="{self._auth_info["id"]}"', + f'realm="{ClusterApiClient.AUTH_REALM}"', + f'nonce="{nonce}"', + f'uri="{url_part}"', + f'nc={ClusterApiClient.AUTH_NC}', + f'cnonce="{cnonce}"', + f'qop={ClusterApiClient.AUTH_QOP}', + f'response="{resp_digest}"', + f'algorithm="SHA-256"' + ]) + + def _setupAuth(self) -> None: + """ Handles the setup process for authentication by making a temporary digest-token request to the printer API. + """ + + if self._auth_tries >= ClusterApiClient.AUTH_MAX_TRIES: + Logger.warning("Maximum authorization temporary digest-token request tries exceeded. Is printer-firmware up to date?") + return + + username = CuraApplication.getInstance().getCuraAPI().account.userName + if (not username) or username == "": + return + + def on_finished(resp) -> None: + self._auth_tries += 1 + try: + self._auth_info = json.loads(resp.data().decode()) + except Exception as ex: + Logger.warning(f"Couldn't get temporary digest token: {str(ex)}") + return + self._auth_tries = 0 + + url = "{}/auth/request".format(self.PRINTER_API_PREFIX) + request_body = json.dumps({ + "application": CuraApplication.getInstance().getApplicationDisplayName(), + "user": username, + }).encode("utf-8") + reply = self._manager.post(self._createEmptyRequest(url, method="POST", skip_auth=True), request_body) + + self._addCallback(reply, on_finished) + def _addCallback(self, reply: QNetworkReply, on_finished: Union[Callable[[ClusterApiClientModel], Any], Callable[[List[ClusterApiClientModel]], Any]], model: Type[ClusterApiClientModel] = None, ) -> None: From 115d2d5b775901a966aa66ff0ae1393acb4dab48 Mon Sep 17 00:00:00 2001 From: Remco Burema Date: Wed, 23 Jul 2025 18:19:17 +0200 Subject: [PATCH 14/26] Fix 2 calls w.r.t. new authorization workflow _outside_ of the API. New rules means we have to put printjobs and such behind a little authentication, as these contain personally identifiable info. These two effected calls where found _outside_ of the API class where I thought to be able to fix it 100%. See also the TODO's in the neighbourhood -- but I'm not sure I can just do what those say (move the relevant methods to the API), as those methods to be moved are _inside_ the larger Cura SDK (and they're public) and the place where I'm meant to move them to (the ClusterAPIClient) is _not_ (as they're in a plugin). part of CURA-12624 --- .../NetworkedPrinterOutputDevice.py | 6 +++-- .../src/Network/ClusterApiClient.py | 22 +++++++++---------- .../src/Network/LocalClusterOutputDevice.py | 3 ++- .../src/Network/SendMaterialJob.py | 3 ++- 4 files changed, 19 insertions(+), 15 deletions(-) diff --git a/cura/PrinterOutput/NetworkedPrinterOutputDevice.py b/cura/PrinterOutput/NetworkedPrinterOutputDevice.py index 1d0be1389e..0eb55d81c5 100644 --- a/cura/PrinterOutput/NetworkedPrinterOutputDevice.py +++ b/cura/PrinterOutput/NetworkedPrinterOutputDevice.py @@ -288,9 +288,11 @@ class NetworkedPrinterOutputDevice(PrinterOutputDevice): def postFormWithParts(self, target: str, parts: List[QHttpPart], on_finished: Optional[Callable[[QNetworkReply], None]], - on_progress: Optional[Callable[[int, int], None]] = None) -> QNetworkReply: + on_progress: Optional[Callable[[int, int], None]] = None, + request: Optional[QNetworkRequest] = None) -> QNetworkReply: self._validateManager() - request = self._createEmptyRequest(target, content_type=None) + if request is None: + request = self._createEmptyRequest(target, content_type=None) multi_post_part = QHttpMultiPart(QHttpMultiPart.ContentType.FormDataType) for part in parts: multi_post_part.append(part) diff --git a/plugins/UM3NetworkPrinting/src/Network/ClusterApiClient.py b/plugins/UM3NetworkPrinting/src/Network/ClusterApiClient.py index a1f7a47da6..ed92b4aafe 100644 --- a/plugins/UM3NetworkPrinting/src/Network/ClusterApiClient.py +++ b/plugins/UM3NetworkPrinting/src/Network/ClusterApiClient.py @@ -61,7 +61,7 @@ class ClusterApiClient: :param on_finished: The callback in case the response is successful. """ url = "{}/system".format(self.PRINTER_API_PREFIX) - reply = self._manager.get(self._createEmptyRequest(url)) + reply = self._manager.get(self.createEmptyRequest(url)) self._addCallback(reply, on_finished, PrinterSystemStatus) def getMaterials(self, on_finished: Callable[[List[ClusterMaterial]], Any]) -> None: @@ -70,7 +70,7 @@ class ClusterApiClient: :param on_finished: The callback in case the response is successful. """ url = "{}/materials".format(self.CLUSTER_API_PREFIX) - reply = self._manager.get(self._createEmptyRequest(url)) + reply = self._manager.get(self.createEmptyRequest(url)) self._addCallback(reply, on_finished, ClusterMaterial) def getPrinters(self, on_finished: Callable[[List[ClusterPrinterStatus]], Any]) -> None: @@ -79,7 +79,7 @@ class ClusterApiClient: :param on_finished: The callback in case the response is successful. """ url = "{}/printers".format(self.CLUSTER_API_PREFIX) - reply = self._manager.get(self._createEmptyRequest(url)) + reply = self._manager.get(self.createEmptyRequest(url)) self._addCallback(reply, on_finished, ClusterPrinterStatus) def getPrintJobs(self, on_finished: Callable[[List[ClusterPrintJobStatus]], Any]) -> None: @@ -88,26 +88,26 @@ class ClusterApiClient: :param on_finished: The callback in case the response is successful. """ url = "{}/print_jobs".format(self.CLUSTER_API_PREFIX) - reply = self._manager.get(self._createEmptyRequest(url)) + reply = self._manager.get(self.createEmptyRequest(url)) self._addCallback(reply, on_finished, ClusterPrintJobStatus) def movePrintJobToTop(self, print_job_uuid: str) -> None: """Move a print job to the top of the queue.""" url = "{}/print_jobs/{}/action/move".format(self.CLUSTER_API_PREFIX, print_job_uuid) - self._manager.post(self._createEmptyRequest(url, method="POST"), json.dumps({"to_position": 0, "list": "queued"}).encode()) + self._manager.post(self.createEmptyRequest(url, method="POST"), json.dumps({"to_position": 0, "list": "queued"}).encode()) def forcePrintJob(self, print_job_uuid: str) -> None: """Override print job configuration and force it to be printed.""" url = "{}/print_jobs/{}".format(self.CLUSTER_API_PREFIX, print_job_uuid) - self._manager.put(self._createEmptyRequest(url, method="PUT"), json.dumps({"force": True}).encode()) + self._manager.put(self.createEmptyRequest(url, method="PUT"), json.dumps({"force": True}).encode()) def deletePrintJob(self, print_job_uuid: str) -> None: """Delete a print job from the queue.""" url = "{}/print_jobs/{}".format(self.CLUSTER_API_PREFIX, print_job_uuid) - self._manager.deleteResource(self._createEmptyRequest(url)) + self._manager.deleteResource(self.createEmptyRequest(url)) def setPrintJobState(self, print_job_uuid: str, state: str) -> None: """Set the state of a print job.""" @@ -115,16 +115,16 @@ class ClusterApiClient: url = "{}/print_jobs/{}/action".format(self.CLUSTER_API_PREFIX, print_job_uuid) # We rewrite 'resume' to 'print' here because we are using the old print job action endpoints. action = "print" if state == "resume" else state - self._manager.put(self._createEmptyRequest(url, method="PUT"), json.dumps({"action": action}).encode()) + self._manager.put(self.createEmptyRequest(url, method="PUT"), json.dumps({"action": action}).encode()) def getPrintJobPreviewImage(self, print_job_uuid: str, on_finished: Callable) -> None: """Get the preview image data of a print job.""" url = "{}/print_jobs/{}/preview_image".format(self.CLUSTER_API_PREFIX, print_job_uuid) - reply = self._manager.get(self._createEmptyRequest(url)) + reply = self._manager.get(self.createEmptyRequest(url)) self._addCallback(reply, on_finished) - def _createEmptyRequest(self, path: str, content_type: Optional[str] = "application/json", method: str = "GET", skip_auth: bool = False) -> QNetworkRequest: + def createEmptyRequest(self, path: str, content_type: Optional[str] = "application/json", method: str = "GET", skip_auth: bool = False) -> QNetworkRequest: """We override _createEmptyRequest in order to add the user credentials. :param url: The URL to request @@ -234,7 +234,7 @@ class ClusterApiClient: "application": CuraApplication.getInstance().getApplicationDisplayName(), "user": username, }).encode("utf-8") - reply = self._manager.post(self._createEmptyRequest(url, method="POST", skip_auth=True), request_body) + reply = self._manager.post(self.createEmptyRequest(url, method="POST", skip_auth=True), request_body) self._addCallback(reply, on_finished) diff --git a/plugins/UM3NetworkPrinting/src/Network/LocalClusterOutputDevice.py b/plugins/UM3NetworkPrinting/src/Network/LocalClusterOutputDevice.py index 2a57bd0321..f9e0b95b59 100644 --- a/plugins/UM3NetworkPrinting/src/Network/LocalClusterOutputDevice.py +++ b/plugins/UM3NetworkPrinting/src/Network/LocalClusterOutputDevice.py @@ -204,7 +204,8 @@ class LocalClusterOutputDevice(UltimakerNetworkedPrinterOutputDevice): parts.append(self._createFormPart("name=require_printer_name", bytes(unique_name, "utf-8"), "text/plain")) # FIXME: move form posting to API client self.postFormWithParts("/cluster-api/v1/print_jobs/", parts, on_finished=self._onPrintUploadCompleted, - on_progress=self._onPrintJobUploadProgress) + on_progress=self._onPrintJobUploadProgress, + request=self._cluster_api.createEmptyRequest("/cluster-api/v1/print_jobs/", content_type=None, method="POST")) self._active_exported_job = None def _onPrintJobUploadProgress(self, bytes_sent: int, bytes_total: int) -> None: diff --git a/plugins/UM3NetworkPrinting/src/Network/SendMaterialJob.py b/plugins/UM3NetworkPrinting/src/Network/SendMaterialJob.py index 9f5484ba15..2f3fb9ff19 100644 --- a/plugins/UM3NetworkPrinting/src/Network/SendMaterialJob.py +++ b/plugins/UM3NetworkPrinting/src/Network/SendMaterialJob.py @@ -147,7 +147,8 @@ class SendMaterialJob(Job): # FIXME: move form posting to API client self.device.postFormWithParts(target = "/cluster-api/v1/materials/", parts = parts, - on_finished = self._sendingFinished) + on_finished = self._sendingFinished, + request=self._cluster_api.createEmptyRequest("/cluster-api/v1/materials/", content_type=None, method="POST")) def _sendingFinished(self, reply: QNetworkReply) -> None: """Check a reply from an upload to the printer and log an error when the call failed""" From 7f35a5074b3dc3f417cc7a5f5cd311bbd120b8da Mon Sep 17 00:00:00 2001 From: Remco Burema Date: Wed, 23 Jul 2025 20:25:17 +0200 Subject: [PATCH 15/26] Make authentication info a little less brittle. Otherwise if the server (on the printer) gives back something that can be parsed into JSON, but _isn't_ the authorization digest info, the thing breaks. part of CURA-12624 --- .../src/Network/ClusterApiClient.py | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/plugins/UM3NetworkPrinting/src/Network/ClusterApiClient.py b/plugins/UM3NetworkPrinting/src/Network/ClusterApiClient.py index ed92b4aafe..c7562db96b 100644 --- a/plugins/UM3NetworkPrinting/src/Network/ClusterApiClient.py +++ b/plugins/UM3NetworkPrinting/src/Network/ClusterApiClient.py @@ -52,7 +52,8 @@ class ClusterApiClient: self._manager = QNetworkAccessManager() self._address = address self._on_error = on_error - self._auth_info = None + self._auth_id = None + self._auth_key = None self._auth_tries = 0 def getSystem(self, on_finished: Callable) -> None: @@ -136,7 +137,7 @@ class ClusterApiClient: request = QNetworkRequest(url) if content_type: request.setHeader(QNetworkRequest.KnownHeaders.ContentTypeHeader, content_type) - if self._auth_info: + if self._auth_id and self._auth_key: digest_str = self._makeAuthDigestHeaderPart(path, method=method) request.setRawHeader(b"Authorization", f"Digest {digest_str}".encode("utf-8")) elif not skip_auth: @@ -193,11 +194,11 @@ class ClusterApiClient: nonce = secrets.token_hex(ClusterApiClient.AUTH_NONCE_LEN) cnonce = secrets.token_hex(ClusterApiClient.AUTH_CNONCE_LEN) - ha1 = sha256_utf8(f"{self._auth_info["id"]}:{ClusterApiClient.AUTH_REALM}:{self._auth_info["key"]}") + ha1 = sha256_utf8(f"{self._auth_id}:{ClusterApiClient.AUTH_REALM}:{self._auth_key}") ha2 = sha256_utf8(f"{method}:{url_part}") resp_digest = sha256_utf8(f"{ha1}:{nonce}:{ClusterApiClient.AUTH_NC}:{cnonce}:{ClusterApiClient.AUTH_QOP}:{ha2}") return ", ".join([ - f'username="{self._auth_info["id"]}"', + f'username="{self._auth_id}"', f'realm="{ClusterApiClient.AUTH_REALM}"', f'nonce="{nonce}"', f'uri="{url_part}"', @@ -223,7 +224,9 @@ class ClusterApiClient: def on_finished(resp) -> None: self._auth_tries += 1 try: - self._auth_info = json.loads(resp.data().decode()) + auth_info = json.loads(resp.data().decode()) + self._auth_id = auth_info["id"] + self._auth_key = auth_info["key"] except Exception as ex: Logger.warning(f"Couldn't get temporary digest token: {str(ex)}") return From 75fc0782da38f591796a2885a29c4ecaedbd9a0d Mon Sep 17 00:00:00 2001 From: Remco Burema Date: Tue, 29 Jul 2025 11:00:15 +0200 Subject: [PATCH 16/26] Code review: Replace string with enum. First use of 3.11's StrEnum in the code base I think -- anyway, Python autoboxes these (maybe even the old str,enum things as well, but irrelevant now), so there's nothing in the way of making this an enum and have type-_checking_ instead of type-_o_'s. done as part of CURA-12624 --- .../src/Network/ClusterApiClient.py | 27 ++++++++++++++----- 1 file changed, 20 insertions(+), 7 deletions(-) diff --git a/plugins/UM3NetworkPrinting/src/Network/ClusterApiClient.py b/plugins/UM3NetworkPrinting/src/Network/ClusterApiClient.py index c7562db96b..5cd8457188 100644 --- a/plugins/UM3NetworkPrinting/src/Network/ClusterApiClient.py +++ b/plugins/UM3NetworkPrinting/src/Network/ClusterApiClient.py @@ -3,6 +3,7 @@ import hashlib import json import secrets +from enum import StrEnum from json import JSONDecodeError from typing import Callable, List, Optional, Dict, Union, Any, Type, cast, TypeVar, Tuple @@ -24,6 +25,18 @@ ClusterApiClientModel = TypeVar("ClusterApiClientModel", bound=BaseModel) """The generic type variable used to document the methods below.""" +class HttpRequestMethod(StrEnum): + GET = "GET", + HEAD = "HEAD", + POST = "POST", + PUT = "PUT", + DELETE = "DELETE", + CONNECT = "CONNECT", + OPTIONS = "OPTIONS", + TRACE = "TRACE", + PATCH = "PATCH", + + class ClusterApiClient: """The ClusterApiClient is responsible for all network calls to local network clusters.""" @@ -96,13 +109,13 @@ class ClusterApiClient: """Move a print job to the top of the queue.""" url = "{}/print_jobs/{}/action/move".format(self.CLUSTER_API_PREFIX, print_job_uuid) - self._manager.post(self.createEmptyRequest(url, method="POST"), json.dumps({"to_position": 0, "list": "queued"}).encode()) + self._manager.post(self.createEmptyRequest(url, method=HttpRequestMethod.POST), json.dumps({"to_position": 0, "list": "queued"}).encode()) def forcePrintJob(self, print_job_uuid: str) -> None: """Override print job configuration and force it to be printed.""" url = "{}/print_jobs/{}".format(self.CLUSTER_API_PREFIX, print_job_uuid) - self._manager.put(self.createEmptyRequest(url, method="PUT"), json.dumps({"force": True}).encode()) + self._manager.put(self.createEmptyRequest(url, method=HttpRequestMethod.PUT), json.dumps({"force": True}).encode()) def deletePrintJob(self, print_job_uuid: str) -> None: """Delete a print job from the queue.""" @@ -116,7 +129,7 @@ class ClusterApiClient: url = "{}/print_jobs/{}/action".format(self.CLUSTER_API_PREFIX, print_job_uuid) # We rewrite 'resume' to 'print' here because we are using the old print job action endpoints. action = "print" if state == "resume" else state - self._manager.put(self.createEmptyRequest(url, method="PUT"), json.dumps({"action": action}).encode()) + self._manager.put(self.createEmptyRequest(url, method=HttpRequestMethod.PUT), json.dumps({"action": action}).encode()) def getPrintJobPreviewImage(self, print_job_uuid: str, on_finished: Callable) -> None: """Get the preview image data of a print job.""" @@ -125,10 +138,10 @@ class ClusterApiClient: reply = self._manager.get(self.createEmptyRequest(url)) self._addCallback(reply, on_finished) - def createEmptyRequest(self, path: str, content_type: Optional[str] = "application/json", method: str = "GET", skip_auth: bool = False) -> QNetworkRequest: + def createEmptyRequest(self, path: str, content_type: Optional[str] = "application/json", method: HttpRequestMethod = HttpRequestMethod.GET, skip_auth: bool = False) -> QNetworkRequest: """We override _createEmptyRequest in order to add the user credentials. - :param url: The URL to request + :param path: Part added to the base-endpoint forming the total request URL (the path from the endpoint to the requested resource). :param content_type: The type of the body contents. :param method: The HTTP method to use, such as GET, POST, PUT, etc. :param skip_auth: Skips the authentication step if set; prevents a loop on request of authentication token. @@ -180,7 +193,7 @@ class ClusterApiClient: except (JSONDecodeError, TypeError, ValueError): Logger.log("e", "Could not parse response from network: %s", str(response)) - def _makeAuthDigestHeaderPart(self, url_part: str, method: str = "GET") -> str: + def _makeAuthDigestHeaderPart(self, url_part: str, method: HttpRequestMethod = HttpRequestMethod.GET) -> str: """ Make the data-part for a Digest Authentication HTTP-header. :param url_part: The part of the URL beyond the host name. @@ -237,7 +250,7 @@ class ClusterApiClient: "application": CuraApplication.getInstance().getApplicationDisplayName(), "user": username, }).encode("utf-8") - reply = self._manager.post(self.createEmptyRequest(url, method="POST", skip_auth=True), request_body) + reply = self._manager.post(self.createEmptyRequest(url, method=HttpRequestMethod.POST, skip_auth=True), request_body) self._addCallback(reply, on_finished) From 6b1f29cdb1f25aa12303fa88c40864c56e5df3bc Mon Sep 17 00:00:00 2001 From: Frederic Meeuwissen <13856291+Frederic98@users.noreply.github.com> Date: Fri, 22 Aug 2025 14:12:07 +0200 Subject: [PATCH 17/26] Fix crash on AttributeError --- .../src/Network/LocalClusterOutputDevice.py | 20 +++++++++---------- .../src/Network/SendMaterialJob.py | 2 +- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/plugins/UM3NetworkPrinting/src/Network/LocalClusterOutputDevice.py b/plugins/UM3NetworkPrinting/src/Network/LocalClusterOutputDevice.py index f9e0b95b59..f51ff5a4e8 100644 --- a/plugins/UM3NetworkPrinting/src/Network/LocalClusterOutputDevice.py +++ b/plugins/UM3NetworkPrinting/src/Network/LocalClusterOutputDevice.py @@ -94,15 +94,15 @@ class LocalClusterOutputDevice(UltimakerNetworkedPrinterOutputDevice): @pyqtSlot(str, name="sendJobToTop") def sendJobToTop(self, print_job_uuid: str) -> None: - self._getApiClient().movePrintJobToTop(print_job_uuid) + self.getApiClient().movePrintJobToTop(print_job_uuid) @pyqtSlot(str, name="deleteJobFromQueue") def deleteJobFromQueue(self, print_job_uuid: str) -> None: - self._getApiClient().deletePrintJob(print_job_uuid) + self.getApiClient().deletePrintJob(print_job_uuid) @pyqtSlot(str, name="forceSendJob") def forceSendJob(self, print_job_uuid: str) -> None: - self._getApiClient().forcePrintJob(print_job_uuid) + self.getApiClient().forcePrintJob(print_job_uuid) def setJobState(self, print_job_uuid: str, action: str) -> None: """Set the remote print job state. @@ -111,20 +111,20 @@ class LocalClusterOutputDevice(UltimakerNetworkedPrinterOutputDevice): :param action: The action to undertake ('pause', 'resume', 'abort'). """ - self._getApiClient().setPrintJobState(print_job_uuid, action) + self.getApiClient().setPrintJobState(print_job_uuid, action) def _update(self) -> None: super()._update() if time() - self._time_of_last_request < self.CHECK_CLUSTER_INTERVAL: return # avoid calling the cluster too often - self._getApiClient().getPrinters(self._updatePrinters) - self._getApiClient().getPrintJobs(self._updatePrintJobs) + self.getApiClient().getPrinters(self._updatePrinters) + self.getApiClient().getPrintJobs(self._updatePrintJobs) self._updatePrintJobPreviewImages() def getMaterials(self, on_finished: Callable[[List[ClusterMaterial]], Any]) -> None: """Get a list of materials that are installed on the cluster host.""" - self._getApiClient().getMaterials(on_finished = on_finished) + self.getApiClient().getMaterials(on_finished = on_finished) def sendMaterialProfiles(self) -> None: """Sync the material profiles in Cura with the printer. @@ -205,7 +205,7 @@ class LocalClusterOutputDevice(UltimakerNetworkedPrinterOutputDevice): # FIXME: move form posting to API client self.postFormWithParts("/cluster-api/v1/print_jobs/", parts, on_finished=self._onPrintUploadCompleted, on_progress=self._onPrintJobUploadProgress, - request=self._cluster_api.createEmptyRequest("/cluster-api/v1/print_jobs/", content_type=None, method="POST")) + request=self.getApiClient().createEmptyRequest("/cluster-api/v1/print_jobs/", content_type=None, method="POST")) self._active_exported_job = None def _onPrintJobUploadProgress(self, bytes_sent: int, bytes_total: int) -> None: @@ -237,9 +237,9 @@ class LocalClusterOutputDevice(UltimakerNetworkedPrinterOutputDevice): for print_job in self._print_jobs: if print_job.getPreviewImage() is None: - self._getApiClient().getPrintJobPreviewImage(print_job.key, print_job.updatePreviewImageData) + self.getApiClient().getPrintJobPreviewImage(print_job.key, print_job.updatePreviewImageData) - def _getApiClient(self) -> ClusterApiClient: + def getApiClient(self) -> ClusterApiClient: """Get the API client instance.""" if not self._cluster_api: diff --git a/plugins/UM3NetworkPrinting/src/Network/SendMaterialJob.py b/plugins/UM3NetworkPrinting/src/Network/SendMaterialJob.py index 2f3fb9ff19..3b9f127c77 100644 --- a/plugins/UM3NetworkPrinting/src/Network/SendMaterialJob.py +++ b/plugins/UM3NetworkPrinting/src/Network/SendMaterialJob.py @@ -148,7 +148,7 @@ class SendMaterialJob(Job): # FIXME: move form posting to API client self.device.postFormWithParts(target = "/cluster-api/v1/materials/", parts = parts, on_finished = self._sendingFinished, - request=self._cluster_api.createEmptyRequest("/cluster-api/v1/materials/", content_type=None, method="POST")) + request=self.device.getApiClient().createEmptyRequest("/cluster-api/v1/materials/", content_type=None, method="POST")) def _sendingFinished(self, reply: QNetworkReply) -> None: """Check a reply from an upload to the printer and log an error when the call failed""" From 7fc87cb4c126bf77d3104a379f53fc6755544d6e Mon Sep 17 00:00:00 2001 From: Remco Burema Date: Wed, 3 Sep 2025 14:28:12 +0200 Subject: [PATCH 18/26] Fill in correct nonce and nonce-count for cluster-auth. part of CURA-12624 --- .../src/Network/ClusterApiClient.py | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/plugins/UM3NetworkPrinting/src/Network/ClusterApiClient.py b/plugins/UM3NetworkPrinting/src/Network/ClusterApiClient.py index 5cd8457188..1a0a915a03 100644 --- a/plugins/UM3NetworkPrinting/src/Network/ClusterApiClient.py +++ b/plugins/UM3NetworkPrinting/src/Network/ClusterApiClient.py @@ -2,6 +2,7 @@ # Cura is released under the terms of the LGPLv3 or higher. import hashlib import json +import re import secrets from enum import StrEnum from json import JSONDecodeError @@ -46,7 +47,6 @@ class ClusterApiClient: AUTH_REALM = "Jedi-API" AUTH_QOP = "auth" - AUTH_NC = "00000001" AUTH_NONCE_LEN = 16 AUTH_CNONCE_LEN = 8 @@ -69,6 +69,9 @@ class ClusterApiClient: self._auth_key = None self._auth_tries = 0 + self._nonce_count = 1 + self._nonce = None + def getSystem(self, on_finished: Callable) -> None: """Get printer system information. @@ -153,6 +156,7 @@ class ClusterApiClient: if self._auth_id and self._auth_key: digest_str = self._makeAuthDigestHeaderPart(path, method=method) request.setRawHeader(b"Authorization", f"Digest {digest_str}".encode("utf-8")) + self._nonce_count += 1 elif not skip_auth: self._setupAuth() return request @@ -204,18 +208,19 @@ class ClusterApiClient: def sha256_utf8(x: str) -> str: return hashlib.sha256(x.encode("utf-8")).hexdigest() - nonce = secrets.token_hex(ClusterApiClient.AUTH_NONCE_LEN) + nonce = secrets.token_hex(ClusterApiClient.AUTH_NONCE_LEN) if self._nonce is None else self._nonce cnonce = secrets.token_hex(ClusterApiClient.AUTH_CNONCE_LEN) + auth_nc = f"{self._nonce_count:08x}" ha1 = sha256_utf8(f"{self._auth_id}:{ClusterApiClient.AUTH_REALM}:{self._auth_key}") ha2 = sha256_utf8(f"{method}:{url_part}") - resp_digest = sha256_utf8(f"{ha1}:{nonce}:{ClusterApiClient.AUTH_NC}:{cnonce}:{ClusterApiClient.AUTH_QOP}:{ha2}") + resp_digest = sha256_utf8(f"{ha1}:{nonce}:{auth_nc}:{cnonce}:{ClusterApiClient.AUTH_QOP}:{ha2}") return ", ".join([ f'username="{self._auth_id}"', f'realm="{ClusterApiClient.AUTH_REALM}"', f'nonce="{nonce}"', f'uri="{url_part}"', - f'nc={ClusterApiClient.AUTH_NC}', + f'nc={auth_nc}', f'cnonce="{cnonce}"', f'qop={ClusterApiClient.AUTH_QOP}', f'response="{resp_digest}"', @@ -275,6 +280,11 @@ class ClusterApiClient: return if reply.error() != QNetworkReply.NetworkError.NoError: + if reply.error() == QNetworkReply.NetworkError.AuthenticationRequiredError: + nonce_match = re.search(r'nonce="([^"]+)', str(reply.rawHeader(b"WWW-Authenticate"))) + if nonce_match: + self._nonce = nonce_match.group(1) + self._nonce_count = 1 self._on_error(reply.errorString()) return From 70a8f9b0a3f816f6ce0de34fe22fff5c086a608c Mon Sep 17 00:00:00 2001 From: Remco Burema Date: Wed, 3 Sep 2025 14:37:18 +0200 Subject: [PATCH 19/26] Use machine-node-ID as username. Otherwise there's _still_ personal information in there. part of CURA-12624 --- plugins/UM3NetworkPrinting/src/Network/ClusterApiClient.py | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/plugins/UM3NetworkPrinting/src/Network/ClusterApiClient.py b/plugins/UM3NetworkPrinting/src/Network/ClusterApiClient.py index 1a0a915a03..bbe7932d66 100644 --- a/plugins/UM3NetworkPrinting/src/Network/ClusterApiClient.py +++ b/plugins/UM3NetworkPrinting/src/Network/ClusterApiClient.py @@ -2,6 +2,7 @@ # Cura is released under the terms of the LGPLv3 or higher. import hashlib import json +import platform import re import secrets from enum import StrEnum @@ -235,10 +236,6 @@ class ClusterApiClient: Logger.warning("Maximum authorization temporary digest-token request tries exceeded. Is printer-firmware up to date?") return - username = CuraApplication.getInstance().getCuraAPI().account.userName - if (not username) or username == "": - return - def on_finished(resp) -> None: self._auth_tries += 1 try: @@ -253,7 +250,7 @@ class ClusterApiClient: url = "{}/auth/request".format(self.PRINTER_API_PREFIX) request_body = json.dumps({ "application": CuraApplication.getInstance().getApplicationDisplayName(), - "user": username, + "user": f"user@{platform.node()}", }).encode("utf-8") reply = self._manager.post(self.createEmptyRequest(url, method=HttpRequestMethod.POST, skip_auth=True), request_body) From a8ac8e93324cda60a36191657474a7a730a2e540 Mon Sep 17 00:00:00 2001 From: Remco Burema Date: Tue, 9 Sep 2025 09:27:23 +0200 Subject: [PATCH 20/26] Forgot to update this (needed for authentication). part of CURA-12624 --- plugins/UM3NetworkPrinting/src/Network/ClusterApiClient.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/UM3NetworkPrinting/src/Network/ClusterApiClient.py b/plugins/UM3NetworkPrinting/src/Network/ClusterApiClient.py index bbe7932d66..25617ce824 100644 --- a/plugins/UM3NetworkPrinting/src/Network/ClusterApiClient.py +++ b/plugins/UM3NetworkPrinting/src/Network/ClusterApiClient.py @@ -125,7 +125,7 @@ class ClusterApiClient: """Delete a print job from the queue.""" url = "{}/print_jobs/{}".format(self.CLUSTER_API_PREFIX, print_job_uuid) - self._manager.deleteResource(self.createEmptyRequest(url)) + self._manager.deleteResource(self.createEmptyRequest(url, method=HttpRequestMethod.DELETE)) def setPrintJobState(self, print_job_uuid: str, state: str) -> None: """Set the state of a print job.""" From b5908c173c57317fe866341dc002d89d89042a2f Mon Sep 17 00:00:00 2001 From: Paul Kuiper <46715907+pkuiper-ultimaker@users.noreply.github.com> Date: Thu, 11 Sep 2025 08:29:02 +0200 Subject: [PATCH 21/26] Lowered prime tower speed in high speed intents. Removed high speed intents for Method. Fixed bug in support infill rate formula (forgot string quotes) PP-577 --- ...d_1a_um-nylon-175_0.2mm_highspeed.inst.cfg | 25 --------------- ...um-nylon-175_0.2mm_highspeedsolid.inst.cfg | 31 ------------------- ...d_1c_um-nylon-175_0.2mm_highspeed.inst.cfg | 25 --------------- ...um-nylon-175_0.2mm_highspeedsolid.inst.cfg | 31 ------------------- ...labs_um-nylon-175_0.2mm_highspeed.inst.cfg | 25 --------------- ...um-nylon-175_0.2mm_highspeedsolid.inst.cfg | 31 ------------------- ...x_1a_um-nylon-175_0.2mm_highspeed.inst.cfg | 25 --------------- ...um-nylon-175_0.2mm_highspeedsolid.inst.cfg | 31 ------------------- ...dx_1c_um-absr-175_0.2mm_highspeed.inst.cfg | 1 + ..._um-absr-175_0.2mm_highspeedsolid.inst.cfg | 1 + ...x_1c_um-nylon-175_0.2mm_highspeed.inst.cfg | 25 --------------- ...um-nylon-175_0.2mm_highspeedsolid.inst.cfg | 31 ------------------- ...x_1xa_um-absr-175_0.2mm_highspeed.inst.cfg | 1 + ..._um-absr-175_0.2mm_highspeedsolid.inst.cfg | 1 + ..._labs_um-absr-175_0.2mm_highspeed.inst.cfg | 1 + ..._um-absr-175_0.2mm_highspeedsolid.inst.cfg | 1 + ...labs_um-nylon-175_0.2mm_highspeed.inst.cfg | 25 --------------- ...um-nylon-175_0.2mm_highspeedsolid.inst.cfg | 31 ------------------- ...xl_1c_um-absr-175_0.2mm_highspeed.inst.cfg | 1 + ..._um-absr-175_0.2mm_highspeedsolid.inst.cfg | 1 + ...l_1xa_um-absr-175_0.2mm_highspeed.inst.cfg | 1 + ..._um-absr-175_0.2mm_highspeedsolid.inst.cfg | 1 + ..._labs_um-absr-175_0.2mm_highspeed.inst.cfg | 1 + ..._um-absr-175_0.2mm_highspeedsolid.inst.cfg | 1 + .../um_method_1a_um-nylon-175_0.2mm.inst.cfg | 2 +- .../um_method_1c_um-nylon-175_0.2mm.inst.cfg | 2 +- ...um_method_labs_um-nylon-175_0.2mm.inst.cfg | 2 +- .../um_methodx_1a_um-nylon-175_0.2mm.inst.cfg | 2 +- .../um_methodx_1c_um-nylon-175_0.2mm.inst.cfg | 2 +- ...m_methodx_labs_um-nylon-175_0.2mm.inst.cfg | 2 +- 30 files changed, 18 insertions(+), 342 deletions(-) delete mode 100644 resources/intent/ultimaker_method/um_method_1a_um-nylon-175_0.2mm_highspeed.inst.cfg delete mode 100644 resources/intent/ultimaker_method/um_method_1a_um-nylon-175_0.2mm_highspeedsolid.inst.cfg delete mode 100644 resources/intent/ultimaker_method/um_method_1c_um-nylon-175_0.2mm_highspeed.inst.cfg delete mode 100644 resources/intent/ultimaker_method/um_method_1c_um-nylon-175_0.2mm_highspeedsolid.inst.cfg delete mode 100644 resources/intent/ultimaker_method/um_method_labs_um-nylon-175_0.2mm_highspeed.inst.cfg delete mode 100644 resources/intent/ultimaker_method/um_method_labs_um-nylon-175_0.2mm_highspeedsolid.inst.cfg delete mode 100644 resources/intent/ultimaker_methodx/um_methodx_1a_um-nylon-175_0.2mm_highspeed.inst.cfg delete mode 100644 resources/intent/ultimaker_methodx/um_methodx_1a_um-nylon-175_0.2mm_highspeedsolid.inst.cfg delete mode 100644 resources/intent/ultimaker_methodx/um_methodx_1c_um-nylon-175_0.2mm_highspeed.inst.cfg delete mode 100644 resources/intent/ultimaker_methodx/um_methodx_1c_um-nylon-175_0.2mm_highspeedsolid.inst.cfg delete mode 100644 resources/intent/ultimaker_methodx/um_methodx_labs_um-nylon-175_0.2mm_highspeed.inst.cfg delete mode 100644 resources/intent/ultimaker_methodx/um_methodx_labs_um-nylon-175_0.2mm_highspeedsolid.inst.cfg diff --git a/resources/intent/ultimaker_method/um_method_1a_um-nylon-175_0.2mm_highspeed.inst.cfg b/resources/intent/ultimaker_method/um_method_1a_um-nylon-175_0.2mm_highspeed.inst.cfg deleted file mode 100644 index a864337115..0000000000 --- a/resources/intent/ultimaker_method/um_method_1a_um-nylon-175_0.2mm_highspeed.inst.cfg +++ /dev/null @@ -1,25 +0,0 @@ -[general] -definition = ultimaker_method -name = High Speed -version = 4 - -[metadata] -intent_category = highspeed -is_experimental = True -material = ultimaker_nylon_175 -quality_type = draft -setting_version = 25 -type = intent -variant = 1A - -[values] -acceleration_print = 3500 -bridge_wall_speed = 300 -cool_min_layer_time = 3 -infill_pattern = zigzag -jerk_print = 35 -speed_layer_0 = 55 -speed_print = 300 -speed_travel = 500 -support_pattern = zigzag - diff --git a/resources/intent/ultimaker_method/um_method_1a_um-nylon-175_0.2mm_highspeedsolid.inst.cfg b/resources/intent/ultimaker_method/um_method_1a_um-nylon-175_0.2mm_highspeedsolid.inst.cfg deleted file mode 100644 index 9dd0d6c8fa..0000000000 --- a/resources/intent/ultimaker_method/um_method_1a_um-nylon-175_0.2mm_highspeedsolid.inst.cfg +++ /dev/null @@ -1,31 +0,0 @@ -[general] -definition = ultimaker_method -name = High Speed Solid -version = 4 - -[metadata] -intent_category = highspeedsolid -is_experimental = True -material = ultimaker_nylon_175 -quality_type = draft -setting_version = 25 -type = intent -variant = 1A - -[values] -acceleration_print = 3500 -bottom_thickness = =top_bottom_thickness -bridge_wall_speed = 300 -cool_min_layer_time = 3 -infill_angles = [45,135] -infill_material_flow = 97 -infill_pattern = zigzag -infill_sparse_density = 99 -jerk_print = 35 -speed_layer_0 = 55 -speed_print = 300 -speed_travel = 500 -support_pattern = zigzag -top_bottom_thickness = =layer_height * 2 -top_thickness = =top_bottom_thickness - diff --git a/resources/intent/ultimaker_method/um_method_1c_um-nylon-175_0.2mm_highspeed.inst.cfg b/resources/intent/ultimaker_method/um_method_1c_um-nylon-175_0.2mm_highspeed.inst.cfg deleted file mode 100644 index 8e9ae1594a..0000000000 --- a/resources/intent/ultimaker_method/um_method_1c_um-nylon-175_0.2mm_highspeed.inst.cfg +++ /dev/null @@ -1,25 +0,0 @@ -[general] -definition = ultimaker_method -name = High Speed -version = 4 - -[metadata] -intent_category = highspeed -is_experimental = True -material = ultimaker_nylon_175 -quality_type = draft -setting_version = 25 -type = intent -variant = 1C - -[values] -acceleration_print = 3500 -bridge_wall_speed = 300 -cool_min_layer_time = 3 -infill_pattern = zigzag -jerk_print = 35 -speed_layer_0 = 55 -speed_print = 300 -speed_travel = 500 -support_pattern = zigzag - diff --git a/resources/intent/ultimaker_method/um_method_1c_um-nylon-175_0.2mm_highspeedsolid.inst.cfg b/resources/intent/ultimaker_method/um_method_1c_um-nylon-175_0.2mm_highspeedsolid.inst.cfg deleted file mode 100644 index 65918cdec0..0000000000 --- a/resources/intent/ultimaker_method/um_method_1c_um-nylon-175_0.2mm_highspeedsolid.inst.cfg +++ /dev/null @@ -1,31 +0,0 @@ -[general] -definition = ultimaker_method -name = High Speed Solid -version = 4 - -[metadata] -intent_category = highspeedsolid -is_experimental = True -material = ultimaker_nylon_175 -quality_type = draft -setting_version = 25 -type = intent -variant = 1C - -[values] -acceleration_print = 3500 -bottom_thickness = =top_bottom_thickness -bridge_wall_speed = 300 -cool_min_layer_time = 3 -infill_angles = [45,135] -infill_material_flow = 97 -infill_pattern = zigzag -infill_sparse_density = 99 -jerk_print = 35 -speed_layer_0 = 55 -speed_print = 300 -speed_travel = 500 -support_pattern = zigzag -top_bottom_thickness = =layer_height * 2 -top_thickness = =top_bottom_thickness - diff --git a/resources/intent/ultimaker_method/um_method_labs_um-nylon-175_0.2mm_highspeed.inst.cfg b/resources/intent/ultimaker_method/um_method_labs_um-nylon-175_0.2mm_highspeed.inst.cfg deleted file mode 100644 index c8e31af0be..0000000000 --- a/resources/intent/ultimaker_method/um_method_labs_um-nylon-175_0.2mm_highspeed.inst.cfg +++ /dev/null @@ -1,25 +0,0 @@ -[general] -definition = ultimaker_method -name = High Speed -version = 4 - -[metadata] -intent_category = highspeed -is_experimental = True -material = ultimaker_nylon_175 -quality_type = draft -setting_version = 25 -type = intent -variant = LABS - -[values] -acceleration_print = 3500 -bridge_wall_speed = 300 -cool_min_layer_time = 3 -infill_pattern = zigzag -jerk_print = 35 -speed_layer_0 = 55 -speed_print = 300 -speed_travel = 500 -support_pattern = zigzag - diff --git a/resources/intent/ultimaker_method/um_method_labs_um-nylon-175_0.2mm_highspeedsolid.inst.cfg b/resources/intent/ultimaker_method/um_method_labs_um-nylon-175_0.2mm_highspeedsolid.inst.cfg deleted file mode 100644 index 94aa6c8267..0000000000 --- a/resources/intent/ultimaker_method/um_method_labs_um-nylon-175_0.2mm_highspeedsolid.inst.cfg +++ /dev/null @@ -1,31 +0,0 @@ -[general] -definition = ultimaker_method -name = High Speed Solid -version = 4 - -[metadata] -intent_category = highspeedsolid -is_experimental = True -material = ultimaker_nylon_175 -quality_type = draft -setting_version = 25 -type = intent -variant = LABS - -[values] -acceleration_print = 3500 -bottom_thickness = =top_bottom_thickness -bridge_wall_speed = 300 -cool_min_layer_time = 3 -infill_angles = [45,135] -infill_material_flow = 97 -infill_pattern = zigzag -infill_sparse_density = 99 -jerk_print = 35 -speed_layer_0 = 55 -speed_print = 300 -speed_travel = 500 -support_pattern = zigzag -top_bottom_thickness = =layer_height * 2 -top_thickness = =top_bottom_thickness - diff --git a/resources/intent/ultimaker_methodx/um_methodx_1a_um-nylon-175_0.2mm_highspeed.inst.cfg b/resources/intent/ultimaker_methodx/um_methodx_1a_um-nylon-175_0.2mm_highspeed.inst.cfg deleted file mode 100644 index 967aa0dbf8..0000000000 --- a/resources/intent/ultimaker_methodx/um_methodx_1a_um-nylon-175_0.2mm_highspeed.inst.cfg +++ /dev/null @@ -1,25 +0,0 @@ -[general] -definition = ultimaker_methodx -name = High Speed -version = 4 - -[metadata] -intent_category = highspeed -is_experimental = True -material = ultimaker_nylon_175 -quality_type = draft -setting_version = 25 -type = intent -variant = 1A - -[values] -acceleration_print = 3500 -bridge_wall_speed = 300 -cool_min_layer_time = 3 -infill_pattern = zigzag -jerk_print = 35 -speed_layer_0 = 55 -speed_print = 300 -speed_travel = 500 -support_pattern = zigzag - diff --git a/resources/intent/ultimaker_methodx/um_methodx_1a_um-nylon-175_0.2mm_highspeedsolid.inst.cfg b/resources/intent/ultimaker_methodx/um_methodx_1a_um-nylon-175_0.2mm_highspeedsolid.inst.cfg deleted file mode 100644 index a08f2e1948..0000000000 --- a/resources/intent/ultimaker_methodx/um_methodx_1a_um-nylon-175_0.2mm_highspeedsolid.inst.cfg +++ /dev/null @@ -1,31 +0,0 @@ -[general] -definition = ultimaker_methodx -name = High Speed Solid -version = 4 - -[metadata] -intent_category = highspeedsolid -is_experimental = True -material = ultimaker_nylon_175 -quality_type = draft -setting_version = 25 -type = intent -variant = 1A - -[values] -acceleration_print = 3500 -bottom_thickness = =top_bottom_thickness -bridge_wall_speed = 300 -cool_min_layer_time = 3 -infill_angles = [45,135] -infill_material_flow = 97 -infill_pattern = zigzag -infill_sparse_density = 99 -jerk_print = 35 -speed_layer_0 = 55 -speed_print = 300 -speed_travel = 500 -support_pattern = zigzag -top_bottom_thickness = =layer_height * 2 -top_thickness = =top_bottom_thickness - diff --git a/resources/intent/ultimaker_methodx/um_methodx_1c_um-absr-175_0.2mm_highspeed.inst.cfg b/resources/intent/ultimaker_methodx/um_methodx_1c_um-absr-175_0.2mm_highspeed.inst.cfg index f5a00d9db1..52345bc4c6 100644 --- a/resources/intent/ultimaker_methodx/um_methodx_1c_um-absr-175_0.2mm_highspeed.inst.cfg +++ b/resources/intent/ultimaker_methodx/um_methodx_1c_um-absr-175_0.2mm_highspeed.inst.cfg @@ -22,6 +22,7 @@ cool_min_temperature = 245.0 infill_pattern = zigzag jerk_print = 35 speed_layer_0 = 55 +speed_prime_tower = =speed_print/5 speed_print = 300 speed_support = 100 speed_support_interface = 75 diff --git a/resources/intent/ultimaker_methodx/um_methodx_1c_um-absr-175_0.2mm_highspeedsolid.inst.cfg b/resources/intent/ultimaker_methodx/um_methodx_1c_um-absr-175_0.2mm_highspeedsolid.inst.cfg index 2e098b3a0b..72a2f8e143 100644 --- a/resources/intent/ultimaker_methodx/um_methodx_1c_um-absr-175_0.2mm_highspeedsolid.inst.cfg +++ b/resources/intent/ultimaker_methodx/um_methodx_1c_um-absr-175_0.2mm_highspeedsolid.inst.cfg @@ -26,6 +26,7 @@ infill_pattern = zigzag infill_sparse_density = 99 jerk_print = 35 speed_layer_0 = 55 +speed_prime_tower = =speed_print/5 speed_print = 300 speed_support = 100 speed_support_interface = 75 diff --git a/resources/intent/ultimaker_methodx/um_methodx_1c_um-nylon-175_0.2mm_highspeed.inst.cfg b/resources/intent/ultimaker_methodx/um_methodx_1c_um-nylon-175_0.2mm_highspeed.inst.cfg deleted file mode 100644 index d31a6542b6..0000000000 --- a/resources/intent/ultimaker_methodx/um_methodx_1c_um-nylon-175_0.2mm_highspeed.inst.cfg +++ /dev/null @@ -1,25 +0,0 @@ -[general] -definition = ultimaker_methodx -name = High Speed -version = 4 - -[metadata] -intent_category = highspeed -is_experimental = True -material = ultimaker_nylon_175 -quality_type = draft -setting_version = 25 -type = intent -variant = 1C - -[values] -acceleration_print = 3500 -bridge_wall_speed = 300 -cool_min_layer_time = 3 -infill_pattern = zigzag -jerk_print = 35 -speed_layer_0 = 55 -speed_print = 300 -speed_travel = 500 -support_pattern = zigzag - diff --git a/resources/intent/ultimaker_methodx/um_methodx_1c_um-nylon-175_0.2mm_highspeedsolid.inst.cfg b/resources/intent/ultimaker_methodx/um_methodx_1c_um-nylon-175_0.2mm_highspeedsolid.inst.cfg deleted file mode 100644 index 29bd7371a0..0000000000 --- a/resources/intent/ultimaker_methodx/um_methodx_1c_um-nylon-175_0.2mm_highspeedsolid.inst.cfg +++ /dev/null @@ -1,31 +0,0 @@ -[general] -definition = ultimaker_methodx -name = High Speed Solid -version = 4 - -[metadata] -intent_category = highspeedsolid -is_experimental = True -material = ultimaker_nylon_175 -quality_type = draft -setting_version = 25 -type = intent -variant = 1C - -[values] -acceleration_print = 3500 -bottom_thickness = =top_bottom_thickness -bridge_wall_speed = 300 -cool_min_layer_time = 3 -infill_angles = [45,135] -infill_material_flow = 97 -infill_pattern = zigzag -infill_sparse_density = 99 -jerk_print = 35 -speed_layer_0 = 55 -speed_print = 300 -speed_travel = 500 -support_pattern = zigzag -top_bottom_thickness = =layer_height * 2 -top_thickness = =top_bottom_thickness - diff --git a/resources/intent/ultimaker_methodx/um_methodx_1xa_um-absr-175_0.2mm_highspeed.inst.cfg b/resources/intent/ultimaker_methodx/um_methodx_1xa_um-absr-175_0.2mm_highspeed.inst.cfg index 0db1a5b803..4f65ccabe5 100644 --- a/resources/intent/ultimaker_methodx/um_methodx_1xa_um-absr-175_0.2mm_highspeed.inst.cfg +++ b/resources/intent/ultimaker_methodx/um_methodx_1xa_um-absr-175_0.2mm_highspeed.inst.cfg @@ -22,6 +22,7 @@ cool_min_temperature = 245.0 infill_pattern = zigzag jerk_print = 35 speed_layer_0 = 55 +speed_prime_tower = =speed_print/5 speed_print = 300 speed_support = 100 speed_support_interface = 75 diff --git a/resources/intent/ultimaker_methodx/um_methodx_1xa_um-absr-175_0.2mm_highspeedsolid.inst.cfg b/resources/intent/ultimaker_methodx/um_methodx_1xa_um-absr-175_0.2mm_highspeedsolid.inst.cfg index b6ff6e1ebd..9bdbbe3019 100644 --- a/resources/intent/ultimaker_methodx/um_methodx_1xa_um-absr-175_0.2mm_highspeedsolid.inst.cfg +++ b/resources/intent/ultimaker_methodx/um_methodx_1xa_um-absr-175_0.2mm_highspeedsolid.inst.cfg @@ -26,6 +26,7 @@ infill_pattern = zigzag infill_sparse_density = 99 jerk_print = 35 speed_layer_0 = 55 +speed_prime_tower = =speed_print/5 speed_print = 300 speed_support = 100 speed_support_interface = 75 diff --git a/resources/intent/ultimaker_methodx/um_methodx_labs_um-absr-175_0.2mm_highspeed.inst.cfg b/resources/intent/ultimaker_methodx/um_methodx_labs_um-absr-175_0.2mm_highspeed.inst.cfg index 4b42af13fa..c9bd04bcdb 100644 --- a/resources/intent/ultimaker_methodx/um_methodx_labs_um-absr-175_0.2mm_highspeed.inst.cfg +++ b/resources/intent/ultimaker_methodx/um_methodx_labs_um-absr-175_0.2mm_highspeed.inst.cfg @@ -22,6 +22,7 @@ cool_min_temperature = 245.0 infill_pattern = zigzag jerk_print = 35 speed_layer_0 = 55 +speed_prime_tower = =speed_print/5 speed_print = 300 speed_support = 100 speed_support_interface = 75 diff --git a/resources/intent/ultimaker_methodx/um_methodx_labs_um-absr-175_0.2mm_highspeedsolid.inst.cfg b/resources/intent/ultimaker_methodx/um_methodx_labs_um-absr-175_0.2mm_highspeedsolid.inst.cfg index 69a50a831b..a69db2d057 100644 --- a/resources/intent/ultimaker_methodx/um_methodx_labs_um-absr-175_0.2mm_highspeedsolid.inst.cfg +++ b/resources/intent/ultimaker_methodx/um_methodx_labs_um-absr-175_0.2mm_highspeedsolid.inst.cfg @@ -26,6 +26,7 @@ infill_pattern = zigzag infill_sparse_density = 99 jerk_print = 35 speed_layer_0 = 55 +speed_prime_tower = =speed_print/5 speed_print = 300 speed_support = 100 speed_support_interface = 75 diff --git a/resources/intent/ultimaker_methodx/um_methodx_labs_um-nylon-175_0.2mm_highspeed.inst.cfg b/resources/intent/ultimaker_methodx/um_methodx_labs_um-nylon-175_0.2mm_highspeed.inst.cfg deleted file mode 100644 index e54a52ba05..0000000000 --- a/resources/intent/ultimaker_methodx/um_methodx_labs_um-nylon-175_0.2mm_highspeed.inst.cfg +++ /dev/null @@ -1,25 +0,0 @@ -[general] -definition = ultimaker_methodx -name = High Speed -version = 4 - -[metadata] -intent_category = highspeed -is_experimental = True -material = ultimaker_nylon_175 -quality_type = draft -setting_version = 25 -type = intent -variant = LABS - -[values] -acceleration_print = 3500 -bridge_wall_speed = 300 -cool_min_layer_time = 3 -infill_pattern = zigzag -jerk_print = 35 -speed_layer_0 = 55 -speed_print = 300 -speed_travel = 500 -support_pattern = zigzag - diff --git a/resources/intent/ultimaker_methodx/um_methodx_labs_um-nylon-175_0.2mm_highspeedsolid.inst.cfg b/resources/intent/ultimaker_methodx/um_methodx_labs_um-nylon-175_0.2mm_highspeedsolid.inst.cfg deleted file mode 100644 index d1402a3140..0000000000 --- a/resources/intent/ultimaker_methodx/um_methodx_labs_um-nylon-175_0.2mm_highspeedsolid.inst.cfg +++ /dev/null @@ -1,31 +0,0 @@ -[general] -definition = ultimaker_methodx -name = High Speed Solid -version = 4 - -[metadata] -intent_category = highspeedsolid -is_experimental = True -material = ultimaker_nylon_175 -quality_type = draft -setting_version = 25 -type = intent -variant = LABS - -[values] -acceleration_print = 3500 -bottom_thickness = =top_bottom_thickness -bridge_wall_speed = 300 -cool_min_layer_time = 3 -infill_angles = [45,135] -infill_material_flow = 97 -infill_pattern = zigzag -infill_sparse_density = 99 -jerk_print = 35 -speed_layer_0 = 55 -speed_print = 300 -speed_travel = 500 -support_pattern = zigzag -top_bottom_thickness = =layer_height * 2 -top_thickness = =top_bottom_thickness - diff --git a/resources/intent/ultimaker_methodxl/um_methodxl_1c_um-absr-175_0.2mm_highspeed.inst.cfg b/resources/intent/ultimaker_methodxl/um_methodxl_1c_um-absr-175_0.2mm_highspeed.inst.cfg index 0328525090..f0a38b5a25 100644 --- a/resources/intent/ultimaker_methodxl/um_methodxl_1c_um-absr-175_0.2mm_highspeed.inst.cfg +++ b/resources/intent/ultimaker_methodxl/um_methodxl_1c_um-absr-175_0.2mm_highspeed.inst.cfg @@ -22,6 +22,7 @@ cool_min_temperature = 245.0 infill_pattern = zigzag jerk_print = 35 speed_layer_0 = 55 +speed_prime_tower = =speed_print/5 speed_print = 300 speed_support = 100 speed_support_interface = 75 diff --git a/resources/intent/ultimaker_methodxl/um_methodxl_1c_um-absr-175_0.2mm_highspeedsolid.inst.cfg b/resources/intent/ultimaker_methodxl/um_methodxl_1c_um-absr-175_0.2mm_highspeedsolid.inst.cfg index 0c2bb88cc7..9ad152ffcd 100644 --- a/resources/intent/ultimaker_methodxl/um_methodxl_1c_um-absr-175_0.2mm_highspeedsolid.inst.cfg +++ b/resources/intent/ultimaker_methodxl/um_methodxl_1c_um-absr-175_0.2mm_highspeedsolid.inst.cfg @@ -26,6 +26,7 @@ infill_pattern = zigzag infill_sparse_density = 99 jerk_print = 35 speed_layer_0 = 55 +speed_prime_tower = =speed_print/5 speed_print = 300 speed_support = 100 speed_support_interface = 75 diff --git a/resources/intent/ultimaker_methodxl/um_methodxl_1xa_um-absr-175_0.2mm_highspeed.inst.cfg b/resources/intent/ultimaker_methodxl/um_methodxl_1xa_um-absr-175_0.2mm_highspeed.inst.cfg index a82ddaa428..3835fdfedf 100644 --- a/resources/intent/ultimaker_methodxl/um_methodxl_1xa_um-absr-175_0.2mm_highspeed.inst.cfg +++ b/resources/intent/ultimaker_methodxl/um_methodxl_1xa_um-absr-175_0.2mm_highspeed.inst.cfg @@ -22,6 +22,7 @@ cool_min_temperature = 245.0 infill_pattern = zigzag jerk_print = 35 speed_layer_0 = 55 +speed_prime_tower = =speed_print/5 speed_print = 300 speed_support = 100 speed_support_interface = 75 diff --git a/resources/intent/ultimaker_methodxl/um_methodxl_1xa_um-absr-175_0.2mm_highspeedsolid.inst.cfg b/resources/intent/ultimaker_methodxl/um_methodxl_1xa_um-absr-175_0.2mm_highspeedsolid.inst.cfg index 9aebcb531b..0e6f4d11cd 100644 --- a/resources/intent/ultimaker_methodxl/um_methodxl_1xa_um-absr-175_0.2mm_highspeedsolid.inst.cfg +++ b/resources/intent/ultimaker_methodxl/um_methodxl_1xa_um-absr-175_0.2mm_highspeedsolid.inst.cfg @@ -26,6 +26,7 @@ infill_pattern = zigzag infill_sparse_density = 99 jerk_print = 35 speed_layer_0 = 55 +speed_prime_tower = =speed_print/5 speed_print = 300 speed_support = 100 speed_support_interface = 75 diff --git a/resources/intent/ultimaker_methodxl/um_methodxl_labs_um-absr-175_0.2mm_highspeed.inst.cfg b/resources/intent/ultimaker_methodxl/um_methodxl_labs_um-absr-175_0.2mm_highspeed.inst.cfg index 11aa6d2878..48340b2e09 100644 --- a/resources/intent/ultimaker_methodxl/um_methodxl_labs_um-absr-175_0.2mm_highspeed.inst.cfg +++ b/resources/intent/ultimaker_methodxl/um_methodxl_labs_um-absr-175_0.2mm_highspeed.inst.cfg @@ -22,6 +22,7 @@ cool_min_temperature = 245.0 infill_pattern = zigzag jerk_print = 35 speed_layer_0 = 55 +speed_prime_tower = =speed_print/5 speed_print = 300 speed_support = 100 speed_support_interface = 75 diff --git a/resources/intent/ultimaker_methodxl/um_methodxl_labs_um-absr-175_0.2mm_highspeedsolid.inst.cfg b/resources/intent/ultimaker_methodxl/um_methodxl_labs_um-absr-175_0.2mm_highspeedsolid.inst.cfg index ea8caef493..bb48267880 100644 --- a/resources/intent/ultimaker_methodxl/um_methodxl_labs_um-absr-175_0.2mm_highspeedsolid.inst.cfg +++ b/resources/intent/ultimaker_methodxl/um_methodxl_labs_um-absr-175_0.2mm_highspeedsolid.inst.cfg @@ -26,6 +26,7 @@ infill_pattern = zigzag infill_sparse_density = 99 jerk_print = 35 speed_layer_0 = 55 +speed_prime_tower = =speed_print/5 speed_print = 300 speed_support = 100 speed_support_interface = 75 diff --git a/resources/quality/ultimaker_method/um_method_1a_um-nylon-175_0.2mm.inst.cfg b/resources/quality/ultimaker_method/um_method_1a_um-nylon-175_0.2mm.inst.cfg index 6859b6c0b2..21785ed4ff 100644 --- a/resources/quality/ultimaker_method/um_method_1a_um-nylon-175_0.2mm.inst.cfg +++ b/resources/quality/ultimaker_method/um_method_1a_um-nylon-175_0.2mm.inst.cfg @@ -42,7 +42,7 @@ support_bottom_distance = =layer_height support_bottom_enable = False support_bottom_line_width = 0.6 support_bottom_stair_step_height = 0 -support_infill_rate = =0 if support_structure == tree else 12.0 +support_infill_rate = =0 if support_structure == 'tree' else 12.0 support_interface_height = 0.406 support_interface_material_flow = 95 support_interface_pattern = lines diff --git a/resources/quality/ultimaker_method/um_method_1c_um-nylon-175_0.2mm.inst.cfg b/resources/quality/ultimaker_method/um_method_1c_um-nylon-175_0.2mm.inst.cfg index 57a0c78003..c9fcc9dae7 100644 --- a/resources/quality/ultimaker_method/um_method_1c_um-nylon-175_0.2mm.inst.cfg +++ b/resources/quality/ultimaker_method/um_method_1c_um-nylon-175_0.2mm.inst.cfg @@ -42,7 +42,7 @@ support_bottom_distance = =layer_height support_bottom_enable = False support_bottom_line_width = 0.6 support_bottom_stair_step_height = 0 -support_infill_rate = =0 if support_structure == tree else 12.0 +support_infill_rate = =0 if support_structure == 'tree' else 12.0 support_interface_height = 0.406 support_interface_material_flow = 95 support_interface_pattern = lines diff --git a/resources/quality/ultimaker_method/um_method_labs_um-nylon-175_0.2mm.inst.cfg b/resources/quality/ultimaker_method/um_method_labs_um-nylon-175_0.2mm.inst.cfg index cf87c5c74b..2325dbfa00 100644 --- a/resources/quality/ultimaker_method/um_method_labs_um-nylon-175_0.2mm.inst.cfg +++ b/resources/quality/ultimaker_method/um_method_labs_um-nylon-175_0.2mm.inst.cfg @@ -42,7 +42,7 @@ support_bottom_distance = =layer_height support_bottom_enable = False support_bottom_line_width = 0.6 support_bottom_stair_step_height = 0 -support_infill_rate = =0 if support_structure == tree else 12.0 +support_infill_rate = =0 if support_structure == 'tree' else 12.0 support_interface_height = 0.406 support_interface_material_flow = 95 support_interface_pattern = lines diff --git a/resources/quality/ultimaker_methodx/um_methodx_1a_um-nylon-175_0.2mm.inst.cfg b/resources/quality/ultimaker_methodx/um_methodx_1a_um-nylon-175_0.2mm.inst.cfg index e2f294f391..fa7f524998 100644 --- a/resources/quality/ultimaker_methodx/um_methodx_1a_um-nylon-175_0.2mm.inst.cfg +++ b/resources/quality/ultimaker_methodx/um_methodx_1a_um-nylon-175_0.2mm.inst.cfg @@ -42,7 +42,7 @@ support_bottom_distance = =layer_height support_bottom_enable = False support_bottom_line_width = 0.6 support_bottom_stair_step_height = 0 -support_infill_rate = =0 if support_structure == tree else 12.0 +support_infill_rate = =0 if support_structure == 'tree' else 12.0 support_interface_height = 0.406 support_interface_material_flow = 95 support_interface_pattern = lines diff --git a/resources/quality/ultimaker_methodx/um_methodx_1c_um-nylon-175_0.2mm.inst.cfg b/resources/quality/ultimaker_methodx/um_methodx_1c_um-nylon-175_0.2mm.inst.cfg index 788d768ff2..f167c56520 100644 --- a/resources/quality/ultimaker_methodx/um_methodx_1c_um-nylon-175_0.2mm.inst.cfg +++ b/resources/quality/ultimaker_methodx/um_methodx_1c_um-nylon-175_0.2mm.inst.cfg @@ -42,7 +42,7 @@ support_bottom_distance = =layer_height support_bottom_enable = False support_bottom_line_width = 0.6 support_bottom_stair_step_height = 0 -support_infill_rate = =0 if support_structure == tree else 12.0 +support_infill_rate = =0 if support_structure == 'tree' else 12.0 support_interface_height = 0.406 support_interface_material_flow = 95 support_interface_pattern = lines diff --git a/resources/quality/ultimaker_methodx/um_methodx_labs_um-nylon-175_0.2mm.inst.cfg b/resources/quality/ultimaker_methodx/um_methodx_labs_um-nylon-175_0.2mm.inst.cfg index d5f520eb71..36c3360377 100644 --- a/resources/quality/ultimaker_methodx/um_methodx_labs_um-nylon-175_0.2mm.inst.cfg +++ b/resources/quality/ultimaker_methodx/um_methodx_labs_um-nylon-175_0.2mm.inst.cfg @@ -42,7 +42,7 @@ support_bottom_distance = =layer_height support_bottom_enable = False support_bottom_line_width = 0.6 support_bottom_stair_step_height = 0 -support_infill_rate = =0 if support_structure == tree else 12.0 +support_infill_rate = =0 if support_structure == 'tree' else 12.0 support_interface_height = 0.406 support_interface_material_flow = 95 support_interface_pattern = lines From 778ffb930c5d0fed69051515c606458a4e737724 Mon Sep 17 00:00:00 2001 From: HellAholic Date: Sat, 13 Sep 2025 17:15:54 +0200 Subject: [PATCH 22/26] Adjust based on review comments --- .../scripts/ZHopOnTravel.py | 35 +++++++++++-------- 1 file changed, 20 insertions(+), 15 deletions(-) diff --git a/plugins/PostProcessingPlugin/scripts/ZHopOnTravel.py b/plugins/PostProcessingPlugin/scripts/ZHopOnTravel.py index 7ac57a308e..71924419fe 100644 --- a/plugins/PostProcessingPlugin/scripts/ZHopOnTravel.py +++ b/plugins/PostProcessingPlugin/scripts/ZHopOnTravel.py @@ -70,7 +70,7 @@ class ZHopOnTravel(Script): "unit": "Lay# ", "type": "int", "default_value": 1, - "minimum_value": "1", + "minimum_value": 1, "enabled": "zhop_travel_enabled and list_or_range == 'range_of_layers'" }, "end_layer": { @@ -79,16 +79,16 @@ class ZHopOnTravel(Script): "unit": "Lay# ", "type": "int", "default_value": -1, - "minimum_value": "-1", + "minimum_value": -1, "enabled": "zhop_travel_enabled and list_or_range == 'range_of_layers'" }, "hop_height": { "label": "Z-Hop Height", - "description": "I refuse to provide a description for this.", + "description": "The relative 'Height' that the nozzle will 'Hop' in the 'Z'.", "unit": "mm ", "type": "float", "default_value": 0.5, - "minimum_value": "0", + "minimum_value": 0, "maximum_value_warning": 5, "enabled": "zhop_travel_enabled" }, @@ -98,8 +98,8 @@ class ZHopOnTravel(Script): "unit": "mm ", "type": "int", "default_value": 10, - "minimum_value": "1", - "maximum_value": "200", + "minimum_value": 1, + "maximum_value": 200, "enabled": "zhop_travel_enabled" }, "add_retract": { @@ -111,7 +111,7 @@ class ZHopOnTravel(Script): }, "infill_only": { "label": "Add Z-hops to Infill Only", - "description": "Only add Z-hops to 'Infill' within the layer range.", + "description": "Only add Z-hops to 'Infill' within the layer range. (NOTE: For technical reasons it is not possible to add Z-hops to travel moves that start somewhere and just 'cross infill'.)", "type": "bool", "default_value": false, "enabled": "zhop_travel_enabled" @@ -210,7 +210,7 @@ class ZHopOnTravel(Script): end_layer = data[num].splitlines()[0].split(":")[1] end_index = num break - if end_index == None: + if end_index is None: end_index = len(data)-1 for num in range(start_index, end_index): index_list.append(num) @@ -290,7 +290,7 @@ class ZHopOnTravel(Script): if line[0:3] in ["G1 ", "G2 ", "G3 "] and "X" in line and "Y" in line and "E" in line: self._is_retracted = False self._cur_e = self.getValue(line, "E") - elif (line.startswith("G1") and "F" in line and "E" in line and not "X" in line or not "Y" in line) or "G10" in line: + elif (line.startswith("G1") and "F" in line and "E" in line and (not "X" in line or not "Y" in line)) or "G10" in line: if self.getValue(line, "E"): self._cur_e = self.getValue(line, "E") if not relative_extrusion: @@ -329,7 +329,7 @@ class ZHopOnTravel(Script): # If there is no 'F' in the next line then add one to reinstate the Travel Speed (so the z-hop speed doesn't carry over through the travel moves) if not " F" in lines[index] and lines[index].startswith("G0"): lines[index] = lines[index].replace("G0", f"G0 F{speed_travel}") - hop_down_lines = self.get_hop_down_lines(retraction_amount, speed_zhop, retract_speed, prime_speed, extra_prime_dist, firmware_retract, relative_extrusion, hop_height, lines[index]) + hop_down_lines = self.get_hop_down_lines(retraction_amount, speed_zhop, prime_speed, extra_prime_dist, firmware_retract, relative_extrusion, lines[index]) lines[index] = hop_down_lines + lines[index] self._is_retracted = False hop_end = 0 @@ -357,10 +357,10 @@ class ZHopOnTravel(Script): def _total_travel_length(self, l_index: int, lines: str) -> int: """ - This function gets the cummulative total travel distance of each individual travel move. + This function gets the cumulative total travel distance of each individual travel move. :parameters: g_num: is the line index as passed from the calling function and when returned indicates the end of travel - travel_total: is the cummulative travel distance + travel_total: is the cumulative travel distance """ g_num = l_index travel_total = 0.0 @@ -402,7 +402,13 @@ class ZHopOnTravel(Script): hop_retraction = not self._is_retracted if not self._add_retract: hop_retraction = False - reset_type = 0 # no other options + # 'reset_type' is a bitmask representing the combination of retraction and related options: + # Bit 0 (1): Retraction is required + # Bit 1 (2): Firmware retraction is enabled + # Bit 2 (4): Relative extrusion is enabled + # Bit 3 (8): Extra prime amount is greater than 0 + # The value of 'reset_type' determines which G-code lines are inserted for the Z-hop. + reset_type = 0 if hop_retraction: reset_type += 1 if firmware_retract and hop_retraction: @@ -436,8 +442,7 @@ class ZHopOnTravel(Script): return up_lines # The Zhop down may require different kinds of primes depending on the Cura settings. - def get_hop_down_lines(self, retraction_amount: float, speed_zhop: str, retract_speed: str, prime_speed: str, extra_prime_dist: str, firmware_retract: bool, relative_extrusion: bool, hop_height: str, next_line: str) -> str: - + def get_hop_down_lines(self, retraction_amount: float, speed_zhop: str, prime_speed: str, extra_prime_dist: str, firmware_retract: bool, relative_extrusion: bool, next_line: str) -> str: """ Determine if the hop will require a prime :parameters: From 7420f2486d1c7572b0579698fa4df4934c6c67ab Mon Sep 17 00:00:00 2001 From: GregValiant <64202104+GregValiant@users.noreply.github.com> Date: Sat, 13 Sep 2025 15:10:39 -0400 Subject: [PATCH 23/26] Create TweakAtZ.py This is a re-write of Change At Z. The name change was necessary to avoid conflicting names in earlier project files. --- .../PostProcessingPlugin/scripts/TweakAtZ.py | 981 ++++++++++++++++++ 1 file changed, 981 insertions(+) create mode 100644 plugins/PostProcessingPlugin/scripts/TweakAtZ.py diff --git a/plugins/PostProcessingPlugin/scripts/TweakAtZ.py b/plugins/PostProcessingPlugin/scripts/TweakAtZ.py new file mode 100644 index 0000000000..8bf75e917f --- /dev/null +++ b/plugins/PostProcessingPlugin/scripts/TweakAtZ.py @@ -0,0 +1,981 @@ +""" + TweakAtZ 2.0 is a re-write of ChangeAtZ by GregValiant (Greg Foresi) March 2025 + The script name change was required to avoid conflicts with project files that might use ChangeAtZ variables. + Differences from the previous ChangeAtZ version (5.3.0): + ~"By Height" will work with Z-hops enabled, Adaptive Layers, Scarf Z-seam, and Rafts. The changes will commence at the first layer where the height is reached or exceeded. The changes will end at the start of the layer where the End Height is reached or exceeded. + ~The user can opt to change just the print speed or both print and travel speeds. The 'F' parameters are re-calculated line-by-line using the percentage that the user inputs. Speeds can now be changed 'per extruder'. M220 is no longer used to change speeds as it affected all speeds. + ~Changing the print speed no longer affects retraction or unretract speeds. + ~The Z-hop speed is never affected. + ~The 'Output to LCD' setting is obsolete to avoid flooding the screen with messages that were quickly over-written. + ~Allows the user to select a Range of Layers (rather than just 'Single Layer' or 'To the End'.) + ~Added support for control of a single fan. This might be a Build Volume Fan, Auxilliary Fan, or a Layer Cooling Fan. It would depend on the fan circuit number that the user inputs. + ~Added support for Relative Extrusion + ~Added support for Firmware Retraction + ~Added support for 'G2' and 'G3' moves. + ~The script supports a maximum of 2 extruders. + ~'One-at-a-Time' is not supported and a kick-out is added + + Previous contributions by: + Original Authors and contributors to the ChangeAtZ post-processing script and the earlier TweakAtZ: + Written by Steven Morlock, + Modified by Ricardo Gomez, to add Bed Temperature and make it work with Cura_13.06.04+ + Modified by Stefan Heule, since V3.0 + Modified by Jaime van Kessel (Ultimaker), to make it work for 15.10 / 2.x + Modified by Ghostkeeper (Ultimaker), to debug. + Modified by Wes Hanney, Retract Length + Speed, Clean up + Modified by Alex Jaxon, Added option to modify Build Volume Temperature + Re-write by GregValiant, to work with new variables in Cura 5.x and with the changes noted above +""" + +from UM.Application import Application +from ..Script import Script +import re +from UM.Message import Message +from UM.Logger import Logger + +class TweakAtZ(Script): + version = "2.0.0" + + def initialize(self) -> None: + """ + Prepare the script settings for the machine hardware configuration on Cura opening + """ + super().initialize() + self.global_stack = Application.getInstance().getGlobalContainerStack() + self.extruder_count = int(self.global_stack.getProperty("machine_extruder_count", "value")) + # If the printer is multi-extruder then enable the settings for T1 + if self.extruder_count == 1: + self._instance.setProperty("multi_extruder", "value", False) + else: + self._instance.setProperty("multi_extruder", "value", True) + + # Enable the build volume temperature change when a heated build volume is present + machine_heated_build_volume = bool(self.global_stack.getProperty("machine_heated_build_volume", "value")) + if machine_heated_build_volume: + self._instance.setProperty("heated_build_volume", "value", True) + else: + self._instance.setProperty("heated_build_volume", "value", False) + + # If it doesn't have a heated bed it is unlikely to have a Chamber or Auxiliary fan. + has_heated_bed = bool(self.global_stack.getProperty("machine_heated_bed", "value")) + if has_heated_bed: + self._instance.setProperty("has_bv_fan", "value", True) + + def getSettingDataString(self): + return """{ + "name": "Tweak At Z (2.0)", + "key": "TweakAtZ", + "metadata": {}, + "version": 2, + "settings": { + "taz_enabled": { + "label": "Enable Tweak at Z", + "description": "Enables the script so it will run. You may have more than one instance of 'Tweak At Z' in the list of post processors.", + "type": "bool", + "default_value": true, + "enabled": true + }, + "by_layer_or_height": { + "label": "'By Layer' or 'By Height'", + "description": "Which criteria to use to start and end the changes.", + "type": "enum", + "options": + { + "by_layer": "By Layer", + "by_height": "By Height" + }, + "default_value": "by_layer", + "enabled": "taz_enabled" + }, + "a_start_layer": { + "label": "Start Layer", + "description": "Layer number to start the changes at. Use the Cura preview layer numbers. The changes will start at the beginning of the layer.", + "unit": "", + "type": "int", + "default_value": 1, + "minimum_value": "-7", + "minimum_value_warning": "1", + "unit": "Layer #", + "enabled": "taz_enabled and by_layer_or_height == 'by_layer'" + }, + "a_end_layer": { + "label": "End Layer", + "description": "Use '-1' to indicate the end of the last layer. The changes will end at the end of the indicated layer. Use the Cura preview layer number. If the 'Start Layer' is equal to the 'End Layer' then the changes only affect that single layer.", + "type": "int", + "default_value": -1, + "unit": "Layer #", + "enabled": "taz_enabled and by_layer_or_height == 'by_layer'" + }, + "a_height_start": { + "label": "Height Start of Changes", + "description": "Enter the 'Z-Height' to Start the changes at. The changes START at the beginning of the first layer where this height is reached (or exceeded). If the model is on a raft then this height will be from the top of the air gap (first height of the actual model print).", + "type": "float", + "default_value": 0, + "unit": "mm", + "enabled": "taz_enabled and by_layer_or_height == 'by_height'" + }, + "a_height_end": { + "label": "Height End of Changes", + "description": "Enter the 'Z-Height' to End the changes at. The changes continue until this height is reached or exceeded. If the model is on a raft then this height will be from the top of the air gap (first height of the actual model print).", + "type": "float", + "default_value": 0, + "unit": "mm", + "enabled": "taz_enabled and by_layer_or_height == 'by_height'" + } , + "b_change_speed": { + "label": "Change Speeds", + "description": "Check to enable a speed change for the Print Speeds.", + "type": "bool", + "default_value": false, + "enabled": "taz_enabled" + }, + "change_speed_per_extruder": { + "label": " Which extruder(s)", + "description": "For multi-extruder printers the changes can be for either or both extruders.", + "type": "enum", + "options": { + "ext_0": "Extruder 1 (T0)", + "ext_1": "Extruder 2 (T1)", + "ext_both": "Both extruders"}, + "default_value": "ext_both", + "enabled": "taz_enabled and b_change_speed and multi_extruder" + }, + "b_change_printspeed": { + "label": " Include Travel Speeds", + "description": "Check this box to change the Travel Speeds as well as the Print Speeds.", + "type": "bool", + "default_value": false, + "enabled": "b_change_speed and taz_enabled" + }, + "b_speed": { + "label": " Speed %", + "description": "Speed factor as a percentage. The chosen speeds will be altered by this much.", + "unit": "% ", + "type": "int", + "default_value": 100, + "minimum_value": "10", + "minimum_value_warning": "50", + "maximum_value_warning": "200", + "enabled": "b_change_speed and taz_enabled" + }, + "c_change_flowrate": { + "label": "Change Flow Rate", + "description": "Select to change the flow rate of all extrusions in the layer range. This command uses M221 to set the flow percentage in the printer.", + "type": "bool", + "default_value": false, + "enabled": "taz_enabled" + }, + "c_flowrate_t0": { + "label": " Flow Rate % (T0)", + "description": "Enter the new Flow Rate Percentage. For a multi-extruder printer this will apply to Extruder 1 (T0).", + "unit": "% ", + "type": "int", + "default_value": 100, + "minimum_value": "25", + "minimum_value_warning": "50", + "maximum_value_warning": "150", + "maximum_value": "200", + "enabled": "c_change_flowrate and taz_enabled" + }, + "multi_extruder": { + "label": "Hidden setting to enable 2nd extruder settings for multi-extruder printers.", + "description": "Enable T1 options.", + "type": "bool", + "value": false, + "default_value": false, + "enabled": false + }, + "c_flowrate_t1": { + "label": " Flow Rate % T1", + "description": "New Flow rate percentage for Extruder 2 (T1).", + "unit": "% ", + "type": "int", + "default_value": 100, + "minimum_value": "1", + "minimum_value_warning": "10", + "maximum_value_warning": "200", + "enabled": "multi_extruder and c_change_flowrate and taz_enabled" + }, + "d_change_bed_temp": { + "label": "Change Bed Temp", + "description": "Select if Bed Temperature is to be changed. The bed temperature will revert at the End Layer.", + "type": "bool", + "default_value": false, + "enabled": "taz_enabled" + }, + "d_bedTemp": { + "label": " Bed Temp", + "description": "New Bed Temperature", + "unit": "°C ", + "type": "int", + "default_value": 60, + "minimum_value": "0", + "minimum_value_warning": "30", + "maximum_value_warning": "120", + "enabled": "d_change_bed_temp and taz_enabled" + }, + "heated_build_volume": { + "label": "Hidden setting", + "description": "This enables the build volume settings", + "type": "bool", + "default_value": false, + "enabled": false + }, + "e_change_build_volume_temperature": { + "label": "Change Build Volume Temperature", + "description": "Select if Build Volume Temperature is to be changed", + "type": "bool", + "default_value": false, + "enabled": "heated_build_volume and taz_enabled" + }, + "e_build_volume_temperature": { + "label": " Build Volume Temperature", + "description": "New Build Volume Temperature. This will revert at the end of the End Layer.", + "unit": "°C ", + "type": "int", + "default_value": 20, + "minimum_value": "0", + "minimum_value_warning": "15", + "maximum_value_warning": "80", + "enabled": "heated_build_volume and e_change_build_volume_temperature and taz_enabled" + }, + "f_change_extruder_temperature": { + "label": "Change Print Temp", + "description": "Select if the Printing Temperature is to be changed", + "type": "bool", + "default_value": false, + "enabled": "taz_enabled" + }, + "f_extruder_temperature_t0": { + "label": " Extruder 1 Temp (T0)", + "description": "New temperature for Extruder 1 (T0).", + "unit": "°C ", + "type": "int", + "default_value": 190, + "minimum_value": "0", + "minimum_value_warning": "160", + "maximum_value_warning": "250", + "enabled": "f_change_extruder_temperature and taz_enabled" + }, + "f_extruder_temperature_t1": { + "label": " Extruder 2 Temp (T1)", + "description": "New temperature for Extruder 2 (T1).", + "unit": "°C ", + "type": "int", + "default_value": 190, + "minimum_value": "0", + "minimum_value_warning": "160", + "maximum_value_warning": "250", + "enabled": "multi_extruder and f_change_extruder_temperature and taz_enabled" + }, + "g_change_retract": { + "label": "Change Retraction Settings", + "description": "Indicates you would like to modify retraction properties. If 'Firmware Retraction' is enabled then M207 and M208 lines are added. Your firmware must understand those commands.", + "type": "bool", + "default_value": false, + "enabled": "taz_enabled and not multi_extruder" + }, + "g_change_retract_speed": { + "label": " Change Retract/Prime Speed", + "description": "Changes the retraction and prime speed.", + "type": "bool", + "default_value": false, + "enabled": "g_change_retract and taz_enabled and not multi_extruder" + }, + "g_retract_speed": { + "label": " Retract/Prime Speed", + "description": "New Retract Feed Rate (mm/s). If 'Firmware Retraction' is enabled then M207 and M208 are used to change the retract and prime speeds and the distance. NOTE: the same speed will be used for both retract and prime.", + "unit": "mm/s ", + "type": "float", + "default_value": 40, + "minimum_value": "0", + "minimum_value_warning": "0", + "maximum_value_warning": "100", + "enabled": "g_change_retract and g_change_retract_speed and taz_enabled and not multi_extruder" + }, + "g_change_retract_amount": { + "label": " Change Retraction Amount", + "description": "Changes the retraction length during print", + "type": "bool", + "default_value": false, + "enabled": "g_change_retract and taz_enabled and not multi_extruder" + }, + "g_retract_amount": { + "label": " Retract Amount", + "description": "New Retraction Distance (mm). If firmware retraction is used then M207 and M208 are used to change the retract and prime amount.", + "unit": "mm ", + "type": "float", + "default_value": 6.5, + "minimum_value": "0", + "minimum_value_warning": "0", + "maximum_value_warning": "20", + "enabled": "g_change_retract and g_change_retract_amount and taz_enabled and not multi_extruder" + }, + "enable_bv_fan_change": { + "label": "Chamber/Aux Fan Change", + "description": "Can alter the setting of a secondary fan when the printer is equipped with one.", + "type": "bool", + "default_value": false, + "enabled": "has_bv_fan and taz_enabled" + }, + "e1_build_volume_fan_speed": { + "label": " Chamber/Aux Fan Speed", + "description": "New Build Volume or Auxiliary Fan Speed. This will reset to zero at the end of the 'End Layer'.", + "unit": "%", + "type": "int", + "default_value": 100, + "minimum_value": 0, + "maximum_value": 100, + "enabled": "has_bv_fan and enable_bv_fan_change and taz_enabled" + }, + "bv_fan_nr": { + "label": " Chamber/Aux Fan Number", + "description": "The circuit number of the Auxilliary or Chamber fan. M106 will be used and the 'P' parameter (the fan number) will be the number entered here.", + "type": "int", + "unit": "#", + "default_value": 3, + "minimum_value": 0, + "enabled": "has_bv_fan and enable_bv_fan_change and taz_enabled" + }, + "has_bv_fan": { + "label": "Hidden setting", + "description": "Enables the Build Volume/Auxiliary fan speed control when 'machine_heated_bed' is true.", + "type": "bool", + "default_value": false, + "enabled": false + } + } + }""" + + def execute(self, data): + # Exit if the script isn't enabled + if not bool(self.getSettingValueByKey("taz_enabled")): + data[0] += "; [Tweak at Z] is not enabled\n" + Logger.log("i", "[Tweak at Z] is not enabled") + return data + + # Message the user and exit if the print sequence is 'One at a Time' + if self.global_stack.getProperty("print_sequence", "value") == "one_at_a_time": + Message(title = "[Tweak at Z]", text = "One-at-a-Time mode is not supported. The script will exit without making any changes.").show() + data[0] += "; [Tweak at Z] Did not run (One at a Time mode is not supported)\n" + Logger.log("i", "TweakAtZ does not support 'One at a Time' mode") + return data + + # Exit if the gcode has been previously post-processed. + if ";POSTPROCESSED" in data[0]: + return data + + # Pull some settings from Cura + self.extruder_list = self.global_stack.extruderList + self.firmware_retraction = bool(self.global_stack.getProperty("machine_firmware_retract", "value")) + self.relative_extrusion = bool(self.global_stack.getProperty("relative_extrusion", "value")) + self.initial_layer_height = self.global_stack.getProperty("layer_height_0", "value") + self.heated_build_volume = bool(self.global_stack.getProperty("machine_heated_build_volume", "value")) + self.heated_bed = bool(self.global_stack.getProperty("machine_heated_bed", "value")) + self.retract_enabled = bool(self.extruder_list[0].getProperty("retraction_enable", "value")) + self.orig_bed_temp = self.global_stack.getProperty("material_bed_temperature", "value") + self.orig_bv_temp = self.global_stack.getProperty("build_volume_temperature", "value") + self.z_hop_enabled = bool(self.extruder_list[0].getProperty("retraction_hop_enabled", "value")) + self.raft_enabled = True if str(self.global_stack.getProperty("adhesion_type", "value")) == "raft" else False + # The Start and end layer numbers are used when 'By Layer' is selected + self.start_layer = self.getSettingValueByKey("a_start_layer") - 1 + end_layer = int(self.getSettingValueByKey("a_end_layer")) + nbr_raft_layers = 0 + if self.raft_enabled: + for layer in data: + if ";LAYER:-" in layer: + nbr_raft_layers += 1 + if ";LAYER:0\n" in layer: + break + + # Adjust the start layer to account for any raft layers + self.start_layer -= nbr_raft_layers + + # Find the indexes of the Start and End layers if 'By Layer' + self.start_index = 0 + + # When retraction is enabled it adds a single line item to the data list + self.end_index = len(data) - 1 - int(self.retract_enabled) + if self.getSettingValueByKey("by_layer_or_height") == "by_layer": + for index, layer in enumerate(data): + if ";LAYER:" + str(self.start_layer) + "\n" in layer: + self.start_index = index + break + + # If the changes continue to the top layer + if end_layer == -1: + if self.retract_enabled: + self.end_index = len(data) - 2 + else: + self.end_index = len(data) - 1 + + # If the changes end below the top layer + else: + + # Adjust the end layer from base1 numbering to base0 numbering + end_layer -= 1 + + # Adjust the End Layer if it is not the top layer and if bed adhesion is 'raft' + end_layer -= nbr_raft_layers + for index, layer in enumerate(data): + if ";LAYER:" + str(end_layer) + "\n" in layer: + self.end_index = index + break + + # The Start and End heights are used to find the Start and End indexes when changes are 'By Height' + elif self.getSettingValueByKey("by_layer_or_height") == "by_height": + start_height = float(self.getSettingValueByKey("a_height_start")) + end_height = float(self.getSettingValueByKey("a_height_end")) + # Get the By Height start and end indexes + self.start_index = self._is_legal_z(data, start_height) + self.end_index = self._is_legal_z(data, end_height) - 1 + + # Exit if the Start Layer wasn't found + if self.start_index == 0: + Message(title = "[Tweak at Z]", text = "The 'Start Layer' is beyond the top of the print. The script did not run.").show() + Logger.log("w", "[Tweak at Z] The 'Start Layer' is beyond the top of the print. The script did not run.") + return data + + # Adjust the End Index if the End Index < Start Index (required for the script to make changes) + if self.end_index < self.start_index: + self.start_index = self.end_index + Message(title = "[Tweak at Z]", text = "Check the Gcode. Your 'Start Layer/Height' input is higher than the End Layer/Height input. The Start Layer has been adjusted to equal the End Layer.").show() + + # Map settings to corresponding methods + procedures = { + "b_change_speed": self._change_speed, + "c_change_flowrate": self._change_flow, + "d_change_bed_temp": self._change_bed_temp, + "e_change_build_volume_temperature": self._change_bv_temp, + "f_change_extruder_temperature": self._change_hotend_temp, + "g_change_retract": self._change_retract, + "has_bv_fan": self._change_bv_fan_speed + } + + # Run the selected procedures + for setting, method in procedures.items(): + if self.getSettingValueByKey(setting): + method(data) + data = self._format_lines(data) + return data + + def _change_speed(self, data:str)->str: + """ + The actual speed will be a percentage of the Cura calculated 'F' values in the gcode. The percentage can be different for each extruder. Travel speeds can also be affected dependent on the user input. + :params: + speed_x: The speed percentage to use + print_speed_only: Only change speeds with extrusions (but not retract or primes) + target_extruder: For multi-extruder printers this is the active extruder + off_extruder: For multi-extruders this is the inactive extruder. + """ + # Since a single extruder changes all relevant speed settings then for a multi-extruder 'both extruders' is the same + if self.extruder_count == 1 or self.getSettingValueByKey("change_speed_per_extruder") == "ext_both": + speed_x = self.getSettingValueByKey("b_speed")/100 + print_speed_only = not bool(self.getSettingValueByKey("b_change_printspeed")) + for index, layer in enumerate(data): + if index >= self.start_index and index <= self.end_index: + lines = layer.splitlines() + for l_index, line in enumerate(lines): + if " F" in line and " X" in line and " Y" in line and not " Z" in line: + f_value = self.getValue(line, "F") + if line.startswith(("G1", "G2", "G3")): + lines[l_index] = line.replace("F" + str(f_value), "F" + str(round(f_value * speed_x))) + lines[l_index] += f" ; TweakAtZ: {round(speed_x * 100)}% Print Speed" + continue + if not print_speed_only and line.startswith("G0"): + lines[l_index] = line.replace("F" + str(f_value), "F" + str(round(f_value * speed_x))) + lines[l_index] += f" ; TweakAtZ: {round(speed_x * 100)}% Travel Speed" + data[index] = "\n".join(lines) + "\n" + elif self.extruder_count > 1: + speed_x = self.getSettingValueByKey("b_speed")/100 + print_speed_only = not bool(self.getSettingValueByKey("b_change_printspeed")) + target_extruder = self.getSettingValueByKey("change_speed_per_extruder") + + # These variables are used as the 'turn changes on' and 'turn changes off' at tool changes. + if target_extruder == "ext_0": + target_extruder = "T0" + off_extruder = "T1" + elif target_extruder == "ext_1": + target_extruder = "T1" + off_extruder = "T0" + + # After all of that it goes to work. + for index, layer in enumerate(data): + if index < self.start_index: + lineT = layer.splitlines() + for tline in lineT: + if "T0" in tline: + active_tool = "T0" + if "T1" in tline: + active_tool = "T1" + if index >= self.start_index and index <= self.end_index: + lines = layer.splitlines() + for l_index, line in enumerate(lines): + if active_tool == target_extruder: + if " F" in line and " X" in line and " Y" in line and not " Z" in line: + f_value = self.getValue(line, "F") + if line.startswith(("G1", "G2", "G3")): + lines[l_index] = line.replace("F" + str(f_value), "F" + str(round(f_value * speed_x))) + lines[l_index] += f" ; TweakAtZ: {round(speed_x * 100)}% Print Speed" + continue + if not print_speed_only and line.startswith("G0"): + lines[l_index] = line.replace("F" + str(f_value), "F" + str(round(f_value * speed_x))) + lines[l_index] += f" ; TweakAtZ: {round(speed_x * 100)}% Travel Speed" + if line.startswith(off_extruder): + active_tool = off_extruder + if line.startswith(target_extruder): + active_tool = target_extruder + + data[index] = "\n".join(lines) + "\n" + return data + + def _change_flow(self, data:str)->str: + """ + M221 is used to change the flow rate. + :params: + new_flow_ext_0: The flowrate percentage from these script settings (for the primary extruder) + new_flowrate_0: The string to use for the new flowrate for T0 + reset_flowrate_0: Resets the flowrate to 100% (for either extruder) + new_flow_ext_1: The flowrate percentage from these script settings (for the secondary extruder) + new_flowrate_1: The string to use for the new flowrate for T1 + """ + new_flow_ext_0 = self.getSettingValueByKey("c_flowrate_t0") + new_flowrate_0 = f"\nM221 S{new_flow_ext_0} ; TweakAtZ: Alter Flow Rate" + reset_flowrate_0 = "\nM221 S100 ; TweakAtZ: Reset Flow Rate" + if self.extruder_count > 1: + new_flow_ext_1 = self.getSettingValueByKey("c_flowrate_t1") + new_flowrate_1 = f"\nM221 S{new_flow_ext_1} ; TweakAtZ: Alter Flow Rate" + else: + new_flowrate_1 = "" + + # For single extruder + if self.extruder_count == 1: + lines = data[self.start_index].splitlines() + lines[0] += new_flowrate_0 + data[self.start_index] = "\n".join(lines) + "\n" + lines = data[self.end_index].splitlines() + lines[len(lines) - 2] += reset_flowrate_0 + data[self.end_index] = "\n".join(lines) + "\n" + + # For dual-extruders + elif self.extruder_count > 1: + for index, layer in enumerate(data): + if index < self.start_index: + continue + else: + lines = layer.splitlines() + for l_index, line in enumerate(lines): + if line.startswith("T0"): + lines[l_index] += new_flowrate_0 + " T0" + if line.startswith("T1"): + lines[l_index] += new_flowrate_1 + " T1" + data[index] = "\n".join(lines) + "\n" + if index == self.end_index: + lines = data[index].splitlines() + lines[len(lines) - 2] += "\nM221 S100 ; TweakAtZ: Reset Flow Rate" + data[index] = "\n".join(lines) + "\n" + break + if index > self.end_index: + break + return data + + def _change_bed_temp(self, data:str)->str: + """ + Change the Bed Temperature at height or layer + :params: + new_bed_temp: The new temperature from the settings for this script + """ + if not self.heated_bed: + return data + new_bed_temp = self.getSettingValueByKey("d_bedTemp") + if self.start_index == 2: + if "M140 S" in data[2]: + data[2] = re.sub("M140 S", ";M140 S", data[2]) + if "M140 S" in data[3]: + data[3] = re.sub("M140 S", ";M140 S", data[3]) + lines = data[self.start_index].splitlines() + lines[0] += "\nM140 S" + str(new_bed_temp) + " ; TweakAtZ: Change Bed Temperature" + data[self.start_index] = "\n".join(lines) + "\n" + lines = data[self.end_index].splitlines() + lines[len(lines) - 2] += "\nM140 S" + str(self.orig_bed_temp) + " ; TweakAtZ: Reset Bed Temperature" + data[self.end_index] = "\n".join(lines) + "\n" + return data + + def _change_bv_temp(self, data:str)->str: + """ + Change the Build Volume temperature at height or layer + :param: + new_bv_temp: The new temperature from the settings for this script + """ + if not self.heated_build_volume: + return data + new_bv_temp = self.getSettingValueByKey("e_build_volume_temperature") + lines = data[self.start_index].splitlines() + lines[0] += "\nM141 S" + str(new_bv_temp) + " ; TweakAtZ: Change Build Volume Temperature" + data[self.start_index] = "\n".join(lines) + "\n" + lines = data[self.end_index].splitlines() + lines[len(lines) - 2] += "\nM141 S" + str(self.orig_bv_temp) + " ; TweakAtZ: Reset Build Volume Temperature" + data[self.end_index] = "\n".join(lines) + "\n" + return data + + def _change_hotend_temp(self, data:str)->str: + """ + Changes to the hot end temperature(s). + :params: + extruders_share_heater: Lets the script know how to handle the differences + active_tool: Tracks the active tool through the gcode + new_hotend_temp_0: The new temperature for the primary extruder T0 + orig_hot_end_temp_0: The print temperature for the primary extruder T0 as set in Cura + orig_standby_temp_0: The standby temperature for the primary extruder T0 from Cura. This marks a temperature line to ignore. + new_hotend_temp_1: The new temperature for the secondary extruder T1 + orig_hot_end_temp_1: The print temperature for the secondary extruder T1 as set in Cura + orig_standby_temp_1: The standby temperature for the secondary extruder T1 from Cura. This marks a temperature line to ignore. + """ + extruders_share_heater = bool(self.global_stack.getProperty("machine_extruders_share_heater", "value")) + self.active_tool = "T0" + self.new_hotend_temp_0 = self.getSettingValueByKey("f_extruder_temperature_t0") + self.orig_hot_end_temp_0 = int(self.extruder_list[0].getProperty("material_print_temperature", "value")) + self.orig_standby_temp_0 = int(self.extruder_list[0].getProperty("material_standby_temperature", "value")) + + # Start with single extruder machines + if self.extruder_count == 1: + if self.start_index == 2: + if "M104 S" in data[2]: + data[2] = re.sub("M104 S", ";M104 S", data[2]) + if "M104 S" in data[3]: + data[3] = re.sub("M104 S", ";M104 S", data[3]) + + # Add the temperature change at the beginning of the start layer + lines = data[self.start_index].splitlines() + for index, line in enumerate(lines): + lines[0] += "\n" + "M104 S" + str(self.new_hotend_temp_0) + " ; TweakAtZ: Change Nozzle Temperature" + data[self.start_index] = "\n".join(lines) + "\n" + break + + # Revert the temperature to the Cura setting at the end of the end layer + lines = data[self.end_index].splitlines() + for index, line in enumerate(lines): + lines[len(lines) - 2] += "\n" + "M104 S" + str(self.orig_hot_end_temp_0) + " ; TweakAtZ: Reset Nozzle Temperature" + data[self.end_index] = "\n".join(lines) + "\n" + break + + # Multi-extruder machines + elif self.extruder_count > 1: + self.new_hotend_temp_1 = self.getSettingValueByKey("f_extruder_temperature_t1") + self.orig_hot_end_temp_1 = int(self.extruder_list[1].getProperty("material_print_temperature", "value")) + self.orig_standby_temp_1 = int(self.extruder_list[1].getProperty("material_standby_temperature", "value")) + + # Track the tool number up to the start of the start layer + self.getTool("T0") + for index, layer in enumerate(data): + lines = layer.split("\n") + for line in lines: + if line.startswith("T"): + self.getTool(line) + if index == self.start_index - 1: + break + + # Add the active extruder initial temperature change at the start of the starting layer + data[self.start_index] = data[self.start_index].replace("\n", f"\nM104 S{self.active_print_temp} ; TweakAtZ: Start Temperature Change\n",1) + + # At the start layer commence making the changes + for index, layer in enumerate(data): + if index < self.start_index: + continue + if index > self.end_index: + break + lines = layer.splitlines() + for l_index, line in enumerate(lines): + + # Continue to track the tool number + if line.startswith("T"): + self.getTool(line) + if line.startswith("M109"): + lines[l_index] = f"M109 S{self.active_print_temp} ; TweakAtZ: Alter temperature" + elif line.startswith("M104"): + if self.getValue(line, "S") == self.inactive_standby_temp: + continue + elif self.getValue(line, "S") == self.inactive_tool_orig_temp: + lines[l_index] = re.sub("S(\d+|\d.+)", f"S{self.inactive_print_temp} ; TweakAtZ: Alter temperature", line) + elif self.getValue(line, "S") == self.active_tool_orig_temp: + lines[l_index] = re.sub("S(\d+|\d.+)", f"S{self.active_print_temp} ; TweakAtZ: Alter temperature", line) + data[index] = "\n".join(lines) + "\n" + + # Revert the active extruder temperature at the end of the changes + lines = data[self.end_index].split("\n") + lines[len(lines) - 3] += f"\nM104 {self.active_tool} S{self.active_tool_orig_temp} ; TweakAtZ: Original Temperature active tool" + data[self.end_index] = "\n".join(lines) + return data + + def getTool(self, line): + if line.startswith("T1"): + self.active_tool = "T1" + self.active_tool_orig_temp = self.orig_hot_end_temp_1 + self.active_print_temp = self.new_hotend_temp_1 + self.inactive_tool = "T0" + self.inactive_tool_orig_temp = self.orig_hot_end_temp_0 + self.inactive_print_temp = self.new_hotend_temp_0 + self.inactive_standby_temp = self.orig_standby_temp_0 + else: + self.active_tool = "T0" + self.active_tool_orig_temp = self.orig_hot_end_temp_0 + self.active_print_temp = self.new_hotend_temp_0 + self.inactive_tool = "T1" + self.inactive_tool_orig_temp = self.orig_hot_end_temp_1 + self.inactive_print_temp = self.new_hotend_temp_1 + self.inactive_standby_temp = self.orig_standby_temp_1 + return + + def _change_retract(self, data:str)->str: + """ + This is for single extruder printers only (tool change retractions get in the way for multi-extruders). + Depending on the selected options, this will change the Retraction Speeds and Prime Speeds, and the Retraction Distance. NOTE: The retraction and prime speeds will be the same. + :params: + speed_retract_0: The set retraction and prime speed from Cura. + retract_amt_0: The set retraction distance from Cura + change_retract_amt: Boolean to trip changing the retraction distance + change_retract_speed: Boolean to trip changing the speeds + new_retract_amt: The new retraction amount to use from this script settings. + new_retract_speed: The new retract and prime speed from this script settings. + firmware_start_str: The string to insert for changes to firmware retraction + firmware_reset: The last insertion for firmware retraction will set the numbers back to the settings in Cura. + is_retracted: Tracks the end of the filament location + cur_e: The current location of the extruder + prev_e: The location of where the extruder was before the current e + """ + if not self.retract_enabled: + return + speed_retract_0 = int(self.extruder_list[0].getProperty("retraction_speed", "value") * 60) + retract_amt_0 = self.extruder_list[0].getProperty("retraction_amount", "value") + change_retract_amt = self.getSettingValueByKey("g_change_retract_amount") + change_retract_speed = self.getSettingValueByKey("g_change_retract_speed") + new_retract_speed = int(self.getSettingValueByKey("g_retract_speed") * 60) + new_retract_amt = self.getSettingValueByKey("g_retract_amount") + + # Use M207 and M208 to adjust firmware retraction when required + if self.firmware_retraction: + lines = data[self.start_index].splitlines() + firmware_start_str = "\nM207" + firmware_reset = "" + if change_retract_speed: + firmware_start_str += f" F{new_retract_speed} ; TweakAtZ: Alter Firmware Retract speed" + if change_retract_amt: + firmware_start_str += f" S{new_retract_amt} ; TweakAtZ: Alter Firmware Retract amt" + if change_retract_speed: + firmware_start_str += f"\nM208 F{new_retract_speed} ; TweakAtZ: Alter Firmware Prime speed" + lines[0] += firmware_start_str + data[self.start_index] = "\n".join(lines) + "\n" + lines = data[self.end_index].splitlines() + firmware_reset = f"M207 F{speed_retract_0} S{retract_amt_0} ; TweakAtZ: Reset Firmware Retract" + if change_retract_speed: + firmware_reset += f"\nM208 S{speed_retract_0} ; TweakAtZ: Reset Firmware Prime" + if len(lines) < 2: + lines.append(firmware_reset) + else: + lines[len(lines) - 2] += "\n" + firmware_reset + data[self.end_index] = "\n".join(lines) + "\n" + return data + + if not self.firmware_retraction: + prev_e = 0 + cur_e = 0 + is_retracted = False + for num in range(1, self.start_index - 1): + lines = data[num].splitlines() + for line in lines: + if " E" in line: + cur_e = self.getValue(line, "E") + prev_e = cur_e + for num in range(self.start_index, self.end_index): + lines = data[num].splitlines() + for index, line in enumerate(lines): + if line == "G92 E0": + cur_e = 0 + prev_e = 0 + continue + if " E" in line and self.getValue(line, "E") is not None: + cur_e = self.getValue(line, "E") + if cur_e >= prev_e and " X" in line and " Y" in line: + prev_e = cur_e + is_retracted = False + continue + if " F" in line and " E" in line and not " X" in line and not " Z" in line: + cur_speed = self.getValue(line, "F") + if cur_e < prev_e: + is_retracted = True + new_e = prev_e - new_retract_amt + if not self.relative_extrusion: + if change_retract_amt: + lines[index] = lines[index].replace("E" + str(cur_e), "E" + str(new_e)) + prev_e = new_e + if change_retract_speed: + lines[index] = lines[index].replace("F" + str(cur_speed), "F" + str(new_retract_speed)) + elif self.relative_extrusion: + if change_retract_amt: + lines[index] = lines[index].replace("E" + str(cur_e), "E-" + str(new_retract_amt)) + prev_e = 0 + if change_retract_speed: + lines[index] = lines[index].replace("F" + str(cur_speed), "F" + str(new_retract_speed)) + lines[index] += " ; TweakAtZ: Alter retract" + else: + + # Prime line + if change_retract_speed: + lines[index] = lines[index].replace("F" + str(cur_speed), "F" + str(new_retract_speed)) + prev_e = cur_e + if self.relative_extrusion: + if change_retract_amt: + lines[index] = lines[index].replace("E" + str(cur_e), "E" + str(new_retract_amt)) + prev_e = 0 + lines[index] += " ; TweakAtZ: Alter retract" + is_retracted = False + data[num] = "\n".join(lines) + "\n" + + # If the changes end before the last layer and the filament is retracted, then adjust the first prime of the next layer so it doesn't blob. + if is_retracted and self.getSettingValueByKey("a_end_layer") != -1: + layer = data[self.end_index] + lines = layer.splitlines() + for index, line in enumerate(lines): + if " X" in line and " Y" in line and " E" in line: + break + if " F" in line and " E" in line and not " X" in line and not " Z" in line: + cur_e = self.getValue(line, "E") + if not self.relative_extrusion: + new_e = prev_e + new_retract_amt + if change_retract_amt: + lines[index] = lines[index].replace("E" + str(cur_e), "E" + str(new_e)) + " ; TweakAtZ: Alter retract" + break + elif self.relative_extrusion: + if change_retract_amt: + lines[index] = lines[index].replace("E" + str(cur_e), "E" + str(new_retract_amt)) + " ; TweakAtZ: Alter retract" + break + data[self.end_index] = "\n".join(lines) + "\n" + return data + + def _format_lines(self, temp_data: str) -> str: + """ + This adds '-' as padding so the setting descriptions are more readable in the gcode + """ + for l_index, layer in enumerate(temp_data): + lines = layer.split("\n") + for index, line in enumerate(lines): + if "; TweakAtZ:" in line: + lines[index] = lines[index].split(";")[0] + ";" + ("-" * (40 - len(lines[index].split(";")[0]))) + lines[index].split(";")[1] + temp_data[l_index] = "\n".join(lines) + return temp_data + + def _change_bv_fan_speed(self, temp_data: str) -> str: + """ + This can be used to control any fan. Typically this would be an Auxilliary or Build Volume fan + :params: + bv_fan_nr: The 'P' number of the fan + bv_fan_speed: The new speed for the fan + orig_bv_fan_speed: The reset speed. This is currently always "0" as the fan speed may not exist in Cura, or the fan might be 'on-off' and not PWM controlled. + """ + if not self.getSettingValueByKey("enable_bv_fan_change"): + return temp_data + bv_fan_nr = self.getSettingValueByKey("bv_fan_nr") + bv_fan_speed = self.getSettingValueByKey("e1_build_volume_fan_speed") + orig_bv_fan_speed = 0 + if bool(self.extruder_list[0].getProperty("machine_scale_fan_speed_zero_to_one", "value")): + bv_fan_speed = round(bv_fan_speed * 0.01, 2) + orig_bv_fan_speed = round(orig_bv_fan_speed * 0.01, 2) + else: + bv_fan_speed = round(bv_fan_speed * 2.55) + orig_bv_fan_speed = round(orig_bv_fan_speed * 2.55) + + # Add the changes to the gcode + for index, layer in enumerate(temp_data): + if index == self.start_index: + lines = layer.split("\n") + lines.insert(1, f"M106 S{bv_fan_speed} P{bv_fan_nr} ; TweakAtZ: Change Build Volume Fan Speed") + temp_data[index] = "\n".join(lines) + if index == self.end_index: + lines = layer.split("\n") + lines.insert(len(lines) - 2, f"M106 S{orig_bv_fan_speed} P{bv_fan_nr} ; TweakAtZ: Reset Build Volume Fan Speed") + temp_data[index] = "\n".join(lines) + return temp_data + + # Get the starting index or ending index of the change range when 'By Height' + def _is_legal_z(self, data: str, the_height: float) -> int: + """ + When in 'By Height' mode, this will return the index of the layer where the working Z is >= the Starting Z height, or the index of the layer where the working Z >= the Ending Z height + :params: + max_z: The maximum Z height within the Gcode. This is used to determine the upper limit of the data list that should be returned. + the_height: The user input height. This will be adjusted if rafts are enabled and/or Z-hops are enabled + cur_z: Is the current Z height as tracked through the gcode + the_index: The number to return. + """ + # The height passed down cannot exceed the height of the model or the search for the Z fails + lines = data[0].split("\n") + for line in lines: + if "MAXZ" in line or "MAX.Z" in line: + max_z = float(line.split(":")[1]) + break + if the_height > max_z: + the_height = max_z + + starting_z = 0 + the_index = 0 + + # The start height varies depending whether or not rafts are enabled and whether Z-hops are enabled. + if str(self.global_stack.getProperty("adhesion_type", "value")) == "raft": + + # If z-hops are enabled then start looking for the working Z after layer:0 + if self.z_hop_enabled: + for layer in data: + if ";LAYER:0" in layer: + lines = layer.splitlines() + for index, line in enumerate(lines): + try: + if " Z" in line and " E" in lines[index + 1]: + starting_z = round(float(self.getValue(line, "Z")),2) + the_height += starting_z + break + + # If the layer ends without an extruder move following the Z line, then just jump out + except IndexError: + starting_z = round(float(self.getValue(line, "Z")),2) + the_height += starting_z + break + + # If Z-hops are disabled, then look for the starting Z from the start of the raft up to Layer:0 + else: + for layer in data: + lines = layer.splitlines() + for index, line in enumerate(lines): + + # This try/except catches comments in the startup gcode + try: + if " Z" in line and " E" in lines[index - 1]: + starting_z = float(self.getValue(line, "Z")) + except TypeError: + + # Just pass beause there will be further Z values + pass + if ";LAYER:0" in line: + the_height += starting_z + break + + # Initialize 'cur_z' + cur_z = self.initial_layer_height + for index, layer in enumerate(data): + + # Skip over the opening paragraph and StartUp Gcode + if index < 2: + continue + lines = layer.splitlines() + for z_index, line in enumerate(lines): + if line[0:3] in ["G0 ", "G1 ", "G2 ", "G3 "] and index <= self.end_index: + if " Z" in line: + cur_z = float(self.getValue(line, "Z")) + if cur_z >= the_height and lines[z_index - 1].startswith(";TYPE:"): + the_index = index + break + if the_index > 0: + break + + # Catch-all to insure an entry of the 'model_height'. This allows the changes to continue to the end of the top layer + if the_height >= max_z: + the_index = len(data) - 2 + return the_index \ No newline at end of file From 061944c8a7f346f8ccff0242443722f966a494bb Mon Sep 17 00:00:00 2001 From: HellAholic Date: Sun, 14 Sep 2025 10:14:43 +0200 Subject: [PATCH 24/26] add a limiter to the z-height hop --- plugins/PostProcessingPlugin/scripts/ZHopOnTravel.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/plugins/PostProcessingPlugin/scripts/ZHopOnTravel.py b/plugins/PostProcessingPlugin/scripts/ZHopOnTravel.py index 71924419fe..69cf3d1938 100644 --- a/plugins/PostProcessingPlugin/scripts/ZHopOnTravel.py +++ b/plugins/PostProcessingPlugin/scripts/ZHopOnTravel.py @@ -90,6 +90,7 @@ class ZHopOnTravel(Script): "default_value": 0.5, "minimum_value": 0, "maximum_value_warning": 5, + "maximum_value": 10, "enabled": "zhop_travel_enabled" }, "min_travel_dist": { @@ -417,7 +418,12 @@ class ZHopOnTravel(Script): reset_type += 4 if extra_prime_dist > 0 and hop_retraction: reset_type += 8 - up_lines = f"G1 F{speed_zhop} Z{round(self._cur_z + hop_height,2)} ; Hop Up" + + machine_height = Application.getInstance().getGlobalContainerStack().getProperty("machine_height", "value") + if self._cur_z + hop_height < machine_height: + up_lines = f"G1 F{speed_zhop} Z{round(self._cur_z + hop_height,2)} ; Hop Up" + else: + up_lines = f"G1 F{speed_zhop} Z{round(machine_height, 2)} ; Hop Up" if reset_type in [1, 9] and hop_retraction: # add retract only when necessary up_lines = f"G1 F{retract_speed} E{round(self._cur_e - retraction_amount, 5)} ; Retract\n" + up_lines self._cur_e = round(self._cur_e - retraction_amount, 5) From 7ca3a2a9bfe1cc262efcf78abb18e05558e6573d Mon Sep 17 00:00:00 2001 From: GregValiant <64202104+GregValiant@users.noreply.github.com> Date: Sun, 14 Sep 2025 09:10:28 -0400 Subject: [PATCH 25/26] Update TweakAtZ.py Made changes per review requests. Update TweakAtZ.py One more change. --- .../PostProcessingPlugin/scripts/TweakAtZ.py | 134 ++++++++++-------- 1 file changed, 71 insertions(+), 63 deletions(-) diff --git a/plugins/PostProcessingPlugin/scripts/TweakAtZ.py b/plugins/PostProcessingPlugin/scripts/TweakAtZ.py index 8bf75e917f..adb610c949 100644 --- a/plugins/PostProcessingPlugin/scripts/TweakAtZ.py +++ b/plugins/PostProcessingPlugin/scripts/TweakAtZ.py @@ -90,11 +90,10 @@ class TweakAtZ(Script): "a_start_layer": { "label": "Start Layer", "description": "Layer number to start the changes at. Use the Cura preview layer numbers. The changes will start at the beginning of the layer.", - "unit": "", "type": "int", "default_value": 1, - "minimum_value": "-7", - "minimum_value_warning": "1", + "minimum_value": -7, + "minimum_value_warning": 1, "unit": "Layer #", "enabled": "taz_enabled and by_layer_or_height == 'by_layer'" }, @@ -121,7 +120,7 @@ class TweakAtZ(Script): "default_value": 0, "unit": "mm", "enabled": "taz_enabled and by_layer_or_height == 'by_height'" - } , + }, "b_change_speed": { "label": "Change Speeds", "description": "Check to enable a speed change for the Print Speeds.", @@ -153,9 +152,9 @@ class TweakAtZ(Script): "unit": "% ", "type": "int", "default_value": 100, - "minimum_value": "10", - "minimum_value_warning": "50", - "maximum_value_warning": "200", + "minimum_value": 10, + "minimum_value_warning": 50, + "maximum_value_warning": 200, "enabled": "b_change_speed and taz_enabled" }, "c_change_flowrate": { @@ -171,10 +170,10 @@ class TweakAtZ(Script): "unit": "% ", "type": "int", "default_value": 100, - "minimum_value": "25", - "minimum_value_warning": "50", - "maximum_value_warning": "150", - "maximum_value": "200", + "minimum_value": 25, + "minimum_value_warning": 50, + "maximum_value_warning": 150, + "maximum_value": 200, "enabled": "c_change_flowrate and taz_enabled" }, "multi_extruder": { @@ -191,9 +190,9 @@ class TweakAtZ(Script): "unit": "% ", "type": "int", "default_value": 100, - "minimum_value": "1", - "minimum_value_warning": "10", - "maximum_value_warning": "200", + "minimum_value": 1, + "minimum_value_warning": 10, + "maximum_value_warning": 200, "enabled": "multi_extruder and c_change_flowrate and taz_enabled" }, "d_change_bed_temp": { @@ -209,9 +208,9 @@ class TweakAtZ(Script): "unit": "°C ", "type": "int", "default_value": 60, - "minimum_value": "0", - "minimum_value_warning": "30", - "maximum_value_warning": "120", + "minimum_value": 0, + "minimum_value_warning": 30, + "maximum_value_warning": 120, "enabled": "d_change_bed_temp and taz_enabled" }, "heated_build_volume": { @@ -234,9 +233,9 @@ class TweakAtZ(Script): "unit": "°C ", "type": "int", "default_value": 20, - "minimum_value": "0", - "minimum_value_warning": "15", - "maximum_value_warning": "80", + "minimum_value": 0, + "minimum_value_warning": 15, + "maximum_value_warning": 80, "enabled": "heated_build_volume and e_change_build_volume_temperature and taz_enabled" }, "f_change_extruder_temperature": { @@ -252,9 +251,9 @@ class TweakAtZ(Script): "unit": "°C ", "type": "int", "default_value": 190, - "minimum_value": "0", - "minimum_value_warning": "160", - "maximum_value_warning": "250", + "minimum_value": 0, + "minimum_value_warning": 160, + "maximum_value_warning": 250, "enabled": "f_change_extruder_temperature and taz_enabled" }, "f_extruder_temperature_t1": { @@ -263,9 +262,9 @@ class TweakAtZ(Script): "unit": "°C ", "type": "int", "default_value": 190, - "minimum_value": "0", - "minimum_value_warning": "160", - "maximum_value_warning": "250", + "minimum_value": 0, + "minimum_value_warning": 160, + "maximum_value_warning": 250, "enabled": "multi_extruder and f_change_extruder_temperature and taz_enabled" }, "g_change_retract": { @@ -288,9 +287,9 @@ class TweakAtZ(Script): "unit": "mm/s ", "type": "float", "default_value": 40, - "minimum_value": "0", - "minimum_value_warning": "0", - "maximum_value_warning": "100", + "minimum_value": 1, + "minimum_value_warning": 0, + "maximum_value_warning": 100, "enabled": "g_change_retract and g_change_retract_speed and taz_enabled and not multi_extruder" }, "g_change_retract_amount": { @@ -306,9 +305,8 @@ class TweakAtZ(Script): "unit": "mm ", "type": "float", "default_value": 6.5, - "minimum_value": "0", - "minimum_value_warning": "0", - "maximum_value_warning": "20", + "minimum_value": 0, + "maximum_value_warning": 20, "enabled": "g_change_retract and g_change_retract_amount and taz_enabled and not multi_extruder" }, "enable_bv_fan_change": { @@ -387,13 +385,13 @@ class TweakAtZ(Script): nbr_raft_layers += 1 if ";LAYER:0\n" in layer: break - + # Adjust the start layer to account for any raft layers self.start_layer -= nbr_raft_layers - + # Find the indexes of the Start and End layers if 'By Layer' self.start_index = 0 - + # When retraction is enabled it adds a single line item to the data list self.end_index = len(data) - 1 - int(self.retract_enabled) if self.getSettingValueByKey("by_layer_or_height") == "by_layer": @@ -401,20 +399,20 @@ class TweakAtZ(Script): if ";LAYER:" + str(self.start_layer) + "\n" in layer: self.start_index = index break - + # If the changes continue to the top layer if end_layer == -1: if self.retract_enabled: self.end_index = len(data) - 2 else: self.end_index = len(data) - 1 - + # If the changes end below the top layer else: - + # Adjust the end layer from base1 numbering to base0 numbering end_layer -= 1 - + # Adjust the End Layer if it is not the top layer and if bed adhesion is 'raft' end_layer -= nbr_raft_layers for index, layer in enumerate(data): @@ -476,7 +474,7 @@ class TweakAtZ(Script): if index >= self.start_index and index <= self.end_index: lines = layer.splitlines() for l_index, line in enumerate(lines): - if " F" in line and " X" in line and " Y" in line and not " Z" in line: + if self._f_x_y_not_z(line): f_value = self.getValue(line, "F") if line.startswith(("G1", "G2", "G3")): lines[l_index] = line.replace("F" + str(f_value), "F" + str(round(f_value * speed_x))) @@ -512,7 +510,7 @@ class TweakAtZ(Script): lines = layer.splitlines() for l_index, line in enumerate(lines): if active_tool == target_extruder: - if " F" in line and " X" in line and " Y" in line and not " Z" in line: + if self._f_x_y_not_z(line): f_value = self.getValue(line, "F") if line.startswith(("G1", "G2", "G3")): lines[l_index] = line.replace("F" + str(f_value), "F" + str(round(f_value * speed_x))) @@ -547,7 +545,7 @@ class TweakAtZ(Script): new_flowrate_1 = f"\nM221 S{new_flow_ext_1} ; TweakAtZ: Alter Flow Rate" else: new_flowrate_1 = "" - + # For single extruder if self.extruder_count == 1: lines = data[self.start_index].splitlines() @@ -556,7 +554,7 @@ class TweakAtZ(Script): lines = data[self.end_index].splitlines() lines[len(lines) - 2] += reset_flowrate_0 data[self.end_index] = "\n".join(lines) + "\n" - + # For dual-extruders elif self.extruder_count > 1: for index, layer in enumerate(data): @@ -644,14 +642,14 @@ class TweakAtZ(Script): data[2] = re.sub("M104 S", ";M104 S", data[2]) if "M104 S" in data[3]: data[3] = re.sub("M104 S", ";M104 S", data[3]) - + # Add the temperature change at the beginning of the start layer lines = data[self.start_index].splitlines() for index, line in enumerate(lines): lines[0] += "\n" + "M104 S" + str(self.new_hotend_temp_0) + " ; TweakAtZ: Change Nozzle Temperature" data[self.start_index] = "\n".join(lines) + "\n" break - + # Revert the temperature to the Cura setting at the end of the end layer lines = data[self.end_index].splitlines() for index, line in enumerate(lines): @@ -664,7 +662,7 @@ class TweakAtZ(Script): self.new_hotend_temp_1 = self.getSettingValueByKey("f_extruder_temperature_t1") self.orig_hot_end_temp_1 = int(self.extruder_list[1].getProperty("material_print_temperature", "value")) self.orig_standby_temp_1 = int(self.extruder_list[1].getProperty("material_standby_temperature", "value")) - + # Track the tool number up to the start of the start layer self.getTool("T0") for index, layer in enumerate(data): @@ -674,10 +672,10 @@ class TweakAtZ(Script): self.getTool(line) if index == self.start_index - 1: break - + # Add the active extruder initial temperature change at the start of the starting layer data[self.start_index] = data[self.start_index].replace("\n", f"\nM104 S{self.active_print_temp} ; TweakAtZ: Start Temperature Change\n",1) - + # At the start layer commence making the changes for index, layer in enumerate(data): if index < self.start_index: @@ -686,7 +684,7 @@ class TweakAtZ(Script): break lines = layer.splitlines() for l_index, line in enumerate(lines): - + # Continue to track the tool number if line.startswith("T"): self.getTool(line) @@ -700,7 +698,7 @@ class TweakAtZ(Script): elif self.getValue(line, "S") == self.active_tool_orig_temp: lines[l_index] = re.sub("S(\d+|\d.+)", f"S{self.active_print_temp} ; TweakAtZ: Alter temperature", line) data[index] = "\n".join(lines) + "\n" - + # Revert the active extruder temperature at the end of the changes lines = data[self.end_index].split("\n") lines[len(lines) - 3] += f"\nM104 {self.active_tool} S{self.active_tool_orig_temp} ; TweakAtZ: Original Temperature active tool" @@ -745,23 +743,30 @@ class TweakAtZ(Script): """ if not self.retract_enabled: return + + # Exit if neither child setting is checked. + if not (change_retract_amt or change_retract_speed): + return + speed_retract_0 = int(self.extruder_list[0].getProperty("retraction_speed", "value") * 60) retract_amt_0 = self.extruder_list[0].getProperty("retraction_amount", "value") change_retract_amt = self.getSettingValueByKey("g_change_retract_amount") change_retract_speed = self.getSettingValueByKey("g_change_retract_speed") new_retract_speed = int(self.getSettingValueByKey("g_retract_speed") * 60) new_retract_amt = self.getSettingValueByKey("g_retract_amount") - + # Use M207 and M208 to adjust firmware retraction when required if self.firmware_retraction: lines = data[self.start_index].splitlines() firmware_start_str = "\nM207" firmware_reset = "" if change_retract_speed: - firmware_start_str += f" F{new_retract_speed} ; TweakAtZ: Alter Firmware Retract speed" + firmware_start_str += f" F{new_retract_speed}" if change_retract_amt: - firmware_start_str += f" S{new_retract_amt} ; TweakAtZ: Alter Firmware Retract amt" - if change_retract_speed: + firmware_start_str += f" S{new_retract_amt}" + if change_retract_speed or change_retract_amt: + firmware_start_str += " ; TweakAtZ: Alter Firmware Retract speed/amt" + if change_retract_speed: firmware_start_str += f"\nM208 F{new_retract_speed} ; TweakAtZ: Alter Firmware Prime speed" lines[0] += firmware_start_str data[self.start_index] = "\n".join(lines) + "\n" @@ -818,7 +823,7 @@ class TweakAtZ(Script): lines[index] = lines[index].replace("F" + str(cur_speed), "F" + str(new_retract_speed)) lines[index] += " ; TweakAtZ: Alter retract" else: - + # Prime line if change_retract_speed: lines[index] = lines[index].replace("F" + str(cur_speed), "F" + str(new_retract_speed)) @@ -920,7 +925,7 @@ class TweakAtZ(Script): # The start height varies depending whether or not rafts are enabled and whether Z-hops are enabled. if str(self.global_stack.getProperty("adhesion_type", "value")) == "raft": - + # If z-hops are enabled then start looking for the working Z after layer:0 if self.z_hop_enabled: for layer in data: @@ -932,7 +937,7 @@ class TweakAtZ(Script): starting_z = round(float(self.getValue(line, "Z")),2) the_height += starting_z break - + # If the layer ends without an extruder move following the Z line, then just jump out except IndexError: starting_z = round(float(self.getValue(line, "Z")),2) @@ -944,29 +949,29 @@ class TweakAtZ(Script): for layer in data: lines = layer.splitlines() for index, line in enumerate(lines): - + # This try/except catches comments in the startup gcode try: if " Z" in line and " E" in lines[index - 1]: starting_z = float(self.getValue(line, "Z")) except TypeError: - + # Just pass beause there will be further Z values pass if ";LAYER:0" in line: the_height += starting_z break - + # Initialize 'cur_z' cur_z = self.initial_layer_height for index, layer in enumerate(data): - + # Skip over the opening paragraph and StartUp Gcode if index < 2: continue lines = layer.splitlines() for z_index, line in enumerate(lines): - if line[0:3] in ["G0 ", "G1 ", "G2 ", "G3 "] and index <= self.end_index: + if len(line) >= 3 and line[0:3] in ['G0 ', 'G1 ', 'G2 ', 'G3 '] and index <= self.end_index: if " Z" in line: cur_z = float(self.getValue(line, "Z")) if cur_z >= the_height and lines[z_index - 1].startswith(";TYPE:"): @@ -978,4 +983,7 @@ class TweakAtZ(Script): # Catch-all to insure an entry of the 'model_height'. This allows the changes to continue to the end of the top layer if the_height >= max_z: the_index = len(data) - 2 - return the_index \ No newline at end of file + return the_index + + def _f_x_y_not_z(self, line): + return " F" in line and " X" in line and " Y" in line and not " Z" in line From 88eaf399afbd6af089593e998d492fd84439d535 Mon Sep 17 00:00:00 2001 From: Erwan MATHIEU Date: Thu, 11 Sep 2025 14:47:13 +0200 Subject: [PATCH 26/26] Merge pull request #20945 from Ultimaker/CURA-12713 Cura 12713 --- .../um_s8_aa_plus_0.4_abs_0.2mm_engineering.inst.cfg | 2 +- .../ultimaker_s8/um_s8_aa_plus_0.4_abs_0.2mm_quick.inst.cfg | 2 +- .../um_s8_aa_plus_0.4_cpe-plus_0.2mm_engineering.inst.cfg | 2 +- .../um_s8_aa_plus_0.4_cpe_0.2mm_engineering.inst.cfg | 2 +- .../um_s8_aa_plus_0.4_pc_0.2mm_engineering.inst.cfg | 2 +- .../um_s8_aa_plus_0.4_petg_0.2mm_engineering.inst.cfg | 2 +- .../ultimaker_s8/um_s8_aa_plus_0.4_petg_0.2mm_quick.inst.cfg | 2 +- .../um_s8_aa_plus_0.4_pla_0.2mm_engineering.inst.cfg | 2 +- .../ultimaker_s8/um_s8_aa_plus_0.4_pla_0.2mm_quick.inst.cfg | 2 +- .../um_s8_aa_plus_0.4_tough-pla_0.2mm_engineering.inst.cfg | 2 +- .../um_s8_aa_plus_0.4_tough-pla_0.2mm_quick.inst.cfg | 2 +- .../um_s8_cc_plus_0.4_cpe-plus_0.2mm_engineering.inst.cfg | 2 +- .../um_s8_cc_plus_0.4_nylon-cf-slide_0.2mm_engineering.inst.cfg | 2 +- .../um_s8_cc_plus_0.4_pc_0.2mm_engineering.inst.cfg | 2 +- .../um_s8_cc_plus_0.4_petcf_0.2mm_engineering.inst.cfg | 2 +- .../um_s8_cc_plus_0.6_nylon-cf-slide_0.2mm_engineering.inst.cfg | 2 +- .../um_s8_cc_plus_0.6_petcf_0.2mm_engineering.inst.cfg | 2 +- .../quality/ultimaker_s8/um_s8_aa_plus_0.4_abs_0.2mm.inst.cfg | 2 +- .../quality/ultimaker_s8/um_s8_aa_plus_0.4_petg_0.2mm.inst.cfg | 2 +- .../quality/ultimaker_s8/um_s8_aa_plus_0.4_pla_0.15mm.inst.cfg | 2 +- .../quality/ultimaker_s8/um_s8_aa_plus_0.4_pla_0.1mm.inst.cfg | 2 +- .../quality/ultimaker_s8/um_s8_aa_plus_0.4_pla_0.2mm.inst.cfg | 2 +- .../ultimaker_s8/um_s8_aa_plus_0.4_tough-pla_0.15mm.inst.cfg | 2 +- .../ultimaker_s8/um_s8_aa_plus_0.4_tough-pla_0.1mm.inst.cfg | 2 +- .../ultimaker_s8/um_s8_aa_plus_0.4_tough-pla_0.2mm.inst.cfg | 2 +- 25 files changed, 25 insertions(+), 25 deletions(-) diff --git a/resources/intent/ultimaker_s8/um_s8_aa_plus_0.4_abs_0.2mm_engineering.inst.cfg b/resources/intent/ultimaker_s8/um_s8_aa_plus_0.4_abs_0.2mm_engineering.inst.cfg index 7bbf373b2e..9e6032024b 100644 --- a/resources/intent/ultimaker_s8/um_s8_aa_plus_0.4_abs_0.2mm_engineering.inst.cfg +++ b/resources/intent/ultimaker_s8/um_s8_aa_plus_0.4_abs_0.2mm_engineering.inst.cfg @@ -14,7 +14,7 @@ variant = AA+ 0.4 [values] hole_xy_offset = 0.075 infill_sparse_density = 20 -inset_direction = outside-in +inset_direction = outside_in top_bottom_thickness = =wall_thickness wall_thickness = =line_width * 4 xy_offset = 0.075 diff --git a/resources/intent/ultimaker_s8/um_s8_aa_plus_0.4_abs_0.2mm_quick.inst.cfg b/resources/intent/ultimaker_s8/um_s8_aa_plus_0.4_abs_0.2mm_quick.inst.cfg index fe4b0497e1..490d975079 100644 --- a/resources/intent/ultimaker_s8/um_s8_aa_plus_0.4_abs_0.2mm_quick.inst.cfg +++ b/resources/intent/ultimaker_s8/um_s8_aa_plus_0.4_abs_0.2mm_quick.inst.cfg @@ -18,7 +18,7 @@ cool_min_speed = 6 cool_min_temperature = =material_print_temperature - 15 gradual_flow_enable = False hole_xy_offset = 0.075 -inset_direction = outside-in +inset_direction = outside_in speed_wall = =speed_print speed_wall_x = =speed_print speed_wall_x_roofing = =speed_wall diff --git a/resources/intent/ultimaker_s8/um_s8_aa_plus_0.4_cpe-plus_0.2mm_engineering.inst.cfg b/resources/intent/ultimaker_s8/um_s8_aa_plus_0.4_cpe-plus_0.2mm_engineering.inst.cfg index d01f907d33..74a80d566c 100644 --- a/resources/intent/ultimaker_s8/um_s8_aa_plus_0.4_cpe-plus_0.2mm_engineering.inst.cfg +++ b/resources/intent/ultimaker_s8/um_s8_aa_plus_0.4_cpe-plus_0.2mm_engineering.inst.cfg @@ -14,7 +14,7 @@ variant = AA+ 0.4 [values] hole_xy_offset = 0.075 infill_sparse_density = 20 -inset_direction = outside-in +inset_direction = outside_in top_bottom_thickness = =wall_thickness wall_thickness = =line_width * 4 xy_offset = 0.075 diff --git a/resources/intent/ultimaker_s8/um_s8_aa_plus_0.4_cpe_0.2mm_engineering.inst.cfg b/resources/intent/ultimaker_s8/um_s8_aa_plus_0.4_cpe_0.2mm_engineering.inst.cfg index 7a96aa3f79..33fd2b9d8b 100644 --- a/resources/intent/ultimaker_s8/um_s8_aa_plus_0.4_cpe_0.2mm_engineering.inst.cfg +++ b/resources/intent/ultimaker_s8/um_s8_aa_plus_0.4_cpe_0.2mm_engineering.inst.cfg @@ -14,7 +14,7 @@ variant = AA+ 0.4 [values] hole_xy_offset = 0.075 infill_sparse_density = 20 -inset_direction = outside-in +inset_direction = outside_in top_bottom_thickness = =wall_thickness wall_thickness = =line_width * 4 xy_offset = 0.075 diff --git a/resources/intent/ultimaker_s8/um_s8_aa_plus_0.4_pc_0.2mm_engineering.inst.cfg b/resources/intent/ultimaker_s8/um_s8_aa_plus_0.4_pc_0.2mm_engineering.inst.cfg index 1b666e4d83..5c8d802225 100644 --- a/resources/intent/ultimaker_s8/um_s8_aa_plus_0.4_pc_0.2mm_engineering.inst.cfg +++ b/resources/intent/ultimaker_s8/um_s8_aa_plus_0.4_pc_0.2mm_engineering.inst.cfg @@ -14,7 +14,7 @@ variant = AA+ 0.4 [values] hole_xy_offset = 0.075 infill_sparse_density = 20 -inset_direction = outside-in +inset_direction = outside_in top_bottom_thickness = =wall_thickness wall_thickness = =line_width * 4 xy_offset = 0.075 diff --git a/resources/intent/ultimaker_s8/um_s8_aa_plus_0.4_petg_0.2mm_engineering.inst.cfg b/resources/intent/ultimaker_s8/um_s8_aa_plus_0.4_petg_0.2mm_engineering.inst.cfg index 3dd4ef5f01..ecd6554ecb 100644 --- a/resources/intent/ultimaker_s8/um_s8_aa_plus_0.4_petg_0.2mm_engineering.inst.cfg +++ b/resources/intent/ultimaker_s8/um_s8_aa_plus_0.4_petg_0.2mm_engineering.inst.cfg @@ -14,7 +14,7 @@ variant = AA+ 0.4 [values] hole_xy_offset = 0.075 infill_sparse_density = 20 -inset_direction = outside-in +inset_direction = outside_in top_bottom_thickness = =wall_thickness wall_thickness = =line_width * 4 xy_offset = 0.075 diff --git a/resources/intent/ultimaker_s8/um_s8_aa_plus_0.4_petg_0.2mm_quick.inst.cfg b/resources/intent/ultimaker_s8/um_s8_aa_plus_0.4_petg_0.2mm_quick.inst.cfg index 0fe5944438..0784e0bfac 100644 --- a/resources/intent/ultimaker_s8/um_s8_aa_plus_0.4_petg_0.2mm_quick.inst.cfg +++ b/resources/intent/ultimaker_s8/um_s8_aa_plus_0.4_petg_0.2mm_quick.inst.cfg @@ -18,7 +18,7 @@ cool_min_speed = 6 cool_min_temperature = =material_print_temperature - 15 gradual_flow_enable = False hole_xy_offset = 0.075 -inset_direction = outside-in +inset_direction = outside_in speed_wall = =speed_print speed_wall_x = =speed_print speed_wall_x_roofing = =speed_wall diff --git a/resources/intent/ultimaker_s8/um_s8_aa_plus_0.4_pla_0.2mm_engineering.inst.cfg b/resources/intent/ultimaker_s8/um_s8_aa_plus_0.4_pla_0.2mm_engineering.inst.cfg index d2bbcf226e..11761903ee 100644 --- a/resources/intent/ultimaker_s8/um_s8_aa_plus_0.4_pla_0.2mm_engineering.inst.cfg +++ b/resources/intent/ultimaker_s8/um_s8_aa_plus_0.4_pla_0.2mm_engineering.inst.cfg @@ -14,7 +14,7 @@ variant = AA+ 0.4 [values] hole_xy_offset = 0.075 infill_sparse_density = 20 -inset_direction = outside-in +inset_direction = outside_in top_bottom_thickness = =wall_thickness wall_thickness = =line_width * 4 xy_offset = 0.075 diff --git a/resources/intent/ultimaker_s8/um_s8_aa_plus_0.4_pla_0.2mm_quick.inst.cfg b/resources/intent/ultimaker_s8/um_s8_aa_plus_0.4_pla_0.2mm_quick.inst.cfg index a4730213de..32dda9289e 100644 --- a/resources/intent/ultimaker_s8/um_s8_aa_plus_0.4_pla_0.2mm_quick.inst.cfg +++ b/resources/intent/ultimaker_s8/um_s8_aa_plus_0.4_pla_0.2mm_quick.inst.cfg @@ -18,7 +18,7 @@ cool_min_speed = 6 cool_min_temperature = =material_print_temperature - 15 gradual_flow_enable = False hole_xy_offset = 0.075 -inset_direction = outside-in +inset_direction = outside_in speed_wall = =speed_print speed_wall_x = =speed_print speed_wall_x_roofing = =speed_wall diff --git a/resources/intent/ultimaker_s8/um_s8_aa_plus_0.4_tough-pla_0.2mm_engineering.inst.cfg b/resources/intent/ultimaker_s8/um_s8_aa_plus_0.4_tough-pla_0.2mm_engineering.inst.cfg index ed68baf7b1..8e88841ec1 100644 --- a/resources/intent/ultimaker_s8/um_s8_aa_plus_0.4_tough-pla_0.2mm_engineering.inst.cfg +++ b/resources/intent/ultimaker_s8/um_s8_aa_plus_0.4_tough-pla_0.2mm_engineering.inst.cfg @@ -14,7 +14,7 @@ variant = AA+ 0.4 [values] hole_xy_offset = 0.075 infill_sparse_density = 20 -inset_direction = outside-in +inset_direction = outside_in top_bottom_thickness = =wall_thickness wall_thickness = =line_width * 4 xy_offset = 0.075 diff --git a/resources/intent/ultimaker_s8/um_s8_aa_plus_0.4_tough-pla_0.2mm_quick.inst.cfg b/resources/intent/ultimaker_s8/um_s8_aa_plus_0.4_tough-pla_0.2mm_quick.inst.cfg index 908ecae7ed..d2ff7ee7a3 100644 --- a/resources/intent/ultimaker_s8/um_s8_aa_plus_0.4_tough-pla_0.2mm_quick.inst.cfg +++ b/resources/intent/ultimaker_s8/um_s8_aa_plus_0.4_tough-pla_0.2mm_quick.inst.cfg @@ -18,7 +18,7 @@ cool_min_speed = 6 cool_min_temperature = =material_print_temperature - 15 gradual_flow_enable = False hole_xy_offset = 0.075 -inset_direction = outside-in +inset_direction = outside_in speed_wall = =speed_print speed_wall_x = =speed_print speed_wall_x_roofing = =speed_wall diff --git a/resources/intent/ultimaker_s8/um_s8_cc_plus_0.4_cpe-plus_0.2mm_engineering.inst.cfg b/resources/intent/ultimaker_s8/um_s8_cc_plus_0.4_cpe-plus_0.2mm_engineering.inst.cfg index 0252cd6eb5..aad54ac9d7 100644 --- a/resources/intent/ultimaker_s8/um_s8_cc_plus_0.4_cpe-plus_0.2mm_engineering.inst.cfg +++ b/resources/intent/ultimaker_s8/um_s8_cc_plus_0.4_cpe-plus_0.2mm_engineering.inst.cfg @@ -15,7 +15,7 @@ variant = CC+ 0.4 [values] hole_xy_offset = 0.075 infill_sparse_density = 20 -inset_direction = outside-in +inset_direction = outside_in top_bottom_thickness = =wall_thickness wall_thickness = =line_width * 4 xy_offset = 0.075 diff --git a/resources/intent/ultimaker_s8/um_s8_cc_plus_0.4_nylon-cf-slide_0.2mm_engineering.inst.cfg b/resources/intent/ultimaker_s8/um_s8_cc_plus_0.4_nylon-cf-slide_0.2mm_engineering.inst.cfg index 2ce40b3df1..9892f6b555 100644 --- a/resources/intent/ultimaker_s8/um_s8_cc_plus_0.4_nylon-cf-slide_0.2mm_engineering.inst.cfg +++ b/resources/intent/ultimaker_s8/um_s8_cc_plus_0.4_nylon-cf-slide_0.2mm_engineering.inst.cfg @@ -15,7 +15,7 @@ variant = CC+ 0.4 [values] hole_xy_offset = 0.075 infill_sparse_density = 20 -inset_direction = outside-in +inset_direction = outside_in top_bottom_thickness = =wall_thickness wall_thickness = =line_width * 4 xy_offset = 0.075 diff --git a/resources/intent/ultimaker_s8/um_s8_cc_plus_0.4_pc_0.2mm_engineering.inst.cfg b/resources/intent/ultimaker_s8/um_s8_cc_plus_0.4_pc_0.2mm_engineering.inst.cfg index cb3c7bbac2..18ff3a861b 100644 --- a/resources/intent/ultimaker_s8/um_s8_cc_plus_0.4_pc_0.2mm_engineering.inst.cfg +++ b/resources/intent/ultimaker_s8/um_s8_cc_plus_0.4_pc_0.2mm_engineering.inst.cfg @@ -15,7 +15,7 @@ variant = CC+ 0.4 [values] hole_xy_offset = 0.075 infill_sparse_density = 20 -inset_direction = outside-in +inset_direction = outside_in top_bottom_thickness = =wall_thickness wall_thickness = =line_width * 4 xy_offset = 0.075 diff --git a/resources/intent/ultimaker_s8/um_s8_cc_plus_0.4_petcf_0.2mm_engineering.inst.cfg b/resources/intent/ultimaker_s8/um_s8_cc_plus_0.4_petcf_0.2mm_engineering.inst.cfg index 706c77e91a..f41bf80386 100644 --- a/resources/intent/ultimaker_s8/um_s8_cc_plus_0.4_petcf_0.2mm_engineering.inst.cfg +++ b/resources/intent/ultimaker_s8/um_s8_cc_plus_0.4_petcf_0.2mm_engineering.inst.cfg @@ -15,7 +15,7 @@ variant = CC+ 0.4 [values] hole_xy_offset = 0.075 infill_sparse_density = 20 -inset_direction = outside-in +inset_direction = outside_in top_bottom_thickness = =wall_thickness wall_thickness = =line_width * 4 xy_offset = 0.075 diff --git a/resources/intent/ultimaker_s8/um_s8_cc_plus_0.6_nylon-cf-slide_0.2mm_engineering.inst.cfg b/resources/intent/ultimaker_s8/um_s8_cc_plus_0.6_nylon-cf-slide_0.2mm_engineering.inst.cfg index 57dfaa8f45..cb43ac7cfa 100644 --- a/resources/intent/ultimaker_s8/um_s8_cc_plus_0.6_nylon-cf-slide_0.2mm_engineering.inst.cfg +++ b/resources/intent/ultimaker_s8/um_s8_cc_plus_0.6_nylon-cf-slide_0.2mm_engineering.inst.cfg @@ -14,7 +14,7 @@ variant = CC+ 0.6 [values] hole_xy_offset = 0.075 infill_sparse_density = 20 -inset_direction = outside-in +inset_direction = outside_in top_bottom_thickness = =wall_thickness wall_thickness = =line_width * 4 xy_offset = 0.075 diff --git a/resources/intent/ultimaker_s8/um_s8_cc_plus_0.6_petcf_0.2mm_engineering.inst.cfg b/resources/intent/ultimaker_s8/um_s8_cc_plus_0.6_petcf_0.2mm_engineering.inst.cfg index 9f2ddc6be5..0ecb4c3a61 100644 --- a/resources/intent/ultimaker_s8/um_s8_cc_plus_0.6_petcf_0.2mm_engineering.inst.cfg +++ b/resources/intent/ultimaker_s8/um_s8_cc_plus_0.6_petcf_0.2mm_engineering.inst.cfg @@ -14,7 +14,7 @@ variant = CC+ 0.6 [values] hole_xy_offset = 0.075 infill_sparse_density = 20 -inset_direction = outside-in +inset_direction = outside_in top_bottom_thickness = =wall_thickness wall_thickness = =line_width * 4 xy_offset = 0.075 diff --git a/resources/quality/ultimaker_s8/um_s8_aa_plus_0.4_abs_0.2mm.inst.cfg b/resources/quality/ultimaker_s8/um_s8_aa_plus_0.4_abs_0.2mm.inst.cfg index 014a2012c8..2fc2e01d53 100644 --- a/resources/quality/ultimaker_s8/um_s8_aa_plus_0.4_abs_0.2mm.inst.cfg +++ b/resources/quality/ultimaker_s8/um_s8_aa_plus_0.4_abs_0.2mm.inst.cfg @@ -16,7 +16,7 @@ cool_min_layer_time = 4 cool_min_layer_time_fan_speed_max = 9 cool_min_temperature = =material_print_temperature - 20 hole_xy_offset = 0.1 -inset_direction = inside-out +inset_direction = inside_out retraction_prime_speed = 15 speed_roofing = =speed_topbottom * 1/3 speed_wall_x = =speed_wall diff --git a/resources/quality/ultimaker_s8/um_s8_aa_plus_0.4_petg_0.2mm.inst.cfg b/resources/quality/ultimaker_s8/um_s8_aa_plus_0.4_petg_0.2mm.inst.cfg index 9e9320d45d..e8b104ef29 100644 --- a/resources/quality/ultimaker_s8/um_s8_aa_plus_0.4_petg_0.2mm.inst.cfg +++ b/resources/quality/ultimaker_s8/um_s8_aa_plus_0.4_petg_0.2mm.inst.cfg @@ -14,7 +14,7 @@ weight = -2 [values] cool_min_layer_time = 4 hole_xy_offset = 0.1 -inset_direction = inside-out +inset_direction = inside_out material_print_temperature = =default_material_print_temperature + 5 retraction_prime_speed = 15 speed_roofing = =speed_topbottom * 1/3 diff --git a/resources/quality/ultimaker_s8/um_s8_aa_plus_0.4_pla_0.15mm.inst.cfg b/resources/quality/ultimaker_s8/um_s8_aa_plus_0.4_pla_0.15mm.inst.cfg index a63f0371b4..4647d9effe 100644 --- a/resources/quality/ultimaker_s8/um_s8_aa_plus_0.4_pla_0.15mm.inst.cfg +++ b/resources/quality/ultimaker_s8/um_s8_aa_plus_0.4_pla_0.15mm.inst.cfg @@ -14,7 +14,7 @@ weight = -1 [values] cool_min_temperature = =material_print_temperature - 20 hole_xy_offset = 0.1 -inset_direction = inside-out +inset_direction = inside_out material_final_print_temperature = =material_print_temperature - 15 material_initial_print_temperature = =material_print_temperature - 15 retraction_prime_speed = =retraction_speed diff --git a/resources/quality/ultimaker_s8/um_s8_aa_plus_0.4_pla_0.1mm.inst.cfg b/resources/quality/ultimaker_s8/um_s8_aa_plus_0.4_pla_0.1mm.inst.cfg index b9ed1a649a..cef87858d3 100644 --- a/resources/quality/ultimaker_s8/um_s8_aa_plus_0.4_pla_0.1mm.inst.cfg +++ b/resources/quality/ultimaker_s8/um_s8_aa_plus_0.4_pla_0.1mm.inst.cfg @@ -14,7 +14,7 @@ weight = 0 [values] cool_min_temperature = =material_print_temperature - 20 hole_xy_offset = 0.1 -inset_direction = inside-out +inset_direction = inside_out material_final_print_temperature = =material_print_temperature - 15 material_initial_print_temperature = =material_print_temperature - 15 retraction_prime_speed = =retraction_speed diff --git a/resources/quality/ultimaker_s8/um_s8_aa_plus_0.4_pla_0.2mm.inst.cfg b/resources/quality/ultimaker_s8/um_s8_aa_plus_0.4_pla_0.2mm.inst.cfg index 8ab383a08d..70ee3c42f6 100644 --- a/resources/quality/ultimaker_s8/um_s8_aa_plus_0.4_pla_0.2mm.inst.cfg +++ b/resources/quality/ultimaker_s8/um_s8_aa_plus_0.4_pla_0.2mm.inst.cfg @@ -14,7 +14,7 @@ weight = -2 [values] cool_min_temperature = =material_print_temperature - 20 hole_xy_offset = 0.1 -inset_direction = inside-out +inset_direction = inside_out material_final_print_temperature = =material_print_temperature - 15 material_initial_print_temperature = =material_print_temperature - 15 retraction_prime_speed = =retraction_speed diff --git a/resources/quality/ultimaker_s8/um_s8_aa_plus_0.4_tough-pla_0.15mm.inst.cfg b/resources/quality/ultimaker_s8/um_s8_aa_plus_0.4_tough-pla_0.15mm.inst.cfg index 2f48c95b7b..25557fa70b 100644 --- a/resources/quality/ultimaker_s8/um_s8_aa_plus_0.4_tough-pla_0.15mm.inst.cfg +++ b/resources/quality/ultimaker_s8/um_s8_aa_plus_0.4_tough-pla_0.15mm.inst.cfg @@ -14,7 +14,7 @@ weight = -1 [values] cool_min_temperature = =material_print_temperature - 20 hole_xy_offset = 0.1 -inset_direction = inside-out +inset_direction = inside_out retraction_prime_speed = =retraction_speed retraction_speed = 25 speed_roofing = =speed_topbottom * 1/3 diff --git a/resources/quality/ultimaker_s8/um_s8_aa_plus_0.4_tough-pla_0.1mm.inst.cfg b/resources/quality/ultimaker_s8/um_s8_aa_plus_0.4_tough-pla_0.1mm.inst.cfg index d32f2466ea..b30f18f3f6 100644 --- a/resources/quality/ultimaker_s8/um_s8_aa_plus_0.4_tough-pla_0.1mm.inst.cfg +++ b/resources/quality/ultimaker_s8/um_s8_aa_plus_0.4_tough-pla_0.1mm.inst.cfg @@ -14,7 +14,7 @@ weight = 0 [values] cool_min_temperature = =material_print_temperature - 20 hole_xy_offset = 0.1 -inset_direction = inside-out +inset_direction = inside_out retraction_prime_speed = =retraction_speed speed_roofing = =speed_topbottom * 1/3 speed_wall_x = =speed_wall diff --git a/resources/quality/ultimaker_s8/um_s8_aa_plus_0.4_tough-pla_0.2mm.inst.cfg b/resources/quality/ultimaker_s8/um_s8_aa_plus_0.4_tough-pla_0.2mm.inst.cfg index a7eebb69be..7b07575caf 100644 --- a/resources/quality/ultimaker_s8/um_s8_aa_plus_0.4_tough-pla_0.2mm.inst.cfg +++ b/resources/quality/ultimaker_s8/um_s8_aa_plus_0.4_tough-pla_0.2mm.inst.cfg @@ -14,7 +14,7 @@ weight = -2 [values] cool_min_temperature = =material_print_temperature - 20 hole_xy_offset = 0.1 -inset_direction = inside-out +inset_direction = inside_out retraction_prime_speed = =retraction_speed speed_roofing = =speed_topbottom * 1/3 speed_wall_x = =speed_wall