diff --git a/cura/CrashHandler.py b/cura/CrashHandler.py
index a78ecb8a72..c6f94f0a80 100644
--- a/cura/CrashHandler.py
+++ b/cura/CrashHandler.py
@@ -53,6 +53,7 @@ class CrashHandler:
self.exception_type = exception_type
self.value = value
self.traceback = tb
+ self.dialog = QDialog()
# While we create the GUI, the information will be stored for sending afterwards
self.data = dict()
@@ -74,7 +75,6 @@ class CrashHandler:
## Creates a modal dialog.
def _createDialog(self):
- self.dialog = QDialog()
self.dialog.setMinimumWidth(640)
self.dialog.setMinimumHeight(640)
self.dialog.setWindowTitle(catalog.i18nc("@title:window", "Crash Report"))
diff --git a/cura/CuraApplication.py b/cura/CuraApplication.py
index 1680e7c6a6..2d1c35aca7 100755
--- a/cura/CuraApplication.py
+++ b/cura/CuraApplication.py
@@ -270,8 +270,9 @@ class CuraApplication(QtApplication):
empty_quality_container = copy.deepcopy(empty_container)
empty_quality_container._id = "empty_quality"
empty_quality_container.setName("Not Supported")
- empty_quality_container.addMetaDataEntry("quality_type", "normal")
+ empty_quality_container.addMetaDataEntry("quality_type", "not_supported")
empty_quality_container.addMetaDataEntry("type", "quality")
+ empty_quality_container.addMetaDataEntry("supported", False)
ContainerRegistry.getInstance().addContainer(empty_quality_container)
empty_quality_changes_container = copy.deepcopy(empty_container)
empty_quality_changes_container._id = "empty_quality_changes"
diff --git a/cura/QualityManager.py b/cura/QualityManager.py
index b6d47d919b..abd14fa841 100644
--- a/cura/QualityManager.py
+++ b/cura/QualityManager.py
@@ -87,7 +87,7 @@ class QualityManager:
qualities = set(quality_type_dict.values())
for material_container in material_containers[1:]:
next_quality_type_dict = self.__fetchQualityTypeDictForMaterial(machine_definition, material_container)
- qualities.update(set(next_quality_type_dict.values()))
+ qualities.intersection_update(set(next_quality_type_dict.values()))
return list(qualities)
@@ -178,12 +178,25 @@ class QualityManager:
def findAllUsableQualitiesForMachineAndExtruders(self, global_container_stack: "GlobalStack", extruder_stacks: List["ExtruderStack"]) -> List[InstanceContainer]:
global_machine_definition = global_container_stack.getBottom()
+ machine_manager = Application.getInstance().getMachineManager()
+ active_stack_id = machine_manager.activeStackId
+
+ materials = []
+
+ # TODO: fix this
if extruder_stacks:
- # Multi-extruder machine detected.
- materials = [stack.material for stack in extruder_stacks]
+ # Multi-extruder machine detected
+ for stack in extruder_stacks:
+ if stack.getId() == active_stack_id and machine_manager.newMaterial:
+ materials.append(machine_manager.newMaterial)
+ else:
+ materials.append(stack.material)
else:
- # Machine with one extruder.
- materials = [global_container_stack.material]
+ # Machine with one extruder
+ if global_container_stack.getId() == active_stack_id and machine_manager.newMaterial:
+ materials.append(machine_manager.newMaterial)
+ else:
+ materials.append(global_container_stack.material)
quality_types = self.findAllQualityTypesForMachineAndMaterials(global_machine_definition, materials)
diff --git a/cura/Settings/MachineManager.py b/cura/Settings/MachineManager.py
index fc5c415f87..bbeafc9a06 100755
--- a/cura/Settings/MachineManager.py
+++ b/cura/Settings/MachineManager.py
@@ -50,6 +50,7 @@ class MachineManager(QObject):
# Used to store the new containers until after confirming the dialog
self._new_variant_container = None
self._new_material_container = None
+ self._new_quality_containers = []
self._error_check_timer = QTimer()
self._error_check_timer.setInterval(250)
@@ -70,10 +71,10 @@ class MachineManager(QObject):
self._stacks_have_errors = None
- self._empty_variant_container = ContainerRegistry.getInstance().getEmptyInstanceContainer()
- self._empty_material_container = ContainerRegistry.getInstance().getEmptyInstanceContainer()
- self._empty_quality_container = ContainerRegistry.getInstance().getEmptyInstanceContainer()
- self._empty_quality_changes_container = ContainerRegistry.getInstance().getEmptyInstanceContainer()
+ self._empty_variant_container = ContainerRegistry.getInstance().findContainers(id = "empty_variant")[0]
+ self._empty_material_container = ContainerRegistry.getInstance().findContainers(id = "empty_material")[0]
+ self._empty_quality_container = ContainerRegistry.getInstance().findContainers(id = "empty_quality")[0]
+ self._empty_quality_changes_container = ContainerRegistry.getInstance().findContainers(id = "empty_quality_changes")[0]
self._onGlobalContainerChanged()
@@ -147,6 +148,14 @@ class MachineManager(QObject):
self.outputDevicesChanged.emit()
+ @property
+ def newVariant(self):
+ return self._new_variant_container
+
+ @property
+ def newMaterial(self):
+ return self._new_material_container
+
@pyqtProperty("QVariantList", notify = outputDevicesChanged)
def printerOutputDevices(self):
return self._printer_output_devices
@@ -833,8 +842,6 @@ class MachineManager(QObject):
if not containers or not self._global_container_stack:
return
- Logger.log("d", "Attempting to change the active quality to %s", quality_id)
-
# Quality profile come in two flavours: type=quality and type=quality_changes
# If we found a quality_changes profile then look up its parent quality profile.
container_type = containers[0].getMetaDataEntry("type")
@@ -854,20 +861,36 @@ class MachineManager(QObject):
if new_quality_settings_list is None:
return
- name_changed_connect_stacks = [] # Connect these stacks to the name changed callback
+ # check if any of the stacks have a not supported profile
+ # if that is the case, all stacks should have a not supported state (otherwise it will show quality_type normal)
+ has_not_supported_quality = False
+
+ # check all stacks for not supported
+ for setting_info in new_quality_settings_list:
+ if setting_info["quality"].getMetaDataEntry("quality_type") == "not_supported":
+ has_not_supported_quality = True
+ break
+
+ # set all stacks to not supported if that's the case
+ if has_not_supported_quality:
+ for setting_info in new_quality_settings_list:
+ setting_info["quality"] = self._empty_quality_container
+
+ self._new_quality_containers.clear()
+
+ # store the upcoming quality profile changes per stack for later execution
+ # this prevents re-slicing before the user has made a choice in the discard or keep dialog
+ # (see _executeDelayedActiveContainerStackChanges)
for setting_info in new_quality_settings_list:
stack = setting_info["stack"]
stack_quality = setting_info["quality"]
stack_quality_changes = setting_info["quality_changes"]
- name_changed_connect_stacks.append(stack_quality)
- name_changed_connect_stacks.append(stack_quality_changes)
- self._replaceQualityOrQualityChangesInStack(stack, stack_quality, postpone_emit=True)
- self._replaceQualityOrQualityChangesInStack(stack, stack_quality_changes, postpone_emit=True)
-
- # Connect to onQualityNameChanged
- for stack in name_changed_connect_stacks:
- stack.nameChanged.connect(self._onQualityNameChanged)
+ self._new_quality_containers.append({
+ "stack": stack,
+ "quality": stack_quality,
+ "quality_changes": stack_quality_changes
+ })
has_user_interaction = False
@@ -890,13 +913,24 @@ class MachineManager(QObject):
# before the user decided to keep or discard any of their changes using the dialog.
# The Application.onDiscardOrKeepProfileChangesClosed signal triggers this method.
def _executeDelayedActiveContainerStackChanges(self):
+ if self._new_variant_container is not None:
+ self._active_container_stack.variant = self._new_variant_container
+ self._new_variant_container = None
+
if self._new_material_container is not None:
self._active_container_stack.material = self._new_material_container
self._new_material_container = None
- if self._new_variant_container is not None:
- self._active_container_stack.variant = self._new_variant_container
- self._new_variant_container = None
+ # apply the new quality to all stacks
+ if self._new_quality_containers:
+ for new_quality in self._new_quality_containers:
+ self._replaceQualityOrQualityChangesInStack(new_quality["stack"], new_quality["quality"], postpone_emit = True)
+ self._replaceQualityOrQualityChangesInStack(new_quality["stack"], new_quality["quality_changes"], postpone_emit = True)
+
+ for new_quality in self._new_quality_containers:
+ new_quality["stack"].nameChanged.connect(self._onQualityNameChanged)
+
+ self._new_quality_containers.clear()
## Cancel set changes for material and variant in the active container stack.
# Used for ignoring any changes when switching between printers (setActiveMachine)
@@ -926,8 +960,14 @@ class MachineManager(QObject):
for stack in stacks:
material = stack.material
+
+ # TODO: fix this
+ if self._new_material_container and stack.getId() == self._active_container_stack.getId():
+ material = self._new_material_container
+
quality = quality_manager.findQualityByQualityType(quality_type, global_machine_definition, [material])
- if not quality: #No quality profile is found for this quality type.
+ if not quality:
+ # No quality profile is found for this quality type.
quality = self._empty_quality_container
result.append({"stack": stack, "quality": quality, "quality_changes": empty_quality_changes})
@@ -962,8 +1002,12 @@ class MachineManager(QObject):
else:
Logger.log("e", "Could not find the global quality changes container with name %s", quality_changes_name)
return None
+
material = global_container_stack.material
+ if self._new_material_container and self._active_container_stack.getId() == global_container_stack.getId():
+ material = self._new_material_container
+
# For the global stack, find a quality which matches the quality_type in
# the quality changes profile and also satisfies any material constraints.
quality_type = global_quality_changes.getMetaDataEntry("quality_type")
@@ -990,6 +1034,10 @@ class MachineManager(QObject):
quality_changes = self._empty_quality_changes_container
material = stack.material
+
+ if self._new_material_container and self._active_container_stack.getId() == stack.getId():
+ material = self._new_material_container
+
quality = quality_manager.findQualityByQualityType(quality_type, global_machine_definition, [material])
if not quality: #No quality profile found for this quality type.
quality = self._empty_quality_container
diff --git a/cura/Settings/ProfilesModel.py b/cura/Settings/ProfilesModel.py
index bf1993b184..6353d3ce84 100644
--- a/cura/Settings/ProfilesModel.py
+++ b/cura/Settings/ProfilesModel.py
@@ -61,6 +61,7 @@ class ProfilesModel(InstanceContainersModel):
active_extruder = extruder_manager.getActiveExtruderStack()
extruder_stacks = extruder_manager.getActiveExtruderStacks()
materials = [global_container_stack.material]
+
if active_extruder in extruder_stacks:
extruder_stacks.remove(active_extruder)
extruder_stacks = [active_extruder] + extruder_stacks
@@ -83,21 +84,30 @@ class ProfilesModel(InstanceContainersModel):
if quality.getMetaDataEntry("quality_type") not in quality_type_set:
result.append(quality)
+ # if still profiles are found, add a single empty_quality ("Not supported") instance to the drop down list
+ if len(result) == 0:
+ # If not qualities are found we dynamically create a not supported container for this machine + material combination
+ not_supported_container = ContainerRegistry.getInstance().findContainers(id = "empty_quality")[0]
+ result.append(not_supported_container)
+
return result
## Re-computes the items in this model, and adds the layer height role.
def _recomputeItems(self):
- #Some globals that we can re-use.
+
+ # Some globals that we can re-use.
global_container_stack = Application.getInstance().getGlobalContainerStack()
if global_container_stack is None:
return
# Detecting if the machine has multiple extrusion
multiple_extrusion = global_container_stack.getProperty("machine_extruder_count", "value") > 1
+
# Get the list of extruders and place the selected extruder at the front of the list.
extruder_manager = ExtruderManager.getInstance()
active_extruder = extruder_manager.getActiveExtruderStack()
extruder_stacks = extruder_manager.getActiveExtruderStacks()
+
if multiple_extrusion:
# Place the active extruder at the front of the list.
# This is a workaround checking if there is an active_extruder or not before moving it to the front of the list.
@@ -111,8 +121,7 @@ class ProfilesModel(InstanceContainersModel):
extruder_stacks = new_extruder_stacks + extruder_stacks
# Get a list of usable/available qualities for this machine and material
- qualities = QualityManager.getInstance().findAllUsableQualitiesForMachineAndExtruders(global_container_stack,
- extruder_stacks)
+ qualities = QualityManager.getInstance().findAllUsableQualitiesForMachineAndExtruders(global_container_stack, extruder_stacks)
container_registry = ContainerRegistry.getInstance()
machine_manager = Application.getInstance().getMachineManager()
@@ -155,14 +164,24 @@ class ProfilesModel(InstanceContainersModel):
# Now all the containers are set
for item in containers:
- profile = container_registry.findContainers(id=item["id"])
+ profile = container_registry.findContainers(id = item["id"])
+
+ # When for some reason there is no profile container in the registry
if not profile:
- self._setItemLayerHeight(item, "", unit)
+ self._setItemLayerHeight(item, "", "")
item["available"] = False
yield item
continue
profile = profile[0]
+
+ # When there is a profile but it's an empty quality should. It's shown in the list (they are "Not Supported" profiles)
+ if profile.getId() == "empty_quality":
+ self._setItemLayerHeight(item, "", "")
+ item["available"] = True
+ yield item
+ continue
+
item["available"] = profile in qualities
# Easy case: This profile defines its own layer height.
@@ -179,9 +198,10 @@ class ProfilesModel(InstanceContainersModel):
if quality_result["stack"] is global_container_stack:
quality = quality_result["quality"]
break
- else: #No global container stack in the results:
+ else:
+ # No global container stack in the results:
if quality_results:
- quality = quality_results[0]["quality"] #Take any of the extruders.
+ quality = quality_results[0]["quality"] # Take any of the extruders.
else:
quality = None
if quality and quality.hasProperty("layer_height", "value"):
@@ -189,7 +209,7 @@ class ProfilesModel(InstanceContainersModel):
yield item
continue
- #Quality has no value for layer height either. Get the layer height from somewhere lower in the stack.
+ # Quality has no value for layer height either. Get the layer height from somewhere lower in the stack.
skip_until_container = global_container_stack.material
if not skip_until_container or skip_until_container == ContainerRegistry.getInstance().getEmptyInstanceContainer(): #No material in stack.
skip_until_container = global_container_stack.variant
diff --git a/resources/qml/Menus/ProfileMenu.qml b/resources/qml/Menus/ProfileMenu.qml
index 17eb7cfb1d..fecea5ef99 100644
--- a/resources/qml/Menus/ProfileMenu.qml
+++ b/resources/qml/Menus/ProfileMenu.qml
@@ -17,9 +17,9 @@ Menu
MenuItem
{
- text: model.name + " - " + model.layer_height
+ text: (model.layer_height != "") ? model.name + " - " + model.layer_height : model.name
checkable: true
- checked: Cura.MachineManager.activeQualityChangesId == "" && Cura.MachineManager.activeQualityType == model.metadata.quality_type
+ checked: Cura.MachineManager.activeQualityId == model.id
exclusiveGroup: group
onTriggered: Cura.MachineManager.setActiveQuality(model.id)
visible: model.available
diff --git a/resources/qml/Settings/SettingView.qml b/resources/qml/Settings/SettingView.qml
index 56fd789564..c116fa933a 100644
--- a/resources/qml/Settings/SettingView.qml
+++ b/resources/qml/Settings/SettingView.qml
@@ -51,27 +51,34 @@ Item
{
id: globalProfileSelection
- text: {
- var result = Cura.MachineManager.activeQualityName;
- if (Cura.MachineManager.activeQualityLayerHeight > 0) {
- result += " ";
- result += " - ";
- result += Cura.MachineManager.activeQualityLayerHeight + "mm";
- result += "";
- }
- return result;
- }
+ text: generateActiveQualityText()
enabled: !header.currentExtruderVisible || header.currentExtruderIndex > -1
-
width: Math.floor(parent.width * 0.55)
height: UM.Theme.getSize("setting_control").height
anchors.left: globalProfileLabel.right
anchors.right: parent.right
tooltip: Cura.MachineManager.activeQualityName
style: UM.Theme.styles.sidebar_header_button
- activeFocusOnPress: true;
+ activeFocusOnPress: true
menu: ProfileMenu { }
+ function generateActiveQualityText () {
+ var result = catalog.i18nc("@", "No Profile Available") // default text
+
+ if (Cura.MachineManager.isActiveQualitySupported ) {
+ result = Cura.MachineManager.activeQualityName
+
+ if (Cura.MachineManager.activeQualityLayerHeight > 0) {
+ result += " "
+ result += " - "
+ result += Cura.MachineManager.activeQualityLayerHeight + "mm"
+ result += ""
+ }
+ }
+
+ return result
+ }
+
UM.SimpleButton
{
id: customisedSettings
diff --git a/resources/qml/SidebarHeader.qml b/resources/qml/SidebarHeader.qml
index f3887e2885..78e21f3a68 100644
--- a/resources/qml/SidebarHeader.qml
+++ b/resources/qml/SidebarHeader.qml
@@ -245,35 +245,29 @@ Column
color: UM.Theme.getColor("text");
}
- ToolButton {
+ ToolButton
+ {
id: materialSelection
+
text: Cura.MachineManager.activeMaterialName
tooltip: Cura.MachineManager.activeMaterialName
visible: Cura.MachineManager.hasMaterials
- property var valueError:
- {
- var data = Cura.ContainerManager.getContainerMetaDataEntry(Cura.MachineManager.activeMaterialId, "compatible")
- if(data == "False")
- {
- return true
- }
- else
- {
- return false
- }
-
- }
- property var valueWarning: ! Cura.MachineManager.isActiveQualitySupported
-
enabled: !extrudersList.visible || base.currentExtruderIndex > -1
-
height: UM.Theme.getSize("setting_control").height
width: parent.width * 0.7 + UM.Theme.getSize("sidebar_margin").width
anchors.right: parent.right
style: UM.Theme.styles.sidebar_header_button
activeFocusOnPress: true;
+ menu: MaterialMenu {
+ extruderIndex: base.currentExtruderIndex
+ }
- menu: MaterialMenu { extruderIndex: base.currentExtruderIndex }
+ property var valueError: !isMaterialSupported()
+ property var valueWarning: ! Cura.MachineManager.isActiveQualitySupported
+
+ function isMaterialSupported () {
+ return Cura.ContainerManager.getContainerMetaDataEntry(Cura.MachineManager.activeMaterialId, "compatible") == "True"
+ }
}
}
diff --git a/resources/quality/ultimaker2_plus/um2p_pp_0.25_normal.inst.cfg b/resources/quality/ultimaker2_plus/um2p_pp_0.25_normal.inst.cfg
deleted file mode 100644
index 13b05df085..0000000000
--- a/resources/quality/ultimaker2_plus/um2p_pp_0.25_normal.inst.cfg
+++ /dev/null
@@ -1,15 +0,0 @@
-[general]
-version = 2
-name = Not Supported
-definition = ultimaker2_plus
-
-[metadata]
-type = quality
-material = generic_pp_ultimaker2_plus_0.25_mm
-weight = 0
-quality_type = normal
-setting_version = 3
-supported = False
-
-[values]
-
diff --git a/resources/quality/ultimaker2_plus/um2p_tpu_0.8_normal.inst.cfg b/resources/quality/ultimaker2_plus/um2p_tpu_0.8_normal.inst.cfg
deleted file mode 100644
index 65f9ba383e..0000000000
--- a/resources/quality/ultimaker2_plus/um2p_tpu_0.8_normal.inst.cfg
+++ /dev/null
@@ -1,15 +0,0 @@
-[general]
-version = 2
-name = Not Supported
-definition = ultimaker2_plus
-
-[metadata]
-weight = 0
-type = quality
-quality_type = normal
-material = generic_tpu_ultimaker2_plus_0.8_mm
-supported = False
-setting_version = 3
-
-[values]
-
diff --git a/resources/quality/ultimaker3/um3_aa0.4_PVA_Fast_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_PVA_Fast_Print.inst.cfg
deleted file mode 100644
index 121d9c92bb..0000000000
--- a/resources/quality/ultimaker3/um3_aa0.4_PVA_Fast_Print.inst.cfg
+++ /dev/null
@@ -1,14 +0,0 @@
-[general]
-version = 2
-name = Not Supported
-definition = ultimaker3
-
-[metadata]
-weight = 0
-type = quality
-quality_type = normal
-material = generic_pva_ultimaker3_AA_0.4
-supported = False
-setting_version = 3
-
-[values]
diff --git a/resources/quality/ultimaker3/um3_aa0.8_PVA_Fast_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_PVA_Fast_Print.inst.cfg
deleted file mode 100644
index 071a72da0d..0000000000
--- a/resources/quality/ultimaker3/um3_aa0.8_PVA_Fast_Print.inst.cfg
+++ /dev/null
@@ -1,14 +0,0 @@
-[general]
-version = 2
-name = Not Supported
-definition = ultimaker3
-
-[metadata]
-weight = 0
-type = quality
-quality_type = normal
-material = generic_pva_ultimaker3_AA_0.8
-supported = False
-setting_version = 3
-
-[values]
diff --git a/resources/quality/ultimaker3/um3_aa0.8_PVA_Superdraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_PVA_Superdraft_Print.inst.cfg
deleted file mode 100644
index 485226fe3d..0000000000
--- a/resources/quality/ultimaker3/um3_aa0.8_PVA_Superdraft_Print.inst.cfg
+++ /dev/null
@@ -1,14 +0,0 @@
-[general]
-version = 2
-name = Not Supported
-definition = ultimaker3
-
-[metadata]
-weight = 0
-type = quality
-quality_type = superdraft
-material = generic_pva_ultimaker3_AA_0.8
-supported = False
-setting_version = 3
-
-[values]
diff --git a/resources/quality/ultimaker3/um3_bb0.4_ABS_Fast_Print.inst.cfg b/resources/quality/ultimaker3/um3_bb0.4_ABS_Fast_Print.inst.cfg
deleted file mode 100644
index 65fbb4aa22..0000000000
--- a/resources/quality/ultimaker3/um3_bb0.4_ABS_Fast_Print.inst.cfg
+++ /dev/null
@@ -1,14 +0,0 @@
-[general]
-version = 2
-name = Not Supported
-definition = ultimaker3
-
-[metadata]
-type = quality
-quality_type = normal
-material = generic_abs_ultimaker3_BB_0.4
-weight = 0
-supported = False
-setting_version = 3
-
-[values]
diff --git a/resources/quality/ultimaker3/um3_bb0.4_ABS_Superdraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_bb0.4_ABS_Superdraft_Print.inst.cfg
deleted file mode 100644
index d92791970e..0000000000
--- a/resources/quality/ultimaker3/um3_bb0.4_ABS_Superdraft_Print.inst.cfg
+++ /dev/null
@@ -1,14 +0,0 @@
-[general]
-version = 2
-name = Not Supported
-definition = ultimaker3
-
-[metadata]
-type = quality
-quality_type = superdraft
-material = generic_abs_ultimaker3_BB_0.4
-weight = 0
-supported = False
-setting_version = 3
-
-[values]
diff --git a/resources/quality/ultimaker3/um3_bb0.4_CPEP_Fast_Print.inst.cfg b/resources/quality/ultimaker3/um3_bb0.4_CPEP_Fast_Print.inst.cfg
deleted file mode 100644
index 3aa8fc43e0..0000000000
--- a/resources/quality/ultimaker3/um3_bb0.4_CPEP_Fast_Print.inst.cfg
+++ /dev/null
@@ -1,14 +0,0 @@
-[general]
-version = 2
-name = Not Supported
-definition = ultimaker3
-
-[metadata]
-type = quality
-quality_type = normal
-material = generic_cpe_plus_ultimaker3_BB_0.4
-weight = 0
-supported = False
-setting_version = 3
-
-[values]
diff --git a/resources/quality/ultimaker3/um3_bb0.4_CPEP_Superdraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_bb0.4_CPEP_Superdraft_Print.inst.cfg
deleted file mode 100644
index c3bfa7a731..0000000000
--- a/resources/quality/ultimaker3/um3_bb0.4_CPEP_Superdraft_Print.inst.cfg
+++ /dev/null
@@ -1,14 +0,0 @@
-[general]
-version = 2
-name = Not Supported
-definition = ultimaker3
-
-[metadata]
-type = quality
-quality_type = superdraft
-material = generic_cpe_plus_ultimaker3_BB_0.4
-weight = 0
-supported = False
-setting_version = 3
-
-[values]
diff --git a/resources/quality/ultimaker3/um3_bb0.4_CPE_Fast_Print.inst.cfg b/resources/quality/ultimaker3/um3_bb0.4_CPE_Fast_Print.inst.cfg
deleted file mode 100644
index 6594cd4403..0000000000
--- a/resources/quality/ultimaker3/um3_bb0.4_CPE_Fast_Print.inst.cfg
+++ /dev/null
@@ -1,14 +0,0 @@
-[general]
-version = 2
-name = Not Supported
-definition = ultimaker3
-
-[metadata]
-type = quality
-quality_type = normal
-material = generic_cpe_ultimaker3_BB_0.4
-weight = 0
-supported = False
-setting_version = 3
-
-[values]
diff --git a/resources/quality/ultimaker3/um3_bb0.4_CPE_Superdraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_bb0.4_CPE_Superdraft_Print.inst.cfg
deleted file mode 100644
index 4eda6ce767..0000000000
--- a/resources/quality/ultimaker3/um3_bb0.4_CPE_Superdraft_Print.inst.cfg
+++ /dev/null
@@ -1,14 +0,0 @@
-[general]
-version = 2
-name = Not Supported
-definition = ultimaker3
-
-[metadata]
-type = quality
-quality_type = superdraft
-material = generic_cpe_ultimaker3_BB_0.4
-weight = 0
-supported = False
-setting_version = 3
-
-[values]
diff --git a/resources/quality/ultimaker3/um3_bb0.4_Nylon_Fast_Print.inst.cfg b/resources/quality/ultimaker3/um3_bb0.4_Nylon_Fast_Print.inst.cfg
deleted file mode 100644
index ca4589f150..0000000000
--- a/resources/quality/ultimaker3/um3_bb0.4_Nylon_Fast_Print.inst.cfg
+++ /dev/null
@@ -1,14 +0,0 @@
-[general]
-version = 2
-name = Not Supported
-definition = ultimaker3
-
-[metadata]
-type = quality
-quality_type = normal
-material = generic_nylon_ultimaker3_BB_0.4
-weight = 0
-supported = False
-setting_version = 3
-
-[values]
diff --git a/resources/quality/ultimaker3/um3_bb0.4_Nylon_Superdraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_bb0.4_Nylon_Superdraft_Print.inst.cfg
deleted file mode 100644
index 94dcfe2aff..0000000000
--- a/resources/quality/ultimaker3/um3_bb0.4_Nylon_Superdraft_Print.inst.cfg
+++ /dev/null
@@ -1,14 +0,0 @@
-[general]
-version = 2
-name = Not Supported
-definition = ultimaker3
-
-[metadata]
-type = quality
-quality_type = superdraft
-material = generic_nylon_ultimaker3_BB_0.4
-weight = 0
-supported = False
-setting_version = 3
-
-[values]
diff --git a/resources/quality/ultimaker3/um3_bb0.4_PC_Fast_Print.inst.cfg b/resources/quality/ultimaker3/um3_bb0.4_PC_Fast_Print.inst.cfg
deleted file mode 100644
index 46334b219c..0000000000
--- a/resources/quality/ultimaker3/um3_bb0.4_PC_Fast_Print.inst.cfg
+++ /dev/null
@@ -1,14 +0,0 @@
-[general]
-version = 2
-name = Not Supported
-definition = ultimaker3
-
-[metadata]
-type = quality
-quality_type = normal
-material = generic_pc_ultimaker3_BB_0.4
-weight = 0
-supported = False
-setting_version = 3
-
-[values]
diff --git a/resources/quality/ultimaker3/um3_bb0.4_PLA_Fast_Print.inst.cfg b/resources/quality/ultimaker3/um3_bb0.4_PLA_Fast_Print.inst.cfg
deleted file mode 100644
index 37998b3346..0000000000
--- a/resources/quality/ultimaker3/um3_bb0.4_PLA_Fast_Print.inst.cfg
+++ /dev/null
@@ -1,14 +0,0 @@
-[general]
-version = 2
-name = Not Supported
-definition = ultimaker3
-
-[metadata]
-type = quality
-quality_type = normal
-material = generic_pla_ultimaker3_BB_0.4
-weight = 0
-supported = False
-setting_version = 3
-
-[values]
diff --git a/resources/quality/ultimaker3/um3_bb0.4_PLA_Superdraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_bb0.4_PLA_Superdraft_Print.inst.cfg
deleted file mode 100644
index 51ea4d609a..0000000000
--- a/resources/quality/ultimaker3/um3_bb0.4_PLA_Superdraft_Print.inst.cfg
+++ /dev/null
@@ -1,14 +0,0 @@
-[general]
-version = 2
-name = Not Supported
-definition = ultimaker3
-
-[metadata]
-type = quality
-quality_type = superdraft
-material = generic_pla_ultimaker3_BB_0.4
-weight = 0
-supported = False
-setting_version = 3
-
-[values]
diff --git a/resources/quality/ultimaker3/um3_bb0.4_PP_Fast_Print.inst.cfg b/resources/quality/ultimaker3/um3_bb0.4_PP_Fast_Print.inst.cfg
deleted file mode 100644
index be9f93c662..0000000000
--- a/resources/quality/ultimaker3/um3_bb0.4_PP_Fast_Print.inst.cfg
+++ /dev/null
@@ -1,14 +0,0 @@
-[general]
-version = 2
-name = Not Supported
-definition = ultimaker3
-
-[metadata]
-type = quality
-quality_type = normal
-material = generic_pp_ultimaker3_BB_0.4
-weight = 0
-supported = False
-setting_version = 3
-
-[values]
diff --git a/resources/quality/ultimaker3/um3_bb0.4_PP_Superdraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_bb0.4_PP_Superdraft_Print.inst.cfg
deleted file mode 100644
index d2f54e3137..0000000000
--- a/resources/quality/ultimaker3/um3_bb0.4_PP_Superdraft_Print.inst.cfg
+++ /dev/null
@@ -1,14 +0,0 @@
-[general]
-version = 2
-name = Not Supported
-definition = ultimaker3
-
-[metadata]
-type = quality
-quality_type = superdraft
-material = generic_pp_ultimaker3_BB_0.4
-weight = 0
-supported = False
-setting_version = 3
-
-[values]
diff --git a/resources/quality/ultimaker3/um3_bb0.4_TPU_Fast_Print.inst.cfg b/resources/quality/ultimaker3/um3_bb0.4_TPU_Fast_Print.inst.cfg
deleted file mode 100644
index ba1eaaf548..0000000000
--- a/resources/quality/ultimaker3/um3_bb0.4_TPU_Fast_Print.inst.cfg
+++ /dev/null
@@ -1,14 +0,0 @@
-[general]
-version = 2
-name = Not Supported
-definition = ultimaker3
-
-[metadata]
-type = quality
-quality_type = normal
-material = generic_tpu_ultimaker3_BB_0.4
-weight = 0
-supported = False
-setting_version = 3
-
-[values]
diff --git a/resources/quality/ultimaker3/um3_bb0.4_TPU_Superdraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_bb0.4_TPU_Superdraft_Print.inst.cfg
deleted file mode 100644
index 783d1dfa80..0000000000
--- a/resources/quality/ultimaker3/um3_bb0.4_TPU_Superdraft_Print.inst.cfg
+++ /dev/null
@@ -1,14 +0,0 @@
-[general]
-version = 2
-name = Not Supported
-definition = ultimaker3
-
-[metadata]
-type = quality
-quality_type = superdraft
-material = generic_tpu_ultimaker3_BB_0.4
-weight = 0
-supported = False
-setting_version = 3
-
-[values]
diff --git a/resources/quality/ultimaker3/um3_bb0.8_ABS_Fast_Print.inst.cfg b/resources/quality/ultimaker3/um3_bb0.8_ABS_Fast_Print.inst.cfg
deleted file mode 100644
index 7f4dc9f23e..0000000000
--- a/resources/quality/ultimaker3/um3_bb0.8_ABS_Fast_Print.inst.cfg
+++ /dev/null
@@ -1,14 +0,0 @@
-[general]
-version = 2
-name = Not Supported
-definition = ultimaker3
-
-[metadata]
-type = quality
-quality_type = normal
-material = generic_abs_ultimaker3_BB_0.8
-weight = 0
-supported = False
-setting_version = 3
-
-[values]
diff --git a/resources/quality/ultimaker3/um3_bb0.8_ABS_Superdraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_bb0.8_ABS_Superdraft_Print.inst.cfg
deleted file mode 100644
index c0fe6216c2..0000000000
--- a/resources/quality/ultimaker3/um3_bb0.8_ABS_Superdraft_Print.inst.cfg
+++ /dev/null
@@ -1,14 +0,0 @@
-[general]
-version = 2
-name = Not Supported
-definition = ultimaker3
-
-[metadata]
-type = quality
-quality_type = superdraft
-material = generic_abs_ultimaker3_BB_0.8
-weight = 0
-supported = False
-setting_version = 3
-
-[values]
diff --git a/resources/quality/ultimaker3/um3_bb0.8_CPEP_Fast_Print.inst.cfg b/resources/quality/ultimaker3/um3_bb0.8_CPEP_Fast_Print.inst.cfg
deleted file mode 100644
index 4aa96f3a02..0000000000
--- a/resources/quality/ultimaker3/um3_bb0.8_CPEP_Fast_Print.inst.cfg
+++ /dev/null
@@ -1,14 +0,0 @@
-[general]
-version = 2
-name = Not Supported
-definition = ultimaker3
-
-[metadata]
-type = quality
-quality_type = normal
-material = generic_cpe_plus_ultimaker3_BB_0.8
-weight = 0
-supported = False
-setting_version = 3
-
-[values]
diff --git a/resources/quality/ultimaker3/um3_bb0.8_CPEP_Superdraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_bb0.8_CPEP_Superdraft_Print.inst.cfg
deleted file mode 100644
index 5e2d079f20..0000000000
--- a/resources/quality/ultimaker3/um3_bb0.8_CPEP_Superdraft_Print.inst.cfg
+++ /dev/null
@@ -1,14 +0,0 @@
-[general]
-version = 2
-name = Not Supported
-definition = ultimaker3
-
-[metadata]
-type = quality
-quality_type = superdraft
-material = generic_cpe_plus_ultimaker3_BB_0.8
-weight = 0
-supported = False
-setting_version = 3
-
-[values]
diff --git a/resources/quality/ultimaker3/um3_bb0.8_CPE_Fast_Print.inst.cfg b/resources/quality/ultimaker3/um3_bb0.8_CPE_Fast_Print.inst.cfg
deleted file mode 100644
index 384d44cf93..0000000000
--- a/resources/quality/ultimaker3/um3_bb0.8_CPE_Fast_Print.inst.cfg
+++ /dev/null
@@ -1,14 +0,0 @@
-[general]
-version = 2
-name = Not Supported
-definition = ultimaker3
-
-[metadata]
-type = quality
-quality_type = normal
-material = generic_cpe_ultimaker3_BB_0.8
-weight = 0
-supported = False
-setting_version = 3
-
-[values]
diff --git a/resources/quality/ultimaker3/um3_bb0.8_CPE_Superdraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_bb0.8_CPE_Superdraft_Print.inst.cfg
deleted file mode 100644
index 87bdedb204..0000000000
--- a/resources/quality/ultimaker3/um3_bb0.8_CPE_Superdraft_Print.inst.cfg
+++ /dev/null
@@ -1,14 +0,0 @@
-[general]
-version = 2
-name = Not Supported
-definition = ultimaker3
-
-[metadata]
-type = quality
-quality_type = superdraft
-material = generic_cpe_ultimaker3_BB_0.8
-weight = 0
-supported = False
-setting_version = 3
-
-[values]
diff --git a/resources/quality/ultimaker3/um3_bb0.8_Nylon_Fast_Print.inst.cfg b/resources/quality/ultimaker3/um3_bb0.8_Nylon_Fast_Print.inst.cfg
deleted file mode 100644
index 699bb575d2..0000000000
--- a/resources/quality/ultimaker3/um3_bb0.8_Nylon_Fast_Print.inst.cfg
+++ /dev/null
@@ -1,14 +0,0 @@
-[general]
-version = 2
-name = Not Supported
-definition = ultimaker3
-
-[metadata]
-type = quality
-quality_type = normal
-material = generic_nylon_ultimaker3_BB_0.8
-weight = 0
-supported = False
-setting_version = 3
-
-[values]
diff --git a/resources/quality/ultimaker3/um3_bb0.8_Nylon_Superdraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_bb0.8_Nylon_Superdraft_Print.inst.cfg
deleted file mode 100644
index 261d63e6e7..0000000000
--- a/resources/quality/ultimaker3/um3_bb0.8_Nylon_Superdraft_Print.inst.cfg
+++ /dev/null
@@ -1,14 +0,0 @@
-[general]
-version = 2
-name = Not Supported
-definition = ultimaker3
-
-[metadata]
-type = quality
-quality_type = superdraft
-material = generic_nylon_ultimaker3_BB_0.8
-weight = 0
-supported = False
-setting_version = 3
-
-[values]
diff --git a/resources/quality/ultimaker3/um3_bb0.8_PC_Fast_Print.inst.cfg b/resources/quality/ultimaker3/um3_bb0.8_PC_Fast_Print.inst.cfg
deleted file mode 100644
index ac8515a1ea..0000000000
--- a/resources/quality/ultimaker3/um3_bb0.8_PC_Fast_Print.inst.cfg
+++ /dev/null
@@ -1,14 +0,0 @@
-[general]
-version = 2
-name = Not Supported
-definition = ultimaker3
-
-[metadata]
-type = quality
-quality_type = normal
-material = generic_pc_ultimaker3_BB_0.8
-weight = 0
-supported = False
-setting_version = 3
-
-[values]
diff --git a/resources/quality/ultimaker3/um3_bb0.8_PC_Superdraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_bb0.8_PC_Superdraft_Print.inst.cfg
deleted file mode 100644
index 12d82993e6..0000000000
--- a/resources/quality/ultimaker3/um3_bb0.8_PC_Superdraft_Print.inst.cfg
+++ /dev/null
@@ -1,14 +0,0 @@
-[general]
-version = 2
-name = Not Supported
-definition = ultimaker3
-
-[metadata]
-type = quality
-quality_type = superdraft
-material = generic_pc_ultimaker3_BB_0.8
-weight = 0
-supported = False
-setting_version = 3
-
-[values]
diff --git a/resources/quality/ultimaker3/um3_bb0.8_PLA_Fast_Print.inst.cfg b/resources/quality/ultimaker3/um3_bb0.8_PLA_Fast_Print.inst.cfg
deleted file mode 100644
index f93273a33a..0000000000
--- a/resources/quality/ultimaker3/um3_bb0.8_PLA_Fast_Print.inst.cfg
+++ /dev/null
@@ -1,14 +0,0 @@
-[general]
-version = 2
-name = Not Supported
-definition = ultimaker3
-
-[metadata]
-type = quality
-quality_type = normal
-material = generic_pla_ultimaker3_BB_0.8
-weight = 0
-supported = False
-setting_version = 3
-
-[values]
diff --git a/resources/quality/ultimaker3/um3_bb0.8_PLA_Superdraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_bb0.8_PLA_Superdraft_Print.inst.cfg
deleted file mode 100644
index 499af56b4b..0000000000
--- a/resources/quality/ultimaker3/um3_bb0.8_PLA_Superdraft_Print.inst.cfg
+++ /dev/null
@@ -1,14 +0,0 @@
-[general]
-version = 2
-name = Not Supported
-definition = ultimaker3
-
-[metadata]
-type = quality
-quality_type = superdraft
-material = generic_pla_ultimaker3_BB_0.8
-weight = 0
-supported = False
-setting_version = 3
-
-[values]
diff --git a/resources/quality/ultimaker3/um3_bb0.8_PP_Fast_Print.inst.cfg b/resources/quality/ultimaker3/um3_bb0.8_PP_Fast_Print.inst.cfg
deleted file mode 100644
index 5ffda57b8b..0000000000
--- a/resources/quality/ultimaker3/um3_bb0.8_PP_Fast_Print.inst.cfg
+++ /dev/null
@@ -1,14 +0,0 @@
-[general]
-version = 2
-name = Not Supported
-definition = ultimaker3
-
-[metadata]
-type = quality
-quality_type = normal
-material = generic_pp_ultimaker3_BB_0.8
-weight = 0
-supported = False
-setting_version = 3
-
-[values]
diff --git a/resources/quality/ultimaker3/um3_bb0.8_PP_Superdraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_bb0.8_PP_Superdraft_Print.inst.cfg
deleted file mode 100644
index aa50edcf55..0000000000
--- a/resources/quality/ultimaker3/um3_bb0.8_PP_Superdraft_Print.inst.cfg
+++ /dev/null
@@ -1,14 +0,0 @@
-[general]
-version = 2
-name = Not Supported
-definition = ultimaker3
-
-[metadata]
-type = quality
-quality_type = superdraft
-material = generic_pp_ultimaker3_BB_0.8
-weight = 0
-supported = False
-setting_version = 3
-
-[values]
diff --git a/resources/quality/ultimaker3/um3_bb0.8_TPU_Fast_print.inst.cfg b/resources/quality/ultimaker3/um3_bb0.8_TPU_Fast_print.inst.cfg
deleted file mode 100644
index 6be3b596f9..0000000000
--- a/resources/quality/ultimaker3/um3_bb0.8_TPU_Fast_print.inst.cfg
+++ /dev/null
@@ -1,14 +0,0 @@
-[general]
-version = 2
-name = Not Supported
-definition = ultimaker3
-
-[metadata]
-type = quality
-quality_type = normal
-material = generic_tpu_ultimaker3_BB_0.8
-weight = 0
-supported = False
-setting_version = 3
-
-[values]
diff --git a/resources/quality/ultimaker3/um3_bb0.8_TPU_Superdraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_bb0.8_TPU_Superdraft_Print.inst.cfg
deleted file mode 100644
index e3484b3556..0000000000
--- a/resources/quality/ultimaker3/um3_bb0.8_TPU_Superdraft_Print.inst.cfg
+++ /dev/null
@@ -1,14 +0,0 @@
-[general]
-version = 2
-name = Not Supported
-definition = ultimaker3
-
-[metadata]
-type = quality
-quality_type = superdraft
-material = generic_tpu_ultimaker3_BB_0.8
-weight = 0
-supported = False
-setting_version = 3
-
-[values]