From 57991a44d539da35c3c27f665f68a5a13ed56d6d Mon Sep 17 00:00:00 2001 From: Ian Paschal Date: Mon, 26 Mar 2018 16:59:24 +0200 Subject: [PATCH 1/6] CURA-5141 Suggestions from Terri --- plugins/ChangeLogPlugin/ChangeLog.txt | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/plugins/ChangeLogPlugin/ChangeLog.txt b/plugins/ChangeLogPlugin/ChangeLog.txt index 951938cad9..c876ec40e9 100755 --- a/plugins/ChangeLogPlugin/ChangeLog.txt +++ b/plugins/ChangeLogPlugin/ChangeLog.txt @@ -18,7 +18,7 @@ This new feature allows you to easily add small cubic areas which prevent suppor A convenient way to select a preset of settings to be visible. These presets guide you to find the most important Cura settings in an incremental way. A small menu is located next to the ‘search bar’ to easily access these new setting visibility presets. *Model assistant -This feature provides useful information to the user based on their model. For now, it informs the user when printing models with a footprint larger than 15x15x15cm, printed with ABS, PC, PP or CPE+, that they may want to make changes to the model such as filleting sharp edges. +This feature provides useful information to the user based on their model. For now, it informs the user when printing models with a footprint larger than 15x15x10cm, printed with ABS, PC, PP or CPE+, that they may want to make changes to the model such as filleting sharp edges. *Circular prime tower The prime tower shape has changed from rectangular to circular. This shape should increase the adhesion to the build plate, overall strength, and prevent delamination of the layers. @@ -60,6 +60,9 @@ Also Alexander Roessler made a new NGC writer plugin so you can export files in *Pre-heat extruders - fieldOfView This new feature allows to preheat the extruders in the printer monitor. +*GZ Reader +By default, G-code for Ultimaker 3 machines is now saved as gzipped G-Code. + *Print preview image Adds a preview image of the gcode to the slice information. This can be shown in Cura Connect. From 2240c38fd72b97a933e55ab76855db7a7ab7a5df Mon Sep 17 00:00:00 2001 From: Aleksei S Date: Mon, 26 Mar 2018 17:11:38 +0200 Subject: [PATCH 2/6] Exclude HIPS and PETG material for UM CURA-5149 --- cura/Machines/Models/GenericMaterialsModel.py | 63 +++---------------- resources/definitions/ultimaker.def.json | 3 +- 2 files changed, 9 insertions(+), 57 deletions(-) diff --git a/cura/Machines/Models/GenericMaterialsModel.py b/cura/Machines/Models/GenericMaterialsModel.py index 73a10b313e..c185432f32 100644 --- a/cura/Machines/Models/GenericMaterialsModel.py +++ b/cura/Machines/Models/GenericMaterialsModel.py @@ -1,10 +1,8 @@ # Copyright (c) 2018 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. -from typing import Dict from UM.Logger import Logger from cura.Machines.Models.BaseMaterialsModel import BaseMaterialsModel -from cura.Machines.MaterialNode import MaterialNode class GenericMaterialsModel(BaseMaterialsModel): @@ -33,6 +31,7 @@ class GenericMaterialsModel(BaseMaterialsModel): self.setItems([]) return extruder_stack = global_stack.extruders[extruder_position] + exclude_materials = set(global_stack.definition.getMetaDataEntry("exclude_materials", [])) available_material_dict = self._material_manager.getAvailableMaterialsForMachineExtruder(global_stack, extruder_stack) @@ -40,25 +39,12 @@ class GenericMaterialsModel(BaseMaterialsModel): self.setItems([]) return - # Check if it's an Ultimaker printer - printer_manufacturer = global_stack.getMetaDataEntry("manufacturer", "") - is_ultimaker_printer = "ultimaker" in printer_manufacturer.lower() - - # For Ultimaker printers, only show the generic materials that are supported. - if not is_ultimaker_printer: - item_list = self._getGenericProfiles(available_material_dict) - else: - item_list = self._getUltimakerGenericProfiles(available_material_dict) - - # Sort the item list by material name alphabetically - item_list = sorted(item_list, key = lambda d: d["name"].upper()) - - self.setItems(item_list) - - def _getGenericProfiles(self, available_material_dict): item_list = [] for root_material_id, container_node in available_material_dict.items(): metadata = container_node.metadata + # Skip excluded materials + if metadata["id"] in exclude_materials: + continue # Only add results for generic materials if metadata["brand"].lower() != "generic": continue @@ -73,42 +59,7 @@ class GenericMaterialsModel(BaseMaterialsModel): } item_list.append(item) - return item_list + # Sort the item list by material name alphabetically + item_list = sorted(item_list, key = lambda d: d["name"].upper()) - ## The method filters available materials by name. If material is not defined for Ultimaker printers - # then it will be removed - # \available_material_dict \type{dictionary} - # \return The filtered list - def _getUltimakerGenericProfiles(self, available_material_dict: Dict[str, MaterialNode]): - generic_item_list = [] - ultimaker_item_set = set() - - for root_material_id, container_node in available_material_dict.items(): - metadata = container_node.metadata - - is_ultimaker_brand = False - brand_name = metadata["brand"].lower() - - if brand_name != "generic": - if brand_name == 'ultimaker': - is_ultimaker_brand = True - else: - continue - - item = {"root_material_id": root_material_id, - "id": metadata["id"], - "name": metadata["name"], - "brand": metadata["brand"], - "material": metadata["material"], - "color_name": metadata["color_name"], - "container_node": container_node - } - if is_ultimaker_brand: - ultimaker_item_set.add(item['material']) - else: - generic_item_list.append(item) - - # If material is not in ultimaker list then remove it - item_list = [material for material in generic_item_list if material['material'] in ultimaker_item_set] - - return item_list + self.setItems(item_list) diff --git a/resources/definitions/ultimaker.def.json b/resources/definitions/ultimaker.def.json index 1ca7444d04..a980a1afdf 100644 --- a/resources/definitions/ultimaker.def.json +++ b/resources/definitions/ultimaker.def.json @@ -6,7 +6,8 @@ "author": "Ultimaker", "manufacturer": "Ultimaker B.V.", "category": "Ultimaker", - "visible": false + "visible": false, + "exclude_materials": [ "generic_hips", "generic_petg" ] }, "overrides": { "machine_max_feedrate_e": { From 5e1f29ec1c088309624d868aa789025a962ba327 Mon Sep 17 00:00:00 2001 From: Ian Paschal Date: Tue, 27 Mar 2018 10:40:27 +0200 Subject: [PATCH 3/6] CURA-5141 added persistent scripts --- plugins/ChangeLogPlugin/ChangeLog.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/plugins/ChangeLogPlugin/ChangeLog.txt b/plugins/ChangeLogPlugin/ChangeLog.txt index c876ec40e9..2b7f1682db 100755 --- a/plugins/ChangeLogPlugin/ChangeLog.txt +++ b/plugins/ChangeLogPlugin/ChangeLog.txt @@ -60,6 +60,9 @@ Also Alexander Roessler made a new NGC writer plugin so you can export files in *Pre-heat extruders - fieldOfView This new feature allows to preheat the extruders in the printer monitor. +*Persistent post-processing scripts +Scripts are no longer erased after restarting Ultimaker Cura. + *GZ Reader By default, G-code for Ultimaker 3 machines is now saved as gzipped G-Code. From 04a135e6a3be1bbf6e03635b405594837aad1dfa Mon Sep 17 00:00:00 2001 From: Jack Ha Date: Tue, 27 Mar 2018 13:04:05 +0200 Subject: [PATCH 4/6] CURA-5157 renamed extruder to position in addExtruderStackForSingleExtrusionMachine, fixes loading some upgrades from 3.0 --- cura/Settings/CuraContainerRegistry.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/cura/Settings/CuraContainerRegistry.py b/cura/Settings/CuraContainerRegistry.py index ab48eaddd2..bdb9f9e6df 100644 --- a/cura/Settings/CuraContainerRegistry.py +++ b/cura/Settings/CuraContainerRegistry.py @@ -516,7 +516,7 @@ class CuraContainerRegistry(ContainerRegistry): user_container.addMetaDataEntry("machine", machine.getId()) user_container.addMetaDataEntry("setting_version", CuraApplication.SettingVersion) user_container.setDefinition(machine.definition.getId()) - user_container.setMetaDataEntry("extruder", extruder_stack.getId()) + user_container.setMetaDataEntry("position", extruder_stack.getMetaDataEntry("position")) if machine.userChanges: # for the newly created extruder stack, we need to move all "per-extruder" settings to the user changes @@ -579,7 +579,7 @@ class CuraContainerRegistry(ContainerRegistry): extruder_quality_changes_container = self._findQualityChangesContainerInCuraFolder(machine_quality_changes.getName()) if extruder_quality_changes_container: quality_changes_id = extruder_quality_changes_container.getId() - extruder_quality_changes_container.addMetaDataEntry("extruder", extruder_stack.definition.getId()) + extruder_quality_changes_container.addMetaDataEntry("position", extruder_definition.getMetaDataEntry("position")) extruder_stack.qualityChanges = self.findInstanceContainers(id = quality_changes_id)[0] else: # if we still cannot find a quality changes container for the extruder, create a new one @@ -589,7 +589,7 @@ class CuraContainerRegistry(ContainerRegistry): extruder_quality_changes_container.setName(container_name) extruder_quality_changes_container.addMetaDataEntry("type", "quality_changes") extruder_quality_changes_container.addMetaDataEntry("setting_version", CuraApplication.SettingVersion) - extruder_quality_changes_container.addMetaDataEntry("extruder", extruder_stack.definition.getId()) + extruder_quality_changes_container.addMetaDataEntry("position", extruder_definition.getMetaDataEntry("position")) extruder_quality_changes_container.addMetaDataEntry("quality_type", machine_quality_changes.getMetaDataEntry("quality_type")) extruder_quality_changes_container.setDefinition(machine_quality_changes.getDefinition().getId()) @@ -649,8 +649,8 @@ class CuraContainerRegistry(ContainerRegistry): for qc_name, qc_list in qc_groups.items(): qc_dict = {"global": None, "extruders": []} for qc in qc_list: - extruder_def_id = qc.getMetaDataEntry("extruder") - if extruder_def_id is not None: + extruder_position = qc.getMetaDataEntry("position") + if extruder_position is not None: qc_dict["extruders"].append(qc) else: qc_dict["global"] = qc From ca4cb419ff13e774a70054b95e96282c1c7bbad4 Mon Sep 17 00:00:00 2001 From: Jack Ha Date: Tue, 27 Mar 2018 14:08:12 +0200 Subject: [PATCH 5/6] CURA-5157 prevent some startup crash after upgrading from 2.7 --- cura/Settings/MachineManager.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/cura/Settings/MachineManager.py b/cura/Settings/MachineManager.py index c25b58fbcf..e39c150caa 100755 --- a/cura/Settings/MachineManager.py +++ b/cura/Settings/MachineManager.py @@ -231,11 +231,13 @@ class MachineManager(QObject): extruder_stack.containersChanged.disconnect(self._onInstanceContainersChanged) # Update the local global container stack reference + old_global_container_stack = self._global_container_stack self._global_container_stack = Application.getInstance().getGlobalContainerStack() if self._global_container_stack: self.updateDefaultExtruder() self.updateNumberExtrudersEnabled() - self.globalContainerChanged.emit() + if old_global_container_stack != self._global_container_stack: + self.globalContainerChanged.emit() # after switching the global stack we reconnect all the signals and set the variant and material references if self._global_container_stack: @@ -1316,6 +1318,8 @@ class MachineManager(QObject): return name def _updateUponMaterialMetadataChange(self): + if self._global_container_stack is None: + return with postponeSignals(*self._getContainerChangedSignals(), compress = CompressTechnique.CompressPerParameterValue): self._updateMaterialWithVariant(None) self._updateQualityWithMaterial() From 98eed896862729fee7f66b13cab6805e2a1ad860 Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Tue, 27 Mar 2018 14:32:37 +0200 Subject: [PATCH 6/6] Remove global changed check that prevents signal emit CURA-5157 --- cura/Settings/MachineManager.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/cura/Settings/MachineManager.py b/cura/Settings/MachineManager.py index e39c150caa..09d9fc67b3 100755 --- a/cura/Settings/MachineManager.py +++ b/cura/Settings/MachineManager.py @@ -231,13 +231,11 @@ class MachineManager(QObject): extruder_stack.containersChanged.disconnect(self._onInstanceContainersChanged) # Update the local global container stack reference - old_global_container_stack = self._global_container_stack self._global_container_stack = Application.getInstance().getGlobalContainerStack() if self._global_container_stack: self.updateDefaultExtruder() self.updateNumberExtrudersEnabled() - if old_global_container_stack != self._global_container_stack: - self.globalContainerChanged.emit() + self.globalContainerChanged.emit() # after switching the global stack we reconnect all the signals and set the variant and material references if self._global_container_stack: