From 701eba3a0e6f3a4f52b0c1dc5712fb20f3f7d9b0 Mon Sep 17 00:00:00 2001 From: Jack Ha Date: Thu, 8 Dec 2016 12:45:38 +0100 Subject: [PATCH 01/11] Made 3mf mesh centering more robust. --- plugins/3MFReader/ThreeMFReader.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/plugins/3MFReader/ThreeMFReader.py b/plugins/3MFReader/ThreeMFReader.py index f7d2cc01f1..397a63c194 100644 --- a/plugins/3MFReader/ThreeMFReader.py +++ b/plugins/3MFReader/ThreeMFReader.py @@ -187,10 +187,12 @@ class ThreeMFReader(MeshReader): build_item_node = self._createNodeFromObject(object, self._base_name + "_" + str(id)) # compensate for original center position, if object(s) is/are not around its zero position - extents = build_item_node.getMeshData().getExtents() - center_vector = Vector(extents.center.x, extents.center.y, extents.center.z) transform_matrix = Matrix() - transform_matrix.setByTranslation(center_vector) + mesh_data = build_item_node.getMeshData() + if mesh_data is not None: + extents = mesh_data.getExtents() + center_vector = Vector(extents.center.x, extents.center.y, extents.center.z) + transform_matrix.setByTranslation(center_vector) # offset with transform from 3mf transform = build_item.get("transform") From c212014d88731090aec053277f405e65e5fa6c34 Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Thu, 8 Dec 2016 13:15:23 +0100 Subject: [PATCH 02/11] Fix VersionUpgrade to handle both formats of ContainerStack files Contributes to CURA-3098 --- .../VersionUpgrade22to24/VersionUpgrade.py | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/plugins/VersionUpgrade/VersionUpgrade22to24/VersionUpgrade.py b/plugins/VersionUpgrade/VersionUpgrade22to24/VersionUpgrade.py index 64c98dea60..c564842c58 100644 --- a/plugins/VersionUpgrade/VersionUpgrade22to24/VersionUpgrade.py +++ b/plugins/VersionUpgrade/VersionUpgrade22to24/VersionUpgrade.py @@ -19,8 +19,14 @@ class VersionUpgrade22to24(VersionUpgrade): config = configparser.ConfigParser(interpolation = None) config.read_string(serialised) # Read the input string as config file. config.set("general", "version", "3") - containers = config.get("general", "containers") - container_list = containers.split(",") + + container_list = [] + if config.has_section("containers"): + for index, container_id in config.items("containers"): + container_list.append(container_id) + elif config.has_option("general", "containers") + containers = config.get("general", "containers") + container_list = containers.split(",") user_variants = self.__getUserVariants() name_path_dict = {} @@ -45,7 +51,13 @@ class VersionUpgrade22to24(VersionUpgrade): container_list = new_container_list - config.set("general", "containers", ",".join(container_list)) + if not config.has_section("containers"): + config.add_section("containers") + + config.remove_option("general", "containers") + + for index in range(len(container_list)): + config.set("containers", index, container_list[index]) output = io.StringIO() config.write(output) From d3f58a049ba5675f2e7ce1f90614febf07b67987 Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Thu, 8 Dec 2016 13:22:24 +0100 Subject: [PATCH 03/11] Add missing ":" --- plugins/VersionUpgrade/VersionUpgrade22to24/VersionUpgrade.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/VersionUpgrade/VersionUpgrade22to24/VersionUpgrade.py b/plugins/VersionUpgrade/VersionUpgrade22to24/VersionUpgrade.py index c564842c58..28df74b499 100644 --- a/plugins/VersionUpgrade/VersionUpgrade22to24/VersionUpgrade.py +++ b/plugins/VersionUpgrade/VersionUpgrade22to24/VersionUpgrade.py @@ -24,7 +24,7 @@ class VersionUpgrade22to24(VersionUpgrade): if config.has_section("containers"): for index, container_id in config.items("containers"): container_list.append(container_id) - elif config.has_option("general", "containers") + elif config.has_option("general", "containers"): containers = config.get("general", "containers") container_list = containers.split(",") From ae389742ff430d5861c0989e5e1122a7766da068 Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Thu, 8 Dec 2016 14:23:33 +0100 Subject: [PATCH 04/11] Update OSX removable drive code to handle 10.12 plist format Fixes CURA-2618 --- .../OSXRemovableDrivePlugin.py | 63 ++++++++++++------- 1 file changed, 41 insertions(+), 22 deletions(-) diff --git a/plugins/RemovableDriveOutputDevice/OSXRemovableDrivePlugin.py b/plugins/RemovableDriveOutputDevice/OSXRemovableDrivePlugin.py index c96bf8bacf..6d8b5021ae 100644 --- a/plugins/RemovableDriveOutputDevice/OSXRemovableDrivePlugin.py +++ b/plugins/RemovableDriveOutputDevice/OSXRemovableDrivePlugin.py @@ -17,41 +17,60 @@ class OSXRemovableDrivePlugin(RemovableDrivePlugin.RemovableDrivePlugin): drives = {} p = subprocess.Popen(["system_profiler", "SPUSBDataType", "-xml"], stdout = subprocess.PIPE) plist = plistlib.loads(p.communicate()[0]) - p.wait() - for entry in plist: - if "_items" in entry: - for item in entry["_items"]: - for dev in item["_items"]: - if "removable_media" in dev and dev["removable_media"] == "yes" and "volumes" in dev and len(dev["volumes"]) > 0: - for vol in dev["volumes"]: - if "mount_point" in vol: - volume = vol["mount_point"] - drives[volume] = os.path.basename(volume) + result = self._recursiveSearch(plist, "removable_media") p = subprocess.Popen(["system_profiler", "SPCardReaderDataType", "-xml"], stdout=subprocess.PIPE) plist = plistlib.loads(p.communicate()[0]) - p.wait() - for entry in plist: - if "_items" in entry: - for item in entry["_items"]: - for dev in item["_items"]: - if "removable_media" in dev and dev["removable_media"] == "yes" and "volumes" in dev and len(dev["volumes"]) > 0: - for vol in dev["volumes"]: - if "mount_point" in vol: - volume = vol["mount_point"] - drives[volume] = os.path.basename(volume) + result.extend(self._recursiveSearch(plist, "removable_media")) + + for drive in result: + # Ignore everything not explicitly marked as removable + if drive["removable_media"] != "yes": + continue + + # Ignore any removable device that does not have an actual volume + if "volumes" not in drive or not drive["volumes"]: + continue + + for volume in drive["volumes"]: + if not "mount_point" in volume: + continue + + mount_point = volume["mount_point"] + + if "_name" in volume: + drive_name = volume["_name"] + else: + drive_name = os.path.basename(mount_point) + + drives[mount_point] = drive_name return drives def performEjectDevice(self, device): p = subprocess.Popen(["diskutil", "eject", device.getId()], stdin = subprocess.PIPE, stdout = subprocess.PIPE, stderr = subprocess.PIPE) output = p.communicate() - Logger.log("d", "umount returned: %s.", repr(output)) return_code = p.wait() if return_code != 0: return False else: - return True \ No newline at end of file + return True + + # Recursively search for key in a plist parsed by plistlib + def _recursiveSearch(self, plist, key): + result = [] + for entry in plist: + if key in entry: + result.append(entry) + continue + + if "_items" in entry: + result.extend(self._recursiveSearch(entry["_items"], key)) + + if "Media" in entry: + result.extend(self._recursiveSearch(entry["Media"], key)) + + return result From 041e9cd96fbaa50c1426b301238c3718fbbfb806 Mon Sep 17 00:00:00 2001 From: Jack Ha Date: Thu, 8 Dec 2016 14:38:07 +0100 Subject: [PATCH 05/11] Corrected bed temperature max value warning for UM3 --- resources/definitions/ultimaker3.def.json | 1 + 1 file changed, 1 insertion(+) diff --git a/resources/definitions/ultimaker3.def.json b/resources/definitions/ultimaker3.def.json index 71bbcccbdd..5a6c046256 100644 --- a/resources/definitions/ultimaker3.def.json +++ b/resources/definitions/ultimaker3.def.json @@ -106,6 +106,7 @@ "line_width": { "value": "machine_nozzle_size * 0.875" }, "machine_min_cool_heat_time_window": { "value": "15" }, "default_material_print_temperature": { "value": "200" }, + "material_bed_temperature": { "maximum_value_warning": "115" }, "material_standby_temperature": { "value": "100" }, "multiple_mesh_overlap": { "value": "0" }, "prime_tower_enable": { "value": "True" }, From 78ad92bfcb28dc23c40abdbd406d457c35f337b3 Mon Sep 17 00:00:00 2001 From: Jack Ha Date: Thu, 8 Dec 2016 14:39:58 +0100 Subject: [PATCH 06/11] Max bed temperature UM3 --- resources/definitions/ultimaker3.def.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/definitions/ultimaker3.def.json b/resources/definitions/ultimaker3.def.json index 5a6c046256..34c9e22981 100644 --- a/resources/definitions/ultimaker3.def.json +++ b/resources/definitions/ultimaker3.def.json @@ -106,7 +106,7 @@ "line_width": { "value": "machine_nozzle_size * 0.875" }, "machine_min_cool_heat_time_window": { "value": "15" }, "default_material_print_temperature": { "value": "200" }, - "material_bed_temperature": { "maximum_value_warning": "115" }, + "material_bed_temperature": { "maximum_value": "115" }, "material_standby_temperature": { "value": "100" }, "multiple_mesh_overlap": { "value": "0" }, "prime_tower_enable": { "value": "True" }, From 19a288dcbf342e42d689282d56f007976b2d8249 Mon Sep 17 00:00:00 2001 From: Jack Ha Date: Thu, 8 Dec 2016 14:43:41 +0100 Subject: [PATCH 07/11] Max initial layer bed temperature UM3 --- resources/definitions/ultimaker3.def.json | 1 + 1 file changed, 1 insertion(+) diff --git a/resources/definitions/ultimaker3.def.json b/resources/definitions/ultimaker3.def.json index 34c9e22981..5e492bf531 100644 --- a/resources/definitions/ultimaker3.def.json +++ b/resources/definitions/ultimaker3.def.json @@ -107,6 +107,7 @@ "machine_min_cool_heat_time_window": { "value": "15" }, "default_material_print_temperature": { "value": "200" }, "material_bed_temperature": { "maximum_value": "115" }, + "material_bed_temperature_layer_0": { "maximum_value": "115" }, "material_standby_temperature": { "value": "100" }, "multiple_mesh_overlap": { "value": "0" }, "prime_tower_enable": { "value": "True" }, From 4d3e8592af89d90fa4fa36de290534c4aecb2ed3 Mon Sep 17 00:00:00 2001 From: Simon Edwards Date: Thu, 8 Dec 2016 14:48:10 +0100 Subject: [PATCH 08/11] CURA-2653 Searching in English while other language set --- resources/qml/Settings/SettingView.qml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/qml/Settings/SettingView.qml b/resources/qml/Settings/SettingView.qml index 5f20f92b20..6af3985527 100644 --- a/resources/qml/Settings/SettingView.qml +++ b/resources/qml/Settings/SettingView.qml @@ -84,7 +84,7 @@ Item onTextChanged: { - definitionsModel.filter = {"label": "*" + text}; + definitionsModel.filter = {"i18n_label": "*" + text}; findingSettings = (text.length > 0); if(findingSettings != lastFindingSettings) { From a32615fb120b833c150bacb780e629546662141f Mon Sep 17 00:00:00 2001 From: Jack Ha Date: Thu, 8 Dec 2016 14:48:50 +0100 Subject: [PATCH 09/11] Added 50ms fade in on hover machine selection. CURA-2763 --- resources/qml/Sidebar.qml | 1 + 1 file changed, 1 insertion(+) diff --git a/resources/qml/Sidebar.qml b/resources/qml/Sidebar.qml index 543ca0c26e..f9c314d660 100644 --- a/resources/qml/Sidebar.qml +++ b/resources/qml/Sidebar.qml @@ -116,6 +116,7 @@ Rectangle background: Rectangle { color: control.hovered ? UM.Theme.getColor("button_hover") : control.pressed ? UM.Theme.getColor("button_hover") : UM.Theme.getColor("sidebar_header_bar") + Behavior on color { ColorAnimation { duration: 50; } } UM.RecolorImage { id: downArrow From ff270642c01a398d770c8b2fee354804fb3ddd80 Mon Sep 17 00:00:00 2001 From: Jack Ha Date: Thu, 8 Dec 2016 14:56:54 +0100 Subject: [PATCH 10/11] Renamed 1st Extruder, 2nd Extruder to Extruder1, 2 in UMODE. CURA-2763 --- resources/extruders/ultimaker_original_dual_1st.def.json | 2 +- resources/extruders/ultimaker_original_dual_2nd.def.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/resources/extruders/ultimaker_original_dual_1st.def.json b/resources/extruders/ultimaker_original_dual_1st.def.json index 058dbf3028..62ec8479c9 100644 --- a/resources/extruders/ultimaker_original_dual_1st.def.json +++ b/resources/extruders/ultimaker_original_dual_1st.def.json @@ -1,7 +1,7 @@ { "id": "ultimaker_original_dual_1st", "version": 2, - "name": "1st Extruder", + "name": "Extruder 1", "inherits": "fdmextruder", "metadata": { "machine": "ultimaker_original_dual", diff --git a/resources/extruders/ultimaker_original_dual_2nd.def.json b/resources/extruders/ultimaker_original_dual_2nd.def.json index 4b600d0281..42a4da524b 100644 --- a/resources/extruders/ultimaker_original_dual_2nd.def.json +++ b/resources/extruders/ultimaker_original_dual_2nd.def.json @@ -1,7 +1,7 @@ { "id": "ultimaker_original_dual_2nd", "version": 2, - "name": "2nd Extruder", + "name": "Extruder 2", "inherits": "fdmextruder", "metadata": { "machine": "ultimaker_original_dual", From 81ffc3ae4b0505cbe7833765a0b6cacfd67ce189 Mon Sep 17 00:00:00 2001 From: Simon Edwards Date: Thu, 8 Dec 2016 15:09:26 +0100 Subject: [PATCH 11/11] Import 'os' directly because we use it directly, even though it still works with out it. CURA-2953 --- plugins/VersionUpgrade/VersionUpgrade22to24/VersionUpgrade.py | 1 + 1 file changed, 1 insertion(+) diff --git a/plugins/VersionUpgrade/VersionUpgrade22to24/VersionUpgrade.py b/plugins/VersionUpgrade/VersionUpgrade22to24/VersionUpgrade.py index 28df74b499..dce2b311bb 100644 --- a/plugins/VersionUpgrade/VersionUpgrade22to24/VersionUpgrade.py +++ b/plugins/VersionUpgrade/VersionUpgrade22to24/VersionUpgrade.py @@ -2,6 +2,7 @@ # Cura is released under the terms of the AGPLv3 or higher. import configparser #To get version numbers from config files. +import os import os.path import io