From 1482c27b21fb45819d2a400ede937662f34870ed Mon Sep 17 00:00:00 2001 From: Tim Kuipers Date: Tue, 21 Feb 2017 15:07:57 +0100 Subject: [PATCH 01/10] removal: remove start_layers_at_same_position; it is now mandatory to start each layer near the given position (CURA-3339) This is because of multithreading layers. Because we want to plan all layers at the same time we don't know where we ended in the previous layer. --- resources/definitions/fdmprinter.def.json | 16 ++-------------- 1 file changed, 2 insertions(+), 14 deletions(-) diff --git a/resources/definitions/fdmprinter.def.json b/resources/definitions/fdmprinter.def.json index 68f8040df9..495cdd49ba 100644 --- a/resources/definitions/fdmprinter.def.json +++ b/resources/definitions/fdmprinter.def.json @@ -2443,16 +2443,6 @@ "settable_per_mesh": false, "settable_per_extruder": true }, - "start_layers_at_same_position": - { - "label": "Start Layers with the Same Part", - "description": "In each layer start with printing the object near the same point, so that we don't start a new layer with printing the piece which the previous layer ended with. This makes for better overhangs and small parts, but increases printing time.", - "type": "bool", - "default_value": false, - "settable_per_mesh": false, - "settable_per_extruder": false, - "settable_per_meshgroup": true - }, "layer_start_x": { "label": "Layer Start X", @@ -2461,9 +2451,8 @@ "type": "float", "default_value": 0.0, "minimum_value": "0", - "enabled": "start_layers_at_same_position", "settable_per_mesh": false, - "settable_per_extruder": false, + "settable_per_extruder": true, "settable_per_meshgroup": true }, "layer_start_y": @@ -2474,9 +2463,8 @@ "type": "float", "default_value": 0.0, "minimum_value": "0", - "enabled": "start_layers_at_same_position", "settable_per_mesh": false, - "settable_per_extruder": false, + "settable_per_extruder": true, "settable_per_meshgroup": true }, "retraction_hop_enabled": { From d93b137c954530fc14c6648ca7bb754b26afce21 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Fri, 10 Mar 2017 15:48:29 +0100 Subject: [PATCH 02/10] No longer add nodes that don't have children or MeshData CURA-3493 --- plugins/3MFReader/ThreeMFReader.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/plugins/3MFReader/ThreeMFReader.py b/plugins/3MFReader/ThreeMFReader.py index 38e7130070..2aa6fb27d3 100644 --- a/plugins/3MFReader/ThreeMFReader.py +++ b/plugins/3MFReader/ThreeMFReader.py @@ -92,7 +92,12 @@ class ThreeMFReader(MeshReader): um_node.setMeshData(mesh_data) for child in savitar_node.getChildren(): - um_node.addChild(self._convertSavitarNodeToUMNode(child)) + child_node = self._convertSavitarNodeToUMNode(child) + if child_node: + um_node.addChild(child_node) + + if um_node.getMeshData() is None and len(um_node.getChildren()) == 0: + return None settings = savitar_node.getSettings() @@ -152,6 +157,8 @@ class ThreeMFReader(MeshReader): self._unit = scene_3mf.getUnit() for node in scene_3mf.getSceneNodes(): um_node = self._convertSavitarNodeToUMNode(node) + if um_node is None: + continue # compensate for original center position, if object(s) is/are not around its zero position transform_matrix = Matrix() From b03ac3ea784b30ef18cec0f6cf2a559bd7535b1a Mon Sep 17 00:00:00 2001 From: Tim Kuipers Date: Fri, 10 Mar 2017 15:59:47 +0100 Subject: [PATCH 03/10] JSON fix: skin angle for expansion is max angle; better description (CURA-3440) --- resources/definitions/fdmprinter.def.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/resources/definitions/fdmprinter.def.json b/resources/definitions/fdmprinter.def.json index 3c9a946eef..f25899a065 100644 --- a/resources/definitions/fdmprinter.def.json +++ b/resources/definitions/fdmprinter.def.json @@ -1318,10 +1318,10 @@ "enabled": "expand_upper_skins or expand_lower_skins", "settable_per_mesh": true }, - "min_skin_angle_for_expansion": + "max_skin_angle_for_expansion": { - "label": "Minimum Skin Angle for Expansion", - "description": "Top and or bottom surfaces of your object with an angle larger than this setting, won't have their top/bottom skin expanded. This avoids expanding the narrow skin areas that are created when the model surface has a near vertical slope.", + "label": "Maximum Skin Angle for Expansion", + "description": "Top and or bottom surfaces of your object with an angle larger than this setting, won't have their top/bottom skin expanded. This avoids expanding the narrow skin areas that are created when the model surface has a near vertical slope. An angle of 0° is horizontal, while an angle of 90° is vertical.", "unit": "°", "type": "float", "minimum_value": "0", From 5e782ae85b0636f1b168aa885a0c059716bab0db Mon Sep 17 00:00:00 2001 From: Tim Kuipers Date: Fri, 10 Mar 2017 16:03:23 +0100 Subject: [PATCH 04/10] fix: type fix for last commit (CURA-3440) --- 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 f25899a065..d03f4327f6 100644 --- a/resources/definitions/fdmprinter.def.json +++ b/resources/definitions/fdmprinter.def.json @@ -1340,7 +1340,7 @@ "unit": "mm", "type": "float", "default_value": 2.24, - "value": "top_layers * layer_height / math.tan(math.radians(min_skin_angle_for_expansion))", + "value": "top_layers * layer_height / math.tan(math.radians(max_skin_angle_for_expansion))", "minimum_value": "0", "enabled": "expand_upper_skins or expand_lower_skins", "settable_per_mesh": true From 137de232216bb13daaab339c139d01fcc2a689dd Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Fri, 10 Mar 2017 18:20:23 +0100 Subject: [PATCH 05/10] Always prefer 0.4mm nozzles at initial loading Otherwise we might end up with 0.8mm AA cores, and those don't have a normal quality profile so that gives all sorts of trouble. --- resources/definitions/ultimaker3.def.json | 2 +- resources/definitions/ultimaker3_extended.def.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/resources/definitions/ultimaker3.def.json b/resources/definitions/ultimaker3.def.json index 27db3f19c7..afac8f3226 100644 --- a/resources/definitions/ultimaker3.def.json +++ b/resources/definitions/ultimaker3.def.json @@ -17,7 +17,7 @@ "has_machine_materials": true, "has_variant_materials": true, "has_variants": true, - "preferred_variant": "*aa*", + "preferred_variant": "*aa04*", "preferred_quality": "*Normal*", "variants_name": "Print core", "machine_extruder_trains": diff --git a/resources/definitions/ultimaker3_extended.def.json b/resources/definitions/ultimaker3_extended.def.json index 31bf2417e4..0de95f78b8 100644 --- a/resources/definitions/ultimaker3_extended.def.json +++ b/resources/definitions/ultimaker3_extended.def.json @@ -18,7 +18,7 @@ "has_variant_materials": true, "has_materials": true, "has_variants": true, - "preferred_variant": "*aa*", + "preferred_variant": "*aa04*", "variants_name": "Print core", "machine_extruder_trains": { From 55727f20e51f9fa821bbebbc41a1117aef56e61b Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Mon, 13 Mar 2017 09:45:23 +0100 Subject: [PATCH 06/10] CURA-3507 Make quality lookup more robust --- cura/Settings/MachineManager.py | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/cura/Settings/MachineManager.py b/cura/Settings/MachineManager.py index 42f0edefe1..d4e246ab63 100644 --- a/cura/Settings/MachineManager.py +++ b/cura/Settings/MachineManager.py @@ -731,8 +731,11 @@ class MachineManager(QObject): else: self._material_incompatible_message.hide() - new_quality_id = old_quality.getId() - quality_type = old_quality.getMetaDataEntry("quality_type") + quality_type = None + new_quality_id = None + if old_quality: + new_quality_id = old_quality.getId() + quality_type = old_quality.getMetaDataEntry("quality_type") if old_quality_changes: quality_type = old_quality_changes.getMetaDataEntry("quality_type") new_quality_id = old_quality_changes.getId() @@ -740,9 +743,11 @@ class MachineManager(QObject): # See if the requested quality type is available in the new situation. machine_definition = self._active_container_stack.getBottom() quality_manager = QualityManager.getInstance() - candidate_quality = quality_manager.findQualityByQualityType(quality_type, - quality_manager.getWholeMachineDefinition(machine_definition), - [material_container]) + candidate_quality = None + if quality_type: + candidate_quality = quality_manager.findQualityByQualityType(quality_type, + quality_manager.getWholeMachineDefinition(machine_definition), + [material_container]) if not candidate_quality or candidate_quality.getId() == "empty_quality": # Fall back to a quality new_quality = quality_manager.findQualityByQualityType(None, From d7e35fa480d436e15102bac51e719e6cba5ce774 Mon Sep 17 00:00:00 2001 From: Jack Ha Date: Mon, 13 Mar 2017 14:32:45 +0100 Subject: [PATCH 07/10] Added global qualities for Superdraft and Verydraft. CURA-3510 --- resources/definitions/fdmprinter.def.json | 0 .../um3_global_Superdraft_Quality.inst.cfg | 13 +++++++++++++ .../um3_global_Verydraft_Quality.inst.cfg | 13 +++++++++++++ 3 files changed, 26 insertions(+) mode change 100644 => 100755 resources/definitions/fdmprinter.def.json create mode 100755 resources/quality/ultimaker3/um3_global_Superdraft_Quality.inst.cfg create mode 100755 resources/quality/ultimaker3/um3_global_Verydraft_Quality.inst.cfg diff --git a/resources/definitions/fdmprinter.def.json b/resources/definitions/fdmprinter.def.json old mode 100644 new mode 100755 diff --git a/resources/quality/ultimaker3/um3_global_Superdraft_Quality.inst.cfg b/resources/quality/ultimaker3/um3_global_Superdraft_Quality.inst.cfg new file mode 100755 index 0000000000..fd3fd1f642 --- /dev/null +++ b/resources/quality/ultimaker3/um3_global_Superdraft_Quality.inst.cfg @@ -0,0 +1,13 @@ +[general] +version = 2 +name = Superdraft Quality +definition = ultimaker3 + +[metadata] +type = quality +quality_type = superdraft +global_quality = True +weight = -2 + +[values] +layer_height = 0.4 diff --git a/resources/quality/ultimaker3/um3_global_Verydraft_Quality.inst.cfg b/resources/quality/ultimaker3/um3_global_Verydraft_Quality.inst.cfg new file mode 100755 index 0000000000..83afa35e2e --- /dev/null +++ b/resources/quality/ultimaker3/um3_global_Verydraft_Quality.inst.cfg @@ -0,0 +1,13 @@ +[general] +version = 2 +name = Verydraft Quality +definition = ultimaker3 + +[metadata] +type = quality +quality_type = verydraft +global_quality = True +weight = -2 + +[values] +layer_height = 0.3 From 32d5fbe557b235e81a3991070be36133b151666c Mon Sep 17 00:00:00 2001 From: Jack Ha Date: Mon, 13 Mar 2017 17:17:56 +0100 Subject: [PATCH 08/10] Fixed choosing a quality that is compatible with multiple extruders as fallback. CURA-3510 --- cura/Settings/ExtruderManager.py | 7 +++++++ cura/Settings/MachineManager.py | 14 ++++++++------ 2 files changed, 15 insertions(+), 6 deletions(-) mode change 100644 => 100755 cura/Settings/ExtruderManager.py mode change 100644 => 100755 cura/Settings/MachineManager.py diff --git a/cura/Settings/ExtruderManager.py b/cura/Settings/ExtruderManager.py old mode 100644 new mode 100755 index 14106d5804..f6c1759078 --- a/cura/Settings/ExtruderManager.py +++ b/cura/Settings/ExtruderManager.py @@ -135,6 +135,13 @@ class ExtruderManager(QObject): return self._extruder_trains[global_container_stack.getId()][str(index)] return None + ## Get all extruder stacks + def getExtruderStacks(self): + result = [] + for i in range(self.extruderCount): + result.append(self.getExtruderStack(i)) + return result + ## Adds all extruders of a specific machine definition to the extruder # manager. # diff --git a/cura/Settings/MachineManager.py b/cura/Settings/MachineManager.py old mode 100644 new mode 100755 index d4e246ab63..e690fcec1d --- a/cura/Settings/MachineManager.py +++ b/cura/Settings/MachineManager.py @@ -749,12 +749,14 @@ class MachineManager(QObject): quality_manager.getWholeMachineDefinition(machine_definition), [material_container]) if not candidate_quality or candidate_quality.getId() == "empty_quality": - # Fall back to a quality - new_quality = quality_manager.findQualityByQualityType(None, - quality_manager.getWholeMachineDefinition(machine_definition), - [material_container]) - if new_quality: - new_quality_id = new_quality.getId() + # Fall back to a quality (which must be compatible with all other extruders) + new_qualities = quality_manager.findAllUsableQualitiesForMachineAndExtruders( + self._global_container_stack, ExtruderManager.getInstance().getExtruderStacks()) + + if new_qualities: + new_quality_id = new_qualities[0].getId() # Just pick the first available one + else: + Logger.log("w", "No quality profile found that matches the current machine and extruders.") else: if not old_quality_changes: new_quality_id = candidate_quality.getId() From c0cdddd0984f0bb3658791a6372e088e9d10a629 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Tue, 14 Mar 2017 09:59:55 +0100 Subject: [PATCH 09/10] Cura no longer crashes when NaN is recieved for printtime from engine CURA-3516 --- cura/PrintInformation.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/cura/PrintInformation.py b/cura/PrintInformation.py index 486a3d185b..458cc4ac0f 100644 --- a/cura/PrintInformation.py +++ b/cura/PrintInformation.py @@ -5,6 +5,7 @@ from PyQt5.QtCore import QObject, pyqtSignal, pyqtProperty from UM.FlameProfiler import pyqtSlot from UM.Application import Application +from UM.Logger import Logger from UM.Qt.Duration import Duration from UM.Preferences import Preferences from UM.Settings.ContainerRegistry import ContainerRegistry @@ -109,7 +110,12 @@ class PrintInformation(QObject): return self._material_costs def _onPrintDurationMessage(self, total_time, material_amounts): - self._current_print_time.setDuration(total_time) + if total_time != total_time: # Check for NaN. Engine can sometimes give us weird values. + Logger.log("w", "Received NaN for print duration message") + self._current_print_time.setDuration(0) + else: + self._current_print_time.setDuration(total_time) + self.currentPrintTimeChanged.emit() self._material_amounts = material_amounts From b08249b3a0645d8ac18c03bd76fb62b7da730e57 Mon Sep 17 00:00:00 2001 From: Jack Ha Date: Tue, 14 Mar 2017 10:43:03 +0100 Subject: [PATCH 10/10] Added changelogs. CURA-3467 --- plugins/ChangeLogPlugin/ChangeLog.txt | 58 +++++++++++++++++++++++++-- 1 file changed, 54 insertions(+), 4 deletions(-) diff --git a/plugins/ChangeLogPlugin/ChangeLog.txt b/plugins/ChangeLogPlugin/ChangeLog.txt index bcbdb73f13..1e82317a74 100755 --- a/plugins/ChangeLogPlugin/ChangeLog.txt +++ b/plugins/ChangeLogPlugin/ChangeLog.txt @@ -1,9 +1,59 @@ [2.5.0] -*Layerview double slider. -The layerview now has a nice slider with double handles where you can drag maximum layer, minimum layer and the layer range. Thansk to community member Aldo Hoeben for this feature. +*Speed. +We’ve given the system a tweak, to make changing printers, profiles, materials and print cores even quicker than ever. That means less hanging around, more time printing. We’ve also adjusted the start-up speed, which is now five seconds faster. -*Included PauseBackendPlugin. -This enables pausing the backend and manually start the backend. Thanks to community member Aldo Hoeben for this feature. +*Speedup engine – Multi-threading. +This is one of the most significant improvements, making slicing even faster. Just like computers with multiple cores, Cura can process multiple operations at the same time. How’s that for efficient? + +*Better layout for 3D layer view options. +Need things to be a bit clearer? We’ve now incorporated an improved layer view for computers that support OpenGL 4.1. For OpenGL 2.0 we will automatically switch to the old layer view. Thanks to community member Aldo Hoeben for the fancy double handle slider. + +*Disable automatic slicing. +Some users told us that slicing slowed down their workflow when it auto-starts, and to improve the user experience, we added an option to disable auto-slicing if required. Thanks to community member Aldo Hoeben for contributing to this one. + +*Solidworks & Cura macro. +This macro is designed to run inside SolidWorks, open Cura and load the current document / part. You should also be able to add this macro to your toolbar inside Solidworks. + +*Auto-scale off by default. +This change needs no explanation! + +*Preheat the build plate (with a connected printer). +You can now set your Ultimaker 3 to preheat the build plate, which reduces the downtime, letting you manually speed up your printing workflow. All you need to do is use the ‘preheat’ function in the Print Monitor screen, and set the correct temperature for the active material(s). + +*G-code reader. +The g-code reader has been reintroduced, which means you can load g-code from file and display it in layer view. You can also print saved g-code files with Cura, share and re-use them, and you can check that your printed object looks right via the g-code viewer. + +*Switching profiles. +When you change a printing profile after customizing print settings, you have an option (shown in a popup) to transfer your customizations to the new profile or discard those modifications and continue with default settings instead. We’ve made this dialog window more informative and intuitive. + +*Print cost calculation. +Cura now contains code to help you calculate the cost of your print. To do so, you’ll need to enter a cost per spool and an amount of materials per spool. You can also set the cost per material and gain better control of your expenses. Thanks to our community member Aldo Hoeben for adding this feature. + +*Bug fixes + +Property renaming: Properties that start with ‘get’ have been renamed to avoid confusion. +Window overflow: This is now fixed. +Multiple machine prefixes: Multiple machine prefixes are gone when loading and saving projects. +Removal of file extension: When you save a file or project (without changing the file type), no file extension is added to the name. It’s only when you change to another file type that the extension is added. +Ultimaker 3 Extended connectivity: Selecting Ultimaker 3 Extended in Cura let you connect and print with Ultimaker 3, without any warning. This now has been fixed. +Different Y / Z colors: Y and Z colors in the tool menu are now different to the colors on the build plate. +No collision areas: No collision areas were generated for some models. +Perimeter gaps: Perimeter gaps are not filled often enough; we’ve now amended this. +File location after restart: The old version of Cura didn’t remember the last opened file location after it’s been restarted. Now it does! +Project name: The project name changes after the project is opened. +Slicing when error value is given (print core 2): When a support is printed with extruder 2 (PVA), some support settings will trigger a slice when an error value is given. We’ve now sorted this out. +Support Towers: Support Towers can now be disabled. +Support bottoms: When putting one object on top of another with some space in between, and selecting support with support bottom interface, no support bottom is printed. This has now been resolved. +Summary box size: We’ve enlarged the summary box when saving your project. +Cubic subdivision infill: In the past, the cubic subdivision infill sometimes didn’t produce the infill (WIN) – this has now been addressed. +Spiralize outer contour and fill small gaps: When combining Fill Gaps Between Walls with Spiralize Outer Contour, the model gets a massive infill. +Experimental post-processing plugin: Since the TwaekAtZ post-processing plugin is not officially supported, we added the ‘Experimental’ tag. + +*3rd party printers (bug fixes) + +Folgertech printer definition has been added +Hello BEE Prusa printer definition has been added +Material profiles for Cartesio printers have been updated [2.4.0] *Project saving & opening