From 5c83ba012972398a5ce9ee0a81af91af4eebc8a6 Mon Sep 17 00:00:00 2001 From: Nino van Hooff Date: Mon, 30 Dec 2019 15:05:52 +0100 Subject: [PATCH 01/10] Rename SettingsDefinitionModel.collapse to -Recursive for consistency CURA-6959 --- plugins/PerObjectSettingsTool/PerObjectCategory.qml | 2 +- resources/qml/Settings/SettingCategory.qml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/PerObjectSettingsTool/PerObjectCategory.qml b/plugins/PerObjectSettingsTool/PerObjectCategory.qml index 2be716fd39..4ca12f657e 100644 --- a/plugins/PerObjectSettingsTool/PerObjectCategory.qml +++ b/plugins/PerObjectSettingsTool/PerObjectCategory.qml @@ -58,5 +58,5 @@ Button { checkable: true checked: definition.expanded - onClicked: definition.expanded ? settingDefinitionsModel.collapse(definition.key) : settingDefinitionsModel.expandRecursive(definition.key) + onClicked: definition.expanded ? settingDefinitionsModel.collapseRecursive(definition.key) : settingDefinitionsModel.expandRecursive(definition.key) } diff --git a/resources/qml/Settings/SettingCategory.qml b/resources/qml/Settings/SettingCategory.qml index 18c5820832..bcb0ce3480 100644 --- a/resources/qml/Settings/SettingCategory.qml +++ b/resources/qml/Settings/SettingCategory.qml @@ -151,7 +151,7 @@ Button { if (definition.expanded) { - settingDefinitionsModel.collapse(definition.key) + settingDefinitionsModel.collapseRecursive(definition.key) } else { From d780efd76ca6f87581a8685cf3a8724a95caa232 Mon Sep 17 00:00:00 2001 From: Nino van Hooff Date: Tue, 31 Dec 2019 11:14:26 +0100 Subject: [PATCH 02/10] Add a settings menu option to collapse all categories CURA-6959 --- resources/qml/Menus/SettingVisibilityPresetsMenu.qml | 10 ++++++++++ resources/qml/Settings/SettingCategory.qml | 4 ++-- resources/qml/Settings/SettingView.qml | 6 ++++++ 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/resources/qml/Menus/SettingVisibilityPresetsMenu.qml b/resources/qml/Menus/SettingVisibilityPresetsMenu.qml index 8116b6def1..b6edc3a4a9 100644 --- a/resources/qml/Menus/SettingVisibilityPresetsMenu.qml +++ b/resources/qml/Menus/SettingVisibilityPresetsMenu.qml @@ -15,6 +15,7 @@ Menu property QtObject settingVisibilityPresetsModel: CuraApplication.getSettingVisibilityPresetsModel() signal showAllSettings() + signal collapseAllCategories() Instantiator { @@ -49,6 +50,15 @@ Menu } MenuSeparator {} MenuItem + { + text: catalog.i18nc("@action:inmenu", "Collapse All Categories") + onTriggered: + { + collapseAllCategories(); + } + } + MenuSeparator {} + MenuItem { text: catalog.i18nc("@action:inmenu", "Manage Setting Visibility...") iconName: "configure" diff --git a/resources/qml/Settings/SettingCategory.qml b/resources/qml/Settings/SettingCategory.qml index bcb0ce3480..0d6f8ec319 100644 --- a/resources/qml/Settings/SettingCategory.qml +++ b/resources/qml/Settings/SettingCategory.qml @@ -107,7 +107,7 @@ Button height: UM.Theme.getSize("standard_arrow").height sourceSize.height: width color: UM.Theme.getColor("setting_control_button") - source: base.checked ? UM.Theme.getIcon("arrow_bottom") : UM.Theme.getIcon("arrow_left") + source: definition.expanded ? UM.Theme.getIcon("arrow_bottom") : UM.Theme.getIcon("arrow_left") } } @@ -226,7 +226,7 @@ Button onClicked: { settingDefinitionsModel.expandRecursive(definition.key) - base.checked = true + base.checked = true //todo should not be necessary and also breaks binding, right? base.showAllHiddenInheritedSettings(definition.key) } diff --git a/resources/qml/Settings/SettingView.qml b/resources/qml/Settings/SettingView.qml index 5aea939728..2687c9e6f9 100644 --- a/resources/qml/Settings/SettingView.qml +++ b/resources/qml/Settings/SettingView.qml @@ -192,6 +192,12 @@ Item definitionsModel.setAllVisible(true) filter.updateDefinitionModel() } + + onCollapseAllCategories: + { + definitionsModel.collapseAllCategories() + filter.updateDefinitionModel() + } } } From dfba1eb102db54b316412c48fd82ef6d4564781a Mon Sep 17 00:00:00 2001 From: Nino van Hooff Date: Tue, 31 Dec 2019 11:27:39 +0100 Subject: [PATCH 03/10] Refactor SettingCategory checkable by using expanded More intuitive and less chance of overriding the expanded Binding CURA-6959 --- resources/qml/Settings/SettingCategory.qml | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/resources/qml/Settings/SettingCategory.qml b/resources/qml/Settings/SettingCategory.qml index 0d6f8ec319..2d8effb652 100644 --- a/resources/qml/Settings/SettingCategory.qml +++ b/resources/qml/Settings/SettingCategory.qml @@ -30,11 +30,11 @@ Button { return UM.Theme.getColor("setting_category_disabled") } - else if (base.hovered && base.checkable && base.checked) + else if (base.hovered && base.expanded) { return UM.Theme.getColor("setting_category_active_hover") } - else if (base.pressed || (base.checkable && base.checked)) + else if (base.pressed || (base.expanded)) { return UM.Theme.getColor("setting_category_active") } @@ -55,6 +55,7 @@ Button signal setActiveFocusToNextSetting(bool forward) property var focusItem: base + property bool expanded: definition.expanded contentItem: Item { @@ -79,10 +80,10 @@ Button if (!base.enabled) { return UM.Theme.getColor("setting_category_disabled_text") - } else if ((base.hovered || base.activeFocus) && base.checkable && base.checked) + } else if ((base.hovered || base.activeFocus) && base.expanded) { return UM.Theme.getColor("setting_category_active_hover_text") - } else if (base.pressed || (base.checkable && base.checked)) + } else if (base.pressed || base.expanded) { return UM.Theme.getColor("setting_category_active_text") } else if (base.hovered || base.activeFocus) @@ -123,11 +124,11 @@ Button { return UM.Theme.getColor("setting_category_disabled_text") } - else if((base.hovered || base.activeFocus) && base.checkable && base.checked) + else if((base.hovered || base.activeFocus) && base.expanded) { return UM.Theme.getColor("setting_category_active_hover_text") } - else if(base.pressed || (base.checkable && base.checked)) + else if(base.pressed || base.expanded) { return UM.Theme.getColor("setting_category_active_text") } @@ -144,9 +145,6 @@ Button sourceSize.height: width + 15 * screenScaleFactor } - checkable: true - checked: definition.expanded - onClicked: { if (definition.expanded) @@ -226,7 +224,6 @@ Button onClicked: { settingDefinitionsModel.expandRecursive(definition.key) - base.checked = true //todo should not be necessary and also breaks binding, right? base.showAllHiddenInheritedSettings(definition.key) } From 72497f48f7f93d908005ff2e3d441a033b2d6396 Mon Sep 17 00:00:00 2001 From: Nino van Hooff Date: Thu, 2 Jan 2020 13:55:01 +0100 Subject: [PATCH 04/10] Remove redundant brackets CURA-6959 --- resources/qml/Settings/SettingCategory.qml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/qml/Settings/SettingCategory.qml b/resources/qml/Settings/SettingCategory.qml index 2d8effb652..047710a1c8 100644 --- a/resources/qml/Settings/SettingCategory.qml +++ b/resources/qml/Settings/SettingCategory.qml @@ -34,7 +34,7 @@ Button { return UM.Theme.getColor("setting_category_active_hover") } - else if (base.pressed || (base.expanded)) + else if (base.pressed || base.expanded) { return UM.Theme.getColor("setting_category_active") } From 261ee5b7f5b110896217e311f115b76f381a6a7c Mon Sep 17 00:00:00 2001 From: Remco Burema Date: Thu, 2 Jan 2020 14:11:46 +0100 Subject: [PATCH 05/10] Fix SettingCheckbox.qml warning. --- resources/qml/Settings/SettingCheckBox.qml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/qml/Settings/SettingCheckBox.qml b/resources/qml/Settings/SettingCheckBox.qml index f5100eab74..e3de6e219d 100644 --- a/resources/qml/Settings/SettingCheckBox.qml +++ b/resources/qml/Settings/SettingCheckBox.qml @@ -48,7 +48,7 @@ SettingItem case "False": return false default: - return value + return (value !== undefined) ? value : false } } From 56cf2339f2db884d2c74d0c370e60fca9b402f55 Mon Sep 17 00:00:00 2001 From: Remco Burema Date: Thu, 2 Jan 2020 14:55:46 +0100 Subject: [PATCH 06/10] First initialize error checking. Change the order of initialization, so the MachineErrorChecker already has its signals attached when the first machine gets loaded. The increased number of 'processEvents'-calls exposed this oversight by allowing it to run out of order. (MachineErrorChecker initializes the has-errors field to True if no check has been done yet.) --- cura/CuraApplication.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/cura/CuraApplication.py b/cura/CuraApplication.py index d51685ac29..63046a5cb6 100755 --- a/cura/CuraApplication.py +++ b/cura/CuraApplication.py @@ -753,6 +753,11 @@ class CuraApplication(QtApplication): def run(self): super().run() + Logger.log("i", "Initializing machine error checker") + self._machine_error_checker = MachineErrorChecker(self) + self._machine_error_checker.initialize() + self.processEvents() + Logger.log("i", "Initializing machine manager") self._setLoadingHint(self._i18n_catalog.i18nc("@info:progress", "Initializing machine manager...")) self._machine_manager = MachineManager(self, parent = self) @@ -762,11 +767,6 @@ class CuraApplication(QtApplication): self._container_manager = ContainerManager(self) self.processEvents() - Logger.log("i", "Initializing machine error checker") - self._machine_error_checker = MachineErrorChecker(self) - self._machine_error_checker.initialize() - self.processEvents() - # Check if we should run as single instance or not. If so, set up a local socket server which listener which # coordinates multiple Cura instances and accepts commands. if self._use_single_instance: From 4097256827459bb67c52f6d77ba256a1d66c6894 Mon Sep 17 00:00:00 2001 From: Nino van Hooff Date: Thu, 2 Jan 2020 15:28:34 +0100 Subject: [PATCH 07/10] Clear settings search when pressing collapse all. CURA-6959 --- resources/qml/Settings/SettingView.qml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/resources/qml/Settings/SettingView.qml b/resources/qml/Settings/SettingView.qml index 2687c9e6f9..c27da466b6 100644 --- a/resources/qml/Settings/SettingView.qml +++ b/resources/qml/Settings/SettingView.qml @@ -195,8 +195,10 @@ Item onCollapseAllCategories: { + settingsSearchTimer.stop() + filter.text = "" // clear search field + filter.editingFinished() definitionsModel.collapseAllCategories() - filter.updateDefinitionModel() } } } From 5da77472e7e3451e8494691799ef2fcee2203938 Mon Sep 17 00:00:00 2001 From: Jaime van Kessel Date: Fri, 3 Jan 2020 10:17:54 +0100 Subject: [PATCH 08/10] Add some timers to sceneChanged --- cura/Scene/CuraSceneController.py | 15 +++++++++++---- cura/UI/PrintInformation.py | 19 +++++++++++++------ 2 files changed, 24 insertions(+), 10 deletions(-) diff --git a/cura/Scene/CuraSceneController.py b/cura/Scene/CuraSceneController.py index 91ff26cadc..36d9e68c8f 100644 --- a/cura/Scene/CuraSceneController.py +++ b/cura/Scene/CuraSceneController.py @@ -1,6 +1,6 @@ from UM.Logger import Logger -from PyQt5.QtCore import Qt, pyqtSlot, QObject +from PyQt5.QtCore import Qt, pyqtSlot, QObject, QTimer from PyQt5.QtWidgets import QApplication from UM.Scene.Camera import Camera @@ -26,16 +26,23 @@ class CuraSceneController(QObject): self._last_selected_index = 0 self._max_build_plate = 1 # default + self._change_timer = QTimer() + self._change_timer.setInterval(100) + self._change_timer.setSingleShot(True) + self._change_timer.timeout.connect(self.updateMaxBuildPlate) + Application.getInstance().getController().getScene().sceneChanged.connect(self.updateMaxBuildPlateDelayed) - Application.getInstance().getController().getScene().sceneChanged.connect(self.updateMaxBuildPlate) # it may be a bit inefficient when changing a lot simultaneously - - def updateMaxBuildPlate(self, *args): + def updateMaxBuildPlateDelayed(self, *args): if args: source = args[0] else: source = None + if not isinstance(source, SceneNode) or isinstance(source, Camera): return + self._change_timer.start() + + def updateMaxBuildPlate(self, *args): max_build_plate = self._calcMaxBuildPlate() changed = False if max_build_plate != self._max_build_plate: diff --git a/cura/UI/PrintInformation.py b/cura/UI/PrintInformation.py index e33ab13b69..c39314dc02 100644 --- a/cura/UI/PrintInformation.py +++ b/cura/UI/PrintInformation.py @@ -7,7 +7,7 @@ import os import unicodedata from typing import Dict, List, Optional, TYPE_CHECKING -from PyQt5.QtCore import QObject, pyqtSignal, pyqtProperty, pyqtSlot +from PyQt5.QtCore import QObject, pyqtSignal, pyqtProperty, pyqtSlot, QTimer from UM.Logger import Logger from UM.Qt.Duration import Duration @@ -47,7 +47,12 @@ class PrintInformation(QObject): if self._backend: self._backend.printDurationMessage.connect(self._onPrintDurationMessage) - self._application.getController().getScene().sceneChanged.connect(self._onSceneChanged) + self._application.getController().getScene().sceneChanged.connect(self._onSceneChangedDelayed) + + self._change_timer = QTimer() + self._change_timer.setInterval(100) + self._change_timer.setSingleShot(True) + self._change_timer.timeout.connect(self._onSceneChanged) self._is_user_specified_job_name = False self._base_name = "" @@ -418,12 +423,14 @@ class PrintInformation(QObject): self._onPrintDurationMessage(build_plate, temp_message, temp_material_amounts) - ## Listen to scene changes to check if we need to reset the print information - def _onSceneChanged(self, scene_node: SceneNode) -> None: + def _onSceneChangedDelayed(self, scene_node: SceneNode) -> None: # Ignore any changes that are not related to sliceable objects - if not isinstance(scene_node, SceneNode)\ - or not scene_node.callDecoration("isSliceable")\ + if not isinstance(scene_node, SceneNode) \ + or not scene_node.callDecoration("isSliceable") \ or not scene_node.callDecoration("getBuildPlateNumber") == self._active_build_plate: return + self._change_timer.start() + ## Listen to scene changes to check if we need to reset the print information + def _onSceneChanged(self) -> None: self.setToZeroPrintInformation(self._active_build_plate) From 5e0324b9be62c8cf2437ac95285dd6a877dca1d0 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Fri, 3 Jan 2020 10:36:27 +0100 Subject: [PATCH 09/10] Move retraction settings to travel category And the nozzle switch settings to the multi-extrusion category. As discussed with the CCB. --- resources/definitions/fdmprinter.def.json | 442 +++++++++++----------- 1 file changed, 221 insertions(+), 221 deletions(-) diff --git a/resources/definitions/fdmprinter.def.json b/resources/definitions/fdmprinter.def.json index 46d194c6a0..b384371c4c 100644 --- a/resources/definitions/fdmprinter.def.json +++ b/resources/definitions/fdmprinter.def.json @@ -2681,150 +2681,6 @@ "maximum_value_warning": "150", "settable_per_mesh": true }, - "retraction_enable": - { - "label": "Enable Retraction", - "description": "Retract the filament when the nozzle is moving over a non-printed area. ", - "type": "bool", - "default_value": true, - "settable_per_mesh": false, - "settable_per_extruder": true - }, - "retract_at_layer_change": - { - "label": "Retract at Layer Change", - "description": "Retract the filament when the nozzle is moving to the next layer.", - "type": "bool", - "default_value": false, - "settable_per_mesh": false, - "settable_per_extruder": true - }, - "retraction_amount": - { - "label": "Retraction Distance", - "description": "The length of material retracted during a retraction move.", - "unit": "mm", - "type": "float", - "default_value": 6.5, - "minimum_value_warning": "-0.0001", - "maximum_value_warning": "10.0", - "enabled": "retraction_enable and machine_gcode_flavor != \"UltiGCode\"", - "settable_per_mesh": false, - "settable_per_extruder": true - }, - "retraction_speed": - { - "label": "Retraction Speed", - "description": "The speed at which the filament is retracted and primed during a retraction move.", - "unit": "mm/s", - "type": "float", - "default_value": 25, - "minimum_value": "0.0001", - "minimum_value_warning": "1", - "maximum_value": "machine_max_feedrate_e if retraction_enable else float('inf')", - "maximum_value_warning": "70", - "enabled": "retraction_enable and machine_gcode_flavor != \"UltiGCode\"", - "settable_per_mesh": false, - "settable_per_extruder": true, - "children": - { - "retraction_retract_speed": - { - "label": "Retraction Retract Speed", - "description": "The speed at which the filament is retracted during a retraction move.", - "unit": "mm/s", - "type": "float", - "default_value": 25, - "minimum_value": "0.0001", - "maximum_value": "machine_max_feedrate_e if retraction_enable else float('inf')", - "minimum_value_warning": "1", - "maximum_value_warning": "70", - "enabled": "retraction_enable and machine_gcode_flavor != \"UltiGCode\"", - "value": "retraction_speed", - "settable_per_mesh": false, - "settable_per_extruder": true - }, - "retraction_prime_speed": - { - "label": "Retraction Prime Speed", - "description": "The speed at which the filament is primed during a retraction move.", - "unit": "mm/s", - "type": "float", - "default_value": 25, - "minimum_value": "0.0001", - "maximum_value": "machine_max_feedrate_e if retraction_enable else float('inf')", - "minimum_value_warning": "1", - "maximum_value_warning": "70", - "enabled": "retraction_enable and machine_gcode_flavor != \"UltiGCode\"", - "value": "retraction_speed", - "settable_per_mesh": false, - "settable_per_extruder": true - } - } - }, - "retraction_extra_prime_amount": - { - "label": "Retraction Extra Prime Amount", - "description": "Some material can ooze away during a travel move, which can be compensated for here.", - "unit": "mm³", - "type": "float", - "default_value": 0, - "minimum_value_warning": "-0.0001", - "maximum_value_warning": "5.0", - "enabled": "retraction_enable", - "settable_per_mesh": false, - "settable_per_extruder": true - }, - "retraction_min_travel": - { - "label": "Retraction Minimum Travel", - "description": "The minimum distance of travel needed for a retraction to happen at all. This helps to get fewer retractions in a small area.", - "unit": "mm", - "type": "float", - "default_value": 1.5, - "value": "line_width * 2", - "minimum_value": "0", - "minimum_value_warning": "line_width * 1.5", - "maximum_value_warning": "10", - "settable_per_mesh": false, - "settable_per_extruder": true - }, - "retraction_count_max": - { - "label": "Maximum Retraction Count", - "description": "This setting limits the number of retractions occurring within the minimum extrusion distance window. Further retractions within this window will be ignored. This avoids retracting repeatedly on the same piece of filament, as that can flatten the filament and cause grinding issues.", - "default_value": 90, - "minimum_value": "0", - "maximum_value_warning": "100", - "type": "int", - "enabled": "retraction_enable", - "settable_per_mesh": false, - "settable_per_extruder": true - }, - "retraction_extrusion_window": - { - "label": "Minimum Extrusion Distance Window", - "description": "The window in which the maximum retraction count is enforced. This value should be approximately the same as the retraction distance, so that effectively the number of times a retraction passes the same patch of material is limited.", - "unit": "mm", - "type": "float", - "default_value": 4.5, - "minimum_value": "0", - "maximum_value_warning": "retraction_amount * 2", - "value": "retraction_amount", - "enabled": "retraction_enable", - "settable_per_mesh": false, - "settable_per_extruder": true - }, - "limit_support_retractions": - { - "label": "Limit Support Retractions", - "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)", - "settable_per_mesh": false, - "settable_per_extruder": true - }, "material_standby_temperature": { "label": "Standby Temperature", @@ -2838,83 +2694,6 @@ "enabled": "extruders_enabled_count > 1 and machine_nozzle_temp_enabled", "settable_per_mesh": false, "settable_per_extruder": true - }, - "switch_extruder_retraction_amount": - { - "label": "Nozzle Switch Retraction Distance", - "description": "The amount of retraction when switching extruders. Set to 0 for no retraction at all. This should generally be the same as the length of the heat zone.", - "type": "float", - "unit": "mm", - "enabled": "retraction_enable", - "default_value": 20, - "value": "machine_heat_zone_length", - "minimum_value_warning": "0", - "maximum_value_warning": "100", - "settable_per_mesh": false, - "settable_per_extruder": true - }, - "switch_extruder_retraction_speeds": - { - "label": "Nozzle Switch Retraction Speed", - "description": "The speed at which the filament is retracted. A higher retraction speed works better, but a very high retraction speed can lead to filament grinding.", - "type": "float", - "unit": "mm/s", - "enabled": "retraction_enable", - "default_value": 20, - "minimum_value": "0.1", - "minimum_value_warning": "1", - "maximum_value": "machine_max_feedrate_e if retraction_enable else float('inf')", - "maximum_value_warning": "70", - "settable_per_mesh": false, - "settable_per_extruder": true, - "children": - { - "switch_extruder_retraction_speed": - { - "label": "Nozzle Switch Retract Speed", - "description": "The speed at which the filament is retracted during a nozzle switch retract.", - "type": "float", - "unit": "mm/s", - "enabled": "retraction_enable", - "default_value": 20, - "value": "switch_extruder_retraction_speeds", - "minimum_value": "0.1", - "minimum_value_warning": "1", - "maximum_value": "machine_max_feedrate_e if retraction_enable else float('inf')", - "maximum_value_warning": "70", - "settable_per_mesh": false, - "settable_per_extruder": true - }, - "switch_extruder_prime_speed": - { - "label": "Nozzle Switch Prime Speed", - "description": "The speed at which the filament is pushed back after a nozzle switch retraction.", - "type": "float", - "unit": "mm/s", - "enabled": "retraction_enable", - "default_value": 20, - "value": "switch_extruder_retraction_speeds", - "minimum_value": "0.1", - "minimum_value_warning": "1", - "maximum_value": "machine_max_feedrate_e if retraction_enable else float('inf')", - "maximum_value_warning": "70", - "settable_per_mesh": false, - "settable_per_extruder": true - } - } - }, - "switch_extruder_extra_prime_amount": - { - "label": "Nozzle Switch Extra Prime Amount", - "description": "Extra material to prime after nozzle switching.", - "type": "float", - "unit": "mm³", - "default_value": 0, - "minimum_value_warning": "0", - "maximum_value_warning": "100", - "enabled": "retraction_enable", - "settable_per_mesh": false, - "settable_per_extruder": true } } }, @@ -3830,6 +3609,150 @@ "type": "category", "children": { + "retraction_enable": + { + "label": "Enable Retraction", + "description": "Retract the filament when the nozzle is moving over a non-printed area. ", + "type": "bool", + "default_value": true, + "settable_per_mesh": false, + "settable_per_extruder": true + }, + "retract_at_layer_change": + { + "label": "Retract at Layer Change", + "description": "Retract the filament when the nozzle is moving to the next layer.", + "type": "bool", + "default_value": false, + "settable_per_mesh": false, + "settable_per_extruder": true + }, + "retraction_amount": + { + "label": "Retraction Distance", + "description": "The length of material retracted during a retraction move.", + "unit": "mm", + "type": "float", + "default_value": 6.5, + "minimum_value_warning": "-0.0001", + "maximum_value_warning": "10.0", + "enabled": "retraction_enable and machine_gcode_flavor != \"UltiGCode\"", + "settable_per_mesh": false, + "settable_per_extruder": true + }, + "retraction_speed": + { + "label": "Retraction Speed", + "description": "The speed at which the filament is retracted and primed during a retraction move.", + "unit": "mm/s", + "type": "float", + "default_value": 25, + "minimum_value": "0.0001", + "minimum_value_warning": "1", + "maximum_value": "machine_max_feedrate_e if retraction_enable else float('inf')", + "maximum_value_warning": "70", + "enabled": "retraction_enable and machine_gcode_flavor != \"UltiGCode\"", + "settable_per_mesh": false, + "settable_per_extruder": true, + "children": + { + "retraction_retract_speed": + { + "label": "Retraction Retract Speed", + "description": "The speed at which the filament is retracted during a retraction move.", + "unit": "mm/s", + "type": "float", + "default_value": 25, + "minimum_value": "0.0001", + "maximum_value": "machine_max_feedrate_e if retraction_enable else float('inf')", + "minimum_value_warning": "1", + "maximum_value_warning": "70", + "enabled": "retraction_enable and machine_gcode_flavor != \"UltiGCode\"", + "value": "retraction_speed", + "settable_per_mesh": false, + "settable_per_extruder": true + }, + "retraction_prime_speed": + { + "label": "Retraction Prime Speed", + "description": "The speed at which the filament is primed during a retraction move.", + "unit": "mm/s", + "type": "float", + "default_value": 25, + "minimum_value": "0.0001", + "maximum_value": "machine_max_feedrate_e if retraction_enable else float('inf')", + "minimum_value_warning": "1", + "maximum_value_warning": "70", + "enabled": "retraction_enable and machine_gcode_flavor != \"UltiGCode\"", + "value": "retraction_speed", + "settable_per_mesh": false, + "settable_per_extruder": true + } + } + }, + "retraction_extra_prime_amount": + { + "label": "Retraction Extra Prime Amount", + "description": "Some material can ooze away during a travel move, which can be compensated for here.", + "unit": "mm³", + "type": "float", + "default_value": 0, + "minimum_value_warning": "-0.0001", + "maximum_value_warning": "5.0", + "enabled": "retraction_enable", + "settable_per_mesh": false, + "settable_per_extruder": true + }, + "retraction_min_travel": + { + "label": "Retraction Minimum Travel", + "description": "The minimum distance of travel needed for a retraction to happen at all. This helps to get fewer retractions in a small area.", + "unit": "mm", + "type": "float", + "default_value": 1.5, + "value": "line_width * 2", + "minimum_value": "0", + "minimum_value_warning": "line_width * 1.5", + "maximum_value_warning": "10", + "settable_per_mesh": false, + "settable_per_extruder": true + }, + "retraction_count_max": + { + "label": "Maximum Retraction Count", + "description": "This setting limits the number of retractions occurring within the minimum extrusion distance window. Further retractions within this window will be ignored. This avoids retracting repeatedly on the same piece of filament, as that can flatten the filament and cause grinding issues.", + "default_value": 90, + "minimum_value": "0", + "maximum_value_warning": "100", + "type": "int", + "enabled": "retraction_enable", + "settable_per_mesh": false, + "settable_per_extruder": true + }, + "retraction_extrusion_window": + { + "label": "Minimum Extrusion Distance Window", + "description": "The window in which the maximum retraction count is enforced. This value should be approximately the same as the retraction distance, so that effectively the number of times a retraction passes the same patch of material is limited.", + "unit": "mm", + "type": "float", + "default_value": 4.5, + "minimum_value": "0", + "maximum_value_warning": "retraction_amount * 2", + "value": "retraction_amount", + "enabled": "retraction_enable", + "settable_per_mesh": false, + "settable_per_extruder": true + }, + "limit_support_retractions": + { + "label": "Limit Support Retractions", + "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)", + "settable_per_mesh": false, + "settable_per_extruder": true + }, "retraction_combing": { "label": "Combing Mode", @@ -5843,6 +5766,83 @@ "maximum_value_warning": "20", "settable_per_mesh": false, "settable_per_extruder": false + }, + "switch_extruder_retraction_amount": + { + "label": "Nozzle Switch Retraction Distance", + "description": "The amount of retraction when switching extruders. Set to 0 for no retraction at all. This should generally be the same as the length of the heat zone.", + "type": "float", + "unit": "mm", + "enabled": "retraction_enable", + "default_value": 20, + "value": "machine_heat_zone_length", + "minimum_value_warning": "0", + "maximum_value_warning": "100", + "settable_per_mesh": false, + "settable_per_extruder": true + }, + "switch_extruder_retraction_speeds": + { + "label": "Nozzle Switch Retraction Speed", + "description": "The speed at which the filament is retracted. A higher retraction speed works better, but a very high retraction speed can lead to filament grinding.", + "type": "float", + "unit": "mm/s", + "enabled": "retraction_enable", + "default_value": 20, + "minimum_value": "0.1", + "minimum_value_warning": "1", + "maximum_value": "machine_max_feedrate_e if retraction_enable else float('inf')", + "maximum_value_warning": "70", + "settable_per_mesh": false, + "settable_per_extruder": true, + "children": + { + "switch_extruder_retraction_speed": + { + "label": "Nozzle Switch Retract Speed", + "description": "The speed at which the filament is retracted during a nozzle switch retract.", + "type": "float", + "unit": "mm/s", + "enabled": "retraction_enable", + "default_value": 20, + "value": "switch_extruder_retraction_speeds", + "minimum_value": "0.1", + "minimum_value_warning": "1", + "maximum_value": "machine_max_feedrate_e if retraction_enable else float('inf')", + "maximum_value_warning": "70", + "settable_per_mesh": false, + "settable_per_extruder": true + }, + "switch_extruder_prime_speed": + { + "label": "Nozzle Switch Prime Speed", + "description": "The speed at which the filament is pushed back after a nozzle switch retraction.", + "type": "float", + "unit": "mm/s", + "enabled": "retraction_enable", + "default_value": 20, + "value": "switch_extruder_retraction_speeds", + "minimum_value": "0.1", + "minimum_value_warning": "1", + "maximum_value": "machine_max_feedrate_e if retraction_enable else float('inf')", + "maximum_value_warning": "70", + "settable_per_mesh": false, + "settable_per_extruder": true + } + } + }, + "switch_extruder_extra_prime_amount": + { + "label": "Nozzle Switch Extra Prime Amount", + "description": "Extra material to prime after nozzle switching.", + "type": "float", + "unit": "mm³", + "default_value": 0, + "minimum_value_warning": "0", + "maximum_value_warning": "100", + "enabled": "retraction_enable", + "settable_per_mesh": false, + "settable_per_extruder": true } } }, From 8f7642931bfea3f993b7eb7727dcb5df01d8d709 Mon Sep 17 00:00:00 2001 From: Ghostkeeper Date: Fri, 3 Jan 2020 10:38:54 +0100 Subject: [PATCH 10/10] Only enable extruder switch retraction settings if multi-extrusion Otherwise there can't be any extruder switches. --- resources/definitions/fdmprinter.def.json | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/resources/definitions/fdmprinter.def.json b/resources/definitions/fdmprinter.def.json index b384371c4c..2c71492bda 100644 --- a/resources/definitions/fdmprinter.def.json +++ b/resources/definitions/fdmprinter.def.json @@ -5773,7 +5773,7 @@ "description": "The amount of retraction when switching extruders. Set to 0 for no retraction at all. This should generally be the same as the length of the heat zone.", "type": "float", "unit": "mm", - "enabled": "retraction_enable", + "enabled": "retraction_enable and extruders_enabled_count > 1", "default_value": 20, "value": "machine_heat_zone_length", "minimum_value_warning": "0", @@ -5787,7 +5787,7 @@ "description": "The speed at which the filament is retracted. A higher retraction speed works better, but a very high retraction speed can lead to filament grinding.", "type": "float", "unit": "mm/s", - "enabled": "retraction_enable", + "enabled": "retraction_enable and extruders_enabled_count > 1", "default_value": 20, "minimum_value": "0.1", "minimum_value_warning": "1", @@ -5803,7 +5803,7 @@ "description": "The speed at which the filament is retracted during a nozzle switch retract.", "type": "float", "unit": "mm/s", - "enabled": "retraction_enable", + "enabled": "retraction_enable and extruders_enabled_count > 1", "default_value": 20, "value": "switch_extruder_retraction_speeds", "minimum_value": "0.1", @@ -5819,7 +5819,7 @@ "description": "The speed at which the filament is pushed back after a nozzle switch retraction.", "type": "float", "unit": "mm/s", - "enabled": "retraction_enable", + "enabled": "retraction_enable and extruders_enabled_count > 1", "default_value": 20, "value": "switch_extruder_retraction_speeds", "minimum_value": "0.1", @@ -5840,7 +5840,7 @@ "default_value": 0, "minimum_value_warning": "0", "maximum_value_warning": "100", - "enabled": "retraction_enable", + "enabled": "retraction_enable and extruders_enabled_count > 1", "settable_per_mesh": false, "settable_per_extruder": true }