From 67a02ee90e34d1ec65ff7816d3f50762d2cc0557 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Wed, 12 Oct 2016 13:48:08 +0200 Subject: [PATCH 1/4] ActiveQualityType and activeQualityChangesId now use activeContainer CURA-2624 --- cura/Settings/MachineManager.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/cura/Settings/MachineManager.py b/cura/Settings/MachineManager.py index 3e36bab8e1..a4f0c4eb91 100644 --- a/cura/Settings/MachineManager.py +++ b/cura/Settings/MachineManager.py @@ -486,16 +486,16 @@ class MachineManager(QObject): @pyqtProperty(str, notify = activeQualityChanged) def activeQualityType(self): - if self._global_container_stack: - quality = self._global_container_stack.findContainer(type = "quality") + if self._active_container_stack: + quality = self._active_container_stack.findContainer(type = "quality") if quality: return quality.getMetaDataEntry("quality_type") return "" @pyqtProperty(str, notify = activeQualityChanged) def activeQualityChangesId(self): - if self._global_container_stack: - changes = self._global_container_stack.findContainer(type = "quality_changes") + if self._active_container_stack: + changes = self._active_container_stack.findContainer(type = "quality_changes") if changes: return changes.getId() return "" From 4a31f9c5b654e294a6736f9a725d880a929ac46c Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Wed, 12 Oct 2016 17:49:20 +0200 Subject: [PATCH 2/4] Removed wrong check for material for quality_changes CURA-2635 --- cura/Settings/QualitySettingsModel.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/cura/Settings/QualitySettingsModel.py b/cura/Settings/QualitySettingsModel.py index eb59c7597f..47c1bbbc73 100644 --- a/cura/Settings/QualitySettingsModel.py +++ b/cura/Settings/QualitySettingsModel.py @@ -110,9 +110,6 @@ class QualitySettingsModel(UM.Qt.ListModel.ListModel): "definition": quality_changes_container.getDefinition().getId() } - if self._material_id and self._material_id != "empty_material": - criteria["material"] = self._material_id - quality_container = self._container_registry.findInstanceContainers(**criteria) if not quality_container: UM.Logger.log("w", "Could not find a quality container matching quality changes %s", quality_changes_container.getId()) From c0654c56a046e99b2082fa4a5a0cf5a120986a75 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Wed, 12 Oct 2016 19:04:18 +0200 Subject: [PATCH 3/4] Variants are now taken into account when auto updating material CURA-2600 --- cura/Settings/MachineManager.py | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/cura/Settings/MachineManager.py b/cura/Settings/MachineManager.py index ef2fcd9342..342ef8b450 100644 --- a/cura/Settings/MachineManager.py +++ b/cura/Settings/MachineManager.py @@ -148,7 +148,17 @@ class MachineManager(QObject): if matching_extruder and matching_extruder.findContainer({"type": "material"}).getMetaDataEntry("GUID") != material_id: # Save the material that needs to be changed. Multiple changes will be handled by the callback. - self._auto_materials_changed[str(index)] = containers[0].getId() + if matching_extruder: + variant_container = matching_extruder.findContainer({"type": "variant"}) + if self._global_container_stack.getBottom().getMetaDataEntry("has_variants") and variant_container: + variant_id = self.getQualityVariantId(self._global_container_stack.getBottom(), variant_container) + for container in containers: + if container.getMetaDataEntry("variant") == variant_id: + self._auto_materials_changed[str(index)] = container.getId() + break + else: + # Just use the first result we found. + self._auto_materials_changed[str(index)] = containers[0].getId() self._printer_output_devices[0].materialHotendChangedMessage(self._materialHotendChangedCallback) else: Logger.log("w", "No material definition found for printer definition %s and GUID %s" % (definition_id, material_id)) From f659d01da185380268ff18fd5f0e2bf0dea7307d Mon Sep 17 00:00:00 2001 From: Simon Edwards Date: Thu, 13 Oct 2016 10:55:32 +0200 Subject: [PATCH 4/4] Make the labels in the quality menus match those from the selected extruder. CURA-2271 Warn for unsupported material/printcore combinations --- cura/QualityManager.py | 3 ++- cura/Settings/ProfilesModel.py | 11 ++++++++++- cura/Settings/QualityAndUserProfilesModel.py | 12 ++++++++++-- 3 files changed, 22 insertions(+), 4 deletions(-) diff --git a/cura/QualityManager.py b/cura/QualityManager.py index c356951156..09e9d283ed 100644 --- a/cura/QualityManager.py +++ b/cura/QualityManager.py @@ -131,7 +131,8 @@ class QualityManager: # # \param global_container_stack \type{ContainerStack} the global machine definition # \param extruder_stacks \type{List[ContainerStack]} the list of extruder stacks - # \return \type{List[InstanceContainer]} the list of the matching qualities + # \return \type{List[InstanceContainer]} the list of the matching qualities. The quality profiles + # return come from the first extruder in the given list of extruders. def findAllUsableQualitiesForMachineAndExtruders(self, global_container_stack, extruder_stacks): global_machine_definition = global_container_stack.getBottom() diff --git a/cura/Settings/ProfilesModel.py b/cura/Settings/ProfilesModel.py index 5b82ce9221..8c0cb1a93c 100644 --- a/cura/Settings/ProfilesModel.py +++ b/cura/Settings/ProfilesModel.py @@ -28,5 +28,14 @@ class ProfilesModel(InstanceContainersModel): if global_container_stack is None: return [] + # 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() + extruder_stacks.remove(active_extruder) + extruder_stacks = [active_extruder] + extruder_stacks + + # Fetch the list of useable qualities across all extruders. + # The actual list of quality profiles come from the first extruder in the extruder list. return QualityManager.getInstance().findAllUsableQualitiesForMachineAndExtruders(global_container_stack, - ExtruderManager.getInstance().getActiveExtruderStacks()) + extruder_stacks) diff --git a/cura/Settings/QualityAndUserProfilesModel.py b/cura/Settings/QualityAndUserProfilesModel.py index dcb6c698cf..3ca5507c5b 100644 --- a/cura/Settings/QualityAndUserProfilesModel.py +++ b/cura/Settings/QualityAndUserProfilesModel.py @@ -25,9 +25,17 @@ class QualityAndUserProfilesModel(ProfilesModel): machine_definition = quality_manager.getParentMachineDefinition(global_container_stack.getBottom()) quality_changes_list = quality_manager.findAllQualityChangesForMachine(machine_definition) - # Fetch the list of qualities + # 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() + extruder_stacks.remove(active_extruder) + extruder_stacks = [active_extruder] + extruder_stacks + + # Fetch the list of useable qualities across all extruders. + # The actual list of quality profiles come from the first extruder in the extruder list. quality_list = QualityManager.getInstance().findAllUsableQualitiesForMachineAndExtruders(global_container_stack, - ExtruderManager.getInstance().getActiveExtruderStacks()) + extruder_stacks) # Filter the quality_change by the list of available quality_types quality_type_set = set([x.getMetaDataEntry("quality_type") for x in quality_list])