From 16226bdd4801026e0b7bb049eb34147ee80f1ab9 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Mon, 9 Jul 2018 16:43:41 +0200 Subject: [PATCH 01/10] Move exclude_materials into the material profiles An accompanying commit should be done in the fdm_materials repository. Contributes to issue CURA-5460. --- resources/definitions/ultimaker.def.json | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/resources/definitions/ultimaker.def.json b/resources/definitions/ultimaker.def.json index a980a1afdf..1ca7444d04 100644 --- a/resources/definitions/ultimaker.def.json +++ b/resources/definitions/ultimaker.def.json @@ -6,8 +6,7 @@ "author": "Ultimaker", "manufacturer": "Ultimaker B.V.", "category": "Ultimaker", - "visible": false, - "exclude_materials": [ "generic_hips", "generic_petg" ] + "visible": false }, "overrides": { "machine_max_feedrate_e": { From c0fc0a7eba1b44c2cf94d964f7d0c5c641a0a1aa Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Mon, 9 Jul 2018 17:06:05 +0200 Subject: [PATCH 02/10] Disable material if not compatible Similar to how it's displayed in the printer. Contributes to issue CURA-5460. --- cura/Machines/Models/BaseMaterialsModel.py | 4 +++- cura/Machines/Models/BrandMaterialsModel.py | 3 ++- cura/Machines/Models/GenericMaterialsModel.py | 5 +++-- resources/qml/Menus/MaterialMenu.qml | 1 + resources/qml/SidebarHeader.qml | 6 +++--- 5 files changed, 12 insertions(+), 7 deletions(-) diff --git a/cura/Machines/Models/BaseMaterialsModel.py b/cura/Machines/Models/BaseMaterialsModel.py index 4759c8b5b0..4d0b9eea36 100644 --- a/cura/Machines/Models/BaseMaterialsModel.py +++ b/cura/Machines/Models/BaseMaterialsModel.py @@ -21,10 +21,11 @@ class BaseMaterialsModel(ListModel): MaterialRole = Qt.UserRole + 5 ColorRole = Qt.UserRole + 6 ContainerNodeRole = Qt.UserRole + 7 + CompatibleRole = Qt.UserRole + 8 extruderPositionChanged = pyqtSignal() - def __init__(self, parent = None): + def __init__(self, parent = None) -> None: super().__init__(parent) self._application = Application.getInstance() self._machine_manager = self._application.getMachineManager() @@ -36,6 +37,7 @@ class BaseMaterialsModel(ListModel): self.addRoleName(self.MaterialRole, "material") self.addRoleName(self.ColorRole, "color_name") self.addRoleName(self.ContainerNodeRole, "container_node") + self.addRoleName(self.CompatibleRole, "compatible") self._extruder_position = 0 self._extruder_stack = None diff --git a/cura/Machines/Models/BrandMaterialsModel.py b/cura/Machines/Models/BrandMaterialsModel.py index 236f105d12..5adc3d10fd 100644 --- a/cura/Machines/Models/BrandMaterialsModel.py +++ b/cura/Machines/Models/BrandMaterialsModel.py @@ -122,7 +122,8 @@ class BrandMaterialsModel(ListModel): "brand": metadata["brand"], "material": metadata["material"], "color_name": metadata["color_name"], - "container_node": container_node + "container_node": container_node, + "compatible": metadata.get("compatible", "unknown") } brand_group_dict[brand][material_type].append(item) diff --git a/cura/Machines/Models/GenericMaterialsModel.py b/cura/Machines/Models/GenericMaterialsModel.py index 2fac919f3e..48f4c4ea50 100644 --- a/cura/Machines/Models/GenericMaterialsModel.py +++ b/cura/Machines/Models/GenericMaterialsModel.py @@ -19,7 +19,7 @@ class GenericMaterialsModel(BaseMaterialsModel): self._material_manager.materialsUpdated.connect(self._update) #Update when the list of materials changes. self._update() - def _update(self): + def _update(self) -> None: Logger.log("d", "Updating {model_class_name}.".format(model_class_name = self.__class__.__name__)) global_stack = self._machine_manager.activeMachine @@ -51,7 +51,8 @@ class GenericMaterialsModel(BaseMaterialsModel): "brand": metadata["brand"], "material": metadata["material"], "color_name": metadata["color_name"], - "container_node": container_node + "container_node": container_node, + "compatible": metadata.get("compatible", "unknown") } item_list.append(item) diff --git a/resources/qml/Menus/MaterialMenu.qml b/resources/qml/Menus/MaterialMenu.qml index 64b3130724..c2de8f31e9 100644 --- a/resources/qml/Menus/MaterialMenu.qml +++ b/resources/qml/Menus/MaterialMenu.qml @@ -22,6 +22,7 @@ Menu text: model.name checkable: true checked: model.root_material_id == Cura.MachineManager.currentRootMaterialId[extruderIndex] + enabled: model.compatible exclusiveGroup: group onTriggered: { diff --git a/resources/qml/SidebarHeader.qml b/resources/qml/SidebarHeader.qml index 0e5ac852e8..d39e2b9416 100644 --- a/resources/qml/SidebarHeader.qml +++ b/resources/qml/SidebarHeader.qml @@ -1,5 +1,5 @@ -// Copyright (c) 2017 Ultimaker B.V. -// Cura is released under the terms of the LGPLv3 or higher. +//Copyright (c) 2018 Ultimaker B.V. +//Cura is released under the terms of the LGPLv3 or higher. import QtQuick 2.7 import QtQuick.Controls 1.1 @@ -402,7 +402,7 @@ Column property var valueError: !isMaterialSupported() property var valueWarning: ! Cura.MachineManager.isActiveQualitySupported - function isMaterialSupported () + function isMaterialSupported() { if (!hasActiveExtruder) { From f712fc0f362a943f73a09e9caa4d17f7353f42b2 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Mon, 9 Jul 2018 17:29:45 +0200 Subject: [PATCH 03/10] No longer add incompatible materials to materials menus This removes the need for the 'compatible' role but I'll keep it in for now in case we want to change the design of this later. Contributes to issue CURA-5460. --- cura/Machines/Models/BrandMaterialsModel.py | 4 +++- cura/Machines/Models/GenericMaterialsModel.py | 4 +++- resources/qml/Menus/MaterialMenu.qml | 1 - 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/cura/Machines/Models/BrandMaterialsModel.py b/cura/Machines/Models/BrandMaterialsModel.py index 5adc3d10fd..dd286490ff 100644 --- a/cura/Machines/Models/BrandMaterialsModel.py +++ b/cura/Machines/Models/BrandMaterialsModel.py @@ -108,6 +108,8 @@ class BrandMaterialsModel(ListModel): # Only add results for generic materials if brand.lower() == "generic": continue + if not metadata.get("compatible", True): + continue if brand not in brand_group_dict: brand_group_dict[brand] = {} @@ -123,7 +125,7 @@ class BrandMaterialsModel(ListModel): "material": metadata["material"], "color_name": metadata["color_name"], "container_node": container_node, - "compatible": metadata.get("compatible", "unknown") + "compatible": metadata.get("compatible", True) } brand_group_dict[brand][material_type].append(item) diff --git a/cura/Machines/Models/GenericMaterialsModel.py b/cura/Machines/Models/GenericMaterialsModel.py index 48f4c4ea50..1580e7ff0c 100644 --- a/cura/Machines/Models/GenericMaterialsModel.py +++ b/cura/Machines/Models/GenericMaterialsModel.py @@ -44,6 +44,8 @@ class GenericMaterialsModel(BaseMaterialsModel): # Only add results for generic materials if metadata["brand"].lower() != "generic": continue + if not metadata.get("compatible", True): + continue item = {"root_material_id": root_material_id, "id": metadata["id"], @@ -52,7 +54,7 @@ class GenericMaterialsModel(BaseMaterialsModel): "material": metadata["material"], "color_name": metadata["color_name"], "container_node": container_node, - "compatible": metadata.get("compatible", "unknown") + "compatible": metadata.get("compatible", True) } item_list.append(item) diff --git a/resources/qml/Menus/MaterialMenu.qml b/resources/qml/Menus/MaterialMenu.qml index c2de8f31e9..64b3130724 100644 --- a/resources/qml/Menus/MaterialMenu.qml +++ b/resources/qml/Menus/MaterialMenu.qml @@ -22,7 +22,6 @@ Menu text: model.name checkable: true checked: model.root_material_id == Cura.MachineManager.currentRootMaterialId[extruderIndex] - enabled: model.compatible exclusiveGroup: group onTriggered: { From a18f77abdd0b7a7c46f17f4c09423378e66f5a51 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Tue, 10 Jul 2018 09:24:10 +0200 Subject: [PATCH 04/10] Move exclude_materials into material profiles They are there not 'hardware compatible' any more. Contributes to issue CURA-5460. --- resources/definitions/ultimaker2.def.json | 1 - resources/definitions/ultimaker_original.def.json | 1 - resources/definitions/ultimaker_original_dual.def.json | 1 - 3 files changed, 3 deletions(-) diff --git a/resources/definitions/ultimaker2.def.json b/resources/definitions/ultimaker2.def.json index aa684946c2..c45c3444ca 100644 --- a/resources/definitions/ultimaker2.def.json +++ b/resources/definitions/ultimaker2.def.json @@ -14,7 +14,6 @@ "platform_offset": [9, 0, 0], "has_materials": false, "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"], "first_start_actions": ["UM2UpgradeSelection"], "supported_actions":["UM2UpgradeSelection", "UpgradeFirmware"], "machine_extruder_trains": diff --git a/resources/definitions/ultimaker_original.def.json b/resources/definitions/ultimaker_original.def.json index c961423504..423312fcce 100644 --- a/resources/definitions/ultimaker_original.def.json +++ b/resources/definitions/ultimaker_original.def.json @@ -12,7 +12,6 @@ "platform": "ultimaker_platform.stl", "has_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"], "first_start_actions": ["UMOUpgradeSelection", "UMOCheckup", "BedLevel"], "supported_actions": ["UMOUpgradeSelection", "UMOCheckup", "BedLevel", "UpgradeFirmware"], "machine_extruder_trains": diff --git a/resources/definitions/ultimaker_original_dual.def.json b/resources/definitions/ultimaker_original_dual.def.json index 55eddba85f..6c0aa739d9 100644 --- a/resources/definitions/ultimaker_original_dual.def.json +++ b/resources/definitions/ultimaker_original_dual.def.json @@ -13,7 +13,6 @@ "has_materials": true, "has_machine_quality": true, "quality_definition": "ultimaker_original", - "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"], "machine_extruder_trains": { "0": "ultimaker_original_dual_1st", From f5c9458e86fa0952022b1d633de87e116cb2268f Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Tue, 10 Jul 2018 09:37:52 +0200 Subject: [PATCH 05/10] Remove mechanism for exclude_materials The fields were gone from the data, but now we remove the mechanism too. Contributes to issue CURA-5460. --- cura/Machines/MaterialManager.py | 9 --------- 1 file changed, 9 deletions(-) diff --git a/cura/Machines/MaterialManager.py b/cura/Machines/MaterialManager.py index 5d691fcef4..b81be5b5a8 100644 --- a/cura/Machines/MaterialManager.py +++ b/cura/Machines/MaterialManager.py @@ -287,19 +287,10 @@ class MaterialManager(QObject): # 1. variant-specific material # 2. machine-specific material # 3. generic material (for fdmprinter) - machine_exclude_materials = machine_definition.getMetaDataEntry("exclude_materials", []) - material_id_metadata_dict = dict() # type: Dict[str, MaterialNode] for node in nodes_to_check: if node is not None: - # Only exclude the materials that are explicitly specified in the "exclude_materials" field. - # Do not exclude other materials that are of the same type. for material_id, node in node.material_map.items(): - if material_id in machine_exclude_materials: - Logger.log("d", "Exclude material [%s] for machine [%s]", - material_id, machine_definition.getId()) - continue - if material_id not in material_id_metadata_dict: material_id_metadata_dict[material_id] = node From d7eb5a76be3b84ff826cd1474cd39a3d68907b01 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Tue, 10 Jul 2018 15:16:16 +0200 Subject: [PATCH 06/10] Remove compatible role It is no longer used. Contributes to issue CURA-5460. --- cura/Machines/Models/BaseMaterialsModel.py | 2 -- cura/Machines/Models/BrandMaterialsModel.py | 1 - cura/Machines/Models/GenericMaterialsModel.py | 1 - 3 files changed, 4 deletions(-) diff --git a/cura/Machines/Models/BaseMaterialsModel.py b/cura/Machines/Models/BaseMaterialsModel.py index 4d0b9eea36..03763e9a51 100644 --- a/cura/Machines/Models/BaseMaterialsModel.py +++ b/cura/Machines/Models/BaseMaterialsModel.py @@ -21,7 +21,6 @@ class BaseMaterialsModel(ListModel): MaterialRole = Qt.UserRole + 5 ColorRole = Qt.UserRole + 6 ContainerNodeRole = Qt.UserRole + 7 - CompatibleRole = Qt.UserRole + 8 extruderPositionChanged = pyqtSignal() @@ -37,7 +36,6 @@ class BaseMaterialsModel(ListModel): self.addRoleName(self.MaterialRole, "material") self.addRoleName(self.ColorRole, "color_name") self.addRoleName(self.ContainerNodeRole, "container_node") - self.addRoleName(self.CompatibleRole, "compatible") self._extruder_position = 0 self._extruder_stack = None diff --git a/cura/Machines/Models/BrandMaterialsModel.py b/cura/Machines/Models/BrandMaterialsModel.py index dd286490ff..d1e7eb0bb3 100644 --- a/cura/Machines/Models/BrandMaterialsModel.py +++ b/cura/Machines/Models/BrandMaterialsModel.py @@ -125,7 +125,6 @@ class BrandMaterialsModel(ListModel): "material": metadata["material"], "color_name": metadata["color_name"], "container_node": container_node, - "compatible": metadata.get("compatible", True) } brand_group_dict[brand][material_type].append(item) diff --git a/cura/Machines/Models/GenericMaterialsModel.py b/cura/Machines/Models/GenericMaterialsModel.py index 1580e7ff0c..eaf728afb7 100644 --- a/cura/Machines/Models/GenericMaterialsModel.py +++ b/cura/Machines/Models/GenericMaterialsModel.py @@ -54,7 +54,6 @@ class GenericMaterialsModel(BaseMaterialsModel): "material": metadata["material"], "color_name": metadata["color_name"], "container_node": container_node, - "compatible": metadata.get("compatible", True) } item_list.append(item) From f603b4c4263b7db74bfe38114061fab32071a964 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Tue, 10 Jul 2018 15:29:58 +0200 Subject: [PATCH 07/10] Also remove comma This makes the review task less, actually. Contributes to issue CURA-5460. --- cura/Machines/Models/BrandMaterialsModel.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cura/Machines/Models/BrandMaterialsModel.py b/cura/Machines/Models/BrandMaterialsModel.py index d1e7eb0bb3..729478d974 100644 --- a/cura/Machines/Models/BrandMaterialsModel.py +++ b/cura/Machines/Models/BrandMaterialsModel.py @@ -124,7 +124,7 @@ class BrandMaterialsModel(ListModel): "brand": metadata["brand"], "material": metadata["material"], "color_name": metadata["color_name"], - "container_node": container_node, + "container_node": container_node } brand_group_dict[brand][material_type].append(item) From d8f8f3f77e7c9949d9f5391e31783b97a1d0e34a Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Tue, 10 Jul 2018 15:36:19 +0200 Subject: [PATCH 08/10] Fix type of self._application Since the function is now typed, it actually checks for this. UM.Application has no function getMachineManager. cura.CuraApplication does. Contributes to issue CURA-5460. --- cura/Machines/Models/BaseMaterialsModel.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/cura/Machines/Models/BaseMaterialsModel.py b/cura/Machines/Models/BaseMaterialsModel.py index 03763e9a51..f21474bd33 100644 --- a/cura/Machines/Models/BaseMaterialsModel.py +++ b/cura/Machines/Models/BaseMaterialsModel.py @@ -1,9 +1,9 @@ # Copyright (c) 2018 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. -from PyQt5.QtCore import Qt, pyqtSignal, pyqtProperty +from PyQt5.QtCore import QObject, Qt, pyqtSignal, pyqtProperty -from UM.Application import Application +from cura.CuraApplication import CuraApplication from UM.Qt.ListModel import ListModel @@ -24,9 +24,9 @@ class BaseMaterialsModel(ListModel): extruderPositionChanged = pyqtSignal() - def __init__(self, parent = None) -> None: + def __init__(self, parent: QObject = None) -> None: super().__init__(parent) - self._application = Application.getInstance() + self._application = CuraApplication.getInstance() self._machine_manager = self._application.getMachineManager() self.addRoleName(self.RootMaterialIdRole, "root_material_id") From 74340334051af89f59d98ebcbbc18267924012fa Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Tue, 10 Jul 2018 15:36:52 +0200 Subject: [PATCH 09/10] Add type for item_list Just to be complete. Contributes to issue CURA-5460. --- cura/Machines/Models/GenericMaterialsModel.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/cura/Machines/Models/GenericMaterialsModel.py b/cura/Machines/Models/GenericMaterialsModel.py index eaf728afb7..369b59961c 100644 --- a/cura/Machines/Models/GenericMaterialsModel.py +++ b/cura/Machines/Models/GenericMaterialsModel.py @@ -1,6 +1,8 @@ # Copyright (c) 2018 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. +from typing import Dict, List + from UM.Logger import Logger from cura.Machines.Models.BaseMaterialsModel import BaseMaterialsModel @@ -38,7 +40,7 @@ class GenericMaterialsModel(BaseMaterialsModel): self.setItems([]) return - item_list = [] + item_list = [] #type: List[Dict[str, str]] for root_material_id, container_node in available_material_dict.items(): metadata = container_node.metadata # Only add results for generic materials From 3ee2b753e68fc64a7160e1cf53f8f76a15833cb0 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Tue, 10 Jul 2018 15:40:08 +0200 Subject: [PATCH 10/10] Fix circular import Yeah, running tests is not enough when it doesn't catch these. Contributes to issue CURA-5460. --- cura/Machines/Models/BaseMaterialsModel.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cura/Machines/Models/BaseMaterialsModel.py b/cura/Machines/Models/BaseMaterialsModel.py index f21474bd33..5480037563 100644 --- a/cura/Machines/Models/BaseMaterialsModel.py +++ b/cura/Machines/Models/BaseMaterialsModel.py @@ -3,7 +3,7 @@ from PyQt5.QtCore import QObject, Qt, pyqtSignal, pyqtProperty -from cura.CuraApplication import CuraApplication +import cura.CuraApplication from UM.Qt.ListModel import ListModel @@ -26,7 +26,7 @@ class BaseMaterialsModel(ListModel): def __init__(self, parent: QObject = None) -> None: super().__init__(parent) - self._application = CuraApplication.getInstance() + self._application = cura.CuraApplication.CuraApplication.getInstance() self._machine_manager = self._application.getMachineManager() self.addRoleName(self.RootMaterialIdRole, "root_material_id")