From ac266581c6f9bb3871fb8614c55dc025343e0ea8 Mon Sep 17 00:00:00 2001 From: Andreea Scorojitu Date: Wed, 31 Jan 2018 10:32:08 +0100 Subject: [PATCH 1/5] Update_changelog_CURA-4886 Update to 3.2, CURA-4886 --- plugins/ChangeLogPlugin/ChangeLog.txt | 46 +++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/plugins/ChangeLogPlugin/ChangeLog.txt b/plugins/ChangeLogPlugin/ChangeLog.txt index de895b3e41..195656fa4d 100755 --- a/plugins/ChangeLogPlugin/ChangeLog.txt +++ b/plugins/ChangeLogPlugin/ChangeLog.txt @@ -1,3 +1,49 @@ +[3.2.0] +*Tree support +Experimental tree-like support structure that uses ‘branches’ to support prints. Branches ‘grow’ and multiply towards towards the model, with fewer contact points than alternative support methods. This results in better surface finishes for organic-shaped prints. + +*Adaptive layers +Prints with a variable layer thickness which adapts to the angle of the model’s surfaces. The result is high-quality surface finishes with a marginally increased print time. This setting can be found under the experimental category. + +*Faster startup +Printer definitions are now loaded when adding a printer, instead of loading all available printers on startup. + +*Backface culling in layer view +Doubled frame rate by only rendering visible surfaces of the model in the layer view, instead of rendering the entire model. Good for lower spec GPUs as it is less resource-intensive. + +*Multi build plate +Experimental feature that creates separate build plates with shared settings in a single session, eliminating the need to clear the build plate multiple times. Multiple build plates can be sliced and sent to a printer or printer group in Cura Connect. This feature must be enabled manually in the preferences ‘general’ tab. + +*Improved mesh type selection +New button in the left toolbar to edit per model settings, giving the user more control over where to place support. Objects can be used as meshes, with a drop down list where ‘Print as support’, ‘Don't overlap support with other models’, ‘Modify settings for overlap with other models’, or ‘Modify settings for infill of other models’ can be specified. Contributed by fieldOfView. + +*View optimization +Quick camera controls introduced in version 3.1 have been revised to create more accurate isometric, front, left, and right views. + +*Updated sidebar to QtQuick 2.0 +Application framework updated to increase speed, achieve a better width and style fit, and gives users dropdown menus that are styled to fit the enabled Ultimaker Cura theme, instead of the operating system’s theme. + +*Hide sidebar +The sidebar can now be hidden/shown by selecting View > Expand/Collapse Sidebar, or with the hotkey CMD + E (Mac) or CTRL + E (PC and Linux). + +*Disable ‘Send slice information’ +A shortcut to disable ‘Send slice information’ has been added to the first launch to make it easier for privacy-conscious users to keep slice information private. + +*Signed binaries (Windows) +For security-conscious users, the Windows installer and Windows binaries have been digitally signed to prevent “Unknown application” warnings and virus scanner false-positives. + +*Start/end gcode script per extruder +Variables from both extruders in the start and end gcode snippets can now be accessed and edited, creating uniformity between profiles in different slicing environments. Contributed by fieldOfView. + +*OctoPrint plugin added to plugin browser +This plugin enables printers managed with OctoPrint to print via Ultimaker Cura interface (version 3.2 or later). + +*Bugfixes +- Fixed a bug where the mirror tool and center model options when used together would reset the model transformations +- Updated config file path to fix crashes caused by user config files that are located on remote drives +- Updated Arduino drivers to fix triggering errors during OTA updates in shared environments. This also fixes an issue when upgrading the firmware of the Ultimaker Original. +- Fixed an issue where arranging small models would fail, due to conflict with small model files combined with the “Ensure models are kept apart” option + [3.1.0] *Profile added for 0.25 mm print core This new print core gives extra fine line widths which gives prints extra definition and surface quality. From 68366ccc8df541767b14083fec986cc175dda112 Mon Sep 17 00:00:00 2001 From: Diego Prado Gesto Date: Wed, 31 Jan 2018 11:01:42 +0100 Subject: [PATCH 2/5] CURA-4897 Minor changes --- plugins/UltimakerMachineActions/UM2UpgradeSelection.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/plugins/UltimakerMachineActions/UM2UpgradeSelection.py b/plugins/UltimakerMachineActions/UM2UpgradeSelection.py index 0fd31ec445..e21256f6bd 100644 --- a/plugins/UltimakerMachineActions/UM2UpgradeSelection.py +++ b/plugins/UltimakerMachineActions/UM2UpgradeSelection.py @@ -1,4 +1,4 @@ -# Copyright (c) 2017 Ultimaker B.V. +# Copyright (c) 2018 Ultimaker B.V. # Uranium is released under the terms of the LGPLv3 or higher. from UM.Settings.ContainerRegistry import ContainerRegistry @@ -21,8 +21,7 @@ class UM2UpgradeSelection(MachineAction): self._current_global_stack = None - from cura.CuraApplication import CuraApplication - CuraApplication.getInstance().globalContainerStackChanged.connect(self._onGlobalStackChanged) + Application.getInstance().globalContainerStackChanged.connect(self._onGlobalStackChanged) self._reset() def _reset(self): From 3927c70625108c71ba63045bc7d1dd6a595db8d0 Mon Sep 17 00:00:00 2001 From: Lipu Fei Date: Wed, 31 Jan 2018 13:31:48 +0100 Subject: [PATCH 3/5] Fix material_diameter handling in ExtruderStacks CURA-4898 --- cura/Settings/ExtruderStack.py | 36 ++++++++++++++++------ cura/Settings/MachineManager.py | 8 +++++ resources/definitions/fdmextruder.def.json | 24 +++++++++++++++ 3 files changed, 59 insertions(+), 9 deletions(-) diff --git a/cura/Settings/ExtruderStack.py b/cura/Settings/ExtruderStack.py index 0854964898..6f89d33393 100644 --- a/cura/Settings/ExtruderStack.py +++ b/cura/Settings/ExtruderStack.py @@ -60,18 +60,33 @@ class ExtruderStack(CuraContainerStack): keys_to_copy = ["material_diameter", "machine_nozzle_size"] # these will be copied over to all extruders for key in keys_to_copy: - # Since material_diameter is not on the extruder definition, we need to add it here - # WARNING: this might be very dangerous and should be refactored ASAP! - definition = stack.getSettingDefinition(key) - if definition: - self.definition.addDefinition(definition) - # Only copy the value when this extruder doesn't have the value. if self.definitionChanges.hasProperty(key, "value"): continue - setting_value = stack.definitionChanges.getProperty(key, "value") - if setting_value is None: + # WARNING: this might be very dangerous and should be refactored ASAP! + # + # We cannot add a setting definition of "material_diameter" into the extruder's definition at runtime + # because all other machines which uses "fdmextruder" as the extruder definition will be affected. + # + # The problem is that single extrusion machines have their default material diameter defined in the global + # definitions. Now we automatically create an extruder stack for those machines using "fdmextruder" + # definition, which doesn't have the specific "material_diameter" and "machine_nozzle_size" defined for + # each machine. This results in wrong values which can be found in the MachineSettings dialog. + # + # To solve this, we put "material_diameter" back into the "fdmextruder" definition because modifying it in + # the extruder definition will affect all machines which uses the "fdmextruder" definition. Moreover, now + # we also check the value defined in the machine definition. If present, the value defined in the global + # stack's definition changes container will be copied. Otherwise, we will check if the default values in the + # machine definition and the extruder definition are the same, and if not, the default value in the machine + # definition will be copied to the extruder stack's definition changes. + # + setting_value_in_global_def_changes = stack.definitionChanges.getProperty(key, "value") + setting_value_in_global_def = stack.definition.getProperty(key, "value") + setting_value = setting_value_in_global_def + if setting_value_in_global_def_changes is not None: + setting_value = setting_value_in_global_def_changes + if setting_value == self.definition.getProperty(key, "value"): continue setting_definition = stack.getSettingDefinition(key) @@ -83,8 +98,11 @@ class ExtruderStack(CuraContainerStack): # Make sure the material diameter is up to date for the extruder stack. if key == "material_diameter": + from cura.CuraApplication import CuraApplication + machine_manager = CuraApplication.getInstance().getMachineManager() position = self.getMetaDataEntry("position", "0") - Application.getInstance().getExtruderManager().updateMaterialForDiameter(position) + func = lambda p = position: CuraApplication.getInstance().getExtruderManager().updateMaterialForDiameter(p) + machine_manager.machine_extruder_material_update_dict[stack.getId()].append(func) # NOTE: We cannot remove the setting from the global stack's definition changes container because for # material diameter, it needs to be applied to all extruders, but here we don't know how many extruders diff --git a/cura/Settings/MachineManager.py b/cura/Settings/MachineManager.py index e84f8d2237..1ce6e4b9c2 100755 --- a/cura/Settings/MachineManager.py +++ b/cura/Settings/MachineManager.py @@ -1,6 +1,7 @@ # Copyright (c) 2017 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. +import collections import time #Type hinting. from typing import Union, List, Dict @@ -51,6 +52,8 @@ class MachineManager(QObject): self._active_container_stack = None # type: CuraContainerStack self._global_container_stack = None # type: GlobalStack + self.machine_extruder_material_update_dict = collections.defaultdict(list) + # Used to store the new containers until after confirming the dialog self._new_variant_container = None self._new_material_container = None @@ -317,6 +320,11 @@ class MachineManager(QObject): extruder_stack.propertyChanged.connect(self._onPropertyChanged) extruder_stack.containersChanged.connect(self._onInstanceContainersChanged) + if self._global_container_stack.getId() in self.machine_extruder_material_update_dict: + for func in self.machine_extruder_material_update_dict[self._global_container_stack.getId()]: + Application.getInstance().callLater(func) + del self.machine_extruder_material_update_dict[self._global_container_stack.getId()] + self._error_check_timer.start() ## Update self._stacks_valid according to _checkStacksForErrors and emit if change. diff --git a/resources/definitions/fdmextruder.def.json b/resources/definitions/fdmextruder.def.json index 2b314cd6a5..3f84ed69a4 100644 --- a/resources/definitions/fdmextruder.def.json +++ b/resources/definitions/fdmextruder.def.json @@ -216,6 +216,30 @@ "enabled": false } } + }, + "material": + { + "label": "Material", + "icon": "category_material", + "description": "Material", + "type": "category", + "children": + { + "material_diameter": + { + "label": "Diameter", + "description": "Adjusts the diameter of the filament used. Match this value with the diameter of the used filament.", + "unit": "mm", + "type": "float", + "default_value": 2.85, + "minimum_value": "0.0001", + "minimum_value_warning": "0.4", + "maximum_value_warning": "3.5", + "enabled": "machine_gcode_flavor != \"UltiGCode\"", + "settable_per_mesh": false, + "settable_per_extruder": true + } + } } } } From 9d267cb9c7828393818e1f3f9a4a4d66bca1569e Mon Sep 17 00:00:00 2001 From: Diego Prado Gesto Date: Wed, 31 Jan 2018 14:36:16 +0100 Subject: [PATCH 4/5] Check if there is any gcode in the scene before executing a post process --- plugins/PostProcessingPlugin/PostProcessingPlugin.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/plugins/PostProcessingPlugin/PostProcessingPlugin.py b/plugins/PostProcessingPlugin/PostProcessingPlugin.py index 657e5c5387..2c6fc3f492 100644 --- a/plugins/PostProcessingPlugin/PostProcessingPlugin.py +++ b/plugins/PostProcessingPlugin/PostProcessingPlugin.py @@ -54,6 +54,9 @@ class PostProcessingPlugin(QObject, Extension): ## Execute all post-processing scripts on the gcode. def execute(self, output_device): scene = Application.getInstance().getController().getScene() + # If the scene does not have a gcode, do nothing + if not hasattr(scene, "gcode_dict"): + return gcode_dict = getattr(scene, "gcode_dict") if not gcode_dict: return From 9b8e7cb7229b9dd918c1cb61622e106f2ccfebd1 Mon Sep 17 00:00:00 2001 From: Andreea Scorojitu Date: Wed, 31 Jan 2018 15:46:30 +0100 Subject: [PATCH 5/5] Update_changelog_CURA-4886 Update to 3.2 --- plugins/ChangeLogPlugin/ChangeLog.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/ChangeLogPlugin/ChangeLog.txt b/plugins/ChangeLogPlugin/ChangeLog.txt index 195656fa4d..6b394f1e2e 100755 --- a/plugins/ChangeLogPlugin/ChangeLog.txt +++ b/plugins/ChangeLogPlugin/ChangeLog.txt @@ -1,6 +1,6 @@ [3.2.0] *Tree support -Experimental tree-like support structure that uses ‘branches’ to support prints. Branches ‘grow’ and multiply towards towards the model, with fewer contact points than alternative support methods. This results in better surface finishes for organic-shaped prints. +Experimental tree-like support structure that uses ‘branches’ to support prints. Branches ‘grow’ and multiply towards the model, with fewer contact points than alternative support methods. This results in better surface finishes for organic-shaped prints. *Adaptive layers Prints with a variable layer thickness which adapts to the angle of the model’s surfaces. The result is high-quality surface finishes with a marginally increased print time. This setting can be found under the experimental category.