From 95cffb671011e3596edabc3884fd9a1465a39f9f Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Mon, 2 Dec 2019 13:59:50 +0100 Subject: [PATCH 01/18] Fix machine duplication when switching configuration --- cura/Settings/MachineManager.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/cura/Settings/MachineManager.py b/cura/Settings/MachineManager.py index d7a7586115..de6e270a86 100755 --- a/cura/Settings/MachineManager.py +++ b/cura/Settings/MachineManager.py @@ -1247,6 +1247,8 @@ class MachineManager(QObject): if metadata_key in new_machine.getMetaData(): continue # Don't copy the already preset stuff. new_machine.setMetaDataEntry(metadata_key, self._global_container_stack.getMetaDataEntry(metadata_key)) + # Special case, group_id should be overwritten! + new_machine.setMetaDataEntry("group_id", self._global_container_stack.getMetaDataEntry("group_id")) else: Logger.log("i", "Found a %s with the key %s. Let's use it!", machine_name, self.activeMachineNetworkKey()) From cd7f0e8a76f6a0e9856f242f47b16a65c9c46557 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Thu, 21 Nov 2019 13:10:01 +0100 Subject: [PATCH 02/18] Fix case where a global profile would be recognised as a extruder profile CURA-6991 --- cura/Machines/MachineNode.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cura/Machines/MachineNode.py b/cura/Machines/MachineNode.py index 8d69ffdc8d..92f71b409b 100644 --- a/cura/Machines/MachineNode.py +++ b/cura/Machines/MachineNode.py @@ -140,7 +140,7 @@ class MachineNode(ContainerNode): elif groups_by_name[name].intent_category == "default": # Intent category should be stored as "default" if everything is default or as the intent if any of the extruder have an actual intent. groups_by_name[name].intent_category = quality_changes.get("intent_category", "default") - if quality_changes.get("position") is not None: # An extruder profile. + if quality_changes.get("position") is not None and quality_changes.get("position") != "None": # An extruder profile. groups_by_name[name].metadata_per_extruder[int(quality_changes["position"])] = quality_changes else: # Global profile. groups_by_name[name].metadata_for_global = quality_changes From b77de636d4a27b6bf6ca4527b9c17008d5794ab1 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Thu, 21 Nov 2019 12:54:33 +0100 Subject: [PATCH 03/18] Prevent crashes when a variant could not be found This should not happen, but we've seen some cases where it would cause a crash, usually when a previous upgrade did something a bit weird (in this specific case; a printer with an empty variant, whereas it should have a variant). Since any change that the user will make will ensure that the variant is no longer empty (eg; any selection of a variant will mean it's no longer empty) and that there is no way back, it should be pretty safe to ignore the situation as it will resolve itself eventually CURA-6992 --- cura/Machines/Models/IntentModel.py | 4 ++++ cura/Settings/IntentManager.py | 6 +++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/cura/Machines/Models/IntentModel.py b/cura/Machines/Models/IntentModel.py index f5560bc94e..986f28a826 100644 --- a/cura/Machines/Models/IntentModel.py +++ b/cura/Machines/Models/IntentModel.py @@ -7,6 +7,7 @@ from PyQt5.QtCore import Qt, QObject, pyqtProperty, pyqtSignal import cura.CuraApplication from UM.Qt.ListModel import ListModel from UM.Settings.ContainerRegistry import ContainerRegistry +from UM.Logger import Logger from cura.Machines.ContainerTree import ContainerTree from cura.Machines.MaterialNode import MaterialNode from cura.Machines.Models.MachineModelUtils import fetchLayerHeight @@ -101,6 +102,9 @@ class IntentModel(ListModel): for extruder in global_stack.extruderList: active_variant_name = extruder.variant.getMetaDataEntry("name") + if active_variant_name not in machine_node.variants: + Logger.log("w", "Could not find the variant %s", active_variant_name) + continue active_variant_node = machine_node.variants[active_variant_name] active_material_node = active_variant_node.materials[extruder.material.getMetaDataEntry("base_file")] nodes.add(active_material_node) diff --git a/cura/Settings/IntentManager.py b/cura/Settings/IntentManager.py index c53022fb6c..f1c21c505f 100644 --- a/cura/Settings/IntentManager.py +++ b/cura/Settings/IntentManager.py @@ -39,7 +39,11 @@ class IntentManager(QObject): # an empty list if nothing was found. def intentMetadatas(self, definition_id: str, nozzle_name: str, material_base_file: str) -> List[Dict[str, Any]]: intent_metadatas = [] # type: List[Dict[str, Any]] - materials = ContainerTree.getInstance().machines[definition_id].variants[nozzle_name].materials + try: + materials = ContainerTree.getInstance().machines[definition_id].variants[nozzle_name].materials + except KeyError: + Logger.log("w", "Unable to find the machine %s or the variant %s", definition_id, nozzle_name) + materials = {} if material_base_file not in materials: return intent_metadatas From cef0ae349d719a32a261400526f910d69402ef21 Mon Sep 17 00:00:00 2001 From: Nino van Hooff Date: Tue, 10 Dec 2019 13:53:26 +0100 Subject: [PATCH 04/18] Fix selecting a new material for a base file on container deletion CURA-7023 --- cura/Machines/VariantNode.py | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/cura/Machines/VariantNode.py b/cura/Machines/VariantNode.py index b2115ca099..7599c7baf7 100644 --- a/cura/Machines/VariantNode.py +++ b/cura/Machines/VariantNode.py @@ -168,15 +168,21 @@ class VariantNode(ContainerNode): # Search for any submaterials from that base file that are still left. materials_same_base_file = ContainerRegistry.getInstance().findContainersMetadata(base_file = base_file) if materials_same_base_file: - most_specific_submaterial = materials_same_base_file[0] + most_specific_submaterial = None for submaterial in materials_same_base_file: if submaterial["definition"] == self.machine.container_id: - if most_specific_submaterial["definition"] == "fdmprinter": + if submaterial.get("variant_name", "empty") == self.variant_name: most_specific_submaterial = submaterial - if most_specific_submaterial.get("variant_name", "empty") == "empty" and submaterial.get("variant_name", "empty") == self.variant_name: + break # most specific match possible + if submaterial.get("variant_name", "empty") == "empty": most_specific_submaterial = submaterial - self.materials[base_file] = MaterialNode(most_specific_submaterial["id"], variant = self) - self.materialsChanged.emit(self.materials[base_file]) + + if most_specific_submaterial is None: + Logger.log("w", "Material %s removed, but no suitable replacement found", base_file) + else: + Logger.log("i", "Material %s (%s) overridden by %s", base_file, self.variant_name, most_specific_submaterial.get("id")) + self.materials[base_file] = MaterialNode(most_specific_submaterial["id"], variant = self) + self.materialsChanged.emit(self.materials[base_file]) if not self.materials: # The last available material just got deleted and there is nothing with the same base file to replace it. self.materials["empty_material"] = MaterialNode("empty_material", variant = self) From 8cc054cecca8922a3c3b587621e7f60c3b2e3560 Mon Sep 17 00:00:00 2001 From: Remco Burema Date: Fri, 22 Nov 2019 12:01:46 +0100 Subject: [PATCH 05/18] Add missing 'material break preparation temperature'. part of CURA-6971 (cherry picked from commit 25f0460231fd970b73744fb3fe1c004dc68a5dc9) --- plugins/XmlMaterialProfile/XmlMaterialProfile.py | 1 + resources/definitions/fdmprinter.def.json | 14 ++++++++++++++ 2 files changed, 15 insertions(+) diff --git a/plugins/XmlMaterialProfile/XmlMaterialProfile.py b/plugins/XmlMaterialProfile/XmlMaterialProfile.py index 093638d594..8b9e838052 100644 --- a/plugins/XmlMaterialProfile/XmlMaterialProfile.py +++ b/plugins/XmlMaterialProfile/XmlMaterialProfile.py @@ -1102,6 +1102,7 @@ class XmlMaterialProfile(InstanceContainer): "anti ooze retract speed": "material_anti_ooze_retraction_speed", "break preparation position": "material_break_preparation_retracted_position", "break preparation speed": "material_break_preparation_speed", + "break preparation temperature": "material_break_preparation_temperature", "break position": "material_break_retracted_position", "break speed": "material_break_speed", "break temperature": "material_break_temperature" diff --git a/resources/definitions/fdmprinter.def.json b/resources/definitions/fdmprinter.def.json index 90d6c8e2d8..3d22e8f03c 100644 --- a/resources/definitions/fdmprinter.def.json +++ b/resources/definitions/fdmprinter.def.json @@ -2355,6 +2355,20 @@ "settable_per_mesh": false, "settable_per_extruder": true }, + "material_break_preparation_temperature": + { + "label": "Break Preparation Temperature", + "description": "The temperature used to purge material, should be roughly equal to the highest possible printing temperature.", + "type": "float", + "unit": "°C", + "default_value": 50, + "value": "material_print_temperature", + "enabled": false, + "minimum_value": "-273.15", + "maximum_value_warning": "300", + "settable_per_mesh": false, + "settable_per_extruder": true + }, "material_break_retracted_position": { "label": "Break Retracted Position", From a1d7eefc425d6865115e76ea2c749376764741e9 Mon Sep 17 00:00:00 2001 From: Kostas Karmas Date: Mon, 16 Dec 2019 14:04:16 +0100 Subject: [PATCH 06/18] Fix PPA crashing on single-extruder printers The machine manager was leading to a crash when trying to enable the second extruder in single-extrusion printers, because the check for the second extruder was not correctly implemented. This commit fixes that issue by checking if the global stack has the specified extruder. If it does not, then the function returns while logging the issue. CURA-7048 --- cura/Settings/MachineManager.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cura/Settings/MachineManager.py b/cura/Settings/MachineManager.py index de6e270a86..3167bf78b9 100755 --- a/cura/Settings/MachineManager.py +++ b/cura/Settings/MachineManager.py @@ -894,8 +894,8 @@ class MachineManager(QObject): @pyqtSlot(int, bool) def setExtruderEnabled(self, position: int, enabled: bool) -> None: - if self._global_container_stack is None: - Logger.log("w", "Could not find extruder on position %s", position) + if self._global_container_stack is None or position not in self._global_container_stack.extruders: + Logger.log("w", "Could not find extruder on position %s.", position) return extruder = self._global_container_stack.extruderList[position] From 50b8ff235250983cd958b6dfeb0f821fb9f1664a Mon Sep 17 00:00:00 2001 From: Kostas Karmas Date: Tue, 17 Dec 2019 09:43:13 +0100 Subject: [PATCH 07/18] Fix check that finds the extruder in a position CURA-7048 --- cura/Settings/MachineManager.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cura/Settings/MachineManager.py b/cura/Settings/MachineManager.py index 3167bf78b9..7774a5a52e 100755 --- a/cura/Settings/MachineManager.py +++ b/cura/Settings/MachineManager.py @@ -894,7 +894,7 @@ class MachineManager(QObject): @pyqtSlot(int, bool) def setExtruderEnabled(self, position: int, enabled: bool) -> None: - if self._global_container_stack is None or position not in self._global_container_stack.extruders: + if self._global_container_stack is None or str(position) not in self._global_container_stack.extruders: Logger.log("w", "Could not find extruder on position %s.", position) return extruder = self._global_container_stack.extruderList[position] From f9739e2af84c53ab8b63d84339140a2ec14b0035 Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Tue, 17 Dec 2019 10:26:43 +0100 Subject: [PATCH 08/18] Fix typing --- plugins/UM3NetworkPrinting/src/Network/ZeroConfClient.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/plugins/UM3NetworkPrinting/src/Network/ZeroConfClient.py b/plugins/UM3NetworkPrinting/src/Network/ZeroConfClient.py index 0446af177b..413014410d 100644 --- a/plugins/UM3NetworkPrinting/src/Network/ZeroConfClient.py +++ b/plugins/UM3NetworkPrinting/src/Network/ZeroConfClient.py @@ -123,7 +123,9 @@ class ZeroConfClient: # Request more data if info is not complete if not info.address: - info = zero_conf.get_service_info(service_type, name) + new_info = zero_conf.get_service_info(service_type, name) + if new_info is not None: + info = new_info if info: type_of_device = info.properties.get(b"type", None) From d30c63a3fbd68cda9ca07f318f42bfe59e00897a Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Tue, 17 Dec 2019 11:38:52 +0100 Subject: [PATCH 09/18] WIP: Add GH Actions --- .github/workflows/cicd.yml | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 .github/workflows/cicd.yml diff --git a/.github/workflows/cicd.yml b/.github/workflows/cicd.yml new file mode 100644 index 0000000000..54747e55af --- /dev/null +++ b/.github/workflows/cicd.yml @@ -0,0 +1,13 @@ +--- +name: CI/CD +on: [push, pull_request] +jobs: + build: + name: Build and test + runs-on: ubuntu-latest + container: ultimaker/cura-build-environment + steps: + - name: Checkout code + uses: actions/checkout@v1.2.0 + - name: Build and test + run: docker/build.sh From 2048bc60f7b3ec2581a21414d2e28ec3ec647cd5 Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Tue, 17 Dec 2019 12:30:20 +0100 Subject: [PATCH 10/18] WIP: Update GH Actions --- .github/workflows/cicd.yml | 4 ++-- docker/build.sh | 10 +++++++++- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/.github/workflows/cicd.yml b/.github/workflows/cicd.yml index 54747e55af..5e1e5aa6bb 100644 --- a/.github/workflows/cicd.yml +++ b/.github/workflows/cicd.yml @@ -7,7 +7,7 @@ jobs: runs-on: ubuntu-latest container: ultimaker/cura-build-environment steps: - - name: Checkout code - uses: actions/checkout@v1.2.0 + - name: Checkout Cura + uses: actions/checkout@v2 - name: Build and test run: docker/build.sh diff --git a/docker/build.sh b/docker/build.sh index eb20b18c0d..4510692bf2 100755 --- a/docker/build.sh +++ b/docker/build.sh @@ -20,7 +20,15 @@ cd "${PROJECT_DIR}" # Check the branch to use: # 1. Use the Uranium branch with the branch same if it exists. # 2. Otherwise, use the default branch name "master" -URANIUM_BRANCH="${CI_COMMIT_REF_NAME:-master}" +echo "GITHUB_REF: ${GITHUB_REF}" +echo "GITHUB_BASE_REF: ${GITHUB_BASE_REF}" + +GIT_REF_NAME="${GITHUB_REF}" +if [ -n "${GITHUB_BASE_REF}" ]; then + GIT_REF_NAME="${GITHUB_BASE_REF}" +fi + +URANIUM_BRANCH="${GIT_REF_NAME:-master}" output="$(git ls-remote --heads https://github.com/Ultimaker/Uranium.git "${URANIUM_BRANCH}")" if [ -z "${output}" ]; then echo "Could not find Uranium banch ${URANIUM_BRANCH}, fallback to use master." From 46020d5541289225797e23437b68e21b060bfdac Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Tue, 17 Dec 2019 12:38:44 +0100 Subject: [PATCH 11/18] WIP: Fix fetching Uranium --- docker/build.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/docker/build.sh b/docker/build.sh index 4510692bf2..6aa0678ca3 100755 --- a/docker/build.sh +++ b/docker/build.sh @@ -27,6 +27,7 @@ GIT_REF_NAME="${GITHUB_REF}" if [ -n "${GITHUB_BASE_REF}" ]; then GIT_REF_NAME="${GITHUB_BASE_REF}" fi +GIT_REF_NAME="$(basename "${GIT_REF_NAME}")" URANIUM_BRANCH="${GIT_REF_NAME:-master}" output="$(git ls-remote --heads https://github.com/Ultimaker/Uranium.git "${URANIUM_BRANCH}")" From ff01b1dab984de84c6a9fac2c934f018230f1122 Mon Sep 17 00:00:00 2001 From: Nino van Hooff Date: Wed, 18 Dec 2019 11:46:40 +0100 Subject: [PATCH 12/18] Add 6 Material Station specific material settings. These settings are currently unused by cura, but passed into the PPA output. Some considerations: - material_ prepended to all. Even though they are not all material specific. The consistency is more developer-friendly imho - defaults taken from generic_pla - type is float for all, consistent with what I found in this file CURA-7041 --- .../XmlMaterialProfile/XmlMaterialProfile.py | 6 +++ resources/definitions/fdmprinter.def.json | 48 +++++++++++++++++++ 2 files changed, 54 insertions(+) diff --git a/plugins/XmlMaterialProfile/XmlMaterialProfile.py b/plugins/XmlMaterialProfile/XmlMaterialProfile.py index 8b9e838052..d98a6d6183 100644 --- a/plugins/XmlMaterialProfile/XmlMaterialProfile.py +++ b/plugins/XmlMaterialProfile/XmlMaterialProfile.py @@ -1104,6 +1104,12 @@ class XmlMaterialProfile(InstanceContainer): "break preparation speed": "material_break_preparation_speed", "break preparation temperature": "material_break_preparation_temperature", "break position": "material_break_retracted_position", + "flush purge speed": "material_flush_purge_speed", + "flush purge length": "material_flush_purge_length", + "end of filament purge speed": "material_end_of_material_purge_speed", + "end of filament purge length": "material_end_of_filament_purge_length", + "maximum park duration": "material_maximum_park_duration", + "no load move factor": "material_no_load_move_factor", "break speed": "material_break_speed", "break temperature": "material_break_temperature" } # type: Dict[str, str] diff --git a/resources/definitions/fdmprinter.def.json b/resources/definitions/fdmprinter.def.json index 3d22e8f03c..678c3e4d41 100644 --- a/resources/definitions/fdmprinter.def.json +++ b/resources/definitions/fdmprinter.def.json @@ -2408,6 +2408,54 @@ "settable_per_mesh": false, "settable_per_extruder": true }, + "material_flush_purge_speed": + { + "label": "Flush Purge Speed", + "description": "Material Station internal value", + "type": "float", + "default_value": 0.5, + "enabled": false + }, + "material_flush_purge_length": + { + "label": "Flush Purge Length", + "description": "Material Station internal value", + "type": "float", + "default_value": 60, + "enabled": false + }, + "material_end_of_filament_purge_speed": + { + "label": "End Of Filament Purge Speed", + "description": "Material Station internal value", + "type": "float", + "default_value": 0.5, + "enabled": false + }, + "material_end_of_filament_purge_length": + { + "label": "End Of Filament Purge Length", + "description": "Material Station internal value", + "type": "float", + "default_value": 20, + "enabled": false + }, + "material_maximum_park_duration": + { + "label": "Maximum Park Duration", + "description": "Material Station internal value", + "type": "float", + "default_value": 300, + "enabled": false + }, + "material_no_load_move_factor": + { + "label": "No Load Move Factor", + "description": "Material Station internal value", + "type": "float", + "default_value": 0.940860215, + "enabled": false + }, "material_flow": { "label": "Flow", From 4b313c2dac0627af42d327929279dbd23a43df3a Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Wed, 18 Dec 2019 15:38:21 +0100 Subject: [PATCH 13/18] Fix formatting CURA-7070 --- cura/Machines/MaterialNode.py | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/cura/Machines/MaterialNode.py b/cura/Machines/MaterialNode.py index fe20af2cd5..9f472eb7b5 100644 --- a/cura/Machines/MaterialNode.py +++ b/cura/Machines/MaterialNode.py @@ -60,21 +60,31 @@ class MaterialNode(ContainerNode): container_registry = ContainerRegistry.getInstance() # Find all quality profiles that fit on this material. if not self.variant.machine.has_machine_quality: # Need to find the global qualities. - qualities = container_registry.findInstanceContainersMetadata(type = "quality", definition = "fdmprinter") + qualities = container_registry.findInstanceContainersMetadata(type = "quality", + definition = "fdmprinter") elif not self.variant.machine.has_materials: - qualities = container_registry.findInstanceContainersMetadata(type="quality", definition=self.variant.machine.quality_definition) + qualities = container_registry.findInstanceContainersMetadata(type = "quality", + definition = self.variant.machine.quality_definition) else: if self.variant.machine.has_variants: # Need to find the qualities that specify a material profile with the same material type. - qualities = container_registry.findInstanceContainersMetadata(type = "quality", definition = self.variant.machine.quality_definition, variant = self.variant.variant_name, material = self.container_id) # First try by exact material ID. + qualities = container_registry.findInstanceContainersMetadata(type = "quality", + definition = self.variant.machine.quality_definition, + variant = self.variant.variant_name, + material = self.container_id) else: - qualities = container_registry.findInstanceContainersMetadata(type="quality", definition=self.variant.machine.quality_definition, material=self.container_id) + qualities = container_registry.findInstanceContainersMetadata(type = "quality", + definition = self.variant.machine.quality_definition, + material = self.container_id) if not qualities: my_material_type = self.material_type if self.variant.machine.has_variants: - qualities_any_material = container_registry.findInstanceContainersMetadata(type = "quality", definition = self.variant.machine.quality_definition, variant = self.variant.variant_name) + qualities_any_material = container_registry.findInstanceContainersMetadata(type = "quality", + definition = self.variant.machine.quality_definition, + variant = self.variant.variant_name) else: - qualities_any_material = container_registry.findInstanceContainersMetadata(type="quality", definition = self.variant.machine.quality_definition) + qualities_any_material = container_registry.findInstanceContainersMetadata(type = "quality", + definition = self.variant.machine.quality_definition) for material_metadata in container_registry.findInstanceContainersMetadata(type = "material", material = my_material_type): qualities.extend((quality for quality in qualities_any_material if quality.get("material") == material_metadata["id"])) From 6c9b8f992f2d752e692b1c30cc34e3babdd02508 Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Wed, 18 Dec 2019 15:39:09 +0100 Subject: [PATCH 14/18] Fix quality search with material base_file CURA-7070 --- cura/Machines/MaterialNode.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/cura/Machines/MaterialNode.py b/cura/Machines/MaterialNode.py index 9f472eb7b5..d68fd94e80 100644 --- a/cura/Machines/MaterialNode.py +++ b/cura/Machines/MaterialNode.py @@ -71,11 +71,14 @@ class MaterialNode(ContainerNode): qualities = container_registry.findInstanceContainersMetadata(type = "quality", definition = self.variant.machine.quality_definition, variant = self.variant.variant_name, - material = self.container_id) + material = self.base_file) # First try by exact material ID. + # CURA-7070 + # The quality profiles only reference a material with the material_root_id. They will never state something + # such as "generic_pla_ultimaker_s5_AA_0.4". So we search with the "base_file" which is the material_root_id. else: qualities = container_registry.findInstanceContainersMetadata(type = "quality", definition = self.variant.machine.quality_definition, - material = self.container_id) + material = self.base_file) if not qualities: my_material_type = self.material_type if self.variant.machine.has_variants: From cf6540f91d2fd2b755de4f84b76f0f3f609b713b Mon Sep 17 00:00:00 2001 From: Kostas Karmas Date: Wed, 18 Dec 2019 16:42:44 +0100 Subject: [PATCH 15/18] Fix qualities lookup for custom materials Search the qualities of the custom material based on the base_file and not based on the id. CURA-7070 --- cura/Machines/MaterialNode.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cura/Machines/MaterialNode.py b/cura/Machines/MaterialNode.py index d68fd94e80..4418467ba8 100644 --- a/cura/Machines/MaterialNode.py +++ b/cura/Machines/MaterialNode.py @@ -89,12 +89,12 @@ class MaterialNode(ContainerNode): qualities_any_material = container_registry.findInstanceContainersMetadata(type = "quality", definition = self.variant.machine.quality_definition) for material_metadata in container_registry.findInstanceContainersMetadata(type = "material", material = my_material_type): - qualities.extend((quality for quality in qualities_any_material if quality.get("material") == material_metadata["id"])) + qualities.extend((quality for quality in qualities_any_material if quality.get("material") == material_metadata["base_file"])) if not qualities: # No quality profiles found. Go by GUID then. my_guid = self.guid for material_metadata in container_registry.findInstanceContainersMetadata(type = "material", guid = my_guid): - qualities.extend((quality for quality in qualities_any_material if quality["material"] == material_metadata["id"])) + qualities.extend((quality for quality in qualities_any_material if quality["material"] == material_metadata["base_file"])) if not qualities: # There are still some machines that should use global profiles in the extruder, so do that now. From b90bed2c7d955821b73169d49c325bb326a7d312 Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Wed, 18 Dec 2019 16:52:20 +0100 Subject: [PATCH 16/18] Sync cicd.yml with master --- .github/workflows/cicd.yml | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/.github/workflows/cicd.yml b/.github/workflows/cicd.yml index 5e1e5aa6bb..40acbc44f3 100644 --- a/.github/workflows/cicd.yml +++ b/.github/workflows/cicd.yml @@ -1,6 +1,12 @@ --- name: CI/CD -on: [push, pull_request] +on: + push: + branches: + - master + - 'WIP**' + - '4.*' + pull_request: jobs: build: name: Build and test From f05f4ff2442a3db953df85de4df00a0c6b4f69de Mon Sep 17 00:00:00 2001 From: Remco Burema Date: Thu, 19 Dec 2019 11:38:53 +0100 Subject: [PATCH 17/18] Fix typo. part of CURA-7041 --- plugins/XmlMaterialProfile/XmlMaterialProfile.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/XmlMaterialProfile/XmlMaterialProfile.py b/plugins/XmlMaterialProfile/XmlMaterialProfile.py index d98a6d6183..6fbc155543 100644 --- a/plugins/XmlMaterialProfile/XmlMaterialProfile.py +++ b/plugins/XmlMaterialProfile/XmlMaterialProfile.py @@ -1106,7 +1106,7 @@ class XmlMaterialProfile(InstanceContainer): "break position": "material_break_retracted_position", "flush purge speed": "material_flush_purge_speed", "flush purge length": "material_flush_purge_length", - "end of filament purge speed": "material_end_of_material_purge_speed", + "end of filament purge speed": "material_end_of_filament_purge_speed", "end of filament purge length": "material_end_of_filament_purge_length", "maximum park duration": "material_maximum_park_duration", "no load move factor": "material_no_load_move_factor", From 8218d62e20f0843c252d510b0eb313c72e88268b Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Mon, 23 Dec 2019 10:52:51 +0100 Subject: [PATCH 18/18] Add change log entry for 4.4.1 Contributes to issue CURA-7047. --- resources/texts/change_log.txt | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/resources/texts/change_log.txt b/resources/texts/change_log.txt index dfb3ab0ab1..3aaa727141 100644 --- a/resources/texts/change_log.txt +++ b/resources/texts/change_log.txt @@ -1,3 +1,8 @@ +[4.4.1] +* Bug fixes + - Fixed problem where wrong material was selected by default. + - Fixed a problem where custom profiles were disappearing when loading a project without a nozzle profile. + [4.4.0] *Intent profiles. What’s the intent of your print? A rapid prototype? A visual prototype? An end-use part with specific holes sizes? Intent profiles accelerate the CAD-CAM workflow by preconfiguring all the right settings in Ultimaker Cura for each of these use cases. Simply select a profile that matches the intent of your design, slice, and you’re ready to print immediately, without the need to adjust the typical settings. For now, there are three Intent profiles: