diff --git a/cura/CuraApplication.py b/cura/CuraApplication.py index 4e33cc2e1e..7be20305c4 100644 --- a/cura/CuraApplication.py +++ b/cura/CuraApplication.py @@ -632,7 +632,7 @@ class CuraApplication(QtApplication): if not scene_bounding_box: scene_bounding_box = AxisAlignedBox.Null - if repr(self._scene_bounding_box) != repr(scene_bounding_box): + if repr(self._scene_bounding_box) != repr(scene_bounding_box) and scene_bounding_box.isValid(): self._scene_bounding_box = scene_bounding_box self.sceneBoundingBoxChanged.emit() @@ -734,6 +734,8 @@ class CuraApplication(QtApplication): continue # Node that doesnt have a mesh and is not a group. if node.getParent() and node.getParent().callDecoration("isGroup"): continue # Grouped nodes don't need resetting as their parent (the group) is resetted) + if not node.isSelectable(): + continue # i.e. node with layer data Selection.add(node) ## Delete all nodes containing mesh data in the scene. @@ -773,6 +775,8 @@ class CuraApplication(QtApplication): continue # Node that doesnt have a mesh and is not a group. if node.getParent() and node.getParent().callDecoration("isGroup"): continue # Grouped nodes don't need resetting as their parent (the group) is resetted) + if not node.isSelectable(): + continue # i.e. node with layer data nodes.append(node) if nodes: @@ -799,6 +803,8 @@ class CuraApplication(QtApplication): continue # Node that doesnt have a mesh and is not a group. if node.getParent() and node.getParent().callDecoration("isGroup"): continue # Grouped nodes don't need resetting as their parent (the group) is resetted) + if not node.isSelectable(): + continue # i.e. node with layer data nodes.append(node) if nodes: diff --git a/cura/PrinterOutputDevice.py b/cura/PrinterOutputDevice.py index b2e3f5fd33..6e7305b27b 100644 --- a/cura/PrinterOutputDevice.py +++ b/cura/PrinterOutputDevice.py @@ -49,6 +49,8 @@ class PrinterOutputDevice(QObject, OutputDevice): self._printer_state = "" self._printer_type = "unknown" + self._camera_active = False + def requestWrite(self, nodes, file_name = None, filter_by_machine = False, file_handler = None): raise NotImplementedError("requestWrite needs to be implemented") @@ -136,6 +138,7 @@ class PrinterOutputDevice(QObject, OutputDevice): @pyqtSlot() def startCamera(self): + self._camera_active = True self._startCamera() def _startCamera(self): @@ -143,6 +146,7 @@ class PrinterOutputDevice(QObject, OutputDevice): @pyqtSlot() def stopCamera(self): + self._camera_active = False self._stopCamera() def _stopCamera(self): diff --git a/cura/Settings/MachineManager.py b/cura/Settings/MachineManager.py index ed9066c4ba..a04a7398ad 100644 --- a/cura/Settings/MachineManager.py +++ b/cura/Settings/MachineManager.py @@ -297,6 +297,16 @@ class MachineManager(QObject): changed_validation_state = self._active_container_stack.getProperty(key, property_name) else: changed_validation_state = self._global_container_stack.getProperty(key, property_name) + + if changed_validation_state is None: + # Setting is not validated. This can happen if there is only a setting definition. + # We do need to validate it, because a setting defintions value can be set by a function, which could + # be an invalid setting. + definition = self._active_container_stack.getSettingDefinition(key) + validator_type = UM.Settings.SettingDefinition.getValidatorForType(definition.type) + if validator_type: + validator = validator_type(key) + changed_validation_state = validator(self._active_container_stack) if changed_validation_state in (UM.Settings.ValidatorState.Exception, UM.Settings.ValidatorState.MaximumError, UM.Settings.ValidatorState.MinimumError): self._stacks_have_errors = True self.stacksValidationChanged.emit() @@ -871,7 +881,7 @@ class MachineManager(QObject): def _askUserToKeepOrClearCurrentSettings(self): # Ask the user if the user profile should be cleared or not (discarding the current settings) # In Simple Mode we assume the user always wants to keep the (limited) current settings - details_text = catalog.i18nc("@label", "You made changes to the following setting(s):") + details_text = catalog.i18nc("@label", "You made changes to the following setting(s)/override(s):") # user changes in global stack details_list = [setting.definition.label for setting in self._global_container_stack.getTop().findInstances(**{})] @@ -886,14 +896,19 @@ class MachineManager(QObject): # Format to output string details = "\n ".join([details_text, ] + details_list) - Application.getInstance().messageBox(catalog.i18nc("@window:title", "Switched profiles"), - catalog.i18nc("@label", - "Do you want to transfer your changed settings to this profile?"), - catalog.i18nc("@label", - "If you transfer your settings they will override settings in the profile."), - details, - buttons=QMessageBox.Yes + QMessageBox.No, icon=QMessageBox.Question, - callback=self._keepUserSettingsDialogCallback) + num_changed_settings = len(details_list) + Application.getInstance().messageBox( + catalog.i18nc("@window:title", "Switched profiles"), + catalog.i18nc( + "@label", + "Do you want to transfer your %d changed setting(s)/override(s) to this profile?") % num_changed_settings, + catalog.i18nc( + "@label", + "If you transfer your settings they will override settings in the profile."), + details, + buttons=QMessageBox.Yes + QMessageBox.No, + icon=QMessageBox.Question, + callback=self._keepUserSettingsDialogCallback) def _keepUserSettingsDialogCallback(self, button): if button == QMessageBox.Yes: diff --git a/cura/Settings/SettingInheritanceManager.py b/cura/Settings/SettingInheritanceManager.py index 4d1e60a739..b13faadd0e 100644 --- a/cura/Settings/SettingInheritanceManager.py +++ b/cura/Settings/SettingInheritanceManager.py @@ -85,7 +85,7 @@ class SettingInheritanceManager(QObject): self._update() # Ensure that the settings_with_inheritance_warning list is populated. def _onPropertyChanged(self, key, property_name): - if property_name == "value" and self._global_container_stack: + if (property_name == "value" or property_name == "enabled") and self._global_container_stack: definitions = self._global_container_stack.getBottom().findDefinitions(key = key) if not definitions: return @@ -167,7 +167,16 @@ class SettingInheritanceManager(QObject): continue if value is not None: # If a setting doesn't use any keys, it won't change it's value, so treat it as if it's a fixed value - has_setting_function = isinstance(value, UM.Settings.SettingFunction) and len(value.getUsedSettingKeys()) > 0 + has_setting_function = isinstance(value, UM.Settings.SettingFunction) + if has_setting_function: + for setting_key in value.getUsedSettingKeys(): + if setting_key in self._active_container_stack.getAllKeys(): + break # We found an actual setting. So has_setting_function can remain true + else: + # All of the setting_keys turned out to not be setting keys at all! + # This can happen due enum keys also being marked as settings. + has_setting_function = False + if has_setting_function is False: has_non_function_value = True continue diff --git a/plugins/XmlMaterialProfile/XmlMaterialProfile.py b/plugins/XmlMaterialProfile/XmlMaterialProfile.py index 995669d256..84a7d95a7c 100644 --- a/plugins/XmlMaterialProfile/XmlMaterialProfile.py +++ b/plugins/XmlMaterialProfile/XmlMaterialProfile.py @@ -425,7 +425,7 @@ class XmlMaterialProfile(UM.Settings.InstanceContainer): for entry in settings: key = entry.get("key") if key in self.__material_property_setting_map: - self.setProperty(self.__material_property_setting_map[key], "value", entry.text, self._definition) + self.setProperty(self.__material_property_setting_map[key], "value", entry.text) global_setting_values[self.__material_property_setting_map[key]] = entry.text elif key in self.__unmapped_settings: if key == "hardware compatible": @@ -484,10 +484,10 @@ class XmlMaterialProfile(UM.Settings.InstanceContainer): new_material.getMetaData()["compatible"] = machine_compatibility for key, value in global_setting_values.items(): - new_material.setProperty(key, "value", value, definition) + new_material.setProperty(key, "value", value) for key, value in machine_setting_values.items(): - new_material.setProperty(key, "value", value, definition) + new_material.setProperty(key, "value", value) new_material._dirty = False if not materials: @@ -538,13 +538,13 @@ class XmlMaterialProfile(UM.Settings.InstanceContainer): new_hotend_material.getMetaData()["compatible"] = hotend_compatibility for key, value in global_setting_values.items(): - new_hotend_material.setProperty(key, "value", value, definition) + new_hotend_material.setProperty(key, "value", value) for key, value in machine_setting_values.items(): - new_hotend_material.setProperty(key, "value", value, definition) + new_hotend_material.setProperty(key, "value", value) for key, value in hotend_setting_values.items(): - new_hotend_material.setProperty(key, "value", value, definition) + new_hotend_material.setProperty(key, "value", value) new_hotend_material._dirty = False if not materials: # It was not added yet, do so now. diff --git a/resources/definitions/fdmprinter.def.json b/resources/definitions/fdmprinter.def.json index 364608767c..abe4bf7a3d 100644 --- a/resources/definitions/fdmprinter.def.json +++ b/resources/definitions/fdmprinter.def.json @@ -1696,6 +1696,7 @@ "unit": "mm/s", "type": "float", "default_value": 30, + "value": "speed_print * 30 / 60", "minimum_value": "0.1", "maximum_value": "math.sqrt(machine_max_feedrate_x ** 2 + machine_max_feedrate_y ** 2)", "maximum_value_warning": "300", @@ -3637,7 +3638,6 @@ "unit": "mm", "enabled": "resolveOrValue('prime_tower_enable')", "default_value": 15, - "value": "15 if resolveOrValue('prime_tower_enable') else 0", "resolve": "max(extruderValues('prime_tower_size'))", "minimum_value": "0", "maximum_value": "min(0.5 * machine_width, 0.5 * machine_depth)", @@ -3906,6 +3906,28 @@ "settable_per_meshgroup": false, "settable_globally": false }, + "support_mesh": + { + "label": "Support Mesh", + "description": "Use this mesh to specify support areas. This can be used to generate support structure.", + "type": "bool", + "default_value": false, + "settable_per_mesh": true, + "settable_per_extruder": false, + "settable_per_meshgroup": false, + "settable_globally": false + }, + "anti_overhang_mesh": + { + "label": "Anti Overhang Mesh", + "description": "Use this mesh to specify where no part of the model should be detected as overhang. This can be used to remove unwanted support structure.", + "type": "bool", + "default_value": false, + "settable_per_mesh": true, + "settable_per_extruder": false, + "settable_per_meshgroup": false, + "settable_globally": false + }, "magic_mesh_surface_mode": { "label": "Surface Mode", diff --git a/resources/i18n/de/cura.po b/resources/i18n/de/cura.po index b015b2e43b..985764f6ff 100644 --- a/resources/i18n/de/cura.po +++ b/resources/i18n/de/cura.po @@ -1913,7 +1913,7 @@ msgstr "&Beenden" #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:97 msgctxt "@action:inmenu" msgid "Configure Cura..." -msgstr "Cura wird konfiguriert..." +msgstr "Cura konfigurieren..." #: /home/ruben/Projects/Cura/resources/qml/Actions.qml:104 msgctxt "@action:inmenu menubar:printer" diff --git a/resources/i18n/nl/cura.po b/resources/i18n/nl/cura.po index 2c8c83df7a..64e140474c 100644 --- a/resources/i18n/nl/cura.po +++ b/resources/i18n/nl/cura.po @@ -2629,3 +2629,8 @@ msgstr "De configuratie van de printer in Cura laden" msgctxt "@action:button" msgid "Activate Configuration" msgstr "Configuratie Activeren" + +#: /home/ruben/Projects/Cura/resources/qml/Preferences/MaterialView.qml:25 +msgctxt "@title" +msgid "Information" +msgstr "Informatie" diff --git a/resources/qml/Actions.qml b/resources/qml/Actions.qml index 9821a6a0df..bb4e28eae7 100644 --- a/resources/qml/Actions.qml +++ b/resources/qml/Actions.qml @@ -123,7 +123,7 @@ Item { id: updateProfileAction; enabled: !Cura.MachineManager.stacksHaveErrors && Cura.MachineManager.hasUserSettings && !Cura.MachineManager.isReadOnly(Cura.MachineManager.activeQualityId) - text: catalog.i18nc("@action:inmenu menubar:profile","&Update profile with current settings"); + text: catalog.i18nc("@action:inmenu menubar:profile","&Update profile with current settings/overrides"); onTriggered: Cura.ContainerManager.updateQualityChanges(); } @@ -143,7 +143,7 @@ Item { id: addProfileAction; enabled: !Cura.MachineManager.stacksHaveErrors && Cura.MachineManager.hasUserSettings - text: catalog.i18nc("@action:inmenu menubar:profile","&Create profile from current settings..."); + text: catalog.i18nc("@action:inmenu menubar:profile","&Create profile from current settings/overrides..."); } Action diff --git a/resources/qml/Preferences/ProfilesPage.qml b/resources/qml/Preferences/ProfilesPage.qml index b1f06af3a9..521145f872 100644 --- a/resources/qml/Preferences/ProfilesPage.qml +++ b/resources/qml/Preferences/ProfilesPage.qml @@ -162,7 +162,7 @@ UM.ManagementPage Button { text: { - return catalog.i18nc("@action:button", "Update profile with current settings"); + return catalog.i18nc("@action:button", "Update profile with current settings/overrides"); } enabled: Cura.MachineManager.hasUserSettings && !Cura.MachineManager.isReadOnly(Cura.MachineManager.activeQualityId) onClicked: Cura.ContainerManager.updateQualityChanges() @@ -187,7 +187,7 @@ UM.ManagementPage Label { id: defaultsMessage visible: false - text: catalog.i18nc("@action:label", "This profile uses the defaults specified by the printer, so it has no settings in the list below.") + text: catalog.i18nc("@action:label", "This profile uses the defaults specified by the printer, so it has no settings/overrides in the list below.") wrapMode: Text.WordWrap width: parent.width } diff --git a/resources/qml/Settings/SettingItem.qml b/resources/qml/Settings/SettingItem.qml index 2aa15e9244..a03e2c599f 100644 --- a/resources/qml/Settings/SettingItem.qml +++ b/resources/qml/Settings/SettingItem.qml @@ -209,14 +209,26 @@ Item { // But this will cause the binding to be re-evaluated when the enabled property changes. return false; } + + // There are no settings with any warning. if(Cura.SettingInheritanceManager.settingsWithInheritanceWarning.length == 0) { return false; } + + // This setting has a resolve value, so an inheritance warning doesn't do anything. + if(resolve != "None") + { + return false + } + + // If the setting does not have a limit_to_extruder property (or is -1), use the active stack. if(globalPropertyProvider.properties.limit_to_extruder == null || globalPropertyProvider.properties.limit_to_extruder == -1) { return Cura.SettingInheritanceManager.settingsWithInheritanceWarning.indexOf(definition.key) >= 0; } + + // Setting does have a limit_to_extruder property, so use that one instead. return Cura.SettingInheritanceManager.getOverridesForExtruder(definition.key, globalPropertyProvider.properties.limit_to_extruder).indexOf(definition.key) >= 0; } @@ -227,7 +239,7 @@ Item { focus = true; // Get the most shallow function value (eg not a number) that we can find. - var last_entry = propertyProvider.stackLevels[propertyProvider.stackLevels.length] + var last_entry = propertyProvider.stackLevels[propertyProvider.stackLevels.length - 1] for (var i = 1; i < base.stackLevels.length; i++) { var has_setting_function = typeof(propertyProvider.getPropertyValue("value", base.stackLevels[i])) == "object"; diff --git a/resources/qml/SidebarHeader.qml b/resources/qml/SidebarHeader.qml index 700384c394..e894392b06 100644 --- a/resources/qml/SidebarHeader.qml +++ b/resources/qml/SidebarHeader.qml @@ -329,7 +329,7 @@ Column } onEntered: { - var content = catalog.i18nc("@tooltip","Some setting values are different from the values stored in the profile.\n\nClick to open the profile manager.") + var content = catalog.i18nc("@tooltip","Some setting/override values are different from the values stored in the profile.\n\nClick to open the profile manager.") base.showTooltip(globalProfileRow, Qt.point(0, globalProfileRow.height / 2), content) } onExited: base.hideTooltip() diff --git a/resources/quality/ultimaker2_plus/pla_0.25_normal.inst.cfg b/resources/quality/ultimaker2_plus/pla_0.25_normal.inst.cfg index 868f1dc016..db2b48b3cc 100644 --- a/resources/quality/ultimaker2_plus/pla_0.25_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/pla_0.25_normal.inst.cfg @@ -15,5 +15,6 @@ wall_thickness = 0.88 top_bottom_thickness = 0.72 infill_sparse_density = 22 speed_print = 30 +speed_layer_0 = =round(speed_print * 30 / 30) cool_min_layer_time = 5 cool_min_speed = 10 diff --git a/resources/quality/ultimaker2_plus/pla_0.4_fast.inst.cfg b/resources/quality/ultimaker2_plus/pla_0.4_fast.inst.cfg index b17a1f2a6a..d3f2740202 100644 --- a/resources/quality/ultimaker2_plus/pla_0.4_fast.inst.cfg +++ b/resources/quality/ultimaker2_plus/pla_0.4_fast.inst.cfg @@ -15,9 +15,9 @@ wall_thickness = 0.7 top_bottom_thickness = 0.75 infill_sparse_density = 18 speed_print = 60 +speed_layer_0 = =round(speed_print * 30 / 60) speed_wall = 50 speed_topbottom = 30 speed_travel = 150 -speed_layer_0 = 30 cool_min_layer_time = 5 cool_min_speed = 10 diff --git a/resources/quality/ultimaker2_plus/pla_0.4_high.inst.cfg b/resources/quality/ultimaker2_plus/pla_0.4_high.inst.cfg index c2b15d1074..d3347b4712 100644 --- a/resources/quality/ultimaker2_plus/pla_0.4_high.inst.cfg +++ b/resources/quality/ultimaker2_plus/pla_0.4_high.inst.cfg @@ -15,6 +15,7 @@ wall_thickness = 1.05 top_bottom_thickness = 0.72 infill_sparse_density = 22 speed_print = 50 +speed_layer_0 = =round(speed_print * 30 / 50) speed_topbottom = 20 cool_min_layer_time = 5 cool_min_speed = 10 diff --git a/resources/quality/ultimaker2_plus/pla_0.4_normal.inst.cfg b/resources/quality/ultimaker2_plus/pla_0.4_normal.inst.cfg index 9a84f5c04a..758225535a 100644 --- a/resources/quality/ultimaker2_plus/pla_0.4_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/pla_0.4_normal.inst.cfg @@ -15,6 +15,7 @@ wall_thickness = 1.05 top_bottom_thickness = 0.8 infill_sparse_density = 20 speed_print = 50 +speed_layer_0 = =round(speed_print * 30 / 50) speed_topbottom = 20 cool_min_layer_time = 5 cool_min_speed = 10 diff --git a/resources/quality/ultimaker2_plus/pla_0.6_normal.inst.cfg b/resources/quality/ultimaker2_plus/pla_0.6_normal.inst.cfg index fd4c2c120a..5eed5965e4 100644 --- a/resources/quality/ultimaker2_plus/pla_0.6_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/pla_0.6_normal.inst.cfg @@ -15,6 +15,7 @@ wall_thickness = 1.59 top_bottom_thickness = 1.2 infill_sparse_density = 20 speed_print = 55 +speed_layer_0 = =round(speed_print * 30 / 55) speed_wall = 40 speed_wall_0 = 25 speed_topbottom = 20 diff --git a/resources/quality/ultimaker2_plus/pla_0.8_normal.inst.cfg b/resources/quality/ultimaker2_plus/pla_0.8_normal.inst.cfg index cd4c591640..96a81d874e 100644 --- a/resources/quality/ultimaker2_plus/pla_0.8_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/pla_0.8_normal.inst.cfg @@ -15,6 +15,7 @@ wall_thickness = 2.1 top_bottom_thickness = 1.2 infill_sparse_density = 20 speed_print = 40 +speed_layer_0 = =round(speed_print * 30 / 40) speed_wall_0 = 25 cool_min_layer_time = 5 cool_min_speed = 10 diff --git a/resources/quality/ultimaker2_plus/um2p_abs_0.25_normal.inst.cfg b/resources/quality/ultimaker2_plus/um2p_abs_0.25_normal.inst.cfg index 94ddd58081..afe7c52f1a 100644 --- a/resources/quality/ultimaker2_plus/um2p_abs_0.25_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_abs_0.25_normal.inst.cfg @@ -15,6 +15,7 @@ wall_thickness = 0.88 top_bottom_thickness = 0.72 infill_sparse_density = 22 speed_print = 30 +speed_layer_0 = =round(speed_print * 30 / 30) cool_min_layer_time = 3 cool_fan_speed_min = 20 cool_min_speed = 10 diff --git a/resources/quality/ultimaker2_plus/um2p_abs_0.4_fast.inst.cfg b/resources/quality/ultimaker2_plus/um2p_abs_0.4_fast.inst.cfg index 8bcb3efee4..4eff2c3d91 100644 --- a/resources/quality/ultimaker2_plus/um2p_abs_0.4_fast.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_abs_0.4_fast.inst.cfg @@ -15,10 +15,10 @@ wall_thickness = 0.7 top_bottom_thickness = 0.75 infill_sparse_density = 18 speed_print = 55 +speed_layer_0 = =round(speed_print * 30 / 55) speed_wall = 40 speed_topbottom = 30 speed_travel = 150 -speed_layer_0 = 30 cool_min_layer_time = 3 cool_fan_speed_min = 20 cool_min_speed = 10 diff --git a/resources/quality/ultimaker2_plus/um2p_abs_0.4_high.inst.cfg b/resources/quality/ultimaker2_plus/um2p_abs_0.4_high.inst.cfg index c6ea33da2d..607598b249 100644 --- a/resources/quality/ultimaker2_plus/um2p_abs_0.4_high.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_abs_0.4_high.inst.cfg @@ -15,6 +15,7 @@ wall_thickness = 1.05 top_bottom_thickness = 0.72 infill_sparse_density = 22 speed_print = 45 +speed_layer_0 = =round(speed_print * 30 / 45) speed_wall = 30 cool_min_layer_time = 3 cool_fan_speed_min = 20 diff --git a/resources/quality/ultimaker2_plus/um2p_abs_0.4_normal.inst.cfg b/resources/quality/ultimaker2_plus/um2p_abs_0.4_normal.inst.cfg index ba7886276b..be379beb30 100644 --- a/resources/quality/ultimaker2_plus/um2p_abs_0.4_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_abs_0.4_normal.inst.cfg @@ -15,6 +15,7 @@ wall_thickness = 1.05 top_bottom_thickness = 0.8 infill_sparse_density = 20 speed_print = 45 +speed_layer_0 = =round(speed_print * 30 / 45) speed_wall = 30 cool_min_layer_time = 3 cool_fan_speed_min = 20 diff --git a/resources/quality/ultimaker2_plus/um2p_abs_0.6_normal.inst.cfg b/resources/quality/ultimaker2_plus/um2p_abs_0.6_normal.inst.cfg index 3a0af33a6a..b988738273 100644 --- a/resources/quality/ultimaker2_plus/um2p_abs_0.6_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_abs_0.6_normal.inst.cfg @@ -15,6 +15,7 @@ wall_thickness = 1.59 top_bottom_thickness = 1.2 infill_sparse_density = 20 speed_print = 40 +speed_layer_0 = =round(speed_print * 30 / 40) speed_infill = 55 cool_min_layer_time = 3 cool_fan_speed_min = 50 diff --git a/resources/quality/ultimaker2_plus/um2p_abs_0.8_normal.inst.cfg b/resources/quality/ultimaker2_plus/um2p_abs_0.8_normal.inst.cfg index e8885fc73a..c6954c92d8 100644 --- a/resources/quality/ultimaker2_plus/um2p_abs_0.8_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_abs_0.8_normal.inst.cfg @@ -15,6 +15,7 @@ wall_thickness = 2.1 top_bottom_thickness = 1.2 infill_sparse_density = 20 speed_print = 40 +speed_layer_0 = =round(speed_print * 30 / 40) cool_min_layer_time = 3 cool_fan_speed_min = 50 cool_min_speed = 15 diff --git a/resources/quality/ultimaker2_plus/um2p_cpe_0.25_normal.inst.cfg b/resources/quality/ultimaker2_plus/um2p_cpe_0.25_normal.inst.cfg index b86bb877f6..0128800950 100644 --- a/resources/quality/ultimaker2_plus/um2p_cpe_0.25_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_cpe_0.25_normal.inst.cfg @@ -15,6 +15,7 @@ wall_thickness = 0.88 top_bottom_thickness = 0.72 infill_sparse_density = 22 speed_print = 30 +speed_layer_0 = =round(speed_print * 30 / 30) cool_min_layer_time = 2 cool_fan_speed_min = 20 cool_min_speed = 15 diff --git a/resources/quality/ultimaker2_plus/um2p_cpe_0.4_fast.inst.cfg b/resources/quality/ultimaker2_plus/um2p_cpe_0.4_fast.inst.cfg index 8f8fb9e01b..0c3fec0afa 100644 --- a/resources/quality/ultimaker2_plus/um2p_cpe_0.4_fast.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_cpe_0.4_fast.inst.cfg @@ -15,9 +15,9 @@ wall_thickness = 0.7 top_bottom_thickness = 0.75 infill_sparse_density = 18 speed_print = 45 +speed_layer_0 = =round(speed_print * 30 / 45) speed_wall = 40 speed_travel = 150 -speed_layer_0 = 30 cool_min_layer_time = 3 cool_fan_speed_min = 80 cool_min_speed = 10 diff --git a/resources/quality/ultimaker2_plus/um2p_cpe_0.4_high.inst.cfg b/resources/quality/ultimaker2_plus/um2p_cpe_0.4_high.inst.cfg index bb6a1ee079..597d450bd4 100644 --- a/resources/quality/ultimaker2_plus/um2p_cpe_0.4_high.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_cpe_0.4_high.inst.cfg @@ -15,6 +15,7 @@ wall_thickness = 1.05 top_bottom_thickness = 0.72 infill_sparse_density = 22 speed_print = 45 +speed_layer_0 = =round(speed_print * 30 / 45) speed_wall = 30 cool_min_layer_time = 2 cool_fan_speed_min = 80 diff --git a/resources/quality/ultimaker2_plus/um2p_cpe_0.4_normal.inst.cfg b/resources/quality/ultimaker2_plus/um2p_cpe_0.4_normal.inst.cfg index 54122164da..1d624aeb33 100644 --- a/resources/quality/ultimaker2_plus/um2p_cpe_0.4_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_cpe_0.4_normal.inst.cfg @@ -15,6 +15,7 @@ wall_thickness = 1.05 top_bottom_thickness = 0.8 infill_sparse_density = 20 speed_print = 45 +speed_layer_0 = =round(speed_print * 30 / 45) speed_wall = 30 cool_min_layer_time = 3 cool_fan_speed_min = 80 diff --git a/resources/quality/ultimaker2_plus/um2p_cpe_0.6_normal.inst.cfg b/resources/quality/ultimaker2_plus/um2p_cpe_0.6_normal.inst.cfg index 00a6160f46..c9c9fbf88c 100644 --- a/resources/quality/ultimaker2_plus/um2p_cpe_0.6_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_cpe_0.6_normal.inst.cfg @@ -15,6 +15,7 @@ wall_thickness = 1.59 top_bottom_thickness = 1.2 infill_sparse_density = 20 speed_print = 40 +speed_layer_0 = =round(speed_print * 30 / 40) cool_min_layer_time = 5 cool_fan_speed_min = 80 cool_min_speed = 8 diff --git a/resources/quality/ultimaker2_plus/um2p_cpe_0.8_normal.inst.cfg b/resources/quality/ultimaker2_plus/um2p_cpe_0.8_normal.inst.cfg index 83714ca40a..9f02a97a36 100644 --- a/resources/quality/ultimaker2_plus/um2p_cpe_0.8_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_cpe_0.8_normal.inst.cfg @@ -15,6 +15,7 @@ wall_thickness = 2.1 top_bottom_thickness = 1.2 infill_sparse_density = 20 speed_print = 40 +speed_layer_0 = =round(speed_print * 30 / 40) cool_min_layer_time = 3 cool_fan_speed_min = 80 cool_min_speed = 8 diff --git a/resources/quality/ultimaker2_plus/um2p_cpep_0.6_draft.inst.cfg b/resources/quality/ultimaker2_plus/um2p_cpep_0.6_draft.inst.cfg index be6e962949..a8d90b65ef 100644 --- a/resources/quality/ultimaker2_plus/um2p_cpep_0.6_draft.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_cpep_0.6_draft.inst.cfg @@ -20,7 +20,6 @@ raft_surface_thickness = 0.2 raft_surface_line_width = 0.57 raft_interface_line_spacing = 1.4 raft_margin = 15 -speed_layer_0 = 30 raft_airgap = 0.37 infill_overlap = 5 layer_height = 0.3 @@ -40,6 +39,7 @@ line_width = 0.57 layer_0_z_overlap = 0.22 raft_base_line_width = 1.2 speed_print = 25 +speed_layer_0 = =round(speed_print * 30 / 50) support_line_distance = 2.85 support_angle = 45 cool_min_layer_time = 3 diff --git a/resources/quality/ultimaker2_plus/um2p_cpep_0.8_draft.inst.cfg b/resources/quality/ultimaker2_plus/um2p_cpep_0.8_draft.inst.cfg index 2cd6ef9dac..a16708e4ff 100644 --- a/resources/quality/ultimaker2_plus/um2p_cpep_0.8_draft.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_cpep_0.8_draft.inst.cfg @@ -33,6 +33,7 @@ infill_sparse_density = 40 layer_0_z_overlap = 0.22 raft_base_line_width = 1.6 speed_print = 25 +speed_layer_0 = =round(speed_print * 30 / 25) speed_wall_0 = 20 support_angle = 45 cool_min_layer_time = 3 diff --git a/resources/quality/ultimaker2_plus/um2p_cpep_0.8_normal.inst.cfg b/resources/quality/ultimaker2_plus/um2p_cpep_0.8_normal.inst.cfg index f243637cd7..0cd03af871 100644 --- a/resources/quality/ultimaker2_plus/um2p_cpep_0.8_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_cpep_0.8_normal.inst.cfg @@ -33,6 +33,7 @@ infill_sparse_density = 40 layer_0_z_overlap = 0.22 raft_base_line_width = 1.6 speed_print = 30 +speed_layer_0 = =round(speed_print * 30 / 30) speed_wall_0 = 20 support_angle = 45 cool_min_layer_time = 3 diff --git a/resources/quality/ultimaker2_plus/um2p_nylon_0.8_normal.inst.cfg b/resources/quality/ultimaker2_plus/um2p_nylon_0.8_normal.inst.cfg index 023ffd7498..223e42291e 100644 --- a/resources/quality/ultimaker2_plus/um2p_nylon_0.8_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_nylon_0.8_normal.inst.cfg @@ -20,7 +20,6 @@ support_top_distance = 0.5 raft_surface_thickness = 0.2 wall_thickness = 2.4 raft_margin = 15 -speed_layer_0 = 30 raft_airgap = 0.44 infill_overlap = 5 layer_height = 0.2 @@ -41,6 +40,7 @@ infill_sparse_density = 40 layer_0_z_overlap = 0.25 raft_base_line_width = 1.6 speed_print = 55 +speed_layer_0 = =round(speed_print * 30 / 55) support_angle = 45 raft_interface_line_spacing = 1.8 diff --git a/resources/quality/ultimaker2_plus/um2p_pc_0.25_high.inst.cfg b/resources/quality/ultimaker2_plus/um2p_pc_0.25_high.inst.cfg index 91e75c2450..a70d82d909 100644 --- a/resources/quality/ultimaker2_plus/um2p_pc_0.25_high.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_pc_0.25_high.inst.cfg @@ -31,6 +31,7 @@ infill_sparse_density = 25 layer_0_z_overlap = 0.22 cool_min_layer_time = 2 speed_print = 30 +speed_layer_0 = =round(speed_print * 30 / 30) raft_base_line_spacing = 1 raft_base_line_width = 0.5 diff --git a/resources/quality/ultimaker2_plus/um2p_pc_0.25_normal.inst.cfg b/resources/quality/ultimaker2_plus/um2p_pc_0.25_normal.inst.cfg index a5df9972b9..b3ba1ecf8c 100644 --- a/resources/quality/ultimaker2_plus/um2p_pc_0.25_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_pc_0.25_normal.inst.cfg @@ -31,6 +31,7 @@ infill_sparse_density = 25 layer_0_z_overlap = 0.22 cool_min_layer_time = 2 speed_print = 30 +speed_layer_0 = =round(speed_print * 30 / 30) raft_base_line_spacing = 1 raft_base_line_width = 0.5 diff --git a/resources/quality/ultimaker2_plus/um2p_pc_0.4_fast.inst.cfg b/resources/quality/ultimaker2_plus/um2p_pc_0.4_fast.inst.cfg index e05cbb0dd0..a9b8418bcb 100644 --- a/resources/quality/ultimaker2_plus/um2p_pc_0.4_fast.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_pc_0.4_fast.inst.cfg @@ -31,6 +31,7 @@ infill_sparse_density = 30 layer_0_z_overlap = 0.22 cool_min_layer_time = 3 speed_print = 45 +speed_layer_0 = =round(speed_print * 30 / 45) support_angle = 45 raft_base_line_spacing = 1.6 raft_base_line_width = 0.8 diff --git a/resources/quality/ultimaker2_plus/um2p_pc_0.4_normal.inst.cfg b/resources/quality/ultimaker2_plus/um2p_pc_0.4_normal.inst.cfg index 0b79ed29bd..e111597c2d 100644 --- a/resources/quality/ultimaker2_plus/um2p_pc_0.4_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_pc_0.4_normal.inst.cfg @@ -31,6 +31,7 @@ infill_sparse_density = 30 layer_0_z_overlap = 0.22 cool_min_layer_time = 3 speed_print = 45 +speed_layer_0 = =round(speed_print * 30 / 45) support_angle = 45 raft_base_line_spacing = 1.6 raft_base_line_width = 0.8 diff --git a/resources/quality/ultimaker2_plus/um2p_pc_0.8_draft.inst.cfg b/resources/quality/ultimaker2_plus/um2p_pc_0.8_draft.inst.cfg index 52e61a8145..cd0d3b3695 100644 --- a/resources/quality/ultimaker2_plus/um2p_pc_0.8_draft.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_pc_0.8_draft.inst.cfg @@ -32,6 +32,7 @@ infill_sparse_density = 40 layer_0_z_overlap = 0.22 raft_base_line_width = 1.6 speed_print = 40 +speed_layer_0 = =round(speed_print * 30 / 40) support_angle = 45 cool_min_layer_time = 3 diff --git a/resources/quality/ultimaker2_plus/um2p_pc_0.8_normal.inst.cfg b/resources/quality/ultimaker2_plus/um2p_pc_0.8_normal.inst.cfg index 383fe8722f..bdd774824e 100644 --- a/resources/quality/ultimaker2_plus/um2p_pc_0.8_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_pc_0.8_normal.inst.cfg @@ -32,6 +32,7 @@ infill_sparse_density = 40 layer_0_z_overlap = 0.22 raft_base_line_width = 1.6 speed_print = 40 +speed_layer_0 = =round(speed_print * 30 / 40) support_angle = 45 cool_min_layer_time = 3 diff --git a/resources/quality/ultimaker3/um3_aa0.4_ABS_Draft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_ABS_Draft_Print.inst.cfg index 6a1b477165..9ea0c2119f 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_ABS_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_ABS_Draft_Print.inst.cfg @@ -16,6 +16,7 @@ material_print_temperature = 240 prime_tower_size = 16 skin_overlap = 20 speed_print = 60 +speed_layer_0 = =round(speed_print * 30 / 60) speed_topbottom = =math.ceil(speed_print * 35 / 60) speed_wall = =math.ceil(speed_print * 45 / 60) speed_wall_0 = =math.ceil(speed_wall * 35 / 45) diff --git a/resources/quality/ultimaker3/um3_aa0.4_ABS_Fast_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_ABS_Fast_Print.inst.cfg index 3b5d37024d..d5c012d0c6 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_ABS_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_ABS_Fast_Print.inst.cfg @@ -17,6 +17,7 @@ material_print_temperature = 235 material_standby_temperature = 100 prime_tower_size = 16 speed_print = 60 +speed_layer_0 = =round(speed_print * 30 / 60) speed_topbottom = =math.ceil(speed_print * 30 / 60) speed_wall = =math.ceil(speed_print * 40 / 60) speed_wall_0 = =math.ceil(speed_wall * 30 / 40) diff --git a/resources/quality/ultimaker3/um3_aa0.4_ABS_High_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_ABS_High_Quality.inst.cfg index dcb8e85563..10651f520c 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_ABS_High_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_ABS_High_Quality.inst.cfg @@ -16,6 +16,7 @@ machine_nozzle_heat_up_speed = 1.5 material_standby_temperature = 100 prime_tower_size = 16 speed_print = 50 +speed_layer_0 = =round(speed_print * 30 / 50) speed_topbottom = =math.ceil(speed_print * 30 / 50) speed_wall = =math.ceil(speed_print * 30 / 50) diff --git a/resources/quality/ultimaker3/um3_aa0.4_ABS_Normal_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_ABS_Normal_Quality.inst.cfg index 4e99ac446e..d0d4ec4d5c 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_ABS_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_ABS_Normal_Quality.inst.cfg @@ -16,6 +16,7 @@ material_print_temperature = 230 material_standby_temperature = 100 prime_tower_size = 16 speed_print = 55 +speed_layer_0 = =round(speed_print * 30 / 55) speed_topbottom = =math.ceil(speed_print * 30 / 55) speed_wall = =math.ceil(speed_print * 30 / 55) diff --git a/resources/quality/ultimaker3/um3_aa0.4_CPE_Draft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_CPE_Draft_Print.inst.cfg index d7e0ed62b6..6c9f031cfe 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_CPE_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_CPE_Draft_Print.inst.cfg @@ -15,6 +15,7 @@ material_standby_temperature = 100 prime_tower_size = 17 skin_overlap = 20 speed_print = 60 +speed_layer_0 = =round(speed_print * 30 / 60) speed_topbottom = =math.ceil(speed_print * 35 / 60) speed_wall = =math.ceil(speed_print * 45 / 60) speed_wall_0 = =math.ceil(speed_wall * 35 / 45) diff --git a/resources/quality/ultimaker3/um3_aa0.4_CPE_Fast_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_CPE_Fast_Print.inst.cfg index 5717bf50fe..7430c63b1b 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_CPE_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_CPE_Fast_Print.inst.cfg @@ -15,6 +15,7 @@ material_print_temperature = 245 material_standby_temperature = 100 prime_tower_size = 17 speed_print = 60 +speed_layer_0 = =round(speed_print * 30 / 60) speed_topbottom = =math.ceil(speed_print * 30 / 60) speed_wall = =math.ceil(speed_print * 40 / 60) speed_wall_0 = =math.ceil(speed_wall * 30 / 40) diff --git a/resources/quality/ultimaker3/um3_aa0.4_CPE_High_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_CPE_High_Quality.inst.cfg index e058ef8cac..e428c4c511 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_CPE_High_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_CPE_High_Quality.inst.cfg @@ -16,6 +16,7 @@ machine_nozzle_heat_up_speed = 1.5 material_standby_temperature = 100 prime_tower_size = 17 speed_print = 50 +speed_layer_0 = =round(speed_print * 30 / 50) speed_topbottom = =math.ceil(speed_print * 30 / 50) speed_wall = =math.ceil(speed_print * 30 / 50) diff --git a/resources/quality/ultimaker3/um3_aa0.4_CPE_Normal_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_CPE_Normal_Quality.inst.cfg index 1ccd1c54d3..a628afbe78 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_CPE_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_CPE_Normal_Quality.inst.cfg @@ -16,6 +16,7 @@ material_print_temperature = 240 material_standby_temperature = 100 prime_tower_size = 17 speed_print = 55 +speed_layer_0 = =round(speed_print * 30 / 55) speed_topbottom = =math.ceil(speed_print * 30 / 55) speed_wall = =math.ceil(speed_print * 30 / 55) diff --git a/resources/quality/ultimaker3/um3_aa0.4_PLA_Fast_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_PLA_Fast_Print.inst.cfg index 3f2aa1e652..c0b28ca6b7 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_PLA_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_PLA_Fast_Print.inst.cfg @@ -17,6 +17,7 @@ machine_nozzle_heat_up_speed = 1.6 material_standby_temperature = 100 prime_tower_enable = False speed_print = 80 +speed_layer_0 = =round(speed_print * 30 / 80) speed_topbottom = =math.ceil(speed_print * 30 / 80) speed_wall = =math.ceil(speed_print * 40 / 80) speed_wall_0 = =math.ceil(speed_wall * 30 / 40) diff --git a/resources/quality/ultimaker3/um3_aa0.4_PLA_High_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_PLA_High_Quality.inst.cfg index f71c51e7ff..fe05a61beb 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_PLA_High_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_PLA_High_Quality.inst.cfg @@ -19,6 +19,7 @@ material_print_temperature = 195 material_standby_temperature = 100 skin_overlap = 10 speed_print = 60 +speed_layer_0 = =round(speed_print * 30 / 60) speed_topbottom = =math.ceil(speed_print * 30 / 60) speed_wall = =math.ceil(speed_print * 30 / 60) top_bottom_thickness = 1 diff --git a/resources/variants/ultimaker3_aa04.inst.cfg b/resources/variants/ultimaker3_aa04.inst.cfg index c8d5b8aceb..41967739b4 100644 --- a/resources/variants/ultimaker3_aa04.inst.cfg +++ b/resources/variants/ultimaker3_aa04.inst.cfg @@ -28,6 +28,7 @@ retraction_min_travel = =line_width * 2 retraction_prime_speed = =retraction_speed skin_overlap = 15 speed_print = 70 +speed_layer_0 = =speed_print * 30 / 70 speed_topbottom = =math.ceil(speed_print * 30 / 70) speed_wall = =math.ceil(speed_print * 30 / 70) support_angle = 60 diff --git a/resources/variants/ultimaker3_extended_aa04.inst.cfg b/resources/variants/ultimaker3_extended_aa04.inst.cfg index 24cbf04a26..6fa09c32ea 100644 --- a/resources/variants/ultimaker3_extended_aa04.inst.cfg +++ b/resources/variants/ultimaker3_extended_aa04.inst.cfg @@ -27,6 +27,7 @@ retraction_min_travel = 1.5 retraction_prime_speed = 25 skin_overlap = 15 speed_print = 70 +speed_layer_0 = =round(speed_print * 30 / 70) speed_topbottom = =math.ceil(speed_print * 30 / 70) speed_wall = =math.ceil(speed_print * 30 / 70) support_angle = 60