From a30814fe52d3beaf64e19ed7e9ed6d0567bf9df2 Mon Sep 17 00:00:00 2001 From: Remco Burema Date: Thu, 6 Jun 2019 10:07:05 +0200 Subject: [PATCH 1/5] Remove square prime tower. [CURA-6460] --- cura/BuildVolume.py | 17 +++++------------ resources/definitions/fdmprinter.def.json | 13 +------------ 2 files changed, 6 insertions(+), 24 deletions(-) diff --git a/cura/BuildVolume.py b/cura/BuildVolume.py index 8e74a81842..feb30221ec 100755 --- a/cura/BuildVolume.py +++ b/cura/BuildVolume.py @@ -815,17 +815,10 @@ class BuildVolume(SceneNode): prime_tower_x -= brim_size prime_tower_y += brim_size - if self._global_container_stack.getProperty("prime_tower_circular", "value"): - radius = prime_tower_size / 2 - prime_tower_area = Polygon.approximatedCircle(radius) - prime_tower_area = prime_tower_area.translate(prime_tower_x - radius, prime_tower_y - radius) - else: - prime_tower_area = Polygon([ - [prime_tower_x - prime_tower_size, prime_tower_y - prime_tower_size], - [prime_tower_x, prime_tower_y - prime_tower_size], - [prime_tower_x, prime_tower_y], - [prime_tower_x - prime_tower_size, prime_tower_y], - ]) + radius = prime_tower_size / 2 + prime_tower_area = Polygon.approximatedCircle(radius) + prime_tower_area = prime_tower_area.translate(prime_tower_x - radius, prime_tower_y - radius) + prime_tower_area = prime_tower_area.getMinkowskiHull(Polygon.approximatedCircle(0)) for extruder in used_extruders: result[extruder.getId()].append(prime_tower_area) #The prime tower location is the same for each extruder, regardless of offset. @@ -1113,7 +1106,7 @@ class BuildVolume(SceneNode): _raft_settings = ["adhesion_type", "raft_base_thickness", "raft_interface_thickness", "raft_surface_layers", "raft_surface_thickness", "raft_airgap", "layer_0_z_overlap"] _extra_z_settings = ["retraction_hop_enabled", "retraction_hop"] _prime_settings = ["extruder_prime_pos_x", "extruder_prime_pos_y", "extruder_prime_pos_z", "prime_blob_enable"] - _tower_settings = ["prime_tower_enable", "prime_tower_circular", "prime_tower_size", "prime_tower_position_x", "prime_tower_position_y", "prime_tower_brim_enable"] + _tower_settings = ["prime_tower_enable", "prime_tower_size", "prime_tower_position_x", "prime_tower_position_y", "prime_tower_brim_enable"] _ooze_shield_settings = ["ooze_shield_enabled", "ooze_shield_dist"] _distance_settings = ["infill_wipe_dist", "travel_avoid_distance", "support_offset", "support_enable", "travel_avoid_other_parts", "travel_avoid_supports"] _extruder_settings = ["support_enable", "support_bottom_enable", "support_roof_enable", "support_infill_extruder_nr", "support_extruder_nr_layer_0", "support_bottom_extruder_nr", "support_roof_extruder_nr", "brim_line_count", "adhesion_extruder_nr", "adhesion_type"] #Settings that can affect which extruders are used. diff --git a/resources/definitions/fdmprinter.def.json b/resources/definitions/fdmprinter.def.json index ebbb6a5a3c..dac173a963 100644 --- a/resources/definitions/fdmprinter.def.json +++ b/resources/definitions/fdmprinter.def.json @@ -5268,17 +5268,6 @@ "settable_per_mesh": false, "settable_per_extruder": false }, - "prime_tower_circular": - { - "label": "Circular Prime Tower", - "description": "Make the prime tower as a circular shape.", - "type": "bool", - "enabled": "resolveOrValue('prime_tower_enable')", - "default_value": true, - "resolve": "any(extruderValues('prime_tower_circular'))", - "settable_per_mesh": false, - "settable_per_extruder": false - }, "prime_tower_size": { "label": "Prime Tower Size", @@ -5303,7 +5292,7 @@ "type": "float", "default_value": 6, "minimum_value": "0", - "maximum_value_warning": "((resolveOrValue('prime_tower_size') * 0.5) ** 2 * 3.14159 * resolveOrValue('layer_height') if prime_tower_circular else resolveOrValue('prime_tower_size') ** 2 * resolveOrValue('layer_height')) - sum(extruderValues('prime_tower_min_volume')) + prime_tower_min_volume", + "maximum_value_warning": "((resolveOrValue('prime_tower_size') * 0.5) ** 2 * 3.14159 * resolveOrValue('layer_height')", "enabled": "resolveOrValue('prime_tower_enable')", "settable_per_mesh": false, "settable_per_extruder": true From e28ba497d3bca5df51c8f19c3088a4ffe42f48c1 Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Thu, 6 Jun 2019 13:11:24 +0200 Subject: [PATCH 2/5] Remove prime_tower_circular from profiles CURA-6460 --- .../tizyx_evy_dual/tizyx_evy_dual_global_Flex_Quality.inst.cfg | 1 - .../tizyx_evy_dual/tizyx_evy_dual_global_High_Quality.inst.cfg | 1 - .../tizyx_evy_dual/tizyx_evy_dual_global_Normal_Quality.inst.cfg | 1 - resources/setting_visibility/expert.cfg | 1 - 4 files changed, 4 deletions(-) diff --git a/resources/quality/tizyx/tizyx_evy_dual/tizyx_evy_dual_global_Flex_Quality.inst.cfg b/resources/quality/tizyx/tizyx_evy_dual/tizyx_evy_dual_global_Flex_Quality.inst.cfg index f2e8e574b6..f4e2a8b23b 100644 --- a/resources/quality/tizyx/tizyx_evy_dual/tizyx_evy_dual_global_Flex_Quality.inst.cfg +++ b/resources/quality/tizyx/tizyx_evy_dual/tizyx_evy_dual_global_Flex_Quality.inst.cfg @@ -15,7 +15,6 @@ adhesion_extruder_nr = 0 adhesion_type = skirt layer_height = 0.2 layer_height_0 = 0.25 -prime_tower_circular = True prime_tower_enable = True prime_tower_position_x = 180 prime_tower_position_y = 180 diff --git a/resources/quality/tizyx/tizyx_evy_dual/tizyx_evy_dual_global_High_Quality.inst.cfg b/resources/quality/tizyx/tizyx_evy_dual/tizyx_evy_dual_global_High_Quality.inst.cfg index 1abaff2a06..dd89e951f8 100644 --- a/resources/quality/tizyx/tizyx_evy_dual/tizyx_evy_dual_global_High_Quality.inst.cfg +++ b/resources/quality/tizyx/tizyx_evy_dual/tizyx_evy_dual_global_High_Quality.inst.cfg @@ -15,7 +15,6 @@ adhesion_extruder_nr = 0 adhesion_type = skirt layer_height = 0.1 layer_height_0 = 0.1 -prime_tower_circular = True prime_tower_enable = True prime_tower_position_x = 180 prime_tower_position_y = 180 diff --git a/resources/quality/tizyx/tizyx_evy_dual/tizyx_evy_dual_global_Normal_Quality.inst.cfg b/resources/quality/tizyx/tizyx_evy_dual/tizyx_evy_dual_global_Normal_Quality.inst.cfg index 143589f53c..c44337af0a 100644 --- a/resources/quality/tizyx/tizyx_evy_dual/tizyx_evy_dual_global_Normal_Quality.inst.cfg +++ b/resources/quality/tizyx/tizyx_evy_dual/tizyx_evy_dual_global_Normal_Quality.inst.cfg @@ -15,7 +15,6 @@ adhesion_extruder_nr = 0 adhesion_type = skirt layer_height = 0.2 layer_height_0 = 0.25 -prime_tower_circular = True prime_tower_enable = True prime_tower_position_x = 180 prime_tower_position_y = 180 diff --git a/resources/setting_visibility/expert.cfg b/resources/setting_visibility/expert.cfg index c8d13a1836..0a88604946 100644 --- a/resources/setting_visibility/expert.cfg +++ b/resources/setting_visibility/expert.cfg @@ -293,7 +293,6 @@ raft_fan_speed [dual] prime_tower_enable -prime_tower_circular prime_tower_size prime_tower_min_volume prime_tower_position_x From 9911f98debef0fa7fd875ee71d4f30f981ad12e9 Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Thu, 6 Jun 2019 13:11:54 +0200 Subject: [PATCH 3/5] Add version upgrade 4.1 to 4.2 CURA-6460 --- .../VersionUpgrade41to42.py | 79 +++++++++++++++++++ .../VersionUpgrade41to42/__init__.py | 59 ++++++++++++++ .../VersionUpgrade41to42/plugin.json | 8 ++ 3 files changed, 146 insertions(+) create mode 100644 plugins/VersionUpgrade/VersionUpgrade41to42/VersionUpgrade41to42.py create mode 100644 plugins/VersionUpgrade/VersionUpgrade41to42/__init__.py create mode 100644 plugins/VersionUpgrade/VersionUpgrade41to42/plugin.json diff --git a/plugins/VersionUpgrade/VersionUpgrade41to42/VersionUpgrade41to42.py b/plugins/VersionUpgrade/VersionUpgrade41to42/VersionUpgrade41to42.py new file mode 100644 index 0000000000..6458a8add8 --- /dev/null +++ b/plugins/VersionUpgrade/VersionUpgrade41to42/VersionUpgrade41to42.py @@ -0,0 +1,79 @@ +# Copyright (c) 2019 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. + +import configparser +import io +from typing import List, Tuple + +from UM.VersionUpgrade import VersionUpgrade + +_REMOVED_SETTING_KEYS = ["prime_tower_circular"] # type: List[str] + + +## Upgrades configurations from the state they were in at version 4.0 to the +# state they should be in at version 4.2. +class VersionUpgrade41to42(VersionUpgrade): + ## Gets the version number from a CFG file in Uranium's 4.0 format. + # + # Since the format may change, this is implemented for the 4.0 format only + # and needs to be included in the version upgrade system rather than + # globally in Uranium. + # + # \param serialised The serialised form of a CFG file. + # \return The version number stored in the CFG file. + # \raises ValueError The format of the version number in the file is + # incorrect. + # \raises KeyError The format of the file is incorrect. + def getCfgVersion(self, serialised: str) -> int: + parser = configparser.ConfigParser(interpolation = None) + parser.read_string(serialised) + format_version = int(parser.get("general", "version")) #Explicitly give an exception when this fails. That means that the file format is not recognised. + setting_version = int(parser.get("metadata", "setting_version", fallback = "0")) + return format_version * 1000000 + setting_version + + ## Upgrades instance containers to have the new version + # number. + def upgradeInstanceContainer(self, serialized: str, filename: str) -> Tuple[List[str], List[str]]: + parser = configparser.ConfigParser(interpolation = None) + parser.read_string(serialized) + + # Update version number. + parser["general"]["version"] = "4" + parser["metadata"]["setting_version"] = "8" + + if "values" in parser: + for key in _REMOVED_SETTING_KEYS: + if key in parser["values"]: + del parser["values"][key] + + result = io.StringIO() + parser.write(result) + return [filename], [result.getvalue()] + + ## Upgrades Preferences to have the new version number. + def upgradePreferences(self, serialized: str, filename: str) -> Tuple[List[str], List[str]]: + parser = configparser.ConfigParser(interpolation = None) + parser.read_string(serialized) + + # Update version number. + parser["general"]["version"] = "6" + if "metadata" not in parser: + parser["metadata"] = {} + parser["metadata"]["setting_version"] = "8" + + result = io.StringIO() + parser.write(result) + return [filename], [result.getvalue()] + + ## Upgrades stacks to have the new version number. + def upgradeStack(self, serialized: str, filename: str) -> Tuple[List[str], List[str]]: + parser = configparser.ConfigParser(interpolation = None) + parser.read_string(serialized) + + # Update version number. + parser["general"]["version"] = "4" + parser["metadata"]["setting_version"] = "8" + + result = io.StringIO() + parser.write(result) + return [filename], [result.getvalue()] diff --git a/plugins/VersionUpgrade/VersionUpgrade41to42/__init__.py b/plugins/VersionUpgrade/VersionUpgrade41to42/__init__.py new file mode 100644 index 0000000000..28bea715dd --- /dev/null +++ b/plugins/VersionUpgrade/VersionUpgrade41to42/__init__.py @@ -0,0 +1,59 @@ +# Copyright (c) 2019 Ultimaker B.V. +# Cura is released under the terms of the LGPLv3 or higher. + +from typing import Any, Dict, TYPE_CHECKING + +from . import VersionUpgrade41to42 + +if TYPE_CHECKING: + from UM.Application import Application + +upgrade = VersionUpgrade41to42.VersionUpgrade41to42() + +def getMetaData() -> Dict[str, Any]: + return { + "version_upgrade": { + # From To Upgrade function + ("preferences", 6000007): ("preferences", 6000008, upgrade.upgradePreferences), + ("machine_stack", 4000007): ("machine_stack", 4000008, upgrade.upgradeStack), + ("extruder_train", 4000007): ("extruder_train", 4000008, upgrade.upgradeStack), + ("definition_changes", 4000007): ("definition_changes", 4000008, upgrade.upgradeInstanceContainer), + ("quality_changes", 4000007): ("quality_changes", 4000008, upgrade.upgradeInstanceContainer), + ("quality", 4000007): ("quality", 4000008, upgrade.upgradeInstanceContainer), + ("user", 4000007): ("user", 4000008, upgrade.upgradeInstanceContainer), + }, + "sources": { + "preferences": { + "get_version": upgrade.getCfgVersion, + "location": {"."} + }, + "machine_stack": { + "get_version": upgrade.getCfgVersion, + "location": {"./machine_instances"} + }, + "extruder_train": { + "get_version": upgrade.getCfgVersion, + "location": {"./extruders"} + }, + "definition_changes": { + "get_version": upgrade.getCfgVersion, + "location": {"./definition_changes"} + }, + "quality_changes": { + "get_version": upgrade.getCfgVersion, + "location": {"./quality_changes"} + }, + "quality": { + "get_version": upgrade.getCfgVersion, + "location": {"./quality"} + }, + "user": { + "get_version": upgrade.getCfgVersion, + "location": {"./user"} + } + } + } + + +def register(app: "Application") -> Dict[str, Any]: + return { "version_upgrade": upgrade } diff --git a/plugins/VersionUpgrade/VersionUpgrade41to42/plugin.json b/plugins/VersionUpgrade/VersionUpgrade41to42/plugin.json new file mode 100644 index 0000000000..9f8edea286 --- /dev/null +++ b/plugins/VersionUpgrade/VersionUpgrade41to42/plugin.json @@ -0,0 +1,8 @@ +{ + "name": "Version Upgrade 4.1 to 4.2", + "author": "Ultimaker B.V.", + "version": "1.0.0", + "description": "Upgrades configurations from Cura 4.1 to Cura 4.2.", + "api": "6.0", + "i18n-catalog": "cura" +} From a55cc6fade79292f3d46325c78a912a13cb9a6d3 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Wed, 12 Jun 2019 13:36:40 +0200 Subject: [PATCH 4/5] Also remove removed keys from visible settings It's listed among the setting keys that you explicitly made visible. Contributes to issue CURA-6460. --- .../VersionUpgrade41to42/VersionUpgrade41to42.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/plugins/VersionUpgrade/VersionUpgrade41to42/VersionUpgrade41to42.py b/plugins/VersionUpgrade/VersionUpgrade41to42/VersionUpgrade41to42.py index e4a87416d1..5b50d1869d 100644 --- a/plugins/VersionUpgrade/VersionUpgrade41to42/VersionUpgrade41to42.py +++ b/plugins/VersionUpgrade/VersionUpgrade41to42/VersionUpgrade41to42.py @@ -77,6 +77,9 @@ class VersionUpgrade41to42(VersionUpgrade): if old_name in visible_settings: visible_settings.remove(old_name) visible_settings.add(new_name) + for removed_key in _removed_settings: + if removed_key in visible_settings: + visible_settings.remove(removed_key) parser["general"]["visible_settings"] = ";".join(visible_settings) result = io.StringIO() From 927135e0daf9d0f9ff09b1a6415b214791167a59 Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Mon, 17 Jun 2019 13:44:05 +0200 Subject: [PATCH 5/5] Fix typing CURA-6460 --- .../VersionUpgrade41to42/VersionUpgrade41to42.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/plugins/VersionUpgrade/VersionUpgrade41to42/VersionUpgrade41to42.py b/plugins/VersionUpgrade/VersionUpgrade41to42/VersionUpgrade41to42.py index 5b50d1869d..cc08645410 100644 --- a/plugins/VersionUpgrade/VersionUpgrade41to42/VersionUpgrade41to42.py +++ b/plugins/VersionUpgrade/VersionUpgrade41to42/VersionUpgrade41to42.py @@ -72,15 +72,15 @@ class VersionUpgrade41to42(VersionUpgrade): #Renamed settings. if "visible_settings" in parser["general"]: visible_settings = parser["general"]["visible_settings"] - visible_settings = set(visible_settings.split(";")) + visible_setting_set = set(visible_settings.split(";")) for old_name, new_name in _renamed_settings.items(): - if old_name in visible_settings: - visible_settings.remove(old_name) - visible_settings.add(new_name) + if old_name in visible_setting_set: + visible_setting_set.remove(old_name) + visible_setting_set.add(new_name) for removed_key in _removed_settings: - if removed_key in visible_settings: - visible_settings.remove(removed_key) - parser["general"]["visible_settings"] = ";".join(visible_settings) + if removed_key in visible_setting_set: + visible_setting_set.remove(removed_key) + parser["general"]["visible_settings"] = ";".join(visible_setting_set) result = io.StringIO() parser.write(result)