From a0a353e33c337b1aa36c7b6b1d94ed6e8527f138 Mon Sep 17 00:00:00 2001 From: fieldOfView Date: Sun, 1 Mar 2020 16:00:02 +0100 Subject: [PATCH 001/116] Add option to set pause method gcode command Contributes to #7198 --- .../scripts/PauseAtHeight.py | 20 +++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/plugins/PostProcessingPlugin/scripts/PauseAtHeight.py b/plugins/PostProcessingPlugin/scripts/PauseAtHeight.py index 17b4de88dd..8aa1fa46c5 100644 --- a/plugins/PostProcessingPlugin/scripts/PauseAtHeight.py +++ b/plugins/PostProcessingPlugin/scripts/PauseAtHeight.py @@ -25,7 +25,7 @@ class PauseAtHeight(Script): "label": "Pause at", "description": "Whether to pause at a certain height or at a certain layer.", "type": "enum", - "options": {"height": "Height", "layer_no": "Layer No."}, + "options": {"height": "Height", "layer_no": "Layer Number"}, "default_value": "height" }, "pause_height": @@ -49,6 +49,14 @@ class PauseAtHeight(Script): "minimum_value_warning": "1", "enabled": "pause_at == 'layer_no'" }, + "pause_method": + { + "label": "Method", + "description": "The method or gcode command to use for pausing.", + "type": "enum", + "options": {"marlin": "Marlin (M0)", "bq": "BQ (M25)", "reprap": "RepRap (M226)", "repetier": "Repetier (@pause)"}, + "default_value": "marlin" + }, "head_park_x": { "label": "Park Print Head X", @@ -155,6 +163,14 @@ class PauseAtHeight(Script): initial_layer_height = Application.getInstance().getGlobalContainerStack().getProperty("layer_height_0", "value") display_text = self.getSettingValueByKey("display_text") + pause_method = self.getSettingValueByKey("pause_method") + pause_command = { + "marlin": self.putValue(M = 0), + "bq": self.putValue(M = 25), + "reprap": self.putValue(M = 226), + "repetier": self.putValue("@pause") + }[pause_method] + is_griffin = False # T = ExtruderManager.getInstance().getActiveExtruderStack().getProperty("material_print_temperature", "value") @@ -308,7 +324,7 @@ class PauseAtHeight(Script): prepend_gcode += "M117 " + display_text + "\n" # Wait till the user continues printing - prepend_gcode += self.putValue(M = 0) + " ; Do the actual pause\n" + prepend_gcode += pause_command + " ; Do the actual pause\n" if not is_griffin: if control_temperatures: From bf7d5661115e5ac496322da4d13176eb0f3a071b Mon Sep 17 00:00:00 2001 From: fieldOfView Date: Sun, 1 Mar 2020 16:01:20 +0100 Subject: [PATCH 002/116] Remove flavor-specific pause scripts --- .../scripts/BQ_PauseAtHeight.py | 48 ----- .../PauseAtHeightRepRapFirmwareDuet.py | 51 ----- .../scripts/PauseAtHeightforRepetier.py | 178 ------------------ 3 files changed, 277 deletions(-) delete mode 100644 plugins/PostProcessingPlugin/scripts/BQ_PauseAtHeight.py delete mode 100644 plugins/PostProcessingPlugin/scripts/PauseAtHeightRepRapFirmwareDuet.py delete mode 100644 plugins/PostProcessingPlugin/scripts/PauseAtHeightforRepetier.py diff --git a/plugins/PostProcessingPlugin/scripts/BQ_PauseAtHeight.py b/plugins/PostProcessingPlugin/scripts/BQ_PauseAtHeight.py deleted file mode 100644 index fb59378206..0000000000 --- a/plugins/PostProcessingPlugin/scripts/BQ_PauseAtHeight.py +++ /dev/null @@ -1,48 +0,0 @@ -from ..Script import Script -class BQ_PauseAtHeight(Script): - def __init__(self): - super().__init__() - - def getSettingDataString(self): - return """{ - "name":"Pause at height (BQ Printers)", - "key": "BQ_PauseAtHeight", - "metadata":{}, - "version": 2, - "settings": - { - "pause_height": - { - "label": "Pause height", - "description": "At what height should the pause occur", - "unit": "mm", - "type": "float", - "default_value": 5.0 - } - } - }""" - - def execute(self, data): - x = 0. - y = 0. - current_z = 0. - pause_z = self.getSettingValueByKey("pause_height") - for layer in data: - lines = layer.split("\n") - for line in lines: - if self.getValue(line, 'G') == 1 or self.getValue(line, 'G') == 0: - current_z = self.getValue(line, 'Z') - if current_z != None: - if current_z >= pause_z: - prepend_gcode = ";TYPE:CUSTOM\n" - prepend_gcode += "; -- Pause at height (%.2f mm) --\n" % pause_z - - # Insert Pause gcode - prepend_gcode += "M25 ; Pauses the print and waits for the user to resume it\n" - - index = data.index(layer) - layer = prepend_gcode + layer - data[index] = layer # Override the data of this layer with the modified data - return data - break - return data diff --git a/plugins/PostProcessingPlugin/scripts/PauseAtHeightRepRapFirmwareDuet.py b/plugins/PostProcessingPlugin/scripts/PauseAtHeightRepRapFirmwareDuet.py deleted file mode 100644 index 79e5d8c62d..0000000000 --- a/plugins/PostProcessingPlugin/scripts/PauseAtHeightRepRapFirmwareDuet.py +++ /dev/null @@ -1,51 +0,0 @@ -from ..Script import Script - -class PauseAtHeightRepRapFirmwareDuet(Script): - - def getSettingDataString(self): - return """{ - "name": "Pause at height for RepRapFirmware DuetWifi / Duet Ethernet / Duet Maestro", - "key": "PauseAtHeightRepRapFirmwareDuet", - "metadata": {}, - "version": 2, - "settings": - { - "pause_height": - { - "label": "Pause height", - "description": "At what height should the pause occur", - "unit": "mm", - "type": "float", - "default_value": 5.0 - } - } - }""" - - def execute(self, data): - current_z = 0. - pause_z = self.getSettingValueByKey("pause_height") - - layers_started = False - for layer_number, layer in enumerate(data): - lines = layer.split("\n") - for line in lines: - if ";LAYER:0" in line: - layers_started = True - continue - - if not layers_started: - continue - - if self.getValue(line, 'G') == 1 or self.getValue(line, 'G') == 0: - current_z = self.getValue(line, 'Z') - if current_z != None: - if current_z >= pause_z: - prepend_gcode = ";TYPE:CUSTOM\n" - prepend_gcode += "; -- Pause at height (%.2f mm) --\n" % pause_z - prepend_gcode += self.putValue(M = 226) + "\n" - layer = prepend_gcode + layer - - data[layer_number] = layer # Override the data of this layer with the modified data - return data - break - return data diff --git a/plugins/PostProcessingPlugin/scripts/PauseAtHeightforRepetier.py b/plugins/PostProcessingPlugin/scripts/PauseAtHeightforRepetier.py deleted file mode 100644 index 0353574289..0000000000 --- a/plugins/PostProcessingPlugin/scripts/PauseAtHeightforRepetier.py +++ /dev/null @@ -1,178 +0,0 @@ -from UM.Logger import Logger -from ..Script import Script -class PauseAtHeightforRepetier(Script): - def __init__(self): - super().__init__() - - def getSettingDataString(self): - return """{ - "name":"Pause at height for repetier", - "key": "PauseAtHeightforRepetier", - "metadata": {}, - "version": 2, - "settings": - { - "pause_height": - { - "label": "Pause height", - "description": "At what height should the pause occur", - "unit": "mm", - "type": "float", - "default_value": 5.0 - }, - "head_park_x": - { - "label": "Park print head X", - "description": "What x location does the head move to when pausing.", - "unit": "mm", - "type": "float", - "default_value": 5.0 - }, - "head_park_y": - { - "label": "Park print head Y", - "description": "What y location does the head move to when pausing.", - "unit": "mm", - "type": "float", - "default_value": 5.0 - }, - "head_move_Z": - { - "label": "Head move Z", - "description": "The Hieght of Z-axis retraction before parking.", - "unit": "mm", - "type": "float", - "default_value": 15.0 - }, - "retraction_amount": - { - "label": "Retraction", - "description": "How much fillament must be retracted at pause.", - "unit": "mm", - "type": "float", - "default_value": 5.0 - }, - "extrude_amount": - { - "label": "Extrude amount", - "description": "How much filament should be extruded after pause. This is needed when doing a material change on Ultimaker2's to compensate for the retraction after the change. In that case 128+ is recommended.", - "unit": "mm", - "type": "float", - "default_value": 90.0 - }, - "redo_layers": - { - "label": "Redo layers", - "description": "Redo a number of previous layers after a pause to increases adhesion.", - "unit": "layers", - "type": "int", - "default_value": 0 - } - } - }""" - - def execute(self, data): - x = 0. - y = 0. - current_extrusion_f = 0 - current_z = 0. - pause_z = self.getSettingValueByKey("pause_height") - retraction_amount = self.getSettingValueByKey("retraction_amount") - extrude_amount = self.getSettingValueByKey("extrude_amount") - park_x = self.getSettingValueByKey("head_park_x") - park_y = self.getSettingValueByKey("head_park_y") - move_Z = self.getSettingValueByKey("head_move_Z") - layers_started = False - redo_layers = self.getSettingValueByKey("redo_layers") - for layer in data: - lines = layer.split("\n") - for line in lines: - if ";LAYER:0" in line: - layers_started = True - continue - - if not layers_started: - continue - - if self.getValue(line, 'G') == 1 or self.getValue(line, 'G') == 0: - current_z = self.getValue(line, 'Z') - if self.getValue(line, 'F') is not None and self.getValue(line, 'E') is not None: - current_extrusion_f = self.getValue(line, 'F', current_extrusion_f) - x = self.getValue(line, 'X', x) - y = self.getValue(line, 'Y', y) - if current_z is not None: - if current_z >= pause_z: - - index = data.index(layer) - prevLayer = data[index-1] - prevLines = prevLayer.split("\n") - current_e = 0. - for prevLine in reversed(prevLines): - current_e = self.getValue(prevLine, 'E', -1) - if current_e >= 0: - break - - prepend_gcode = ";TYPE:CUSTOM\n" - prepend_gcode += ";added code by post processing\n" - prepend_gcode += ";script: PauseAtHeightforRepetier.py\n" - prepend_gcode += ";current z: %f \n" % (current_z) - prepend_gcode += ";current X: %f \n" % (x) - prepend_gcode += ";current Y: %f \n" % (y) - - #Retraction - prepend_gcode += "M83\n" - if retraction_amount != 0: - prepend_gcode += "G1 E-%f F6000\n" % (retraction_amount) - - #Move the head away - prepend_gcode += "G1 Z%f F300\n" % (1 + current_z) - prepend_gcode += "G1 X%f Y%f F9000\n" % (park_x, park_y) - if current_z < move_Z: - prepend_gcode += "G1 Z%f F300\n" % (current_z + move_Z) - - #Disable the E steppers - prepend_gcode += "M84 E0\n" - #Wait till the user continues printing - prepend_gcode += "@pause now change filament and press continue printing ;Do the actual pause\n" - - #Push the filament back, - if retraction_amount != 0: - prepend_gcode += "G1 E%f F6000\n" % (retraction_amount) - - # Optionally extrude material - if extrude_amount != 0: - prepend_gcode += "G1 E%f F200\n" % (extrude_amount) - prepend_gcode += "@info wait for cleaning nozzle from previous filament\n" - prepend_gcode += "@pause remove the waste filament from parking area and press continue printing\n" - - # and retract again, the properly primes the nozzle when changing filament. - if retraction_amount != 0: - prepend_gcode += "G1 E-%f F6000\n" % (retraction_amount) - - #Move the head back - prepend_gcode += "G1 Z%f F300\n" % (1 + current_z) - prepend_gcode +="G1 X%f Y%f F9000\n" % (x, y) - if retraction_amount != 0: - prepend_gcode +="G1 E%f F6000\n" % (retraction_amount) - - if current_extrusion_f != 0: - prepend_gcode += self.putValue(G=1, F=current_extrusion_f) + " ; restore extrusion feedrate\n" - else: - Logger.log("w", "No previous feedrate found in gcode, feedrate for next layer(s) might be incorrect") - - prepend_gcode +="M82\n" - - # reset extrude value to pre pause value - prepend_gcode +="G92 E%f\n" % (current_e) - - layer = prepend_gcode + layer - - # include a number of previous layers - for i in range(1, redo_layers + 1): - prevLayer = data[index-i] - layer = prevLayer + layer - - data[index] = layer #Override the data of this layer with the modified data - return data - break - return data From a7e23ba99e67b8f6e10c2edee88efcfe01257baa Mon Sep 17 00:00:00 2001 From: fieldOfView Date: Fri, 20 Mar 2020 10:54:43 +0100 Subject: [PATCH 003/116] Use an appropriate default for the pause method... based on the machine gcode flavor and machine name --- .../scripts/PauseAtHeight.py | 42 ++++++++++++++++++- 1 file changed, 41 insertions(+), 1 deletion(-) diff --git a/plugins/PostProcessingPlugin/scripts/PauseAtHeight.py b/plugins/PostProcessingPlugin/scripts/PauseAtHeight.py index 8aa1fa46c5..e3301ff5de 100644 --- a/plugins/PostProcessingPlugin/scripts/PauseAtHeight.py +++ b/plugins/PostProcessingPlugin/scripts/PauseAtHeight.py @@ -55,7 +55,8 @@ class PauseAtHeight(Script): "description": "The method or gcode command to use for pausing.", "type": "enum", "options": {"marlin": "Marlin (M0)", "bq": "BQ (M25)", "reprap": "RepRap (M226)", "repetier": "Repetier (@pause)"}, - "default_value": "marlin" + "default_value": "marlin", + "value": "\\\"reprap\\\" if machine_gcode_flavor==\\\"RepRap (RepRap)\\\" else \\\"repetier\\\" if machine_gcode_flavor==\\\"Repetier\\\" else \\\"bq\\\" if \\\"BQ\\\" in machine_name else \\\"marlin\\\"" }, "head_park_x": { @@ -127,10 +128,49 @@ class PauseAtHeight(Script): "description": "Text that should appear on the display while paused. If left empty, there will not be any message.", "type": "str", "default_value": "" + }, + "machine_name": + { + "label": "Machine Type", + "description": "The name of your 3D printer model. This setting is controlled by the script and will not be visible.", + "default_value": "Unknown", + "type": "str", + "enabled": false + }, + "machine_gcode_flavor": + { + "label": "G-code flavor", + "description": "The type of g-code to be generated. This setting is controlled by the script and will not be visible.", + "type": "enum", + "options": + { + "RepRap (Marlin/Sprinter)": "Marlin", + "RepRap (Volumetric)": "Marlin (Volumetric)", + "RepRap (RepRap)": "RepRap", + "UltiGCode": "Ultimaker 2", + "Griffin": "Griffin", + "Makerbot": "Makerbot", + "BFB": "Bits from Bytes", + "MACH3": "Mach3", + "Repetier": "Repetier" + }, + "default_value": "RepRap (Marlin/Sprinter)", + "enabled": false } } }""" + ## Copy machine name and gcode flavor from global stack so we can use their value in the script stack + def initialize(self) -> None: + super().initialize() + + global_container_stack = Application.getInstance().getGlobalContainerStack() + if global_container_stack is None or self._instance is None: + return + + for key in ["machine_name", "machine_gcode_flavor"]: + self._instance.setProperty(key, "value", global_container_stack.getProperty(key, "value")) + ## Get the X and Y values for a layer (will be used to get X and Y of the # layer after the pause). def getNextXY(self, layer: str) -> Tuple[float, float]: From 87633e7818a8c483ab3a28e8d0d15fc819beb171 Mon Sep 17 00:00:00 2001 From: fieldOfView Date: Fri, 20 Mar 2020 12:56:07 +0100 Subject: [PATCH 004/116] Make Griffin a selectable method instead of snooping it from gcode --- .../scripts/PauseAtHeight.py | 34 +++++++++++-------- 1 file changed, 19 insertions(+), 15 deletions(-) diff --git a/plugins/PostProcessingPlugin/scripts/PauseAtHeight.py b/plugins/PostProcessingPlugin/scripts/PauseAtHeight.py index e3301ff5de..068b5cccbe 100644 --- a/plugins/PostProcessingPlugin/scripts/PauseAtHeight.py +++ b/plugins/PostProcessingPlugin/scripts/PauseAtHeight.py @@ -54,9 +54,9 @@ class PauseAtHeight(Script): "label": "Method", "description": "The method or gcode command to use for pausing.", "type": "enum", - "options": {"marlin": "Marlin (M0)", "bq": "BQ (M25)", "reprap": "RepRap (M226)", "repetier": "Repetier (@pause)"}, + "options": {"marlin": "Marlin (M0)", "griffin": "Griffin (M0, firmware retract)", "bq": "BQ (M25)", "reprap": "RepRap (M226)", "repetier": "Repetier (@pause)"}, "default_value": "marlin", - "value": "\\\"reprap\\\" if machine_gcode_flavor==\\\"RepRap (RepRap)\\\" else \\\"repetier\\\" if machine_gcode_flavor==\\\"Repetier\\\" else \\\"bq\\\" if \\\"BQ\\\" in machine_name else \\\"marlin\\\"" + "value": "\\\"griffin\\\" if machine_gcode_flavor==\\\"Griffin\\\" else \\\"reprap\\\" if machine_gcode_flavor==\\\"RepRap (RepRap)\\\" else \\\"repetier\\\" if machine_gcode_flavor==\\\"Repetier\\\" else \\\"bq\\\" if \\\"BQ\\\" in machine_name else \\\"marlin\\\"" }, "head_park_x": { @@ -64,7 +64,8 @@ class PauseAtHeight(Script): "description": "What X location does the head move to when pausing.", "unit": "mm", "type": "float", - "default_value": 190 + "default_value": 190, + "enabled": "pause_method != \\\"griffin\\\"" }, "head_park_y": { @@ -72,7 +73,8 @@ class PauseAtHeight(Script): "description": "What Y location does the head move to when pausing.", "unit": "mm", "type": "float", - "default_value": 190 + "default_value": 190, + "enabled": "pause_method != \\\"griffin\\\"" }, "retraction_amount": { @@ -80,7 +82,8 @@ class PauseAtHeight(Script): "description": "How much filament must be retracted at pause.", "unit": "mm", "type": "float", - "default_value": 0 + "default_value": 0, + "enabled": "pause_method != \\\"griffin\\\"" }, "retraction_speed": { @@ -88,7 +91,8 @@ class PauseAtHeight(Script): "description": "How fast to retract the filament.", "unit": "mm/s", "type": "float", - "default_value": 25 + "default_value": 25, + "enabled": "pause_method != \\\"griffin\\\"" }, "extrude_amount": { @@ -96,7 +100,8 @@ class PauseAtHeight(Script): "description": "How much filament should be extruded after pause. This is needed when doing a material change on Ultimaker2's to compensate for the retraction after the change. In that case 128+ is recommended.", "unit": "mm", "type": "float", - "default_value": 0 + "default_value": 0, + "enabled": "pause_method != \\\"griffin\\\"" }, "extrude_speed": { @@ -104,7 +109,8 @@ class PauseAtHeight(Script): "description": "How fast to extrude the material after pause.", "unit": "mm/s", "type": "float", - "default_value": 3.3333 + "default_value": 3.3333, + "enabled": "pause_method != \\\"griffin\\\"" }, "redo_layers": { @@ -120,7 +126,8 @@ class PauseAtHeight(Script): "description": "Change the temperature during the pause.", "unit": "°C", "type": "int", - "default_value": 0 + "default_value": 0, + "enabled": "pause_method != \\\"griffin\\\"" }, "display_text": { @@ -206,13 +213,12 @@ class PauseAtHeight(Script): pause_method = self.getSettingValueByKey("pause_method") pause_command = { "marlin": self.putValue(M = 0), + "griffin": self.putValue(M = 0), "bq": self.putValue(M = 25), "reprap": self.putValue(M = 226), "repetier": self.putValue("@pause") }[pause_method] - is_griffin = False - # T = ExtruderManager.getInstance().getActiveExtruderStack().getProperty("material_print_temperature", "value") # use offset to calculate the current height: = - @@ -232,8 +238,6 @@ class PauseAtHeight(Script): # Scroll each line of instruction for each layer in the G-code for line in lines: - if ";FLAVOR:Griffin" in line: - is_griffin = True # Fist positive layer reached if ";LAYER:0" in line: layers_started = True @@ -336,7 +340,7 @@ class PauseAtHeight(Script): else: prepend_gcode += ";current layer: {layer}\n".format(layer = current_layer) - if not is_griffin: + if pause_method != "griffin": # Retraction prepend_gcode += self.putValue(M = 83) + " ; switch to relative E values for any needed retraction\n" if retraction_amount != 0: @@ -366,7 +370,7 @@ class PauseAtHeight(Script): # Wait till the user continues printing prepend_gcode += pause_command + " ; Do the actual pause\n" - if not is_griffin: + if pause_method != "griffin": if control_temperatures: # Set extruder resume temperature prepend_gcode += self.putValue(M = 109, S = int(target_temperature.get(current_t, 0))) + " ; resume temperature\n" From c87ee61e9c34a54979877f3aae41841c0f131f14 Mon Sep 17 00:00:00 2001 From: fieldOfView Date: Fri, 20 Mar 2020 13:35:48 +0100 Subject: [PATCH 005/116] Add repetier-specific parking if repetier flavor is selected --- .../scripts/PauseAtHeight.py | 69 +++++++++++++++++-- 1 file changed, 63 insertions(+), 6 deletions(-) diff --git a/plugins/PostProcessingPlugin/scripts/PauseAtHeight.py b/plugins/PostProcessingPlugin/scripts/PauseAtHeight.py index 068b5cccbe..c049943bba 100644 --- a/plugins/PostProcessingPlugin/scripts/PauseAtHeight.py +++ b/plugins/PostProcessingPlugin/scripts/PauseAtHeight.py @@ -76,6 +76,15 @@ class PauseAtHeight(Script): "default_value": 190, "enabled": "pause_method != \\\"griffin\\\"" }, + "head_move_z": + { + "label": "Head move Z", + "description": "The Height of Z-axis retraction before parking.", + "unit": "mm", + "type": "float", + "default_value": 15.0, + "enabled": "pause_method == \\\"repetier\\\"" + }, "retraction_amount": { "label": "Retraction", @@ -92,7 +101,7 @@ class PauseAtHeight(Script): "unit": "mm/s", "type": "float", "default_value": 25, - "enabled": "pause_method != \\\"griffin\\\"" + "enabled": "pause_method not in [\\\"griffin\\\", \\\"repetier\\\"]" }, "extrude_amount": { @@ -110,7 +119,7 @@ class PauseAtHeight(Script): "unit": "mm/s", "type": "float", "default_value": 3.3333, - "enabled": "pause_method != \\\"griffin\\\"" + "enabled": "pause_method not in [\\\"griffin\\\", \\\"repetier\\\"]" }, "redo_layers": { @@ -134,7 +143,8 @@ class PauseAtHeight(Script): "label": "Display Text", "description": "Text that should appear on the display while paused. If left empty, there will not be any message.", "type": "str", - "default_value": "" + "default_value": "", + "enabled": "pause_method != \\\"repetier\\\"" }, "machine_name": { @@ -202,6 +212,7 @@ class PauseAtHeight(Script): extrude_speed = self.getSettingValueByKey("extrude_speed") park_x = self.getSettingValueByKey("head_park_x") park_y = self.getSettingValueByKey("head_park_y") + move_z = self.getSettingValueByKey("head_move_z") layers_started = False redo_layers = self.getSettingValueByKey("redo_layers") standby_temperature = self.getSettingValueByKey("standby_temperature") @@ -216,7 +227,7 @@ class PauseAtHeight(Script): "griffin": self.putValue(M = 0), "bq": self.putValue(M = 25), "reprap": self.putValue(M = 226), - "repetier": self.putValue("@pause") + "repetier": self.putValue("@pause now change filament and press continue printing") }[pause_method] # T = ExtruderManager.getInstance().getActiveExtruderStack().getProperty("material_print_temperature", "value") @@ -340,7 +351,22 @@ class PauseAtHeight(Script): else: prepend_gcode += ";current layer: {layer}\n".format(layer = current_layer) - if pause_method != "griffin": + if pause_method == "repetier": + #Retraction + prepend_gcode += self.putValue(M = 83) + " ; switch to relative E values for any needed retraction\n" + if retraction_amount != 0: + prepend_gcode += self.putValue(G = 1, E = retraction_amount, F = 6000) + "\n" + + #Move the head away + prepend_gcode += self.putValue(G = 1, Z = current_z + 1, F = 300) + " ; move up a millimeter to get out of the way\n" + prepend_gcode += self.putValue(G = 1, X = park_x, Y = park_y, F = 9000) + "\n" + if current_z < move_z: + prepend_gcode += self.putValue(G = 1, Z = current_z + move_z, F = 300) + "\n" + + #Disable the E steppers + prepend_gcode += self.putValue(M = 84, E = 0) + "\n" + + elif pause_method != "griffin": # Retraction prepend_gcode += self.putValue(M = 83) + " ; switch to relative E values for any needed retraction\n" if retraction_amount != 0: @@ -370,7 +396,38 @@ class PauseAtHeight(Script): # Wait till the user continues printing prepend_gcode += pause_command + " ; Do the actual pause\n" - if pause_method != "griffin": + if pause_method == "repetier": + #Push the filament back, + if retraction_amount != 0: + prepend_gcode += self.putValue(G = 1, E = retraction_amount, F = 6000) + "\n" + + # Optionally extrude material + if extrude_amount != 0: + prepend_gcode += self.putValue(G = 1, E = extrude_amount, F = 200) + "\n" + prepend_gcode += self.putValue("@info wait for cleaning nozzle from previous filament") + "\n" + prepend_gcode += self.putValue("@pause remove the waste filament from parking area and press continue printing") + "\n" + + # and retract again, the properly primes the nozzle when changing filament. + if retraction_amount != 0: + prepend_gcode += self.putValue(G = 1, E = -retraction_amount, F = 6000) + "\n" + + #Move the head back + prepend_gcode += self.putValue(G = 1, Z = current_z + 1, F = 300) + "\n" + prepend_gcode += self.putValue(G = 1, X = x, Y = y, F = 9000) + "\n" + if retraction_amount != 0: + prepend_gcode += self.putValue(G = 1, E = retraction_amount, F = 6000) + "\n" + + if current_extrusion_f != 0: + prepend_gcode += self.putValue(G = 1, F = current_extrusion_f) + " ; restore extrusion feedrate\n" + else: + Logger.log("w", "No previous feedrate found in gcode, feedrate for next layer(s) might be incorrect") + + prepend_gcode += self.putValue(M = 82) + "\n" + + # reset extrude value to pre pause value + prepend_gcode += self.putValue(G = 92, E = current_e) + "\n" + + elif pause_method != "griffin": if control_temperatures: # Set extruder resume temperature prepend_gcode += self.putValue(M = 109, S = int(target_temperature.get(current_t, 0))) + " ; resume temperature\n" From fa613c35ebcb5863e8bcd44c69a7c9586a1b0760 Mon Sep 17 00:00:00 2001 From: fieldOfView Date: Fri, 20 Mar 2020 13:39:00 +0100 Subject: [PATCH 006/116] Hide unused temperature for Repetier --- plugins/PostProcessingPlugin/scripts/PauseAtHeight.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/PostProcessingPlugin/scripts/PauseAtHeight.py b/plugins/PostProcessingPlugin/scripts/PauseAtHeight.py index c049943bba..8420b2a6cf 100644 --- a/plugins/PostProcessingPlugin/scripts/PauseAtHeight.py +++ b/plugins/PostProcessingPlugin/scripts/PauseAtHeight.py @@ -136,7 +136,7 @@ class PauseAtHeight(Script): "unit": "°C", "type": "int", "default_value": 0, - "enabled": "pause_method != \\\"griffin\\\"" + "enabled": "pause_method not in [\\\"griffin\\\", \\\"repetier\\\"]" }, "display_text": { @@ -405,7 +405,7 @@ class PauseAtHeight(Script): if extrude_amount != 0: prepend_gcode += self.putValue(G = 1, E = extrude_amount, F = 200) + "\n" prepend_gcode += self.putValue("@info wait for cleaning nozzle from previous filament") + "\n" - prepend_gcode += self.putValue("@pause remove the waste filament from parking area and press continue printing") + "\n" + prepend_gcode += self.putValue("@pause remove the waste filament from parking area and press continue printing") + "\n" # and retract again, the properly primes the nozzle when changing filament. if retraction_amount != 0: From 16bd9f4f1d0dc0e5c24d6abbe3007cf5da3fc78c Mon Sep 17 00:00:00 2001 From: Deltacomb Date: Thu, 26 Mar 2020 00:28:31 +0100 Subject: [PATCH 007/116] New Deltacomb Models and updates --- resources/definitions/deltacomb.def.json | 67 ------------- resources/definitions/deltacomb_base.def.json | 88 ++++++++++++++++++ resources/definitions/deltacomb_dc20.def.json | 26 ++++++ .../definitions/deltacomb_dc20dual.def.json | 24 +++++ .../definitions/deltacomb_dc20flux.def.json | 28 ++++++ resources/definitions/deltacomb_dc21.def.json | 26 ++++++ .../definitions/deltacomb_dc21dual.def.json | 24 +++++ .../definitions/deltacomb_dc21flux.def.json | 29 ++++++ resources/definitions/deltacomb_dc30.def.json | 26 ++++++ .../deltacomb_base_extruder_0.def.json | 20 ++++ .../deltacomb_base_extruder_1.def.json | 20 ++++ .../deltacomb_base_extruder_2.def.json | 20 ++++ .../deltacomb_base_extruder_3.def.json | 20 ++++ .../deltacomb_dc20dual_extruder_0.def.json | 20 ++++ .../deltacomb_dc20dual_extruder_1.def.json | 20 ++++ .../deltacomb_dc20flux_extruder_0.def.json | 21 +++++ .../deltacomb_dc20flux_extruder_1.def.json | 22 +++++ .../deltacomb_dc20flux_extruder_2.def.json | 22 +++++ .../deltacomb_dc20flux_extruder_3.def.json | 22 +++++ .../extruders/deltacomb_extruder_0.def.json | 17 ---- .../extruders/deltacomb_extruder_1.def.json | 17 ---- resources/meshes/deltacomb.stl | Bin 946084 -> 0 bytes resources/meshes/deltacomb_dc20.stl | Bin 0 -> 323084 bytes resources/meshes/deltacomb_dc30.stl | Bin 0 -> 303384 bytes .../ABS/deltacomb_DBE0.25_ABS_A.inst.cfg | 22 +++++ .../ABS/deltacomb_DBE0.25_ABS_B.inst.cfg | 22 +++++ .../ABS/deltacomb_DBE0.25_ABS_C.inst.cfg | 22 +++++ .../ABS/deltacomb_DBE0.40_ABS_A.inst.cfg | 21 +++++ .../ABS/deltacomb_DBE0.40_ABS_B.inst.cfg | 21 +++++ .../ABS/deltacomb_DBE0.40_ABS_C.inst.cfg | 21 +++++ .../ABS/deltacomb_DBE0.40_ABS_D.inst.cfg | 21 +++++ .../ABS/deltacomb_DBE0.40_ABS_E.inst.cfg | 21 +++++ .../ABS/deltacomb_DBE0.60_ABS_C.inst.cfg | 21 +++++ .../ABS/deltacomb_DBE0.60_ABS_D.inst.cfg | 21 +++++ .../ABS/deltacomb_DBE0.60_ABS_E.inst.cfg | 22 +++++ .../ABS/deltacomb_DBE0.60_ABS_F.inst.cfg | 22 +++++ .../ABS/deltacomb_FBE0.25_ABS_A.inst.cfg | 22 +++++ .../ABS/deltacomb_FBE0.25_ABS_B.inst.cfg | 22 +++++ .../ABS/deltacomb_FBE0.25_ABS_C.inst.cfg | 22 +++++ .../ABS/deltacomb_FBE0.40_ABS_A.inst.cfg | 21 +++++ .../ABS/deltacomb_FBE0.40_ABS_B.inst.cfg | 21 +++++ .../ABS/deltacomb_FBE0.40_ABS_C.inst.cfg | 21 +++++ .../ABS/deltacomb_FBE0.40_ABS_D.inst.cfg | 21 +++++ .../ABS/deltacomb_FBE0.40_ABS_E.inst.cfg | 21 +++++ .../ABS/deltacomb_FBE0.60_ABS_C.inst.cfg | 21 +++++ .../ABS/deltacomb_FBE0.60_ABS_D.inst.cfg | 21 +++++ .../ABS/deltacomb_FBE0.60_ABS_E.inst.cfg | 22 +++++ .../ABS/deltacomb_FBE0.60_ABS_F.inst.cfg | 22 +++++ .../ABS/deltacomb_VDBE0.80_ABS_D.inst.cfg | 22 +++++ .../ABS/deltacomb_VDBE0.80_ABS_E.inst.cfg | 22 +++++ .../ABS/deltacomb_VDBE0.80_ABS_F.inst.cfg | 22 +++++ .../ABS/deltacomb_VDBE0.80_ABS_G.inst.cfg | 22 +++++ .../ABS/deltacomb_VFBE0.80_ABS_D.inst.cfg | 22 +++++ .../ABS/deltacomb_VFBE0.80_ABS_E.inst.cfg | 22 +++++ .../ABS/deltacomb_VFBE0.80_ABS_F.inst.cfg | 22 +++++ .../ABS/deltacomb_VFBE0.80_ABS_G.inst.cfg | 22 +++++ .../PETG/deltacomb_DBE0.40_PETG_A.inst.cfg | 27 ++++++ .../PETG/deltacomb_DBE0.40_PETG_B.inst.cfg | 27 ++++++ .../PETG/deltacomb_DBE0.40_PETG_C.inst.cfg | 27 ++++++ .../PETG/deltacomb_DBE0.40_PETG_D.inst.cfg | 27 ++++++ .../PETG/deltacomb_DBE0.40_PETG_E.inst.cfg | 27 ++++++ .../PETG/deltacomb_DBE0.60_PETG_C.inst.cfg | 27 ++++++ .../PETG/deltacomb_DBE0.60_PETG_D.inst.cfg | 27 ++++++ .../PETG/deltacomb_DBE0.60_PETG_E.inst.cfg | 27 ++++++ .../PETG/deltacomb_DBE0.60_PETG_F.inst.cfg | 27 ++++++ .../PETG/deltacomb_FBE0.40_PETG_A.inst.cfg | 27 ++++++ .../PETG/deltacomb_FBE0.40_PETG_B.inst.cfg | 27 ++++++ .../PETG/deltacomb_FBE0.40_PETG_C.inst.cfg | 27 ++++++ .../PETG/deltacomb_FBE0.40_PETG_D.inst.cfg | 27 ++++++ .../PETG/deltacomb_FBE0.40_PETG_E.inst.cfg | 27 ++++++ .../PETG/deltacomb_FBE0.60_PETG_C.inst.cfg | 27 ++++++ .../PETG/deltacomb_FBE0.60_PETG_D.inst.cfg | 27 ++++++ .../PETG/deltacomb_FBE0.60_PETG_E.inst.cfg | 27 ++++++ .../PETG/deltacomb_FBE0.60_PETG_F.inst.cfg | 27 ++++++ .../PLA/deltacomb_DBE0.25_PLA_A.inst.cfg | 18 ++++ .../deltacomb_DBE0.25_PLA_B.inst.cfg} | 13 +-- .../deltacomb_DBE0.25_PLA_C.inst.cfg} | 13 +-- .../PLA/deltacomb_DBE0.40_PLA_A.inst.cfg | 18 ++++ .../PLA/deltacomb_DBE0.40_PLA_B.inst.cfg | 18 ++++ .../PLA/deltacomb_DBE0.40_PLA_C.inst.cfg | 18 ++++ .../PLA/deltacomb_DBE0.40_PLA_D.inst.cfg | 18 ++++ .../PLA/deltacomb_DBE0.40_PLA_E.inst.cfg | 18 ++++ .../PLA/deltacomb_DBE0.60_PLA_C.inst.cfg | 18 ++++ .../PLA/deltacomb_DBE0.60_PLA_D.inst.cfg | 18 ++++ .../deltacomb_DBE0.60_PLA_E.inst.cfg} | 13 +-- .../deltacomb_DBE0.60_PLA_F.inst.cfg} | 13 +-- .../PLA/deltacomb_FBE0.25_PLA_A.inst.cfg | 18 ++++ .../PLA/deltacomb_FBE0.25_PLA_B.inst.cfg | 19 ++++ .../PLA/deltacomb_FBE0.25_PLA_C.inst.cfg | 19 ++++ .../PLA/deltacomb_FBE0.40_PLA_A.inst.cfg | 18 ++++ .../PLA/deltacomb_FBE0.40_PLA_B.inst.cfg | 18 ++++ .../PLA/deltacomb_FBE0.40_PLA_C.inst.cfg | 18 ++++ .../PLA/deltacomb_FBE0.40_PLA_D.inst.cfg | 18 ++++ .../PLA/deltacomb_FBE0.40_PLA_E.inst.cfg | 18 ++++ .../PLA/deltacomb_FBE0.60_PLA_C.inst.cfg | 18 ++++ .../PLA/deltacomb_FBE0.60_PLA_D.inst.cfg | 18 ++++ .../PLA/deltacomb_FBE0.60_PLA_E.inst.cfg | 19 ++++ .../PLA/deltacomb_FBE0.60_PLA_F.inst.cfg | 19 ++++ .../PLA/deltacomb_VDBE0.80_PLA_D.inst.cfg | 19 ++++ .../PLA/deltacomb_VDBE0.80_PLA_E.inst.cfg | 19 ++++ .../PLA/deltacomb_VDBE0.80_PLA_F.inst.cfg | 19 ++++ .../PLA/deltacomb_VDBE0.80_PLA_G.inst.cfg | 19 ++++ .../PLA/deltacomb_VFBE0.80_PLA_D.inst.cfg | 19 ++++ .../PLA/deltacomb_VFBE0.80_PLA_E.inst.cfg | 19 ++++ .../PLA/deltacomb_VFBE0.80_PLA_F.inst.cfg | 19 ++++ .../PLA/deltacomb_VFBE0.80_PLA_G.inst.cfg | 19 ++++ .../deltacomb_FBE0.40_TPU_B.inst.cfg} | 15 ++- .../deltacomb_FBE0.40_TPU_C.inst.cfg} | 15 ++- .../deltacomb_FBE0.40_TPU_D.inst.cfg} | 15 ++- .../deltacomb_abs_Draft_Quality.inst.cfg | 24 ----- .../deltacomb_abs_Fast_Quality.inst.cfg | 23 ----- .../deltacomb_abs_High_Quality.inst.cfg | 23 ----- .../deltacomb_abs_Normal_Quality.inst.cfg | 23 ----- .../deltacomb_abs_Verydraft_Quality.inst.cfg | 23 ----- .../deltacomb/deltacomb_global_A.inst.cfg | 22 +++++ .../deltacomb/deltacomb_global_B.inst.cfg | 22 +++++ .../deltacomb/deltacomb_global_C.inst.cfg | 21 +++++ .../deltacomb/deltacomb_global_D.inst.cfg | 20 ++++ .../deltacomb_global_Draft_Quality.inst.cfg | 15 --- .../deltacomb/deltacomb_global_E.inst.cfg | 20 ++++ .../deltacomb/deltacomb_global_F.inst.cfg | 20 ++++ .../deltacomb_global_Fast_Quality.inst.cfg | 15 --- .../deltacomb/deltacomb_global_G.inst.cfg | 20 ++++ .../deltacomb_global_High_Quality.inst.cfg | 15 --- .../deltacomb_global_Normal_Quality.inst.cfg | 15 --- ...eltacomb_global_Verydraft_Quality.inst.cfg | 15 --- .../deltacomb_petg_Draft_Quality.inst.cfg | 25 ----- .../deltacomb_petg_Fast_Quality.inst.cfg | 25 ----- .../deltacomb_petg_High_Quality.inst.cfg | 25 ----- .../deltacomb_petg_Normal_Quality.inst.cfg | 25 ----- .../deltacomb_petg_Verydraft_Quality.inst.cfg | 25 ----- .../deltacomb_pla_Verydraft_Quality.inst.cfg | 22 ----- .../deltacomb_tpu_High_Quality.inst.cfg | 27 ------ .../deltacomb_tpu_Verydraft_Quality.inst.cfg | 27 ------ .../deltacomb/deltacomb_dc20_fbe025.inst.cfg | 12 +++ .../deltacomb/deltacomb_dc20_fbe040.inst.cfg | 12 +++ .../deltacomb/deltacomb_dc20_fbe060.inst.cfg | 12 +++ .../deltacomb/deltacomb_dc20_vfbe080.inst.cfg | 12 +++ .../deltacomb_dc20dual_dbe025.inst.cfg | 12 +++ .../deltacomb_dc20dual_dbe040.inst.cfg | 12 +++ .../deltacomb_dc20dual_dbe060.inst.cfg | 12 +++ .../deltacomb_dc20dual_vdbe080.inst.cfg | 12 +++ .../deltacomb_dc20flux_fbe025.inst.cfg | 12 +++ .../deltacomb_dc20flux_fbe040.inst.cfg | 12 +++ .../deltacomb_dc20flux_fbe060.inst.cfg | 12 +++ .../deltacomb/deltacomb_dc21_fbe025.inst.cfg | 12 +++ .../deltacomb/deltacomb_dc21_fbe040.inst.cfg | 12 +++ .../deltacomb/deltacomb_dc21_fbe060.inst.cfg | 12 +++ .../deltacomb/deltacomb_dc21_vfbe080.inst.cfg | 12 +++ .../deltacomb_dc21dual_dbe025.inst.cfg | 12 +++ .../deltacomb_dc21dual_dbe040.inst.cfg | 12 +++ .../deltacomb_dc21dual_dbe060.inst.cfg | 12 +++ .../deltacomb_dc21dual_vdbe080.inst.cfg | 12 +++ .../deltacomb_dc21flux_fbe025.inst.cfg | 12 +++ .../deltacomb_dc21flux_fbe040.inst.cfg | 12 +++ .../deltacomb_dc21flux_fbe060.inst.cfg | 12 +++ .../deltacomb/deltacomb_dc30_fbe025.inst.cfg | 12 +++ .../deltacomb/deltacomb_dc30_fbe040.inst.cfg | 12 +++ .../deltacomb/deltacomb_dc30_fbe060.inst.cfg | 12 +++ .../deltacomb/deltacomb_dc30_vfbe080.inst.cfg | 12 +++ .../deltacomb_dc30dual_dbe025.inst.cfg | 12 +++ .../deltacomb_dc30dual_dbe040.inst.cfg | 12 +++ .../deltacomb_dc30dual_dbe060.inst.cfg | 12 +++ .../deltacomb_dc30dual_vdbe080.inst.cfg | 12 +++ .../deltacomb_dc30flux_fbe025.inst.cfg | 12 +++ .../deltacomb_dc30flux_fbe040.inst.cfg | 12 +++ .../deltacomb_dc30flux_fbe060.inst.cfg | 12 +++ 167 files changed, 2752 insertions(+), 549 deletions(-) delete mode 100644 resources/definitions/deltacomb.def.json create mode 100755 resources/definitions/deltacomb_base.def.json create mode 100755 resources/definitions/deltacomb_dc20.def.json create mode 100755 resources/definitions/deltacomb_dc20dual.def.json create mode 100644 resources/definitions/deltacomb_dc20flux.def.json create mode 100755 resources/definitions/deltacomb_dc21.def.json create mode 100755 resources/definitions/deltacomb_dc21dual.def.json create mode 100644 resources/definitions/deltacomb_dc21flux.def.json create mode 100755 resources/definitions/deltacomb_dc30.def.json create mode 100755 resources/extruders/deltacomb_base_extruder_0.def.json create mode 100755 resources/extruders/deltacomb_base_extruder_1.def.json create mode 100755 resources/extruders/deltacomb_base_extruder_2.def.json create mode 100755 resources/extruders/deltacomb_base_extruder_3.def.json create mode 100755 resources/extruders/deltacomb_dc20dual_extruder_0.def.json create mode 100755 resources/extruders/deltacomb_dc20dual_extruder_1.def.json create mode 100755 resources/extruders/deltacomb_dc20flux_extruder_0.def.json create mode 100755 resources/extruders/deltacomb_dc20flux_extruder_1.def.json create mode 100755 resources/extruders/deltacomb_dc20flux_extruder_2.def.json create mode 100755 resources/extruders/deltacomb_dc20flux_extruder_3.def.json delete mode 100755 resources/extruders/deltacomb_extruder_0.def.json delete mode 100755 resources/extruders/deltacomb_extruder_1.def.json delete mode 100644 resources/meshes/deltacomb.stl create mode 100644 resources/meshes/deltacomb_dc20.stl create mode 100644 resources/meshes/deltacomb_dc30.stl create mode 100755 resources/quality/deltacomb/ABS/deltacomb_DBE0.25_ABS_A.inst.cfg create mode 100755 resources/quality/deltacomb/ABS/deltacomb_DBE0.25_ABS_B.inst.cfg create mode 100755 resources/quality/deltacomb/ABS/deltacomb_DBE0.25_ABS_C.inst.cfg create mode 100755 resources/quality/deltacomb/ABS/deltacomb_DBE0.40_ABS_A.inst.cfg create mode 100755 resources/quality/deltacomb/ABS/deltacomb_DBE0.40_ABS_B.inst.cfg create mode 100755 resources/quality/deltacomb/ABS/deltacomb_DBE0.40_ABS_C.inst.cfg create mode 100755 resources/quality/deltacomb/ABS/deltacomb_DBE0.40_ABS_D.inst.cfg create mode 100755 resources/quality/deltacomb/ABS/deltacomb_DBE0.40_ABS_E.inst.cfg create mode 100755 resources/quality/deltacomb/ABS/deltacomb_DBE0.60_ABS_C.inst.cfg create mode 100755 resources/quality/deltacomb/ABS/deltacomb_DBE0.60_ABS_D.inst.cfg create mode 100755 resources/quality/deltacomb/ABS/deltacomb_DBE0.60_ABS_E.inst.cfg create mode 100755 resources/quality/deltacomb/ABS/deltacomb_DBE0.60_ABS_F.inst.cfg create mode 100755 resources/quality/deltacomb/ABS/deltacomb_FBE0.25_ABS_A.inst.cfg create mode 100755 resources/quality/deltacomb/ABS/deltacomb_FBE0.25_ABS_B.inst.cfg create mode 100755 resources/quality/deltacomb/ABS/deltacomb_FBE0.25_ABS_C.inst.cfg create mode 100755 resources/quality/deltacomb/ABS/deltacomb_FBE0.40_ABS_A.inst.cfg create mode 100755 resources/quality/deltacomb/ABS/deltacomb_FBE0.40_ABS_B.inst.cfg create mode 100755 resources/quality/deltacomb/ABS/deltacomb_FBE0.40_ABS_C.inst.cfg create mode 100755 resources/quality/deltacomb/ABS/deltacomb_FBE0.40_ABS_D.inst.cfg create mode 100755 resources/quality/deltacomb/ABS/deltacomb_FBE0.40_ABS_E.inst.cfg create mode 100755 resources/quality/deltacomb/ABS/deltacomb_FBE0.60_ABS_C.inst.cfg create mode 100755 resources/quality/deltacomb/ABS/deltacomb_FBE0.60_ABS_D.inst.cfg create mode 100755 resources/quality/deltacomb/ABS/deltacomb_FBE0.60_ABS_E.inst.cfg create mode 100755 resources/quality/deltacomb/ABS/deltacomb_FBE0.60_ABS_F.inst.cfg create mode 100755 resources/quality/deltacomb/ABS/deltacomb_VDBE0.80_ABS_D.inst.cfg create mode 100755 resources/quality/deltacomb/ABS/deltacomb_VDBE0.80_ABS_E.inst.cfg create mode 100755 resources/quality/deltacomb/ABS/deltacomb_VDBE0.80_ABS_F.inst.cfg create mode 100755 resources/quality/deltacomb/ABS/deltacomb_VDBE0.80_ABS_G.inst.cfg create mode 100755 resources/quality/deltacomb/ABS/deltacomb_VFBE0.80_ABS_D.inst.cfg create mode 100755 resources/quality/deltacomb/ABS/deltacomb_VFBE0.80_ABS_E.inst.cfg create mode 100755 resources/quality/deltacomb/ABS/deltacomb_VFBE0.80_ABS_F.inst.cfg create mode 100755 resources/quality/deltacomb/ABS/deltacomb_VFBE0.80_ABS_G.inst.cfg create mode 100644 resources/quality/deltacomb/PETG/deltacomb_DBE0.40_PETG_A.inst.cfg create mode 100644 resources/quality/deltacomb/PETG/deltacomb_DBE0.40_PETG_B.inst.cfg create mode 100644 resources/quality/deltacomb/PETG/deltacomb_DBE0.40_PETG_C.inst.cfg create mode 100644 resources/quality/deltacomb/PETG/deltacomb_DBE0.40_PETG_D.inst.cfg create mode 100644 resources/quality/deltacomb/PETG/deltacomb_DBE0.40_PETG_E.inst.cfg create mode 100644 resources/quality/deltacomb/PETG/deltacomb_DBE0.60_PETG_C.inst.cfg create mode 100644 resources/quality/deltacomb/PETG/deltacomb_DBE0.60_PETG_D.inst.cfg create mode 100644 resources/quality/deltacomb/PETG/deltacomb_DBE0.60_PETG_E.inst.cfg create mode 100644 resources/quality/deltacomb/PETG/deltacomb_DBE0.60_PETG_F.inst.cfg create mode 100644 resources/quality/deltacomb/PETG/deltacomb_FBE0.40_PETG_A.inst.cfg create mode 100644 resources/quality/deltacomb/PETG/deltacomb_FBE0.40_PETG_B.inst.cfg create mode 100644 resources/quality/deltacomb/PETG/deltacomb_FBE0.40_PETG_C.inst.cfg create mode 100644 resources/quality/deltacomb/PETG/deltacomb_FBE0.40_PETG_D.inst.cfg create mode 100644 resources/quality/deltacomb/PETG/deltacomb_FBE0.40_PETG_E.inst.cfg create mode 100644 resources/quality/deltacomb/PETG/deltacomb_FBE0.60_PETG_C.inst.cfg create mode 100644 resources/quality/deltacomb/PETG/deltacomb_FBE0.60_PETG_D.inst.cfg create mode 100644 resources/quality/deltacomb/PETG/deltacomb_FBE0.60_PETG_E.inst.cfg create mode 100644 resources/quality/deltacomb/PETG/deltacomb_FBE0.60_PETG_F.inst.cfg create mode 100755 resources/quality/deltacomb/PLA/deltacomb_DBE0.25_PLA_A.inst.cfg rename resources/quality/deltacomb/{deltacomb_pla_Draft_Quality.inst.cfg => PLA/deltacomb_DBE0.25_PLA_B.inst.cfg} (52%) mode change 100644 => 100755 rename resources/quality/deltacomb/{deltacomb_pla_Normal_Quality.inst.cfg => PLA/deltacomb_DBE0.25_PLA_C.inst.cfg} (52%) mode change 100644 => 100755 create mode 100755 resources/quality/deltacomb/PLA/deltacomb_DBE0.40_PLA_A.inst.cfg create mode 100755 resources/quality/deltacomb/PLA/deltacomb_DBE0.40_PLA_B.inst.cfg create mode 100755 resources/quality/deltacomb/PLA/deltacomb_DBE0.40_PLA_C.inst.cfg create mode 100755 resources/quality/deltacomb/PLA/deltacomb_DBE0.40_PLA_D.inst.cfg create mode 100755 resources/quality/deltacomb/PLA/deltacomb_DBE0.40_PLA_E.inst.cfg create mode 100755 resources/quality/deltacomb/PLA/deltacomb_DBE0.60_PLA_C.inst.cfg create mode 100755 resources/quality/deltacomb/PLA/deltacomb_DBE0.60_PLA_D.inst.cfg rename resources/quality/deltacomb/{deltacomb_pla_Fast_Quality.inst.cfg => PLA/deltacomb_DBE0.60_PLA_E.inst.cfg} (52%) mode change 100644 => 100755 rename resources/quality/deltacomb/{deltacomb_pla_High_Quality.inst.cfg => PLA/deltacomb_DBE0.60_PLA_F.inst.cfg} (52%) mode change 100644 => 100755 create mode 100755 resources/quality/deltacomb/PLA/deltacomb_FBE0.25_PLA_A.inst.cfg create mode 100755 resources/quality/deltacomb/PLA/deltacomb_FBE0.25_PLA_B.inst.cfg create mode 100755 resources/quality/deltacomb/PLA/deltacomb_FBE0.25_PLA_C.inst.cfg create mode 100755 resources/quality/deltacomb/PLA/deltacomb_FBE0.40_PLA_A.inst.cfg create mode 100755 resources/quality/deltacomb/PLA/deltacomb_FBE0.40_PLA_B.inst.cfg create mode 100755 resources/quality/deltacomb/PLA/deltacomb_FBE0.40_PLA_C.inst.cfg create mode 100755 resources/quality/deltacomb/PLA/deltacomb_FBE0.40_PLA_D.inst.cfg create mode 100755 resources/quality/deltacomb/PLA/deltacomb_FBE0.40_PLA_E.inst.cfg create mode 100755 resources/quality/deltacomb/PLA/deltacomb_FBE0.60_PLA_C.inst.cfg create mode 100755 resources/quality/deltacomb/PLA/deltacomb_FBE0.60_PLA_D.inst.cfg create mode 100755 resources/quality/deltacomb/PLA/deltacomb_FBE0.60_PLA_E.inst.cfg create mode 100755 resources/quality/deltacomb/PLA/deltacomb_FBE0.60_PLA_F.inst.cfg create mode 100755 resources/quality/deltacomb/PLA/deltacomb_VDBE0.80_PLA_D.inst.cfg create mode 100755 resources/quality/deltacomb/PLA/deltacomb_VDBE0.80_PLA_E.inst.cfg create mode 100755 resources/quality/deltacomb/PLA/deltacomb_VDBE0.80_PLA_F.inst.cfg create mode 100755 resources/quality/deltacomb/PLA/deltacomb_VDBE0.80_PLA_G.inst.cfg create mode 100755 resources/quality/deltacomb/PLA/deltacomb_VFBE0.80_PLA_D.inst.cfg create mode 100755 resources/quality/deltacomb/PLA/deltacomb_VFBE0.80_PLA_E.inst.cfg create mode 100755 resources/quality/deltacomb/PLA/deltacomb_VFBE0.80_PLA_F.inst.cfg create mode 100755 resources/quality/deltacomb/PLA/deltacomb_VFBE0.80_PLA_G.inst.cfg rename resources/quality/deltacomb/{deltacomb_tpu_Draft_Quality.inst.cfg => TPU/deltacomb_FBE0.40_TPU_B.inst.cfg} (62%) mode change 100644 => 100755 rename resources/quality/deltacomb/{deltacomb_tpu_Normal_Quality.inst.cfg => TPU/deltacomb_FBE0.40_TPU_C.inst.cfg} (62%) mode change 100644 => 100755 rename resources/quality/deltacomb/{deltacomb_tpu_Fast_Quality.inst.cfg => TPU/deltacomb_FBE0.40_TPU_D.inst.cfg} (62%) mode change 100644 => 100755 delete mode 100644 resources/quality/deltacomb/deltacomb_abs_Draft_Quality.inst.cfg delete mode 100644 resources/quality/deltacomb/deltacomb_abs_Fast_Quality.inst.cfg delete mode 100644 resources/quality/deltacomb/deltacomb_abs_High_Quality.inst.cfg delete mode 100644 resources/quality/deltacomb/deltacomb_abs_Normal_Quality.inst.cfg delete mode 100644 resources/quality/deltacomb/deltacomb_abs_Verydraft_Quality.inst.cfg create mode 100755 resources/quality/deltacomb/deltacomb_global_A.inst.cfg create mode 100755 resources/quality/deltacomb/deltacomb_global_B.inst.cfg create mode 100755 resources/quality/deltacomb/deltacomb_global_C.inst.cfg create mode 100755 resources/quality/deltacomb/deltacomb_global_D.inst.cfg delete mode 100644 resources/quality/deltacomb/deltacomb_global_Draft_Quality.inst.cfg create mode 100755 resources/quality/deltacomb/deltacomb_global_E.inst.cfg create mode 100755 resources/quality/deltacomb/deltacomb_global_F.inst.cfg delete mode 100644 resources/quality/deltacomb/deltacomb_global_Fast_Quality.inst.cfg create mode 100755 resources/quality/deltacomb/deltacomb_global_G.inst.cfg delete mode 100644 resources/quality/deltacomb/deltacomb_global_High_Quality.inst.cfg delete mode 100644 resources/quality/deltacomb/deltacomb_global_Normal_Quality.inst.cfg delete mode 100644 resources/quality/deltacomb/deltacomb_global_Verydraft_Quality.inst.cfg delete mode 100644 resources/quality/deltacomb/deltacomb_petg_Draft_Quality.inst.cfg delete mode 100644 resources/quality/deltacomb/deltacomb_petg_Fast_Quality.inst.cfg delete mode 100644 resources/quality/deltacomb/deltacomb_petg_High_Quality.inst.cfg delete mode 100644 resources/quality/deltacomb/deltacomb_petg_Normal_Quality.inst.cfg delete mode 100644 resources/quality/deltacomb/deltacomb_petg_Verydraft_Quality.inst.cfg delete mode 100644 resources/quality/deltacomb/deltacomb_pla_Verydraft_Quality.inst.cfg delete mode 100644 resources/quality/deltacomb/deltacomb_tpu_High_Quality.inst.cfg delete mode 100644 resources/quality/deltacomb/deltacomb_tpu_Verydraft_Quality.inst.cfg create mode 100755 resources/variants/deltacomb/deltacomb_dc20_fbe025.inst.cfg create mode 100755 resources/variants/deltacomb/deltacomb_dc20_fbe040.inst.cfg create mode 100755 resources/variants/deltacomb/deltacomb_dc20_fbe060.inst.cfg create mode 100755 resources/variants/deltacomb/deltacomb_dc20_vfbe080.inst.cfg create mode 100755 resources/variants/deltacomb/deltacomb_dc20dual_dbe025.inst.cfg create mode 100755 resources/variants/deltacomb/deltacomb_dc20dual_dbe040.inst.cfg create mode 100755 resources/variants/deltacomb/deltacomb_dc20dual_dbe060.inst.cfg create mode 100755 resources/variants/deltacomb/deltacomb_dc20dual_vdbe080.inst.cfg create mode 100755 resources/variants/deltacomb/deltacomb_dc20flux_fbe025.inst.cfg create mode 100755 resources/variants/deltacomb/deltacomb_dc20flux_fbe040.inst.cfg create mode 100755 resources/variants/deltacomb/deltacomb_dc20flux_fbe060.inst.cfg create mode 100755 resources/variants/deltacomb/deltacomb_dc21_fbe025.inst.cfg create mode 100755 resources/variants/deltacomb/deltacomb_dc21_fbe040.inst.cfg create mode 100755 resources/variants/deltacomb/deltacomb_dc21_fbe060.inst.cfg create mode 100755 resources/variants/deltacomb/deltacomb_dc21_vfbe080.inst.cfg create mode 100755 resources/variants/deltacomb/deltacomb_dc21dual_dbe025.inst.cfg create mode 100755 resources/variants/deltacomb/deltacomb_dc21dual_dbe040.inst.cfg create mode 100755 resources/variants/deltacomb/deltacomb_dc21dual_dbe060.inst.cfg create mode 100755 resources/variants/deltacomb/deltacomb_dc21dual_vdbe080.inst.cfg create mode 100755 resources/variants/deltacomb/deltacomb_dc21flux_fbe025.inst.cfg create mode 100755 resources/variants/deltacomb/deltacomb_dc21flux_fbe040.inst.cfg create mode 100755 resources/variants/deltacomb/deltacomb_dc21flux_fbe060.inst.cfg create mode 100755 resources/variants/deltacomb/deltacomb_dc30_fbe025.inst.cfg create mode 100755 resources/variants/deltacomb/deltacomb_dc30_fbe040.inst.cfg create mode 100755 resources/variants/deltacomb/deltacomb_dc30_fbe060.inst.cfg create mode 100755 resources/variants/deltacomb/deltacomb_dc30_vfbe080.inst.cfg create mode 100755 resources/variants/deltacomb/deltacomb_dc30dual_dbe025.inst.cfg create mode 100755 resources/variants/deltacomb/deltacomb_dc30dual_dbe040.inst.cfg create mode 100755 resources/variants/deltacomb/deltacomb_dc30dual_dbe060.inst.cfg create mode 100755 resources/variants/deltacomb/deltacomb_dc30dual_vdbe080.inst.cfg create mode 100755 resources/variants/deltacomb/deltacomb_dc30flux_fbe025.inst.cfg create mode 100755 resources/variants/deltacomb/deltacomb_dc30flux_fbe040.inst.cfg create mode 100755 resources/variants/deltacomb/deltacomb_dc30flux_fbe060.inst.cfg diff --git a/resources/definitions/deltacomb.def.json b/resources/definitions/deltacomb.def.json deleted file mode 100644 index ac2ea5abe1..0000000000 --- a/resources/definitions/deltacomb.def.json +++ /dev/null @@ -1,67 +0,0 @@ -{ - "version": 2, - "name": "Deltacomb 3D", - "inherits": "fdmprinter", - - "metadata": { - "author": "Gabriele Rossetti", - "visible": true, - "manufacturer": "Deltacomb 3D", - "category": "Other", - "file_formats": "text/x-gcode", - "icon": "icon_ultimaker2", - "platform": "deltacomb.stl", - "has_machine_quality": true, - "has_materials": true, - "has_variants": true, - "variants_name": "Head", - "preferred_variant_name": "E3D 0.40mm", - "preferred_material": "generic_pla", - "preferred_quality_type": "normal", - "machine_extruder_trains": { "0": "deltacomb_extruder_0", "1": "deltacomb_extruder_1" } - }, - - "overrides": { - "machine_extruder_count": { "default_value": 1 }, - "machine_heated_bed": { "default_value": true }, - "machine_width": { "default_value": 190 }, - "machine_height": { "default_value": 250 }, - "machine_depth": { "default_value": 190 }, - "machine_center_is_zero": { "default_value": true }, - "machine_gcode_flavor": { "default_value": "RepRap (Marlin/Sprinter)" }, - "machine_start_gcode": { "default_value": "G21 ;metric values\nG90 ;absolute positioning\nM82 ;set extruder to absolute mode\nM107 ;start with the fan off\nG28 ;Home all axes (max endstops)\nG1 Z15.0 F9000 ;move the platform down 15mm\nG92 E0 ;zero the extruded length\nG1 F9000\n;Put printing message on LCD screen\nM117 Printing..."}, - "machine_end_gcode": { "default_value": "M104 S0 ;extruder heater off\nM140 S0 ;heated bed heater off (if you have it)\nG91 ;relative positioning\nG1 E-1 F300 ;retract the filament a bit before lifting the nozzle, to release some of the pressure\nG28 ;Home all axes (max endstops)\nM84 ;steppers off\nG90 ;absolute positioning" }, - "machine_shape": { "default_value": "elliptic" }, - "retraction_hop_enabled": { "default_value": true }, - "retraction_hop": { "default_value": 1 }, - "retraction_amount" : { "default_value": 3.5 }, - "retraction_speed" : { "default_value": 30 }, - "retraction_combing" : { "default_value": "noskin" }, - "travel_avoid_distance": { "value": "1" }, - "speed_print" : { "default_value": 80 }, - "speed_infill": { "value": "round(speed_print * 1.05, 0)" }, - "speed_topbottom": { "value": "round(speed_print * 0.95, 0)" }, - "speed_wall": { "value": "speed_print" }, - "speed_wall_0": { "value": "30" }, - "speed_wall_x": { "value": "speed_wall" }, - "speed_layer_0": { "value": "min(round(speed_print * 0.75, 0), 45.0)" }, - "speed_travel": { "value": 150 }, - "speed_travel_layer_0": { "value": "round(speed_travel * 0.7, 0)" }, - "skirt_brim_speed": { "value": "speed_layer_0" }, - "skirt_line_count": { "default_value": 3 }, - "skirt_brim_minimal_length": { "default_value": 150 }, - "infill_sparse_density": { "default_value": 30 }, - "infill_pattern": { "value": "'cubic'" }, - "infill_before_walls" : { "default_value": false }, - "top_bottom_thickness": { "default_value": 0.8 }, - "support_z_distance": { "value": "layer_height * 2" }, - "support_bottom_distance": { "value": "layer_height" }, - "support_use_towers" : { "default_value": false }, - "jerk_enabled": { "value": "True" }, - "jerk_infill" : { "value": "5" }, - "jerk_support" : { "value": "5" }, - "acceleration_enabled": { "value": "1" }, - "acceleration_travel" : { "value": 5000 }, - "machine_max_feedrate_z" : { "default_value": 300 } - } -} diff --git a/resources/definitions/deltacomb_base.def.json b/resources/definitions/deltacomb_base.def.json new file mode 100755 index 0000000000..4d1466a8fa --- /dev/null +++ b/resources/definitions/deltacomb_base.def.json @@ -0,0 +1,88 @@ +{ + "version": 2, + "name": "Deltacomb Base Printer", + "inherits": "fdmprinter", + + "metadata": { + "author": "Gabriele Rossetti", + "visible": false, + "manufacturer": "Deltacomb 3D Printers", + "category": "Other", + "file_formats": "text/x-gcode", + "has_machine_quality": true, + "has_materials": true, + "has_variants": true, + "variants_name": "Head", + + "preferred_quality_type": "fast", + "preferred_material": "generic_pla" + }, + + "overrides": { + "machine_extruder_count": { "default_value": 1, "maximum_value": "4" }, + "machine_heated_bed": { "default_value": true }, + "machine_center_is_zero": { "default_value": true }, + "machine_gcode_flavor": { "default_value": "RepRap (Marlin/Sprinter)" }, + "machine_start_gcode": { "default_value": ";---------------------------------------\n;Deltacomb start script\n;---------------------------------------\nG21 ;metric values\nG90 ;absolute positioning\nM107 ;start with the fan off\nG28 ;Home all axes (max endstops)\nG92 E0 ;zero the extruded length\nG1 Z15.0 F9000 ;move to the platform down 15mm\nG1 F9000\n\n;Put printing message on LCD screen\nM117 Printing...\n;---------------------------------------"}, + "machine_end_gcode": { "default_value": ";---------------------------------------\n;Deltacomb end script\n;---------------------------------------\nG91 ;relative positioning\nG1 F4200 E-4.5 ;wipe filament\nG1 F15000 E4.0 Z1 ;retraction compensation\nG28 ;Home all axes (max endstops)\nM84 ;steppers off" }, + "machine_shape": { "default_value": "elliptic" }, + + "machine_max_feedrate_z" : { "default_value": 300 }, + + "speed_print" : { "default_value": 80 }, + "speed_topbottom": { "value": "speed_print * 0.90" }, + "speed_wall_0": { "value": "35 if speed_print > 35 else speed_print" }, + "speed_layer_0": { "value": "speed_print * 0.55" }, + + "speed_travel": { "value": "170" }, + "speed_travel_layer_0": { "value": "speed_travel * 0.70" }, + "speed_z_hop": { "value": "speed_travel" }, + + "acceleration_enabled": { "value": "True" }, + "acceleration_travel" : { "value": "9000" }, + "acceleration_print": { "value": "4000" }, + "acceleration_wall": { "value": "acceleration_print * 0.5" }, + "acceleration_wall_0": { "value": "acceleration_wall * 0.5" }, + "acceleration_topbottom": { "value": "acceleration_wall_0" }, + "acceleration_layer_0": { "value": "acceleration_wall_0" }, + "acceleration_prime_tower": { "value": "acceleration_wall" }, + "acceleration_support": { "value": "acceleration_wall" }, + "acceleration_support_interface": { "value": "acceleration_wall_0" }, + + "jerk_enabled": { "value": "True" }, + "jerk_print": { "value": "25" }, + "jerk_infill": { "value": "10" }, + "jerk_travel": { "value": "10" }, + + "retraction_hop_enabled": { "default_value": true }, + "retraction_hop": { "default_value": 0.5 }, + "retraction_amount" : { "default_value": 3.5 }, + "retraction_speed" : { "default_value": 70 }, + "retraction_combing" : { "default_value": "noskin" }, + "travel_avoid_distance": { "default_value": 1, "value": "1" }, + + "top_bottom_thickness": { "default_value": 0.8 }, + "roofing_layer_count": { "default_value": 1, "value": "1" }, + "roofing_line_width": { "value": "line_width * 0.75" }, + + "infill_sparse_density": { "default_value": 30 }, + "infill_pattern": { "value": "'cubic'" }, + "infill_before_walls" : { "default_value": false }, + + "support_z_distance": { "value": "layer_height * 2" }, + "support_bottom_distance": { "value": "layer_height" }, + "support_use_towers" : { "default_value": false }, + "support_bottom_enable" : { "default_value": false }, + + "skirt_brim_speed": { "default_value" : "speed_layer_0", "value": "speed_layer_0" }, + "skirt_line_count": { "default_value": 3 }, + "skirt_brim_minimal_length": { "default_value": 150 }, + "brim_width": { "value": "3" }, + + "prime_tower_size": { "value": "math.sqrt(extruders_enabled_count * prime_tower_min_volume / layer_height / math.pi) * 2"}, + "prime_tower_position_x": { "value": "prime_tower_size - max(extruderValue(adhesion_extruder_nr, 'brim_width') * extruderValue(adhesion_extruder_nr, 'initial_layer_line_width_factor') / 100 if adhesion_type == 'brim' or (prime_tower_brim_enable and adhesion_type != 'raft') else (extruderValue(adhesion_extruder_nr, 'raft_margin') if adhesion_type == 'raft' else (extruderValue(adhesion_extruder_nr, 'skirt_gap') if adhesion_type == 'skirt' else 0)), max(extruderValues('travel_avoid_distance'))) - max(extruderValues('support_offset')) - sum(extruderValues('skirt_brim_line_width')) * extruderValue(adhesion_extruder_nr, 'initial_layer_line_width_factor') / 100 - (resolveOrValue('draft_shield_dist') if resolveOrValue('draft_shield_enabled') else 0)" }, + "prime_tower_position_y": { "value": "machine_depth / 2 - prime_tower_size - max(extruderValue(adhesion_extruder_nr, 'brim_width') * extruderValue(adhesion_extruder_nr, 'initial_layer_line_width_factor') / 100 if adhesion_type == 'brim' or (prime_tower_brim_enable and adhesion_type != 'raft') else (extruderValue(adhesion_extruder_nr, 'raft_margin') if adhesion_type == 'raft' else (extruderValue(adhesion_extruder_nr, 'skirt_gap') if adhesion_type == 'skirt' else 0)), max(extruderValues('travel_avoid_distance'))) - max(extruderValues('support_offset')) - sum(extruderValues('skirt_brim_line_width')) * extruderValue(adhesion_extruder_nr, 'initial_layer_line_width_factor') / 100 - (resolveOrValue('draft_shield_dist') if resolveOrValue('draft_shield_enabled') else 0) - 1" }, + + "infill_before_walls": { "value": "1 if resolveOrValue('prime_tower_enable') else 0"} + } +} diff --git a/resources/definitions/deltacomb_dc20.def.json b/resources/definitions/deltacomb_dc20.def.json new file mode 100755 index 0000000000..d9910992e6 --- /dev/null +++ b/resources/definitions/deltacomb_dc20.def.json @@ -0,0 +1,26 @@ +{ + "version": 2, + "name": "Deltacomb DC-20", + "inherits": "deltacomb_base", + + "metadata": { + "visible": true, + "platform": "deltacomb_dc20.stl", + "quality_definition": "deltacomb_base", + "preferred_variant_name": "FBE 0.40mm", + "machine_extruder_trains": { + "0": "deltacomb_base_extruder_0", + "1": "deltacomb_base_extruder_1", + "2": "deltacomb_base_extruder_2", + "3": "deltacomb_base_extruder_3" + } + }, + + "overrides": { + "machine_name": { "default_value": "Deltacomb DC-20" }, + "machine_width": { "default_value": 190 }, + "machine_depth": { "default_value": 190 }, + "machine_height": { "default_value": 250 }, + "machine_extruder_count": { "default_value": 1, "maximum_value": "4" } + } +} diff --git a/resources/definitions/deltacomb_dc20dual.def.json b/resources/definitions/deltacomb_dc20dual.def.json new file mode 100755 index 0000000000..a78415331c --- /dev/null +++ b/resources/definitions/deltacomb_dc20dual.def.json @@ -0,0 +1,24 @@ +{ + "version": 2, + "name": "Deltacomb DC-20 DUAL", + "inherits": "deltacomb_base", + + "metadata": { + "visible": true, + "platform": "deltacomb_dc20.stl", + "quality_definition": "deltacomb_base", + "preferred_variant_name": "DBE 0.40mm", + "machine_extruder_trains": { + "0": "deltacomb_dc20dual_extruder_0", + "1": "deltacomb_dc20dual_extruder_1" + } + }, + + "overrides": { + "machine_name": { "default_value": "Deltacomb DC-20 DUAL" }, + "machine_extruder_count": { "default_value": 2, "maximum_value": "2" }, + "machine_width": { "default_value": 190 }, + "machine_depth": { "default_value": 190 }, + "machine_height": { "default_value": 250 } + } +} diff --git a/resources/definitions/deltacomb_dc20flux.def.json b/resources/definitions/deltacomb_dc20flux.def.json new file mode 100644 index 0000000000..00553ae106 --- /dev/null +++ b/resources/definitions/deltacomb_dc20flux.def.json @@ -0,0 +1,28 @@ +{ + "version": 2, + "name": "Deltacomb DC-20 FLUX", + "inherits": "deltacomb_base", + + "metadata": { + "visible": true, + "platform": "deltacomb_dc20.stl", + "quality_definition": "deltacomb_base", + "preferred_variant_name": "FBE 0.40mm", + "machine_extruder_trains": { + "0": "deltacomb_dc20flux_extruder_0", + "1": "deltacomb_dc20flux_extruder_1", + "2": "deltacomb_dc20flux_extruder_2", + "3": "deltacomb_dc20flux_extruder_3" + } + }, + + "overrides": { + "machine_name": { "default_value": "Deltacomb DC-20 FLUX" }, + "machine_width": { "default_value": 190 }, + "machine_depth": { "default_value": 190 }, + "machine_height": { "default_value": 250 }, + "machine_extruder_count": { "default_value": 2, "maximum_value": "4" }, + "switch_extruder_retraction_amount": { "value": "0" }, + "prime_tower_min_volume": { "value": "45" } + } +} diff --git a/resources/definitions/deltacomb_dc21.def.json b/resources/definitions/deltacomb_dc21.def.json new file mode 100755 index 0000000000..0fb514d321 --- /dev/null +++ b/resources/definitions/deltacomb_dc21.def.json @@ -0,0 +1,26 @@ +{ + "version": 2, + "name": "Deltacomb DC-21", + "inherits": "deltacomb_base", + + "metadata": { + "visible": true, + "platform": "deltacomb_dc20.stl", + "quality_definition": "deltacomb_base", + "preferred_variant_name": "FBE 0.40mm", + "machine_extruder_trains": { + "0": "deltacomb_base_extruder_0", + "1": "deltacomb_base_extruder_1", + "2": "deltacomb_base_extruder_2", + "3": "deltacomb_base_extruder_3" + } + }, + + "overrides": { + "machine_name": { "default_value": "Deltacomb DC-21" }, + "machine_width": { "default_value": 190 }, + "machine_depth": { "default_value": 190 }, + "machine_height": { "default_value": 400 }, + "machine_extruder_count": { "default_value": 1, "maximum_value": "4" } + } +} diff --git a/resources/definitions/deltacomb_dc21dual.def.json b/resources/definitions/deltacomb_dc21dual.def.json new file mode 100755 index 0000000000..d173888f7a --- /dev/null +++ b/resources/definitions/deltacomb_dc21dual.def.json @@ -0,0 +1,24 @@ +{ + "version": 2, + "name": "Deltacomb DC-21 DUAL", + "inherits": "deltacomb_base", + + "metadata": { + "visible": true, + "platform": "deltacomb_dc20.stl", + "quality_definition": "deltacomb_base", + "preferred_variant_name": "DBE 0.40mm", + "machine_extruder_trains": { + "0": "deltacomb_dc20dual_extruder_0", + "1": "deltacomb_dc20dual_extruder_1" + } + }, + + "overrides": { + "machine_name": { "default_value": "Deltacomb DC-20 DUAL" }, + "machine_extruder_count": { "default_value": 2, "maximum_value": "2" }, + "machine_width": { "default_value": 190 }, + "machine_depth": { "default_value": 190 }, + "machine_height": { "default_value": 400 } + } +} diff --git a/resources/definitions/deltacomb_dc21flux.def.json b/resources/definitions/deltacomb_dc21flux.def.json new file mode 100644 index 0000000000..79e07a2b64 --- /dev/null +++ b/resources/definitions/deltacomb_dc21flux.def.json @@ -0,0 +1,29 @@ +{ + "version": 2, + "name": "Deltacomb DC-21 FLUX", + "inherits": "deltacomb_base", + + "metadata": { + "visible": true, + "platform": "deltacomb_dc20.stl", + "quality_definition": "deltacomb_base", + "preferred_variant_name": "FBE 0.40mm", + "machine_extruder_trains": { + "0": "deltacomb_dc20flux_extruder_0", + "1": "deltacomb_dc20flux_extruder_1", + "2": "deltacomb_dc20flux_extruder_2", + "3": "deltacomb_dc20flux_extruder_3" + } + }, + + "overrides": { + "machine_name": { "default_value": "Deltacomb DC-20 FLUX" }, + "machine_width": { "default_value": 190 }, + "machine_depth": { "default_value": 190 }, + "machine_height": { "default_value": 400 }, + "machine_extruder_count": { "default_value": 2, "maximum_value": "4" }, + "switch_extruder_retraction_amount" : { "default_value": 0 }, + "prime_tower_size": { "value": "30"}, + "prime_tower_min_volume": { "value": "45" } + } +} diff --git a/resources/definitions/deltacomb_dc30.def.json b/resources/definitions/deltacomb_dc30.def.json new file mode 100755 index 0000000000..20e7939347 --- /dev/null +++ b/resources/definitions/deltacomb_dc30.def.json @@ -0,0 +1,26 @@ +{ + "version": 2, + "name": "Deltacomb DC-30", + "inherits": "deltacomb_base", + + "metadata": { + "visible": true, + "platform": "deltacomb_dc30.stl", + "quality_definition": "deltacomb_base", + "preferred_variant_name": "FBE 0.40mm", + "machine_extruder_trains": { + "0": "deltacomb_base_extruder_0", + "1": "deltacomb_base_extruder_1", + "2": "deltacomb_base_extruder_2", + "3": "deltacomb_base_extruder_3" + } + }, + + "overrides": { + "machine_name": { "default_value": "Deltacomb DC-30" }, + "machine_width": { "default_value": 290 }, + "machine_depth": { "default_value": 290 }, + "machine_height": { "default_value": 300 }, + "machine_extruder_count": { "default_value": 1, "maximum_value": "4" } + } +} diff --git a/resources/extruders/deltacomb_base_extruder_0.def.json b/resources/extruders/deltacomb_base_extruder_0.def.json new file mode 100755 index 0000000000..54066fb86b --- /dev/null +++ b/resources/extruders/deltacomb_base_extruder_0.def.json @@ -0,0 +1,20 @@ +{ + "id": "deltacomb_base_extruder_0", + "version": 2, + "name": "Extruder 1", + "inherits": "fdmextruder", + "metadata": { + "machine": "deltacomb_base", + "position": "0" + }, + + "overrides": { + "extruder_nr": { "default_value": 0, "maximum_value": "3" }, + "machine_nozzle_size": { "default_value": 0.4 }, + "material_diameter": { "default_value": 1.75 }, + "machine_nozzle_offset_x": { "default_value": 0.0 }, + "machine_nozzle_offset_y": { "default_value": 0.0 }, + "machine_extruder_start_code": { "default_value": ";Deltacomb Extruder 1\n;Put your custom code here"}, + "machine_extruder_end_code": { "default_value": ";Deltacomb Extruder 1\n;Put your custom code here"} + } +} diff --git a/resources/extruders/deltacomb_base_extruder_1.def.json b/resources/extruders/deltacomb_base_extruder_1.def.json new file mode 100755 index 0000000000..4353f47c49 --- /dev/null +++ b/resources/extruders/deltacomb_base_extruder_1.def.json @@ -0,0 +1,20 @@ +{ + "id": "deltacomb_base_extruder_1", + "version": 2, + "name": "Extruder 2", + "inherits": "fdmextruder", + "metadata": { + "machine": "deltacomb_base", + "position": "1" + }, + + "overrides": { + "extruder_nr": { "default_value": 1, "maximum_value": "3" }, + "machine_nozzle_size": { "default_value": 0.4 }, + "material_diameter": { "default_value": 1.75 }, + "machine_nozzle_offset_x": { "default_value": 0.0 }, + "machine_nozzle_offset_y": { "default_value": 0.0 }, + "machine_extruder_start_code": { "default_value": ";Deltacomb Extruder 2\n;Put your custom code here"}, + "machine_extruder_end_code": { "default_value": ";Deltacomb Extruder 2\n;Put your custom code here"} + } +} diff --git a/resources/extruders/deltacomb_base_extruder_2.def.json b/resources/extruders/deltacomb_base_extruder_2.def.json new file mode 100755 index 0000000000..a656d8d30e --- /dev/null +++ b/resources/extruders/deltacomb_base_extruder_2.def.json @@ -0,0 +1,20 @@ +{ + "id": "deltacomb_base_extruder_2", + "version": 2, + "name": "Extruder 3", + "inherits": "fdmextruder", + "metadata": { + "machine": "deltacomb_base", + "position": "2" + }, + + "overrides": { + "extruder_nr": { "default_value": 2, "maximum_value": "3" }, + "machine_nozzle_size": { "default_value": 0.4 }, + "material_diameter": { "default_value": 1.75 }, + "machine_nozzle_offset_x": { "default_value": 0.0 }, + "machine_nozzle_offset_y": { "default_value": 0.0 }, + "machine_extruder_start_code": { "default_value": ";Deltacomb Extruder 3\n;Put your custom code here"}, + "machine_extruder_end_code": { "default_value": ";Deltacomb Extruder 3\n;Put your custom code here"} + } +} diff --git a/resources/extruders/deltacomb_base_extruder_3.def.json b/resources/extruders/deltacomb_base_extruder_3.def.json new file mode 100755 index 0000000000..94537eda6d --- /dev/null +++ b/resources/extruders/deltacomb_base_extruder_3.def.json @@ -0,0 +1,20 @@ +{ + "id": "deltacomb_base_extruder_3", + "version": 2, + "name": "Extruder 4", + "inherits": "fdmextruder", + "metadata": { + "machine": "deltacomb_base", + "position": "3" + }, + + "overrides": { + "extruder_nr": { "default_value": 3, "maximum_value": "3" }, + "machine_nozzle_size": { "default_value": 0.4 }, + "material_diameter": { "default_value": 1.75 }, + "machine_nozzle_offset_x": { "default_value": 0.0 }, + "machine_nozzle_offset_y": { "default_value": 0.0 }, + "machine_extruder_start_code": { "default_value": ";Deltacomb Extruder 4\n;Put your custom code here"}, + "machine_extruder_end_code": { "default_value": ";Deltacomb Extruder 4\n;Put your custom code here"} + } +} diff --git a/resources/extruders/deltacomb_dc20dual_extruder_0.def.json b/resources/extruders/deltacomb_dc20dual_extruder_0.def.json new file mode 100755 index 0000000000..32c0e942b6 --- /dev/null +++ b/resources/extruders/deltacomb_dc20dual_extruder_0.def.json @@ -0,0 +1,20 @@ +{ + "id": "deltacomb_dc20dual_extruder_0", + "version": 2, + "name": "Extruder 1", + "inherits": "fdmextruder", + "metadata": { + "machine": "deltacomb_dc20dual", + "position": "0" + }, + + "overrides": { + "extruder_nr": { "default_value": 0, "maximum_value": "1" }, + "machine_nozzle_size": { "default_value": 0.4 }, + "material_diameter": { "default_value": 1.75 }, + "machine_nozzle_offset_x": { "default_value": 0.0 }, + "machine_nozzle_offset_y": { "default_value": 0.0 }, + "machine_extruder_start_code": { "default_value": ";DC20 Dual Extruder 1\n;Put your custom code here"}, + "machine_extruder_end_code": { "default_value": ";DC20 Dual Extruder 1\n;Put your custom code here"} + } +} diff --git a/resources/extruders/deltacomb_dc20dual_extruder_1.def.json b/resources/extruders/deltacomb_dc20dual_extruder_1.def.json new file mode 100755 index 0000000000..84655cf150 --- /dev/null +++ b/resources/extruders/deltacomb_dc20dual_extruder_1.def.json @@ -0,0 +1,20 @@ +{ + "id": "deltacomb_dc20dual_extruder_0", + "version": 2, + "name": "Extruder 2", + "inherits": "fdmextruder", + "metadata": { + "machine": "deltacomb_dc20dual", + "position": "2" + }, + + "overrides": { + "extruder_nr": { "default_value": 0, "maximum_value": "1" }, + "machine_nozzle_size": { "default_value": 0.4 }, + "material_diameter": { "default_value": 1.75 }, + "machine_nozzle_offset_x": { "default_value": 19 }, + "machine_nozzle_offset_y": { "default_value": 0 }, + "machine_extruder_start_code": { "default_value": ";DC20 Dual Extruder 2\n;Put your custom code here"}, + "machine_extruder_end_code": { "default_value": ";DC20 Dual Extruder 2\n;Put your custom code here"} + } +} diff --git a/resources/extruders/deltacomb_dc20flux_extruder_0.def.json b/resources/extruders/deltacomb_dc20flux_extruder_0.def.json new file mode 100755 index 0000000000..111bcdd638 --- /dev/null +++ b/resources/extruders/deltacomb_dc20flux_extruder_0.def.json @@ -0,0 +1,21 @@ +{ + "id": "deltacomb_dc20flux_extruder_0", + "version": 2, + "name": "Extruder 1", + "inherits": "fdmextruder", + "metadata": { + "machine": "deltacomb_dc20flux", + "position": "0" + }, + + + "overrides": { + "extruder_nr": { "default_value": 0, "maximum_value": "3" }, + "machine_nozzle_size": { "default_value": 0.4 }, + "material_diameter": { "default_value": 1.75 }, + "machine_nozzle_offset_x": { "default_value": 0.0 }, + "machine_nozzle_offset_y": { "default_value": 0.0 }, + "machine_extruder_start_code": { "default_value": ";---------------------------------------\n;DC20 Flux Extruder 1 Start\n;---------------------------------------\nG92 E0 ;zero the extruded length\nG91 ;use relative coordinates\nG1 E68 F10000 ; fast insert\nG92 E0 ;zero the extruded length\nG90 ;absolute positioning\n;---------------------------------------\n;---------------------------------------"}, + "machine_extruder_end_code": { "default_value": ";---------------------------------------\n;DC20 Flux Extruder 1 End\n;---------------------------------------\nG91 ;use relative coordinates\nG0 E-15 F10000\nG1 Z2 ;lift head\nG4 P3000\nG0 E14.7 F10000\nG1 E-69.7 F10000\nG90 ;absolute positioning\nG92 E0 ;zero the extruded length\n;---------------------------------------\n;---------------------------------------"} + } +} diff --git a/resources/extruders/deltacomb_dc20flux_extruder_1.def.json b/resources/extruders/deltacomb_dc20flux_extruder_1.def.json new file mode 100755 index 0000000000..9ec50bfc87 --- /dev/null +++ b/resources/extruders/deltacomb_dc20flux_extruder_1.def.json @@ -0,0 +1,22 @@ +{ + "id": "deltacomb_dc20flux_extruder_0", + "version": 2, + "name": "Extruder 2", + "inherits": "fdmextruder", + "metadata": { + "machine": "deltacomb_dc20flux", + "position": "1" + }, + + + "overrides": { + "extruder_nr": { "default_value": 1, "maximum_value": "3" }, + "machine_nozzle_size": { "default_value": 0.4 }, + "material_diameter": { "default_value": 1.75 }, + "machine_nozzle_offset_x": { "default_value": 0.0 }, + "machine_nozzle_offset_y": { "default_value": 0.0 }, + "machine_extruder_start_code": { "default_value": ";---------------------------------------\n;DC20 Flux Extruder 2 Start\n;---------------------------------------\nG92 E0 ;zero the extruded length\nG91 ;use relative coordinates\nG1 E68 F10000 ; fast insert\nG92 E0 ;zero the extruded length\nG90 ;absolute positioning\n;---------------------------------------\n;---------------------------------------"}, + "machine_extruder_end_code": { "default_value": ";---------------------------------------\n;DC20 Flux Extruder 2 End\n;---------------------------------------\nG91 ;use relative coordinates\nG0 E-15 F10000\nG1 Z2 ;lift head\nG4 P3000\nG0 E14.7 F10000\nG1 E-69.7 F10000\nG90 ;absolute positioning\nG92 E0 ;zero the extruded length\n;---------------------------------------\n;---------------------------------------"}, + "prime_tower_flow": { "value": "200" } + } +} diff --git a/resources/extruders/deltacomb_dc20flux_extruder_2.def.json b/resources/extruders/deltacomb_dc20flux_extruder_2.def.json new file mode 100755 index 0000000000..35247483ef --- /dev/null +++ b/resources/extruders/deltacomb_dc20flux_extruder_2.def.json @@ -0,0 +1,22 @@ +{ + "id": "deltacomb_dc20flux_extruder_0", + "version": 2, + "name": "Extruder 3", + "inherits": "fdmextruder", + "metadata": { + "machine": "deltacomb_dc20flux", + "position": "2" + }, + + + "overrides": { + "extruder_nr": { "default_value": 2, "maximum_value": "3" }, + "machine_nozzle_size": { "default_value": 0.4 }, + "material_diameter": { "default_value": 1.75 }, + "machine_nozzle_offset_x": { "default_value": 0.0 }, + "machine_nozzle_offset_y": { "default_value": 0.0 }, + "machine_extruder_start_code": { "default_value": ";---------------------------------------\n;DC20 Flux Extruder 3 Start\n;---------------------------------------\nG92 E0 ;zero the extruded length\nG91 ;use relative coordinates\nG1 E68 F10000 ; fast insert\nG92 E0 ;zero the extruded length\nG90 ;absolute positioning\n;---------------------------------------\n;---------------------------------------"}, + "machine_extruder_end_code": { "default_value": ";---------------------------------------\n;DC20 Flux Extruder 3 End\n;---------------------------------------\nG91 ;use relative coordinates\nG0 E-15 F10000\nG1 Z2 ;lift head\nG4 P3000\nG0 E14.7 F10000\nG1 E-69.7 F10000\nG90 ;absolute positioning\nG92 E0 ;zero the extruded length\n;---------------------------------------\n;---------------------------------------"}, + "prime_tower_flow": { "value": "200" } + } +} diff --git a/resources/extruders/deltacomb_dc20flux_extruder_3.def.json b/resources/extruders/deltacomb_dc20flux_extruder_3.def.json new file mode 100755 index 0000000000..6da81d2f1d --- /dev/null +++ b/resources/extruders/deltacomb_dc20flux_extruder_3.def.json @@ -0,0 +1,22 @@ +{ + "id": "deltacomb_dc20flux_extruder_0", + "version": 2, + "name": "Extruder 4", + "inherits": "fdmextruder", + "metadata": { + "machine": "deltacomb_dc20flux", + "position": "3" + }, + + + "overrides": { + "extruder_nr": { "default_value": 3, "maximum_value": "3" }, + "machine_nozzle_size": { "default_value": 0.4 }, + "material_diameter": { "default_value": 1.75 }, + "machine_nozzle_offset_x": { "default_value": 0.0 }, + "machine_nozzle_offset_y": { "default_value": 0.0 }, + "machine_extruder_start_code": { "default_value": ";---------------------------------------\n;DC20 Flux Extruder 4 Start\n;---------------------------------------\nG92 E0 ;zero the extruded length\nG91 ;use relative coordinates\nG1 E68 F10000 ; fast insert\nG92 E0 ;zero the extruded length\nG90 ;absolute positioning\n;---------------------------------------\n;---------------------------------------"}, + "machine_extruder_end_code": { "default_value": ";---------------------------------------\n;DC20 Flux Extruder 4 End\n;---------------------------------------\nG91 ;use relative coordinates\nG0 E-15 F10000\nG1 Z2 ;lift head\nG4 P3000\nG0 E14.7 F10000\nG1 E-69.7 F10000\nG90 ;absolute positioning\nG92 E0 ;zero the extruded length\n;---------------------------------------\n;---------------------------------------"}, + "prime_tower_flow": { "value": "200" } + } +} diff --git a/resources/extruders/deltacomb_extruder_0.def.json b/resources/extruders/deltacomb_extruder_0.def.json deleted file mode 100755 index 875655d5c7..0000000000 --- a/resources/extruders/deltacomb_extruder_0.def.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "version": 2, - "name": "Extruder 1", - "inherits": "fdmextruder", - "metadata": { - "machine": "deltacomb", - "position": "0" - }, - - "overrides": { - "extruder_nr": { "default_value": 0 }, - "machine_nozzle_size": { "default_value": 0.4 }, - "material_diameter": { "default_value": 1.75 }, - "machine_nozzle_offset_x": { "default_value": 0.0 }, - "machine_nozzle_offset_y": { "default_value": 0.0 } - } -} diff --git a/resources/extruders/deltacomb_extruder_1.def.json b/resources/extruders/deltacomb_extruder_1.def.json deleted file mode 100755 index b1f30f4624..0000000000 --- a/resources/extruders/deltacomb_extruder_1.def.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "version": 2, - "name": "Extruder 2", - "inherits": "fdmextruder", - "metadata": { - "machine": "deltacomb", - "position": "1" - }, - - "overrides": { - "extruder_nr": { "default_value": 1 }, - "machine_nozzle_size": { "default_value": 0.4 }, - "material_diameter": { "default_value": 1.75 }, - "machine_nozzle_offset_x": { "default_value": 0.0 }, - "machine_nozzle_offset_y": { "default_value": 0.0 } - } -} diff --git a/resources/meshes/deltacomb.stl b/resources/meshes/deltacomb.stl deleted file mode 100644 index b3faa873fe849947e83994f3e6297952f25d3398..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 946084 zcmb51cbpW(^Y;fhau5+w5R@c{2pGt4Gk3ED6+s0=P*6ZYL=h!>qyvs@IKYTXREY*8 zhn+bV$w*XkkR&-t&cCYZsqN1!`}KJ}_s{ify53VAt5Z#H-Cpl^?$WK@o5kCA>D;Nf z{cgMW-fY*U!jl!NRW1HV*Y0hLKVHuG|N1-njA7K;(AWBQMpl!-Q59B3vdsM@Vi@Te z&9<(HeA(bP3a5m0I6cEKULxZ2sfy4sDIuhFI3;8lyUr|gstkJ9WgW-g-4bbeVX?2{ zugG^77Wq0P%sO5mqKQv5+bS_BA*6Mfb#SUao0`>O9XeI%8Jv>x2j+M>beMJcIrj)1 z6U?oC6YKbZ-v2V`VI8b}^Q5VMJ~mQWahPcdvySaVH1!D`qw*oNeiQ4k3pa2VYG;V@ZIHm2I|3laXSbG`r>Im5 zV~|koZAqNcMFOR;g&M}H3uoSG;nFi=Yg4RU zkU%NjVtDisE6O^2yX)CRY<;@53&E|OZK7{?&jS*_FRt{=^6St>!8uur8$E?I?Kp{QvWgHxcn}em*9I* zp8$IKN=Bdb3_UW$5*QOps4?ol2&P3!j|{N{ z#@tEpsP$InYkk(<=!B&*)u19Fwml8tzsGoDreY@)s@uiSv z9aB#)bGlK=I92icc5wA#7?o+Q*4!s_PgUcGSRDN(zpPv-E1fD?rKnb-pL0H_tXwH8 zw6$6aX+IyPMoJWcHQb@Conv|-glzT2KJsPMImC;8(XC2f^+|E?O zOmN!oltP+y9K64QRb{(c531In)_}Utr-XEvbb&RwtMe8@Q4w^GqG?VdW z07zh;(9c;%&Fv3Zf8Vc&_)@B@^qj#b{B|XEpwceZ2TMJgDvx08cS<46`Djl$A4YlM z(nSJ$kq&b{vJsJ$^1_6U!S^b=t91KyZb_Y^^}!O=VZY8TsdF8ptbx?Oev_XMSMs4- zdvIo{pRwwf1aS@}!#2$4ei zXE!Sm6?`JE@kewI0AubXl6@kyFV$OlQE#-6P+=ui=R(3VRSKMsX|T_LF|owmL+koF zx^K@NU2`JAVUa3-BFnNxbDoZqb0koT!%|O%k;C6-;Cx^V65Z!zURHh1voSijK9E2u z4wt&Sv`-xK_ZgVL7$nNSlZoo1L5vPg6%r_=!lmL67=y(Ahm2sVs&YHwRAEdk5kKch za9E^tYv($r(v7w&jEN<54Q{G8BU6?b}enP!ysxT&&kp6EN zBTL=Ako9m4BEeyiYPR(XyS%mE_46zXFg7pVpxjLs9e2Dzv5>_uA~9cCSV zEAdKK$M8H+(>lyLf@>UUC49!Bt$_}+j^G+cOJVENVb(#d-ICU>Er8M?mO)zyPX`fm zXQ&>fV|e~4_Jh~a5{CNla?YhIwpNel*yo`>JR-hSN=QFv9l>)o$$2m(I#sNLbFR=XJq>p&vDR7yxcXC3|;$6G<7wZ!(SpRdJg&Ui1<=m|9V6h1cGfYBi0A#a znvUUlyNpr6RvFx zRUfjV&3pn&7ik^#bvUAfQzh?0DIMl~kPb(5=opoDq4k?shy2kDz{U21W1k+?Scm>g z^$2AR(le08_NL{@as>#KQekB)g9OGPf%f=+6DXx^Ol&?d1_?brGLh}IH>)U3sV>IE z5_*i9SESC|c!VCW(lfBV8OHF9~cu$NNpMhtqnXKv4pPY*w(%(d0gdas-Pd- zNvJlhWaAOKjm6FY&TgF?)uAn!q$IYlaOqOcqxnEW_Z7C{7%5;8jrmK72l7AbAVVs&85odjFz{~{Evr1Ti|Uj#~_Mb-J>c7-uW z1V>JPX6cOv@!MKWb6StAwABt&N{GYa z)se7ig)P26x;}&uDWq?eT}8xCaaQygb0@*Ok+G>lLWPyoW@ojn_uJN8DdvmY`kw7U9OK%Pm7=uK@rk!9J(7WxemYNa%Kz zo}r~uLi#!P5Aq!}#di?vK(~_g4E>yS;2I~sR7yxcXC3G*g6)-4CB7K?Ipo9TQj0H@ z64K9E2c;_N(WqlM?b_n#u%C}8p=0p9s@$Zncxz5qd^zLWbJmBp9e34qOnL^=I?So^ zSE=3!mTnpRUfnYEbIv&v;w=(i3Tf6srx})p;r6O&9p;?-r#UK09GjO~jYfIxfos4>fj#2f2Bek3xMR!;{LR*9M z46FnFoKxlR;>6ToN=Qo~%{kvsdrMXQy(P}MvTErWnn(%h=d6RgSS|5ljW2~X>%iR) z-AYtS#761o(5_5_{y4XHN+At3==EAmFWL|NJeG(rrRrbL8PFS7*I-IW&oa_8bl5Me zsK>943APOVCO=hC&$HNhiL_(=JeJV243!d@Q|ae^=|(-av}I89L}`84rlZ!!YgalZ zXmRwLI8}IRsneShQn}^6Eu|p+oKAS7C!;8Zv<|Zl|HR#EC7QtbZqV8Vcf8Q{A+5u# zgT{}j52PNw(lc<5qQgx1JKNs+L&xCQ$K}RzIGK^5cS4ZR)<-{Q9psl`ieHAdOTkp> z=UnGx6S-Y^{R2lFE>Y?8`Z?=BBEA&1eAeNYm8XN#E29^VulhNZm7gk^*Q$KnNwW_9 zm+E2-#&4CZL;ooPTez|-*b@JXz?PxHJnM@kFb0WW+r?BNfl^rNTAtU=7=uKx1~rrF zVoWR{c16om-wF^+ixkgr#K%t)oGR3TQaC5l1na;UB(TK<35>auQ1jCNP3V4yeI>RA zQ3v+BVA~ZfoO6sp0>>4R=l@)~vib?8MEBY|Q>6)%;!#cfXa2VilnRc6nn`sr1_?FJ zE32*LIp;{Al%5&H<^yAp(Bu4n5h$hSL9qnJAfaa&OrSrUZsBScE-hR?k0pYwPx=Sa zY_E7mMjk>jGZ~p7sj*L|kO?}KVJ{?)(B+d7(o#rss_5L=lGE^k9kPYg$$EOm;o8|k za+0r~vkrgW?&*jxg*5A+Ju+AJ$PzZ)w8iUTvvb{6XKXyG$@5quz7&riLUXFOco`LVx&shhZd0B7xXI}B8 zkY*kJdeEBzaGA(ibM<0INcPzE^H?IjR7yxc=Tyha(Em-KlnTc? zkHQ!vxPQq0eozMzD5ZN8=A83^F-Qb^EuKeVOe`U7%rIOyk3s@lxNf_gs)7D_lo|)M z%|Iy*EAK5P@H`4*kQmq@6Il%QRbv9rqcG-9Le8Uzn4`)#)kQ*ul~k}tQL3WnYDl0I zhjl(E=iYe~=Nw~@;JzuR4qoX-&!aFVmeBPX_9|+%*}{?cj!QmXE|;+G=QvvO>K;cxOUkYi?M_=$xh~JA+LfDRj9uPW4-mChceiQ2;pNXhHgYMfwLOD`Bq&wH@RYy^QUuKD4DqBEA&TQ0I5(P_?E;86A!#bPT3MwHTeM;C_jW zUc6r-qjPYij@>WOQd%GH=*XM6bjkZO>KCp@PSn9Um-z$dL;vxqrRY$E8l6#xS0CUP zuC>P_RLiHcRPYN&LWPwS)@;x(9Ajb$@h>wB^b1FV!y=`}$Jm@Bfl|8lFoAyI7=r}2 zWAS^|WlI*$LIS0*<$Gi8Jm#3d7$kK6kIe@XD5ZN^EP*jdVE^}0RaH`jF|mZs`2qh7 zlEzvK2@Z>t9v@>9 z$3bsH>=UR@Kj&28m-q3d)S6T4!1G#cuewL6nT*bdze@FHGV!I<3_$Dnj^Q5S zY~fm;TG6YP&-p-KocK~So=4}@T!a2TgO@6;Lss!>G|rCOpZl#n>cxtELQ5gdI#Q=U8tt_QvtO`FG#@~#AM%Hqe8Qd_>FkG(*~!25 z@WO`i*YxT04Ekf+j#5Y;%zlaJ-ac{i_HA?5>{i~qBuFT!mpc8FB+of)7Y+UOJV zE|lUF%5&u*M1)I(SGotYAGL25|01G@Jrqv&^P$2@2c^oPRCz@A$yy3&2`e2d17)Rj zsIuB;SDgM)K!+kenf_?hQg@%MrSQE6vmYmVv|m=;2AwpAZF$ZrLc4bbHte$}z4lS0 zNJ3gt>)FTcvI9m%rtPem^lziTDLm2(8%A9sCK7R;c5_e)>C~r=)0;+nZ!(MmR95Sv zWu@v|m6fjN?vqtmmDNoutF6(p(o$0AEG1!;^ZN_0HQODmWbGxtI85)FekbfdsXqRF zOMqX(&y_OwQJ7*JW}IGdumI% zp40x`L(f0;p3{jU5%r09ll+lU3TdeumGf)czH##6Rg_S*&S9ucupOS>5b zkK2dGjE>y+^sL$V*L@WJ$O{`rn26m(lqCYCkUlu{1idNUdy`>2c_!o({$-l;DxL06 z*>b?{Q+jCRKxBrCQb-#{B_L1=>3gf6qBni)y~!|Md38j1x^*smZbDz{!~4(JgAWal zjG4d24R!s;-n=K(lX~r!L-uPY2Sqk7TtmI$nGPR?2Rv~;oaytv7D^#KYuj0(hxj_$ z?7HdnUGb`$xkxs%&zg&N%P;#xHs*ON(6=kJKVcvH;{8bR1MR7wPgr@=nYi**_v=yF zOtb(67Q`COh0%1*IFOuh~CFYsa%4$gMw`tY1+3}?Ky;%Q-QJjbbB8Hz| z6d+LQ%H^Zf2S1B6o_ooJT^=eDx4UAyh5 zoGTqnpj5D*HzFNpNXNT9mQ=wQB(U`u#%9X-7dMm+Bv2~Y2R9M%B@rnzd(XodB(OId zMh(t+CRKwNgT%q1C++DkeG*yFbtIK;L(Zj^Qs`G_cZ##Rg_OFI9NCf*}H`4JF=_t5)c@-p3 z>fq3G_V+Uf`=z^u2p&DXb_Fp(;$OS=xk0|Y>P5t4BDzhs=Ha^z4%JdO(*L!4?;qsb z_NS=^yHgFm(eUGW7=uK%>*wva-y7gt(ZQr6opc=8RJSS;DAm5@dFq1${c-Rh>1a(Y z@wvkTDq{>1^>&}PXHFjAkAs!xx3XGZQ0)q1kdRSL_1Zy{s?kzb{%nb3kXV1;MY~bv z{=Q{cN<^7BgjhAUQKCcHtIm{v@z&vA&>=denC3XExkdZkbQvdr=B4s$uM# zM{W1wojOoT-lTFqVcR$6@=MvQ+H_imy|#O)1JqN8d2J~;o{uIXg^12XpcK-2Hz$z4yg3~X0y zcN=B?&}&PdJa*K+NV8X-qZr0xMD!rycOp;4zX@#cn`W|j4?TJKHIN~4;Z^>Hbp zMa9{fVN@fc84)kgZYN419UMQ((oDvpnamZ^fo&J(ZQFVtvzyoN>9_VziFkpC)<1Hp z^z064Y-5J;#h{bU^exZ1?P+F-ImGv3iSS)oAvLQb?md!x&4mrGYeC>PW2w zZ3)&v_fkjfr(5**?bR+KP7zUv2$Vt^>&7r1rP)$(nqRe`vre>$_+Iz)VY0gee7oC< zh-Zj+o(Pme8uiic$F#xWcLp2@H>Q(CwC(ub?voGEXprWQ2FX(gho4J55^hceN+FH< zXylwaI59ExNMZ{jaKyp)mT!KLMztY+J~k6kcfgTEzJU*=kVbumQTj~CyziH3W=qOB z_D*~+_GX$>6VZf-hD4wg(x}fcg6lzC73o=stUh1gb>p*XBgv5~(XU^VC zKT4n!(l{m>#&WWvYsrc}POFKpzBp!Y-rd6+AyEox!^ph-8*>v8C5S*Nq;b4bHnA>Q zxa)LYgmXhIpWqrNk!)fL5$w@{Qb=RD83xVUU7EL(J*EB2IC~3hAH^!Eaq#gut=uiQ zZhQVE5~HN_&IHdm8)fe5*I*0Mv6FQ48+H0gj6r?D^+(0It=v}El@5$SLc(es4CX_( zU0h8{Smk3D>GV{E@%IcP1 zRv3eXgjGH+l8$d^U*=SgC3E5tEETNt=0xoCYY=1by}?n9)*tR^BHrn-WG)gY6!N2rEpeb7?-H5hGa6VjL6vP7=r}b zd~bE15P#6fl@&W$L(sIUsf1{1dgbN@i`G) z{rW%xrGgfYX5sFrXboz+iv-RL45JR!$55(|P7U)?E71f>p?##%B^_T;J_c>BI}c-! z2+n;nk&btWSam2c&!nn=(1KG&S3Prsye=rHR*uX`O6Oo@II>v*10)Qt8k zS;zOeCQv@Id-+IzYvR)0bF+H+&|%iW-feO>u8!e+Xj+F^$1Pf^GaZk&*kva?)-e5@|2Up=^6St=c5A= z`+Xw5R7yxcXC1umxJIi-*1@er>EL`wD+#t3!+4H}C3GJW6DWnW4zrF1l&Vht9VtpX z*GEc-)2`ZXdWL?^`QZDU`0IPt5nl>v*5S8Zug#X0;Rc>|N$aB^~H5etZ zHN>YmAOHHdq_H1>E?v~YITsyF#w=)Y78V^E(i5hgP4OO2i= zB7su6bpJ~SN^w|hmtp*{J$Lk64P%gCOQh=@^MM3Pq3xnwoDvtKIxq$a?&obE<5n4) z4&)bF^HlCrEsQ~e$EZ8=!Kp$5rGldx zmM+F15gb1%m$(>hB^VP+=o*|@ZwAzdj7!13jTS?viTelYKq(IEcJ*{p)u;}PK_WPQ zh!!p@Bv49)g(K^yIVrj8m ziulAQPzq@s=Kg`-%IN-)o`LOHhuJ0~p<}qtW&RMHaRkcB)fP^TuQEnyo5(u!U#drl z6w=y`{TG2!+SZ<{SIjuKfLQM(3WajQ>lH0!`M zPW{Fcla&QX32|8UZTe-0i{q2kJ_-}K#z85h?H7MYRx58N^k1rlF?SNOy2CXN5-O~u zzL+^9Syq->1JB5iKq(IExhSr2Fb0X17iTBy8M4-rY9WDA9G1PT;2H;GkjVQ@I9d9N z*1-8d0;M=CdvbK52x}aSL89fwl~jZA);LI@lnV2>%Qc8=9E?F?`tzIP1`9W?iej_1MlDm^tlLqBI7IG*c%hf-WtLbDDWorBgutXg`8 ze$G0Oz*5vwtV3wlf#(LgpQ}_!-{ySCj68U5pkpNMYNoH>#5!<45o=112I(34Ip+iS z6XQ#zg!FU2KB99`EJdAjZdX#etOIAS@ugBi`Z?>sxoGSdCF@N6oOR$_lyi8elxn-$ z`ruwTj?VaA{hW2+UU+;dDJ!u)c*deFfa)JIf6!LKD=Ro-(J@@-Vn4WaCCp`oyR|s~ zz_jbd{h%IUl6Mlwar4F)1OWb(nSFyj_n`L93=M9P2@tOM5{I!2Y1to!wwSO?kN z==q=~a12+qDQl77`Jf)@WgJu~(QjfMc$TVLqS7I~NVgKshd*cVdaaJ({voYB*z$wt zYRbZ?@?k3>IoHow2cE0Nmr}MwtX*&qKoguQSv#d?=;y41cMW6@AifmRTvqxo)#Z1| z-V44L-=yVv-v_0TMw|b?36u(!m1a_1j6oteIwOHGv4o6vTAuTPM6A`0zjMddQet8W zv8X{ENN8IdJ6qCBs>{7o+YcE((9Uz6%OCIDA)))WSc!OhuQ>m>lTb4!(ZK&xT_m(! z!8v1Ws)81d=R4}XdNe?Sbs&LK*dK$bLIR~YEcFy5Fa`MClPP&6$uqqQrhmK4lZ4ci6x}}>s-VVOpBBrA6dtT%j=twg1x;_ZSTMh zcE2`LBaO$@OO_kc-fy?omFFA|67i&v=CEOW-0gr<^Xqn=4!#X<)TC*ij$gk2)9#*c zT7=&#&y|kHx*l-G_(VJ@ey==NIu6yl>^wX;!C6n=fz;i4(4J9$Mdat%M$+XQNA0>9 zkx1{sBGcCL3#a2n8eASi`&$!SOIZx=3${8IMCB*Un1@BZki z<%Bmf?74SEynHx)GwgglTrXU#afUrCVW}4m)Q5#qNFR!1*abgd<`W&;-5))#MFORE zKDN{z*FEeL&89vyPiacEFb0W*KQFbP>$==0KFKp`;qgbu%;$XuBv9(ne^%H}d_6mI z{0pwZ&Mg-$`1!#v7chY_NKBp@(@m4TZC?$7|s#c9+rIla|5??G@V~?r1$k%ag<~Hw+EzUW{AhG7-KWz7&wQ*8~1WL)hqj%N^ z#vsxB<~n=fu*Gq7U*yDH z(JNgpD~v&c!~9ziDpf>yy_N}#LE_PeHiM3WTUSI|BE}$*Sn$vPQ6EU4l-!1TXMJD{ z5^Q&MeH4DCh1_6fVGI(FJ+tk9^baIZibn&!%Uh-D^ny2|Z5LyZ=yGH$wB7oPdwZqJ zwgh94klRp|jyDhX^X^sS`oI_@mbcjn*5`|bS_cvVsf_J$dM)cPAO;D!aWz;UOkfNW zW%BI=dxh2qV~~&=SCx)K&X8#Tz!)UbUfE+?C&f~u4kS>j*y5dbn8uG_KDa(G1_`hY9EOpNl>+C-YO^fXOQqNHoQ7M1bIU`5CP4%7{ zAY_ihQZkcK#K)EIt-5h@`*~ctr~{=`-&AuV!^l@Vz51{9tI`M^)PYi$Mr^VRjhGa< zkMz;EOAU)w{b|}HkH8otxNpk5i}vB1Ppj_T@%sOjK?`G$2+pst&XGW=_tu=Wvz-|0>qr@M+_P7lDvUuwW_>Cj z9Yz(6+7cvCihJ`nEvNfB7B~GNnhzvUiu)$txvX@w?D0fg9RVroo8_v^^oiwfzZdNv zsDpd3NXgy5O2?p&7sSmuN^##j+4E;#$FtTB`e=*)f@OtLGrl=xk9$;duA~)#J!j^| zQ}+93l@#~14{rYI>p%jfkjDO~edg|KcE^LM zUin;^a?&pR;8%WGJ=t?~v<6WM>pxf@Q?i$f<{Sx>!qghZiwS+B?FtE$`rr9L0;M*G z&fCRz%FObe88hPQK&cj$FWWN<&hc~JG)Jwt`9P_yTd&zOo{rb9FjXj3?9&_e!0Pm^ zzGoAqKDY)k28r9ba)(;nHz0=KmWTvO-CHPY=ysbA{vQNNeX;0<{bN%77=lxUF-Y+J zUW@6s;)D6%RACGf&2Qea&+UFD4uLU9$o*b->cAKzIxjUse^+hb>)6t(Ty(aCF-XYm zVoJxXdrL%TOBjR1=XYfW9a4jwbCkmRxYa9b=*H#uKKe6PoU+0gBx+C19_oHy9-pXJa8Ih6LN-97vAL)|F*a? zSJh&wg)vC%HgkpQBDHMkU*((DS1P!x;*L=8{B`QHHa}tjCwt9s7XR|pU9imEZTOF zK&hHz^MfL$yoX?Zv!!{g&PGpVE;oTAx z-m6Bt3NbpktdKw{9_?OUT*)WiJNtGt=SZLwk9PbU5qGvkBv1-RBKj8j`n{eGP8G%= z!Q*4w6_tG*->&`H8##H-fCNh6_-Gh!OgtBDB{*l`RwA=7Zk2j|RrbSa(HcZ4q`Af1 zIqTz8VGI&n|9ppOu&kKC7$ms_b1J?ZR4dwI4xkq+LRIwSL=3(AZtLnWMQVGI&DbEaEpA3V75c$f7H zZc+^*fl@^dU$OIVs}Z@2c3TXi`D0ybw?4eQ=JG53EsQ}zZrQ!FtS|EDze)WIzgW01&k;F=x3J}?Fexd}X|gG(1-^6Mo1Jn@!0haFBh; zZanq%Nc(J+laB7VWIx=zW#s<7#km} zW8H5xHjD0{U+M-aq;p*V)2?1~yszWsZg0}P3Ej+{bek2vD@X4wcF~FBBS#v3mh^0R zi~Yt|6TC28NkK#!5ig%zW}+0*sGIzKDA%Q%mM~5Fs^j^JTkQi!#zk^HY$Qvn`sX;8 zB&p)CVN9Wtz16aW*@Xy{LVDEuTkUfD#(QrvjHH)Km`TG5xecgvFVDGP-_GAu)p?7H z_UVUT^m03~?FGBbbQLy?70pVR7lsychY@iUq>wgeUbK6E)Wmxe?Lh8WlX%h!JIkq+ zY%j>|rVmz0vwBW`$aZ6M9}%fUpcK;5-c&x`o73O@?E5-luJdLS zkK64gd`Y8M)#S?akJ}C3`a1IWnnJFG`MF`VBqDW*A|!^Tkd`n%r!Pj9>~sdMXytYs zoMs;Fy~6I2$R}=9li%pN%+A(@Pj$`Ygcq0DpZ>&Q)=`0oPl?!(mS&<9($&6LVV}9V z#-k16*;1>`8G{O0y%Vaqjql45+Hh}9@-GwqKn>jReg#G6FSB4YM{GzX=So}Krg{mUOKyf+!f_}`1VTN37)TN0{R_Y}Bj z|7e6FpT1Wox!u9b_H!>(^>SOk-35F6+r08JsjLPPag>OoM4%MXvj$(W=j5*Dy~!|E z&QCSpyxco{yk1XN*0S86PuqDypMTTKD<4@$tA0L~h##)@4xc6hrI4<8JWuGGQ=ROgGAX_PulV?Jg9ec@V6yWaY)>BhOV?l^pZEQ>>#R;z_X`l;_GOesZdn z)4qgZPTASh&B(|Udj58PuN42GmGIajr6a$tUF#mrf6H#at(0H7yRWr!N|!av1v`4W zD224FMOCWi&MRt8SoD%}yS`VBVls@T3}YdQlamol%m>J?aR7fZ<;s!=Vkmy%V5GKZeMkqn91D2D{ueZYr8k6xa3pBo;7R}v#f08o?Eoj**hrBL@A`X-y9Az z&6Z(G+v$nxFQ+*BsC4C2m(x3DTWZ|-xxnRHir0tEbVzoIXV%t@!wh=Lr zh(eTeltTLEl*?q>t9ozp+OA7&*Rxmg&NjU|fD_ChA!nN`g|viK4UTNRJAAbB>&~7= zy{tleS9q;~$0+pJdUn$?yUm7Gejl{!oDUD#`i|2$xu=CvNTX+!VeF=yucn+&q8UKN z=F9D&vw!niwW??Krm31d_>gNKEX`qV?U#wzOvGX8A1H%8+Gj? zC8wcWir6x+#n8N+i0)(BI{y-ZQb<3TcEDbEak<~FUN|>6{7cvVUY+wST=phq&yw}Y zb5(Vws5=CdyBZ0hy%fsf<}IpcD8rTE5#oS{}D^LV4BJXd{i zZ;gCbrCo}MC&hIj&sBYF9aPBO{LpH%Vb&^^jAUGj&#cQ7ns{G6ubxYNkSSEZMt;A} z|0JRs&EqE1+y|wQ4vq#T-HPUyc75k0)!>r#XY4Iimw0uKC!=_-Y8Y9URy6a~sqZW& z0;Q1Nc=kN~>cRrQwKomrH5U(i!umN|73=HG*+P3i$>GJ^-ymD)$oJX2v~M%Bg&GxB z&kf@fBHkbQgq4}{fl^5Sb39upU+L_A&M&<&J+a!A6z4BW6}C9BQCw@-LJi|5vhBCX zwr8r}(?Thv#g3`Ad-B@@=84Dhx-U_xUb%e2eyw(fryX-%dGHDQmnp8F^SR#~Fy|0) zfC!XAx<>u8_B$)2*S@@IvAJVu5w{P`+p$&OsT!;nntxV(K~lCK3_dhCkuvpjLuXNH==- zkEm6m$;jm-=d&SQtdnHns<%oAC6DK}R5kfz)~wNX)j3nv&{sv(b1JJ#NzQsA(gvoP zD1~&f_6g9g9;X?2C7Owkr4eUS?p@vri^rm?e{8c0v|i`+^NLHhdHGOdRDB{|B4QAY zwJ3#j@iM!-RiCm9W85BA!`1^5Kc=<8o~ijlwK_cR)$_ok`Mlr7W~s+lYSq%5n|P0Tk@^Ro_KjYUJCwHgKCivvNh5vj zL_{I;9+TEM7D^%g*7Q7~nr{^ITRV*e<_sDUcr?H>ukDxehSE=!^Q7>+jl5ni4>0Tf z*(mWE5h#W9?+x;W?5`j9b?i&7Z$3yi>k_rZQD5f@bsbm0Yp;@aZhdkpt6Jjyc71as z5j1aiQ3`3vAFqlHqv~&+oH|{OC!V2Hp~Jhy*s6-S5uw$=MD8(P|~Y|pO@wh-E*p>UxRnAY-Qyo;#ne43h91@^HTj6 z^=t6)j^(YnOFEc8P(R0aNx5;_Pj$>2+SEr@MT_1pZ_Uf-V7f%06w)8Pm@m}gqjG+# zvb4_WhQDcO{hONRRQoM+=%4<%yqJNHWbsBgZi%yMWQp!37{;D9Io*H0ZfH&CmIzWv zH~21dXiI@yem;I{)zVpI-Q(<_`VhZ)uBlNKmfEZPt?+8I{E!UWPLuKcHOl#P%6Tuc zC6W)eACeEA??}#-rJh7NzfL*dOaw|HEjd@SrG<5Ac2RxB;%})wYNwyK%Vm4on?bhU zdfv9KKjW3cpQFy(4`q4QpIMG2qWAXYi-%FpQ3~muf1bBr%=5Hgx|uRMIPE)@cgs_% z(Dvc1FSv{If!o2UNW?otpcK+*D-9!i@d@UJS4&!rvQ%*&ADlh(@x|<(cHHYpZj(JU z`h}eSY{@Dy!7Sdqr1es^DuEp#q;U_3cBAGOH9w)1@G_vy4@pAh@`UU&pVo&=y|NNi6&YOK|FRqrUS3nBs-{_>N zCY>}XTe7Iu56;>AC9Hz9M^<{sHT&6)eZA7f_4%aDbXHWZzhCE9YyRLIBH~#hPzvd$ zZLixuR_N!a>hH{>ouNNGYz?A1?=p9j{bbXLo|PFH+H5a>dV-hR``c`?$IMh=!K_-%t+yiwCwV<*RkjWGW3No|$|tSOdV7AJ z$$nX7B4P;<9}G!zPzvcSTi4r0IrS#GHG5lvJNxuSb04J&i5IS}x4-E#*(=eYj@#Q4 z+@)tOnoFsFpcK;UhHtP3{yoXBk7N7mIoAtTH=FJ2;bP2I^2WY;d~)R1_G<%gGK`^L zU2vW~-pr~``N-LBqkZqG30}^n*0`iIkJxBmE;G^3`MqCWa260ziU^cKy1Ko|uHIR_ z$uO?une9B>teCZv@_|J5GaKy(mQVE39@No2|7_>cCdI7L)Dlq&X=yR428-{=<{Y{B zuK7x&hl?>s$+P=D^6V~7y$j!D7z1eU^$6{~9-;cca-TJLtzEF^G%r={4z96V7oO(l zdOIVCZ%JLMebZSQo*7uwyanpajb_fhq+WnyJ3sYhbsMj}uO>EJwZO24A! zA4}^wKjrUbp+&|O9a?a*B?lfh8_sIv(EQ2@NWr=WS2A?Za*cfM)Bd^^ze-cHx=hJ;s*?&;zYS@zq}-?`dtSU5+6o-RruEv-bARl>c!-B5KAmWEmYEEXsWOw{5n1LwYIL4JM1Pw5G^5=pltNnOK5BIS zh<1bb(mpcpA>%Gb-3z%wlb*WU>$UP+t%{I{C&ej|=PFe{=PG5DI$pzSnwnL|+`9LY8FYn3~+W8s#;_)nFBdsK6gz7tF8C==@;Bx0av6=QxxXz{D z`1L`=(?syv8Ksbx{SwvB+mlTkNj7mS%>d+_gWE3d^?du@P5br(?4`%4nny%aBE}Jc zQb^+-5Y5{+J?XxB?SAJ}*{7@*9=>4zw!WeFE^e>y*M2TCp;MjYC(fO>>m6Z#YSxjL z%IF`;!^TnTs^WLTAAP&Wp0aLvoG*)o;5tXCcyz9h4<>0HNN@}i5>`YhN)?}$TpqP< zp6Eb=!}7iJf~$EbAIoS@w9ViIlYfVB;@G|R!PM1vq+Q;`UrWsb+Awy~uK9^RY2Mjg!g=;Qc{9@H_VOeNv+qZ` zamDU+=1n^D=HD#7O?`0nh#^MNrEW`cSP zdA?ZUA*SlQ9TBhmxhC;tB2WtHc3ZdE_4|+aXv3IK-a)ONFJZn+USZ;S#`S^k6<;+~ z=Uc70%)EUIt1by=-g5zEM_Asw>g_st2uW8&J;WWQ1pA(pNa`(xX&9 z4iM3VW@O}lWuX+(!4+i3x9xEKm%5o*p6?aNq4?}`&fn>m;GLeSoHr(7OY?5#`bNE6 zl*01Ca-&~Dq#gR%v_rp_N>}zm`CYQ#&N^g=UbXf=sHP9bBdEd;fU& z=DbekbkecxOqS?QqkIv;@BN`e7Vtc~|J`-rzV$koKW6FWq7>4YKe{XI`SQ-9iMILt z)Sm96RW{l)pHaItxF>^qHFRpZxTN#-i^-;WZ!Z_6kj8xt!^qQSK=@5MXE{PU!g5x` z`w84C*PhMl^;8bmPs!%Dt4c()BVr>FD223~N2xW=V3ICM)JYlDlEdnYmcH|;fSq@5y6 zFSZg)A>Am~IWfFtGU7!52c936|YVAvDt@iG*8g6#V`TFlJ*t44~^vXoePq}WocD`U2E3weec@rXj zA%f2)Pzvd$UC-Lrt}XFPH|yS7?$LiLc&k*|b>x*I?mEhI<;(f%zFKaN!-|L}g|u38 zo}jUIIgPc?(#l14x!7jhoU+C)c$sfls7l_AYL86WlJP_&&>Cb5?S-Qh(vm8rBdu*I zxAwO+te%u}Ox1{t4fgbTYS$5WJPqSU>r(ES?`l{Bs3oEl(mOuiVDCzu=+6L#wi%E} zCzoz7I!l#ZHP+4}fY^3*y919ByrlBJe$g3Ddr%XVJIU{xO* zh{!SPv@?WGs!m;d;aT)+JDqa<6Q%920wU?J-*@?L&~tPe^d z9n8n6mMzV7bhgcB!uT$k?{Gci$uI4_(%JTXWP#2Sfl^4LZo_!`y~M;{Y5(;m#dYVid43=~zKVyCDqTJ|@V!MGltNl^u14nv%QUn0(|vj?$ikJlk~?&8 zKi|VpHTi+sH|!ZrXHnQpZr$~UU7{a{*}~-^;vx}+X(tt>kZ!p>cPL{8zlnF%_E0{a zqKmv1BJBYN$JQ}z{roW+KVqeLhQze=e`OOtnmM9&MvXM{A@V%KuS`)2 zb<=6z<#EmnWjk6|XwERx$r2jYgZ!XRyxX!tXTWTBfZUrkM;^! z%iV8g3;q3guE=Jx48avk-LHq%9^Pnx8JbQzMj$2S!!1L~O|_DHHa80UKB=zU(Z?1C z+Y+`h!}x{>m%LcXcQ7D@^jiOhKQ(87^TEJ5j-2*+77jfA=~qeUe6S0h50amyi&A(B z6g>I)nr2J&XtwWp*1$SL`Z@PIX>Y1W&3t`8;y@zqA)AO&(q37L!?JoYjCWgt=4aICLT8rc_2;7NX|(B7JFjz%+Ev|luKmOlYNg0+>BZsdi?aeV9DD9F5x+iuCgK$u zr#29QQb==qo7a4qzvld%yaslW&*&Ih6`g4B*grRpc-oQX@3D%0qrQAIjBZ5azn0|8 zrktY`(!o>>{_MxZ0rlTA7Z>j3ihncrwWr?A9?Cf}H>I6C8o}~WuPrwrvBlAM%)e<> zgi=TceY{%GcfvF1JK-(#3tjS^Fz*}7cf!0+EngO^UFR}HyiUaKv&$TmLR!8oW}3dD zqwhrr(ihU%=vzySk-b;mZ^t*$ISzf3ddX~THr??+;LBp9Wq((l0_3MJs`}Hp8hy1D z@VSvw{e1;80$wDB(PTzzr&#XHW`)T;$qPYw4zQH?1aL|JbZVV#+&e9jK8o*kp1riS zv*@18=J<&{12IV84w7NCrPkhtTKjaG^-0_1UMp>vd#bc{H4c`f*1nHgyG6YgrI41^ zuKIb0<*82TPsb;Ia=Ay~mIC~$vDB6ecBU`u_&%v^X&1-edku_gvhwDBhx0D#weKc| zC(~|i9CFA*`CW=klA zw0N# z8}ELUyC(U)@?7aaBAyh#SDq^!BZ^OO=2OngQO?oJ6Tb|?Z+i`64iSBc;O`Ak3TgBT zHH_sS^fNm&`7F#|ZQ&QI=>u|y#`PKC)tcNorSkDM5rrCm7UunSltLQ6aHVg<2NrU# zlwR%7HzuyE^|>|39tpRr;Mqhc`YI)R$<_7mw#y%LvGc(xSyVg&C? z5euj0qKjITbc>ao;LN2|@!TL=kKeuAVoHKvxDBI{om_N+^EjmnrI5xH(jKx~(Wz9o zzWE2G3crwSdm?k_@U+}szr!yo4P*G_0nSJ38-;IE>B?Q_T<$o^;OJu*fA{a<++XX1 z@DEvf1*DLc8_iV>X3#FtjUPtvw;7hai_4@K+`vBSMgDS9zDrH7ndZFt{fH$AwEjRT zq(z@la>Hap)C!81#gLOSR>*tuMHt8kk^=A@}v zO&N>WpCRSxE%wx($9rd+OGa$5&-^gKKj-{_i2Ou+MFdJAE#nox$uQm{;z1&&OwH=V zBY5l!>flrrB;q?F}kX(>b1+IRh4)OtVbT!%d31HD%E9JmiY@WXYx{lQ;-OI?_VPZQ=kuTXuU6!v-9 znNTw_gZ45`(OyO$n#mv`dl|g`klhcp2aunLtn_OFM`*T$Qb-4NTqNJ9nW6e7ue|VP z0{ntQZsk+0{Y0@H@1_@=mRMA*&bPHD@MIXq7Ki@T2CD)U>L}@6%~b`z{S5sUPt!&I(#h6!X^~ zIG$I2>Lz`qUecT0OIVHP2Z-3`uRkP)*BMAlSe5R@Mz1-ITNq~BEj=x~6At~l(BF&p zcj>G6!j%oP*^Zup?+1~_uf7dq5!sMeX->kcBJ^$&e<=2*lIP0*DhJt+{50=jBAyg` zP|0)UO?8dFgDkqMDb2LVqSCDqztXJ{TqfcV#a>$SdlT<3L2Vp_tp zcIKe^_>G8$J|Qu&I#9P^d`e$`ZZ(E@_kQ5*Tj*OU&s9rYOGKu_gFPai6kAStuB>QQ znwNauGs(+2&p+fgW}dz9UC#Vod9HLkOLL#XA1WfA6u(!VD;>_D1Siwem(7o;eU;fn zZM1ov2$$#wWAcRxt$QJ|@uP!DFKx^ln(|Iv?>T+x-8{ibPP}YByr7kfQb_+uXOM>n z)7hj~AM}Mc?=hGalZMPkq7&)3n{;qJiw^daqnQk~t5m;TA%Rj7R$h7=h*(U!UEE4A zM#B8w#JqV!wR6|>^chA)O4YyAV`B-FlCWyKg~qnC?)~6^N5~ypT<&;#mV{M(w4?9z z57QU^tV3eB+>w^Bs*hTMf(5w7!F3IKG1GUD1rD0eb!q3dL?lp3p0l5|VU(efrsBc$ z#oOsWenlf5zdUA$$FCYcj`NoZrAIBkhejNfLK?r#F^qd?7j+VO#D7BbUGZ;ci!A=_ zoLliVP?mZg?bOyHkNDF>pcK;L5wFUMzqM>cCmNs7p1yoJ$>ol8kf=_?F8bDTAGJo5 zLR!AHR5e(KcGVs!Il(MSL z;`8slRLNa>EQS3}!YWmbI(D&ck5Yuhuy&*+tWxy_t>!H{|KJt9oQ!a}%b5q)vz&#f zI$z&9r*(~p4%Dtt3TZh>Q8n20XbpE)?o!s>)UM`N%N!bCfp0OUo1gq$E`BfW2N=fZ z$7{IhIZIjXDOD(i^xF?*4s}?U+Z$2o#J#>@9iwH>uwlXbmJ(jv>)kHJGYeU5t6qDN zh}YXUaktQ{52f%6av4$8yyVFFr`$FhzYV8SyTbk~-sAjU?Ei+bIQ2>Qk4iJb+pMZC zN+BKmZsHTVzvSm7JI!oVR`SIemlfY%!uKC>S;_9OD&46>Jh^D6*@t#gQ3`3i6~i#T zd$^pt`w`^{C|(czUi5m9=W0jznbPIl9FHm@o)pp?HjLb~=6swi!&}tP@e5*1RWKiY zi1>pn!*C){3Tf##%9gC9Z;|h!vg${zq_hA1F>6P=60{}v(YMG2=v(A+M4%MX;vb;$ z!MEZ)eQ|JjnA4^T&J(84JmFiKC$Lm-&hR4as z_CrQERUbW%_jMw}Yc0NJ^a|WziZtF%Y8bWXq%ZN>ICC4Vqok&|7r9;Xg?{f)&f9^O zua{M??MlRxbnn1Y>a{3^wA7~RwJZOuWKAmkm{Wqrs2<GzyX^a@ zeC#2j7ZG`hKq;hushcft}A}w>^+X}m3ttSw|Xkw138Coj@(29 zN+FH<=+3L=B}}@h(B+#7#V?%qqw&3XyC8l4LHAh}Bcc-#D1|iYGmO8+KWRK}#a%lm;uKE138rD3oqO7RihQ=mQrpEC@rUBF3VxUR2oafy;QBx*q*0$?+(oBLz36m_?&}M9 zi=dx&(7$91eV5vp?(5q~1WKW=iJbPUvf_KZMw9nvep(IVnUL%Oarp$l?K?!oYvld; z8kH4FAuT&as&sSE?DfLe4c#!!eX#Y(yp5%TyC0p2I6c!Dfw-sK&fi?p)G6AYfQ@-2&OYw^t6FiMao$Fy(Vg#Z$l-^@Mbq_QTIa5=`m?0N+FFq#fEY5%0P2N-4bEG zL#TV#yrDb~zu}z^;jfb5Z<^4T#gEe2$CD+(ZIXIgD24QMd-H~p?Bn0@uj27dw&`vvS9YB^z4EIqoGSbx#xTAm zVmkTu(T#EeDWqj*O67cYwVu{5pUqs-gFJ-rs}0#(;<>u4ebl`D?&@@72s-4&)=xh(8!*tfCI(+%TaK4}#^vMZdeIkk4M07wU| z&xB)7S|jW44)ck7DiI~>H}~q6iLzwjIPI(>FIgp(s+&ijwCXq79Ue*qN+JCoorPWM z+1#Va!jTo7l~TwVOl=p5x^zm`XK3??@%w!-cSo0R-_5GhvygLxR;eh3bWq3b%j3)! zX>EImbcnArr@i^;?4A!S_X)hG$}qMNQIv>p=&M|mLR$Q(Rgbzx=jZF_{G4vBbLBLg z`!?1Z)}~=(qVw~jbbfvx^>dU$TF%ea4&++eT^UO|Qq`#K%2>{f!(OW2mw0t42Qk4*DY@VV!``d1NAn;odajMdtx~t?qd)tWbeE$+|CA^Xt+azfo#vmd3lo%l&(izmm2?!W6^Yg$zYC?LEhr+FUxQ=%?1{E3jzL1&vD$~rN(9aFt?f5{3lJzJ zZCVkBsI2&YtzxY{nU66@NN-mAi8*{7r3U4U_78p+N=e^T#3sK!Mtr_H+Rr&AK=_tH z?Lg+KU(JkkwH!LJcIDS$+3L%l1COtG*AI>7b*q_o6T!bXfl^4zKAakz7t>zfx3oKW zn(`xiZ#+)OULTJDvOB0ogX2ULrQN|d>6Q(YLRxkQ)rfPHZe0A3Zd@EgXXtq2BCg4U zy9S>T(UgeuwEjRTq=P$NtI22L$-{#axqq;4g#4Z;dREADHFBmCkt@>>kBBG5>t%Va z*3NWB@5&iH{`#r>vKYTt!gmr9!%|2~Sfy&ntzqF_|MoL8n)eL+Za8|uqjx-gp)h24 z_?I>P&F`M+8TfVye?vU@CDK!KPdle*|LS>~C*m$3?!)01r-t!65j*JH)H6h&6wzyvKXYa37mUyS(>=)efg8GeZ39Eb{Au*hGq$R9c;&r-9udsiYp8RefzYBknPr^#a z4Im_j--Wbz4C+YEBrl6U6oQ?i=R z>EIn(pu>@OahaeL(g7U~N+B(}Rp~Yx+|K-* zyteqpMLc5>KW(lx{6%mo-68GF@@Wa)j0vTX7Qarl`*FDVYUh=-Le>~s*W&%n;&L8n z!dA&|=3@*J=qG0wFMQC?TKdWU@RnU^RZ$94B`5B`lzlOY?uYBs&)QXcZ+KJxZx*5s zd@r8F(+&&i$k};+c;MxMfirp}M2GSO{EdDI>MP$DXZ43W?eYia(3nv#xlF#Dw*AmN zuht~2tWOR4C8+MBl`oFOaNQy;VO8fZsbAFbY7kevvMOflEMaBa&l2$l%>ua2C5EMt zmawwzx#;_nRR0%_gSA3-MQU(BF&tAQ2N^9&K)cjyLD_o@HSof4GlGWeSmIa_wPLqNFg2E{a8V>n9moTHapPCsO$){ zB|}dq*-uvIQJrX}RP49Y<{aAJMJc3%-)4mA+l+nmZN^oyyKpQ4{ZnlHUpB)`wqI8pc5)&Rj|i^WB*! zg|yttrrNH5o37W|(HEHS+~s?6xh=_a)vl0;C&g)(=PDogyO!!)Ud?@Q_99`W1AjYH zV$^%tCqU8iCZ*%uwnLqcX-4?i(jI}^bkP$`d}dU;x=d_`c0&}XZ!o2qv`kV_WHkf_sjQm!*srBo;AR)!Q{Eh z`3IxFcWU~-cNb6U{|Ni?c$>=a|BdS!az*t~q6rN$^f6uIJ)3ir>62)Xd`PBJnv^LO zSBNx`5;8U+sZ7^+_TgOfm?2ZrCyFwq$Q1d#*Is+w``&fFuiyQH=e3{pKI<9QGp_Zl zCAGEhTJzVSm5D%)b1TN6X=S9m9C^?5I6A|P0pbJbaUKMMsTj?-s*ZCI+V)aK%g3h! z!M^6~1R?ykMwUkxms%6NuN??PV`_K%FuqsjO%_fzjs#-c%5;OiD#Z|a7 z+R|F8ey~RQt^?lE%Y6f0{dUQY`)$HE|0%6i3!we+5)jvS8kA8D2&Q7RXb0NI<7fqm zuXcPzlL(?O`lFV8kFzf%OXr?gBKAhna%2Wzw54@s!1+TEe(TB!OHL`$Ci`C5?4Mqw zwwBhmVua-g6{9V!Z8Z-&*U7L>m<~_3ye}~;J+aegn|+-7v2*>j;hD&&`5j!QVzlit zbSJ}aGg7wffm}(%vb!2xw`5PW=f$u5I@x!v$1L0$9Q|Ew2a{1TTI(@%b>(>fJL-Cq z%GY)+HiN7z><^j!Bx7f>qbl|X^*py^EtjbnZQdPp{kZGYOJ3_r!(szo4*Q5_>p%V_ zthMkL-lF&LSW1h&E>rREn%4-e$D6(Od-Z~7f-)~H8m@hA9@vG-(%M#)u`d~&8?o@4 z=)_Zt{nll)rIkn1*)`mwB__mbHxKKhSO*n;A9d;Jj97PQ${J&JW?L>h4@mp4?H4@g z=DkIBnTpYpmNSF4?k+@Q>lDl-wj+}oUc7Zp?o4FgwH}y#T$_E8Q88NEswOPxw!wmK zBUT(cZOJObw`$>=yLGUj`w+|Uh#oN&`zw2eDXnPwQ;~dosj2&`35Xui1JNVy zMGrC+qb){+_D4rVUA#4Tw{15Q(uyDamXcX=SYuztEUm3O2(O)f2@sYeJ;i8CYY+C? z-77MsSJ(KZV{$X0zH#MLZCW6?vyT0F5|PGR26q{eJ-s3=fPf3o{FP>}QvMx7zWO(Kd}+26}_n9>JSbAg=keAZ`uvxHFphK|i#6UF;xY-gkse zs%gXI)|n$_o5oDoziqUrap{4pS_E!bZHH>URsrYS=SzQYi zzXifgDiDiKHjMN}shEnbpCg|#)u`f1oIVJK-fr?xyweg?n@pY^QPCV<;`x@n(3jKFN|)8SVE@} zODLm@A00;Ym3`~U>RjkT@M+ZnE zQ!$!l+HvsGJN_olI1gdPG0(%&w`RF2eQu{o?epD0jKDeSIYRhXcw`Jp#Z-(oOF)&9jZgOX`d4U{(GRaV_yq@3F&bm=r~cl70!=f# zANsmX#pn-VdAKt5&O~>tU5@kWi5l+ak0-{?qd&@2DxUeDhwk>zmTc+5RyOb=_*)Hk z>x_vpv{js`7|s5E9cOsYPG0%yRoyYis>jWDlk_c*C?3Ixya;RGi-WXZ;gO5!wlLih%r5GtVN zOvPyPgrJhx`R5*9$y=sm`~v%S@8xCD;(g-&&Vt`Z$^DFY8q+>sR-%Vj`O_&G-P-jF zy}@F%y*|`k#;}cLy{&ux8!2_7Pbl6M&t2hC9fGH+D;uQwaj()T;#e*cHh zgYN(lkETU_Mq4ozqpcoV^YZXmSL5rJ8REHxbF3aRbMi02zYk8Sk98OnLuAs3*{aFN zv9ql7v-zpgK9_UtLU^051Sw%EM%#H;$KWvdzZ!y-^S-~Gow*+2n$H4aEqq$u2?SH| z+1YjmdJ>+rtZL*jMD;`*ch`JCNKdgXr+JOg9?XK*h!`S=7Qq{Fred^tjZi5WhrYN9 zeIoM}`y{rTO`!_=-yI0Vd>~e0_F*bU+a0O474CiF1JPEk(7IN0$+4PCA6Q!{;wvD& zL|at{f~gp7ZKXZdf#J1J2t$ntmckEwB09asft9#dX*aYaOdF0i|s;rMh(xR6B>;5?!2>y zy9!Z5n2OPLuG>qLd!5~BnfEl0`fEwO@oAa6KDozF<82?JQ|z2RVyRf_ zF%_fDo?7MVtIxZ5o1QBWY2Tx7$amZ9p=YD>F01YHvzH5sC{@0**L_d^$eCCBLQ3+e zcxQ3#Plz+Rvu@(@_hpyy^<$5DHR|V!Oh>60!Bi<*&PKoJT-%SF2h0BMMZI0+?};47 z%E{iWOsgv;G0m@*YT#YhdB?e=0oxU=TRUJqzJhT|q``{0ZWcxdu%w(VAy zt$b}&(|yTiAU^7tk#P*GGgH|d_4lHy9J1@@W#$mj1IpUUH#IKNc$3t zmaN0P%d@_{5|WbeD&aUU^&b+s`}D#kWiVec6{GE?jm}py)}?wq|Mz61!iqlbX~f=MX2~57Jj^Nv;Agp7jAxvq!kPAKOcSV?M%O=Ev>D~2+NVOGuqPHx*lFT zZN~ekzfg0o2j8&R`zS^10%FofBO1VaYv>k-(czjGEM3@bhIhQDF+MB~r;Hr)LoQ>& z_U$@8Y65Zfg5!~TKrj`fIg$i4mHisV&Gy4|kWyap#AW_PEv@w^LI}(8Tak5}tn+m8 z!voE#(Q5U=ei-;h(9$~Z<^y6yfUq2qQAS%@WjBcX>ifkJomXt!T)&^$n#R&vk07?J zkFXr62cs>mQqtm)&tjMU=sqRV@KpFId>eMc&eAj^GHThP&9o=VqYx02;M=e(_6#8^@=RcU2X%%k0~^bW zfu@=xoUoS@OKX2H!g8eD8Et9pk3a|MTP~Y+QfkO8YH6)`py%`vmLu)XXiIB33&aw{?W+X@Q!$!t-QgYo+I*4sI~C0kFCOKu+8r%> z(U)cowZZ=-G6O-$%p0Dbc#RLmP*9UI2H zf_vA+-UfnS2{4-9Avn%Q@cFUhzMH(N@cZFb`7WBT@Wh0?f?z5}J5E_3HnqLUyAKGa zVs!YW#ZT~b+v|oYp1fq``!>1p60f&1ChV=XN_!*h#@+#9Jw_B$G1~3}bVPjt-#gu) zKOcWx{aXC~l=bp#dFVJ|VR7Nq(AZ^@pUq|}MzgjbujqOWbU#|BI(p7wgrzmA?m@iq zdZGEf-kKd{TzkhN*2C6T@+QjKO5aDl1H?7%z1}Um%D7C$=t8CUMYpY)5WHPVeXUfy z^!+z^-(SO!m5jC?)VP-Whn0$dg&rJ;n3GJ!=y0hJ3DZL)Ojw0I>6%>0+c*AQ zlSF+JcUz;FHvp2@9|)#mH1l(u0`R-@FN~;mcz0*xLte7+@7jpc7jAvZspRbG1}5vk4W1}o-;ifnK-R)$YZbFu}eRjc0l`l z`_yvYnfn?=DwgW!GSxGOHb<)*`6$s2{CMXKyVu`_W_$@NA?b6w3zIfcn?&_lWNB@y zOjw>_Ui1-`BW=QHOKV%bGVgfgYusgY#F^843&`%3cdT|B9h~m6k4Iuae2?8LQ!$!% zvW`>z-H#(D9)B)q-M^y0?QQ1wN1f}O%sTU$`!Z%}?T>QURbGePrPSPVwAb>`Z7*tC z`=bP2_pe2SF8Hzt#hb7ZC1p2n3tEry?v;^D#8{KKOMDY=RMKk=rWeZWeYN;Jl>4g# z@b%(!Y#)&bc}&Gka57Xfu(hPFv4=A-5G6Z?T@p#joO6!D|y#xaV_Qk%I+4V z=5`k@Y1qR7@txcV<8?n%G1~4Q)HW&$mTfNv9(!%yF6HI3lclvD8-U1sPJR4Zj+B?t zmezXw^&cnRdRT|}jrWwObMVi%$NPM+^eVqMln`dqvAJ^kS`D%D*{&DfB1)Rf( z@Xg(HAo>8&;)l))IEN8@i-#F5&57@r*}#?Gw6MuI`hxpUor`IurBlwUMyPxE`fqKNIF#M Y87jLifS3wI71W%m7;QdfwH`n0Oo=Z${zv2&%q6Vh z;afEu1zL~P-6?VJ*FPe0c{h=|Ia;~hhnV{!jTjwXIh+1c*DVAuw6I(9cxAD(tdt~t zUvdP9qwqp|KWffYjBb3YXy%7CN(PqXZPA19;t?N&`$X$0kt^$GDWUbON@6)6ssk|r zGc{8&+WKE>KJ3p9-o=VeWE_0mv-aMs`9=E7;$J24)K3q2uZ_Quv7=l+m#G+i`@vPw zYPd%^JVw^2Z#UPBFS!1)*husTzuGXH8TnnatkF`n1LEuAm&Hm$5}At8{AL(~95=%6 zL)$kDJh;5}LP37l-ZUtWw}2RfJLD5UFcqV@ewZ0xtNrVxOP=fi>~*j7v%M3SKCrY( z;uau^pm2h)9HC;grL_ldfR^k5Xvt1s&rm1OrOEz-*QJp&(=w-2mWbC9cWJjoeV;aB z=?);6iqX7Y;f-R(m0q!j+xtE<*y~}V{W;NXpRV?I7UB2K=VtVCn{|HPuQ|U`w$~L> zcKfdNNC0uPn@;fXe00b`Ig3aqbX{V<~T0C5)(XE4s0iqWiraGYnLm&nGvxB+vbS$Rq;nuPm1 z0C<Rdnpwxrqr`G6r*C1F#G6 z2S!0-!ZONML1JGb@$PhdNW8ntHQt?Xks=ZDB!|(m50)r=D(y>QL)H$qWN)Jf&2Opn zt?kvN*K9|weZB{X6+jHa8pTwMPHCN!>(ShCHm_qw0nrmP15+{DtctbI+qC;Aa(iZtI}7)#i(rBK_xeaI+Ubx_}W( zWh<&m;_-8rBJbnf(z}!I4V095pAf_j&BdrO3KP9b8#CnFmu@T3dJjkC!4d zmUM7qbtl$Ih7c;_r>(nW^`%IO6&>7*2lCfr1XEd^bng?455H8>qH%N=!WDLvi8Gbm+zOT52n*VAHsQ6% z6}x(QWAVm>bJ+J1|B~a30^-olUfxo8*kCF~yR-I1%TAq;P#+NMZtET2*=?|Q5K+cB zhkZ!#FF8(kye}yOe-=$<6!e&i(HpF*1TztXvWsIy&@Z7N5=6PEh@LnI2`5N zaejC#n$hfmUXj#$`ngQS=Lw53(9R^RoaTYY1uzfUX(8^JHWtD89c`uaFW zxUsah)#i>bx^31pic~JRd7A>wr$v{V{0Yl?Nk| zQ3*f$uKiIF(YaPXYq7TU4X6Cp{?V&_-y%ZAuQp*}ikrK!!ChZ6Dn@Im;3>rG6nF|@ zU5a?sc;aW>C))RaB9c)_sqDMfBLR=372uKdS?sUO^QiQc-44l`Xm>!`gO}qR)f5Qv z5zkbNX3du4-23^6rCS;diDcvU{Ajs?nFUG}_4`BKlKuEwA^*%-<%)utElU^n(~k4h z+og4RE!Rf+P5mK^f&3lHzxcO&L&V_49^A6cBK7;Wcv z-I1L{T!3$IzqAq_do7BRj5WSnVqFOQ;s6l?q6bDTQ!(1chmP9QhyXqZ@5#hYzsG=- z%zbZZoAArI>mE(XEMB1y+EAi9z6->cuT^tb;TDIf7#(iiow%vR(C~LlyvH%m9WrxT zTKhbVI2`RZ<^9l0U!k&J(s}n&oS)u6f6ExOSX&~afAuSvdEv~ne*arqWw*V=<;0DF zAS_2@l+l(}*~PBUvs2NAx%vIGljKMYFF8}m@7j0e@%5@Eo}IjsQ88M1OoM%w3-2vr zXUX0WElz{XoD$h#Yx+|E-3(&O0#Ol&*+4KAqs>ZB=iQRi3Pmz*y)SZmwSFN@m1&ox z>>NqmaUO$3@fv8b#M=~8nQltt)$~y+yW8Lga#k`Y>kwxu zMw|78Mqd17YD%Pfi!@dL4K}5?Z-3h^UjLU$>B*=B zZLtotRAYd62neYMBbdt4YLSvyo8mUv7cP}>XSAiYKW+q%$>340e2r`_FH;#0ZQTJt zJQkFS5lm%it$9!Q1ne6`KjnK7yE_poOKZ(L*DD_1fnBoH+;W79(Uw*o`SH5HU(kb$ zFukh$u6U$OiX2viai1J&kMYQia?{ci)WK@jSQcXuYt%q*|Xu%ou;g$9L^3KViG9~n&4A@VYG65FdlC69`(2^3wDS0j5SAlUjJCA$ z7!RK{%L1P@@7JTm~$9W<))+21WKs&cmq4vOzdDGR*u|%*W9(j z&#~9J(ms|}#G8b$9HC;grL}bnz)ofktb~Mz>=W0YDCoBjx2UBR@%yhsGv)>e%MtF3 zwzQV&H11tHFK^=4!%kR|V>iw6yOvhOXdvpXRfOdT6{9VkTdJ6q%KRlr4wuBzia^a{ zf3LZ4XSAiYRPV!2SmiMv`}MF=Ne;KDr4>;Je!_;rUl{kGaA&lowNx_0ee{c3P1+16 zzs0q+wDOn;#Q)AI!gA!d7;S0gff41|h^o^eC9~0F9fMq3ODh7S*0WJ-Il`UMmex|u zgCx!ftSszqL2{&hB%-JMuBHEpupFUcw57FF@2HeSq;;hg|9DEgj%Zt%PcLZ^Nh^;t zDv3VAa^$xdZE59ETYJz)SgGWjJCA$z`X0(yldVeB!^qn(u%;m zn~Sg<;m&AFYpH(4eMz}s&tTEl#ru}+EaZ1xL~DNy(b|gzTd%Ex#K^U{&*MRWpwlLd9jbw3Z61nrEw;%*mz{h%SF>{cqRM|U8+S#y>iS+u=YGAcobc}S_+1*KvHQ`vW|M_KguIqWW_t!(`e z?z|VVw3g~RLRgOc7Nae#JgVaNKM8K`%tMdlaIaZf5jSG@S|C7Jj&NtRrL|PGAGz8s z{Cvy!XI;zH<8_-QoY#5y%NTLB``djj<7Ly9r85E2EbEi2m)J1Y%J8>a{tC z5rzNU9<5Vvau8i*UV!Mevg`uRVMN2rw@16ZAaP~-H*}nnxRVhpj&=`@sl_>rDE#6! z=!zx>kx!a}hZEf5a1JB-H{BMU{>9`#^KLa7f^!&QX&oO;h(|JnP#JI4U|Bt+ z7deN2*XpNwwFN<2-BoByI_EIL+E8_OQ-C;y{&=N*_1xB#97b3_>1(G&KuDiUsW^ub zCJXvX2zRbt4iJgajcRjF2tlu);8_(sBub3%Fo~1*QH)?uzK&A{ca;(;O%RqNXG_yT z%G(wDuKh6tJP?P@MUQs+-HYBPeVtb{7< z_k+iGKol+cNi9Y&m9>IOdoS>im$ED++*U$m{iM=s5S@4Y`h3OYh*t7KG+Rvz_m8`UK6HEG=C zw|JjmY30EP%aPw=w565DZAIEgZYtP6E~T3J!LjJ1+x0Dx_`N^c_Y1U}ddioy-kx6$ zM7aRLRE)N?-XU**uC@vy5W}W3p7_s!XrH@QB;+2K?-Spc@LhD;hLwJ#1jpF{#I>)a zM2-W&RE)MAx!yot0AdX8k-q_ga~NU!cD+MR#T|96p($Pt5WLG^Dn>ibZ$KP;KE=BY z_tZ?qXx@D|&XG$4z0JFyc2~l_#AY06cebtNk%oEK$?^^Zu^;v&OvPyP;-i`$#5Zs) zzJX~JrKi}=&c17ZAijZX@ePtuFA6U3oAf8I}C5eODeikdP7R#m`|YY?=l+_t|Me_PC~- z(EaWaAabCas0bS@red_|CiDcE{ccKR<4b3}svn0DOl7AcJ*)kh&vEC>QTr?Qq`|&$ zEdBiz%h0Cd{<;*&K#4YvUQ^R@oQjPbF`E5zAf6ZO$i@Saa^_43!BpmTNY~oFxR7`k z?IiudJebPTI+s*MJ#Gi$lZVG-CqoF8@l)A#QIEDLRf%PHEMx>zS)Ek7)Did8Hv~~I z%uYu7)_n1bWLR4Jya85&a)EV%<@oZ$_BUj41Mgx32D+QpWo0y8U2!4X6tJa&l~(&> zaQ}hsAD_J9zlvuBQ(0R2$#ItAhNZ)MdaL$RgVfAdYgPA06kF5Sca?TVB%_kr+IOva zN!0w_;7;GXkyu;F2)0%*Unbb;p>|l6d+|s{C1tnoT8|*6g+KdPTr&AB_VR9NTB!{hn?7Q*^B8K>gWK@h+9xtn=!AEG!2etBM%WnIwJX+DK z-(*zsyY^jqtioJ!QxM@uW`Kf4UB4dO2licgFd`Y1{H}dh9_8=?;$yrFdl)+z){?P= zhc$6m0`V#kO<^I#RE*|vgHvjcj99@BYr3$qaM@NxbROnMnr&Mg=VSQn{|fI$5e3}0 z5HhO2qs_huzKY=s>1p^v+6kKp^XVgP!moDtH4okry$C-`#TG5WIVVKLX!8i9Ru=ik zTprKYx|#bPtf|Z^tjqvxq0YXT5vSq(%i~8|HFKNbO#@Rgnl0BIXA)ji^}`#i&tYG} zUefF(qm;y6JF0z24iL`(@dgk~#c1Kf8_t_RK#74y(qsXy`n&|%x`y;f{aBP zE&j7u=9AOP`f10R55$W=MBv4osTj=`f_RTJW5m+wh{%R`^nTO@i6P$Yw+UxLrjqe!Xh};%HkDm!UC-KGW_@c>X&-B8ZL8+!!EWfmQ#hwH z6{D@6bp3b_@#t$Jf_-z?U)d{VX&;jeSu;$=bp1FAL=Qx;mp5@t#b}FQuj|Kkh&a_R z`?%-gg|zvhmY%Zr;8J$;bgcEb2Z$MSk9νidVR<FqnMp0$A2;O*g#S6_o7=!#q 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 z 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МX4zb16;Y4VNq5oJKE{VGxF#`1;31!5?&@q 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%0ASnMc(ZE=OVs zBJgA=?az05x9>S+*Ue2d5O8``&kr>RtNmNlldGT4?e?F4oX}CX%w=v%XsMwNa-LCEgJp5}$7|+4AH@{BA60A2laAU!&%sT zM5|{lS0uY0f@N35AeB@jLjA7hjVHSvf@L>56{0l{x@FTt@QhNCQ8n+dUiCZ7!AwMU zDn#o!NZ&a05cE|iZwi zDmy!s${xqodfLZ(5B}z)9uNN3E7q%fgnu^?*{M|CJhqljUI+TBD}8NK#c0*r;t4nY zopWo|Zo6&(ah*KES*djPIRDPi%9Bdp8THLK_$qgknRz5Ki4 zcbwjwzL)AD_5{Tk#jk!TwAMcA#0cFl>hTEP#j4JjXkE)^KD2gK=RXjERM--1;eXu_tIpja zTCX4K{0Ds<*kLWo_lstyLbU!mFnzPwL-03?^?JuLs#hPb*W^LpEcOum&0?fNv|b;T zv}e~>q24O2G?BWsP|c5!!0OzZbRoaThD?2hREQ1@oOVLJtF$QIZK$Z!@1cRyPPEo~ zJXr6lmLL_P6>o3l%v?XzYM^c>#Cp~5Dx-kDaTv(ootnAgDDK(Oil4a-Dv1m6R!FQ@ z{T}*%uAGW{cC>0OeFKytarG*EmB8OIK}%12f%z_Hw9bUcL0{OAwaO&^MzI#8LbSf8 zN?DeP$ICc*d-qBFna&-c#fnsj79tNxV6z;f6Y`LJ8C0+n*7t3xyS(G6?hThqB>qag zumpG8$?#ne`feK`1{aP__?8ezg=lQ8@tsi{Pc?GXTIt$9j2k3OL{=)+Q5@$|F>lu3 zd{650fp37$p_`_#grnBXgR=#&Cdvd0ego9WN~Lt-AKsaIepa~#3j^OWy+l2r;^eA? z(7T*af^>6%cJAo()9YbJ6#4 zkP6ZK%q>)>Yv8N81`n2Yrs5MdCSq{lJG|ops{vB+dvLvKuIRItgz$7bBUB7KNTtyx z0={zWtvH$r(frK6tM~Xm5DgEfzEZJm)r&}lXxa}35Zt>+g=l_e9x7XeM$psLJc25Q zt;QUw5G@2riHBe*K`KP^GxJb#MY8K5Saz{Q#j}-!^D`rqw8Oa~FHc6xE25E~H={fr zbUw<<_tAB!D6*PS{LH_rC^DR=3Ph?E6}ALh=zW>gCy!8+CMj&}!Lw}8#?2Wf0Zs6LtQ#kP4g*<;QTZ2nz&&*7W* zj*5CKDnui1A?ORl-h0p&h`rNJTrb}Pi1lJkLKHr&5SuBR3aM25T%q}yTg5dA(JJu8 z+wUmn0I4`?%~X81p^1R6>IUvl3{vS9s%UtDz!#3-%e|SlDCfN)4-=8PQfZ&pY3z|o zYaB*vZKpEmbo@Mt>|Pz)=KMX3nd{hgW?r9UDWPmbJ3AHa=rYlIH$i!Q9)k1wbkv)< zW4$^`u3ANTeIA1I`m$50o4ByGl%*F~Kf(g*2j?)bwp43|%7No&{#|LfW`XtNQLI`& zI17PGcm>dCwU+4bl2Hbo*DB7SKpy{uG-hE@gg;W&4Y*KICg z-G}w6bzc4MmPf_vHNnfJbA>O>Dg``W<$qDmuYMRTi^rY7C)Ay~Hu_s-J;_hc$PkNk}NdEkE0 zAeF9H@AQ>!2S0;{U@9&_--7l5C`lX~+pOO@|+0j)T^vTzCOaI9CYKI(V+D*Hx- z$WMr@REXBC6(TN>N7gTUU%e^+mQ z@S^hKw4?n8QejK5g+`X1htPE?TSQ3)KlATuoDy2)FpuDB;E0&7ibA+s>x+>d#c<@(A;Z14GG4jKs#+hgQ1t^`prM@3EBQBTq=dN*Kp9iEw zQz6=n6}2Ero>BC@R4@CJ`-;7p92r$_tL_(7eaPBpY5Mu?O z<59{_r6NtC(R}(yJ%@PD!FW`q%y^WdQhqUoR?o_p<@u?-_h8R9)`jOF)w5n}>E2xr z5kdJ^NQG!@VUP#=!m%z*#r|)NR=#k`@$z`or`d~Ch(_LYI|2C_>I~`-QI@l$;mcwu zF{YHfO6$4(ON)q`obwC_9CK4ja<9#0Uw@n&=E)UACsD3UDJe)d4{zLlBB2ev4^p9* z3;kLwQT*qZS1T3q?t9hRC#$yO-<7?q5r;xsMj#dH4|ASt1pki+q(Tj@=($x7&-v+A zN48jkT1`KjngMwr0;$YZO(Pbcd_N3J5P^Cn*s7|12SgwOsg%8Uv^n6t7 z;Qxg{DrL#&l~W`395|4GC5Yhp&;6#XS4L1YT=M^jKq?h`K?IM-!Tv)NumlmBpVB2< zHzNw3s1$(+q|&@i1mmy-5y5`r7z_VpeGje+se-+(5!|XLR*Xo*5=7|nH}5uNUWh;{ zEej^1y)P^rOAw(Y-@FZxc_0F*v`m|bLOFiPoF80*2t6Oo+Yo;V{V@^iLMlBsO$2F% zNGw5wwo6ogJH=Q$nc^6Wjx=ywMaMiiN}^*SDvm?>;2vTN#aOaasgum=cYU&0$7_Qz zNL8Yui0XT1Skr&SAdw2u`eZTR5W-^-jHRj)6%AE$0{PKu5J2$yk(~>~LSSsSn=!&(M&ym$ul?@Gf}4Xm|I*5$I13eo%=%nIuou)+&c51_=cRI>HL^2)y} zJLr*52(a|MTmF$s>A^>tR=<+=lY!kt4)Px0{6HQ!3yl4T!2{9!%)HgCg`Jld;pLXF z&Oj59Q0?_uzViJu;nS zm-fycg7?nIJu6!C^Y&35g2vqN0bsp)WYu1c_E8>!_fc7?xL&40eqOxRixsgCR?op; zJ`|oT*U{JP*;Lu%wW=l^;iV|D$AhEDDnmfkr6T+)qO6{&-@KbVv*&mzDnzSi9jT`H zxkK_OIB!Ws^;Ogxd8prY#2s_hvQr^ix2kC%b6_iZT960sgm8x>#DhSjp(MrXkqXgf zt76F8+_!N;{EM`kz}#cD09e=Zz8^D;DHD+7$!#_y;V>bP3emi_Gg^6AxSz;ca_Dw^ z?*?U-3_eY&bs|$~y=&|ZoHgCYCLk5Zxip&NQT(jVj4}t#%>27jAG%&%D5$y+p=&a%aBfvRmLNj6 zQ2E=D2O^Lv*dt(tdvA^5(<8aIdeh1nbq(W7yOl z0!t8~MkM``h_Bcq?$$RxuT#_4}!_`npxes#oytz~;KL-Up!H zDTvT>5bHuJJx=PZzUGns{J-H?f(Sh}CW5{gS%Oig{4zI=i_kcw9Wem`?H zpl=B!AOfj$6fmgU`OWXr_lmFt5xf#H4^y|(w}cW9fmFPYW`wERxz7-RR2V&BI{x!J z{dfN5-QUi2vDQZf`vdrQwG(U4Sc%QxnfpsBOuoqCbbL$X+RC=6D z-QNAkp3E`l5=7{+F?BmhNjTPpR9a%P>vlvSm6mB!x6_wTGNqkM5TWHbsM~ow*pk7z zkV?-krQ1hOZ6%9e_#o=bq0czJS5sXvD%KTo&3s~MitA6G>WbC_eWFK-OP39~qQWpA zomek4LcZ0cpFMly7(4FEbFObWAvS#Ei+du)joUH96~2YOQdLvj7eATd=9w~=5JOuI zm#s$jvtMaA#YQSb`}|bXZ&XvK#e|r<{=79_R+5)PDoS7TG}oWc?~2rmK3{?Ju2?_W z6^HNplDDP1qCfqf_aPx#f6^`L$(VUbr*lnq_WhpbR*jzKe%ZR3Z_}!Dx9r$y?%V-Y zeTU1ZySILx>c;J_LWq&{iQk1k#CV#zd6hJG>Z_C8hnE~*{I&CL@3vFi@9%u!)4%gG zWk(a@XaMnFREXwhA;Q0HEAKQa?SyVU93_UPxVJ{lbVaotzS?)rx&A+9xIY#8!58=7 zoST|L{kC~KA>MqWjjY$LtaE;GViZy#ddll5Zrd3%U4Oy`Lii@vmj{kKE9*R3Vf$yN zx#C&spX5=#eOFW6A4~e(ytgL#n)XX`e~zE*?p`vK5Zjv8myNquk$v_qwvh_a$x&3( z6I9cz8HAYm)4xfg;3WBY%Yq$Frwi`U=HuP81K;`@6~5@^A2Hq)mDc#mcfR00mh>#S zRbR%Pvz~dTk@G>Gyt31Edh@U74b#(n&8MWgb?Q?uq@MAK?J4e)cj@KF{t5E)P9?0Lq83G^etyms zrAgurC;7xU8jlO~Jb$}y&a`vxN=eVZ^LuRH+*DSco=>hiWZUyErMflO`CT{XtG+*{ zrMmTg^1C0tJlgl>kE!mti+=aov#${1-beebj&s7C*0qWoZyvEN)%72yx4m-7>;glJtD*hA?2c4E&e=dN~y^b zsSthlw{*8cb(#ekA=FpBrgE&SR_CjmW1OZBGwf-vU*C!)h-lv` z&24>#cs$vPctpp?IA8spVSo43dy$Ahs`xc&ZfKq9u3DY15RVSTBhRGskywI=yoJ)- zicM#@o!50C9!c~bwS{nMO{hyB8x7WlR5hxmxr?5f;i~n#SIrpby{p1`t?q(GSb~V& zr&8UI7tL^e|Mn#wdzZyH8_Nji>)h+MBLb;zuT6E^UY+3%_W1O??g;V|75`SM+w$d^^yX}3>?a;2X#`ue93F-xh?rO^ z)xCRZrrU4s3PR){#Hbv?2^;!y0wR#AafwuS(GAUGJhiH1sBqSvekvRhNTpk=?2;FW z#|>)L@H#g$--AmKv5#8yHnpn4k$7s=&9x*Yg@jY%;G2!!J@a?Ei5XmO7aD`?Dn(wJB2ZQfWP=EV85D#yAs;3#WgBCmLf3B0hg7 z&8_e$>BN-}h{shzv>-&G@NxzMskA;;HeBL{7^h(_;d~jFwhc=V;V0c*A=h-*S3=Ng zuwy&v-SZiC#U>Gr5rI^x(HGpf^?ui1>=CspnGjoZ35ablbtCo}A|bJ{dQ1X9gfaNbQ!o#H0% zVGE!z$!^b08TO<43EQy*5okXMQD;qzGh$_i-SOOm9f&}x)Ufkz&uLTLuDf~VJl-Y7 z$@9K&riHF;f+dK+HJI$(jxo;f(}i>H&@To8sm#?maY>BxPBq~q`&(>Zk^8(GcWkQL z_opg`^*V6edH0DYr@D!`o}=+tMl)(Z^=`!Xt9M`t+PnQ?(%p|9OmokMF{09r80R?} z!AX%rwjlzka+V@%d3dawJfs#O8q)mm)BLc{)Y^^+r1FuqT)7>MxvWcwDl|W~)BJd_ zpl)LjBC5Y%f|Gazp(v*Ph zbMuoJXIOpV+;~{HF(QyEzQzT2%4vVVlKCTn#{5=>eR*nk1A$a~w_b4j?VarU2ERzH z+C;Wbfkzqk3o|+=VhJLm*I#f?U7sAVWIm?x7)#@kyXgA{0;w{tU2w0Jo$L<#>1E=v zQ<;qNvu5umlnR6u;&8RTd@QYljmJ@Z=_Ff z$vP&)7}8gtU(B$-x*wm2C5X7vm3A-dCI&2-aU@rLNUk#M>01$jR8v=8bYm7waPvL- zgm@e$ghN(Fdev{ju>=v*<1e}wdQWiuwZ10Aej339vR>B?dOr+H5E1{@MR#)li2>WE z5{+Ou@rc=XA^{Od^{;c$eZKL80Ae*Ey3m;CoU$+;OAw*?DN81a*4i?8gfn5`m_$S% z)ra&R$M`)~^DebL@wiPq`cya=fhCC0JrZ}8EtxS}Vx0aDGVI@e>6h78T!M(;*svut zhBS55lfo%}W7Sry3#m5Km`|WF_y7D0AvV))qR9OW`kOReisyOH zS%oxQ+#jUjj$e(y5=3Y@R<=)T(pOcCL)?Lby33p?hx(74tHTR2cMFdizWgx@| zYL#;(!*2fQR3j`wgx09al9|)2pL{obt###(jW&9q-ugJjo%YsLcg>6M`t}YLJ`;j-|%2z(|=z=?J13lMR zM2PCIUAKltwswxbe8R?E3VS0`?~rYnJk^(LNs9Y@)tT<_J-jPQuK1yK-M(t44CpC4 zrKY<6`{W%c^~i_z)%ZnA&6D}LnO?fznVRO=SK?0g@Mb8vl4o=?84UF6sJx`q$e zL^>^-Z=zf|qNKHXb-twU-ah9}xJx|7edAj-@0`1#20izT%i@`6JD{F?<<_%uM~l^# z_=h|mf_z~ce)qMTkmj!GHrefdF3pF&GrE1xd0B4DwbcqM?pWeriYq=PzewCw(?t+9vtfTM)0}ZY3_)zez)eEuMy(klAk2)yT2tWvg0J@#>8~@ z$!b$w|G26?w1d$4pj(>b??tsQ_N1)ex3ff#V1)r>IW3}Ic#x6BJ2-dtxu|EV7Lj-J zbe2ekXpwl{P0mZ`*VqcrSIB9yXMZEv=WcDeY}R=<--C(nFU_v`l0z@JzC1Kjr{3}T zUm|bh2I`TBTZGsZ`*oAV$i{N|^x6`s5WPI|f?KZBBzO22p68!6*=e;s_b{sWowppr zHyM`ZCWnxe9I4|&U#1Y#y6&`Q*UO0Nd*Lld02QKBKTLCH&|LAKs!crRjX!I>S8HmM z^?L@&V>eUXNfV~I??;QK=ua}eYR@h`Yh9Z1Ta&Bb4K)04h-Th`TiB58_GfZSdGAbN z+2G7p8^;!XWav8+Vn}`|UpQ7+zISn}jZ}z6i4mf4iAY(vS}D2Z;s(1?beem-kl$UN zILMGIlsEFE65?#7QZn?`1{>=_G|-mw_#k=g_UBe| zZSr7WB8$bp*C(o6aK#zYQ4t4xz6_G9SLpX)zY&kGepzjYjxQl6UTPvyeo)V&ypeAI zbb$SP?gVRSwKpa1qfqiuAJff&bEItZOMa*39y$R-x;D8Xc?a76;`6^i&#|NvZynC! zt(Cu4x3oCT+NJGy$4)7?GfBi(x8F}=skj@7KS_wHG-pZAeS zg=lOct(;?9$aIS3j8@I3NQ1DcRdGL>EfliPKX&BI-g3-<7i`q}XgT33A;gTG zSL|yYI?D@xY_`y57gm&BhSgYF3F|zDW{-_E))7`@_Gxsfq=f7L~ z3vT(YUO&3|Fw)Sy!g;srYm?n=``QuW&TH*u zrDCO>j>8u=!T1NpJX-#B&dq<5#{bJTgy`~SMY$wbbGhXCoK|Y9bl3kGwMr!W;yxlB zb%iXwlRx^dB&WIkTGDgz1VZGP{;WJ18!cab`(_kUA=;RmVnc^_<&6Gyt-7C-Fk)W* zWQrS{pfUG-Y^>DeVOcXwzWc;$_Am2dEtFT^{Bv&dwpfaD?a3m$+cGk&+3DS!dP4@; zrQb<$myD)4*yAf7dO7<|OK}rB(eGs!(0e=@u-NYXMPYgTVhacNgQ-92K1L`y`WWt{uv=&>yXf>d5@br?w_A*tWoG^z?GVO z;gesGH{xHja*wO)h{7}{Dv^~jq^~(AVC@pZI$u|clpfafoOK*y<^bB5DL;q<$YEr7I^t>xu|Ptomr zFWXlrswdJ&Mw@)?!%@Tdrx4{gw32=PSHcM|+ucSgM58Rw{fP_5$WbFE+MVD1EefMn z7)AVP@HuzWKO|!xZlqSN?)ZvayMA-hU3uT~KSk~RmE`p>Mc?2({Aa1PVJwxr^ZH+l zp)xHl+8+DvH^>K!kb9wm)EJ1{6Wz7B|M$Vu`LC_x}kjmWSd`F0O0R)yHqI{backI=v?$nx7 zsIP{ti;;Wt2pL;-X=5xw1lsUIoLUwmUoR(Qt#=wWLIhIvsFvdXQ)!xe@rhXC5le{s zggAUXsu7kT!YZ2L#$lm3JY#di`2bLg0uSB`un?;EApTx)<4TOAn z@YpsiF%fEwQZf2lIs3{LHy&HfyBFAw(R)NZJ1)%~-fWWV7M({t)@+QCyF-K=^X140 zL>N>QH%$J7){mcf2f2czqf`|}6rGHm>0QbL*k@JfSnN#GBG)e%`dQX}=ESz|> zUqw7d$H&OO?q^sto*cOq5lCgOYG0j-k;NutSb5J>&wO*{j#RkXQSNz4jQsY^3~Ouk z;sye#bgwI$;p_7;vPiECYw|Oa5JAfV5uydHySHfd>35XgV-d;jP?Fs-&%8yws}MZ4 zkMEvyYmcAi{`SjkAIgFd@6n7p^eDr+IpXUL$Kk?3)-Puk{gf=vi-_!^m5A7>= zr#!Y!p1sl7Ld@8nlPd~WxWk>hDR zK4@qQC@~O*lsw_a$gl$$){*7&wj%;%$sb8pKkqr~u;=cnPh;eY=Y(8ds7({21nUK_ z2w7yLOKLqYI##<-I9`lYR;a&#wat!a6=yNBp9d%}c zv~zxwgj9&eOdcVMzc$KB+P1@bF5`9Q$yCZnnM`Z#$Qr&$1YV-=V8pE+VBb#EZ!&XevtNqsUSM^oJQqX&UjoOPq*Qfs_z->qVy-G=rY z?ipxx?zS)~cIseRqUjzBJq5T+&Ehp^Rm{HLbfWAPf1pXt0vFx+?~Ql;Kbm_rbIf}^ z`L~rgu!~bTWU+3V*A@D1>rHYDn}a`gtdOk!EVm$G-Gs zDel2@Q{C4$T_!1ccH;%>((9FF`1ofW^ur{dr+r%)vh?Db`OI9kQ!h`H#Si4N>K`8- zg?26KN9;Etwtl$RdggAF9J{Q5L=WAwpQX7Q|C!`o8I$7EKFhC9k{v82)%(WE-=LSY z4*zD0>$G3`mUfVFlYJr|`DX^xiX1n`=Zin@idX5`HOE~ajx9b*gN5#%GeKfT;4{etS#r9 z>OFJEkbx=g)M+!_B2&Kgq5lH?8YEZMzO)7&5zgHM9UaVQ^CeJpp$Y9XCp7h?Qf^do z5b!wJo%QwbI9G*dpq{X^GW#Tn15yNYrmQ|QeF{n+Ii-5vv6-|=t0QR zq^~D$8zplly=&(xRn5liVca{LyX}*&kCtCA9cLeT=V@bqj%bX%P@J>rMyveMj&j8F zcWu-F7z@$<{e%}@rSX`2Y?!S7Z!fECjhQyuqT&ecqg&HH+BehZ_1iJhj}jp63$-O$1E^goLugKFlc?(T`sYh1?J-r{%?QsHQtBk2D!r<`^ukDS`BmgApC`szE<8FeCk==n$cf#S8Z zbISRYA3VBtEeEL(jS&GMF3o8xC*Cg=wZC~;`Dvw8*LN<~J#g=?Pf$j*Xh%Kz&v~Dp zv)D&cPtX6Cdbiq*iE`H$IjrJNiygRT;96pi`GUB-a!$tw*2a}}9BeOU`I@%RClPt& z)X0a{OReiTNQG#8KOw&G=affs<(2EhYDx5xYpT}0uKDzvFQ|Hz-lN9K5czTETyoj) z+7hV{o!p3eU6S>&igUbPzZ5B#9DQ02TC~o>I3U`h7&oMtSJ-^}-FL58V=2yQ#0MZU zhLK;obD(ONtoPA1d;M!>mN!~XrnU5-n21_>wUL}>*LF}wjadYqV)8}}A0tDG*0WMx z>1t>0OvvAgrw4F$(K`6lcUHT1yO9P;HKLX{gUyxmdWkyLmcN(ULyo;I4gV*sWVm+G zEl`c`TGQJ1ac9iMAoyjI$_qH)POMx574#t1X{B zM!uAPx;?l5M@CE-XDZH3A&On>Ak%7HvPS&-qmBNnf19PcGxkk!KmK1I-@g>WilGSB z+wpx!t`;4BV68sY*V%uhX%uFz;<{wKpV)tRyp`7Jn7y%eKL<0rZ_uu&&;D31OAFU4 zA&S;{)moJPv;EnF*BqomG-huJaq#Oc_P!j?%D6gp9Lz!zZ&FnMJGQmn@S*gOH)@}4 z@Ap-bcNW%kkP6Y5okZWeySXIl(vVVimtGSj+8-Dh#f&}rX6A!Rvi>uRtRh7k8Y5^# zLyh?P!iSY*OtH_b9~L%{NQL8Xj`@SiW2I<3-TvbG%qBR_sIM?CLf^DlzR$XQy0MJk zT*$$=3dUQsy{lsMHDjMl|+_5I;H3$eivPYvbhx4#u!iUQv!|HP{v|d)}&Txxdzw zxaYu@7%ddDSB#Z;UY=riet-E6>|I;|u&2qV|L-O%rAkLRz5YE*oTS~|v*g)|JL&T$ z(0-s7N#d>ZKCQbrKR}4cRfXgm2QOQZ59>+P$hZg8t3-n~*9mcBTw&R99%)D6R&lvyyMpI>_;ePThQZeN=I^hJ(7u94)VJw+|L^kP6YJ zT~fYGf0;l3&7?W+U$Ib!<4zduVDh)8be7X{`L;Lttf<5lS%6h+*o-3oj4txv%9Yzc zT3JLQ6{7Wfci);z)1neCr`bwg^fLW$Yo`qM6@ z({f|4mfBLsCKnTrw50MfeMKu7Q)PV;?&uJWzFzXMys~-wt>&%e&QZ@eTH-vL6Lg}n z!ihZB8t;fmYc9jTsAT9wM4MW4>RZL+x)VL@@QAjK?st|S)aO37ukB0f{?0oKfc9dES8Nq%)s%mt%|2jvnS6qK8p0 z_}0^WtiXPT=Pp#1N8b3sK2wCO4A?KVBY)DxkEgrbZ$%_@A%%9 z)(Z|&A=;QX;=-@oX3@OIk@xs=N!doH_dQ2HX7sQOz504vab&Hk&}yWvt~5i zY^=_h>1M_`TeN#wZmGD#I#!$N#3s>>$h_uIGql@0F) z>JKBvDk|n1F7Mv$Wxcm)y6L%teWs~Pp4y#a?Ob@I$=c@z8c}4U?MB@B#~c&os+648 zU(MGfp@$w<1Kb-55r49s+}7ld^^NV=$zM<=U~RItzl-tVc;I>^#FLNO$tA6BS>Y#L zW6Tka5llKaF{7p|yRoJ$FTb$R|E_F17Xi@s=m>2^}HHzvvvHRGbt*N3?n=IPAS zTgu7yU$>EE&h=^XR-bhDcze=U%hnpPB2)W}yH-{?Ek zRl6-snw#%+S@hX78>!HXck3&%8UG~2=kF0>T*F%A%cv{6N<_+v zvQJx|{GeZ33*%gvA%Z?YI%D#8F8RvtqV~G{J*2T4h1~>ZTnN#tV{TdZdS1J6lOCR( zsJ&;1HY^-*ZDfDBdhIgngG1{qTrJUSfZhZlUK!9-=KWz`)Y@ZJ9Mm|5K8GA8%F=6E zUcOXuwf)s+VaDo=xvu7{ou1==*6dS7SBnvEwZNt{1OzU5Z4%alkqViSlq_Mako{vGR`9xpm~Rgu}Ju!myw1_2tSt z{ycQP?oEpJoP5KFtEm4&vP;jAUD}Vm=R>}KUPfNpZ@)dOg0a>j+FYII?Wru|ge5mb zNZW|ZgNGiiD6-*R`rUq5xP_eC;Es(aMo>$bnqhaN=~mSqW8|B+ml;tqw8&6*2~no; z3~SJ+F>>VMS%%ezF*ekX6vye4X8$~`k=*%mZi#0B(2_xqH+`2ZX;#vsl22O=KAGU4 z?;dR`w6*99#Is1+m(R3jgnVIRCWm3&!=6D1yXBkmT-Di@|ME9BQXv{MJSdv6^^oN%ov9h@wY3ekA3kTPZIJoUenZy@L| z{#u$_V`psOHVT!`z?lO&!mqMkh}78>Kz+H{x{tX2(#1J zg~4h^U-MXB+itLExwY%dw~aFmnDLEy*0icUv&5>_u7K00RBK~bg!dX?)QRk?^NXzO zX9vi<71r2><%N0|Bc|f(>R(s`2fr@U&#ko4$BJkpnkgoCzGihf*Uc$@WU-M0iFvPP z1Z(-_gZ9Tg8py*jPdVt*GxRy^iYecx+)2CI*A3+JTZ=eIg=kzQNS7>_Z`GeLR8Fe? zo)K|Js}CiHydQUVSUGmLlox)?X`C1_<^*_g==&-~G;l#Z{VXo&pV(!^bh4z$Z+Ke@92A!9|nFD4H{gKL#>|)71~Smm$iYRPwy*>drd?8??M|!XtY@7|^J_Z2PX%x5K+6Ix4$AQ=6l-m2a?73?*3&_c z2hIufS<_dP4*p{|hrcs_MpQG-O=xSGqdgd{5u#kl zf2^xzi^)B|RhLMG=O!=;L{`R?SL9DUcO|{u^Nz8eWP{q(U^F zz@SuOU<&@>hbTZC)8IduFmCzdC02pzc43X z&Y})dAsT&76#v*V%UV=mq;z^eXQP#hUPp7ceYf*$D_5J5ve2fAHc}zlv;b1-pR?8{ z*N|oMl`+oUp}gYhLm?h_E@;0r_g!ns{?W#nAG~=X?kt@onL5Qy{*7;Rc)dt@`*P7K zR?~T-BvRo@hASM&Zd@g6#(_!p{kfwYJX4AGr?EE_9j6_#jvsC)AHQ78$PmJ|n;w>{ zXAW6!v}`E1UMwb&3bnIwmQbW!4RNmbds!x?tcpT?g_;312JNFtlFhznjNHGuU=&(p z=($1bgDimN>#Vr%yUHe$(k#Q8fK|ryOf-0BzE$(l5V`NR-$rS`6&Y7*TGg7*w$=sNTG9Upj+Vnm zk!=E;r%P`|jWvdS@24-_{-ViRPS$KXbs4`7d&wA>o~8%A`HsbUO4jeIJY>wXLsfQ| zn}?P)-YwqTajMUCz$dX-k?pu^);-k5*z@rjoo%_;2hX_^?lNnHQGR4+y=JR{j&%uJ z*|2>8Y`h)?8?Cbn8DoMDILb=ByEuL0^EOQ@zR+ci{h)yLXyti_^(Wg&Is99+SBAV| zyl;JLK0DIZVUfc6J#I0$-yq=?qu1nart63I9p2=sp2ayA>-}H>QKqHQtkp}_R|Qr% zR>*u_>$G&5eks^!-}5DF*zQ#(OR)xuHB*SC_v2{eTX$W(+B($EM+Hd z*cJc$pU;dw15}YDy#{OtFDB@-=U)igJAaVlG@SR#eEP0ww+`;pYrmEi6qfs? zBQl=QGbsOK=lOX^NJ}I2qhEv09jIZj{?k#SWG#f%(%cqC(Jzh#rO&GE(AGL=vS`Iz zTW+Y4xNwLb7YMI-Vg2W|ebKfx`t9}u9hwQpDY9d(?f!8Aqipi0R{H`!?`7K$w((*+ z5ZGlD%hAUK^|Yq_-ppY~#x&dbY1-C@kMuS6r`AhXYMQ*GW7{z&F@A%kXV(cfcGY>o zan7lBNFEyohlSAJ58`!gbStAlufi5fseP0b_^+Fs3E=Idn^G-^?_8RyUo~=M`*Vgbylj zv6MqIMG-#XeYRk-{xo!yaVc@yUS22g`hm5P@Frg|(s*smWb=H+GDmz-wt8^bq-#qK z{iKh5tDo`R=i43qoL3gSD~4U)hSJ8nKBx7T!3`Z}!aSEaPuzXJDq^Jcd#)$F)WFf& zd8FnUPSZYU;%9tvB2JI%*T~{$@#&j$mEo#W!Kk(9cYSw) zmn&wm6kArY9tD2Fv+kR_5?UEQCSGuOth2t|sbOhT^NIO1v!gL1IZ9{kfZBx#tpTqF zG_8M3OQZE%ALHcycvH0uvHsxmQ)dlc4QyrXtx?!Gx5_eEifQ%+)wFk0?&ahXN(>{vP$Lj}8 z`z0Vpf8n<-)`AD!boR$^SQt`#VZ_C`8LVHLc20jGr?11ZpW71Kry^#}0hfNe#(BM2 zp?(hgT|Q~xHU@%~%Q5d(@FttJK= zyo=|k8csdK;L@L)^@g9;&mZVxaNHQSnsvsq=vSeR@nPvE#;^CkaA<`2gr85B5t(9s zZKJQ**m(KKc!$27$6eOF<6N!Ef%saDzBL*znd#7MbMIpBAw&>>_rpJ%PU=M~_H)=F z^PZg75Aeat`9Sv_cUnJOzMsKTtbyXaIy6O}f2X?_%++tXzI0e@@os|0V4Q#KX=FTg zRWY6&*=+JW$llA&x%SiiSQduzmK7%>D!P>LIBiMZr-;m*A1}jjO67YKt2i3+jAdT# zB(uOTm-TY+PgQ3u|II_4u}I=|EzErJ*US0=oXj}$$oETizSS?!mdE#AS4uCve!Qb} z`Fx01fSNY^#J2dVBTDO2dXG0)itC2;DA1&y{Y$?a-r72U{jOt#YZ;y&ncFeiX`fxL zXqe02H%3q08N{|9tc`H$!i)X7QlA>!Ro`}Wu)*tdes^B=YnrRuYW-sOf%=WGL5|fc z)6Vs7*qvSa+>_O*0#AjfSDvs`e$X^R%_0@N)Th9{w4VL14KkxK4EqPpBwFt$upctbycM zHkvm5MjNB@$#T|FtFt4v2-}`J*Klnby=PR2FKex@(q3mN_O9W1MbqZ`b})=DF6ohP z9CFw#aYPS?en$J@WO1YGoOb4zH6J>xyd5?gR9c3qeimGWpfL1AW>W{q|LLoXW61na?9NE&L;w@z3Gn zM&V<>>8x*Ok6ecjg{IeV8T0m*G#>rD%b{mr+PQk&zVUYa(;CB!=bx^3o-R?OA>Kzr zf0a4N_-a+SK4s(gjy)%z%k%yd*6I@qnnebWGA_LNnPWEK6BEbGpmo9smx>WC)e}QV zo;%C4=6v69HS)<* zA7`u|Qc|yfG1C$8guU0vUNX6+YjgeQGq{B39I zEl2Hj^eFb5aC*g$&FC8M)4#WI;7+zUn9p5~RUe-M@S0KF1yRZ9mfPCcd8(Y_jD>BLSoe-7f;XBPF*V8>3$DlL zJj(DH3y&)})qg!PeqH}zM#Box4jV|;&^vYd3o6COuWdWb$nf9jm~nWo=9qo7l(RE} z=GLrdxT1m_`gZm)VJ!uGGk$7dtWT(8ES|DVcbuhA>;zu>;w*JF=JD`4MuFkW9q}xg z=Cc>rMipvgocZmlIj=?u%W*nQR%m>hiD(NW8X6NqZkmfm#ZYPhJW%t3Y1czIs+t(`2vWwKPUE_XCw<~@y%a+k}zuOcUKYmJjQ1G7< ztfhk_j7c*&=A97{2s?eh@vsi%A6Q=1sm>%*?- zw}e+4bBcqAyob9v=6HzTZx+;B3+0_2Eq^Du~(}c%PCCkjJk`PHs*SXhalE?^I(Fd zYB$KTea=nw#*R(|Q4@JoJHIr5QWt+H%mhq(V^ z3%*0d={tnC`gPcVKu&QIcX4mVJR<%8akjzYIlmF?E|q%CbuVoWewYxe4M1@;LfG^>N0heEpAM2`hFJvAL02w;s}GddDY+e26wEp6w_s& zJ^~%#p%Ja;e3W_Pv9D1Ix6-oI`WGMCt4>U@2h|DHU-}~pzau@rHSPCvQRXTT?Ln{< z)6Ta#bvM}jYFo74Ve(*$pS5wxef!uI;^>N!Rb>^;}`)rOa`$y9= zQF{M>e65G&+ZimyG`C8WRplgoYpTEXCGHdEXK^3wG4!te`erfiihlk_)g=Av%l_8D zOMV7RG0l17g!g=~c_cPk&y5&teETfJ-g9fZ{qC{fjdq1I>=WP5w5MxNjf1N)>{+qX z?XaW2!%S8m85zH8d3w-CxI>y#HWa>PhgO|tU+KEb@g!)xCS~e%PlZ^+A0_JizC2zH z^1o}RSDfcv0d$#`sh2z%V$H*S?kvSLe;@p759jEWj`y&Vmiy@ZEFO24y?WQ)>{4U< zQaeYld9sIfakY=mQcQE+&}<*i(fb|iVfFvn$K+=zDRG~ZqUGIAMetUMfA+9SZ}c%) zifPUpky|1%^@}L0HMm7Pq4`a_dFjP=)sIHGPA#}?moB>4Ga3v!dlSDGc}IpDlQZ@2 zL39SeQcTxuq#)eVT*fTvkyG9vv4DqxViQDu?Kc+Q~7`RF5L;%U)dRLW}vmR6w}L=KD4_d za;&`fwOw>%P>VU~@vot^tCgj=b(Wv2Mk09|?NAWi#-_&)0>M&DbAC7lco1w}$0*to zH>NLJde?r^cdjS*%)R&QW5;KEzv-^MaJ>9KW`kS7W=)LLKY?H=roWqi&u$beX~c+M z8yWxe!1SPP|M?E4oy5w`k@0UVN)IXqf~EL7oL}A?v)bpF2Tx%hT)XI@T@JCFAJ%zs8Rz*wY&k)!0WnU@oFv8cOTDt}#K;KmO1}i=!TXriieXk` zsVc9fA;yrbM7`FBcQD^Az!!FR zh40O@yDnQ`i@R)(*0_WH&V0}Rq3fHRY4$i9V!VGXQD-Tp&u3)X4`U>)X(um6nceUE z8apdtj-qyz^5Bkr~7PC-AX_vKZl+NH|1=%uV+ zv*`9{{UOFHmSUQ}50O04YrB7&9yA)gmY=11s#vkA9xPX{HL!PHH90-#JrFF#H0KRp zx z7Hwi>=~!Pe?OZLn9|r5=KvW08QoO!$zSY+!a?Hg?dl=<5`IuZ&s-DHI%3QN(CC78j zdmvKQ`ai)TpgSRrv){bR@rFhha%>;-<5E}kCg$bTZpz*?Yw8dLR z{FxoYDNOLLPkzT(5HD5V?;u#pIS-lVZ;r&V8Ro`#;j)vav zV1lLYUCFZBYzVh278dcTCxck%B{+o%yZ9r!V6#cyRiCKAYWNOOR!p$e>|)vW-cQ55 z#6;w=6nXsEux1RWFro63t3H3^aRgsJsCvr)CRj@4J@2fz|Km^OQSv|EAySx7B_hYf zt;nN1A}BX+R5ONCm{2AC$w6OO-Jd}og^@>Ewf%YZA)dujsx1VxeF?-k5UW5uIhGy3 zDNLvqGkHfv5Q9MM_I?KwETvlLm4E#}ynyfMhWaSpsAeFiFroTN?3363^BqjElLy_&FNsDeBWS129GDNGcNxrOzvSPhDp{Wgf& zAkH>i9l!)jsU4EoC*lqs5ZgiQtJX4xQ& zvY+Dy8lwsF2&le4fK!-Ity1=LAACn&)Zi=l4klPi^_Bnj^Omuk!i4H8vY+3=TiM9t z7G`HASW5Ll+0SuqU{u0)n9WW&^YH5TgcOewnsyz;Dde#(yF}i|Al{dy)EcG#qIWTt zh?PuH4OMSX$joaDxrv1u`)9v1#^=`ofk?|w?qzBFZ53!=-Ej#3Bq`e(d z9XH;xztyICSIFbigUys3(Ygz(*TR{%>`U-iuLgZ0OEIl!1v7%pg4i3(2fQn2{CLwV!5xHe` zlzFej3&xew?JSmJ+L_0p$}P6hpA{LuCp0~%G2TjPw&yM?(?ay%Pw|FL>~bv!4{`55G8Fyrup!%5aVfjqIu=D8}_~vb3E_snsdV*U2Tr7 zjk)7`_ZVWwFP~%I_k73dKXc5H$9fp2SNfP)g>Kl*N($Zm7Kc>urZn64;v9Q~=hSi$ zTKg=t_B|*oeiqZ5H$2wS+K-^MCqwtDQhMSvgP;4h_pP?KnvK%^_+*Z`3j5lk(1o)U z)105CJsgTJKNn&IWGCwUtY-M~ukq#E_jh+O4V@))uNC%2n>A3nCCjJT6+2F{SJW)o z!pyn`4Q;sn`Sda^%2vB>cjzpCLu+t1Sbwr98s30|EtXy1~kzt5B)=>V&ofgnKmxrD@1{!*nV!GrHDX?0Q zPr@D2Ya@fELi^DN?W$z?YiLW8?TspS{H=UW9V$ke|+9%2o? zooI5;8G=)?GB_o>hTg?JP1AyKGWruvMrV$_8p|g?0lRM5hpR=}@8I0%-%U56vz%(D z;uOfU6Smsn^mSIbeT`X)>6M$(?IrzY+TZ2;145kY=YlA4@8>`!SgQNx+xG5nCVL5S z8eR@(!mGNDi{%t1zBqTo_CGbteqmQ_w02>gcL{lD_+x^l7KdfpHGLwy#3>LjAP?hm zkyuV)LVdYhx9`{yYW-SBvqrBi-jq|A=zujtF{~LXeJIA=ZQ`UFca#6JH9C+}n3&t} zhOOV3?LD>Zi?=$Aw;I@K`EDjy>e-+SdvLiKb~VrZfi;{Jk1xM{vRWLcF!6PII!-NT zc&$Z*?FaU1*0GVr;y8r~?*F)YZm1qWx?-O;YJn1{%t6Nru&8G@%=j^Pw0R68!M6~>qd?VuHa((Qkx zS{xHBWV6dYatb2}0DlS+hxF?zOxYah~dzK@I+jwmZJysU|GN zw8}&F^T{CILY>$D7Sqnv(sh(o57bBd3Vj^}OF7qY#c?ZpwGzs&3KOogx9!*KPeyBx1OXkH1&y#(>V-y)nP4ei2Wwh+5Fy9| zjYMODrD8YVu@^s8+Ckg^W`!b;eTEUoDNOuZFVkN4Lxi^vx=~j1(XKvxIxm(9mf{@% zUIoNA=uwBiS`)woOR2XNt4w(0;;n@J)zKSg0y%|={8A8B7LPzIMjps5@5{xrSc+#+ z^g+x9KVmlce!{KBoWca}mNac9@`w;+_3jtDnP4gBUM&_xAPDhROt6${$FdJ5p{#bG zCEj_`HjY!6aPB$VAde@=!;UE1gb9{X{X_P_-$7Ic(dBZHKqgpMu7MTt^Ln2KgKb^ zQfj>-b{U%XCWyKq%2sc^n^TxjrO+6A5u7f;lA|9iIljD?Xx^@L85SFJJi7aw;mNS~ znB%ec_&(+`e$V#WejEld5kv}XKUj+CPUo-SNproY0I)pMVR>c=%QJq~u>L8~x6bnD zTZ?YGg5NW}y4QUm7G3kVMqppdQcQE+D68{PI&9S}VXIbXZ7R-$X4nH^pT^JSCt-gM zYpN!H`&t{&b4|7Du|R6Hrt^CWoiY={hcH7q^8E7sKNB<>1q(i~EhH%=`<+zn5U?+AjWm{zNB z@gz-~h0{J|-PRndyLYks5#Pa5Ogk;;Sc>V>qp#yhVczd34ts_b*w@0o#A>oW-40$o z!BdJX#k8k%^DF^bis=)#)9|Em-uhSpYr{#<6n%+0Ka!SV@Aznpr~R-L)0%b%#C{NO zfnX`7KYJq`Pa5TIiS^JDJEJ9Lq9sOkOo5hM+J7s(sIWEhshkQ8{Yzmcc=L=oWevzTn5eu zhkHi`5ifHdh%Z5yIq-1|r!aByj~n)D(W5=~ES}vR zZgABMcgE^noWewAW(H0ahkI85LWf)h#PNWU0Zgz|%&i-C+Xkb(1g!3jH}c9VKZObP zBzZbw|;_8F@iaS9Xa4PW(Gp5?#Q}sd`HPyAbA&?I41^U(P8^sMaGiFYqh|Ax;`Z9-P92YRB?y z;yDO$;@)dz#Xu%lO0{XB(UEmtz?%oBFrj*s)R(AJ0Qpu|VJ9IqEKI0bLcUcJ-U>PZ zqf`Iq0i42w8uR7(hsfguzT^1?pIA;|LXAq25OoeO2v1ot!BT3>mnRM4RHh&D7*%CP zET=G`M%Vv6n_z;aR9VTh3G5(^Ey!aiY(JEgm_HQ#-?>DdmUQ%vJ}(m`^2p6 z@tZKmQuPiG0w{`Px?RdU@2Y);YLr?c_$FrxfKFAg^8G3h^0Ax zs@KBw3EpZJhyg1r1~9==tIMUpVsDyvY~Kq)oK)BAG~Yq66t4hrKMsgp$Rm8^j{%&* zMEZzi^t2h?v0aR!b&*HP#A2~buvAouWLO){ps^j*ZMZU4$1uTC;Te};BRt1DQj7ER zV>o>+)cW;UPGKVE))iRL&F~Uu@m4;_qfN%@047*UZW^C}$IfeZ+)V^J6 zKPupKsVsE*9YC-Y)0`hx`cpIYpRkWAfipnGa@|NdjBou$-;KiU_ir#mw2uoTmrA7Vhj zYVw_5qRkZ8i}JHlOWd~q{V38t4i65s7ZuuiSYQ`#sV`j{ZO+0eGD|Vdd28CJjgdj+ zcc#ZLJ2t^$tuvqeseP?nQ8597=WXLm2->@FVX z&YZ%UB7PEV&j)3i7cPbvsTqlSe(q;nOz=53tcr6Fo2j?_jZ5eJ3{GLa4?hWKUh$Ff zRR*O8je)HJ>tWbZL6xr5$&5V^8MNx#^mzAwtP@zP>Li-ul zD65QMeLHsBi_ot4xtsTA*vsFW;ju_yy|1QymL04IZ;v*U(RNviX|}k~v?yp;zVK?i z*v4F0`HFLAWnnB^;u;X$L45wn-;G#`X|_p6#6=KYK@_T0B8~}`QWnPYjQ(E`W1w3y z>s1fr6eg5Emaq@-SkPIcK`bs>CYDo}P}au6F8~p(k%t?)r8f0e1~S1?`My#@zq{7^ z9g9*6#c~Q0PTwWis(CbbeP&mT$< zLLQHi$A1ZyQuQRg0kPY*u#rb!P`VR~mWkmMCR96?Yla~x z-CS{wQ-5V%OBByyDb=Q>oj!If7VOA8-@z$Ns2(N964+l^u)ngh4$lbW6ehM0fv30c zR6B1aV@*dMZTrrR zXz^PSa>w!ph^u(3=OqT@xa(9br!b*BZRFUFHMNB` zwYd>vI}`(01lWrC&RMrPapG@atzM-4}vr+ZIdIfaQUi4Sphr{Xif zvfp|ec??P|6vG5d9V?V&4~kdO7NCu?D&spUUsw~s1WPSjnr+YgSDX)u*a`1~*pHUD zQ=1;kDGuV*ES%k`Xbae@SR(lCfVM5i79NWcs<%_r4Rj+zp zyAsc0Db-@+*e-f)QxIc|E)L*4SW2~NIf@!6s~^S4P;X@br!b+~u^ij$gZK-?&6*|h zdaZaCOR3%^$MzJwRVuzbZBklb>#3PI6I$re#IrZ3^4gN)l^SXz*6; zk;en*!kJ(xr^lg~IiaWa^m9&Of_({L;{`(WkNTZT#c&D}%ClJ7&_iEh#d-5!f~A~3 ziel|k2YFl#cpShfOeoJVxrRFj0va!?)76jwPGN%mpk*AEDj-DZGQm>piH3X0kOwqg z9)eStP*0M5@C*ns8+5xG62mD>s5g{W_hM|Hi?S+*QvfDdN|i{SzQlSL#Jr4}d1WP1 zm{4^i^(A6m(%V}f{4ADI^(6a8RS-r0Q-dOf3DtV!nnCnIb$-q%OsIA&^(DJOypvbD z(koUxi=|YXmTQK2ASQrls=XS=DNLvyCD#mv@Eu>`I}SB{7|1D1sE8i&t;C5ttnRHp zLV{vBg$Wg(BTpA@oj@KP#=H~2DNOve{|-)H=i8FFfjm?UAtqQ##pIBhZ4v9G6yECn zDn$c1g^9C)_i*|;$IjD*Td>nNVW%I<1WTzBk-G5x$U{Vjc^{VjO6tEcOB9jk2kEhT zfi65R4?!@kzE4D0!A&&C<0Rf{ZT6hJvJxpwsBe;ligF`*EkBE;R6R+}HcoylXtvEO zA@Kp6!i1_DNhE_v2QhSWqc|p5N`1K;sl{sPR}iOg&dCHzar6QiJt+x<_zosm${Di; zx^N4+a5Ecua0(L~g+Zk`8$Ok^L(wrf?G;w37fbju)*anQFj!BQ%3IZ`L! zt;8JVJFH9ITZt4VRDN;Wx^N4+aI?b0^ZZi+*5Ic1J2-_2)sE%Z zejS7uMP1rb$GFQ;Bdu#AjeBra5o) zqO(!@IOwVGBiaH#OO=(_K{|J-4^BntTc7({J|aE?MQdT2^Tv+OH%Y&q;csn%B?sFG zS9N9B@A}WQm&6Tpv9&Q`m?lK&mkPXKwJF!mVkx$Jb`o#ELZ}*amfc_{qrBQge2*%x zU42f;qWRlG4-q>p0h{KzeN5n4nF=jY6$7VMUMV7Js8I%Iwp`yZ=F2+~J! z3gWPwMjV#mAXtiNenU^`#(yN^GZ_3VRl34QQI)RrYCH~$ttwuErI_ZtHEkYh5QL~f zgP*19S-iWdS@|7h5km-XL?TeN6{(3`AWJEX6eE4Sg%dt2waPib6}| zXDKT!(O#AHmTbFZ6=tv$)0{UV#A2kbj(M;()`@KW$2M@Pq@|T!3CvONV{HGj%8VG6 zV%lkK2tQ#9e!`wr1`{mhw1*R#RH5a32yaL1hEZX*i5jLY9&&iSQIt*3BJ4-Jft~=38$s(1>}(hqFVKqflRQ} zo)gLNqo3{dqkkEBGy@@4GMvK1&DB?60U>?#h-y!ng z6ed)D(gLC(@<{Zqub5yd^|sRUUbS5xL_**cCRB;YK3D*Gh+S&=Ml}OCg$Y&Ca@DsS zrP~iRm{Kjjbj7n+O4V$hAH9WG7M`-=6ed)Qk!v`i-);Awb|s$0QmTc@F%iD{o;->- zS{=YCOsKvhcfuQyhtMHg_zosmO7)vOKY9y(^d|i1V>yKh)tlvv1AEcDQyCr^)Qltg zHe1bltf@TyYTJQ#MzBTiwW z%DS8O=-nf|1nx+&s)OiLeg7^dSW3~d*Q!0I7#WygDfNAFWDq;ZSG;A#DNLwRko}xX zmkE|qr7ruqIR6lFoy%5l8N(?|sM?hM99DXssM*Pg2*d5}tS&7UE@?|J*(8cq@mL*F!;S)ea$#3do}qtUoyqwUQB1YQ6HmdN@Z4Jy*S< z)Wg+)SIW1rraE>nQRmr!&nF3(Vc zR`6Lri=~*Z4j+@@Uyt`%4s<{S<-R$-R-3ZzEKXrNbdC*x(>`b>a^P3A7=A@8#Wd%q zX+I+_=dM3PjMGmNb$vxLy!)j^tg`+TS`}rbDRnZ_!x0Gq@k^#ai^Eb(KWvh0&pxg! zW#cO+nX#ArjkL>t##1+<5%^5^Xfye_%C1xDWU9QJWZt{&Z=5;qXRs90oFA;N5i_$e zVvG2|+ECeV3Ox)H&OF>FqRhBQzQ${Q?Hp1}mn@%Z*ZW>sE+0h{+OXZxdJN+4DvQsF zuufnprV;b(POurZDO!IS5inVbX%*K%JW12$AQD2_g!G`#uy>^JVDgKG>hD{w(?d(@x@_N=f>ZWPdB?f}bM~ zrd9u!J!&$>tEw2Uj9ZDi8ka=BV=1OJt-zd2eHr4nXCay{OEIm+F{u}|_vh$KPxP>^ zuJqB_e~6`+M!Pzaqu;>Tei8ErOEF!te7ZfZpYlY?0r485f1g_IW2$F~v6iKnhLs-P zswdv+4(1P*Vp`=bHS{f^5q^x3dMiesZxi4XcR<)*oXLxLBJ3no#1m;VF+MC){}Ni~ z=a_3%#1oOi^pVUI`_p9kBuz_4o##L&^F8YPjn`6fmk8o}z*dc=nAWsc$|dQafVcy# zGfOcY-YM07$6r1PdQoVE-+AI|6@sQHW@9SuM2Ym+h_V#ZxVaZzrsJSn!u+h<&!X$Ku1<{OSHK|^g+sF;P9)6<2A(-iR=GQuoTlTx4MekV9x zhebR~G3|_*`8A?VN1h5X>R=7WDZFmyCuv$E5F)_^BveWz#HT)3B{O-&}yZ zOczE5#m`TV7x9o;ifN|}{gLR%`18X(_U(=v5twl1QD;-I`EydVz7I1e$HL)T7nCo$ z^aZ$t*?A};T4&()2u>;4Al)9|JKHW9Q`@CH4YfrpJ#~n2JZouVw&^Qv~E?C z%pHj3orr$Ugo@%J?#giHQSZehbA7tMA+)tD#WY8RLd26%ndad$A;w&c)SSYRTlh&B z6BlNh@y9}pOVt0xAEu8i70f@dJW_B*P zo28g`dO>^+qCAM?hqnq?SI9xIl&U9bXDM1@V-P~)#VJgv)+6mK zvqAibx9S@an%AyG3KPM&G3XQA7}UTMr)VOGpO8nZlPd!GSuCa6w6wGQ9bayvmCP#e zQ4>yKf_-z~-HklvAdfHH6&rJ}Ro*VbzM02LO@pq_n1keeiqZp>qgo-cLyQrqb=;Om|!VBSJ$*#AP`+l->_qmBM+8x#sq{W)mV%?W}jaX zz$r`&x{!{w=uE6?BcW&b0mLv6KhLZc$OKEN+XUquJg`ai#AkRsxK=C^Eai-C*c3Im z1%2?#>OBKFg$ee2(zHnAF&}SbSMM3i1WPGe_9)@2-x5T@A+`R`JcN{bTNwcp9y|s- zk&LjJ`QIT@___I|AZ(qXtu@-9J`R@Y+nArlQqGxEjc_Z9Kc_prRV0Ws4pExF1sytRT9k8mo@9Bg6@a2c`p>xmOOt2L9V9%+gu>`~?gK9bQU@0H? zc0Pe`=MqnxBIv1&6(E{jDd!+qiersxnizd>GHU#LZ);;tVd55iJ9FXNIo=a>s0N6p zn9l>pRCEw5rPeDlPEijKXOYL^go$};ACba@CwGKoa_697)G~3x~T1(ggyoDWPN$emwqBTn~t!bZts1Kqz2$o`6*+a^6gU;AZ z_(J<}7upYw9nDfq%Nh&Thq5*kT6rgt1i~AqDDTb}A;ozp`x5bgtlMGr;=Q-e z;7Hk=hm$ymh@^gqVcH%0D3)TH?Rqt>6zqN4!FnegU(OM~S&C`ci^AT=8`;QUDW;Xp zt*noeuv_{RcL^Oqo%1aSEXA~@T?VlNaf;qUowF3vY$1pk5U{3tj@uo3pe3@kArpMd z1KJgcUa-G1v5#UYrk#19N15nRhUigjXUWgy+bTT0)+v^&G~8CThL5&0TB+3mr4;n82nuIBMfm<5jXFovUaS&C`CK^9RQ#$}rA5p(%0yvaF*J(2iHAf{!Sy-tQ0 z;#`fTnC2T~HSI#RBs1Z%zp?wGpTQ~YyTnh@w1H)l%qM8=a}f!FrI>c!wY6+^ralTf z%P@Qg$1vrU411X)PSG$##``P8YIY}4XDOz6je>is3nl3tU@zJUZ^bc8S&C^*D_T5B zAD!-RMWPR~6w|z_fp`D$DE(%(uXP9~ChW`3QcUA6p<7XUdX}#>6IvXWVwzVq*c;@J z?Uouvh3|qIssHP(01t)yvE3oXv>K_U7X;$NsTs#o^MrV=nwNwhgPMt?Ps4M}Y8a_a zjMNrOG0ks?F%fg^1kANta1y6xPT{-2w3=(BPs2~p4kDtQB_hhP6w}VPx`Y)#PuMyi zL~KK~HW2-p31=QQ&LD+myAw_=S&C`3mXIUEV%&Fk2_yAXv=X*XP*I1(%7UY3A*wva z_VysogJ3D9*#<$=zQT-?jTxsFW*im&NX%X=E&4hi8o=I^Y*MV@@7sI z$4RUv__>bLel0!!c3^|0nCAQtDI`C(VcyxDSWWPAot6U~K%AJA9@GPC29{E~a6xl^ zn$|{Zsb@z=oBhxdc~z`5wEtbnVm`0dQlGOX+T0W|*kUQBRrC`XE%fx?QTo8!zSh!; z?JQp1vlP>aTz@!9{|c?Wzh66xrI=PxT)gp+>nG`LulQTy_6Sa4%>+kv)wF9bCFx@^ z!qqtAXR#F1oS&ve%*#ZS{}3bSpG1>A^*Dk6$2fquJ!Z}o(AM_B{RS+>H2dQr1~$&N z_u*{&E+V&Zit+~+9vu86_$cPz2Whbs(@x*Mk+|1#1Man)SE-%FDa!v`_k|uUgS93R=}QmOgo9Ma2md5U9?^~a!!nBi^ ziTR@k?ynv4pFEgW5ewvZ41Ex+r(rf|g+8dfIYb?>6w{j41$RMo*b!}(0KrmBD~}QB z!P6ge?buvj>ui~Jmhub{ZHc9rhJDF}DE$}o!P=fW&yNAYwDLERenm|y%1E~%=!2Z1 zyj_H)i}HezRxiP2ll1S=2V0!-vsj90&QH^h!sn+l?lBp6E79aG%b7y`Q`+2bsKW_R1k%ag@i#Lm#F!R04nC86U zj{~9*@|d<(+y9_!fmh< zew>kLvJ}&tAMS=bm}Bg`&n^uqOirq&*hkq@M`pGKO#Y}6w{m^_MBy= z25kyTkN+I~gHK;LN}kd{%O2G?1@mA`w0Q<=QBGkWMYSK4z4l=FmU_)a(Pr?}!4^v~ z&H2GI>_n8lM0>&d8+V5Bxe7m*pM+?LSXpir`zX{o6YO`Hze5(|?xHc7ddG7iR{h&p zC(=zVEX6cp-D6g>p#yjUBQ;Agt#~I!p!e==QKBmPiL8&0aYOfHcpTP4uT_y$gcQ^2zHM0_XD>yW6JVENW29DE z4lz$K?IhNnj4}tK*V@?EvJ}%wk0NKB_;N|+F7&8&*w?aDz8)qrFSd*%60oMuO@S8Y zFF%W=n9kSFh#DLKP0?UzigKYN;}oS&5~a&eLNpQ(ok3)PU@4}Ro=MgqZs#&_JC`AD z=i(IBi}8~jS~ZiUm}Y$$&NTCsqFVeDdt<#MUusysKGnaGWAX9Q5`_A z6w}JyPu2%k048os*KuRIwR7(^+(sE;i+;dw*kk@R`{Ipo&;N1LA9Mh3Y>C$QfM6-6 zonPJ`dz>TV(}TXjn5eAS#GJ~{Rl9pR*Ou5889!-edQfc;EX6eEhnpR+W9c+c?r~U3 z+1ZJ2QkHeHpMQZH*x*?_7tH7UEM@m7`nIxkl>PiY=*YG`f*(ERbCzP7^G4)I zXuQ6X_PbWT&1R(Ix%?!Y>SK>{4YR>`j3t~q)7;)*hx}TSSr>L>snAUD39qsp6B-Y; zGD8MG3y7FBk3;uaOYUB!87c?!N6h~8@Lg#E7S z6XKMeZ};O{|2!Ic9U6K|Xy{prY1O0Tss2@*jQ)Ug&X1vQ=a|dv2gwnlv1R~)lLiYX z4LVCP%^r@LRukXR3Exp2Z^h4I4^WPcjVPNSJ_V7AQyG?Gn)BAQy7_sS{46CUPGS@- zPh|o?bVnYzbJAofra5m|6&L);yqDr@46EAC;8QkYQvQCcDSq1ToZt-bK?f&46%QhieruotyXd42Ucg$Xq> zNMC^d*q`gz8)QKnrOt=M`I$O{5~o(`Vqk;FUD`@jR#2!kB}OEJxU&>nwI zvnz-QctLQAdPCtA%};U?EXB0SPx@3xp{#6_l|SZlPEq9}yrTI@nzjSFCEWUE;MO;t zrI=RbCVi?8VXi#~ZEcwyK91csM_}h2GVTR{heFwD=|RnLuEy<0t)oTjQ)^$@uHJ(e zT_CJ?dV*jnrn!Y`+B-Ngxetxk$HKeDyAu-qgJ~yG85*y<@CLjCf~A;Ny9wC`FXEiD zG)_j>;bfHiIZH9EX(7;&E%?XR&~f6f%nqepdwJ;PI2?|j%I&5kq0%yP!X z1dmFZwj5_(t#DhxTbKMCZ^g7TkJoYM{T$T!>sTim;c0eI>IBc7_xxNQU7=3|F%m>+ z5G=(s=ZBNgQ#s}_*q1EXAy%(x_RjC*%)-y*Sps@d5EZc#eh2-7rI_aYuoDL11L7rk zNUIbvr}A^vljL061;j+yFPKb9% zPU}yWV%qsusjz#!1ncNGYLy6N?^QJt2~B|-6QyPXt5@S8h^(;PF)YP2d!Kq%OP)K! z5^9!c%mhoRQAuhIl;=x0Vn=fd6Wqo;w?`Pm@m5$MYn;M_@)?yHuMzl;ZLs+5hCG;H zDQDZQ1DoyJu-V>?I}|vD31^R*fjp)nj|uwx08U|oJzV8obm|^OCRoZjGVDYi>b^Tp zVM0Agu6L(_n1Qzn)91%<3KQxL<+IgHxDL zbt6wqgm=v%J?F%4cs2#X^EV|gz8apm4Q{bQPf*joWg|jtOzT8<6VEdV zfav(fV-Wjm&dw{V|3)cL-y{jdtnu8)hT9|Z%1WfLl&U8gK>(VGyt_;}g$Y$Rk`UuA z?sxXID<)Voh=2RdPEX8_QO+zeiqoKDxm|!V&q9~&jAa1Sk0ApfH z%paV>1nXgON`^c}A&*Z+9*SjxrC7s?d&5EC_6W~d!URk4IfbT)@k-QrMc+AroWg`t zTdTZfr=C0z!vsqyEvH<=iC$X_Zd9%1122>tijJ<+c6PhTCx4=Hx? z2yv&y7MG@-MIHsbU(N*UVb$Bpks7y07`Qz`|NN6(d2c0Bm{9r2*+6(_o&XVX@<0GT zi>2~QL5%I9f8h2A{VaXC$b+R+J;|{hQJ@Um9-((d>2eAas&3@iJ_p1ke0krIhw|E$ zcos{k79+=YF_z%=2uCXs1WTzlEys3Iy5hFY?YKRHQwTg^ATcu;ujH9<9f zCs~Vryz2h@ak#y#Z5>xagKO^Z=0wrhS(jg~X|WX3 z?_El9pZspB9af?j2r;gU_N(FVPMu`;qZ*U#=Qk`@uRE#kd3&eWTe5z1ssD@Lnuchk z#wjoHe@QVdersC41^)*5{XE`ydB*9W`#x#z4%1LR{(D^mKDzGyso6ODV2NK`wc1^G z_x?nb+a3^u;1$j3?ci8{3~p>ow8HiNES@^3h~_T3VqN9UiB;JG?U4?)qn;77a#Rb@x6q*?tl# z?suLx{A`f1;bZ;HJEIL(4En?$;kMSZP>V}*uDPe*3b$RU1zU7|<(hj~op3whc>xe7 z8n&{cYZo>?UvKG$I;6P&s1|Ooc`w!V@}U%WaB7&{@V(ovB~w$}-zSFIecw#MTkUAl z%6h9xVME(s=`6+c#0@F#ZLfyg9Uh@Xv`ZUDT8Wbz=@%Nc*R{W{xWl%f-0vT8Y0>yS zAN{dZl1n>s#jT-7Y1K}GXg|7}^--*)yFM_@uv4h1xu`*{ugiTX*&X>}ggv+Wx2|^z zr?^`LMA)}#h_?H?bxyC-s-aP--7C)0t)J$0HJfOUntR<*(zrF$uVK)Q=KF%Oqb3@E zbwMe98DaN+R;b1OcGujYp%M0*QH5G?8RA~#eNBSOte6*6+;5V>QcR!KuDM@IiLm`V zeyJb-hPBVNTr(r;#-3$euDkcn3A594gV3X{y6Y5}jN1d6x{8&(?yjYwZu&ODcjy>J ze}aB@#fJ?WvlP>X7hQ9^uBsFF+US38UWV6ehCgU3WLGA7;CX-VPO*{SgO~X*WGDnm36{6c*}Mzs9DELood1_+%&U zf*5su4-+g^%Ul1SEg1~r3Cc>{48#OWtt_AB{vbk~6_r|yJ8}awtI60JyE%o4a_GS+ z=)pyO$0HBFxKN|=gIsgT$ze^IV5!#OY3|BpCfF;or-3LEA8OP{$u)1hm=nhYOD#Yi zr`D*`rOC@fjT^NzYsKHGyE%o4w^ygRG1A&$RTm+Tvs*%q&x&c*zGjD;Fu_s-_olfA zwHa?WSh^C#wiv_%c${l)=~gV336|vr$j8;+vtt2^XbsVQKabaJYdsV~n z-ZfkV>I2^WmWDqjSW4wBS7Zwjlf&m}t~s!FXk$)c;(asC{lGQeu68B{-?3$DsByoD zW{rDga9&x7XR%aPbeendG?Z1^enFtDwxFygj9MJWd9YM|J&9FcISW1Ne6IP%XQipm z&$yUqIXTVUxWoiIthX59-awsiPtG;J_^@Xaeiloq7AjYLeW!&QKZj`6{QiaWTDwSL zg69%V`#2UiTW95(oyPu_*P{f%QmP$`@ln&<=(Y1O`fQ8b)tGZW zzO>Xqu$1cmaxMDBTIfqEXjY%kQhwtUCY&?p_iI9p4=ZX`tK?MC=2n&sd2*l$d*R9)k`yF(n-r7Lnk97VfY ziFVaz>yHkCrPK&6*SqVsg&I$NHS6bwMfY$D6Ln3@?Ik1au-&=HL#)Eb;-&k-1JFP zjZ&E4^#lCXFv2~H$u)B}ZQRQQOF7pi$wx54EeA2D++I#$f@f6RI*tBO@Aq7DcHiF3 znP4ei6JdST9W!SG&8l3dc08vr;hdfQ|NYc>A9a4}huQJG@@}~5s{6`htgn80EpMiN zu%|ZaBVc5x(W)A1uwbzumSQ@f?N#?@m8aO%K7RwmrEd{$sjg-Pt}htGDNMwSz2@## zJi@*l@H&X!!a|K*T{Np!sg8S?V5yzvHFx75u!igMCWyn4=(RO9tKRC%*SgU4CuvD)tsqTUGB0W}`nzm$hs4)$r&+?@! z9Ry1SR!Mc&tvS_pjrtI8HDCiYETuK;!^_#bIfaQ+byM9rrKWmqIj>v@HD-;@HLsni z`5O}~<=m_NgFg7e-CVQz&#Rkq3KP8R!&_m5%R*~k*?empr!Y|^F~wbHpNQ%hiSKCk zL#Pq{HX_$o4QRpyOBEi59b|`Tb_G2G#8(*G&tq(#8}jpSoWevg>@r4ApJop~FcZWr ztQnSJ^{U~IQ;uI$4RZnsI{x!|k>i-PlAFO@qKFT$#q-F(j3KPACq_{VJth7=4@EzCi9X*cw zHerILs#HjEe{@q3Eitw~$J%G3-7}U`m{9r2wa;LDxs`@7u|lieOt9147&Gj{_!LwRT zIfV(;j^%1;{&(21G}Np$TfcA+ES0i1#XUU<+K&e}kVmEOLyhk5YSzxP%bRiv6RHQx zmCUhJoXTMIiN5~h9wu0-^Gm7jlptsgmOVfoDHyLp2IiUv?{?n9DNLx5NUmh2Bp?>j zDcl(r+oLHHEHxivV!|?v)U|{*YHebu@%10MW&z)?_izdmYJ8OIk_l+-ow3s2)k$l{ z1WWN+0`{V}+E~>WRkWQWojAx2)4y3)r(u zvis2S2>bWNXnk)$|4z^(Hq{+zX<^?6%!*Idmkf716Y$ zmY-UB!(a8voA;Wt)+W2(xe#Gb>j2FrYo$_YA#v-mXRHw?0$c4 zqBilE>{-veh0tX-p7}}UTLAZYWEan1x~N9#L-(w*e* zVqK=DwRqCktZ*+u9~{)*(7uFL_AcuDdM?}t@-YbsW+%R@?7&F0oK*H-Ch^;Tc|q^WCSNQ%4v4^!+P&$V(T%t~>G)kP_62*P)K zP_&12ZsQ)kaP>VV>yuc|#B~E5*`40jzJ@FHcaFuHtV3ieu31EzZv2sTI^>K#_p3y` zRBp1n^H!-D-dZ=~2awqe}*^BhB>Zqxo(C->JwQ8<8SKJ9EzPxuLh`w8gTJL?`$xOVq zKxf?>(_Nb-yCa58wLcqs3Pg>FUgq8>JI$7^fd;oF9u4j{Pj#>8j6AA}`gqhPHmG{U zAY;#$iF)tC*WKC&&}L?wacxM2PWJ_&mB$QF7ymyo&eonl@244^V}qi@2N~@LC+aN4 zv{Nto=!m}+Q2(0w+ZUycj(#cb2JcU`->P}jl`s#ba2f6O$u(Elon&{yQk2N`ROInm zWMRuayns1jMOTCSf#cm{Qrub!`g#3-LHM*NY@L4j74t~7t_Djn%_V}!MwK)xRqtjE zS>tc=*vG2@$5^SQ%`RjWY2{4~NVeQ?Jty1AqE&TCuDC5w{X1K!4nymyX^S5CYp(zH{# zlW+=fS)2q|N~bS$_jl@~xaWKkZm)*^Ld^`~H`Z-hn0^)ncB__CN}d}?I{!QYk#v3@ zX=N>(Vn+MT3mW#-6?dg$DHS=DdT1Ljns>YF4sqUsl z!|X25u(*m}b8FF<$<9A^-Rhg_Uc6Vv`Nlo!(6Q)c3QyDWFH=5GFdXeLhL|8>QBw`p3ge)+~H#@P|w zO_pMsb#hqst-sRTXLxS&j6Wth#&+JNsydfD;bUEjSOZ!=*XPu0U~wB&bDz-4bF0*} zs7Z60@0#|Z(e+eWq=A;CRj?H6^RoX>QlGGHRlv2cov0)>9tU+P#0Lx-QU!V z35V2H?4u@y+5h^DMjmtS!G_*HSGT?yut%d5Cc^Gvlqi7_wbUdKO>T!;QB8C8Ic<;b z;S?sE=Y!SvhFV82=jwH{PBmkKrT(g&>YmVRlAZR_6yz~5G1Pi;C|57?|Jb_j_@1u! ze{I!LYSb39YR^Pf?u{F>Vyit$7mC_yRg8#PYL$i-wPKG-qU0Vvwiq>Q3qpd#-lTr- z^SPfR@6+Eme|=s#&-Z*L$Ji{ zlU(#?v{A1K-agxCSnUVC+|CG%Y8eoj!Go(vn{bT|UBt+RuCDQ_+`7=jL@i-`}(nQClG%EaqGYvGj?Db4Pg+K8g=&^-0%eNbLNK+`Le&Dz$xMmN?!CZ4iR3q}u)C^Tl1nlp=<8VOfSc3L#g+&c0V|qc^zP&S^o~ z>M>4_>LMn0HLO-;%!;R z4MuMDrJru+60TQ2IVax7Ynv5ak1Z}?g!=8SlDuQOh<`g8R&dm#+W!k7seU?i)!tod zw5OHVL&#czH`YHiEWd;zwYh}rZLtmG)*UBK*&UeksFhvB>pX@v;Cf(fE@6ZkH+Rk_ z?d>AI^}I1VJG=kV5oxozGwiAz`T^#q>>;#q1)Mqn*}vyaSXG-#xZYd!uG$HYe)JR_ zDy8sAe{~UKF26DJgyyQlC5+H-sk={i5g`-tT0x(v?Tlcmov*EkW&~4R9(l!{@$)#(&V-9-qc9M+cfT>mFW#yl znCje;EB1lr<2pZRCm#@e1uL;=47BJYONv3$>9e-_ry7{;DUjm3-H zg+-z4%VU{}(d+?(*zl?ePCdW*b$%%NwFsSud;ecJC%!Ki6dI2k_FVkFSTiW779`|< zamPJW1z%OL{mQ`b%YCdbmd85t|Hd7#0c4!4lY$bnC)hnIjPlg~BK$wTQNz|hbUYLJws2N3}TtFT()a=K=09>rNjQl zSM~qxSLbWvE2~w`^-kyqki0^`0Svs`#$RFMe&rF%c?0}xGqG2CewImjwEp@_*oP%LHk z4NR~Fe5QWeByaSWH_mdd_wHqlSvt?;TQy6QEM?*~k8+l%`}94rF{9A527b^18TWD9 zdi+n2t^=rV1c~jxWfS>Fc}%8at-&hXEH_pU_ZUZ^e=x4xZX`aKP*jXqbhu9a-dF51 zqu@bxWUF?&)7Mq@@cZV%dTp#Fg(FP1nICD5iMZU7k_8ohElIytQPFUwo$ z*TS1-WT+?mt=Bw6?SyuQUZfW0dFGg) z&{L3i>Pxu|UMRDmJMrlmah{**C7cswoRn0@4C;iHArS{~POz62dv6&%=7ubIRNuBF2!FmH8uEWue76Sj_okNvQMr zw80t|Wwe32K~Q_N7g`lx)w)+PGyM0#=9k@uSZtSP?J3*R4P(~)=Vs}#&8z{F)@oWc z_7>rthWuCa2Z^te`Zx{xH#d*Jd&NHKnds#*tV4_+0e#{Xe3jQTv-ahIVnOyk&ZgO2 zOr~Nqa|y#}5ftkb99G}Tw>YE4cXHz>c5NVL4eM3EpO-zG!z?;}syMK4S~Wmr$C^W8=lhXroP)Xh3G_=Txak@iF1AM>kM z6jvLRw>FGfWU}nTW2MP<#;rV6M4<&0t;6#sm`ug!&>0x%_psXg$D`->n?5)Dyx-ND zkZ?VgN0+rjy7uGye$ySNaeu4D)Yc}SGJG!S{3`wHY0ib~-&%nYDCdyfen?Lfvkn$)p{zcFw1cMn#-c zM|@aN=uZ6ZDOdiFXyd@1+M?zD53QQh)|)Jg@~OtNiTv%4{6x_4U!B1{14R7y@pe!& zzIP8e8GU;w=}3{!^5Lt%Gr^;+lQkA=bN+9$1UvDwk)HY0mTJ38z7+e8IrY;~R-LGS zVws9pjJ`^&q#R<@)SKqHud9hKCdI?E7aHuBoi%MX+l}xNO+ZfZ@sW#WyWTZ4eIlb- zw}@!jTQvk9B!B(}-%~{Ps5HjTMyzQ!$z?O*qx61&ARNYnTz4D_REG zAXql!I0VDk*~wpQJQ-k)+f>nFDn=Xc;m+9v62N)`R+%3HW;iweyy@)8(!r`S536Jd zR!P2RL2T{Str>%6jTX0>ybjz^Yj_~*NLX91p9c1g;-azPIF&xABzX1ls$>f$?1L@K zh;x3QT7RDST$93iuV`|YvFJ%zv(JWK&1oI`TYUEMnP|7XZcqCw)bnbp?0Ni!bk_BA z?X0hV@Hg4xlcNXpb8vP2!eT~`Kh5*M*3{&7w!X0p4=v~S#l+aY>&$giYgkOhQh&dg ztM=c1<2>Qr@^Wp^qIJI>52KO@NS3qgt`Mtovyk; zN?k8>8BNk#^Rslejy0_t$lkGhTJnhCuI4wy99{2_**N=`!Vfn3P-&x|@M#cxlC$>~ zUcwx5Dz@&?wobW(A1wCLi-E-?D0;kS@tO2>*+bAUPW|NxToI7R++BQ>#S#nKgxO;c znREu`6lMH|J2{^>)@+a*kHc#kx{QkX#Qfv~rqQXUHXm#`W*aN=25rkD*4#dB#uzm$ zrsCPuXYlg&@y?I!hgoOCC)VLvV_w2mC&ReY{&Vr^h%B)=>txsV2cIQ6r`~^KmUHC& z-qy`-vow1Y#}e^f6d4yq7BM{WmATea#Zuf-MsV;=NLgj1*8=Wpx3Y-$a=$V!q*T#t z^o-^aK|ZSQ3WyrH1vJ|=HQvtreCG74cK`371NgfV+St1$+(|h;*!p$#>sXGD(pEUx zTMT1L(Me9xJAZR|)1*$|MOgMJB` z34MFepSV-`%?VlznL1v|)Gegv*{KWVM7F$R&Gp@@>%5)#IrA0xCk|WhObBjiWj&Ch zNqsDrvQ`9oxW4P1{(D>I&rSG(yOT|XZ!GR9{#AGR42o3sCAJO4wh(LO7K*v6u- z-Ssgi&4usPvBt){BlsTGf2uFqEq*|de)GC~Hc%`ol*@V^740a!sI(li4};px(lf#^ zuGTX}rjN5*FJJ9)n2OO#a(3;59}fS<8Fc@&^JAOtnuiekB(sebp5${P1Djs*Grzh! zQu8BY?se!hN@@BM?N&^&gphYH zlojucuW5Dqa*V0n`{?e>D<3as?QSZT{*_>^sdUiUSpyo{Tady}b=K^_EK9&jcCnf8 z1Y9#i#_xAnvS75*K)X`L*6ZJi!F7h1o0cpzHR}Rvphz=?JLe34v8Hi4@zveunl_3( z+7@rWV&A_9{`hzt=6uw}5OMqThvI14t%0mhWDgNNI@27oKX6g_5bIc;Nt#ukPfkNS zai)IznJAd+1JU$*UF*ymbLQHH(Y}32=f=_+s z&djw9BLR1uR-+18@Bg;ZWKS3EE~}l+n_8tfISv=JmL4lDc%L&LWDh9lmg0Mf0$)xv z*Ju4*zn?R2=LlfqX}9e=%Di9Q>T$_mJEJr|RBaD_di7J0Z+1?z`iJEN>x%hC$2UF0 z2s`nqsCPN1IjCeg!BmXaeFu*{$>vPSmD#G^w4DgDuG@>xK?+}1HHdr8Cj;y_t#dhd z`ed@I^>3%g(KDKS%JAAvtKs6kOl8d7KbJ7sI?Y-<_7KFKb96PQ!?Zt~_<{Wd>n2%e z$s83Kv&_3@uHY8duX8tRUP!D}(>!jBy&3MCL6w?Yk7{kzG7hJ$R}k|O<}r}3`jrvsJAP{23uvip zama4O8XZJ0KPy)Iw}=MT`H97~ea;$a-t)MzJpSs_tr_cEbBC1F^wi8Hbj|jkMTZK{ zlG#BQX?DpPy zoyFZoY1(r}>-zQzv#W`R6G~elMSpWRp9J?-^U*Q(H~rD+Q){)k=XOu+JZDcgT>_Xf zZ?dy+)-v?M4=-T(?F2vA+Bjt`CdrlbYtwf_@+m>kA)({XM!7TK#rCQr5Oa z{`vPmFq6A%-N8~Z_m)Qix1x>Ti(Re0H@^*032Prd`u0XXV!7VproT7DuJ9XFq#QLr(PD;#`~Udxr=^p zv1W^X#MwI@7R8Z^%}+|Y4#V)Ucrif%tvRbm`7jYAfJBU2_`^R>jnAu`o2J0_0>#|Ys<}2rD6uh=pZH;CB z3%2C5=LkF+e|h1&p4e3w;j3bqiqRa$21|9@6;8_04%X$tCmlXh`E1uuPP6U`r+&4L z)~MUZ9j0QmZlixQ;E6N)Q3ug4cSn=s)mR$fSUKp(4yF?)?zR`9Q;VBi!U$bvI5cLf zxujEZE9dblg0oTZJoDKOUHDhw=BZbA%$t|m3!Yn+^mr{Gv+6e!%~zZ6nSMrlP0zq+ z*4!dr#_$Z{-zl9$(J?pb@VN80^E^RkIc%%*(~Tz9_|q>P%~C}-7EP)#oD+XKRh~7q zf`&YHc%~T5a|6EnNtF4=*ZHmey=!UvgU5=;5PmY@N1c6zD~S6yi)!45xf*jK#5;fR z+R2o?mH0Mhjur*MK1Cd}fvA)`KRdJ6WfEp`Q;V%6tZCMH;?SXI%xafvSc9^DAe29Y z%sRsICu>EZ9sGK*Xi#9JQ!uWA!*UdBRrEV&!ahGI!^q*z@$^Hqs1)Wzn(o~Q_~3i7 z^ZjN{flj|@aw2mH)=a|hwLms={fFV^n$W?5qvcrM;d=?<4NkQX^UjRiKIelx7Dv%B z|6pxBawoJHDnbvBcIs?QjOE_)DDWwYIQs1uoczgkM3O38~?OD<(xlM zN5l`wDwvAV!zp`~VPxp=)G6P$o5=OoszBc7ygzu~AbaP^USjR@63+e&J2icx#%qZO z!xM1eKIcvu(^}$rS3hychlNic11?qjoZ#zqtOD(_Yj*=auXuMM=4WpYv3X}wZ2k5( zO+N3K&-3|+sFaue#riGZIEj&=4zD5YlF>MY3dnaK6Szr?aoRgDE(8}2NqryPaefK?3&w} zkiWSW^~;)n)-&P#^CPok@4qf=_3PSLi;rTR6|V)nOggr@=zY}BsGk{;k?6CY!lSm*jK5D zDBWkJ(18#|r-<*hy1&mSVS%E;WkcL7o}jH=mh^Qm);&jma!NOuYVO|i zoo39FnnGw?MBaNT`nmckZN8Z(A7HB z{P!K~oxnat?5Tji+FwEdwT7r`cZ|7WdoVi7Q(Iorjy@M@D|SyeD|C7)IuPrNr;W z=bMi%)zB=8d?xBT{R(q;IX`6!w%RYvY%$+uYcE@rVR!zssMwrgvso-Re7wjjjO*q0 zpmi>tLG-Gg*U7Y|y{2zx4K!<};Po=t5YHMejBPl(v!@*5cUYS=ud?&v3qf!t(RpBPXd}YjHI;!elDG#T&&?Oh2J;l%(4~sIV|I- z^ITf^^!Zr&&gWwNkmKfKoP$ioXe9x-5ugF-u9;J-hgdy(ozVPV*$-Lw?9VtRdPiLG zr8{D-jY0gmnLDWW7`uZ_7r*fBp|@vUa_ z;(Q`3aTvy&z;@>B5gW}NHG5l3#b+OTp&7>ee>^o)!aGl5-pp^H=`8t9&Uba}sC{2MJqMj}4hMC&SVPBtk9^a| z{Ud0g81THAxvt7sJ#Q^VL1=d><3`m6;!RRcG2!2tnh!niN8KYncVs=W+0HAz=pL@^ zTGoZ?`}}rXic>Ay`?0@I?xFdMYUe9?3qgxhC&k$kQa<*_h#r@|%z z`tg>?V81KY%=2hkHP$Wh2?smpjV)%qY$dEhzrx#)EbAQSqd1Yw=wcYv4~`VK(tl|F zc>c7mDWVu0O-o@6bViDTTk@Lo7hH_xNFCNQ?bM>l2aX#k!q0Rw;|_lBa6~`bPuZ@D zSWA1j7`>&G`PDb2HNQS?kFBz}tL?W$qkP$|n2&at>Za(8CS|V&Es}M?I!iqKCA-z> zz3nF72NP)@CMCabyRdcJSXVT2YJ}b;xO6sF;?mhb;}Pr9%8iLRqn~*?#B7j8a-| zD%S7nx6}>s9Yos}j(PrUtjWIeN*0kL%@M%xtU233Q{|c%N(AOp8BPywbH=W(6V#xTt&uRq;MIr;lqTl~jtOx-sr`rZg}Y zH;pw%{N5A3scG5DSqsc|3d4x$TUczE-N?#YAyLbb!cmP{{EzXmWjQCOo->#3>LFOu z%sxKc9weEjZ5`w9Q)bm)dT6|0=@liXsUJ2aNWUw`H$WPj?WjR{kgEjgX%*iV92IQwNGTTj!H;zHfJ*2p`BOs<#bndcv`-E8_j_GqiJ)~K_Vrr+foBx?#0 zgY|D?(PqUHv){lyrdqo)`knpsl}^r$qks2-zqt6JAvQI7X|hd-Z@;V~1*hK7T>QJ} zy7~Ec9+TrdxIK0Eaof02FGO6Nn{3wqc%SxFjOH(d-p45<`u`a2?4N3BF}y6X>K2pG zS>42;(2eF#0UI?A$6QTYp~m!>kz&%-BIfmW`vTc!&i-Dycfx|-M~b`?3z`+*JsZeW zjFx9@T1L63>J3F;sca&3_A*TZU>gEU1BTIieSWdC-)!g7QA^XXu&qGXg~zYR9$0Wg zJ8RCOcQhX_?Uq9JNURdPewrVzxW?lB^S0s1wz+Sdr!6vqoX($YAB!31*;v98G;u(( zogsOg_f1X2590OH34;@3#~m9jo|m|fe8JPa`GOlPyl+oWoZ@|_VbOv6c(Y-u_cz{N z#_RI!ha|=h1%jy zjQ5bM_$ObkV)?RMd3;sTkb*@)v16B%y5lq$Tx4XzZ{F5*9 z@O~f)p$&=P5=LBp_|X2SuFR$@a~0#&X{+%6Krq#JUGE}~@C;ub;X^?kf_MB2DXglgl9u3rT(f~nM6a5MI9K^xL*>sP$#%_WRb^Y0?$oXb^G z5wFWLf~nM+b~E0|#)Y|}rfj_QGt#(PJ_NJS$mv(J5 zmoP%@M;EaPZPY_Q8kNlTcAv`hwW_je>-FeR4 zvWI1y?UAo?hab6(|Nrd$zhMl)`?W2AI1dC@-;)>5LuUM{r#qj!Chj zHc#`E_v~@T)V_z`)4jhTWdPA{L!{FJ2&Q5*w~go;@b<@eRkt-bwHn1shw^FYn%VDx zw@>lN{~JcdRbjCQfoKN=x4~%rtLFY4VGh6>(#P^Qu|%~*dw;rVo-A8S2i?n@WLKXx z#pCzpg_Z66P5bAgQ$4r;ERFr~PVP9f4BlAxJ737UJ>#aGP-wa*W>3c;M(c>rE=HJ> zUuL#WV1TjL5fv3P|unpY)s$ob>U z3pXlTtxp%SxGvs<;rkxi(?61YSMKw+MdHkluT{3L;T>M4Vl=l6JzU9pPRj3*&R2NT z`{nvOwqO78o+__iSkrUfv3oQR^He{&&)S?N*>3sAc+cF_7Z&m}oC$W8t&MbYhV{{? z7=1bVwq3Jum?uBbK>QIFJAXoAY%9E^%q4BI+_pUh!#&s9Z`Epo=UHg7`Oc{jYs&rI zCijpz+_21#?7w3s`ecT5;mPLi;~`eHhr3OtVlYek13(5Au>f<~mwv-Oq`(ui|1}|q#-`x?TTlPkTQ{_=+kr6K`^O!J#M*-*Sp;Ytc zu})U&6`4%_UOo*P6ngM=la~=?FfM6;{_ni0CUjHc6TN6eX{b+@L6pzg0eE0qnJFe;&?=pp&k13wx(Zgk62w%DMsAU`uQHj6(W-4(lhlO= zo2?=v&G#qtvCP@`>;>SQ@~ziJ2kzQWhyCP{udU7%_w4G2-Txa#-rK=u$qkX_LhM1N zVswLrckM1+T{PZfi3|(uFd{MVJM1VW@3z{yRjXI=NBMsp!L2iz+d~Fr@b)KbBAsXW zss;-m+D`v)@3${M{=hEeKiSu(hj#lZ?*G00aL^A&_JgSy-E{c_dt6}`jR?0DVX+^K zPK@pKpMEe}NBH41sQE);>@Xmhiu!UiOvUKUF}H#K*?0fAfU`CRXYD6AYnf_)*=vwLCwXE9 zO|@!HPsZ<`yuT5b3dBYrngPL7jMl#@>|U_*9Y(hS&RVW(beHS)Q*)vxSJn@$JG)Zw zdz$A1{KmTgK==XC0SKmIG`EeL@Z@Bt;)xJprtCKRSdVcEhoOfZgSroYYOvUI$2Y4l(25;Yo8H_(uNJH?q>uvPKoFBhd zS@bzu$YLsPkNad8BQHicd0u7~1@bkqw*7P0{_5Fu?@7;cX@k!9>|?p6dnE(I_~$fw z{xGwcRk(@8RE%cH85Z}msZNKuP9ki5CX+|8!NSM(y%*!XT#ZK^bAB+@DgJjSaUACd zQ!#qcfyefw+!K5}G3H6I^X=+L=Yrhl^t~)CtGlx+A-}@9Y6m%SFc3_|Xzm~0a9a}= z`y+1jqp)kaF11so9IbY+D^tg=4vX!K8~q3%n2OQdwqYz;9TxcGgv7x5#7ksdEVtjT z`@mjt0Ne-iJXYe$u)v+85(B>hf~ojRxNYRQdk}0s+!Sf<7>BVUsgKdR3^)63u=#jP zq&Wcyred`IRrc{zXWEfYV(7X|4$qXDXZe0H&n%>Htdj4rO3JUzMq;RHUH1in4fG$IvL(WVCe=N7R zj<|2nZyxTwL8vxdNq;X8xYt_kica=tDn{$KiNiqT1wyvL2&QV0e-t zzOUjEMyRiHdu{`f0U1dj{{AeQOBlhUfEU1kfG)#Y`g)K*moP%VdEtI8=K8*h5lqEg z8z<+VUBolwFs)m>UNo05g3l7f_Mwe%-&k=8Bls=~`v(w3fyiFGo#J zuMI{pm1=v&nKS4I^d+JI5SfbCd)p6L!U#1YE>9c=#0nr**Z3ofOBkU>y6u6?$ZUky z%*F4%b;Ss#QZwt{=zSn205Q|o4=!PZS~24{6$Bz9#_DUdQ40NF1XHOMdimc%Kukd! zawU#OKe&VuYOh2;|M)-sU<6aCeRJ}4Ng$%o#wTcFV&2lVxP%dEH?NK=1H@b)h5*s? z^`j`}3}f2gx7+Uy_sUe)Lmt_I%g6b&IDZ52E)Y>@gQ*y;+HiTvDIl@}u_CBVxKgg1kG< zC-16#4z_DBf~nLEN!}Bsw_z8N2Va%0K<)r8VZ{8akLpF4}kFZ^@9;irQg*? zV{{i{bhj?M7{w)wsG0q-UA+BR-#$NyjMlrs+uvVy(Vr1arO@uKosO@XlIosnj9@DD zwJv8U0>r!M$LsvLqq&3;Y82dk{yzHA6<^h*MoE80FqIm0cb^k4@#hjosM&P)Igc(Q zm`bf4cb}_%v?#tOic1)wR;9kr_Z)rvcJ0c#m`d#xcb}^^|8$^B04fJevSXC*}&Q)isC(vs#>2f;N`TlSx@%x%g4wsZb8za$1e`uq) zCcLf^p6qPFopXK4ZYQnvupmZsM?a>cAN#!4r3oeDoKBZ2i^dlU2`-64&*!7(t73Xl zKf=I$mY;xD?MNqU#hOfJ*vB{RGDoI++BcXMl(O!I-RI17Pc?k|!pt}A#qUU)m$dvm zJCbVt1l`gb^kV`Len5oIIjT`H8XA^4VX>7aC&qS%gsiluKh4flS86%;L(3W9$yfI( z^rGdV7Y)V#5xZ2Oo^yG2q?0?Wk5Kx=r4@5%RR2OJTM9Z^qf!na&Oj&g?&e76pK*Nz z*TraV8@|prBb;*gGK(ICnh37z5wx5;q2-)uWUR|*!x-cj=d8iqx!mbOLg_!R|Bw>I zh&<4j{s4Wc-|!TS)dj4p0p~-+gEXXEUnK;#Ka zb|Nw7d+%e;sV+uy+dv#mb*3NfBtFA@2bZ?H=ykYV?33-Ggu@p)#-+{ zTN<|_reZX=hs-UA`t6}sTj@e z8OGzElbspILPV{*yG_+Ysa@uJSsM*s=Sj)VrsE;vcj&^IiqYI2<^#9XVCWMoL+=w+ z;Ho|I=ZT)hC3DnmhqnQ%AD-a(dQzUc8}M%5ksI!BXeMw=&HYED8IG06RE+MH5)b{Q zTNA8r`%=xa$2(d5e$V9aTk%PFS3UFD(Ow&^dad2nI`2Q3YSzIXoCK{iQ!zSf!3}%l zH1&eLxhgEM6SSOtv7@32T(@@>9Pe2jl~3!3@{N-JhyH4LSm4AliGgwt>itMV>pee! zdu>P9CK~^zjc=b`hn91!cdVQe3HH|J?r)q1@HHs#qic_1D*i(KtGbO!Hm{uyu}*=* z1q9r*|45qVkvod{%DKO9*bf&>_wF0R*wQ=M>~}823VFO+<35Z|f}QGb*s0=C6F3~K zmhEA+9Qs3#7`Cx|zdXrK-aN@u4VIXd>u*7GH_>wy_7=nV35c;k%qvy*6Q*LcZq4w= zd-Q+dJ^Ifc6syGuruuAsqMh1xiqBSrdz2LqM9J(2W4MG7f#Z|yNya#@h0c37uqNWG zs#gA~79*HSx5N!cKb8UUIQNYIbyAs1Cj9`udzi^DzH+UEM#W}wKMle;<**mZ(O5LJ7 zIg0^d0dZx?_y8_p#2I+>qJDruU!M&kI43{v1c|P)_;zj6O84QuoXKw%_n2J4;3}ZDA@1{3|xhg{p zmoOr2M5Oh#ANmo6e$);OuEiyc;L{FV6m1ko8~5|h(GW~k1#`Y0bME)%2HH4^Hgckk zE8E}O#wCnciFFl%b>;d@WW%~@37?6)8)rvz2_w`x&JAe*FW#b!5k4;qMlhAy1+FHw z4BB{t{Sm$~ZMDl1MyQ?U-f^I3ux6kiMNUuAc5V81Zox}yl6T)JZs%HG;Ztj^#8>^f zVOk7R@t#+0xceNpZ7U<%xV7QEXs(OVEBhruLqFN)f3*XM%0RR@xj2duOjYo9B6R(e zecn{dfam~(fj>qtmE!GEmO%CkjMW?L^ZRv2*5VRIuvCleNkFW?=$36$IEE2SHMCx$ z-6Y>spKlcI=hh;8)!@F%{29Siy7U?c1T?AQ(9#Swxr7lc&$~We(%)y-k_=lJ!Bh(E zdOE4G`mE2gC`K@q`dTSJBL5Y>O8Vk>!b?SS2_yI>1AkEf?NkH3UJDc zF?+>C{2rF(M`ps0%#wa&OvPw!+c5gV3+c(z%vKrLov%eE+Sz{{?db*IF|La7Vf1MUXLA?bI5+^+0Vm*FqQRE);k13=szn;6&<2&Q7RlG|lX&>`b) zu-s=Qi!68@es2@Ktuqy)AyWfU09La0XoIO3UANm+)D-6H2Yb-1U3nG$dy~DR$W)9r z41ZW(N5lF$3}eMqjIN)21vO3b%}2wt5l(+t+}mIV3-pSIAL3N+`e75 z!BmXiyzVk;n&MlDwF<lN$$sJ)>C;o^2jXiW zE(5_-j8^(f_dLG~9oe7Ik)3=qKbl)tH$CZPqek8Jdf5ns?bE|C6{D?fm*8hP&9`e8 z0P!6V{odq{VFXjDo3QlcK`uQYAeWfKmlO=(5=JyB5N|h04EOpr7)A;Z(gwL=WP5)u zVZ@wbmtZBE?&A#7ZjcFI)ow|_XhtyA%%N9cyPfRw%Yb*ZsOjrDmoTDU&MS7i&6B-e z9j=x$HxLsq4ynl{j3{^KBJ66@eNy-tlV}EI2_w|%k-8egkTX~n zZB%HL^XXdN5>MRhif$09tYkw|bgyQ+G6(9kK<3O|+UM-4C7@@e5i%{!Ieib8_O7VPM zLqB_6(`YVXgyOC)0(S#}yMcGk8NpO)L|hI14ImEt#!6Aib5Nn>Z-sDA9A$}<{a`9a ztNzJT+c0F@ptK@y7*I8UOBkX02{xN=7k)snplHoEo<-WVXLoj+OvPw!4<0Ec;>^eK zm8}>=L9lj+>*bn|W%G1|`OA~c)>j3aXb6rNQ8!CB3L?YfU~|LTNOLlLAi1Q_ze#qn zo0Ghe59($qb??y7pA9zaZjUtE!4r_F7|reB9js|#fnQEa41}+{Xvk@+|Xy)#bCn&h@R4P7~Z%xJ2nPWV9sLWEi)S zf}K&YbLIwusTkdKf0CWK{$$Tipz((Eg$Sqdi_GGmd`$$GD4opD(Y@YkTioc(vm(Oz z*vKM&`VjF^q|;+GTa=M|CtaM=FuAf=49h5&upW+Ug8vn~qf5X$`b$JXD4mtGhB1Qe z-0)(A|86??@1{c(1eg3Tt(t3BOZ_|5xe9;LUGVr-ZAg6^BiLRK4HPVj`|wre6Lyfzh@ zaCKyzw?#M^vu6=j&L$R9F)w*(ZWVI{T zbFNK^biyb0v6za{+&12+ULO|QU}9pdKYWC_u9n!3d$Avz!^2qZ4_B-9b!=Gdx^EL> z!+>BaMswSS@pN2R;PBAIz!gBKT`Rwr(a*8ZuVbID@_H^8-5VBoYd~UP^Z&HLX#K0s zt_wE%{26KPN7NSU^ts+<4e!|F?oaUeVQvhg&$D3j^twp%BkAQ$tuvb2GmP@PBg{6> zGh0RB-_EuPM(Ax6FB)g=M1qcy!%N2 zmoP&4i_6Fk!w5nfnPBbv0&OsYsnR0q!hpB~1n#wtfj=%`gdTl183<|NZM)`L6qhhU z_irx<`$t~1aqMb_07fts$F9M4hc;TGjcHdiL~{uvR86jJ0=FWsE_}tBYyMoq2=#@o zEV>Se&(MbKIU|@VZA7GfFbs&FfN;*0^5+spsJU^aS9s}JRpgwbABf>z1f zIhQ4jP^-t~yEfYR3D%{Uck;YlSF(f=Y8|`s?o9M!B>FMB{E`5!i>cI_cKL25w9y0o zNGv%$hD#Wsc9hFSPoNEGalE6;C5)(cAjRHvWQNE6stZ8ClN>Mc<%s4IMyMz{R|=P7 zl>o$-oeys15*^`2zPSk8Yaz)QBC)Jr03%c+lB7~mbgmRGS4krvrf&H)fJ+#mBHUa= z1Q0!e7Jx|&4Ycx|aTJ_J> za>~pUmw`B5)-Re%bVOQ|plipu4TRhuj8Hw7^{RQ2F<&mhQLC5%vW<02&A zed23_5lp3e?s95G4_NSyb_z$Ge7j0yT}-87j3l4;>fx*!7+u*9ZiA_YmQI0Z%}n3@ z96sCD1MH}JrLsqJ2_sajl*`*sqaV0Ci!J4s_%nj3RFs&@+o74T>ifQm5lmH1B-^p` zfA;ABe!y3qNPXiZlwT6XC5*^8@Gkr;Ro;(^K>UM#$euHTsq$323%j$*;(-_wFK^#+ zZkg5wQ#DwaY*#q_vrlUPzi=xT=HtlK3^ln#LlnLX4^x%J!-F!F{#?Qc)t-AANI!r|zBU-aRB59idArr_u;j0<}aqH^% zw{tE_7@_9I= zKukj${sS5Wa0w&SI(Bt^a;)UqZ3JB(BbZ99X;)^Da!EShS8)j=)Q);<$FX3?akkff zh&J3@TC#)@DpSl`JB}q!XL%ZM2_sbAm$!BtZ+@TG=fk47gb~pPA0aw3%;O@Ur?#^D z`oRdMQn_B<+HtIpfap>5ooFs$#P+ri;W;qL^ET4LLZpSaABc6>g6vB;URT-M(SgAH7g3+pfGINjDHsR$A;g7Qia0w$+pIn5LkP%Df-Ghu^Dm728 zRR)$g>tFQamva~Wxr7mFZr<8)yz*|5Paj4zf~i!`-`a63*l`4GECGyQD$YOQwc~hs zJFhF*I#cPnkfhZ282$JSZEy)AIFAP6&w-G4wWiR}GlHomKTd&-eumGE1D(Fr5QzG% zW=1iBsgA$A4IBMjpN(FggBUC^vvJ)3E@8xxmMO5&%d8PHpUgHOV51j-k+q^2!Bk`K zB*R9pWVri4sQg!qV5)ET-G+^RZkip(@{|3zRv?N?7_sO;GHmopB2#x9IUkH*D%G~j zsjuOyTSeF>VRB9Al-Yz}p+Mpl7NhLJ|Q>l4!d3zEN zd(g%Ykuh&)P?j)4&5g_3{r+eU=ji3rnrmf5-p9WvLY#!B8G`DTf1J@FCdDdgCi4g^y%n%jn_)4*hN>3Kw2 z+}!Q3@A)ifAh$sSIT&8>X}U$J@f!1PoY^X=vL((G66{0IRE&mR4E}Hf;14G=x2U*8 znW1HW*+jchhcUkFFdX$;35dc#bOeH_7@h0!4a6mn_2zxSTU+pMGoeG4o@XjfP{tfH z6{8V-h8#iy{&2|3C76oQ%DYYGgD{M{$a7codSy`pIZ`;9T;-{ek)grm~r^GBRfnYJkN??1{uLo-zsN~8)fmWpCgk_Q|Q8(iqYIQ-V=sht+nerXmMR?bY(268eKOobvh6|-3%KR zQ!$#`#v4_bb07kdlf&Y=)I7^?S2OGO1KIZiv%)^u3<#!TG`9^MGCVU&xGT}(x;P?N ztx$J9N@4A00^$pd6;m;q+eXwDJWR*H!}MFsAlIe50_D0=zJqS`GFFL+Rbt6i!c>gr zwhf~QybardU){q>lA#1(MEB6)dpld;SxsZUd1DTkWpJw%3uUjso9j-v%uS-FG0o=2N_TN zxr7mFZlt#SFyi&<+wk5Q9UBO@)OMmQ((0WgB8RNHRugn{V!4QL=EkST;q z7@NpMf9T-zG@`6C?l9kjk>$fhXAn-J>TwE&!0;e zp=Q(F=W#&f^NlVem`bf4cb}`X78#nNxr7mFRqFd3nT`Az!BlFmxcgjPnGwJZTf>>lAHUaS|vMn$bqgl3t zZxr&qwuQGy3wShgU7Qh!PdoVa0Z|=@DL^n4qq%MP$pBFwh?dA(%XKL#ndeNQ-JEAX z1JMkKZ&ze;n2OQdHsZX{^U3IWAw-{XU8=W|tEo|NIot>!CIXQk2&Q5*w~ffj5y|GM zGa**7?)YdQ+qhX0dF7HtI6xBpr5mPbxkNWX;f-%YGIdJ-1gt-lRhD!OH z2rl6m3eJQ9uNPz(&w~3$24q!XDn@gAhA|cyPc|dtNpWQHm^kyMJ+`Ln&8<9_rB+3G z7`r-|+(5JjqC7HMGZmvxJiTd`IH|n6!wSbajjvP|Um_#Wp_ChT?Ov`|I@hawl3kt5 zj1S|S<_VQW2i$R(iqYI2?l@;69Q!%)$so77@;#P%7)I!AJVGoPv^XLX2&Q6mRDm1z z^@hsp{`W`0&R-iNom24ZQ{Kwbhk>aWjU4f~pMS6}(uu*Hlc^Z3vUs@B19Op)Gz&5h zcfn0qc|l7JHd8Sg`NENrw0BryY+WFjiqR?uh^q_dEX_=%GLX1^ax;^-h-)jt0>>h% zu`}9WDn_d~9k(Arw}Qxdrk>+881o`4uDred^O?Xo7rsEPeC z7W-qMch21`FtS9gcDa^xM3v(aW;*PTm++@%DsDsV4|gTTeh_CS;I{n*vazfEEcXGU zbwotrIP+)h^MBlC?SFSi&e z#9;X8tGXnwWhzGF9d{sp1)?CbCovVHRokwH{sc|~8$FLh&zF37!)`Y2N3;%aOkaK< z=_jG``?x+6dw{rk!qp)&6{DXA->}DSb!#$=&^&Qwx|@})?~tWAc~gSD^x7D224$vV zv|%KFh|?gUvNawErebvPcS7W`|hIPcC8^PxK6_I9F zc;hk^qchIFj#r6XG~Vq)uHwzZ69Wejzml>uqjf|s!~%Gr>qBNEy$#aH$tjY@Op-XIqOF%JByH{zX{iqYy8?%q<@ zt_uqcfbO*^Mpt=S%e+b)*}?By7)HxYVS%wj69an!!BmXaBSvz=_x!zaiLniU;H*rH z(A!8p7U2{^6vW5Si*k-7exX9;YLG9Y;MM7}an9b$l|>=w^qGot29vWDVdFMsO62VPyFeW95qmOaPu`ew2JYI%2&Uqg7Q+~|wTlRO`NsSr!@*iy!U&FU zf!960YRBt0=Cw(eVz`76dJNV$jMZF>?!&W-qZz?eob3^L?tmBy#MVE?$8ZTFI3mU{ zvf`^cVss0ppBum>jL@?>!hY_J)$g@9LoG%ym7bka#)iWK+brFuR1B9eLXU}ih@7(1 zk-b%}D@HICN8Lbs4#Y(ueprzqnoAgwHX_p7P_p&uodXNYD5 zQ|Zw)B{5dD@l^*8_6c=Aj=I(;L>m>vKnQ2_qc5$8-qqF$H-uO&!NdEcxP% z`QzGg+Ze%AdaTSKeANc5lKOwX_X(FUg5zckV;~Ugfhd)KTQu)lj-2CMijXoeRzX

-GL-C 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

abEDDd}*J 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 {B0N>5B^dlEwT3C3_ZVP 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 bv;3O%&S*LCg3 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 VK^50=ZGsjO>HAAaP-U+o{~rwhJD30f literal 0 HcmV?d00001 diff --git a/resources/meshes/deltacomb_dc30.stl b/resources/meshes/deltacomb_dc30.stl new file mode 100644 index 0000000000000000000000000000000000000000..8c11351f140a14f3310d56f966c3a4558a8704d3 GIT binary patch literal 303384 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УSx`MF28YEWB#?!m~v?R3%DDHpVJAIr}@x>bYP@^cSH*7)HW zWBa_k^|1Whqg$2QF-7Md78%xe-F@QNb1#<_;Q`XQ2UVmkoqLejWTm6We)gtz)!FiM zk8ahVw*1_Kk^P_Z)v<5fBdg9s5V=RUYEWB#?yy7c2db3U1Vfnd7w~BP`LE@-aEg0;0y?6|2OXnUIVYx%pF!vyF zPyMyQH_m9=Vfnd7w`x#Ze(qtBVLd!x+ri6^Zrfq$+`}R)ci7`$#IT-w_=5T4N3FzA2%NK%RRbPgWB@* z<6)8X3u5mD3l|*Tw!_l7hecTKu*buQVg1ye+tzD;yY;Yi?qQMi8)vFkzJ|W9NUU?^ z*XsLE6A$|39^I-zZTWd$S!7sm^U4MFy4SVsuypQW5tcjb@i1aoANTG1>MPSbwsM_Y zI`^>10JZWp^nFEQ<^5+)T)B2TCR%>((XC2r08@0{R~J6E-o#pOYscNo4%lYmx+7Z; z%g;T!RfF2{a}T<+T+7crx>f1_DWJB#ufF`zZN@elw(a0O!}4>FZdIDk;ZEc|p7*o2 zj-7dX+do$Bptf}GVUa;i+R}MnT{3&`v5&sEy}wdr>Ddv4^7C5lcF?TR z8~@gN-1UuFqo<#cbeh9WrE|g}gPL@?R*ZBLxyL8|HET3_g*>}UGs~%(q; z9xT`LbB}J-u(td@k97{3GrD)}_IbUfbHXC&3`Y$uo!9D=E9Z<}zf1dEp0wrXM7Jv4 z)uw8g*Xp{*=Zv=dR_noXEkF0@Rt;;*@AKI2rE^C&|E%pROXq||2DQ~>h;&}7L*F@f zblWQJo+8qgpA+4xVQu+&t!#%-dd@lJH*oul{QaX_MLPH3J=J#X3~{f`iEb75{^Tv^ z4xz!epPAV2koN9l`MF28YEWB#?qQK(ZTq3pucE0vQ@MvlSnjaL!*)##>k}S0apLd` z+F#q2&OI!`Jy*k?{Z~ftNz9<P_a=-F~Mnt9Mii+NS1Z&u)(8kUe(RdezQ^ax znp2H^aLwj^rRhj$MDA*&H7)tRRvMAAo?0}gy5N1XKhfw&bg4+kS}7qBKGoIy=+UJT z`q<6qR&P16eOBz-!HAYiBG!r?q%}Y8Fg@j0b4J=fAJ}}(NRN%CV>>h=?xZyxYjxFH zb4GfcNo#&2x>QmV&5yOR-Jj_$GufuRhQ4>HBK?|I%^k_{h}Q=Rsx%$jp%E#I9+u9p zK^`^kB-V61f*KKb(wdI7;;viPQ1fHUyHrxH=0^{`Y9+GzH)mICZYKMXhqb07p%GD$ z)^t4PN=R8-FPd3xbEb@m!&=kPLnC=jw4~^vgp_st|E^g5bhYO;9-59G8p&&-B}ES< zq^u`an^C>=UF$R+nvNbCk+Mi@I(jG}WnH!Bva$6JUbpekbo9`Olto(8(L)I->yAE%7{bcKx?50(W6Txq&1^P@+XO3Kyz=<$JTJ~_7L*v3seSgz(rk1myztNGDm)h(6{ZkVx2 zN{)tq051{OHl8l5#aadTjRPWwo}08xGe&yXr%Kb&LnBfaX-!9u{hwNKq_Y>QG#x!OB4v@*bic

Q1!-?bz`72m=1$Abh_njia0 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 literal 0 HcmV?d00001 diff --git a/resources/quality/deltacomb/ABS/deltacomb_DBE0.25_ABS_A.inst.cfg b/resources/quality/deltacomb/ABS/deltacomb_DBE0.25_ABS_A.inst.cfg new file mode 100755 index 0000000000..a74d58f1ee --- /dev/null +++ b/resources/quality/deltacomb/ABS/deltacomb_DBE0.25_ABS_A.inst.cfg @@ -0,0 +1,22 @@ +[general] +version = 4 +name = A +definition = deltacomb_base + +[metadata] +setting_version = 11 +type = quality +quality_type = a +material = generic_abs +variant = DBE 0.25mm + +[values] +adhesion_type = raft +cool_fan_full_at_height = 0.5 +cool_fan_speed = 50 +cool_fan_speed_max = 50 +cool_fan_speed_min = 0 +material_bed_temperature = 100 +material_bed_temperature_layer_0 = 80 +material_print_temperature = 240 +speed_print = 80 \ No newline at end of file diff --git a/resources/quality/deltacomb/ABS/deltacomb_DBE0.25_ABS_B.inst.cfg b/resources/quality/deltacomb/ABS/deltacomb_DBE0.25_ABS_B.inst.cfg new file mode 100755 index 0000000000..4ab960f0fd --- /dev/null +++ b/resources/quality/deltacomb/ABS/deltacomb_DBE0.25_ABS_B.inst.cfg @@ -0,0 +1,22 @@ +[general] +version = 4 +name = B +definition = deltacomb_base + +[metadata] +setting_version = 11 +type = quality +quality_type = b +material = generic_abs +variant = DBE 0.25mm + +[values] +adhesion_type = raft +cool_fan_full_at_height = 0.5 +cool_fan_speed = 50 +cool_fan_speed_max = 50 +cool_fan_speed_min = 0 +material_bed_temperature = 100 +material_bed_temperature_layer_0 = 80 +material_print_temperature = 240 +speed_print = 55 \ No newline at end of file diff --git a/resources/quality/deltacomb/ABS/deltacomb_DBE0.25_ABS_C.inst.cfg b/resources/quality/deltacomb/ABS/deltacomb_DBE0.25_ABS_C.inst.cfg new file mode 100755 index 0000000000..bbc14901af --- /dev/null +++ b/resources/quality/deltacomb/ABS/deltacomb_DBE0.25_ABS_C.inst.cfg @@ -0,0 +1,22 @@ +[general] +version = 4 +name = C +definition = deltacomb_base + +[metadata] +setting_version = 11 +type = quality +quality_type = c +material = generic_abs +variant = DBE 0.25mm + +[values] +adhesion_type = raft +cool_fan_full_at_height = 0.5 +cool_fan_speed = 50 +cool_fan_speed_max = 50 +cool_fan_speed_min = 0 +material_bed_temperature = 100 +material_bed_temperature_layer_0 = 80 +material_print_temperature = 240 +speed_print = 32 \ No newline at end of file diff --git a/resources/quality/deltacomb/ABS/deltacomb_DBE0.40_ABS_A.inst.cfg b/resources/quality/deltacomb/ABS/deltacomb_DBE0.40_ABS_A.inst.cfg new file mode 100755 index 0000000000..e6327191c8 --- /dev/null +++ b/resources/quality/deltacomb/ABS/deltacomb_DBE0.40_ABS_A.inst.cfg @@ -0,0 +1,21 @@ +[general] +version = 4 +name = A +definition = deltacomb_base + +[metadata] +setting_version = 11 +type = quality +quality_type = a +material = generic_abs +variant = DBE 0.40mm + +[values] +adhesion_type = raft +cool_fan_full_at_height = 1 +cool_fan_speed = 50 +cool_fan_speed_max = 50 +cool_fan_speed_min = 0 +material_bed_temperature = 100 +material_bed_temperature_layer_0 = 80 +material_print_temperature = 240 \ No newline at end of file diff --git a/resources/quality/deltacomb/ABS/deltacomb_DBE0.40_ABS_B.inst.cfg b/resources/quality/deltacomb/ABS/deltacomb_DBE0.40_ABS_B.inst.cfg new file mode 100755 index 0000000000..7f1eed6ce3 --- /dev/null +++ b/resources/quality/deltacomb/ABS/deltacomb_DBE0.40_ABS_B.inst.cfg @@ -0,0 +1,21 @@ +[general] +version = 4 +name = B +definition = deltacomb_base + +[metadata] +setting_version = 11 +type = quality +quality_type = b +material = generic_abs +variant = DBE 0.40mm + +[values] +adhesion_type = raft +cool_fan_full_at_height = 1 +cool_fan_speed = 50 +cool_fan_speed_max = 50 +cool_fan_speed_min = 0 +material_bed_temperature = 100 +material_bed_temperature_layer_0 = 80 +material_print_temperature = 240 \ No newline at end of file diff --git a/resources/quality/deltacomb/ABS/deltacomb_DBE0.40_ABS_C.inst.cfg b/resources/quality/deltacomb/ABS/deltacomb_DBE0.40_ABS_C.inst.cfg new file mode 100755 index 0000000000..d905b39f45 --- /dev/null +++ b/resources/quality/deltacomb/ABS/deltacomb_DBE0.40_ABS_C.inst.cfg @@ -0,0 +1,21 @@ +[general] +version = 4 +name = C +definition = deltacomb_base + +[metadata] +setting_version = 11 +type = quality +quality_type = c +material = generic_abs +variant = DBE 0.40mm + +[values] +adhesion_type = raft +cool_fan_full_at_height = 1 +cool_fan_speed = 50 +cool_fan_speed_max = 50 +cool_fan_speed_min = 0 +material_bed_temperature = 100 +material_bed_temperature_layer_0 = 80 +material_print_temperature = 240 \ No newline at end of file diff --git a/resources/quality/deltacomb/ABS/deltacomb_DBE0.40_ABS_D.inst.cfg b/resources/quality/deltacomb/ABS/deltacomb_DBE0.40_ABS_D.inst.cfg new file mode 100755 index 0000000000..b4c633dd5f --- /dev/null +++ b/resources/quality/deltacomb/ABS/deltacomb_DBE0.40_ABS_D.inst.cfg @@ -0,0 +1,21 @@ +[general] +version = 4 +name = D +definition = deltacomb_base + +[metadata] +setting_version = 11 +type = quality +quality_type = d +material = generic_abs +variant = FBE 0.40mm + +[values] +adhesion_type = raft +cool_fan_full_at_height = 1 +cool_fan_speed = 50 +cool_fan_speed_max = 50 +cool_fan_speed_min = 0 +material_bed_temperature = 100 +material_bed_temperature_layer_0 = 80 +material_print_temperature = 240 \ No newline at end of file diff --git a/resources/quality/deltacomb/ABS/deltacomb_DBE0.40_ABS_E.inst.cfg b/resources/quality/deltacomb/ABS/deltacomb_DBE0.40_ABS_E.inst.cfg new file mode 100755 index 0000000000..0205ab671c --- /dev/null +++ b/resources/quality/deltacomb/ABS/deltacomb_DBE0.40_ABS_E.inst.cfg @@ -0,0 +1,21 @@ +[general] +version = 4 +name = E +definition = deltacomb_base + +[metadata] +setting_version = 11 +type = quality +quality_type = e +material = generic_abs +variant = DBE 0.40mm + +[values] +adhesion_type = raft +cool_fan_full_at_height = 1 +cool_fan_speed = 50 +cool_fan_speed_max = 50 +cool_fan_speed_min = 0 +material_bed_temperature = 100 +material_bed_temperature_layer_0 = 80 +material_print_temperature = 240 \ No newline at end of file diff --git a/resources/quality/deltacomb/ABS/deltacomb_DBE0.60_ABS_C.inst.cfg b/resources/quality/deltacomb/ABS/deltacomb_DBE0.60_ABS_C.inst.cfg new file mode 100755 index 0000000000..88c8c21e3a --- /dev/null +++ b/resources/quality/deltacomb/ABS/deltacomb_DBE0.60_ABS_C.inst.cfg @@ -0,0 +1,21 @@ +[general] +version = 4 +name = C +definition = deltacomb_base + +[metadata] +setting_version = 11 +type = quality +quality_type = c +material = generic_abs +variant = DBE 0.60mm + +[values] +adhesion_type = raft +cool_fan_full_at_height = 1 +cool_fan_speed = 50 +cool_fan_speed_max = 50 +cool_fan_speed_min = 0 +material_bed_temperature = 100 +material_bed_temperature_layer_0 = 80 +material_print_temperature = 240 \ No newline at end of file diff --git a/resources/quality/deltacomb/ABS/deltacomb_DBE0.60_ABS_D.inst.cfg b/resources/quality/deltacomb/ABS/deltacomb_DBE0.60_ABS_D.inst.cfg new file mode 100755 index 0000000000..df1c6d21a7 --- /dev/null +++ b/resources/quality/deltacomb/ABS/deltacomb_DBE0.60_ABS_D.inst.cfg @@ -0,0 +1,21 @@ +[general] +version = 4 +name = D +definition = deltacomb_base + +[metadata] +setting_version = 11 +type = quality +quality_type = d +material = generic_abs +variant = FBE 0.60mm + +[values] +adhesion_type = raft +cool_fan_full_at_height = 1 +cool_fan_speed = 50 +cool_fan_speed_max = 50 +cool_fan_speed_min = 0 +material_bed_temperature = 100 +material_bed_temperature_layer_0 = 80 +material_print_temperature = 240 \ No newline at end of file diff --git a/resources/quality/deltacomb/ABS/deltacomb_DBE0.60_ABS_E.inst.cfg b/resources/quality/deltacomb/ABS/deltacomb_DBE0.60_ABS_E.inst.cfg new file mode 100755 index 0000000000..ec746f68f5 --- /dev/null +++ b/resources/quality/deltacomb/ABS/deltacomb_DBE0.60_ABS_E.inst.cfg @@ -0,0 +1,22 @@ +[general] +version = 4 +name = E +definition = deltacomb_base + +[metadata] +setting_version = 11 +type = quality +quality_type = e +material = generic_abs +variant = DBE 0.60mm + +[values] +adhesion_type = raft +cool_fan_full_at_height = 1 +cool_fan_speed = 50 +cool_fan_speed_max = 50 +cool_fan_speed_min = 0 +material_bed_temperature = 100 +material_bed_temperature_layer_0 = 80 +material_print_temperature = 240 +speed_print = 65 \ No newline at end of file diff --git a/resources/quality/deltacomb/ABS/deltacomb_DBE0.60_ABS_F.inst.cfg b/resources/quality/deltacomb/ABS/deltacomb_DBE0.60_ABS_F.inst.cfg new file mode 100755 index 0000000000..26bca18899 --- /dev/null +++ b/resources/quality/deltacomb/ABS/deltacomb_DBE0.60_ABS_F.inst.cfg @@ -0,0 +1,22 @@ +[general] +version = 4 +name = A +definition = deltacomb_base + +[metadata] +setting_version = 11 +type = quality +quality_type = f +material = generic_abs +variant = DBE 0.60mm + +[values] +adhesion_type = raft +cool_fan_full_at_height = 1 +cool_fan_speed = 50 +cool_fan_speed_max = 50 +cool_fan_speed_min = 0 +material_bed_temperature = 100 +material_bed_temperature_layer_0 = 80 +material_print_temperature = 240 +speed_print = 45 \ No newline at end of file diff --git a/resources/quality/deltacomb/ABS/deltacomb_FBE0.25_ABS_A.inst.cfg b/resources/quality/deltacomb/ABS/deltacomb_FBE0.25_ABS_A.inst.cfg new file mode 100755 index 0000000000..79c71b85cd --- /dev/null +++ b/resources/quality/deltacomb/ABS/deltacomb_FBE0.25_ABS_A.inst.cfg @@ -0,0 +1,22 @@ +[general] +version = 4 +name = A +definition = deltacomb_base + +[metadata] +setting_version = 11 +type = quality +quality_type = a +material = generic_abs +variant = FBE 0.25mm + +[values] +adhesion_type = raft +cool_fan_full_at_height = 0.5 +cool_fan_speed = 50 +cool_fan_speed_max = 50 +cool_fan_speed_min = 0 +material_bed_temperature = 100 +material_bed_temperature_layer_0 = 80 +material_print_temperature = 240 +speed_print = 80 \ No newline at end of file diff --git a/resources/quality/deltacomb/ABS/deltacomb_FBE0.25_ABS_B.inst.cfg b/resources/quality/deltacomb/ABS/deltacomb_FBE0.25_ABS_B.inst.cfg new file mode 100755 index 0000000000..61b3554b9d --- /dev/null +++ b/resources/quality/deltacomb/ABS/deltacomb_FBE0.25_ABS_B.inst.cfg @@ -0,0 +1,22 @@ +[general] +version = 4 +name = B +definition = deltacomb_base + +[metadata] +setting_version = 11 +type = quality +quality_type = b +material = generic_abs +variant = FBE 0.25mm + +[values] +adhesion_type = raft +cool_fan_full_at_height = 0.5 +cool_fan_speed = 50 +cool_fan_speed_max = 50 +cool_fan_speed_min = 0 +material_bed_temperature = 100 +material_bed_temperature_layer_0 = 80 +material_print_temperature = 240 +speed_print = 55 \ No newline at end of file diff --git a/resources/quality/deltacomb/ABS/deltacomb_FBE0.25_ABS_C.inst.cfg b/resources/quality/deltacomb/ABS/deltacomb_FBE0.25_ABS_C.inst.cfg new file mode 100755 index 0000000000..f7338584c5 --- /dev/null +++ b/resources/quality/deltacomb/ABS/deltacomb_FBE0.25_ABS_C.inst.cfg @@ -0,0 +1,22 @@ +[general] +version = 4 +name = C +definition = deltacomb_base + +[metadata] +setting_version = 11 +type = quality +quality_type = c +material = generic_abs +variant = FBE 0.25mm + +[values] +adhesion_type = raft +cool_fan_full_at_height = 0.5 +cool_fan_speed = 50 +cool_fan_speed_max = 50 +cool_fan_speed_min = 0 +material_bed_temperature = 100 +material_bed_temperature_layer_0 = 80 +material_print_temperature = 240 +speed_print = 32 \ No newline at end of file diff --git a/resources/quality/deltacomb/ABS/deltacomb_FBE0.40_ABS_A.inst.cfg b/resources/quality/deltacomb/ABS/deltacomb_FBE0.40_ABS_A.inst.cfg new file mode 100755 index 0000000000..37248b603f --- /dev/null +++ b/resources/quality/deltacomb/ABS/deltacomb_FBE0.40_ABS_A.inst.cfg @@ -0,0 +1,21 @@ +[general] +version = 4 +name = A +definition = deltacomb_base + +[metadata] +setting_version = 11 +type = quality +quality_type = a +material = generic_abs +variant = FBE 0.40mm + +[values] +adhesion_type = raft +cool_fan_full_at_height = 1 +cool_fan_speed = 50 +cool_fan_speed_max = 50 +cool_fan_speed_min = 0 +material_bed_temperature = 100 +material_bed_temperature_layer_0 = 80 +material_print_temperature = 240 \ No newline at end of file diff --git a/resources/quality/deltacomb/ABS/deltacomb_FBE0.40_ABS_B.inst.cfg b/resources/quality/deltacomb/ABS/deltacomb_FBE0.40_ABS_B.inst.cfg new file mode 100755 index 0000000000..78bd587e62 --- /dev/null +++ b/resources/quality/deltacomb/ABS/deltacomb_FBE0.40_ABS_B.inst.cfg @@ -0,0 +1,21 @@ +[general] +version = 4 +name = B +definition = deltacomb_base + +[metadata] +setting_version = 11 +type = quality +quality_type = b +material = generic_abs +variant = FBE 0.40mm + +[values] +adhesion_type = raft +cool_fan_full_at_height = 1 +cool_fan_speed = 50 +cool_fan_speed_max = 50 +cool_fan_speed_min = 0 +material_bed_temperature = 100 +material_bed_temperature_layer_0 = 80 +material_print_temperature = 240 \ No newline at end of file diff --git a/resources/quality/deltacomb/ABS/deltacomb_FBE0.40_ABS_C.inst.cfg b/resources/quality/deltacomb/ABS/deltacomb_FBE0.40_ABS_C.inst.cfg new file mode 100755 index 0000000000..ca4224f9b3 --- /dev/null +++ b/resources/quality/deltacomb/ABS/deltacomb_FBE0.40_ABS_C.inst.cfg @@ -0,0 +1,21 @@ +[general] +version = 4 +name = C +definition = deltacomb_base + +[metadata] +setting_version = 11 +type = quality +quality_type = c +material = generic_abs +variant = FBE 0.40mm + +[values] +adhesion_type = raft +cool_fan_full_at_height = 1 +cool_fan_speed = 50 +cool_fan_speed_max = 50 +cool_fan_speed_min = 0 +material_bed_temperature = 100 +material_bed_temperature_layer_0 = 80 +material_print_temperature = 240 \ No newline at end of file diff --git a/resources/quality/deltacomb/ABS/deltacomb_FBE0.40_ABS_D.inst.cfg b/resources/quality/deltacomb/ABS/deltacomb_FBE0.40_ABS_D.inst.cfg new file mode 100755 index 0000000000..b4c633dd5f --- /dev/null +++ b/resources/quality/deltacomb/ABS/deltacomb_FBE0.40_ABS_D.inst.cfg @@ -0,0 +1,21 @@ +[general] +version = 4 +name = D +definition = deltacomb_base + +[metadata] +setting_version = 11 +type = quality +quality_type = d +material = generic_abs +variant = FBE 0.40mm + +[values] +adhesion_type = raft +cool_fan_full_at_height = 1 +cool_fan_speed = 50 +cool_fan_speed_max = 50 +cool_fan_speed_min = 0 +material_bed_temperature = 100 +material_bed_temperature_layer_0 = 80 +material_print_temperature = 240 \ No newline at end of file diff --git a/resources/quality/deltacomb/ABS/deltacomb_FBE0.40_ABS_E.inst.cfg b/resources/quality/deltacomb/ABS/deltacomb_FBE0.40_ABS_E.inst.cfg new file mode 100755 index 0000000000..ad2eb5a369 --- /dev/null +++ b/resources/quality/deltacomb/ABS/deltacomb_FBE0.40_ABS_E.inst.cfg @@ -0,0 +1,21 @@ +[general] +version = 4 +name = E +definition = deltacomb_base + +[metadata] +setting_version = 11 +type = quality +quality_type = e +material = generic_abs +variant = FBE 0.40mm + +[values] +adhesion_type = raft +cool_fan_full_at_height = 1 +cool_fan_speed = 50 +cool_fan_speed_max = 50 +cool_fan_speed_min = 0 +material_bed_temperature = 100 +material_bed_temperature_layer_0 = 80 +material_print_temperature = 240 \ No newline at end of file diff --git a/resources/quality/deltacomb/ABS/deltacomb_FBE0.60_ABS_C.inst.cfg b/resources/quality/deltacomb/ABS/deltacomb_FBE0.60_ABS_C.inst.cfg new file mode 100755 index 0000000000..378e2a5f6b --- /dev/null +++ b/resources/quality/deltacomb/ABS/deltacomb_FBE0.60_ABS_C.inst.cfg @@ -0,0 +1,21 @@ +[general] +version = 4 +name = C +definition = deltacomb_base + +[metadata] +setting_version = 11 +type = quality +quality_type = c +material = generic_abs +variant = FBE 0.60mm + +[values] +adhesion_type = raft +cool_fan_full_at_height = 1 +cool_fan_speed = 50 +cool_fan_speed_max = 50 +cool_fan_speed_min = 0 +material_bed_temperature = 100 +material_bed_temperature_layer_0 = 80 +material_print_temperature = 240 \ No newline at end of file diff --git a/resources/quality/deltacomb/ABS/deltacomb_FBE0.60_ABS_D.inst.cfg b/resources/quality/deltacomb/ABS/deltacomb_FBE0.60_ABS_D.inst.cfg new file mode 100755 index 0000000000..df1c6d21a7 --- /dev/null +++ b/resources/quality/deltacomb/ABS/deltacomb_FBE0.60_ABS_D.inst.cfg @@ -0,0 +1,21 @@ +[general] +version = 4 +name = D +definition = deltacomb_base + +[metadata] +setting_version = 11 +type = quality +quality_type = d +material = generic_abs +variant = FBE 0.60mm + +[values] +adhesion_type = raft +cool_fan_full_at_height = 1 +cool_fan_speed = 50 +cool_fan_speed_max = 50 +cool_fan_speed_min = 0 +material_bed_temperature = 100 +material_bed_temperature_layer_0 = 80 +material_print_temperature = 240 \ No newline at end of file diff --git a/resources/quality/deltacomb/ABS/deltacomb_FBE0.60_ABS_E.inst.cfg b/resources/quality/deltacomb/ABS/deltacomb_FBE0.60_ABS_E.inst.cfg new file mode 100755 index 0000000000..4bd78f4b2f --- /dev/null +++ b/resources/quality/deltacomb/ABS/deltacomb_FBE0.60_ABS_E.inst.cfg @@ -0,0 +1,22 @@ +[general] +version = 4 +name = E +definition = deltacomb_base + +[metadata] +setting_version = 11 +type = quality +quality_type = e +material = generic_abs +variant = FBE 0.60mm + +[values] +adhesion_type = raft +cool_fan_full_at_height = 1 +cool_fan_speed = 50 +cool_fan_speed_max = 50 +cool_fan_speed_min = 0 +material_bed_temperature = 100 +material_bed_temperature_layer_0 = 80 +material_print_temperature = 240 +speed_print = 65 \ No newline at end of file diff --git a/resources/quality/deltacomb/ABS/deltacomb_FBE0.60_ABS_F.inst.cfg b/resources/quality/deltacomb/ABS/deltacomb_FBE0.60_ABS_F.inst.cfg new file mode 100755 index 0000000000..c2ecdb6cf0 --- /dev/null +++ b/resources/quality/deltacomb/ABS/deltacomb_FBE0.60_ABS_F.inst.cfg @@ -0,0 +1,22 @@ +[general] +version = 4 +name = A +definition = deltacomb_base + +[metadata] +setting_version = 11 +type = quality +quality_type = f +material = generic_abs +variant = FBE 0.60mm + +[values] +adhesion_type = raft +cool_fan_full_at_height = 1 +cool_fan_speed = 50 +cool_fan_speed_max = 50 +cool_fan_speed_min = 0 +material_bed_temperature = 100 +material_bed_temperature_layer_0 = 80 +material_print_temperature = 240 +speed_print = 45 \ No newline at end of file diff --git a/resources/quality/deltacomb/ABS/deltacomb_VDBE0.80_ABS_D.inst.cfg b/resources/quality/deltacomb/ABS/deltacomb_VDBE0.80_ABS_D.inst.cfg new file mode 100755 index 0000000000..28b430e55d --- /dev/null +++ b/resources/quality/deltacomb/ABS/deltacomb_VDBE0.80_ABS_D.inst.cfg @@ -0,0 +1,22 @@ +[general] +version = 4 +name = D +definition = deltacomb_base + +[metadata] +setting_version = 11 +type = quality +quality_type = d +material = generic_abs +variant = V-FBE 0.80mm + +[values] +adhesion_type = raft +cool_fan_full_at_height = 1 +cool_fan_speed = 50 +cool_fan_speed_max = 50 +cool_fan_speed_min = 0 +material_bed_temperature = 100 +material_bed_temperature_layer_0 = 80 +material_print_temperature = 240 +speed_print = 150 \ No newline at end of file diff --git a/resources/quality/deltacomb/ABS/deltacomb_VDBE0.80_ABS_E.inst.cfg b/resources/quality/deltacomb/ABS/deltacomb_VDBE0.80_ABS_E.inst.cfg new file mode 100755 index 0000000000..d72538686e --- /dev/null +++ b/resources/quality/deltacomb/ABS/deltacomb_VDBE0.80_ABS_E.inst.cfg @@ -0,0 +1,22 @@ +[general] +version = 4 +name = E +definition = deltacomb_base + +[metadata] +setting_version = 11 +type = quality +quality_type = e +material = generic_abs +variant = V-DBE 0.80mm + +[values] +adhesion_type = raft +cool_fan_full_at_height = 1 +cool_fan_speed = 50 +cool_fan_speed_max = 50 +cool_fan_speed_min = 0 +material_bed_temperature = 100 +material_bed_temperature_layer_0 = 80 +material_print_temperature = 240 +speed_print = 110 \ No newline at end of file diff --git a/resources/quality/deltacomb/ABS/deltacomb_VDBE0.80_ABS_F.inst.cfg b/resources/quality/deltacomb/ABS/deltacomb_VDBE0.80_ABS_F.inst.cfg new file mode 100755 index 0000000000..26b3f4ae2d --- /dev/null +++ b/resources/quality/deltacomb/ABS/deltacomb_VDBE0.80_ABS_F.inst.cfg @@ -0,0 +1,22 @@ +[general] +version = 4 +name = A +definition = deltacomb_base + +[metadata] +setting_version = 11 +type = quality +quality_type = f +material = generic_abs +variant = V-DBE 0.80mm + +[values] +adhesion_type = raft +cool_fan_full_at_height = 1 +cool_fan_speed = 50 +cool_fan_speed_max = 50 +cool_fan_speed_min = 0 +material_bed_temperature = 100 +material_bed_temperature_layer_0 = 80 +material_print_temperature = 240 +speed_print = 75 \ No newline at end of file diff --git a/resources/quality/deltacomb/ABS/deltacomb_VDBE0.80_ABS_G.inst.cfg b/resources/quality/deltacomb/ABS/deltacomb_VDBE0.80_ABS_G.inst.cfg new file mode 100755 index 0000000000..4277d65ae6 --- /dev/null +++ b/resources/quality/deltacomb/ABS/deltacomb_VDBE0.80_ABS_G.inst.cfg @@ -0,0 +1,22 @@ +[general] +version = 4 +name = C +definition = deltacomb_base + +[metadata] +setting_version = 11 +type = quality +quality_type = c +material = generic_abs +variant = V-DBE 0.80mm + +[values] +adhesion_type = raft +cool_fan_full_at_height = 1 +cool_fan_speed = 50 +cool_fan_speed_max = 50 +cool_fan_speed_min = 0 +material_bed_temperature = 100 +material_bed_temperature_layer_0 = 80 +material_print_temperature = 240 +speed_print = 55 \ No newline at end of file diff --git a/resources/quality/deltacomb/ABS/deltacomb_VFBE0.80_ABS_D.inst.cfg b/resources/quality/deltacomb/ABS/deltacomb_VFBE0.80_ABS_D.inst.cfg new file mode 100755 index 0000000000..28b430e55d --- /dev/null +++ b/resources/quality/deltacomb/ABS/deltacomb_VFBE0.80_ABS_D.inst.cfg @@ -0,0 +1,22 @@ +[general] +version = 4 +name = D +definition = deltacomb_base + +[metadata] +setting_version = 11 +type = quality +quality_type = d +material = generic_abs +variant = V-FBE 0.80mm + +[values] +adhesion_type = raft +cool_fan_full_at_height = 1 +cool_fan_speed = 50 +cool_fan_speed_max = 50 +cool_fan_speed_min = 0 +material_bed_temperature = 100 +material_bed_temperature_layer_0 = 80 +material_print_temperature = 240 +speed_print = 150 \ No newline at end of file diff --git a/resources/quality/deltacomb/ABS/deltacomb_VFBE0.80_ABS_E.inst.cfg b/resources/quality/deltacomb/ABS/deltacomb_VFBE0.80_ABS_E.inst.cfg new file mode 100755 index 0000000000..bc0b340123 --- /dev/null +++ b/resources/quality/deltacomb/ABS/deltacomb_VFBE0.80_ABS_E.inst.cfg @@ -0,0 +1,22 @@ +[general] +version = 4 +name = E +definition = deltacomb_base + +[metadata] +setting_version = 11 +type = quality +quality_type = e +material = generic_abs +variant = V-FBE 0.80mm + +[values] +adhesion_type = raft +cool_fan_full_at_height = 1 +cool_fan_speed = 50 +cool_fan_speed_max = 50 +cool_fan_speed_min = 0 +material_bed_temperature = 100 +material_bed_temperature_layer_0 = 80 +material_print_temperature = 240 +speed_print = 110 \ No newline at end of file diff --git a/resources/quality/deltacomb/ABS/deltacomb_VFBE0.80_ABS_F.inst.cfg b/resources/quality/deltacomb/ABS/deltacomb_VFBE0.80_ABS_F.inst.cfg new file mode 100755 index 0000000000..fb8dfc1c61 --- /dev/null +++ b/resources/quality/deltacomb/ABS/deltacomb_VFBE0.80_ABS_F.inst.cfg @@ -0,0 +1,22 @@ +[general] +version = 4 +name = A +definition = deltacomb_base + +[metadata] +setting_version = 11 +type = quality +quality_type = f +material = generic_abs +variant = V-FBE 0.80mm + +[values] +adhesion_type = raft +cool_fan_full_at_height = 1 +cool_fan_speed = 50 +cool_fan_speed_max = 50 +cool_fan_speed_min = 0 +material_bed_temperature = 100 +material_bed_temperature_layer_0 = 80 +material_print_temperature = 240 +speed_print = 75 \ No newline at end of file diff --git a/resources/quality/deltacomb/ABS/deltacomb_VFBE0.80_ABS_G.inst.cfg b/resources/quality/deltacomb/ABS/deltacomb_VFBE0.80_ABS_G.inst.cfg new file mode 100755 index 0000000000..770f6b9d65 --- /dev/null +++ b/resources/quality/deltacomb/ABS/deltacomb_VFBE0.80_ABS_G.inst.cfg @@ -0,0 +1,22 @@ +[general] +version = 4 +name = C +definition = deltacomb_base + +[metadata] +setting_version = 11 +type = quality +quality_type = g +material = generic_abs +variant = V-FBE 0.80mm + +[values] +adhesion_type = raft +cool_fan_full_at_height = 1 +cool_fan_speed = 50 +cool_fan_speed_max = 50 +cool_fan_speed_min = 0 +material_bed_temperature = 100 +material_bed_temperature_layer_0 = 80 +material_print_temperature = 240 +speed_print = 55 \ No newline at end of file diff --git a/resources/quality/deltacomb/PETG/deltacomb_DBE0.40_PETG_A.inst.cfg b/resources/quality/deltacomb/PETG/deltacomb_DBE0.40_PETG_A.inst.cfg new file mode 100644 index 0000000000..fde67a41d7 --- /dev/null +++ b/resources/quality/deltacomb/PETG/deltacomb_DBE0.40_PETG_A.inst.cfg @@ -0,0 +1,27 @@ +[general] +version = 4 +name = A +definition = deltacomb_base + +[metadata] +setting_version = 11 +type = quality +quality_type = a +material = generic_petg +variant = DBE 0.40mm + +[values] +adhesion_type = skirt +cool_fan_full_at_height = 1 +cool_fan_speed = 60 +cool_fan_speed_max = 100 +cool_fan_speed_min = 60 +speed_print = 50 +speed_infill = =speed_print +speed_wall_0 = =speed_print * 0.5 +speed_roofing = =speed_print * 0.5 +default_material_print_temperature = 235 +material_bed_temperature = 60 +material_bed_temperature_layer_0 = 45 +initial_layer_line_width = 140 +retraction_speed = 25 diff --git a/resources/quality/deltacomb/PETG/deltacomb_DBE0.40_PETG_B.inst.cfg b/resources/quality/deltacomb/PETG/deltacomb_DBE0.40_PETG_B.inst.cfg new file mode 100644 index 0000000000..c4796c7796 --- /dev/null +++ b/resources/quality/deltacomb/PETG/deltacomb_DBE0.40_PETG_B.inst.cfg @@ -0,0 +1,27 @@ +[general] +version = 4 +name = B +definition = deltacomb_base + +[metadata] +setting_version = 11 +type = quality +quality_type = b +material = generic_petg +variant = DBE 0.40mm + +[values] +adhesion_type = skirt +cool_fan_full_at_height = 1 +cool_fan_speed = 60 +cool_fan_speed_max = 100 +cool_fan_speed_min = 60 +speed_print = 50 +speed_infill = =speed_print +speed_wall_0 = =speed_print * 0.5 +speed_roofing = =speed_print * 0.5 +default_material_print_temperature = 235 +material_bed_temperature = 60 +material_bed_temperature_layer_0 = 45 +initial_layer_line_width = 140 +retraction_speed = 25 \ No newline at end of file diff --git a/resources/quality/deltacomb/PETG/deltacomb_DBE0.40_PETG_C.inst.cfg b/resources/quality/deltacomb/PETG/deltacomb_DBE0.40_PETG_C.inst.cfg new file mode 100644 index 0000000000..eff6728de5 --- /dev/null +++ b/resources/quality/deltacomb/PETG/deltacomb_DBE0.40_PETG_C.inst.cfg @@ -0,0 +1,27 @@ +[general] +version = 4 +name = C +definition = deltacomb_base + +[metadata] +setting_version = 11 +type = quality +quality_type = c +material = generic_petg +variant = DBE 0.40mm + +[values] +adhesion_type = skirt +cool_fan_full_at_height = 1 +cool_fan_speed = 60 +cool_fan_speed_max = 100 +cool_fan_speed_min = 60 +speed_print = 50 +speed_infill = =speed_print +speed_wall_0 = =speed_print * 0.5 +speed_roofing = =speed_print * 0.5 +default_material_print_temperature = 235 +material_bed_temperature = 60 +material_bed_temperature_layer_0 = 45 +initial_layer_line_width = 140 +retraction_speed = 25 \ No newline at end of file diff --git a/resources/quality/deltacomb/PETG/deltacomb_DBE0.40_PETG_D.inst.cfg b/resources/quality/deltacomb/PETG/deltacomb_DBE0.40_PETG_D.inst.cfg new file mode 100644 index 0000000000..3b321a01f6 --- /dev/null +++ b/resources/quality/deltacomb/PETG/deltacomb_DBE0.40_PETG_D.inst.cfg @@ -0,0 +1,27 @@ +[general] +version = 4 +name = D +definition = deltacomb_base + +[metadata] +setting_version = 11 +type = quality +quality_type = d +material = generic_petg +variant = DBE 0.40mm + +[values] +adhesion_type = skirt +cool_fan_full_at_height = 1 +cool_fan_speed = 60 +cool_fan_speed_max = 100 +cool_fan_speed_min = 60 +speed_print = 50 +speed_infill = =speed_print +speed_wall_0 = =speed_print * 0.5 +speed_roofing = =speed_print * 0.5 +default_material_print_temperature = 235 +material_bed_temperature = 60 +material_bed_temperature_layer_0 = 45 +initial_layer_line_width = 140 +retraction_speed = 25 \ No newline at end of file diff --git a/resources/quality/deltacomb/PETG/deltacomb_DBE0.40_PETG_E.inst.cfg b/resources/quality/deltacomb/PETG/deltacomb_DBE0.40_PETG_E.inst.cfg new file mode 100644 index 0000000000..f3fdeed340 --- /dev/null +++ b/resources/quality/deltacomb/PETG/deltacomb_DBE0.40_PETG_E.inst.cfg @@ -0,0 +1,27 @@ +[general] +version = 4 +name = E +definition = deltacomb_base + +[metadata] +setting_version = 11 +type = quality +quality_type = e +material = generic_petg +variant = DBE 0.40mm + +[values] +adhesion_type = skirt +cool_fan_full_at_height = 1 +cool_fan_speed = 60 +cool_fan_speed_max = 100 +cool_fan_speed_min = 60 +speed_print = 50 +speed_infill = =speed_print +speed_wall_0 = =speed_print * 0.5 +speed_roofing = =speed_print * 0.5 +default_material_print_temperature = 235 +material_bed_temperature = 60 +material_bed_temperature_layer_0 = 45 +initial_layer_line_width = 140 +retraction_speed = 25 \ No newline at end of file diff --git a/resources/quality/deltacomb/PETG/deltacomb_DBE0.60_PETG_C.inst.cfg b/resources/quality/deltacomb/PETG/deltacomb_DBE0.60_PETG_C.inst.cfg new file mode 100644 index 0000000000..a565542953 --- /dev/null +++ b/resources/quality/deltacomb/PETG/deltacomb_DBE0.60_PETG_C.inst.cfg @@ -0,0 +1,27 @@ +[general] +version = 4 +name = C +definition = deltacomb_base + +[metadata] +setting_version = 11 +type = quality +quality_type = c +material = generic_petg +variant = DBE 0.60mm + +[values] +adhesion_type = skirt +cool_fan_full_at_height = 1 +cool_fan_speed = 60 +cool_fan_speed_max = 100 +cool_fan_speed_min = 60 +speed_print = 50 +speed_infill = =speed_print +speed_wall_0 = =speed_print * 0.5 +speed_roofing = =speed_print * 0.5 +default_material_print_temperature = 235 +material_bed_temperature = 60 +material_bed_temperature_layer_0 = 45 +initial_layer_line_width = 140 +retraction_speed = 25 \ No newline at end of file diff --git a/resources/quality/deltacomb/PETG/deltacomb_DBE0.60_PETG_D.inst.cfg b/resources/quality/deltacomb/PETG/deltacomb_DBE0.60_PETG_D.inst.cfg new file mode 100644 index 0000000000..d26140c1fb --- /dev/null +++ b/resources/quality/deltacomb/PETG/deltacomb_DBE0.60_PETG_D.inst.cfg @@ -0,0 +1,27 @@ +[general] +version = 4 +name = D +definition = deltacomb_base + +[metadata] +setting_version = 11 +type = quality +quality_type = d +material = generic_petg +variant = DBE 0.60mm + +[values] +adhesion_type = skirt +cool_fan_full_at_height = 1 +cool_fan_speed = 60 +cool_fan_speed_max = 100 +cool_fan_speed_min = 60 +speed_print = 50 +speed_infill = =speed_print +speed_wall_0 = =speed_print * 0.5 +speed_roofing = =speed_print * 0.5 +default_material_print_temperature = 235 +material_bed_temperature = 60 +material_bed_temperature_layer_0 = 45 +initial_layer_line_width = 140 +retraction_speed = 25 \ No newline at end of file diff --git a/resources/quality/deltacomb/PETG/deltacomb_DBE0.60_PETG_E.inst.cfg b/resources/quality/deltacomb/PETG/deltacomb_DBE0.60_PETG_E.inst.cfg new file mode 100644 index 0000000000..19bbd2fd5a --- /dev/null +++ b/resources/quality/deltacomb/PETG/deltacomb_DBE0.60_PETG_E.inst.cfg @@ -0,0 +1,27 @@ +[general] +version = 4 +name = E +definition = deltacomb_base + +[metadata] +setting_version = 11 +type = quality +quality_type = e +material = generic_petg +variant = DBE 0.60mm + +[values] +adhesion_type = skirt +cool_fan_full_at_height = 1 +cool_fan_speed = 60 +cool_fan_speed_max = 100 +cool_fan_speed_min = 60 +speed_print = 40 +speed_infill = =speed_print +speed_wall_0 = =speed_print * 0.7 +speed_roofing = =speed_print * 0.7 +default_material_print_temperature = 235 +material_bed_temperature = 60 +material_bed_temperature_layer_0 = 45 +initial_layer_line_width = 140 +retraction_speed = 25 \ No newline at end of file diff --git a/resources/quality/deltacomb/PETG/deltacomb_DBE0.60_PETG_F.inst.cfg b/resources/quality/deltacomb/PETG/deltacomb_DBE0.60_PETG_F.inst.cfg new file mode 100644 index 0000000000..ab09e8b7f1 --- /dev/null +++ b/resources/quality/deltacomb/PETG/deltacomb_DBE0.60_PETG_F.inst.cfg @@ -0,0 +1,27 @@ +[general] +version = 4 +name = F +definition = deltacomb_base + +[metadata] +setting_version = 11 +type = quality +quality_type = f +material = generic_petg +variant = DBE 0.60mm + +[values] +adhesion_type = skirt +cool_fan_full_at_height = 1 +cool_fan_speed = 60 +cool_fan_speed_max = 100 +cool_fan_speed_min = 60 +speed_print = 26 +speed_infill = =speed_print +speed_wall_0 = =speed_print +speed_roofing = =speed_print +default_material_print_temperature = 235 +material_bed_temperature = 60 +material_bed_temperature_layer_0 = 45 +initial_layer_line_width = 140 +retraction_speed = 25 \ No newline at end of file diff --git a/resources/quality/deltacomb/PETG/deltacomb_FBE0.40_PETG_A.inst.cfg b/resources/quality/deltacomb/PETG/deltacomb_FBE0.40_PETG_A.inst.cfg new file mode 100644 index 0000000000..d9b2dddb43 --- /dev/null +++ b/resources/quality/deltacomb/PETG/deltacomb_FBE0.40_PETG_A.inst.cfg @@ -0,0 +1,27 @@ +[general] +version = 4 +name = A +definition = deltacomb_base + +[metadata] +setting_version = 11 +type = quality +quality_type = a +material = generic_petg +variant = FBE 0.40mm + +[values] +adhesion_type = skirt +cool_fan_full_at_height = 1 +cool_fan_speed = 60 +cool_fan_speed_max = 100 +cool_fan_speed_min = 60 +speed_print = 50 +speed_infill = =speed_print +speed_wall_0 = =speed_print * 0.5 +speed_roofing = =speed_print * 0.5 +default_material_print_temperature = 235 +material_bed_temperature = 60 +material_bed_temperature_layer_0 = 45 +initial_layer_line_width = 140 +retraction_speed = 25 \ No newline at end of file diff --git a/resources/quality/deltacomb/PETG/deltacomb_FBE0.40_PETG_B.inst.cfg b/resources/quality/deltacomb/PETG/deltacomb_FBE0.40_PETG_B.inst.cfg new file mode 100644 index 0000000000..315b5cc0e9 --- /dev/null +++ b/resources/quality/deltacomb/PETG/deltacomb_FBE0.40_PETG_B.inst.cfg @@ -0,0 +1,27 @@ +[general] +version = 4 +name = B +definition = deltacomb_base + +[metadata] +setting_version = 11 +type = quality +quality_type = b +material = generic_petg +variant = FBE 0.40mm + +[values] +adhesion_type = skirt +cool_fan_full_at_height = 1 +cool_fan_speed = 60 +cool_fan_speed_max = 100 +cool_fan_speed_min = 60 +speed_print = 50 +speed_infill = =speed_print +speed_wall_0 = =speed_print * 0.5 +speed_roofing = =speed_print * 0.5 +default_material_print_temperature = 235 +material_bed_temperature = 60 +material_bed_temperature_layer_0 = 45 +initial_layer_line_width = 140 +retraction_speed = 25 \ No newline at end of file diff --git a/resources/quality/deltacomb/PETG/deltacomb_FBE0.40_PETG_C.inst.cfg b/resources/quality/deltacomb/PETG/deltacomb_FBE0.40_PETG_C.inst.cfg new file mode 100644 index 0000000000..6c783df468 --- /dev/null +++ b/resources/quality/deltacomb/PETG/deltacomb_FBE0.40_PETG_C.inst.cfg @@ -0,0 +1,27 @@ +[general] +version = 4 +name = C +definition = deltacomb_base + +[metadata] +setting_version = 11 +type = quality +quality_type = c +material = generic_petg +variant = FBE 0.40mm + +[values] +adhesion_type = skirt +cool_fan_full_at_height = 1 +cool_fan_speed = 60 +cool_fan_speed_max = 100 +cool_fan_speed_min = 60 +speed_print = 50 +speed_infill = =speed_print +speed_wall_0 = =speed_print * 0.5 +speed_roofing = =speed_print * 0.5 +default_material_print_temperature = 235 +material_bed_temperature = 60 +material_bed_temperature_layer_0 = 45 +initial_layer_line_width = 140 +retraction_speed = 25 diff --git a/resources/quality/deltacomb/PETG/deltacomb_FBE0.40_PETG_D.inst.cfg b/resources/quality/deltacomb/PETG/deltacomb_FBE0.40_PETG_D.inst.cfg new file mode 100644 index 0000000000..980c1010c9 --- /dev/null +++ b/resources/quality/deltacomb/PETG/deltacomb_FBE0.40_PETG_D.inst.cfg @@ -0,0 +1,27 @@ +[general] +version = 4 +name = D +definition = deltacomb_base + +[metadata] +setting_version = 11 +type = quality +quality_type = d +material = generic_petg +variant = FBE 0.40mm + +[values] +adhesion_type = skirt +cool_fan_full_at_height = 1 +cool_fan_speed = 60 +cool_fan_speed_max = 100 +cool_fan_speed_min = 60 +speed_print = 50 +speed_infill = =speed_print +speed_wall_0 = =speed_print * 0.5 +speed_roofing = =speed_print * 0.5 +default_material_print_temperature = 235 +material_bed_temperature = 60 +material_bed_temperature_layer_0 = 45 +initial_layer_line_width = 140 +retraction_speed = 25 \ No newline at end of file diff --git a/resources/quality/deltacomb/PETG/deltacomb_FBE0.40_PETG_E.inst.cfg b/resources/quality/deltacomb/PETG/deltacomb_FBE0.40_PETG_E.inst.cfg new file mode 100644 index 0000000000..f17c2c3345 --- /dev/null +++ b/resources/quality/deltacomb/PETG/deltacomb_FBE0.40_PETG_E.inst.cfg @@ -0,0 +1,27 @@ +[general] +version = 4 +name = E +definition = deltacomb_base + +[metadata] +setting_version = 11 +type = quality +quality_type = e +material = generic_petg +variant = FBE 0.40mm + +[values] +adhesion_type = skirt +cool_fan_full_at_height = 1 +cool_fan_speed = 60 +cool_fan_speed_max = 100 +cool_fan_speed_min = 60 +speed_print = 50 +speed_infill = =speed_print +speed_wall_0 = =speed_print * 0.5 +speed_roofing = =speed_print * 0.5 +default_material_print_temperature = 235 +material_bed_temperature = 60 +material_bed_temperature_layer_0 = 45 +initial_layer_line_width = 140 +retraction_speed = 25 \ No newline at end of file diff --git a/resources/quality/deltacomb/PETG/deltacomb_FBE0.60_PETG_C.inst.cfg b/resources/quality/deltacomb/PETG/deltacomb_FBE0.60_PETG_C.inst.cfg new file mode 100644 index 0000000000..6c601eaea0 --- /dev/null +++ b/resources/quality/deltacomb/PETG/deltacomb_FBE0.60_PETG_C.inst.cfg @@ -0,0 +1,27 @@ +[general] +version = 4 +name = C +definition = deltacomb_base + +[metadata] +setting_version = 11 +type = quality +quality_type = c +material = generic_petg +variant = FBE 0.60mm + +[values] +adhesion_type = skirt +cool_fan_full_at_height = 1 +cool_fan_speed = 60 +cool_fan_speed_max = 100 +cool_fan_speed_min = 60 +speed_print = 50 +speed_infill = =speed_print +speed_wall_0 = =speed_print * 0.5 +speed_roofing = =speed_print * 0.5 +default_material_print_temperature = 235 +material_bed_temperature = 60 +material_bed_temperature_layer_0 = 45 +initial_layer_line_width = 140 +retraction_speed = 25 diff --git a/resources/quality/deltacomb/PETG/deltacomb_FBE0.60_PETG_D.inst.cfg b/resources/quality/deltacomb/PETG/deltacomb_FBE0.60_PETG_D.inst.cfg new file mode 100644 index 0000000000..9eb321b4cc --- /dev/null +++ b/resources/quality/deltacomb/PETG/deltacomb_FBE0.60_PETG_D.inst.cfg @@ -0,0 +1,27 @@ +[general] +version = 4 +name = D +definition = deltacomb_base + +[metadata] +setting_version = 11 +type = quality +quality_type = d +material = generic_petg +variant = FBE 0.60mm + +[values] +adhesion_type = skirt +cool_fan_full_at_height = 1 +cool_fan_speed = 60 +cool_fan_speed_max = 100 +cool_fan_speed_min = 60 +speed_print = 50 +speed_infill = =speed_print +speed_wall_0 = =speed_print * 0.5 +speed_roofing = =speed_print * 0.5 +default_material_print_temperature = 235 +material_bed_temperature = 60 +material_bed_temperature_layer_0 = 45 +initial_layer_line_width = 140 +retraction_speed = 25 \ No newline at end of file diff --git a/resources/quality/deltacomb/PETG/deltacomb_FBE0.60_PETG_E.inst.cfg b/resources/quality/deltacomb/PETG/deltacomb_FBE0.60_PETG_E.inst.cfg new file mode 100644 index 0000000000..7f7b0c92cb --- /dev/null +++ b/resources/quality/deltacomb/PETG/deltacomb_FBE0.60_PETG_E.inst.cfg @@ -0,0 +1,27 @@ +[general] +version = 4 +name = E +definition = deltacomb_base + +[metadata] +setting_version = 11 +type = quality +quality_type = e +material = generic_petg +variant = FBE 0.60mm + +[values] +adhesion_type = skirt +cool_fan_full_at_height = 1 +cool_fan_speed = 60 +cool_fan_speed_max = 100 +cool_fan_speed_min = 60 +speed_print = 40 +speed_infill = =speed_print +speed_wall_0 = =speed_print * 0.7 +speed_roofing = =speed_print * 0.7 +default_material_print_temperature = 235 +material_bed_temperature = 60 +material_bed_temperature_layer_0 = 45 +initial_layer_line_width = 140 +retraction_speed = 25 \ No newline at end of file diff --git a/resources/quality/deltacomb/PETG/deltacomb_FBE0.60_PETG_F.inst.cfg b/resources/quality/deltacomb/PETG/deltacomb_FBE0.60_PETG_F.inst.cfg new file mode 100644 index 0000000000..056d58183e --- /dev/null +++ b/resources/quality/deltacomb/PETG/deltacomb_FBE0.60_PETG_F.inst.cfg @@ -0,0 +1,27 @@ +[general] +version = 4 +name = F +definition = deltacomb_base + +[metadata] +setting_version = 11 +type = quality +quality_type = f +material = generic_petg +variant = FBE 0.60mm + +[values] +adhesion_type = skirt +cool_fan_full_at_height = 1 +cool_fan_speed = 60 +cool_fan_speed_max = 100 +cool_fan_speed_min = 60 +speed_print = 26 +speed_infill = =speed_print +speed_wall_0 = =speed_print +speed_roofing = =speed_print +default_material_print_temperature = 235 +material_bed_temperature = 60 +material_bed_temperature_layer_0 = 45 +initial_layer_line_width = 140 +retraction_speed = 25 \ No newline at end of file diff --git a/resources/quality/deltacomb/PLA/deltacomb_DBE0.25_PLA_A.inst.cfg b/resources/quality/deltacomb/PLA/deltacomb_DBE0.25_PLA_A.inst.cfg new file mode 100755 index 0000000000..3b1ca5886b --- /dev/null +++ b/resources/quality/deltacomb/PLA/deltacomb_DBE0.25_PLA_A.inst.cfg @@ -0,0 +1,18 @@ +[general] +version = 4 +name = A +definition = deltacomb_base + +[metadata] +setting_version = 11 +type = quality +quality_type = a +material = generic_pla +variant = DBE 0.40mm + +[values] +adhesion_type = skirt +cool_fan_full_at_height = =layer_height * 4 +cool_fan_speed = 100 +cool_fan_speed_max = 100 +cool_fan_speed_min = 100 \ No newline at end of file diff --git a/resources/quality/deltacomb/deltacomb_pla_Draft_Quality.inst.cfg b/resources/quality/deltacomb/PLA/deltacomb_DBE0.25_PLA_B.inst.cfg old mode 100644 new mode 100755 similarity index 52% rename from resources/quality/deltacomb/deltacomb_pla_Draft_Quality.inst.cfg rename to resources/quality/deltacomb/PLA/deltacomb_DBE0.25_PLA_B.inst.cfg index 237b6a170e..99c7a81fcb --- a/resources/quality/deltacomb/deltacomb_pla_Draft_Quality.inst.cfg +++ b/resources/quality/deltacomb/PLA/deltacomb_DBE0.25_PLA_B.inst.cfg @@ -1,22 +1,19 @@ [general] version = 4 -name = Fast -definition = deltacomb +name = B +definition = deltacomb_base [metadata] setting_version = 11 type = quality -quality_type = draft -weight = -2 +quality_type = b material = generic_pla +variant = DBE 0.40mm [values] adhesion_type = skirt -cool_fan_enabled = True cool_fan_full_at_height = =layer_height * 4 cool_fan_speed = 100 cool_fan_speed_max = 100 cool_fan_speed_min = 100 -cool_min_layer_time = 5 -cool_min_speed = 20 -material_print_temperature_layer_0 = =default_material_print_temperature + 5 +speed_print = 55 \ No newline at end of file diff --git a/resources/quality/deltacomb/deltacomb_pla_Normal_Quality.inst.cfg b/resources/quality/deltacomb/PLA/deltacomb_DBE0.25_PLA_C.inst.cfg old mode 100644 new mode 100755 similarity index 52% rename from resources/quality/deltacomb/deltacomb_pla_Normal_Quality.inst.cfg rename to resources/quality/deltacomb/PLA/deltacomb_DBE0.25_PLA_C.inst.cfg index 6d7e79941c..8c089f9216 --- a/resources/quality/deltacomb/deltacomb_pla_Normal_Quality.inst.cfg +++ b/resources/quality/deltacomb/PLA/deltacomb_DBE0.25_PLA_C.inst.cfg @@ -1,22 +1,19 @@ [general] version = 4 -name = Fine -definition = deltacomb +name = C +definition = deltacomb_base [metadata] setting_version = 11 type = quality -quality_type = normal -weight = 0 +quality_type = c material = generic_pla +variant = DBE 0.40mm [values] adhesion_type = skirt -cool_fan_enabled = True cool_fan_full_at_height = =layer_height * 4 cool_fan_speed = 100 cool_fan_speed_max = 100 cool_fan_speed_min = 100 -cool_min_layer_time = 5 -cool_min_speed = 20 -material_print_temperature_layer_0 = =default_material_print_temperature + 5 +speed_print = 32 \ No newline at end of file diff --git a/resources/quality/deltacomb/PLA/deltacomb_DBE0.40_PLA_A.inst.cfg b/resources/quality/deltacomb/PLA/deltacomb_DBE0.40_PLA_A.inst.cfg new file mode 100755 index 0000000000..3b1ca5886b --- /dev/null +++ b/resources/quality/deltacomb/PLA/deltacomb_DBE0.40_PLA_A.inst.cfg @@ -0,0 +1,18 @@ +[general] +version = 4 +name = A +definition = deltacomb_base + +[metadata] +setting_version = 11 +type = quality +quality_type = a +material = generic_pla +variant = DBE 0.40mm + +[values] +adhesion_type = skirt +cool_fan_full_at_height = =layer_height * 4 +cool_fan_speed = 100 +cool_fan_speed_max = 100 +cool_fan_speed_min = 100 \ No newline at end of file diff --git a/resources/quality/deltacomb/PLA/deltacomb_DBE0.40_PLA_B.inst.cfg b/resources/quality/deltacomb/PLA/deltacomb_DBE0.40_PLA_B.inst.cfg new file mode 100755 index 0000000000..f8458f5003 --- /dev/null +++ b/resources/quality/deltacomb/PLA/deltacomb_DBE0.40_PLA_B.inst.cfg @@ -0,0 +1,18 @@ +[general] +version = 4 +name = B +definition = deltacomb_base + +[metadata] +setting_version = 11 +type = quality +quality_type = b +material = generic_pla +variant = DBE 0.40mm + +[values] +adhesion_type = skirt +cool_fan_full_at_height = =layer_height * 4 +cool_fan_speed = 100 +cool_fan_speed_max = 100 +cool_fan_speed_min = 100 \ No newline at end of file diff --git a/resources/quality/deltacomb/PLA/deltacomb_DBE0.40_PLA_C.inst.cfg b/resources/quality/deltacomb/PLA/deltacomb_DBE0.40_PLA_C.inst.cfg new file mode 100755 index 0000000000..39361a3004 --- /dev/null +++ b/resources/quality/deltacomb/PLA/deltacomb_DBE0.40_PLA_C.inst.cfg @@ -0,0 +1,18 @@ +[general] +version = 4 +name = C +definition = deltacomb_base + +[metadata] +setting_version = 11 +type = quality +quality_type = c +material = generic_pla +variant = DBE 0.40mm + +[values] +adhesion_type = skirt +cool_fan_full_at_height = =layer_height * 4 +cool_fan_speed = 100 +cool_fan_speed_max = 100 +cool_fan_speed_min = 100 \ No newline at end of file diff --git a/resources/quality/deltacomb/PLA/deltacomb_DBE0.40_PLA_D.inst.cfg b/resources/quality/deltacomb/PLA/deltacomb_DBE0.40_PLA_D.inst.cfg new file mode 100755 index 0000000000..677ad25144 --- /dev/null +++ b/resources/quality/deltacomb/PLA/deltacomb_DBE0.40_PLA_D.inst.cfg @@ -0,0 +1,18 @@ +[general] +version = 4 +name = D +definition = deltacomb_base + +[metadata] +setting_version = 11 +type = quality +quality_type = d +material = generic_pla +variant = DBE 0.40mm + +[values] +adhesion_type = skirt +cool_fan_full_at_height = =layer_height * 4 +cool_fan_speed = 100 +cool_fan_speed_max = 100 +cool_fan_speed_min = 100 \ No newline at end of file diff --git a/resources/quality/deltacomb/PLA/deltacomb_DBE0.40_PLA_E.inst.cfg b/resources/quality/deltacomb/PLA/deltacomb_DBE0.40_PLA_E.inst.cfg new file mode 100755 index 0000000000..991778810d --- /dev/null +++ b/resources/quality/deltacomb/PLA/deltacomb_DBE0.40_PLA_E.inst.cfg @@ -0,0 +1,18 @@ +[general] +version = 4 +name = E +definition = deltacomb_base + +[metadata] +setting_version = 11 +type = quality +quality_type = e +material = generic_pla +variant = DBE 0.40mm + +[values] +adhesion_type = skirt +cool_fan_full_at_height = =layer_height * 4 +cool_fan_speed = 100 +cool_fan_speed_max = 100 +cool_fan_speed_min = 100 \ No newline at end of file diff --git a/resources/quality/deltacomb/PLA/deltacomb_DBE0.60_PLA_C.inst.cfg b/resources/quality/deltacomb/PLA/deltacomb_DBE0.60_PLA_C.inst.cfg new file mode 100755 index 0000000000..2853d60dd6 --- /dev/null +++ b/resources/quality/deltacomb/PLA/deltacomb_DBE0.60_PLA_C.inst.cfg @@ -0,0 +1,18 @@ +[general] +version = 4 +name = C +definition = deltacomb_base + +[metadata] +setting_version = 11 +type = quality +quality_type = c +material = generic_pla +variant = DBE 0.60mm + +[values] +adhesion_type = skirt +cool_fan_full_at_height = =layer_height * 4 +cool_fan_speed = 100 +cool_fan_speed_max = 100 +cool_fan_speed_min = 100 \ No newline at end of file diff --git a/resources/quality/deltacomb/PLA/deltacomb_DBE0.60_PLA_D.inst.cfg b/resources/quality/deltacomb/PLA/deltacomb_DBE0.60_PLA_D.inst.cfg new file mode 100755 index 0000000000..ee5f92f94e --- /dev/null +++ b/resources/quality/deltacomb/PLA/deltacomb_DBE0.60_PLA_D.inst.cfg @@ -0,0 +1,18 @@ +[general] +version = 4 +name = D +definition = deltacomb_base + +[metadata] +setting_version = 11 +type = quality +quality_type = d +material = generic_pla +variant = DBE 0.60mm + +[values] +adhesion_type = skirt +cool_fan_full_at_height = =layer_height * 4 +cool_fan_speed = 100 +cool_fan_speed_max = 100 +cool_fan_speed_min = 100 \ No newline at end of file diff --git a/resources/quality/deltacomb/deltacomb_pla_Fast_Quality.inst.cfg b/resources/quality/deltacomb/PLA/deltacomb_DBE0.60_PLA_E.inst.cfg old mode 100644 new mode 100755 similarity index 52% rename from resources/quality/deltacomb/deltacomb_pla_Fast_Quality.inst.cfg rename to resources/quality/deltacomb/PLA/deltacomb_DBE0.60_PLA_E.inst.cfg index cc88448304..eb5c8dd1a1 --- a/resources/quality/deltacomb/deltacomb_pla_Fast_Quality.inst.cfg +++ b/resources/quality/deltacomb/PLA/deltacomb_DBE0.60_PLA_E.inst.cfg @@ -1,22 +1,19 @@ [general] version = 4 -name = Normal -definition = deltacomb +name = E +definition = deltacomb_base [metadata] setting_version = 11 type = quality -quality_type = fast -weight = -1 +quality_type = e material = generic_pla +variant = DBE 0.60mm [values] adhesion_type = skirt -cool_fan_enabled = True cool_fan_full_at_height = =layer_height * 4 cool_fan_speed = 100 cool_fan_speed_max = 100 cool_fan_speed_min = 100 -cool_min_layer_time = 5 -cool_min_speed = 20 -material_print_temperature_layer_0 = =default_material_print_temperature + 5 +speed_print = 65 \ No newline at end of file diff --git a/resources/quality/deltacomb/deltacomb_pla_High_Quality.inst.cfg b/resources/quality/deltacomb/PLA/deltacomb_DBE0.60_PLA_F.inst.cfg old mode 100644 new mode 100755 similarity index 52% rename from resources/quality/deltacomb/deltacomb_pla_High_Quality.inst.cfg rename to resources/quality/deltacomb/PLA/deltacomb_DBE0.60_PLA_F.inst.cfg index 4589258966..fddf0f1b31 --- a/resources/quality/deltacomb/deltacomb_pla_High_Quality.inst.cfg +++ b/resources/quality/deltacomb/PLA/deltacomb_DBE0.60_PLA_F.inst.cfg @@ -1,22 +1,19 @@ [general] version = 4 -name = Extra Fine -definition = deltacomb +name = F +definition = deltacomb_base [metadata] setting_version = 11 type = quality -quality_type = high -weight = 0 +quality_type = f material = generic_pla +variant = DBE 0.60mm [values] adhesion_type = skirt -cool_fan_enabled = True cool_fan_full_at_height = =layer_height * 4 cool_fan_speed = 100 cool_fan_speed_max = 100 cool_fan_speed_min = 100 -cool_min_layer_time = 5 -cool_min_speed = 20 -material_print_temperature_layer_0 = =default_material_print_temperature + 5 +speed_print = 45 \ No newline at end of file diff --git a/resources/quality/deltacomb/PLA/deltacomb_FBE0.25_PLA_A.inst.cfg b/resources/quality/deltacomb/PLA/deltacomb_FBE0.25_PLA_A.inst.cfg new file mode 100755 index 0000000000..f8fb80173e --- /dev/null +++ b/resources/quality/deltacomb/PLA/deltacomb_FBE0.25_PLA_A.inst.cfg @@ -0,0 +1,18 @@ +[general] +version = 4 +name = A +definition = deltacomb_base + +[metadata] +setting_version = 11 +type = quality +quality_type = a +material = generic_pla +variant = FBE 0.40mm + +[values] +adhesion_type = skirt +cool_fan_full_at_height = =layer_height * 4 +cool_fan_speed = 100 +cool_fan_speed_max = 100 +cool_fan_speed_min = 100 \ No newline at end of file diff --git a/resources/quality/deltacomb/PLA/deltacomb_FBE0.25_PLA_B.inst.cfg b/resources/quality/deltacomb/PLA/deltacomb_FBE0.25_PLA_B.inst.cfg new file mode 100755 index 0000000000..ecf3bc1051 --- /dev/null +++ b/resources/quality/deltacomb/PLA/deltacomb_FBE0.25_PLA_B.inst.cfg @@ -0,0 +1,19 @@ +[general] +version = 4 +name = B +definition = deltacomb_base + +[metadata] +setting_version = 11 +type = quality +quality_type = b +material = generic_pla +variant = FBE 0.40mm + +[values] +adhesion_type = skirt +cool_fan_full_at_height = =layer_height * 4 +cool_fan_speed = 100 +cool_fan_speed_max = 100 +cool_fan_speed_min = 100 +speed_print = 55 \ No newline at end of file diff --git a/resources/quality/deltacomb/PLA/deltacomb_FBE0.25_PLA_C.inst.cfg b/resources/quality/deltacomb/PLA/deltacomb_FBE0.25_PLA_C.inst.cfg new file mode 100755 index 0000000000..65c348f5bc --- /dev/null +++ b/resources/quality/deltacomb/PLA/deltacomb_FBE0.25_PLA_C.inst.cfg @@ -0,0 +1,19 @@ +[general] +version = 4 +name = C +definition = deltacomb_base + +[metadata] +setting_version = 11 +type = quality +quality_type = c +material = generic_pla +variant = FBE 0.40mm + +[values] +adhesion_type = skirt +cool_fan_full_at_height = =layer_height * 4 +cool_fan_speed = 100 +cool_fan_speed_max = 100 +cool_fan_speed_min = 100 +speed_print = 32 \ No newline at end of file diff --git a/resources/quality/deltacomb/PLA/deltacomb_FBE0.40_PLA_A.inst.cfg b/resources/quality/deltacomb/PLA/deltacomb_FBE0.40_PLA_A.inst.cfg new file mode 100755 index 0000000000..f8fb80173e --- /dev/null +++ b/resources/quality/deltacomb/PLA/deltacomb_FBE0.40_PLA_A.inst.cfg @@ -0,0 +1,18 @@ +[general] +version = 4 +name = A +definition = deltacomb_base + +[metadata] +setting_version = 11 +type = quality +quality_type = a +material = generic_pla +variant = FBE 0.40mm + +[values] +adhesion_type = skirt +cool_fan_full_at_height = =layer_height * 4 +cool_fan_speed = 100 +cool_fan_speed_max = 100 +cool_fan_speed_min = 100 \ No newline at end of file diff --git a/resources/quality/deltacomb/PLA/deltacomb_FBE0.40_PLA_B.inst.cfg b/resources/quality/deltacomb/PLA/deltacomb_FBE0.40_PLA_B.inst.cfg new file mode 100755 index 0000000000..c7741313bd --- /dev/null +++ b/resources/quality/deltacomb/PLA/deltacomb_FBE0.40_PLA_B.inst.cfg @@ -0,0 +1,18 @@ +[general] +version = 4 +name = B +definition = deltacomb_base + +[metadata] +setting_version = 11 +type = quality +quality_type = b +material = generic_pla +variant = FBE 0.40mm + +[values] +adhesion_type = skirt +cool_fan_full_at_height = =layer_height * 4 +cool_fan_speed = 100 +cool_fan_speed_max = 100 +cool_fan_speed_min = 100 \ No newline at end of file diff --git a/resources/quality/deltacomb/PLA/deltacomb_FBE0.40_PLA_C.inst.cfg b/resources/quality/deltacomb/PLA/deltacomb_FBE0.40_PLA_C.inst.cfg new file mode 100755 index 0000000000..80241cb2d7 --- /dev/null +++ b/resources/quality/deltacomb/PLA/deltacomb_FBE0.40_PLA_C.inst.cfg @@ -0,0 +1,18 @@ +[general] +version = 4 +name = C +definition = deltacomb_base + +[metadata] +setting_version = 11 +type = quality +quality_type = c +material = generic_pla +variant = FBE 0.40mm + +[values] +adhesion_type = skirt +cool_fan_full_at_height = =layer_height * 4 +cool_fan_speed = 100 +cool_fan_speed_max = 100 +cool_fan_speed_min = 100 \ No newline at end of file diff --git a/resources/quality/deltacomb/PLA/deltacomb_FBE0.40_PLA_D.inst.cfg b/resources/quality/deltacomb/PLA/deltacomb_FBE0.40_PLA_D.inst.cfg new file mode 100755 index 0000000000..3d29cd6844 --- /dev/null +++ b/resources/quality/deltacomb/PLA/deltacomb_FBE0.40_PLA_D.inst.cfg @@ -0,0 +1,18 @@ +[general] +version = 4 +name = D +definition = deltacomb_base + +[metadata] +setting_version = 11 +type = quality +quality_type = d +material = generic_pla +variant = FBE 0.40mm + +[values] +adhesion_type = skirt +cool_fan_full_at_height = =layer_height * 4 +cool_fan_speed = 100 +cool_fan_speed_max = 100 +cool_fan_speed_min = 100 \ No newline at end of file diff --git a/resources/quality/deltacomb/PLA/deltacomb_FBE0.40_PLA_E.inst.cfg b/resources/quality/deltacomb/PLA/deltacomb_FBE0.40_PLA_E.inst.cfg new file mode 100755 index 0000000000..640f5e04d6 --- /dev/null +++ b/resources/quality/deltacomb/PLA/deltacomb_FBE0.40_PLA_E.inst.cfg @@ -0,0 +1,18 @@ +[general] +version = 4 +name = E +definition = deltacomb_base + +[metadata] +setting_version = 11 +type = quality +quality_type = e +material = generic_pla +variant = FBE 0.40mm + +[values] +adhesion_type = skirt +cool_fan_full_at_height = =layer_height * 4 +cool_fan_speed = 100 +cool_fan_speed_max = 100 +cool_fan_speed_min = 100 \ No newline at end of file diff --git a/resources/quality/deltacomb/PLA/deltacomb_FBE0.60_PLA_C.inst.cfg b/resources/quality/deltacomb/PLA/deltacomb_FBE0.60_PLA_C.inst.cfg new file mode 100755 index 0000000000..573f855c0a --- /dev/null +++ b/resources/quality/deltacomb/PLA/deltacomb_FBE0.60_PLA_C.inst.cfg @@ -0,0 +1,18 @@ +[general] +version = 4 +name = C +definition = deltacomb_base + +[metadata] +setting_version = 11 +type = quality +quality_type = c +material = generic_pla +variant = FBE 0.60mm + +[values] +adhesion_type = skirt +cool_fan_full_at_height = =layer_height * 4 +cool_fan_speed = 100 +cool_fan_speed_max = 100 +cool_fan_speed_min = 100 diff --git a/resources/quality/deltacomb/PLA/deltacomb_FBE0.60_PLA_D.inst.cfg b/resources/quality/deltacomb/PLA/deltacomb_FBE0.60_PLA_D.inst.cfg new file mode 100755 index 0000000000..f7827c9861 --- /dev/null +++ b/resources/quality/deltacomb/PLA/deltacomb_FBE0.60_PLA_D.inst.cfg @@ -0,0 +1,18 @@ +[general] +version = 4 +name = D +definition = deltacomb_base + +[metadata] +setting_version = 11 +type = quality +quality_type = d +material = generic_pla +variant = FBE 0.60mm + +[values] +adhesion_type = skirt +cool_fan_full_at_height = =layer_height * 4 +cool_fan_speed = 100 +cool_fan_speed_max = 100 +cool_fan_speed_min = 100 diff --git a/resources/quality/deltacomb/PLA/deltacomb_FBE0.60_PLA_E.inst.cfg b/resources/quality/deltacomb/PLA/deltacomb_FBE0.60_PLA_E.inst.cfg new file mode 100755 index 0000000000..dd0da51e36 --- /dev/null +++ b/resources/quality/deltacomb/PLA/deltacomb_FBE0.60_PLA_E.inst.cfg @@ -0,0 +1,19 @@ +[general] +version = 4 +name = E +definition = deltacomb_base + +[metadata] +setting_version = 11 +type = quality +quality_type = e +material = generic_pla +variant = FBE 0.60mm + +[values] +adhesion_type = skirt +cool_fan_full_at_height = =layer_height * 4 +cool_fan_speed = 100 +cool_fan_speed_max = 100 +cool_fan_speed_min = 100 +speed_print = 65 \ No newline at end of file diff --git a/resources/quality/deltacomb/PLA/deltacomb_FBE0.60_PLA_F.inst.cfg b/resources/quality/deltacomb/PLA/deltacomb_FBE0.60_PLA_F.inst.cfg new file mode 100755 index 0000000000..b21f0ef07d --- /dev/null +++ b/resources/quality/deltacomb/PLA/deltacomb_FBE0.60_PLA_F.inst.cfg @@ -0,0 +1,19 @@ +[general] +version = 4 +name = F +definition = deltacomb_base + +[metadata] +setting_version = 11 +type = quality +quality_type = f +material = generic_pla +variant = FBE 0.60mm + +[values] +adhesion_type = skirt +cool_fan_full_at_height = =layer_height * 4 +cool_fan_speed = 100 +cool_fan_speed_max = 100 +cool_fan_speed_min = 100 +speed_print = 45 \ No newline at end of file diff --git a/resources/quality/deltacomb/PLA/deltacomb_VDBE0.80_PLA_D.inst.cfg b/resources/quality/deltacomb/PLA/deltacomb_VDBE0.80_PLA_D.inst.cfg new file mode 100755 index 0000000000..121b963a64 --- /dev/null +++ b/resources/quality/deltacomb/PLA/deltacomb_VDBE0.80_PLA_D.inst.cfg @@ -0,0 +1,19 @@ +[general] +version = 4 +name = D +definition = deltacomb_base + +[metadata] +setting_version = 11 +type = quality +quality_type = d +material = generic_pla +variant = V-DBE 0.80mm + +[values] +adhesion_type = skirt +cool_fan_full_at_height = =layer_height * 4 +cool_fan_speed = 100 +cool_fan_speed_max = 100 +cool_fan_speed_min = 100 +speed_print = 150 \ No newline at end of file diff --git a/resources/quality/deltacomb/PLA/deltacomb_VDBE0.80_PLA_E.inst.cfg b/resources/quality/deltacomb/PLA/deltacomb_VDBE0.80_PLA_E.inst.cfg new file mode 100755 index 0000000000..9daba66a47 --- /dev/null +++ b/resources/quality/deltacomb/PLA/deltacomb_VDBE0.80_PLA_E.inst.cfg @@ -0,0 +1,19 @@ +[general] +version = 4 +name = E +definition = deltacomb_base + +[metadata] +setting_version = 11 +type = quality +quality_type = e +material = generic_pla +variant = V-DBE 0.80mm + +[values] +adhesion_type = skirt +cool_fan_full_at_height = =layer_height * 4 +cool_fan_speed = 100 +cool_fan_speed_max = 100 +cool_fan_speed_min = 100 +speed_print = 110 \ No newline at end of file diff --git a/resources/quality/deltacomb/PLA/deltacomb_VDBE0.80_PLA_F.inst.cfg b/resources/quality/deltacomb/PLA/deltacomb_VDBE0.80_PLA_F.inst.cfg new file mode 100755 index 0000000000..762fd23a99 --- /dev/null +++ b/resources/quality/deltacomb/PLA/deltacomb_VDBE0.80_PLA_F.inst.cfg @@ -0,0 +1,19 @@ +[general] +version = 4 +name = F +definition = deltacomb_base + +[metadata] +setting_version = 11 +type = quality +quality_type = f +material = generic_pla +variant = V-DBE 0.80mm + +[values] +adhesion_type = skirt +cool_fan_full_at_height = =layer_height * 4 +cool_fan_speed = 100 +cool_fan_speed_max = 100 +cool_fan_speed_min = 100 +speed_print = 75 \ No newline at end of file diff --git a/resources/quality/deltacomb/PLA/deltacomb_VDBE0.80_PLA_G.inst.cfg b/resources/quality/deltacomb/PLA/deltacomb_VDBE0.80_PLA_G.inst.cfg new file mode 100755 index 0000000000..6a8d0a123c --- /dev/null +++ b/resources/quality/deltacomb/PLA/deltacomb_VDBE0.80_PLA_G.inst.cfg @@ -0,0 +1,19 @@ +[general] +version = 4 +name = G +definition = deltacomb_base + +[metadata] +setting_version = 11 +type = quality +quality_type = g +material = generic_pla +variant = V-DBE 0.80mm + +[values] +adhesion_type = skirt +cool_fan_full_at_height = =layer_height * 4 +cool_fan_speed = 100 +cool_fan_speed_max = 100 +cool_fan_speed_min = 100 +speed_print = 55 \ No newline at end of file diff --git a/resources/quality/deltacomb/PLA/deltacomb_VFBE0.80_PLA_D.inst.cfg b/resources/quality/deltacomb/PLA/deltacomb_VFBE0.80_PLA_D.inst.cfg new file mode 100755 index 0000000000..1b762be18e --- /dev/null +++ b/resources/quality/deltacomb/PLA/deltacomb_VFBE0.80_PLA_D.inst.cfg @@ -0,0 +1,19 @@ +[general] +version = 4 +name = D +definition = deltacomb_base + +[metadata] +setting_version = 11 +type = quality +quality_type = d +material = generic_pla +variant = V-FBE 0.80mm + +[values] +adhesion_type = skirt +cool_fan_full_at_height = =layer_height * 4 +cool_fan_speed = 100 +cool_fan_speed_max = 100 +cool_fan_speed_min = 100 +speed_print = 150 \ No newline at end of file diff --git a/resources/quality/deltacomb/PLA/deltacomb_VFBE0.80_PLA_E.inst.cfg b/resources/quality/deltacomb/PLA/deltacomb_VFBE0.80_PLA_E.inst.cfg new file mode 100755 index 0000000000..88d8210d9c --- /dev/null +++ b/resources/quality/deltacomb/PLA/deltacomb_VFBE0.80_PLA_E.inst.cfg @@ -0,0 +1,19 @@ +[general] +version = 4 +name = E +definition = deltacomb_base + +[metadata] +setting_version = 11 +type = quality +quality_type = e +material = generic_pla +variant = V-FBE 0.60mm + +[values] +adhesion_type = skirt +cool_fan_full_at_height = =layer_height * 4 +cool_fan_speed = 100 +cool_fan_speed_max = 100 +cool_fan_speed_min = 100 +speed_print = 110 \ No newline at end of file diff --git a/resources/quality/deltacomb/PLA/deltacomb_VFBE0.80_PLA_F.inst.cfg b/resources/quality/deltacomb/PLA/deltacomb_VFBE0.80_PLA_F.inst.cfg new file mode 100755 index 0000000000..b783f809b9 --- /dev/null +++ b/resources/quality/deltacomb/PLA/deltacomb_VFBE0.80_PLA_F.inst.cfg @@ -0,0 +1,19 @@ +[general] +version = 4 +name = F +definition = deltacomb_base + +[metadata] +setting_version = 11 +type = quality +quality_type = f +material = generic_pla +variant = V-FBE 0.80mm + +[values] +adhesion_type = skirt +cool_fan_full_at_height = =layer_height * 4 +cool_fan_speed = 100 +cool_fan_speed_max = 100 +cool_fan_speed_min = 100 +speed_print = 75 \ No newline at end of file diff --git a/resources/quality/deltacomb/PLA/deltacomb_VFBE0.80_PLA_G.inst.cfg b/resources/quality/deltacomb/PLA/deltacomb_VFBE0.80_PLA_G.inst.cfg new file mode 100755 index 0000000000..50f623d56f --- /dev/null +++ b/resources/quality/deltacomb/PLA/deltacomb_VFBE0.80_PLA_G.inst.cfg @@ -0,0 +1,19 @@ +[general] +version = 4 +name = G +definition = deltacomb_base + +[metadata] +setting_version = 11 +type = quality +quality_type = g +material = generic_pla +variant = V-FBE 0.80mm + +[values] +adhesion_type = skirt +cool_fan_full_at_height = =layer_height * 4 +cool_fan_speed = 100 +cool_fan_speed_max = 100 +cool_fan_speed_min = 100 +speed_print = 55 \ No newline at end of file diff --git a/resources/quality/deltacomb/deltacomb_tpu_Draft_Quality.inst.cfg b/resources/quality/deltacomb/TPU/deltacomb_FBE0.40_TPU_B.inst.cfg old mode 100644 new mode 100755 similarity index 62% rename from resources/quality/deltacomb/deltacomb_tpu_Draft_Quality.inst.cfg rename to resources/quality/deltacomb/TPU/deltacomb_FBE0.40_TPU_B.inst.cfg index 18c9162995..1640b24696 --- a/resources/quality/deltacomb/deltacomb_tpu_Draft_Quality.inst.cfg +++ b/resources/quality/deltacomb/TPU/deltacomb_FBE0.40_TPU_B.inst.cfg @@ -1,27 +1,26 @@ [general] version = 4 -name = Fast -definition = deltacomb +name = B +definition = deltacomb_base [metadata] setting_version = 11 type = quality -quality_type = draft -weight = -2 +quality_type = b material = generic_tpu +variant = FBE 0.40mm [values] adhesion_type = skirt -cool_fan_enabled = True cool_fan_full_at_height = =layer_height * 6 cool_fan_speed = 100 cool_fan_speed_max = 100 cool_fan_speed_min = 70 -cool_min_layer_time = 5 -cool_min_speed = 20 -material_print_temperature_layer_0 = =default_material_print_temperature + 5 speed_print = 25 speed_travel = 300 acceleration_travel = 10000 retraction_amount = 5 retraction_hop_enabled = False +ironing_flow = 5 +jerk_ironing = 5 +speed_ironing = =speed_print \ No newline at end of file diff --git a/resources/quality/deltacomb/deltacomb_tpu_Normal_Quality.inst.cfg b/resources/quality/deltacomb/TPU/deltacomb_FBE0.40_TPU_C.inst.cfg old mode 100644 new mode 100755 similarity index 62% rename from resources/quality/deltacomb/deltacomb_tpu_Normal_Quality.inst.cfg rename to resources/quality/deltacomb/TPU/deltacomb_FBE0.40_TPU_C.inst.cfg index 4dee4aae93..f318406f9f --- a/resources/quality/deltacomb/deltacomb_tpu_Normal_Quality.inst.cfg +++ b/resources/quality/deltacomb/TPU/deltacomb_FBE0.40_TPU_C.inst.cfg @@ -1,27 +1,26 @@ [general] version = 4 -name = Fine -definition = deltacomb +name = C +definition = deltacomb_base [metadata] setting_version = 11 type = quality -quality_type = normal -weight = 0 +quality_type = c material = generic_tpu +variant = FBE 0.40mm [values] adhesion_type = skirt -cool_fan_enabled = True cool_fan_full_at_height = =layer_height * 6 cool_fan_speed = 100 cool_fan_speed_max = 100 cool_fan_speed_min = 70 -cool_min_layer_time = 5 -cool_min_speed = 20 -material_print_temperature_layer_0 = =default_material_print_temperature + 5 speed_print = 25 speed_travel = 300 acceleration_travel = 10000 retraction_amount = 5 retraction_hop_enabled = False +ironing_flow = 5 +jerk_ironing = 5 +speed_ironing = =speed_print diff --git a/resources/quality/deltacomb/deltacomb_tpu_Fast_Quality.inst.cfg b/resources/quality/deltacomb/TPU/deltacomb_FBE0.40_TPU_D.inst.cfg old mode 100644 new mode 100755 similarity index 62% rename from resources/quality/deltacomb/deltacomb_tpu_Fast_Quality.inst.cfg rename to resources/quality/deltacomb/TPU/deltacomb_FBE0.40_TPU_D.inst.cfg index de34ca53e3..a63e83afa8 --- a/resources/quality/deltacomb/deltacomb_tpu_Fast_Quality.inst.cfg +++ b/resources/quality/deltacomb/TPU/deltacomb_FBE0.40_TPU_D.inst.cfg @@ -1,27 +1,26 @@ [general] version = 4 -name = Normal -definition = deltacomb +name = D +definition = deltacomb_base [metadata] setting_version = 11 type = quality -quality_type = fast -weight = -1 +quality_type = d material = generic_tpu +variant = FBE 0.40mm [values] adhesion_type = skirt -cool_fan_enabled = True cool_fan_full_at_height = =layer_height * 6 cool_fan_speed = 100 cool_fan_speed_max = 100 cool_fan_speed_min = 70 -cool_min_layer_time = 5 -cool_min_speed = 20 -material_print_temperature_layer_0 = =default_material_print_temperature + 5 speed_print = 25 speed_travel = 300 acceleration_travel = 10000 retraction_amount = 5 retraction_hop_enabled = False +ironing_flow = 5 +jerk_ironing = 5 +speed_ironing = =speed_print diff --git a/resources/quality/deltacomb/deltacomb_abs_Draft_Quality.inst.cfg b/resources/quality/deltacomb/deltacomb_abs_Draft_Quality.inst.cfg deleted file mode 100644 index ecc3cd7f31..0000000000 --- a/resources/quality/deltacomb/deltacomb_abs_Draft_Quality.inst.cfg +++ /dev/null @@ -1,24 +0,0 @@ -[general] -version = 4 -name = Fast (beta) -definition = deltacomb - -[metadata] -setting_version = 11 -type = quality -quality_type = draft -weight = -2 -material = generic_abs - -[values] -adhesion_type = raft -cool_fan_enabled = True -cool_fan_full_at_height = =layer_height * 6 -cool_fan_speed = 50 -cool_fan_speed_max = 50 -cool_fan_speed_min = 50 -cool_min_layer_time = 5 -cool_min_speed = 20 -material_bed_temperature = 80 -material_print_temperature_layer_0 = =default_material_print_temperature + 5 - diff --git a/resources/quality/deltacomb/deltacomb_abs_Fast_Quality.inst.cfg b/resources/quality/deltacomb/deltacomb_abs_Fast_Quality.inst.cfg deleted file mode 100644 index 1560db980f..0000000000 --- a/resources/quality/deltacomb/deltacomb_abs_Fast_Quality.inst.cfg +++ /dev/null @@ -1,23 +0,0 @@ -[general] -version = 4 -name = Normal (beta) -definition = deltacomb - -[metadata] -setting_version = 11 -type = quality -quality_type = fast -weight = -1 -material = generic_abs - -[values] -adhesion_type = raft -cool_fan_enabled = True -cool_fan_full_at_height = =layer_height * 6 -cool_fan_speed = 50 -cool_fan_speed_max = 50 -cool_fan_speed_min = 50 -cool_min_layer_time = 5 -cool_min_speed = 20 -material_bed_temperature = 80 -material_print_temperature_layer_0 = =default_material_print_temperature + 5 diff --git a/resources/quality/deltacomb/deltacomb_abs_High_Quality.inst.cfg b/resources/quality/deltacomb/deltacomb_abs_High_Quality.inst.cfg deleted file mode 100644 index 8daad9dc98..0000000000 --- a/resources/quality/deltacomb/deltacomb_abs_High_Quality.inst.cfg +++ /dev/null @@ -1,23 +0,0 @@ -[general] -version = 4 -name = Extra Fine (beta) -definition = deltacomb - -[metadata] -setting_version = 11 -type = quality -quality_type = high -weight = 0 -material = generic_abs - -[values] -adhesion_type = raft -cool_fan_enabled = True -cool_fan_full_at_height = =layer_height * 6 -cool_fan_speed = 50 -cool_fan_speed_max = 50 -cool_fan_speed_min = 50 -cool_min_layer_time = 5 -cool_min_speed = 20 -material_bed_temperature = 80 -material_print_temperature_layer_0 = =default_material_print_temperature + 5 diff --git a/resources/quality/deltacomb/deltacomb_abs_Normal_Quality.inst.cfg b/resources/quality/deltacomb/deltacomb_abs_Normal_Quality.inst.cfg deleted file mode 100644 index e70231fa98..0000000000 --- a/resources/quality/deltacomb/deltacomb_abs_Normal_Quality.inst.cfg +++ /dev/null @@ -1,23 +0,0 @@ -[general] -version = 4 -name = Fine (beta) -definition = deltacomb - -[metadata] -setting_version = 11 -type = quality -quality_type = normal -weight = 0 -material = generic_abs - -[values] -adhesion_type = raft -cool_fan_enabled = True -cool_fan_full_at_height = =layer_height * 6 -cool_fan_speed = 50 -cool_fan_speed_max = 50 -cool_fan_speed_min = 50 -cool_min_layer_time = 5 -cool_min_speed = 20 -material_bed_temperature = 80 -material_print_temperature_layer_0 = =default_material_print_temperature + 5 diff --git a/resources/quality/deltacomb/deltacomb_abs_Verydraft_Quality.inst.cfg b/resources/quality/deltacomb/deltacomb_abs_Verydraft_Quality.inst.cfg deleted file mode 100644 index eba9a4f24d..0000000000 --- a/resources/quality/deltacomb/deltacomb_abs_Verydraft_Quality.inst.cfg +++ /dev/null @@ -1,23 +0,0 @@ -[general] -version = 4 -name = Extra Fast (beta) -definition = deltacomb - -[metadata] -setting_version = 11 -type = quality -quality_type = verydraft -weight = -3 -material = generic_abs - -[values] -adhesion_type = raft -cool_fan_enabled = True -cool_fan_full_at_height = =layer_height * 6 -cool_fan_speed = 50 -cool_fan_speed_max = 50 -cool_fan_speed_min = 50 -cool_min_layer_time = 5 -cool_min_speed = 20 -material_bed_temperature = 80 -material_print_temperature_layer_0 = =default_material_print_temperature + 5 diff --git a/resources/quality/deltacomb/deltacomb_global_A.inst.cfg b/resources/quality/deltacomb/deltacomb_global_A.inst.cfg new file mode 100755 index 0000000000..3d7bbc52af --- /dev/null +++ b/resources/quality/deltacomb/deltacomb_global_A.inst.cfg @@ -0,0 +1,22 @@ +[general] +version = 4 +name = Extra Fine +definition = deltacomb_base + +[metadata] +setting_version = 11 +type = quality +quality_type = a +weight = 1 +global_quality = True + +[values] +layer_height = 0.05 +layer_height_0 = 0.1 +cool_fan_enabled = True +cool_min_layer_time = 10 +cool_min_layer_time_fan_speed_max = 10 +cool_min_speed = 5 +material_flow_layer_0 = =material_flow * 1.2 +material_print_temperature_layer_0 = =default_material_print_temperature + 5 +support_angle = 80 diff --git a/resources/quality/deltacomb/deltacomb_global_B.inst.cfg b/resources/quality/deltacomb/deltacomb_global_B.inst.cfg new file mode 100755 index 0000000000..f3adec4ae4 --- /dev/null +++ b/resources/quality/deltacomb/deltacomb_global_B.inst.cfg @@ -0,0 +1,22 @@ +[general] +version = 4 +name = Fine +definition = deltacomb_base + +[metadata] +setting_version = 11 +type = quality +quality_type = b +weight = 0 +global_quality = True + +[values] +layer_height = 0.1 +layer_height_0 = 0.1 +cool_fan_enabled = True +cool_min_layer_time = 10 +cool_min_layer_time_fan_speed_max = 10 +cool_min_speed = 5 +material_flow_layer_0 = =material_flow * 1.2 +material_print_temperature_layer_0 = =default_material_print_temperature + 5 +support_angle = 65 diff --git a/resources/quality/deltacomb/deltacomb_global_C.inst.cfg b/resources/quality/deltacomb/deltacomb_global_C.inst.cfg new file mode 100755 index 0000000000..67c608971b --- /dev/null +++ b/resources/quality/deltacomb/deltacomb_global_C.inst.cfg @@ -0,0 +1,21 @@ +[general] +version = 4 +name = Normal +definition = deltacomb_base + +[metadata] +setting_version = 11 +type = quality +quality_type = c +weight = -1 +global_quality = True + +[values] +layer_height = 0.15 +cool_fan_enabled = True +cool_min_layer_time = 10 +cool_min_layer_time_fan_speed_max = 10 +cool_min_speed = 5 +material_flow_layer_0 = =material_flow * 1.2 +material_print_temperature_layer_0 = =default_material_print_temperature + 5 +support_angle = 55 diff --git a/resources/quality/deltacomb/deltacomb_global_D.inst.cfg b/resources/quality/deltacomb/deltacomb_global_D.inst.cfg new file mode 100755 index 0000000000..2a7b80b2ab --- /dev/null +++ b/resources/quality/deltacomb/deltacomb_global_D.inst.cfg @@ -0,0 +1,20 @@ +[general] +version = 4 +name = Fast +definition = deltacomb_base + +[metadata] +setting_version = 11 +type = quality +quality_type = d +weight = -2 +global_quality = True + +[values] +layer_height = 0.2 +cool_fan_enabled = True +cool_min_layer_time = 10 +cool_min_layer_time_fan_speed_max = 10 +cool_min_speed = 5 +material_flow_layer_0 = =material_flow * 1.2 +material_print_temperature_layer_0 = =default_material_print_temperature + 5 diff --git a/resources/quality/deltacomb/deltacomb_global_Draft_Quality.inst.cfg b/resources/quality/deltacomb/deltacomb_global_Draft_Quality.inst.cfg deleted file mode 100644 index 0ccde62e0e..0000000000 --- a/resources/quality/deltacomb/deltacomb_global_Draft_Quality.inst.cfg +++ /dev/null @@ -1,15 +0,0 @@ -[general] -version = 4 -name = Fast -definition = deltacomb - -[metadata] -setting_version = 11 -type = quality -quality_type = draft -weight = -2 -global_quality = True - -[values] -layer_height = 0.2 -layer_height_0 = =layer_height diff --git a/resources/quality/deltacomb/deltacomb_global_E.inst.cfg b/resources/quality/deltacomb/deltacomb_global_E.inst.cfg new file mode 100755 index 0000000000..89dcdf23b1 --- /dev/null +++ b/resources/quality/deltacomb/deltacomb_global_E.inst.cfg @@ -0,0 +1,20 @@ +[general] +version = 4 +name = Extra Fast +definition = deltacomb_base + +[metadata] +setting_version = 11 +type = quality +quality_type = e +weight = -3 +global_quality = True + +[values] +layer_height = 0.3 +cool_fan_enabled = True +cool_min_layer_time = 10 +cool_min_layer_time_fan_speed_max = 10 +cool_min_speed = 5 +material_flow_layer_0 = =material_flow * 1.2 +material_print_temperature_layer_0 = =default_material_print_temperature + 5 diff --git a/resources/quality/deltacomb/deltacomb_global_F.inst.cfg b/resources/quality/deltacomb/deltacomb_global_F.inst.cfg new file mode 100755 index 0000000000..f8f877d2d2 --- /dev/null +++ b/resources/quality/deltacomb/deltacomb_global_F.inst.cfg @@ -0,0 +1,20 @@ +[general] +version = 4 +name = Coarse +definition = deltacomb_base + +[metadata] +setting_version = 11 +type = quality +quality_type = f +weight = -4 +global_quality = True + +[values] +layer_height = 0.45 +cool_fan_enabled = True +cool_min_layer_time = 10 +cool_min_layer_time_fan_speed_max = 10 +cool_min_speed = 5 +material_flow_layer_0 = =material_flow * 1.2 +material_print_temperature_layer_0 = =default_material_print_temperature + 5 diff --git a/resources/quality/deltacomb/deltacomb_global_Fast_Quality.inst.cfg b/resources/quality/deltacomb/deltacomb_global_Fast_Quality.inst.cfg deleted file mode 100644 index fb38bad012..0000000000 --- a/resources/quality/deltacomb/deltacomb_global_Fast_Quality.inst.cfg +++ /dev/null @@ -1,15 +0,0 @@ -[general] -version = 4 -name = Normal -definition = deltacomb - -[metadata] -setting_version = 11 -type = quality -quality_type = fast -weight = -1 -global_quality = True - -[values] -layer_height = 0.15 -layer_height_0 = =layer_height diff --git a/resources/quality/deltacomb/deltacomb_global_G.inst.cfg b/resources/quality/deltacomb/deltacomb_global_G.inst.cfg new file mode 100755 index 0000000000..362299d8aa --- /dev/null +++ b/resources/quality/deltacomb/deltacomb_global_G.inst.cfg @@ -0,0 +1,20 @@ +[general] +version = 4 +name = Extra Coarse +definition = deltacomb_base + +[metadata] +setting_version = 11 +type = quality +quality_type = g +weight = -5 +global_quality = True + +[values] +layer_height = 0.6 +cool_fan_enabled = True +cool_min_layer_time = 10 +cool_min_layer_time_fan_speed_max = 10 +cool_min_speed = 5 +material_flow_layer_0 = =material_flow * 1.2 +material_print_temperature_layer_0 = =default_material_print_temperature + 5 diff --git a/resources/quality/deltacomb/deltacomb_global_High_Quality.inst.cfg b/resources/quality/deltacomb/deltacomb_global_High_Quality.inst.cfg deleted file mode 100644 index 6abfa29a9f..0000000000 --- a/resources/quality/deltacomb/deltacomb_global_High_Quality.inst.cfg +++ /dev/null @@ -1,15 +0,0 @@ -[general] -version = 4 -name = Extra Fine -definition = deltacomb - -[metadata] -setting_version = 11 -type = quality -quality_type = high -weight = 0 -global_quality = True - -[values] -layer_height = 0.05 -layer_height_0 = =layer_height * 2 diff --git a/resources/quality/deltacomb/deltacomb_global_Normal_Quality.inst.cfg b/resources/quality/deltacomb/deltacomb_global_Normal_Quality.inst.cfg deleted file mode 100644 index 9e16095828..0000000000 --- a/resources/quality/deltacomb/deltacomb_global_Normal_Quality.inst.cfg +++ /dev/null @@ -1,15 +0,0 @@ -[general] -version = 4 -name = Fine -definition = deltacomb - -[metadata] -setting_version = 11 -type = quality -quality_type = normal -weight = 0 -global_quality = True - -[values] -layer_height = 0.1 -layer_height_0 = =layer_height * 2 diff --git a/resources/quality/deltacomb/deltacomb_global_Verydraft_Quality.inst.cfg b/resources/quality/deltacomb/deltacomb_global_Verydraft_Quality.inst.cfg deleted file mode 100644 index 0d5e277e7e..0000000000 --- a/resources/quality/deltacomb/deltacomb_global_Verydraft_Quality.inst.cfg +++ /dev/null @@ -1,15 +0,0 @@ -[general] -version = 4 -name = Extra Fast -definition = deltacomb - -[metadata] -setting_version = 11 -type = quality -quality_type = verydraft -weight = -3 -global_quality = True - -[values] -layer_height = 0.3 -layer_height_0 = =layer_height diff --git a/resources/quality/deltacomb/deltacomb_petg_Draft_Quality.inst.cfg b/resources/quality/deltacomb/deltacomb_petg_Draft_Quality.inst.cfg deleted file mode 100644 index 323a806c91..0000000000 --- a/resources/quality/deltacomb/deltacomb_petg_Draft_Quality.inst.cfg +++ /dev/null @@ -1,25 +0,0 @@ -[general] -version = 4 -name = Fast -definition = deltacomb - -[metadata] -setting_version = 11 -type = quality -quality_type = draft -weight = -2 -material = generic_petg - -[values] -adhesion_type = skirt -cool_fan_enabled = True -cool_fan_full_at_height = =layer_height * 4 -cool_fan_speed = 60 -cool_fan_speed_max = 100 -cool_fan_speed_min = 60 -cool_min_layer_time = 5 -cool_min_speed = 20 -speed_print = 50 -default_material_print_temperature = 235 -material_standby_temperature = 215 -material_print_temperature_layer_0 = =default_material_print_temperature + 5 diff --git a/resources/quality/deltacomb/deltacomb_petg_Fast_Quality.inst.cfg b/resources/quality/deltacomb/deltacomb_petg_Fast_Quality.inst.cfg deleted file mode 100644 index 1ceec59cf5..0000000000 --- a/resources/quality/deltacomb/deltacomb_petg_Fast_Quality.inst.cfg +++ /dev/null @@ -1,25 +0,0 @@ -[general] -version = 4 -name = Normal -definition = deltacomb - -[metadata] -setting_version = 11 -type = quality -quality_type = fast -weight = -1 -material = generic_petg - -[values] -adhesion_type = skirt -cool_fan_enabled = True -cool_fan_full_at_height = =layer_height * 4 -cool_fan_speed = 60 -cool_fan_speed_max = 100 -cool_fan_speed_min = 60 -cool_min_layer_time = 5 -cool_min_speed = 20 -speed_print = 50 -default_material_print_temperature = 235 -material_standby_temperature = 215 -material_print_temperature_layer_0 = =default_material_print_temperature + 5 diff --git a/resources/quality/deltacomb/deltacomb_petg_High_Quality.inst.cfg b/resources/quality/deltacomb/deltacomb_petg_High_Quality.inst.cfg deleted file mode 100644 index c718605590..0000000000 --- a/resources/quality/deltacomb/deltacomb_petg_High_Quality.inst.cfg +++ /dev/null @@ -1,25 +0,0 @@ -[general] -version = 4 -name = Extra Fine -definition = deltacomb - -[metadata] -setting_version = 11 -type = quality -quality_type = high -weight = 0 -material = generic_petg - -[values] -adhesion_type = skirt -cool_fan_enabled = True -cool_fan_full_at_height = =layer_height * 4 -cool_fan_speed = 60 -cool_fan_speed_max = 100 -cool_fan_speed_min = 60 -cool_min_layer_time = 5 -cool_min_speed = 20 -speed_print = 50 -default_material_print_temperature = 235 -material_standby_temperature = 215 -material_print_temperature_layer_0 = =default_material_print_temperature + 5 diff --git a/resources/quality/deltacomb/deltacomb_petg_Normal_Quality.inst.cfg b/resources/quality/deltacomb/deltacomb_petg_Normal_Quality.inst.cfg deleted file mode 100644 index ad0a208baa..0000000000 --- a/resources/quality/deltacomb/deltacomb_petg_Normal_Quality.inst.cfg +++ /dev/null @@ -1,25 +0,0 @@ -[general] -version = 4 -name = Fine -definition = deltacomb - -[metadata] -setting_version = 11 -type = quality -quality_type = normal -weight = 0 -material = generic_petg - -[values] -adhesion_type = skirt -cool_fan_enabled = True -cool_fan_full_at_height = =layer_height * 4 -cool_fan_speed = 60 -cool_fan_speed_max = 100 -cool_fan_speed_min = 60 -cool_min_layer_time = 5 -cool_min_speed = 20 -speed_print = 50 -default_material_print_temperature = 235 -material_standby_temperature = 215 -material_print_temperature_layer_0 = =default_material_print_temperature + 5 diff --git a/resources/quality/deltacomb/deltacomb_petg_Verydraft_Quality.inst.cfg b/resources/quality/deltacomb/deltacomb_petg_Verydraft_Quality.inst.cfg deleted file mode 100644 index e20570f73a..0000000000 --- a/resources/quality/deltacomb/deltacomb_petg_Verydraft_Quality.inst.cfg +++ /dev/null @@ -1,25 +0,0 @@ -[general] -version = 4 -name = Extra Fast -definition = deltacomb - -[metadata] -setting_version = 11 -type = quality -quality_type = verydraft -weight = -3 -material = generic_petg - -[values] -adhesion_type = skirt -cool_fan_enabled = True -cool_fan_full_at_height = =layer_height * 4 -cool_fan_speed = 60 -cool_fan_speed_max = 100 -cool_fan_speed_min = 60 -cool_min_layer_time = 5 -cool_min_speed = 20 -speed_print = 50 -default_material_print_temperature = 235 -material_standby_temperature = 215 -material_print_temperature_layer_0 = =default_material_print_temperature + 5 diff --git a/resources/quality/deltacomb/deltacomb_pla_Verydraft_Quality.inst.cfg b/resources/quality/deltacomb/deltacomb_pla_Verydraft_Quality.inst.cfg deleted file mode 100644 index 785631454b..0000000000 --- a/resources/quality/deltacomb/deltacomb_pla_Verydraft_Quality.inst.cfg +++ /dev/null @@ -1,22 +0,0 @@ -[general] -version = 4 -name = Extra Fast -definition = deltacomb - -[metadata] -setting_version = 11 -type = quality -quality_type = verydraft -weight = -3 -material = generic_pla - -[values] -adhesion_type = skirt -cool_fan_enabled = True -cool_fan_full_at_height = =layer_height * 4 -cool_fan_speed = 100 -cool_fan_speed_max = 100 -cool_fan_speed_min = 100 -cool_min_layer_time = 5 -cool_min_speed = 20 -material_print_temperature_layer_0 = =default_material_print_temperature + 5 diff --git a/resources/quality/deltacomb/deltacomb_tpu_High_Quality.inst.cfg b/resources/quality/deltacomb/deltacomb_tpu_High_Quality.inst.cfg deleted file mode 100644 index c666e4f97c..0000000000 --- a/resources/quality/deltacomb/deltacomb_tpu_High_Quality.inst.cfg +++ /dev/null @@ -1,27 +0,0 @@ -[general] -version = 4 -name = Extra Fine -definition = deltacomb - -[metadata] -setting_version = 11 -type = quality -quality_type = high -weight = 0 -material = generic_tpu - -[values] -adhesion_type = skirt -cool_fan_enabled = True -cool_fan_full_at_height = =layer_height * 6 -cool_fan_speed = 100 -cool_fan_speed_max = 100 -cool_fan_speed_min = 70 -cool_min_layer_time = 5 -cool_min_speed = 20 -material_print_temperature_layer_0 = =default_material_print_temperature + 5 -speed_print = 25 -speed_travel = 300 -acceleration_travel = 10000 -retraction_amount = 5 -retraction_hop_enabled = False diff --git a/resources/quality/deltacomb/deltacomb_tpu_Verydraft_Quality.inst.cfg b/resources/quality/deltacomb/deltacomb_tpu_Verydraft_Quality.inst.cfg deleted file mode 100644 index 31d552af6f..0000000000 --- a/resources/quality/deltacomb/deltacomb_tpu_Verydraft_Quality.inst.cfg +++ /dev/null @@ -1,27 +0,0 @@ -[general] -version = 4 -name = Extra Fast -definition = deltacomb - -[metadata] -setting_version = 11 -type = quality -quality_type = verydraft -weight = -3 -material = generic_tpu - -[values] -adhesion_type = skirt -cool_fan_enabled = True -cool_fan_full_at_height = =layer_height * 6 -cool_fan_speed = 100 -cool_fan_speed_max = 100 -cool_fan_speed_min = 70 -cool_min_layer_time = 5 -cool_min_speed = 20 -material_print_temperature_layer_0 = =default_material_print_temperature + 5 -speed_print = 25 -speed_travel = 300 -acceleration_travel = 10000 -retraction_amount = 5 -retraction_hop_enabled = False diff --git a/resources/variants/deltacomb/deltacomb_dc20_fbe025.inst.cfg b/resources/variants/deltacomb/deltacomb_dc20_fbe025.inst.cfg new file mode 100755 index 0000000000..947b175523 --- /dev/null +++ b/resources/variants/deltacomb/deltacomb_dc20_fbe025.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = FBE 0.25mm +version = 4 +definition = deltacomb_dc20 + +[metadata] +setting_version = 11 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.25 \ No newline at end of file diff --git a/resources/variants/deltacomb/deltacomb_dc20_fbe040.inst.cfg b/resources/variants/deltacomb/deltacomb_dc20_fbe040.inst.cfg new file mode 100755 index 0000000000..818dc787ca --- /dev/null +++ b/resources/variants/deltacomb/deltacomb_dc20_fbe040.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = FBE 0.40mm +version = 4 +definition = deltacomb_dc20 + +[metadata] +setting_version = 11 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.40 diff --git a/resources/variants/deltacomb/deltacomb_dc20_fbe060.inst.cfg b/resources/variants/deltacomb/deltacomb_dc20_fbe060.inst.cfg new file mode 100755 index 0000000000..39c450eb1c --- /dev/null +++ b/resources/variants/deltacomb/deltacomb_dc20_fbe060.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = FBE 0.60mm +version = 4 +definition = deltacomb_dc20 + +[metadata] +setting_version = 11 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.60 diff --git a/resources/variants/deltacomb/deltacomb_dc20_vfbe080.inst.cfg b/resources/variants/deltacomb/deltacomb_dc20_vfbe080.inst.cfg new file mode 100755 index 0000000000..f580bf223c --- /dev/null +++ b/resources/variants/deltacomb/deltacomb_dc20_vfbe080.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = V-FBE 0.80mm +version = 4 +definition = deltacomb_dc20 + +[metadata] +setting_version = 11 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.80 diff --git a/resources/variants/deltacomb/deltacomb_dc20dual_dbe025.inst.cfg b/resources/variants/deltacomb/deltacomb_dc20dual_dbe025.inst.cfg new file mode 100755 index 0000000000..0422b9648d --- /dev/null +++ b/resources/variants/deltacomb/deltacomb_dc20dual_dbe025.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = DBE 0.25mm +version = 4 +definition = deltacomb_dc20dual + +[metadata] +setting_version = 11 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.25 \ No newline at end of file diff --git a/resources/variants/deltacomb/deltacomb_dc20dual_dbe040.inst.cfg b/resources/variants/deltacomb/deltacomb_dc20dual_dbe040.inst.cfg new file mode 100755 index 0000000000..470fef9382 --- /dev/null +++ b/resources/variants/deltacomb/deltacomb_dc20dual_dbe040.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = DBE 0.40mm +version = 4 +definition = deltacomb_dc20dual + +[metadata] +setting_version = 11 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.40 diff --git a/resources/variants/deltacomb/deltacomb_dc20dual_dbe060.inst.cfg b/resources/variants/deltacomb/deltacomb_dc20dual_dbe060.inst.cfg new file mode 100755 index 0000000000..c5bc481ab6 --- /dev/null +++ b/resources/variants/deltacomb/deltacomb_dc20dual_dbe060.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = DBE 0.60mm +version = 4 +definition = deltacomb_dc20dual + +[metadata] +setting_version = 11 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.60 diff --git a/resources/variants/deltacomb/deltacomb_dc20dual_vdbe080.inst.cfg b/resources/variants/deltacomb/deltacomb_dc20dual_vdbe080.inst.cfg new file mode 100755 index 0000000000..715f1c6e46 --- /dev/null +++ b/resources/variants/deltacomb/deltacomb_dc20dual_vdbe080.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = V-DBE 0.80mm +version = 4 +definition = deltacomb_dc20dual + +[metadata] +setting_version = 11 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.80 diff --git a/resources/variants/deltacomb/deltacomb_dc20flux_fbe025.inst.cfg b/resources/variants/deltacomb/deltacomb_dc20flux_fbe025.inst.cfg new file mode 100755 index 0000000000..60cc5d8985 --- /dev/null +++ b/resources/variants/deltacomb/deltacomb_dc20flux_fbe025.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = FBE 0.25mm +version = 4 +definition = deltacomb_dc20flux + +[metadata] +setting_version = 11 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.25 \ No newline at end of file diff --git a/resources/variants/deltacomb/deltacomb_dc20flux_fbe040.inst.cfg b/resources/variants/deltacomb/deltacomb_dc20flux_fbe040.inst.cfg new file mode 100755 index 0000000000..2f13f66733 --- /dev/null +++ b/resources/variants/deltacomb/deltacomb_dc20flux_fbe040.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = FBE 0.40mm +version = 4 +definition = deltacomb_dc20flux + +[metadata] +setting_version = 11 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.40 diff --git a/resources/variants/deltacomb/deltacomb_dc20flux_fbe060.inst.cfg b/resources/variants/deltacomb/deltacomb_dc20flux_fbe060.inst.cfg new file mode 100755 index 0000000000..780880eb33 --- /dev/null +++ b/resources/variants/deltacomb/deltacomb_dc20flux_fbe060.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = FBE 0.60mm +version = 4 +definition = deltacomb_dc20flux + +[metadata] +setting_version = 11 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.60 diff --git a/resources/variants/deltacomb/deltacomb_dc21_fbe025.inst.cfg b/resources/variants/deltacomb/deltacomb_dc21_fbe025.inst.cfg new file mode 100755 index 0000000000..802cddb16e --- /dev/null +++ b/resources/variants/deltacomb/deltacomb_dc21_fbe025.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = FBE 0.25mm +version = 4 +definition = deltacomb_dc21 + +[metadata] +setting_version = 11 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.25 \ No newline at end of file diff --git a/resources/variants/deltacomb/deltacomb_dc21_fbe040.inst.cfg b/resources/variants/deltacomb/deltacomb_dc21_fbe040.inst.cfg new file mode 100755 index 0000000000..8ffcac0444 --- /dev/null +++ b/resources/variants/deltacomb/deltacomb_dc21_fbe040.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = FBE 0.40mm +version = 4 +definition = deltacomb_dc21 + +[metadata] +setting_version = 11 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.40 diff --git a/resources/variants/deltacomb/deltacomb_dc21_fbe060.inst.cfg b/resources/variants/deltacomb/deltacomb_dc21_fbe060.inst.cfg new file mode 100755 index 0000000000..58973f0fbd --- /dev/null +++ b/resources/variants/deltacomb/deltacomb_dc21_fbe060.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = FBE 0.60mm +version = 4 +definition = deltacomb_dc21 + +[metadata] +setting_version = 11 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.60 diff --git a/resources/variants/deltacomb/deltacomb_dc21_vfbe080.inst.cfg b/resources/variants/deltacomb/deltacomb_dc21_vfbe080.inst.cfg new file mode 100755 index 0000000000..63d8760ac3 --- /dev/null +++ b/resources/variants/deltacomb/deltacomb_dc21_vfbe080.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = V-FBE 0.80mm +version = 4 +definition = deltacomb_dc21 + +[metadata] +setting_version = 11 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.80 diff --git a/resources/variants/deltacomb/deltacomb_dc21dual_dbe025.inst.cfg b/resources/variants/deltacomb/deltacomb_dc21dual_dbe025.inst.cfg new file mode 100755 index 0000000000..fb9376641a --- /dev/null +++ b/resources/variants/deltacomb/deltacomb_dc21dual_dbe025.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = DBE 0.25mm +version = 4 +definition = deltacomb_dc21dual + +[metadata] +setting_version = 11 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.25 \ No newline at end of file diff --git a/resources/variants/deltacomb/deltacomb_dc21dual_dbe040.inst.cfg b/resources/variants/deltacomb/deltacomb_dc21dual_dbe040.inst.cfg new file mode 100755 index 0000000000..d01bf0cf05 --- /dev/null +++ b/resources/variants/deltacomb/deltacomb_dc21dual_dbe040.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = DBE 0.40mm +version = 4 +definition = deltacomb_dc21dual + +[metadata] +setting_version = 11 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.40 diff --git a/resources/variants/deltacomb/deltacomb_dc21dual_dbe060.inst.cfg b/resources/variants/deltacomb/deltacomb_dc21dual_dbe060.inst.cfg new file mode 100755 index 0000000000..a60446b6fb --- /dev/null +++ b/resources/variants/deltacomb/deltacomb_dc21dual_dbe060.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = DBE 0.60mm +version = 4 +definition = deltacomb_dc21dual + +[metadata] +setting_version = 11 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.60 diff --git a/resources/variants/deltacomb/deltacomb_dc21dual_vdbe080.inst.cfg b/resources/variants/deltacomb/deltacomb_dc21dual_vdbe080.inst.cfg new file mode 100755 index 0000000000..083ede8845 --- /dev/null +++ b/resources/variants/deltacomb/deltacomb_dc21dual_vdbe080.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = V-DBE 0.80mm +version = 4 +definition = deltacomb_dc21dual + +[metadata] +setting_version = 11 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.80 diff --git a/resources/variants/deltacomb/deltacomb_dc21flux_fbe025.inst.cfg b/resources/variants/deltacomb/deltacomb_dc21flux_fbe025.inst.cfg new file mode 100755 index 0000000000..5195fd5555 --- /dev/null +++ b/resources/variants/deltacomb/deltacomb_dc21flux_fbe025.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = FBE 0.25mm +version = 4 +definition = deltacomb_dc21flux + +[metadata] +setting_version = 11 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.25 \ No newline at end of file diff --git a/resources/variants/deltacomb/deltacomb_dc21flux_fbe040.inst.cfg b/resources/variants/deltacomb/deltacomb_dc21flux_fbe040.inst.cfg new file mode 100755 index 0000000000..15f23cc20f --- /dev/null +++ b/resources/variants/deltacomb/deltacomb_dc21flux_fbe040.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = FBE 0.40mm +version = 4 +definition = deltacomb_dc21flux + +[metadata] +setting_version = 11 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.40 diff --git a/resources/variants/deltacomb/deltacomb_dc21flux_fbe060.inst.cfg b/resources/variants/deltacomb/deltacomb_dc21flux_fbe060.inst.cfg new file mode 100755 index 0000000000..90a04e58ac --- /dev/null +++ b/resources/variants/deltacomb/deltacomb_dc21flux_fbe060.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = FBE 0.60mm +version = 4 +definition = deltacomb_dc21flux + +[metadata] +setting_version = 11 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.60 diff --git a/resources/variants/deltacomb/deltacomb_dc30_fbe025.inst.cfg b/resources/variants/deltacomb/deltacomb_dc30_fbe025.inst.cfg new file mode 100755 index 0000000000..c3efcc3358 --- /dev/null +++ b/resources/variants/deltacomb/deltacomb_dc30_fbe025.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = FBE 0.25mm +version = 4 +definition = deltacomb_dc30 + +[metadata] +setting_version = 11 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.25 \ No newline at end of file diff --git a/resources/variants/deltacomb/deltacomb_dc30_fbe040.inst.cfg b/resources/variants/deltacomb/deltacomb_dc30_fbe040.inst.cfg new file mode 100755 index 0000000000..f9e7d52ca0 --- /dev/null +++ b/resources/variants/deltacomb/deltacomb_dc30_fbe040.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = FBE 0.40mm +version = 4 +definition = deltacomb_dc30 + +[metadata] +setting_version = 11 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.40 diff --git a/resources/variants/deltacomb/deltacomb_dc30_fbe060.inst.cfg b/resources/variants/deltacomb/deltacomb_dc30_fbe060.inst.cfg new file mode 100755 index 0000000000..74426f7c8c --- /dev/null +++ b/resources/variants/deltacomb/deltacomb_dc30_fbe060.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = FBE 0.60mm +version = 4 +definition = deltacomb_dc30 + +[metadata] +setting_version = 11 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.60 diff --git a/resources/variants/deltacomb/deltacomb_dc30_vfbe080.inst.cfg b/resources/variants/deltacomb/deltacomb_dc30_vfbe080.inst.cfg new file mode 100755 index 0000000000..4e67934b8b --- /dev/null +++ b/resources/variants/deltacomb/deltacomb_dc30_vfbe080.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = V-FBE 0.80mm +version = 4 +definition = deltacomb_dc30 + +[metadata] +setting_version = 11 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.80 diff --git a/resources/variants/deltacomb/deltacomb_dc30dual_dbe025.inst.cfg b/resources/variants/deltacomb/deltacomb_dc30dual_dbe025.inst.cfg new file mode 100755 index 0000000000..34e1657535 --- /dev/null +++ b/resources/variants/deltacomb/deltacomb_dc30dual_dbe025.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = DBE 0.25mm +version = 4 +definition = deltacomb_dc30dual + +[metadata] +setting_version = 11 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.25 \ No newline at end of file diff --git a/resources/variants/deltacomb/deltacomb_dc30dual_dbe040.inst.cfg b/resources/variants/deltacomb/deltacomb_dc30dual_dbe040.inst.cfg new file mode 100755 index 0000000000..6652decd42 --- /dev/null +++ b/resources/variants/deltacomb/deltacomb_dc30dual_dbe040.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = DBE 0.40mm +version = 4 +definition = deltacomb_dc30dual + +[metadata] +setting_version = 11 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.40 diff --git a/resources/variants/deltacomb/deltacomb_dc30dual_dbe060.inst.cfg b/resources/variants/deltacomb/deltacomb_dc30dual_dbe060.inst.cfg new file mode 100755 index 0000000000..52adc09b3f --- /dev/null +++ b/resources/variants/deltacomb/deltacomb_dc30dual_dbe060.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = DBE 0.60mm +version = 4 +definition = deltacomb_dc30dual + +[metadata] +setting_version = 11 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.60 diff --git a/resources/variants/deltacomb/deltacomb_dc30dual_vdbe080.inst.cfg b/resources/variants/deltacomb/deltacomb_dc30dual_vdbe080.inst.cfg new file mode 100755 index 0000000000..e867aba5e9 --- /dev/null +++ b/resources/variants/deltacomb/deltacomb_dc30dual_vdbe080.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = V-DBE 0.80mm +version = 4 +definition = deltacomb_dc30dual + +[metadata] +setting_version = 11 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.80 diff --git a/resources/variants/deltacomb/deltacomb_dc30flux_fbe025.inst.cfg b/resources/variants/deltacomb/deltacomb_dc30flux_fbe025.inst.cfg new file mode 100755 index 0000000000..b86762ddb2 --- /dev/null +++ b/resources/variants/deltacomb/deltacomb_dc30flux_fbe025.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = FBE 0.25mm +version = 4 +definition = deltacomb_dc30flux + +[metadata] +setting_version = 11 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.25 \ No newline at end of file diff --git a/resources/variants/deltacomb/deltacomb_dc30flux_fbe040.inst.cfg b/resources/variants/deltacomb/deltacomb_dc30flux_fbe040.inst.cfg new file mode 100755 index 0000000000..4242b45a12 --- /dev/null +++ b/resources/variants/deltacomb/deltacomb_dc30flux_fbe040.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = FBE 0.40mm +version = 4 +definition = deltacomb_dc30flux + +[metadata] +setting_version = 11 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.40 diff --git a/resources/variants/deltacomb/deltacomb_dc30flux_fbe060.inst.cfg b/resources/variants/deltacomb/deltacomb_dc30flux_fbe060.inst.cfg new file mode 100755 index 0000000000..6efb0f163b --- /dev/null +++ b/resources/variants/deltacomb/deltacomb_dc30flux_fbe060.inst.cfg @@ -0,0 +1,12 @@ +[general] +name = FBE 0.60mm +version = 4 +definition = deltacomb_dc30flux + +[metadata] +setting_version = 11 +type = variant +hardware_type = nozzle + +[values] +machine_nozzle_size = 0.60 From 9012dd7c52003bf836f82bebfbbaacfd25cfe544 Mon Sep 17 00:00:00 2001 From: Deltacomb Date: Thu, 26 Mar 2020 00:53:09 +0100 Subject: [PATCH 008/116] Fixed IDs in extruders --- resources/extruders/deltacomb_base_extruder_0.def.json | 1 - resources/extruders/deltacomb_base_extruder_1.def.json | 1 - resources/extruders/deltacomb_base_extruder_2.def.json | 1 - resources/extruders/deltacomb_base_extruder_3.def.json | 1 - resources/extruders/deltacomb_dc20dual_extruder_0.def.json | 1 - resources/extruders/deltacomb_dc20dual_extruder_1.def.json | 1 - resources/extruders/deltacomb_dc20flux_extruder_0.def.json | 1 - resources/extruders/deltacomb_dc20flux_extruder_1.def.json | 1 - resources/extruders/deltacomb_dc20flux_extruder_2.def.json | 1 - resources/extruders/deltacomb_dc20flux_extruder_3.def.json | 1 - 10 files changed, 10 deletions(-) diff --git a/resources/extruders/deltacomb_base_extruder_0.def.json b/resources/extruders/deltacomb_base_extruder_0.def.json index 54066fb86b..d3ad8aa06c 100755 --- a/resources/extruders/deltacomb_base_extruder_0.def.json +++ b/resources/extruders/deltacomb_base_extruder_0.def.json @@ -1,5 +1,4 @@ { - "id": "deltacomb_base_extruder_0", "version": 2, "name": "Extruder 1", "inherits": "fdmextruder", diff --git a/resources/extruders/deltacomb_base_extruder_1.def.json b/resources/extruders/deltacomb_base_extruder_1.def.json index 4353f47c49..2f2de6c747 100755 --- a/resources/extruders/deltacomb_base_extruder_1.def.json +++ b/resources/extruders/deltacomb_base_extruder_1.def.json @@ -1,5 +1,4 @@ { - "id": "deltacomb_base_extruder_1", "version": 2, "name": "Extruder 2", "inherits": "fdmextruder", diff --git a/resources/extruders/deltacomb_base_extruder_2.def.json b/resources/extruders/deltacomb_base_extruder_2.def.json index a656d8d30e..f4a898f0c7 100755 --- a/resources/extruders/deltacomb_base_extruder_2.def.json +++ b/resources/extruders/deltacomb_base_extruder_2.def.json @@ -1,5 +1,4 @@ { - "id": "deltacomb_base_extruder_2", "version": 2, "name": "Extruder 3", "inherits": "fdmextruder", diff --git a/resources/extruders/deltacomb_base_extruder_3.def.json b/resources/extruders/deltacomb_base_extruder_3.def.json index 94537eda6d..2d01c8e5aa 100755 --- a/resources/extruders/deltacomb_base_extruder_3.def.json +++ b/resources/extruders/deltacomb_base_extruder_3.def.json @@ -1,5 +1,4 @@ { - "id": "deltacomb_base_extruder_3", "version": 2, "name": "Extruder 4", "inherits": "fdmextruder", diff --git a/resources/extruders/deltacomb_dc20dual_extruder_0.def.json b/resources/extruders/deltacomb_dc20dual_extruder_0.def.json index 32c0e942b6..12297948c8 100755 --- a/resources/extruders/deltacomb_dc20dual_extruder_0.def.json +++ b/resources/extruders/deltacomb_dc20dual_extruder_0.def.json @@ -1,5 +1,4 @@ { - "id": "deltacomb_dc20dual_extruder_0", "version": 2, "name": "Extruder 1", "inherits": "fdmextruder", diff --git a/resources/extruders/deltacomb_dc20dual_extruder_1.def.json b/resources/extruders/deltacomb_dc20dual_extruder_1.def.json index 84655cf150..4cfe34c3dd 100755 --- a/resources/extruders/deltacomb_dc20dual_extruder_1.def.json +++ b/resources/extruders/deltacomb_dc20dual_extruder_1.def.json @@ -1,5 +1,4 @@ { - "id": "deltacomb_dc20dual_extruder_0", "version": 2, "name": "Extruder 2", "inherits": "fdmextruder", diff --git a/resources/extruders/deltacomb_dc20flux_extruder_0.def.json b/resources/extruders/deltacomb_dc20flux_extruder_0.def.json index 111bcdd638..f6ab98c927 100755 --- a/resources/extruders/deltacomb_dc20flux_extruder_0.def.json +++ b/resources/extruders/deltacomb_dc20flux_extruder_0.def.json @@ -1,5 +1,4 @@ { - "id": "deltacomb_dc20flux_extruder_0", "version": 2, "name": "Extruder 1", "inherits": "fdmextruder", diff --git a/resources/extruders/deltacomb_dc20flux_extruder_1.def.json b/resources/extruders/deltacomb_dc20flux_extruder_1.def.json index 9ec50bfc87..2cb06ff089 100755 --- a/resources/extruders/deltacomb_dc20flux_extruder_1.def.json +++ b/resources/extruders/deltacomb_dc20flux_extruder_1.def.json @@ -1,5 +1,4 @@ { - "id": "deltacomb_dc20flux_extruder_0", "version": 2, "name": "Extruder 2", "inherits": "fdmextruder", diff --git a/resources/extruders/deltacomb_dc20flux_extruder_2.def.json b/resources/extruders/deltacomb_dc20flux_extruder_2.def.json index 35247483ef..0c7474b80e 100755 --- a/resources/extruders/deltacomb_dc20flux_extruder_2.def.json +++ b/resources/extruders/deltacomb_dc20flux_extruder_2.def.json @@ -1,5 +1,4 @@ { - "id": "deltacomb_dc20flux_extruder_0", "version": 2, "name": "Extruder 3", "inherits": "fdmextruder", diff --git a/resources/extruders/deltacomb_dc20flux_extruder_3.def.json b/resources/extruders/deltacomb_dc20flux_extruder_3.def.json index 6da81d2f1d..c18d11a3b4 100755 --- a/resources/extruders/deltacomb_dc20flux_extruder_3.def.json +++ b/resources/extruders/deltacomb_dc20flux_extruder_3.def.json @@ -1,5 +1,4 @@ { - "id": "deltacomb_dc20flux_extruder_0", "version": 2, "name": "Extruder 4", "inherits": "fdmextruder", From f81889a3bcb0009017d34271fa341103cd5bc496 Mon Sep 17 00:00:00 2001 From: Deltacomb Date: Thu, 26 Mar 2020 10:04:33 +0100 Subject: [PATCH 009/116] New Machines Fixes (2) --- resources/definitions/deltacomb_base.def.json | 17 +++++++---- resources/definitions/deltacomb_dc20.def.json | 8 +---- .../definitions/deltacomb_dc20flux.def.json | 3 +- resources/definitions/deltacomb_dc21.def.json | 8 +---- .../definitions/deltacomb_dc21flux.def.json | 6 ++-- ....def.json => deltacomb_dc30.def copy.json} | 8 +---- .../definitions/deltacomb_dc30dual.def.json | 24 +++++++++++++++ .../definitions/deltacomb_dc30flux.def.json | 29 +++++++++++++++++++ .../deltacomb_dc20dual_extruder_0.def.json | 2 +- .../deltacomb_dc20dual_extruder_1.def.json | 4 +-- .../deltacomb_dc20flux_extruder_0.def.json | 2 +- .../deltacomb_dc20flux_extruder_1.def.json | 2 +- .../deltacomb_dc20flux_extruder_2.def.json | 2 +- .../deltacomb_dc20flux_extruder_3.def.json | 2 +- .../deltacomb_dc30dual_extruder_0.def.json | 19 ++++++++++++ .../deltacomb_dc30dual_extruder_1.def.json | 19 ++++++++++++ .../deltacomb_dc30flux_extruder_0.def.json | 19 ++++++++++++ .../deltacomb_dc30flux_extruder_1.def.json | 20 +++++++++++++ .../deltacomb_dc30flux_extruder_2.def.json | 20 +++++++++++++ .../deltacomb_dc30flux_extruder_4.def.json | 20 +++++++++++++ resources/variants/deltacomb_025_e3d.inst.cfg | 13 --------- resources/variants/deltacomb_040_e3d.inst.cfg | 13 --------- resources/variants/deltacomb_080_e3d.inst.cfg | 13 --------- 23 files changed, 196 insertions(+), 77 deletions(-) rename resources/definitions/{deltacomb_dc30.def.json => deltacomb_dc30.def copy.json} (70%) create mode 100755 resources/definitions/deltacomb_dc30dual.def.json create mode 100644 resources/definitions/deltacomb_dc30flux.def.json create mode 100755 resources/extruders/deltacomb_dc30dual_extruder_0.def.json create mode 100755 resources/extruders/deltacomb_dc30dual_extruder_1.def.json create mode 100755 resources/extruders/deltacomb_dc30flux_extruder_0.def.json create mode 100755 resources/extruders/deltacomb_dc30flux_extruder_1.def.json create mode 100755 resources/extruders/deltacomb_dc30flux_extruder_2.def.json create mode 100755 resources/extruders/deltacomb_dc30flux_extruder_4.def.json delete mode 100644 resources/variants/deltacomb_025_e3d.inst.cfg delete mode 100644 resources/variants/deltacomb_040_e3d.inst.cfg delete mode 100644 resources/variants/deltacomb_080_e3d.inst.cfg diff --git a/resources/definitions/deltacomb_base.def.json b/resources/definitions/deltacomb_base.def.json index 4d1466a8fa..076a7f35f3 100755 --- a/resources/definitions/deltacomb_base.def.json +++ b/resources/definitions/deltacomb_base.def.json @@ -15,7 +15,14 @@ "variants_name": "Head", "preferred_quality_type": "fast", - "preferred_material": "generic_pla" + "preferred_material": "generic_pla", + + "machine_extruder_trains": { + "0": "deltacomb_base_extruder_0", + "1": "deltacomb_base_extruder_1", + "2": "deltacomb_base_extruder_2", + "3": "deltacomb_base_extruder_3" + } }, "overrides": { @@ -62,12 +69,12 @@ "travel_avoid_distance": { "default_value": 1, "value": "1" }, "top_bottom_thickness": { "default_value": 0.8 }, - "roofing_layer_count": { "default_value": 1, "value": "1" }, + "roofing_layer_count": { "value": "1" }, "roofing_line_width": { "value": "line_width * 0.75" }, "infill_sparse_density": { "default_value": 30 }, "infill_pattern": { "value": "'cubic'" }, - "infill_before_walls" : { "default_value": false }, + "infill_before_walls": { "default_value": false }, "support_z_distance": { "value": "layer_height * 2" }, "support_bottom_distance": { "value": "layer_height" }, @@ -81,8 +88,6 @@ "prime_tower_size": { "value": "math.sqrt(extruders_enabled_count * prime_tower_min_volume / layer_height / math.pi) * 2"}, "prime_tower_position_x": { "value": "prime_tower_size - max(extruderValue(adhesion_extruder_nr, 'brim_width') * extruderValue(adhesion_extruder_nr, 'initial_layer_line_width_factor') / 100 if adhesion_type == 'brim' or (prime_tower_brim_enable and adhesion_type != 'raft') else (extruderValue(adhesion_extruder_nr, 'raft_margin') if adhesion_type == 'raft' else (extruderValue(adhesion_extruder_nr, 'skirt_gap') if adhesion_type == 'skirt' else 0)), max(extruderValues('travel_avoid_distance'))) - max(extruderValues('support_offset')) - sum(extruderValues('skirt_brim_line_width')) * extruderValue(adhesion_extruder_nr, 'initial_layer_line_width_factor') / 100 - (resolveOrValue('draft_shield_dist') if resolveOrValue('draft_shield_enabled') else 0)" }, - "prime_tower_position_y": { "value": "machine_depth / 2 - prime_tower_size - max(extruderValue(adhesion_extruder_nr, 'brim_width') * extruderValue(adhesion_extruder_nr, 'initial_layer_line_width_factor') / 100 if adhesion_type == 'brim' or (prime_tower_brim_enable and adhesion_type != 'raft') else (extruderValue(adhesion_extruder_nr, 'raft_margin') if adhesion_type == 'raft' else (extruderValue(adhesion_extruder_nr, 'skirt_gap') if adhesion_type == 'skirt' else 0)), max(extruderValues('travel_avoid_distance'))) - max(extruderValues('support_offset')) - sum(extruderValues('skirt_brim_line_width')) * extruderValue(adhesion_extruder_nr, 'initial_layer_line_width_factor') / 100 - (resolveOrValue('draft_shield_dist') if resolveOrValue('draft_shield_enabled') else 0) - 1" }, - - "infill_before_walls": { "value": "1 if resolveOrValue('prime_tower_enable') else 0"} + "prime_tower_position_y": { "value": "machine_depth / 2 - prime_tower_size - max(extruderValue(adhesion_extruder_nr, 'brim_width') * extruderValue(adhesion_extruder_nr, 'initial_layer_line_width_factor') / 100 if adhesion_type == 'brim' or (prime_tower_brim_enable and adhesion_type != 'raft') else (extruderValue(adhesion_extruder_nr, 'raft_margin') if adhesion_type == 'raft' else (extruderValue(adhesion_extruder_nr, 'skirt_gap') if adhesion_type == 'skirt' else 0)), max(extruderValues('travel_avoid_distance'))) - max(extruderValues('support_offset')) - sum(extruderValues('skirt_brim_line_width')) * extruderValue(adhesion_extruder_nr, 'initial_layer_line_width_factor') / 100 - (resolveOrValue('draft_shield_dist') if resolveOrValue('draft_shield_enabled') else 0) - 1" } } } diff --git a/resources/definitions/deltacomb_dc20.def.json b/resources/definitions/deltacomb_dc20.def.json index d9910992e6..5bb3e220d2 100755 --- a/resources/definitions/deltacomb_dc20.def.json +++ b/resources/definitions/deltacomb_dc20.def.json @@ -7,13 +7,7 @@ "visible": true, "platform": "deltacomb_dc20.stl", "quality_definition": "deltacomb_base", - "preferred_variant_name": "FBE 0.40mm", - "machine_extruder_trains": { - "0": "deltacomb_base_extruder_0", - "1": "deltacomb_base_extruder_1", - "2": "deltacomb_base_extruder_2", - "3": "deltacomb_base_extruder_3" - } + "preferred_variant_name": "FBE 0.40mm" }, "overrides": { diff --git a/resources/definitions/deltacomb_dc20flux.def.json b/resources/definitions/deltacomb_dc20flux.def.json index 00553ae106..32af55d1d0 100644 --- a/resources/definitions/deltacomb_dc20flux.def.json +++ b/resources/definitions/deltacomb_dc20flux.def.json @@ -23,6 +23,7 @@ "machine_height": { "default_value": 250 }, "machine_extruder_count": { "default_value": 2, "maximum_value": "4" }, "switch_extruder_retraction_amount": { "value": "0" }, - "prime_tower_min_volume": { "value": "45" } + "prime_tower_min_volume": { "value": "45" }, + "prime_tower_enable": { "value": "1" } } } diff --git a/resources/definitions/deltacomb_dc21.def.json b/resources/definitions/deltacomb_dc21.def.json index 0fb514d321..32efb2170a 100755 --- a/resources/definitions/deltacomb_dc21.def.json +++ b/resources/definitions/deltacomb_dc21.def.json @@ -7,13 +7,7 @@ "visible": true, "platform": "deltacomb_dc20.stl", "quality_definition": "deltacomb_base", - "preferred_variant_name": "FBE 0.40mm", - "machine_extruder_trains": { - "0": "deltacomb_base_extruder_0", - "1": "deltacomb_base_extruder_1", - "2": "deltacomb_base_extruder_2", - "3": "deltacomb_base_extruder_3" - } + "preferred_variant_name": "FBE 0.40mm" }, "overrides": { diff --git a/resources/definitions/deltacomb_dc21flux.def.json b/resources/definitions/deltacomb_dc21flux.def.json index 79e07a2b64..5744714f25 100644 --- a/resources/definitions/deltacomb_dc21flux.def.json +++ b/resources/definitions/deltacomb_dc21flux.def.json @@ -22,8 +22,8 @@ "machine_depth": { "default_value": 190 }, "machine_height": { "default_value": 400 }, "machine_extruder_count": { "default_value": 2, "maximum_value": "4" }, - "switch_extruder_retraction_amount" : { "default_value": 0 }, - "prime_tower_size": { "value": "30"}, - "prime_tower_min_volume": { "value": "45" } + "switch_extruder_retraction_amount": { "value": "0" }, + "prime_tower_min_volume": { "value": "45" }, + "prime_tower_enable": { "value": "1" } } } diff --git a/resources/definitions/deltacomb_dc30.def.json b/resources/definitions/deltacomb_dc30.def copy.json similarity index 70% rename from resources/definitions/deltacomb_dc30.def.json rename to resources/definitions/deltacomb_dc30.def copy.json index 20e7939347..485fb5cc45 100755 --- a/resources/definitions/deltacomb_dc30.def.json +++ b/resources/definitions/deltacomb_dc30.def copy.json @@ -7,13 +7,7 @@ "visible": true, "platform": "deltacomb_dc30.stl", "quality_definition": "deltacomb_base", - "preferred_variant_name": "FBE 0.40mm", - "machine_extruder_trains": { - "0": "deltacomb_base_extruder_0", - "1": "deltacomb_base_extruder_1", - "2": "deltacomb_base_extruder_2", - "3": "deltacomb_base_extruder_3" - } + "preferred_variant_name": "FBE 0.40mm" }, "overrides": { diff --git a/resources/definitions/deltacomb_dc30dual.def.json b/resources/definitions/deltacomb_dc30dual.def.json new file mode 100755 index 0000000000..4ac2c185b7 --- /dev/null +++ b/resources/definitions/deltacomb_dc30dual.def.json @@ -0,0 +1,24 @@ +{ + "version": 2, + "name": "Deltacomb DC-30 DUAL", + "inherits": "deltacomb_base", + + "metadata": { + "visible": true, + "platform": "deltacomb_dc30.stl", + "quality_definition": "deltacomb_base", + "preferred_variant_name": "DBE 0.40mm", + "machine_extruder_trains": { + "0": "deltacomb_dc30dual_extruder_0", + "1": "deltacomb_dc30dual_extruder_1" + } + }, + + "overrides": { + "machine_name": { "default_value": "Deltacomb DC-30 DUAL" }, + "machine_width": { "default_value": 290 }, + "machine_depth": { "default_value": 290 }, + "machine_height": { "default_value": 300 }, + "machine_extruder_count": { "default_value": 2, "maximum_value": "2" } + } +} diff --git a/resources/definitions/deltacomb_dc30flux.def.json b/resources/definitions/deltacomb_dc30flux.def.json new file mode 100644 index 0000000000..6af68547e4 --- /dev/null +++ b/resources/definitions/deltacomb_dc30flux.def.json @@ -0,0 +1,29 @@ +{ + "version": 2, + "name": "Deltacomb DC-30 FLUX", + "inherits": "deltacomb_base", + + "metadata": { + "visible": true, + "platform": "deltacomb_dc30.stl", + "quality_definition": "deltacomb_base", + "preferred_variant_name": "FBE 0.40mm", + "machine_extruder_trains": { + "0": "deltacomb_dc30flux_extruder_0", + "1": "deltacomb_dc30flux_extruder_1", + "2": "deltacomb_dc30flux_extruder_2", + "3": "deltacomb_dc30flux_extruder_3" + } + }, + + "overrides": { + "machine_name": { "default_value": "Deltacomb DC-30 FLUX" }, + "machine_width": { "default_value": 290 }, + "machine_depth": { "default_value": 290 }, + "machine_height": { "default_value": 300 }, + "machine_extruder_count": { "default_value": 2, "maximum_value": "4" }, + "switch_extruder_retraction_amount": { "value": "0" }, + "prime_tower_min_volume": { "value": "45" }, + "prime_tower_enable": { "value": "1" } + } +} diff --git a/resources/extruders/deltacomb_dc20dual_extruder_0.def.json b/resources/extruders/deltacomb_dc20dual_extruder_0.def.json index 12297948c8..510f8a3562 100755 --- a/resources/extruders/deltacomb_dc20dual_extruder_0.def.json +++ b/resources/extruders/deltacomb_dc20dual_extruder_0.def.json @@ -8,7 +8,7 @@ }, "overrides": { - "extruder_nr": { "default_value": 0, "maximum_value": "1" }, + "extruder_nr": { "default_value": 0 }, "machine_nozzle_size": { "default_value": 0.4 }, "material_diameter": { "default_value": 1.75 }, "machine_nozzle_offset_x": { "default_value": 0.0 }, diff --git a/resources/extruders/deltacomb_dc20dual_extruder_1.def.json b/resources/extruders/deltacomb_dc20dual_extruder_1.def.json index 4cfe34c3dd..1421a7d3db 100755 --- a/resources/extruders/deltacomb_dc20dual_extruder_1.def.json +++ b/resources/extruders/deltacomb_dc20dual_extruder_1.def.json @@ -4,11 +4,11 @@ "inherits": "fdmextruder", "metadata": { "machine": "deltacomb_dc20dual", - "position": "2" + "position": "1" }, "overrides": { - "extruder_nr": { "default_value": 0, "maximum_value": "1" }, + "extruder_nr": { "default_value": 1 }, "machine_nozzle_size": { "default_value": 0.4 }, "material_diameter": { "default_value": 1.75 }, "machine_nozzle_offset_x": { "default_value": 19 }, diff --git a/resources/extruders/deltacomb_dc20flux_extruder_0.def.json b/resources/extruders/deltacomb_dc20flux_extruder_0.def.json index f6ab98c927..96617a9465 100755 --- a/resources/extruders/deltacomb_dc20flux_extruder_0.def.json +++ b/resources/extruders/deltacomb_dc20flux_extruder_0.def.json @@ -9,7 +9,7 @@ "overrides": { - "extruder_nr": { "default_value": 0, "maximum_value": "3" }, + "extruder_nr": { "default_value": 0 }, "machine_nozzle_size": { "default_value": 0.4 }, "material_diameter": { "default_value": 1.75 }, "machine_nozzle_offset_x": { "default_value": 0.0 }, diff --git a/resources/extruders/deltacomb_dc20flux_extruder_1.def.json b/resources/extruders/deltacomb_dc20flux_extruder_1.def.json index 2cb06ff089..309f857fe0 100755 --- a/resources/extruders/deltacomb_dc20flux_extruder_1.def.json +++ b/resources/extruders/deltacomb_dc20flux_extruder_1.def.json @@ -9,7 +9,7 @@ "overrides": { - "extruder_nr": { "default_value": 1, "maximum_value": "3" }, + "extruder_nr": { "default_value": 1 }, "machine_nozzle_size": { "default_value": 0.4 }, "material_diameter": { "default_value": 1.75 }, "machine_nozzle_offset_x": { "default_value": 0.0 }, diff --git a/resources/extruders/deltacomb_dc20flux_extruder_2.def.json b/resources/extruders/deltacomb_dc20flux_extruder_2.def.json index 0c7474b80e..1283e3dbf5 100755 --- a/resources/extruders/deltacomb_dc20flux_extruder_2.def.json +++ b/resources/extruders/deltacomb_dc20flux_extruder_2.def.json @@ -9,7 +9,7 @@ "overrides": { - "extruder_nr": { "default_value": 2, "maximum_value": "3" }, + "extruder_nr": { "default_value": 2 }, "machine_nozzle_size": { "default_value": 0.4 }, "material_diameter": { "default_value": 1.75 }, "machine_nozzle_offset_x": { "default_value": 0.0 }, diff --git a/resources/extruders/deltacomb_dc20flux_extruder_3.def.json b/resources/extruders/deltacomb_dc20flux_extruder_3.def.json index c18d11a3b4..1965f615f6 100755 --- a/resources/extruders/deltacomb_dc20flux_extruder_3.def.json +++ b/resources/extruders/deltacomb_dc20flux_extruder_3.def.json @@ -9,7 +9,7 @@ "overrides": { - "extruder_nr": { "default_value": 3, "maximum_value": "3" }, + "extruder_nr": { "default_value": 3 }, "machine_nozzle_size": { "default_value": 0.4 }, "material_diameter": { "default_value": 1.75 }, "machine_nozzle_offset_x": { "default_value": 0.0 }, diff --git a/resources/extruders/deltacomb_dc30dual_extruder_0.def.json b/resources/extruders/deltacomb_dc30dual_extruder_0.def.json new file mode 100755 index 0000000000..d404e488bc --- /dev/null +++ b/resources/extruders/deltacomb_dc30dual_extruder_0.def.json @@ -0,0 +1,19 @@ +{ + "version": 2, + "name": "Extruder 1", + "inherits": "fdmextruder", + "metadata": { + "machine": "deltacomb_dc30dual", + "position": "0" + }, + + "overrides": { + "extruder_nr": { "default_value": 0 }, + "machine_nozzle_size": { "default_value": 0.4 }, + "material_diameter": { "default_value": 1.75 }, + "machine_nozzle_offset_x": { "default_value": 0.0 }, + "machine_nozzle_offset_y": { "default_value": 0.0 }, + "machine_extruder_start_code": { "default_value": ";DC30 Dual Extruder 1\n;Put your custom code here"}, + "machine_extruder_end_code": { "default_value": ";DC30 Dual Extruder 1\n;Put your custom code here"} + } +} diff --git a/resources/extruders/deltacomb_dc30dual_extruder_1.def.json b/resources/extruders/deltacomb_dc30dual_extruder_1.def.json new file mode 100755 index 0000000000..c1ce8dec33 --- /dev/null +++ b/resources/extruders/deltacomb_dc30dual_extruder_1.def.json @@ -0,0 +1,19 @@ +{ + "version": 2, + "name": "Extruder 2", + "inherits": "fdmextruder", + "metadata": { + "machine": "deltacomb_dc30dual", + "position": "1" + }, + + "overrides": { + "extruder_nr": { "default_value": 1 }, + "machine_nozzle_size": { "default_value": 0.4 }, + "material_diameter": { "default_value": 1.75 }, + "machine_nozzle_offset_x": { "default_value": 19 }, + "machine_nozzle_offset_y": { "default_value": 0 }, + "machine_extruder_start_code": { "default_value": ";DC30 Dual Extruder 2\n;Put your custom code here"}, + "machine_extruder_end_code": { "default_value": ";DC30 Dual Extruder 2\n;Put your custom code here"} + } +} diff --git a/resources/extruders/deltacomb_dc30flux_extruder_0.def.json b/resources/extruders/deltacomb_dc30flux_extruder_0.def.json new file mode 100755 index 0000000000..1f401c3657 --- /dev/null +++ b/resources/extruders/deltacomb_dc30flux_extruder_0.def.json @@ -0,0 +1,19 @@ +{ + "version": 2, + "name": "Extruder 1", + "inherits": "fdmextruder", + "metadata": { + "machine": "deltacomb_dc30flux", + "position": "0" + }, + + "overrides": { + "extruder_nr": { "default_value": 0 }, + "machine_nozzle_size": { "default_value": 0.4 }, + "material_diameter": { "default_value": 1.75 }, + "machine_nozzle_offset_x": { "default_value": 0.0 }, + "machine_nozzle_offset_y": { "default_value": 0.0 }, + "machine_extruder_start_code": { "default_value": ";---------------------------------------\n;DC30 Flux Extruder 1 Start\n;---------------------------------------\nG92 E0 ;zero the extruded length\nG91 ;use relative coordinates\nG1 E68 F10000 ; fast insert\nG92 E0 ;zero the extruded length\nG90 ;absolute positioning\n;---------------------------------------\n;---------------------------------------"}, + "machine_extruder_end_code": { "default_value": ";---------------------------------------\n;DC30 Flux Extruder 1 End\n;---------------------------------------\nG91 ;use relative coordinates\nG0 E-15 F10000\nG1 Z2 ;lift head\nG4 P3000\nG0 E14.7 F10000\nG1 E-69.7 F10000\nG90 ;absolute positioning\nG92 E0 ;zero the extruded length\n;---------------------------------------\n;---------------------------------------"} + } +} diff --git a/resources/extruders/deltacomb_dc30flux_extruder_1.def.json b/resources/extruders/deltacomb_dc30flux_extruder_1.def.json new file mode 100755 index 0000000000..909d87feeb --- /dev/null +++ b/resources/extruders/deltacomb_dc30flux_extruder_1.def.json @@ -0,0 +1,20 @@ +{ + "version": 2, + "name": "Extruder 2", + "inherits": "fdmextruder", + "metadata": { + "machine": "deltacomb_dc30flux", + "position": "1" + }, + + "overrides": { + "extruder_nr": { "default_value": 1 }, + "machine_nozzle_size": { "default_value": 0.4 }, + "material_diameter": { "default_value": 1.75 }, + "machine_nozzle_offset_x": { "default_value": 0.0 }, + "machine_nozzle_offset_y": { "default_value": 0.0 }, + "machine_extruder_start_code": { "default_value": ";---------------------------------------\n;DC30 Flux Extruder 2 Start\n;---------------------------------------\nG92 E0 ;zero the extruded length\nG91 ;use relative coordinates\nG1 E68 F10000 ; fast insert\nG92 E0 ;zero the extruded length\nG90 ;absolute positioning\n;---------------------------------------\n;---------------------------------------"}, + "machine_extruder_end_code": { "default_value": ";---------------------------------------\n;DC30 Flux Extruder 2 End\n;---------------------------------------\nG91 ;use relative coordinates\nG0 E-15 F10000\nG1 Z2 ;lift head\nG4 P3000\nG0 E14.7 F10000\nG1 E-69.7 F10000\nG90 ;absolute positioning\nG92 E0 ;zero the extruded length\n;---------------------------------------\n;---------------------------------------"}, + "prime_tower_flow": { "value": "200" } + } +} diff --git a/resources/extruders/deltacomb_dc30flux_extruder_2.def.json b/resources/extruders/deltacomb_dc30flux_extruder_2.def.json new file mode 100755 index 0000000000..f1df8ab154 --- /dev/null +++ b/resources/extruders/deltacomb_dc30flux_extruder_2.def.json @@ -0,0 +1,20 @@ +{ + "version": 2, + "name": "Extruder 3", + "inherits": "fdmextruder", + "metadata": { + "machine": "deltacomb_dc30flux", + "position": "2" + }, + + "overrides": { + "extruder_nr": { "default_value": 2 }, + "machine_nozzle_size": { "default_value": 0.4 }, + "material_diameter": { "default_value": 1.75 }, + "machine_nozzle_offset_x": { "default_value": 0.0 }, + "machine_nozzle_offset_y": { "default_value": 0.0 }, + "machine_extruder_start_code": { "default_value": ";---------------------------------------\n;DC30 Flux Extruder 3 Start\n;---------------------------------------\nG92 E0 ;zero the extruded length\nG91 ;use relative coordinates\nG1 E68 F10000 ; fast insert\nG92 E0 ;zero the extruded length\nG90 ;absolute positioning\n;---------------------------------------\n;---------------------------------------"}, + "machine_extruder_end_code": { "default_value": ";---------------------------------------\n;DC30 Flux Extruder 3 End\n;---------------------------------------\nG91 ;use relative coordinates\nG0 E-15 F10000\nG1 Z2 ;lift head\nG4 P3000\nG0 E14.7 F10000\nG1 E-69.7 F10000\nG90 ;absolute positioning\nG92 E0 ;zero the extruded length\n;---------------------------------------\n;---------------------------------------"}, + "prime_tower_flow": { "value": "200" } + } +} diff --git a/resources/extruders/deltacomb_dc30flux_extruder_4.def.json b/resources/extruders/deltacomb_dc30flux_extruder_4.def.json new file mode 100755 index 0000000000..dbc23f96b6 --- /dev/null +++ b/resources/extruders/deltacomb_dc30flux_extruder_4.def.json @@ -0,0 +1,20 @@ +{ + "version": 2, + "name": "Extruder 4", + "inherits": "fdmextruder", + "metadata": { + "machine": "deltacomb_dc30flux", + "position": "3" + }, + + "overrides": { + "extruder_nr": { "default_value": 3 }, + "machine_nozzle_size": { "default_value": 0.4 }, + "material_diameter": { "default_value": 1.75 }, + "machine_nozzle_offset_x": { "default_value": 0.0 }, + "machine_nozzle_offset_y": { "default_value": 0.0 }, + "machine_extruder_start_code": { "default_value": ";---------------------------------------\n;DC30 Flux Extruder 4 Start\n;---------------------------------------\nG92 E0 ;zero the extruded length\nG91 ;use relative coordinates\nG1 E68 F10000 ; fast insert\nG92 E0 ;zero the extruded length\nG90 ;absolute positioning\n;---------------------------------------\n;---------------------------------------"}, + "machine_extruder_end_code": { "default_value": ";---------------------------------------\n;DC30 Flux Extruder 4 End\n;---------------------------------------\nG91 ;use relative coordinates\nG0 E-15 F10000\nG1 Z2 ;lift head\nG4 P3000\nG0 E14.7 F10000\nG1 E-69.7 F10000\nG90 ;absolute positioning\nG92 E0 ;zero the extruded length\n;---------------------------------------\n;---------------------------------------"}, + "prime_tower_flow": { "value": "200" } + } +} diff --git a/resources/variants/deltacomb_025_e3d.inst.cfg b/resources/variants/deltacomb_025_e3d.inst.cfg deleted file mode 100644 index 594447cc39..0000000000 --- a/resources/variants/deltacomb_025_e3d.inst.cfg +++ /dev/null @@ -1,13 +0,0 @@ -[general] -name = E3D 0.25mm -version = 4 -definition = deltacomb - -[metadata] -author = Deltacomb 3D -setting_version = 11 -type = variant -hardware_type = nozzle - -[values] -machine_nozzle_size = 0.25 diff --git a/resources/variants/deltacomb_040_e3d.inst.cfg b/resources/variants/deltacomb_040_e3d.inst.cfg deleted file mode 100644 index 17deafdaf9..0000000000 --- a/resources/variants/deltacomb_040_e3d.inst.cfg +++ /dev/null @@ -1,13 +0,0 @@ -[general] -name = E3D 0.40mm -version = 4 -definition = deltacomb - -[metadata] -author = Deltacomb 3D -setting_version = 11 -type = variant -hardware_type = nozzle - -[values] -machine_nozzle_size = 0.4 diff --git a/resources/variants/deltacomb_080_e3d.inst.cfg b/resources/variants/deltacomb_080_e3d.inst.cfg deleted file mode 100644 index 9e94ccd83f..0000000000 --- a/resources/variants/deltacomb_080_e3d.inst.cfg +++ /dev/null @@ -1,13 +0,0 @@ -[general] -name = E3D 0.80mm -version = 4 -definition = deltacomb - -[metadata] -author = Deltacomb 3D -setting_version = 11 -type = variant -hardware_type = nozzle - -[values] -machine_nozzle_size = 0.8 From f61051e4e78f078b33fac7fb9fe026a8902b4e97 Mon Sep 17 00:00:00 2001 From: Deltacomb Date: Thu, 26 Mar 2020 10:28:05 +0100 Subject: [PATCH 010/116] New Machines Fixes (3) --- resources/definitions/deltacomb_base.def.json | 6 +++--- ...deltacomb_dc30.def copy.json => deltacomb_dc30.def.json} | 0 ...er_4.def.json => deltacomb_dc30flux_extruder_3.def.json} | 0 .../deltacomb/PETG/deltacomb_DBE0.40_PETG_A.inst.cfg | 2 +- .../deltacomb/PETG/deltacomb_DBE0.40_PETG_B.inst.cfg | 2 +- .../deltacomb/PETG/deltacomb_DBE0.40_PETG_C.inst.cfg | 2 +- .../deltacomb/PETG/deltacomb_DBE0.40_PETG_D.inst.cfg | 2 +- .../deltacomb/PETG/deltacomb_DBE0.40_PETG_E.inst.cfg | 2 +- .../deltacomb/PETG/deltacomb_DBE0.60_PETG_C.inst.cfg | 2 +- .../deltacomb/PETG/deltacomb_DBE0.60_PETG_D.inst.cfg | 2 +- .../deltacomb/PETG/deltacomb_DBE0.60_PETG_E.inst.cfg | 2 +- .../deltacomb/PETG/deltacomb_DBE0.60_PETG_F.inst.cfg | 2 +- .../deltacomb/PETG/deltacomb_FBE0.40_PETG_A.inst.cfg | 2 +- .../deltacomb/PETG/deltacomb_FBE0.40_PETG_B.inst.cfg | 2 +- .../deltacomb/PETG/deltacomb_FBE0.40_PETG_C.inst.cfg | 2 +- .../deltacomb/PETG/deltacomb_FBE0.40_PETG_D.inst.cfg | 2 +- .../deltacomb/PETG/deltacomb_FBE0.40_PETG_E.inst.cfg | 2 +- .../deltacomb/PETG/deltacomb_FBE0.60_PETG_C.inst.cfg | 2 +- .../deltacomb/PETG/deltacomb_FBE0.60_PETG_D.inst.cfg | 2 +- .../deltacomb/PETG/deltacomb_FBE0.60_PETG_E.inst.cfg | 2 +- .../deltacomb/PETG/deltacomb_FBE0.60_PETG_F.inst.cfg | 2 +- 21 files changed, 21 insertions(+), 21 deletions(-) rename resources/definitions/{deltacomb_dc30.def copy.json => deltacomb_dc30.def.json} (100%) rename resources/extruders/{deltacomb_dc30flux_extruder_4.def.json => deltacomb_dc30flux_extruder_3.def.json} (100%) diff --git a/resources/definitions/deltacomb_base.def.json b/resources/definitions/deltacomb_base.def.json index 076a7f35f3..d9baeca21f 100755 --- a/resources/definitions/deltacomb_base.def.json +++ b/resources/definitions/deltacomb_base.def.json @@ -66,7 +66,7 @@ "retraction_amount" : { "default_value": 3.5 }, "retraction_speed" : { "default_value": 70 }, "retraction_combing" : { "default_value": "noskin" }, - "travel_avoid_distance": { "default_value": 1, "value": "1" }, + "travel_avoid_distance": { "value": "1" }, "top_bottom_thickness": { "default_value": 0.8 }, "roofing_layer_count": { "value": "1" }, @@ -79,9 +79,9 @@ "support_z_distance": { "value": "layer_height * 2" }, "support_bottom_distance": { "value": "layer_height" }, "support_use_towers" : { "default_value": false }, - "support_bottom_enable" : { "default_value": false }, + "support_bottom_enable" : { "value": "0" }, - "skirt_brim_speed": { "default_value" : "speed_layer_0", "value": "speed_layer_0" }, + "skirt_brim_speed": { "value": "speed_layer_0" }, "skirt_line_count": { "default_value": 3 }, "skirt_brim_minimal_length": { "default_value": 150 }, "brim_width": { "value": "3" }, diff --git a/resources/definitions/deltacomb_dc30.def copy.json b/resources/definitions/deltacomb_dc30.def.json similarity index 100% rename from resources/definitions/deltacomb_dc30.def copy.json rename to resources/definitions/deltacomb_dc30.def.json diff --git a/resources/extruders/deltacomb_dc30flux_extruder_4.def.json b/resources/extruders/deltacomb_dc30flux_extruder_3.def.json similarity index 100% rename from resources/extruders/deltacomb_dc30flux_extruder_4.def.json rename to resources/extruders/deltacomb_dc30flux_extruder_3.def.json diff --git a/resources/quality/deltacomb/PETG/deltacomb_DBE0.40_PETG_A.inst.cfg b/resources/quality/deltacomb/PETG/deltacomb_DBE0.40_PETG_A.inst.cfg index fde67a41d7..91733f1b24 100644 --- a/resources/quality/deltacomb/PETG/deltacomb_DBE0.40_PETG_A.inst.cfg +++ b/resources/quality/deltacomb/PETG/deltacomb_DBE0.40_PETG_A.inst.cfg @@ -23,5 +23,5 @@ speed_roofing = =speed_print * 0.5 default_material_print_temperature = 235 material_bed_temperature = 60 material_bed_temperature_layer_0 = 45 -initial_layer_line_width = 140 +initial_layer_line_width_factor = 140 retraction_speed = 25 diff --git a/resources/quality/deltacomb/PETG/deltacomb_DBE0.40_PETG_B.inst.cfg b/resources/quality/deltacomb/PETG/deltacomb_DBE0.40_PETG_B.inst.cfg index c4796c7796..51253b6fd6 100644 --- a/resources/quality/deltacomb/PETG/deltacomb_DBE0.40_PETG_B.inst.cfg +++ b/resources/quality/deltacomb/PETG/deltacomb_DBE0.40_PETG_B.inst.cfg @@ -23,5 +23,5 @@ speed_roofing = =speed_print * 0.5 default_material_print_temperature = 235 material_bed_temperature = 60 material_bed_temperature_layer_0 = 45 -initial_layer_line_width = 140 +initial_layer_line_width_factor = 140 retraction_speed = 25 \ No newline at end of file diff --git a/resources/quality/deltacomb/PETG/deltacomb_DBE0.40_PETG_C.inst.cfg b/resources/quality/deltacomb/PETG/deltacomb_DBE0.40_PETG_C.inst.cfg index eff6728de5..c5478e179d 100644 --- a/resources/quality/deltacomb/PETG/deltacomb_DBE0.40_PETG_C.inst.cfg +++ b/resources/quality/deltacomb/PETG/deltacomb_DBE0.40_PETG_C.inst.cfg @@ -23,5 +23,5 @@ speed_roofing = =speed_print * 0.5 default_material_print_temperature = 235 material_bed_temperature = 60 material_bed_temperature_layer_0 = 45 -initial_layer_line_width = 140 +initial_layer_line_width_factor = 140 retraction_speed = 25 \ No newline at end of file diff --git a/resources/quality/deltacomb/PETG/deltacomb_DBE0.40_PETG_D.inst.cfg b/resources/quality/deltacomb/PETG/deltacomb_DBE0.40_PETG_D.inst.cfg index 3b321a01f6..c47bbc599c 100644 --- a/resources/quality/deltacomb/PETG/deltacomb_DBE0.40_PETG_D.inst.cfg +++ b/resources/quality/deltacomb/PETG/deltacomb_DBE0.40_PETG_D.inst.cfg @@ -23,5 +23,5 @@ speed_roofing = =speed_print * 0.5 default_material_print_temperature = 235 material_bed_temperature = 60 material_bed_temperature_layer_0 = 45 -initial_layer_line_width = 140 +initial_layer_line_width_factor = 140 retraction_speed = 25 \ No newline at end of file diff --git a/resources/quality/deltacomb/PETG/deltacomb_DBE0.40_PETG_E.inst.cfg b/resources/quality/deltacomb/PETG/deltacomb_DBE0.40_PETG_E.inst.cfg index f3fdeed340..f3ab533069 100644 --- a/resources/quality/deltacomb/PETG/deltacomb_DBE0.40_PETG_E.inst.cfg +++ b/resources/quality/deltacomb/PETG/deltacomb_DBE0.40_PETG_E.inst.cfg @@ -23,5 +23,5 @@ speed_roofing = =speed_print * 0.5 default_material_print_temperature = 235 material_bed_temperature = 60 material_bed_temperature_layer_0 = 45 -initial_layer_line_width = 140 +initial_layer_line_width_factor = 140 retraction_speed = 25 \ No newline at end of file diff --git a/resources/quality/deltacomb/PETG/deltacomb_DBE0.60_PETG_C.inst.cfg b/resources/quality/deltacomb/PETG/deltacomb_DBE0.60_PETG_C.inst.cfg index a565542953..75cebe2363 100644 --- a/resources/quality/deltacomb/PETG/deltacomb_DBE0.60_PETG_C.inst.cfg +++ b/resources/quality/deltacomb/PETG/deltacomb_DBE0.60_PETG_C.inst.cfg @@ -23,5 +23,5 @@ speed_roofing = =speed_print * 0.5 default_material_print_temperature = 235 material_bed_temperature = 60 material_bed_temperature_layer_0 = 45 -initial_layer_line_width = 140 +initial_layer_line_width_factor = 140 retraction_speed = 25 \ No newline at end of file diff --git a/resources/quality/deltacomb/PETG/deltacomb_DBE0.60_PETG_D.inst.cfg b/resources/quality/deltacomb/PETG/deltacomb_DBE0.60_PETG_D.inst.cfg index d26140c1fb..1c48f506d3 100644 --- a/resources/quality/deltacomb/PETG/deltacomb_DBE0.60_PETG_D.inst.cfg +++ b/resources/quality/deltacomb/PETG/deltacomb_DBE0.60_PETG_D.inst.cfg @@ -23,5 +23,5 @@ speed_roofing = =speed_print * 0.5 default_material_print_temperature = 235 material_bed_temperature = 60 material_bed_temperature_layer_0 = 45 -initial_layer_line_width = 140 +initial_layer_line_width_factor = 140 retraction_speed = 25 \ No newline at end of file diff --git a/resources/quality/deltacomb/PETG/deltacomb_DBE0.60_PETG_E.inst.cfg b/resources/quality/deltacomb/PETG/deltacomb_DBE0.60_PETG_E.inst.cfg index 19bbd2fd5a..fcbea6ab73 100644 --- a/resources/quality/deltacomb/PETG/deltacomb_DBE0.60_PETG_E.inst.cfg +++ b/resources/quality/deltacomb/PETG/deltacomb_DBE0.60_PETG_E.inst.cfg @@ -23,5 +23,5 @@ speed_roofing = =speed_print * 0.7 default_material_print_temperature = 235 material_bed_temperature = 60 material_bed_temperature_layer_0 = 45 -initial_layer_line_width = 140 +initial_layer_line_width_factor = 140 retraction_speed = 25 \ No newline at end of file diff --git a/resources/quality/deltacomb/PETG/deltacomb_DBE0.60_PETG_F.inst.cfg b/resources/quality/deltacomb/PETG/deltacomb_DBE0.60_PETG_F.inst.cfg index ab09e8b7f1..1ada6a49f7 100644 --- a/resources/quality/deltacomb/PETG/deltacomb_DBE0.60_PETG_F.inst.cfg +++ b/resources/quality/deltacomb/PETG/deltacomb_DBE0.60_PETG_F.inst.cfg @@ -23,5 +23,5 @@ speed_roofing = =speed_print default_material_print_temperature = 235 material_bed_temperature = 60 material_bed_temperature_layer_0 = 45 -initial_layer_line_width = 140 +initial_layer_line_width_factor = 140 retraction_speed = 25 \ No newline at end of file diff --git a/resources/quality/deltacomb/PETG/deltacomb_FBE0.40_PETG_A.inst.cfg b/resources/quality/deltacomb/PETG/deltacomb_FBE0.40_PETG_A.inst.cfg index d9b2dddb43..5707782861 100644 --- a/resources/quality/deltacomb/PETG/deltacomb_FBE0.40_PETG_A.inst.cfg +++ b/resources/quality/deltacomb/PETG/deltacomb_FBE0.40_PETG_A.inst.cfg @@ -23,5 +23,5 @@ speed_roofing = =speed_print * 0.5 default_material_print_temperature = 235 material_bed_temperature = 60 material_bed_temperature_layer_0 = 45 -initial_layer_line_width = 140 +initial_layer_line_width_factor = 140 retraction_speed = 25 \ No newline at end of file diff --git a/resources/quality/deltacomb/PETG/deltacomb_FBE0.40_PETG_B.inst.cfg b/resources/quality/deltacomb/PETG/deltacomb_FBE0.40_PETG_B.inst.cfg index 315b5cc0e9..c24999a6ed 100644 --- a/resources/quality/deltacomb/PETG/deltacomb_FBE0.40_PETG_B.inst.cfg +++ b/resources/quality/deltacomb/PETG/deltacomb_FBE0.40_PETG_B.inst.cfg @@ -23,5 +23,5 @@ speed_roofing = =speed_print * 0.5 default_material_print_temperature = 235 material_bed_temperature = 60 material_bed_temperature_layer_0 = 45 -initial_layer_line_width = 140 +initial_layer_line_width_factor = 140 retraction_speed = 25 \ No newline at end of file diff --git a/resources/quality/deltacomb/PETG/deltacomb_FBE0.40_PETG_C.inst.cfg b/resources/quality/deltacomb/PETG/deltacomb_FBE0.40_PETG_C.inst.cfg index 6c783df468..dadf453ad8 100644 --- a/resources/quality/deltacomb/PETG/deltacomb_FBE0.40_PETG_C.inst.cfg +++ b/resources/quality/deltacomb/PETG/deltacomb_FBE0.40_PETG_C.inst.cfg @@ -23,5 +23,5 @@ speed_roofing = =speed_print * 0.5 default_material_print_temperature = 235 material_bed_temperature = 60 material_bed_temperature_layer_0 = 45 -initial_layer_line_width = 140 +initial_layer_line_width_factor = 140 retraction_speed = 25 diff --git a/resources/quality/deltacomb/PETG/deltacomb_FBE0.40_PETG_D.inst.cfg b/resources/quality/deltacomb/PETG/deltacomb_FBE0.40_PETG_D.inst.cfg index 980c1010c9..69997bceb1 100644 --- a/resources/quality/deltacomb/PETG/deltacomb_FBE0.40_PETG_D.inst.cfg +++ b/resources/quality/deltacomb/PETG/deltacomb_FBE0.40_PETG_D.inst.cfg @@ -23,5 +23,5 @@ speed_roofing = =speed_print * 0.5 default_material_print_temperature = 235 material_bed_temperature = 60 material_bed_temperature_layer_0 = 45 -initial_layer_line_width = 140 +initial_layer_line_width_factor = 140 retraction_speed = 25 \ No newline at end of file diff --git a/resources/quality/deltacomb/PETG/deltacomb_FBE0.40_PETG_E.inst.cfg b/resources/quality/deltacomb/PETG/deltacomb_FBE0.40_PETG_E.inst.cfg index f17c2c3345..91d6f3a803 100644 --- a/resources/quality/deltacomb/PETG/deltacomb_FBE0.40_PETG_E.inst.cfg +++ b/resources/quality/deltacomb/PETG/deltacomb_FBE0.40_PETG_E.inst.cfg @@ -23,5 +23,5 @@ speed_roofing = =speed_print * 0.5 default_material_print_temperature = 235 material_bed_temperature = 60 material_bed_temperature_layer_0 = 45 -initial_layer_line_width = 140 +initial_layer_line_width_factor = 140 retraction_speed = 25 \ No newline at end of file diff --git a/resources/quality/deltacomb/PETG/deltacomb_FBE0.60_PETG_C.inst.cfg b/resources/quality/deltacomb/PETG/deltacomb_FBE0.60_PETG_C.inst.cfg index 6c601eaea0..1038bda5e6 100644 --- a/resources/quality/deltacomb/PETG/deltacomb_FBE0.60_PETG_C.inst.cfg +++ b/resources/quality/deltacomb/PETG/deltacomb_FBE0.60_PETG_C.inst.cfg @@ -23,5 +23,5 @@ speed_roofing = =speed_print * 0.5 default_material_print_temperature = 235 material_bed_temperature = 60 material_bed_temperature_layer_0 = 45 -initial_layer_line_width = 140 +initial_layer_line_width_factor = 140 retraction_speed = 25 diff --git a/resources/quality/deltacomb/PETG/deltacomb_FBE0.60_PETG_D.inst.cfg b/resources/quality/deltacomb/PETG/deltacomb_FBE0.60_PETG_D.inst.cfg index 9eb321b4cc..a95eeeb926 100644 --- a/resources/quality/deltacomb/PETG/deltacomb_FBE0.60_PETG_D.inst.cfg +++ b/resources/quality/deltacomb/PETG/deltacomb_FBE0.60_PETG_D.inst.cfg @@ -23,5 +23,5 @@ speed_roofing = =speed_print * 0.5 default_material_print_temperature = 235 material_bed_temperature = 60 material_bed_temperature_layer_0 = 45 -initial_layer_line_width = 140 +initial_layer_line_width_factor = 140 retraction_speed = 25 \ No newline at end of file diff --git a/resources/quality/deltacomb/PETG/deltacomb_FBE0.60_PETG_E.inst.cfg b/resources/quality/deltacomb/PETG/deltacomb_FBE0.60_PETG_E.inst.cfg index 7f7b0c92cb..84c03f6363 100644 --- a/resources/quality/deltacomb/PETG/deltacomb_FBE0.60_PETG_E.inst.cfg +++ b/resources/quality/deltacomb/PETG/deltacomb_FBE0.60_PETG_E.inst.cfg @@ -23,5 +23,5 @@ speed_roofing = =speed_print * 0.7 default_material_print_temperature = 235 material_bed_temperature = 60 material_bed_temperature_layer_0 = 45 -initial_layer_line_width = 140 +initial_layer_line_width_factor = 140 retraction_speed = 25 \ No newline at end of file diff --git a/resources/quality/deltacomb/PETG/deltacomb_FBE0.60_PETG_F.inst.cfg b/resources/quality/deltacomb/PETG/deltacomb_FBE0.60_PETG_F.inst.cfg index 056d58183e..ae8f57fc25 100644 --- a/resources/quality/deltacomb/PETG/deltacomb_FBE0.60_PETG_F.inst.cfg +++ b/resources/quality/deltacomb/PETG/deltacomb_FBE0.60_PETG_F.inst.cfg @@ -23,5 +23,5 @@ speed_roofing = =speed_print default_material_print_temperature = 235 material_bed_temperature = 60 material_bed_temperature_layer_0 = 45 -initial_layer_line_width = 140 +initial_layer_line_width_factor = 140 retraction_speed = 25 \ No newline at end of file From 69b1c1fe74d0ce96717cd5c69fec0d60ff660100 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Tue, 7 Apr 2020 23:55:31 +0200 Subject: [PATCH 011/116] Upgrade Deltacomb profiles to setting version 13 This would halve the maximum resolution setting, but they don't override that setting so there is no actual change to these profiles. --- .../quality/deltacomb/ABS/deltacomb_DBE0.25_ABS_A.inst.cfg | 2 +- .../quality/deltacomb/ABS/deltacomb_DBE0.25_ABS_B.inst.cfg | 2 +- .../quality/deltacomb/ABS/deltacomb_DBE0.25_ABS_C.inst.cfg | 2 +- .../quality/deltacomb/ABS/deltacomb_DBE0.40_ABS_A.inst.cfg | 2 +- .../quality/deltacomb/ABS/deltacomb_DBE0.40_ABS_B.inst.cfg | 2 +- .../quality/deltacomb/ABS/deltacomb_DBE0.40_ABS_C.inst.cfg | 2 +- .../quality/deltacomb/ABS/deltacomb_DBE0.40_ABS_D.inst.cfg | 2 +- .../quality/deltacomb/ABS/deltacomb_DBE0.40_ABS_E.inst.cfg | 2 +- .../quality/deltacomb/ABS/deltacomb_DBE0.60_ABS_C.inst.cfg | 2 +- .../quality/deltacomb/ABS/deltacomb_DBE0.60_ABS_D.inst.cfg | 2 +- .../quality/deltacomb/ABS/deltacomb_DBE0.60_ABS_E.inst.cfg | 2 +- .../quality/deltacomb/ABS/deltacomb_DBE0.60_ABS_F.inst.cfg | 2 +- .../quality/deltacomb/ABS/deltacomb_FBE0.25_ABS_A.inst.cfg | 2 +- .../quality/deltacomb/ABS/deltacomb_FBE0.25_ABS_B.inst.cfg | 2 +- .../quality/deltacomb/ABS/deltacomb_FBE0.25_ABS_C.inst.cfg | 2 +- .../quality/deltacomb/ABS/deltacomb_FBE0.40_ABS_A.inst.cfg | 2 +- .../quality/deltacomb/ABS/deltacomb_FBE0.40_ABS_B.inst.cfg | 2 +- .../quality/deltacomb/ABS/deltacomb_FBE0.40_ABS_C.inst.cfg | 2 +- .../quality/deltacomb/ABS/deltacomb_FBE0.40_ABS_D.inst.cfg | 2 +- .../quality/deltacomb/ABS/deltacomb_FBE0.40_ABS_E.inst.cfg | 2 +- .../quality/deltacomb/ABS/deltacomb_FBE0.60_ABS_C.inst.cfg | 2 +- .../quality/deltacomb/ABS/deltacomb_FBE0.60_ABS_D.inst.cfg | 2 +- .../quality/deltacomb/ABS/deltacomb_FBE0.60_ABS_E.inst.cfg | 2 +- .../quality/deltacomb/ABS/deltacomb_FBE0.60_ABS_F.inst.cfg | 2 +- .../quality/deltacomb/ABS/deltacomb_VDBE0.80_ABS_D.inst.cfg | 2 +- .../quality/deltacomb/ABS/deltacomb_VDBE0.80_ABS_E.inst.cfg | 2 +- .../quality/deltacomb/ABS/deltacomb_VDBE0.80_ABS_F.inst.cfg | 2 +- .../quality/deltacomb/ABS/deltacomb_VDBE0.80_ABS_G.inst.cfg | 2 +- .../quality/deltacomb/ABS/deltacomb_VFBE0.80_ABS_D.inst.cfg | 2 +- .../quality/deltacomb/ABS/deltacomb_VFBE0.80_ABS_E.inst.cfg | 2 +- .../quality/deltacomb/ABS/deltacomb_VFBE0.80_ABS_F.inst.cfg | 2 +- .../quality/deltacomb/ABS/deltacomb_VFBE0.80_ABS_G.inst.cfg | 2 +- .../quality/deltacomb/PETG/deltacomb_DBE0.40_PETG_A.inst.cfg | 2 +- .../quality/deltacomb/PETG/deltacomb_DBE0.40_PETG_B.inst.cfg | 2 +- .../quality/deltacomb/PETG/deltacomb_DBE0.40_PETG_C.inst.cfg | 2 +- .../quality/deltacomb/PETG/deltacomb_DBE0.40_PETG_D.inst.cfg | 2 +- .../quality/deltacomb/PETG/deltacomb_DBE0.40_PETG_E.inst.cfg | 2 +- .../quality/deltacomb/PETG/deltacomb_DBE0.60_PETG_C.inst.cfg | 2 +- .../quality/deltacomb/PETG/deltacomb_DBE0.60_PETG_D.inst.cfg | 2 +- .../quality/deltacomb/PETG/deltacomb_DBE0.60_PETG_E.inst.cfg | 2 +- .../quality/deltacomb/PETG/deltacomb_DBE0.60_PETG_F.inst.cfg | 2 +- .../quality/deltacomb/PETG/deltacomb_FBE0.40_PETG_A.inst.cfg | 2 +- .../quality/deltacomb/PETG/deltacomb_FBE0.40_PETG_B.inst.cfg | 2 +- .../quality/deltacomb/PETG/deltacomb_FBE0.40_PETG_C.inst.cfg | 2 +- .../quality/deltacomb/PETG/deltacomb_FBE0.40_PETG_D.inst.cfg | 2 +- .../quality/deltacomb/PETG/deltacomb_FBE0.40_PETG_E.inst.cfg | 2 +- .../quality/deltacomb/PETG/deltacomb_FBE0.60_PETG_C.inst.cfg | 2 +- .../quality/deltacomb/PETG/deltacomb_FBE0.60_PETG_D.inst.cfg | 2 +- .../quality/deltacomb/PETG/deltacomb_FBE0.60_PETG_E.inst.cfg | 2 +- .../quality/deltacomb/PETG/deltacomb_FBE0.60_PETG_F.inst.cfg | 2 +- .../quality/deltacomb/PLA/deltacomb_DBE0.25_PLA_A.inst.cfg | 2 +- .../quality/deltacomb/PLA/deltacomb_DBE0.40_PLA_A.inst.cfg | 2 +- .../quality/deltacomb/PLA/deltacomb_DBE0.40_PLA_B.inst.cfg | 2 +- .../quality/deltacomb/PLA/deltacomb_DBE0.40_PLA_C.inst.cfg | 2 +- .../quality/deltacomb/PLA/deltacomb_DBE0.40_PLA_D.inst.cfg | 2 +- .../quality/deltacomb/PLA/deltacomb_DBE0.40_PLA_E.inst.cfg | 2 +- .../quality/deltacomb/PLA/deltacomb_DBE0.60_PLA_C.inst.cfg | 2 +- .../quality/deltacomb/PLA/deltacomb_DBE0.60_PLA_D.inst.cfg | 2 +- .../quality/deltacomb/PLA/deltacomb_FBE0.25_PLA_A.inst.cfg | 2 +- .../quality/deltacomb/PLA/deltacomb_FBE0.25_PLA_B.inst.cfg | 2 +- .../quality/deltacomb/PLA/deltacomb_FBE0.25_PLA_C.inst.cfg | 2 +- .../quality/deltacomb/PLA/deltacomb_FBE0.40_PLA_A.inst.cfg | 2 +- .../quality/deltacomb/PLA/deltacomb_FBE0.40_PLA_B.inst.cfg | 2 +- .../quality/deltacomb/PLA/deltacomb_FBE0.40_PLA_C.inst.cfg | 2 +- .../quality/deltacomb/PLA/deltacomb_FBE0.40_PLA_D.inst.cfg | 2 +- .../quality/deltacomb/PLA/deltacomb_FBE0.40_PLA_E.inst.cfg | 2 +- .../quality/deltacomb/PLA/deltacomb_FBE0.60_PLA_C.inst.cfg | 2 +- .../quality/deltacomb/PLA/deltacomb_FBE0.60_PLA_D.inst.cfg | 2 +- .../quality/deltacomb/PLA/deltacomb_FBE0.60_PLA_E.inst.cfg | 2 +- .../quality/deltacomb/PLA/deltacomb_FBE0.60_PLA_F.inst.cfg | 2 +- .../quality/deltacomb/PLA/deltacomb_VDBE0.80_PLA_D.inst.cfg | 2 +- .../quality/deltacomb/PLA/deltacomb_VDBE0.80_PLA_E.inst.cfg | 2 +- .../quality/deltacomb/PLA/deltacomb_VDBE0.80_PLA_F.inst.cfg | 2 +- .../quality/deltacomb/PLA/deltacomb_VDBE0.80_PLA_G.inst.cfg | 2 +- .../quality/deltacomb/PLA/deltacomb_VFBE0.80_PLA_D.inst.cfg | 2 +- .../quality/deltacomb/PLA/deltacomb_VFBE0.80_PLA_E.inst.cfg | 2 +- .../quality/deltacomb/PLA/deltacomb_VFBE0.80_PLA_F.inst.cfg | 2 +- .../quality/deltacomb/PLA/deltacomb_VFBE0.80_PLA_G.inst.cfg | 2 +- resources/quality/deltacomb/deltacomb_global_A.inst.cfg | 2 +- resources/quality/deltacomb/deltacomb_global_B.inst.cfg | 2 +- resources/quality/deltacomb/deltacomb_global_C.inst.cfg | 2 +- resources/quality/deltacomb/deltacomb_global_D.inst.cfg | 2 +- resources/quality/deltacomb/deltacomb_global_E.inst.cfg | 2 +- resources/quality/deltacomb/deltacomb_global_F.inst.cfg | 2 +- resources/quality/deltacomb/deltacomb_global_G.inst.cfg | 2 +- resources/variants/deltacomb/deltacomb_dc20_vfbe080.inst.cfg | 2 +- resources/variants/deltacomb/deltacomb_dc20dual_dbe025.inst.cfg | 2 +- resources/variants/deltacomb/deltacomb_dc20dual_dbe040.inst.cfg | 2 +- resources/variants/deltacomb/deltacomb_dc20dual_dbe060.inst.cfg | 2 +- .../variants/deltacomb/deltacomb_dc20dual_vdbe080.inst.cfg | 2 +- resources/variants/deltacomb/deltacomb_dc20flux_fbe025.inst.cfg | 2 +- resources/variants/deltacomb/deltacomb_dc20flux_fbe040.inst.cfg | 2 +- resources/variants/deltacomb/deltacomb_dc20flux_fbe060.inst.cfg | 2 +- resources/variants/deltacomb/deltacomb_dc21_fbe025.inst.cfg | 2 +- resources/variants/deltacomb/deltacomb_dc21_fbe040.inst.cfg | 2 +- resources/variants/deltacomb/deltacomb_dc21_fbe060.inst.cfg | 2 +- resources/variants/deltacomb/deltacomb_dc21_vfbe080.inst.cfg | 2 +- resources/variants/deltacomb/deltacomb_dc21dual_dbe025.inst.cfg | 2 +- resources/variants/deltacomb/deltacomb_dc21dual_dbe040.inst.cfg | 2 +- resources/variants/deltacomb/deltacomb_dc21dual_dbe060.inst.cfg | 2 +- .../variants/deltacomb/deltacomb_dc21dual_vdbe080.inst.cfg | 2 +- resources/variants/deltacomb/deltacomb_dc21flux_fbe025.inst.cfg | 2 +- resources/variants/deltacomb/deltacomb_dc21flux_fbe040.inst.cfg | 2 +- resources/variants/deltacomb/deltacomb_dc21flux_fbe060.inst.cfg | 2 +- resources/variants/deltacomb/deltacomb_dc30_fbe025.inst.cfg | 2 +- resources/variants/deltacomb/deltacomb_dc30_fbe040.inst.cfg | 2 +- resources/variants/deltacomb/deltacomb_dc30_fbe060.inst.cfg | 2 +- resources/variants/deltacomb/deltacomb_dc30_vfbe080.inst.cfg | 2 +- resources/variants/deltacomb/deltacomb_dc30dual_dbe025.inst.cfg | 2 +- resources/variants/deltacomb/deltacomb_dc30dual_dbe040.inst.cfg | 2 +- resources/variants/deltacomb/deltacomb_dc30dual_dbe060.inst.cfg | 2 +- .../variants/deltacomb/deltacomb_dc30dual_vdbe080.inst.cfg | 2 +- resources/variants/deltacomb/deltacomb_dc30flux_fbe025.inst.cfg | 2 +- resources/variants/deltacomb/deltacomb_dc30flux_fbe040.inst.cfg | 2 +- resources/variants/deltacomb/deltacomb_dc30flux_fbe060.inst.cfg | 2 +- 115 files changed, 115 insertions(+), 115 deletions(-) diff --git a/resources/quality/deltacomb/ABS/deltacomb_DBE0.25_ABS_A.inst.cfg b/resources/quality/deltacomb/ABS/deltacomb_DBE0.25_ABS_A.inst.cfg index a74d58f1ee..8d4126229a 100755 --- a/resources/quality/deltacomb/ABS/deltacomb_DBE0.25_ABS_A.inst.cfg +++ b/resources/quality/deltacomb/ABS/deltacomb_DBE0.25_ABS_A.inst.cfg @@ -4,7 +4,7 @@ name = A definition = deltacomb_base [metadata] -setting_version = 11 +setting_version = 13 type = quality quality_type = a material = generic_abs diff --git a/resources/quality/deltacomb/ABS/deltacomb_DBE0.25_ABS_B.inst.cfg b/resources/quality/deltacomb/ABS/deltacomb_DBE0.25_ABS_B.inst.cfg index 4ab960f0fd..58cd4ed61f 100755 --- a/resources/quality/deltacomb/ABS/deltacomb_DBE0.25_ABS_B.inst.cfg +++ b/resources/quality/deltacomb/ABS/deltacomb_DBE0.25_ABS_B.inst.cfg @@ -4,7 +4,7 @@ name = B definition = deltacomb_base [metadata] -setting_version = 11 +setting_version = 13 type = quality quality_type = b material = generic_abs diff --git a/resources/quality/deltacomb/ABS/deltacomb_DBE0.25_ABS_C.inst.cfg b/resources/quality/deltacomb/ABS/deltacomb_DBE0.25_ABS_C.inst.cfg index bbc14901af..5c570d18a6 100755 --- a/resources/quality/deltacomb/ABS/deltacomb_DBE0.25_ABS_C.inst.cfg +++ b/resources/quality/deltacomb/ABS/deltacomb_DBE0.25_ABS_C.inst.cfg @@ -4,7 +4,7 @@ name = C definition = deltacomb_base [metadata] -setting_version = 11 +setting_version = 13 type = quality quality_type = c material = generic_abs diff --git a/resources/quality/deltacomb/ABS/deltacomb_DBE0.40_ABS_A.inst.cfg b/resources/quality/deltacomb/ABS/deltacomb_DBE0.40_ABS_A.inst.cfg index e6327191c8..c0ed321d4d 100755 --- a/resources/quality/deltacomb/ABS/deltacomb_DBE0.40_ABS_A.inst.cfg +++ b/resources/quality/deltacomb/ABS/deltacomb_DBE0.40_ABS_A.inst.cfg @@ -4,7 +4,7 @@ name = A definition = deltacomb_base [metadata] -setting_version = 11 +setting_version = 13 type = quality quality_type = a material = generic_abs diff --git a/resources/quality/deltacomb/ABS/deltacomb_DBE0.40_ABS_B.inst.cfg b/resources/quality/deltacomb/ABS/deltacomb_DBE0.40_ABS_B.inst.cfg index 7f1eed6ce3..ad88eab898 100755 --- a/resources/quality/deltacomb/ABS/deltacomb_DBE0.40_ABS_B.inst.cfg +++ b/resources/quality/deltacomb/ABS/deltacomb_DBE0.40_ABS_B.inst.cfg @@ -4,7 +4,7 @@ name = B definition = deltacomb_base [metadata] -setting_version = 11 +setting_version = 13 type = quality quality_type = b material = generic_abs diff --git a/resources/quality/deltacomb/ABS/deltacomb_DBE0.40_ABS_C.inst.cfg b/resources/quality/deltacomb/ABS/deltacomb_DBE0.40_ABS_C.inst.cfg index d905b39f45..5c7e288370 100755 --- a/resources/quality/deltacomb/ABS/deltacomb_DBE0.40_ABS_C.inst.cfg +++ b/resources/quality/deltacomb/ABS/deltacomb_DBE0.40_ABS_C.inst.cfg @@ -4,7 +4,7 @@ name = C definition = deltacomb_base [metadata] -setting_version = 11 +setting_version = 13 type = quality quality_type = c material = generic_abs diff --git a/resources/quality/deltacomb/ABS/deltacomb_DBE0.40_ABS_D.inst.cfg b/resources/quality/deltacomb/ABS/deltacomb_DBE0.40_ABS_D.inst.cfg index b4c633dd5f..d3881198e3 100755 --- a/resources/quality/deltacomb/ABS/deltacomb_DBE0.40_ABS_D.inst.cfg +++ b/resources/quality/deltacomb/ABS/deltacomb_DBE0.40_ABS_D.inst.cfg @@ -4,7 +4,7 @@ name = D definition = deltacomb_base [metadata] -setting_version = 11 +setting_version = 13 type = quality quality_type = d material = generic_abs diff --git a/resources/quality/deltacomb/ABS/deltacomb_DBE0.40_ABS_E.inst.cfg b/resources/quality/deltacomb/ABS/deltacomb_DBE0.40_ABS_E.inst.cfg index 0205ab671c..03a521d14d 100755 --- a/resources/quality/deltacomb/ABS/deltacomb_DBE0.40_ABS_E.inst.cfg +++ b/resources/quality/deltacomb/ABS/deltacomb_DBE0.40_ABS_E.inst.cfg @@ -4,7 +4,7 @@ name = E definition = deltacomb_base [metadata] -setting_version = 11 +setting_version = 13 type = quality quality_type = e material = generic_abs diff --git a/resources/quality/deltacomb/ABS/deltacomb_DBE0.60_ABS_C.inst.cfg b/resources/quality/deltacomb/ABS/deltacomb_DBE0.60_ABS_C.inst.cfg index 88c8c21e3a..84eab7fc48 100755 --- a/resources/quality/deltacomb/ABS/deltacomb_DBE0.60_ABS_C.inst.cfg +++ b/resources/quality/deltacomb/ABS/deltacomb_DBE0.60_ABS_C.inst.cfg @@ -4,7 +4,7 @@ name = C definition = deltacomb_base [metadata] -setting_version = 11 +setting_version = 13 type = quality quality_type = c material = generic_abs diff --git a/resources/quality/deltacomb/ABS/deltacomb_DBE0.60_ABS_D.inst.cfg b/resources/quality/deltacomb/ABS/deltacomb_DBE0.60_ABS_D.inst.cfg index df1c6d21a7..71688cac38 100755 --- a/resources/quality/deltacomb/ABS/deltacomb_DBE0.60_ABS_D.inst.cfg +++ b/resources/quality/deltacomb/ABS/deltacomb_DBE0.60_ABS_D.inst.cfg @@ -4,7 +4,7 @@ name = D definition = deltacomb_base [metadata] -setting_version = 11 +setting_version = 13 type = quality quality_type = d material = generic_abs diff --git a/resources/quality/deltacomb/ABS/deltacomb_DBE0.60_ABS_E.inst.cfg b/resources/quality/deltacomb/ABS/deltacomb_DBE0.60_ABS_E.inst.cfg index ec746f68f5..84987796a5 100755 --- a/resources/quality/deltacomb/ABS/deltacomb_DBE0.60_ABS_E.inst.cfg +++ b/resources/quality/deltacomb/ABS/deltacomb_DBE0.60_ABS_E.inst.cfg @@ -4,7 +4,7 @@ name = E definition = deltacomb_base [metadata] -setting_version = 11 +setting_version = 13 type = quality quality_type = e material = generic_abs diff --git a/resources/quality/deltacomb/ABS/deltacomb_DBE0.60_ABS_F.inst.cfg b/resources/quality/deltacomb/ABS/deltacomb_DBE0.60_ABS_F.inst.cfg index 26bca18899..1c1456fc45 100755 --- a/resources/quality/deltacomb/ABS/deltacomb_DBE0.60_ABS_F.inst.cfg +++ b/resources/quality/deltacomb/ABS/deltacomb_DBE0.60_ABS_F.inst.cfg @@ -4,7 +4,7 @@ name = A definition = deltacomb_base [metadata] -setting_version = 11 +setting_version = 13 type = quality quality_type = f material = generic_abs diff --git a/resources/quality/deltacomb/ABS/deltacomb_FBE0.25_ABS_A.inst.cfg b/resources/quality/deltacomb/ABS/deltacomb_FBE0.25_ABS_A.inst.cfg index 79c71b85cd..64c2350142 100755 --- a/resources/quality/deltacomb/ABS/deltacomb_FBE0.25_ABS_A.inst.cfg +++ b/resources/quality/deltacomb/ABS/deltacomb_FBE0.25_ABS_A.inst.cfg @@ -4,7 +4,7 @@ name = A definition = deltacomb_base [metadata] -setting_version = 11 +setting_version = 13 type = quality quality_type = a material = generic_abs diff --git a/resources/quality/deltacomb/ABS/deltacomb_FBE0.25_ABS_B.inst.cfg b/resources/quality/deltacomb/ABS/deltacomb_FBE0.25_ABS_B.inst.cfg index 61b3554b9d..fb2175b5da 100755 --- a/resources/quality/deltacomb/ABS/deltacomb_FBE0.25_ABS_B.inst.cfg +++ b/resources/quality/deltacomb/ABS/deltacomb_FBE0.25_ABS_B.inst.cfg @@ -4,7 +4,7 @@ name = B definition = deltacomb_base [metadata] -setting_version = 11 +setting_version = 13 type = quality quality_type = b material = generic_abs diff --git a/resources/quality/deltacomb/ABS/deltacomb_FBE0.25_ABS_C.inst.cfg b/resources/quality/deltacomb/ABS/deltacomb_FBE0.25_ABS_C.inst.cfg index f7338584c5..af9f344fe4 100755 --- a/resources/quality/deltacomb/ABS/deltacomb_FBE0.25_ABS_C.inst.cfg +++ b/resources/quality/deltacomb/ABS/deltacomb_FBE0.25_ABS_C.inst.cfg @@ -4,7 +4,7 @@ name = C definition = deltacomb_base [metadata] -setting_version = 11 +setting_version = 13 type = quality quality_type = c material = generic_abs diff --git a/resources/quality/deltacomb/ABS/deltacomb_FBE0.40_ABS_A.inst.cfg b/resources/quality/deltacomb/ABS/deltacomb_FBE0.40_ABS_A.inst.cfg index 37248b603f..686ee9e44e 100755 --- a/resources/quality/deltacomb/ABS/deltacomb_FBE0.40_ABS_A.inst.cfg +++ b/resources/quality/deltacomb/ABS/deltacomb_FBE0.40_ABS_A.inst.cfg @@ -4,7 +4,7 @@ name = A definition = deltacomb_base [metadata] -setting_version = 11 +setting_version = 13 type = quality quality_type = a material = generic_abs diff --git a/resources/quality/deltacomb/ABS/deltacomb_FBE0.40_ABS_B.inst.cfg b/resources/quality/deltacomb/ABS/deltacomb_FBE0.40_ABS_B.inst.cfg index 78bd587e62..d2b03e3b20 100755 --- a/resources/quality/deltacomb/ABS/deltacomb_FBE0.40_ABS_B.inst.cfg +++ b/resources/quality/deltacomb/ABS/deltacomb_FBE0.40_ABS_B.inst.cfg @@ -4,7 +4,7 @@ name = B definition = deltacomb_base [metadata] -setting_version = 11 +setting_version = 13 type = quality quality_type = b material = generic_abs diff --git a/resources/quality/deltacomb/ABS/deltacomb_FBE0.40_ABS_C.inst.cfg b/resources/quality/deltacomb/ABS/deltacomb_FBE0.40_ABS_C.inst.cfg index ca4224f9b3..5b2e32f81e 100755 --- a/resources/quality/deltacomb/ABS/deltacomb_FBE0.40_ABS_C.inst.cfg +++ b/resources/quality/deltacomb/ABS/deltacomb_FBE0.40_ABS_C.inst.cfg @@ -4,7 +4,7 @@ name = C definition = deltacomb_base [metadata] -setting_version = 11 +setting_version = 13 type = quality quality_type = c material = generic_abs diff --git a/resources/quality/deltacomb/ABS/deltacomb_FBE0.40_ABS_D.inst.cfg b/resources/quality/deltacomb/ABS/deltacomb_FBE0.40_ABS_D.inst.cfg index b4c633dd5f..d3881198e3 100755 --- a/resources/quality/deltacomb/ABS/deltacomb_FBE0.40_ABS_D.inst.cfg +++ b/resources/quality/deltacomb/ABS/deltacomb_FBE0.40_ABS_D.inst.cfg @@ -4,7 +4,7 @@ name = D definition = deltacomb_base [metadata] -setting_version = 11 +setting_version = 13 type = quality quality_type = d material = generic_abs diff --git a/resources/quality/deltacomb/ABS/deltacomb_FBE0.40_ABS_E.inst.cfg b/resources/quality/deltacomb/ABS/deltacomb_FBE0.40_ABS_E.inst.cfg index ad2eb5a369..0546cf3b3f 100755 --- a/resources/quality/deltacomb/ABS/deltacomb_FBE0.40_ABS_E.inst.cfg +++ b/resources/quality/deltacomb/ABS/deltacomb_FBE0.40_ABS_E.inst.cfg @@ -4,7 +4,7 @@ name = E definition = deltacomb_base [metadata] -setting_version = 11 +setting_version = 13 type = quality quality_type = e material = generic_abs diff --git a/resources/quality/deltacomb/ABS/deltacomb_FBE0.60_ABS_C.inst.cfg b/resources/quality/deltacomb/ABS/deltacomb_FBE0.60_ABS_C.inst.cfg index 378e2a5f6b..ba52d68b8d 100755 --- a/resources/quality/deltacomb/ABS/deltacomb_FBE0.60_ABS_C.inst.cfg +++ b/resources/quality/deltacomb/ABS/deltacomb_FBE0.60_ABS_C.inst.cfg @@ -4,7 +4,7 @@ name = C definition = deltacomb_base [metadata] -setting_version = 11 +setting_version = 13 type = quality quality_type = c material = generic_abs diff --git a/resources/quality/deltacomb/ABS/deltacomb_FBE0.60_ABS_D.inst.cfg b/resources/quality/deltacomb/ABS/deltacomb_FBE0.60_ABS_D.inst.cfg index df1c6d21a7..71688cac38 100755 --- a/resources/quality/deltacomb/ABS/deltacomb_FBE0.60_ABS_D.inst.cfg +++ b/resources/quality/deltacomb/ABS/deltacomb_FBE0.60_ABS_D.inst.cfg @@ -4,7 +4,7 @@ name = D definition = deltacomb_base [metadata] -setting_version = 11 +setting_version = 13 type = quality quality_type = d material = generic_abs diff --git a/resources/quality/deltacomb/ABS/deltacomb_FBE0.60_ABS_E.inst.cfg b/resources/quality/deltacomb/ABS/deltacomb_FBE0.60_ABS_E.inst.cfg index 4bd78f4b2f..addca89cbc 100755 --- a/resources/quality/deltacomb/ABS/deltacomb_FBE0.60_ABS_E.inst.cfg +++ b/resources/quality/deltacomb/ABS/deltacomb_FBE0.60_ABS_E.inst.cfg @@ -4,7 +4,7 @@ name = E definition = deltacomb_base [metadata] -setting_version = 11 +setting_version = 13 type = quality quality_type = e material = generic_abs diff --git a/resources/quality/deltacomb/ABS/deltacomb_FBE0.60_ABS_F.inst.cfg b/resources/quality/deltacomb/ABS/deltacomb_FBE0.60_ABS_F.inst.cfg index c2ecdb6cf0..fb78eb5df8 100755 --- a/resources/quality/deltacomb/ABS/deltacomb_FBE0.60_ABS_F.inst.cfg +++ b/resources/quality/deltacomb/ABS/deltacomb_FBE0.60_ABS_F.inst.cfg @@ -4,7 +4,7 @@ name = A definition = deltacomb_base [metadata] -setting_version = 11 +setting_version = 13 type = quality quality_type = f material = generic_abs diff --git a/resources/quality/deltacomb/ABS/deltacomb_VDBE0.80_ABS_D.inst.cfg b/resources/quality/deltacomb/ABS/deltacomb_VDBE0.80_ABS_D.inst.cfg index 28b430e55d..af64b483bf 100755 --- a/resources/quality/deltacomb/ABS/deltacomb_VDBE0.80_ABS_D.inst.cfg +++ b/resources/quality/deltacomb/ABS/deltacomb_VDBE0.80_ABS_D.inst.cfg @@ -4,7 +4,7 @@ name = D definition = deltacomb_base [metadata] -setting_version = 11 +setting_version = 13 type = quality quality_type = d material = generic_abs diff --git a/resources/quality/deltacomb/ABS/deltacomb_VDBE0.80_ABS_E.inst.cfg b/resources/quality/deltacomb/ABS/deltacomb_VDBE0.80_ABS_E.inst.cfg index d72538686e..6432f76912 100755 --- a/resources/quality/deltacomb/ABS/deltacomb_VDBE0.80_ABS_E.inst.cfg +++ b/resources/quality/deltacomb/ABS/deltacomb_VDBE0.80_ABS_E.inst.cfg @@ -4,7 +4,7 @@ name = E definition = deltacomb_base [metadata] -setting_version = 11 +setting_version = 13 type = quality quality_type = e material = generic_abs diff --git a/resources/quality/deltacomb/ABS/deltacomb_VDBE0.80_ABS_F.inst.cfg b/resources/quality/deltacomb/ABS/deltacomb_VDBE0.80_ABS_F.inst.cfg index 26b3f4ae2d..f50a80ca9d 100755 --- a/resources/quality/deltacomb/ABS/deltacomb_VDBE0.80_ABS_F.inst.cfg +++ b/resources/quality/deltacomb/ABS/deltacomb_VDBE0.80_ABS_F.inst.cfg @@ -4,7 +4,7 @@ name = A definition = deltacomb_base [metadata] -setting_version = 11 +setting_version = 13 type = quality quality_type = f material = generic_abs diff --git a/resources/quality/deltacomb/ABS/deltacomb_VDBE0.80_ABS_G.inst.cfg b/resources/quality/deltacomb/ABS/deltacomb_VDBE0.80_ABS_G.inst.cfg index 4277d65ae6..19f4712b96 100755 --- a/resources/quality/deltacomb/ABS/deltacomb_VDBE0.80_ABS_G.inst.cfg +++ b/resources/quality/deltacomb/ABS/deltacomb_VDBE0.80_ABS_G.inst.cfg @@ -4,7 +4,7 @@ name = C definition = deltacomb_base [metadata] -setting_version = 11 +setting_version = 13 type = quality quality_type = c material = generic_abs diff --git a/resources/quality/deltacomb/ABS/deltacomb_VFBE0.80_ABS_D.inst.cfg b/resources/quality/deltacomb/ABS/deltacomb_VFBE0.80_ABS_D.inst.cfg index 28b430e55d..af64b483bf 100755 --- a/resources/quality/deltacomb/ABS/deltacomb_VFBE0.80_ABS_D.inst.cfg +++ b/resources/quality/deltacomb/ABS/deltacomb_VFBE0.80_ABS_D.inst.cfg @@ -4,7 +4,7 @@ name = D definition = deltacomb_base [metadata] -setting_version = 11 +setting_version = 13 type = quality quality_type = d material = generic_abs diff --git a/resources/quality/deltacomb/ABS/deltacomb_VFBE0.80_ABS_E.inst.cfg b/resources/quality/deltacomb/ABS/deltacomb_VFBE0.80_ABS_E.inst.cfg index bc0b340123..3621225236 100755 --- a/resources/quality/deltacomb/ABS/deltacomb_VFBE0.80_ABS_E.inst.cfg +++ b/resources/quality/deltacomb/ABS/deltacomb_VFBE0.80_ABS_E.inst.cfg @@ -4,7 +4,7 @@ name = E definition = deltacomb_base [metadata] -setting_version = 11 +setting_version = 13 type = quality quality_type = e material = generic_abs diff --git a/resources/quality/deltacomb/ABS/deltacomb_VFBE0.80_ABS_F.inst.cfg b/resources/quality/deltacomb/ABS/deltacomb_VFBE0.80_ABS_F.inst.cfg index fb8dfc1c61..317361c129 100755 --- a/resources/quality/deltacomb/ABS/deltacomb_VFBE0.80_ABS_F.inst.cfg +++ b/resources/quality/deltacomb/ABS/deltacomb_VFBE0.80_ABS_F.inst.cfg @@ -4,7 +4,7 @@ name = A definition = deltacomb_base [metadata] -setting_version = 11 +setting_version = 13 type = quality quality_type = f material = generic_abs diff --git a/resources/quality/deltacomb/ABS/deltacomb_VFBE0.80_ABS_G.inst.cfg b/resources/quality/deltacomb/ABS/deltacomb_VFBE0.80_ABS_G.inst.cfg index 770f6b9d65..433d28be5e 100755 --- a/resources/quality/deltacomb/ABS/deltacomb_VFBE0.80_ABS_G.inst.cfg +++ b/resources/quality/deltacomb/ABS/deltacomb_VFBE0.80_ABS_G.inst.cfg @@ -4,7 +4,7 @@ name = C definition = deltacomb_base [metadata] -setting_version = 11 +setting_version = 13 type = quality quality_type = g material = generic_abs diff --git a/resources/quality/deltacomb/PETG/deltacomb_DBE0.40_PETG_A.inst.cfg b/resources/quality/deltacomb/PETG/deltacomb_DBE0.40_PETG_A.inst.cfg index 91733f1b24..243614db0b 100644 --- a/resources/quality/deltacomb/PETG/deltacomb_DBE0.40_PETG_A.inst.cfg +++ b/resources/quality/deltacomb/PETG/deltacomb_DBE0.40_PETG_A.inst.cfg @@ -4,7 +4,7 @@ name = A definition = deltacomb_base [metadata] -setting_version = 11 +setting_version = 13 type = quality quality_type = a material = generic_petg diff --git a/resources/quality/deltacomb/PETG/deltacomb_DBE0.40_PETG_B.inst.cfg b/resources/quality/deltacomb/PETG/deltacomb_DBE0.40_PETG_B.inst.cfg index 51253b6fd6..3e2fd961ce 100644 --- a/resources/quality/deltacomb/PETG/deltacomb_DBE0.40_PETG_B.inst.cfg +++ b/resources/quality/deltacomb/PETG/deltacomb_DBE0.40_PETG_B.inst.cfg @@ -4,7 +4,7 @@ name = B definition = deltacomb_base [metadata] -setting_version = 11 +setting_version = 13 type = quality quality_type = b material = generic_petg diff --git a/resources/quality/deltacomb/PETG/deltacomb_DBE0.40_PETG_C.inst.cfg b/resources/quality/deltacomb/PETG/deltacomb_DBE0.40_PETG_C.inst.cfg index c5478e179d..333b41aa11 100644 --- a/resources/quality/deltacomb/PETG/deltacomb_DBE0.40_PETG_C.inst.cfg +++ b/resources/quality/deltacomb/PETG/deltacomb_DBE0.40_PETG_C.inst.cfg @@ -4,7 +4,7 @@ name = C definition = deltacomb_base [metadata] -setting_version = 11 +setting_version = 13 type = quality quality_type = c material = generic_petg diff --git a/resources/quality/deltacomb/PETG/deltacomb_DBE0.40_PETG_D.inst.cfg b/resources/quality/deltacomb/PETG/deltacomb_DBE0.40_PETG_D.inst.cfg index c47bbc599c..a27a9a0da3 100644 --- a/resources/quality/deltacomb/PETG/deltacomb_DBE0.40_PETG_D.inst.cfg +++ b/resources/quality/deltacomb/PETG/deltacomb_DBE0.40_PETG_D.inst.cfg @@ -4,7 +4,7 @@ name = D definition = deltacomb_base [metadata] -setting_version = 11 +setting_version = 13 type = quality quality_type = d material = generic_petg diff --git a/resources/quality/deltacomb/PETG/deltacomb_DBE0.40_PETG_E.inst.cfg b/resources/quality/deltacomb/PETG/deltacomb_DBE0.40_PETG_E.inst.cfg index f3ab533069..529612fe19 100644 --- a/resources/quality/deltacomb/PETG/deltacomb_DBE0.40_PETG_E.inst.cfg +++ b/resources/quality/deltacomb/PETG/deltacomb_DBE0.40_PETG_E.inst.cfg @@ -4,7 +4,7 @@ name = E definition = deltacomb_base [metadata] -setting_version = 11 +setting_version = 13 type = quality quality_type = e material = generic_petg diff --git a/resources/quality/deltacomb/PETG/deltacomb_DBE0.60_PETG_C.inst.cfg b/resources/quality/deltacomb/PETG/deltacomb_DBE0.60_PETG_C.inst.cfg index 75cebe2363..093a93059e 100644 --- a/resources/quality/deltacomb/PETG/deltacomb_DBE0.60_PETG_C.inst.cfg +++ b/resources/quality/deltacomb/PETG/deltacomb_DBE0.60_PETG_C.inst.cfg @@ -4,7 +4,7 @@ name = C definition = deltacomb_base [metadata] -setting_version = 11 +setting_version = 13 type = quality quality_type = c material = generic_petg diff --git a/resources/quality/deltacomb/PETG/deltacomb_DBE0.60_PETG_D.inst.cfg b/resources/quality/deltacomb/PETG/deltacomb_DBE0.60_PETG_D.inst.cfg index 1c48f506d3..5e6b75d56b 100644 --- a/resources/quality/deltacomb/PETG/deltacomb_DBE0.60_PETG_D.inst.cfg +++ b/resources/quality/deltacomb/PETG/deltacomb_DBE0.60_PETG_D.inst.cfg @@ -4,7 +4,7 @@ name = D definition = deltacomb_base [metadata] -setting_version = 11 +setting_version = 13 type = quality quality_type = d material = generic_petg diff --git a/resources/quality/deltacomb/PETG/deltacomb_DBE0.60_PETG_E.inst.cfg b/resources/quality/deltacomb/PETG/deltacomb_DBE0.60_PETG_E.inst.cfg index fcbea6ab73..1a60201d31 100644 --- a/resources/quality/deltacomb/PETG/deltacomb_DBE0.60_PETG_E.inst.cfg +++ b/resources/quality/deltacomb/PETG/deltacomb_DBE0.60_PETG_E.inst.cfg @@ -4,7 +4,7 @@ name = E definition = deltacomb_base [metadata] -setting_version = 11 +setting_version = 13 type = quality quality_type = e material = generic_petg diff --git a/resources/quality/deltacomb/PETG/deltacomb_DBE0.60_PETG_F.inst.cfg b/resources/quality/deltacomb/PETG/deltacomb_DBE0.60_PETG_F.inst.cfg index 1ada6a49f7..5b5caa0b1b 100644 --- a/resources/quality/deltacomb/PETG/deltacomb_DBE0.60_PETG_F.inst.cfg +++ b/resources/quality/deltacomb/PETG/deltacomb_DBE0.60_PETG_F.inst.cfg @@ -4,7 +4,7 @@ name = F definition = deltacomb_base [metadata] -setting_version = 11 +setting_version = 13 type = quality quality_type = f material = generic_petg diff --git a/resources/quality/deltacomb/PETG/deltacomb_FBE0.40_PETG_A.inst.cfg b/resources/quality/deltacomb/PETG/deltacomb_FBE0.40_PETG_A.inst.cfg index 5707782861..908f798c85 100644 --- a/resources/quality/deltacomb/PETG/deltacomb_FBE0.40_PETG_A.inst.cfg +++ b/resources/quality/deltacomb/PETG/deltacomb_FBE0.40_PETG_A.inst.cfg @@ -4,7 +4,7 @@ name = A definition = deltacomb_base [metadata] -setting_version = 11 +setting_version = 13 type = quality quality_type = a material = generic_petg diff --git a/resources/quality/deltacomb/PETG/deltacomb_FBE0.40_PETG_B.inst.cfg b/resources/quality/deltacomb/PETG/deltacomb_FBE0.40_PETG_B.inst.cfg index c24999a6ed..e701f3575a 100644 --- a/resources/quality/deltacomb/PETG/deltacomb_FBE0.40_PETG_B.inst.cfg +++ b/resources/quality/deltacomb/PETG/deltacomb_FBE0.40_PETG_B.inst.cfg @@ -4,7 +4,7 @@ name = B definition = deltacomb_base [metadata] -setting_version = 11 +setting_version = 13 type = quality quality_type = b material = generic_petg diff --git a/resources/quality/deltacomb/PETG/deltacomb_FBE0.40_PETG_C.inst.cfg b/resources/quality/deltacomb/PETG/deltacomb_FBE0.40_PETG_C.inst.cfg index dadf453ad8..4e1961c2a7 100644 --- a/resources/quality/deltacomb/PETG/deltacomb_FBE0.40_PETG_C.inst.cfg +++ b/resources/quality/deltacomb/PETG/deltacomb_FBE0.40_PETG_C.inst.cfg @@ -4,7 +4,7 @@ name = C definition = deltacomb_base [metadata] -setting_version = 11 +setting_version = 13 type = quality quality_type = c material = generic_petg diff --git a/resources/quality/deltacomb/PETG/deltacomb_FBE0.40_PETG_D.inst.cfg b/resources/quality/deltacomb/PETG/deltacomb_FBE0.40_PETG_D.inst.cfg index 69997bceb1..ca81e85936 100644 --- a/resources/quality/deltacomb/PETG/deltacomb_FBE0.40_PETG_D.inst.cfg +++ b/resources/quality/deltacomb/PETG/deltacomb_FBE0.40_PETG_D.inst.cfg @@ -4,7 +4,7 @@ name = D definition = deltacomb_base [metadata] -setting_version = 11 +setting_version = 13 type = quality quality_type = d material = generic_petg diff --git a/resources/quality/deltacomb/PETG/deltacomb_FBE0.40_PETG_E.inst.cfg b/resources/quality/deltacomb/PETG/deltacomb_FBE0.40_PETG_E.inst.cfg index 91d6f3a803..06d47bbae0 100644 --- a/resources/quality/deltacomb/PETG/deltacomb_FBE0.40_PETG_E.inst.cfg +++ b/resources/quality/deltacomb/PETG/deltacomb_FBE0.40_PETG_E.inst.cfg @@ -4,7 +4,7 @@ name = E definition = deltacomb_base [metadata] -setting_version = 11 +setting_version = 13 type = quality quality_type = e material = generic_petg diff --git a/resources/quality/deltacomb/PETG/deltacomb_FBE0.60_PETG_C.inst.cfg b/resources/quality/deltacomb/PETG/deltacomb_FBE0.60_PETG_C.inst.cfg index 1038bda5e6..c596ab3adf 100644 --- a/resources/quality/deltacomb/PETG/deltacomb_FBE0.60_PETG_C.inst.cfg +++ b/resources/quality/deltacomb/PETG/deltacomb_FBE0.60_PETG_C.inst.cfg @@ -4,7 +4,7 @@ name = C definition = deltacomb_base [metadata] -setting_version = 11 +setting_version = 13 type = quality quality_type = c material = generic_petg diff --git a/resources/quality/deltacomb/PETG/deltacomb_FBE0.60_PETG_D.inst.cfg b/resources/quality/deltacomb/PETG/deltacomb_FBE0.60_PETG_D.inst.cfg index a95eeeb926..6e4fcef9ea 100644 --- a/resources/quality/deltacomb/PETG/deltacomb_FBE0.60_PETG_D.inst.cfg +++ b/resources/quality/deltacomb/PETG/deltacomb_FBE0.60_PETG_D.inst.cfg @@ -4,7 +4,7 @@ name = D definition = deltacomb_base [metadata] -setting_version = 11 +setting_version = 13 type = quality quality_type = d material = generic_petg diff --git a/resources/quality/deltacomb/PETG/deltacomb_FBE0.60_PETG_E.inst.cfg b/resources/quality/deltacomb/PETG/deltacomb_FBE0.60_PETG_E.inst.cfg index 84c03f6363..0e35e4ef9a 100644 --- a/resources/quality/deltacomb/PETG/deltacomb_FBE0.60_PETG_E.inst.cfg +++ b/resources/quality/deltacomb/PETG/deltacomb_FBE0.60_PETG_E.inst.cfg @@ -4,7 +4,7 @@ name = E definition = deltacomb_base [metadata] -setting_version = 11 +setting_version = 13 type = quality quality_type = e material = generic_petg diff --git a/resources/quality/deltacomb/PETG/deltacomb_FBE0.60_PETG_F.inst.cfg b/resources/quality/deltacomb/PETG/deltacomb_FBE0.60_PETG_F.inst.cfg index ae8f57fc25..796885270b 100644 --- a/resources/quality/deltacomb/PETG/deltacomb_FBE0.60_PETG_F.inst.cfg +++ b/resources/quality/deltacomb/PETG/deltacomb_FBE0.60_PETG_F.inst.cfg @@ -4,7 +4,7 @@ name = F definition = deltacomb_base [metadata] -setting_version = 11 +setting_version = 13 type = quality quality_type = f material = generic_petg diff --git a/resources/quality/deltacomb/PLA/deltacomb_DBE0.25_PLA_A.inst.cfg b/resources/quality/deltacomb/PLA/deltacomb_DBE0.25_PLA_A.inst.cfg index 3b1ca5886b..56774919f8 100755 --- a/resources/quality/deltacomb/PLA/deltacomb_DBE0.25_PLA_A.inst.cfg +++ b/resources/quality/deltacomb/PLA/deltacomb_DBE0.25_PLA_A.inst.cfg @@ -4,7 +4,7 @@ name = A definition = deltacomb_base [metadata] -setting_version = 11 +setting_version = 13 type = quality quality_type = a material = generic_pla diff --git a/resources/quality/deltacomb/PLA/deltacomb_DBE0.40_PLA_A.inst.cfg b/resources/quality/deltacomb/PLA/deltacomb_DBE0.40_PLA_A.inst.cfg index 3b1ca5886b..56774919f8 100755 --- a/resources/quality/deltacomb/PLA/deltacomb_DBE0.40_PLA_A.inst.cfg +++ b/resources/quality/deltacomb/PLA/deltacomb_DBE0.40_PLA_A.inst.cfg @@ -4,7 +4,7 @@ name = A definition = deltacomb_base [metadata] -setting_version = 11 +setting_version = 13 type = quality quality_type = a material = generic_pla diff --git a/resources/quality/deltacomb/PLA/deltacomb_DBE0.40_PLA_B.inst.cfg b/resources/quality/deltacomb/PLA/deltacomb_DBE0.40_PLA_B.inst.cfg index f8458f5003..b00f1453d3 100755 --- a/resources/quality/deltacomb/PLA/deltacomb_DBE0.40_PLA_B.inst.cfg +++ b/resources/quality/deltacomb/PLA/deltacomb_DBE0.40_PLA_B.inst.cfg @@ -4,7 +4,7 @@ name = B definition = deltacomb_base [metadata] -setting_version = 11 +setting_version = 13 type = quality quality_type = b material = generic_pla diff --git a/resources/quality/deltacomb/PLA/deltacomb_DBE0.40_PLA_C.inst.cfg b/resources/quality/deltacomb/PLA/deltacomb_DBE0.40_PLA_C.inst.cfg index 39361a3004..59d3639401 100755 --- a/resources/quality/deltacomb/PLA/deltacomb_DBE0.40_PLA_C.inst.cfg +++ b/resources/quality/deltacomb/PLA/deltacomb_DBE0.40_PLA_C.inst.cfg @@ -4,7 +4,7 @@ name = C definition = deltacomb_base [metadata] -setting_version = 11 +setting_version = 13 type = quality quality_type = c material = generic_pla diff --git a/resources/quality/deltacomb/PLA/deltacomb_DBE0.40_PLA_D.inst.cfg b/resources/quality/deltacomb/PLA/deltacomb_DBE0.40_PLA_D.inst.cfg index 677ad25144..74509cf5c2 100755 --- a/resources/quality/deltacomb/PLA/deltacomb_DBE0.40_PLA_D.inst.cfg +++ b/resources/quality/deltacomb/PLA/deltacomb_DBE0.40_PLA_D.inst.cfg @@ -4,7 +4,7 @@ name = D definition = deltacomb_base [metadata] -setting_version = 11 +setting_version = 13 type = quality quality_type = d material = generic_pla diff --git a/resources/quality/deltacomb/PLA/deltacomb_DBE0.40_PLA_E.inst.cfg b/resources/quality/deltacomb/PLA/deltacomb_DBE0.40_PLA_E.inst.cfg index 991778810d..1bf1d02dca 100755 --- a/resources/quality/deltacomb/PLA/deltacomb_DBE0.40_PLA_E.inst.cfg +++ b/resources/quality/deltacomb/PLA/deltacomb_DBE0.40_PLA_E.inst.cfg @@ -4,7 +4,7 @@ name = E definition = deltacomb_base [metadata] -setting_version = 11 +setting_version = 13 type = quality quality_type = e material = generic_pla diff --git a/resources/quality/deltacomb/PLA/deltacomb_DBE0.60_PLA_C.inst.cfg b/resources/quality/deltacomb/PLA/deltacomb_DBE0.60_PLA_C.inst.cfg index 2853d60dd6..a8d5c2feee 100755 --- a/resources/quality/deltacomb/PLA/deltacomb_DBE0.60_PLA_C.inst.cfg +++ b/resources/quality/deltacomb/PLA/deltacomb_DBE0.60_PLA_C.inst.cfg @@ -4,7 +4,7 @@ name = C definition = deltacomb_base [metadata] -setting_version = 11 +setting_version = 13 type = quality quality_type = c material = generic_pla diff --git a/resources/quality/deltacomb/PLA/deltacomb_DBE0.60_PLA_D.inst.cfg b/resources/quality/deltacomb/PLA/deltacomb_DBE0.60_PLA_D.inst.cfg index ee5f92f94e..f43d7baa64 100755 --- a/resources/quality/deltacomb/PLA/deltacomb_DBE0.60_PLA_D.inst.cfg +++ b/resources/quality/deltacomb/PLA/deltacomb_DBE0.60_PLA_D.inst.cfg @@ -4,7 +4,7 @@ name = D definition = deltacomb_base [metadata] -setting_version = 11 +setting_version = 13 type = quality quality_type = d material = generic_pla diff --git a/resources/quality/deltacomb/PLA/deltacomb_FBE0.25_PLA_A.inst.cfg b/resources/quality/deltacomb/PLA/deltacomb_FBE0.25_PLA_A.inst.cfg index f8fb80173e..65526428ee 100755 --- a/resources/quality/deltacomb/PLA/deltacomb_FBE0.25_PLA_A.inst.cfg +++ b/resources/quality/deltacomb/PLA/deltacomb_FBE0.25_PLA_A.inst.cfg @@ -4,7 +4,7 @@ name = A definition = deltacomb_base [metadata] -setting_version = 11 +setting_version = 13 type = quality quality_type = a material = generic_pla diff --git a/resources/quality/deltacomb/PLA/deltacomb_FBE0.25_PLA_B.inst.cfg b/resources/quality/deltacomb/PLA/deltacomb_FBE0.25_PLA_B.inst.cfg index ecf3bc1051..29bd92bfd7 100755 --- a/resources/quality/deltacomb/PLA/deltacomb_FBE0.25_PLA_B.inst.cfg +++ b/resources/quality/deltacomb/PLA/deltacomb_FBE0.25_PLA_B.inst.cfg @@ -4,7 +4,7 @@ name = B definition = deltacomb_base [metadata] -setting_version = 11 +setting_version = 13 type = quality quality_type = b material = generic_pla diff --git a/resources/quality/deltacomb/PLA/deltacomb_FBE0.25_PLA_C.inst.cfg b/resources/quality/deltacomb/PLA/deltacomb_FBE0.25_PLA_C.inst.cfg index 65c348f5bc..fee2153e5a 100755 --- a/resources/quality/deltacomb/PLA/deltacomb_FBE0.25_PLA_C.inst.cfg +++ b/resources/quality/deltacomb/PLA/deltacomb_FBE0.25_PLA_C.inst.cfg @@ -4,7 +4,7 @@ name = C definition = deltacomb_base [metadata] -setting_version = 11 +setting_version = 13 type = quality quality_type = c material = generic_pla diff --git a/resources/quality/deltacomb/PLA/deltacomb_FBE0.40_PLA_A.inst.cfg b/resources/quality/deltacomb/PLA/deltacomb_FBE0.40_PLA_A.inst.cfg index f8fb80173e..65526428ee 100755 --- a/resources/quality/deltacomb/PLA/deltacomb_FBE0.40_PLA_A.inst.cfg +++ b/resources/quality/deltacomb/PLA/deltacomb_FBE0.40_PLA_A.inst.cfg @@ -4,7 +4,7 @@ name = A definition = deltacomb_base [metadata] -setting_version = 11 +setting_version = 13 type = quality quality_type = a material = generic_pla diff --git a/resources/quality/deltacomb/PLA/deltacomb_FBE0.40_PLA_B.inst.cfg b/resources/quality/deltacomb/PLA/deltacomb_FBE0.40_PLA_B.inst.cfg index c7741313bd..88196992d1 100755 --- a/resources/quality/deltacomb/PLA/deltacomb_FBE0.40_PLA_B.inst.cfg +++ b/resources/quality/deltacomb/PLA/deltacomb_FBE0.40_PLA_B.inst.cfg @@ -4,7 +4,7 @@ name = B definition = deltacomb_base [metadata] -setting_version = 11 +setting_version = 13 type = quality quality_type = b material = generic_pla diff --git a/resources/quality/deltacomb/PLA/deltacomb_FBE0.40_PLA_C.inst.cfg b/resources/quality/deltacomb/PLA/deltacomb_FBE0.40_PLA_C.inst.cfg index 80241cb2d7..e3756344b9 100755 --- a/resources/quality/deltacomb/PLA/deltacomb_FBE0.40_PLA_C.inst.cfg +++ b/resources/quality/deltacomb/PLA/deltacomb_FBE0.40_PLA_C.inst.cfg @@ -4,7 +4,7 @@ name = C definition = deltacomb_base [metadata] -setting_version = 11 +setting_version = 13 type = quality quality_type = c material = generic_pla diff --git a/resources/quality/deltacomb/PLA/deltacomb_FBE0.40_PLA_D.inst.cfg b/resources/quality/deltacomb/PLA/deltacomb_FBE0.40_PLA_D.inst.cfg index 3d29cd6844..054a2c7389 100755 --- a/resources/quality/deltacomb/PLA/deltacomb_FBE0.40_PLA_D.inst.cfg +++ b/resources/quality/deltacomb/PLA/deltacomb_FBE0.40_PLA_D.inst.cfg @@ -4,7 +4,7 @@ name = D definition = deltacomb_base [metadata] -setting_version = 11 +setting_version = 13 type = quality quality_type = d material = generic_pla diff --git a/resources/quality/deltacomb/PLA/deltacomb_FBE0.40_PLA_E.inst.cfg b/resources/quality/deltacomb/PLA/deltacomb_FBE0.40_PLA_E.inst.cfg index 640f5e04d6..a6dac8bb8a 100755 --- a/resources/quality/deltacomb/PLA/deltacomb_FBE0.40_PLA_E.inst.cfg +++ b/resources/quality/deltacomb/PLA/deltacomb_FBE0.40_PLA_E.inst.cfg @@ -4,7 +4,7 @@ name = E definition = deltacomb_base [metadata] -setting_version = 11 +setting_version = 13 type = quality quality_type = e material = generic_pla diff --git a/resources/quality/deltacomb/PLA/deltacomb_FBE0.60_PLA_C.inst.cfg b/resources/quality/deltacomb/PLA/deltacomb_FBE0.60_PLA_C.inst.cfg index 573f855c0a..ffdb9efcc2 100755 --- a/resources/quality/deltacomb/PLA/deltacomb_FBE0.60_PLA_C.inst.cfg +++ b/resources/quality/deltacomb/PLA/deltacomb_FBE0.60_PLA_C.inst.cfg @@ -4,7 +4,7 @@ name = C definition = deltacomb_base [metadata] -setting_version = 11 +setting_version = 13 type = quality quality_type = c material = generic_pla diff --git a/resources/quality/deltacomb/PLA/deltacomb_FBE0.60_PLA_D.inst.cfg b/resources/quality/deltacomb/PLA/deltacomb_FBE0.60_PLA_D.inst.cfg index f7827c9861..4cda218214 100755 --- a/resources/quality/deltacomb/PLA/deltacomb_FBE0.60_PLA_D.inst.cfg +++ b/resources/quality/deltacomb/PLA/deltacomb_FBE0.60_PLA_D.inst.cfg @@ -4,7 +4,7 @@ name = D definition = deltacomb_base [metadata] -setting_version = 11 +setting_version = 13 type = quality quality_type = d material = generic_pla diff --git a/resources/quality/deltacomb/PLA/deltacomb_FBE0.60_PLA_E.inst.cfg b/resources/quality/deltacomb/PLA/deltacomb_FBE0.60_PLA_E.inst.cfg index dd0da51e36..790add6597 100755 --- a/resources/quality/deltacomb/PLA/deltacomb_FBE0.60_PLA_E.inst.cfg +++ b/resources/quality/deltacomb/PLA/deltacomb_FBE0.60_PLA_E.inst.cfg @@ -4,7 +4,7 @@ name = E definition = deltacomb_base [metadata] -setting_version = 11 +setting_version = 13 type = quality quality_type = e material = generic_pla diff --git a/resources/quality/deltacomb/PLA/deltacomb_FBE0.60_PLA_F.inst.cfg b/resources/quality/deltacomb/PLA/deltacomb_FBE0.60_PLA_F.inst.cfg index b21f0ef07d..fb737562ea 100755 --- a/resources/quality/deltacomb/PLA/deltacomb_FBE0.60_PLA_F.inst.cfg +++ b/resources/quality/deltacomb/PLA/deltacomb_FBE0.60_PLA_F.inst.cfg @@ -4,7 +4,7 @@ name = F definition = deltacomb_base [metadata] -setting_version = 11 +setting_version = 13 type = quality quality_type = f material = generic_pla diff --git a/resources/quality/deltacomb/PLA/deltacomb_VDBE0.80_PLA_D.inst.cfg b/resources/quality/deltacomb/PLA/deltacomb_VDBE0.80_PLA_D.inst.cfg index 121b963a64..a5742c1e75 100755 --- a/resources/quality/deltacomb/PLA/deltacomb_VDBE0.80_PLA_D.inst.cfg +++ b/resources/quality/deltacomb/PLA/deltacomb_VDBE0.80_PLA_D.inst.cfg @@ -4,7 +4,7 @@ name = D definition = deltacomb_base [metadata] -setting_version = 11 +setting_version = 13 type = quality quality_type = d material = generic_pla diff --git a/resources/quality/deltacomb/PLA/deltacomb_VDBE0.80_PLA_E.inst.cfg b/resources/quality/deltacomb/PLA/deltacomb_VDBE0.80_PLA_E.inst.cfg index 9daba66a47..c3aec5a285 100755 --- a/resources/quality/deltacomb/PLA/deltacomb_VDBE0.80_PLA_E.inst.cfg +++ b/resources/quality/deltacomb/PLA/deltacomb_VDBE0.80_PLA_E.inst.cfg @@ -4,7 +4,7 @@ name = E definition = deltacomb_base [metadata] -setting_version = 11 +setting_version = 13 type = quality quality_type = e material = generic_pla diff --git a/resources/quality/deltacomb/PLA/deltacomb_VDBE0.80_PLA_F.inst.cfg b/resources/quality/deltacomb/PLA/deltacomb_VDBE0.80_PLA_F.inst.cfg index 762fd23a99..93ddb51597 100755 --- a/resources/quality/deltacomb/PLA/deltacomb_VDBE0.80_PLA_F.inst.cfg +++ b/resources/quality/deltacomb/PLA/deltacomb_VDBE0.80_PLA_F.inst.cfg @@ -4,7 +4,7 @@ name = F definition = deltacomb_base [metadata] -setting_version = 11 +setting_version = 13 type = quality quality_type = f material = generic_pla diff --git a/resources/quality/deltacomb/PLA/deltacomb_VDBE0.80_PLA_G.inst.cfg b/resources/quality/deltacomb/PLA/deltacomb_VDBE0.80_PLA_G.inst.cfg index 6a8d0a123c..2050d62d7b 100755 --- a/resources/quality/deltacomb/PLA/deltacomb_VDBE0.80_PLA_G.inst.cfg +++ b/resources/quality/deltacomb/PLA/deltacomb_VDBE0.80_PLA_G.inst.cfg @@ -4,7 +4,7 @@ name = G definition = deltacomb_base [metadata] -setting_version = 11 +setting_version = 13 type = quality quality_type = g material = generic_pla diff --git a/resources/quality/deltacomb/PLA/deltacomb_VFBE0.80_PLA_D.inst.cfg b/resources/quality/deltacomb/PLA/deltacomb_VFBE0.80_PLA_D.inst.cfg index 1b762be18e..7f5cdf101e 100755 --- a/resources/quality/deltacomb/PLA/deltacomb_VFBE0.80_PLA_D.inst.cfg +++ b/resources/quality/deltacomb/PLA/deltacomb_VFBE0.80_PLA_D.inst.cfg @@ -4,7 +4,7 @@ name = D definition = deltacomb_base [metadata] -setting_version = 11 +setting_version = 13 type = quality quality_type = d material = generic_pla diff --git a/resources/quality/deltacomb/PLA/deltacomb_VFBE0.80_PLA_E.inst.cfg b/resources/quality/deltacomb/PLA/deltacomb_VFBE0.80_PLA_E.inst.cfg index 88d8210d9c..6ea961b84b 100755 --- a/resources/quality/deltacomb/PLA/deltacomb_VFBE0.80_PLA_E.inst.cfg +++ b/resources/quality/deltacomb/PLA/deltacomb_VFBE0.80_PLA_E.inst.cfg @@ -4,7 +4,7 @@ name = E definition = deltacomb_base [metadata] -setting_version = 11 +setting_version = 13 type = quality quality_type = e material = generic_pla diff --git a/resources/quality/deltacomb/PLA/deltacomb_VFBE0.80_PLA_F.inst.cfg b/resources/quality/deltacomb/PLA/deltacomb_VFBE0.80_PLA_F.inst.cfg index b783f809b9..a4682b279a 100755 --- a/resources/quality/deltacomb/PLA/deltacomb_VFBE0.80_PLA_F.inst.cfg +++ b/resources/quality/deltacomb/PLA/deltacomb_VFBE0.80_PLA_F.inst.cfg @@ -4,7 +4,7 @@ name = F definition = deltacomb_base [metadata] -setting_version = 11 +setting_version = 13 type = quality quality_type = f material = generic_pla diff --git a/resources/quality/deltacomb/PLA/deltacomb_VFBE0.80_PLA_G.inst.cfg b/resources/quality/deltacomb/PLA/deltacomb_VFBE0.80_PLA_G.inst.cfg index 50f623d56f..7c3ecb2282 100755 --- a/resources/quality/deltacomb/PLA/deltacomb_VFBE0.80_PLA_G.inst.cfg +++ b/resources/quality/deltacomb/PLA/deltacomb_VFBE0.80_PLA_G.inst.cfg @@ -4,7 +4,7 @@ name = G definition = deltacomb_base [metadata] -setting_version = 11 +setting_version = 13 type = quality quality_type = g material = generic_pla diff --git a/resources/quality/deltacomb/deltacomb_global_A.inst.cfg b/resources/quality/deltacomb/deltacomb_global_A.inst.cfg index 3d7bbc52af..b208e27391 100755 --- a/resources/quality/deltacomb/deltacomb_global_A.inst.cfg +++ b/resources/quality/deltacomb/deltacomb_global_A.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fine definition = deltacomb_base [metadata] -setting_version = 11 +setting_version = 13 type = quality quality_type = a weight = 1 diff --git a/resources/quality/deltacomb/deltacomb_global_B.inst.cfg b/resources/quality/deltacomb/deltacomb_global_B.inst.cfg index f3adec4ae4..8c92b1e79a 100755 --- a/resources/quality/deltacomb/deltacomb_global_B.inst.cfg +++ b/resources/quality/deltacomb/deltacomb_global_B.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = deltacomb_base [metadata] -setting_version = 11 +setting_version = 13 type = quality quality_type = b weight = 0 diff --git a/resources/quality/deltacomb/deltacomb_global_C.inst.cfg b/resources/quality/deltacomb/deltacomb_global_C.inst.cfg index 67c608971b..fc4f71f06f 100755 --- a/resources/quality/deltacomb/deltacomb_global_C.inst.cfg +++ b/resources/quality/deltacomb/deltacomb_global_C.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = deltacomb_base [metadata] -setting_version = 11 +setting_version = 13 type = quality quality_type = c weight = -1 diff --git a/resources/quality/deltacomb/deltacomb_global_D.inst.cfg b/resources/quality/deltacomb/deltacomb_global_D.inst.cfg index 2a7b80b2ab..dc2186ed38 100755 --- a/resources/quality/deltacomb/deltacomb_global_D.inst.cfg +++ b/resources/quality/deltacomb/deltacomb_global_D.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = deltacomb_base [metadata] -setting_version = 11 +setting_version = 13 type = quality quality_type = d weight = -2 diff --git a/resources/quality/deltacomb/deltacomb_global_E.inst.cfg b/resources/quality/deltacomb/deltacomb_global_E.inst.cfg index 89dcdf23b1..6d57424cec 100755 --- a/resources/quality/deltacomb/deltacomb_global_E.inst.cfg +++ b/resources/quality/deltacomb/deltacomb_global_E.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fast definition = deltacomb_base [metadata] -setting_version = 11 +setting_version = 13 type = quality quality_type = e weight = -3 diff --git a/resources/quality/deltacomb/deltacomb_global_F.inst.cfg b/resources/quality/deltacomb/deltacomb_global_F.inst.cfg index f8f877d2d2..b696cd06ae 100755 --- a/resources/quality/deltacomb/deltacomb_global_F.inst.cfg +++ b/resources/quality/deltacomb/deltacomb_global_F.inst.cfg @@ -4,7 +4,7 @@ name = Coarse definition = deltacomb_base [metadata] -setting_version = 11 +setting_version = 13 type = quality quality_type = f weight = -4 diff --git a/resources/quality/deltacomb/deltacomb_global_G.inst.cfg b/resources/quality/deltacomb/deltacomb_global_G.inst.cfg index 362299d8aa..88b525ffb6 100755 --- a/resources/quality/deltacomb/deltacomb_global_G.inst.cfg +++ b/resources/quality/deltacomb/deltacomb_global_G.inst.cfg @@ -4,7 +4,7 @@ name = Extra Coarse definition = deltacomb_base [metadata] -setting_version = 11 +setting_version = 13 type = quality quality_type = g weight = -5 diff --git a/resources/variants/deltacomb/deltacomb_dc20_vfbe080.inst.cfg b/resources/variants/deltacomb/deltacomb_dc20_vfbe080.inst.cfg index f580bf223c..803882f08f 100755 --- a/resources/variants/deltacomb/deltacomb_dc20_vfbe080.inst.cfg +++ b/resources/variants/deltacomb/deltacomb_dc20_vfbe080.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = deltacomb_dc20 [metadata] -setting_version = 11 +setting_version = 13 type = variant hardware_type = nozzle diff --git a/resources/variants/deltacomb/deltacomb_dc20dual_dbe025.inst.cfg b/resources/variants/deltacomb/deltacomb_dc20dual_dbe025.inst.cfg index 0422b9648d..d1d4be2046 100755 --- a/resources/variants/deltacomb/deltacomb_dc20dual_dbe025.inst.cfg +++ b/resources/variants/deltacomb/deltacomb_dc20dual_dbe025.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = deltacomb_dc20dual [metadata] -setting_version = 11 +setting_version = 13 type = variant hardware_type = nozzle diff --git a/resources/variants/deltacomb/deltacomb_dc20dual_dbe040.inst.cfg b/resources/variants/deltacomb/deltacomb_dc20dual_dbe040.inst.cfg index 470fef9382..c19bcc8b03 100755 --- a/resources/variants/deltacomb/deltacomb_dc20dual_dbe040.inst.cfg +++ b/resources/variants/deltacomb/deltacomb_dc20dual_dbe040.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = deltacomb_dc20dual [metadata] -setting_version = 11 +setting_version = 13 type = variant hardware_type = nozzle diff --git a/resources/variants/deltacomb/deltacomb_dc20dual_dbe060.inst.cfg b/resources/variants/deltacomb/deltacomb_dc20dual_dbe060.inst.cfg index c5bc481ab6..2ca7e29e80 100755 --- a/resources/variants/deltacomb/deltacomb_dc20dual_dbe060.inst.cfg +++ b/resources/variants/deltacomb/deltacomb_dc20dual_dbe060.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = deltacomb_dc20dual [metadata] -setting_version = 11 +setting_version = 13 type = variant hardware_type = nozzle diff --git a/resources/variants/deltacomb/deltacomb_dc20dual_vdbe080.inst.cfg b/resources/variants/deltacomb/deltacomb_dc20dual_vdbe080.inst.cfg index 715f1c6e46..6a1e0f9a48 100755 --- a/resources/variants/deltacomb/deltacomb_dc20dual_vdbe080.inst.cfg +++ b/resources/variants/deltacomb/deltacomb_dc20dual_vdbe080.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = deltacomb_dc20dual [metadata] -setting_version = 11 +setting_version = 13 type = variant hardware_type = nozzle diff --git a/resources/variants/deltacomb/deltacomb_dc20flux_fbe025.inst.cfg b/resources/variants/deltacomb/deltacomb_dc20flux_fbe025.inst.cfg index 60cc5d8985..8ef432ba6b 100755 --- a/resources/variants/deltacomb/deltacomb_dc20flux_fbe025.inst.cfg +++ b/resources/variants/deltacomb/deltacomb_dc20flux_fbe025.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = deltacomb_dc20flux [metadata] -setting_version = 11 +setting_version = 13 type = variant hardware_type = nozzle diff --git a/resources/variants/deltacomb/deltacomb_dc20flux_fbe040.inst.cfg b/resources/variants/deltacomb/deltacomb_dc20flux_fbe040.inst.cfg index 2f13f66733..df318bc027 100755 --- a/resources/variants/deltacomb/deltacomb_dc20flux_fbe040.inst.cfg +++ b/resources/variants/deltacomb/deltacomb_dc20flux_fbe040.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = deltacomb_dc20flux [metadata] -setting_version = 11 +setting_version = 13 type = variant hardware_type = nozzle diff --git a/resources/variants/deltacomb/deltacomb_dc20flux_fbe060.inst.cfg b/resources/variants/deltacomb/deltacomb_dc20flux_fbe060.inst.cfg index 780880eb33..d9ad352a67 100755 --- a/resources/variants/deltacomb/deltacomb_dc20flux_fbe060.inst.cfg +++ b/resources/variants/deltacomb/deltacomb_dc20flux_fbe060.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = deltacomb_dc20flux [metadata] -setting_version = 11 +setting_version = 13 type = variant hardware_type = nozzle diff --git a/resources/variants/deltacomb/deltacomb_dc21_fbe025.inst.cfg b/resources/variants/deltacomb/deltacomb_dc21_fbe025.inst.cfg index 802cddb16e..6cb5897e55 100755 --- a/resources/variants/deltacomb/deltacomb_dc21_fbe025.inst.cfg +++ b/resources/variants/deltacomb/deltacomb_dc21_fbe025.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = deltacomb_dc21 [metadata] -setting_version = 11 +setting_version = 13 type = variant hardware_type = nozzle diff --git a/resources/variants/deltacomb/deltacomb_dc21_fbe040.inst.cfg b/resources/variants/deltacomb/deltacomb_dc21_fbe040.inst.cfg index 8ffcac0444..746ade37bd 100755 --- a/resources/variants/deltacomb/deltacomb_dc21_fbe040.inst.cfg +++ b/resources/variants/deltacomb/deltacomb_dc21_fbe040.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = deltacomb_dc21 [metadata] -setting_version = 11 +setting_version = 13 type = variant hardware_type = nozzle diff --git a/resources/variants/deltacomb/deltacomb_dc21_fbe060.inst.cfg b/resources/variants/deltacomb/deltacomb_dc21_fbe060.inst.cfg index 58973f0fbd..af3db3f343 100755 --- a/resources/variants/deltacomb/deltacomb_dc21_fbe060.inst.cfg +++ b/resources/variants/deltacomb/deltacomb_dc21_fbe060.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = deltacomb_dc21 [metadata] -setting_version = 11 +setting_version = 13 type = variant hardware_type = nozzle diff --git a/resources/variants/deltacomb/deltacomb_dc21_vfbe080.inst.cfg b/resources/variants/deltacomb/deltacomb_dc21_vfbe080.inst.cfg index 63d8760ac3..0a79a90704 100755 --- a/resources/variants/deltacomb/deltacomb_dc21_vfbe080.inst.cfg +++ b/resources/variants/deltacomb/deltacomb_dc21_vfbe080.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = deltacomb_dc21 [metadata] -setting_version = 11 +setting_version = 13 type = variant hardware_type = nozzle diff --git a/resources/variants/deltacomb/deltacomb_dc21dual_dbe025.inst.cfg b/resources/variants/deltacomb/deltacomb_dc21dual_dbe025.inst.cfg index fb9376641a..4c514efc37 100755 --- a/resources/variants/deltacomb/deltacomb_dc21dual_dbe025.inst.cfg +++ b/resources/variants/deltacomb/deltacomb_dc21dual_dbe025.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = deltacomb_dc21dual [metadata] -setting_version = 11 +setting_version = 13 type = variant hardware_type = nozzle diff --git a/resources/variants/deltacomb/deltacomb_dc21dual_dbe040.inst.cfg b/resources/variants/deltacomb/deltacomb_dc21dual_dbe040.inst.cfg index d01bf0cf05..8373472653 100755 --- a/resources/variants/deltacomb/deltacomb_dc21dual_dbe040.inst.cfg +++ b/resources/variants/deltacomb/deltacomb_dc21dual_dbe040.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = deltacomb_dc21dual [metadata] -setting_version = 11 +setting_version = 13 type = variant hardware_type = nozzle diff --git a/resources/variants/deltacomb/deltacomb_dc21dual_dbe060.inst.cfg b/resources/variants/deltacomb/deltacomb_dc21dual_dbe060.inst.cfg index a60446b6fb..b0a533b9d9 100755 --- a/resources/variants/deltacomb/deltacomb_dc21dual_dbe060.inst.cfg +++ b/resources/variants/deltacomb/deltacomb_dc21dual_dbe060.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = deltacomb_dc21dual [metadata] -setting_version = 11 +setting_version = 13 type = variant hardware_type = nozzle diff --git a/resources/variants/deltacomb/deltacomb_dc21dual_vdbe080.inst.cfg b/resources/variants/deltacomb/deltacomb_dc21dual_vdbe080.inst.cfg index 083ede8845..9b5dc79aee 100755 --- a/resources/variants/deltacomb/deltacomb_dc21dual_vdbe080.inst.cfg +++ b/resources/variants/deltacomb/deltacomb_dc21dual_vdbe080.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = deltacomb_dc21dual [metadata] -setting_version = 11 +setting_version = 13 type = variant hardware_type = nozzle diff --git a/resources/variants/deltacomb/deltacomb_dc21flux_fbe025.inst.cfg b/resources/variants/deltacomb/deltacomb_dc21flux_fbe025.inst.cfg index 5195fd5555..e5c25307af 100755 --- a/resources/variants/deltacomb/deltacomb_dc21flux_fbe025.inst.cfg +++ b/resources/variants/deltacomb/deltacomb_dc21flux_fbe025.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = deltacomb_dc21flux [metadata] -setting_version = 11 +setting_version = 13 type = variant hardware_type = nozzle diff --git a/resources/variants/deltacomb/deltacomb_dc21flux_fbe040.inst.cfg b/resources/variants/deltacomb/deltacomb_dc21flux_fbe040.inst.cfg index 15f23cc20f..1fd02e6a33 100755 --- a/resources/variants/deltacomb/deltacomb_dc21flux_fbe040.inst.cfg +++ b/resources/variants/deltacomb/deltacomb_dc21flux_fbe040.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = deltacomb_dc21flux [metadata] -setting_version = 11 +setting_version = 13 type = variant hardware_type = nozzle diff --git a/resources/variants/deltacomb/deltacomb_dc21flux_fbe060.inst.cfg b/resources/variants/deltacomb/deltacomb_dc21flux_fbe060.inst.cfg index 90a04e58ac..79d7ce9561 100755 --- a/resources/variants/deltacomb/deltacomb_dc21flux_fbe060.inst.cfg +++ b/resources/variants/deltacomb/deltacomb_dc21flux_fbe060.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = deltacomb_dc21flux [metadata] -setting_version = 11 +setting_version = 13 type = variant hardware_type = nozzle diff --git a/resources/variants/deltacomb/deltacomb_dc30_fbe025.inst.cfg b/resources/variants/deltacomb/deltacomb_dc30_fbe025.inst.cfg index c3efcc3358..c4cdf4771b 100755 --- a/resources/variants/deltacomb/deltacomb_dc30_fbe025.inst.cfg +++ b/resources/variants/deltacomb/deltacomb_dc30_fbe025.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = deltacomb_dc30 [metadata] -setting_version = 11 +setting_version = 13 type = variant hardware_type = nozzle diff --git a/resources/variants/deltacomb/deltacomb_dc30_fbe040.inst.cfg b/resources/variants/deltacomb/deltacomb_dc30_fbe040.inst.cfg index f9e7d52ca0..e80b95d8b1 100755 --- a/resources/variants/deltacomb/deltacomb_dc30_fbe040.inst.cfg +++ b/resources/variants/deltacomb/deltacomb_dc30_fbe040.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = deltacomb_dc30 [metadata] -setting_version = 11 +setting_version = 13 type = variant hardware_type = nozzle diff --git a/resources/variants/deltacomb/deltacomb_dc30_fbe060.inst.cfg b/resources/variants/deltacomb/deltacomb_dc30_fbe060.inst.cfg index 74426f7c8c..cd7695b4cd 100755 --- a/resources/variants/deltacomb/deltacomb_dc30_fbe060.inst.cfg +++ b/resources/variants/deltacomb/deltacomb_dc30_fbe060.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = deltacomb_dc30 [metadata] -setting_version = 11 +setting_version = 13 type = variant hardware_type = nozzle diff --git a/resources/variants/deltacomb/deltacomb_dc30_vfbe080.inst.cfg b/resources/variants/deltacomb/deltacomb_dc30_vfbe080.inst.cfg index 4e67934b8b..a322c76681 100755 --- a/resources/variants/deltacomb/deltacomb_dc30_vfbe080.inst.cfg +++ b/resources/variants/deltacomb/deltacomb_dc30_vfbe080.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = deltacomb_dc30 [metadata] -setting_version = 11 +setting_version = 13 type = variant hardware_type = nozzle diff --git a/resources/variants/deltacomb/deltacomb_dc30dual_dbe025.inst.cfg b/resources/variants/deltacomb/deltacomb_dc30dual_dbe025.inst.cfg index 34e1657535..1c97943793 100755 --- a/resources/variants/deltacomb/deltacomb_dc30dual_dbe025.inst.cfg +++ b/resources/variants/deltacomb/deltacomb_dc30dual_dbe025.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = deltacomb_dc30dual [metadata] -setting_version = 11 +setting_version = 13 type = variant hardware_type = nozzle diff --git a/resources/variants/deltacomb/deltacomb_dc30dual_dbe040.inst.cfg b/resources/variants/deltacomb/deltacomb_dc30dual_dbe040.inst.cfg index 6652decd42..ea56a88fbf 100755 --- a/resources/variants/deltacomb/deltacomb_dc30dual_dbe040.inst.cfg +++ b/resources/variants/deltacomb/deltacomb_dc30dual_dbe040.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = deltacomb_dc30dual [metadata] -setting_version = 11 +setting_version = 13 type = variant hardware_type = nozzle diff --git a/resources/variants/deltacomb/deltacomb_dc30dual_dbe060.inst.cfg b/resources/variants/deltacomb/deltacomb_dc30dual_dbe060.inst.cfg index 52adc09b3f..63e8ffbde6 100755 --- a/resources/variants/deltacomb/deltacomb_dc30dual_dbe060.inst.cfg +++ b/resources/variants/deltacomb/deltacomb_dc30dual_dbe060.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = deltacomb_dc30dual [metadata] -setting_version = 11 +setting_version = 13 type = variant hardware_type = nozzle diff --git a/resources/variants/deltacomb/deltacomb_dc30dual_vdbe080.inst.cfg b/resources/variants/deltacomb/deltacomb_dc30dual_vdbe080.inst.cfg index e867aba5e9..380677fe19 100755 --- a/resources/variants/deltacomb/deltacomb_dc30dual_vdbe080.inst.cfg +++ b/resources/variants/deltacomb/deltacomb_dc30dual_vdbe080.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = deltacomb_dc30dual [metadata] -setting_version = 11 +setting_version = 13 type = variant hardware_type = nozzle diff --git a/resources/variants/deltacomb/deltacomb_dc30flux_fbe025.inst.cfg b/resources/variants/deltacomb/deltacomb_dc30flux_fbe025.inst.cfg index b86762ddb2..824f20b104 100755 --- a/resources/variants/deltacomb/deltacomb_dc30flux_fbe025.inst.cfg +++ b/resources/variants/deltacomb/deltacomb_dc30flux_fbe025.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = deltacomb_dc30flux [metadata] -setting_version = 11 +setting_version = 13 type = variant hardware_type = nozzle diff --git a/resources/variants/deltacomb/deltacomb_dc30flux_fbe040.inst.cfg b/resources/variants/deltacomb/deltacomb_dc30flux_fbe040.inst.cfg index 4242b45a12..bb11cbc085 100755 --- a/resources/variants/deltacomb/deltacomb_dc30flux_fbe040.inst.cfg +++ b/resources/variants/deltacomb/deltacomb_dc30flux_fbe040.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = deltacomb_dc30flux [metadata] -setting_version = 11 +setting_version = 13 type = variant hardware_type = nozzle diff --git a/resources/variants/deltacomb/deltacomb_dc30flux_fbe060.inst.cfg b/resources/variants/deltacomb/deltacomb_dc30flux_fbe060.inst.cfg index 6efb0f163b..04fde6b446 100755 --- a/resources/variants/deltacomb/deltacomb_dc30flux_fbe060.inst.cfg +++ b/resources/variants/deltacomb/deltacomb_dc30flux_fbe060.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = deltacomb_dc30flux [metadata] -setting_version = 11 +setting_version = 13 type = variant hardware_type = nozzle From a5b4b15ae4826785118dabe99cf4217cc17c7dbd Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Wed, 8 Apr 2020 01:58:03 +0200 Subject: [PATCH 012/116] Add theoretical upgrade for definition changes It's a LOT more work than I thought, because the new printer has 4 extruders instead of 2. That means that files have to be copied for the other two extruders. A big hassle. --- .../VersionUpgrade46to47.py | 48 +++++++++++++++++++ .../VersionUpgrade46to47/__init__.py | 2 +- 2 files changed, 49 insertions(+), 1 deletion(-) diff --git a/plugins/VersionUpgrade/VersionUpgrade46to47/VersionUpgrade46to47.py b/plugins/VersionUpgrade/VersionUpgrade46to47/VersionUpgrade46to47.py index a8a4142dfc..54d92433d9 100644 --- a/plugins/VersionUpgrade/VersionUpgrade46to47/VersionUpgrade46to47.py +++ b/plugins/VersionUpgrade/VersionUpgrade46to47/VersionUpgrade46to47.py @@ -2,6 +2,7 @@ # Cura is released under the terms of the LGPLv3 or higher. import configparser +import copy # To split up files. from typing import Tuple, List import io from UM.VersionUpgrade import VersionUpgrade @@ -32,6 +33,53 @@ class VersionUpgrade46to47(VersionUpgrade): parser.write(result) return [filename], [result.getvalue()] + def upgradeDefinitionChanges(self, serialized: str, filename: str) -> Tuple[List[str], List[str]]: + """ + Upgrades definition changes files to the new version number. + + This applies all of the changes that are applied in other instance + containers as well. + + In the case of Deltacomb printers, it splits the 2 extruder definition + changes into 4. + :param serialized: The original contents of the instance container. + :param filename: The original file name of the instance container. + :return: A list of new file names, and a list of the new contents for + those files. + """ + parser = configparser.ConfigParser(interpolation = None, comment_prefixes = ()) + parser.read_string(serialized) + results = [(parser, filename)] + + if "general" in parser and "definition" in parser["general"]: + if parser["general"]["definition"] == "deltacomb_extruder_0": + parser["general"]["definition"] = "deltacomb_base_extruder_0" + elif parser["general"]["definition"] == "deltacomb_extruder_1": # Split up the second Deltacomb extruder into 3, creating an extra two extruders. + third_extruder_changes = copy.copy(parser) + fourth_extruder_changes = copy.copy(parser) + + parser["general"]["definition"] = "deltacomb_base_extruder_1" + third_extruder_changes["general"]["definition"] = "deltacomb_base_extruder_2" + fourth_extruder_changes["general"]["definition"] = "deltacomb_base_extruder_3" + results.append((third_extruder_changes, filename + "_e2_upgrade")) # Hopefully not already taken. + results.append((fourth_extruder_changes, filename + "_e3_upgrade")) # Hopefully not already taken. + elif parser["general"]["definition"] == "deltacomb": # Global stack. + parser["general"]["definition"] = "deltacomb_dc20" + + # Now go upgrade with the generic instance container method. + final_serialised = [] + final_filenames = [] + for result_parser, result_filename in results: + result_ss = io.StringIO() + result_parser.write(result_ss) + result_serialised = result_ss.getvalue() + # The upgrade function itself might also return multiple files, so we need to append all of those into the final list. + this_filenames_upgraded, this_serialised_upgraded = self.upgradeInstanceContainer(result_serialised, result_filename) + final_serialised += this_serialised_upgraded + final_filenames += this_filenames_upgraded + + return final_filenames, final_serialised + def upgradeInstanceContainer(self, serialized: str, filename: str) -> Tuple[List[str], List[str]]: """ Upgrades instance containers to have the new version number. diff --git a/plugins/VersionUpgrade/VersionUpgrade46to47/__init__.py b/plugins/VersionUpgrade/VersionUpgrade46to47/__init__.py index 93dfb69ffe..288fe8c164 100644 --- a/plugins/VersionUpgrade/VersionUpgrade46to47/__init__.py +++ b/plugins/VersionUpgrade/VersionUpgrade46to47/__init__.py @@ -17,7 +17,7 @@ def getMetaData() -> Dict[str, Any]: ("preferences", 6000012): ("preferences", 6000013, upgrade.upgradePreferences), ("machine_stack", 4000012): ("machine_stack", 4000013, upgrade.upgradeStack), ("extruder_train", 4000012): ("extruder_train", 4000013, upgrade.upgradeStack), - ("definition_changes", 4000012): ("definition_changes", 4000013, upgrade.upgradeInstanceContainer), + ("definition_changes", 4000012): ("definition_changes", 4000013, upgrade.upgradeDefinitionChanges), ("quality_changes", 4000012): ("quality_changes", 4000013, upgrade.upgradeInstanceContainer), ("quality", 4000012): ("quality", 4000013, upgrade.upgradeInstanceContainer), ("user", 4000012): ("user", 4000013, upgrade.upgradeInstanceContainer), From 2410d051003681b28798ea7f04961f1ad28ccc70 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Thu, 9 Apr 2020 01:04:53 +0200 Subject: [PATCH 013/116] Upgrade extruder stacks Stupid stuff. All of these containers need to be copied. It's not possible to work this out for all materials properly, since we can't read into these materials what their GUIDs and material types are. --- .../VersionUpgrade46to47.py | 67 +++++++++++++++++-- resources/definitions/deltacomb_base.def.json | 2 +- 2 files changed, 63 insertions(+), 6 deletions(-) diff --git a/plugins/VersionUpgrade/VersionUpgrade46to47/VersionUpgrade46to47.py b/plugins/VersionUpgrade/VersionUpgrade46to47/VersionUpgrade46to47.py index 54d92433d9..ba3bd0ed85 100644 --- a/plugins/VersionUpgrade/VersionUpgrade46to47/VersionUpgrade46to47.py +++ b/plugins/VersionUpgrade/VersionUpgrade46to47/VersionUpgrade46to47.py @@ -7,6 +7,28 @@ from typing import Tuple, List import io from UM.VersionUpgrade import VersionUpgrade +renamed_nozzles = { + "deltacomb_025_e3d": "deltacomb_dc20_fbe025", + "deltacomb_040_e3d": "deltacomb_dc20_fbe040", + "deltacomb_080_e3d": "deltacomb_dc20_vfbe080" +} +default_qualities_per_nozzle_and_material = { # Can't define defaults for user-defined materials, since we only have the material ID. Those will get reset to empty quality :( + "deltacomb_dc20_fbe025": { + "generic_pla_175": "deltacomb_FBE0.25_PLA_C", + "generic_abs_175": "deltacomb_FBE0.25_ABS_C" + }, + "deltacomb_dc20_fbe040": { + "generic_pla_175": "deltacomb_FBE0.40_PLA_C", + "generic_abs_175": "deltacomb_FBE0.40_ABS_C", + "generic_petg_175": "deltacomb_FBE0.40_PETG_C", + "generic_tpu_175": "deltacomb_FBE0.40_TPU_C" + }, + "deltacomb_dc20_vfbe080": { + "generic_pla_175": "deltacomb_VFBE0.80_PLA_D", + "generic_abs_175": "deltacomb_VFBE0.80_ABS_D" + } +} + class VersionUpgrade46to47(VersionUpgrade): def getCfgVersion(self, serialised: str) -> int: parser = configparser.ConfigParser(interpolation = None) @@ -61,8 +83,8 @@ class VersionUpgrade46to47(VersionUpgrade): parser["general"]["definition"] = "deltacomb_base_extruder_1" third_extruder_changes["general"]["definition"] = "deltacomb_base_extruder_2" fourth_extruder_changes["general"]["definition"] = "deltacomb_base_extruder_3" - results.append((third_extruder_changes, filename + "_e2_upgrade")) # Hopefully not already taken. - results.append((fourth_extruder_changes, filename + "_e3_upgrade")) # Hopefully not already taken. + results.append((third_extruder_changes, filename[:-len(".inst.cfg")] + "_e2_upgrade.inst.cfg")) # Hopefully not already taken. + results.append((fourth_extruder_changes, filename[:-len(".inst.cfg")] + "_e3_upgrade.inst.cfg")) # Hopefully not already taken. elif parser["general"]["definition"] == "deltacomb": # Global stack. parser["general"]["definition"] = "deltacomb_dc20" @@ -116,6 +138,9 @@ class VersionUpgrade46to47(VersionUpgrade): def upgradeStack(self, serialized: str, filename: str) -> Tuple[List[str], List[str]]: """ Upgrades stacks to have the new version number. + + This upgrades Deltacomb printers to their new profile structure, and + gives them 4 extruders. :param serialized: The original contents of the stack. :param filename: The original file name of the stack. :return: A list of new file names, and a list of the new contents for @@ -123,12 +148,44 @@ class VersionUpgrade46to47(VersionUpgrade): """ parser = configparser.ConfigParser(interpolation = None) parser.read_string(serialized) + result_parsers = [parser] + result_filenames = [filename] # Update version number. if "metadata" not in parser: parser["metadata"] = {} parser["metadata"]["setting_version"] = "13" - result = io.StringIO() - parser.write(result) - return [filename], [result.getvalue()] + if "containers" in parser and "7" in parser["containers"]: + if parser["containers"]["7"] == "deltacomb_extruder_0" or parser["containers"]["7"] == "deltacomb_extruder_1": + if "5" in parser["containers"]: + parser["containers"]["5"] = renamed_nozzles.get(parser["containers"]["5"], default = parser["containers"]["5"]) + if "3" in parser["containers"] and "4" in parser["containers"] and parser["containers"]["3"] == "empty_quality": + parser["containers"]["3"] = default_qualities_per_nozzle_and_material[parser["containers"]["5"]].get(parser["containers"]["4"], "empty_quality") + if parser["containers"]["7"] == "deltacomb_extruder_1": + parser["containers"]["7"] = "deltacomb_base_extruder_1" + else: + parser["containers"]["7"] = "deltacomb_base_extruder_0" + # Copy this extruder to extruder 3 and 4. + extruder3 = copy.copy(parser) + extruder3["metadata"]["position"] = "2" + extruder3["containers"]["0"] += "_e2_upgrade" + extruder3["containers"]["6"] += "_e2_upgrade" + extruder3["containers"]["7"] = "deltacomb_base_extuder_2" + result_parsers.append(extruder3) + result_filenames.append(filename[:-len(".extruder.cfg")] + "_e2_upgrade.extruder.cfg") + extruder4 = copy.copy(parser) + extruder4["metadata"]["position"] = "3" + extruder4["containers"]["0"] += ".inst.cfg_e3_upgrade" + extruder4["containers"]["6"] += ".inst.cfg_e3_upgrade" + extruder4["containers"]["7"] = "deltacomb_base_extruder_3" + result_parsers.append(extruder4) + result_filenames.append(filename[:-len(".extruder.cfg")] + "_e3_upgrade.extruder.cfg") + + result_serialized = [] + for result_parser in result_parsers: + result_ss = io.StringIO() + result_parser.write(result_ss) + result_serialized.append(result_ss.getvalue()) + + return result_filenames, result_serialized diff --git a/resources/definitions/deltacomb_base.def.json b/resources/definitions/deltacomb_base.def.json index d9baeca21f..68d8e4aaa3 100755 --- a/resources/definitions/deltacomb_base.def.json +++ b/resources/definitions/deltacomb_base.def.json @@ -22,7 +22,7 @@ "1": "deltacomb_base_extruder_1", "2": "deltacomb_base_extruder_2", "3": "deltacomb_base_extruder_3" - } + } }, "overrides": { From 18ebdfafb7be2db3f3143a01c005a8ed0f6516e1 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Thu, 9 Apr 2020 01:23:11 +0200 Subject: [PATCH 014/116] Upgrade other per-extruder instance containers too Global instance containers will also go through this function but won't get picked out by the if statement here. --- .../VersionUpgrade46to47/VersionUpgrade46to47.py | 14 ++++++++------ .../VersionUpgrade46to47/__init__.py | 8 ++++---- 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/plugins/VersionUpgrade/VersionUpgrade46to47/VersionUpgrade46to47.py b/plugins/VersionUpgrade/VersionUpgrade46to47/VersionUpgrade46to47.py index ba3bd0ed85..b5eee0c9ce 100644 --- a/plugins/VersionUpgrade/VersionUpgrade46to47/VersionUpgrade46to47.py +++ b/plugins/VersionUpgrade/VersionUpgrade46to47/VersionUpgrade46to47.py @@ -55,15 +55,15 @@ class VersionUpgrade46to47(VersionUpgrade): parser.write(result) return [filename], [result.getvalue()] - def upgradeDefinitionChanges(self, serialized: str, filename: str) -> Tuple[List[str], List[str]]: + def upgradeExtruderInstanceContainer(self, serialized: str, filename: str) -> Tuple[List[str], List[str]]: """ - Upgrades definition changes files to the new version number. + Upgrades per-extruder instance containers to the new version number. This applies all of the changes that are applied in other instance containers as well. - In the case of Deltacomb printers, it splits the 2 extruder definition - changes into 4. + In the case of Deltacomb printers, it splits the 2 extruders into 4 and + changes the definition. :param serialized: The original contents of the instance container. :param filename: The original file name of the instance container. :return: A list of new file names, and a list of the new contents for @@ -170,14 +170,16 @@ class VersionUpgrade46to47(VersionUpgrade): extruder3 = copy.copy(parser) extruder3["metadata"]["position"] = "2" extruder3["containers"]["0"] += "_e2_upgrade" + extruder3["containers"]["1"] += "_e2_upgrade" extruder3["containers"]["6"] += "_e2_upgrade" extruder3["containers"]["7"] = "deltacomb_base_extuder_2" result_parsers.append(extruder3) result_filenames.append(filename[:-len(".extruder.cfg")] + "_e2_upgrade.extruder.cfg") extruder4 = copy.copy(parser) extruder4["metadata"]["position"] = "3" - extruder4["containers"]["0"] += ".inst.cfg_e3_upgrade" - extruder4["containers"]["6"] += ".inst.cfg_e3_upgrade" + extruder4["containers"]["0"] += "_e3_upgrade" + extruder4["containers"]["1"] += "_e3_upgrade" + extruder4["containers"]["6"] += "_e3_upgrade" extruder4["containers"]["7"] = "deltacomb_base_extruder_3" result_parsers.append(extruder4) result_filenames.append(filename[:-len(".extruder.cfg")] + "_e3_upgrade.extruder.cfg") diff --git a/plugins/VersionUpgrade/VersionUpgrade46to47/__init__.py b/plugins/VersionUpgrade/VersionUpgrade46to47/__init__.py index 288fe8c164..fc253989fa 100644 --- a/plugins/VersionUpgrade/VersionUpgrade46to47/__init__.py +++ b/plugins/VersionUpgrade/VersionUpgrade46to47/__init__.py @@ -17,10 +17,10 @@ def getMetaData() -> Dict[str, Any]: ("preferences", 6000012): ("preferences", 6000013, upgrade.upgradePreferences), ("machine_stack", 4000012): ("machine_stack", 4000013, upgrade.upgradeStack), ("extruder_train", 4000012): ("extruder_train", 4000013, upgrade.upgradeStack), - ("definition_changes", 4000012): ("definition_changes", 4000013, upgrade.upgradeDefinitionChanges), - ("quality_changes", 4000012): ("quality_changes", 4000013, upgrade.upgradeInstanceContainer), - ("quality", 4000012): ("quality", 4000013, upgrade.upgradeInstanceContainer), - ("user", 4000012): ("user", 4000013, upgrade.upgradeInstanceContainer), + ("definition_changes", 4000012): ("definition_changes", 4000013, upgrade.upgradeExtruderInstanceContainer), + ("quality_changes", 4000012): ("quality_changes", 4000013, upgrade.upgradeExtruderInstanceContainer), + ("quality", 4000012): ("quality", 4000013, upgrade.upgradeExtruderInstanceContainer), + ("user", 4000012): ("user", 4000013, upgrade.upgradeExtruderInstanceContainer), }, "sources": { "preferences": { From 40cb3e37a9e256d48003a3cef97e3752f5344987 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Thu, 9 Apr 2020 01:48:15 +0200 Subject: [PATCH 015/116] Also actually update global stacks for Deltacomb Really hope that this works. --- .../VersionUpgrade46to47/VersionUpgrade46to47.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/plugins/VersionUpgrade/VersionUpgrade46to47/VersionUpgrade46to47.py b/plugins/VersionUpgrade/VersionUpgrade46to47/VersionUpgrade46to47.py index b5eee0c9ce..c2ab6e13a5 100644 --- a/plugins/VersionUpgrade/VersionUpgrade46to47/VersionUpgrade46to47.py +++ b/plugins/VersionUpgrade/VersionUpgrade46to47/VersionUpgrade46to47.py @@ -157,7 +157,7 @@ class VersionUpgrade46to47(VersionUpgrade): parser["metadata"]["setting_version"] = "13" if "containers" in parser and "7" in parser["containers"]: - if parser["containers"]["7"] == "deltacomb_extruder_0" or parser["containers"]["7"] == "deltacomb_extruder_1": + if parser["containers"]["7"] == "deltacomb_extruder_0" or parser["containers"]["7"] == "deltacomb_extruder_1": # Extruder stack. if "5" in parser["containers"]: parser["containers"]["5"] = renamed_nozzles.get(parser["containers"]["5"], default = parser["containers"]["5"]) if "3" in parser["containers"] and "4" in parser["containers"] and parser["containers"]["3"] == "empty_quality": @@ -183,6 +183,9 @@ class VersionUpgrade46to47(VersionUpgrade): extruder4["containers"]["7"] = "deltacomb_base_extruder_3" result_parsers.append(extruder4) result_filenames.append(filename[:-len(".extruder.cfg")] + "_e3_upgrade.extruder.cfg") + elif parser["containers"]["7"] == "deltacomb": # Global stack. + parser["containers"]["7"] = "deltacomb_dc20" + parser["containers"]["3"] = "deltacomb_global_C" result_serialized = [] for result_parser in result_parsers: From accf080fb6e8dfac91f236c515c223d0799e92ab Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Thu, 9 Apr 2020 21:22:06 +0200 Subject: [PATCH 016/116] Don't use default= kwarg for dictionary .get function It doesn't accept key word arguments. --- .../VersionUpgrade/VersionUpgrade46to47/VersionUpgrade46to47.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/VersionUpgrade/VersionUpgrade46to47/VersionUpgrade46to47.py b/plugins/VersionUpgrade/VersionUpgrade46to47/VersionUpgrade46to47.py index c2ab6e13a5..b7b1ee3a16 100644 --- a/plugins/VersionUpgrade/VersionUpgrade46to47/VersionUpgrade46to47.py +++ b/plugins/VersionUpgrade/VersionUpgrade46to47/VersionUpgrade46to47.py @@ -159,7 +159,7 @@ class VersionUpgrade46to47(VersionUpgrade): if "containers" in parser and "7" in parser["containers"]: if parser["containers"]["7"] == "deltacomb_extruder_0" or parser["containers"]["7"] == "deltacomb_extruder_1": # Extruder stack. if "5" in parser["containers"]: - parser["containers"]["5"] = renamed_nozzles.get(parser["containers"]["5"], default = parser["containers"]["5"]) + parser["containers"]["5"] = renamed_nozzles.get(parser["containers"]["5"], parser["containers"]["5"]) if "3" in parser["containers"] and "4" in parser["containers"] and parser["containers"]["3"] == "empty_quality": parser["containers"]["3"] = default_qualities_per_nozzle_and_material[parser["containers"]["5"]].get(parser["containers"]["4"], "empty_quality") if parser["containers"]["7"] == "deltacomb_extruder_1": From 4bdea50fd595e935c5fd5835579a3a5df5fa683e Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Thu, 9 Apr 2020 21:26:35 +0200 Subject: [PATCH 017/116] Use deepcopies rather than copies to copy parsers Turns out that the parsers apparently refer to a lot of subobjects which are crucial here, and they don't implement the normal copy well. Deepcopy it is then. --- .../VersionUpgrade46to47/VersionUpgrade46to47.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/plugins/VersionUpgrade/VersionUpgrade46to47/VersionUpgrade46to47.py b/plugins/VersionUpgrade/VersionUpgrade46to47/VersionUpgrade46to47.py index b7b1ee3a16..de834202f9 100644 --- a/plugins/VersionUpgrade/VersionUpgrade46to47/VersionUpgrade46to47.py +++ b/plugins/VersionUpgrade/VersionUpgrade46to47/VersionUpgrade46to47.py @@ -77,8 +77,8 @@ class VersionUpgrade46to47(VersionUpgrade): if parser["general"]["definition"] == "deltacomb_extruder_0": parser["general"]["definition"] = "deltacomb_base_extruder_0" elif parser["general"]["definition"] == "deltacomb_extruder_1": # Split up the second Deltacomb extruder into 3, creating an extra two extruders. - third_extruder_changes = copy.copy(parser) - fourth_extruder_changes = copy.copy(parser) + third_extruder_changes = copy.deepcopy(parser) + fourth_extruder_changes = copy.deepcopy(parser) parser["general"]["definition"] = "deltacomb_base_extruder_1" third_extruder_changes["general"]["definition"] = "deltacomb_base_extruder_2" @@ -167,7 +167,7 @@ class VersionUpgrade46to47(VersionUpgrade): else: parser["containers"]["7"] = "deltacomb_base_extruder_0" # Copy this extruder to extruder 3 and 4. - extruder3 = copy.copy(parser) + extruder3 = copy.deepcopy(parser) extruder3["metadata"]["position"] = "2" extruder3["containers"]["0"] += "_e2_upgrade" extruder3["containers"]["1"] += "_e2_upgrade" @@ -175,7 +175,7 @@ class VersionUpgrade46to47(VersionUpgrade): extruder3["containers"]["7"] = "deltacomb_base_extuder_2" result_parsers.append(extruder3) result_filenames.append(filename[:-len(".extruder.cfg")] + "_e2_upgrade.extruder.cfg") - extruder4 = copy.copy(parser) + extruder4 = copy.deepcopy(parser) extruder4["metadata"]["position"] = "3" extruder4["containers"]["0"] += "_e3_upgrade" extruder4["containers"]["1"] += "_e3_upgrade" From e38b79fe35abe516050642036885c9ff8ef62f6b Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Thu, 9 Apr 2020 21:36:28 +0200 Subject: [PATCH 018/116] Filenames don't include an extension That makes this a lot easier actually. --- .../VersionUpgrade46to47/VersionUpgrade46to47.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/plugins/VersionUpgrade/VersionUpgrade46to47/VersionUpgrade46to47.py b/plugins/VersionUpgrade/VersionUpgrade46to47/VersionUpgrade46to47.py index de834202f9..cd1b623342 100644 --- a/plugins/VersionUpgrade/VersionUpgrade46to47/VersionUpgrade46to47.py +++ b/plugins/VersionUpgrade/VersionUpgrade46to47/VersionUpgrade46to47.py @@ -83,8 +83,8 @@ class VersionUpgrade46to47(VersionUpgrade): parser["general"]["definition"] = "deltacomb_base_extruder_1" third_extruder_changes["general"]["definition"] = "deltacomb_base_extruder_2" fourth_extruder_changes["general"]["definition"] = "deltacomb_base_extruder_3" - results.append((third_extruder_changes, filename[:-len(".inst.cfg")] + "_e2_upgrade.inst.cfg")) # Hopefully not already taken. - results.append((fourth_extruder_changes, filename[:-len(".inst.cfg")] + "_e3_upgrade.inst.cfg")) # Hopefully not already taken. + results.append((third_extruder_changes, filename + "_e2_upgrade")) # Hopefully not already taken. + results.append((fourth_extruder_changes, filename + "_e3_upgrade")) # Hopefully not already taken. elif parser["general"]["definition"] == "deltacomb": # Global stack. parser["general"]["definition"] = "deltacomb_dc20" @@ -174,7 +174,7 @@ class VersionUpgrade46to47(VersionUpgrade): extruder3["containers"]["6"] += "_e2_upgrade" extruder3["containers"]["7"] = "deltacomb_base_extuder_2" result_parsers.append(extruder3) - result_filenames.append(filename[:-len(".extruder.cfg")] + "_e2_upgrade.extruder.cfg") + result_filenames.append(filename + "_e2_upgrade") extruder4 = copy.deepcopy(parser) extruder4["metadata"]["position"] = "3" extruder4["containers"]["0"] += "_e3_upgrade" @@ -182,7 +182,7 @@ class VersionUpgrade46to47(VersionUpgrade): extruder4["containers"]["6"] += "_e3_upgrade" extruder4["containers"]["7"] = "deltacomb_base_extruder_3" result_parsers.append(extruder4) - result_filenames.append(filename[:-len(".extruder.cfg")] + "_e3_upgrade.extruder.cfg") + result_filenames.append(filename + "_e3_upgrade") elif parser["containers"]["7"] == "deltacomb": # Global stack. parser["containers"]["7"] = "deltacomb_dc20" parser["containers"]["3"] = "deltacomb_global_C" From 519d28a142b6426bcc62f6765de90f97282ce516 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Thu, 9 Apr 2020 21:52:23 +0200 Subject: [PATCH 019/116] Fix upgrading user containers, which list the printer definition rather than the extruder --- .../VersionUpgrade46to47.py | 22 +++++++++++++------ 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/plugins/VersionUpgrade/VersionUpgrade46to47/VersionUpgrade46to47.py b/plugins/VersionUpgrade/VersionUpgrade46to47/VersionUpgrade46to47.py index cd1b623342..2022821960 100644 --- a/plugins/VersionUpgrade/VersionUpgrade46to47/VersionUpgrade46to47.py +++ b/plugins/VersionUpgrade/VersionUpgrade46to47/VersionUpgrade46to47.py @@ -77,17 +77,25 @@ class VersionUpgrade46to47(VersionUpgrade): if parser["general"]["definition"] == "deltacomb_extruder_0": parser["general"]["definition"] = "deltacomb_base_extruder_0" elif parser["general"]["definition"] == "deltacomb_extruder_1": # Split up the second Deltacomb extruder into 3, creating an extra two extruders. - third_extruder_changes = copy.deepcopy(parser) - fourth_extruder_changes = copy.deepcopy(parser) + parser_e2 = copy.deepcopy(parser) + parser_e3 = copy.deepcopy(parser) parser["general"]["definition"] = "deltacomb_base_extruder_1" - third_extruder_changes["general"]["definition"] = "deltacomb_base_extruder_2" - fourth_extruder_changes["general"]["definition"] = "deltacomb_base_extruder_3" - results.append((third_extruder_changes, filename + "_e2_upgrade")) # Hopefully not already taken. - results.append((fourth_extruder_changes, filename + "_e3_upgrade")) # Hopefully not already taken. - elif parser["general"]["definition"] == "deltacomb": # Global stack. + parser_e2["general"]["definition"] = "deltacomb_base_extruder_2" + parser_e3["general"]["definition"] = "deltacomb_base_extruder_3" + results.append((parser_e2, filename + "_e2_upgrade")) # Hopefully not already taken. + results.append((parser_e3, filename + "_e3_upgrade")) + elif parser["general"]["definition"] == "deltacomb": # On the global stack OR the per-extruder user container. parser["general"]["definition"] = "deltacomb_dc20" + if "metadata" in parser and "extruder" in parser["metadata"]: # Per-extruder user container. + parser_e2 = copy.deepcopy(parser) + parser_e3 = copy.deepcopy(parser) + parser_e2["metadata"]["extruder"] += "_e2_upgrade" + parser_e3["metadata"]["extruder"] += "_e3_upgrade" + results.append((parser_e2, filename + "_e2_upgrade")) + results.append((parser_e3, filename + "_e3_upgrade")) + # Now go upgrade with the generic instance container method. final_serialised = [] final_filenames = [] From 851aef68bcc98ffeab7ca5c85086e45b5a7cb759 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Thu, 9 Apr 2020 21:54:22 +0200 Subject: [PATCH 020/116] Don't rename empty_quality_changes This one doesn't get duplicated since it doesn't actually list the Deltacomb printer. --- .../VersionUpgrade46to47/VersionUpgrade46to47.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/plugins/VersionUpgrade/VersionUpgrade46to47/VersionUpgrade46to47.py b/plugins/VersionUpgrade/VersionUpgrade46to47/VersionUpgrade46to47.py index 2022821960..9f83cab78d 100644 --- a/plugins/VersionUpgrade/VersionUpgrade46to47/VersionUpgrade46to47.py +++ b/plugins/VersionUpgrade/VersionUpgrade46to47/VersionUpgrade46to47.py @@ -178,7 +178,8 @@ class VersionUpgrade46to47(VersionUpgrade): extruder3 = copy.deepcopy(parser) extruder3["metadata"]["position"] = "2" extruder3["containers"]["0"] += "_e2_upgrade" - extruder3["containers"]["1"] += "_e2_upgrade" + if extruder3["containers"]["1"] != "empty_quality_changes": + extruder3["containers"]["1"] += "_e2_upgrade" extruder3["containers"]["6"] += "_e2_upgrade" extruder3["containers"]["7"] = "deltacomb_base_extuder_2" result_parsers.append(extruder3) @@ -186,7 +187,8 @@ class VersionUpgrade46to47(VersionUpgrade): extruder4 = copy.deepcopy(parser) extruder4["metadata"]["position"] = "3" extruder4["containers"]["0"] += "_e3_upgrade" - extruder4["containers"]["1"] += "_e3_upgrade" + if extruder4["containers"]["1"] != "empty_quality_changes": + extruder4["containers"]["1"] += "_e3_upgrade" extruder4["containers"]["6"] += "_e3_upgrade" extruder4["containers"]["7"] = "deltacomb_base_extruder_3" result_parsers.append(extruder4) From c8b6d7ec00a2aae77ea7d660e1acaf24fd748b06 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Thu, 9 Apr 2020 21:58:14 +0200 Subject: [PATCH 021/116] Extruder 1 got duplicated, not extruder 0 --- .../VersionUpgrade46to47/VersionUpgrade46to47.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/plugins/VersionUpgrade/VersionUpgrade46to47/VersionUpgrade46to47.py b/plugins/VersionUpgrade/VersionUpgrade46to47/VersionUpgrade46to47.py index 9f83cab78d..115a6c7c48 100644 --- a/plugins/VersionUpgrade/VersionUpgrade46to47/VersionUpgrade46to47.py +++ b/plugins/VersionUpgrade/VersionUpgrade46to47/VersionUpgrade46to47.py @@ -170,10 +170,10 @@ class VersionUpgrade46to47(VersionUpgrade): parser["containers"]["5"] = renamed_nozzles.get(parser["containers"]["5"], parser["containers"]["5"]) if "3" in parser["containers"] and "4" in parser["containers"] and parser["containers"]["3"] == "empty_quality": parser["containers"]["3"] = default_qualities_per_nozzle_and_material[parser["containers"]["5"]].get(parser["containers"]["4"], "empty_quality") - if parser["containers"]["7"] == "deltacomb_extruder_1": - parser["containers"]["7"] = "deltacomb_base_extruder_1" - else: + if parser["containers"]["7"] == "deltacomb_extruder_0": parser["containers"]["7"] = "deltacomb_base_extruder_0" + else: + parser["containers"]["7"] = "deltacomb_base_extruder_1" # Copy this extruder to extruder 3 and 4. extruder3 = copy.deepcopy(parser) extruder3["metadata"]["position"] = "2" From 45d3f8ca6abed983de872cf5724d5b24d0197f25 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Thu, 9 Apr 2020 22:12:30 +0200 Subject: [PATCH 022/116] Fix typo With this it's starting to look like something. It's no longer giving any corruption errors now with any of my test cases. However e1 is still being set to the definition of e3 for some reason. --- .../VersionUpgrade/VersionUpgrade46to47/VersionUpgrade46to47.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/VersionUpgrade/VersionUpgrade46to47/VersionUpgrade46to47.py b/plugins/VersionUpgrade/VersionUpgrade46to47/VersionUpgrade46to47.py index 115a6c7c48..455b5b4255 100644 --- a/plugins/VersionUpgrade/VersionUpgrade46to47/VersionUpgrade46to47.py +++ b/plugins/VersionUpgrade/VersionUpgrade46to47/VersionUpgrade46to47.py @@ -181,7 +181,7 @@ class VersionUpgrade46to47(VersionUpgrade): if extruder3["containers"]["1"] != "empty_quality_changes": extruder3["containers"]["1"] += "_e2_upgrade" extruder3["containers"]["6"] += "_e2_upgrade" - extruder3["containers"]["7"] = "deltacomb_base_extuder_2" + extruder3["containers"]["7"] = "deltacomb_base_extruder_2" result_parsers.append(extruder3) result_filenames.append(filename + "_e2_upgrade") extruder4 = copy.deepcopy(parser) From c51647026cb6f0916f797af8be1117708c8cfa7b Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Fri, 10 Apr 2020 00:28:27 +0200 Subject: [PATCH 023/116] Also make IDs unique Took me a while to see why Cura was confusing the extruder stacks. It worked fine during the actual upgrade itself. Then later after the start-up sequence it suddenly re-wrote them wrongly. Why is there an ID field in here? Shouldn't it just take the file name as the ID? Stupid! --- .../VersionUpgrade46to47.py | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/plugins/VersionUpgrade/VersionUpgrade46to47/VersionUpgrade46to47.py b/plugins/VersionUpgrade/VersionUpgrade46to47/VersionUpgrade46to47.py index 455b5b4255..d1e8fa28f0 100644 --- a/plugins/VersionUpgrade/VersionUpgrade46to47/VersionUpgrade46to47.py +++ b/plugins/VersionUpgrade/VersionUpgrade46to47/VersionUpgrade46to47.py @@ -156,8 +156,7 @@ class VersionUpgrade46to47(VersionUpgrade): """ parser = configparser.ConfigParser(interpolation = None) parser.read_string(serialized) - result_parsers = [parser] - result_filenames = [filename] + results = [(parser, filename)] # Update version number. if "metadata" not in parser: @@ -176,31 +175,35 @@ class VersionUpgrade46to47(VersionUpgrade): parser["containers"]["7"] = "deltacomb_base_extruder_1" # Copy this extruder to extruder 3 and 4. extruder3 = copy.deepcopy(parser) + extruder4 = copy.deepcopy(parser) + + extruder3["general"]["id"] += "_e2_upgrade" extruder3["metadata"]["position"] = "2" extruder3["containers"]["0"] += "_e2_upgrade" if extruder3["containers"]["1"] != "empty_quality_changes": extruder3["containers"]["1"] += "_e2_upgrade" extruder3["containers"]["6"] += "_e2_upgrade" extruder3["containers"]["7"] = "deltacomb_base_extruder_2" - result_parsers.append(extruder3) - result_filenames.append(filename + "_e2_upgrade") - extruder4 = copy.deepcopy(parser) + results.append((extruder3, filename + "_e2_upgrade")) + + extruder4["general"]["id"] += "_e3_upgrade" extruder4["metadata"]["position"] = "3" extruder4["containers"]["0"] += "_e3_upgrade" if extruder4["containers"]["1"] != "empty_quality_changes": extruder4["containers"]["1"] += "_e3_upgrade" extruder4["containers"]["6"] += "_e3_upgrade" extruder4["containers"]["7"] = "deltacomb_base_extruder_3" - result_parsers.append(extruder4) - result_filenames.append(filename + "_e3_upgrade") + results.append((extruder4, filename + "_e3_upgrade")) elif parser["containers"]["7"] == "deltacomb": # Global stack. parser["containers"]["7"] = "deltacomb_dc20" parser["containers"]["3"] = "deltacomb_global_C" result_serialized = [] - for result_parser in result_parsers: + result_filenames = [] + for result_parser, result_filename in results: result_ss = io.StringIO() result_parser.write(result_ss) result_serialized.append(result_ss.getvalue()) + result_filenames.append(result_filename) return result_filenames, result_serialized From 76f662fbfa24652890fcffb0dab3b26487120077 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Fri, 10 Apr 2020 00:34:03 +0200 Subject: [PATCH 024/116] Fix preferred quality type The quality type 'fast' doesn't exist for Deltacomb. I'm going to be choosing a quality type that is available for this printer which has the name 'Fast', which is quality type 'd'. --- resources/definitions/deltacomb_base.def.json | 4 ++-- resources/definitions/deltacomb_dc20flux.def.json | 2 +- resources/definitions/deltacomb_dc21flux.def.json | 2 +- resources/definitions/deltacomb_dc30flux.def.json | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/resources/definitions/deltacomb_base.def.json b/resources/definitions/deltacomb_base.def.json index 68d8e4aaa3..625f45f9c0 100755 --- a/resources/definitions/deltacomb_base.def.json +++ b/resources/definitions/deltacomb_base.def.json @@ -12,9 +12,9 @@ "has_machine_quality": true, "has_materials": true, "has_variants": true, - "variants_name": "Head", + "variants_name": "Head", - "preferred_quality_type": "fast", + "preferred_quality_type": "d", "preferred_material": "generic_pla", "machine_extruder_trains": { diff --git a/resources/definitions/deltacomb_dc20flux.def.json b/resources/definitions/deltacomb_dc20flux.def.json index 32af55d1d0..fdd4f77942 100644 --- a/resources/definitions/deltacomb_dc20flux.def.json +++ b/resources/definitions/deltacomb_dc20flux.def.json @@ -13,7 +13,7 @@ "1": "deltacomb_dc20flux_extruder_1", "2": "deltacomb_dc20flux_extruder_2", "3": "deltacomb_dc20flux_extruder_3" - } + } }, "overrides": { diff --git a/resources/definitions/deltacomb_dc21flux.def.json b/resources/definitions/deltacomb_dc21flux.def.json index 5744714f25..c6d20cb301 100644 --- a/resources/definitions/deltacomb_dc21flux.def.json +++ b/resources/definitions/deltacomb_dc21flux.def.json @@ -13,7 +13,7 @@ "1": "deltacomb_dc20flux_extruder_1", "2": "deltacomb_dc20flux_extruder_2", "3": "deltacomb_dc20flux_extruder_3" - } + } }, "overrides": { diff --git a/resources/definitions/deltacomb_dc30flux.def.json b/resources/definitions/deltacomb_dc30flux.def.json index 6af68547e4..3b2148d9b8 100644 --- a/resources/definitions/deltacomb_dc30flux.def.json +++ b/resources/definitions/deltacomb_dc30flux.def.json @@ -13,7 +13,7 @@ "1": "deltacomb_dc30flux_extruder_1", "2": "deltacomb_dc30flux_extruder_2", "3": "deltacomb_dc30flux_extruder_3" - } + } }, "overrides": { From 2e12cc1dc27dfff98e67dbde483d2c0aaf9e4789 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Fri, 10 Apr 2020 01:12:13 +0200 Subject: [PATCH 025/116] Fix missing typing and use American instead of pro'er Bri'ish American is Ultimaker's code style too. --- .../VersionUpgrade46to47/VersionUpgrade46to47.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/plugins/VersionUpgrade/VersionUpgrade46to47/VersionUpgrade46to47.py b/plugins/VersionUpgrade/VersionUpgrade46to47/VersionUpgrade46to47.py index d1e8fa28f0..dac7169678 100644 --- a/plugins/VersionUpgrade/VersionUpgrade46to47/VersionUpgrade46to47.py +++ b/plugins/VersionUpgrade/VersionUpgrade46to47/VersionUpgrade46to47.py @@ -97,18 +97,18 @@ class VersionUpgrade46to47(VersionUpgrade): results.append((parser_e3, filename + "_e3_upgrade")) # Now go upgrade with the generic instance container method. - final_serialised = [] - final_filenames = [] + final_serialized = [] # type: List[str] + final_filenames = [] # type: List[str] for result_parser, result_filename in results: result_ss = io.StringIO() result_parser.write(result_ss) - result_serialised = result_ss.getvalue() + result_serialized = result_ss.getvalue() # The upgrade function itself might also return multiple files, so we need to append all of those into the final list. - this_filenames_upgraded, this_serialised_upgraded = self.upgradeInstanceContainer(result_serialised, result_filename) - final_serialised += this_serialised_upgraded + this_filenames_upgraded, this_serialized_upgraded = self.upgradeInstanceContainer(result_serialized, result_filename) + final_serialized += this_serialized_upgraded final_filenames += this_filenames_upgraded - return final_filenames, final_serialised + return final_filenames, final_serialized def upgradeInstanceContainer(self, serialized: str, filename: str) -> Tuple[List[str], List[str]]: """ From 690eb4c04a19d6c24e96c81e78c75399999c2610 Mon Sep 17 00:00:00 2001 From: Mark Burton Date: Fri, 1 May 2020 07:44:45 +0100 Subject: [PATCH 026/116] Make Infill Line Directions visible for cubicsubdiv infill pattern. --- resources/definitions/fdmprinter.def.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/definitions/fdmprinter.def.json b/resources/definitions/fdmprinter.def.json index afaa39f648..b48bd3dd12 100644 --- a/resources/definitions/fdmprinter.def.json +++ b/resources/definitions/fdmprinter.def.json @@ -1761,7 +1761,7 @@ "description": "A list of integer line directions to use. Elements from the list are used sequentially as the layers progress and when the end of the list is reached, it starts at the beginning again. The list items are separated by commas and the whole list is contained in square brackets. Default is an empty list which means use the traditional default angles (45 and 135 degrees for the lines and zig zag patterns and 45 degrees for all other patterns).", "type": "[int]", "default_value": "[ ]", - "enabled": "infill_pattern != 'concentric' and infill_pattern != 'cubicsubdiv' and infill_sparse_density > 0", + "enabled": "infill_pattern != 'concentric' and infill_sparse_density > 0", "limit_to_extruder": "infill_extruder_nr", "settable_per_mesh": true }, From c2c0f0b902270a201f232b51a2d9da64d1499d3b Mon Sep 17 00:00:00 2001 From: sm3dp Date: Tue, 5 May 2020 16:00:42 +0800 Subject: [PATCH 027/116] Added Lotmaxx sc60 profile --- resources/definitions/lotmaxx_sc60.def.json | 78 +++++++++++++++++++ .../lotmaxx_sc60_extruder_0.def.json | 15 ++++ .../lotmaxx_sc60_extruder_right.def.json | 18 +++++ 3 files changed, 111 insertions(+) create mode 100644 resources/definitions/lotmaxx_sc60.def.json create mode 100644 resources/extruders/lotmaxx_sc60_extruder_0.def.json create mode 100644 resources/extruders/lotmaxx_sc60_extruder_right.def.json diff --git a/resources/definitions/lotmaxx_sc60.def.json b/resources/definitions/lotmaxx_sc60.def.json new file mode 100644 index 0000000000..3f6bee813d --- /dev/null +++ b/resources/definitions/lotmaxx_sc60.def.json @@ -0,0 +1,78 @@ +{ + "name": "Lotmaxx Shark", + "version": 2, + "inherits": "fdmprinter", + "overrides": { + "machine_name": { "default_value": "Lotmaxx Shark" }, + "machine_width": { "default_value": 235 }, + "machine_depth": { "default_value": 235 }, + "machine_height": { "default_value": 265 }, + "machine_head_polygon": { "default_value": [ + [-50.7,16.8], + [-50.7,-29.5], + [46.9,-29.5], + [49.9,16.8] + ] + }, + "gantry_height": { "value": 29 }, + "machine_heated_bed": {"value": true}, + "machine_start_gcode":{ + "default_value":"M201 X500.00 Y500.00 Z100.00 E5000.00 ;Setup machine max acceleration\nM203 X500.00 Y500.00 Z10.00 E50.00 ;Setup machine max feedrate\nM204 P500.00 R1000.00 T500.00 ;Setup Print/Retract/Travel acceleration\nM205 X8.00 Y8.00 Z0.40 E5.00 ;Setup Jerk\n\nG28 ;Home\n\nG92 E0 ;Reset Extruder\nG1 Z4.0 F3000 ;Move Z Axis up\nG1 X10.1 Y20 Z0.28 F5000.0 ;Move to start position\nG1 X10.1 Y200.0 Z0.28 F1500.0 E15 ;Draw the first line\nG1 X10.4 Y200.0 Z0.28 F5000.0 ;Move to side a little\nG1 X10.4 Y20 Z0.28 F1500.0 E30 ;Draw the second line\nG92 E0 ;Reset Extruder\nG1 Z2.0 F3000 ;Move Z Axis up\n" + }, + "machine_end_gcode":{ + "default_value":"G91 ;Relative positionning\nG1 E-2 F2700 ;Retract a bit\nG1 E-2 Z0.2 F2400 ;Retract and raise Z\nG1 X5 Y5 F3000 ;Wipe out\nG1 Z10 ;Raise Z more\nG90 ;Absolute positionning\n\nG1 X0 Y{machine_depth} ;Present print\nM106 S0 ;Turn-off fan\nM104 S0 ;Turn-off hotend\nM140 S0 ;Turn-off bed\n\nM84 X Y E ;Disable all steppers but Z\n" + }, + "acceleration_print":{"value":1000}, + "acceleration_travel":{"value":1000}, + "acceleration_travel_layer_0":{"value":1000.0}, + "expand_skins_expand_distance":{"value":0.8}, + "fill_outline_gaps":{"default_value":false}, + "infill_pattern":{"default_value":"lines"}, + "infill_sparse_density":{"value":15}, + "meshfix_maximum_resolution":{"value":0.05}, + "optimize_wall_printing_order":{"value":true}, + "retract_at_layer_change":{"value":false}, + "retraction_amount":{"value":4.5}, + "roofing_layer_count":{"value":1}, + "skin_preshrink":{"value":0.8}, + "speed_layer_0":{"value":30}, + "speed_print":{"value":45}, + "speed_roofing":{"value":35}, + "speed_topbottom":{"value":35}, + "speed_travel":{"value":80}, + "speed_wall_0":{"value":32}, + "speed_wall_x":{"value":32}, + "support_infill_rate":{"value":5}, + "support_pattern":{"default_value":"lines"}, + "support_use_towers":{"value":false}, + "wall_overhang_speed_factor":{"value":50}, + "z_seam_corner":{"default_value":"z_seam_corner_any"}, + "z_seam_relative":{"value":true}, + "z_seam_type":{"default_value":"sharpest_corner"}, + "zig_zaggify_infill":{"value":true}, + "adhesion_type":{"default_value":"skirt"}, + "prime_tower_enable":{"value":true}, + "prime_tower_position_x":{"value": 50}, + "prime_tower_position_y":{"value": 50}, + "material_print_temperature": { "default_value": 200 }, + "default_material_print_temperature":{"default_value":200}, + "material_print_temperature":{"default_value":200}, + "material_final_print_temperature":{"default_value":200}, + "material_initial_print_temperature":{"default_value":200}, + "prime_tower_min_volume":{"value": 30}, + "switch_extruder_retraction_amount": {"value": 100}, + "switch_extruder_retraction_speeds": {"value": 60} + }, + "metadata": { + "visible": true, + "author": "lotmaxx.com", + "manufacturer": "Lotmaxx", + "platform": "lotmaxx_sc_10_20_platform.stl", + "machine_extruder_trains": { + "0": "lotmaxx_sc60_extruder_0", + "1": "lotmaxx_sc60_extruder_right" + }, + "has_materials": true, + "preferred_quality_type": "normal" + } +} diff --git a/resources/extruders/lotmaxx_sc60_extruder_0.def.json b/resources/extruders/lotmaxx_sc60_extruder_0.def.json new file mode 100644 index 0000000000..430cea8106 --- /dev/null +++ b/resources/extruders/lotmaxx_sc60_extruder_0.def.json @@ -0,0 +1,15 @@ +{ + "version": 2, + "name": "Extruder 1", + "inherits": "fdmextruder", + "metadata": { + "machine": "lotmaxx_sc60", + "position": "0" + }, + + "overrides": { + "extruder_nr": { "default_value": 0 }, + "machine_nozzle_size": { "default_value": 0.4 }, + "material_diameter": { "default_value": 1.75 } + } +} diff --git a/resources/extruders/lotmaxx_sc60_extruder_right.def.json b/resources/extruders/lotmaxx_sc60_extruder_right.def.json new file mode 100644 index 0000000000..71f7e24170 --- /dev/null +++ b/resources/extruders/lotmaxx_sc60_extruder_right.def.json @@ -0,0 +1,18 @@ +{ + "id":"lotmaxx_sc60_extruder_right", + "version": 2, + "name": "Extruder 2", + "inherits": "fdmextruder", + "metadata": { + "machine": "lotmaxx_sc60", + "position": "1" + }, + "overrides": { + "extruder_nr": { + "default_value": 1, + "maximum_value": "1" + }, + "machine_nozzle_size": { "default_value": 0.4 }, + "material_diameter": { "default_value": 1.75 } + } +} From 5f08fbd83ad6e964f0d0992fa612db387c99e9f3 Mon Sep 17 00:00:00 2001 From: Peter Felecan Date: Fri, 8 May 2020 17:11:28 +0200 Subject: [PATCH 028/116] Addition of the I3 Metal Motion printer by eMotionTech and the afferent extruder. --- resources/definitions/I3MetalMotion.def.json | 34 +++++++++++++++++++ .../I3MetalMotion_extruder_0.def.json | 17 ++++++++++ 2 files changed, 51 insertions(+) create mode 100644 resources/definitions/I3MetalMotion.def.json create mode 100644 resources/extruders/I3MetalMotion_extruder_0.def.json diff --git a/resources/definitions/I3MetalMotion.def.json b/resources/definitions/I3MetalMotion.def.json new file mode 100644 index 0000000000..24113bb8bb --- /dev/null +++ b/resources/definitions/I3MetalMotion.def.json @@ -0,0 +1,34 @@ +{ + "version": 2, + "name": "I3MetalMotion", + "inherits": "fdmprinter", + "metadata": { + "visible": true, + "author": "Peter Felecan", + "manufacturer": "eMotionTech", + "category": "Other", + "file_formats": "text/x-gcode", + "has_materials": true, + "preferred_material": "emotiontech_pla", + "machine_extruder_trains": + { + "0": "I3MetalMotion_extruder_0" + } + }, + + "overrides": { + "machine_name": { "default_value": "I3MetalMotion" }, + "machine_heated_bed": { "default_value": true }, + "machine_width": { "default_value": 200 }, + "machine_height": { "default_value": 200 }, + "machine_depth": { "default_value": 200 }, + "machine_center_is_zero": { "default_value": false }, + "machine_gcode_flavor": { "default_value": "RepRap (RepRap)" }, + "machine_start_gcode": { + "default_value": "G21 ; set units to millimeters\nG90 ; use absolute positioning\nM82 ; absolute extrusion mode\nM104 S{material_print_temperature_layer_0} ; set extruder temp\nM140 S{material_bed_temperature_layer_0} ; set bed temp\nM190 S{material_bed_temperature_layer_0} ; wait for bed temp\nM109 S{material_print_temperature_layer_0} ; wait for extruder temp\nG28 W ; home all\nG92 E0.0 ; reset extruder distance position\nG1 Y-3.0 F1000.0 ; go outside print area\nG1 X60.0 E9.0 F1000.0 ; intro line\nG1 X100.0 E21.5 F1000.0 ; intro line\nG92 E0.0 ; reset extruder distance position" + }, + "machine_end_gcode": { + "default_value": "G28 Z\nG28 X\nG28 Y\nM107 ; Turn off the fan\nG91; Relative positioning\nG1 E-1 ; reduce filament pressure\nM104 T0 S0\nG90 ; Absolute positioning\nG92 E0 ; Reset extruder position\nM140 S0 ; Disable heated bed\nM84 ; Turn the steppers off" + } + } +} diff --git a/resources/extruders/I3MetalMotion_extruder_0.def.json b/resources/extruders/I3MetalMotion_extruder_0.def.json new file mode 100644 index 0000000000..064e1360b6 --- /dev/null +++ b/resources/extruders/I3MetalMotion_extruder_0.def.json @@ -0,0 +1,17 @@ +{ + + "version": 2, + "name": "I3MetalMotion extruder", + "inherits": "fdmextruder", + "metadata": { + "machine": "I3MetalMotion", + "position": "0" + }, + + "overrides": { + "extruder_nr": { "default_value": 0 }, + "material_diameter": { "default_value": 1.75 }, + "machine_nozzle_offset_x": { "default_value": 0 }, + "machine_nozzle_offset_y": { "default_value": 0 } + } +} From f7c2f92f8241cc9497620732b75167e5691c5a54 Mon Sep 17 00:00:00 2001 From: sm3dp Date: Mon, 11 May 2020 18:00:33 +0800 Subject: [PATCH 029/116] remove some useless property and change platform mesh name --- resources/definitions/lotmaxx_sc60.def.json | 12 +++--------- .../extruders/lotmaxx_sc60_extruder_right.def.json | 1 - 2 files changed, 3 insertions(+), 10 deletions(-) diff --git a/resources/definitions/lotmaxx_sc60.def.json b/resources/definitions/lotmaxx_sc60.def.json index 3f6bee813d..49fa2c47de 100644 --- a/resources/definitions/lotmaxx_sc60.def.json +++ b/resources/definitions/lotmaxx_sc60.def.json @@ -17,7 +17,7 @@ "gantry_height": { "value": 29 }, "machine_heated_bed": {"value": true}, "machine_start_gcode":{ - "default_value":"M201 X500.00 Y500.00 Z100.00 E5000.00 ;Setup machine max acceleration\nM203 X500.00 Y500.00 Z10.00 E50.00 ;Setup machine max feedrate\nM204 P500.00 R1000.00 T500.00 ;Setup Print/Retract/Travel acceleration\nM205 X8.00 Y8.00 Z0.40 E5.00 ;Setup Jerk\n\nG28 ;Home\n\nG92 E0 ;Reset Extruder\nG1 Z4.0 F3000 ;Move Z Axis up\nG1 X10.1 Y20 Z0.28 F5000.0 ;Move to start position\nG1 X10.1 Y200.0 Z0.28 F1500.0 E15 ;Draw the first line\nG1 X10.4 Y200.0 Z0.28 F5000.0 ;Move to side a little\nG1 X10.4 Y20 Z0.28 F1500.0 E30 ;Draw the second line\nG92 E0 ;Reset Extruder\nG1 Z2.0 F3000 ;Move Z Axis up\n" + "default_value":"G28 ;Home\nG92 E0 ;Reset Extruder\nG1 Z4.0 F3000 ;Move Z Axis up\nG1 X10.1 Y20 Z0.28 F5000.0 ;Move to start position\nG1 X10.1 Y200.0 Z0.28 F1500.0 E15 ;Draw the first line\nG1 X10.4 Y200.0 Z0.28 F5000.0 ;Move to side a little\nG1 X10.4 Y20 Z0.28 F1500.0 E30 ;Draw the second line\nG92 E0 ;Reset Extruder\nG1 Z2.0 F3000 ;Move Z Axis up\n" }, "machine_end_gcode":{ "default_value":"G91 ;Relative positionning\nG1 E-2 F2700 ;Retract a bit\nG1 E-2 Z0.2 F2400 ;Retract and raise Z\nG1 X5 Y5 F3000 ;Wipe out\nG1 Z10 ;Raise Z more\nG90 ;Absolute positionning\n\nG1 X0 Y{machine_depth} ;Present print\nM106 S0 ;Turn-off fan\nM104 S0 ;Turn-off hotend\nM140 S0 ;Turn-off bed\n\nM84 X Y E ;Disable all steppers but Z\n" @@ -27,7 +27,6 @@ "acceleration_travel_layer_0":{"value":1000.0}, "expand_skins_expand_distance":{"value":0.8}, "fill_outline_gaps":{"default_value":false}, - "infill_pattern":{"default_value":"lines"}, "infill_sparse_density":{"value":15}, "meshfix_maximum_resolution":{"value":0.05}, "optimize_wall_printing_order":{"value":true}, @@ -54,11 +53,6 @@ "prime_tower_enable":{"value":true}, "prime_tower_position_x":{"value": 50}, "prime_tower_position_y":{"value": 50}, - "material_print_temperature": { "default_value": 200 }, - "default_material_print_temperature":{"default_value":200}, - "material_print_temperature":{"default_value":200}, - "material_final_print_temperature":{"default_value":200}, - "material_initial_print_temperature":{"default_value":200}, "prime_tower_min_volume":{"value": 30}, "switch_extruder_retraction_amount": {"value": 100}, "switch_extruder_retraction_speeds": {"value": 60} @@ -67,7 +61,7 @@ "visible": true, "author": "lotmaxx.com", "manufacturer": "Lotmaxx", - "platform": "lotmaxx_sc_10_20_platform.stl", + "platform": "lotmaxx_sc_10_20_platform.3mf", "machine_extruder_trains": { "0": "lotmaxx_sc60_extruder_0", "1": "lotmaxx_sc60_extruder_right" @@ -75,4 +69,4 @@ "has_materials": true, "preferred_quality_type": "normal" } -} +} \ No newline at end of file diff --git a/resources/extruders/lotmaxx_sc60_extruder_right.def.json b/resources/extruders/lotmaxx_sc60_extruder_right.def.json index 71f7e24170..a5a96c993b 100644 --- a/resources/extruders/lotmaxx_sc60_extruder_right.def.json +++ b/resources/extruders/lotmaxx_sc60_extruder_right.def.json @@ -1,5 +1,4 @@ { - "id":"lotmaxx_sc60_extruder_right", "version": 2, "name": "Extruder 2", "inherits": "fdmextruder", From d4e8d1eba9d4a341a23cdac1d2e8f1c7afe6ba36 Mon Sep 17 00:00:00 2001 From: sm3dp Date: Mon, 11 May 2020 19:10:30 +0800 Subject: [PATCH 030/116] change polygon properties --- resources/definitions/lotmaxx_sc60.def.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/definitions/lotmaxx_sc60.def.json b/resources/definitions/lotmaxx_sc60.def.json index 49fa2c47de..8fe2112ddd 100644 --- a/resources/definitions/lotmaxx_sc60.def.json +++ b/resources/definitions/lotmaxx_sc60.def.json @@ -7,7 +7,7 @@ "machine_width": { "default_value": 235 }, "machine_depth": { "default_value": 235 }, "machine_height": { "default_value": 265 }, - "machine_head_polygon": { "default_value": [ + "machine_head_with_fans_polygon": { "default_value": [ [-50.7,16.8], [-50.7,-29.5], [46.9,-29.5], From dcd125ed7ccddbfbc6ef5530e34b94e9a14e42fa Mon Sep 17 00:00:00 2001 From: Kaleidoscopeit Date: Tue, 12 May 2020 00:25:12 +0200 Subject: [PATCH 031/116] Update setting versions to 15 + cutting edge improvements to Deltacomb profiles --- resources/definitions/deltacomb_base.def.json | 2 +- .../deltacomb/ABS/deltacomb_DBE0.25_ABS_A.inst.cfg | 2 +- .../deltacomb/ABS/deltacomb_DBE0.25_ABS_B.inst.cfg | 2 +- .../deltacomb/ABS/deltacomb_DBE0.25_ABS_C.inst.cfg | 2 +- .../deltacomb/ABS/deltacomb_DBE0.40_ABS_A.inst.cfg | 2 +- .../deltacomb/ABS/deltacomb_DBE0.40_ABS_B.inst.cfg | 2 +- .../deltacomb/ABS/deltacomb_DBE0.40_ABS_C.inst.cfg | 2 +- .../deltacomb/ABS/deltacomb_DBE0.40_ABS_D.inst.cfg | 2 +- .../deltacomb/ABS/deltacomb_DBE0.40_ABS_E.inst.cfg | 2 +- .../deltacomb/ABS/deltacomb_DBE0.60_ABS_C.inst.cfg | 2 +- .../deltacomb/ABS/deltacomb_DBE0.60_ABS_D.inst.cfg | 2 +- .../deltacomb/ABS/deltacomb_DBE0.60_ABS_E.inst.cfg | 2 +- .../deltacomb/ABS/deltacomb_DBE0.60_ABS_F.inst.cfg | 2 +- .../deltacomb/ABS/deltacomb_FBE0.25_ABS_A.inst.cfg | 2 +- .../deltacomb/ABS/deltacomb_FBE0.25_ABS_B.inst.cfg | 2 +- .../deltacomb/ABS/deltacomb_FBE0.25_ABS_C.inst.cfg | 2 +- .../deltacomb/ABS/deltacomb_FBE0.40_ABS_A.inst.cfg | 2 +- .../deltacomb/ABS/deltacomb_FBE0.40_ABS_B.inst.cfg | 2 +- .../deltacomb/ABS/deltacomb_FBE0.40_ABS_C.inst.cfg | 2 +- .../deltacomb/ABS/deltacomb_FBE0.40_ABS_D.inst.cfg | 2 +- .../deltacomb/ABS/deltacomb_FBE0.40_ABS_E.inst.cfg | 2 +- .../deltacomb/ABS/deltacomb_FBE0.60_ABS_C.inst.cfg | 2 +- .../deltacomb/ABS/deltacomb_FBE0.60_ABS_D.inst.cfg | 2 +- .../deltacomb/ABS/deltacomb_FBE0.60_ABS_E.inst.cfg | 2 +- .../deltacomb/ABS/deltacomb_FBE0.60_ABS_F.inst.cfg | 2 +- .../deltacomb/ABS/deltacomb_VDBE0.80_ABS_D.inst.cfg | 2 +- .../deltacomb/ABS/deltacomb_VDBE0.80_ABS_E.inst.cfg | 2 +- .../deltacomb/ABS/deltacomb_VDBE0.80_ABS_F.inst.cfg | 2 +- .../deltacomb/ABS/deltacomb_VDBE0.80_ABS_G.inst.cfg | 2 +- .../deltacomb/ABS/deltacomb_VFBE0.80_ABS_D.inst.cfg | 2 +- .../deltacomb/ABS/deltacomb_VFBE0.80_ABS_E.inst.cfg | 2 +- .../deltacomb/ABS/deltacomb_VFBE0.80_ABS_F.inst.cfg | 2 +- .../deltacomb/ABS/deltacomb_VFBE0.80_ABS_G.inst.cfg | 2 +- .../deltacomb/PETG/deltacomb_DBE0.40_PETG_A.inst.cfg | 9 ++++++--- .../deltacomb/PETG/deltacomb_DBE0.40_PETG_B.inst.cfg | 9 ++++++--- .../deltacomb/PETG/deltacomb_DBE0.40_PETG_C.inst.cfg | 9 ++++++--- .../deltacomb/PETG/deltacomb_DBE0.40_PETG_D.inst.cfg | 9 ++++++--- .../deltacomb/PETG/deltacomb_DBE0.40_PETG_E.inst.cfg | 9 ++++++--- .../deltacomb/PETG/deltacomb_DBE0.60_PETG_C.inst.cfg | 9 ++++++--- .../deltacomb/PETG/deltacomb_DBE0.60_PETG_D.inst.cfg | 9 ++++++--- .../deltacomb/PETG/deltacomb_DBE0.60_PETG_E.inst.cfg | 9 ++++++--- .../deltacomb/PETG/deltacomb_DBE0.60_PETG_F.inst.cfg | 9 ++++++--- .../deltacomb/PETG/deltacomb_FBE0.40_PETG_A.inst.cfg | 9 ++++++--- .../deltacomb/PETG/deltacomb_FBE0.40_PETG_B.inst.cfg | 9 ++++++--- .../deltacomb/PETG/deltacomb_FBE0.40_PETG_C.inst.cfg | 9 ++++++--- .../deltacomb/PETG/deltacomb_FBE0.40_PETG_D.inst.cfg | 9 ++++++--- .../deltacomb/PETG/deltacomb_FBE0.40_PETG_E.inst.cfg | 9 ++++++--- .../deltacomb/PETG/deltacomb_FBE0.60_PETG_C.inst.cfg | 9 ++++++--- .../deltacomb/PETG/deltacomb_FBE0.60_PETG_D.inst.cfg | 9 ++++++--- .../deltacomb/PETG/deltacomb_FBE0.60_PETG_E.inst.cfg | 9 ++++++--- .../deltacomb/PETG/deltacomb_FBE0.60_PETG_F.inst.cfg | 9 ++++++--- .../deltacomb/PLA/deltacomb_DBE0.25_PLA_A.inst.cfg | 2 +- .../deltacomb/PLA/deltacomb_DBE0.25_PLA_B.inst.cfg | 2 +- .../deltacomb/PLA/deltacomb_DBE0.25_PLA_C.inst.cfg | 2 +- .../deltacomb/PLA/deltacomb_DBE0.40_PLA_A.inst.cfg | 2 +- .../deltacomb/PLA/deltacomb_DBE0.40_PLA_B.inst.cfg | 2 +- .../deltacomb/PLA/deltacomb_DBE0.40_PLA_C.inst.cfg | 2 +- .../deltacomb/PLA/deltacomb_DBE0.40_PLA_D.inst.cfg | 2 +- .../deltacomb/PLA/deltacomb_DBE0.40_PLA_E.inst.cfg | 2 +- .../deltacomb/PLA/deltacomb_DBE0.60_PLA_C.inst.cfg | 2 +- .../deltacomb/PLA/deltacomb_DBE0.60_PLA_D.inst.cfg | 2 +- .../deltacomb/PLA/deltacomb_DBE0.60_PLA_E.inst.cfg | 2 +- .../deltacomb/PLA/deltacomb_DBE0.60_PLA_F.inst.cfg | 2 +- .../deltacomb/PLA/deltacomb_FBE0.25_PLA_A.inst.cfg | 2 +- .../deltacomb/PLA/deltacomb_FBE0.25_PLA_B.inst.cfg | 2 +- .../deltacomb/PLA/deltacomb_FBE0.25_PLA_C.inst.cfg | 2 +- .../deltacomb/PLA/deltacomb_FBE0.40_PLA_A.inst.cfg | 2 +- .../deltacomb/PLA/deltacomb_FBE0.40_PLA_B.inst.cfg | 2 +- .../deltacomb/PLA/deltacomb_FBE0.40_PLA_C.inst.cfg | 2 +- .../deltacomb/PLA/deltacomb_FBE0.40_PLA_D.inst.cfg | 2 +- .../deltacomb/PLA/deltacomb_FBE0.40_PLA_E.inst.cfg | 2 +- .../deltacomb/PLA/deltacomb_FBE0.60_PLA_C.inst.cfg | 2 +- .../deltacomb/PLA/deltacomb_FBE0.60_PLA_D.inst.cfg | 2 +- .../deltacomb/PLA/deltacomb_FBE0.60_PLA_E.inst.cfg | 2 +- .../deltacomb/PLA/deltacomb_FBE0.60_PLA_F.inst.cfg | 2 +- .../deltacomb/PLA/deltacomb_VDBE0.80_PLA_D.inst.cfg | 2 +- .../deltacomb/PLA/deltacomb_VDBE0.80_PLA_E.inst.cfg | 2 +- .../deltacomb/PLA/deltacomb_VDBE0.80_PLA_F.inst.cfg | 2 +- .../deltacomb/PLA/deltacomb_VDBE0.80_PLA_G.inst.cfg | 2 +- .../deltacomb/PLA/deltacomb_VFBE0.80_PLA_D.inst.cfg | 2 +- .../deltacomb/PLA/deltacomb_VFBE0.80_PLA_E.inst.cfg | 2 +- .../deltacomb/PLA/deltacomb_VFBE0.80_PLA_F.inst.cfg | 2 +- .../deltacomb/PLA/deltacomb_VFBE0.80_PLA_G.inst.cfg | 2 +- .../deltacomb/TPU/deltacomb_FBE0.40_TPU_B.inst.cfg | 2 +- .../deltacomb/TPU/deltacomb_FBE0.40_TPU_C.inst.cfg | 2 +- .../deltacomb/TPU/deltacomb_FBE0.40_TPU_D.inst.cfg | 2 +- resources/quality/deltacomb/deltacomb_global_A.inst.cfg | 2 +- resources/quality/deltacomb/deltacomb_global_B.inst.cfg | 2 +- resources/quality/deltacomb/deltacomb_global_C.inst.cfg | 2 +- resources/quality/deltacomb/deltacomb_global_D.inst.cfg | 2 +- resources/quality/deltacomb/deltacomb_global_E.inst.cfg | 2 +- resources/quality/deltacomb/deltacomb_global_F.inst.cfg | 2 +- resources/quality/deltacomb/deltacomb_global_G.inst.cfg | 2 +- .../variants/deltacomb/deltacomb_dc20_fbe025.inst.cfg | 2 +- .../variants/deltacomb/deltacomb_dc20_fbe040.inst.cfg | 2 +- .../variants/deltacomb/deltacomb_dc20_fbe060.inst.cfg | 2 +- .../variants/deltacomb/deltacomb_dc20_vfbe080.inst.cfg | 2 +- .../deltacomb/deltacomb_dc20dual_dbe025.inst.cfg | 2 +- .../deltacomb/deltacomb_dc20dual_dbe040.inst.cfg | 2 +- .../deltacomb/deltacomb_dc20dual_dbe060.inst.cfg | 2 +- .../deltacomb/deltacomb_dc20dual_vdbe080.inst.cfg | 2 +- .../deltacomb/deltacomb_dc20flux_fbe025.inst.cfg | 2 +- .../deltacomb/deltacomb_dc20flux_fbe040.inst.cfg | 2 +- .../deltacomb/deltacomb_dc20flux_fbe060.inst.cfg | 2 +- .../variants/deltacomb/deltacomb_dc21_fbe025.inst.cfg | 2 +- .../variants/deltacomb/deltacomb_dc21_fbe040.inst.cfg | 2 +- .../variants/deltacomb/deltacomb_dc21_fbe060.inst.cfg | 2 +- .../variants/deltacomb/deltacomb_dc21_vfbe080.inst.cfg | 2 +- .../deltacomb/deltacomb_dc21dual_dbe025.inst.cfg | 2 +- .../deltacomb/deltacomb_dc21dual_dbe040.inst.cfg | 2 +- .../deltacomb/deltacomb_dc21dual_dbe060.inst.cfg | 2 +- .../deltacomb/deltacomb_dc21dual_vdbe080.inst.cfg | 2 +- .../deltacomb/deltacomb_dc21flux_fbe025.inst.cfg | 2 +- .../deltacomb/deltacomb_dc21flux_fbe040.inst.cfg | 2 +- .../deltacomb/deltacomb_dc21flux_fbe060.inst.cfg | 2 +- .../variants/deltacomb/deltacomb_dc30_fbe025.inst.cfg | 2 +- .../variants/deltacomb/deltacomb_dc30_fbe040.inst.cfg | 2 +- .../variants/deltacomb/deltacomb_dc30_fbe060.inst.cfg | 2 +- .../variants/deltacomb/deltacomb_dc30_vfbe080.inst.cfg | 2 +- .../deltacomb/deltacomb_dc30dual_dbe025.inst.cfg | 2 +- .../deltacomb/deltacomb_dc30dual_dbe040.inst.cfg | 2 +- .../deltacomb/deltacomb_dc30dual_dbe060.inst.cfg | 2 +- .../deltacomb/deltacomb_dc30dual_vdbe080.inst.cfg | 2 +- .../deltacomb/deltacomb_dc30flux_fbe025.inst.cfg | 2 +- .../deltacomb/deltacomb_dc30flux_fbe040.inst.cfg | 2 +- .../deltacomb/deltacomb_dc30flux_fbe060.inst.cfg | 2 +- 126 files changed, 216 insertions(+), 162 deletions(-) diff --git a/resources/definitions/deltacomb_base.def.json b/resources/definitions/deltacomb_base.def.json index 625f45f9c0..cd1c2c368e 100755 --- a/resources/definitions/deltacomb_base.def.json +++ b/resources/definitions/deltacomb_base.def.json @@ -31,7 +31,7 @@ "machine_center_is_zero": { "default_value": true }, "machine_gcode_flavor": { "default_value": "RepRap (Marlin/Sprinter)" }, "machine_start_gcode": { "default_value": ";---------------------------------------\n;Deltacomb start script\n;---------------------------------------\nG21 ;metric values\nG90 ;absolute positioning\nM107 ;start with the fan off\nG28 ;Home all axes (max endstops)\nG92 E0 ;zero the extruded length\nG1 Z15.0 F9000 ;move to the platform down 15mm\nG1 F9000\n\n;Put printing message on LCD screen\nM117 Printing...\n;---------------------------------------"}, - "machine_end_gcode": { "default_value": ";---------------------------------------\n;Deltacomb end script\n;---------------------------------------\nG91 ;relative positioning\nG1 F4200 E-4.5 ;wipe filament\nG1 F15000 E4.0 Z1 ;retraction compensation\nG28 ;Home all axes (max endstops)\nM84 ;steppers off" }, + "machine_end_gcode": { "default_value": ";---------------------------------------\n;Deltacomb end script\n;---------------------------------------\nG91 ;relative positioning\nG1 F15000 X8.0 E-4.5 ;Wipe filament+material retraction\nG1 F15000 E4.0 Z1 ;Retraction compensation\nG28 ;Home all axes (max endstops)\nM84 ;steppers off\n" }, "machine_shape": { "default_value": "elliptic" }, "machine_max_feedrate_z" : { "default_value": 300 }, diff --git a/resources/quality/deltacomb/ABS/deltacomb_DBE0.25_ABS_A.inst.cfg b/resources/quality/deltacomb/ABS/deltacomb_DBE0.25_ABS_A.inst.cfg index 8d4126229a..7e7784862d 100755 --- a/resources/quality/deltacomb/ABS/deltacomb_DBE0.25_ABS_A.inst.cfg +++ b/resources/quality/deltacomb/ABS/deltacomb_DBE0.25_ABS_A.inst.cfg @@ -4,7 +4,7 @@ name = A definition = deltacomb_base [metadata] -setting_version = 13 +setting_version = 15 type = quality quality_type = a material = generic_abs diff --git a/resources/quality/deltacomb/ABS/deltacomb_DBE0.25_ABS_B.inst.cfg b/resources/quality/deltacomb/ABS/deltacomb_DBE0.25_ABS_B.inst.cfg index 58cd4ed61f..c40b0a56f0 100755 --- a/resources/quality/deltacomb/ABS/deltacomb_DBE0.25_ABS_B.inst.cfg +++ b/resources/quality/deltacomb/ABS/deltacomb_DBE0.25_ABS_B.inst.cfg @@ -4,7 +4,7 @@ name = B definition = deltacomb_base [metadata] -setting_version = 13 +setting_version = 15 type = quality quality_type = b material = generic_abs diff --git a/resources/quality/deltacomb/ABS/deltacomb_DBE0.25_ABS_C.inst.cfg b/resources/quality/deltacomb/ABS/deltacomb_DBE0.25_ABS_C.inst.cfg index 5c570d18a6..46782077b2 100755 --- a/resources/quality/deltacomb/ABS/deltacomb_DBE0.25_ABS_C.inst.cfg +++ b/resources/quality/deltacomb/ABS/deltacomb_DBE0.25_ABS_C.inst.cfg @@ -4,7 +4,7 @@ name = C definition = deltacomb_base [metadata] -setting_version = 13 +setting_version = 15 type = quality quality_type = c material = generic_abs diff --git a/resources/quality/deltacomb/ABS/deltacomb_DBE0.40_ABS_A.inst.cfg b/resources/quality/deltacomb/ABS/deltacomb_DBE0.40_ABS_A.inst.cfg index c0ed321d4d..83b5f25ac7 100755 --- a/resources/quality/deltacomb/ABS/deltacomb_DBE0.40_ABS_A.inst.cfg +++ b/resources/quality/deltacomb/ABS/deltacomb_DBE0.40_ABS_A.inst.cfg @@ -4,7 +4,7 @@ name = A definition = deltacomb_base [metadata] -setting_version = 13 +setting_version = 15 type = quality quality_type = a material = generic_abs diff --git a/resources/quality/deltacomb/ABS/deltacomb_DBE0.40_ABS_B.inst.cfg b/resources/quality/deltacomb/ABS/deltacomb_DBE0.40_ABS_B.inst.cfg index ad88eab898..8e86950b69 100755 --- a/resources/quality/deltacomb/ABS/deltacomb_DBE0.40_ABS_B.inst.cfg +++ b/resources/quality/deltacomb/ABS/deltacomb_DBE0.40_ABS_B.inst.cfg @@ -4,7 +4,7 @@ name = B definition = deltacomb_base [metadata] -setting_version = 13 +setting_version = 15 type = quality quality_type = b material = generic_abs diff --git a/resources/quality/deltacomb/ABS/deltacomb_DBE0.40_ABS_C.inst.cfg b/resources/quality/deltacomb/ABS/deltacomb_DBE0.40_ABS_C.inst.cfg index 5c7e288370..4c2c074801 100755 --- a/resources/quality/deltacomb/ABS/deltacomb_DBE0.40_ABS_C.inst.cfg +++ b/resources/quality/deltacomb/ABS/deltacomb_DBE0.40_ABS_C.inst.cfg @@ -4,7 +4,7 @@ name = C definition = deltacomb_base [metadata] -setting_version = 13 +setting_version = 15 type = quality quality_type = c material = generic_abs diff --git a/resources/quality/deltacomb/ABS/deltacomb_DBE0.40_ABS_D.inst.cfg b/resources/quality/deltacomb/ABS/deltacomb_DBE0.40_ABS_D.inst.cfg index d3881198e3..868bdc62b2 100755 --- a/resources/quality/deltacomb/ABS/deltacomb_DBE0.40_ABS_D.inst.cfg +++ b/resources/quality/deltacomb/ABS/deltacomb_DBE0.40_ABS_D.inst.cfg @@ -4,7 +4,7 @@ name = D definition = deltacomb_base [metadata] -setting_version = 13 +setting_version = 15 type = quality quality_type = d material = generic_abs diff --git a/resources/quality/deltacomb/ABS/deltacomb_DBE0.40_ABS_E.inst.cfg b/resources/quality/deltacomb/ABS/deltacomb_DBE0.40_ABS_E.inst.cfg index 03a521d14d..1c5a51f3df 100755 --- a/resources/quality/deltacomb/ABS/deltacomb_DBE0.40_ABS_E.inst.cfg +++ b/resources/quality/deltacomb/ABS/deltacomb_DBE0.40_ABS_E.inst.cfg @@ -4,7 +4,7 @@ name = E definition = deltacomb_base [metadata] -setting_version = 13 +setting_version = 15 type = quality quality_type = e material = generic_abs diff --git a/resources/quality/deltacomb/ABS/deltacomb_DBE0.60_ABS_C.inst.cfg b/resources/quality/deltacomb/ABS/deltacomb_DBE0.60_ABS_C.inst.cfg index 84eab7fc48..af0d6b9fd6 100755 --- a/resources/quality/deltacomb/ABS/deltacomb_DBE0.60_ABS_C.inst.cfg +++ b/resources/quality/deltacomb/ABS/deltacomb_DBE0.60_ABS_C.inst.cfg @@ -4,7 +4,7 @@ name = C definition = deltacomb_base [metadata] -setting_version = 13 +setting_version = 15 type = quality quality_type = c material = generic_abs diff --git a/resources/quality/deltacomb/ABS/deltacomb_DBE0.60_ABS_D.inst.cfg b/resources/quality/deltacomb/ABS/deltacomb_DBE0.60_ABS_D.inst.cfg index 71688cac38..2a7a9d9440 100755 --- a/resources/quality/deltacomb/ABS/deltacomb_DBE0.60_ABS_D.inst.cfg +++ b/resources/quality/deltacomb/ABS/deltacomb_DBE0.60_ABS_D.inst.cfg @@ -4,7 +4,7 @@ name = D definition = deltacomb_base [metadata] -setting_version = 13 +setting_version = 15 type = quality quality_type = d material = generic_abs diff --git a/resources/quality/deltacomb/ABS/deltacomb_DBE0.60_ABS_E.inst.cfg b/resources/quality/deltacomb/ABS/deltacomb_DBE0.60_ABS_E.inst.cfg index 84987796a5..7b4daab934 100755 --- a/resources/quality/deltacomb/ABS/deltacomb_DBE0.60_ABS_E.inst.cfg +++ b/resources/quality/deltacomb/ABS/deltacomb_DBE0.60_ABS_E.inst.cfg @@ -4,7 +4,7 @@ name = E definition = deltacomb_base [metadata] -setting_version = 13 +setting_version = 15 type = quality quality_type = e material = generic_abs diff --git a/resources/quality/deltacomb/ABS/deltacomb_DBE0.60_ABS_F.inst.cfg b/resources/quality/deltacomb/ABS/deltacomb_DBE0.60_ABS_F.inst.cfg index 1c1456fc45..8aabe4e9a7 100755 --- a/resources/quality/deltacomb/ABS/deltacomb_DBE0.60_ABS_F.inst.cfg +++ b/resources/quality/deltacomb/ABS/deltacomb_DBE0.60_ABS_F.inst.cfg @@ -4,7 +4,7 @@ name = A definition = deltacomb_base [metadata] -setting_version = 13 +setting_version = 15 type = quality quality_type = f material = generic_abs diff --git a/resources/quality/deltacomb/ABS/deltacomb_FBE0.25_ABS_A.inst.cfg b/resources/quality/deltacomb/ABS/deltacomb_FBE0.25_ABS_A.inst.cfg index 64c2350142..9921efc3be 100755 --- a/resources/quality/deltacomb/ABS/deltacomb_FBE0.25_ABS_A.inst.cfg +++ b/resources/quality/deltacomb/ABS/deltacomb_FBE0.25_ABS_A.inst.cfg @@ -4,7 +4,7 @@ name = A definition = deltacomb_base [metadata] -setting_version = 13 +setting_version = 15 type = quality quality_type = a material = generic_abs diff --git a/resources/quality/deltacomb/ABS/deltacomb_FBE0.25_ABS_B.inst.cfg b/resources/quality/deltacomb/ABS/deltacomb_FBE0.25_ABS_B.inst.cfg index fb2175b5da..52ca0e2bdf 100755 --- a/resources/quality/deltacomb/ABS/deltacomb_FBE0.25_ABS_B.inst.cfg +++ b/resources/quality/deltacomb/ABS/deltacomb_FBE0.25_ABS_B.inst.cfg @@ -4,7 +4,7 @@ name = B definition = deltacomb_base [metadata] -setting_version = 13 +setting_version = 15 type = quality quality_type = b material = generic_abs diff --git a/resources/quality/deltacomb/ABS/deltacomb_FBE0.25_ABS_C.inst.cfg b/resources/quality/deltacomb/ABS/deltacomb_FBE0.25_ABS_C.inst.cfg index af9f344fe4..a391eab3e3 100755 --- a/resources/quality/deltacomb/ABS/deltacomb_FBE0.25_ABS_C.inst.cfg +++ b/resources/quality/deltacomb/ABS/deltacomb_FBE0.25_ABS_C.inst.cfg @@ -4,7 +4,7 @@ name = C definition = deltacomb_base [metadata] -setting_version = 13 +setting_version = 15 type = quality quality_type = c material = generic_abs diff --git a/resources/quality/deltacomb/ABS/deltacomb_FBE0.40_ABS_A.inst.cfg b/resources/quality/deltacomb/ABS/deltacomb_FBE0.40_ABS_A.inst.cfg index 686ee9e44e..83063da2ad 100755 --- a/resources/quality/deltacomb/ABS/deltacomb_FBE0.40_ABS_A.inst.cfg +++ b/resources/quality/deltacomb/ABS/deltacomb_FBE0.40_ABS_A.inst.cfg @@ -4,7 +4,7 @@ name = A definition = deltacomb_base [metadata] -setting_version = 13 +setting_version = 15 type = quality quality_type = a material = generic_abs diff --git a/resources/quality/deltacomb/ABS/deltacomb_FBE0.40_ABS_B.inst.cfg b/resources/quality/deltacomb/ABS/deltacomb_FBE0.40_ABS_B.inst.cfg index d2b03e3b20..685b6b7ad4 100755 --- a/resources/quality/deltacomb/ABS/deltacomb_FBE0.40_ABS_B.inst.cfg +++ b/resources/quality/deltacomb/ABS/deltacomb_FBE0.40_ABS_B.inst.cfg @@ -4,7 +4,7 @@ name = B definition = deltacomb_base [metadata] -setting_version = 13 +setting_version = 15 type = quality quality_type = b material = generic_abs diff --git a/resources/quality/deltacomb/ABS/deltacomb_FBE0.40_ABS_C.inst.cfg b/resources/quality/deltacomb/ABS/deltacomb_FBE0.40_ABS_C.inst.cfg index 5b2e32f81e..75f6b59a1a 100755 --- a/resources/quality/deltacomb/ABS/deltacomb_FBE0.40_ABS_C.inst.cfg +++ b/resources/quality/deltacomb/ABS/deltacomb_FBE0.40_ABS_C.inst.cfg @@ -4,7 +4,7 @@ name = C definition = deltacomb_base [metadata] -setting_version = 13 +setting_version = 15 type = quality quality_type = c material = generic_abs diff --git a/resources/quality/deltacomb/ABS/deltacomb_FBE0.40_ABS_D.inst.cfg b/resources/quality/deltacomb/ABS/deltacomb_FBE0.40_ABS_D.inst.cfg index d3881198e3..868bdc62b2 100755 --- a/resources/quality/deltacomb/ABS/deltacomb_FBE0.40_ABS_D.inst.cfg +++ b/resources/quality/deltacomb/ABS/deltacomb_FBE0.40_ABS_D.inst.cfg @@ -4,7 +4,7 @@ name = D definition = deltacomb_base [metadata] -setting_version = 13 +setting_version = 15 type = quality quality_type = d material = generic_abs diff --git a/resources/quality/deltacomb/ABS/deltacomb_FBE0.40_ABS_E.inst.cfg b/resources/quality/deltacomb/ABS/deltacomb_FBE0.40_ABS_E.inst.cfg index 0546cf3b3f..5e14b9fc70 100755 --- a/resources/quality/deltacomb/ABS/deltacomb_FBE0.40_ABS_E.inst.cfg +++ b/resources/quality/deltacomb/ABS/deltacomb_FBE0.40_ABS_E.inst.cfg @@ -4,7 +4,7 @@ name = E definition = deltacomb_base [metadata] -setting_version = 13 +setting_version = 15 type = quality quality_type = e material = generic_abs diff --git a/resources/quality/deltacomb/ABS/deltacomb_FBE0.60_ABS_C.inst.cfg b/resources/quality/deltacomb/ABS/deltacomb_FBE0.60_ABS_C.inst.cfg index ba52d68b8d..7158f1c834 100755 --- a/resources/quality/deltacomb/ABS/deltacomb_FBE0.60_ABS_C.inst.cfg +++ b/resources/quality/deltacomb/ABS/deltacomb_FBE0.60_ABS_C.inst.cfg @@ -4,7 +4,7 @@ name = C definition = deltacomb_base [metadata] -setting_version = 13 +setting_version = 15 type = quality quality_type = c material = generic_abs diff --git a/resources/quality/deltacomb/ABS/deltacomb_FBE0.60_ABS_D.inst.cfg b/resources/quality/deltacomb/ABS/deltacomb_FBE0.60_ABS_D.inst.cfg index 71688cac38..2a7a9d9440 100755 --- a/resources/quality/deltacomb/ABS/deltacomb_FBE0.60_ABS_D.inst.cfg +++ b/resources/quality/deltacomb/ABS/deltacomb_FBE0.60_ABS_D.inst.cfg @@ -4,7 +4,7 @@ name = D definition = deltacomb_base [metadata] -setting_version = 13 +setting_version = 15 type = quality quality_type = d material = generic_abs diff --git a/resources/quality/deltacomb/ABS/deltacomb_FBE0.60_ABS_E.inst.cfg b/resources/quality/deltacomb/ABS/deltacomb_FBE0.60_ABS_E.inst.cfg index addca89cbc..13d189f26a 100755 --- a/resources/quality/deltacomb/ABS/deltacomb_FBE0.60_ABS_E.inst.cfg +++ b/resources/quality/deltacomb/ABS/deltacomb_FBE0.60_ABS_E.inst.cfg @@ -4,7 +4,7 @@ name = E definition = deltacomb_base [metadata] -setting_version = 13 +setting_version = 15 type = quality quality_type = e material = generic_abs diff --git a/resources/quality/deltacomb/ABS/deltacomb_FBE0.60_ABS_F.inst.cfg b/resources/quality/deltacomb/ABS/deltacomb_FBE0.60_ABS_F.inst.cfg index fb78eb5df8..adc1a19946 100755 --- a/resources/quality/deltacomb/ABS/deltacomb_FBE0.60_ABS_F.inst.cfg +++ b/resources/quality/deltacomb/ABS/deltacomb_FBE0.60_ABS_F.inst.cfg @@ -4,7 +4,7 @@ name = A definition = deltacomb_base [metadata] -setting_version = 13 +setting_version = 15 type = quality quality_type = f material = generic_abs diff --git a/resources/quality/deltacomb/ABS/deltacomb_VDBE0.80_ABS_D.inst.cfg b/resources/quality/deltacomb/ABS/deltacomb_VDBE0.80_ABS_D.inst.cfg index af64b483bf..c5bbb85a96 100755 --- a/resources/quality/deltacomb/ABS/deltacomb_VDBE0.80_ABS_D.inst.cfg +++ b/resources/quality/deltacomb/ABS/deltacomb_VDBE0.80_ABS_D.inst.cfg @@ -4,7 +4,7 @@ name = D definition = deltacomb_base [metadata] -setting_version = 13 +setting_version = 15 type = quality quality_type = d material = generic_abs diff --git a/resources/quality/deltacomb/ABS/deltacomb_VDBE0.80_ABS_E.inst.cfg b/resources/quality/deltacomb/ABS/deltacomb_VDBE0.80_ABS_E.inst.cfg index 6432f76912..58b898ae50 100755 --- a/resources/quality/deltacomb/ABS/deltacomb_VDBE0.80_ABS_E.inst.cfg +++ b/resources/quality/deltacomb/ABS/deltacomb_VDBE0.80_ABS_E.inst.cfg @@ -4,7 +4,7 @@ name = E definition = deltacomb_base [metadata] -setting_version = 13 +setting_version = 15 type = quality quality_type = e material = generic_abs diff --git a/resources/quality/deltacomb/ABS/deltacomb_VDBE0.80_ABS_F.inst.cfg b/resources/quality/deltacomb/ABS/deltacomb_VDBE0.80_ABS_F.inst.cfg index f50a80ca9d..8615a982ea 100755 --- a/resources/quality/deltacomb/ABS/deltacomb_VDBE0.80_ABS_F.inst.cfg +++ b/resources/quality/deltacomb/ABS/deltacomb_VDBE0.80_ABS_F.inst.cfg @@ -4,7 +4,7 @@ name = A definition = deltacomb_base [metadata] -setting_version = 13 +setting_version = 15 type = quality quality_type = f material = generic_abs diff --git a/resources/quality/deltacomb/ABS/deltacomb_VDBE0.80_ABS_G.inst.cfg b/resources/quality/deltacomb/ABS/deltacomb_VDBE0.80_ABS_G.inst.cfg index 19f4712b96..24995e8b16 100755 --- a/resources/quality/deltacomb/ABS/deltacomb_VDBE0.80_ABS_G.inst.cfg +++ b/resources/quality/deltacomb/ABS/deltacomb_VDBE0.80_ABS_G.inst.cfg @@ -4,7 +4,7 @@ name = C definition = deltacomb_base [metadata] -setting_version = 13 +setting_version = 15 type = quality quality_type = c material = generic_abs diff --git a/resources/quality/deltacomb/ABS/deltacomb_VFBE0.80_ABS_D.inst.cfg b/resources/quality/deltacomb/ABS/deltacomb_VFBE0.80_ABS_D.inst.cfg index af64b483bf..c5bbb85a96 100755 --- a/resources/quality/deltacomb/ABS/deltacomb_VFBE0.80_ABS_D.inst.cfg +++ b/resources/quality/deltacomb/ABS/deltacomb_VFBE0.80_ABS_D.inst.cfg @@ -4,7 +4,7 @@ name = D definition = deltacomb_base [metadata] -setting_version = 13 +setting_version = 15 type = quality quality_type = d material = generic_abs diff --git a/resources/quality/deltacomb/ABS/deltacomb_VFBE0.80_ABS_E.inst.cfg b/resources/quality/deltacomb/ABS/deltacomb_VFBE0.80_ABS_E.inst.cfg index 3621225236..263a713f1a 100755 --- a/resources/quality/deltacomb/ABS/deltacomb_VFBE0.80_ABS_E.inst.cfg +++ b/resources/quality/deltacomb/ABS/deltacomb_VFBE0.80_ABS_E.inst.cfg @@ -4,7 +4,7 @@ name = E definition = deltacomb_base [metadata] -setting_version = 13 +setting_version = 15 type = quality quality_type = e material = generic_abs diff --git a/resources/quality/deltacomb/ABS/deltacomb_VFBE0.80_ABS_F.inst.cfg b/resources/quality/deltacomb/ABS/deltacomb_VFBE0.80_ABS_F.inst.cfg index 317361c129..485e321878 100755 --- a/resources/quality/deltacomb/ABS/deltacomb_VFBE0.80_ABS_F.inst.cfg +++ b/resources/quality/deltacomb/ABS/deltacomb_VFBE0.80_ABS_F.inst.cfg @@ -4,7 +4,7 @@ name = A definition = deltacomb_base [metadata] -setting_version = 13 +setting_version = 15 type = quality quality_type = f material = generic_abs diff --git a/resources/quality/deltacomb/ABS/deltacomb_VFBE0.80_ABS_G.inst.cfg b/resources/quality/deltacomb/ABS/deltacomb_VFBE0.80_ABS_G.inst.cfg index 433d28be5e..847f427abb 100755 --- a/resources/quality/deltacomb/ABS/deltacomb_VFBE0.80_ABS_G.inst.cfg +++ b/resources/quality/deltacomb/ABS/deltacomb_VFBE0.80_ABS_G.inst.cfg @@ -4,7 +4,7 @@ name = C definition = deltacomb_base [metadata] -setting_version = 13 +setting_version = 15 type = quality quality_type = g material = generic_abs diff --git a/resources/quality/deltacomb/PETG/deltacomb_DBE0.40_PETG_A.inst.cfg b/resources/quality/deltacomb/PETG/deltacomb_DBE0.40_PETG_A.inst.cfg index 243614db0b..0d3691c4cb 100644 --- a/resources/quality/deltacomb/PETG/deltacomb_DBE0.40_PETG_A.inst.cfg +++ b/resources/quality/deltacomb/PETG/deltacomb_DBE0.40_PETG_A.inst.cfg @@ -4,7 +4,7 @@ name = A definition = deltacomb_base [metadata] -setting_version = 13 +setting_version = 15 type = quality quality_type = a material = generic_petg @@ -23,5 +23,8 @@ speed_roofing = =speed_print * 0.5 default_material_print_temperature = 235 material_bed_temperature = 60 material_bed_temperature_layer_0 = 45 -initial_layer_line_width_factor = 140 -retraction_speed = 25 +initial_layer_line_width_factor = 120 +retraction_speed = 40 +coasting_enable = True +coasting_volume = 0.256 +retraction_combing_max_distance = 5 diff --git a/resources/quality/deltacomb/PETG/deltacomb_DBE0.40_PETG_B.inst.cfg b/resources/quality/deltacomb/PETG/deltacomb_DBE0.40_PETG_B.inst.cfg index 3e2fd961ce..610497f293 100644 --- a/resources/quality/deltacomb/PETG/deltacomb_DBE0.40_PETG_B.inst.cfg +++ b/resources/quality/deltacomb/PETG/deltacomb_DBE0.40_PETG_B.inst.cfg @@ -4,7 +4,7 @@ name = B definition = deltacomb_base [metadata] -setting_version = 13 +setting_version = 15 type = quality quality_type = b material = generic_petg @@ -23,5 +23,8 @@ speed_roofing = =speed_print * 0.5 default_material_print_temperature = 235 material_bed_temperature = 60 material_bed_temperature_layer_0 = 45 -initial_layer_line_width_factor = 140 -retraction_speed = 25 \ No newline at end of file +initial_layer_line_width_factor = 120 +retraction_speed = 40 +coasting_enable = True +coasting_volume = 0.256 +retraction_combing_max_distance = 5 diff --git a/resources/quality/deltacomb/PETG/deltacomb_DBE0.40_PETG_C.inst.cfg b/resources/quality/deltacomb/PETG/deltacomb_DBE0.40_PETG_C.inst.cfg index 333b41aa11..51764e2983 100644 --- a/resources/quality/deltacomb/PETG/deltacomb_DBE0.40_PETG_C.inst.cfg +++ b/resources/quality/deltacomb/PETG/deltacomb_DBE0.40_PETG_C.inst.cfg @@ -4,7 +4,7 @@ name = C definition = deltacomb_base [metadata] -setting_version = 13 +setting_version = 15 type = quality quality_type = c material = generic_petg @@ -23,5 +23,8 @@ speed_roofing = =speed_print * 0.5 default_material_print_temperature = 235 material_bed_temperature = 60 material_bed_temperature_layer_0 = 45 -initial_layer_line_width_factor = 140 -retraction_speed = 25 \ No newline at end of file +initial_layer_line_width_factor = 120 +retraction_speed = 40 +coasting_enable = True +coasting_volume = 0.256 +retraction_combing_max_distance = 5 diff --git a/resources/quality/deltacomb/PETG/deltacomb_DBE0.40_PETG_D.inst.cfg b/resources/quality/deltacomb/PETG/deltacomb_DBE0.40_PETG_D.inst.cfg index a27a9a0da3..03b8ebaf5d 100644 --- a/resources/quality/deltacomb/PETG/deltacomb_DBE0.40_PETG_D.inst.cfg +++ b/resources/quality/deltacomb/PETG/deltacomb_DBE0.40_PETG_D.inst.cfg @@ -4,7 +4,7 @@ name = D definition = deltacomb_base [metadata] -setting_version = 13 +setting_version = 15 type = quality quality_type = d material = generic_petg @@ -23,5 +23,8 @@ speed_roofing = =speed_print * 0.5 default_material_print_temperature = 235 material_bed_temperature = 60 material_bed_temperature_layer_0 = 45 -initial_layer_line_width_factor = 140 -retraction_speed = 25 \ No newline at end of file +initial_layer_line_width_factor = 120 +retraction_speed = 40 +coasting_enable = True +coasting_volume = 0.256 +retraction_combing_max_distance = 5 diff --git a/resources/quality/deltacomb/PETG/deltacomb_DBE0.40_PETG_E.inst.cfg b/resources/quality/deltacomb/PETG/deltacomb_DBE0.40_PETG_E.inst.cfg index 529612fe19..79bd7b236e 100644 --- a/resources/quality/deltacomb/PETG/deltacomb_DBE0.40_PETG_E.inst.cfg +++ b/resources/quality/deltacomb/PETG/deltacomb_DBE0.40_PETG_E.inst.cfg @@ -4,7 +4,7 @@ name = E definition = deltacomb_base [metadata] -setting_version = 13 +setting_version = 15 type = quality quality_type = e material = generic_petg @@ -23,5 +23,8 @@ speed_roofing = =speed_print * 0.5 default_material_print_temperature = 235 material_bed_temperature = 60 material_bed_temperature_layer_0 = 45 -initial_layer_line_width_factor = 140 -retraction_speed = 25 \ No newline at end of file +initial_layer_line_width_factor = 120 +retraction_speed = 40 +coasting_enable = True +coasting_volume = 0.256 +retraction_combing_max_distance = 5 diff --git a/resources/quality/deltacomb/PETG/deltacomb_DBE0.60_PETG_C.inst.cfg b/resources/quality/deltacomb/PETG/deltacomb_DBE0.60_PETG_C.inst.cfg index 093a93059e..ff20f9db25 100644 --- a/resources/quality/deltacomb/PETG/deltacomb_DBE0.60_PETG_C.inst.cfg +++ b/resources/quality/deltacomb/PETG/deltacomb_DBE0.60_PETG_C.inst.cfg @@ -4,7 +4,7 @@ name = C definition = deltacomb_base [metadata] -setting_version = 13 +setting_version = 15 type = quality quality_type = c material = generic_petg @@ -23,5 +23,8 @@ speed_roofing = =speed_print * 0.5 default_material_print_temperature = 235 material_bed_temperature = 60 material_bed_temperature_layer_0 = 45 -initial_layer_line_width_factor = 140 -retraction_speed = 25 \ No newline at end of file +initial_layer_line_width_factor = 120 +retraction_speed = 40 +coasting_enable = True +coasting_volume = 0.256 +retraction_combing_max_distance = 5 diff --git a/resources/quality/deltacomb/PETG/deltacomb_DBE0.60_PETG_D.inst.cfg b/resources/quality/deltacomb/PETG/deltacomb_DBE0.60_PETG_D.inst.cfg index 5e6b75d56b..dc98660be8 100644 --- a/resources/quality/deltacomb/PETG/deltacomb_DBE0.60_PETG_D.inst.cfg +++ b/resources/quality/deltacomb/PETG/deltacomb_DBE0.60_PETG_D.inst.cfg @@ -4,7 +4,7 @@ name = D definition = deltacomb_base [metadata] -setting_version = 13 +setting_version = 15 type = quality quality_type = d material = generic_petg @@ -23,5 +23,8 @@ speed_roofing = =speed_print * 0.5 default_material_print_temperature = 235 material_bed_temperature = 60 material_bed_temperature_layer_0 = 45 -initial_layer_line_width_factor = 140 -retraction_speed = 25 \ No newline at end of file +initial_layer_line_width_factor = 120 +retraction_speed = 40 +coasting_enable = True +coasting_volume = 0.256 +retraction_combing_max_distance = 5 diff --git a/resources/quality/deltacomb/PETG/deltacomb_DBE0.60_PETG_E.inst.cfg b/resources/quality/deltacomb/PETG/deltacomb_DBE0.60_PETG_E.inst.cfg index 1a60201d31..8195c6d351 100644 --- a/resources/quality/deltacomb/PETG/deltacomb_DBE0.60_PETG_E.inst.cfg +++ b/resources/quality/deltacomb/PETG/deltacomb_DBE0.60_PETG_E.inst.cfg @@ -4,7 +4,7 @@ name = E definition = deltacomb_base [metadata] -setting_version = 13 +setting_version = 15 type = quality quality_type = e material = generic_petg @@ -23,5 +23,8 @@ speed_roofing = =speed_print * 0.7 default_material_print_temperature = 235 material_bed_temperature = 60 material_bed_temperature_layer_0 = 45 -initial_layer_line_width_factor = 140 -retraction_speed = 25 \ No newline at end of file +initial_layer_line_width_factor = 120 +retraction_speed = 40 +coasting_enable = True +coasting_volume = 0.256 +retraction_combing_max_distance = 5 diff --git a/resources/quality/deltacomb/PETG/deltacomb_DBE0.60_PETG_F.inst.cfg b/resources/quality/deltacomb/PETG/deltacomb_DBE0.60_PETG_F.inst.cfg index 5b5caa0b1b..5f10c6b418 100644 --- a/resources/quality/deltacomb/PETG/deltacomb_DBE0.60_PETG_F.inst.cfg +++ b/resources/quality/deltacomb/PETG/deltacomb_DBE0.60_PETG_F.inst.cfg @@ -4,7 +4,7 @@ name = F definition = deltacomb_base [metadata] -setting_version = 13 +setting_version = 15 type = quality quality_type = f material = generic_petg @@ -23,5 +23,8 @@ speed_roofing = =speed_print default_material_print_temperature = 235 material_bed_temperature = 60 material_bed_temperature_layer_0 = 45 -initial_layer_line_width_factor = 140 -retraction_speed = 25 \ No newline at end of file +initial_layer_line_width_factor = 120 +retraction_speed = 40 +coasting_enable = True +coasting_volume = 0.256 +retraction_combing_max_distance = 5 diff --git a/resources/quality/deltacomb/PETG/deltacomb_FBE0.40_PETG_A.inst.cfg b/resources/quality/deltacomb/PETG/deltacomb_FBE0.40_PETG_A.inst.cfg index 908f798c85..102b405206 100644 --- a/resources/quality/deltacomb/PETG/deltacomb_FBE0.40_PETG_A.inst.cfg +++ b/resources/quality/deltacomb/PETG/deltacomb_FBE0.40_PETG_A.inst.cfg @@ -4,7 +4,7 @@ name = A definition = deltacomb_base [metadata] -setting_version = 13 +setting_version = 15 type = quality quality_type = a material = generic_petg @@ -23,5 +23,8 @@ speed_roofing = =speed_print * 0.5 default_material_print_temperature = 235 material_bed_temperature = 60 material_bed_temperature_layer_0 = 45 -initial_layer_line_width_factor = 140 -retraction_speed = 25 \ No newline at end of file +initial_layer_line_width_factor = 120 +retraction_speed = 40 +coasting_enable = True +coasting_volume = 0.256 +retraction_combing_max_distance = 5 diff --git a/resources/quality/deltacomb/PETG/deltacomb_FBE0.40_PETG_B.inst.cfg b/resources/quality/deltacomb/PETG/deltacomb_FBE0.40_PETG_B.inst.cfg index e701f3575a..2b8a10a9a5 100644 --- a/resources/quality/deltacomb/PETG/deltacomb_FBE0.40_PETG_B.inst.cfg +++ b/resources/quality/deltacomb/PETG/deltacomb_FBE0.40_PETG_B.inst.cfg @@ -4,7 +4,7 @@ name = B definition = deltacomb_base [metadata] -setting_version = 13 +setting_version = 15 type = quality quality_type = b material = generic_petg @@ -23,5 +23,8 @@ speed_roofing = =speed_print * 0.5 default_material_print_temperature = 235 material_bed_temperature = 60 material_bed_temperature_layer_0 = 45 -initial_layer_line_width_factor = 140 -retraction_speed = 25 \ No newline at end of file +initial_layer_line_width_factor = 120 +retraction_speed = 40 +coasting_enable = True +coasting_volume = 0.256 +retraction_combing_max_distance = 5 diff --git a/resources/quality/deltacomb/PETG/deltacomb_FBE0.40_PETG_C.inst.cfg b/resources/quality/deltacomb/PETG/deltacomb_FBE0.40_PETG_C.inst.cfg index 4e1961c2a7..e8df16f090 100644 --- a/resources/quality/deltacomb/PETG/deltacomb_FBE0.40_PETG_C.inst.cfg +++ b/resources/quality/deltacomb/PETG/deltacomb_FBE0.40_PETG_C.inst.cfg @@ -4,7 +4,7 @@ name = C definition = deltacomb_base [metadata] -setting_version = 13 +setting_version = 15 type = quality quality_type = c material = generic_petg @@ -23,5 +23,8 @@ speed_roofing = =speed_print * 0.5 default_material_print_temperature = 235 material_bed_temperature = 60 material_bed_temperature_layer_0 = 45 -initial_layer_line_width_factor = 140 -retraction_speed = 25 +initial_layer_line_width_factor = 120 +retraction_speed = 40 +coasting_enable = True +coasting_volume = 0.256 +retraction_combing_max_distance = 5 diff --git a/resources/quality/deltacomb/PETG/deltacomb_FBE0.40_PETG_D.inst.cfg b/resources/quality/deltacomb/PETG/deltacomb_FBE0.40_PETG_D.inst.cfg index ca81e85936..d229efb930 100644 --- a/resources/quality/deltacomb/PETG/deltacomb_FBE0.40_PETG_D.inst.cfg +++ b/resources/quality/deltacomb/PETG/deltacomb_FBE0.40_PETG_D.inst.cfg @@ -4,7 +4,7 @@ name = D definition = deltacomb_base [metadata] -setting_version = 13 +setting_version = 15 type = quality quality_type = d material = generic_petg @@ -23,5 +23,8 @@ speed_roofing = =speed_print * 0.5 default_material_print_temperature = 235 material_bed_temperature = 60 material_bed_temperature_layer_0 = 45 -initial_layer_line_width_factor = 140 -retraction_speed = 25 \ No newline at end of file +initial_layer_line_width_factor = 120 +retraction_speed = 40 +coasting_enable = True +coasting_volume = 0.256 +retraction_combing_max_distance = 5 diff --git a/resources/quality/deltacomb/PETG/deltacomb_FBE0.40_PETG_E.inst.cfg b/resources/quality/deltacomb/PETG/deltacomb_FBE0.40_PETG_E.inst.cfg index 06d47bbae0..57b46af2ed 100644 --- a/resources/quality/deltacomb/PETG/deltacomb_FBE0.40_PETG_E.inst.cfg +++ b/resources/quality/deltacomb/PETG/deltacomb_FBE0.40_PETG_E.inst.cfg @@ -4,7 +4,7 @@ name = E definition = deltacomb_base [metadata] -setting_version = 13 +setting_version = 15 type = quality quality_type = e material = generic_petg @@ -23,5 +23,8 @@ speed_roofing = =speed_print * 0.5 default_material_print_temperature = 235 material_bed_temperature = 60 material_bed_temperature_layer_0 = 45 -initial_layer_line_width_factor = 140 -retraction_speed = 25 \ No newline at end of file +initial_layer_line_width_factor = 120 +retraction_speed = 40 +coasting_enable = True +coasting_volume = 0.256 +retraction_combing_max_distance = 5 diff --git a/resources/quality/deltacomb/PETG/deltacomb_FBE0.60_PETG_C.inst.cfg b/resources/quality/deltacomb/PETG/deltacomb_FBE0.60_PETG_C.inst.cfg index c596ab3adf..69a8112a54 100644 --- a/resources/quality/deltacomb/PETG/deltacomb_FBE0.60_PETG_C.inst.cfg +++ b/resources/quality/deltacomb/PETG/deltacomb_FBE0.60_PETG_C.inst.cfg @@ -4,7 +4,7 @@ name = C definition = deltacomb_base [metadata] -setting_version = 13 +setting_version = 15 type = quality quality_type = c material = generic_petg @@ -23,5 +23,8 @@ speed_roofing = =speed_print * 0.5 default_material_print_temperature = 235 material_bed_temperature = 60 material_bed_temperature_layer_0 = 45 -initial_layer_line_width_factor = 140 -retraction_speed = 25 +initial_layer_line_width_factor = 120 +retraction_speed = 40 +coasting_enable = True +coasting_volume = 0.256 +retraction_combing_max_distance = 5 diff --git a/resources/quality/deltacomb/PETG/deltacomb_FBE0.60_PETG_D.inst.cfg b/resources/quality/deltacomb/PETG/deltacomb_FBE0.60_PETG_D.inst.cfg index 6e4fcef9ea..1ecdf9a046 100644 --- a/resources/quality/deltacomb/PETG/deltacomb_FBE0.60_PETG_D.inst.cfg +++ b/resources/quality/deltacomb/PETG/deltacomb_FBE0.60_PETG_D.inst.cfg @@ -4,7 +4,7 @@ name = D definition = deltacomb_base [metadata] -setting_version = 13 +setting_version = 15 type = quality quality_type = d material = generic_petg @@ -23,5 +23,8 @@ speed_roofing = =speed_print * 0.5 default_material_print_temperature = 235 material_bed_temperature = 60 material_bed_temperature_layer_0 = 45 -initial_layer_line_width_factor = 140 -retraction_speed = 25 \ No newline at end of file +initial_layer_line_width_factor = 120 +retraction_speed = 40 +coasting_enable = True +coasting_volume = 0.256 +retraction_combing_max_distance = 5 diff --git a/resources/quality/deltacomb/PETG/deltacomb_FBE0.60_PETG_E.inst.cfg b/resources/quality/deltacomb/PETG/deltacomb_FBE0.60_PETG_E.inst.cfg index 0e35e4ef9a..502507a4c4 100644 --- a/resources/quality/deltacomb/PETG/deltacomb_FBE0.60_PETG_E.inst.cfg +++ b/resources/quality/deltacomb/PETG/deltacomb_FBE0.60_PETG_E.inst.cfg @@ -4,7 +4,7 @@ name = E definition = deltacomb_base [metadata] -setting_version = 13 +setting_version = 15 type = quality quality_type = e material = generic_petg @@ -23,5 +23,8 @@ speed_roofing = =speed_print * 0.7 default_material_print_temperature = 235 material_bed_temperature = 60 material_bed_temperature_layer_0 = 45 -initial_layer_line_width_factor = 140 -retraction_speed = 25 \ No newline at end of file +initial_layer_line_width_factor = 120 +retraction_speed = 40 +coasting_enable = True +coasting_volume = 0.256 +retraction_combing_max_distance = 5 diff --git a/resources/quality/deltacomb/PETG/deltacomb_FBE0.60_PETG_F.inst.cfg b/resources/quality/deltacomb/PETG/deltacomb_FBE0.60_PETG_F.inst.cfg index 796885270b..62d91eeec8 100644 --- a/resources/quality/deltacomb/PETG/deltacomb_FBE0.60_PETG_F.inst.cfg +++ b/resources/quality/deltacomb/PETG/deltacomb_FBE0.60_PETG_F.inst.cfg @@ -4,7 +4,7 @@ name = F definition = deltacomb_base [metadata] -setting_version = 13 +setting_version = 15 type = quality quality_type = f material = generic_petg @@ -23,5 +23,8 @@ speed_roofing = =speed_print default_material_print_temperature = 235 material_bed_temperature = 60 material_bed_temperature_layer_0 = 45 -initial_layer_line_width_factor = 140 -retraction_speed = 25 \ No newline at end of file +initial_layer_line_width_factor = 120 +retraction_speed = 40 +coasting_enable = True +coasting_volume = 0.256 +retraction_combing_max_distance = 5 diff --git a/resources/quality/deltacomb/PLA/deltacomb_DBE0.25_PLA_A.inst.cfg b/resources/quality/deltacomb/PLA/deltacomb_DBE0.25_PLA_A.inst.cfg index 56774919f8..4c6c7eb463 100755 --- a/resources/quality/deltacomb/PLA/deltacomb_DBE0.25_PLA_A.inst.cfg +++ b/resources/quality/deltacomb/PLA/deltacomb_DBE0.25_PLA_A.inst.cfg @@ -4,7 +4,7 @@ name = A definition = deltacomb_base [metadata] -setting_version = 13 +setting_version = 15 type = quality quality_type = a material = generic_pla diff --git a/resources/quality/deltacomb/PLA/deltacomb_DBE0.25_PLA_B.inst.cfg b/resources/quality/deltacomb/PLA/deltacomb_DBE0.25_PLA_B.inst.cfg index 734a3b2f3f..9bd6be46d5 100755 --- a/resources/quality/deltacomb/PLA/deltacomb_DBE0.25_PLA_B.inst.cfg +++ b/resources/quality/deltacomb/PLA/deltacomb_DBE0.25_PLA_B.inst.cfg @@ -4,7 +4,7 @@ name = B definition = deltacomb_base [metadata] -setting_version = 13 +setting_version = 15 type = quality quality_type = b material = generic_pla diff --git a/resources/quality/deltacomb/PLA/deltacomb_DBE0.25_PLA_C.inst.cfg b/resources/quality/deltacomb/PLA/deltacomb_DBE0.25_PLA_C.inst.cfg index 59add778ef..ac937328d1 100755 --- a/resources/quality/deltacomb/PLA/deltacomb_DBE0.25_PLA_C.inst.cfg +++ b/resources/quality/deltacomb/PLA/deltacomb_DBE0.25_PLA_C.inst.cfg @@ -4,7 +4,7 @@ name = C definition = deltacomb_base [metadata] -setting_version = 13 +setting_version = 15 type = quality quality_type = c material = generic_pla diff --git a/resources/quality/deltacomb/PLA/deltacomb_DBE0.40_PLA_A.inst.cfg b/resources/quality/deltacomb/PLA/deltacomb_DBE0.40_PLA_A.inst.cfg index 56774919f8..4c6c7eb463 100755 --- a/resources/quality/deltacomb/PLA/deltacomb_DBE0.40_PLA_A.inst.cfg +++ b/resources/quality/deltacomb/PLA/deltacomb_DBE0.40_PLA_A.inst.cfg @@ -4,7 +4,7 @@ name = A definition = deltacomb_base [metadata] -setting_version = 13 +setting_version = 15 type = quality quality_type = a material = generic_pla diff --git a/resources/quality/deltacomb/PLA/deltacomb_DBE0.40_PLA_B.inst.cfg b/resources/quality/deltacomb/PLA/deltacomb_DBE0.40_PLA_B.inst.cfg index b00f1453d3..2b8f3e73ba 100755 --- a/resources/quality/deltacomb/PLA/deltacomb_DBE0.40_PLA_B.inst.cfg +++ b/resources/quality/deltacomb/PLA/deltacomb_DBE0.40_PLA_B.inst.cfg @@ -4,7 +4,7 @@ name = B definition = deltacomb_base [metadata] -setting_version = 13 +setting_version = 15 type = quality quality_type = b material = generic_pla diff --git a/resources/quality/deltacomb/PLA/deltacomb_DBE0.40_PLA_C.inst.cfg b/resources/quality/deltacomb/PLA/deltacomb_DBE0.40_PLA_C.inst.cfg index 59d3639401..7700215b14 100755 --- a/resources/quality/deltacomb/PLA/deltacomb_DBE0.40_PLA_C.inst.cfg +++ b/resources/quality/deltacomb/PLA/deltacomb_DBE0.40_PLA_C.inst.cfg @@ -4,7 +4,7 @@ name = C definition = deltacomb_base [metadata] -setting_version = 13 +setting_version = 15 type = quality quality_type = c material = generic_pla diff --git a/resources/quality/deltacomb/PLA/deltacomb_DBE0.40_PLA_D.inst.cfg b/resources/quality/deltacomb/PLA/deltacomb_DBE0.40_PLA_D.inst.cfg index 74509cf5c2..73de629d54 100755 --- a/resources/quality/deltacomb/PLA/deltacomb_DBE0.40_PLA_D.inst.cfg +++ b/resources/quality/deltacomb/PLA/deltacomb_DBE0.40_PLA_D.inst.cfg @@ -4,7 +4,7 @@ name = D definition = deltacomb_base [metadata] -setting_version = 13 +setting_version = 15 type = quality quality_type = d material = generic_pla diff --git a/resources/quality/deltacomb/PLA/deltacomb_DBE0.40_PLA_E.inst.cfg b/resources/quality/deltacomb/PLA/deltacomb_DBE0.40_PLA_E.inst.cfg index 1bf1d02dca..d07ec4719a 100755 --- a/resources/quality/deltacomb/PLA/deltacomb_DBE0.40_PLA_E.inst.cfg +++ b/resources/quality/deltacomb/PLA/deltacomb_DBE0.40_PLA_E.inst.cfg @@ -4,7 +4,7 @@ name = E definition = deltacomb_base [metadata] -setting_version = 13 +setting_version = 15 type = quality quality_type = e material = generic_pla diff --git a/resources/quality/deltacomb/PLA/deltacomb_DBE0.60_PLA_C.inst.cfg b/resources/quality/deltacomb/PLA/deltacomb_DBE0.60_PLA_C.inst.cfg index a8d5c2feee..b48ba7bc1d 100755 --- a/resources/quality/deltacomb/PLA/deltacomb_DBE0.60_PLA_C.inst.cfg +++ b/resources/quality/deltacomb/PLA/deltacomb_DBE0.60_PLA_C.inst.cfg @@ -4,7 +4,7 @@ name = C definition = deltacomb_base [metadata] -setting_version = 13 +setting_version = 15 type = quality quality_type = c material = generic_pla diff --git a/resources/quality/deltacomb/PLA/deltacomb_DBE0.60_PLA_D.inst.cfg b/resources/quality/deltacomb/PLA/deltacomb_DBE0.60_PLA_D.inst.cfg index f43d7baa64..7c41ebe440 100755 --- a/resources/quality/deltacomb/PLA/deltacomb_DBE0.60_PLA_D.inst.cfg +++ b/resources/quality/deltacomb/PLA/deltacomb_DBE0.60_PLA_D.inst.cfg @@ -4,7 +4,7 @@ name = D definition = deltacomb_base [metadata] -setting_version = 13 +setting_version = 15 type = quality quality_type = d material = generic_pla diff --git a/resources/quality/deltacomb/PLA/deltacomb_DBE0.60_PLA_E.inst.cfg b/resources/quality/deltacomb/PLA/deltacomb_DBE0.60_PLA_E.inst.cfg index 36770d13aa..21969bb21f 100755 --- a/resources/quality/deltacomb/PLA/deltacomb_DBE0.60_PLA_E.inst.cfg +++ b/resources/quality/deltacomb/PLA/deltacomb_DBE0.60_PLA_E.inst.cfg @@ -4,7 +4,7 @@ name = E definition = deltacomb_base [metadata] -setting_version = 13 +setting_version = 15 type = quality quality_type = e material = generic_pla diff --git a/resources/quality/deltacomb/PLA/deltacomb_DBE0.60_PLA_F.inst.cfg b/resources/quality/deltacomb/PLA/deltacomb_DBE0.60_PLA_F.inst.cfg index 0e1dd0beee..788742ffda 100755 --- a/resources/quality/deltacomb/PLA/deltacomb_DBE0.60_PLA_F.inst.cfg +++ b/resources/quality/deltacomb/PLA/deltacomb_DBE0.60_PLA_F.inst.cfg @@ -4,7 +4,7 @@ name = F definition = deltacomb_base [metadata] -setting_version = 13 +setting_version = 15 type = quality quality_type = f material = generic_pla diff --git a/resources/quality/deltacomb/PLA/deltacomb_FBE0.25_PLA_A.inst.cfg b/resources/quality/deltacomb/PLA/deltacomb_FBE0.25_PLA_A.inst.cfg index 65526428ee..eed43cde94 100755 --- a/resources/quality/deltacomb/PLA/deltacomb_FBE0.25_PLA_A.inst.cfg +++ b/resources/quality/deltacomb/PLA/deltacomb_FBE0.25_PLA_A.inst.cfg @@ -4,7 +4,7 @@ name = A definition = deltacomb_base [metadata] -setting_version = 13 +setting_version = 15 type = quality quality_type = a material = generic_pla diff --git a/resources/quality/deltacomb/PLA/deltacomb_FBE0.25_PLA_B.inst.cfg b/resources/quality/deltacomb/PLA/deltacomb_FBE0.25_PLA_B.inst.cfg index 29bd92bfd7..b887de192f 100755 --- a/resources/quality/deltacomb/PLA/deltacomb_FBE0.25_PLA_B.inst.cfg +++ b/resources/quality/deltacomb/PLA/deltacomb_FBE0.25_PLA_B.inst.cfg @@ -4,7 +4,7 @@ name = B definition = deltacomb_base [metadata] -setting_version = 13 +setting_version = 15 type = quality quality_type = b material = generic_pla diff --git a/resources/quality/deltacomb/PLA/deltacomb_FBE0.25_PLA_C.inst.cfg b/resources/quality/deltacomb/PLA/deltacomb_FBE0.25_PLA_C.inst.cfg index fee2153e5a..b124f4b2e6 100755 --- a/resources/quality/deltacomb/PLA/deltacomb_FBE0.25_PLA_C.inst.cfg +++ b/resources/quality/deltacomb/PLA/deltacomb_FBE0.25_PLA_C.inst.cfg @@ -4,7 +4,7 @@ name = C definition = deltacomb_base [metadata] -setting_version = 13 +setting_version = 15 type = quality quality_type = c material = generic_pla diff --git a/resources/quality/deltacomb/PLA/deltacomb_FBE0.40_PLA_A.inst.cfg b/resources/quality/deltacomb/PLA/deltacomb_FBE0.40_PLA_A.inst.cfg index 65526428ee..eed43cde94 100755 --- a/resources/quality/deltacomb/PLA/deltacomb_FBE0.40_PLA_A.inst.cfg +++ b/resources/quality/deltacomb/PLA/deltacomb_FBE0.40_PLA_A.inst.cfg @@ -4,7 +4,7 @@ name = A definition = deltacomb_base [metadata] -setting_version = 13 +setting_version = 15 type = quality quality_type = a material = generic_pla diff --git a/resources/quality/deltacomb/PLA/deltacomb_FBE0.40_PLA_B.inst.cfg b/resources/quality/deltacomb/PLA/deltacomb_FBE0.40_PLA_B.inst.cfg index 88196992d1..e7b9cbb2fd 100755 --- a/resources/quality/deltacomb/PLA/deltacomb_FBE0.40_PLA_B.inst.cfg +++ b/resources/quality/deltacomb/PLA/deltacomb_FBE0.40_PLA_B.inst.cfg @@ -4,7 +4,7 @@ name = B definition = deltacomb_base [metadata] -setting_version = 13 +setting_version = 15 type = quality quality_type = b material = generic_pla diff --git a/resources/quality/deltacomb/PLA/deltacomb_FBE0.40_PLA_C.inst.cfg b/resources/quality/deltacomb/PLA/deltacomb_FBE0.40_PLA_C.inst.cfg index e3756344b9..a5f6090d19 100755 --- a/resources/quality/deltacomb/PLA/deltacomb_FBE0.40_PLA_C.inst.cfg +++ b/resources/quality/deltacomb/PLA/deltacomb_FBE0.40_PLA_C.inst.cfg @@ -4,7 +4,7 @@ name = C definition = deltacomb_base [metadata] -setting_version = 13 +setting_version = 15 type = quality quality_type = c material = generic_pla diff --git a/resources/quality/deltacomb/PLA/deltacomb_FBE0.40_PLA_D.inst.cfg b/resources/quality/deltacomb/PLA/deltacomb_FBE0.40_PLA_D.inst.cfg index 054a2c7389..736c078c1b 100755 --- a/resources/quality/deltacomb/PLA/deltacomb_FBE0.40_PLA_D.inst.cfg +++ b/resources/quality/deltacomb/PLA/deltacomb_FBE0.40_PLA_D.inst.cfg @@ -4,7 +4,7 @@ name = D definition = deltacomb_base [metadata] -setting_version = 13 +setting_version = 15 type = quality quality_type = d material = generic_pla diff --git a/resources/quality/deltacomb/PLA/deltacomb_FBE0.40_PLA_E.inst.cfg b/resources/quality/deltacomb/PLA/deltacomb_FBE0.40_PLA_E.inst.cfg index a6dac8bb8a..9311f36c53 100755 --- a/resources/quality/deltacomb/PLA/deltacomb_FBE0.40_PLA_E.inst.cfg +++ b/resources/quality/deltacomb/PLA/deltacomb_FBE0.40_PLA_E.inst.cfg @@ -4,7 +4,7 @@ name = E definition = deltacomb_base [metadata] -setting_version = 13 +setting_version = 15 type = quality quality_type = e material = generic_pla diff --git a/resources/quality/deltacomb/PLA/deltacomb_FBE0.60_PLA_C.inst.cfg b/resources/quality/deltacomb/PLA/deltacomb_FBE0.60_PLA_C.inst.cfg index ffdb9efcc2..a5ed9bb6ad 100755 --- a/resources/quality/deltacomb/PLA/deltacomb_FBE0.60_PLA_C.inst.cfg +++ b/resources/quality/deltacomb/PLA/deltacomb_FBE0.60_PLA_C.inst.cfg @@ -4,7 +4,7 @@ name = C definition = deltacomb_base [metadata] -setting_version = 13 +setting_version = 15 type = quality quality_type = c material = generic_pla diff --git a/resources/quality/deltacomb/PLA/deltacomb_FBE0.60_PLA_D.inst.cfg b/resources/quality/deltacomb/PLA/deltacomb_FBE0.60_PLA_D.inst.cfg index 4cda218214..6c2ab49968 100755 --- a/resources/quality/deltacomb/PLA/deltacomb_FBE0.60_PLA_D.inst.cfg +++ b/resources/quality/deltacomb/PLA/deltacomb_FBE0.60_PLA_D.inst.cfg @@ -4,7 +4,7 @@ name = D definition = deltacomb_base [metadata] -setting_version = 13 +setting_version = 15 type = quality quality_type = d material = generic_pla diff --git a/resources/quality/deltacomb/PLA/deltacomb_FBE0.60_PLA_E.inst.cfg b/resources/quality/deltacomb/PLA/deltacomb_FBE0.60_PLA_E.inst.cfg index 790add6597..e4eaefbc69 100755 --- a/resources/quality/deltacomb/PLA/deltacomb_FBE0.60_PLA_E.inst.cfg +++ b/resources/quality/deltacomb/PLA/deltacomb_FBE0.60_PLA_E.inst.cfg @@ -4,7 +4,7 @@ name = E definition = deltacomb_base [metadata] -setting_version = 13 +setting_version = 15 type = quality quality_type = e material = generic_pla diff --git a/resources/quality/deltacomb/PLA/deltacomb_FBE0.60_PLA_F.inst.cfg b/resources/quality/deltacomb/PLA/deltacomb_FBE0.60_PLA_F.inst.cfg index fb737562ea..38027b0075 100755 --- a/resources/quality/deltacomb/PLA/deltacomb_FBE0.60_PLA_F.inst.cfg +++ b/resources/quality/deltacomb/PLA/deltacomb_FBE0.60_PLA_F.inst.cfg @@ -4,7 +4,7 @@ name = F definition = deltacomb_base [metadata] -setting_version = 13 +setting_version = 15 type = quality quality_type = f material = generic_pla diff --git a/resources/quality/deltacomb/PLA/deltacomb_VDBE0.80_PLA_D.inst.cfg b/resources/quality/deltacomb/PLA/deltacomb_VDBE0.80_PLA_D.inst.cfg index a5742c1e75..e16ba1d877 100755 --- a/resources/quality/deltacomb/PLA/deltacomb_VDBE0.80_PLA_D.inst.cfg +++ b/resources/quality/deltacomb/PLA/deltacomb_VDBE0.80_PLA_D.inst.cfg @@ -4,7 +4,7 @@ name = D definition = deltacomb_base [metadata] -setting_version = 13 +setting_version = 15 type = quality quality_type = d material = generic_pla diff --git a/resources/quality/deltacomb/PLA/deltacomb_VDBE0.80_PLA_E.inst.cfg b/resources/quality/deltacomb/PLA/deltacomb_VDBE0.80_PLA_E.inst.cfg index c3aec5a285..a347e605cb 100755 --- a/resources/quality/deltacomb/PLA/deltacomb_VDBE0.80_PLA_E.inst.cfg +++ b/resources/quality/deltacomb/PLA/deltacomb_VDBE0.80_PLA_E.inst.cfg @@ -4,7 +4,7 @@ name = E definition = deltacomb_base [metadata] -setting_version = 13 +setting_version = 15 type = quality quality_type = e material = generic_pla diff --git a/resources/quality/deltacomb/PLA/deltacomb_VDBE0.80_PLA_F.inst.cfg b/resources/quality/deltacomb/PLA/deltacomb_VDBE0.80_PLA_F.inst.cfg index 93ddb51597..0ff1b784ae 100755 --- a/resources/quality/deltacomb/PLA/deltacomb_VDBE0.80_PLA_F.inst.cfg +++ b/resources/quality/deltacomb/PLA/deltacomb_VDBE0.80_PLA_F.inst.cfg @@ -4,7 +4,7 @@ name = F definition = deltacomb_base [metadata] -setting_version = 13 +setting_version = 15 type = quality quality_type = f material = generic_pla diff --git a/resources/quality/deltacomb/PLA/deltacomb_VDBE0.80_PLA_G.inst.cfg b/resources/quality/deltacomb/PLA/deltacomb_VDBE0.80_PLA_G.inst.cfg index 2050d62d7b..a3dc27b16c 100755 --- a/resources/quality/deltacomb/PLA/deltacomb_VDBE0.80_PLA_G.inst.cfg +++ b/resources/quality/deltacomb/PLA/deltacomb_VDBE0.80_PLA_G.inst.cfg @@ -4,7 +4,7 @@ name = G definition = deltacomb_base [metadata] -setting_version = 13 +setting_version = 15 type = quality quality_type = g material = generic_pla diff --git a/resources/quality/deltacomb/PLA/deltacomb_VFBE0.80_PLA_D.inst.cfg b/resources/quality/deltacomb/PLA/deltacomb_VFBE0.80_PLA_D.inst.cfg index 7f5cdf101e..a103bb25e1 100755 --- a/resources/quality/deltacomb/PLA/deltacomb_VFBE0.80_PLA_D.inst.cfg +++ b/resources/quality/deltacomb/PLA/deltacomb_VFBE0.80_PLA_D.inst.cfg @@ -4,7 +4,7 @@ name = D definition = deltacomb_base [metadata] -setting_version = 13 +setting_version = 15 type = quality quality_type = d material = generic_pla diff --git a/resources/quality/deltacomb/PLA/deltacomb_VFBE0.80_PLA_E.inst.cfg b/resources/quality/deltacomb/PLA/deltacomb_VFBE0.80_PLA_E.inst.cfg index 6ea961b84b..2f806692b6 100755 --- a/resources/quality/deltacomb/PLA/deltacomb_VFBE0.80_PLA_E.inst.cfg +++ b/resources/quality/deltacomb/PLA/deltacomb_VFBE0.80_PLA_E.inst.cfg @@ -4,7 +4,7 @@ name = E definition = deltacomb_base [metadata] -setting_version = 13 +setting_version = 15 type = quality quality_type = e material = generic_pla diff --git a/resources/quality/deltacomb/PLA/deltacomb_VFBE0.80_PLA_F.inst.cfg b/resources/quality/deltacomb/PLA/deltacomb_VFBE0.80_PLA_F.inst.cfg index a4682b279a..c7a10c7f23 100755 --- a/resources/quality/deltacomb/PLA/deltacomb_VFBE0.80_PLA_F.inst.cfg +++ b/resources/quality/deltacomb/PLA/deltacomb_VFBE0.80_PLA_F.inst.cfg @@ -4,7 +4,7 @@ name = F definition = deltacomb_base [metadata] -setting_version = 13 +setting_version = 15 type = quality quality_type = f material = generic_pla diff --git a/resources/quality/deltacomb/PLA/deltacomb_VFBE0.80_PLA_G.inst.cfg b/resources/quality/deltacomb/PLA/deltacomb_VFBE0.80_PLA_G.inst.cfg index 7c3ecb2282..e7bc4398a6 100755 --- a/resources/quality/deltacomb/PLA/deltacomb_VFBE0.80_PLA_G.inst.cfg +++ b/resources/quality/deltacomb/PLA/deltacomb_VFBE0.80_PLA_G.inst.cfg @@ -4,7 +4,7 @@ name = G definition = deltacomb_base [metadata] -setting_version = 13 +setting_version = 15 type = quality quality_type = g material = generic_pla diff --git a/resources/quality/deltacomb/TPU/deltacomb_FBE0.40_TPU_B.inst.cfg b/resources/quality/deltacomb/TPU/deltacomb_FBE0.40_TPU_B.inst.cfg index e5063133d3..25f7877f6d 100755 --- a/resources/quality/deltacomb/TPU/deltacomb_FBE0.40_TPU_B.inst.cfg +++ b/resources/quality/deltacomb/TPU/deltacomb_FBE0.40_TPU_B.inst.cfg @@ -4,7 +4,7 @@ name = B definition = deltacomb_base [metadata] -setting_version = 13 +setting_version = 15 type = quality quality_type = b material = generic_tpu diff --git a/resources/quality/deltacomb/TPU/deltacomb_FBE0.40_TPU_C.inst.cfg b/resources/quality/deltacomb/TPU/deltacomb_FBE0.40_TPU_C.inst.cfg index aee2528a9c..303093413a 100755 --- a/resources/quality/deltacomb/TPU/deltacomb_FBE0.40_TPU_C.inst.cfg +++ b/resources/quality/deltacomb/TPU/deltacomb_FBE0.40_TPU_C.inst.cfg @@ -4,7 +4,7 @@ name = C definition = deltacomb_base [metadata] -setting_version = 13 +setting_version = 15 type = quality quality_type = c material = generic_tpu diff --git a/resources/quality/deltacomb/TPU/deltacomb_FBE0.40_TPU_D.inst.cfg b/resources/quality/deltacomb/TPU/deltacomb_FBE0.40_TPU_D.inst.cfg index 57033a66c3..d51e640be5 100755 --- a/resources/quality/deltacomb/TPU/deltacomb_FBE0.40_TPU_D.inst.cfg +++ b/resources/quality/deltacomb/TPU/deltacomb_FBE0.40_TPU_D.inst.cfg @@ -4,7 +4,7 @@ name = D definition = deltacomb_base [metadata] -setting_version = 13 +setting_version = 15 type = quality quality_type = d material = generic_tpu diff --git a/resources/quality/deltacomb/deltacomb_global_A.inst.cfg b/resources/quality/deltacomb/deltacomb_global_A.inst.cfg index b208e27391..7541ba7ec5 100755 --- a/resources/quality/deltacomb/deltacomb_global_A.inst.cfg +++ b/resources/quality/deltacomb/deltacomb_global_A.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fine definition = deltacomb_base [metadata] -setting_version = 13 +setting_version = 15 type = quality quality_type = a weight = 1 diff --git a/resources/quality/deltacomb/deltacomb_global_B.inst.cfg b/resources/quality/deltacomb/deltacomb_global_B.inst.cfg index 8c92b1e79a..f37234d357 100755 --- a/resources/quality/deltacomb/deltacomb_global_B.inst.cfg +++ b/resources/quality/deltacomb/deltacomb_global_B.inst.cfg @@ -4,7 +4,7 @@ name = Fine definition = deltacomb_base [metadata] -setting_version = 13 +setting_version = 15 type = quality quality_type = b weight = 0 diff --git a/resources/quality/deltacomb/deltacomb_global_C.inst.cfg b/resources/quality/deltacomb/deltacomb_global_C.inst.cfg index fc4f71f06f..691c845c1a 100755 --- a/resources/quality/deltacomb/deltacomb_global_C.inst.cfg +++ b/resources/quality/deltacomb/deltacomb_global_C.inst.cfg @@ -4,7 +4,7 @@ name = Normal definition = deltacomb_base [metadata] -setting_version = 13 +setting_version = 15 type = quality quality_type = c weight = -1 diff --git a/resources/quality/deltacomb/deltacomb_global_D.inst.cfg b/resources/quality/deltacomb/deltacomb_global_D.inst.cfg index dc2186ed38..e70970ab4f 100755 --- a/resources/quality/deltacomb/deltacomb_global_D.inst.cfg +++ b/resources/quality/deltacomb/deltacomb_global_D.inst.cfg @@ -4,7 +4,7 @@ name = Fast definition = deltacomb_base [metadata] -setting_version = 13 +setting_version = 15 type = quality quality_type = d weight = -2 diff --git a/resources/quality/deltacomb/deltacomb_global_E.inst.cfg b/resources/quality/deltacomb/deltacomb_global_E.inst.cfg index 6d57424cec..b38a9435fb 100755 --- a/resources/quality/deltacomb/deltacomb_global_E.inst.cfg +++ b/resources/quality/deltacomb/deltacomb_global_E.inst.cfg @@ -4,7 +4,7 @@ name = Extra Fast definition = deltacomb_base [metadata] -setting_version = 13 +setting_version = 15 type = quality quality_type = e weight = -3 diff --git a/resources/quality/deltacomb/deltacomb_global_F.inst.cfg b/resources/quality/deltacomb/deltacomb_global_F.inst.cfg index b696cd06ae..e113397039 100755 --- a/resources/quality/deltacomb/deltacomb_global_F.inst.cfg +++ b/resources/quality/deltacomb/deltacomb_global_F.inst.cfg @@ -4,7 +4,7 @@ name = Coarse definition = deltacomb_base [metadata] -setting_version = 13 +setting_version = 15 type = quality quality_type = f weight = -4 diff --git a/resources/quality/deltacomb/deltacomb_global_G.inst.cfg b/resources/quality/deltacomb/deltacomb_global_G.inst.cfg index 88b525ffb6..776c7874dc 100755 --- a/resources/quality/deltacomb/deltacomb_global_G.inst.cfg +++ b/resources/quality/deltacomb/deltacomb_global_G.inst.cfg @@ -4,7 +4,7 @@ name = Extra Coarse definition = deltacomb_base [metadata] -setting_version = 13 +setting_version = 15 type = quality quality_type = g weight = -5 diff --git a/resources/variants/deltacomb/deltacomb_dc20_fbe025.inst.cfg b/resources/variants/deltacomb/deltacomb_dc20_fbe025.inst.cfg index c4601d3cb3..62f49821d6 100644 --- a/resources/variants/deltacomb/deltacomb_dc20_fbe025.inst.cfg +++ b/resources/variants/deltacomb/deltacomb_dc20_fbe025.inst.cfg @@ -5,7 +5,7 @@ definition = deltacomb_dc20 [metadata] author = Deltacomb 3D -setting_version = 13 +setting_version = 15 type = variant hardware_type = nozzle diff --git a/resources/variants/deltacomb/deltacomb_dc20_fbe040.inst.cfg b/resources/variants/deltacomb/deltacomb_dc20_fbe040.inst.cfg index dae60b0cf6..878e663f90 100644 --- a/resources/variants/deltacomb/deltacomb_dc20_fbe040.inst.cfg +++ b/resources/variants/deltacomb/deltacomb_dc20_fbe040.inst.cfg @@ -5,7 +5,7 @@ definition = deltacomb_dc20 [metadata] author = Deltacomb 3D -setting_version = 13 +setting_version = 15 type = variant hardware_type = nozzle diff --git a/resources/variants/deltacomb/deltacomb_dc20_fbe060.inst.cfg b/resources/variants/deltacomb/deltacomb_dc20_fbe060.inst.cfg index 256f12e6cf..c8321d3b4f 100644 --- a/resources/variants/deltacomb/deltacomb_dc20_fbe060.inst.cfg +++ b/resources/variants/deltacomb/deltacomb_dc20_fbe060.inst.cfg @@ -5,7 +5,7 @@ definition = deltacomb_dc20 [metadata] author = Deltacomb 3D -setting_version = 13 +setting_version = 15 type = variant hardware_type = nozzle diff --git a/resources/variants/deltacomb/deltacomb_dc20_vfbe080.inst.cfg b/resources/variants/deltacomb/deltacomb_dc20_vfbe080.inst.cfg index 803882f08f..7660498767 100755 --- a/resources/variants/deltacomb/deltacomb_dc20_vfbe080.inst.cfg +++ b/resources/variants/deltacomb/deltacomb_dc20_vfbe080.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = deltacomb_dc20 [metadata] -setting_version = 13 +setting_version = 15 type = variant hardware_type = nozzle diff --git a/resources/variants/deltacomb/deltacomb_dc20dual_dbe025.inst.cfg b/resources/variants/deltacomb/deltacomb_dc20dual_dbe025.inst.cfg index d1d4be2046..ad0e008338 100755 --- a/resources/variants/deltacomb/deltacomb_dc20dual_dbe025.inst.cfg +++ b/resources/variants/deltacomb/deltacomb_dc20dual_dbe025.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = deltacomb_dc20dual [metadata] -setting_version = 13 +setting_version = 15 type = variant hardware_type = nozzle diff --git a/resources/variants/deltacomb/deltacomb_dc20dual_dbe040.inst.cfg b/resources/variants/deltacomb/deltacomb_dc20dual_dbe040.inst.cfg index c19bcc8b03..b2208ee556 100755 --- a/resources/variants/deltacomb/deltacomb_dc20dual_dbe040.inst.cfg +++ b/resources/variants/deltacomb/deltacomb_dc20dual_dbe040.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = deltacomb_dc20dual [metadata] -setting_version = 13 +setting_version = 15 type = variant hardware_type = nozzle diff --git a/resources/variants/deltacomb/deltacomb_dc20dual_dbe060.inst.cfg b/resources/variants/deltacomb/deltacomb_dc20dual_dbe060.inst.cfg index 2ca7e29e80..177b782a16 100755 --- a/resources/variants/deltacomb/deltacomb_dc20dual_dbe060.inst.cfg +++ b/resources/variants/deltacomb/deltacomb_dc20dual_dbe060.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = deltacomb_dc20dual [metadata] -setting_version = 13 +setting_version = 15 type = variant hardware_type = nozzle diff --git a/resources/variants/deltacomb/deltacomb_dc20dual_vdbe080.inst.cfg b/resources/variants/deltacomb/deltacomb_dc20dual_vdbe080.inst.cfg index 6a1e0f9a48..8233eecf59 100755 --- a/resources/variants/deltacomb/deltacomb_dc20dual_vdbe080.inst.cfg +++ b/resources/variants/deltacomb/deltacomb_dc20dual_vdbe080.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = deltacomb_dc20dual [metadata] -setting_version = 13 +setting_version = 15 type = variant hardware_type = nozzle diff --git a/resources/variants/deltacomb/deltacomb_dc20flux_fbe025.inst.cfg b/resources/variants/deltacomb/deltacomb_dc20flux_fbe025.inst.cfg index 8ef432ba6b..81d5cfc900 100755 --- a/resources/variants/deltacomb/deltacomb_dc20flux_fbe025.inst.cfg +++ b/resources/variants/deltacomb/deltacomb_dc20flux_fbe025.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = deltacomb_dc20flux [metadata] -setting_version = 13 +setting_version = 15 type = variant hardware_type = nozzle diff --git a/resources/variants/deltacomb/deltacomb_dc20flux_fbe040.inst.cfg b/resources/variants/deltacomb/deltacomb_dc20flux_fbe040.inst.cfg index df318bc027..c0fe84306a 100755 --- a/resources/variants/deltacomb/deltacomb_dc20flux_fbe040.inst.cfg +++ b/resources/variants/deltacomb/deltacomb_dc20flux_fbe040.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = deltacomb_dc20flux [metadata] -setting_version = 13 +setting_version = 15 type = variant hardware_type = nozzle diff --git a/resources/variants/deltacomb/deltacomb_dc20flux_fbe060.inst.cfg b/resources/variants/deltacomb/deltacomb_dc20flux_fbe060.inst.cfg index d9ad352a67..4305d12e72 100755 --- a/resources/variants/deltacomb/deltacomb_dc20flux_fbe060.inst.cfg +++ b/resources/variants/deltacomb/deltacomb_dc20flux_fbe060.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = deltacomb_dc20flux [metadata] -setting_version = 13 +setting_version = 15 type = variant hardware_type = nozzle diff --git a/resources/variants/deltacomb/deltacomb_dc21_fbe025.inst.cfg b/resources/variants/deltacomb/deltacomb_dc21_fbe025.inst.cfg index 6cb5897e55..964b7ec6ed 100755 --- a/resources/variants/deltacomb/deltacomb_dc21_fbe025.inst.cfg +++ b/resources/variants/deltacomb/deltacomb_dc21_fbe025.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = deltacomb_dc21 [metadata] -setting_version = 13 +setting_version = 15 type = variant hardware_type = nozzle diff --git a/resources/variants/deltacomb/deltacomb_dc21_fbe040.inst.cfg b/resources/variants/deltacomb/deltacomb_dc21_fbe040.inst.cfg index 746ade37bd..827098ee13 100755 --- a/resources/variants/deltacomb/deltacomb_dc21_fbe040.inst.cfg +++ b/resources/variants/deltacomb/deltacomb_dc21_fbe040.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = deltacomb_dc21 [metadata] -setting_version = 13 +setting_version = 15 type = variant hardware_type = nozzle diff --git a/resources/variants/deltacomb/deltacomb_dc21_fbe060.inst.cfg b/resources/variants/deltacomb/deltacomb_dc21_fbe060.inst.cfg index af3db3f343..ff60930326 100755 --- a/resources/variants/deltacomb/deltacomb_dc21_fbe060.inst.cfg +++ b/resources/variants/deltacomb/deltacomb_dc21_fbe060.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = deltacomb_dc21 [metadata] -setting_version = 13 +setting_version = 15 type = variant hardware_type = nozzle diff --git a/resources/variants/deltacomb/deltacomb_dc21_vfbe080.inst.cfg b/resources/variants/deltacomb/deltacomb_dc21_vfbe080.inst.cfg index 0a79a90704..f8c357ef7d 100755 --- a/resources/variants/deltacomb/deltacomb_dc21_vfbe080.inst.cfg +++ b/resources/variants/deltacomb/deltacomb_dc21_vfbe080.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = deltacomb_dc21 [metadata] -setting_version = 13 +setting_version = 15 type = variant hardware_type = nozzle diff --git a/resources/variants/deltacomb/deltacomb_dc21dual_dbe025.inst.cfg b/resources/variants/deltacomb/deltacomb_dc21dual_dbe025.inst.cfg index 4c514efc37..18807199b4 100755 --- a/resources/variants/deltacomb/deltacomb_dc21dual_dbe025.inst.cfg +++ b/resources/variants/deltacomb/deltacomb_dc21dual_dbe025.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = deltacomb_dc21dual [metadata] -setting_version = 13 +setting_version = 15 type = variant hardware_type = nozzle diff --git a/resources/variants/deltacomb/deltacomb_dc21dual_dbe040.inst.cfg b/resources/variants/deltacomb/deltacomb_dc21dual_dbe040.inst.cfg index 8373472653..0a2d933c48 100755 --- a/resources/variants/deltacomb/deltacomb_dc21dual_dbe040.inst.cfg +++ b/resources/variants/deltacomb/deltacomb_dc21dual_dbe040.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = deltacomb_dc21dual [metadata] -setting_version = 13 +setting_version = 15 type = variant hardware_type = nozzle diff --git a/resources/variants/deltacomb/deltacomb_dc21dual_dbe060.inst.cfg b/resources/variants/deltacomb/deltacomb_dc21dual_dbe060.inst.cfg index b0a533b9d9..4785d44050 100755 --- a/resources/variants/deltacomb/deltacomb_dc21dual_dbe060.inst.cfg +++ b/resources/variants/deltacomb/deltacomb_dc21dual_dbe060.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = deltacomb_dc21dual [metadata] -setting_version = 13 +setting_version = 15 type = variant hardware_type = nozzle diff --git a/resources/variants/deltacomb/deltacomb_dc21dual_vdbe080.inst.cfg b/resources/variants/deltacomb/deltacomb_dc21dual_vdbe080.inst.cfg index 9b5dc79aee..b4f93890ea 100755 --- a/resources/variants/deltacomb/deltacomb_dc21dual_vdbe080.inst.cfg +++ b/resources/variants/deltacomb/deltacomb_dc21dual_vdbe080.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = deltacomb_dc21dual [metadata] -setting_version = 13 +setting_version = 15 type = variant hardware_type = nozzle diff --git a/resources/variants/deltacomb/deltacomb_dc21flux_fbe025.inst.cfg b/resources/variants/deltacomb/deltacomb_dc21flux_fbe025.inst.cfg index e5c25307af..25baf1efbf 100755 --- a/resources/variants/deltacomb/deltacomb_dc21flux_fbe025.inst.cfg +++ b/resources/variants/deltacomb/deltacomb_dc21flux_fbe025.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = deltacomb_dc21flux [metadata] -setting_version = 13 +setting_version = 15 type = variant hardware_type = nozzle diff --git a/resources/variants/deltacomb/deltacomb_dc21flux_fbe040.inst.cfg b/resources/variants/deltacomb/deltacomb_dc21flux_fbe040.inst.cfg index 1fd02e6a33..c3b57a530d 100755 --- a/resources/variants/deltacomb/deltacomb_dc21flux_fbe040.inst.cfg +++ b/resources/variants/deltacomb/deltacomb_dc21flux_fbe040.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = deltacomb_dc21flux [metadata] -setting_version = 13 +setting_version = 15 type = variant hardware_type = nozzle diff --git a/resources/variants/deltacomb/deltacomb_dc21flux_fbe060.inst.cfg b/resources/variants/deltacomb/deltacomb_dc21flux_fbe060.inst.cfg index 79d7ce9561..a431785bd6 100755 --- a/resources/variants/deltacomb/deltacomb_dc21flux_fbe060.inst.cfg +++ b/resources/variants/deltacomb/deltacomb_dc21flux_fbe060.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = deltacomb_dc21flux [metadata] -setting_version = 13 +setting_version = 15 type = variant hardware_type = nozzle diff --git a/resources/variants/deltacomb/deltacomb_dc30_fbe025.inst.cfg b/resources/variants/deltacomb/deltacomb_dc30_fbe025.inst.cfg index c4cdf4771b..34456acefc 100755 --- a/resources/variants/deltacomb/deltacomb_dc30_fbe025.inst.cfg +++ b/resources/variants/deltacomb/deltacomb_dc30_fbe025.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = deltacomb_dc30 [metadata] -setting_version = 13 +setting_version = 15 type = variant hardware_type = nozzle diff --git a/resources/variants/deltacomb/deltacomb_dc30_fbe040.inst.cfg b/resources/variants/deltacomb/deltacomb_dc30_fbe040.inst.cfg index e80b95d8b1..7229469d9d 100755 --- a/resources/variants/deltacomb/deltacomb_dc30_fbe040.inst.cfg +++ b/resources/variants/deltacomb/deltacomb_dc30_fbe040.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = deltacomb_dc30 [metadata] -setting_version = 13 +setting_version = 15 type = variant hardware_type = nozzle diff --git a/resources/variants/deltacomb/deltacomb_dc30_fbe060.inst.cfg b/resources/variants/deltacomb/deltacomb_dc30_fbe060.inst.cfg index cd7695b4cd..bbee12aedd 100755 --- a/resources/variants/deltacomb/deltacomb_dc30_fbe060.inst.cfg +++ b/resources/variants/deltacomb/deltacomb_dc30_fbe060.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = deltacomb_dc30 [metadata] -setting_version = 13 +setting_version = 15 type = variant hardware_type = nozzle diff --git a/resources/variants/deltacomb/deltacomb_dc30_vfbe080.inst.cfg b/resources/variants/deltacomb/deltacomb_dc30_vfbe080.inst.cfg index a322c76681..40332863b6 100755 --- a/resources/variants/deltacomb/deltacomb_dc30_vfbe080.inst.cfg +++ b/resources/variants/deltacomb/deltacomb_dc30_vfbe080.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = deltacomb_dc30 [metadata] -setting_version = 13 +setting_version = 15 type = variant hardware_type = nozzle diff --git a/resources/variants/deltacomb/deltacomb_dc30dual_dbe025.inst.cfg b/resources/variants/deltacomb/deltacomb_dc30dual_dbe025.inst.cfg index 1c97943793..3c3c6f0fd0 100755 --- a/resources/variants/deltacomb/deltacomb_dc30dual_dbe025.inst.cfg +++ b/resources/variants/deltacomb/deltacomb_dc30dual_dbe025.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = deltacomb_dc30dual [metadata] -setting_version = 13 +setting_version = 15 type = variant hardware_type = nozzle diff --git a/resources/variants/deltacomb/deltacomb_dc30dual_dbe040.inst.cfg b/resources/variants/deltacomb/deltacomb_dc30dual_dbe040.inst.cfg index ea56a88fbf..7485ac2462 100755 --- a/resources/variants/deltacomb/deltacomb_dc30dual_dbe040.inst.cfg +++ b/resources/variants/deltacomb/deltacomb_dc30dual_dbe040.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = deltacomb_dc30dual [metadata] -setting_version = 13 +setting_version = 15 type = variant hardware_type = nozzle diff --git a/resources/variants/deltacomb/deltacomb_dc30dual_dbe060.inst.cfg b/resources/variants/deltacomb/deltacomb_dc30dual_dbe060.inst.cfg index 63e8ffbde6..9254085faa 100755 --- a/resources/variants/deltacomb/deltacomb_dc30dual_dbe060.inst.cfg +++ b/resources/variants/deltacomb/deltacomb_dc30dual_dbe060.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = deltacomb_dc30dual [metadata] -setting_version = 13 +setting_version = 15 type = variant hardware_type = nozzle diff --git a/resources/variants/deltacomb/deltacomb_dc30dual_vdbe080.inst.cfg b/resources/variants/deltacomb/deltacomb_dc30dual_vdbe080.inst.cfg index 380677fe19..670dfb4d70 100755 --- a/resources/variants/deltacomb/deltacomb_dc30dual_vdbe080.inst.cfg +++ b/resources/variants/deltacomb/deltacomb_dc30dual_vdbe080.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = deltacomb_dc30dual [metadata] -setting_version = 13 +setting_version = 15 type = variant hardware_type = nozzle diff --git a/resources/variants/deltacomb/deltacomb_dc30flux_fbe025.inst.cfg b/resources/variants/deltacomb/deltacomb_dc30flux_fbe025.inst.cfg index 824f20b104..b4a62d6ca9 100755 --- a/resources/variants/deltacomb/deltacomb_dc30flux_fbe025.inst.cfg +++ b/resources/variants/deltacomb/deltacomb_dc30flux_fbe025.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = deltacomb_dc30flux [metadata] -setting_version = 13 +setting_version = 15 type = variant hardware_type = nozzle diff --git a/resources/variants/deltacomb/deltacomb_dc30flux_fbe040.inst.cfg b/resources/variants/deltacomb/deltacomb_dc30flux_fbe040.inst.cfg index bb11cbc085..e30eb5c109 100755 --- a/resources/variants/deltacomb/deltacomb_dc30flux_fbe040.inst.cfg +++ b/resources/variants/deltacomb/deltacomb_dc30flux_fbe040.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = deltacomb_dc30flux [metadata] -setting_version = 13 +setting_version = 15 type = variant hardware_type = nozzle diff --git a/resources/variants/deltacomb/deltacomb_dc30flux_fbe060.inst.cfg b/resources/variants/deltacomb/deltacomb_dc30flux_fbe060.inst.cfg index 04fde6b446..426f0323fa 100755 --- a/resources/variants/deltacomb/deltacomb_dc30flux_fbe060.inst.cfg +++ b/resources/variants/deltacomb/deltacomb_dc30flux_fbe060.inst.cfg @@ -4,7 +4,7 @@ version = 4 definition = deltacomb_dc30flux [metadata] -setting_version = 13 +setting_version = 15 type = variant hardware_type = nozzle From 598a32eb1eadc2b1c795e60474c6d99c42fec30b Mon Sep 17 00:00:00 2001 From: maukcc Date: Tue, 12 May 2020 10:34:29 +0200 Subject: [PATCH 032/116] HMS434 update set pid depending on nozzle temp set chamberfans according to temp --- resources/definitions/hms434.def.json | 2 +- resources/extruders/hms434_tool_1.def.json | 2 +- resources/extruders/hms434_tool_2.def.json | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/resources/definitions/hms434.def.json b/resources/definitions/hms434.def.json index dd3eeb84db..d686b5b0d0 100644 --- a/resources/definitions/hms434.def.json +++ b/resources/definitions/hms434.def.json @@ -70,7 +70,7 @@ "material_bed_temp_wait": {"default_value": false }, "machine_max_feedrate_z": {"default_value": 10 }, "machine_acceleration": {"default_value": 180 }, - "machine_start_gcode": {"default_value": "\n;Neither Hybrid AM Systems nor any of Hybrid AM Systems representatives has any liabilities or gives any warranties on this .gcode file, or on any or all objects made with this .gcode file.\n\nM140 S{material_bed_temperature_layer_0}\n\nM117 Homing Y ......\nG28 Y\nM117 Homing X ......\nG28 X\nM117 Homing Z ......\nG28 Z F100\n\nG1 Z10 F900\nG1 X-25 Y20 F12000\n\nM190 S{material_bed_temperature_layer_0}\nM117 HMS434 Printing ...\n\nM42 P10 S255 ; chamberfans on" }, + "machine_start_gcode": {"default_value": "\n;Neither Hybrid AM Systems nor any of Hybrid AM Systems representatives has any liabilities or gives any warranties on this .gcode file, or on any or all objects made with this .gcode file.\n\nM140 S{material_bed_temperature_layer_0}\n\nM117 Homing Y ......\nG28 Y\nM117 Homing X ......\nG28 X\nM117 Homing Z ......\nG28 Z F100\n\nG1 Z10 F900\nG1 X-25 Y20 F12000\n\nM141 S{build_volume_temperature}\nM118 set chamberfan\nM190 S{material_bed_temperature_layer_0}\n\nM118 set pid\n\nM117 HMS434 Printing ..." }, "machine_end_gcode": {"default_value": "" }, "retraction_extra_prime_amount": {"minimum_value_warning": "-2.0" }, diff --git a/resources/extruders/hms434_tool_1.def.json b/resources/extruders/hms434_tool_1.def.json index e37ee0abfc..9e8a868020 100644 --- a/resources/extruders/hms434_tool_1.def.json +++ b/resources/extruders/hms434_tool_1.def.json @@ -16,7 +16,7 @@ "machine_nozzle_offset_y": { "default_value": 0.0 }, "material_diameter": { "default_value": 1.75 }, "machine_extruder_start_code": { - "default_value": "\n;changing to tool1\nM83\nM109 T0 S{material_print_temperature}\nG1 E{switch_extruder_retraction_amount} F300\nG1 E{switch_extruder_retraction_amount} F300\nG1 E{switch_extruder_retraction_amount} F300\nG1 E{switch_extruder_retraction_amount} F300\nG1 E-{switch_extruder_retraction_amount} F2400\nG1 Y40 F3000\nG1 X10 F12000\n\n" + "default_value": "\n;changing to tool1\nM83\nM109 T0 S{material_print_temperature}\nM118 set pid\nG1 E{switch_extruder_retraction_amount} F300\nG1 E{switch_extruder_retraction_amount} F300\nG1 E{switch_extruder_retraction_amount} F300\nG1 E{switch_extruder_retraction_amount} F300\nG1 E-{switch_extruder_retraction_amount} F2400\nG1 Y40 F3000\nG1 X10 F12000\n\n" }, "machine_extruder_end_code": { "default_value": "\nG1 X10 Y40 F12000\nG1 X-25 F12000\nM109 T0 R{material_standby_temperature}\nG1 Y20 F3000\n; ending tool1\n\n" diff --git a/resources/extruders/hms434_tool_2.def.json b/resources/extruders/hms434_tool_2.def.json index 2300331e39..48cfca2bba 100644 --- a/resources/extruders/hms434_tool_2.def.json +++ b/resources/extruders/hms434_tool_2.def.json @@ -16,7 +16,7 @@ "machine_nozzle_offset_y": { "default_value": 0.0 }, "material_diameter": { "default_value": 1.75 }, "machine_extruder_start_code": { - "default_value": "\n;changing to tool2\nM83\nM109 T1 S{material_print_temperature}\nG1 E{switch_extruder_retraction_amount} F300\nG1 E{switch_extruder_retraction_amount} F300\nG1 E{switch_extruder_retraction_amount} F300\nG1 E{switch_extruder_retraction_amount} F300\nG1 E-{switch_extruder_retraction_amount} F2400\nG1 Y40 F3000\nG1 X10 F12000\n\n" + "default_value": "\n;changing to tool2\nM83\nM109 T1 S{material_print_temperature}\nM118 set pid\nG1 E{switch_extruder_retraction_amount} F300\nG1 E{switch_extruder_retraction_amount} F300\nG1 E{switch_extruder_retraction_amount} F300\nG1 E{switch_extruder_retraction_amount} F300\nG1 E-{switch_extruder_retraction_amount} F2400\nG1 Y40 F3000\nG1 X10 F12000\n\n" }, "machine_extruder_end_code": { "default_value": "\nG1 X10 Y40 F12000\nG1 X-25 F12000\nM109 T1 R{material_standby_temperature}\nG1 Y20 F3000\n; ending tool2\n\n" From 70fa227274e9e51fcb56e9fa1801e153cdaa3b6b Mon Sep 17 00:00:00 2001 From: maukcc Date: Tue, 12 May 2020 13:32:55 +0200 Subject: [PATCH 033/116] HMS434 update --- resources/definitions/hms434.def.json | 2 +- resources/extruders/hms434_tool_1.def.json | 2 +- resources/extruders/hms434_tool_2.def.json | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/resources/definitions/hms434.def.json b/resources/definitions/hms434.def.json index d686b5b0d0..5b71822a2a 100644 --- a/resources/definitions/hms434.def.json +++ b/resources/definitions/hms434.def.json @@ -70,7 +70,7 @@ "material_bed_temp_wait": {"default_value": false }, "machine_max_feedrate_z": {"default_value": 10 }, "machine_acceleration": {"default_value": 180 }, - "machine_start_gcode": {"default_value": "\n;Neither Hybrid AM Systems nor any of Hybrid AM Systems representatives has any liabilities or gives any warranties on this .gcode file, or on any or all objects made with this .gcode file.\n\nM140 S{material_bed_temperature_layer_0}\n\nM117 Homing Y ......\nG28 Y\nM117 Homing X ......\nG28 X\nM117 Homing Z ......\nG28 Z F100\n\nG1 Z10 F900\nG1 X-25 Y20 F12000\n\nM141 S{build_volume_temperature}\nM118 set chamberfan\nM190 S{material_bed_temperature_layer_0}\n\nM118 set pid\n\nM117 HMS434 Printing ..." }, + "machine_start_gcode": {"default_value": "\n;Neither Hybrid AM Systems nor any of Hybrid AM Systems representatives has any liabilities or gives any warranties on this .gcode file, or on any or all objects made with this .gcode file.\n\nM140 S{material_bed_temperature_layer_0}\n\nM117 Homing Y ......\nG28 Y\nM117 Homing X ......\nG28 X\nM117 Homing Z ......\nG28 Z F100\n\nG1 Z10 F900\nG1 X-25 Y20 F12000\n\nM141 S{build_volume_temperature}\nM118 // action:set_chamber_fan\nM190 S{material_bed_temperature_layer_0}\n\nM118 // action:set_pid\n\nM117 HMS434 Printing ..." }, "machine_end_gcode": {"default_value": "" }, "retraction_extra_prime_amount": {"minimum_value_warning": "-2.0" }, diff --git a/resources/extruders/hms434_tool_1.def.json b/resources/extruders/hms434_tool_1.def.json index 9e8a868020..2fecfb1ea1 100644 --- a/resources/extruders/hms434_tool_1.def.json +++ b/resources/extruders/hms434_tool_1.def.json @@ -16,7 +16,7 @@ "machine_nozzle_offset_y": { "default_value": 0.0 }, "material_diameter": { "default_value": 1.75 }, "machine_extruder_start_code": { - "default_value": "\n;changing to tool1\nM83\nM109 T0 S{material_print_temperature}\nM118 set pid\nG1 E{switch_extruder_retraction_amount} F300\nG1 E{switch_extruder_retraction_amount} F300\nG1 E{switch_extruder_retraction_amount} F300\nG1 E{switch_extruder_retraction_amount} F300\nG1 E-{switch_extruder_retraction_amount} F2400\nG1 Y40 F3000\nG1 X10 F12000\n\n" + "default_value": "\n;changing to tool1\nM83\nM109 T0 S{material_print_temperature}\nM118 // action:set_pid\nG1 E{switch_extruder_retraction_amount} F300\nG1 E{switch_extruder_retraction_amount} F300\nG1 E{switch_extruder_retraction_amount} F300\nG1 E{switch_extruder_retraction_amount} F300\nG1 E-{switch_extruder_retraction_amount} F2400\nG1 Y40 F3000\nG1 X10 F12000\n\n" }, "machine_extruder_end_code": { "default_value": "\nG1 X10 Y40 F12000\nG1 X-25 F12000\nM109 T0 R{material_standby_temperature}\nG1 Y20 F3000\n; ending tool1\n\n" diff --git a/resources/extruders/hms434_tool_2.def.json b/resources/extruders/hms434_tool_2.def.json index 48cfca2bba..651905d0c3 100644 --- a/resources/extruders/hms434_tool_2.def.json +++ b/resources/extruders/hms434_tool_2.def.json @@ -16,7 +16,7 @@ "machine_nozzle_offset_y": { "default_value": 0.0 }, "material_diameter": { "default_value": 1.75 }, "machine_extruder_start_code": { - "default_value": "\n;changing to tool2\nM83\nM109 T1 S{material_print_temperature}\nM118 set pid\nG1 E{switch_extruder_retraction_amount} F300\nG1 E{switch_extruder_retraction_amount} F300\nG1 E{switch_extruder_retraction_amount} F300\nG1 E{switch_extruder_retraction_amount} F300\nG1 E-{switch_extruder_retraction_amount} F2400\nG1 Y40 F3000\nG1 X10 F12000\n\n" + "default_value": "\n;changing to tool2\nM83\nM109 T1 S{material_print_temperature}\nM118 // action:set_pid\nG1 E{switch_extruder_retraction_amount} F300\nG1 E{switch_extruder_retraction_amount} F300\nG1 E{switch_extruder_retraction_amount} F300\nG1 E{switch_extruder_retraction_amount} F300\nG1 E-{switch_extruder_retraction_amount} F2400\nG1 Y40 F3000\nG1 X10 F12000\n\n" }, "machine_extruder_end_code": { "default_value": "\nG1 X10 Y40 F12000\nG1 X-25 F12000\nM109 T1 R{material_standby_temperature}\nG1 Y20 F3000\n; ending tool2\n\n" From 1afd8cd75431ca0d0149cf721dab84340865306c Mon Sep 17 00:00:00 2001 From: maukcc Date: Tue, 12 May 2020 15:44:22 +0200 Subject: [PATCH 034/116] HMS434 update --- resources/definitions/hms434.def.json | 2 +- resources/extruders/hms434_tool_1.def.json | 2 +- resources/extruders/hms434_tool_2.def.json | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/resources/definitions/hms434.def.json b/resources/definitions/hms434.def.json index 5b71822a2a..df68487520 100644 --- a/resources/definitions/hms434.def.json +++ b/resources/definitions/hms434.def.json @@ -70,7 +70,7 @@ "material_bed_temp_wait": {"default_value": false }, "machine_max_feedrate_z": {"default_value": 10 }, "machine_acceleration": {"default_value": 180 }, - "machine_start_gcode": {"default_value": "\n;Neither Hybrid AM Systems nor any of Hybrid AM Systems representatives has any liabilities or gives any warranties on this .gcode file, or on any or all objects made with this .gcode file.\n\nM140 S{material_bed_temperature_layer_0}\n\nM117 Homing Y ......\nG28 Y\nM117 Homing X ......\nG28 X\nM117 Homing Z ......\nG28 Z F100\n\nG1 Z10 F900\nG1 X-25 Y20 F12000\n\nM141 S{build_volume_temperature}\nM118 // action:set_chamber_fan\nM190 S{material_bed_temperature_layer_0}\n\nM118 // action:set_pid\n\nM117 HMS434 Printing ..." }, + "machine_start_gcode": {"default_value": "\n;Neither Hybrid AM Systems nor any of Hybrid AM Systems representatives has any liabilities or gives any warranties on this .gcode file, or on any or all objects made with this .gcode file.\n\nM114\n\nM140 S{material_bed_temperature_layer_0}\n\nM117 Homing Y ......\nG28 Y\nM117 Homing X ......\nG28 X\nM117 Homing Z ......\nG28 Z F100\n\nG1 Z10 F900\nG1 X-25 Y20 F12000\n\nM141 S{build_volume_temperature}\nM118 // action:set_chamber_fan\nM190 S{material_bed_temperature_layer_0}\n\nM118 // action:set_pid\n\nM117 HMS434 Printing ..." }, "machine_end_gcode": {"default_value": "" }, "retraction_extra_prime_amount": {"minimum_value_warning": "-2.0" }, diff --git a/resources/extruders/hms434_tool_1.def.json b/resources/extruders/hms434_tool_1.def.json index 2fecfb1ea1..98ad692232 100644 --- a/resources/extruders/hms434_tool_1.def.json +++ b/resources/extruders/hms434_tool_1.def.json @@ -16,7 +16,7 @@ "machine_nozzle_offset_y": { "default_value": 0.0 }, "material_diameter": { "default_value": 1.75 }, "machine_extruder_start_code": { - "default_value": "\n;changing to tool1\nM83\nM109 T0 S{material_print_temperature}\nM118 // action:set_pid\nG1 E{switch_extruder_retraction_amount} F300\nG1 E{switch_extruder_retraction_amount} F300\nG1 E{switch_extruder_retraction_amount} F300\nG1 E{switch_extruder_retraction_amount} F300\nG1 E-{switch_extruder_retraction_amount} F2400\nG1 Y40 F3000\nG1 X10 F12000\n\n" + "default_value": "\n;changing to tool1\nM83\nM109 T0 S{material_print_temperature}\nM114\nM118 // action:set_pid\nG1 E{switch_extruder_retraction_amount} F300\nG1 E{switch_extruder_retraction_amount} F300\nG1 E{switch_extruder_retraction_amount} F300\nG1 E{switch_extruder_retraction_amount} F300\nG1 E-{switch_extruder_retraction_amount} F2400\nG1 Y40 F3000\nG1 X10 F12000\n\n" }, "machine_extruder_end_code": { "default_value": "\nG1 X10 Y40 F12000\nG1 X-25 F12000\nM109 T0 R{material_standby_temperature}\nG1 Y20 F3000\n; ending tool1\n\n" diff --git a/resources/extruders/hms434_tool_2.def.json b/resources/extruders/hms434_tool_2.def.json index 651905d0c3..a4d1e9b316 100644 --- a/resources/extruders/hms434_tool_2.def.json +++ b/resources/extruders/hms434_tool_2.def.json @@ -16,7 +16,7 @@ "machine_nozzle_offset_y": { "default_value": 0.0 }, "material_diameter": { "default_value": 1.75 }, "machine_extruder_start_code": { - "default_value": "\n;changing to tool2\nM83\nM109 T1 S{material_print_temperature}\nM118 // action:set_pid\nG1 E{switch_extruder_retraction_amount} F300\nG1 E{switch_extruder_retraction_amount} F300\nG1 E{switch_extruder_retraction_amount} F300\nG1 E{switch_extruder_retraction_amount} F300\nG1 E-{switch_extruder_retraction_amount} F2400\nG1 Y40 F3000\nG1 X10 F12000\n\n" + "default_value": "\n;changing to tool2\nM83\nM109 T1 S{material_print_temperature}\nM114\nM118 // action:set_pid\nG1 E{switch_extruder_retraction_amount} F300\nG1 E{switch_extruder_retraction_amount} F300\nG1 E{switch_extruder_retraction_amount} F300\nG1 E{switch_extruder_retraction_amount} F300\nG1 E-{switch_extruder_retraction_amount} F2400\nG1 Y40 F3000\nG1 X10 F12000\n\n" }, "machine_extruder_end_code": { "default_value": "\nG1 X10 Y40 F12000\nG1 X-25 F12000\nM109 T1 R{material_standby_temperature}\nG1 Y20 F3000\n; ending tool2\n\n" From 77b3476aae444486455b7a45eb5df307f4e13c7c Mon Sep 17 00:00:00 2001 From: Peter Felecan Date: Tue, 12 May 2020 15:53:21 +0200 Subject: [PATCH 035/116] Removed old "category" attribute --- resources/definitions/I3MetalMotion.def.json | 1 - 1 file changed, 1 deletion(-) diff --git a/resources/definitions/I3MetalMotion.def.json b/resources/definitions/I3MetalMotion.def.json index 24113bb8bb..01dcc06ebe 100644 --- a/resources/definitions/I3MetalMotion.def.json +++ b/resources/definitions/I3MetalMotion.def.json @@ -6,7 +6,6 @@ "visible": true, "author": "Peter Felecan", "manufacturer": "eMotionTech", - "category": "Other", "file_formats": "text/x-gcode", "has_materials": true, "preferred_material": "emotiontech_pla", From 44900fad5a68e1c71e9b05be86c7bf5a2dc855b8 Mon Sep 17 00:00:00 2001 From: Remco Burema Date: Tue, 12 May 2020 18:39:27 +0200 Subject: [PATCH 036/116] Deltacomb upgrade: Fix leftover issues from last master-merge. CURA-7433 --- plugins/VersionUpgrade/VersionUpgrade460to462/__init__.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/plugins/VersionUpgrade/VersionUpgrade460to462/__init__.py b/plugins/VersionUpgrade/VersionUpgrade460to462/__init__.py index 33732dc9e2..5f096545b2 100644 --- a/plugins/VersionUpgrade/VersionUpgrade460to462/__init__.py +++ b/plugins/VersionUpgrade/VersionUpgrade460to462/__init__.py @@ -17,10 +17,10 @@ def getMetaData() -> Dict[str, Any]: ("preferences", 6000013): ("preferences", 6000014, upgrade.upgradePreferences), ("machine_stack", 4000013): ("machine_stack", 4000014, upgrade.upgradeStack), ("extruder_train", 4000013): ("extruder_train", 4000014, upgrade.upgradeStack), - ("definition_changes", 4000013): ("definition_changes", 4000014, upgrade.upgradeInstanceContainer), - ("quality_changes", 4000013): ("quality_changes", 4000014, upgrade.upgradeInstanceContainer), - ("quality", 4000013): ("quality", 4000014, upgrade.upgradeInstanceContainer), - ("user", 4000013): ("user", 4000014, upgrade.upgradeInstanceContainer), + ("definition_changes", 4000013): ("definition_changes", 4000014, upgrade.upgradeExtruderInstanceContainer), + ("quality_changes", 4000013): ("quality_changes", 4000014, upgrade.upgradeExtruderInstanceContainer), + ("quality", 4000013): ("quality", 4000014, upgrade.upgradeExtruderInstanceContainer), + ("user", 4000013): ("user", 4000014, upgrade.upgradeExtruderInstanceContainer), }, "sources": { "preferences": { From 3af8c20ccfae840ace12a3542d50cf2cada8bcd3 Mon Sep 17 00:00:00 2001 From: Remco Burema Date: Tue, 12 May 2020 18:42:06 +0200 Subject: [PATCH 037/116] Deltacomb upgrade: Fix deepcopy not working for ConfigParser. No idea why it worked on ghostkeepers' system. It isn't supposed to: https://bugs.python.org/issue16058 CURA-7433 --- .../VersionUpgrade460to462.py | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/plugins/VersionUpgrade/VersionUpgrade460to462/VersionUpgrade460to462.py b/plugins/VersionUpgrade/VersionUpgrade460to462/VersionUpgrade460to462.py index 5d33c17628..a4b6ad48a6 100644 --- a/plugins/VersionUpgrade/VersionUpgrade460to462/VersionUpgrade460to462.py +++ b/plugins/VersionUpgrade/VersionUpgrade460to462/VersionUpgrade460to462.py @@ -80,8 +80,10 @@ class VersionUpgrade460to462(VersionUpgrade): if parser["general"]["definition"] == "deltacomb_extruder_0": parser["general"]["definition"] = "deltacomb_base_extruder_0" elif parser["general"]["definition"] == "deltacomb_extruder_1": # Split up the second Deltacomb extruder into 3, creating an extra two extruders. - parser_e2 = copy.deepcopy(parser) - parser_e3 = copy.deepcopy(parser) + parser_e2 = configparser.ConfigParser(interpolation=None) + parser_e3 = configparser.ConfigParser(interpolation=None) + parser_e2.read_dict(parser) + parser_e3.read_dict(parser) parser["general"]["definition"] = "deltacomb_base_extruder_1" parser_e2["general"]["definition"] = "deltacomb_base_extruder_2" @@ -92,8 +94,10 @@ class VersionUpgrade460to462(VersionUpgrade): parser["general"]["definition"] = "deltacomb_dc20" if "metadata" in parser and "extruder" in parser["metadata"]: # Per-extruder user container. - parser_e2 = copy.deepcopy(parser) - parser_e3 = copy.deepcopy(parser) + parser_e2 = configparser.ConfigParser(interpolation=None) + parser_e3 = configparser.ConfigParser(interpolation=None) + parser_e2.read_dict(parser) + parser_e3.read_dict(parser) parser_e2["metadata"]["extruder"] += "_e2_upgrade" parser_e3["metadata"]["extruder"] += "_e3_upgrade" results.append((parser_e2, filename + "_e2_upgrade")) @@ -178,8 +182,10 @@ class VersionUpgrade460to462(VersionUpgrade): else: parser["containers"]["7"] = "deltacomb_base_extruder_1" # Copy this extruder to extruder 3 and 4. - extruder3 = copy.deepcopy(parser) - extruder4 = copy.deepcopy(parser) + extruder3 = configparser.ConfigParser(interpolation=None) + extruder4 = configparser.ConfigParser(interpolation=None) + extruder3.read_dict(parser) + extruder4.read_dict(parser) extruder3["general"]["id"] += "_e2_upgrade" extruder3["metadata"]["position"] = "2" From 6bb3c037399eb9d111a2fb686d28eabf0beeabb8 Mon Sep 17 00:00:00 2001 From: Remco Burema Date: Tue, 12 May 2020 18:59:10 +0200 Subject: [PATCH 038/116] Appease the tests! CURA-7433 --- resources/definitions/deltacomb_base.def.json | 1 - 1 file changed, 1 deletion(-) diff --git a/resources/definitions/deltacomb_base.def.json b/resources/definitions/deltacomb_base.def.json index cd1c2c368e..e1f66ee8df 100755 --- a/resources/definitions/deltacomb_base.def.json +++ b/resources/definitions/deltacomb_base.def.json @@ -7,7 +7,6 @@ "author": "Gabriele Rossetti", "visible": false, "manufacturer": "Deltacomb 3D Printers", - "category": "Other", "file_formats": "text/x-gcode", "has_machine_quality": true, "has_materials": true, From 218d789cdb228cc5aba46b1663f4004f94106cb0 Mon Sep 17 00:00:00 2001 From: sm3dp Date: Wed, 13 May 2020 11:02:06 +0800 Subject: [PATCH 039/116] change sc60 extruder left name --- ...60_extruder_0.def.json => lotmaxx_sc60_extruder_left.def.json} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename resources/extruders/{lotmaxx_sc60_extruder_0.def.json => lotmaxx_sc60_extruder_left.def.json} (100%) diff --git a/resources/extruders/lotmaxx_sc60_extruder_0.def.json b/resources/extruders/lotmaxx_sc60_extruder_left.def.json similarity index 100% rename from resources/extruders/lotmaxx_sc60_extruder_0.def.json rename to resources/extruders/lotmaxx_sc60_extruder_left.def.json From 85ca395f3ff62ef60b0dcc33a0ae07f55d50d585 Mon Sep 17 00:00:00 2001 From: sm3dp Date: Wed, 13 May 2020 13:45:59 +0800 Subject: [PATCH 040/116] sc60 extruders name --- resources/definitions/lotmaxx_sc60.def.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/resources/definitions/lotmaxx_sc60.def.json b/resources/definitions/lotmaxx_sc60.def.json index 8fe2112ddd..674431eaab 100644 --- a/resources/definitions/lotmaxx_sc60.def.json +++ b/resources/definitions/lotmaxx_sc60.def.json @@ -63,10 +63,10 @@ "manufacturer": "Lotmaxx", "platform": "lotmaxx_sc_10_20_platform.3mf", "machine_extruder_trains": { - "0": "lotmaxx_sc60_extruder_0", + "0": "lotmaxx_sc60_extruder_left", "1": "lotmaxx_sc60_extruder_right" }, "has_materials": true, "preferred_quality_type": "normal" } -} \ No newline at end of file +} From 97d1c3200b3914d78494e78d529653dbb896ebad Mon Sep 17 00:00:00 2001 From: Nino van Hooff Date: Wed, 13 May 2020 16:14:21 +0200 Subject: [PATCH 041/116] Remove unused aliases from SyncState.qml CURA-7290 --- resources/qml/Account/SyncState.qml | 26 ++++++++++-------------- resources/qml/Account/UserOperations.qml | 7 +------ 2 files changed, 12 insertions(+), 21 deletions(-) diff --git a/resources/qml/Account/SyncState.qml b/resources/qml/Account/SyncState.qml index 7126aec314..4457ece465 100644 --- a/resources/qml/Account/SyncState.qml +++ b/resources/qml/Account/SyncState.qml @@ -7,11 +7,7 @@ import Cura 1.1 as Cura Row // sync state icon + message { - property alias iconSource: icon.source - property alias labelText: stateLabel.text - property alias syncButtonVisible: accountSyncButton.visible - property alias animateIconRotation: updateAnimator.running - + id: syncRow width: childrenRect.width height: childrenRect.height anchors.horizontalCenter: parent.horizontalCenter @@ -83,24 +79,24 @@ Row // sync state icon + message onSyncStateChanged: { if(newState == Cura.AccountSyncState.SYNCING){ - syncRow.iconSource = UM.Theme.getIcon("update") - syncRow.labelText = catalog.i18nc("@label", "Checking...") + icon.source = UM.Theme.getIcon("update") + stateLabel.text = catalog.i18nc("@label", "Checking...") } else if (newState == Cura.AccountSyncState.SUCCESS) { - syncRow.iconSource = UM.Theme.getIcon("checked") - syncRow.labelText = catalog.i18nc("@label", "You are up to date") + icon.source = UM.Theme.getIcon("checked") + stateLabel.text = catalog.i18nc("@label", "You are up to date") } else if (newState == Cura.AccountSyncState.ERROR) { - syncRow.iconSource = UM.Theme.getIcon("warning_light") - syncRow.labelText = catalog.i18nc("@label", "Something went wrong...") + icon.source = UM.Theme.getIcon("warning_light") + stateLabel.text = catalog.i18nc("@label", "Something went wrong...") } else { print("Error: unexpected sync state: " + newState) } if(newState == Cura.AccountSyncState.SYNCING){ - syncRow.animateIconRotation = true - syncRow.syncButtonVisible = false + updateAnimator.running = true + accountSyncButton.visible = false } else { - syncRow.animateIconRotation = false - syncRow.syncButtonVisible = true + updateAnimator.running = false + accountSyncButton.visible = true } } diff --git a/resources/qml/Account/UserOperations.qml b/resources/qml/Account/UserOperations.qml index f292c501f3..c8e3b81d08 100644 --- a/resources/qml/Account/UserOperations.qml +++ b/resources/qml/Account/UserOperations.qml @@ -29,12 +29,7 @@ Column color: UM.Theme.getColor("text") } - SyncState - { - id: syncRow - } - - + SyncState {} Label { From de0ef8ae62216d33408bca50d28ae2149c148b44 Mon Sep 17 00:00:00 2001 From: Nino van Hooff Date: Wed, 13 May 2020 16:15:29 +0200 Subject: [PATCH 042/116] Change account sync date format to mm/dd/YYYY CURA-7290 --- cura/API/Account.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cura/API/Account.py b/cura/API/Account.py index d1fda63d2b..872fe815da 100644 --- a/cura/API/Account.py +++ b/cura/API/Account.py @@ -121,7 +121,7 @@ class Account(QObject): self.syncStateChanged.emit(self._sync_state) if self._sync_state == SyncState.SUCCESS: - self._last_sync_str = datetime.now().strftime("%d/%m/%Y %H:%M") + self._last_sync_str = datetime.now().strftime("%m/%d/%Y %H:%M") self.lastSyncDateTimeChanged.emit() if self._sync_state != SyncState.SYNCING: From 6caa0360b9783e50b7ab6ace006cde6cde6cb4e0 Mon Sep 17 00:00:00 2001 From: Nino van Hooff Date: Wed, 13 May 2020 16:35:39 +0200 Subject: [PATCH 043/116] Change SyncRow copy CURA-7290 --- resources/qml/Account/SyncState.qml | 4 ++-- resources/qml/Account/UserOperations.qml | 9 +++++++-- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/resources/qml/Account/SyncState.qml b/resources/qml/Account/SyncState.qml index 4457ece465..3f96ddad1f 100644 --- a/resources/qml/Account/SyncState.qml +++ b/resources/qml/Account/SyncState.qml @@ -50,7 +50,7 @@ Row // sync state icon + message Label { id: stateLabel - text: catalog.i18nc("@state", "Checking...") + text: catalog.i18nc("@state", catalog.i18nc("@label", "You are in sync with your account")) color: UM.Theme.getColor("text") font: UM.Theme.getFont("medium") renderType: Text.NativeRendering @@ -83,7 +83,7 @@ Row // sync state icon + message stateLabel.text = catalog.i18nc("@label", "Checking...") } else if (newState == Cura.AccountSyncState.SUCCESS) { icon.source = UM.Theme.getIcon("checked") - stateLabel.text = catalog.i18nc("@label", "You are up to date") + stateLabel.text = catalog.i18nc("@label", "You are in sync with your account") } else if (newState == Cura.AccountSyncState.ERROR) { icon.source = UM.Theme.getIcon("warning_light") stateLabel.text = catalog.i18nc("@label", "Something went wrong...") diff --git a/resources/qml/Account/UserOperations.qml b/resources/qml/Account/UserOperations.qml index c8e3b81d08..7578f34623 100644 --- a/resources/qml/Account/UserOperations.qml +++ b/resources/qml/Account/UserOperations.qml @@ -9,7 +9,10 @@ import Cura 1.1 as Cura Column { - width: Math.max(title.width, accountButton.width) + 2 * UM.Theme.getSize("default_margin").width + width: Match.max( + Math.max(title.width, accountButton.width) + 2 * UM.Theme.getSize("default_margin").width, + syncRow.width + ) spacing: UM.Theme.getSize("default_margin").height @@ -29,7 +32,9 @@ Column color: UM.Theme.getColor("text") } - SyncState {} + SyncState { + id: syncRow + } Label { From 72657f15bed9fb2c6deb56db772f315668d6a217 Mon Sep 17 00:00:00 2001 From: Nino van Hooff Date: Wed, 13 May 2020 16:38:42 +0200 Subject: [PATCH 044/116] Add padding to checked icon CURA-7290 --- resources/themes/cura-light/icons/checked.svg | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/resources/themes/cura-light/icons/checked.svg b/resources/themes/cura-light/icons/checked.svg index e98e2abcd7..22d1278667 100644 --- a/resources/themes/cura-light/icons/checked.svg +++ b/resources/themes/cura-light/icons/checked.svg @@ -4,9 +4,9 @@ checked Created with Sketch. - - - + + + \ No newline at end of file From f78fa884c195eaebb9420053845bbac289d02b13 Mon Sep 17 00:00:00 2001 From: Nino van Hooff Date: Wed, 13 May 2020 17:19:20 +0200 Subject: [PATCH 045/116] Only show the manual sync button after the account popup was closed CURA-7290 --- cura/API/Account.py | 43 ++++++++++++++++++------- resources/qml/Account/AccountWidget.qml | 10 +++++- resources/qml/Account/SyncState.qml | 5 ++- 3 files changed, 42 insertions(+), 16 deletions(-) diff --git a/cura/API/Account.py b/cura/API/Account.py index 872fe815da..3463fe6951 100644 --- a/cura/API/Account.py +++ b/cura/API/Account.py @@ -50,6 +50,7 @@ class Account(QObject): """ lastSyncDateTimeChanged = pyqtSignal() syncStateChanged = pyqtSignal(int) # because SyncState is an int Enum + manualSyncEnabledChanged = pyqtSignal(bool) def __init__(self, application: "CuraApplication", parent = None) -> None: super().__init__(parent) @@ -59,6 +60,7 @@ class Account(QObject): self._error_message = None # type: Optional[Message] self._logged_in = False self._sync_state = SyncState.SUCCESS + self._manual_sync_enabled = False self._last_sync_str = "-" self._callback_port = 32118 @@ -157,11 +159,25 @@ class Account(QObject): self._logged_in = logged_in self.loginStateChanged.emit(logged_in) if logged_in: - self.sync() + self._sync() else: if self._update_timer.isActive(): self._update_timer.stop() + def _sync(self) -> None: + """Signals all sync services to start syncing + + This can be considered a forced sync: even when a + sync is currently running, a sync will be requested. + """ + + if self._update_timer.isActive(): + self._update_timer.stop() + elif self._sync_state == SyncState.SYNCING: + Logger.warning("Starting a new sync while previous sync was not completed\n{}", str(self._sync_services)) + + self.syncRequested.emit() + @pyqtSlot() def login(self) -> None: if self._logged_in: @@ -200,20 +216,23 @@ class Account(QObject): def lastSyncDateTime(self) -> str: return self._last_sync_str + @pyqtProperty(bool, notify=manualSyncEnabledChanged) + def manualSyncEnabled(self) -> bool: + return self._manual_sync_enabled + @pyqtSlot() - def sync(self) -> None: - """Signals all sync services to start syncing + @pyqtSlot(bool) + def sync(self, user_initiated=False): + if user_initiated: + self._manual_sync_enabled = False + self.manualSyncEnabledChanged.emit(self._manual_sync_enabled) - This can be considered a forced sync: even when a - sync is currently running, a sync will be requested. - """ + self._sync() - if self._update_timer.isActive(): - self._update_timer.stop() - elif self._sync_state == SyncState.SYNCING: - Logger.warning("Starting a new sync while previous sync was not completed\n{}", str(self._sync_services)) - - self.syncRequested.emit() + @pyqtSlot() + def popupClosed(self): + self._manual_sync_enabled = True + self.manualSyncEnabledChanged.emit(self._manual_sync_enabled) @pyqtSlot() def logout(self) -> None: diff --git a/resources/qml/Account/AccountWidget.qml b/resources/qml/Account/AccountWidget.qml index 26b491ce15..00ac954f22 100644 --- a/resources/qml/Account/AccountWidget.qml +++ b/resources/qml/Account/AccountWidget.qml @@ -108,7 +108,15 @@ Item } } - onClicked: popup.opened ? popup.close() : popup.open() + onClicked: { + if (popup.opened) + { + popup.close() + Cura.API.account.popupClosed() + } else { + popup.open() + } + } } Popup diff --git a/resources/qml/Account/SyncState.qml b/resources/qml/Account/SyncState.qml index 3f96ddad1f..b419f150f9 100644 --- a/resources/qml/Account/SyncState.qml +++ b/resources/qml/Account/SyncState.qml @@ -63,11 +63,12 @@ Row // sync state icon + message color: UM.Theme.getColor("secondary_button_text") font: UM.Theme.getFont("medium") renderType: Text.NativeRendering + visible: Cura.API.account.manualSyncEnabled MouseArea { anchors.fill: parent - onClicked: Cura.API.account.sync() + onClicked: Cura.API.account.sync(true) hoverEnabled: true onEntered: accountSyncButton.font.underline = true onExited: accountSyncButton.font.underline = false @@ -93,10 +94,8 @@ Row // sync state icon + message if(newState == Cura.AccountSyncState.SYNCING){ updateAnimator.running = true - accountSyncButton.visible = false } else { updateAnimator.running = false - accountSyncButton.visible = true } } From 984836c1af2510a9da0a61aab62f78d1d5066e66 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Wed, 13 May 2020 17:25:09 +0200 Subject: [PATCH 046/116] Code style: Spaces around binary operators Contributes to issue CURA-7433. --- .../VersionUpgrade460to462/VersionUpgrade460to462.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/plugins/VersionUpgrade/VersionUpgrade460to462/VersionUpgrade460to462.py b/plugins/VersionUpgrade/VersionUpgrade460to462/VersionUpgrade460to462.py index a4b6ad48a6..b5a952e418 100644 --- a/plugins/VersionUpgrade/VersionUpgrade460to462/VersionUpgrade460to462.py +++ b/plugins/VersionUpgrade/VersionUpgrade460to462/VersionUpgrade460to462.py @@ -80,8 +80,8 @@ class VersionUpgrade460to462(VersionUpgrade): if parser["general"]["definition"] == "deltacomb_extruder_0": parser["general"]["definition"] = "deltacomb_base_extruder_0" elif parser["general"]["definition"] == "deltacomb_extruder_1": # Split up the second Deltacomb extruder into 3, creating an extra two extruders. - parser_e2 = configparser.ConfigParser(interpolation=None) - parser_e3 = configparser.ConfigParser(interpolation=None) + parser_e2 = configparser.ConfigParser(interpolation = None) + parser_e3 = configparser.ConfigParser(interpolation = None) parser_e2.read_dict(parser) parser_e3.read_dict(parser) @@ -94,8 +94,8 @@ class VersionUpgrade460to462(VersionUpgrade): parser["general"]["definition"] = "deltacomb_dc20" if "metadata" in parser and "extruder" in parser["metadata"]: # Per-extruder user container. - parser_e2 = configparser.ConfigParser(interpolation=None) - parser_e3 = configparser.ConfigParser(interpolation=None) + parser_e2 = configparser.ConfigParser(interpolation = None) + parser_e3 = configparser.ConfigParser(interpolation = None) parser_e2.read_dict(parser) parser_e3.read_dict(parser) parser_e2["metadata"]["extruder"] += "_e2_upgrade" From 59b40c72f080dcc0e29b323245db1047592b9f45 Mon Sep 17 00:00:00 2001 From: Nino van Hooff Date: Wed, 13 May 2020 17:32:57 +0200 Subject: [PATCH 047/116] Additional scenarios for enabling/disabling the manual sync button CURA-7290 --- cura/API/Account.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/cura/API/Account.py b/cura/API/Account.py index 3463fe6951..1c12bdc1be 100644 --- a/cura/API/Account.py +++ b/cura/API/Account.py @@ -116,6 +116,8 @@ class Account(QObject): self._sync_state = SyncState.SYNCING elif any(val == SyncState.ERROR for val in self._sync_services.values()): self._sync_state = SyncState.ERROR + self._manual_sync_enabled = True + self.manualSyncEnabledChanged.emit(self._manual_sync_enabled) else: self._sync_state = SyncState.SUCCESS @@ -159,6 +161,8 @@ class Account(QObject): self._logged_in = logged_in self.loginStateChanged.emit(logged_in) if logged_in: + self._manual_sync_enabled = False + self.manualSyncEnabledChanged.emit(self._manual_sync_enabled) self._sync() else: if self._update_timer.isActive(): From e6639eb8ebe69892047fefbb7a5cce7c7fca5b01 Mon Sep 17 00:00:00 2001 From: Nino van Hooff Date: Wed, 13 May 2020 17:36:24 +0200 Subject: [PATCH 048/116] Do not reserve height for manual sync button CURA-7290 --- resources/qml/Account/SyncState.qml | 1 + 1 file changed, 1 insertion(+) diff --git a/resources/qml/Account/SyncState.qml b/resources/qml/Account/SyncState.qml index b419f150f9..eb71e81ecc 100644 --- a/resources/qml/Account/SyncState.qml +++ b/resources/qml/Account/SyncState.qml @@ -64,6 +64,7 @@ Row // sync state icon + message font: UM.Theme.getFont("medium") renderType: Text.NativeRendering visible: Cura.API.account.manualSyncEnabled + height: visible ? accountSyncButton.intrinsicHeight : 0 MouseArea { From 321693d41023941f8fc5889ff42fbffbe0cb3fed Mon Sep 17 00:00:00 2001 From: fieldOfView Date: Thu, 14 May 2020 11:38:30 +0200 Subject: [PATCH 049/116] Add upgrade script to update instances of removed scripts to unified script --- .../VersionUpgrade462to47.py | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/plugins/VersionUpgrade/VersionUpgrade462to47/VersionUpgrade462to47.py b/plugins/VersionUpgrade/VersionUpgrade462to47/VersionUpgrade462to47.py index c340fd0c72..62af43e9a8 100644 --- a/plugins/VersionUpgrade/VersionUpgrade462to47/VersionUpgrade462to47.py +++ b/plugins/VersionUpgrade/VersionUpgrade462to47/VersionUpgrade462to47.py @@ -88,6 +88,25 @@ class VersionUpgrade462to47(VersionUpgrade): script_parser = configparser.ConfigParser(interpolation=None) script_parser.optionxform = str # type: ignore # Don't transform the setting keys as they are case-sensitive. script_parser.read_string(script_str) + + # Unify all Pause at Height + script_id = script_parser.sections()[0] + if script_id in ["BQ_PauseAtHeight", "PauseAtHeightRepRapFirmwareDuet", "PauseAtHeightforRepetier"]: + script_settings = script_parser.items(script_id) + script_settings.append(("pause_method", { + "BQ_PauseAtHeight": "bq", + "PauseAtHeightforRepetier": "repetier", + "PauseAtHeightRepRapFirmwareDuet": "reprap" + }[script_id])) + + # Since we cannot rename a section, we remove the original section and create a new section with the new script id. + script_parser.remove_section(script_id) + script_id = "PauseAtHeight" + script_parser.add_section(script_id) + for setting_tuple in script_settings: + script_parser.set(script_id, setting_tuple[0], setting_tuple[1]) + + # Update redo_layers to redo_layer if "PauseAtHeight" in script_parser: if "redo_layers" in script_parser["PauseAtHeight"]: script_parser["PauseAtHeight"]["redo_layer"] = str(int(script_parser["PauseAtHeight"]["redo_layers"]) > 0) From b6b6a3998946f9c8a24eecf4a9d1719f2c93f9ff Mon Sep 17 00:00:00 2001 From: Nino van Hooff Date: Thu, 14 May 2020 15:13:57 +0200 Subject: [PATCH 050/116] Fix QML typo CURA-7290 --- resources/qml/Account/UserOperations.qml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/qml/Account/UserOperations.qml b/resources/qml/Account/UserOperations.qml index 7578f34623..c0f33c74cd 100644 --- a/resources/qml/Account/UserOperations.qml +++ b/resources/qml/Account/UserOperations.qml @@ -9,7 +9,7 @@ import Cura 1.1 as Cura Column { - width: Match.max( + width: Math.max( Math.max(title.width, accountButton.width) + 2 * UM.Theme.getSize("default_margin").width, syncRow.width ) From a3f968188fa8d7c8d6f84921769dee240495619f Mon Sep 17 00:00:00 2001 From: Nino van Hooff Date: Thu, 14 May 2020 15:14:51 +0200 Subject: [PATCH 051/116] Add timeout to CloudPackageChecker request Prevents it from getting stuck in the SYNCING state CURA-7290 --- plugins/Toolbox/src/CloudSync/CloudPackageChecker.py | 1 + 1 file changed, 1 insertion(+) diff --git a/plugins/Toolbox/src/CloudSync/CloudPackageChecker.py b/plugins/Toolbox/src/CloudSync/CloudPackageChecker.py index 9c372096af..ef8e82f576 100644 --- a/plugins/Toolbox/src/CloudSync/CloudPackageChecker.py +++ b/plugins/Toolbox/src/CloudSync/CloudPackageChecker.py @@ -67,6 +67,7 @@ class CloudPackageChecker(QObject): self._application.getHttpRequestManager().get(url, callback = self._onUserPackagesRequestFinished, error_callback = self._onUserPackagesRequestFinished, + timeout=10, scope = self._scope) def _onUserPackagesRequestFinished(self, reply: "QNetworkReply", error: Optional["QNetworkReply.NetworkError"] = None) -> None: From a9692e3d2776967efa1149f514e5e355a75316fc Mon Sep 17 00:00:00 2001 From: Nino van Hooff Date: Thu, 14 May 2020 15:15:16 +0200 Subject: [PATCH 052/116] Refactor setManualSyncEnabled CURA-7290 --- cura/API/Account.py | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/cura/API/Account.py b/cura/API/Account.py index 1c12bdc1be..2bfbf41f53 100644 --- a/cura/API/Account.py +++ b/cura/API/Account.py @@ -116,8 +116,7 @@ class Account(QObject): self._sync_state = SyncState.SYNCING elif any(val == SyncState.ERROR for val in self._sync_services.values()): self._sync_state = SyncState.ERROR - self._manual_sync_enabled = True - self.manualSyncEnabledChanged.emit(self._manual_sync_enabled) + self._setManualSyncEnabled(True) else: self._sync_state = SyncState.SUCCESS @@ -161,8 +160,7 @@ class Account(QObject): self._logged_in = logged_in self.loginStateChanged.emit(logged_in) if logged_in: - self._manual_sync_enabled = False - self.manualSyncEnabledChanged.emit(self._manual_sync_enabled) + self._setManualSyncEnabled(False) self._sync() else: if self._update_timer.isActive(): @@ -182,6 +180,11 @@ class Account(QObject): self.syncRequested.emit() + def _setManualSyncEnabled(self, enabled: bool) -> None: + if self._manual_sync_enabled != enabled: + self._manual_sync_enabled = enabled + self.manualSyncEnabledChanged.emit(enabled) + @pyqtSlot() def login(self) -> None: if self._logged_in: @@ -228,15 +231,13 @@ class Account(QObject): @pyqtSlot(bool) def sync(self, user_initiated=False): if user_initiated: - self._manual_sync_enabled = False - self.manualSyncEnabledChanged.emit(self._manual_sync_enabled) + self._setManualSyncEnabled(False) self._sync() @pyqtSlot() def popupClosed(self): - self._manual_sync_enabled = True - self.manualSyncEnabledChanged.emit(self._manual_sync_enabled) + self._setManualSyncEnabled(True) @pyqtSlot() def logout(self) -> None: From 15f813a4ffd7a4da59b386428d2393d12fec8bf9 Mon Sep 17 00:00:00 2001 From: Nino van Hooff Date: Thu, 14 May 2020 15:47:45 +0200 Subject: [PATCH 053/116] Add a sync timeout to CloudOutputDeviceManager Fixes an issue where printer syncing breaks when switching networks etc. CURA-7290 --- .../src/Cloud/CloudOutputDeviceManager.py | 37 +++++++++++++++---- 1 file changed, 29 insertions(+), 8 deletions(-) diff --git a/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDeviceManager.py b/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDeviceManager.py index f233e59fe5..8a87438b0e 100644 --- a/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDeviceManager.py +++ b/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDeviceManager.py @@ -26,6 +26,9 @@ class CloudOutputDeviceManager: API spec is available on https://api.ultimaker.com/docs/connect/spec/. """ + SYNC_TIMEOUT = 50.0 + """seconds. Adding many different kinds of printers can take a long time""" + META_CLUSTER_ID = "um_cloud_cluster_id" META_NETWORK_KEY = "um_network_key" SYNC_SERVICE_NAME = "CloudOutputDeviceManager" @@ -46,7 +49,13 @@ class CloudOutputDeviceManager: # Ensure we don't start twice. self._running = False - self._syncing = False + # Unfortunately, not all cases of a failed request result in an error callback, such as VPN connection + # being broken or possibly switching wifi networks. Better solution: Refactor CloudApiClient to use + # HttpRequestManager, which supports timeout. + self._sync_timeout_timer = QTimer() + self._sync_timeout_timer.setInterval(int(self.SYNC_TIMEOUT * 1000)) + self._sync_timeout_timer.setSingleShot(True) + self._sync_timeout_timer.timeout.connect(self._onSyncTimeout) def start(self): """Starts running the cloud output device manager, thus periodically requesting cloud data.""" @@ -84,12 +93,13 @@ class CloudOutputDeviceManager: def _getRemoteClusters(self) -> None: """Gets all remote clusters from the API.""" - if self._syncing: + if self._sync_timeout_timer.isActive(): + # A sync is running return Logger.info("Syncing cloud printer clusters") - self._syncing = True + self._sync_timeout_timer.start() self._account.setSyncState(self.SYNC_SERVICE_NAME, SyncState.SYNCING) self._api.getClusters(self._onGetRemoteClustersFinished, self._onGetRemoteClusterFailed) @@ -115,12 +125,10 @@ class CloudOutputDeviceManager: # If the removed device was active we should connect to the new active device self._connectToActiveMachine() - self._syncing = False - self._account.setSyncState(self.SYNC_SERVICE_NAME, SyncState.SUCCESS) + self._onSyncFinished(True) def _onGetRemoteClusterFailed(self): - self._syncing = False - self._account.setSyncState(self.SYNC_SERVICE_NAME, SyncState.ERROR) + self._onSyncFinished(False) def _onDevicesDiscovered(self, clusters: List[CloudClusterResponse]) -> None: """**Synchronously** create machines for discovered devices @@ -223,6 +231,19 @@ class CloudOutputDeviceManager: if device.key in output_device_manager.getOutputDeviceIds(): output_device_manager.removeOutputDevice(device.key) + def _onSyncTimeout(self): + Logger.warning("Cloud printer sync timed out after {} seconds".format(self.SYNC_TIMEOUT)) + self._onSyncFinished(False) + + def _onSyncFinished(self, success: bool): + if self._sync_timeout_timer.isActive(): + self._sync_timeout_timer.stop() + + if success: + self._account.setSyncState(self.SYNC_SERVICE_NAME, SyncState.SUCCESS) + else: + self._account.setSyncState(self.SYNC_SERVICE_NAME, SyncState.ERROR) + def _createMachineFromDiscoveredDevice(self, key: str, activate: bool = True) -> None: device = self._remote_clusters[key] if not device: @@ -277,4 +298,4 @@ class CloudOutputDeviceManager: output_device_manager = CuraApplication.getInstance().getOutputDeviceManager() if device.key not in output_device_manager.getOutputDeviceIds(): - output_device_manager.addOutputDevice(device) \ No newline at end of file + output_device_manager.addOutputDevice(device) From 5a8d411c352e9347e349522152d0626e3e24ca3f Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Thu, 14 May 2020 16:44:48 +0200 Subject: [PATCH 054/116] Fix upgrading quality-changes profiles per extruder These have a slightly different syntax apparently. I thought I tested this before. But apparently not well enough. Contributes to issue CURA-7433. --- .../VersionUpgrade460to462/VersionUpgrade460to462.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/plugins/VersionUpgrade/VersionUpgrade460to462/VersionUpgrade460to462.py b/plugins/VersionUpgrade/VersionUpgrade460to462/VersionUpgrade460to462.py index b5a952e418..1aa5e1b2da 100644 --- a/plugins/VersionUpgrade/VersionUpgrade460to462/VersionUpgrade460to462.py +++ b/plugins/VersionUpgrade/VersionUpgrade460to462/VersionUpgrade460to462.py @@ -90,16 +90,17 @@ class VersionUpgrade460to462(VersionUpgrade): parser_e3["general"]["definition"] = "deltacomb_base_extruder_3" results.append((parser_e2, filename + "_e2_upgrade")) # Hopefully not already taken. results.append((parser_e3, filename + "_e3_upgrade")) - elif parser["general"]["definition"] == "deltacomb": # On the global stack OR the per-extruder user container. + elif parser["general"]["definition"] == "deltacomb": # On the global stack, the per-extruder user container OR the per-extruder quality changes container. parser["general"]["definition"] = "deltacomb_dc20" - if "metadata" in parser and "extruder" in parser["metadata"]: # Per-extruder user container. + if "metadata" in parser and ("extruder" in parser["metadata"] or "position" in parser["metadata"]): # Per-extruder user container or quality changes container. parser_e2 = configparser.ConfigParser(interpolation = None) parser_e3 = configparser.ConfigParser(interpolation = None) parser_e2.read_dict(parser) parser_e3.read_dict(parser) - parser_e2["metadata"]["extruder"] += "_e2_upgrade" - parser_e3["metadata"]["extruder"] += "_e3_upgrade" + if "extruder" in parser["metadata"]: + parser_e2["metadata"]["extruder"] += "_e2_upgrade" + parser_e3["metadata"]["extruder"] += "_e3_upgrade" results.append((parser_e2, filename + "_e2_upgrade")) results.append((parser_e3, filename + "_e3_upgrade")) From 80a886f5822809793f5b08c7326c14d0afb0d95c Mon Sep 17 00:00:00 2001 From: maukcc Date: Fri, 15 May 2020 09:24:17 +0200 Subject: [PATCH 055/116] HMS434 upgrade Added host chamber fan support --- resources/definitions/hms434.def.json | 2 +- resources/extruders/hms434_tool_1.def.json | 2 +- resources/extruders/hms434_tool_2.def.json | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/resources/definitions/hms434.def.json b/resources/definitions/hms434.def.json index df68487520..b5f968d7c2 100644 --- a/resources/definitions/hms434.def.json +++ b/resources/definitions/hms434.def.json @@ -70,7 +70,7 @@ "material_bed_temp_wait": {"default_value": false }, "machine_max_feedrate_z": {"default_value": 10 }, "machine_acceleration": {"default_value": 180 }, - "machine_start_gcode": {"default_value": "\n;Neither Hybrid AM Systems nor any of Hybrid AM Systems representatives has any liabilities or gives any warranties on this .gcode file, or on any or all objects made with this .gcode file.\n\nM114\n\nM140 S{material_bed_temperature_layer_0}\n\nM117 Homing Y ......\nG28 Y\nM117 Homing X ......\nG28 X\nM117 Homing Z ......\nG28 Z F100\n\nG1 Z10 F900\nG1 X-25 Y20 F12000\n\nM141 S{build_volume_temperature}\nM118 // action:set_chamber_fan\nM190 S{material_bed_temperature_layer_0}\n\nM118 // action:set_pid\n\nM117 HMS434 Printing ..." }, + "machine_start_gcode": {"default_value": "\n;Neither Hybrid AM Systems nor any of Hybrid AM Systems representatives has any liabilities or gives any warranties on this .gcode file, or on any or all objects made with this .gcode file.\n\nM114\n\nM140 S{material_bed_temperature_layer_0}\n\nM117 Homing Y ......\nG28 Y\nM117 Homing X ......\nG28 X\nM117 Homing Z ......\nG28 Z F100\n\nG1 Z10 F900\nG1 X-25 Y20 F12000\n\nM118 // action:chamber_fan_on\nM141 S{build_volume_temperature}\n\nM190 S{material_bed_temperature_layer_0}\n\nM117 HMS434 Printing ..." }, "machine_end_gcode": {"default_value": "" }, "retraction_extra_prime_amount": {"minimum_value_warning": "-2.0" }, diff --git a/resources/extruders/hms434_tool_1.def.json b/resources/extruders/hms434_tool_1.def.json index 98ad692232..2a36dd4c2b 100644 --- a/resources/extruders/hms434_tool_1.def.json +++ b/resources/extruders/hms434_tool_1.def.json @@ -16,7 +16,7 @@ "machine_nozzle_offset_y": { "default_value": 0.0 }, "material_diameter": { "default_value": 1.75 }, "machine_extruder_start_code": { - "default_value": "\n;changing to tool1\nM83\nM109 T0 S{material_print_temperature}\nM114\nM118 // action:set_pid\nG1 E{switch_extruder_retraction_amount} F300\nG1 E{switch_extruder_retraction_amount} F300\nG1 E{switch_extruder_retraction_amount} F300\nG1 E{switch_extruder_retraction_amount} F300\nG1 E-{switch_extruder_retraction_amount} F2400\nG1 Y40 F3000\nG1 X10 F12000\n\n" + "default_value": "\n;changing to tool1\nM83\nM109 T0 S{material_print_temperature}\nM114\nG1 E{switch_extruder_retraction_amount} F300\nG1 E{switch_extruder_retraction_amount} F300\nG1 E{switch_extruder_retraction_amount} F300\nG1 E{switch_extruder_retraction_amount} F300\nG1 E-{switch_extruder_retraction_amount} F2400\nG1 Y40 F3000\nG1 X10 F12000\n\n" }, "machine_extruder_end_code": { "default_value": "\nG1 X10 Y40 F12000\nG1 X-25 F12000\nM109 T0 R{material_standby_temperature}\nG1 Y20 F3000\n; ending tool1\n\n" diff --git a/resources/extruders/hms434_tool_2.def.json b/resources/extruders/hms434_tool_2.def.json index a4d1e9b316..110695a8fc 100644 --- a/resources/extruders/hms434_tool_2.def.json +++ b/resources/extruders/hms434_tool_2.def.json @@ -16,7 +16,7 @@ "machine_nozzle_offset_y": { "default_value": 0.0 }, "material_diameter": { "default_value": 1.75 }, "machine_extruder_start_code": { - "default_value": "\n;changing to tool2\nM83\nM109 T1 S{material_print_temperature}\nM114\nM118 // action:set_pid\nG1 E{switch_extruder_retraction_amount} F300\nG1 E{switch_extruder_retraction_amount} F300\nG1 E{switch_extruder_retraction_amount} F300\nG1 E{switch_extruder_retraction_amount} F300\nG1 E-{switch_extruder_retraction_amount} F2400\nG1 Y40 F3000\nG1 X10 F12000\n\n" + "default_value": "\n;changing to tool2\nM83\nM109 T1 S{material_print_temperature}\nM114\nG1 E{switch_extruder_retraction_amount} F300\nG1 E{switch_extruder_retraction_amount} F300\nG1 E{switch_extruder_retraction_amount} F300\nG1 E{switch_extruder_retraction_amount} F300\nG1 E-{switch_extruder_retraction_amount} F2400\nG1 Y40 F3000\nG1 X10 F12000\n\n" }, "machine_extruder_end_code": { "default_value": "\nG1 X10 Y40 F12000\nG1 X-25 F12000\nM109 T1 R{material_standby_temperature}\nG1 Y20 F3000\n; ending tool2\n\n" From 39595d054199fc5d449848343fce04db5823d3fd Mon Sep 17 00:00:00 2001 From: maukcc Date: Fri, 15 May 2020 09:28:07 +0200 Subject: [PATCH 056/116] HMS434 update --- resources/definitions/hms434.def.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/definitions/hms434.def.json b/resources/definitions/hms434.def.json index b5f968d7c2..18c7f2898d 100644 --- a/resources/definitions/hms434.def.json +++ b/resources/definitions/hms434.def.json @@ -70,7 +70,7 @@ "material_bed_temp_wait": {"default_value": false }, "machine_max_feedrate_z": {"default_value": 10 }, "machine_acceleration": {"default_value": 180 }, - "machine_start_gcode": {"default_value": "\n;Neither Hybrid AM Systems nor any of Hybrid AM Systems representatives has any liabilities or gives any warranties on this .gcode file, or on any or all objects made with this .gcode file.\n\nM114\n\nM140 S{material_bed_temperature_layer_0}\n\nM117 Homing Y ......\nG28 Y\nM117 Homing X ......\nG28 X\nM117 Homing Z ......\nG28 Z F100\n\nG1 Z10 F900\nG1 X-25 Y20 F12000\n\nM118 // action:chamber_fan_on\nM141 S{build_volume_temperature}\n\nM190 S{material_bed_temperature_layer_0}\n\nM117 HMS434 Printing ..." }, + "machine_start_gcode": {"default_value": "\n;Neither Hybrid AM Systems nor any of Hybrid AM Systems representatives has any liabilities or gives any warranties on this .gcode file, or on any or all objects made with this .gcode file.\n\nM114\n\nM140 S{material_bed_temperature_layer_0}\nM118 // action:chamber_fan_on\nM141 S{build_volume_temperature}\n\nM117 Homing Y ......\nG28 Y\nM117 Homing X ......\nG28 X\nM117 Homing Z ......\nG28 Z F100\n\nG1 Z10 F900\nG1 X-25 Y20 F12000\n\nM190 S{material_bed_temperature_layer_0}\n\nM117 HMS434 Printing ..." }, "machine_end_gcode": {"default_value": "" }, "retraction_extra_prime_amount": {"minimum_value_warning": "-2.0" }, From f3c66c31898a4167def7b2b89860e5495621b84c Mon Sep 17 00:00:00 2001 From: Nino van Hooff Date: Fri, 15 May 2020 11:28:17 +0200 Subject: [PATCH 057/116] Refactor CloudApiClient (and ToolpathUploader) to use HttpRequestManager Has the benefit of a more unified Http request management + timeouts CURA-7290 --- .../src/Cloud/CloudApiClient.py | 72 ++++++++++++------- .../src/Cloud/CloudOutputDeviceManager.py | 5 +- .../src/Cloud/ToolPathUploader.py | 55 +++++++------- 3 files changed, 74 insertions(+), 58 deletions(-) diff --git a/plugins/UM3NetworkPrinting/src/Cloud/CloudApiClient.py b/plugins/UM3NetworkPrinting/src/Cloud/CloudApiClient.py index 1c9670d87f..b45f549b3c 100644 --- a/plugins/UM3NetworkPrinting/src/Cloud/CloudApiClient.py +++ b/plugins/UM3NetworkPrinting/src/Cloud/CloudApiClient.py @@ -6,11 +6,15 @@ from time import time from typing import Callable, List, Type, TypeVar, Union, Optional, Tuple, Dict, Any, cast from PyQt5.QtCore import QUrl -from PyQt5.QtNetwork import QNetworkRequest, QNetworkReply, QNetworkAccessManager +from PyQt5.QtNetwork import QNetworkRequest, QNetworkReply from UM.Logger import Logger +from UM.TaskManagement.HttpRequestManager import HttpRequestManager +from UM.TaskManagement.HttpRequestScope import JsonDecoratorScope from cura.API import Account +from cura.CuraApplication import CuraApplication from cura.UltimakerCloud import UltimakerCloudAuthentication +from cura.UltimakerCloud.UltimakerCloudScope import UltimakerCloudScope from .ToolPathUploader import ToolPathUploader from ..Models.BaseModel import BaseModel from ..Models.Http.CloudClusterResponse import CloudClusterResponse @@ -33,16 +37,20 @@ class CloudApiClient: CLUSTER_API_ROOT = "{}/connect/v1".format(ROOT_PATH) CURA_API_ROOT = "{}/cura/v1".format(ROOT_PATH) + DEFAULT_REQUEST_TIMEOUT = 10 # seconds + # In order to avoid garbage collection we keep the callbacks in this list. - _anti_gc_callbacks = [] # type: List[Callable[[], None]] + _anti_gc_callbacks = [] # type: List[Callable[[Any], None]] ## Initializes a new cloud API client. # \param account: The user's account object # \param on_error: The callback to be called whenever we receive errors from the server. - def __init__(self, account: Account, on_error: Callable[[List[CloudError]], None]) -> None: + def __init__(self, app: CuraApplication, on_error: Callable[[List[CloudError]], None]) -> None: super().__init__() - self._manager = QNetworkAccessManager() - self._account = account + self._app = app + self._account = app.getCuraAPI().account + self._scope = JsonDecoratorScope(UltimakerCloudScope(app)) + self._http = HttpRequestManager.getInstance() self._on_error = on_error self._upload = None # type: Optional[ToolPathUploader] @@ -55,16 +63,21 @@ class CloudApiClient: # \param on_finished: The function to be called after the result is parsed. def getClusters(self, on_finished: Callable[[List[CloudClusterResponse]], Any], failed: Callable) -> None: url = "{}/clusters?status=active".format(self.CLUSTER_API_ROOT) - reply = self._manager.get(self._createEmptyRequest(url)) - self._addCallback(reply, on_finished, CloudClusterResponse, failed) + self._http.get(url, + scope = self._scope, + callback = self._parseCallback(on_finished, CloudClusterResponse, failed), + error_callback = failed, + timeout = self.DEFAULT_REQUEST_TIMEOUT) ## Retrieves the status of the given cluster. # \param cluster_id: The ID of the cluster. # \param on_finished: The function to be called after the result is parsed. def getClusterStatus(self, cluster_id: str, on_finished: Callable[[CloudClusterStatus], Any]) -> None: url = "{}/clusters/{}/status".format(self.CLUSTER_API_ROOT, cluster_id) - reply = self._manager.get(self._createEmptyRequest(url)) - self._addCallback(reply, on_finished, CloudClusterStatus) + self._http.get(url, + scope = self._scope, + callback = self._parseCallback(on_finished, CloudClusterStatus), + timeout = self.DEFAULT_REQUEST_TIMEOUT) ## Requests the cloud to register the upload of a print job mesh. # \param request: The request object. @@ -72,9 +85,13 @@ class CloudApiClient: def requestUpload(self, request: CloudPrintJobUploadRequest, on_finished: Callable[[CloudPrintJobResponse], Any]) -> None: url = "{}/jobs/upload".format(self.CURA_API_ROOT) - body = json.dumps({"data": request.toDict()}) - reply = self._manager.put(self._createEmptyRequest(url), body.encode()) - self._addCallback(reply, on_finished, CloudPrintJobResponse) + data = json.dumps({"data": request.toDict()}).encode() + + self._http.put(url, + scope = self._scope, + data = data, + callback = self._parseCallback(on_finished, CloudPrintJobResponse), + timeout = self.DEFAULT_REQUEST_TIMEOUT) ## Uploads a print job tool path to the cloud. # \param print_job: The object received after requesting an upload with `self.requestUpload`. @@ -84,7 +101,7 @@ class CloudApiClient: # \param on_error: A function to be called if the upload fails. def uploadToolPath(self, print_job: CloudPrintJobResponse, mesh: bytes, on_finished: Callable[[], Any], on_progress: Callable[[int], Any], on_error: Callable[[], Any]): - self._upload = ToolPathUploader(self._manager, print_job, mesh, on_finished, on_progress, on_error) + self._upload = ToolPathUploader(self._http, print_job, mesh, on_finished, on_progress, on_error) self._upload.start() # Requests a cluster to print the given print job. @@ -93,8 +110,11 @@ class CloudApiClient: # \param on_finished: The function to be called after the result is parsed. def requestPrint(self, cluster_id: str, job_id: str, on_finished: Callable[[CloudPrintResponse], Any]) -> None: url = "{}/clusters/{}/print/{}".format(self.CLUSTER_API_ROOT, cluster_id, job_id) - reply = self._manager.post(self._createEmptyRequest(url), b"") - self._addCallback(reply, on_finished, CloudPrintResponse) + self._http.post(url, + scope = self._scope, + data = b"", + callback = self._parseCallback(on_finished, CloudPrintResponse), + timeout = self.DEFAULT_REQUEST_TIMEOUT) ## Send a print job action to the cluster for the given print job. # \param cluster_id: The ID of the cluster. @@ -104,7 +124,10 @@ class CloudApiClient: data: Optional[Dict[str, Any]] = None) -> None: body = json.dumps({"data": data}).encode() if data else b"" url = "{}/clusters/{}/print_jobs/{}/action/{}".format(self.CLUSTER_API_ROOT, cluster_id, cluster_job_id, action) - self._manager.post(self._createEmptyRequest(url), body) + self._http.post(url, + scope = self._scope, + data = body, + timeout = self.DEFAULT_REQUEST_TIMEOUT) ## We override _createEmptyRequest in order to add the user credentials. # \param url: The URL to request @@ -162,13 +185,12 @@ class CloudApiClient: # \param on_finished: The callback in case the response is successful. Depending on the endpoint it will be either # a list or a single item. # \param model: The type of the model to convert the response to. - def _addCallback(self, - reply: QNetworkReply, - on_finished: Union[Callable[[CloudApiClientModel], Any], - Callable[[List[CloudApiClientModel]], Any]], - model: Type[CloudApiClientModel], - on_error: Optional[Callable] = None) -> None: - def parse() -> None: + def _parseCallback(self, + on_finished: Union[Callable[[CloudApiClientModel], Any], + Callable[[List[CloudApiClientModel]], Any]], + model: Type[CloudApiClientModel], + on_error: Optional[Callable] = None) -> Callable[[QNetworkReply], None]: + def parse(reply: QNetworkReply) -> None: self._anti_gc_callbacks.remove(parse) # Don't try to parse the reply if we didn't get one @@ -184,6 +206,4 @@ class CloudApiClient: self._parseModels(response, on_finished, model) self._anti_gc_callbacks.append(parse) - reply.finished.connect(parse) - if on_error is not None: - reply.error.connect(on_error) + return parse diff --git a/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDeviceManager.py b/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDeviceManager.py index 8a87438b0e..2d941281c7 100644 --- a/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDeviceManager.py +++ b/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDeviceManager.py @@ -4,6 +4,7 @@ import os from typing import Dict, List, Optional from PyQt5.QtCore import QTimer +from PyQt5.QtNetwork import QNetworkReply from UM import i18nCatalog from UM.Logger import Logger # To log errors talking to the API. @@ -43,7 +44,7 @@ class CloudOutputDeviceManager: # Persistent dict containing the remote clusters for the authenticated user. self._remote_clusters = {} # type: Dict[str, CloudOutputDevice] self._account = CuraApplication.getInstance().getCuraAPI().account # type: Account - self._api = CloudApiClient(self._account, on_error = lambda error: Logger.log("e", str(error))) + self._api = CloudApiClient(CuraApplication.getInstance(), on_error = lambda error: Logger.log("e", str(error))) self._account.loginStateChanged.connect(self._onLoginStateChanged) # Ensure we don't start twice. @@ -127,7 +128,7 @@ class CloudOutputDeviceManager: self._onSyncFinished(True) - def _onGetRemoteClusterFailed(self): + def _onGetRemoteClusterFailed(self, reply: QNetworkReply, error: QNetworkReply.NetworkError): self._onSyncFinished(False) def _onDevicesDiscovered(self, clusters: List[CloudClusterResponse]) -> None: diff --git a/plugins/UM3NetworkPrinting/src/Cloud/ToolPathUploader.py b/plugins/UM3NetworkPrinting/src/Cloud/ToolPathUploader.py index 6aa341c0e5..6317dff347 100644 --- a/plugins/UM3NetworkPrinting/src/Cloud/ToolPathUploader.py +++ b/plugins/UM3NetworkPrinting/src/Cloud/ToolPathUploader.py @@ -1,11 +1,11 @@ # Copyright (c) 2019 Ultimaker B.V. # !/usr/bin/env python # -*- coding: utf-8 -*- -from PyQt5.QtCore import QUrl -from PyQt5.QtNetwork import QNetworkRequest, QNetworkReply, QNetworkAccessManager -from typing import Optional, Callable, Any, Tuple, cast +from PyQt5.QtNetwork import QNetworkRequest, QNetworkReply +from typing import Callable, Any, Tuple from UM.Logger import Logger +from UM.TaskManagement.HttpRequestManager import HttpRequestManager from ..Models.Http.CloudPrintJobResponse import CloudPrintJobResponse @@ -23,16 +23,16 @@ class ToolPathUploader: BYTES_PER_REQUEST = 256 * 1024 ## Creates a mesh upload object. - # \param manager: The network access manager that will handle the HTTP requests. + # \param http: The HttpRequestManager that will handle the HTTP requests. # \param print_job: The print job response that was returned by the cloud after registering the upload. # \param data: The mesh bytes to be uploaded. # \param on_finished: The method to be called when done. # \param on_progress: The method to be called when the progress changes (receives a percentage 0-100). # \param on_error: The method to be called when an error occurs. - def __init__(self, manager: QNetworkAccessManager, print_job: CloudPrintJobResponse, data: bytes, + def __init__(self, http: HttpRequestManager, print_job: CloudPrintJobResponse, data: bytes, on_finished: Callable[[], Any], on_progress: Callable[[int], Any], on_error: Callable[[], Any] ) -> None: - self._manager = manager + self._http = http self._print_job = print_job self._data = data @@ -43,25 +43,12 @@ class ToolPathUploader: self._sent_bytes = 0 self._retries = 0 self._finished = False - self._reply = None # type: Optional[QNetworkReply] ## Returns the print job for which this object was created. @property def printJob(self): return self._print_job - ## Creates a network request to the print job upload URL, adding the needed content range header. - def _createRequest(self) -> QNetworkRequest: - request = QNetworkRequest(QUrl(self._print_job.upload_url)) - request.setHeader(QNetworkRequest.ContentTypeHeader, self._print_job.content_type) - - first_byte, last_byte = self._chunkRange() - content_range = "bytes {}-{}/{}".format(first_byte, last_byte - 1, len(self._data)) - request.setRawHeader(b"Content-Range", content_range.encode()) - Logger.log("i", "Uploading %s to %s", content_range, self._print_job.upload_url) - - return request - ## Determines the bytes that should be uploaded next. # \return: A tuple with the first and the last byte to upload. def _chunkRange(self) -> Tuple[int, int]: @@ -88,13 +75,23 @@ class ToolPathUploader: raise ValueError("The upload is already finished") first_byte, last_byte = self._chunkRange() - request = self._createRequest() + content_range = "bytes {}-{}/{}".format(first_byte, last_byte - 1, len(self._data)) - # now send the reply and subscribe to the results - self._reply = self._manager.put(request, self._data[first_byte:last_byte]) - self._reply.finished.connect(self._finishedCallback) - self._reply.uploadProgress.connect(self._progressCallback) - self._reply.error.connect(self._errorCallback) + headers = { + "Content-Type": self._print_job.content_type, + "Content-Range": content_range + } + + Logger.log("i", "Uploading %s to %s", content_range, self._print_job.upload_url) + + self._http.put( + url = self._print_job.upload_url, + headers_dict = headers, + data = self._data[first_byte:last_byte], + callback = self._finishedCallback, + error_callback = self._errorCallback, + upload_progress_callback = self._progressCallback + ) ## Handles an update to the upload progress # \param bytes_sent: The amount of bytes sent in the current request. @@ -106,16 +103,14 @@ class ToolPathUploader: self._on_progress(int(total_sent / len(self._data) * 100)) ## Handles an error uploading. - def _errorCallback(self) -> None: - reply = cast(QNetworkReply, self._reply) + def _errorCallback(self, reply: QNetworkReply, error: QNetworkReply.NetworkError) -> None: body = bytes(reply.readAll()).decode() Logger.log("e", "Received error while uploading: %s", body) self.stop() self._on_error() ## Checks whether a chunk of data was uploaded successfully, starting the next chunk if needed. - def _finishedCallback(self) -> None: - reply = cast(QNetworkReply, self._reply) + def _finishedCallback(self, reply: QNetworkReply) -> None: Logger.log("i", "Finished callback %s %s", reply.attribute(QNetworkRequest.HttpStatusCodeAttribute), reply.url().toString()) @@ -133,7 +128,7 @@ class ToolPathUploader: # Http codes that are not to be retried are assumed to be errors. if status_code > 308: - self._errorCallback() + self._errorCallback(reply, None) return Logger.log("d", "status_code: %s, Headers: %s, body: %s", status_code, From 9acf8b6122148897119f70da64f4245d93345562 Mon Sep 17 00:00:00 2001 From: Nino van Hooff Date: Fri, 15 May 2020 11:32:49 +0200 Subject: [PATCH 058/116] Revert "Add a sync timeout to CloudOutputDeviceManager" Stopgap solution is not necessary anymore after CloudOutputDeviceManager after implementing timeouts on the http-level. This reverts commit 15f813a4 --- .../src/Cloud/CloudOutputDeviceManager.py | 37 ++++--------------- 1 file changed, 8 insertions(+), 29 deletions(-) diff --git a/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDeviceManager.py b/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDeviceManager.py index 2d941281c7..25ee4cf5e5 100644 --- a/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDeviceManager.py +++ b/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDeviceManager.py @@ -27,9 +27,6 @@ class CloudOutputDeviceManager: API spec is available on https://api.ultimaker.com/docs/connect/spec/. """ - SYNC_TIMEOUT = 50.0 - """seconds. Adding many different kinds of printers can take a long time""" - META_CLUSTER_ID = "um_cloud_cluster_id" META_NETWORK_KEY = "um_network_key" SYNC_SERVICE_NAME = "CloudOutputDeviceManager" @@ -50,13 +47,7 @@ class CloudOutputDeviceManager: # Ensure we don't start twice. self._running = False - # Unfortunately, not all cases of a failed request result in an error callback, such as VPN connection - # being broken or possibly switching wifi networks. Better solution: Refactor CloudApiClient to use - # HttpRequestManager, which supports timeout. - self._sync_timeout_timer = QTimer() - self._sync_timeout_timer.setInterval(int(self.SYNC_TIMEOUT * 1000)) - self._sync_timeout_timer.setSingleShot(True) - self._sync_timeout_timer.timeout.connect(self._onSyncTimeout) + self._syncing = False def start(self): """Starts running the cloud output device manager, thus periodically requesting cloud data.""" @@ -94,13 +85,12 @@ class CloudOutputDeviceManager: def _getRemoteClusters(self) -> None: """Gets all remote clusters from the API.""" - if self._sync_timeout_timer.isActive(): - # A sync is running + if self._syncing: return Logger.info("Syncing cloud printer clusters") - self._sync_timeout_timer.start() + self._syncing = True self._account.setSyncState(self.SYNC_SERVICE_NAME, SyncState.SYNCING) self._api.getClusters(self._onGetRemoteClustersFinished, self._onGetRemoteClusterFailed) @@ -126,10 +116,12 @@ class CloudOutputDeviceManager: # If the removed device was active we should connect to the new active device self._connectToActiveMachine() - self._onSyncFinished(True) + self._syncing = False + self._account.setSyncState(self.SYNC_SERVICE_NAME, SyncState.SUCCESS) def _onGetRemoteClusterFailed(self, reply: QNetworkReply, error: QNetworkReply.NetworkError): - self._onSyncFinished(False) + self._syncing = False + self._account.setSyncState(self.SYNC_SERVICE_NAME, SyncState.ERROR) def _onDevicesDiscovered(self, clusters: List[CloudClusterResponse]) -> None: """**Synchronously** create machines for discovered devices @@ -232,19 +224,6 @@ class CloudOutputDeviceManager: if device.key in output_device_manager.getOutputDeviceIds(): output_device_manager.removeOutputDevice(device.key) - def _onSyncTimeout(self): - Logger.warning("Cloud printer sync timed out after {} seconds".format(self.SYNC_TIMEOUT)) - self._onSyncFinished(False) - - def _onSyncFinished(self, success: bool): - if self._sync_timeout_timer.isActive(): - self._sync_timeout_timer.stop() - - if success: - self._account.setSyncState(self.SYNC_SERVICE_NAME, SyncState.SUCCESS) - else: - self._account.setSyncState(self.SYNC_SERVICE_NAME, SyncState.ERROR) - def _createMachineFromDiscoveredDevice(self, key: str, activate: bool = True) -> None: device = self._remote_clusters[key] if not device: @@ -299,4 +278,4 @@ class CloudOutputDeviceManager: output_device_manager = CuraApplication.getInstance().getOutputDeviceManager() if device.key not in output_device_manager.getOutputDeviceIds(): - output_device_manager.addOutputDevice(device) + output_device_manager.addOutputDevice(device) \ No newline at end of file From 94f094380b1e9cb35ae50ef9689559746de6acfc Mon Sep 17 00:00:00 2001 From: Nino van Hooff Date: Fri, 15 May 2020 11:59:22 +0200 Subject: [PATCH 059/116] Log sync state transitions CURA-7290 --- cura/API/Account.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/cura/API/Account.py b/cura/API/Account.py index 2bfbf41f53..4df5765f58 100644 --- a/cura/API/Account.py +++ b/cura/API/Account.py @@ -108,6 +108,8 @@ class Account(QObject): :param state: One of SyncState """ + Logger.info("Service {service} enters sync state {state}", service = service_name, state = state) + prev_state = self._sync_state self._sync_services[service_name] = state From 783b26e5218744f1d41a68a647b934990e306395 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Fri, 15 May 2020 13:11:28 +0200 Subject: [PATCH 060/116] While searching, search through all settings rather than just visible This makes it consistent with the searching of the normal settings list. It also makes it easier to find certain things like the Cutting Mesh or something. --- plugins/PerObjectSettingsTool/SettingPickDialog.qml | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/plugins/PerObjectSettingsTool/SettingPickDialog.qml b/plugins/PerObjectSettingsTool/SettingPickDialog.qml index 4e9295c05a..28ddb7e642 100644 --- a/plugins/PerObjectSettingsTool/SettingPickDialog.qml +++ b/plugins/PerObjectSettingsTool/SettingPickDialog.qml @@ -60,16 +60,12 @@ UM.Dialog CheckBox { id: toggleShowAll - anchors { top: parent.top right: parent.right } - text: catalog.i18nc("@label:checkbox", "Show all") - checked: listview.model.showAll - onClicked: listview.model.showAll = checked } ScrollView @@ -85,7 +81,7 @@ UM.Dialog } ListView { - id:listview + id: listview model: UM.SettingDefinitionsModel { id: definitionsModel @@ -98,6 +94,7 @@ UM.Dialog excluded_settings = excluded_settings.concat(settingPickDialog.additional_excluded_settings) return excluded_settings } + showAll: toggleShowAll.checked || filterInput.text !== "" } delegate:Loader { From b231a4b3a2a0ae4034222c436f6a1592c654a8d1 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Fri, 15 May 2020 14:26:44 +0200 Subject: [PATCH 061/116] Remove unnecessary re-adding of extruders This was originally added for backwards compatibility with old versions of Uranium. However the link between Cura versions and Uranium versions is already very strong (Cura crashes with old Uranium versions) so this is not necessary. It was also adding warnings in our log that these extruders had already been added to the printer. Done during Turbo Testing and Tooling, to clean up our log files. --- cura/Settings/ExtruderManager.py | 19 ------------------- cura/Settings/ExtruderStack.py | 3 --- tests/TestExtruderManager.py | 14 -------------- 3 files changed, 36 deletions(-) diff --git a/cura/Settings/ExtruderManager.py b/cura/Settings/ExtruderManager.py index 4610e6a454..ef68e8c56e 100755 --- a/cura/Settings/ExtruderManager.py +++ b/cura/Settings/ExtruderManager.py @@ -143,25 +143,6 @@ class ExtruderManager(QObject): return self._extruder_trains[global_container_stack.getId()][str(index)] return None - def registerExtruder(self, extruder_train: "ExtruderStack", machine_id: str) -> None: - changed = False - - if machine_id not in self._extruder_trains: - self._extruder_trains[machine_id] = {} - changed = True - - # do not register if an extruder has already been registered at the position on this machine - if any(item.getId() == extruder_train.getId() for item in self._extruder_trains[machine_id].values()): - Logger.log("w", "Extruder [%s] has already been registered on machine [%s], not doing anything", - extruder_train.getId(), machine_id) - return - - if extruder_train: - self._extruder_trains[machine_id][extruder_train.getMetaDataEntry("position")] = extruder_train - changed = True - if changed: - self.extrudersChanged.emit(machine_id) - ## Gets a property of a setting for all extruders. # # \param setting_key \type{str} The setting to get the property of. diff --git a/cura/Settings/ExtruderStack.py b/cura/Settings/ExtruderStack.py index 5d4b3e38b1..13dfd18bcc 100644 --- a/cura/Settings/ExtruderStack.py +++ b/cura/Settings/ExtruderStack.py @@ -44,9 +44,6 @@ class ExtruderStack(CuraContainerStack): stack.addExtruder(self) self.setMetaDataEntry("machine", stack.id) - # For backward compatibility: Register the extruder with the Extruder Manager - ExtruderManager.getInstance().registerExtruder(self, stack.id) - @override(ContainerStack) def getNextStack(self) -> Optional["GlobalStack"]: return super().getNextStack() diff --git a/tests/TestExtruderManager.py b/tests/TestExtruderManager.py index f732278e83..6eca0a34ad 100644 --- a/tests/TestExtruderManager.py +++ b/tests/TestExtruderManager.py @@ -15,17 +15,3 @@ def test_getAllExtruderSettings(extruder_manager): extruder_2.getProperty = MagicMock(return_value="zomg") extruder_manager.getActiveExtruderStacks = MagicMock(return_value = [extruder_1, extruder_2]) assert extruder_manager.getAllExtruderSettings("whatever", "value") == ["beep", "zomg"] - - -def test_registerExtruder(extruder_manager): - extruder = createMockedExtruder("beep") - extruder.getMetaDataEntry = MagicMock(return_value = "0") # because the extruder position gets called - - extruder_manager.extrudersChanged = MagicMock() - extruder_manager.registerExtruder(extruder, "zomg") - - assert extruder_manager.extrudersChanged.emit.call_count == 1 - - # Doing it again should not trigger anything - extruder_manager.registerExtruder(extruder, "zomg") - assert extruder_manager.extrudersChanged.emit.call_count == 1 From 0482371fc6be9e98bae14e737063686ec9d4643b Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Fri, 15 May 2020 15:02:07 +0200 Subject: [PATCH 062/116] Don't use deprecated extruders() slot It's been replaced by extruderList. Done during Turbo Testing and Tooling to reduce the number of warnings in our log. --- cura/CuraPackageManager.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/cura/CuraPackageManager.py b/cura/CuraPackageManager.py index a0d3a8d44a..c772ef6984 100644 --- a/cura/CuraPackageManager.py +++ b/cura/CuraPackageManager.py @@ -36,10 +36,10 @@ class CuraPackageManager(PackageManager): machine_with_qualities = [] for container_id in ids: for global_stack in global_stacks: - for extruder_nr, extruder_stack in global_stack.extruders.items(): + for extruder_nr, extruder_stack in enumerate(global_stack.extruderList): if container_id in (extruder_stack.material.getId(), extruder_stack.material.getMetaData().get("base_file")): - machine_with_materials.append((global_stack, extruder_nr, container_id)) + machine_with_materials.append((global_stack, str(extruder_nr), container_id)) if container_id == extruder_stack.quality.getId(): - machine_with_qualities.append((global_stack, extruder_nr, container_id)) + machine_with_qualities.append((global_stack, str(extruder_nr), container_id)) return machine_with_materials, machine_with_qualities From 833a7a3804e67d3c45f48839de314ae7412def4d Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Fri, 15 May 2020 15:04:47 +0200 Subject: [PATCH 063/116] Don't use deprecated extruders() It has been replaced by extruderList. Done during Turbo Testing and Tooling to reduce the number of warnings in our log. --- cura/Machines/Models/BaseMaterialsModel.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/cura/Machines/Models/BaseMaterialsModel.py b/cura/Machines/Models/BaseMaterialsModel.py index 5e672faa12..b4b677d8cc 100644 --- a/cura/Machines/Models/BaseMaterialsModel.py +++ b/cura/Machines/Models/BaseMaterialsModel.py @@ -150,9 +150,10 @@ class BaseMaterialsModel(ListModel): global_stack = cura.CuraApplication.CuraApplication.getInstance().getGlobalContainerStack() if not global_stack.hasMaterials: return # There are no materials for this machine, so nothing to do. - extruder_stack = global_stack.extruders.get(str(self._extruder_position)) - if not extruder_stack: + extruder_list = global_stack.extruderList + if self._extruder_position > len(extruder_list): return + extruder_stack = extruder_list[self._extruder_position] nozzle_name = extruder_stack.variant.getName() machine_node = ContainerTree.getInstance().machines[global_stack.definition.getId()] if nozzle_name not in machine_node.variants: From bbf53c441fa2de2eb2edcb13bb682cecb2e63913 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Fri, 15 May 2020 15:06:58 +0200 Subject: [PATCH 064/116] Don't use extruders() but extruderList The extruders() slot has been deprecated. We need to replace it with extruderList. I'm changing them one by one and testing each time whether everything still seems to function correctly, but it's fairly safe anyway. Done during Turbo Testing and Tooling to reduce the number of warnings in our log. --- cura/Machines/Models/QualitySettingsModel.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cura/Machines/Models/QualitySettingsModel.py b/cura/Machines/Models/QualitySettingsModel.py index 8a956263e7..c15dddce4c 100644 --- a/cura/Machines/Models/QualitySettingsModel.py +++ b/cura/Machines/Models/QualitySettingsModel.py @@ -152,7 +152,7 @@ class QualitySettingsModel(ListModel): if self._selected_position == self.GLOBAL_STACK_POSITION: user_value = global_container_stack.userChanges.getProperty(definition.key, "value") else: - extruder_stack = global_container_stack.extruders[str(self._selected_position)] + extruder_stack = global_container_stack.extruderList[self._selected_position] user_value = extruder_stack.userChanges.getProperty(definition.key, "value") if profile_value is None and user_value is None: From e0e0371de4aae62e932d382cdfb37c0b8dd41972 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Fri, 15 May 2020 15:10:30 +0200 Subject: [PATCH 065/116] Use extruderList rather than extruders Removes another warning from the log. And it makes the code simpler in this case. Done during Turbo Testing and Tooling to reduce the number of warnings in our log file. --- cura/Settings/CuraContainerRegistry.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/cura/Settings/CuraContainerRegistry.py b/cura/Settings/CuraContainerRegistry.py index 0ef09a1fac..dca9564ef7 100644 --- a/cura/Settings/CuraContainerRegistry.py +++ b/cura/Settings/CuraContainerRegistry.py @@ -180,9 +180,7 @@ class CuraContainerRegistry(ContainerRegistry): return {"status": "error", "message": catalog.i18nc("@info:status Don't translate the XML tags !", "Can't import profile from {0} before a printer is added.", file_name)} container_tree = ContainerTree.getInstance() - machine_extruders = [] - for position in sorted(global_stack.extruders): - machine_extruders.append(global_stack.extruders[position]) + machine_extruders = global_stack.extruderList plugin_registry = PluginRegistry.getInstance() extension = file_name.split(".")[-1] From 4482b4f352d4cc886c21c707268bd9d81cd584f8 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Fri, 15 May 2020 15:14:56 +0200 Subject: [PATCH 066/116] Use extruderList rather than deprecated extruders This fixes a possible bug, too, if the extruders dictionary weren't iterated over in the order of the extruders. It would sometimes assign the profiles to the wrong extruders then. However I think the dictionary iteration in Python is in order of insertion and we probably insert them in the proper order by accident. Done during Turbo Testing and Tooling to reduce the number of warnings in our log. --- cura/Settings/CuraContainerRegistry.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cura/Settings/CuraContainerRegistry.py b/cura/Settings/CuraContainerRegistry.py index dca9564ef7..00d2719793 100644 --- a/cura/Settings/CuraContainerRegistry.py +++ b/cura/Settings/CuraContainerRegistry.py @@ -261,7 +261,7 @@ class CuraContainerRegistry(ContainerRegistry): if len(profile_or_list) == 1: global_profile = profile_or_list[0] extruder_profiles = [] - for idx, extruder in enumerate(global_stack.extruders.values()): + for idx, extruder in enumerate(global_stack.extruderList): profile_id = ContainerRegistry.getInstance().uniqueName(global_stack.getId() + "_extruder_" + str(idx + 1)) profile = InstanceContainer(profile_id) profile.setName(quality_name) From 6d3acf946a2d9fea2685a1a756c7bf57b63dd18b Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Fri, 15 May 2020 15:16:43 +0200 Subject: [PATCH 067/116] Use new extruderList rather than extruders The extruders dictionary has been deprecated in favour of extruderList. Done during Turbo Testing and Tooling to reduce the number of warnings in our log. --- cura/Settings/CuraStackBuilder.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cura/Settings/CuraStackBuilder.py b/cura/Settings/CuraStackBuilder.py index 257af78ecc..96307d3250 100644 --- a/cura/Settings/CuraStackBuilder.py +++ b/cura/Settings/CuraStackBuilder.py @@ -62,7 +62,7 @@ class CuraStackBuilder: except IndexError: return None - for new_extruder in new_global_stack.extruders.values(): # Only register the extruders if we're sure that all of them are correct. + for new_extruder in new_global_stack.extruderList: # Only register the extruders if we're sure that all of them are correct. registry.addContainer(new_extruder) # Register the global stack after the extruder stacks are created. This prevents the registry from adding another From afde5353eb43083c50899ac81a15daa110639662 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Fri, 15 May 2020 15:20:46 +0200 Subject: [PATCH 068/116] Use extruderList rather than extruders Extruders is deprecated. Always use the extruderList. In fact, the else case beneath was already using extruderList in the same way. Hopefully we can one day get rid of all the string conversion for the position in this class. I don't dare to refactor that without having a review though. Done during Turbo Testing and Tooling to reduce the number of warnings in our log. --- cura/Settings/MachineManager.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cura/Settings/MachineManager.py b/cura/Settings/MachineManager.py index 2866e3a494..1766bc616f 100755 --- a/cura/Settings/MachineManager.py +++ b/cura/Settings/MachineManager.py @@ -1114,7 +1114,7 @@ class MachineManager(QObject): return if material_node and material_node.container: material_container = material_node.container - self._global_container_stack.extruders[position].material = material_container + self._global_container_stack.extruderList[int(position)].material = material_container root_material_id = material_container.getMetaDataEntry("base_file", None) else: self._global_container_stack.extruderList[int(position)].material = empty_material_container From fe0bae4c253f7ef2a33e73fcf151b34c46f63599 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Fri, 15 May 2020 15:23:29 +0200 Subject: [PATCH 069/116] MORE usage of extruderList, LESS of extruders Extruders has been deprecated. Done during Turbo Testing and Tooling to reduce the number of warnings in our log. --- cura/Settings/MachineManager.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/cura/Settings/MachineManager.py b/cura/Settings/MachineManager.py index 1766bc616f..0c7a65bf78 100755 --- a/cura/Settings/MachineManager.py +++ b/cura/Settings/MachineManager.py @@ -1073,14 +1073,14 @@ class MachineManager(QObject): self._global_container_stack.quality = quality_container self._global_container_stack.qualityChanges = quality_changes_container - for position, extruder in self._global_container_stack.extruders.items(): + for position, extruder in enumerate(self._global_container_stack.extruderList): quality_node = None if quality_group is not None: - quality_node = quality_group.nodes_for_extruders.get(int(position)) + quality_node = quality_group.nodes_for_extruders.get(position) quality_changes_container = empty_quality_changes_container quality_container = empty_quality_container - quality_changes_metadata = quality_changes_group.metadata_per_extruder.get(int(position)) + quality_changes_metadata = quality_changes_group.metadata_per_extruder.get(position) if quality_changes_metadata: containers = container_registry.findContainers(id = quality_changes_metadata["id"]) if containers: From a6d7b97abcaebdf9ca86bf86e3e219585ad8a573 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Fri, 15 May 2020 15:39:28 +0200 Subject: [PATCH 070/116] Use extruderList rather than deprecated extruders Done during Turbo Testing and Tooling to reduce the number of warnings in our log. --- cura/Settings/MachineManager.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cura/Settings/MachineManager.py b/cura/Settings/MachineManager.py index 0c7a65bf78..e10d6880c9 100755 --- a/cura/Settings/MachineManager.py +++ b/cura/Settings/MachineManager.py @@ -1099,7 +1099,7 @@ class MachineManager(QObject): def _setVariantNode(self, position: str, variant_node: "VariantNode") -> None: if self._global_container_stack is None: return - self._global_container_stack.extruders[position].variant = variant_node.container + self._global_container_stack.extruderList[int(position)].variant = variant_node.container self.activeVariantChanged.emit() def _setGlobalVariant(self, container_node: "ContainerNode") -> None: @@ -1354,7 +1354,7 @@ class MachineManager(QObject): material_container_node = variant_node.materials.get(base_file, material_container_node) self._setMaterial(position, material_container_node) - self._global_container_stack.extruders[position].setEnabled(True) + self._global_container_stack.extruderList[int(position)].setEnabled(True) self.updateMaterialWithVariant(position) self.updateDefaultExtruder() From 174a8e5411c33e89eb6f1e7689ba3b6d9f3c569e Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Fri, 15 May 2020 15:50:03 +0200 Subject: [PATCH 071/116] Use extruderList rather than deprecated extruders Done during Turbo Testing and Tooling to reduce the number of warnings in our log. --- cura/Settings/MachineManager.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cura/Settings/MachineManager.py b/cura/Settings/MachineManager.py index e10d6880c9..89d18779f7 100755 --- a/cura/Settings/MachineManager.py +++ b/cura/Settings/MachineManager.py @@ -915,7 +915,7 @@ class MachineManager(QObject): @pyqtSlot(int, bool) def setExtruderEnabled(self, position: int, enabled: bool) -> None: - if self._global_container_stack is None or str(position) not in self._global_container_stack.extruders: + if self._global_container_stack is None or position >= len(self._global_container_stack.extruderList): Logger.log("w", "Could not find extruder on position %s.", position) return extruder = self._global_container_stack.extruderList[position] @@ -1590,7 +1590,7 @@ class MachineManager(QObject): return with postponeSignals(*self._getContainerChangedSignals(), compress = CompressTechnique.CompressPerParameterValue): self._setQualityGroup(self.activeQualityGroup()) - for stack in [self._global_container_stack] + list(self._global_container_stack.extruders.values()): + for stack in [self._global_container_stack] + self._global_container_stack.extruderList: stack.userChanges.clear() @pyqtProperty(QObject, fset = setQualityChangesGroup, notify = activeQualityChangesGroupChanged) From 33c1901070c3c4e4c2a0d90f36b5cd26268197e9 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Fri, 15 May 2020 15:51:49 +0200 Subject: [PATCH 072/116] Replace another extruders() call with extruderList The extruders function is deprecated. Done during Turbo Testing and Tooling to reduce the number of warnings in our log. --- cura/Settings/MachineManager.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cura/Settings/MachineManager.py b/cura/Settings/MachineManager.py index 89d18779f7..2d7916de32 100755 --- a/cura/Settings/MachineManager.py +++ b/cura/Settings/MachineManager.py @@ -1405,7 +1405,7 @@ class MachineManager(QObject): @pyqtSlot(str, "QVariant") def setMaterial(self, position: str, container_node, global_stack: Optional["GlobalStack"] = None) -> None: if global_stack is not None and global_stack != self._global_container_stack: - global_stack.extruders[position].material = container_node.container + global_stack.extruderList[int(position)].material = container_node.container return position = str(position) self.blurSettings.emit() From 17762cb431f788e97f0cdf378be20ad84ec5b565 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Fri, 15 May 2020 16:04:42 +0200 Subject: [PATCH 073/116] Use extruderList rather than extruders to switch userChanges over It's a bit weird that it switches the user changes over though. Won't it be a different printer type then? --- cura/Settings/MachineManager.py | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/cura/Settings/MachineManager.py b/cura/Settings/MachineManager.py index 2d7916de32..4d8d49e146 100755 --- a/cura/Settings/MachineManager.py +++ b/cura/Settings/MachineManager.py @@ -1286,17 +1286,15 @@ class MachineManager(QObject): # Keep a temporary copy of the global and per-extruder user changes and transfer them to the user changes # of the new machine after the new_machine becomes active. global_user_changes = self._global_container_stack.userChanges - per_extruder_user_changes = {} - for extruder_name, extruder_stack in self._global_container_stack.extruders.items(): - per_extruder_user_changes[extruder_name] = extruder_stack.userChanges + per_extruder_user_changes = [extruder_stack.userChanges for extruder_stack in self._global_container_stack.extruderList] self.setActiveMachine(new_machine.getId()) # Apply the global and per-extruder userChanges to the new_machine (which is of different type than the # previous one). self._global_container_stack.setUserChanges(global_user_changes) - for extruder_name in self._global_container_stack.extruders.keys(): - self._global_container_stack.extruders[extruder_name].setUserChanges(per_extruder_user_changes[extruder_name]) + for i, user_changes in enumerate(per_extruder_user_changes): + self._global_container_stack.extruderList[i].setUserChanges(per_extruder_user_changes[i]) @pyqtSlot(QObject) def applyRemoteConfiguration(self, configuration: PrinterConfigurationModel) -> None: From acc8e24cb405664a91a8416b762f1de183484ce3 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Fri, 15 May 2020 16:07:19 +0200 Subject: [PATCH 074/116] Use extruderList rather than extruders dictionary The extruders dictionary has been deprecated. Done during Turbo Testing and Tooling to reduce the amount of warnings in our log. --- cura/Settings/MachineManager.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cura/Settings/MachineManager.py b/cura/Settings/MachineManager.py index 4d8d49e146..4a04512026 100755 --- a/cura/Settings/MachineManager.py +++ b/cura/Settings/MachineManager.py @@ -1214,7 +1214,7 @@ class MachineManager(QObject): if self._global_container_stack is None: return if position is None: - position_list = list(self._global_container_stack.extruders.keys()) + position_list = list(range(len(self._global_container_stack.extruderList))) else: position_list = [position] From 696d2ffa1dccc04db00133608e7cec4f1e22c9cf Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Fri, 15 May 2020 16:11:27 +0200 Subject: [PATCH 075/116] Use extruderList rather than deprecated extruders I looked into changing that position into an integer and perhaps the dictionary into a list, but this dictionary is passed around throughout all of the functions so that would be quite a refactor. Done during Turbo Testing and Tooling to reduce the number of warnings in our log. --- plugins/3MFReader/ThreeMFWorkspaceReader.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/3MFReader/ThreeMFWorkspaceReader.py b/plugins/3MFReader/ThreeMFWorkspaceReader.py index 74589b8335..6ab72b029c 100755 --- a/plugins/3MFReader/ThreeMFWorkspaceReader.py +++ b/plugins/3MFReader/ThreeMFWorkspaceReader.py @@ -623,8 +623,8 @@ class ThreeMFWorkspaceReader(WorkspaceReader): machine_name = self._container_registry.uniqueName(self._machine_info.name) global_stack = CuraStackBuilder.createMachine(machine_name, self._machine_info.definition_id) - if global_stack: #Only switch if creating the machine was successful. - extruder_stack_dict = global_stack.extruders + if global_stack: # Only switch if creating the machine was successful. + extruder_stack_dict = {str(position): extruder for position, extruder in enumerate(global_stack.extruderList)} self._container_registry.addContainer(global_stack) else: From 2125b7130fcfb336bda56ae65a85a4647b9f532f Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Fri, 15 May 2020 16:18:05 +0200 Subject: [PATCH 076/116] Use extruderList rather than extruders Extruders has been deprecated. This also allows us to use integers for a while longer (until it needs to be serialised to a message with the .join() function). Done during Turbo Testing and Tooling to reduce the number of warnings in our log. --- plugins/CuraEngineBackend/StartSliceJob.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/plugins/CuraEngineBackend/StartSliceJob.py b/plugins/CuraEngineBackend/StartSliceJob.py index 62b0bd16e7..51eea7beea 100644 --- a/plugins/CuraEngineBackend/StartSliceJob.py +++ b/plugins/CuraEngineBackend/StartSliceJob.py @@ -251,7 +251,7 @@ class StartSliceJob(Job): global_stack = CuraApplication.getInstance().getGlobalContainerStack() if not global_stack: return - extruders_enabled = {position: stack.isEnabled for position, stack in global_stack.extruders.items()} + extruders_enabled = [stack.isEnabled for stack in global_stack.extruderList] filtered_object_groups = [] has_model_with_disabled_extruders = False associated_disabled_extruders = set() @@ -261,7 +261,7 @@ class StartSliceJob(Job): for node in group: # Only check if the printing extruder is enabled for printing meshes is_non_printing_mesh = node.callDecoration("evaluateIsNonPrintingMesh") - extruder_position = node.callDecoration("getActiveExtruderPosition") + extruder_position = int(node.callDecoration("getActiveExtruderPosition")) if not is_non_printing_mesh and not extruders_enabled[extruder_position]: skip_group = True has_model_with_disabled_extruders = True @@ -271,8 +271,8 @@ class StartSliceJob(Job): if has_model_with_disabled_extruders: self.setResult(StartJobResult.ObjectsWithDisabledExtruder) - associated_disabled_extruders = {str(c) for c in sorted([int(p) + 1 for p in associated_disabled_extruders])} - self.setMessage(", ".join(associated_disabled_extruders)) + associated_disabled_extruders = {p + 1 for p in associated_disabled_extruders} + self.setMessage(", ".join(map(str, sorted(associated_disabled_extruders)))) return # There are cases when there is nothing to slice. This can happen due to one at a time slicing not being From d499c6fdfe68c7aeeed54df2dd1d8d5f31751050 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Fri, 15 May 2020 18:50:20 +0200 Subject: [PATCH 077/116] Keep this position a string We've set up enough defensive coding that this kept working, but the typing checker fails on it. --- cura/Settings/MachineManager.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cura/Settings/MachineManager.py b/cura/Settings/MachineManager.py index 4a04512026..8f1a8bb7f8 100755 --- a/cura/Settings/MachineManager.py +++ b/cura/Settings/MachineManager.py @@ -1214,7 +1214,7 @@ class MachineManager(QObject): if self._global_container_stack is None: return if position is None: - position_list = list(range(len(self._global_container_stack.extruderList))) + position_list = [str(position) for position in range(len(self._global_container_stack.extruderList))] else: position_list = [position] From 1fb67f903c2ccaeb397077426551ca51836cfc9a Mon Sep 17 00:00:00 2001 From: paalex Date: Fri, 15 May 2020 20:25:27 -0400 Subject: [PATCH 078/116] add 2nd extruder to Tevo Tarantula printers --- resources/definitions/tevo_tarantula.def.json | 3 ++- resources/definitions/tevo_tarantula_pro.def.json | 3 ++- .../extruders/tevo_tarantula_extruder_1.def.json | 15 +++++++++++++++ .../tevo_tarantula_pro_extruder_1.def.json | 15 +++++++++++++++ 4 files changed, 34 insertions(+), 2 deletions(-) create mode 100644 resources/extruders/tevo_tarantula_extruder_1.def.json create mode 100644 resources/extruders/tevo_tarantula_pro_extruder_1.def.json diff --git a/resources/definitions/tevo_tarantula.def.json b/resources/definitions/tevo_tarantula.def.json index a12bff24f8..eee773cd74 100644 --- a/resources/definitions/tevo_tarantula.def.json +++ b/resources/definitions/tevo_tarantula.def.json @@ -11,7 +11,8 @@ "platform": "prusai3_platform.3mf", "machine_extruder_trains": { - "0": "tevo_tarantula_extruder_0" + "0": "tevo_tarantula_extruder_0", + "1": "tevo_tarantula_extruder_1" } }, diff --git a/resources/definitions/tevo_tarantula_pro.def.json b/resources/definitions/tevo_tarantula_pro.def.json index b53c59062b..793942a50b 100644 --- a/resources/definitions/tevo_tarantula_pro.def.json +++ b/resources/definitions/tevo_tarantula_pro.def.json @@ -11,7 +11,8 @@ "has_materials": true, "machine_extruder_trains": { - "0": "tevo_tarantula_pro_extruder_0" + "0": "tevo_tarantula_pro_extruder_0", + "1": "tevo_tarantula_pro_extruder_1" } }, diff --git a/resources/extruders/tevo_tarantula_extruder_1.def.json b/resources/extruders/tevo_tarantula_extruder_1.def.json new file mode 100644 index 0000000000..20d4c7004a --- /dev/null +++ b/resources/extruders/tevo_tarantula_extruder_1.def.json @@ -0,0 +1,15 @@ +{ + "version": 2, + "name": "Extruder 2", + "inherits": "fdmextruder", + "metadata": { + "machine": "tevo_tarantula", + "position": "1" + }, + + "overrides": { + "extruder_nr": { "default_value": 1 }, + "machine_nozzle_size": { "default_value": 0.4 }, + "material_diameter": { "default_value": 1.75 } + } +} diff --git a/resources/extruders/tevo_tarantula_pro_extruder_1.def.json b/resources/extruders/tevo_tarantula_pro_extruder_1.def.json new file mode 100644 index 0000000000..f02e74efff --- /dev/null +++ b/resources/extruders/tevo_tarantula_pro_extruder_1.def.json @@ -0,0 +1,15 @@ +{ + "version": 2, + "name": "Extruder 2", + "inherits": "fdmextruder", + "metadata": { + "machine": "tevo_tarantula_pro", + "position": "1" + }, + + "overrides": { + "extruder_nr": { "default_value": 1 }, + "machine_nozzle_size": { "default_value": 0.4 }, + "material_diameter": { "default_value": 1.75 } + } +} From 6fe66bf525e43009398d89f74be337e5767a0ab4 Mon Sep 17 00:00:00 2001 From: Luc Rubio Date: Mon, 18 May 2020 00:16:09 +0100 Subject: [PATCH 079/116] Add support for more than one network plugin when adding a network printer by IP address. --- .../Models/DiscoveredPrintersModel.py | 29 +++++++++++++------ 1 file changed, 20 insertions(+), 9 deletions(-) diff --git a/cura/Machines/Models/DiscoveredPrintersModel.py b/cura/Machines/Models/DiscoveredPrintersModel.py index 6d1bbdb698..37542f438c 100644 --- a/cura/Machines/Models/DiscoveredPrintersModel.py +++ b/cura/Machines/Models/DiscoveredPrintersModel.py @@ -129,6 +129,7 @@ class DiscoveredPrintersModel(QObject): self._discovered_printer_by_ip_dict = dict() # type: Dict[str, DiscoveredPrinter] self._plugin_for_manual_device = None # type: Optional[OutputDevicePlugin] + self._network_plugin_queue = [] # type: List[OutputDevicePlugin] self._manual_device_address = "" self._manual_device_request_timeout_in_seconds = 5 # timeout for adding a manual device in seconds @@ -153,20 +154,25 @@ class DiscoveredPrintersModel(QObject): all_plugins_dict = self._application.getOutputDeviceManager().getAllOutputDevicePlugins() - can_add_manual_plugins = [item for item in filter( + self._network_plugin_queue = [item for item in filter( lambda plugin_item: plugin_item.canAddManualDevice(address) in priority_order, all_plugins_dict.values())] - if not can_add_manual_plugins: + if not self._network_plugin_queue: Logger.log("d", "Could not find a plugin to accept adding %s manually via address.", address) return - plugin = max(can_add_manual_plugins, key = lambda p: priority_order.index(p.canAddManualDevice(address))) - self._plugin_for_manual_device = plugin - self._plugin_for_manual_device.addManualDevice(address, callback = self._onManualDeviceRequestFinished) - self._manual_device_address = address - self._manual_device_request_timer.start() - self.hasManualDeviceRequestInProgressChanged.emit() + self._attemptToAddManualDevice(address) + + def _attemptToAddManualDevice(self, address: str) -> None: + if self._network_plugin_queue: + self._plugin_for_manual_device = self._network_plugin_queue.pop() + Logger.log("d", "Network plugin %s: attempting to add manual device with address %s.", + self._plugin_for_manual_device.getId(), address) + self._plugin_for_manual_device.addManualDevice(address, callback=self._onManualDeviceRequestFinished) + self._manual_device_address = address + self._manual_device_request_timer.start() + self.hasManualDeviceRequestInProgressChanged.emit() @pyqtSlot() def cancelCurrentManualDeviceRequest(self) -> None: @@ -181,8 +187,11 @@ class DiscoveredPrintersModel(QObject): self.manualDeviceRequestFinished.emit(False) def _onManualRequestTimeout(self) -> None: - Logger.log("w", "Manual printer [%s] request timed out. Cancel the current request.", self._manual_device_address) + address = self._manual_device_address + Logger.log("w", "Manual printer [%s] request timed out. Cancel the current request.", address) self.cancelCurrentManualDeviceRequest() + if self._network_plugin_queue: + self._attemptToAddManualDevice(address) hasManualDeviceRequestInProgressChanged = pyqtSignal() @@ -198,6 +207,8 @@ class DiscoveredPrintersModel(QObject): self._manual_device_address = "" self.hasManualDeviceRequestInProgressChanged.emit() self.manualDeviceRequestFinished.emit(success) + if not success and self._network_plugin_queue: + self._attemptToAddManualDevice(address) @pyqtProperty("QVariantMap", notify = discoveredPrintersChanged) def discoveredPrintersByAddress(self) -> Dict[str, DiscoveredPrinter]: From 252be6352b5ea8f9b3f485d2c96043d4f089639d Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Mon, 18 May 2020 11:42:39 +0200 Subject: [PATCH 080/116] Prevent crash when sentry could not be initialized --- cura_app.py | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/cura_app.py b/cura_app.py index 6c9839e79c..a78e7cabd1 100755 --- a/cura_app.py +++ b/cura_app.py @@ -63,14 +63,17 @@ if with_sentry_sdk: # Errors to be ignored by Sentry ignore_errors = [KeyboardInterrupt, MemoryError] - sentry_sdk.init("https://5034bf0054fb4b889f82896326e79b13@sentry.io/1821564", - before_send = CrashHandler.sentryBeforeSend, - environment = sentry_env, - release = "cura%s" % ApplicationMetadata.CuraVersion, - default_integrations = False, - max_breadcrumbs = 300, - server_name = "cura", - ignore_errors = ignore_errors) + try: + sentry_sdk.init("https://5034bf0054fb4b889f82896326e79b13@sentry.io/1821564", + before_send = CrashHandler.sentryBeforeSend, + environment = sentry_env, + release = "cura%s" % ApplicationMetadata.CuraVersion, + default_integrations = False, + max_breadcrumbs = 300, + server_name = "cura", + ignore_errors = ignore_errors) + except Exception: + with_sentry_sdk = False if not known_args["debug"]: def get_cura_dir_path(): From 8f22e626752130f12de1164e42ed5badf015f3fe Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Mon, 18 May 2020 13:30:13 +0200 Subject: [PATCH 081/116] Fix typing issues CURA-7290 --- plugins/UM3NetworkPrinting/src/Cloud/ToolPathUploader.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/plugins/UM3NetworkPrinting/src/Cloud/ToolPathUploader.py b/plugins/UM3NetworkPrinting/src/Cloud/ToolPathUploader.py index 6317dff347..79178049da 100644 --- a/plugins/UM3NetworkPrinting/src/Cloud/ToolPathUploader.py +++ b/plugins/UM3NetworkPrinting/src/Cloud/ToolPathUploader.py @@ -2,7 +2,7 @@ # !/usr/bin/env python # -*- coding: utf-8 -*- from PyQt5.QtNetwork import QNetworkRequest, QNetworkReply -from typing import Callable, Any, Tuple +from typing import Callable, Any, Tuple, cast, Dict, Optional from UM.Logger import Logger from UM.TaskManagement.HttpRequestManager import HttpRequestManager @@ -78,14 +78,14 @@ class ToolPathUploader: content_range = "bytes {}-{}/{}".format(first_byte, last_byte - 1, len(self._data)) headers = { - "Content-Type": self._print_job.content_type, + "Content-Type": cast(str, self._print_job.content_type), "Content-Range": content_range - } + } # type: Dict[str, str] Logger.log("i", "Uploading %s to %s", content_range, self._print_job.upload_url) self._http.put( - url = self._print_job.upload_url, + url = cast(str, self._print_job.upload_url), headers_dict = headers, data = self._data[first_byte:last_byte], callback = self._finishedCallback, From 3d19e75c820a170a0a234bc7f20d8ede08a2cbd5 Mon Sep 17 00:00:00 2001 From: Nino van Hooff Date: Mon, 18 May 2020 14:44:35 +0200 Subject: [PATCH 082/116] Notify user of proper way to remove cloud printer CURA-7436 --- cura/Machines/Models/GlobalStacksModel.py | 4 ++++ resources/qml/Preferences/MachinesPage.qml | 5 +++++ 2 files changed, 9 insertions(+) diff --git a/cura/Machines/Models/GlobalStacksModel.py b/cura/Machines/Models/GlobalStacksModel.py index 9db4ffe6db..38b92c00c9 100644 --- a/cura/Machines/Models/GlobalStacksModel.py +++ b/cura/Machines/Models/GlobalStacksModel.py @@ -19,6 +19,7 @@ class GlobalStacksModel(ListModel): ConnectionTypeRole = Qt.UserRole + 4 MetaDataRole = Qt.UserRole + 5 DiscoverySourceRole = Qt.UserRole + 6 # For separating local and remote printers in the machine management page + HasCloudConnectionRole = Qt.UserRole + 7 def __init__(self, parent = None) -> None: super().__init__(parent) @@ -57,10 +58,12 @@ class GlobalStacksModel(ListModel): container_stacks = CuraContainerRegistry.getInstance().findContainerStacks(type = "machine") for container_stack in container_stacks: has_remote_connection = False + has_cloud_connection = False for connection_type in container_stack.configuredConnectionTypes: has_remote_connection |= connection_type in [ConnectionType.NetworkConnection.value, ConnectionType.CloudConnection.value] + has_cloud_connection |= connection_type == ConnectionType.CloudConnection.value if parseBool(container_stack.getMetaDataEntry("hidden", False)): continue @@ -71,6 +74,7 @@ class GlobalStacksModel(ListModel): items.append({"name": container_stack.getMetaDataEntry("group_name", container_stack.getName()), "id": container_stack.getId(), "hasRemoteConnection": has_remote_connection, + "hasCloudConnection": has_cloud_connection, "metadata": container_stack.getMetaData().copy(), "discoverySource": section_name}) items.sort(key = lambda i: (not i["hasRemoteConnection"], i["name"])) diff --git a/resources/qml/Preferences/MachinesPage.qml b/resources/qml/Preferences/MachinesPage.qml index a3a8ec0e29..afd9ba264e 100644 --- a/resources/qml/Preferences/MachinesPage.qml +++ b/resources/qml/Preferences/MachinesPage.qml @@ -136,6 +136,11 @@ UM.ManagementPage { id: confirmDialog object: base.currentItem && base.currentItem.name ? base.currentItem.name : "" + text: base.currentItem && base.currentItem.hasCloudConnection? + catalog.i18nc("@label (%1 is object name)", "%1 will be removed but will be added again in the next sync. To remove the printer permanently, visit Ultimaker Digital Factory").arg(base.currentItem.name) + : + catalog.i18nc("@label (%1 is object name)", "Are you sure you wish to remove %1? This cannot be undone!").arg(base.currentItem.name) + ; onYes: { Cura.MachineManager.removeMachine(base.currentItem.id) From c61f5a162eb052994c009838db3495ed6c92d039 Mon Sep 17 00:00:00 2001 From: Nino van Hooff Date: Mon, 18 May 2020 14:48:41 +0200 Subject: [PATCH 083/116] Update remote and local printer labels in Machines page CURA-7436 --- cura/Machines/Models/GlobalStacksModel.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cura/Machines/Models/GlobalStacksModel.py b/cura/Machines/Models/GlobalStacksModel.py index 38b92c00c9..bfc035be5d 100644 --- a/cura/Machines/Models/GlobalStacksModel.py +++ b/cura/Machines/Models/GlobalStacksModel.py @@ -68,7 +68,7 @@ class GlobalStacksModel(ListModel): if parseBool(container_stack.getMetaDataEntry("hidden", False)): continue - section_name = "Network enabled printers" if has_remote_connection else "Local printers" + section_name = "Connected printers" if has_remote_connection else "Preset printers" section_name = self._catalog.i18nc("@info:title", section_name) items.append({"name": container_stack.getMetaDataEntry("group_name", container_stack.getName()), From 252b993169fce8565edc04cac09633644dea33a6 Mon Sep 17 00:00:00 2001 From: Nino van Hooff Date: Mon, 18 May 2020 16:22:55 +0200 Subject: [PATCH 084/116] Refactor removal warning message to CloudOutputDeviceManager CURA-7436 --- cura/Machines/Models/GlobalStacksModel.py | 20 +++++++++++++------ .../src/Cloud/CloudOutputDeviceManager.py | 6 ++++++ resources/qml/Preferences/MachinesPage.qml | 6 +----- 3 files changed, 21 insertions(+), 11 deletions(-) diff --git a/cura/Machines/Models/GlobalStacksModel.py b/cura/Machines/Models/GlobalStacksModel.py index bfc035be5d..f5007e7ce1 100644 --- a/cura/Machines/Models/GlobalStacksModel.py +++ b/cura/Machines/Models/GlobalStacksModel.py @@ -19,9 +19,9 @@ class GlobalStacksModel(ListModel): ConnectionTypeRole = Qt.UserRole + 4 MetaDataRole = Qt.UserRole + 5 DiscoverySourceRole = Qt.UserRole + 6 # For separating local and remote printers in the machine management page - HasCloudConnectionRole = Qt.UserRole + 7 + RemovalWarningRole = Qt.UserRole + 7 - def __init__(self, parent = None) -> None: + def __init__(self, parent=None) -> None: super().__init__(parent) self._catalog = i18nCatalog("cura") @@ -55,7 +55,7 @@ class GlobalStacksModel(ListModel): def _update(self) -> None: items = [] - container_stacks = CuraContainerRegistry.getInstance().findContainerStacks(type = "machine") + container_stacks = CuraContainerRegistry.getInstance().findContainerStacks(type="machine") for container_stack in container_stacks: has_remote_connection = False has_cloud_connection = False @@ -68,14 +68,22 @@ class GlobalStacksModel(ListModel): if parseBool(container_stack.getMetaDataEntry("hidden", False)): continue + device_name = container_stack.getMetaDataEntry("group_name", container_stack.getName()) section_name = "Connected printers" if has_remote_connection else "Preset printers" section_name = self._catalog.i18nc("@info:title", section_name) - items.append({"name": container_stack.getMetaDataEntry("group_name", container_stack.getName()), + default_removal_warning = self._catalog.i18nc( + "@label ({} is object name)", + "Are you sure you wish to remove {}? This cannot be undone!", device_name + ) + removal_warning = container_stack.getMetaDataEntry("removal_warning", default_removal_warning) + + items.append({"name": device_name, "id": container_stack.getId(), "hasRemoteConnection": has_remote_connection, "hasCloudConnection": has_cloud_connection, "metadata": container_stack.getMetaData().copy(), - "discoverySource": section_name}) - items.sort(key = lambda i: (not i["hasRemoteConnection"], i["name"])) + "discoverySource": section_name, + "removalWarning": removal_warning}) + items.sort(key=lambda i: (not i["hasRemoteConnection"], i["name"])) self.setItems(items) diff --git a/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDeviceManager.py b/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDeviceManager.py index f233e59fe5..71c1994bc1 100644 --- a/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDeviceManager.py +++ b/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDeviceManager.py @@ -265,6 +265,12 @@ class CloudOutputDeviceManager: machine.setName(device.name) machine.setMetaDataEntry(self.META_CLUSTER_ID, device.key) machine.setMetaDataEntry("group_name", device.name) + machine.setMetaDataEntry("removal_warning", self.I18N_CATALOG.i18nc( + "@label ({} is printer name)", + "{} will be removed but will be added again in the next sync. To remove the printer permanently, " + "visit Ultimaker Digital Factory", + device.name + )) machine.addConfiguredConnectionType(device.connectionType.value) def _connectToOutputDevice(self, device: CloudOutputDevice, machine: GlobalStack) -> None: diff --git a/resources/qml/Preferences/MachinesPage.qml b/resources/qml/Preferences/MachinesPage.qml index afd9ba264e..5341af65db 100644 --- a/resources/qml/Preferences/MachinesPage.qml +++ b/resources/qml/Preferences/MachinesPage.qml @@ -136,11 +136,7 @@ UM.ManagementPage { id: confirmDialog object: base.currentItem && base.currentItem.name ? base.currentItem.name : "" - text: base.currentItem && base.currentItem.hasCloudConnection? - catalog.i18nc("@label (%1 is object name)", "%1 will be removed but will be added again in the next sync. To remove the printer permanently, visit Ultimaker Digital Factory").arg(base.currentItem.name) - : - catalog.i18nc("@label (%1 is object name)", "Are you sure you wish to remove %1? This cannot be undone!").arg(base.currentItem.name) - ; + text: base.currentItem ? base.currentItem.removalWarning : ""; onYes: { Cura.MachineManager.removeMachine(base.currentItem.id) From 98fed9572517ed1f871f6980579a49a1018af637 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Mon, 18 May 2020 18:19:57 +0200 Subject: [PATCH 085/116] Adjust the default values for ironing_inset so that the slice result remains the same The slicer has been adjusted to give this setting a more logical function: It should be an inset of the outer edge of ironing as it appears in layer view where the lines are made thinner according to their flow. As a result all of the slices with ironing have changed. This adjusts the setting value so that the actual slice output will not change, just the appearance of the setting. Contributes to issue CURA-7318. --- .../VersionUpgrade462to47/VersionUpgrade462to47.py | 9 +++++++++ resources/definitions/fdmprinter.def.json | 2 +- resources/definitions/hms434.def.json | 2 +- resources/definitions/skriware_2.def.json | 2 +- 4 files changed, 12 insertions(+), 3 deletions(-) diff --git a/plugins/VersionUpgrade/VersionUpgrade462to47/VersionUpgrade462to47.py b/plugins/VersionUpgrade/VersionUpgrade462to47/VersionUpgrade462to47.py index c340fd0c72..9a70963e6b 100644 --- a/plugins/VersionUpgrade/VersionUpgrade462to47/VersionUpgrade462to47.py +++ b/plugins/VersionUpgrade/VersionUpgrade462to47/VersionUpgrade462to47.py @@ -58,6 +58,15 @@ class VersionUpgrade462to47(VersionUpgrade): maximum_deviation = "=(" + maximum_deviation + ") / 2" parser["values"]["meshfix_maximum_deviation"] = maximum_deviation + # Ironing inset is now based on the flow-compensated line width to make the setting have a more logical UX. + # Adjust so that the actual print result remains the same. + if "ironing_inset" in parser["values"]: + ironing_inset = parser["values"]["ironing_inset"] + if ironing_inset.startswith("="): + ironing_inset = ironing_inset[1:] + ironing_inset = "=(" + ironing_inset + ") + skin_line_width * (1.0 - ironing_flow) / 2" + parser["values"]["ironing_inset"] = ironing_inset + result = io.StringIO() parser.write(result) return [filename], [result.getvalue()] diff --git a/resources/definitions/fdmprinter.def.json b/resources/definitions/fdmprinter.def.json index 9da1829d9c..41031dbe2c 100644 --- a/resources/definitions/fdmprinter.def.json +++ b/resources/definitions/fdmprinter.def.json @@ -1575,7 +1575,7 @@ "type": "float", "unit": "mm", "default_value": 0.35, - "value": "wall_line_width_0 / 2", + "value": "wall_line_width_0 / 2 + skin_line_width * (1.0 - ironing_flow) / 2", "minimum_value_warning": "0", "maximum_value_warning": "wall_line_width_0", "enabled": "ironing_enabled", diff --git a/resources/definitions/hms434.def.json b/resources/definitions/hms434.def.json index a3d8edc57d..07ea24b2c2 100644 --- a/resources/definitions/hms434.def.json +++ b/resources/definitions/hms434.def.json @@ -104,7 +104,7 @@ "skin_outline_count": {"value": "0"}, "ironing_line_spacing": {"value": "line_width / 4 * 3"}, "ironing_flow": {"value": "0"}, - "ironing_inset": {"value": "ironing_line_spacing"}, + "ironing_inset": {"value": "ironing_line_spacing + skin_line_width * (1.0 - ironing_flow) / 2"}, "speed_ironing": {"value": "150"}, "infill_sparse_density": {"value": 30}, diff --git a/resources/definitions/skriware_2.def.json b/resources/definitions/skriware_2.def.json index c4449129b7..3b127b9a8f 100644 --- a/resources/definitions/skriware_2.def.json +++ b/resources/definitions/skriware_2.def.json @@ -345,7 +345,7 @@ "value": "0.8" }, "ironing_inset": { - "value": "0.2" + "value": "0.2 + skin_line_width * (1.0 - ironing_flow) / 2" }, "jerk_travel": { "value": "10" From 4f074d0609715a63dfa617d2ffa5e0fc498d0466 Mon Sep 17 00:00:00 2001 From: Nino van Hooff Date: Tue, 19 May 2020 11:53:11 +0200 Subject: [PATCH 086/116] Add 4.6.2 changelog stub --- resources/texts/change_log.txt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/resources/texts/change_log.txt b/resources/texts/change_log.txt index 4eef21b742..8ce125d932 100644 --- a/resources/texts/change_log.txt +++ b/resources/texts/change_log.txt @@ -1,3 +1,7 @@ +[4.6.2] + +TODO + [4.6.1] Patch release to fix some bugs that emerged with 4.6.0. From 050878bbfe56a7323d747279bdb677903ef456d5 Mon Sep 17 00:00:00 2001 From: Nino van Hooff Date: Tue, 19 May 2020 14:14:10 +0200 Subject: [PATCH 087/116] Update cura/API/Account.py Co-authored-by: Jaime van Kessel --- cura/API/Account.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cura/API/Account.py b/cura/API/Account.py index 4df5765f58..e0d2bb6d7a 100644 --- a/cura/API/Account.py +++ b/cura/API/Account.py @@ -231,7 +231,7 @@ class Account(QObject): @pyqtSlot() @pyqtSlot(bool) - def sync(self, user_initiated=False): + def sync(self, user_initiated: bool = False) -> None: if user_initiated: self._setManualSyncEnabled(False) From 23c039a8733c1915b93dcaf431de771611a74733 Mon Sep 17 00:00:00 2001 From: Nino van Hooff Date: Tue, 19 May 2020 14:14:39 +0200 Subject: [PATCH 088/116] Add type hint in cura/API/Account.py Co-authored-by: Jaime van Kessel --- cura/API/Account.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cura/API/Account.py b/cura/API/Account.py index e0d2bb6d7a..49cec55eb3 100644 --- a/cura/API/Account.py +++ b/cura/API/Account.py @@ -238,7 +238,7 @@ class Account(QObject): self._sync() @pyqtSlot() - def popupClosed(self): + def popupClosed(self) -> None: self._setManualSyncEnabled(True) @pyqtSlot() From fa34c625ae31b02a07bf31199c62ce7439b28581 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Mon, 18 May 2020 11:42:39 +0200 Subject: [PATCH 089/116] Prevent crash when sentry could not be initialized --- cura_app.py | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/cura_app.py b/cura_app.py index 6c9839e79c..a78e7cabd1 100755 --- a/cura_app.py +++ b/cura_app.py @@ -63,14 +63,17 @@ if with_sentry_sdk: # Errors to be ignored by Sentry ignore_errors = [KeyboardInterrupt, MemoryError] - sentry_sdk.init("https://5034bf0054fb4b889f82896326e79b13@sentry.io/1821564", - before_send = CrashHandler.sentryBeforeSend, - environment = sentry_env, - release = "cura%s" % ApplicationMetadata.CuraVersion, - default_integrations = False, - max_breadcrumbs = 300, - server_name = "cura", - ignore_errors = ignore_errors) + try: + sentry_sdk.init("https://5034bf0054fb4b889f82896326e79b13@sentry.io/1821564", + before_send = CrashHandler.sentryBeforeSend, + environment = sentry_env, + release = "cura%s" % ApplicationMetadata.CuraVersion, + default_integrations = False, + max_breadcrumbs = 300, + server_name = "cura", + ignore_errors = ignore_errors) + except Exception: + with_sentry_sdk = False if not known_args["debug"]: def get_cura_dir_path(): From e7af27ff808167f37eeced3d1026d5619f283f9d Mon Sep 17 00:00:00 2001 From: Nino van Hooff Date: Tue, 19 May 2020 14:14:59 +0200 Subject: [PATCH 090/116] Add type hint to plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDeviceManager.py Co-authored-by: Jaime van Kessel --- .../UM3NetworkPrinting/src/Cloud/CloudOutputDeviceManager.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDeviceManager.py b/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDeviceManager.py index 25ee4cf5e5..7edff4ab67 100644 --- a/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDeviceManager.py +++ b/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDeviceManager.py @@ -119,7 +119,7 @@ class CloudOutputDeviceManager: self._syncing = False self._account.setSyncState(self.SYNC_SERVICE_NAME, SyncState.SUCCESS) - def _onGetRemoteClusterFailed(self, reply: QNetworkReply, error: QNetworkReply.NetworkError): + def _onGetRemoteClusterFailed(self, reply: QNetworkReply, error: QNetworkReply.NetworkError) -> None: self._syncing = False self._account.setSyncState(self.SYNC_SERVICE_NAME, SyncState.ERROR) @@ -278,4 +278,4 @@ class CloudOutputDeviceManager: output_device_manager = CuraApplication.getInstance().getOutputDeviceManager() if device.key not in output_device_manager.getOutputDeviceIds(): - output_device_manager.addOutputDevice(device) \ No newline at end of file + output_device_manager.addOutputDevice(device) From 7388829fc10122625fbaf2fee4533b190a721f07 Mon Sep 17 00:00:00 2001 From: Nino van Hooff Date: Tue, 19 May 2020 14:32:02 +0200 Subject: [PATCH 091/116] Change account sync date format back to dd/mm/YYYY For consistency with the rest of the application --- cura/API/Account.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cura/API/Account.py b/cura/API/Account.py index 49cec55eb3..00afe9e528 100644 --- a/cura/API/Account.py +++ b/cura/API/Account.py @@ -126,7 +126,7 @@ class Account(QObject): self.syncStateChanged.emit(self._sync_state) if self._sync_state == SyncState.SUCCESS: - self._last_sync_str = datetime.now().strftime("%m/%d/%Y %H:%M") + self._last_sync_str = datetime.now().strftime("%d/%m/%Y %H:%M") self.lastSyncDateTimeChanged.emit() if self._sync_state != SyncState.SYNCING: From 503d5d2a35dbbee496d6864dbd8dbc264164bb20 Mon Sep 17 00:00:00 2001 From: Kostas Karmas Date: Wed, 20 May 2020 13:56:24 +0200 Subject: [PATCH 092/116] Correctly upgrade the ironing_inset based on the ironing_pattern used Previously, the ironing_inset was changed in the profiles to reflect the changes made in the CuraEngine. This inset though was not taking into account the ironing_pattern (in the CuraEngine, the inset is compensated differently depending on the pattern). This commit fixes that in the version upgrader and the printer definitions in order to maintain the same behavior for the old profiles. CURA-7318 --- .../VersionUpgrade462to47/VersionUpgrade462to47.py | 6 +++++- resources/definitions/fdmprinter.def.json | 2 +- resources/definitions/hms434.def.json | 2 +- resources/definitions/skriware_2.def.json | 2 +- 4 files changed, 8 insertions(+), 4 deletions(-) diff --git a/plugins/VersionUpgrade/VersionUpgrade462to47/VersionUpgrade462to47.py b/plugins/VersionUpgrade/VersionUpgrade462to47/VersionUpgrade462to47.py index 7b328e10e6..70de42ab3b 100644 --- a/plugins/VersionUpgrade/VersionUpgrade462to47/VersionUpgrade462to47.py +++ b/plugins/VersionUpgrade/VersionUpgrade462to47/VersionUpgrade462to47.py @@ -64,7 +64,11 @@ class VersionUpgrade462to47(VersionUpgrade): ironing_inset = parser["values"]["ironing_inset"] if ironing_inset.startswith("="): ironing_inset = ironing_inset[1:] - ironing_inset = "=(" + ironing_inset + ") + skin_line_width * (1.0 - ironing_flow) / 2" + if "ironing_pattern" in parser["values"] and parser["values"]["ironing_pattern"] == "concentric": + correction = " + ironing_line_spacing - skin_line_width * (1.0 + ironing_flow / 100) / 2" + else: # If ironing_pattern doesn't exist, it means the default (zigzag) is selected + correction = " + skin_line_width * (1.0 - ironing_flow / 100) / 2" + ironing_inset = "=(" + ironing_inset + ")" + correction parser["values"]["ironing_inset"] = ironing_inset result = io.StringIO() diff --git a/resources/definitions/fdmprinter.def.json b/resources/definitions/fdmprinter.def.json index 41031dbe2c..cfc3c6dc31 100644 --- a/resources/definitions/fdmprinter.def.json +++ b/resources/definitions/fdmprinter.def.json @@ -1575,7 +1575,7 @@ "type": "float", "unit": "mm", "default_value": 0.35, - "value": "wall_line_width_0 / 2 + skin_line_width * (1.0 - ironing_flow) / 2", + "value": "wall_line_width_0 / 2 + (ironing_line_spacing - skin_line_width * (1.0 + ironing_flow / 100) / 2 if ironing_pattern == 'concentric' else skin_line_width * (1.0 - ironing_flow / 100) / 2)", "minimum_value_warning": "0", "maximum_value_warning": "wall_line_width_0", "enabled": "ironing_enabled", diff --git a/resources/definitions/hms434.def.json b/resources/definitions/hms434.def.json index 07ea24b2c2..cd20906ccc 100644 --- a/resources/definitions/hms434.def.json +++ b/resources/definitions/hms434.def.json @@ -104,7 +104,7 @@ "skin_outline_count": {"value": "0"}, "ironing_line_spacing": {"value": "line_width / 4 * 3"}, "ironing_flow": {"value": "0"}, - "ironing_inset": {"value": "ironing_line_spacing + skin_line_width * (1.0 - ironing_flow) / 2"}, + "ironing_inset": {"value": "ironing_line_spacing + (ironing_line_spacing - skin_line_width * (1.0 + ironing_flow / 100) / 2 if ironing_pattern == 'concentric' else skin_line_width * (1.0 - ironing_flow / 100) / 2)"}, "speed_ironing": {"value": "150"}, "infill_sparse_density": {"value": 30}, diff --git a/resources/definitions/skriware_2.def.json b/resources/definitions/skriware_2.def.json index 3b127b9a8f..ab5532db81 100644 --- a/resources/definitions/skriware_2.def.json +++ b/resources/definitions/skriware_2.def.json @@ -345,7 +345,7 @@ "value": "0.8" }, "ironing_inset": { - "value": "0.2 + skin_line_width * (1.0 - ironing_flow) / 2" + "value": "0.2 + (ironing_line_spacing - skin_line_width * (1.0 + ironing_flow / 100) / 2 if ironing_pattern == 'concentric' else skin_line_width * (1.0 - ironing_flow / 100) / 2)" }, "jerk_travel": { "value": "10" From 4e930b4d5262252593f011f9fbef5fc6afe8bc89 Mon Sep 17 00:00:00 2001 From: Kostas Karmas Date: Wed, 20 May 2020 15:08:05 +0200 Subject: [PATCH 093/116] Remove unused "has_cloud_connection" variable CURA-7436 --- cura/Machines/Models/GlobalStacksModel.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/cura/Machines/Models/GlobalStacksModel.py b/cura/Machines/Models/GlobalStacksModel.py index f5007e7ce1..c3ef7ab519 100644 --- a/cura/Machines/Models/GlobalStacksModel.py +++ b/cura/Machines/Models/GlobalStacksModel.py @@ -58,12 +58,10 @@ class GlobalStacksModel(ListModel): container_stacks = CuraContainerRegistry.getInstance().findContainerStacks(type="machine") for container_stack in container_stacks: has_remote_connection = False - has_cloud_connection = False for connection_type in container_stack.configuredConnectionTypes: has_remote_connection |= connection_type in [ConnectionType.NetworkConnection.value, ConnectionType.CloudConnection.value] - has_cloud_connection |= connection_type == ConnectionType.CloudConnection.value if parseBool(container_stack.getMetaDataEntry("hidden", False)): continue @@ -81,7 +79,6 @@ class GlobalStacksModel(ListModel): items.append({"name": device_name, "id": container_stack.getId(), "hasRemoteConnection": has_remote_connection, - "hasCloudConnection": has_cloud_connection, "metadata": container_stack.getMetaData().copy(), "discoverySource": section_name, "removalWarning": removal_warning}) From f677be14c2bb8c746b777ecf6699e2534dd15141 Mon Sep 17 00:00:00 2001 From: Kostas Karmas Date: Wed, 20 May 2020 15:10:04 +0200 Subject: [PATCH 094/116] Fix spacing CURA-7436 --- cura/Machines/Models/GlobalStacksModel.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cura/Machines/Models/GlobalStacksModel.py b/cura/Machines/Models/GlobalStacksModel.py index c3ef7ab519..201fbacd30 100644 --- a/cura/Machines/Models/GlobalStacksModel.py +++ b/cura/Machines/Models/GlobalStacksModel.py @@ -21,7 +21,7 @@ class GlobalStacksModel(ListModel): DiscoverySourceRole = Qt.UserRole + 6 # For separating local and remote printers in the machine management page RemovalWarningRole = Qt.UserRole + 7 - def __init__(self, parent=None) -> None: + def __init__(self, parent = None) -> None: super().__init__(parent) self._catalog = i18nCatalog("cura") @@ -55,7 +55,7 @@ class GlobalStacksModel(ListModel): def _update(self) -> None: items = [] - container_stacks = CuraContainerRegistry.getInstance().findContainerStacks(type="machine") + container_stacks = CuraContainerRegistry.getInstance().findContainerStacks(type = "machine") for container_stack in container_stacks: has_remote_connection = False From b5e971f9ecc2264f7f5a9d1f0261fb731af9cfc6 Mon Sep 17 00:00:00 2001 From: Kostas Karmas Date: Wed, 20 May 2020 15:21:57 +0200 Subject: [PATCH 095/116] Update remove cloud printer pop-up message CURA-7436 --- .../src/Cloud/CloudOutputDeviceManager.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDeviceManager.py b/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDeviceManager.py index 71c1994bc1..3322bbd639 100644 --- a/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDeviceManager.py +++ b/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDeviceManager.py @@ -267,9 +267,10 @@ class CloudOutputDeviceManager: machine.setMetaDataEntry("group_name", device.name) machine.setMetaDataEntry("removal_warning", self.I18N_CATALOG.i18nc( "@label ({} is printer name)", - "{} will be removed but will be added again in the next sync. To remove the printer permanently, " - "visit Ultimaker Digital Factory", - device.name + "{} will be removed until the next account sync.
To remove {} permanently, " + "visit Ultimaker Digital Factory. " + "

Are you sure you want to remove {} temporarily?", + device.name, device.name, device.name )) machine.addConfiguredConnectionType(device.connectionType.value) From b135da866ac55db821b40ab4684765514e0f80b8 Mon Sep 17 00:00:00 2001 From: Nino van Hooff Date: Wed, 20 May 2020 16:03:24 +0200 Subject: [PATCH 096/116] Add Cura.API.connectionStatus CURA-7437 --- cura/API/ConnectionStatus.py | 64 ++++++++++++++++++++++++++++++++++++ cura/API/__init__.py | 7 ++++ 2 files changed, 71 insertions(+) create mode 100644 cura/API/ConnectionStatus.py diff --git a/cura/API/ConnectionStatus.py b/cura/API/ConnectionStatus.py new file mode 100644 index 0000000000..0dbe6a4293 --- /dev/null +++ b/cura/API/ConnectionStatus.py @@ -0,0 +1,64 @@ +from typing import Optional + +from PyQt5.QtCore import QObject, pyqtSignal, QTimer, pyqtProperty +from PyQt5.QtNetwork import QNetworkReply + +from UM.TaskManagement.HttpRequestManager import HttpRequestManager +from cura.UltimakerCloud import UltimakerCloudAuthentication + + +class ConnectionStatus(QObject): + """Status info for some web services""" + + UPDATE_INTERVAL = 5.0 # seconds + ULTIMAKER_CLOUD_STATUS_URL = UltimakerCloudAuthentication.CuraCloudAPIRoot + "/connect/v1/" + + __instance = None # type: Optional[ConnectionStatus] + + internetReachableChanged = pyqtSignal() + umCloudReachableChanged = pyqtSignal() + + @classmethod + def getInstance(cls, *args, **kwargs) -> "ConnectionStatus": + if cls.__instance is None: + cls.__instance = cls(*args, **kwargs) + return cls.__instance + + def __init__(self, parent: Optional["QObject"] = None): + super().__init__(parent) + + self._http = HttpRequestManager.getInstance() + self._statuses = { + self.ULTIMAKER_CLOUD_STATUS_URL: True, + "http://example.com": True + } + + # Create a timer for automatic updates + self._update_timer = QTimer() + self._update_timer.setInterval(int(self.UPDATE_INTERVAL * 1000)) + # The timer is restarted automatically + self._update_timer.setSingleShot(False) + self._update_timer.timeout.connect(self._update) + self._update_timer.start() + + @pyqtProperty(bool, notify=internetReachableChanged) + def isInternetReachable(self) -> bool: + # Is any of the test urls reachable? + return any(self._statuses.values()) + + def _update(self): + for url in self._statuses.keys(): + self._http.get( + url = url, + callback = self._statusCallback, + error_callback = self._statusCallback, + timeout = 5 + ) + + def _statusCallback(self, reply: QNetworkReply, error: QNetworkReply.NetworkError = None): + url = reply.request().url().toString() + prev_statuses = self._statuses.copy() + self._statuses[url] = HttpRequestManager.replyIndicatesSuccess(reply, error) + + if any(self._statuses.values()) != any(prev_statuses.values()): + self.internetReachableChanged.emit() diff --git a/cura/API/__init__.py b/cura/API/__init__.py index 26c9a4c829..bcd4032f97 100644 --- a/cura/API/__init__.py +++ b/cura/API/__init__.py @@ -5,6 +5,7 @@ from typing import Optional, TYPE_CHECKING from PyQt5.QtCore import QObject, pyqtProperty from cura.API.Backups import Backups +from cura.API.ConnectionStatus import ConnectionStatus from cura.API.Interface import Interface from cura.API.Account import Account @@ -45,6 +46,8 @@ class CuraAPI(QObject): # Backups API self._backups = Backups(self._application) + self._connectionStatus = ConnectionStatus() + # Interface API self._interface = Interface(self._application) @@ -55,6 +58,10 @@ class CuraAPI(QObject): def account(self) -> "Account": return self._account + @pyqtProperty(QObject, constant = True) + def connectionStatus(self) -> "ConnectionStatus": + return self._connectionStatus + @property def backups(self) -> "Backups": return self._backups From eef347ed6c424763d7f712a727520ef07d83dd61 Mon Sep 17 00:00:00 2001 From: Nino van Hooff Date: Wed, 20 May 2020 17:20:40 +0200 Subject: [PATCH 097/116] Add an cloud unavailable icon to the active printer icon CURA-7437 --- cura/Settings/MachineManager.py | 4 ++++ .../src/Cloud/CloudOutputDeviceManager.py | 4 ++-- .../Network/LocalClusterOutputDeviceManager.py | 2 +- .../qml/PrinterSelector/MachineSelector.qml | 18 ++++++++++++------ .../icons/printer_cloud_not_available.svg | 18 ++++++++++++++++++ resources/themes/cura-light/theme.json | 4 +++- 6 files changed, 40 insertions(+), 10 deletions(-) create mode 100644 resources/themes/cura-light/icons/printer_cloud_not_available.svg diff --git a/cura/Settings/MachineManager.py b/cura/Settings/MachineManager.py index 8f1a8bb7f8..effdb3866a 100755 --- a/cura/Settings/MachineManager.py +++ b/cura/Settings/MachineManager.py @@ -490,6 +490,10 @@ class MachineManager(QObject): def activeMachineHasCloudConnection(self) -> bool: # A cloud connection is only available if any output device actually is a cloud connected device. return any(d.connectionType == ConnectionType.CloudConnection for d in self._printer_output_devices) + + @pyqtProperty(bool, notify = printerConnectedStatusChanged) + def activeMachineHasCloudRegistration(self) -> bool: + return self.activeMachine is not None and ConnectionType.CloudConnection in self.activeMachine.configuredConnectionTypes @pyqtProperty(bool, notify = printerConnectedStatusChanged) def activeMachineIsUsingCloudConnection(self) -> bool: diff --git a/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDeviceManager.py b/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDeviceManager.py index f233e59fe5..5f564bc6ad 100644 --- a/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDeviceManager.py +++ b/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDeviceManager.py @@ -106,8 +106,8 @@ class CloudOutputDeviceManager: self._onDevicesDiscovered(new_clusters) removed_device_keys = set(self._remote_clusters.keys()) - set(online_clusters.keys()) - for device_id in removed_device_keys: - self._onDiscoveredDeviceRemoved(device_id) + # for device_id in removed_device_keys: + # self._onDiscoveredDeviceRemoved(device_id) if new_clusters or removed_device_keys: self.discoveredDevicesChanged.emit() diff --git a/plugins/UM3NetworkPrinting/src/Network/LocalClusterOutputDeviceManager.py b/plugins/UM3NetworkPrinting/src/Network/LocalClusterOutputDeviceManager.py index 273c64ef4d..3410898269 100644 --- a/plugins/UM3NetworkPrinting/src/Network/LocalClusterOutputDeviceManager.py +++ b/plugins/UM3NetworkPrinting/src/Network/LocalClusterOutputDeviceManager.py @@ -265,7 +265,7 @@ class LocalClusterOutputDeviceManager: ## Nudge the user to start using Ultimaker Cloud. @staticmethod def _showCloudFlowMessage(device: LocalClusterOutputDevice) -> None: - if CuraApplication.getInstance().getMachineManager().activeMachineIsUsingCloudConnection: + if CuraApplication.getInstance().getMachineManager().activeMachineHasCloudRegistration: # This printer is already cloud connected, so we do not bother the user anymore. return if not CuraApplication.getInstance().getCuraAPI().account.isLoggedIn: diff --git a/resources/qml/PrinterSelector/MachineSelector.qml b/resources/qml/PrinterSelector/MachineSelector.qml index 2a101e4ae3..4cbae378f9 100644 --- a/resources/qml/PrinterSelector/MachineSelector.qml +++ b/resources/qml/PrinterSelector/MachineSelector.qml @@ -5,14 +5,15 @@ import QtQuick 2.7 import QtQuick.Controls 2.3 import UM 1.2 as UM -import Cura 1.0 as Cura +import Cura 1.1 as Cura Cura.ExpandablePopup { id: machineSelector property bool isNetworkPrinter: Cura.MachineManager.activeMachineHasNetworkConnection - property bool isCloudPrinter: Cura.MachineManager.activeMachineHasCloudConnection + property bool isConnectedCloudPrinter: Cura.MachineManager.activeMachineHasCloudConnection + property bool isCloudRegistered: Cura.MachineManager.activeMachineHasCloudRegistration property bool isGroup: Cura.MachineManager.activeMachineIsGroup contentPadding: UM.Theme.getSize("default_lining").width @@ -44,7 +45,7 @@ Cura.ExpandablePopup { return UM.Theme.getIcon("printer_group") } - else if (isNetworkPrinter || isCloudPrinter) + else if (isNetworkPrinter || isCloudRegistered) { return UM.Theme.getIcon("printer_single") } @@ -72,10 +73,14 @@ Cura.ExpandablePopup { return UM.Theme.getIcon("printer_connected") } - else if (isCloudPrinter) + else if (isConnectedCloudPrinter) { return UM.Theme.getIcon("printer_cloud_connected") } + else if (isCloudRegistered) + { + return UM.Theme.getIcon("printer_cloud_not_available") + } else { return "" @@ -85,8 +90,9 @@ Cura.ExpandablePopup width: UM.Theme.getSize("printer_status_icon").width height: UM.Theme.getSize("printer_status_icon").height - color: UM.Theme.getColor("primary") - visible: isNetworkPrinter || isCloudPrinter + color: source == UM.Theme.getIcon("printer_cloud_not_available") ? UM.Theme.getColor("cloud_unavailable") : UM.Theme.getColor("primary") + + visible: isNetworkPrinter || isCloudRegistered // Make a themable circle in the background so we can change it in other themes Rectangle diff --git a/resources/themes/cura-light/icons/printer_cloud_not_available.svg b/resources/themes/cura-light/icons/printer_cloud_not_available.svg new file mode 100644 index 0000000000..248df27338 --- /dev/null +++ b/resources/themes/cura-light/icons/printer_cloud_not_available.svg @@ -0,0 +1,18 @@ + + + + Artboard Copy 4 + Created with Sketch. + + + + + + + + + + + + + \ No newline at end of file diff --git a/resources/themes/cura-light/theme.json b/resources/themes/cura-light/theme.json index b870603bd9..0bc09701b2 100644 --- a/resources/themes/cura-light/theme.json +++ b/resources/themes/cura-light/theme.json @@ -438,7 +438,9 @@ "monitor_shadow": [200, 200, 200, 255], "monitor_carousel_dot": [216, 216, 216, 255], - "monitor_carousel_dot_current": [119, 119, 119, 255] + "monitor_carousel_dot_current": [119, 119, 119, 255], + + "cloud_unavailable": [153, 153, 153, 255] }, "sizes": { From fed5598eb702fae5a2cf8f8f412eafd4510f9292 Mon Sep 17 00:00:00 2001 From: Jelle Spijker Date: Wed, 22 Apr 2020 15:18:48 +0200 Subject: [PATCH 098/116] Removed logobot image from Enterprise marketplace pop-up screen Updated the qml WelcomPage to no longer show the logobot and removed the logobot.svg from the resources since it is no longer used. --- plugins/Toolbox/resources/images/logobot.svg | 161 ------------------ .../resources/qml/pages/WelcomePage.qml | 9 - 2 files changed, 170 deletions(-) delete mode 100644 plugins/Toolbox/resources/images/logobot.svg diff --git a/plugins/Toolbox/resources/images/logobot.svg b/plugins/Toolbox/resources/images/logobot.svg deleted file mode 100644 index 8234f66887..0000000000 --- a/plugins/Toolbox/resources/images/logobot.svg +++ /dev/null @@ -1,161 +0,0 @@ - - - - -logo -Created with Sketch. - - - - - - - - - - - - diff --git a/plugins/Toolbox/resources/qml/pages/WelcomePage.qml b/plugins/Toolbox/resources/qml/pages/WelcomePage.qml index cbfdf8f402..d8adda0846 100644 --- a/plugins/Toolbox/resources/qml/pages/WelcomePage.qml +++ b/plugins/Toolbox/resources/qml/pages/WelcomePage.qml @@ -16,15 +16,6 @@ Column height: childrenRect.height anchors.centerIn: parent - Image - { - id: profileImage - fillMode: Image.PreserveAspectFit - source: "../../images/logobot.svg" - anchors.horizontalCenter: parent.horizontalCenter - width: Math.round(parent.width / 4) - } - Label { id: welcomeTextLabel From 6a334dd907eeeaf657db006a07d71618d800987f Mon Sep 17 00:00:00 2001 From: Jelle Spijker Date: Wed, 22 Apr 2020 15:20:39 +0200 Subject: [PATCH 099/116] Revised text from Enterprise marketplace pop-up screen Updated the qml WelcomPage with the revised text: "Please sign in to get verified plugins and materials for Ultimaker Cura Enterprise" --- plugins/Toolbox/resources/qml/pages/WelcomePage.qml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/Toolbox/resources/qml/pages/WelcomePage.qml b/plugins/Toolbox/resources/qml/pages/WelcomePage.qml index d8adda0846..04110cbc0f 100644 --- a/plugins/Toolbox/resources/qml/pages/WelcomePage.qml +++ b/plugins/Toolbox/resources/qml/pages/WelcomePage.qml @@ -19,7 +19,7 @@ Column Label { id: welcomeTextLabel - text: catalog.i18nc("@description", "Get plugins and materials verified by Ultimaker") + text: catalog.i18nc("@description", "Please sign in to get verified plugins and materials for Ultimaker Cura Enterprise") width: Math.round(parent.width / 2) font: UM.Theme.getFont("default") color: UM.Theme.getColor("text") From 715e5a890ea9d2640b1d73749a0c960e8a05b5c5 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Mon, 25 May 2020 17:05:55 +0200 Subject: [PATCH 100/116] Don't crash when the file is deleted while in pre-read phase The pre-read takes a while since it shows a dialogue. The user has all the time to delete the file or rename it in the meanwhile. Fixes Sentry issue CURA-SG. --- plugins/3MFReader/ThreeMFWorkspaceReader.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/plugins/3MFReader/ThreeMFWorkspaceReader.py b/plugins/3MFReader/ThreeMFWorkspaceReader.py index 6ab72b029c..6c3c296d28 100755 --- a/plugins/3MFReader/ThreeMFWorkspaceReader.py +++ b/plugins/3MFReader/ThreeMFWorkspaceReader.py @@ -589,7 +589,15 @@ class ThreeMFWorkspaceReader(WorkspaceReader): def read(self, file_name): application = CuraApplication.getInstance() - archive = zipfile.ZipFile(file_name, "r") + try: + archive = zipfile.ZipFile(file_name, "r") + except EnvironmentError as e: + message = Message(i18n_catalog.i18nc("@info:error Don't translate the XML tags or !", + "Project file {0} is suddenly inaccessible: {1}.", file_name, str(e)), + title = i18n_catalog.i18nc("@info:title", "Can't Open Project File")) + message.show() + self.setWorkspaceName("") + return [], {} cura_file_names = [name for name in archive.namelist() if name.startswith("Cura/")] From edf7fdad75e0221c02821147b1e93715338e490b Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Mon, 25 May 2020 17:20:33 +0200 Subject: [PATCH 101/116] Check first if we have valid vertex data The convex hull calculation may fail. If it does, we want to just tomit the convex hull shadow, rather than crash. Fixes Sentry issue CURA-ST. --- cura/Scene/ConvexHullDecorator.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cura/Scene/ConvexHullDecorator.py b/cura/Scene/ConvexHullDecorator.py index b5f5fb4540..c1e6a352b9 100644 --- a/cura/Scene/ConvexHullDecorator.py +++ b/cura/Scene/ConvexHullDecorator.py @@ -224,7 +224,7 @@ class ConvexHullDecorator(SceneNodeDecorator): if self._node is None: return None if self._node.callDecoration("isGroup"): - points = numpy.zeros((0, 2), dtype=numpy.int32) + points = numpy.zeros((0, 2), dtype = numpy.int32) for child in self._node.getChildren(): child_hull = child.callDecoration("_compute2DConvexHull") if child_hull: @@ -268,7 +268,7 @@ class ConvexHullDecorator(SceneNodeDecorator): # Do not throw away vertices: the convex hull may be too small and objects can collide. # vertex_data = vertex_data[vertex_data[:,1] >= -0.01] - if len(vertex_data) >= 4: # type: ignore # mypy and numpy don't play along well just yet. + if vertex_data is not None and len(vertex_data) >= 4: # type: ignore # mypy and numpy don't play along well just yet. # Round the vertex data to 1/10th of a mm, then remove all duplicate vertices # This is done to greatly speed up further convex hull calculations as the convex hull # becomes much less complex when dealing with highly detailed models. From fad02193abad63c80abc00e42c212f1bad35d831 Mon Sep 17 00:00:00 2001 From: Kostas Karmas Date: Tue, 26 May 2020 09:49:58 +0200 Subject: [PATCH 102/116] Fix sync button not appearing when opening popup after clicking away This was achieved by adding an IDLE state, which is the default state when opening the account management popup. The state is now reseted when the popup opens instead of when it closes. In addition, now either the "You are in sync with your account" label or the "Check account for updates" button will appear in the popup based on the state, not both. Finally, with theses changes, if the popup is open and an autosync occurs, the user will be informed that the account is synced and he/she will have to close and reopen the popup in order to trigger a manual update. CURA-7290 --- cura/API/Account.py | 9 +++++++-- resources/qml/Account/AccountWidget.qml | 3 ++- resources/qml/Account/SyncState.qml | 7 +++++-- 3 files changed, 14 insertions(+), 5 deletions(-) diff --git a/cura/API/Account.py b/cura/API/Account.py index 00afe9e528..06125d4819 100644 --- a/cura/API/Account.py +++ b/cura/API/Account.py @@ -23,6 +23,7 @@ class SyncState: SYNCING = 0 SUCCESS = 1 ERROR = 2 + IDLE = 3 ## The account API provides a version-proof bridge to use Ultimaker Accounts @@ -59,7 +60,7 @@ class Account(QObject): self._error_message = None # type: Optional[Message] self._logged_in = False - self._sync_state = SyncState.SUCCESS + self._sync_state = SyncState.IDLE self._manual_sync_enabled = False self._last_sync_str = "-" @@ -116,11 +117,13 @@ class Account(QObject): if any(val == SyncState.SYNCING for val in self._sync_services.values()): self._sync_state = SyncState.SYNCING + self._setManualSyncEnabled(False) elif any(val == SyncState.ERROR for val in self._sync_services.values()): self._sync_state = SyncState.ERROR self._setManualSyncEnabled(True) else: self._sync_state = SyncState.SUCCESS + self._setManualSyncEnabled(False) if self._sync_state != prev_state: self.syncStateChanged.emit(self._sync_state) @@ -238,8 +241,10 @@ class Account(QObject): self._sync() @pyqtSlot() - def popupClosed(self) -> None: + def popupOpened(self) -> None: self._setManualSyncEnabled(True) + self._sync_state = SyncState.IDLE + self.syncStateChanged.emit(self._sync_state) @pyqtSlot() def logout(self) -> None: diff --git a/resources/qml/Account/AccountWidget.qml b/resources/qml/Account/AccountWidget.qml index 00ac954f22..eed711e745 100644 --- a/resources/qml/Account/AccountWidget.qml +++ b/resources/qml/Account/AccountWidget.qml @@ -112,8 +112,8 @@ Item if (popup.opened) { popup.close() - Cura.API.account.popupClosed() } else { + Cura.API.account.popupOpened() popup.open() } } @@ -127,6 +127,7 @@ Item x: parent.width - width closePolicy: Popup.CloseOnEscape | Popup.CloseOnPressOutsideParent + onOpened: Cura.API.account.popupOpened() opacity: opened ? 1 : 0 Behavior on opacity { NumberAnimation { duration: 100 } } diff --git a/resources/qml/Account/SyncState.qml b/resources/qml/Account/SyncState.qml index eb71e81ecc..98e5991b5a 100644 --- a/resources/qml/Account/SyncState.qml +++ b/resources/qml/Account/SyncState.qml @@ -19,7 +19,7 @@ Row // sync state icon + message width: 20 * screenScaleFactor height: width - source: UM.Theme.getIcon("update") + source: Cura.API.account.manualSyncEnabled ? UM.Theme.getIcon("update") : UM.Theme.getIcon("checked") color: palette.text RotationAnimator @@ -54,6 +54,7 @@ Row // sync state icon + message color: UM.Theme.getColor("text") font: UM.Theme.getFont("medium") renderType: Text.NativeRendering + visible: !Cura.API.account.manualSyncEnabled } Label @@ -80,7 +81,9 @@ Row // sync state icon + message signal syncStateChanged(string newState) onSyncStateChanged: { - if(newState == Cura.AccountSyncState.SYNCING){ + if(newState == Cura.AccountSyncState.IDLE){ + icon.source = UM.Theme.getIcon("update") + } else if(newState == Cura.AccountSyncState.SYNCING){ icon.source = UM.Theme.getIcon("update") stateLabel.text = catalog.i18nc("@label", "Checking...") } else if (newState == Cura.AccountSyncState.SUCCESS) { From 6edaedfe22b61121f8a4f5d37277c0faaaa2139a Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Tue, 26 May 2020 09:52:30 +0200 Subject: [PATCH 103/116] Use Czech name for the Czech language option This is in line with the other languages in that drop-down. --- resources/qml/Preferences/GeneralPage.qml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/qml/Preferences/GeneralPage.qml b/resources/qml/Preferences/GeneralPage.qml index 404c961a90..caf01b518c 100644 --- a/resources/qml/Preferences/GeneralPage.qml +++ b/resources/qml/Preferences/GeneralPage.qml @@ -154,7 +154,7 @@ UM.PreferencesPage Component.onCompleted: { append({ text: "English", code: "en_US" }) - append({ text: "Czech", code: "cs_CZ" }) + append({ text: "Čeština", code: "cs_CZ" }) append({ text: "Deutsch", code: "de_DE" }) append({ text: "Español", code: "es_ES" }) //Finnish is disabled for being incomplete: append({ text: "Suomi", code: "fi_FI" }) From ed74198e206f2c95ddf698aa4ac240f4953f9b5c Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Tue, 26 May 2020 11:19:54 +0200 Subject: [PATCH 104/116] Revert "Revised text from Enterprise marketplace pop-up screen" This reverts commit 6a334dd907eeeaf657db006a07d71618d800987f. The commit broke the string freeze. It also hardcodes the enterprise text for all versions of Cura (which should not be the case!) --- plugins/Toolbox/resources/qml/pages/WelcomePage.qml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/Toolbox/resources/qml/pages/WelcomePage.qml b/plugins/Toolbox/resources/qml/pages/WelcomePage.qml index 04110cbc0f..d8adda0846 100644 --- a/plugins/Toolbox/resources/qml/pages/WelcomePage.qml +++ b/plugins/Toolbox/resources/qml/pages/WelcomePage.qml @@ -19,7 +19,7 @@ Column Label { id: welcomeTextLabel - text: catalog.i18nc("@description", "Please sign in to get verified plugins and materials for Ultimaker Cura Enterprise") + text: catalog.i18nc("@description", "Get plugins and materials verified by Ultimaker") width: Math.round(parent.width / 2) font: UM.Theme.getFont("default") color: UM.Theme.getColor("text") From 2eaa366424487625bd22c07995105706fb655366 Mon Sep 17 00:00:00 2001 From: Nino van Hooff Date: Tue, 26 May 2020 11:55:54 +0200 Subject: [PATCH 105/116] WIP: add tooltip to connection status icon wip: content and position CURA-7437 --- resources/qml/ExpandablePopup.qml | 22 ++++++++++--------- .../qml/PrinterSelector/MachineSelector.qml | 22 +++++++++++++++++++ 2 files changed, 34 insertions(+), 10 deletions(-) diff --git a/resources/qml/ExpandablePopup.qml b/resources/qml/ExpandablePopup.qml index 18255939ab..eb949a84ec 100644 --- a/resources/qml/ExpandablePopup.qml +++ b/resources/qml/ExpandablePopup.qml @@ -35,7 +35,8 @@ Item property color headerActiveColor: UM.Theme.getColor("secondary") property color headerHoverColor: UM.Theme.getColor("action_button_hovered") - property alias enabled: mouseArea.enabled + property alias mouseArea: headerMouseArea + property alias enabled: headerMouseArea.enabled // Text to show when this component is disabled property alias disabledText: disabledLabel.text @@ -139,6 +140,16 @@ Item anchors.fill: parent visible: base.enabled + MouseArea + { + id: headerMouseArea + anchors.fill: parent + onClicked: toggleContent() + hoverEnabled: true + onEntered: background.color = headerHoverColor + onExited: background.color = base.enabled ? headerBackgroundColor : UM.Theme.getColor("disabled") + } + Loader { id: headerItemLoader @@ -180,15 +191,6 @@ Item } } - MouseArea - { - id: mouseArea - anchors.fill: parent - onClicked: toggleContent() - hoverEnabled: true - onEntered: background.color = headerHoverColor - onExited: background.color = base.enabled ? headerBackgroundColor : UM.Theme.getColor("disabled") - } } DropShadow diff --git a/resources/qml/PrinterSelector/MachineSelector.qml b/resources/qml/PrinterSelector/MachineSelector.qml index 4cbae378f9..1530a9b215 100644 --- a/resources/qml/PrinterSelector/MachineSelector.qml +++ b/resources/qml/PrinterSelector/MachineSelector.qml @@ -60,6 +60,7 @@ Cura.ExpandablePopup UM.RecolorImage { + id: connectionStatusImage anchors { bottom: parent.bottom @@ -106,6 +107,27 @@ Cura.ExpandablePopup color: UM.Theme.getColor("main_background") z: parent.z - 1 } + + MouseArea // Connection status tooltip hover area + { + id: connectionStatusTooltipHoverArea + anchors.fill: parent + hoverEnabled: true + enabled: true // todo + acceptedButtons: Qt.NoButton // react to hover only, don't steal clicks + + onEntered: + { + base.showTooltip( + connectionStatusImage, + Qt.point(0, 0), + "blaat blaat" + ); //todo + machineSelector.mouseArea.entered() // we want both this and the outer area to be entered + } + onExited: base.hideTooltip() + } + } } From de5c6f9318aa275ac2b25deeab5ffc35b5685ddc Mon Sep 17 00:00:00 2001 From: Nino van Hooff Date: Tue, 26 May 2020 13:37:47 +0200 Subject: [PATCH 106/116] Set connection status icon + color based on new states CURA-7437 --- .../qml/PrinterSelector/MachineSelector.qml | 41 ++++++++++--------- 1 file changed, 21 insertions(+), 20 deletions(-) diff --git a/resources/qml/PrinterSelector/MachineSelector.qml b/resources/qml/PrinterSelector/MachineSelector.qml index 1530a9b215..7cc68896ae 100644 --- a/resources/qml/PrinterSelector/MachineSelector.qml +++ b/resources/qml/PrinterSelector/MachineSelector.qml @@ -16,6 +16,25 @@ Cura.ExpandablePopup property bool isCloudRegistered: Cura.MachineManager.activeMachineHasCloudRegistration property bool isGroup: Cura.MachineManager.activeMachineIsGroup + property string connectionStatus: { + if (isNetworkPrinter) + { + return "printer_connected" + } + else if (isConnectedCloudPrinter) + { + return "printer_cloud_connected" + } + else if (isCloudRegistered) + { + return "printer_cloud_not_available" + } + else + { + return "" + } + } + contentPadding: UM.Theme.getSize("default_lining").width contentAlignment: Cura.ExpandablePopup.ContentAlignment.AlignLeft @@ -68,30 +87,12 @@ Cura.ExpandablePopup leftMargin: UM.Theme.getSize("thick_margin").width } - source: - { - if (isNetworkPrinter) - { - return UM.Theme.getIcon("printer_connected") - } - else if (isConnectedCloudPrinter) - { - return UM.Theme.getIcon("printer_cloud_connected") - } - else if (isCloudRegistered) - { - return UM.Theme.getIcon("printer_cloud_not_available") - } - else - { - return "" - } - } + source: UM.Theme.getIcon(connectionStatus) width: UM.Theme.getSize("printer_status_icon").width height: UM.Theme.getSize("printer_status_icon").height - color: source == UM.Theme.getIcon("printer_cloud_not_available") ? UM.Theme.getColor("cloud_unavailable") : UM.Theme.getColor("primary") + color: connectionStatus == "printer_cloud_not_available" ? UM.Theme.getColor("cloud_unavailable") : UM.Theme.getColor("primary") visible: isNetworkPrinter || isCloudRegistered From 4d5ef91c439808f77f32f019c5825e461c1778b8 Mon Sep 17 00:00:00 2001 From: Nino van Hooff Date: Tue, 26 May 2020 13:50:15 +0200 Subject: [PATCH 107/116] Add connection status message CURA-7437 --- .../qml/PrinterSelector/MachineSelector.qml | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/resources/qml/PrinterSelector/MachineSelector.qml b/resources/qml/PrinterSelector/MachineSelector.qml index 7cc68896ae..f7233d31e6 100644 --- a/resources/qml/PrinterSelector/MachineSelector.qml +++ b/resources/qml/PrinterSelector/MachineSelector.qml @@ -16,7 +16,7 @@ Cura.ExpandablePopup property bool isCloudRegistered: Cura.MachineManager.activeMachineHasCloudRegistration property bool isGroup: Cura.MachineManager.activeMachineIsGroup - property string connectionStatus: { + readonly property string connectionStatus: { if (isNetworkPrinter) { return "printer_connected" @@ -35,6 +35,15 @@ Cura.ExpandablePopup } } + readonly property string connectionStatusMessage: { + if (connectionStatus == "printer_cloud_not_available") + { + return "The cloud connection is currently unavailable. Please check your internet connection and sign in to connect to the cloud printer" + } else { + return "" + } + } + contentPadding: UM.Theme.getSize("default_lining").width contentAlignment: Cura.ExpandablePopup.ContentAlignment.AlignLeft @@ -113,8 +122,7 @@ Cura.ExpandablePopup { id: connectionStatusTooltipHoverArea anchors.fill: parent - hoverEnabled: true - enabled: true // todo + hoverEnabled: connectionStatusMessage !== "" acceptedButtons: Qt.NoButton // react to hover only, don't steal clicks onEntered: @@ -122,8 +130,8 @@ Cura.ExpandablePopup base.showTooltip( connectionStatusImage, Qt.point(0, 0), - "blaat blaat" - ); //todo + connectionStatusMessage + ); //todo: positioning machineSelector.mouseArea.entered() // we want both this and the outer area to be entered } onExited: base.hideTooltip() From 8c28dd8d840d6b42f5ea31d6b54b83e7b3ac45e1 Mon Sep 17 00:00:00 2001 From: Nino van Hooff Date: Tue, 26 May 2020 13:58:21 +0200 Subject: [PATCH 108/116] Check for internet when determining connection status CURA-7437 --- resources/qml/PrinterSelector/MachineSelector.qml | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/resources/qml/PrinterSelector/MachineSelector.qml b/resources/qml/PrinterSelector/MachineSelector.qml index f7233d31e6..5fc750755d 100644 --- a/resources/qml/PrinterSelector/MachineSelector.qml +++ b/resources/qml/PrinterSelector/MachineSelector.qml @@ -21,7 +21,7 @@ Cura.ExpandablePopup { return "printer_connected" } - else if (isConnectedCloudPrinter) + else if (isConnectedCloudPrinter && Cura.API.connectionStatus.isInternetReachable) { return "printer_cloud_connected" } @@ -38,7 +38,11 @@ Cura.ExpandablePopup readonly property string connectionStatusMessage: { if (connectionStatus == "printer_cloud_not_available") { - return "The cloud connection is currently unavailable. Please check your internet connection and sign in to connect to the cloud printer" + if(Cura.API.connectionStatus.isInternetReachable){ + return catalog.i18nc("@status", "The cloud connection is currently unavailable. Please check your internet connection and sign in to connect to the cloud printer.") + } else { + return catalog.i18nc("@status", "The cloud connection is currently unavailable. Please check your internet connection.") + } } else { return "" } From 5749e8b20a27712897d8fc83e107dff557ab9347 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Tue, 26 May 2020 14:00:12 +0200 Subject: [PATCH 109/116] Fix name for the I3 Metal Motion CURA-7466 --- resources/definitions/I3MetalMotion.def.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/definitions/I3MetalMotion.def.json b/resources/definitions/I3MetalMotion.def.json index 01dcc06ebe..a9d55969bb 100644 --- a/resources/definitions/I3MetalMotion.def.json +++ b/resources/definitions/I3MetalMotion.def.json @@ -1,6 +1,6 @@ { "version": 2, - "name": "I3MetalMotion", + "name": "I3 Metal Motion", "inherits": "fdmprinter", "metadata": { "visible": true, From 5f574d4b64ab0114b19b843acbc70e006bbe69d1 Mon Sep 17 00:00:00 2001 From: Nino van Hooff Date: Tue, 26 May 2020 16:21:51 +0200 Subject: [PATCH 110/116] Fix the connection status tooltip CURA-7437 --- .../qml/PrinterSelector/MachineSelector.qml | 45 ++++++++++++------- resources/qml/ToolTip.qml | 15 +++++++ 2 files changed, 43 insertions(+), 17 deletions(-) diff --git a/resources/qml/PrinterSelector/MachineSelector.qml b/resources/qml/PrinterSelector/MachineSelector.qml index 5fc750755d..064433fea5 100644 --- a/resources/qml/PrinterSelector/MachineSelector.qml +++ b/resources/qml/PrinterSelector/MachineSelector.qml @@ -122,25 +122,36 @@ Cura.ExpandablePopup z: parent.z - 1 } - MouseArea // Connection status tooltip hover area - { - id: connectionStatusTooltipHoverArea - anchors.fill: parent - hoverEnabled: connectionStatusMessage !== "" - acceptedButtons: Qt.NoButton // react to hover only, don't steal clicks + } - onEntered: - { - base.showTooltip( - connectionStatusImage, - Qt.point(0, 0), - connectionStatusMessage - ); //todo: positioning - machineSelector.mouseArea.entered() // we want both this and the outer area to be entered - } - onExited: base.hideTooltip() - } + MouseArea // Connection status tooltip hover area + { + id: connectionStatusTooltipHoverArea + anchors.fill: parent + hoverEnabled: connectionStatusMessage !== "" + acceptedButtons: Qt.NoButton // react to hover only, don't steal clicks + onEntered: + { + machineSelector.mouseArea.entered() // we want both this and the outer area to be entered + tooltip.show() + } + onExited: { tooltip.hide() } + } + + Cura.ToolTip + { + id: tooltip + + width: 250 * screenScaleFactor + tooltipText: connectionStatusMessage + arrowSize: UM.Theme.getSize("button_tooltip_arrow").width + x: connectionStatusImage.x - UM.Theme.getSize("narrow_margin").width + y: connectionStatusImage.y + connectionStatusImage.height + UM.Theme.getSize("narrow_margin").height + targetPoint: Qt.point( + connectionStatusImage.x + Math.round(connectionStatusImage.width / 2), + connectionStatusImage.y + ) } } diff --git a/resources/qml/ToolTip.qml b/resources/qml/ToolTip.qml index e82caf01b2..d4a9bc40d5 100644 --- a/resources/qml/ToolTip.qml +++ b/resources/qml/ToolTip.qml @@ -19,6 +19,7 @@ ToolTip property int contentAlignment: Cura.ToolTip.ContentAlignment.AlignRight property alias tooltipText: tooltip.text + property alias arrowSize: backgroundRect.arrowSize property var targetPoint: Qt.point(parent.x, y + Math.round(height/2)) id: tooltip @@ -26,6 +27,11 @@ ToolTip delay: 500 font: UM.Theme.getFont("default") + Behavior on opacity + { + NumberAnimation { duration: 100; } + } + // If the text is not set, just set the height to 0 to prevent it from showing height: text != "" ? label.contentHeight + 2 * UM.Theme.getSize("thin_margin").width: 0 @@ -60,4 +66,13 @@ ToolTip color: UM.Theme.getColor("tooltip_text") renderType: Text.NativeRendering } + + function show() { + visible = true + opacity = 1 + } + + function hide() { + opacity = 0 + } } \ No newline at end of file From ca333b4e8a96b3b423ee6237cccd6b1d3e554dad Mon Sep 17 00:00:00 2001 From: Nino van Hooff Date: Tue, 26 May 2020 16:45:17 +0200 Subject: [PATCH 111/116] Revert commented lines CURA-7437 --- .../UM3NetworkPrinting/src/Cloud/CloudOutputDeviceManager.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDeviceManager.py b/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDeviceManager.py index 5f564bc6ad..f233e59fe5 100644 --- a/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDeviceManager.py +++ b/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDeviceManager.py @@ -106,8 +106,8 @@ class CloudOutputDeviceManager: self._onDevicesDiscovered(new_clusters) removed_device_keys = set(self._remote_clusters.keys()) - set(online_clusters.keys()) - # for device_id in removed_device_keys: - # self._onDiscoveredDeviceRemoved(device_id) + for device_id in removed_device_keys: + self._onDiscoveredDeviceRemoved(device_id) if new_clusters or removed_device_keys: self.discoveredDevicesChanged.emit() From b58730a70cd6e04f79e6cbefee4c6e1b8f4510eb Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Wed, 27 May 2020 15:30:22 +0200 Subject: [PATCH 112/116] Fix decoding in recently opened menu Fixes #7820 --- resources/qml/Menus/RecentFilesMenu.qml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/qml/Menus/RecentFilesMenu.qml b/resources/qml/Menus/RecentFilesMenu.qml index b788b5e72e..9de523280c 100644 --- a/resources/qml/Menus/RecentFilesMenu.qml +++ b/resources/qml/Menus/RecentFilesMenu.qml @@ -24,7 +24,7 @@ Menu { text: { - var path = modelData.toString() + var path = decodeURIComponent(modelData.toString()) return (index + 1) + ". " + path.slice(path.lastIndexOf("/") + 1); } onTriggered: From 8a12f539b555af4e753605ddf49f6b168ad6dfec Mon Sep 17 00:00:00 2001 From: Nino van Hooff Date: Wed, 27 May 2020 16:37:48 +0200 Subject: [PATCH 113/116] Fix connection status z-order CURA-7437 --- resources/qml/PrinterSelector/MachineSelector.qml | 1 + 1 file changed, 1 insertion(+) diff --git a/resources/qml/PrinterSelector/MachineSelector.qml b/resources/qml/PrinterSelector/MachineSelector.qml index 064433fea5..2896588341 100644 --- a/resources/qml/PrinterSelector/MachineSelector.qml +++ b/resources/qml/PrinterSelector/MachineSelector.qml @@ -148,6 +148,7 @@ Cura.ExpandablePopup arrowSize: UM.Theme.getSize("button_tooltip_arrow").width x: connectionStatusImage.x - UM.Theme.getSize("narrow_margin").width y: connectionStatusImage.y + connectionStatusImage.height + UM.Theme.getSize("narrow_margin").height + z: popup.z + 1 targetPoint: Qt.point( connectionStatusImage.x + Math.round(connectionStatusImage.width / 2), connectionStatusImage.y From e24797b94ed39debdd58b925b5ade3eb8e8cf0e4 Mon Sep 17 00:00:00 2001 From: Nino van Hooff Date: Wed, 27 May 2020 17:21:50 +0200 Subject: [PATCH 114/116] Fix tooltip with alpha 0 stealing clicks CURA-7437 --- resources/qml/ToolTip.qml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/resources/qml/ToolTip.qml b/resources/qml/ToolTip.qml index d4a9bc40d5..ad58038d01 100644 --- a/resources/qml/ToolTip.qml +++ b/resources/qml/ToolTip.qml @@ -26,6 +26,8 @@ ToolTip text: "" delay: 500 font: UM.Theme.getFont("default") + visible: opacity != 0.0 + opacity: 0.0 // initially hidden Behavior on opacity { @@ -68,7 +70,6 @@ ToolTip } function show() { - visible = true opacity = 1 } From fbddf88462b0f022fa02d793ab4f08658302447a Mon Sep 17 00:00:00 2001 From: Nino van Hooff Date: Thu, 28 May 2020 09:56:41 +0200 Subject: [PATCH 115/116] Change connection status checking interval to 10s CURA-7437 --- cura/API/ConnectionStatus.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cura/API/ConnectionStatus.py b/cura/API/ConnectionStatus.py index 0dbe6a4293..332e519ca9 100644 --- a/cura/API/ConnectionStatus.py +++ b/cura/API/ConnectionStatus.py @@ -10,7 +10,7 @@ from cura.UltimakerCloud import UltimakerCloudAuthentication class ConnectionStatus(QObject): """Status info for some web services""" - UPDATE_INTERVAL = 5.0 # seconds + UPDATE_INTERVAL = 10.0 # seconds ULTIMAKER_CLOUD_STATUS_URL = UltimakerCloudAuthentication.CuraCloudAPIRoot + "/connect/v1/" __instance = None # type: Optional[ConnectionStatus] From 2a70813d030c678181b5c37fc82cb513d689187b Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Thu, 28 May 2020 12:59:21 +0200 Subject: [PATCH 116/116] Correct orientation of printer volume This seems to have been a mix-up of 'depth' and 'height'. The specs online say that these are the correct dimensions. Fixes #7827. --- resources/definitions/geeetech_A10.def.json | 7 ++++--- resources/definitions/geeetech_A10T.def.json | 3 ++- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/resources/definitions/geeetech_A10.def.json b/resources/definitions/geeetech_A10.def.json index 62a3f3684e..44f6242632 100644 --- a/resources/definitions/geeetech_A10.def.json +++ b/resources/definitions/geeetech_A10.def.json @@ -21,11 +21,12 @@ "default_value": 220 }, "machine_height": { - "default_value": 220 + "default_value": 260 }, "machine_depth": { - "default_value": 260 - }, "machine_center_is_zero": { + "default_value": 220 + }, + "machine_center_is_zero": { "default_value": false }, "layer_height": { "default_value": 0.1 }, diff --git a/resources/definitions/geeetech_A10T.def.json b/resources/definitions/geeetech_A10T.def.json index f989a90982..0f1a0b76ab 100644 --- a/resources/definitions/geeetech_A10T.def.json +++ b/resources/definitions/geeetech_A10T.def.json @@ -27,7 +27,8 @@ }, "machine_depth": { "default_value": 260 - }, "machine_center_is_zero": { + }, + "machine_center_is_zero": { "default_value": false }, "layer_height": { "default_value": 0.1 },