From d29c8172895440b28d401141c19e8d58f1f95fe9 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Thu, 29 Sep 2016 11:56:46 +0200 Subject: [PATCH 01/13] Actually apply translated settings Don't know when this changed or why it hasn't propped up until then... Contributes to issue CURA-844. --- plugins/VersionUpgrade/VersionUpgrade21to22/Profile.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/plugins/VersionUpgrade/VersionUpgrade21to22/Profile.py b/plugins/VersionUpgrade/VersionUpgrade21to22/Profile.py index 4894df84aa..8ff6b2a5eb 100644 --- a/plugins/VersionUpgrade/VersionUpgrade21to22/Profile.py +++ b/plugins/VersionUpgrade/VersionUpgrade21to22/Profile.py @@ -59,7 +59,9 @@ class Profile: # Parse the settings. self._settings = {} if parser.has_section("settings"): + print("---------------------- have section Settings") for key, value in parser["settings"].items(): + print("----------------------", key, "=", value) self._settings[key] = value # Parse the defaults and the disabled defaults. @@ -105,13 +107,13 @@ class Profile: config.set("metadata", "variant", self._machine_variant_name) if self._settings: - VersionUpgrade21to22.VersionUpgrade21to22.VersionUpgrade21to22.translateSettings(self._settings) + self._settings = VersionUpgrade21to22.VersionUpgrade21to22.VersionUpgrade21to22.translateSettings(self._settings) config.add_section("values") for key, value in self._settings.items(): config.set("values", key, str(value)) if self._changed_settings_defaults: - VersionUpgrade21to22.VersionUpgrade21to22.VersionUpgrade21to22.translateSettings(self._changed_settings_defaults) + self._changed_settings_defaults = VersionUpgrade21to22.VersionUpgrade21to22.VersionUpgrade21to22.translateSettings(self._changed_settings_defaults) config.add_section("defaults") for key, value in self._changed_settings_defaults.items(): config.set("defaults", key, str(value)) From bee955327b2368bd0e5a302c6f32ae8dae006026 Mon Sep 17 00:00:00 2001 From: fieldOfView Date: Thu, 29 Sep 2016 12:04:05 +0200 Subject: [PATCH 02/13] Fix quality profile selection for printers that should use generic quality Fixes CURA-2489, contributes to CURA-2477 --- cura/QualityManager.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/cura/QualityManager.py b/cura/QualityManager.py index 8fba30838d..e33398fc35 100644 --- a/cura/QualityManager.py +++ b/cura/QualityManager.py @@ -63,9 +63,9 @@ class QualityManager: # Fill in any default values. if machine_definition is None: machine_definition = UM.Application.getInstance().getGlobalContainerStack().getBottom() - quality_definition = machine_definition.getMetaDataEntry("quality_definition") - if quality_definition is not None: - machine_definition = UM.Settings.ContainerRegistry.getInstance().findDefinitionContainers(id=quality_definition)[0] + quality_definition_id = machine_definition.getMetaDataEntry("quality_definition") + if quality_definition_id is not None: + machine_definition = UM.Settings.ContainerRegistry.getInstance().findDefinitionContainers(id=quality_definition_id)[0] if material_containers is None: active_stacks = cura.Settings.ExtruderManager.getInstance().getActiveGlobalAndExtruderStacks() @@ -81,6 +81,8 @@ class QualityManager: criteria["definition"] = definition_id filter_by_material = whole_machine_definition.getMetaDataEntry("has_materials") + else: + criteria["definition"] = "fdmprinter" # Stick the material IDs in a set if material_containers is None or len(material_containers) == 0: From b7ca569b849eb91d30b984524c725f99668b1b6c Mon Sep 17 00:00:00 2001 From: Tim Kuipers Date: Thu, 29 Sep 2016 12:09:31 +0200 Subject: [PATCH 03/13] JSON fix: prime_tower_wipe_enabled is now true by default (CURA-2420) --- resources/definitions/fdmprinter.def.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/definitions/fdmprinter.def.json b/resources/definitions/fdmprinter.def.json index ad9211fae3..d3d75e70f7 100644 --- a/resources/definitions/fdmprinter.def.json +++ b/resources/definitions/fdmprinter.def.json @@ -3404,7 +3404,7 @@ "description": "After printing the prime tower with one nozzle, wipe the oozed material from the other nozzle off on the prime tower.", "type": "bool", "enabled": "resolveOrValue('prime_tower_enable')", - "default_value": false, + "default_value": true, "settable_per_mesh": false, "settable_per_extruder": false }, From 4a85ee85c1213091d4e95a955885547f19495a89 Mon Sep 17 00:00:00 2001 From: Simon Edwards Date: Thu, 29 Sep 2016 12:25:50 +0200 Subject: [PATCH 04/13] Update the model when something changes in the global stack. Contributes to CURA-2477 Profile menu should only contain valid options for all materials --- cura/Settings/ProfilesModel.py | 2 ++ cura/Settings/ProfilesPageModel.py | 0 2 files changed, 2 insertions(+) create mode 100644 cura/Settings/ProfilesPageModel.py diff --git a/cura/Settings/ProfilesModel.py b/cura/Settings/ProfilesModel.py index 07a498a895..937f151b09 100644 --- a/cura/Settings/ProfilesModel.py +++ b/cura/Settings/ProfilesModel.py @@ -13,6 +13,8 @@ class ProfilesModel(InstanceContainersModel): def __init__(self, parent = None): super().__init__(parent) + Application.getInstance().globalContainerStackChanged.connect(self._update) + ## Fetch the list of containers to display. # # See UM.Settings.Models.InstanceContainersModel._fetchInstanceContainers(). diff --git a/cura/Settings/ProfilesPageModel.py b/cura/Settings/ProfilesPageModel.py new file mode 100644 index 0000000000..e69de29bb2 From 2742a4ef65c28df22ceeb8c949f229f7558c3b85 Mon Sep 17 00:00:00 2001 From: Simon Edwards Date: Thu, 29 Sep 2016 12:34:46 +0200 Subject: [PATCH 05/13] Show the correct list of qualities and quality change profiles. Contributes to CURA-2248 Duplicated profile not shown in the profile manager list --- cura/CuraApplication.py | 1 + cura/Settings/ProfilesPageModel.py | 35 ++++++++++++++++++++++ cura/Settings/__init__.py | 1 + resources/qml/Preferences/ProfilesPage.qml | 32 +------------------- 4 files changed, 38 insertions(+), 31 deletions(-) diff --git a/cura/CuraApplication.py b/cura/CuraApplication.py index 1c767ffda5..77bc3bbc49 100644 --- a/cura/CuraApplication.py +++ b/cura/CuraApplication.py @@ -503,6 +503,7 @@ class CuraApplication(QtApplication): qmlRegisterType(cura.Settings.ContainerSettingsModel, "Cura", 1, 0, "ContainerSettingsModel") qmlRegisterType(cura.Settings.ProfilesModel, "Cura", 1, 0, "ProfilesModel") + qmlRegisterType(cura.Settings.ProfilesPageModel, "Cura", 1, 0, "ProfilesPageModel") qmlRegisterType(cura.Settings.MaterialSettingsVisibilityHandler, "Cura", 1, 0, "MaterialSettingsVisibilityHandler") qmlRegisterType(cura.Settings.QualitySettingsModel, "Cura", 1, 0, "QualitySettingsModel") diff --git a/cura/Settings/ProfilesPageModel.py b/cura/Settings/ProfilesPageModel.py index e69de29bb2..77ed9b3bd3 100644 --- a/cura/Settings/ProfilesPageModel.py +++ b/cura/Settings/ProfilesPageModel.py @@ -0,0 +1,35 @@ +# Copyright (c) 2016 Ultimaker B.V. +# Uranium is released under the terms of the AGPLv3 or higher. +from UM.Application import Application +from UM.Settings.ContainerRegistry import ContainerRegistry + +from cura.QualityManager import QualityManager +from cura.Settings.ProfilesModel import ProfilesModel + +## QML Model for listing the current list of valid quality and quality changes profiles. +# +class ProfilesPageModel(ProfilesModel): + def __init__(self, parent = None): + super().__init__(parent) + + ## Fetch the list of containers to display. + # + # See UM.Settings.Models.InstanceContainersModel._fetchInstanceContainers(). + def _fetchInstanceContainers(self): + # Fetch the list of qualities + quality_list = super()._fetchInstanceContainers() + + # Fetch the list of quality changes. + quality_manager = QualityManager.getInstance() + application = Application.getInstance() + + machine_definition = quality_manager.getParentMachineDefinition(application.getGlobalContainerStack().getBottom()) + if machine_definition.getMetaDataEntry("has_machine_quality"): + definition_id = machine_definition.getId() + else: + definition_id = "fdmprinter" + + filter_dict = { "type": "quality_changes", "extruder": None, "definition": definition_id } + quality_changes_list = ContainerRegistry.getInstance().findInstanceContainers(**filter_dict) + + return quality_list + quality_changes_list diff --git a/cura/Settings/__init__.py b/cura/Settings/__init__.py index b5773d560a..6957e5031c 100644 --- a/cura/Settings/__init__.py +++ b/cura/Settings/__init__.py @@ -13,3 +13,4 @@ from .SettingOverrideDecorator import SettingOverrideDecorator from .QualitySettingsModel import QualitySettingsModel from .SettingInheritanceManager import SettingInheritanceManager from .ProfilesModel import ProfilesModel +from .ProfilesPageModel import ProfilesPageModel diff --git a/resources/qml/Preferences/ProfilesPage.qml b/resources/qml/Preferences/ProfilesPage.qml index d6eb82246d..244e33f3f5 100644 --- a/resources/qml/Preferences/ProfilesPage.qml +++ b/resources/qml/Preferences/ProfilesPage.qml @@ -15,37 +15,7 @@ UM.ManagementPage title: catalog.i18nc("@title:tab", "Profiles"); property var extrudersModel: Cura.ExtrudersModel{} - model: UM.InstanceContainersModel - { - filterList: - { - var qualityFilter = { "type": "quality", "extruder": null }; - if(Cura.MachineManager.filterQualityByMachine) - { - qualityFilter.definition = Cura.MachineManager.activeQualityDefinitionId; - if(Cura.MachineManager.hasMaterials) - { - qualityFilter.material = Cura.MachineManager.allActiveMaterialIds[Cura.MachineManager.activeMachineId]; - } - } - else - { - qualityFilter.definition = "fdmprinter"; - } - - var qualityChangeFilter = { "type": "quality_changes", "extruder": null }; - if(Cura.MachineManager.filterQualityByMachine) - { - qualityChangeFilter.definition = Cura.MachineManager.activeQualityDefinitionId; - } - else - { - qualityChangeFilter.definition = "fdmprinter"; - } - - return [qualityFilter, qualityChangeFilter]; - } - } + model: Cura.ProfilesPageModel { } section.property: "readOnly" section.delegate: Rectangle From 2e3937dd566fb8c2f8a6053241cc230c4bd3d6f0 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Thu, 29 Sep 2016 12:31:22 +0200 Subject: [PATCH 06/13] Rename _getSettingProperty to _getSettingFromAdhesionExtruder This opens up the way for other methods to get settings from different extruders. Contributes to issue CURA-2407. --- cura/BuildVolume.py | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/cura/BuildVolume.py b/cura/BuildVolume.py index c0f2fc35c3..11e323b734 100644 --- a/cura/BuildVolume.py +++ b/cura/BuildVolume.py @@ -474,7 +474,7 @@ class BuildVolume(SceneNode): self._disallowed_areas = areas ## Private convenience function to get a setting from the adhesion extruder. - def _getSettingProperty(self, setting_key, property = "value"): + def _getSettingFromAdhesionExtruder(self, setting_key, property = "value"): multi_extrusion = self._global_container_stack.getProperty("machine_extruder_count", "value") > 1 if not multi_extrusion: @@ -505,9 +505,9 @@ class BuildVolume(SceneNode): adhesion_type = container_stack.getProperty("adhesion_type", "value") if adhesion_type == "skirt": - skirt_distance = self._getSettingProperty("skirt_gap", "value") - skirt_line_count = self._getSettingProperty("skirt_line_count", "value") - bed_adhesion_size = skirt_distance + (skirt_line_count * self._getSettingProperty("skirt_brim_line_width", "value")) + skirt_distance = self._getSettingFromAdhesionExtruder("skirt_gap", "value") + skirt_line_count = self._getSettingFromAdhesionExtruder("skirt_line_count", "value") + bed_adhesion_size = skirt_distance + (skirt_line_count * self._getSettingFromAdhesionExtruder("skirt_brim_line_width", "value")) if self._global_container_stack.getProperty("machine_extruder_count", "value") > 1: adhesion_extruder_nr = int(self._global_container_stack.getProperty("adhesion_extruder_nr", "value")) extruder_values = ExtruderManager.getInstance().getAllExtruderValues("skirt_brim_line_width") @@ -515,7 +515,7 @@ class BuildVolume(SceneNode): for value in extruder_values: bed_adhesion_size += value elif adhesion_type == "brim": - bed_adhesion_size = self._getSettingProperty("brim_line_count", "value") * self._getSettingProperty("skirt_brim_line_width", "value") + bed_adhesion_size = self._getSettingFromAdhesionExtruder("brim_line_count", "value") * self._getSettingFromAdhesionExtruder("skirt_brim_line_width", "value") if self._global_container_stack.getProperty("machine_extruder_count", "value") > 1: adhesion_extruder_nr = int(self._global_container_stack.getProperty("adhesion_extruder_nr", "value")) extruder_values = ExtruderManager.getInstance().getAllExtruderValues("skirt_brim_line_width") @@ -523,7 +523,7 @@ class BuildVolume(SceneNode): for value in extruder_values: bed_adhesion_size += value elif adhesion_type == "raft": - bed_adhesion_size = self._getSettingProperty("raft_margin", "value") + bed_adhesion_size = self._getSettingFromAdhesionExtruder("raft_margin", "value") else: raise Exception("Unknown bed adhesion type. Did you forget to update the build volume calculations for your new bed adhesion type?") @@ -534,10 +534,10 @@ class BuildVolume(SceneNode): farthest_shield_distance = max(farthest_shield_distance, container_stack.getProperty("ooze_shield_dist", "value")) move_from_wall_radius = 0 # Moves that start from outer wall. - if self._getSettingProperty("infill_wipe_dist", "value"): - move_from_wall_radius = max(move_from_wall_radius, self._getSettingProperty("infill_wipe_dist", "value")) - if self._getSettingProperty("travel_avoid_distance", "value"): - move_from_wall_radius = max(move_from_wall_radius, self._getSettingProperty("travel_avoid_distance", "value")) + if self._getSettingFromAdhesionExtruder("infill_wipe_dist", "value"): + move_from_wall_radius = max(move_from_wall_radius, self._getSettingFromAdhesionExtruder("infill_wipe_dist", "value")) + if self._getSettingFromAdhesionExtruder("travel_avoid_distance", "value"): + move_from_wall_radius = max(move_from_wall_radius, self._getSettingFromAdhesionExtruder("travel_avoid_distance", "value")) #Now combine our different pieces of data to get the final border size. border_size = max(farthest_shield_distance, move_from_wall_radius, bed_adhesion_size) From d8fe9462ddbc505c4d95d8d5ea8c42948234a5a2 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Thu, 29 Sep 2016 12:33:51 +0200 Subject: [PATCH 07/13] Remove property-parameter from calls where it is 'value' That is the default value for the argument anyway. Makes the code more legible. Contributes to issue CURA-2407. --- cura/BuildVolume.py | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/cura/BuildVolume.py b/cura/BuildVolume.py index 11e323b734..fdd756f3e9 100644 --- a/cura/BuildVolume.py +++ b/cura/BuildVolume.py @@ -505,9 +505,9 @@ class BuildVolume(SceneNode): adhesion_type = container_stack.getProperty("adhesion_type", "value") if adhesion_type == "skirt": - skirt_distance = self._getSettingFromAdhesionExtruder("skirt_gap", "value") - skirt_line_count = self._getSettingFromAdhesionExtruder("skirt_line_count", "value") - bed_adhesion_size = skirt_distance + (skirt_line_count * self._getSettingFromAdhesionExtruder("skirt_brim_line_width", "value")) + skirt_distance = self._getSettingFromAdhesionExtruder("skirt_gap") + skirt_line_count = self._getSettingFromAdhesionExtruder("skirt_line_count") + bed_adhesion_size = skirt_distance + (skirt_line_count * self._getSettingFromAdhesionExtruder("skirt_brim_line_width")) if self._global_container_stack.getProperty("machine_extruder_count", "value") > 1: adhesion_extruder_nr = int(self._global_container_stack.getProperty("adhesion_extruder_nr", "value")) extruder_values = ExtruderManager.getInstance().getAllExtruderValues("skirt_brim_line_width") @@ -515,7 +515,7 @@ class BuildVolume(SceneNode): for value in extruder_values: bed_adhesion_size += value elif adhesion_type == "brim": - bed_adhesion_size = self._getSettingFromAdhesionExtruder("brim_line_count", "value") * self._getSettingFromAdhesionExtruder("skirt_brim_line_width", "value") + bed_adhesion_size = self._getSettingFromAdhesionExtruder("brim_line_count") * self._getSettingFromAdhesionExtruder("skirt_brim_line_width") if self._global_container_stack.getProperty("machine_extruder_count", "value") > 1: adhesion_extruder_nr = int(self._global_container_stack.getProperty("adhesion_extruder_nr", "value")) extruder_values = ExtruderManager.getInstance().getAllExtruderValues("skirt_brim_line_width") @@ -523,7 +523,7 @@ class BuildVolume(SceneNode): for value in extruder_values: bed_adhesion_size += value elif adhesion_type == "raft": - bed_adhesion_size = self._getSettingFromAdhesionExtruder("raft_margin", "value") + bed_adhesion_size = self._getSettingFromAdhesionExtruder("raft_margin") else: raise Exception("Unknown bed adhesion type. Did you forget to update the build volume calculations for your new bed adhesion type?") @@ -534,10 +534,10 @@ class BuildVolume(SceneNode): farthest_shield_distance = max(farthest_shield_distance, container_stack.getProperty("ooze_shield_dist", "value")) move_from_wall_radius = 0 # Moves that start from outer wall. - if self._getSettingFromAdhesionExtruder("infill_wipe_dist", "value"): - move_from_wall_radius = max(move_from_wall_radius, self._getSettingFromAdhesionExtruder("infill_wipe_dist", "value")) - if self._getSettingFromAdhesionExtruder("travel_avoid_distance", "value"): - move_from_wall_radius = max(move_from_wall_radius, self._getSettingFromAdhesionExtruder("travel_avoid_distance", "value")) + if self._getSettingFromAdhesionExtruder("infill_wipe_dist"): + move_from_wall_radius = max(move_from_wall_radius, self._getSettingFromAdhesionExtruder("infill_wipe_dist")) + if self._getSettingFromAdhesionExtruder("travel_avoid_distance"): + move_from_wall_radius = max(move_from_wall_radius, self._getSettingFromAdhesionExtruder("travel_avoid_distance")) #Now combine our different pieces of data to get the final border size. border_size = max(farthest_shield_distance, move_from_wall_radius, bed_adhesion_size) From 47b9fbc447133d0c85a5bb3d94e6fcade134bc39 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Thu, 29 Sep 2016 12:43:16 +0200 Subject: [PATCH 08/13] Add helper function for getting setting from support extruder This splits up the helper function we already had, to prevent code duplication. Contributes to issue CURA-2407. --- cura/BuildVolume.py | 30 ++++++++++++++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) diff --git a/cura/BuildVolume.py b/cura/BuildVolume.py index fdd756f3e9..e4f00deef1 100644 --- a/cura/BuildVolume.py +++ b/cura/BuildVolume.py @@ -473,14 +473,40 @@ class BuildVolume(SceneNode): self._has_errors = prime_tower_collision or prime_collision self._disallowed_areas = areas - ## Private convenience function to get a setting from the adhesion extruder. + ## Private convenience function to get a setting from the adhesion + # extruder. + # + # \param setting_key The key of the setting to get. + # \param property The property to get from the setting. + # \return The property of the specified setting in the adhesion extruder. def _getSettingFromAdhesionExtruder(self, setting_key, property = "value"): + return self._getSettingFromExtruder(setting_key, "adhesion_extruder_nr", property) + + ## Private convenience function to get a setting from the support infill + # extruder. + # + # \param setting_key The key of the setting to get. + # \param property The property to get from the setting. + # \return The property of the specified setting in the support infill + # extruder. + def _getSettingFromSupportInfillExtruder(self, setting_key, property = "value"): + return self._getSettingFromExtruder(setting_key, "support_infill_extruder_nr", property) + + ## Helper function to get a setting from an extruder specified in another + # setting. + # + # \param setting_key The key of the setting to get. + # \param extruder_setting_key The key of the setting that specifies from + # which extruder to get the setting, if there are multiple extruders. + # \param property The property to get from the setting. + # \return The property of the specified setting in the specified extruder. + def _getSettingFromExtruder(self, setting_key, extruder_setting_key, property = "value"): multi_extrusion = self._global_container_stack.getProperty("machine_extruder_count", "value") > 1 if not multi_extrusion: return self._global_container_stack.getProperty(setting_key, property) - extruder_index = self._global_container_stack.getProperty("adhesion_extruder_nr", "value") + extruder_index = self._global_container_stack.getProperty(extruder_setting_key, "value") if extruder_index == "-1": # If extruder index is -1 use global instead return self._global_container_stack.getProperty(setting_key, property) From 4ab7ea5c0f6025f190165ba98411859a2cb41b32 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Thu, 29 Sep 2016 12:46:53 +0200 Subject: [PATCH 09/13] Account for support offset in disallowed border It is similar to travel avoid distance. Contributes to issue CURA-2407. --- cura/BuildVolume.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/cura/BuildVolume.py b/cura/BuildVolume.py index e4f00deef1..7d4269ebe1 100644 --- a/cura/BuildVolume.py +++ b/cura/BuildVolume.py @@ -564,6 +564,8 @@ class BuildVolume(SceneNode): move_from_wall_radius = max(move_from_wall_radius, self._getSettingFromAdhesionExtruder("infill_wipe_dist")) if self._getSettingFromAdhesionExtruder("travel_avoid_distance"): move_from_wall_radius = max(move_from_wall_radius, self._getSettingFromAdhesionExtruder("travel_avoid_distance")) + if self._getSettingFromSupportInfillExtruder("support_offset"): + move_from_wall_radius = max(move_from_wall_radius, self._getSettingFromSupportInfillExtruder("support_offset")) #Now combine our different pieces of data to get the final border size. border_size = max(farthest_shield_distance, move_from_wall_radius, bed_adhesion_size) @@ -577,4 +579,4 @@ class BuildVolume(SceneNode): _prime_settings = ["extruder_prime_pos_x", "extruder_prime_pos_y", "extruder_prime_pos_z"] _tower_settings = ["prime_tower_enable", "prime_tower_size", "prime_tower_position_x", "prime_tower_position_y"] _ooze_shield_settings = ["ooze_shield_enabled", "ooze_shield_dist"] - _distance_settings = ["infill_wipe_dist", "travel_avoid_distance"] + _distance_settings = ["infill_wipe_dist", "travel_avoid_distance", "support_offset"] From 7d57e90260780cc42978874034dc7b8aa3152626 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Thu, 29 Sep 2016 13:24:15 +0200 Subject: [PATCH 10/13] Remove debug statements Oops. Contributes to issue CURA-844. --- plugins/VersionUpgrade/VersionUpgrade21to22/Profile.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/plugins/VersionUpgrade/VersionUpgrade21to22/Profile.py b/plugins/VersionUpgrade/VersionUpgrade21to22/Profile.py index 8ff6b2a5eb..e87432663d 100644 --- a/plugins/VersionUpgrade/VersionUpgrade21to22/Profile.py +++ b/plugins/VersionUpgrade/VersionUpgrade21to22/Profile.py @@ -59,9 +59,7 @@ class Profile: # Parse the settings. self._settings = {} if parser.has_section("settings"): - print("---------------------- have section Settings") for key, value in parser["settings"].items(): - print("----------------------", key, "=", value) self._settings[key] = value # Parse the defaults and the disabled defaults. From 040f49e474a79464676259b7cb68829dc707258d Mon Sep 17 00:00:00 2001 From: fieldOfView Date: Thu, 29 Sep 2016 13:48:23 +0200 Subject: [PATCH 11/13] Fix cases where there is no "normal" quality CURA-2494 --- cura/QualityManager.py | 4 +++- cura/Settings/MachineManager.py | 13 +++++++++++-- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/cura/QualityManager.py b/cura/QualityManager.py index e33398fc35..9568f15184 100644 --- a/cura/QualityManager.py +++ b/cura/QualityManager.py @@ -53,7 +53,9 @@ class QualityManager: # the current set of selected materials is used. # \return the matching quality containers \type{List[ContainerInstance]} def findQualityByQualityType(self, quality_type, machine_definition=None, material_containers=None): - criteria = {"type": "quality", "quality_type": quality_type} + criteria = {"type": "quality"} + if quality_type: + criteria["quality_type"] = quality_type return self._getFilteredContainersForStack(machine_definition, material_containers, **criteria) def _getFilteredContainers(self, **kwargs): diff --git a/cura/Settings/MachineManager.py b/cura/Settings/MachineManager.py index 4569e51098..98125362c6 100644 --- a/cura/Settings/MachineManager.py +++ b/cura/Settings/MachineManager.py @@ -580,9 +580,18 @@ class MachineManager(QObject): [material_container]) if not candidate_qualities: # Fall back to normal quality - new_quality_id = quality_manager.findQualityByQualityType("normal", + quality_containers = quality_manager.findQualityByQualityType("normal", + quality_manager.getWholeMachineDefinition(machine_definition), + [material_container]) + if quality_containers: + new_quality_id = quality_containers[0].getId() + else: + # There is no normal quality for this machine/variant/material combination + quality_containers = quality_manager.findQualityByQualityType(None, quality_manager.getWholeMachineDefinition(machine_definition), - [material_container])[0].getId() + [material_container]) + new_quality_id = quality_containers[0].getId() + else: if not old_quality_changes: new_quality_id = candidate_qualities[0].getId() From 02232f7ca67d1ee4f3ced1ba771f65eb055d0507 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Thu, 29 Sep 2016 13:56:14 +0200 Subject: [PATCH 12/13] Added loging if we could not find profile to rename CURA-2479 --- cura/Settings/ContainerManager.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/cura/Settings/ContainerManager.py b/cura/Settings/ContainerManager.py index 2ce3f1570a..6af5267e6b 100644 --- a/cura/Settings/ContainerManager.py +++ b/cura/Settings/ContainerManager.py @@ -561,9 +561,12 @@ class ContainerManager(QObject): new_name = self._container_registry.uniqueName(new_name) container_registry = self._container_registry + for container in self._getFilteredContainers(name = quality_name, type = "quality_changes"): stack_id = container.getMetaDataEntry("extruder", global_stack.getId()) container_registry.renameContainer(container.getId(), new_name, self._createUniqueId(stack_id, new_name)) + else: + UM.Logger.log("e", "Unable to rename %s, because we could not find the profile", quality_name) self._machine_manager.activeQualityChanged.emit() return True From 3d8336449f133227766507fbd7961ad021eed1b8 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Thu, 29 Sep 2016 14:07:52 +0200 Subject: [PATCH 13/13] Fixed renaming of quality_changes CURA-2479 --- cura/Settings/ContainerManager.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/cura/Settings/ContainerManager.py b/cura/Settings/ContainerManager.py index 6af5267e6b..24f452c592 100644 --- a/cura/Settings/ContainerManager.py +++ b/cura/Settings/ContainerManager.py @@ -562,10 +562,12 @@ class ContainerManager(QObject): container_registry = self._container_registry - for container in self._getFilteredContainers(name = quality_name, type = "quality_changes"): + containers_to_rename = self._container_registry.findInstanceContainers(type = "quality_changes", name = quality_name) + for container in containers_to_rename: stack_id = container.getMetaDataEntry("extruder", global_stack.getId()) container_registry.renameContainer(container.getId(), new_name, self._createUniqueId(stack_id, new_name)) - else: + + if not containers_to_rename: UM.Logger.log("e", "Unable to rename %s, because we could not find the profile", quality_name) self._machine_manager.activeQualityChanged.emit()