diff --git a/cura/Settings/ContainerManager.py b/cura/Settings/ContainerManager.py
index 80a0d64474..08fdf707cf 100644
--- a/cura/Settings/ContainerManager.py
+++ b/cura/Settings/ContainerManager.py
@@ -345,6 +345,9 @@ class ContainerManager(QObject):
# user changes are possibly added to make the current setup match the current enabled extruders
machine_manager.correctExtruderSettings()
+ # The Print Sequence should be changed to match the current setup
+ machine_manager.correctPrintSequence()
+
for container in send_emits_containers:
container.sendPostponedEmits()
diff --git a/cura/Settings/MachineManager.py b/cura/Settings/MachineManager.py
index 58fd8171b5..1a2ab72a33 100755
--- a/cura/Settings/MachineManager.py
+++ b/cura/Settings/MachineManager.py
@@ -128,6 +128,7 @@ class MachineManager(QObject):
self.activeQualityChangesGroupChanged.connect(self.activeQualityDisplayNameChanged)
self.activeStackValueChanged.connect(self._reCalculateNumUserSettings)
+ self.numberExtrudersEnabledChanged.connect(self.correctPrintSequence)
activeQualityDisplayNameChanged = pyqtSignal()
@@ -826,11 +827,6 @@ class MachineManager(QObject):
result = [] # type: List[str]
for setting_instance in container.findInstances():
setting_key = setting_instance.definition.key
- if setting_key == "print_sequence":
- old_value = container.getProperty(setting_key, "value")
- Logger.log("d", "Reset setting [%s] in [%s] because its old value [%s] is no longer valid", setting_key, container, old_value)
- result.append(setting_key)
- continue
if not self._global_container_stack.getProperty(setting_key, "type") in ("extruder", "optional_extruder"):
continue
@@ -862,6 +858,41 @@ class MachineManager(QObject):
title = catalog.i18nc("@info:title", "Settings updated"))
caution_message.show()
+ def correctPrintSequence(self) -> None:
+ """
+ Sets the Print Sequence setting to "all-at-once" when there are more than one enabled extruders.
+
+ This setting has to be explicitly changed whenever we have more than one enabled extruders to make sure that the
+ Cura UI is properly updated to reset all the UI elements changes that occur due to the one-at-a-time mode (such
+ as the reduced build volume, the different convex hulls of the objects etc.).
+ """
+
+ setting_key = "print_sequence"
+ new_value = "all_at_once"
+
+ if self._global_container_stack is None \
+ or self._global_container_stack.getProperty(setting_key, "value") == new_value \
+ or self.numberExtrudersEnabled < 2:
+ return
+
+ user_changes_container = self._global_container_stack.userChanges
+ quality_changes_container = self._global_container_stack.qualityChanges
+ print_sequence_quality_changes = quality_changes_container.getProperty(setting_key, "value")
+ print_sequence_user_changes = user_changes_container.getProperty(setting_key, "value")
+
+ # If the user changes container has a value and its the incorrect value, then reset the setting in the user
+ # changes (so that the circular revert-changes arrow will now show up in the interface)
+ if print_sequence_user_changes and print_sequence_user_changes != new_value:
+ user_changes_container.removeInstance(setting_key)
+ Logger.log("d", "Resetting '{}' in container '{}' because there are more than 1 enabled extruders.".format(setting_key, user_changes_container))
+ # If the print sequence doesn't exist in either the user changes or the quality changes (yet it still has the
+ # wrong value in the global stack), or it exists in the quality changes and it has the wrong value, then set it
+ # in the user changes
+ elif (not print_sequence_quality_changes and not print_sequence_user_changes) \
+ or (print_sequence_quality_changes and print_sequence_quality_changes != new_value):
+ user_changes_container.setProperty(setting_key, "value", new_value)
+ Logger.log("d", "Setting '{}' in '{}' to '{}' because there are more than 1 enabled extruders.".format(setting_key, user_changes_container, new_value))
+
def setActiveMachineExtruderCount(self, extruder_count: int) -> None:
"""Set the amount of extruders on the active machine (global stack)
diff --git a/plugins/UM3NetworkPrinting/resources/png/Ultimaker 2+ Connect.png b/plugins/UM3NetworkPrinting/resources/png/Ultimaker 2+ Connect.png
new file mode 100644
index 0000000000..9821dc0908
Binary files /dev/null and b/plugins/UM3NetworkPrinting/resources/png/Ultimaker 2+ Connect.png differ
diff --git a/plugins/XmlMaterialProfile/product_to_id.json b/plugins/XmlMaterialProfile/product_to_id.json
index a48eb20a18..053c8d13f5 100644
--- a/plugins/XmlMaterialProfile/product_to_id.json
+++ b/plugins/XmlMaterialProfile/product_to_id.json
@@ -4,6 +4,7 @@
"Ultimaker 2 Extended+": "ultimaker2_extended_plus",
"Ultimaker 2 Go": "ultimaker2_go",
"Ultimaker 2+": "ultimaker2_plus",
+ "Ultimaker 2+ Connect": "ultimaker2_plus_connect",
"Ultimaker 3": "ultimaker3",
"Ultimaker 3 Extended": "ultimaker3_extended",
"Ultimaker S3": "ultimaker_s3",
@@ -12,4 +13,4 @@
"Ultimaker Original+": "ultimaker_original_plus",
"Ultimaker Original Dual Extrusion": "ultimaker_original_dual",
"IMADE3D JellyBOX": "imade3d_jellybox"
-}
\ No newline at end of file
+}
diff --git a/resources/definitions/ultimaker2_plus_connect.def.json b/resources/definitions/ultimaker2_plus_connect.def.json
new file mode 100644
index 0000000000..c0ddcf813f
--- /dev/null
+++ b/resources/definitions/ultimaker2_plus_connect.def.json
@@ -0,0 +1,82 @@
+{
+ "version": 2,
+ "name": "Ultimaker 2+ Connect",
+ "inherits": "ultimaker2",
+ "metadata": {
+ "author": "Ultimaker",
+ "manufacturer": "Ultimaker B.V.",
+ "weight": 1,
+ "file_formats": "application/x-ufp;text/x-gcode",
+ "platform": "ultimaker3_platform.obj",
+ "platform_texture": "Ultimaker2PlusConnectbackplate.png",
+ "preferred_variant_name": "0.4 mm",
+ "has_variants": true,
+ "has_materials": true,
+ "has_machine_materials": true,
+ "has_machine_quality": true,
+ "exclude_materials": ["generic_hips", "generic_petg", "generic_bam", "ultimaker_bam", "generic_pva", "ultimaker_pva", "generic_tough_pla", "ultimaker_tough_pla_black", "ultimaker_tough_pla_green", "ultimaker_tough_pla_red", "ultimaker_tough_pla_white", "generic_cffcpe", "generic_cffpa", "generic_gffcpe", "generic_gffpa", "structur3d_dap100silicone" ],
+ "first_start_actions": [],
+ "supported_actions": [],
+ "machine_extruder_trains":
+ {
+ "0": "ultimaker2_plus_connect_extruder_0"
+ },
+ "supports_usb_connection": false,
+ "supports_network_connection": true
+ },
+
+ "overrides": {
+ "machine_name": { "default_value": "Ultimaker 2+ Connect" },
+ "machine_gcode_flavor": { "default_value": "Griffin" },
+ "machine_width": { "default_value": 223 },
+ "machine_depth": { "default_value": 220 },
+ "machine_height": { "default_value": 205 },
+ "machine_show_variants": { "default_value": true },
+ "gantry_height": { "value": "52" },
+ "machine_nozzle_head_distance": { "default_value": 5 },
+ "machine_heat_zone_length": { "default_value": 20 },
+ "machine_head_with_fans_polygon":
+ {
+ "default_value": [
+ [ -44, 14 ],
+ [ -44, -34 ],
+ [ 64, 14 ],
+ [ 64, -34 ]
+ ]
+ },
+ "machine_disallowed_areas":
+ {
+ "default_value": [
+ [[-115, 112.5], [ -83, 112.5], [ -85, 104.0], [-115, 104.0]],
+ [[ 115, 112.5], [ 115, 104.0], [ 104, 104.0], [ 102, 112.5]],
+ [[-115, -112.5], [-115, -104.0], [ -87, -104.0], [ -85, -112.5]],
+ [[ 115, -112.5], [ 104, -112.5], [ 106, -104.0], [ 115, -104.0]]
+ ]
+ },
+ "infill_wipe_dist": { "value": "0" },
+ "infill_overlap": { "value": "0" },
+ "infill_pattern": { "value": "'grid'" },
+ "speed_infill": { "value": "speed_print" },
+ "speed_wall_x": { "value": "speed_wall" },
+ "layer_height_0": { "value": "round(machine_nozzle_size / 1.5, 2)" },
+ "line_width": { "value": "round(machine_nozzle_size * 0.875, 2)" },
+ "optimize_wall_printing_order": { "value": "True" },
+ "zig_zaggify_infill": { "value": "gradual_infill_steps == 0" },
+ "speed_support": { "value": "speed_wall_0" },
+ "material_initial_print_temperature": { "value": "material_print_temperature" },
+ "material_final_print_temperature": { "value": "material_print_temperature" },
+ "material_print_temperature_layer_0": { "value": "material_print_temperature" },
+ "machine_start_gcode": { "value": "''" },
+ "machine_end_gcode": { "value": "''" },
+ "material_bed_temperature": { "maximum_value": 110 },
+ "material_bed_temperature_layer_0": { "maximum_value": 110 },
+ "material_print_temperature": { "maximum_value": 260 },
+ "material_print_temperature_layer_0": { "maximum_value": 260 },
+ "material_initial_print_temperature": { "maximum_value": 260 },
+ "material_final_print_temperature": { "maximum_value": 260 },
+ "meshfix_maximum_resolution": { "value": "(speed_wall_0 + speed_wall_x) / 60" },
+ "meshfix_maximum_deviation": { "value": "layer_height / 4" },
+ "meshfix_maximum_travel_resolution": { "value": 0.5 },
+ "prime_blob_enable": { "enabled": true, "default_value": true, "value": "resolveOrValue('print_sequence') != 'one_at_a_time'" }
+ }
+}
diff --git a/resources/extruders/ultimaker2_plus_connect_extruder_0.def.json b/resources/extruders/ultimaker2_plus_connect_extruder_0.def.json
new file mode 100644
index 0000000000..871fdd3645
--- /dev/null
+++ b/resources/extruders/ultimaker2_plus_connect_extruder_0.def.json
@@ -0,0 +1,15 @@
+{
+ "version": 2,
+ "name": "Extruder 1",
+ "inherits": "fdmextruder",
+ "metadata": {
+ "machine": "ultimaker2_plus_connect",
+ "position": "0"
+ },
+
+ "overrides": {
+ "extruder_nr": { "default_value": 0 },
+ "machine_nozzle_size": { "default_value": 0.4 },
+ "material_diameter": { "default_value": 2.85 }
+ }
+}
diff --git a/resources/images/Ultimaker2PlusConnectbackplate.png b/resources/images/Ultimaker2PlusConnectbackplate.png
new file mode 100644
index 0000000000..a8090cd769
Binary files /dev/null and b/resources/images/Ultimaker2PlusConnectbackplate.png differ
diff --git a/resources/quality/ultimaker2_plus_connect/um2pc_abs_0.25_normal.inst.cfg b/resources/quality/ultimaker2_plus_connect/um2pc_abs_0.25_normal.inst.cfg
new file mode 100644
index 0000000000..43dc3faca8
--- /dev/null
+++ b/resources/quality/ultimaker2_plus_connect/um2pc_abs_0.25_normal.inst.cfg
@@ -0,0 +1,23 @@
+[general]
+version = 4
+name = Extra Fine
+definition = ultimaker2_plus_connect
+
+[metadata]
+setting_version = 16
+type = quality
+quality_type = high
+weight = 1
+material = generic_abs
+variant = 0.25 mm
+
+[values]
+cool_fan_speed_min = =cool_fan_speed * 0.2
+cool_min_layer_time = 3
+cool_min_layer_time_fan_speed_max = 15
+cool_min_speed = 10
+infill_sparse_density = 20
+speed_layer_0 = =round(speed_print * 30 / 30)
+speed_print = 30
+top_bottom_thickness = 0.72
+wall_thickness = 0.88
diff --git a/resources/quality/ultimaker2_plus_connect/um2pc_abs_0.4_fast.inst.cfg b/resources/quality/ultimaker2_plus_connect/um2pc_abs_0.4_fast.inst.cfg
new file mode 100644
index 0000000000..286bebf854
--- /dev/null
+++ b/resources/quality/ultimaker2_plus_connect/um2pc_abs_0.4_fast.inst.cfg
@@ -0,0 +1,27 @@
+[general]
+version = 4
+name = Normal
+definition = ultimaker2_plus_connect
+
+[metadata]
+setting_version = 16
+type = quality
+quality_type = fast
+weight = -1
+material = generic_abs
+variant = 0.4 mm
+
+[values]
+cool_fan_speed_min = =cool_fan_speed * 0.2
+cool_min_layer_time = 3
+cool_min_layer_time_fan_speed_max = 15
+cool_min_speed = 10
+infill_sparse_density = 20
+top_bottom_thickness = 0.75
+wall_thickness = 0.7
+speed_print = 55
+speed_travel = 150
+speed_layer_0 = =round(speed_print * 30 / 55)
+speed_wall = =math.ceil(speed_print * 40 / 55)
+speed_topbottom = =math.ceil(speed_print * 30 / 55)
+speed_infill = =math.ceil(speed_print * 55 / 55)
diff --git a/resources/quality/ultimaker2_plus_connect/um2pc_abs_0.4_high.inst.cfg b/resources/quality/ultimaker2_plus_connect/um2pc_abs_0.4_high.inst.cfg
new file mode 100644
index 0000000000..614744aada
--- /dev/null
+++ b/resources/quality/ultimaker2_plus_connect/um2pc_abs_0.4_high.inst.cfg
@@ -0,0 +1,26 @@
+[general]
+version = 4
+name = Extra Fine
+definition = ultimaker2_plus_connect
+
+[metadata]
+setting_version = 16
+type = quality
+quality_type = high
+weight = 1
+material = generic_abs
+variant = 0.4 mm
+
+[values]
+cool_fan_speed_min = =cool_fan_speed * 0.2
+cool_min_layer_time = 3
+cool_min_layer_time_fan_speed_max = 15
+cool_min_speed = 10
+infill_sparse_density = 20
+top_bottom_thickness = 0.72
+wall_thickness = 1.05
+speed_print = 45
+speed_layer_0 = =round(speed_print * 30 / 45)
+speed_wall = =math.ceil(speed_print * 30 / 45)
+speed_topbottom = =math.ceil(speed_print * 15 / 45)
+speed_infill = =math.ceil(speed_print * 45 / 45)
diff --git a/resources/quality/ultimaker2_plus_connect/um2pc_abs_0.4_normal.inst.cfg b/resources/quality/ultimaker2_plus_connect/um2pc_abs_0.4_normal.inst.cfg
new file mode 100644
index 0000000000..b84d4c9a3f
--- /dev/null
+++ b/resources/quality/ultimaker2_plus_connect/um2pc_abs_0.4_normal.inst.cfg
@@ -0,0 +1,26 @@
+[general]
+version = 4
+name = Fine
+definition = ultimaker2_plus_connect
+
+[metadata]
+setting_version = 16
+type = quality
+quality_type = normal
+weight = 0
+material = generic_abs
+variant = 0.4 mm
+
+[values]
+cool_fan_speed_min = =cool_fan_speed * 0.2
+cool_min_layer_time = 3
+cool_min_layer_time_fan_speed_max = 15
+cool_min_speed = 10
+infill_sparse_density = 20
+top_bottom_thickness = 0.8
+wall_thickness = 1.05
+speed_print = 45
+speed_layer_0 = =round(speed_print * 30 / 45)
+speed_wall = =math.ceil(speed_print * 30 / 45)
+speed_topbottom = =math.ceil(speed_print * 20 / 45)
+speed_infill = =math.ceil(speed_print * 45 / 45)
\ No newline at end of file
diff --git a/resources/quality/ultimaker2_plus_connect/um2pc_abs_0.6_normal.inst.cfg b/resources/quality/ultimaker2_plus_connect/um2pc_abs_0.6_normal.inst.cfg
new file mode 100644
index 0000000000..ac192c9685
--- /dev/null
+++ b/resources/quality/ultimaker2_plus_connect/um2pc_abs_0.6_normal.inst.cfg
@@ -0,0 +1,24 @@
+[general]
+version = 4
+name = Fine
+definition = ultimaker2_plus_connect
+
+[metadata]
+setting_version = 16
+type = quality
+quality_type = fast
+weight = 0
+material = generic_abs
+variant = 0.6 mm
+
+[values]
+cool_fan_speed_min = =cool_fan_speed * 0.5
+cool_min_layer_time = 3
+cool_min_layer_time_fan_speed_max = 20
+cool_min_speed = 20
+infill_sparse_density = 20
+speed_infill = =math.ceil(speed_print * 55 / 40)
+speed_layer_0 = =round(speed_print * 30 / 40)
+speed_print = 40
+top_bottom_thickness = 1.2
+wall_thickness = 1.59
diff --git a/resources/quality/ultimaker2_plus_connect/um2pc_abs_0.8_normal.inst.cfg b/resources/quality/ultimaker2_plus_connect/um2pc_abs_0.8_normal.inst.cfg
new file mode 100644
index 0000000000..d2cffb1c55
--- /dev/null
+++ b/resources/quality/ultimaker2_plus_connect/um2pc_abs_0.8_normal.inst.cfg
@@ -0,0 +1,23 @@
+[general]
+version = 4
+name = Normal
+definition = ultimaker2_plus_connect
+
+[metadata]
+setting_version = 16
+type = quality
+quality_type = draft
+weight = -1
+material = generic_abs
+variant = 0.8 mm
+
+[values]
+cool_fan_speed_min = =cool_fan_speed * 0.5
+cool_min_layer_time = 3
+cool_min_layer_time_fan_speed_max = 25
+cool_min_speed = 15
+infill_sparse_density = 20
+speed_layer_0 = =round(speed_print * 30 / 40)
+speed_print = 40
+top_bottom_thickness = 1.2
+wall_thickness = 2.1
diff --git a/resources/quality/ultimaker2_plus_connect/um2pc_cpe_0.25_normal.inst.cfg b/resources/quality/ultimaker2_plus_connect/um2pc_cpe_0.25_normal.inst.cfg
new file mode 100644
index 0000000000..efb0361c6e
--- /dev/null
+++ b/resources/quality/ultimaker2_plus_connect/um2pc_cpe_0.25_normal.inst.cfg
@@ -0,0 +1,24 @@
+[general]
+version = 4
+name = Extra Fine
+definition = ultimaker2_plus_connect
+
+[metadata]
+setting_version = 16
+type = quality
+quality_type = high
+weight = 1
+material = generic_cpe
+variant = 0.25 mm
+
+[values]
+cool_fan_speed_min = =cool_fan_speed * 0.2
+cool_min_layer_time = 2
+cool_min_layer_time_fan_speed_max = 15
+cool_min_speed = 15
+infill_sparse_density = 20
+speed_layer_0 = =round(speed_print * 30 / 30)
+speed_print = 30
+top_bottom_thickness = 0.72
+wall_thickness = 0.88
+retraction_combing_max_distance = 50
\ No newline at end of file
diff --git a/resources/quality/ultimaker2_plus_connect/um2pc_cpe_0.4_fast.inst.cfg b/resources/quality/ultimaker2_plus_connect/um2pc_cpe_0.4_fast.inst.cfg
new file mode 100644
index 0000000000..a45f1d3e6c
--- /dev/null
+++ b/resources/quality/ultimaker2_plus_connect/um2pc_cpe_0.4_fast.inst.cfg
@@ -0,0 +1,29 @@
+[general]
+version = 4
+name = Normal
+definition = ultimaker2_plus_connect
+
+[metadata]
+setting_version = 16
+type = quality
+quality_type = fast
+weight = -1
+material = generic_cpe
+variant = 0.4 mm
+
+[values]
+cool_fan_speed_min = =cool_fan_speed * 0.8
+cool_min_layer_time = 3
+cool_min_layer_time_fan_speed_max = 15
+cool_min_speed = 10
+infill_sparse_density = 20
+speed_layer_0 = =round(speed_print * 30 / 45)
+speed_print = 45
+speed_travel = 150
+speed_wall = =math.ceil(speed_print * 40 / 45)
+top_bottom_thickness = 0.75
+wall_thickness = 0.7
+speed_wall_0 = =math.ceil(speed_print * 30 / 45)
+speed_topbottom = =math.ceil(speed_print * 30 / 45)
+speed_wall_x = =math.ceil(speed_print * 40 / 45)
+speed_infill = =math.ceil(speed_print * 45 / 45)
diff --git a/resources/quality/ultimaker2_plus_connect/um2pc_cpe_0.4_high.inst.cfg b/resources/quality/ultimaker2_plus_connect/um2pc_cpe_0.4_high.inst.cfg
new file mode 100644
index 0000000000..bcbc535fe0
--- /dev/null
+++ b/resources/quality/ultimaker2_plus_connect/um2pc_cpe_0.4_high.inst.cfg
@@ -0,0 +1,26 @@
+[general]
+version = 4
+name = Extra Fine
+definition = ultimaker2_plus_connect
+
+[metadata]
+setting_version = 16
+type = quality
+quality_type = high
+weight = 1
+material = generic_cpe
+variant = 0.4 mm
+
+[values]
+cool_fan_speed_min = =cool_fan_speed * 0.8
+cool_min_layer_time = 2
+cool_min_layer_time_fan_speed_max = 15
+cool_min_speed = 15
+infill_sparse_density = 20
+speed_layer_0 = =round(speed_print * 30 / 45)
+speed_print = 45
+speed_wall = =math.ceil(speed_print * 30 / 45)
+top_bottom_thickness = 0.72
+wall_thickness = 1.05
+speed_topbottom = =math.ceil(speed_print * 15 / 45)
+speed_infill = =math.ceil(speed_print * 45 / 45)
diff --git a/resources/quality/ultimaker2_plus_connect/um2pc_cpe_0.4_normal.inst.cfg b/resources/quality/ultimaker2_plus_connect/um2pc_cpe_0.4_normal.inst.cfg
new file mode 100644
index 0000000000..71f2916a3a
--- /dev/null
+++ b/resources/quality/ultimaker2_plus_connect/um2pc_cpe_0.4_normal.inst.cfg
@@ -0,0 +1,24 @@
+[general]
+version = 4
+name = Fine
+definition = ultimaker2_plus_connect
+
+[metadata]
+setting_version = 16
+type = quality
+quality_type = normal
+weight = 0
+material = generic_cpe
+variant = 0.4 mm
+
+[values]
+cool_fan_speed_min = =cool_fan_speed * 0.8
+cool_min_layer_time = 3
+cool_min_layer_time_fan_speed_max = 15
+cool_min_speed = 10
+infill_sparse_density = 20
+speed_layer_0 = =round(speed_print * 30 / 45)
+speed_print = 45
+speed_wall = =math.ceil(speed_print * 30 / 45)
+top_bottom_thickness = 0.8
+wall_thickness = 1.05
diff --git a/resources/quality/ultimaker2_plus_connect/um2pc_cpe_0.6_normal.inst.cfg b/resources/quality/ultimaker2_plus_connect/um2pc_cpe_0.6_normal.inst.cfg
new file mode 100644
index 0000000000..fabf1214ee
--- /dev/null
+++ b/resources/quality/ultimaker2_plus_connect/um2pc_cpe_0.6_normal.inst.cfg
@@ -0,0 +1,24 @@
+[general]
+version = 4
+name = Fine
+definition = ultimaker2_plus_connect
+
+[metadata]
+setting_version = 16
+type = quality
+quality_type = fast
+weight = 0
+material = generic_cpe
+variant = 0.6 mm
+
+[values]
+cool_fan_speed_min = =cool_fan_speed * 0.8
+cool_min_layer_time = 5
+cool_min_layer_time_fan_speed_max = 20
+cool_min_speed = 8
+infill_sparse_density = 20
+speed_layer_0 = =round(speed_print * 30 / 40)
+speed_print = 40
+top_bottom_thickness = 1.2
+wall_thickness = 1.59
+retraction_combing_max_distance = 50
\ No newline at end of file
diff --git a/resources/quality/ultimaker2_plus_connect/um2pc_cpe_0.8_normal.inst.cfg b/resources/quality/ultimaker2_plus_connect/um2pc_cpe_0.8_normal.inst.cfg
new file mode 100644
index 0000000000..96d2433ffa
--- /dev/null
+++ b/resources/quality/ultimaker2_plus_connect/um2pc_cpe_0.8_normal.inst.cfg
@@ -0,0 +1,24 @@
+[general]
+version = 4
+name = Normal
+definition = ultimaker2_plus_connect
+
+[metadata]
+setting_version = 16
+type = quality
+quality_type = draft
+weight = -1
+material = generic_cpe
+variant = 0.8 mm
+
+[values]
+cool_fan_speed_min = =cool_fan_speed * 0.8
+cool_min_layer_time = 3
+cool_min_layer_time_fan_speed_max = 25
+cool_min_speed = 8
+infill_sparse_density = 20
+speed_layer_0 = =round(speed_print * 30 / 40)
+speed_print = 40
+top_bottom_thickness = 1.2
+wall_thickness = 2.1
+retraction_combing_max_distance = 50
\ No newline at end of file
diff --git a/resources/quality/ultimaker2_plus_connect/um2pc_cpep_0.4_draft.inst.cfg b/resources/quality/ultimaker2_plus_connect/um2pc_cpep_0.4_draft.inst.cfg
new file mode 100644
index 0000000000..ed6f5a0c5e
--- /dev/null
+++ b/resources/quality/ultimaker2_plus_connect/um2pc_cpep_0.4_draft.inst.cfg
@@ -0,0 +1,42 @@
+[general]
+version = 4
+name = Fast
+definition = ultimaker2_plus_connect
+
+[metadata]
+setting_version = 16
+type = quality
+quality_type = draft
+weight = -2
+material = generic_cpe_plus
+variant = 0.4 mm
+
+[values]
+cool_fan_speed = 50
+cool_fan_speed_min = =cool_fan_speed * 25 / 50
+cool_min_layer_time = 3
+cool_min_speed = 8
+infill_overlap = 5
+infill_sparse_density = 20
+layer_0_z_overlap = 0.22
+line_width = 0.38
+raft_airgap = 0.37
+raft_base_line_spacing = 1.6
+raft_base_line_width = 0.8
+raft_interface_line_spacing = 1
+raft_interface_line_width = 0.8
+raft_margin = 15
+raft_surface_line_width = 0.38
+speed_layer_0 = =math.ceil(speed_print * 15 / 25)
+speed_print = 25
+speed_topbottom = =math.ceil(speed_print * 20 / 25)
+speed_wall_0 = =math.ceil(speed_print * 20 / 25)
+speed_wall_x = =speed_print
+support_angle = 45
+support_enable = True
+support_infill_rate = =20 if support_enable else 0 if support_tree_enable else 20
+support_pattern = lines
+support_z_distance = 0.26
+top_bottom_thickness = 1.5
+wall_thickness = 1.14
+retraction_combing_max_distance = 50
\ No newline at end of file
diff --git a/resources/quality/ultimaker2_plus_connect/um2pc_cpep_0.4_normal.inst.cfg b/resources/quality/ultimaker2_plus_connect/um2pc_cpep_0.4_normal.inst.cfg
new file mode 100644
index 0000000000..2aebe1e918
--- /dev/null
+++ b/resources/quality/ultimaker2_plus_connect/um2pc_cpep_0.4_normal.inst.cfg
@@ -0,0 +1,42 @@
+[general]
+version = 4
+name = Fine
+definition = ultimaker2_plus_connect
+
+[metadata]
+setting_version = 16
+type = quality
+quality_type = fast
+weight = 0
+material = generic_cpe_plus
+variant = 0.4 mm
+
+[values]
+cool_fan_speed = 50
+cool_fan_speed_min = =cool_fan_speed * 25 / 50
+cool_min_layer_time = 3
+cool_min_speed = 8
+infill_overlap = 5
+infill_sparse_density = 20
+layer_0_z_overlap = 0.22
+line_width = 0.38
+raft_airgap = 0.37
+raft_base_line_spacing = 1.6
+raft_base_line_width = 0.8
+raft_interface_line_spacing = 1
+raft_interface_line_width = 0.8
+raft_margin = 15
+raft_surface_line_width = 0.38
+speed_layer_0 = =math.ceil(speed_print * 15 / 35)
+speed_print = 35
+speed_topbottom = =math.ceil(speed_print * 20 / 35)
+speed_wall_0 = =math.ceil(speed_print * 20 / 35)
+speed_wall_x = =math.ceil(speed_print * 30 / 35)
+support_angle = 45
+support_enable = True
+support_infill_rate = =20 if support_enable else 0 if support_tree_enable else 20
+support_pattern = lines
+support_z_distance = 0.26
+top_bottom_thickness = 1.5
+wall_thickness = 1.14
+retraction_combing_max_distance = 50
\ No newline at end of file
diff --git a/resources/quality/ultimaker2_plus_connect/um2pc_cpep_0.6_draft.inst.cfg b/resources/quality/ultimaker2_plus_connect/um2pc_cpep_0.6_draft.inst.cfg
new file mode 100644
index 0000000000..78ffe10ce9
--- /dev/null
+++ b/resources/quality/ultimaker2_plus_connect/um2pc_cpep_0.6_draft.inst.cfg
@@ -0,0 +1,46 @@
+[general]
+version = 4
+name = Fast
+definition = ultimaker2_plus_connect
+
+[metadata]
+setting_version = 16
+type = quality
+quality_type = slightlycoarse
+weight = -2
+material = generic_cpe_plus
+variant = 0.6 mm
+
+[values]
+cool_fan_speed = 45
+cool_fan_speed_min = =cool_fan_speed * 25 / 45
+cool_min_layer_time = 3
+cool_min_speed = 8
+infill_overlap = 5
+infill_sparse_density = 20
+layer_0_z_overlap = 0.22
+line_width = 0.57
+raft_airgap = 0.37
+raft_base_line_spacing = 2.4
+raft_base_line_width = 1.2
+raft_interface_line_spacing = 1.4
+raft_interface_line_width = 1.2
+raft_margin = 15
+raft_surface_line_width = 0.57
+raft_surface_thickness = 0.2
+speed_layer_0 = =round(speed_print * 30 / 50)
+speed_print = 25
+speed_topbottom = =math.ceil(speed_print * 20 / 25)
+speed_travel = 150
+speed_wall_0 = =math.ceil(speed_print * 20 / 25)
+speed_wall_x = =speed_print
+support_angle = 45
+support_enable = True
+support_infill_rate = =20 if support_enable else 0 if support_tree_enable else 20
+support_line_distance = 2.85
+support_pattern = lines
+support_xy_distance = 0.6
+support_z_distance = 0.22
+top_bottom_thickness = 0.75
+wall_thickness = 1.14
+retraction_combing_max_distance = 50
\ No newline at end of file
diff --git a/resources/quality/ultimaker2_plus_connect/um2pc_cpep_0.6_normal.inst.cfg b/resources/quality/ultimaker2_plus_connect/um2pc_cpep_0.6_normal.inst.cfg
new file mode 100644
index 0000000000..2099ea7cbf
--- /dev/null
+++ b/resources/quality/ultimaker2_plus_connect/um2pc_cpep_0.6_normal.inst.cfg
@@ -0,0 +1,46 @@
+[general]
+version = 4
+name = Fine
+definition = ultimaker2_plus_connect
+
+[metadata]
+setting_version = 16
+type = quality
+quality_type = draft
+weight = 0
+material = generic_cpe_plus
+variant = 0.6 mm
+
+[values]
+cool_fan_speed = 45
+cool_fan_speed_min = =cool_fan_speed * 25 / 45
+cool_min_layer_time = 3
+cool_min_speed = 8
+infill_overlap = 5
+infill_sparse_density = 20
+layer_0_z_overlap = 0.22
+line_width = 0.57
+raft_airgap = 0.37
+raft_base_line_spacing = 2.4
+raft_base_line_width = 1.2
+raft_interface_line_spacing = 1.4
+raft_interface_line_width = 1.2
+raft_margin = 15
+raft_surface_line_width = 0.57
+raft_surface_thickness = 0.2
+speed_layer_0 = =math.ceil(speed_print * 30 / 35)
+speed_print = 35
+speed_topbottom = =math.ceil(speed_print * 20 / 35)
+speed_travel = 150
+speed_wall_0 = =math.ceil(speed_print * 30 / 35)
+speed_wall_x = =speed_print
+support_angle = 45
+support_enable = True
+support_infill_rate = =20 if support_enable else 0 if support_tree_enable else 20
+support_line_distance = 2.85
+support_pattern = lines
+support_xy_distance = 0.6
+support_z_distance = 0.22
+top_bottom_thickness = 0.75
+wall_thickness = 1.14
+retraction_combing_max_distance = 50
\ No newline at end of file
diff --git a/resources/quality/ultimaker2_plus_connect/um2pc_cpep_0.8_draft.inst.cfg b/resources/quality/ultimaker2_plus_connect/um2pc_cpep_0.8_draft.inst.cfg
new file mode 100644
index 0000000000..bf4be03a20
--- /dev/null
+++ b/resources/quality/ultimaker2_plus_connect/um2pc_cpep_0.8_draft.inst.cfg
@@ -0,0 +1,41 @@
+[general]
+version = 4
+name = Fast
+definition = ultimaker2_plus_connect
+
+[metadata]
+setting_version = 16
+type = quality
+quality_type = slightlycoarse
+weight = -2
+material = generic_cpe_plus
+variant = 0.8 mm
+
+[values]
+brim_line_count = 10
+cool_fan_speed = 50
+cool_fan_speed_min = =cool_fan_speed * 25 / 50
+cool_min_layer_time = 3
+infill_overlap = 5
+infill_sparse_density = 20
+layer_0_z_overlap = 0.22
+raft_airgap = 0.37
+raft_base_line_width = 1.6
+raft_interface_line_spacing = 1.8
+raft_interface_line_width = 1.6
+raft_margin = 15
+raft_surface_line_width = 0.7
+raft_surface_thickness = 0.2
+speed_layer_0 = =round(speed_print * 30 / 25)
+speed_print = 25
+speed_topbottom = =math.ceil(speed_print * 20 / 25)
+speed_wall_0 = =math.ceil(speed_print * 20 / 25)
+speed_wall_x = =speed_print
+support_angle = 45
+support_enable = True
+support_infill_rate = =20 if support_enable else 0 if support_tree_enable else 20
+support_pattern = lines
+support_z_distance = 0.26
+top_bottom_thickness = 1.2
+wall_thickness = 2.1
+retraction_combing_max_distance = 50
\ No newline at end of file
diff --git a/resources/quality/ultimaker2_plus_connect/um2pc_cpep_0.8_normal.inst.cfg b/resources/quality/ultimaker2_plus_connect/um2pc_cpep_0.8_normal.inst.cfg
new file mode 100644
index 0000000000..f1dd92db53
--- /dev/null
+++ b/resources/quality/ultimaker2_plus_connect/um2pc_cpep_0.8_normal.inst.cfg
@@ -0,0 +1,41 @@
+[general]
+version = 4
+name = Fine
+definition = ultimaker2_plus_connect
+
+[metadata]
+setting_version = 16
+type = quality
+quality_type = draft
+weight = 0
+material = generic_cpe_plus
+variant = 0.8 mm
+
+[values]
+brim_line_count = 10
+cool_fan_speed = 50
+cool_fan_speed_min = =cool_fan_speed * 25 / 50
+cool_min_layer_time = 3
+infill_overlap = 5
+infill_sparse_density = 20
+layer_0_z_overlap = 0.22
+raft_airgap = 0.37
+raft_base_line_width = 1.6
+raft_interface_line_spacing = 1.8
+raft_interface_line_width = 1.6
+raft_margin = 15
+raft_surface_line_width = 0.7
+raft_surface_thickness = 0.2
+speed_layer_0 = =round(speed_print * 30 / 30)
+speed_print = 30
+speed_topbottom = =math.ceil(speed_print * 20 / 30)
+speed_wall_0 = =math.ceil(speed_print * 20 / 30)
+speed_wall_x = =speed_print
+support_angle = 45
+support_enable = True
+support_infill_rate = =20 if support_enable else 0 if support_tree_enable else 20
+support_pattern = lines
+support_z_distance = 0.26
+top_bottom_thickness = 1.2
+wall_thickness = 2.1
+retraction_combing_max_distance = 50
diff --git a/resources/quality/ultimaker2_plus_connect/um2pc_global_Coarse_Quality.inst.cfg b/resources/quality/ultimaker2_plus_connect/um2pc_global_Coarse_Quality.inst.cfg
new file mode 100644
index 0000000000..e642fb9857
--- /dev/null
+++ b/resources/quality/ultimaker2_plus_connect/um2pc_global_Coarse_Quality.inst.cfg
@@ -0,0 +1,14 @@
+[general]
+version = 4
+name = Coarse Quality
+definition = ultimaker2_plus_connect
+
+[metadata]
+setting_version = 16
+type = quality
+quality_type = coarse
+weight = -4
+global_quality = True
+
+[values]
+layer_height = 0.4
diff --git a/resources/quality/ultimaker2_plus_connect/um2pc_global_Draft_Quality.inst.cfg b/resources/quality/ultimaker2_plus_connect/um2pc_global_Draft_Quality.inst.cfg
new file mode 100644
index 0000000000..27801010ca
--- /dev/null
+++ b/resources/quality/ultimaker2_plus_connect/um2pc_global_Draft_Quality.inst.cfg
@@ -0,0 +1,14 @@
+[general]
+version = 4
+name = Draft Quality
+definition = ultimaker2_plus_connect
+
+[metadata]
+setting_version = 16
+type = quality
+quality_type = draft
+weight = -2
+global_quality = True
+
+[values]
+layer_height = 0.2
diff --git a/resources/quality/ultimaker2_plus_connect/um2pc_global_Extra_Coarse_Quality.inst.cfg b/resources/quality/ultimaker2_plus_connect/um2pc_global_Extra_Coarse_Quality.inst.cfg
new file mode 100644
index 0000000000..8db35032aa
--- /dev/null
+++ b/resources/quality/ultimaker2_plus_connect/um2pc_global_Extra_Coarse_Quality.inst.cfg
@@ -0,0 +1,14 @@
+[general]
+version = 4
+name = Extra Coarse Quality
+definition = ultimaker2_plus_connect
+
+[metadata]
+setting_version = 16
+type = quality
+quality_type = extracoarse
+weight = -3
+global_quality = True
+
+[values]
+layer_height = 0.6
diff --git a/resources/quality/ultimaker2_plus_connect/um2pc_global_Fast_Quality.inst.cfg b/resources/quality/ultimaker2_plus_connect/um2pc_global_Fast_Quality.inst.cfg
new file mode 100644
index 0000000000..39c8927c80
--- /dev/null
+++ b/resources/quality/ultimaker2_plus_connect/um2pc_global_Fast_Quality.inst.cfg
@@ -0,0 +1,14 @@
+[general]
+version = 4
+name = Normal
+definition = ultimaker2_plus_connect
+
+[metadata]
+setting_version = 16
+type = quality
+quality_type = fast
+weight = -1
+global_quality = True
+
+[values]
+layer_height = 0.15
diff --git a/resources/quality/ultimaker2_plus_connect/um2pc_global_High_Quality.inst.cfg b/resources/quality/ultimaker2_plus_connect/um2pc_global_High_Quality.inst.cfg
new file mode 100644
index 0000000000..3e3ca23ac7
--- /dev/null
+++ b/resources/quality/ultimaker2_plus_connect/um2pc_global_High_Quality.inst.cfg
@@ -0,0 +1,14 @@
+[general]
+version = 4
+name = Extra Fine
+definition = ultimaker2_plus_connect
+
+[metadata]
+setting_version = 16
+type = quality
+quality_type = high
+weight = 1
+global_quality = True
+
+[values]
+layer_height = 0.06
diff --git a/resources/quality/ultimaker2_plus_connect/um2pc_global_Normal_Quality.inst.cfg b/resources/quality/ultimaker2_plus_connect/um2pc_global_Normal_Quality.inst.cfg
new file mode 100644
index 0000000000..1530bdb200
--- /dev/null
+++ b/resources/quality/ultimaker2_plus_connect/um2pc_global_Normal_Quality.inst.cfg
@@ -0,0 +1,14 @@
+[general]
+version = 4
+name = Fine
+definition = ultimaker2_plus_connect
+
+[metadata]
+setting_version = 16
+type = quality
+quality_type = normal
+weight = 0
+global_quality = True
+
+[values]
+layer_height = 0.1
diff --git a/resources/quality/ultimaker2_plus_connect/um2pc_global_Slightly_Coarse_Quality.inst.cfg b/resources/quality/ultimaker2_plus_connect/um2pc_global_Slightly_Coarse_Quality.inst.cfg
new file mode 100644
index 0000000000..e3bac84215
--- /dev/null
+++ b/resources/quality/ultimaker2_plus_connect/um2pc_global_Slightly_Coarse_Quality.inst.cfg
@@ -0,0 +1,14 @@
+[general]
+version = 4
+name = Coarse Quality
+definition = ultimaker2_plus_connect
+
+[metadata]
+setting_version = 16
+type = quality
+quality_type = slightlycoarse
+weight = -4
+global_quality = True
+
+[values]
+layer_height = 0.3
diff --git a/resources/quality/ultimaker2_plus_connect/um2pc_nylon_0.25_high.inst.cfg b/resources/quality/ultimaker2_plus_connect/um2pc_nylon_0.25_high.inst.cfg
new file mode 100644
index 0000000000..2fd638f0e9
--- /dev/null
+++ b/resources/quality/ultimaker2_plus_connect/um2pc_nylon_0.25_high.inst.cfg
@@ -0,0 +1,43 @@
+[general]
+version = 4
+name = Extra Fine
+definition = ultimaker2_plus_connect
+
+[metadata]
+setting_version = 16
+type = quality
+quality_type = high
+weight = 1
+material = generic_nylon
+variant = 0.25 mm
+
+[values]
+brim_line_count = 8
+cool_fan_speed = 60
+cool_fan_speed_min = =cool_fan_speed * 35 / 60
+cool_min_speed = 15
+infill_overlap = 5
+infill_sparse_density = 20
+layer_0_z_overlap = 0.1
+raft_airgap = 0.15
+raft_base_line_width = 0.5
+raft_interface_line_spacing = 0.7
+raft_interface_line_width = 0.5
+raft_margin = 15
+raft_surface_line_width = 0.2
+retraction_hop_enabled = 0.2
+speed_layer_0 = =math.ceil(speed_print * 30 / 40)
+speed_print = 40
+speed_support = 40
+speed_topbottom = =math.ceil(speed_print * 35 / 40)
+speed_travel = 150
+speed_wall_0 = =math.ceil(speed_print * 20 / 40)
+speed_wall_x = =speed_print
+support_enable = True
+support_infill_rate = =20 if support_enable else 0 if support_tree_enable else 20
+support_pattern = lines
+support_xy_distance = 0.6
+support_z_distance = =layer_height * 2
+top_bottom_thickness = 1.2
+wall_thickness = 1
+speed_infill = =math.ceil(speed_print * 40 / 40)
diff --git a/resources/quality/ultimaker2_plus_connect/um2pc_nylon_0.25_normal.inst.cfg b/resources/quality/ultimaker2_plus_connect/um2pc_nylon_0.25_normal.inst.cfg
new file mode 100644
index 0000000000..d7a64e12c8
--- /dev/null
+++ b/resources/quality/ultimaker2_plus_connect/um2pc_nylon_0.25_normal.inst.cfg
@@ -0,0 +1,42 @@
+[general]
+version = 4
+name = Fine
+definition = ultimaker2_plus_connect
+
+[metadata]
+setting_version = 16
+type = quality
+quality_type = normal
+weight = 0
+material = generic_nylon
+variant = 0.25 mm
+
+[values]
+brim_line_count = 8
+cool_fan_speed = 60
+cool_fan_speed_min = =cool_fan_speed * 35 / 60
+cool_min_speed = 15
+infill_overlap = 5
+infill_sparse_density = 20
+layer_0_z_overlap = 0.1
+raft_airgap = 0.15
+raft_base_line_width = 0.5
+raft_interface_line_spacing = 0.7
+raft_interface_line_width = 0.5
+raft_margin = 15
+raft_surface_line_width = 0.2
+retraction_hop_enabled = 0.2
+speed_layer_0 = =math.ceil(speed_print * 30 / 40)
+speed_print = 40
+speed_support = 40
+speed_topbottom = =math.ceil(speed_print * 35 / 40)
+speed_travel = 150
+speed_wall_0 = =math.ceil(speed_print * 20 / 40)
+speed_wall_x = =speed_print
+support_enable = True
+support_infill_rate = =20 if support_enable else 0 if support_tree_enable else 20
+support_pattern = lines
+support_xy_distance = 0.6
+support_z_distance = =layer_height * 2
+top_bottom_thickness = 1.2
+wall_thickness = 1
diff --git a/resources/quality/ultimaker2_plus_connect/um2pc_nylon_0.4_fast.inst.cfg b/resources/quality/ultimaker2_plus_connect/um2pc_nylon_0.4_fast.inst.cfg
new file mode 100644
index 0000000000..d62a4e79ee
--- /dev/null
+++ b/resources/quality/ultimaker2_plus_connect/um2pc_nylon_0.4_fast.inst.cfg
@@ -0,0 +1,44 @@
+[general]
+version = 4
+name = Normal
+definition = ultimaker2_plus_connect
+
+[metadata]
+setting_version = 16
+type = quality
+quality_type = draft
+weight = -1
+material = generic_nylon
+variant = 0.4 mm
+
+[values]
+cool_fan_speed_min = =cool_fan_speed * 0.35
+cool_min_layer_time = 3
+cool_min_speed = 15
+infill_overlap = 5
+infill_sparse_density = 20
+layer_0_z_overlap = 0.22
+raft_airgap = 0.57
+raft_base_line_spacing = 1.6
+raft_base_line_width = 0.8
+raft_interface_line_spacing = 1
+raft_interface_line_width = 0.8
+raft_margin = 15
+raft_surface_line_width = 0.5
+raft_surface_thickness = 0.15
+speed_layer_0 = =math.ceil(speed_print * 30 / 45)
+speed_print = 45
+speed_topbottom = =math.ceil(speed_print * 20 / 45)
+speed_travel = 150
+speed_wall = =math.ceil(speed_print * 40 / 45)
+support_angle = 45
+support_enable = True
+support_infill_rate = =25 if support_enable else 0 if support_tree_enable else 25
+support_pattern = lines
+support_xy_distance = 0.6
+support_z_distance = =layer_height * 2
+top_bottom_thickness = 0.75
+wall_thickness = 1.06
+speed_wall_0 = =math.ceil(speed_print * 30 / 45)
+speed_wall_x = =math.ceil(speed_print * 40 / 45)
+speed_infill = =math.ceil(speed_print * 45 / 45)
diff --git a/resources/quality/ultimaker2_plus_connect/um2pc_nylon_0.4_normal.inst.cfg b/resources/quality/ultimaker2_plus_connect/um2pc_nylon_0.4_normal.inst.cfg
new file mode 100644
index 0000000000..a6161c2a07
--- /dev/null
+++ b/resources/quality/ultimaker2_plus_connect/um2pc_nylon_0.4_normal.inst.cfg
@@ -0,0 +1,40 @@
+[general]
+version = 4
+name = Fine
+definition = ultimaker2_plus_connect
+
+[metadata]
+setting_version = 16
+type = quality
+quality_type = fast
+weight = 0
+material = generic_nylon
+variant = 0.4 mm
+
+[values]
+cool_fan_speed_min = =cool_fan_speed * 0.35
+cool_min_layer_time = 3
+cool_min_speed = 15
+infill_overlap = 5
+infill_sparse_density = 20
+layer_0_z_overlap = 0.22
+raft_airgap = 0.57
+raft_base_line_spacing = 1.6
+raft_base_line_width = 0.8
+raft_interface_line_spacing = 1
+raft_interface_line_width = 0.8
+raft_margin = 15
+raft_surface_line_width = 0.5
+raft_surface_thickness = 0.15
+speed_layer_0 = =math.ceil(speed_print * 30 / 45)
+speed_print = 45
+speed_travel = 150
+speed_wall = =math.ceil(speed_print * 40 / 45)
+support_angle = 45
+support_enable = True
+support_infill_rate = =25 if support_enable else 0 if support_tree_enable else 25
+support_pattern = lines
+support_xy_distance = 0.6
+support_z_distance = =layer_height * 2
+top_bottom_thickness = 0.75
+wall_thickness = 1.06
diff --git a/resources/quality/ultimaker2_plus_connect/um2pc_nylon_0.6_fast.inst.cfg b/resources/quality/ultimaker2_plus_connect/um2pc_nylon_0.6_fast.inst.cfg
new file mode 100644
index 0000000000..dbb90918b8
--- /dev/null
+++ b/resources/quality/ultimaker2_plus_connect/um2pc_nylon_0.6_fast.inst.cfg
@@ -0,0 +1,47 @@
+[general]
+version = 4
+name = Normal
+definition = ultimaker2_plus_connect
+
+[metadata]
+setting_version = 16
+type = quality
+quality_type = slightlycoarse
+weight = -1
+material = generic_nylon
+variant = 0.6 mm
+
+[values]
+brim_line_count = 8
+cool_fan_speed_min = =cool_fan_speed * 0.35
+cool_min_speed = 15
+infill_overlap = 5
+infill_sparse_density = 20
+layer_0_z_overlap = 0.22
+raft_airgap = 0.44
+raft_base_line_spacing = 2.4
+raft_base_line_width = 1.2
+raft_interface_line_spacing = 1.4
+raft_interface_line_width = 1.2
+raft_margin = 15
+raft_surface_line_width = 0.6
+raft_surface_thickness = 0.15
+retraction_hop_enabled = 0.2
+speed_layer_0 = =math.ceil(speed_print * 30 / 55)
+speed_print = 55
+speed_support = 40
+speed_topbottom = =math.ceil(speed_print * 35 / 55)
+speed_travel = 150
+speed_wall_0 = =math.ceil(speed_print * 15 / 55)
+speed_wall_x = =math.ceil(speed_print * 40 / 55)
+support_angle = 45
+support_bottom_distance = 0.55
+support_enable = True
+support_infill_rate = =25 if support_enable else 0 if support_tree_enable else 25
+support_pattern = lines
+support_top_distance = 0.55
+support_xy_distance = 0.7
+support_z_distance = =layer_height * 2
+top_bottom_thickness = 1.2
+wall_thickness = 1.2
+speed_infill = =math.ceil(speed_print * 55 / 55)
diff --git a/resources/quality/ultimaker2_plus_connect/um2pc_nylon_0.6_normal.inst.cfg b/resources/quality/ultimaker2_plus_connect/um2pc_nylon_0.6_normal.inst.cfg
new file mode 100644
index 0000000000..172ef69c01
--- /dev/null
+++ b/resources/quality/ultimaker2_plus_connect/um2pc_nylon_0.6_normal.inst.cfg
@@ -0,0 +1,44 @@
+[general]
+version = 4
+name = Fine
+definition = ultimaker2_plus_connect
+
+[metadata]
+setting_version = 16
+type = quality
+quality_type = fast
+weight = 0
+material = generic_nylon
+variant = 0.6 mm
+
+[values]
+brim_line_count = 8
+cool_fan_speed_min = =cool_fan_speed * 0.35
+cool_min_speed = 15
+infill_overlap = 5
+infill_sparse_density = 20
+layer_0_z_overlap = 0.22
+raft_airgap = 0.44
+raft_base_line_spacing = 2.4
+raft_base_line_width = 1.2
+raft_interface_line_spacing = 1.4
+raft_interface_line_width = 1.2
+raft_margin = 15
+raft_surface_line_width = 0.6
+raft_surface_thickness = 0.15
+retraction_hop_enabled = 0.2
+speed_layer_0 = =math.ceil(speed_print * 30 / 55)
+speed_print = 55
+speed_support = 40
+speed_topbottom = =math.ceil(speed_print * 35 / 55)
+speed_travel = 150
+speed_wall_0 = =math.ceil(speed_print * 15 / 55)
+speed_wall_x = =math.ceil(speed_print * 40 / 55)
+support_angle = 45
+support_enable = True
+support_infill_rate = =25 if support_enable else 0 if support_tree_enable else 25
+support_pattern = lines
+support_xy_distance = 0.7
+support_z_distance = =layer_height * 2
+top_bottom_thickness = 1.2
+wall_thickness = 1.2
diff --git a/resources/quality/ultimaker2_plus_connect/um2pc_nylon_0.8_draft.inst.cfg b/resources/quality/ultimaker2_plus_connect/um2pc_nylon_0.8_draft.inst.cfg
new file mode 100644
index 0000000000..c85bacb89e
--- /dev/null
+++ b/resources/quality/ultimaker2_plus_connect/um2pc_nylon_0.8_draft.inst.cfg
@@ -0,0 +1,45 @@
+[general]
+version = 4
+name = Fast
+definition = ultimaker2_plus_connect
+
+[metadata]
+setting_version = 16
+type = quality
+quality_type = slightlycoarse
+weight = -2
+material = generic_nylon
+variant = 0.8 mm
+
+[values]
+brim_line_count = 8
+cool_fan_speed_min = =cool_fan_speed * 0.35
+cool_min_speed = 15
+infill_overlap = 5
+infill_sparse_density = 20
+layer_0_z_overlap = 0.25
+raft_airgap = 0.44
+raft_base_line_width = 1.6
+raft_interface_line_spacing = 1.8
+raft_interface_line_width = 1.6
+raft_margin = 15
+raft_surface_line_width = 0.7
+raft_surface_thickness = 0.2
+retraction_hop_enabled = 0.2
+speed_layer_0 = =math.ceil(speed_print * 30 / 55)
+speed_print = 55
+speed_support = 40
+speed_topbottom = =math.ceil(speed_print * 35 / 55)
+speed_travel = 150
+speed_wall_0 = =math.ceil(speed_print * 15 / 55)
+speed_wall_x = =math.ceil(speed_print * 40 / 55)
+support_angle = 45
+support_bottom_distance = 0.65
+support_enable = True
+support_infill_rate = =25 if support_enable else 0 if support_tree_enable else 25
+support_pattern = lines
+support_top_distance = 0.5
+support_xy_distance = 0.75
+support_z_distance = =layer_height * 2
+top_bottom_thickness = 1.2
+wall_thickness = 2.4
diff --git a/resources/quality/ultimaker2_plus_connect/um2pc_nylon_0.8_normal.inst.cfg b/resources/quality/ultimaker2_plus_connect/um2pc_nylon_0.8_normal.inst.cfg
new file mode 100644
index 0000000000..153f206b19
--- /dev/null
+++ b/resources/quality/ultimaker2_plus_connect/um2pc_nylon_0.8_normal.inst.cfg
@@ -0,0 +1,45 @@
+[general]
+version = 4
+name = Fine
+definition = ultimaker2_plus_connect
+
+[metadata]
+setting_version = 16
+type = quality
+quality_type = draft
+weight = 0
+material = generic_nylon
+variant = 0.8 mm
+
+[values]
+brim_line_count = 8
+cool_fan_speed_min = =cool_fan_speed * 0.35
+cool_min_speed = 15
+infill_overlap = 5
+infill_sparse_density = 20
+layer_0_z_overlap = 0.25
+raft_airgap = 0.44
+raft_base_line_width = 1.6
+raft_interface_line_spacing = 1.8
+raft_interface_line_width = 1.6
+raft_margin = 15
+raft_surface_line_width = 0.7
+raft_surface_thickness = 0.2
+retraction_hop_enabled = 0.2
+speed_layer_0 = =round(speed_print * 30 / 55)
+speed_print = 55
+speed_support = 40
+speed_topbottom = =math.ceil(speed_print * 35 / 55)
+speed_travel = 150
+speed_wall_0 = =math.ceil(speed_print * 15 / 55)
+speed_wall_x = =math.ceil(speed_print * 40 / 55)
+support_angle = 45
+support_bottom_distance = 0.65
+support_enable = True
+support_infill_rate = =25 if support_enable else 0 if support_tree_enable else 25
+support_pattern = lines
+support_top_distance = 0.5
+support_xy_distance = 0.75
+support_z_distance = =layer_height * 2
+top_bottom_thickness = 1.2
+wall_thickness = 2.4
diff --git a/resources/quality/ultimaker2_plus_connect/um2pc_pc_0.25_high.inst.cfg b/resources/quality/ultimaker2_plus_connect/um2pc_pc_0.25_high.inst.cfg
new file mode 100644
index 0000000000..062e7f97b5
--- /dev/null
+++ b/resources/quality/ultimaker2_plus_connect/um2pc_pc_0.25_high.inst.cfg
@@ -0,0 +1,37 @@
+[general]
+version = 4
+name = Extra Fine
+definition = ultimaker2_plus_connect
+
+[metadata]
+setting_version = 16
+type = quality
+quality_type = high
+weight = 1
+material = generic_pc
+variant = 0.25 mm
+
+[values]
+brim_line_count = 32
+cool_fan_speed = 50
+cool_fan_speed_min = 0
+cool_min_layer_time = 2
+cool_min_speed = 15
+infill_overlap = 5
+infill_sparse_density = 20
+layer_0_z_overlap = 0.2
+raft_airgap = 0.25
+raft_base_line_spacing = 1
+raft_base_line_width = 0.5
+raft_interface_line_spacing = 0.7
+raft_interface_line_width = 0.5
+raft_margin = 15
+raft_surface_line_width = 0.2
+speed_layer_0 = =round(speed_print * 30 / 30)
+speed_print = 30
+support_enable = True
+support_infill_rate = =20 if support_enable else 0 if support_tree_enable else 20
+support_pattern = lines
+support_z_distance = 0.19
+wall_thickness = 0.88
+speed_topbottom = =math.ceil(speed_print * 15 / 30)
\ No newline at end of file
diff --git a/resources/quality/ultimaker2_plus_connect/um2pc_pc_0.25_normal.inst.cfg b/resources/quality/ultimaker2_plus_connect/um2pc_pc_0.25_normal.inst.cfg
new file mode 100644
index 0000000000..20ab28f97b
--- /dev/null
+++ b/resources/quality/ultimaker2_plus_connect/um2pc_pc_0.25_normal.inst.cfg
@@ -0,0 +1,36 @@
+[general]
+version = 4
+name = Fine
+definition = ultimaker2_plus_connect
+
+[metadata]
+setting_version = 16
+type = quality
+quality_type = normal
+weight = 0
+material = generic_pc
+variant = 0.25 mm
+
+[values]
+brim_line_count = 32
+cool_fan_speed = 50
+cool_fan_speed_min = 0
+cool_min_layer_time = 2
+cool_min_speed = 15
+infill_overlap = 5
+infill_sparse_density = 20
+layer_0_z_overlap = 0.2
+raft_airgap = 0.25
+raft_base_line_spacing = 1
+raft_base_line_width = 0.5
+raft_interface_line_spacing = 0.7
+raft_interface_line_width = 0.5
+raft_margin = 15
+raft_surface_line_width = 0.2
+speed_layer_0 = =round(speed_print * 30 / 30)
+speed_print = 30
+support_enable = True
+support_infill_rate = =20 if support_enable else 0 if support_tree_enable else 20
+support_pattern = lines
+support_z_distance = 0.19
+wall_thickness = 0.88
diff --git a/resources/quality/ultimaker2_plus_connect/um2pc_pc_0.4_fast.inst.cfg b/resources/quality/ultimaker2_plus_connect/um2pc_pc_0.4_fast.inst.cfg
new file mode 100644
index 0000000000..249bfb9053
--- /dev/null
+++ b/resources/quality/ultimaker2_plus_connect/um2pc_pc_0.4_fast.inst.cfg
@@ -0,0 +1,39 @@
+[general]
+version = 4
+name = Normal
+definition = ultimaker2_plus_connect
+
+[metadata]
+setting_version = 16
+type = quality
+quality_type = draft
+weight = -1
+material = generic_pc
+variant = 0.4 mm
+
+[values]
+cool_fan_speed = 50
+cool_fan_speed_min = 0
+cool_min_layer_time = 3
+cool_min_speed = 8
+infill_overlap = 5
+infill_sparse_density = 20
+layer_0_z_overlap = 0.3
+raft_airgap = 0.35
+raft_base_line_spacing = 1.6
+raft_base_line_width = 0.8
+raft_interface_line_spacing = 1
+raft_interface_line_width = 0.8
+raft_margin = 15
+speed_layer_0 = =round(speed_print * 30 / 45)
+speed_print = 45
+speed_wall_0 = =math.ceil(speed_print * 20 / 45)
+speed_wall_x = =math.ceil(speed_print * 30 / 45)
+support_angle = 45
+support_enable = True
+support_infill_rate = =20 if support_enable else 0 if support_tree_enable else 20
+support_pattern = lines
+support_z_distance = 0.19
+wall_thickness = 1.2
+speed_topbottom = =math.ceil(speed_print * 30 / 45)
+speed_infill = =math.ceil(speed_print * 45 / 45)
diff --git a/resources/quality/ultimaker2_plus_connect/um2pc_pc_0.4_normal.inst.cfg b/resources/quality/ultimaker2_plus_connect/um2pc_pc_0.4_normal.inst.cfg
new file mode 100644
index 0000000000..86a2dabb6f
--- /dev/null
+++ b/resources/quality/ultimaker2_plus_connect/um2pc_pc_0.4_normal.inst.cfg
@@ -0,0 +1,37 @@
+[general]
+version = 4
+name = Fine
+definition = ultimaker2_plus_connect
+
+[metadata]
+setting_version = 16
+type = quality
+quality_type = normal
+weight = 0
+material = generic_pc
+variant = 0.4 mm
+
+[values]
+cool_fan_speed = 50
+cool_fan_speed_min = 0
+cool_min_layer_time = 3
+cool_min_speed = 8
+infill_overlap = 5
+infill_sparse_density = 20
+layer_0_z_overlap = 0.3
+raft_airgap = 0.35
+raft_base_line_spacing = 1.6
+raft_base_line_width = 0.8
+raft_interface_line_spacing = 1
+raft_interface_line_width = 0.8
+raft_margin = 15
+speed_layer_0 = =round(speed_print * 30 / 45)
+speed_print = 45
+speed_wall_0 = =math.ceil(speed_print * 20 / 45)
+speed_wall_x = =math.ceil(speed_print * 30 / 45)
+support_angle = 45
+support_enable = True
+support_infill_rate = =20 if support_enable else 0 if support_tree_enable else 20
+support_pattern = lines
+support_z_distance = 0.19
+wall_thickness = 1.2
diff --git a/resources/quality/ultimaker2_plus_connect/um2pc_pc_0.6_fast.inst.cfg b/resources/quality/ultimaker2_plus_connect/um2pc_pc_0.6_fast.inst.cfg
new file mode 100644
index 0000000000..95bbbff2d3
--- /dev/null
+++ b/resources/quality/ultimaker2_plus_connect/um2pc_pc_0.6_fast.inst.cfg
@@ -0,0 +1,44 @@
+[general]
+version = 4
+name = Normal
+definition = ultimaker2_plus_connect
+
+[metadata]
+setting_version = 16
+type = quality
+quality_type = slightlycoarse
+weight = -1
+material = generic_pc
+variant = 0.6 mm
+
+[values]
+cool_fan_speed = 50
+cool_fan_speed_min = 0
+cool_min_layer_time = 3
+cool_min_speed = 8
+infill_overlap = 5
+infill_sparse_density = 20
+layer_0_z_overlap = 0.22
+raft_airgap = 0.52
+raft_base_line_spacing = 2.4
+raft_base_line_width = 1.2
+raft_interface_line_spacing = 1.4
+raft_interface_line_width = 1.2
+raft_margin = 15
+raft_surface_line_width = 0.6
+raft_surface_thickness = 0.15
+speed_layer_0 = =math.ceil(speed_print * 30 / 45)
+speed_print = 45
+speed_topbottom = =math.ceil(speed_print * 20 / 45)
+speed_travel = 150
+speed_wall_0 = =math.ceil(speed_print * 30 / 45)
+speed_wall_x = =math.ceil(speed_print * 40 / 45)
+support_angle = 45
+support_enable = True
+support_infill_rate = =20 if support_enable else 0 if support_tree_enable else 20
+support_line_distance = 3.5333
+support_pattern = lines
+support_z_distance = 0.21
+top_bottom_thickness = 0.75
+wall_thickness = 1.06
+speed_infill = =math.ceil(speed_print * 45 / 45)
diff --git a/resources/quality/ultimaker2_plus_connect/um2pc_pc_0.6_normal.inst.cfg b/resources/quality/ultimaker2_plus_connect/um2pc_pc_0.6_normal.inst.cfg
new file mode 100644
index 0000000000..c4f451d972
--- /dev/null
+++ b/resources/quality/ultimaker2_plus_connect/um2pc_pc_0.6_normal.inst.cfg
@@ -0,0 +1,43 @@
+[general]
+version = 4
+name = Fine
+definition = ultimaker2_plus_connect
+
+[metadata]
+setting_version = 16
+type = quality
+quality_type = fast
+weight = 0
+material = generic_pc
+variant = 0.6 mm
+
+[values]
+cool_fan_speed = 50
+cool_fan_speed_min = 0
+cool_min_layer_time = 3
+cool_min_speed = 8
+infill_overlap = 5
+infill_sparse_density = 20
+layer_0_z_overlap = 0.22
+raft_airgap = 0.52
+raft_base_line_spacing = 2.4
+raft_base_line_width = 1.2
+raft_interface_line_spacing = 1.4
+raft_interface_line_width = 1.2
+raft_margin = 15
+raft_surface_line_width = 0.6
+raft_surface_thickness = 0.15
+speed_layer_0 = =math.ceil(speed_print * 30 / 45)
+speed_print = 45
+speed_topbottom = =math.ceil(speed_print * 20 / 45)
+speed_travel = 150
+speed_wall_0 = =math.ceil(speed_print * 30 / 45)
+speed_wall_x = =math.ceil(speed_print * 40 / 45)
+support_angle = 45
+support_enable = True
+support_infill_rate = =20 if support_enable else 0 if support_tree_enable else 20
+support_line_distance = 3.5333
+support_pattern = lines
+support_z_distance = 0.21
+top_bottom_thickness = 0.75
+wall_thickness = 1.06
diff --git a/resources/quality/ultimaker2_plus_connect/um2pc_pc_0.8_normal.inst.cfg b/resources/quality/ultimaker2_plus_connect/um2pc_pc_0.8_normal.inst.cfg
new file mode 100644
index 0000000000..c9fe800c7b
--- /dev/null
+++ b/resources/quality/ultimaker2_plus_connect/um2pc_pc_0.8_normal.inst.cfg
@@ -0,0 +1,37 @@
+[general]
+version = 4
+name = Fine
+definition = ultimaker2_plus_connect
+
+[metadata]
+setting_version = 16
+type = quality
+quality_type = draft
+weight = 0
+material = generic_pc
+variant = 0.8 mm
+
+[values]
+brim_line_count = 10
+cool_fan_speed = 50
+cool_fan_speed_min = =cool_fan_speed * 25 / 50
+cool_min_layer_time = 3
+infill_overlap = 5
+infill_sparse_density = 20
+layer_0_z_overlap = 0.22
+raft_airgap = 0.47
+raft_base_line_width = 1.6
+raft_interface_line_spacing = 1.8
+raft_interface_line_width = 1.6
+raft_margin = 15
+raft_surface_line_width = 0.7
+raft_surface_thickness = 0.2
+speed_layer_0 = =round(speed_print * 30 / 40)
+speed_print = 40
+support_angle = 45
+support_enable = True
+support_infill_rate = =20 if support_enable else 0 if support_tree_enable else 20
+support_pattern = lines
+support_z_distance = 0.26
+top_bottom_thickness = 1.2
+wall_thickness = 2.1
diff --git a/resources/quality/ultimaker2_plus_connect/um2pc_pla_0.25_normal.inst.cfg b/resources/quality/ultimaker2_plus_connect/um2pc_pla_0.25_normal.inst.cfg
new file mode 100644
index 0000000000..3c2288f052
--- /dev/null
+++ b/resources/quality/ultimaker2_plus_connect/um2pc_pla_0.25_normal.inst.cfg
@@ -0,0 +1,21 @@
+[general]
+version = 4
+name = Extra Fine
+definition = ultimaker2_plus_connect
+
+[metadata]
+setting_version = 16
+type = quality
+quality_type = high
+weight = 1
+material = generic_pla
+variant = 0.25 mm
+
+[values]
+cool_min_layer_time = 5
+cool_min_speed = 10
+infill_sparse_density = 20
+speed_layer_0 = =round(speed_print * 30 / 30)
+speed_print = 30
+top_bottom_thickness = 0.72
+wall_thickness = 0.88
diff --git a/resources/quality/ultimaker2_plus_connect/um2pc_pla_0.4_draft.inst.cfg b/resources/quality/ultimaker2_plus_connect/um2pc_pla_0.4_draft.inst.cfg
new file mode 100644
index 0000000000..48d37de4c6
--- /dev/null
+++ b/resources/quality/ultimaker2_plus_connect/um2pc_pla_0.4_draft.inst.cfg
@@ -0,0 +1,24 @@
+[general]
+version = 4
+name = Fast
+definition = ultimaker2_plus_connect
+
+[metadata]
+setting_version = 16
+type = quality
+quality_type = draft
+weight = -2
+material = generic_pla
+variant = 0.4 mm
+
+[values]
+cool_min_layer_time = 5
+cool_min_speed = 10
+infill_sparse_density = 20
+speed_layer_0 = =round(speed_print * 30 / 60)
+speed_print = 60
+speed_topbottom = =math.ceil(speed_print * 30 / 60)
+speed_travel = 150
+speed_wall = =math.ceil(speed_print * 50 / 60)
+top_bottom_thickness = 0.75
+wall_thickness = 0.7
diff --git a/resources/quality/ultimaker2_plus_connect/um2pc_pla_0.4_fast.inst.cfg b/resources/quality/ultimaker2_plus_connect/um2pc_pla_0.4_fast.inst.cfg
new file mode 100644
index 0000000000..23e1a1396a
--- /dev/null
+++ b/resources/quality/ultimaker2_plus_connect/um2pc_pla_0.4_fast.inst.cfg
@@ -0,0 +1,24 @@
+[general]
+version = 4
+name = Normal
+definition = ultimaker2_plus_connect
+
+[metadata]
+setting_version = 16
+type = quality
+quality_type = fast
+weight = -1
+material = generic_pla
+variant = 0.4 mm
+
+[values]
+cool_min_layer_time = 5
+cool_min_speed = 10
+infill_sparse_density = 20
+speed_layer_0 = =round(speed_print * 30 / 60)
+speed_print = 60
+speed_topbottom = =math.ceil(speed_print * 30 / 60)
+speed_travel = 150
+speed_wall = =math.ceil(speed_print * 50 / 60)
+top_bottom_thickness = 0.75
+wall_thickness = 0.7
diff --git a/resources/quality/ultimaker2_plus_connect/um2pc_pla_0.4_high.inst.cfg b/resources/quality/ultimaker2_plus_connect/um2pc_pla_0.4_high.inst.cfg
new file mode 100644
index 0000000000..8e8cea39df
--- /dev/null
+++ b/resources/quality/ultimaker2_plus_connect/um2pc_pla_0.4_high.inst.cfg
@@ -0,0 +1,22 @@
+[general]
+version = 4
+name = Extra Fine
+definition = ultimaker2_plus_connect
+
+[metadata]
+setting_version = 16
+type = quality
+quality_type = high
+weight = 1
+material = generic_pla
+variant = 0.4 mm
+
+[values]
+cool_min_layer_time = 5
+cool_min_speed = 10
+infill_sparse_density = 20
+speed_layer_0 = =round(speed_print * 30 / 50)
+speed_print = 50
+speed_topbottom = =math.ceil(speed_print * 20 / 50)
+top_bottom_thickness = 0.72
+wall_thickness = 1.05
diff --git a/resources/quality/ultimaker2_plus_connect/um2pc_pla_0.4_normal.inst.cfg b/resources/quality/ultimaker2_plus_connect/um2pc_pla_0.4_normal.inst.cfg
new file mode 100644
index 0000000000..68c1a2960e
--- /dev/null
+++ b/resources/quality/ultimaker2_plus_connect/um2pc_pla_0.4_normal.inst.cfg
@@ -0,0 +1,22 @@
+[general]
+version = 4
+name = Fine
+definition = ultimaker2_plus_connect
+
+[metadata]
+setting_version = 16
+type = quality
+quality_type = normal
+weight = 0
+material = generic_pla
+variant = 0.4 mm
+
+[values]
+cool_min_layer_time = 5
+cool_min_speed = 10
+infill_sparse_density = 20
+speed_layer_0 = =round(speed_print * 30 / 50)
+speed_print = 50
+speed_topbottom = =math.ceil(speed_print * 20 / 50)
+top_bottom_thickness = 0.8
+wall_thickness = 1.05
diff --git a/resources/quality/ultimaker2_plus_connect/um2pc_pla_0.6_normal.inst.cfg b/resources/quality/ultimaker2_plus_connect/um2pc_pla_0.6_normal.inst.cfg
new file mode 100644
index 0000000000..942f69c910
--- /dev/null
+++ b/resources/quality/ultimaker2_plus_connect/um2pc_pla_0.6_normal.inst.cfg
@@ -0,0 +1,24 @@
+[general]
+version = 4
+name = Fine
+definition = ultimaker2_plus_connect
+
+[metadata]
+setting_version = 16
+type = quality
+quality_type = fast
+weight = 0
+material = generic_pla
+variant = 0.6 mm
+
+[values]
+cool_min_layer_time = 5
+cool_min_speed = 10
+infill_sparse_density = 20
+speed_layer_0 = =round(speed_print * 30 / 55)
+speed_print = 55
+speed_topbottom = =math.ceil(speed_print * 20 / 55)
+speed_wall = =math.ceil(speed_print * 40 / 55)
+speed_wall_0 = =math.ceil(speed_print * 25 / 55)
+top_bottom_thickness = 1.2
+wall_thickness = 1.59
diff --git a/resources/quality/ultimaker2_plus_connect/um2pc_pla_0.8_normal.inst.cfg b/resources/quality/ultimaker2_plus_connect/um2pc_pla_0.8_normal.inst.cfg
new file mode 100644
index 0000000000..3bae17f1a7
--- /dev/null
+++ b/resources/quality/ultimaker2_plus_connect/um2pc_pla_0.8_normal.inst.cfg
@@ -0,0 +1,22 @@
+[general]
+version = 4
+name = Normal
+definition = ultimaker2_plus_connect
+
+[metadata]
+setting_version = 16
+type = quality
+quality_type = draft
+weight = -1
+material = generic_pla
+variant = 0.8 mm
+
+[values]
+cool_min_layer_time = 5
+cool_min_speed = 10
+infill_sparse_density = 20
+speed_layer_0 = =round(speed_print * 30 / 40)
+speed_print = 40
+speed_wall_0 = =math.ceil(speed_print * 25 / 40)
+top_bottom_thickness = 1.2
+wall_thickness = 2.1
diff --git a/resources/quality/ultimaker2_plus_connect/um2pc_pp_0.4_fast.inst.cfg b/resources/quality/ultimaker2_plus_connect/um2pc_pp_0.4_fast.inst.cfg
new file mode 100644
index 0000000000..787cf2d779
--- /dev/null
+++ b/resources/quality/ultimaker2_plus_connect/um2pc_pp_0.4_fast.inst.cfg
@@ -0,0 +1,72 @@
+[general]
+version = 4
+name = Normal
+definition = ultimaker2_plus_connect
+
+[metadata]
+setting_version = 16
+type = quality
+quality_type = fast
+weight = -1
+material = generic_pp
+variant = 0.4 mm
+
+[values]
+acceleration_enabled = True
+acceleration_layer_0 = =acceleration_topbottom
+acceleration_prime_tower = =math.ceil(acceleration_print * 2000 / 4000)
+acceleration_print = 4000
+acceleration_support = =math.ceil(acceleration_print * 2000 / 4000)
+acceleration_support_interface = =acceleration_topbottom
+acceleration_topbottom = =math.ceil(acceleration_print * 500 / 4000)
+acceleration_wall = =math.ceil(acceleration_print * 1000 / 4000)
+acceleration_wall_0 = =math.ceil(acceleration_wall * 500 / 1000)
+brim_width = 20
+cool_fan_full_at_height = =layer_height_0 + 4 * layer_height
+cool_fan_speed_max = 100
+cool_min_layer_time_fan_speed_max = 6
+cool_min_speed = 20
+infill_line_width = =round(line_width * 0.4 / 0.38, 2)
+infill_overlap = 0
+infill_pattern = tetrahedral
+infill_wipe_dist = 0
+jerk_enabled = True
+jerk_layer_0 = =jerk_topbottom
+jerk_prime_tower = =math.ceil(jerk_print * 15 / 25)
+jerk_print = 25
+jerk_support = =math.ceil(jerk_print * 15 / 25)
+jerk_support_interface = =jerk_topbottom
+jerk_topbottom = =math.ceil(jerk_print * 5 / 25)
+jerk_wall = =math.ceil(jerk_print * 10 / 25)
+jerk_wall_0 = =math.ceil(jerk_wall * 5 / 10)
+line_width = =machine_nozzle_size * 0.95
+multiple_mesh_overlap = 0
+retraction_count_max = 12
+retraction_extrusion_window = 1
+retraction_hop = 0.15
+retraction_hop_enabled = True
+retraction_hop_only_when_collides = True
+retraction_min_travel = 0.5
+retraction_prime_speed = 15
+skin_overlap = 10
+speed_layer_0 = =speed_print
+speed_prime_tower = =speed_topbottom
+speed_print = 25
+speed_support_interface = =speed_topbottom
+speed_topbottom = =math.ceil(speed_print * 25 / 25)
+speed_travel = 250
+speed_travel_layer_0 = 50
+speed_wall = =math.ceil(speed_print * 25 / 25)
+speed_wall_0 = =math.ceil(speed_wall * 20 / 25)
+support_angle = 60
+support_bottom_distance = =support_z_distance / 2
+support_top_distance = =support_z_distance
+support_xy_distance = =wall_line_width_0 * 2.5
+support_xy_distance_overhang = =wall_line_width_0
+support_z_distance = =layer_height * 2
+travel_avoid_distance = 3
+wall_0_inset = 0
+wall_line_width_x = =round(line_width * 0.38 / 0.38, 2)
+wall_thickness = 0.76
+speed_wall_x = =math.ceil(speed_print * 25 / 25)
+speed_infill = =math.ceil(speed_print * 25 / 25)
diff --git a/resources/quality/ultimaker2_plus_connect/um2pc_pp_0.4_normal.inst.cfg b/resources/quality/ultimaker2_plus_connect/um2pc_pp_0.4_normal.inst.cfg
new file mode 100644
index 0000000000..48062237b6
--- /dev/null
+++ b/resources/quality/ultimaker2_plus_connect/um2pc_pp_0.4_normal.inst.cfg
@@ -0,0 +1,70 @@
+[general]
+version = 4
+name = Fine
+definition = ultimaker2_plus_connect
+
+[metadata]
+setting_version = 16
+type = quality
+quality_type = normal
+weight = 0
+material = generic_pp
+variant = 0.4 mm
+
+[values]
+acceleration_enabled = True
+acceleration_layer_0 = =acceleration_topbottom
+acceleration_prime_tower = =math.ceil(acceleration_print * 2000 / 4000)
+acceleration_print = 4000
+acceleration_support = =math.ceil(acceleration_print * 2000 / 4000)
+acceleration_support_interface = =acceleration_topbottom
+acceleration_topbottom = =math.ceil(acceleration_print * 500 / 4000)
+acceleration_wall = =math.ceil(acceleration_print * 1000 / 4000)
+acceleration_wall_0 = =math.ceil(acceleration_wall * 500 / 1000)
+brim_width = 20
+cool_fan_full_at_height = =layer_height_0 + 4 * layer_height
+cool_fan_speed_max = 100
+cool_min_layer_time_fan_speed_max = 6
+cool_min_speed = 20
+infill_line_width = =round(line_width * 0.4 / 0.38, 2)
+infill_overlap = 0
+infill_pattern = tetrahedral
+infill_wipe_dist = 0
+jerk_enabled = True
+jerk_layer_0 = =jerk_topbottom
+jerk_prime_tower = =math.ceil(jerk_print * 15 / 25)
+jerk_print = 25
+jerk_support = =math.ceil(jerk_print * 15 / 25)
+jerk_support_interface = =jerk_topbottom
+jerk_topbottom = =math.ceil(jerk_print * 5 / 25)
+jerk_wall = =math.ceil(jerk_print * 10 / 25)
+jerk_wall_0 = =math.ceil(jerk_wall * 5 / 10)
+line_width = =machine_nozzle_size * 0.95
+multiple_mesh_overlap = 0
+retraction_count_max = 12
+retraction_extrusion_window = 1
+retraction_hop = 0.15
+retraction_hop_enabled = True
+retraction_hop_only_when_collides = True
+retraction_min_travel = 0.5
+retraction_prime_speed = 15
+skin_overlap = 10
+speed_layer_0 = =speed_print
+speed_prime_tower = =speed_topbottom
+speed_print = 25
+speed_support_interface = =speed_topbottom
+speed_topbottom = =math.ceil(speed_print * 25 / 25)
+speed_travel = 250
+speed_travel_layer_0 = 50
+speed_wall = =math.ceil(speed_print * 25 / 25)
+speed_wall_0 = =math.ceil(speed_wall * 20 / 25)
+support_angle = 60
+support_bottom_distance = =support_z_distance / 2
+support_top_distance = =support_z_distance
+support_xy_distance = =wall_line_width_0 * 2.5
+support_xy_distance_overhang = =wall_line_width_0
+support_z_distance = =layer_height * 2
+travel_avoid_distance = 3
+wall_0_inset = 0
+wall_line_width_x = =round(line_width * 0.38 / 0.38, 2)
+wall_thickness = 0.76
diff --git a/resources/quality/ultimaker2_plus_connect/um2pc_pp_0.6_draft.inst.cfg b/resources/quality/ultimaker2_plus_connect/um2pc_pp_0.6_draft.inst.cfg
new file mode 100644
index 0000000000..86cecc00f0
--- /dev/null
+++ b/resources/quality/ultimaker2_plus_connect/um2pc_pp_0.6_draft.inst.cfg
@@ -0,0 +1,71 @@
+[general]
+version = 4
+name = Fast
+definition = ultimaker2_plus_connect
+
+[metadata]
+setting_version = 16
+type = quality
+quality_type = draft
+weight = -2
+material = generic_pp
+variant = 0.6 mm
+
+[values]
+acceleration_enabled = True
+acceleration_layer_0 = =acceleration_topbottom
+acceleration_prime_tower = =math.ceil(acceleration_print * 2000 / 4000)
+acceleration_print = 4000
+acceleration_support = =math.ceil(acceleration_print * 2000 / 4000)
+acceleration_support_interface = =acceleration_topbottom
+acceleration_topbottom = =math.ceil(acceleration_print * 500 / 4000)
+acceleration_wall = =math.ceil(acceleration_print * 1000 / 4000)
+acceleration_wall_0 = =math.ceil(acceleration_wall * 500 / 1000)
+brim_width = 20
+cool_fan_full_at_height = =layer_height_0 + 4 * layer_height
+cool_fan_speed_max = 100
+cool_min_layer_time_fan_speed_max = 6
+cool_min_speed = 20
+infill_line_width = =round(line_width * 0.6 / 0.57, 2)
+infill_overlap = 0
+infill_pattern = tetrahedral
+infill_wipe_dist = 0
+jerk_enabled = True
+jerk_layer_0 = =jerk_topbottom
+jerk_prime_tower = =math.ceil(jerk_print * 15 / 25)
+jerk_print = 25
+jerk_support = =math.ceil(jerk_print * 15 / 25)
+jerk_support_interface = =jerk_topbottom
+jerk_topbottom = =math.ceil(jerk_print * 5 / 25)
+jerk_wall = =math.ceil(jerk_print * 10 / 25)
+jerk_wall_0 = =math.ceil(jerk_wall * 5 / 10)
+line_width = =machine_nozzle_size * 0.95
+multiple_mesh_overlap = 0
+retraction_count_max = 12
+retraction_extrusion_window = 1
+retraction_hop = 0.15
+retraction_hop_enabled = True
+retraction_hop_only_when_collides = True
+retraction_prime_speed = 15
+skin_overlap = 10
+skirt_brim_line_width = 0.6
+speed_layer_0 = =speed_print
+speed_prime_tower = =speed_topbottom
+speed_print = 25
+speed_support_interface = =speed_topbottom
+speed_topbottom = =math.ceil(speed_print * 25 / 25)
+speed_travel = 250
+speed_travel_layer_0 = 50
+speed_wall = =math.ceil(speed_print * 25 / 25)
+speed_wall_0 = =math.ceil(speed_wall * 20 / 25)
+support_angle = 60
+support_bottom_distance = =support_z_distance / 2
+support_top_distance = =support_z_distance
+support_xy_distance = =wall_line_width_0 * 2.5
+support_xy_distance_overhang = =wall_line_width_0
+support_z_distance = =layer_height * 2
+top_bottom_thickness = 1.1
+travel_avoid_distance = 3
+wall_0_inset = 0
+wall_line_width_x = =round(line_width * 0.57 / 0.57, 2)
+wall_thickness = 1.14
diff --git a/resources/quality/ultimaker2_plus_connect/um2pc_pp_0.6_fast.inst.cfg b/resources/quality/ultimaker2_plus_connect/um2pc_pp_0.6_fast.inst.cfg
new file mode 100644
index 0000000000..6e21a94da9
--- /dev/null
+++ b/resources/quality/ultimaker2_plus_connect/um2pc_pp_0.6_fast.inst.cfg
@@ -0,0 +1,73 @@
+[general]
+version = 4
+name = Normal
+definition = ultimaker2_plus_connect
+
+[metadata]
+setting_version = 16
+type = quality
+quality_type = fast
+weight = -1
+material = generic_pp
+variant = 0.6 mm
+
+[values]
+acceleration_enabled = True
+acceleration_layer_0 = =acceleration_topbottom
+acceleration_prime_tower = =math.ceil(acceleration_print * 2000 / 4000)
+acceleration_print = 4000
+acceleration_support = =math.ceil(acceleration_print * 2000 / 4000)
+acceleration_support_interface = =acceleration_topbottom
+acceleration_topbottom = =math.ceil(acceleration_print * 500 / 4000)
+acceleration_wall = =math.ceil(acceleration_print * 1000 / 4000)
+acceleration_wall_0 = =math.ceil(acceleration_wall * 500 / 1000)
+brim_width = 20
+cool_fan_full_at_height = =layer_height_0 + 4 * layer_height
+cool_fan_speed_max = 100
+cool_min_layer_time_fan_speed_max = 6
+cool_min_speed = 20
+infill_line_width = =round(line_width * 0.6 / 0.57, 2)
+infill_overlap = 0
+infill_pattern = tetrahedral
+infill_wipe_dist = 0
+jerk_enabled = True
+jerk_layer_0 = =jerk_topbottom
+jerk_prime_tower = =math.ceil(jerk_print * 15 / 25)
+jerk_print = 25
+jerk_support = =math.ceil(jerk_print * 15 / 25)
+jerk_support_interface = =jerk_topbottom
+jerk_topbottom = =math.ceil(jerk_print * 5 / 25)
+jerk_wall = =math.ceil(jerk_print * 10 / 25)
+jerk_wall_0 = =math.ceil(jerk_wall * 5 / 10)
+line_width = =machine_nozzle_size * 0.95
+multiple_mesh_overlap = 0
+retraction_count_max = 12
+retraction_extrusion_window = 1
+retraction_hop = 0.15
+retraction_hop_enabled = True
+retraction_hop_only_when_collides = True
+retraction_prime_speed = 15
+skin_overlap = 10
+skirt_brim_line_width = 0.6
+speed_layer_0 = =speed_print
+speed_prime_tower = =speed_topbottom
+speed_print = 25
+speed_support_interface = =speed_topbottom
+speed_topbottom = =math.ceil(speed_print * 25 / 25)
+speed_travel = 250
+speed_travel_layer_0 = 50
+speed_wall = =math.ceil(speed_print * 25 / 25)
+speed_wall_0 = =math.ceil(speed_wall * 20 / 25)
+support_angle = 60
+support_bottom_distance = =support_z_distance / 2
+support_top_distance = =support_z_distance
+support_xy_distance = =wall_line_width_0 * 2.5
+support_xy_distance_overhang = =wall_line_width_0
+support_z_distance = =layer_height * 2
+top_bottom_thickness = 1.1
+travel_avoid_distance = 3
+wall_0_inset = 0
+wall_line_width_x = =round(line_width * 0.57 / 0.57, 2)
+wall_thickness = 1.14
+speed_wall_x = =math.ceil(speed_print * 25 / 25)
+speed_infill = =math.ceil(speed_print * 25 / 25)
diff --git a/resources/quality/ultimaker2_plus_connect/um2pc_pp_0.8_draft.inst.cfg b/resources/quality/ultimaker2_plus_connect/um2pc_pp_0.8_draft.inst.cfg
new file mode 100644
index 0000000000..d93d807812
--- /dev/null
+++ b/resources/quality/ultimaker2_plus_connect/um2pc_pp_0.8_draft.inst.cfg
@@ -0,0 +1,71 @@
+[general]
+version = 4
+name = Fast
+definition = ultimaker2_plus_connect
+
+[metadata]
+setting_version = 16
+type = quality
+quality_type = draft
+weight = -2
+material = generic_pp
+variant = 0.8 mm
+
+[values]
+acceleration_enabled = True
+acceleration_layer_0 = =acceleration_topbottom
+acceleration_prime_tower = =math.ceil(acceleration_print * 2000 / 4000)
+acceleration_print = 4000
+acceleration_support = =math.ceil(acceleration_print * 2000 / 4000)
+acceleration_support_interface = =acceleration_topbottom
+acceleration_topbottom = =math.ceil(acceleration_print * 500 / 4000)
+acceleration_wall = =math.ceil(acceleration_print * 1000 / 4000)
+acceleration_wall_0 = =math.ceil(acceleration_wall * 500 / 1000)
+brim_width = 20
+cool_fan_full_at_height = =layer_height_0 + 4 * layer_height
+cool_fan_speed_max = 100
+cool_min_layer_time_fan_speed_max = 6
+cool_min_speed = 20
+infill_line_width = =round(line_width * 0.8 / 0.76, 2)
+infill_overlap = 0
+infill_pattern = tetrahedral
+infill_wipe_dist = 0
+jerk_enabled = True
+jerk_layer_0 = =jerk_topbottom
+jerk_prime_tower = =math.ceil(jerk_print * 15 / 25)
+jerk_print = 25
+jerk_support = =math.ceil(jerk_print * 15 / 25)
+jerk_support_interface = =jerk_topbottom
+jerk_topbottom = =math.ceil(jerk_print * 5 / 25)
+jerk_wall = =math.ceil(jerk_print * 10 / 25)
+jerk_wall_0 = =math.ceil(jerk_wall * 5 / 10)
+line_width = =machine_nozzle_size * 0.95
+multiple_mesh_overlap = 0
+retraction_count_max = 12
+retraction_extrusion_window = 1
+retraction_hop = 0.15
+retraction_hop_enabled = True
+retraction_hop_only_when_collides = True
+retraction_prime_speed = 15
+skin_overlap = 10
+skirt_brim_line_width = 0.8
+speed_layer_0 = =speed_print
+speed_prime_tower = =speed_topbottom
+speed_print = 25
+speed_support_interface = =speed_topbottom
+speed_topbottom = =math.ceil(speed_print * 25 / 25)
+speed_travel = 250
+speed_travel_layer_0 = 50
+speed_wall = =math.ceil(speed_print * 25 / 25)
+speed_wall_0 = =math.ceil(speed_wall * 20 / 25)
+support_angle = 60
+support_bottom_distance = =support_z_distance / 2
+support_top_distance = =support_z_distance
+support_xy_distance = =wall_line_width_0 * 2.5
+support_xy_distance_overhang = =wall_line_width_0
+support_z_distance = =layer_height * 2
+top_bottom_thickness = 1.5
+travel_avoid_distance = 3
+wall_0_inset = 0
+wall_line_width_x = =round(line_width * 0.76 / 0.76, 2)
+wall_thickness = 1.52
diff --git a/resources/quality/ultimaker2_plus_connect/um2pc_pp_0.8_verydraft.inst.cfg b/resources/quality/ultimaker2_plus_connect/um2pc_pp_0.8_verydraft.inst.cfg
new file mode 100644
index 0000000000..bd28518e4a
--- /dev/null
+++ b/resources/quality/ultimaker2_plus_connect/um2pc_pp_0.8_verydraft.inst.cfg
@@ -0,0 +1,71 @@
+[general]
+version = 4
+name = Extra Fast
+definition = ultimaker2_plus_connect
+
+[metadata]
+setting_version = 16
+type = quality
+quality_type = slightlycoarse
+weight = -3
+material = generic_pp
+variant = 0.8 mm
+
+[values]
+acceleration_enabled = True
+acceleration_layer_0 = =acceleration_topbottom
+acceleration_prime_tower = =math.ceil(acceleration_print * 2000 / 4000)
+acceleration_print = 4000
+acceleration_support = =math.ceil(acceleration_print * 2000 / 4000)
+acceleration_support_interface = =acceleration_topbottom
+acceleration_topbottom = =math.ceil(acceleration_print * 500 / 4000)
+acceleration_wall = =math.ceil(acceleration_print * 1000 / 4000)
+acceleration_wall_0 = =math.ceil(acceleration_wall * 500 / 1000)
+brim_width = 20
+cool_fan_full_at_height = =layer_height_0 + 4 * layer_height
+cool_fan_speed_max = 100
+cool_min_layer_time_fan_speed_max = 6
+cool_min_speed = 20
+infill_line_width = =round(line_width * 0.8 / 0.76, 2)
+infill_overlap = 0
+infill_pattern = tetrahedral
+infill_wipe_dist = 0
+jerk_enabled = True
+jerk_layer_0 = =jerk_topbottom
+jerk_prime_tower = =math.ceil(jerk_print * 15 / 25)
+jerk_print = 25
+jerk_support = =math.ceil(jerk_print * 15 / 25)
+jerk_support_interface = =jerk_topbottom
+jerk_topbottom = =math.ceil(jerk_print * 5 / 25)
+jerk_wall = =math.ceil(jerk_print * 10 / 25)
+jerk_wall_0 = =math.ceil(jerk_wall * 5 / 10)
+line_width = =machine_nozzle_size * 0.95
+multiple_mesh_overlap = 0
+retraction_count_max = 12
+retraction_extrusion_window = 1
+retraction_hop = 0.15
+retraction_hop_enabled = True
+retraction_hop_only_when_collides = True
+retraction_prime_speed = 15
+skin_overlap = 10
+skirt_brim_line_width = 0.8
+speed_layer_0 = =speed_print
+speed_prime_tower = =speed_topbottom
+speed_print = 25
+speed_support_interface = =speed_topbottom
+speed_topbottom = =math.ceil(speed_print * 25 / 25)
+speed_travel = 250
+speed_travel_layer_0 = 50
+speed_wall = =math.ceil(speed_print * 25 / 25)
+speed_wall_0 = =math.ceil(speed_wall * 20 / 25)
+support_angle = 60
+support_bottom_distance = =support_z_distance / 2
+support_top_distance = =support_z_distance
+support_xy_distance = =wall_line_width_0 * 2.5
+support_xy_distance_overhang = =wall_line_width_0
+support_z_distance = =layer_height * 2
+top_bottom_thickness = 1.5
+travel_avoid_distance = 3
+wall_0_inset = 0
+wall_line_width_x = =round(line_width * 0.76 / 0.76, 2)
+wall_thickness = 1.52
diff --git a/resources/quality/ultimaker2_plus_connect/um2pc_tpla_0.25_normal.inst.cfg b/resources/quality/ultimaker2_plus_connect/um2pc_tpla_0.25_normal.inst.cfg
new file mode 100644
index 0000000000..8d1a329422
--- /dev/null
+++ b/resources/quality/ultimaker2_plus_connect/um2pc_tpla_0.25_normal.inst.cfg
@@ -0,0 +1,21 @@
+[general]
+version = 4
+name = Extra Fine
+definition = ultimaker2_plus_connect
+
+[metadata]
+setting_version = 16
+type = quality
+quality_type = high
+weight = 1
+material = generic_tough_pla
+variant = 0.25 mm
+
+[values]
+cool_min_layer_time = 5
+cool_min_speed = 10
+infill_sparse_density = 20
+speed_layer_0 = =round(speed_print * 30 / 30)
+speed_print = 30
+top_bottom_thickness = 0.72
+wall_thickness = 0.88
diff --git a/resources/quality/ultimaker2_plus_connect/um2pc_tpla_0.4_draft.inst.cfg b/resources/quality/ultimaker2_plus_connect/um2pc_tpla_0.4_draft.inst.cfg
new file mode 100644
index 0000000000..06474184be
--- /dev/null
+++ b/resources/quality/ultimaker2_plus_connect/um2pc_tpla_0.4_draft.inst.cfg
@@ -0,0 +1,24 @@
+[general]
+version = 4
+name = Fast
+definition = ultimaker2_plus_connect
+
+[metadata]
+setting_version = 16
+type = quality
+quality_type = draft
+weight = -2
+material = generic_tough_pla
+variant = 0.4 mm
+
+[values]
+cool_min_layer_time = 5
+cool_min_speed = 10
+infill_sparse_density = 20
+speed_layer_0 = =round(speed_print * 30 / 50)
+speed_print = 50
+speed_topbottom = =math.ceil(speed_print * 30 / 50)
+speed_travel = 150
+speed_wall = =math.ceil(speed_print * 40 / 50)
+top_bottom_thickness = 0.75
+wall_thickness = 1.05
diff --git a/resources/quality/ultimaker2_plus_connect/um2pc_tpla_0.4_fast.inst.cfg b/resources/quality/ultimaker2_plus_connect/um2pc_tpla_0.4_fast.inst.cfg
new file mode 100644
index 0000000000..d25748e82f
--- /dev/null
+++ b/resources/quality/ultimaker2_plus_connect/um2pc_tpla_0.4_fast.inst.cfg
@@ -0,0 +1,24 @@
+[general]
+version = 4
+name = Normal
+definition = ultimaker2_plus_connect
+
+[metadata]
+setting_version = 16
+type = quality
+quality_type = fast
+weight = -1
+material = generic_tough_pla
+variant = 0.4 mm
+
+[values]
+cool_min_layer_time = 5
+cool_min_speed = 10
+infill_sparse_density = 20
+speed_layer_0 = =round(speed_print * 30 / 40)
+speed_print = 40
+speed_topbottom = =math.ceil(speed_print * 30 / 40)
+speed_travel = 150
+speed_wall = =math.ceil(speed_print * 30 / 40)
+top_bottom_thickness = 0.75
+wall_thickness = 1.05
diff --git a/resources/quality/ultimaker2_plus_connect/um2pc_tpla_0.4_normal.inst.cfg b/resources/quality/ultimaker2_plus_connect/um2pc_tpla_0.4_normal.inst.cfg
new file mode 100644
index 0000000000..7660043d51
--- /dev/null
+++ b/resources/quality/ultimaker2_plus_connect/um2pc_tpla_0.4_normal.inst.cfg
@@ -0,0 +1,23 @@
+[general]
+version = 4
+name = Fine
+definition = ultimaker2_plus_connect
+
+[metadata]
+setting_version = 16
+type = quality
+quality_type = normal
+weight = 0
+material = generic_tough_pla
+variant = 0.4 mm
+
+[values]
+cool_min_layer_time = 5
+cool_min_speed = 10
+infill_sparse_density = 20
+speed_layer_0 = =round(speed_print * 30 / 40)
+speed_print = 40
+speed_topbottom = =math.ceil(speed_print * 20 / 40)
+speed_wall = =math.ceil(speed_print * 30 / 40)
+top_bottom_thickness = 0.8
+wall_thickness = 1.05
diff --git a/resources/quality/ultimaker2_plus_connect/um2pc_tpla_0.6_normal.inst.cfg b/resources/quality/ultimaker2_plus_connect/um2pc_tpla_0.6_normal.inst.cfg
new file mode 100644
index 0000000000..0371972d42
--- /dev/null
+++ b/resources/quality/ultimaker2_plus_connect/um2pc_tpla_0.6_normal.inst.cfg
@@ -0,0 +1,24 @@
+[general]
+version = 4
+name = Fine
+definition = ultimaker2_plus_connect
+
+[metadata]
+setting_version = 16
+type = quality
+quality_type = fast
+weight = 0
+material = generic_tough_pla
+variant = 0.6 mm
+
+[values]
+cool_min_layer_time = 5
+cool_min_speed = 10
+infill_sparse_density = 20
+speed_layer_0 = =round(speed_print * 30 / 50)
+speed_print = 50
+speed_topbottom = =math.ceil(speed_print * 20 / 50)
+speed_wall = =math.ceil(speed_print * 40 / 50)
+speed_wall_0 = =math.ceil(speed_print * 30 / 50)
+top_bottom_thickness = 1.2
+wall_thickness = 1.59
diff --git a/resources/quality/ultimaker2_plus_connect/um2pc_tpla_0.8_normal.inst.cfg b/resources/quality/ultimaker2_plus_connect/um2pc_tpla_0.8_normal.inst.cfg
new file mode 100644
index 0000000000..8fd4c747c4
--- /dev/null
+++ b/resources/quality/ultimaker2_plus_connect/um2pc_tpla_0.8_normal.inst.cfg
@@ -0,0 +1,22 @@
+[general]
+version = 4
+name = Normal
+definition = ultimaker2_plus_connect
+
+[metadata]
+setting_version = 16
+type = quality
+quality_type = draft
+weight = -1
+material = generic_tough_pla
+variant = 0.8 mm
+
+[values]
+cool_min_layer_time = 5
+cool_min_speed = 10
+infill_sparse_density = 20
+speed_layer_0 = =round(speed_print * 30 / 40)
+speed_print = 40
+speed_wall_0 = =math.ceil(speed_print * 25 / 40)
+top_bottom_thickness = 1.2
+wall_thickness = 2.1
diff --git a/resources/quality/ultimaker2_plus_connect/um2pc_tpu_0.25_high.inst.cfg b/resources/quality/ultimaker2_plus_connect/um2pc_tpu_0.25_high.inst.cfg
new file mode 100644
index 0000000000..f03f8ca03d
--- /dev/null
+++ b/resources/quality/ultimaker2_plus_connect/um2pc_tpu_0.25_high.inst.cfg
@@ -0,0 +1,43 @@
+[general]
+version = 4
+name = Extra Fine
+definition = ultimaker2_plus_connect
+
+[metadata]
+setting_version = 16
+type = quality
+quality_type = high
+weight = 1
+material = generic_tpu
+variant = 0.25 mm
+
+[values]
+adhesion_type = brim
+brim_line_count = 20
+cool_fan_speed = 60
+cool_fan_speed_min = =cool_fan_speed * 35 / 60
+cool_min_layer_time = 7
+cool_min_speed = 15
+infill_sparse_density = 10
+layer_0_z_overlap = 0.1
+raft_airgap = 0.2
+raft_base_line_spacing = 1
+raft_interface_line_spacing = 1
+raft_interface_line_width = 0.2
+raft_surface_line_width = 0.2
+retraction_hop_enabled = 0.2
+speed_layer_0 = =math.ceil(speed_print * 30 / 40)
+speed_print = 40
+speed_support = 40
+speed_topbottom = =math.ceil(speed_print * 35 / 40)
+speed_travel = 150
+speed_wall_0 = =math.ceil(speed_print * 15 / 40)
+speed_wall_x = =math.ceil(speed_print * 38 / 40)
+support_angle = 45
+support_enable = True
+support_infill_rate = =25 if support_enable else 0 if support_tree_enable else 25
+support_xy_distance = 0.6
+support_z_distance = =layer_height * 2
+top_bottom_thickness = 1.2
+wall_thickness = 0.88
+speed_infill = =math.ceil(speed_print * 40 / 40)
diff --git a/resources/quality/ultimaker2_plus_connect/um2pc_tpu_0.4_normal.inst.cfg b/resources/quality/ultimaker2_plus_connect/um2pc_tpu_0.4_normal.inst.cfg
new file mode 100644
index 0000000000..40e8daa71f
--- /dev/null
+++ b/resources/quality/ultimaker2_plus_connect/um2pc_tpu_0.4_normal.inst.cfg
@@ -0,0 +1,40 @@
+[general]
+version = 4
+name = Fine
+definition = ultimaker2_plus_connect
+
+[metadata]
+setting_version = 16
+type = quality
+quality_type = normal
+weight = 0
+material = generic_tpu
+variant = 0.4 mm
+
+[values]
+adhesion_type = brim
+brim_line_count = 20
+cool_fan_speed = 60
+cool_fan_speed_min = =cool_fan_speed * 35 / 60
+cool_min_layer_time = 10
+cool_min_speed = 15
+infill_sparse_density = 10
+raft_base_line_spacing = 2
+raft_base_line_width = 0.8
+raft_interface_line_spacing = 1
+raft_margin = 12
+retraction_hop_enabled = 0.2
+speed_layer_0 = =math.ceil(speed_print * 30 / 40)
+speed_print = 40
+speed_support = 40
+speed_topbottom = =math.ceil(speed_print * 35 / 40)
+speed_travel = 150
+speed_wall_0 = =math.ceil(speed_print * 20 / 40)
+speed_wall_x = =math.ceil(speed_print * 35 / 40)
+support_angle = 45
+support_enable = True
+support_infill_rate = =25 if support_enable else 0 if support_tree_enable else 25
+support_xy_distance = 0.65
+support_z_distance = =layer_height * 2
+top_bottom_thickness = 1.2
+wall_thickness = 1.05
diff --git a/resources/quality/ultimaker2_plus_connect/um2pc_tpu_0.6_fast.inst.cfg b/resources/quality/ultimaker2_plus_connect/um2pc_tpu_0.6_fast.inst.cfg
new file mode 100644
index 0000000000..35ce420405
--- /dev/null
+++ b/resources/quality/ultimaker2_plus_connect/um2pc_tpu_0.6_fast.inst.cfg
@@ -0,0 +1,45 @@
+[general]
+version = 4
+name = Normal
+definition = ultimaker2_plus_connect
+
+[metadata]
+setting_version = 16
+type = quality
+quality_type = fast
+weight = -1
+material = generic_tpu
+variant = 0.6 mm
+
+[values]
+adhesion_type = brim
+brim_line_count = 20
+cool_fan_speed = 60
+cool_fan_speed_min = =cool_fan_speed * 35 / 60
+cool_min_speed = 15
+infill_sparse_density = 10
+layer_0_z_overlap = 0.12
+line_width = 0.57
+raft_airgap = 0.24
+raft_base_line_spacing = 1.2
+raft_base_line_width = 0.6
+raft_interface_line_spacing = 1.2
+raft_interface_line_width = 0.57
+raft_margin = 15
+raft_surface_line_width = 0.5
+retraction_hop_enabled = 0.2
+speed_layer_0 = =math.ceil(speed_print * 30 / 45)
+speed_print = 45
+speed_support = 40
+speed_topbottom = =math.ceil(speed_print * 35 / 45)
+speed_travel = 150
+speed_wall_0 = =math.ceil(speed_print * 15 / 45)
+speed_wall_x = =math.ceil(speed_print * 40 / 45)
+support_angle = 45
+support_enable = True
+support_infill_rate = =0 if support_structure == 'tree' else 25
+support_xy_distance = 0.7
+support_z_distance = =layer_height * 2
+top_bottom_thickness = 1.2
+wall_thickness = 1.14
+speed_infill = =math.ceil(speed_print * 45 / 45)
diff --git a/resources/texts/change_log.txt b/resources/texts/change_log.txt
index 799157ed74..19d539cbde 100644
--- a/resources/texts/change_log.txt
+++ b/resources/texts/change_log.txt
@@ -1,9 +1,8 @@
[4.8.0]
-
-* (NOTE: Draft release notes for Beta, these may change for final.)
+For an overview of the new features in Cura 4.8, please see this video: Change log overview.
* New arrange algorithm!
-Shoutout to Prusa, since they made the libnest2d library for this, and allowed a licence change.
+Shout-out to Prusa Research, since they made the libnest2d library for this, and allowed a licence change.
* When opening a project file, pick any matching printer in addition to just exact match and new definition.
Previously, when someone sent you a project, you either had to have the exact same printer under the exact same name, or create an entirely new instance. Now, in the open project dialog, you can specify any printer that has a(n exactly) matching printer-type.
@@ -11,8 +10,8 @@ Previously, when someone sent you a project, you either had to have the exact sa
* Show warning message on profiles that where successfully imported, but not supported by the currently active configuration.
People where a bit confused when adding profiles, which then didn't show up. With this new version, when you add a profile that isn't supported by the current instance (but otherwise correctly imported), you get a warning-message.
-* Show parts of the model below the buildplate in a different color.
-When viewing the buildplate from below, there's now shadow visible anymore. As this helped the user determine what part of the model was below the buildplate, we decided to color that part differently instead.
+* Show parts of the model below the build-plate in a different color.
+When viewing the build-plate from below, there's now shadow visible anymore. As this helped the user determine what part of the model was below the buildplate, we decided to color that part differently instead.
* Show the familiar striped pattern for objects outside of the build-volume in Preview mode as well.
Models outside of the build-volume can of course not be sliced. In the Prepare mode, this was already visible with solid objects indicated in the familiar grey-yellow striped pattern. Now you can also see the objects that are still in the scene just outside if the build-volume in Preview mode.
@@ -24,7 +23,7 @@ Ironing was only used for top-layers, or every layer. But what is the biggest fl
Certain plugins, such as the very useful Settings Guide, occasionally have very large tooltips. This update allows you to scroll through those.
* Bug Fixes
-- Fix the simplify algorithm. Again.
+- Fixed under-simplification (blobs, zits) on some printer models. An oversight in 4.6.x resulted in an oversimplification (smoothing) of models. The attempted fix in 4.7.x overcompensated, which gave difficulty (zits, blobs) for some printer models when the resulting gcode became too intricate. This is now fixed, though some profiles might need to be updated, since they where made against 4.6.x, and therefore may rely on the over-simplification.
- Fix percentage text-fields when scaling non-uniformly.
- Fix cloud printer stuck in connect/disconnect loop.
- Fix rare crash when processing stair stepping in support.
@@ -40,8 +39,13 @@ Certain plugins, such as the very useful Settings Guide, occasionally have very
- Fix off-by-one error that could cause horizontal faces to shift one layer upwards.
- Fix out of bounds array and lost checks for segments ended with mesh vertices, contributed bt skarasov
- Remove redundant 'successful responses' variable, contributed by aerotog
+- In rare cases, brim and prime-tower-bim would overlap.
+- Fix support for some models when bottom distance and stair step height where both 0 (like with PVA).
+- An issue with infill only overlap modifier when the wall line count was overridden in the global settings.
+- Filling gaps between walls would also fill between skin and infill.
* Printer definitions and profiles
+- Introducing the Ultimaker 2+ Connect
- Artillery Sidewinder X1, Artillery Sidewinder Genius, contributed by cataclism
- AnyCubic Kossel, contributed by FoxExe
- BIQU B1, contributed by looxonline
@@ -53,7 +57,7 @@ Certain plugins, such as the very useful Settings Guide, occasionally have very
- Add Acetate profiles for Strateo3D, contributed by KOUBeMT
[4.7.1]
-For an overview of the new features in Cura 4.7, please see this video: Change log overview
+For an overview of the new features in Cura 4.7, please see this video: Change log overview.
* Bug fixes
- Fixed a crash when duplicating a built-in profile.
diff --git a/resources/variants/ultimaker2_plus_connect_0.25.inst.cfg b/resources/variants/ultimaker2_plus_connect_0.25.inst.cfg
new file mode 100644
index 0000000000..c148d31829
--- /dev/null
+++ b/resources/variants/ultimaker2_plus_connect_0.25.inst.cfg
@@ -0,0 +1,19 @@
+[general]
+name = 0.25 mm
+version = 4
+definition = ultimaker2_plus_connect
+
+[metadata]
+setting_version = 16
+type = variant
+hardware_type = nozzle
+
+[values]
+coasting_min_volume = 0.17
+coasting_volume = 0.1
+machine_nozzle_size = 0.25
+machine_nozzle_tip_outer_diameter = 0.8
+raft_airgap = 0.25
+speed_topbottom = =round(speed_print / 1.5, 1)
+speed_wall = =round(speed_print / 1.2, 1)
+speed_wall_0 = =1 if speed_wall < 5 else (speed_wall - 5)
diff --git a/resources/variants/ultimaker2_plus_connect_0.4.inst.cfg b/resources/variants/ultimaker2_plus_connect_0.4.inst.cfg
new file mode 100644
index 0000000000..5dfc4caca2
--- /dev/null
+++ b/resources/variants/ultimaker2_plus_connect_0.4.inst.cfg
@@ -0,0 +1,16 @@
+[general]
+name = 0.4 mm
+version = 4
+definition = ultimaker2_plus_connect
+
+[metadata]
+setting_version = 16
+type = variant
+hardware_type = nozzle
+
+[values]
+machine_nozzle_size = 0.4
+machine_nozzle_tip_outer_diameter = 1.05
+speed_wall = =round(speed_print / 1.25, 1)
+speed_wall_0 = =max(speed_wall - 10, 1)
+speed_topbottom = =round(speed_print / 2.25, 1)
diff --git a/resources/variants/ultimaker2_plus_connect_0.6.inst.cfg b/resources/variants/ultimaker2_plus_connect_0.6.inst.cfg
new file mode 100644
index 0000000000..9c1ea96cb2
--- /dev/null
+++ b/resources/variants/ultimaker2_plus_connect_0.6.inst.cfg
@@ -0,0 +1,17 @@
+[general]
+name = 0.6 mm
+version = 4
+definition = ultimaker2_plus_connect
+
+[metadata]
+setting_version = 16
+type = variant
+hardware_type = nozzle
+
+[values]
+machine_nozzle_size = 0.6
+machine_nozzle_tip_outer_diameter = 1.25
+coasting_volume = 1.36
+speed_wall = =round(speed_print * 3 / 4, 1)
+speed_wall_0 = =1 if speed_wall < 10 else (speed_wall - 10)
+speed_topbottom = =round(speed_print / 2, 1)
diff --git a/resources/variants/ultimaker2_plus_connect_0.8.inst.cfg b/resources/variants/ultimaker2_plus_connect_0.8.inst.cfg
new file mode 100644
index 0000000000..8cea0a22b4
--- /dev/null
+++ b/resources/variants/ultimaker2_plus_connect_0.8.inst.cfg
@@ -0,0 +1,17 @@
+[general]
+name = 0.8 mm
+version = 4
+definition = ultimaker2_plus_connect
+
+[metadata]
+setting_version = 16
+type = variant
+hardware_type = nozzle
+
+[values]
+machine_nozzle_size = 0.8
+machine_nozzle_tip_outer_diameter = 1.35
+coasting_volume = 3.22
+speed_wall = =round(speed_print * 3 / 4, 1)
+speed_wall_0 = =1 if speed_wall < 10 else (speed_wall - 10)
+speed_topbottom = =round(speed_print / 2, 1)
diff --git a/tests/TestMachineManager.py b/tests/TestMachineManager.py
index 4f15a0670c..788b8eee41 100644
--- a/tests/TestMachineManager.py
+++ b/tests/TestMachineManager.py
@@ -21,7 +21,8 @@ def machine_manager(application, extruder_manager, container_registry, global_st
application.getGlobalContainerStack = MagicMock(return_value = global_stack)
with patch("cura.Settings.CuraContainerRegistry.CuraContainerRegistry.getInstance", MagicMock(return_value=container_registry)):
manager = MachineManager(application)
- manager._onGlobalContainerChanged()
+ with patch.object(MachineManager, "updateNumberExtrudersEnabled", return_value = None):
+ manager._onGlobalContainerChanged()
return manager
@@ -253,4 +254,4 @@ def test_isActiveQualityNotSupported(machine_manager):
def test_isActiveQualityNotSupported_noQualityGroup(machine_manager):
machine_manager.activeQualityGroup = MagicMock(return_value=None)
- assert not machine_manager.isActiveQualitySupported
\ No newline at end of file
+ assert not machine_manager.isActiveQualitySupported