From 6e09e9821f204656d380bf775bec4e71dfc9acd6 Mon Sep 17 00:00:00 2001 From: fieldOfView Date: Sun, 22 Mar 2020 18:23:32 +0100 Subject: [PATCH 01/16] Show support settings when support meshes are present in the scene --- cura/Scene/CuraSceneController.py | 31 +++- cura/Scene/CuraSceneNode.py | 6 + resources/definitions/fdmprinter.def.json | 175 ++++++++++++---------- 3 files changed, 129 insertions(+), 83 deletions(-) diff --git a/cura/Scene/CuraSceneController.py b/cura/Scene/CuraSceneController.py index 36d9e68c8f..f97fde0f7e 100644 --- a/cura/Scene/CuraSceneController.py +++ b/cura/Scene/CuraSceneController.py @@ -6,13 +6,15 @@ from PyQt5.QtWidgets import QApplication from UM.Scene.Camera import Camera from cura.UI.ObjectsModel import ObjectsModel from cura.Machines.Models.MultiBuildPlateModel import MultiBuildPlateModel +from cura.Scene.CuraSceneNode import CuraSceneNode from UM.Application import Application from UM.Scene.Iterator.DepthFirstIterator import DepthFirstIterator from UM.Scene.SceneNode import SceneNode from UM.Scene.Selection import Selection from UM.Signal import Signal - +from UM.Settings.SettingFunction import SettingFunction +from UM.Settings.ContainerRegistry import ContainerRegistry class CuraSceneController(QObject): activeBuildPlateChanged = Signal() @@ -43,6 +45,24 @@ class CuraSceneController(QObject): self._change_timer.start() def updateMaxBuildPlate(self, *args): + global_stack = Application.getInstance().getGlobalContainerStack() + if global_stack: + scene_has_support_meshes = self._sceneHasSupportMeshes() # TODO: see if this can be cached + if scene_has_support_meshes != global_stack.getProperty("support_meshes_present", "value"): + # adjust the setting without having the setting value in an InstanceContainer + setting_definitions = global_stack.definition.findDefinitions(key="support_meshes_present") + if setting_definitions: + relations = setting_definitions[0].relations + definition_dict = setting_definitions[0].serialize_to_dict() + definition_dict["enabled"] = False + definition_dict["default_value"] = scene_has_support_meshes + setting_definitions[0].deserialize(definition_dict) + setting_definitions[0]._relations = relations # TODO: find a better way to restore relations + + # notify relations that the setting has changed + for relation in relations: + global_stack.propertyChanged.emit(relation.target.key, "enabled") + max_build_plate = self._calcMaxBuildPlate() changed = False if max_build_plate != self._max_build_plate: @@ -72,6 +92,15 @@ class CuraSceneController(QObject): max_build_plate = max(build_plate_number, max_build_plate) return max_build_plate + def _sceneHasSupportMeshes(self): + root = Application.getInstance().getController().getScene().getRoot() + for node in root.getAllChildren(): + if isinstance(node, CuraSceneNode): + per_mesh_stack = node.callDecoration("getStack") + if per_mesh_stack and per_mesh_stack.getProperty("support_mesh", "value"): + return True + return False + ## Either select or deselect an item @pyqtSlot(int) def changeSelection(self, index): diff --git a/cura/Scene/CuraSceneNode.py b/cura/Scene/CuraSceneNode.py index eb609def5a..df01c79a29 100644 --- a/cura/Scene/CuraSceneNode.py +++ b/cura/Scene/CuraSceneNode.py @@ -36,6 +36,12 @@ class CuraSceneNode(SceneNode): def isSelectable(self) -> bool: return super().isSelectable() and self.callDecoration("getBuildPlateNumber") == cura.CuraApplication.CuraApplication.getInstance().getMultiBuildPlateModel().activeBuildPlate + def isSupportMesh(self) -> bool: + per_mesh_stack = self.callDecoration("getStack") + if not per_mesh_stack: + return False + return per_mesh_stack.getProperty("support_mesh", "value") + ## Get the extruder used to print this node. If there is no active node, then the extruder in position zero is returned # TODO The best way to do it is by adding the setActiveExtruder decorator to every node when is loaded def getPrintingExtruder(self) -> Optional[ExtruderStack]: diff --git a/resources/definitions/fdmprinter.def.json b/resources/definitions/fdmprinter.def.json index fc9c0ac613..83f4c5943c 100644 --- a/resources/definitions/fdmprinter.def.json +++ b/resources/definitions/fdmprinter.def.json @@ -890,7 +890,7 @@ "maximum_value_warning": "3 * machine_nozzle_size", "default_value": 0.4, "type": "float", - "enabled": "(support_enable or support_tree_enable)", + "enabled": "(support_enable or support_tree_enable or support_meshes_present)", "value": "line_width", "limit_to_extruder": "support_infill_extruder_nr", "settable_per_mesh": false, @@ -906,7 +906,7 @@ "minimum_value_warning": "0.1 + 0.4 * machine_nozzle_size", "maximum_value_warning": "2 * machine_nozzle_size", "type": "float", - "enabled": "(support_enable or support_tree_enable) and support_interface_enable", + "enabled": "(support_enable or support_tree_enable or support_meshes_present) and support_interface_enable", "limit_to_extruder": "support_interface_extruder_nr", "value": "line_width", "settable_per_mesh": false, @@ -923,7 +923,7 @@ "minimum_value_warning": "0.4 * machine_nozzle_size", "maximum_value_warning": "2 * machine_nozzle_size", "type": "float", - "enabled": "(support_enable or support_tree_enable) and support_roof_enable", + "enabled": "(support_enable or support_tree_enable or support_meshes_present) and support_roof_enable", "limit_to_extruder": "support_roof_extruder_nr", "value": "extruderValue(support_roof_extruder_nr, 'support_interface_line_width')", "settable_per_mesh": false, @@ -939,7 +939,7 @@ "minimum_value_warning": "0.4 * machine_nozzle_size", "maximum_value_warning": "2 * machine_nozzle_size", "type": "float", - "enabled": "(support_enable or support_tree_enable) and support_bottom_enable", + "enabled": "(support_enable or support_tree_enable or support_meshes_present) and support_bottom_enable", "limit_to_extruder": "support_bottom_extruder_nr", "value": "extruderValue(support_bottom_extruder_nr, 'support_interface_line_width')", "settable_per_mesh": false, @@ -2848,7 +2848,7 @@ "maximum_value_warning": "150", "default_value": 60, "value": "speed_print", - "enabled": "support_enable or support_tree_enable", + "enabled": "support_enable or support_tree_enable or support_meshes_present", "settable_per_mesh": false, "limit_to_extruder": "support_extruder_nr", "settable_per_extruder": true, @@ -2865,7 +2865,7 @@ "maximum_value": "math.sqrt(machine_max_feedrate_x ** 2 + machine_max_feedrate_y ** 2)", "maximum_value_warning": "150", "value": "speed_support", - "enabled": "support_enable or support_tree_enable", + "enabled": "support_enable or support_tree_enable or support_meshes_present", "limit_to_extruder": "support_infill_extruder_nr", "settable_per_mesh": false, "settable_per_extruder": true @@ -2880,7 +2880,7 @@ "minimum_value": "0.1", "maximum_value": "math.sqrt(machine_max_feedrate_x ** 2 + machine_max_feedrate_y ** 2)", "maximum_value_warning": "150", - "enabled": "support_interface_enable and (support_enable or support_tree_enable)", + "enabled": "support_interface_enable and (support_enable or support_tree_enable or support_meshes_present)", "limit_to_extruder": "support_interface_extruder_nr", "value": "speed_support / 1.5", "settable_per_mesh": false, @@ -2897,7 +2897,7 @@ "minimum_value": "0.1", "maximum_value": "math.sqrt(machine_max_feedrate_x ** 2 + machine_max_feedrate_y ** 2)", "maximum_value_warning": "150", - "enabled": "support_roof_enable and (support_enable or support_tree_enable)", + "enabled": "support_roof_enable and (support_enable or support_tree_enable or support_meshes_present)", "limit_to_extruder": "support_roof_extruder_nr", "value": "extruderValue(support_roof_extruder_nr, 'speed_support_interface')", "settable_per_mesh": false, @@ -2913,7 +2913,7 @@ "minimum_value": "0.1", "maximum_value": "math.sqrt(machine_max_feedrate_x ** 2 + machine_max_feedrate_y ** 2)", "maximum_value_warning": "150", - "enabled": "support_bottom_enable and (support_enable or support_tree_enable)", + "enabled": "support_bottom_enable and (support_enable or support_tree_enable or support_meshes_present)", "limit_to_extruder": "support_bottom_extruder_nr", "value": "extruderValue(support_bottom_extruder_nr, 'speed_support_interface')", "settable_per_mesh": false, @@ -3188,7 +3188,7 @@ "maximum_value_warning": "10000", "default_value": 3000, "value": "acceleration_print", - "enabled": "resolveOrValue('acceleration_enabled') and (support_enable or support_tree_enable)", + "enabled": "resolveOrValue('acceleration_enabled') and (support_enable or support_tree_enable or support_meshes_present)", "settable_per_mesh": false, "limit_to_extruder": "support_extruder_nr", "settable_per_extruder": true, @@ -3205,7 +3205,7 @@ "minimum_value": "0.1", "minimum_value_warning": "100", "maximum_value_warning": "10000", - "enabled": "resolveOrValue('acceleration_enabled') and (support_enable or support_tree_enable)", + "enabled": "resolveOrValue('acceleration_enabled') and (support_enable or support_tree_enable or support_meshes_present)", "limit_to_extruder": "support_infill_extruder_nr", "settable_per_mesh": false, "settable_per_extruder": true @@ -3221,7 +3221,7 @@ "minimum_value": "0.1", "minimum_value_warning": "100", "maximum_value_warning": "10000", - "enabled": "resolveOrValue('acceleration_enabled') and support_interface_enable and (support_enable or support_tree_enable)", + "enabled": "resolveOrValue('acceleration_enabled') and support_interface_enable and (support_enable or support_tree_enable or support_meshes_present)", "limit_to_extruder": "support_interface_extruder_nr", "settable_per_mesh": false, "settable_per_extruder": true, @@ -3238,7 +3238,7 @@ "minimum_value": "0.1", "minimum_value_warning": "100", "maximum_value_warning": "10000", - "enabled": "acceleration_enabled and support_roof_enable and (support_enable or support_tree_enable)", + "enabled": "acceleration_enabled and support_roof_enable and (support_enable or support_tree_enable or support_meshes_present)", "limit_to_extruder": "support_roof_extruder_nr", "settable_per_mesh": false, "settable_per_extruder": true @@ -3254,7 +3254,7 @@ "minimum_value": "0.1", "minimum_value_warning": "100", "maximum_value_warning": "10000", - "enabled": "acceleration_enabled and support_bottom_enable and (support_enable or support_tree_enable)", + "enabled": "acceleration_enabled and support_bottom_enable and (support_enable or support_tree_enable or support_meshes_present)", "limit_to_extruder": "support_bottom_extruder_nr", "settable_per_mesh": false, "settable_per_extruder": true @@ -3473,7 +3473,7 @@ "maximum_value_warning": "50", "default_value": 20, "value": "jerk_print", - "enabled": "resolveOrValue('jerk_enabled') and (support_enable or support_tree_enable)", + "enabled": "resolveOrValue('jerk_enabled') and (support_enable or support_tree_enable or support_meshes_present)", "settable_per_mesh": false, "settable_per_extruder": true, "limit_to_extruder": "support_extruder_nr", @@ -3489,7 +3489,7 @@ "value": "jerk_support", "minimum_value": "0", "maximum_value_warning": "50", - "enabled": "resolveOrValue('jerk_enabled') and (support_enable or support_tree_enable)", + "enabled": "resolveOrValue('jerk_enabled') and (support_enable or support_tree_enable or support_meshes_present)", "limit_to_extruder": "support_infill_extruder_nr", "settable_per_mesh": false, "settable_per_extruder": true @@ -3504,7 +3504,7 @@ "value": "jerk_support", "minimum_value": "0", "maximum_value_warning": "50", - "enabled": "resolveOrValue('jerk_enabled') and support_interface_enable and (support_enable or support_tree_enable)", + "enabled": "resolveOrValue('jerk_enabled') and support_interface_enable and (support_enable or support_tree_enable or support_meshes_present)", "limit_to_extruder": "support_interface_extruder_nr", "settable_per_mesh": false, "settable_per_extruder": true, @@ -3520,7 +3520,7 @@ "value": "extruderValue(support_roof_extruder_nr, 'jerk_support_interface')", "minimum_value": "0", "maximum_value_warning": "50", - "enabled": "resolveOrValue('jerk_enabled') and support_roof_enable and (support_enable or support_tree_enable)", + "enabled": "resolveOrValue('jerk_enabled') and support_roof_enable and (support_enable or support_tree_enable or support_meshes_present)", "limit_to_extruder": "support_roof_extruder_nr", "settable_per_mesh": false, "settable_per_extruder": true @@ -3535,7 +3535,7 @@ "value": "extruderValue(support_roof_extruder_nr, 'jerk_support_interface')", "minimum_value": "0", "maximum_value_warning": "50", - "enabled": "resolveOrValue('jerk_enabled') and support_bottom_enable and (support_enable or support_tree_enable)", + "enabled": "resolveOrValue('jerk_enabled') and support_bottom_enable and (support_enable or support_tree_enable or support_meshes_present)", "limit_to_extruder": "support_bottom_extruder_nr", "settable_per_mesh": false, "settable_per_extruder": true @@ -3779,7 +3779,7 @@ "description": "Omit retraction when moving from support to support in a straight line. Enabling this setting saves print time, but can lead to excessive stringing within the support structure.", "type": "bool", "default_value": true, - "enabled": "retraction_enable and (support_enable or support_tree_enable)", + "enabled": "retraction_enable and (support_enable or support_tree_enable or support_meshes_present)", "settable_per_mesh": false, "settable_per_extruder": true }, @@ -4109,7 +4109,7 @@ "type": "extruder", "default_value": "0", "value": "int(defaultExtruderPosition())", - "enabled": "(support_enable or support_tree_enable) and extruders_enabled_count > 1", + "enabled": "(support_enable or support_tree_enable or support_meshes_present) and extruders_enabled_count > 1", "settable_per_mesh": false, "settable_per_extruder": false, "children": { @@ -4120,7 +4120,7 @@ "type": "extruder", "default_value": "0", "value": "support_extruder_nr", - "enabled": "(support_enable or support_tree_enable) and extruders_enabled_count > 1", + "enabled": "(support_enable or support_tree_enable or support_meshes_present) and extruders_enabled_count > 1", "settable_per_mesh": false, "settable_per_extruder": false }, @@ -4131,7 +4131,7 @@ "type": "extruder", "default_value": "0", "value": "support_extruder_nr", - "enabled": "(support_enable or support_tree_enable) and extruders_enabled_count > 1", + "enabled": "(support_enable or support_tree_enable or support_meshes_present) and extruders_enabled_count > 1", "settable_per_mesh": false, "settable_per_extruder": false }, @@ -4142,7 +4142,7 @@ "type": "extruder", "default_value": "0", "value": "support_extruder_nr", - "enabled": "(support_enable or support_tree_enable) and extruders_enabled_count > 1", + "enabled": "(support_enable or support_tree_enable or support_meshes_present) and extruders_enabled_count > 1", "settable_per_mesh": false, "settable_per_extruder": false, "children": @@ -4154,7 +4154,7 @@ "type": "extruder", "default_value": "0", "value": "support_interface_extruder_nr", - "enabled": "(support_enable or support_tree_enable) and extruders_enabled_count > 1", + "enabled": "(support_enable or support_tree_enable or support_meshes_present) and extruders_enabled_count > 1", "settable_per_mesh": false, "settable_per_extruder": false }, @@ -4165,7 +4165,7 @@ "type": "extruder", "default_value": "0", "value": "support_interface_extruder_nr", - "enabled": "(support_enable or support_tree_enable) and extruders_enabled_count > 1", + "enabled": "(support_enable or support_tree_enable or support_meshes_present) and extruders_enabled_count > 1", "settable_per_mesh": false, "settable_per_extruder": false } @@ -4219,7 +4219,7 @@ "gyroid": "Gyroid" }, "default_value": "zigzag", - "enabled": "support_enable or support_tree_enable", + "enabled": "support_enable or support_tree_enable or support_meshes_present", "limit_to_extruder": "support_infill_extruder_nr", "settable_per_mesh": false, "settable_per_extruder": true @@ -4234,7 +4234,7 @@ "maximum_value_warning": "3", "type": "int", "value": "1 if support_tree_enable else (1 if (support_pattern == 'grid' or support_pattern == 'triangles' or support_pattern == 'concentric') else 0)", - "enabled": "support_enable or support_tree_enable", + "enabled": "support_enable or support_tree_enable or support_meshes_present", "limit_to_extruder": "support_infill_extruder_nr", "settable_per_mesh": false, "settable_per_extruder": true @@ -4246,7 +4246,7 @@ "type": "bool", "default_value": false, "value": "support_pattern == 'cross' or support_pattern == 'gyroid'", - "enabled": "(support_enable or support_tree_enable) and (support_pattern == 'grid' or support_pattern == 'triangles' or support_pattern == 'cross' or support_pattern == 'gyroid')", + "enabled": "(support_enable or support_tree_enable or support_meshes_present) and (support_pattern == 'grid' or support_pattern == 'triangles' or support_pattern == 'cross' or support_pattern == 'gyroid')", "limit_to_extruder": "support_infill_extruder_nr", "settable_per_mesh": false, "settable_per_extruder": true @@ -4257,7 +4257,7 @@ "description": "Connect the ZigZags. This will increase the strength of the zig zag support structure.", "type": "bool", "default_value": true, - "enabled": "(support_enable or support_tree_enable) and support_pattern == 'zigzag'", + "enabled": "(support_enable or support_tree_enable or support_meshes_present) and support_pattern == 'zigzag'", "limit_to_extruder": "support_infill_extruder_nr", "settable_per_mesh": false, "settable_per_extruder": true @@ -4272,7 +4272,7 @@ "maximum_value_warning": "100", "default_value": 15, "value": "15 if support_enable else 0 if support_tree_enable else 15", - "enabled": "support_enable or support_tree_enable", + "enabled": "support_enable or support_tree_enable or support_meshes_present", "limit_to_extruder": "support_infill_extruder_nr", "settable_per_mesh": false, "settable_per_extruder": true, @@ -4287,7 +4287,7 @@ "minimum_value": "0", "minimum_value_warning": "support_line_width", "default_value": 2.66, - "enabled": "support_enable or support_tree_enable", + "enabled": "support_enable or support_tree_enable or support_meshes_present", "value": "0 if support_infill_rate == 0 else (support_line_width * 100) / support_infill_rate * (2 if support_pattern == 'grid' else (3 if support_pattern == 'triangles' else 1))", "limit_to_extruder": "support_infill_extruder_nr", "settable_per_mesh": false, @@ -4302,7 +4302,7 @@ "minimum_value": "0", "minimum_value_warning": "support_line_width", "default_value": 2.66, - "enabled": "support_enable or support_tree_enable", + "enabled": "support_enable or support_tree_enable or support_meshes_present", "value": "support_line_distance", "limit_to_extruder": "support_infill_extruder_nr", "settable_per_mesh": false, @@ -4316,7 +4316,7 @@ "description": "A list of integer line directions to use. Elements from the list are used sequentially as the layers progress and when the end of the list is reached, it starts at the beginning again. The list items are separated by commas and the whole list is contained in square brackets. Default is an empty list which means use the default angle 0 degrees.", "type": "[int]", "default_value": "[ ]", - "enabled": "(support_enable or support_tree_enable) and support_pattern != 'concentric' and support_infill_rate > 0", + "enabled": "(support_enable or support_tree_enable or support_meshes_present) and support_pattern != 'concentric' and support_infill_rate > 0", "limit_to_extruder": "support_infill_extruder_nr", "settable_per_mesh": false, "settable_per_extruder": true @@ -4327,7 +4327,7 @@ "description": "Generate a brim within the support infill regions of the first layer. This brim is printed underneath the support, not around it. Enabling this setting increases the adhesion of support to the build plate.", "type": "bool", "default_value": false, - "enabled": "support_enable or support_tree_enable", + "enabled": "support_enable or support_tree_enable or support_meshes_present", "limit_to_extruder": "support_infill_extruder_nr", "settable_per_mesh": false, "settable_per_extruder": true @@ -4341,7 +4341,7 @@ "default_value": 8.0, "minimum_value": "0.0", "maximum_value_warning": "50.0", - "enabled": "(support_enable or support_tree_enable) and support_brim_enable", + "enabled": "(support_enable or support_tree_enable or support_meshes_present) and support_brim_enable", "settable_per_mesh": false, "settable_per_extruder": true, "limit_to_extruder": "support_infill_extruder_nr", @@ -4356,7 +4356,7 @@ "minimum_value": "0", "maximum_value_warning": "50 / skirt_brim_line_width", "value": "math.ceil(support_brim_width / (skirt_brim_line_width * initial_layer_line_width_factor / 100.0))", - "enabled": "(support_enable or support_tree_enable) and support_brim_enable", + "enabled": "(support_enable or support_tree_enable or support_meshes_present) and support_brim_enable", "settable_per_mesh": false, "settable_per_extruder": true, "limit_to_extruder": "support_infill_extruder_nr" @@ -4373,7 +4373,7 @@ "maximum_value_warning": "machine_nozzle_size", "default_value": 0.1, "limit_to_extruder": "support_interface_extruder_nr if support_interface_enable else support_infill_extruder_nr", - "enabled": "support_enable or support_tree_enable", + "enabled": "support_enable or support_tree_enable or support_meshes_present", "settable_per_mesh": true, "children": { @@ -4386,7 +4386,7 @@ "maximum_value_warning": "machine_nozzle_size", "default_value": 0.1, "type": "float", - "enabled": "support_enable or support_tree_enable", + "enabled": "support_enable or support_tree_enable or support_meshes_present", "value": "extruderValue(support_roof_extruder_nr if support_roof_enable else support_infill_extruder_nr, 'support_z_distance')", "limit_to_extruder": "support_roof_extruder_nr if support_roof_enable else support_infill_extruder_nr", "settable_per_mesh": true @@ -4402,7 +4402,7 @@ "value": "extruderValue(support_bottom_extruder_nr if support_bottom_enable else support_infill_extruder_nr, 'support_z_distance') if support_type == 'everywhere' else 0", "limit_to_extruder": "support_bottom_extruder_nr if support_bottom_enable else support_infill_extruder_nr", "type": "float", - "enabled": "(support_enable or support_tree_enable) and resolveOrValue('support_type') == 'everywhere'", + "enabled": "(support_enable or support_tree_enable or support_meshes_present) and resolveOrValue('support_type') == 'everywhere'", "settable_per_mesh": true } } @@ -4417,7 +4417,7 @@ "maximum_value_warning": "1.5 * machine_nozzle_tip_outer_diameter", "default_value": 0.7, "limit_to_extruder": "support_infill_extruder_nr", - "enabled": "support_enable or support_tree_enable", + "enabled": "support_enable or support_tree_enable or support_meshes_present", "settable_per_mesh": true }, "support_xy_overrides_z": @@ -4432,7 +4432,7 @@ }, "default_value": "z_overrides_xy", "limit_to_extruder": "support_infill_extruder_nr", - "enabled": "support_enable", + "enabled": "support_enable or support_meshes_present", "settable_per_mesh": true }, "support_xy_distance_overhang": @@ -4447,7 +4447,7 @@ "default_value": 0.2, "value": "machine_nozzle_size / 2", "limit_to_extruder": "support_infill_extruder_nr", - "enabled": "support_enable and support_xy_overrides_z == 'z_overrides_xy'", + "enabled": "(support_enable or support_meshes_present) and support_xy_overrides_z == 'z_overrides_xy'", "settable_per_mesh": true }, "support_bottom_stair_step_height": @@ -4460,7 +4460,7 @@ "limit_to_extruder": "support_bottom_extruder_nr if support_bottom_enable else support_infill_extruder_nr", "minimum_value": "0", "maximum_value_warning": "1.0", - "enabled": "support_enable", + "enabled": "support_enable or support_meshes_present", "settable_per_mesh": true }, "support_bottom_stair_step_width": @@ -4473,7 +4473,7 @@ "limit_to_extruder": "support_interface_extruder_nr if support_interface_enable else support_infill_extruder_nr", "minimum_value": "0", "maximum_value_warning": "10.0", - "enabled": "support_enable", + "enabled": "support_enable or support_meshes_present", "settable_per_mesh": true }, "support_join_distance": @@ -4486,7 +4486,7 @@ "limit_to_extruder": "support_infill_extruder_nr", "minimum_value_warning": "0", "maximum_value_warning": "10", - "enabled": "support_enable", + "enabled": "support_enable or support_meshes_present", "settable_per_mesh": true }, "support_offset": @@ -4499,7 +4499,7 @@ "limit_to_extruder": "support_infill_extruder_nr", "minimum_value_warning": "-1 * machine_nozzle_size", "maximum_value_warning": "10 * machine_nozzle_size", - "enabled": "support_enable", + "enabled": "support_enable or support_meshes_present", "settable_per_mesh": true }, "support_infill_sparse_thickness": @@ -4513,7 +4513,7 @@ "maximum_value_warning": "0.75 * machine_nozzle_size", "maximum_value": "resolveOrValue('layer_height') * 8", "value": "resolveOrValue('layer_height')", - "enabled": "(support_enable or support_tree_enable) and support_infill_rate > 0", + "enabled": "(support_enable or support_tree_enable or support_meshes_present) and support_infill_rate > 0", "limit_to_extruder": "support_infill_extruder_nr", "settable_per_mesh": false }, @@ -4526,7 +4526,7 @@ "minimum_value": "0", "maximum_value_warning": "1 if (support_pattern == 'cross' or support_pattern == 'lines' or support_pattern == 'zigzag' or support_pattern == 'concentric') else 5", "maximum_value": "999999 if support_line_distance == 0 else (20 - math.log(support_line_distance) / math.log(2))", - "enabled": "(support_enable or support_tree_enable) and support_infill_rate > 0", + "enabled": "(support_enable or support_tree_enable or support_meshes_present) and support_infill_rate > 0", "limit_to_extruder": "support_infill_extruder_nr", "settable_per_mesh": false }, @@ -4539,7 +4539,7 @@ "default_value": 1, "minimum_value": "0.0001", "minimum_value_warning": "3 * resolveOrValue('layer_height')", - "enabled": "(support_enable or support_tree_enable) and support_infill_rate > 0 and gradual_support_infill_steps > 0", + "enabled": "(support_enable or support_tree_enable or support_meshes_present) and support_infill_rate > 0 and gradual_support_infill_steps > 0", "limit_to_extruder": "support_infill_extruder_nr", "settable_per_mesh": false }, @@ -4552,7 +4552,7 @@ "default_value": 0.0, "minimum_value": "0", "maximum_value_warning": "5", - "enabled": "support_enable", + "enabled": "support_enable or support_meshes_present", "limit_to_extruder": "support_infill_extruder_nr", "settable_per_mesh": true }, @@ -4563,7 +4563,7 @@ "type": "bool", "default_value": false, "limit_to_extruder": "support_interface_extruder_nr", - "enabled": "support_enable or support_tree_enable", + "enabled": "support_enable or support_tree_enable or support_meshes_present", "settable_per_mesh": true, "children": { @@ -4575,7 +4575,7 @@ "default_value": false, "value": "extruderValue(support_roof_extruder_nr, 'support_interface_enable')", "limit_to_extruder": "support_roof_extruder_nr", - "enabled": "support_enable or support_tree_enable", + "enabled": "support_enable or support_tree_enable or support_meshes_present", "settable_per_mesh": true }, "support_bottom_enable": @@ -4586,7 +4586,7 @@ "default_value": false, "value": "extruderValue(support_bottom_extruder_nr, 'support_interface_enable')", "limit_to_extruder": "support_bottom_extruder_nr", - "enabled": "support_enable or support_tree_enable", + "enabled": "support_enable or support_tree_enable or support_meshes_present", "settable_per_mesh": true } } @@ -4602,7 +4602,7 @@ "minimum_value_warning": "0.2 + layer_height", "maximum_value_warning": "10", "limit_to_extruder": "support_interface_extruder_nr", - "enabled": "support_interface_enable and (support_enable or support_tree_enable)", + "enabled": "support_interface_enable and (support_enable or support_tree_enable or support_meshes_present)", "settable_per_mesh": true, "children": { @@ -4618,7 +4618,7 @@ "maximum_value_warning": "10", "value": "extruderValue(support_roof_extruder_nr, 'support_interface_height')", "limit_to_extruder": "support_roof_extruder_nr", - "enabled": "support_roof_enable and (support_enable or support_tree_enable)", + "enabled": "support_roof_enable and (support_enable or support_tree_enable or support_meshes_present)", "settable_per_mesh": true }, "support_bottom_height": @@ -4633,7 +4633,7 @@ "minimum_value_warning": "min(support_bottom_distance + layer_height, support_bottom_stair_step_height)", "maximum_value_warning": "10", "limit_to_extruder": "support_bottom_extruder_nr", - "enabled": "support_bottom_enable and (support_enable or support_tree_enable)", + "enabled": "support_bottom_enable and (support_enable or support_tree_enable or support_meshes_present)", "settable_per_mesh": true } } @@ -4647,7 +4647,7 @@ "minimum_value": "0", "maximum_value_warning": "support_interface_height", "limit_to_extruder": "support_interface_extruder_nr", - "enabled": "support_interface_enable and (support_enable or support_tree_enable)", + "enabled": "support_interface_enable and (support_enable or support_tree_enable or support_meshes_present)", "settable_per_mesh": true }, "support_interface_density": @@ -4660,7 +4660,7 @@ "minimum_value": "0", "maximum_value_warning": "100", "limit_to_extruder": "support_interface_extruder_nr", - "enabled": "support_interface_enable and (support_enable or support_tree_enable)", + "enabled": "support_interface_enable and (support_enable or support_tree_enable or support_meshes_present)", "settable_per_mesh": false, "settable_per_extruder": true, "children": @@ -4675,7 +4675,7 @@ "minimum_value": "0", "maximum_value": "100", "limit_to_extruder": "support_roof_extruder_nr", - "enabled": "support_roof_enable and (support_enable or support_tree_enable)", + "enabled": "support_roof_enable and (support_enable or support_tree_enable or support_meshes_present)", "value": "extruderValue(support_roof_extruder_nr, 'support_interface_density')", "settable_per_mesh": false, "settable_per_extruder": true, @@ -4692,7 +4692,7 @@ "minimum_value_warning": "support_roof_line_width - 0.0001", "value": "0 if support_roof_density == 0 else (support_roof_line_width * 100) / support_roof_density * (2 if support_roof_pattern == 'grid' else (3 if support_roof_pattern == 'triangles' else 1))", "limit_to_extruder": "support_roof_extruder_nr", - "enabled": "support_roof_enable and (support_enable or support_tree_enable)", + "enabled": "support_roof_enable and (support_enable or support_tree_enable or support_meshes_present)", "settable_per_mesh": false, "settable_per_extruder": true } @@ -4708,7 +4708,7 @@ "minimum_value": "0", "maximum_value": "100", "limit_to_extruder": "support_bottom_extruder_nr", - "enabled": "support_bottom_enable and (support_enable or support_tree_enable)", + "enabled": "support_bottom_enable and (support_enable or support_tree_enable or support_meshes_present)", "value": "extruderValue(support_bottom_extruder_nr, 'support_interface_density')", "settable_per_mesh": false, "settable_per_extruder": true, @@ -4725,7 +4725,7 @@ "minimum_value_warning": "support_bottom_line_width - 0.0001", "value": "0 if support_bottom_density == 0 else (support_bottom_line_width * 100) / support_bottom_density * (2 if support_bottom_pattern == 'grid' else (3 if support_bottom_pattern == 'triangles' else 1))", "limit_to_extruder": "support_bottom_extruder_nr", - "enabled": "support_bottom_enable and (support_enable or support_tree_enable)", + "enabled": "support_bottom_enable and (support_enable or support_tree_enable or support_meshes_present)", "settable_per_mesh": false, "settable_per_extruder": true } @@ -4748,7 +4748,7 @@ }, "default_value": "concentric", "limit_to_extruder": "support_interface_extruder_nr", - "enabled": "support_interface_enable and (support_enable or support_tree_enable)", + "enabled": "support_interface_enable and (support_enable or support_tree_enable or support_meshes_present)", "settable_per_mesh": false, "settable_per_extruder": true, "children": @@ -4769,7 +4769,7 @@ "default_value": "concentric", "value": "extruderValue(support_roof_extruder_nr, 'support_interface_pattern')", "limit_to_extruder": "support_roof_extruder_nr", - "enabled": "support_roof_enable and (support_enable or support_tree_enable)", + "enabled": "support_roof_enable and (support_enable or support_tree_enable or support_meshes_present)", "settable_per_mesh": false, "settable_per_extruder": true }, @@ -4789,7 +4789,7 @@ "default_value": "concentric", "value": "extruderValue(support_bottom_extruder_nr, 'support_interface_pattern')", "limit_to_extruder": "support_bottom_extruder_nr", - "enabled": "support_bottom_enable and (support_enable or support_tree_enable)", + "enabled": "support_bottom_enable and (support_enable or support_tree_enable or support_meshes_present)", "settable_per_mesh": false, "settable_per_extruder": true } @@ -4805,7 +4805,7 @@ "minimum_value": "0", "minimum_value_warning": "minimum_support_area", "limit_to_extruder": "support_interface_extruder_nr", - "enabled": "support_interface_enable and (support_enable or support_tree_enable)", + "enabled": "support_interface_enable and (support_enable or support_tree_enable or support_meshes_present)", "settable_per_mesh": true, "children": { @@ -4820,7 +4820,7 @@ "minimum_value": "0", "minimum_value_warning": "minimum_support_area", "limit_to_extruder": "support_roof_extruder_nr", - "enabled": "support_roof_enable and (support_enable or support_tree_enable)", + "enabled": "support_roof_enable and (support_enable or support_tree_enable or support_meshes_present)", "settable_per_mesh": true }, "minimum_bottom_area": @@ -4834,7 +4834,7 @@ "minimum_value": "0", "minimum_value_warning": "minimum_support_area", "limit_to_extruder": "support_bottom_extruder_nr", - "enabled": "support_bottom_enable and (support_enable or support_tree_enable)", + "enabled": "support_bottom_enable and (support_enable or support_tree_enable or support_meshes_present)", "settable_per_mesh": true } } @@ -4848,7 +4848,7 @@ "default_value": 0.0, "maximum_value": "extruderValue(support_extruder_nr, 'support_offset')", "limit_to_extruder": "support_interface_extruder_nr", - "enabled": "support_interface_enable and (support_enable or support_tree_enable)", + "enabled": "support_interface_enable and (support_enable or support_tree_enable or support_meshes_present)", "settable_per_mesh": false, "settable_per_extruder": true, "children": @@ -4863,7 +4863,7 @@ "value": "extruderValue(support_roof_extruder_nr, 'support_interface_offset')", "maximum_value": "extruderValue(support_extruder_nr, 'support_offset')", "limit_to_extruder": "support_roof_extruder_nr", - "enabled": "support_roof_enable and (support_enable or support_tree_enable)", + "enabled": "support_roof_enable and (support_enable or support_tree_enable or support_meshes_present)", "settable_per_mesh": false, "settable_per_extruder": true }, @@ -4877,7 +4877,7 @@ "value": "extruderValue(support_bottom_extruder_nr, 'support_interface_offset')", "maximum_value": "extruderValue(support_extruder_nr, 'support_offset')", "limit_to_extruder": "support_bottom_extruder_nr", - "enabled": "support_bottom_enable and (support_enable or support_tree_enable)", + "enabled": "support_bottom_enable and (support_enable or support_tree_enable or support_meshes_present)", "settable_per_mesh": false, "settable_per_extruder": true } @@ -4890,7 +4890,7 @@ "type": "[int]", "default_value": "[ ]", "limit_to_extruder": "support_interface_extruder_nr", - "enabled": "(support_enable or support_tree_enable) and support_interface_enable and support_interface_pattern != 'concentric'", + "enabled": "(support_enable or support_tree_enable or support_meshes_present) and support_interface_enable and support_interface_pattern != 'concentric'", "settable_per_mesh": false, "settable_per_extruder": true, "children": @@ -4903,7 +4903,7 @@ "default_value": "[ ]", "value": "support_interface_angles", "limit_to_extruder": "support_roof_extruder_nr", - "enabled": "(support_enable or support_tree_enable) and support_roof_enable and support_roof_pattern != 'concentric'", + "enabled": "(support_enable or support_tree_enable or support_meshes_present) and support_roof_enable and support_roof_pattern != 'concentric'", "settable_per_mesh": false, "settable_per_extruder": true }, @@ -4915,7 +4915,7 @@ "default_value": "[ ]", "value": "support_interface_angles", "limit_to_extruder": "support_bottom_extruder_nr", - "enabled": "(support_enable or support_tree_enable) and support_bottom_enable and support_bottom_pattern != 'concentric'", + "enabled": "(support_enable or support_tree_enable or support_meshes_present) and support_bottom_enable and support_bottom_pattern != 'concentric'", "settable_per_mesh": false, "settable_per_extruder": true } @@ -4927,7 +4927,7 @@ "description": "When enabled, the print cooling fan speed is altered for the skin regions immediately above the support.", "type": "bool", "default_value": false, - "enabled": "support_enable or support_tree_enable", + "enabled": "support_enable or support_tree_enable or support_meshes_present", "settable_per_mesh": false }, "support_supported_skin_fan_speed": @@ -4939,7 +4939,7 @@ "maximum_value": "100", "default_value": 100, "type": "float", - "enabled": "(support_enable or support_tree_enable) and support_fan_enable", + "enabled": "(support_enable or support_tree_enable or support_meshes_present) and support_fan_enable", "settable_per_mesh": false }, "support_use_towers": @@ -5005,6 +5005,17 @@ "settable_per_extruder": false, "settable_per_meshgroup": false, "settable_globally": false + }, + "support_meshes_present": + { + "label": "Support Meshes Present", + "description": "There are support meshes present in the scene. This setting is controlled by Cura.", + "type": "bool", + "default_value": false, + "enabled": false, + "settable_per_mesh": false, + "settable_per_extruder": false, + "settable_per_meshgroup": false } } }, @@ -5175,7 +5186,7 @@ "description": "Enforce brim to be printed around the model even if that space would otherwise be occupied by support. This replaces some regions of the first layer of support by brim regions.", "type": "bool", "default_value": true, - "enabled": "resolveOrValue('adhesion_type') == 'brim' and (support_enable or support_tree_enable)", + "enabled": "resolveOrValue('adhesion_type') == 'brim' and (support_enable or support_tree_enable or support_meshes_present)", "settable_per_mesh": false, "settable_per_extruder": true, "limit_to_extruder": "support_infill_extruder_nr" @@ -5959,7 +5970,7 @@ "description": "Remove empty layers beneath the first printed layer if they are present. Disabling this setting can cause empty first layers if the Slicing Tolerance setting is set to Exclusive or Middle.", "type": "bool", "default_value": true, - "enabled": "not (support_enable or support_tree_enable)", + "enabled": "not (support_enable or support_tree_enable or support_meshes_present)", "settable_per_mesh": false, "settable_per_extruder": false }, @@ -6371,7 +6382,7 @@ "description": "Skip some support line connections to make the support structure easier to break away. This setting is applicable to the Zig Zag support infill pattern.", "type": "bool", "default_value": false, - "enabled": "support_enable and (support_pattern == 'zigzag')", + "enabled": "(support_enable or support_meshes_present) and support_pattern == 'zigzag'", "limit_to_extruder": "support_infill_extruder_nr", "settable_per_mesh": false, "settable_per_extruder": true @@ -6385,7 +6396,7 @@ "default_value": 20, "minimum_value": "0", "minimum_value_warning": "support_line_distance", - "enabled": "support_enable and (support_pattern == 'zigzag') and support_skip_some_zags", + "enabled": "(support_enable or support_meshes_present) and support_pattern == 'zigzag' and support_skip_some_zags", "limit_to_extruder": "support_infill_extruder_nr", "settable_per_mesh": false, "settable_per_extruder": true, @@ -6400,7 +6411,7 @@ "value": "0 if support_line_distance == 0 else round(support_skip_zag_per_mm / support_line_distance)", "minimum_value": "1", "minimum_value_warning": "3", - "enabled": "support_enable and (support_pattern == 'zigzag') and support_skip_some_zags", + "enabled": "(support_enable or support_meshes_present) and support_pattern == 'zigzag' and support_skip_some_zags", "limit_to_extruder": "support_infill_extruder_nr", "settable_per_mesh": false, "settable_per_extruder": true From 4600ee9355f1e0feda3e138a9987e31ccfb73569 Mon Sep 17 00:00:00 2001 From: fieldOfView Date: Sun, 22 Mar 2020 18:26:50 +0100 Subject: [PATCH 02/16] Change wording for clarity --- 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 83f4c5943c..097f599de3 100644 --- a/resources/definitions/fdmprinter.def.json +++ b/resources/definitions/fdmprinter.def.json @@ -5008,7 +5008,7 @@ }, "support_meshes_present": { - "label": "Support Meshes Present", + "label": "Scene Has Support Meshes", "description": "There are support meshes present in the scene. This setting is controlled by Cura.", "type": "bool", "default_value": false, From 138dbddb1076bd1b0215dc574011505cd8ce295a Mon Sep 17 00:00:00 2001 From: fieldOfView Date: Sun, 22 Mar 2020 18:51:43 +0100 Subject: [PATCH 03/16] Restore the SettingDefinition relations without killing a puppy --- cura/Scene/CuraSceneController.py | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/cura/Scene/CuraSceneController.py b/cura/Scene/CuraSceneController.py index f97fde0f7e..2857ef4ca9 100644 --- a/cura/Scene/CuraSceneController.py +++ b/cura/Scene/CuraSceneController.py @@ -48,19 +48,21 @@ class CuraSceneController(QObject): global_stack = Application.getInstance().getGlobalContainerStack() if global_stack: scene_has_support_meshes = self._sceneHasSupportMeshes() # TODO: see if this can be cached + if scene_has_support_meshes != global_stack.getProperty("support_meshes_present", "value"): - # adjust the setting without having the setting value in an InstanceContainer + # Adjust the setting without having the setting value in an InstanceContainer setting_definitions = global_stack.definition.findDefinitions(key="support_meshes_present") if setting_definitions: - relations = setting_definitions[0].relations + # Recreate the setting definition because the default_value is readonly definition_dict = setting_definitions[0].serialize_to_dict() - definition_dict["enabled"] = False + definition_dict["enabled"] = False # The enabled property has a value that would need to be evaluated definition_dict["default_value"] = scene_has_support_meshes + relations = setting_definitions[0].relations # Relations are wiped when deserializing from a dict setting_definitions[0].deserialize(definition_dict) - setting_definitions[0]._relations = relations # TODO: find a better way to restore relations - # notify relations that the setting has changed + # Restore relations and notify them that the setting has changed for relation in relations: + setting_definitions[0].relations.append(relation) global_stack.propertyChanged.emit(relation.target.key, "enabled") max_build_plate = self._calcMaxBuildPlate() From d00ec619f5f06a657a2af1decade3c91d15b5fa8 Mon Sep 17 00:00:00 2001 From: fieldOfView Date: Sun, 22 Mar 2020 18:58:16 +0100 Subject: [PATCH 04/16] Remove unused imports --- cura/Scene/CuraSceneController.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/cura/Scene/CuraSceneController.py b/cura/Scene/CuraSceneController.py index 2857ef4ca9..e5c89369da 100644 --- a/cura/Scene/CuraSceneController.py +++ b/cura/Scene/CuraSceneController.py @@ -13,8 +13,7 @@ from UM.Scene.Iterator.DepthFirstIterator import DepthFirstIterator from UM.Scene.SceneNode import SceneNode from UM.Scene.Selection import Selection from UM.Signal import Signal -from UM.Settings.SettingFunction import SettingFunction -from UM.Settings.ContainerRegistry import ContainerRegistry + class CuraSceneController(QObject): activeBuildPlateChanged = Signal() From ca7a4b47798a37f0e07e63abe5c39edbf860aad2 Mon Sep 17 00:00:00 2001 From: fieldOfView Date: Sun, 22 Mar 2020 19:21:41 +0100 Subject: [PATCH 05/16] Disable user "unchecking" mesh type in per model settings panel --- .../PerObjectSettingsPanel.qml | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml b/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml index 358fec4a31..de9d0cd3fb 100644 --- a/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml +++ b/plugins/PerObjectSettingsTool/PerObjectSettingsPanel.qml @@ -32,10 +32,7 @@ Item var type = currentMeshType // set checked state of mesh type buttons - normalButton.checked = type === normalMeshType - supportMeshButton.checked = type === supportMeshType - overhangMeshButton.checked = type === infillMeshType || type === cuttingMeshType - antiOverhangMeshButton.checked = type === antiOverhangMeshType + updateMeshTypeCheckedState(type) // update active type label for (var button in meshTypeButtons.children) @@ -49,9 +46,19 @@ Item visibility_handler.addSkipResetSetting(currentMeshType) } + function updateMeshTypeCheckedState(type) + { + // set checked state of mesh type buttons + normalButton.checked = type === normalMeshType + supportMeshButton.checked = type === supportMeshType + overlapMeshButton.checked = type === infillMeshType || type === cuttingMeshType + antiOverhangMeshButton.checked = type === antiOverhangMeshType + } + function setMeshType(type) { UM.ActiveTool.setProperty("MeshType", type) + updateMeshTypeCheckedState(type) } UM.I18nCatalog { id: catalog; name: "uranium"} @@ -95,7 +102,7 @@ Item Button { - id: overhangMeshButton + id: overlapMeshButton text: catalog.i18nc("@label", "Modify settings for overlaps") iconSource: UM.Theme.getIcon("pos_modify_overlaps"); property bool needBorder: true From ea6a73e76d4712d7a9371ee9b61d365e190d797a Mon Sep 17 00:00:00 2001 From: Kostas Karmas Date: Fri, 5 Jun 2020 13:18:48 +0200 Subject: [PATCH 06/16] Fix mypy complains --- cura/OAuth2/LocalAuthorizationServer.py | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/cura/OAuth2/LocalAuthorizationServer.py b/cura/OAuth2/LocalAuthorizationServer.py index 211b59683f..a41de2d406 100644 --- a/cura/OAuth2/LocalAuthorizationServer.py +++ b/cura/OAuth2/LocalAuthorizationServer.py @@ -96,11 +96,12 @@ class LocalAuthorizationServer: :return: None """ - if sys.platform == "win32": - try: + if self._web_server: + if sys.platform == "win32": + try: + self._web_server.serve_forever() + except OSError as e: + Logger.warning(str(e)) + else: + # Leave the default behavior in non-windows platforms self._web_server.serve_forever() - except OSError as e: - Logger.warning(str(e)) - else: - # Leave the default behavior in non-windows platforms - self._web_server.serve_forever() From 42daef0a7511969950d2c8b417f7e8a49f373809 Mon Sep 17 00:00:00 2001 From: Kostas Karmas Date: Fri, 5 Jun 2020 13:20:38 +0200 Subject: [PATCH 07/16] Remove spam info message --- .../UM3NetworkPrinting/src/Cloud/CloudOutputDeviceManager.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDeviceManager.py b/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDeviceManager.py index 7ee8322ba1..30c26a2c24 100644 --- a/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDeviceManager.py +++ b/plugins/UM3NetworkPrinting/src/Cloud/CloudOutputDeviceManager.py @@ -91,8 +91,6 @@ class CloudOutputDeviceManager: if self._syncing: return - Logger.info("Syncing cloud printer clusters") - self._syncing = True self._account.setSyncState(self.SYNC_SERVICE_NAME, SyncState.SYNCING) self._api.getClusters(self._onGetRemoteClustersFinished, self._onGetRemoteClusterFailed) From 670f1df6c7f1674f3bd19c3a5cc3046b9abc1abb Mon Sep 17 00:00:00 2001 From: Remco Burema Date: Fri, 5 Jun 2020 13:29:21 +0200 Subject: [PATCH 08/16] Show latest version nr. available in firmware-update-checker-message. --- .../FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py | 4 ++-- .../FirmwareUpdateCheckerMessage.py | 9 +++++---- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py b/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py index f049542db1..2c869195bc 100644 --- a/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py +++ b/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerJob.py @@ -1,4 +1,4 @@ -# Copyright (c) 2018 Ultimaker B.V. +# Copyright (c) 2020 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. from UM.Application import Application @@ -114,7 +114,7 @@ class FirmwareUpdateCheckerJob(Job): # notify the user when no new firmware version is available. if (checked_version != "") and (checked_version != current_version): Logger.log("i", "Showing firmware update message for new version: {version}".format(version = current_version)) - message = FirmwareUpdateCheckerMessage(machine_id, self._machine_name, + message = FirmwareUpdateCheckerMessage(machine_id, self._machine_name, current_version, self._lookups.getRedirectUserUrl()) message.actionTriggered.connect(self._callback) message.show() diff --git a/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerMessage.py b/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerMessage.py index 58c00850cb..ca253e3ec6 100644 --- a/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerMessage.py +++ b/plugins/FirmwareUpdateChecker/FirmwareUpdateCheckerMessage.py @@ -1,4 +1,4 @@ -# Copyright (c) 2018 Ultimaker B.V. +# Copyright (c) 2020 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. from UM.i18n import i18nCatalog @@ -11,11 +11,12 @@ i18n_catalog = i18nCatalog("cura") class FirmwareUpdateCheckerMessage(Message): STR_ACTION_DOWNLOAD = "download" - def __init__(self, machine_id: int, machine_name: str, download_url: str) -> None: + def __init__(self, machine_id: int, machine_name: str, latest_version: str, download_url: str) -> None: super().__init__(i18n_catalog.i18nc( "@info Don't translate {machine_name}, since it gets replaced by a printer name!", - "New features are available for your {machine_name}! It is recommended to update the firmware on your printer.").format( - machine_name = machine_name), + "New features or bug-fixes may be available for your {machine_name}! If not already at the latest version, " + "it is recommended to update the firmware on your printer to version {latest_version}.").format( + machine_name = machine_name, latest_version = latest_version), title = i18n_catalog.i18nc( "@info:title The %s gets replaced with the printer name.", "New %s firmware available") % machine_name) From 306f58f96e3b3b6db79048d4b115ff871a6393b2 Mon Sep 17 00:00:00 2001 From: Kostas Karmas Date: Fri, 5 Jun 2020 14:13:36 +0200 Subject: [PATCH 09/16] Fix contentWidth reference error in ActionButton --- resources/qml/ActionButton.qml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/qml/ActionButton.qml b/resources/qml/ActionButton.qml index d55c64029b..b0849ea6b8 100644 --- a/resources/qml/ActionButton.qml +++ b/resources/qml/ActionButton.qml @@ -98,7 +98,7 @@ Button target: buttonText property: "width" value: button.fixedWidthMode ? button.width - button.leftPadding - button.rightPadding - : ((maximumWidth != 0 && contentWidth > maximumWidth) ? maximumWidth : undefined) + : ((maximumWidth != 0 && parent.contentWidth > maximumWidth) ? maximumWidth : undefined) } } From ec62cd5671b6b3b317b6dfe31c1c914f66030069 Mon Sep 17 00:00:00 2001 From: Kostas Karmas Date: Fri, 5 Jun 2020 14:20:52 +0200 Subject: [PATCH 10/16] Fix "Unable to assing null to double" QmlWarning --- resources/qml/PrintSetupSelector/Custom/CustomPrintSetup.qml | 2 -- 1 file changed, 2 deletions(-) diff --git a/resources/qml/PrintSetupSelector/Custom/CustomPrintSetup.qml b/resources/qml/PrintSetupSelector/Custom/CustomPrintSetup.qml index 46297659ff..db19ed89df 100644 --- a/resources/qml/PrintSetupSelector/Custom/CustomPrintSetup.qml +++ b/resources/qml/PrintSetupSelector/Custom/CustomPrintSetup.qml @@ -73,8 +73,6 @@ Item height: textLabel.contentHeight + 2 * UM.Theme.getSize("narrow_margin").height hoverEnabled: true - baselineOffset: null // If we don't do this, there is a binding loop. WHich is a bit weird, since we override the contentItem anyway... - contentItem: RowLayout { spacing: 0 From 336bd2bd16a06ebf79c64632385366c59051a6ac Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Fri, 5 Jun 2020 14:03:14 +0200 Subject: [PATCH 11/16] Use extruderList rather than deprecated extruders property Done during Turbo Testing and Tooling. --- plugins/3MFReader/ThreeMFWorkspaceReader.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/3MFReader/ThreeMFWorkspaceReader.py b/plugins/3MFReader/ThreeMFWorkspaceReader.py index 1382f53027..1e21ba3b2e 100755 --- a/plugins/3MFReader/ThreeMFWorkspaceReader.py +++ b/plugins/3MFReader/ThreeMFWorkspaceReader.py @@ -466,10 +466,10 @@ class ThreeMFWorkspaceReader(WorkspaceReader): extruder_info.intent_info = instance_container_info_dict[intent_id] if not machine_conflict and containers_found_dict["machine"]: - if position not in global_stack.extruders: + if int(position) >= len(global_stack.extrurderList): continue - existing_extruder_stack = global_stack.extruders[position] + existing_extruder_stack = global_stack.extruderList[int(position)] # check if there are any changes at all in any of the container stacks. id_list = self._getContainerIdListFromSerialized(serialized) for index, container_id in enumerate(id_list): From 43980e90cda1e9e899b651311b3ac6ad5981b8ba Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Fri, 5 Jun 2020 14:07:00 +0200 Subject: [PATCH 12/16] Use extruderList rather than extruders property Done during Turbo Testing and Tooling. --- plugins/SliceInfoPlugin/SliceInfo.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/SliceInfoPlugin/SliceInfo.py b/plugins/SliceInfoPlugin/SliceInfo.py index 630c0abb1b..20a563c291 100755 --- a/plugins/SliceInfoPlugin/SliceInfo.py +++ b/plugins/SliceInfoPlugin/SliceInfo.py @@ -101,7 +101,7 @@ class SliceInfo(QObject, Extension): user_modified_setting_keys = set() # type: Set[str] - for stack in [global_stack] + list(global_stack.extruders.values()): + for stack in [global_stack] + global_stack.extruderList: # Get all settings in user_changes and quality_changes all_keys = stack.userChanges.getAllKeys() | stack.qualityChanges.getAllKeys() user_modified_setting_keys |= all_keys @@ -152,7 +152,7 @@ class SliceInfo(QObject, Extension): # add extruder specific data to slice info data["extruders"] = [] - extruders = list(global_stack.extruders.values()) + extruders = global_stack.extruderList extruders = sorted(extruders, key = lambda extruder: extruder.getMetaDataEntry("position")) for extruder in extruders: From 44abd08b3249a1896992efb4467295c0f7ecc0c2 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Fri, 5 Jun 2020 14:09:13 +0200 Subject: [PATCH 13/16] Use newer extruderList rather than deprecated extruders property Done during Turbo Testing and Tooling. --- plugins/UFPWriter/UFPWriter.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/UFPWriter/UFPWriter.py b/plugins/UFPWriter/UFPWriter.py index bcafc7545c..3c241670b0 100644 --- a/plugins/UFPWriter/UFPWriter.py +++ b/plugins/UFPWriter/UFPWriter.py @@ -97,7 +97,7 @@ class UFPWriter(MeshWriter): Logger.log("w", "The material extension: %s was already added", material_extension) added_materials = [] - for extruder_stack in global_stack.extruders.values(): + for extruder_stack in global_stack.extruderList: material = extruder_stack.material try: material_file_name = material.getMetaData()["base_file"] + ".xml.fdm_material" From 9404fe0fb993247bd9495ce1a7ec161a266fd77a Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Fri, 5 Jun 2020 14:17:21 +0200 Subject: [PATCH 14/16] Fix getting contentWidth in variable width mode Undefined seems to work fine as well though. Done during Turbo Testing and Tooling to reduce the number of warnings in our log. --- resources/qml/ActionButton.qml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/resources/qml/ActionButton.qml b/resources/qml/ActionButton.qml index b0849ea6b8..a38b47df8f 100644 --- a/resources/qml/ActionButton.qml +++ b/resources/qml/ActionButton.qml @@ -1,4 +1,4 @@ -// Copyright (c) 2018 Ultimaker B.V. +// Copyright (c) 2020 Ultimaker B.V. // Cura is released under the terms of the LGPLv3 or higher. import QtQuick 2.7 @@ -98,7 +98,7 @@ Button target: buttonText property: "width" value: button.fixedWidthMode ? button.width - button.leftPadding - button.rightPadding - : ((maximumWidth != 0 && parent.contentWidth > maximumWidth) ? maximumWidth : undefined) + : ((maximumWidth != 0 && button.contentWidth > maximumWidth) ? maximumWidth : undefined) } } From 3073d7c349f7a802d5c20132e465b0234c32556f Mon Sep 17 00:00:00 2001 From: Kostas Karmas Date: Fri, 5 Jun 2020 15:54:53 +0200 Subject: [PATCH 15/16] Fix height binding loop QmlWarning in ConfigurationListView Done during Turbo Testing and Tooling --- resources/qml/Menus/ConfigurationMenu/ConfigurationListView.qml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/qml/Menus/ConfigurationMenu/ConfigurationListView.qml b/resources/qml/Menus/ConfigurationMenu/ConfigurationListView.qml index b47d77243c..b68d37d1ea 100644 --- a/resources/qml/Menus/ConfigurationMenu/ConfigurationListView.qml +++ b/resources/qml/Menus/ConfigurationMenu/ConfigurationListView.qml @@ -96,7 +96,7 @@ Item id: configurationList spacing: UM.Theme.getSize("narrow_margin").height width: container.width - ((height > container.maximumHeight) ? container.ScrollBar.vertical.background.width : 0) //Make room for scroll bar if there is any. - height: childrenRect.height + height: contentHeight interactive: false // let the ScrollView process scroll events. section.property: "modelData.printerType" From ac98caee5427bc73c558764c949f3d5a6d12c8b7 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Fri, 5 Jun 2020 15:31:37 +0200 Subject: [PATCH 16/16] Remove debugging code --- cura/CuraApplication.py | 1 - 1 file changed, 1 deletion(-) diff --git a/cura/CuraApplication.py b/cura/CuraApplication.py index 26b3e9c3f7..de7da13d1c 100755 --- a/cura/CuraApplication.py +++ b/cura/CuraApplication.py @@ -1909,7 +1909,6 @@ class CuraApplication(QtApplication): return selection_pass = cast(SelectionPass, self.getRenderer().getRenderPass("selection")) if not selection_pass: # If you right-click before the rendering has been initialised there might not be a selection pass yet. - print("--------------ding! Got the crash.") return node = self.getController().getScene().findObject(selection_pass.getIdAtPosition(x, y)) if not node: