diff --git a/cura/API/Backups.py b/cura/API/Backups.py index ba416bd870..5964557264 100644 --- a/cura/API/Backups.py +++ b/cura/API/Backups.py @@ -1,32 +1,30 @@ # Copyright (c) 2018 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. +from typing import Tuple, Optional + from cura.Backups.BackupsManager import BackupsManager +## The back-ups API provides a version-proof bridge between Cura's +# BackupManager and plug-ins that hook into it. +# +# Usage: +# ``from cura.API import CuraAPI +# api = CuraAPI() +# api.backups.createBackup() +# api.backups.restoreBackup(my_zip_file, {"cura_release": "3.1"})`` class Backups: - """ - The backups API provides a version-proof bridge between Cura's BackupManager and plugins that hook into it. - - Usage: - from cura.API import CuraAPI - api = CuraAPI() - api.backups.createBackup() - api.backups.restoreBackup(my_zip_file, {"cura_release": "3.1"}) - """ - manager = BackupsManager() # Re-used instance of the backups manager. - def createBackup(self) -> (bytes, dict): - """ - Create a new backup using the BackupsManager. - :return: Tuple containing a ZIP file with the backup data and a dict with meta data about the backup. - """ + ## Create a new back-up using the BackupsManager. + # \return Tuple containing a ZIP file with the back-up data and a dict + # with metadata about the back-up. + def createBackup(self) -> Tuple[Optional[bytes], Optional[dict]]: return self.manager.createBackup() + ## Restore a back-up using the BackupsManager. + # \param zip_file A ZIP file containing the actual back-up data. + # \param meta_data Some metadata needed for restoring a back-up, like the + # Cura version number. def restoreBackup(self, zip_file: bytes, meta_data: dict) -> None: - """ - Restore a backup using the BackupManager. - :param zip_file: A ZIP file containing the actual backup data. - :param meta_data: Some meta data needed for restoring a backup, like the Cura version number. - """ return self.manager.restoreBackup(zip_file, meta_data) diff --git a/cura/API/__init__.py b/cura/API/__init__.py index 7dd5d8f79e..13f6722336 100644 --- a/cura/API/__init__.py +++ b/cura/API/__init__.py @@ -3,14 +3,13 @@ from UM.PluginRegistry import PluginRegistry from cura.API.Backups import Backups - +## The official Cura API that plug-ins can use to interact with Cura. +# +# Python does not technically prevent talking to other classes as well, but +# this API provides a version-safe interface with proper deprecation warnings +# etc. Usage of any other methods than the ones provided in this API can cause +# plug-ins to be unstable. class CuraAPI: - """ - The official Cura API that plugins can use to interact with Cura. - Python does not technically prevent talking to other classes as well, - but this API provides a version-safe interface with proper deprecation warnings etc. - Usage of any other methods than the ones provided in this API can cause plugins to be unstable. - """ # For now we use the same API version to be consistent. VERSION = PluginRegistry.APIVersion diff --git a/cura/Arranging/Arrange.py b/cura/Arranging/Arrange.py index 21ed45dbf1..ee5db3f1fb 100644 --- a/cura/Arranging/Arrange.py +++ b/cura/Arranging/Arrange.py @@ -1,10 +1,12 @@ # Copyright (c) 2018 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. +from typing import List from UM.Scene.Iterator.DepthFirstIterator import DepthFirstIterator from UM.Logger import Logger from UM.Math.Polygon import Polygon from UM.Math.Vector import Vector +from UM.Scene.SceneNode import SceneNode from cura.Arranging.ShapeArray import ShapeArray from cura.Scene import ZOffsetDecorator @@ -85,8 +87,7 @@ class Arrange: # \param node # \param offset_shape_arr ShapeArray with offset, for placing the shape # \param hull_shape_arr ShapeArray without offset, used to find location - def findNodePlacement(self, node, offset_shape_arr, hull_shape_arr, step = 1): - new_node = copy.deepcopy(node) + def findNodePlacement(self, node: SceneNode, offset_shape_arr: ShapeArray, hull_shape_arr: ShapeArray, step = 1): best_spot = self.bestSpot( hull_shape_arr, start_prio = self._last_priority, step = step) x, y = best_spot.x, best_spot.y @@ -95,21 +96,21 @@ class Arrange: self._last_priority = best_spot.priority # Ensure that the object is above the build platform - new_node.removeDecorator(ZOffsetDecorator.ZOffsetDecorator) - if new_node.getBoundingBox(): - center_y = new_node.getWorldPosition().y - new_node.getBoundingBox().bottom + node.removeDecorator(ZOffsetDecorator.ZOffsetDecorator) + if node.getBoundingBox(): + center_y = node.getWorldPosition().y - node.getBoundingBox().bottom else: center_y = 0 if x is not None: # We could find a place - new_node.setPosition(Vector(x, center_y, y)) + node.setPosition(Vector(x, center_y, y)) found_spot = True self.place(x, y, offset_shape_arr) # place the object in arranger else: Logger.log("d", "Could not find spot!"), found_spot = False - new_node.setPosition(Vector(200, center_y, 100)) - return new_node, found_spot + node.setPosition(Vector(200, center_y, 100)) + return found_spot ## Fill priority, center is best. Lower value is better # This is a strategy for the arranger. diff --git a/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py b/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py index 6abc553a4b..8bbc2bf132 100644 --- a/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py +++ b/cura/Arranging/ArrangeObjectsAllBuildPlatesJob.py @@ -20,14 +20,14 @@ from typing import List ## Do arrangements on multiple build plates (aka builtiplexer) class ArrangeArray: - def __init__(self, x: int, y: int, fixed_nodes: List[SceneNode]): + def __init__(self, x: int, y: int, fixed_nodes: List[SceneNode]) -> None: self._x = x self._y = y self._fixed_nodes = fixed_nodes self._count = 0 self._first_empty = None self._has_empty = False - self._arrange = [] + self._arrange = [] # type: List[Arrange] def _update_first_empty(self): for i, a in enumerate(self._arrange): @@ -48,16 +48,17 @@ class ArrangeArray: return self._count def get(self, index): + print(self._arrange) return self._arrange[index] def getFirstEmpty(self): - if not self._is_empty: + if not self._has_empty: self.add() return self._arrange[self._first_empty] class ArrangeObjectsAllBuildPlatesJob(Job): - def __init__(self, nodes: List[SceneNode], min_offset = 8): + def __init__(self, nodes: List[SceneNode], min_offset = 8) -> None: super().__init__() self._nodes = nodes self._min_offset = min_offset diff --git a/cura/Arranging/ArrangeObjectsJob.py b/cura/Arranging/ArrangeObjectsJob.py index 5e982582fd..ce11556b5b 100644 --- a/cura/Arranging/ArrangeObjectsJob.py +++ b/cura/Arranging/ArrangeObjectsJob.py @@ -20,7 +20,7 @@ from typing import List class ArrangeObjectsJob(Job): - def __init__(self, nodes: List[SceneNode], fixed_nodes: List[SceneNode], min_offset = 8): + def __init__(self, nodes: List[SceneNode], fixed_nodes: List[SceneNode], min_offset = 8) -> None: super().__init__() self._nodes = nodes self._fixed_nodes = fixed_nodes diff --git a/cura/Backups/Backup.py b/cura/Backups/Backup.py index c4fe720b2b..f935aa6af5 100644 --- a/cura/Backups/Backup.py +++ b/cura/Backups/Backup.py @@ -17,26 +17,23 @@ from UM.Resources import Resources from cura.CuraApplication import CuraApplication +## The back-up class holds all data about a back-up. +# +# It is also responsible for reading and writing the zip file to the user data +# folder. class Backup: - """ - The backup class holds all data about a backup. - It is also responsible for reading and writing the zip file to the user data folder. - """ - # These files should be ignored when making a backup. IGNORED_FILES = [r"cura\.log", r"plugins\.json", r"cache", r"__pycache__", r"\.qmlc", r"\.pyc"] # Re-use translation catalog. catalog = i18nCatalog("cura") - def __init__(self, zip_file: bytes = None, meta_data: dict = None): + def __init__(self, zip_file: bytes = None, meta_data: dict = None) -> None: self.zip_file = zip_file # type: Optional[bytes] self.meta_data = meta_data # type: Optional[dict] - def makeFromCurrent(self) -> (bool, Optional[str]): - """ - Create a backup from the current user config folder. - """ + ## Create a back-up from the current user config folder. + def makeFromCurrent(self) -> None: cura_release = CuraApplication.getInstance().getVersion() version_data_dir = Resources.getDataStoragePath() @@ -57,6 +54,8 @@ class Backup: # Create an empty buffer and write the archive to it. buffer = io.BytesIO() archive = self._makeArchive(buffer, version_data_dir) + if archive is None: + return files = archive.namelist() # Count the metadata items. We do this in a rather naive way at the moment. @@ -75,12 +74,10 @@ class Backup: "plugin_count": str(plugin_count) } + ## Make a full archive from the given root path with the given name. + # \param root_path The root directory to archive recursively. + # \return The archive as bytes. def _makeArchive(self, buffer: "io.BytesIO", root_path: str) -> Optional[ZipFile]: - """ - Make a full archive from the given root path with the given name. - :param root_path: The root directory to archive recursively. - :return: The archive as bytes. - """ ignore_string = re.compile("|".join(self.IGNORED_FILES)) try: archive = ZipFile(buffer, "w", ZIP_DEFLATED) @@ -99,15 +96,13 @@ class Backup: "Could not create archive from user data directory: {}".format(error))) return None + ## Show a UI message. def _showMessage(self, message: str) -> None: - """Show a UI message""" Message(message, title=self.catalog.i18nc("@info:title", "Backup"), lifetime=30).show() + ## Restore this back-up. + # \return Whether we had success or not. def restore(self) -> bool: - """ - Restore this backups - :return: A boolean whether we had success or not. - """ if not self.zip_file or not self.meta_data or not self.meta_data.get("cura_release", None): # We can restore without the minimum required information. Logger.log("w", "Tried to restore a Cura backup without having proper data or meta data.") @@ -140,14 +135,12 @@ class Backup: return extracted + ## Extract the whole archive to the given target path. + # \param archive The archive as ZipFile. + # \param target_path The target path. + # \return Whether we had success or not. @staticmethod def _extractArchive(archive: "ZipFile", target_path: str) -> bool: - """ - Extract the whole archive to the given target path. - :param archive: The archive as ZipFile. - :param target_path: The target path. - :return: A boolean whether we had success or not. - """ Logger.log("d", "Removing current data in location: %s", target_path) Resources.factoryReset() Logger.log("d", "Extracting backup to location: %s", target_path) diff --git a/cura/Backups/BackupsManager.py b/cura/Backups/BackupsManager.py index fa75ddb587..bc560a8dd9 100644 --- a/cura/Backups/BackupsManager.py +++ b/cura/Backups/BackupsManager.py @@ -1,25 +1,24 @@ # Copyright (c) 2018 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. -from typing import Optional +from typing import Optional, Tuple from UM.Logger import Logger from cura.Backups.Backup import Backup from cura.CuraApplication import CuraApplication +## The BackupsManager is responsible for managing the creating and restoring of +# back-ups. +# +# Back-ups themselves are represented in a different class. class BackupsManager: - """ - The BackupsManager is responsible for managing the creating and restoring of backups. - Backups themselves are represented in a different class. - """ def __init__(self): self._application = CuraApplication.getInstance() - def createBackup(self) -> (Optional[bytes], Optional[dict]): - """ - Get a backup of the current configuration. - :return: A Tuple containing a ZipFile (the actual backup) and a dict containing some meta data (like version). - """ + ## Get a back-up of the current configuration. + # \return A tuple containing a ZipFile (the actual back-up) and a dict + # containing some metadata (like version). + def createBackup(self) -> Tuple[Optional[bytes], Optional[dict]]: self._disableAutoSave() backup = Backup() backup.makeFromCurrent() @@ -27,12 +26,11 @@ class BackupsManager: # We don't return a Backup here because we want plugins only to interact with our API and not full objects. return backup.zip_file, backup.meta_data + ## Restore a back-up from a given ZipFile. + # \param zip_file A bytes object containing the actual back-up. + # \param meta_data A dict containing some metadata that is needed to + # restore the back-up correctly. def restoreBackup(self, zip_file: bytes, meta_data: dict) -> None: - """ - Restore a backup from a given ZipFile. - :param zip_file: A bytes object containing the actual backup. - :param meta_data: A dict containing some meta data that is needed to restore the backup correctly. - """ if not meta_data.get("cura_release", None): # If there is no "cura_release" specified in the meta data, we don't execute a backup restore. Logger.log("w", "Tried to restore a backup without specifying a Cura version number.") @@ -47,10 +45,11 @@ class BackupsManager: # We don't want to store the data at this point as that would override the just-restored backup. self._application.windowClosed(save_data=False) + ## Here we try to disable the auto-save plug-in as it might interfere with + # restoring a back-up. def _disableAutoSave(self): - """Here we try to disable the auto-save plugin as it might interfere with restoring a backup.""" self._application.setSaveDataEnabled(False) + ## Re-enable auto-save after we're done. def _enableAutoSave(self): - """Re-enable auto-save after we're done.""" self._application.setSaveDataEnabled(True) diff --git a/cura/CuraApplication.py b/cura/CuraApplication.py index e34d0a07ab..9db53c0836 100755 --- a/cura/CuraApplication.py +++ b/cura/CuraApplication.py @@ -225,6 +225,8 @@ class CuraApplication(QtApplication): from cura.Settings.CuraContainerRegistry import CuraContainerRegistry self._container_registry_class = CuraContainerRegistry + from cura.CuraPackageManager import CuraPackageManager + self._package_manager_class = CuraPackageManager # Adds command line options to the command line parser. This should be called after the application is created and # before the pre-start. @@ -511,7 +513,6 @@ class CuraApplication(QtApplication): preferences.addPreference("cura/asked_dialog_on_project_save", False) preferences.addPreference("cura/choice_on_profile_override", "always_ask") preferences.addPreference("cura/choice_on_open_project", "always_ask") - preferences.addPreference("cura/not_arrange_objects_on_load", False) preferences.addPreference("cura/use_multi_build_plate", False) preferences.addPreference("cura/currency", "€") @@ -1601,9 +1602,7 @@ class CuraApplication(QtApplication): self._currently_loading_files.remove(filename) self.fileLoaded.emit(filename) - arrange_objects_on_load = ( - not self.getPreferences().getValue("cura/use_multi_build_plate") or - not self.getPreferences().getValue("cura/not_arrange_objects_on_load")) + arrange_objects_on_load = not self.getPreferences().getValue("cura/use_multi_build_plate") target_build_plate = self.getMultiBuildPlateModel().activeBuildPlate if arrange_objects_on_load else -1 root = self.getController().getScene().getRoot() @@ -1676,7 +1675,7 @@ class CuraApplication(QtApplication): return # Step is for skipping tests to make it a lot faster. it also makes the outcome somewhat rougher - node, _ = arranger.findNodePlacement(node, offset_shape_arr, hull_shape_arr, step = 10) + arranger.findNodePlacement(node, offset_shape_arr, hull_shape_arr, step = 10) # This node is deep copied from some other node which already has a BuildPlateDecorator, but the deepcopy # of BuildPlateDecorator produces one that's associated with build plate -1. So, here we need to check if diff --git a/cura/CuraPackageManager.py b/cura/CuraPackageManager.py index 49f095941a..f65633ed66 100644 --- a/cura/CuraPackageManager.py +++ b/cura/CuraPackageManager.py @@ -7,8 +7,11 @@ from UM.Resources import Resources #To find storage paths for some resource type class CuraPackageManager(PackageManager): - def __init__(self, parent = None): - super().__init__(parent) + def __init__(self, application, parent = None): + super().__init__(application, parent) + def initialize(self): self._installation_dirs_dict["materials"] = Resources.getStoragePath(CuraApplication.ResourceTypes.MaterialInstanceContainer) self._installation_dirs_dict["qualities"] = Resources.getStoragePath(CuraApplication.ResourceTypes.QualityInstanceContainer) + + super().initialize() diff --git a/cura/Machines/ContainerNode.py b/cura/Machines/ContainerNode.py index 44e2d6875d..944579e354 100644 --- a/cura/Machines/ContainerNode.py +++ b/cura/Machines/ContainerNode.py @@ -1,7 +1,7 @@ # Copyright (c) 2018 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. -from typing import Optional +from typing import Optional, Any, Dict, Union, TYPE_CHECKING from collections import OrderedDict @@ -9,6 +9,9 @@ from UM.ConfigurationErrorMessage import ConfigurationErrorMessage from UM.Logger import Logger from UM.Settings.InstanceContainer import InstanceContainer +if TYPE_CHECKING: + from cura.Machines.QualityGroup import QualityGroup + ## # A metadata / container combination. Use getContainer() to get the container corresponding to the metadata. @@ -23,10 +26,16 @@ from UM.Settings.InstanceContainer import InstanceContainer class ContainerNode: __slots__ = ("metadata", "container", "children_map") - def __init__(self, metadata: Optional[dict] = None): + def __init__(self, metadata: Optional[Dict[str, Any]] = None) -> None: self.metadata = metadata self.container = None - self.children_map = OrderedDict() + self.children_map = OrderedDict() #type: OrderedDict[str, Union[QualityGroup, ContainerNode]] + + ## Get an entry value from the metadata + def getMetaDataEntry(self, entry: str, default: Any = None) -> Any: + if self.metadata is None: + return default + return self.metadata.get(entry, default) def getChildNode(self, child_key: str) -> Optional["ContainerNode"]: return self.children_map.get(child_key) @@ -50,4 +59,4 @@ class ContainerNode: return self.container def __str__(self) -> str: - return "%s[%s]" % (self.__class__.__name__, self.metadata.get("id")) + return "%s[%s]" % (self.__class__.__name__, self.getMetaDataEntry("id")) diff --git a/cura/Machines/MaterialGroup.py b/cura/Machines/MaterialGroup.py index 93c8a227a8..b57e0e1808 100644 --- a/cura/Machines/MaterialGroup.py +++ b/cura/Machines/MaterialGroup.py @@ -18,10 +18,10 @@ from cura.Machines.MaterialNode import MaterialNode #For type checking. class MaterialGroup: __slots__ = ("name", "is_read_only", "root_material_node", "derived_material_node_list") - def __init__(self, name: str, root_material_node: MaterialNode): + def __init__(self, name: str, root_material_node: MaterialNode) -> None: self.name = name self.is_read_only = False - self.root_material_node = root_material_node + self.root_material_node = root_material_node # type: MaterialNode self.derived_material_node_list = [] #type: List[MaterialNode] def __str__(self) -> str: diff --git a/cura/Machines/MaterialManager.py b/cura/Machines/MaterialManager.py index ff666f392d..49ea10cf03 100644 --- a/cura/Machines/MaterialManager.py +++ b/cura/Machines/MaterialManager.py @@ -4,6 +4,7 @@ from collections import defaultdict, OrderedDict import copy import uuid +from typing import Dict from typing import Optional, TYPE_CHECKING from PyQt5.Qt import QTimer, QObject, pyqtSignal, pyqtSlot @@ -263,7 +264,7 @@ class MaterialManager(QObject): # Return a dict with all root material IDs (k) and ContainerNodes (v) that's suitable for the given setup. # def getAvailableMaterials(self, machine_definition: "DefinitionContainer", extruder_variant_name: Optional[str], - diameter: float) -> dict: + diameter: float) -> Dict[str, MaterialNode]: # round the diameter to get the approximate diameter rounded_diameter = str(round(diameter)) if rounded_diameter not in self._diameter_machine_variant_material_map: @@ -288,7 +289,7 @@ class MaterialManager(QObject): # 3. generic material (for fdmprinter) machine_exclude_materials = machine_definition.getMetaDataEntry("exclude_materials", []) - material_id_metadata_dict = dict() + material_id_metadata_dict = dict() # type: Dict[str, MaterialNode] for node in nodes_to_check: if node is not None: # Only exclude the materials that are explicitly specified in the "exclude_materials" field. @@ -434,7 +435,7 @@ class MaterialManager(QObject): nodes_to_remove = [material_group.root_material_node] + material_group.derived_material_node_list for node in nodes_to_remove: - self._container_registry.removeContainer(node.metadata["id"]) + self._container_registry.removeContainer(node.getMetaDataEntry("id", "")) # # Methods for GUI @@ -445,22 +446,27 @@ class MaterialManager(QObject): # @pyqtSlot("QVariant", str) def setMaterialName(self, material_node: "MaterialNode", name: str): - root_material_id = material_node.metadata["base_file"] + root_material_id = material_node.getMetaDataEntry("base_file") + if root_material_id is None: + return if self._container_registry.isReadOnly(root_material_id): Logger.log("w", "Cannot set name of read-only container %s.", root_material_id) return material_group = self.getMaterialGroup(root_material_id) if material_group: - material_group.root_material_node.getContainer().setName(name) + container = material_group.root_material_node.getContainer() + if container: + container.setName(name) # # Removes the given material. # @pyqtSlot("QVariant") def removeMaterial(self, material_node: "MaterialNode"): - root_material_id = material_node.metadata["base_file"] - self.removeMaterialByRootId(root_material_id) + root_material_id = material_node.getMetaDataEntry("base_file") + if root_material_id is not None: + self.removeMaterialByRootId(root_material_id) # # Creates a duplicate of a material, which has the same GUID and base_file metadata. @@ -539,6 +545,10 @@ class MaterialManager(QObject): root_material_id = self.getRootMaterialIDForDiameter(root_material_id, approximate_diameter) material_group = self.getMaterialGroup(root_material_id) + if not material_group: # This should never happen + Logger.log("w", "Cannot get the material group of %s.", root_material_id) + return "" + # Create a new ID & container to hold the data. new_id = self._container_registry.uniqueName("custom_material") new_metadata = {"name": catalog.i18nc("@label", "Custom Material"), diff --git a/cura/Machines/MaterialNode.py b/cura/Machines/MaterialNode.py index fde11186c2..04423d7b2c 100644 --- a/cura/Machines/MaterialNode.py +++ b/cura/Machines/MaterialNode.py @@ -1,7 +1,6 @@ # Copyright (c) 2018 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. - -from typing import Optional +from typing import Optional, Dict from .ContainerNode import ContainerNode @@ -15,7 +14,6 @@ from .ContainerNode import ContainerNode class MaterialNode(ContainerNode): __slots__ = ("material_map", "children_map") - def __init__(self, metadata: Optional[dict] = None): + def __init__(self, metadata: Optional[dict] = None) -> None: super().__init__(metadata = metadata) - self.material_map = {} # material_root_id -> material_node - self.children_map = {} # mapping for the child nodes + self.material_map = {} # type: Dict[str, MaterialNode] # material_root_id -> material_node diff --git a/cura/Machines/Models/QualityProfilesDropDownMenuModel.py b/cura/Machines/Models/QualityProfilesDropDownMenuModel.py index d8c4b668cf..02de23b10a 100644 --- a/cura/Machines/Models/QualityProfilesDropDownMenuModel.py +++ b/cura/Machines/Models/QualityProfilesDropDownMenuModel.py @@ -83,7 +83,7 @@ class QualityProfilesDropDownMenuModel(ListModel): self.setItems(item_list) - def _fetchLayerHeight(self, quality_group: "QualityGroup"): + def _fetchLayerHeight(self, quality_group: "QualityGroup") -> float: global_stack = self._machine_manager.activeMachine if not self._layer_height_unit: unit = global_stack.definition.getProperty("layer_height", "unit") @@ -94,10 +94,12 @@ class QualityProfilesDropDownMenuModel(ListModel): default_layer_height = global_stack.definition.getProperty("layer_height", "value") # Get layer_height from the quality profile for the GlobalStack + if quality_group.node_for_global is None: + return float(default_layer_height) container = quality_group.node_for_global.getContainer() layer_height = default_layer_height - if container.hasProperty("layer_height", "value"): + if container and container.hasProperty("layer_height", "value"): layer_height = container.getProperty("layer_height", "value") else: # Look for layer_height in the GlobalStack from material -> definition diff --git a/cura/Machines/QualityChangesGroup.py b/cura/Machines/QualityChangesGroup.py index 5ff5af3657..2d0e655ed8 100644 --- a/cura/Machines/QualityChangesGroup.py +++ b/cura/Machines/QualityChangesGroup.py @@ -1,22 +1,27 @@ # Copyright (c) 2018 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. +from typing import TYPE_CHECKING + from UM.Application import Application from UM.ConfigurationErrorMessage import ConfigurationErrorMessage from .QualityGroup import QualityGroup +if TYPE_CHECKING: + from cura.Machines.QualityNode import QualityNode + class QualityChangesGroup(QualityGroup): - def __init__(self, name: str, quality_type: str, parent = None): + def __init__(self, name: str, quality_type: str, parent = None) -> None: super().__init__(name, quality_type, parent) self._container_registry = Application.getInstance().getContainerRegistry() def addNode(self, node: "QualityNode"): - extruder_position = node.metadata.get("position") + extruder_position = node.getMetaDataEntry("position") if extruder_position is None and self.node_for_global is not None or extruder_position in self.nodes_for_extruders: #We would be overwriting another node. - ConfigurationErrorMessage.getInstance().addFaultyContainers(node.metadata["id"]) + ConfigurationErrorMessage.getInstance().addFaultyContainers(node.getMetaDataEntry("id")) return if extruder_position is None: #Then we're a global quality changes profile. diff --git a/cura/Machines/QualityGroup.py b/cura/Machines/QualityGroup.py index b1c564fadf..90ef63af51 100644 --- a/cura/Machines/QualityGroup.py +++ b/cura/Machines/QualityGroup.py @@ -4,7 +4,7 @@ from typing import Dict, Optional, List, Set from PyQt5.QtCore import QObject, pyqtSlot - +from cura.Machines.ContainerNode import ContainerNode # # A QualityGroup represents a group of containers that must be applied to each ContainerStack when it's used. @@ -24,8 +24,8 @@ class QualityGroup(QObject): def __init__(self, name: str, quality_type: str, parent = None) -> None: super().__init__(parent) self.name = name - self.node_for_global = None # type: Optional["QualityGroup"] - self.nodes_for_extruders = {} # type: Dict[int, "QualityGroup"] + self.node_for_global = None # type: Optional[ContainerNode] + self.nodes_for_extruders = {} # type: Dict[int, ContainerNode] self.quality_type = quality_type self.is_available = False @@ -38,10 +38,12 @@ class QualityGroup(QObject): for node in [self.node_for_global] + list(self.nodes_for_extruders.values()): if node is None: continue - result.update(node.getContainer().getAllKeys()) + container = node.getContainer() + if container: + result.update(container.getAllKeys()) return result - def getAllNodes(self) -> List["QualityGroup"]: + def getAllNodes(self) -> List[ContainerNode]: result = [] if self.node_for_global is not None: result.append(self.node_for_global) diff --git a/cura/Machines/QualityManager.py b/cura/Machines/QualityManager.py index cb0a2f5922..8033057f77 100644 --- a/cura/Machines/QualityManager.py +++ b/cura/Machines/QualityManager.py @@ -1,7 +1,7 @@ # Copyright (c) 2018 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. -from typing import TYPE_CHECKING, Optional +from typing import TYPE_CHECKING, Optional, cast from PyQt5.QtCore import QObject, QTimer, pyqtSignal, pyqtSlot @@ -90,7 +90,7 @@ class QualityManager(QObject): if definition_id not in self._machine_variant_material_quality_type_to_quality_dict: self._machine_variant_material_quality_type_to_quality_dict[definition_id] = QualityNode() - machine_node = self._machine_variant_material_quality_type_to_quality_dict[definition_id] + machine_node = cast(QualityNode, self._machine_variant_material_quality_type_to_quality_dict[definition_id]) if is_global_quality: # For global qualities, save data in the machine node @@ -102,7 +102,7 @@ class QualityManager(QObject): # too. if variant_name not in machine_node.children_map: machine_node.children_map[variant_name] = QualityNode() - variant_node = machine_node.children_map[variant_name] + variant_node = cast(QualityNode, machine_node.children_map[variant_name]) if root_material_id is None: # If only variant_name is specified but material is not, add the quality/quality_changes metadata @@ -114,7 +114,7 @@ class QualityManager(QObject): # material node. if root_material_id not in variant_node.children_map: variant_node.children_map[root_material_id] = QualityNode() - material_node = variant_node.children_map[root_material_id] + material_node = cast(QualityNode, variant_node.children_map[root_material_id]) material_node.addQualityMetadata(quality_type, metadata) @@ -123,7 +123,7 @@ class QualityManager(QObject): if root_material_id is not None: if root_material_id not in machine_node.children_map: machine_node.children_map[root_material_id] = QualityNode() - material_node = machine_node.children_map[root_material_id] + material_node = cast(QualityNode, machine_node.children_map[root_material_id]) material_node.addQualityMetadata(quality_type, metadata) @@ -351,7 +351,7 @@ class QualityManager(QObject): def removeQualityChangesGroup(self, quality_changes_group: "QualityChangesGroup"): Logger.log("i", "Removing quality changes group [%s]", quality_changes_group.name) for node in quality_changes_group.getAllNodes(): - self._container_registry.removeContainer(node.metadata["id"]) + self._container_registry.removeContainer(node.getMetaDataEntry("id")) # # Rename a set of quality changes containers. Returns the new name. @@ -365,7 +365,9 @@ class QualityManager(QObject): new_name = self._container_registry.uniqueName(new_name) for node in quality_changes_group.getAllNodes(): - node.getContainer().setName(new_name) + container = node.getContainer() + if container: + container.setName(new_name) quality_changes_group.name = new_name diff --git a/cura/Machines/QualityNode.py b/cura/Machines/QualityNode.py index a30e219da3..f384ee7825 100644 --- a/cura/Machines/QualityNode.py +++ b/cura/Machines/QualityNode.py @@ -1,7 +1,7 @@ # Copyright (c) 2018 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. -from typing import Optional +from typing import Optional, Dict, cast from .ContainerNode import ContainerNode from .QualityChangesGroup import QualityChangesGroup @@ -12,9 +12,9 @@ from .QualityChangesGroup import QualityChangesGroup # class QualityNode(ContainerNode): - def __init__(self, metadata: Optional[dict] = None): + def __init__(self, metadata: Optional[dict] = None) -> None: super().__init__(metadata = metadata) - self.quality_type_map = {} # quality_type -> QualityNode for InstanceContainer + self.quality_type_map = {} # type: Dict[str, QualityNode] # quality_type -> QualityNode for InstanceContainer def addQualityMetadata(self, quality_type: str, metadata: dict): if quality_type not in self.quality_type_map: @@ -32,4 +32,4 @@ class QualityNode(ContainerNode): if name not in quality_type_node.children_map: quality_type_node.children_map[name] = QualityChangesGroup(name, quality_type) quality_changes_group = quality_type_node.children_map[name] - quality_changes_group.addNode(QualityNode(metadata)) + cast(QualityChangesGroup, quality_changes_group).addNode(QualityNode(metadata)) diff --git a/cura/MultiplyObjectsJob.py b/cura/MultiplyObjectsJob.py index 57db7734e7..3cbf795952 100644 --- a/cura/MultiplyObjectsJob.py +++ b/cura/MultiplyObjectsJob.py @@ -64,10 +64,11 @@ class MultiplyObjectsJob(Job): arranger.resetLastPriority() for i in range(self._count): # We do place the nodes one by one, as we want to yield in between. + new_node = copy.deepcopy(node) + solution_found = False if not node_too_big: - new_node, solution_found = arranger.findNodePlacement(current_node, offset_shape_arr, hull_shape_arr) - else: - new_node = copy.deepcopy(node) + solution_found = arranger.findNodePlacement(new_node, offset_shape_arr, hull_shape_arr) + if node_too_big or not solution_found: found_solution_for_all = False new_location = new_node.getPosition() diff --git a/cura/PickingPass.py b/cura/PickingPass.py index 2a1abe8f63..40a0aaf949 100644 --- a/cura/PickingPass.py +++ b/cura/PickingPass.py @@ -16,7 +16,7 @@ from UM.Scene.Iterator.DepthFirstIterator import DepthFirstIterator # # Note that in order to increase precision, the 24 bit depth value is encoded into all three of the R,G & B channels class PickingPass(RenderPass): - def __init__(self, width: int, height: int): + def __init__(self, width: int, height: int) -> None: super().__init__("picking", width, height) self._renderer = Application.getInstance().getRenderer() diff --git a/cura/PlatformPhysics.py b/cura/PlatformPhysics.py index 6b539a4574..8ddcdbfb2f 100755 --- a/cura/PlatformPhysics.py +++ b/cura/PlatformPhysics.py @@ -8,6 +8,7 @@ from UM.Scene.SceneNode import SceneNode from UM.Scene.Iterator.BreadthFirstIterator import BreadthFirstIterator from UM.Math.Vector import Vector from UM.Scene.Selection import Selection +from UM.Scene.SceneNodeSettings import SceneNodeSettings from cura.Scene.ConvexHullDecorator import ConvexHullDecorator @@ -80,6 +81,10 @@ class PlatformPhysics: # only push away objects if this node is a printing mesh if not node.callDecoration("isNonPrintingMesh") and Application.getInstance().getPreferences().getValue("physics/automatic_push_free"): + # Do not move locked nodes + if node.getSetting(SceneNodeSettings.LockPosition): + continue + # Check for collisions between convex hulls for other_node in BreadthFirstIterator(root): # Ignore root, ourselves and anything that is not a normal SceneNode. diff --git a/cura/PreviewPass.py b/cura/PreviewPass.py index 436e2719b7..22f50890a3 100644 --- a/cura/PreviewPass.py +++ b/cura/PreviewPass.py @@ -33,7 +33,7 @@ def prettier_color(color_list): # # This is useful to get a preview image of a scene taken from a different location as the active camera. class PreviewPass(RenderPass): - def __init__(self, width: int, height: int): + def __init__(self, width: int, height: int) -> None: super().__init__("preview", width, height, 0) self._camera = None # type: Optional[Camera] @@ -53,20 +53,23 @@ class PreviewPass(RenderPass): def render(self) -> None: if not self._shader: self._shader = OpenGL.getInstance().createShaderProgram(Resources.getPath(Resources.Shaders, "overhang.shader")) - self._shader.setUniformValue("u_overhangAngle", 1.0) - self._shader.setUniformValue("u_ambientColor", [0.1, 0.1, 0.1, 1.0]) - self._shader.setUniformValue("u_specularColor", [0.6, 0.6, 0.6, 1.0]) - self._shader.setUniformValue("u_shininess", 20.0) + if self._shader: + self._shader.setUniformValue("u_overhangAngle", 1.0) + self._shader.setUniformValue("u_ambientColor", [0.1, 0.1, 0.1, 1.0]) + self._shader.setUniformValue("u_specularColor", [0.6, 0.6, 0.6, 1.0]) + self._shader.setUniformValue("u_shininess", 20.0) if not self._non_printing_shader: - self._non_printing_shader = OpenGL.getInstance().createShaderProgram(Resources.getPath(Resources.Shaders, "transparent_object.shader")) - self._non_printing_shader.setUniformValue("u_diffuseColor", [0.5, 0.5, 0.5, 0.5]) - self._non_printing_shader.setUniformValue("u_opacity", 0.6) + if self._non_printing_shader: + self._non_printing_shader = OpenGL.getInstance().createShaderProgram(Resources.getPath(Resources.Shaders, "transparent_object.shader")) + self._non_printing_shader.setUniformValue("u_diffuseColor", [0.5, 0.5, 0.5, 0.5]) + self._non_printing_shader.setUniformValue("u_opacity", 0.6) if not self._support_mesh_shader: self._support_mesh_shader = OpenGL.getInstance().createShaderProgram(Resources.getPath(Resources.Shaders, "striped.shader")) - self._support_mesh_shader.setUniformValue("u_vertical_stripes", True) - self._support_mesh_shader.setUniformValue("u_width", 5.0) + if self._support_mesh_shader: + self._support_mesh_shader.setUniformValue("u_vertical_stripes", True) + self._support_mesh_shader.setUniformValue("u_width", 5.0) self._gl.glClearColor(0.0, 0.0, 0.0, 0.0) self._gl.glClear(self._gl.GL_COLOR_BUFFER_BIT | self._gl.GL_DEPTH_BUFFER_BIT) diff --git a/cura/PrinterOutput/GenericOutputController.py b/cura/PrinterOutput/GenericOutputController.py index dd1448a329..e6310e5bff 100644 --- a/cura/PrinterOutput/GenericOutputController.py +++ b/cura/PrinterOutput/GenericOutputController.py @@ -1,13 +1,15 @@ # Copyright (c) 2018 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. +from typing import TYPE_CHECKING + from cura.PrinterOutput.PrinterOutputController import PrinterOutputController from PyQt5.QtCore import QTimer -MYPY = False -if MYPY: +if TYPE_CHECKING: from cura.PrinterOutput.PrintJobOutputModel import PrintJobOutputModel from cura.PrinterOutput.PrinterOutputModel import PrinterOutputModel + from cura.PrinterOutput.ExtruderOutputModel import ExtruderOutputModel class GenericOutputController(PrinterOutputController): diff --git a/cura/PrinterOutput/NetworkedPrinterOutputDevice.py b/cura/PrinterOutput/NetworkedPrinterOutputDevice.py index 40dd709f03..376d8cbdc8 100644 --- a/cura/PrinterOutput/NetworkedPrinterOutputDevice.py +++ b/cura/PrinterOutput/NetworkedPrinterOutputDevice.py @@ -32,12 +32,12 @@ class NetworkedPrinterOutputDevice(PrinterOutputDevice): def __init__(self, device_id, address: str, properties: Dict[bytes, bytes], parent: QObject = None) -> None: super().__init__(device_id = device_id, parent = parent) self._manager = None # type: QNetworkAccessManager - self._last_manager_create_time = None # type: float + self._last_manager_create_time = None # type: Optional[float] self._recreate_network_manager_time = 30 self._timeout_time = 10 # After how many seconds of no response should a timeout occur? - self._last_response_time = None # type: float - self._last_request_time = None # type: float + self._last_response_time = None # type: Optional[float] + self._last_request_time = None # type: Optional[float] self._api_prefix = "" self._address = address @@ -146,12 +146,14 @@ class NetworkedPrinterOutputDevice(PrinterOutputDevice): if time_since_last_response > self._recreate_network_manager_time: if self._last_manager_create_time is None: self._createNetworkManager() - if time() - self._last_manager_create_time > self._recreate_network_manager_time: + elif time() - self._last_manager_create_time > self._recreate_network_manager_time: self._createNetworkManager() + assert(self._manager is not None) elif self._connection_state == ConnectionState.closed: # Go out of timeout. - self.setConnectionState(self._connection_state_before_timeout) - self._connection_state_before_timeout = None + if self._connection_state_before_timeout is not None: # sanity check, but it should never be None here + self.setConnectionState(self._connection_state_before_timeout) + self._connection_state_before_timeout = None def _createEmptyRequest(self, target: str, content_type: Optional[str] = "application/json") -> QNetworkRequest: url = QUrl("http://" + self._address + self._api_prefix + target) @@ -190,6 +192,7 @@ class NetworkedPrinterOutputDevice(PrinterOutputDevice): def put(self, target: str, data: str, on_finished: Optional[Callable[[QNetworkReply], None]]) -> None: if self._manager is None: self._createNetworkManager() + assert(self._manager is not None) request = self._createEmptyRequest(target) self._last_request_time = time() reply = self._manager.put(request, data.encode()) @@ -198,6 +201,7 @@ class NetworkedPrinterOutputDevice(PrinterOutputDevice): def get(self, target: str, on_finished: Optional[Callable[[QNetworkReply], None]]) -> None: if self._manager is None: self._createNetworkManager() + assert(self._manager is not None) request = self._createEmptyRequest(target) self._last_request_time = time() reply = self._manager.get(request) @@ -206,6 +210,7 @@ class NetworkedPrinterOutputDevice(PrinterOutputDevice): def post(self, target: str, data: str, onFinished: Optional[Callable[[QNetworkReply], None]], on_progress: Callable = None) -> None: if self._manager is None: self._createNetworkManager() + assert(self._manager is not None) request = self._createEmptyRequest(target) self._last_request_time = time() reply = self._manager.post(request, data) @@ -216,6 +221,7 @@ class NetworkedPrinterOutputDevice(PrinterOutputDevice): def postFormWithParts(self, target:str, parts: List[QHttpPart], on_finished: Optional[Callable[[QNetworkReply], None]], on_progress: Callable = None) -> None: if self._manager is None: self._createNetworkManager() + assert(self._manager is not None) request = self._createEmptyRequest(target, content_type=None) multi_post_part = QHttpMultiPart(QHttpMultiPart.FormDataType) for part in parts: diff --git a/cura/PrinterOutputDevice.py b/cura/PrinterOutputDevice.py index bdac80e61c..ae749ba0dc 100644 --- a/cura/PrinterOutputDevice.py +++ b/cura/PrinterOutputDevice.py @@ -224,5 +224,5 @@ class PrinterOutputDevice(QObject, OutputDevice): ## Get the name of device firmware # # This name can be used to define device type - def getFirmwareName(self) -> str: + def getFirmwareName(self) -> Optional[str]: return self._firmware_name \ No newline at end of file diff --git a/cura/Scene/CuraSceneController.py b/cura/Scene/CuraSceneController.py index 749c5257a2..4b19271538 100644 --- a/cura/Scene/CuraSceneController.py +++ b/cura/Scene/CuraSceneController.py @@ -16,7 +16,7 @@ from UM.Signal import Signal class CuraSceneController(QObject): activeBuildPlateChanged = Signal() - def __init__(self, objects_model: ObjectsModel, multi_build_plate_model: MultiBuildPlateModel): + def __init__(self, objects_model: ObjectsModel, multi_build_plate_model: MultiBuildPlateModel) -> None: super().__init__() self._objects_model = objects_model diff --git a/cura/Scene/CuraSceneNode.py b/cura/Scene/CuraSceneNode.py index b6f9daaa67..259c273329 100644 --- a/cura/Scene/CuraSceneNode.py +++ b/cura/Scene/CuraSceneNode.py @@ -39,6 +39,9 @@ class CuraSceneNode(SceneNode): # TODO The best way to do it is by adding the setActiveExtruder decorator to every node when is loaded def getPrintingExtruder(self) -> Optional[ExtruderStack]: global_container_stack = Application.getInstance().getGlobalContainerStack() + if global_container_stack is None: + return None + per_mesh_stack = self.callDecoration("getStack") extruders = list(global_container_stack.extruders.values()) @@ -85,10 +88,10 @@ class CuraSceneNode(SceneNode): ## Return if the provided bbox collides with the bbox of this scene node def collidesWithBbox(self, check_bbox: AxisAlignedBox) -> bool: bbox = self.getBoundingBox() - - # Mark the node as outside the build volume if the bounding box test fails. - if check_bbox.intersectsBox(bbox) != AxisAlignedBox.IntersectionResult.FullIntersection: - return True + if bbox is not None: + # Mark the node as outside the build volume if the bounding box test fails. + if check_bbox.intersectsBox(bbox) != AxisAlignedBox.IntersectionResult.FullIntersection: + return True return False diff --git a/cura/Settings/ContainerManager.py b/cura/Settings/ContainerManager.py index ea2821ce25..238f4dfc32 100644 --- a/cura/Settings/ContainerManager.py +++ b/cura/Settings/ContainerManager.py @@ -42,6 +42,7 @@ class ContainerManager(QObject): self._container_registry = self._application.getContainerRegistry() self._machine_manager = self._application.getMachineManager() self._material_manager = self._application.getMaterialManager() + self._quality_manager = self._application.getQualityManager() self._container_name_filters = {} @pyqtSlot(str, str, result=str) @@ -312,11 +313,19 @@ class ContainerManager(QObject): self._machine_manager.blurSettings.emit() - global_stack = self._machine_manager.activeMachine + current_quality_changes_name = global_stack.qualityChanges.getName() + current_quality_type = global_stack.quality.getMetaDataEntry("quality_type") extruder_stacks = list(global_stack.extruders.values()) for stack in [global_stack] + extruder_stacks: # Find the quality_changes container for this stack and merge the contents of the top container into it. quality_changes = stack.qualityChanges + + if quality_changes.getId() == "empty_quality_changes": + quality_changes = self._quality_manager._createQualityChanges(current_quality_type, current_quality_changes_name, + global_stack, stack) + self._container_registry.addContainer(quality_changes) + stack.qualityChanges = quality_changes + if not quality_changes or self._container_registry.isReadOnly(quality_changes.getId()): Logger.log("e", "Could not update quality of a nonexistant or read only quality profile in stack %s", stack.getId()) continue @@ -459,7 +468,7 @@ class ContainerManager(QObject): container_list = [n.getContainer() for n in quality_changes_group.getAllNodes() if n.getContainer() is not None] self._container_registry.exportQualityProfile(container_list, path, file_type) - __instance = None + __instance = None # type: ContainerManager @classmethod def getInstance(cls, *args, **kwargs) -> "ContainerManager": diff --git a/cura/Settings/CuraContainerRegistry.py b/cura/Settings/CuraContainerRegistry.py index 916caadfe9..6cbb3036f8 100644 --- a/cura/Settings/CuraContainerRegistry.py +++ b/cura/Settings/CuraContainerRegistry.py @@ -356,6 +356,8 @@ class CuraContainerRegistry(ContainerRegistry): return catalog.i18nc("@info:status", "Profile is missing a quality type.") global_stack = Application.getInstance().getGlobalContainerStack() + if global_stack is None: + return None definition_id = getMachineDefinitionIDForQualitySearch(global_stack.definition) profile.setDefinition(definition_id) diff --git a/cura/Settings/ExtruderManager.py b/cura/Settings/ExtruderManager.py index 0f8cb9ae23..84294240f5 100755 --- a/cura/Settings/ExtruderManager.py +++ b/cura/Settings/ExtruderManager.py @@ -16,7 +16,7 @@ from UM.Settings.SettingInstance import SettingInstance from UM.Settings.ContainerStack import ContainerStack from UM.Settings.PropertyEvaluationContext import PropertyEvaluationContext -from typing import Optional, List, TYPE_CHECKING, Union +from typing import Optional, List, TYPE_CHECKING, Union, Dict if TYPE_CHECKING: from cura.Settings.ExtruderStack import ExtruderStack @@ -43,7 +43,6 @@ class ExtruderManager(QObject): self._selected_object_extruders = [] self._addCurrentMachineExtruders() - #Application.getInstance().globalContainerStackChanged.connect(self._globalContainerStackChanged) Selection.selectionChanged.connect(self.resetSelectedObjectExtruders) ## Signal to notify other components when the list of extruders for a machine definition changes. @@ -60,42 +59,47 @@ class ExtruderManager(QObject): # \return The unique ID of the currently active extruder stack. @pyqtProperty(str, notify = activeExtruderChanged) def activeExtruderStackId(self) -> Optional[str]: - if not Application.getInstance().getGlobalContainerStack(): + if not self._application.getGlobalContainerStack(): return None # No active machine, so no active extruder. try: - return self._extruder_trains[Application.getInstance().getGlobalContainerStack().getId()][str(self._active_extruder_index)].getId() + return self._extruder_trains[self._application.getGlobalContainerStack().getId()][str(self._active_extruder_index)].getId() except KeyError: # Extruder index could be -1 if the global tab is selected, or the entry doesn't exist if the machine definition is wrong. return None ## Return extruder count according to extruder trains. @pyqtProperty(int, notify = extrudersChanged) def extruderCount(self): - if not Application.getInstance().getGlobalContainerStack(): + if not self._application.getGlobalContainerStack(): return 0 # No active machine, so no extruders. try: - return len(self._extruder_trains[Application.getInstance().getGlobalContainerStack().getId()]) + return len(self._extruder_trains[self._application.getGlobalContainerStack().getId()]) except KeyError: return 0 ## Gets a dict with the extruder stack ids with the extruder number as the key. @pyqtProperty("QVariantMap", notify = extrudersChanged) - def extruderIds(self): + def extruderIds(self) -> Dict[str, str]: extruder_stack_ids = {} - global_stack_id = Application.getInstance().getGlobalContainerStack().getId() + global_container_stack = self._application.getGlobalContainerStack() + if global_container_stack: + global_stack_id = global_container_stack.getId() - if global_stack_id in self._extruder_trains: - for position in self._extruder_trains[global_stack_id]: - extruder_stack_ids[position] = self._extruder_trains[global_stack_id][position].getId() + if global_stack_id in self._extruder_trains: + for position in self._extruder_trains[global_stack_id]: + extruder_stack_ids[position] = self._extruder_trains[global_stack_id][position].getId() return extruder_stack_ids @pyqtSlot(str, result = str) def getQualityChangesIdByExtruderStackId(self, extruder_stack_id: str) -> str: - for position in self._extruder_trains[Application.getInstance().getGlobalContainerStack().getId()]: - extruder = self._extruder_trains[Application.getInstance().getGlobalContainerStack().getId()][position] - if extruder.getId() == extruder_stack_id: - return extruder.qualityChanges.getId() + global_container_stack = self._application.getGlobalContainerStack() + if global_container_stack is not None: + for position in self._extruder_trains[global_container_stack.getId()]: + extruder = self._extruder_trains[global_container_stack.getId()][position] + if extruder.getId() == extruder_stack_id: + return extruder.qualityChanges.getId() + return "" ## Changes the active extruder by index. # @@ -141,7 +145,7 @@ class ExtruderManager(QObject): selected_nodes.append(node) # Then, figure out which nodes are used by those selected nodes. - global_stack = Application.getInstance().getGlobalContainerStack() + global_stack = self._application.getGlobalContainerStack() current_extruder_trains = self._extruder_trains.get(global_stack.getId()) for node in selected_nodes: extruder = node.callDecoration("getActiveExtruder") @@ -164,7 +168,7 @@ class ExtruderManager(QObject): @pyqtSlot(result = QObject) def getActiveExtruderStack(self) -> Optional["ExtruderStack"]: - global_container_stack = Application.getInstance().getGlobalContainerStack() + global_container_stack = self._application.getGlobalContainerStack() if global_container_stack: if global_container_stack.getId() in self._extruder_trains: @@ -175,7 +179,7 @@ class ExtruderManager(QObject): ## Get an extruder stack by index def getExtruderStack(self, index) -> Optional["ExtruderStack"]: - global_container_stack = Application.getInstance().getGlobalContainerStack() + global_container_stack = self._application.getGlobalContainerStack() if global_container_stack: if global_container_stack.getId() in self._extruder_trains: if str(index) in self._extruder_trains[global_container_stack.getId()]: @@ -186,7 +190,9 @@ class ExtruderManager(QObject): def getExtruderStacks(self) -> List["ExtruderStack"]: result = [] for i in range(self.extruderCount): - result.append(self.getExtruderStack(i)) + stack = self.getExtruderStack(i) + if stack: + result.append(stack) return result def registerExtruder(self, extruder_train, machine_id): @@ -252,7 +258,7 @@ class ExtruderManager(QObject): support_bottom_enabled = False support_roof_enabled = False - scene_root = Application.getInstance().getController().getScene().getRoot() + scene_root = self._application.getController().getScene().getRoot() # If no extruders are registered in the extruder manager yet, return an empty array if len(self.extruderIds) == 0: @@ -301,10 +307,10 @@ class ExtruderManager(QObject): # The platform adhesion extruder. Not used if using none. if global_stack.getProperty("adhesion_type", "value") != "none": - extruder_nr = str(global_stack.getProperty("adhesion_extruder_nr", "value")) - if extruder_nr == "-1": - extruder_nr = Application.getInstance().getMachineManager().defaultExtruderPosition - used_extruder_stack_ids.add(self.extruderIds[extruder_nr]) + extruder_str_nr = str(global_stack.getProperty("adhesion_extruder_nr", "value")) + if extruder_str_nr == "-1": + extruder_str_nr = self._application.getMachineManager().defaultExtruderPosition + used_extruder_stack_ids.add(self.extruderIds[extruder_str_nr]) try: return [container_registry.findContainerStacks(id = stack_id)[0] for stack_id in used_extruder_stack_ids] @@ -335,7 +341,7 @@ class ExtruderManager(QObject): # The first element is the global container stack, followed by any extruder stacks. # \return \type{List[ContainerStack]} def getActiveGlobalAndExtruderStacks(self) -> Optional[List[Union["ExtruderStack", "GlobalStack"]]]: - global_stack = Application.getInstance().getGlobalContainerStack() + global_stack = self._application.getGlobalContainerStack() if not global_stack: return None @@ -347,7 +353,7 @@ class ExtruderManager(QObject): # # \return \type{List[ContainerStack]} a list of def getActiveExtruderStacks(self) -> List["ExtruderStack"]: - global_stack = Application.getInstance().getGlobalContainerStack() + global_stack = self._application.getGlobalContainerStack() if not global_stack: return [] @@ -461,10 +467,6 @@ class ExtruderManager(QObject): if global_stack.definitionChanges.hasProperty(key, "value"): global_stack.definitionChanges.removeInstance(key, postpone_emit = True) - # Update material diameter for extruders - for position in extruder_positions_to_update: - self.updateMaterialForDiameter(position, global_stack = global_stack) - ## Get all extruder values for a certain setting. # # This is exposed to SettingFunction so it can be used in value functions. @@ -556,96 +558,6 @@ class ExtruderManager(QObject): def getInstanceExtruderValues(self, key): return ExtruderManager.getExtruderValues(key) - ## Updates the material container to a material that matches the material diameter set for the printer - def updateMaterialForDiameter(self, extruder_position: int, global_stack = None): - if not global_stack: - global_stack = Application.getInstance().getGlobalContainerStack() - if not global_stack: - return - - if not global_stack.getMetaDataEntry("has_materials", False): - return - - extruder_stack = global_stack.extruders[str(extruder_position)] - - material_diameter = extruder_stack.material.getProperty("material_diameter", "value") - if not material_diameter: - # in case of "empty" material - material_diameter = 0 - - material_approximate_diameter = str(round(material_diameter)) - material_diameter = extruder_stack.definitionChanges.getProperty("material_diameter", "value") - setting_provider = extruder_stack - if not material_diameter: - if extruder_stack.definition.hasProperty("material_diameter", "value"): - material_diameter = extruder_stack.definition.getProperty("material_diameter", "value") - else: - material_diameter = global_stack.definition.getProperty("material_diameter", "value") - setting_provider = global_stack - - if isinstance(material_diameter, SettingFunction): - material_diameter = material_diameter(setting_provider) - - machine_approximate_diameter = str(round(material_diameter)) - - if material_approximate_diameter != machine_approximate_diameter: - Logger.log("i", "The the currently active material(s) do not match the diameter set for the printer. Finding alternatives.") - - if global_stack.getMetaDataEntry("has_machine_materials", False): - materials_definition = global_stack.definition.getId() - has_material_variants = global_stack.getMetaDataEntry("has_variants", False) - else: - materials_definition = "fdmprinter" - has_material_variants = False - - old_material = extruder_stack.material - search_criteria = { - "type": "material", - "approximate_diameter": machine_approximate_diameter, - "material": old_material.getMetaDataEntry("material", "value"), - "brand": old_material.getMetaDataEntry("brand", "value"), - "supplier": old_material.getMetaDataEntry("supplier", "value"), - "color_name": old_material.getMetaDataEntry("color_name", "value"), - "definition": materials_definition - } - if has_material_variants: - search_criteria["variant"] = extruder_stack.variant.getId() - - container_registry = Application.getInstance().getContainerRegistry() - empty_material = container_registry.findInstanceContainers(id = "empty_material")[0] - - if old_material == empty_material: - search_criteria.pop("material", None) - search_criteria.pop("supplier", None) - search_criteria.pop("brand", None) - search_criteria.pop("definition", None) - search_criteria["id"] = extruder_stack.getMetaDataEntry("preferred_material") - - materials = container_registry.findInstanceContainers(**search_criteria) - if not materials: - # Same material with new diameter is not found, search for generic version of the same material type - search_criteria.pop("supplier", None) - search_criteria.pop("brand", None) - search_criteria["color_name"] = "Generic" - materials = container_registry.findInstanceContainers(**search_criteria) - if not materials: - # Generic material with new diameter is not found, search for preferred material - search_criteria.pop("color_name", None) - search_criteria.pop("material", None) - search_criteria["id"] = extruder_stack.getMetaDataEntry("preferred_material") - materials = container_registry.findInstanceContainers(**search_criteria) - if not materials: - # Preferred material with new diameter is not found, search for any material - search_criteria.pop("id", None) - materials = container_registry.findInstanceContainers(**search_criteria) - if not materials: - # Just use empty material as a final fallback - materials = [empty_material] - - Logger.log("i", "Selecting new material: %s", materials[0].getId()) - - extruder_stack.material = materials[0] - ## Get the value for a setting from a specific extruder. # # This is exposed to SettingFunction to use in value functions. @@ -736,7 +648,7 @@ class ExtruderManager(QObject): return resolved_value - __instance = None + __instance = None # type: ExtruderManager @classmethod def getInstance(cls, *args, **kwargs) -> "ExtruderManager": diff --git a/cura/Settings/MachineManager.py b/cura/Settings/MachineManager.py index a4aeb10449..f5b04bd23a 100755 --- a/cura/Settings/MachineManager.py +++ b/cura/Settings/MachineManager.py @@ -53,8 +53,8 @@ class MachineManager(QObject): self._global_container_stack = None # type: Optional[GlobalStack] self._current_root_material_id = {} # type: Dict[str, str] - self._current_quality_group = None - self._current_quality_changes_group = None + self._current_quality_group = None # type: Optional[QualityGroup] + self._current_quality_changes_group = None # type: Optional[QualityChangesGroup] self._default_extruder_position = "0" # to be updated when extruders are switched on and off @@ -307,6 +307,11 @@ class MachineManager(QObject): for position, extruder in global_stack.extruders.items(): material_dict[position] = extruder.material.getMetaDataEntry("base_file") self._current_root_material_id = material_dict + + # Update materials to make sure that the diameters match with the machine's + for position in global_stack.extruders: + self.updateMaterialWithVariant(position) + global_quality = global_stack.quality quality_type = global_quality.getMetaDataEntry("quality_type") global_quality_changes = global_stack.qualityChanges @@ -626,6 +631,8 @@ class MachineManager(QObject): ## Copy the value of the setting of the current extruder to all other extruders as well as the global container. @pyqtSlot(str) def copyValueToExtruders(self, key: str) -> None: + if self._active_container_stack is None or self._global_container_stack is None: + return new_value = self._active_container_stack.getProperty(key, "value") extruder_stacks = [stack for stack in ExtruderManager.getInstance().getMachineExtruders(self._global_container_stack.getId())] @@ -637,6 +644,8 @@ class MachineManager(QObject): ## Copy the value of all manually changed settings of the current extruder to all other extruders. @pyqtSlot() def copyAllValuesToExtruders(self) -> None: + if self._active_container_stack is None or self._global_container_stack is None: + return extruder_stacks = list(self._global_container_stack.extruders.values()) for extruder_stack in extruder_stacks: if extruder_stack != self._active_container_stack: @@ -807,6 +816,8 @@ class MachineManager(QObject): return None def getIncompatibleSettingsOnEnabledExtruders(self, container: InstanceContainer) -> List[str]: + if self._global_container_stack is None: + return [] extruder_count = self._global_container_stack.getProperty("machine_extruder_count", "value") result = [] # type: List[str] for setting_instance in container.findInstances(): @@ -831,6 +842,8 @@ class MachineManager(QObject): ## Update extruder number to a valid value when the number of extruders are changed, or when an extruder is changed def correctExtruderSettings(self) -> None: + if self._global_container_stack is None: + return for setting_key in self.getIncompatibleSettingsOnEnabledExtruders(self._global_container_stack.userChanges): self._global_container_stack.userChanges.removeInstance(setting_key) add_user_changes = self.getIncompatibleSettingsOnEnabledExtruders(self._global_container_stack.qualityChanges) @@ -848,6 +861,8 @@ class MachineManager(QObject): ## Set the amount of extruders on the active machine (global stack) # \param extruder_count int the number of extruders to set def setActiveMachineExtruderCount(self, extruder_count: int) -> None: + if self._global_container_stack is None: + return extruder_manager = self._application.getExtruderManager() definition_changes_container = self._global_container_stack.definitionChanges @@ -909,6 +924,8 @@ class MachineManager(QObject): return extruder def updateDefaultExtruder(self) -> None: + if self._global_container_stack is None: + return extruder_items = sorted(self._global_container_stack.extruders.items()) old_position = self._default_extruder_position new_default_position = "0" @@ -921,6 +938,8 @@ class MachineManager(QObject): self.extruderChanged.emit() def updateNumberExtrudersEnabled(self) -> None: + if self._global_container_stack is None: + return definition_changes_container = self._global_container_stack.definitionChanges machine_extruder_count = self._global_container_stack.getProperty("machine_extruder_count", "value") extruder_count = 0 @@ -933,6 +952,8 @@ class MachineManager(QObject): @pyqtProperty(int, notify = numberExtrudersEnabledChanged) def numberExtrudersEnabled(self) -> int: + if self._global_container_stack is None: + return 1 return self._global_container_stack.definitionChanges.getProperty("extruders_enabled_count", "value") @pyqtProperty(str, notify = extruderChanged) @@ -942,6 +963,8 @@ class MachineManager(QObject): ## This will fire the propertiesChanged for all settings so they will be updated in the front-end @pyqtSlot() def forceUpdateAllSettings(self) -> None: + if self._global_container_stack is None: + return with postponeSignals(*self._getContainerChangedSignals(), compress = CompressTechnique.CompressPerParameterValue): property_names = ["value", "resolve", "validationState"] for container in [self._global_container_stack] + list(self._global_container_stack.extruders.values()): @@ -951,8 +974,9 @@ class MachineManager(QObject): @pyqtSlot(int, bool) def setExtruderEnabled(self, position: int, enabled: bool) -> None: extruder = self.getExtruder(position) - if not extruder: + if not extruder or self._global_container_stack is None: Logger.log("w", "Could not find extruder on position %s", position) + return extruder.setEnabled(enabled) self.updateDefaultExtruder() @@ -988,6 +1012,8 @@ class MachineManager(QObject): @pyqtSlot(str, str, str) def setSettingForAllExtruders(self, setting_name: str, property_name: str, property_value: str) -> None: + if self._global_container_stack is None: + return for key, extruder in self._global_container_stack.extruders.items(): container = extruder.userChanges container.setProperty(setting_name, property_name, property_value) @@ -996,6 +1022,8 @@ class MachineManager(QObject): # \param setting_name The ID of the setting to reset. @pyqtSlot(str) def resetSettingForAllExtruders(self, setting_name: str) -> None: + if self._global_container_stack is None: + return for key, extruder in self._global_container_stack.extruders.items(): container = extruder.userChanges container.removeInstance(setting_name) @@ -1038,6 +1066,8 @@ class MachineManager(QObject): # for all stacks in the currently active machine. # def _setEmptyQuality(self) -> None: + if self._global_container_stack is None: + return self._current_quality_group = None self._current_quality_changes_group = None self._global_container_stack.quality = self._empty_quality_container @@ -1050,11 +1080,13 @@ class MachineManager(QObject): self.activeQualityChangesGroupChanged.emit() def _setQualityGroup(self, quality_group: Optional[QualityGroup], empty_quality_changes: bool = True) -> None: + if self._global_container_stack is None: + return if quality_group is None: self._setEmptyQuality() return - if quality_group.node_for_global.getContainer() is None: + if quality_group.node_for_global is None or quality_group.node_for_global.getContainer() is None: return for node in quality_group.nodes_for_extruders.values(): if node.getContainer() is None: @@ -1082,7 +1114,8 @@ class MachineManager(QObject): nodes = [quality_changes_group.node_for_global] + list(quality_changes_group.nodes_for_extruders.values()) containers = [n.getContainer() for n in nodes if n is not None] for container in containers: - container.setMetaDataEntry("quality_type", "not_supported") + if container: + container.setMetaDataEntry("quality_type", "not_supported") quality_changes_group.quality_type = "not_supported" def _setQualityChangesGroup(self, quality_changes_group: QualityChangesGroup) -> None: @@ -1130,20 +1163,24 @@ class MachineManager(QObject): self.activeQualityChangesGroupChanged.emit() def _setVariantNode(self, position: str, container_node: ContainerNode) -> None: - if container_node.getContainer() is None: + if container_node.getContainer() is None or self._global_container_stack is None: return self._global_container_stack.extruders[position].variant = container_node.getContainer() self.activeVariantChanged.emit() def _setGlobalVariant(self, container_node: ContainerNode) -> None: + if self._global_container_stack is None: + return self._global_container_stack.variant = container_node.getContainer() if not self._global_container_stack.variant: self._global_container_stack.variant = self._application.empty_variant_container def _setMaterial(self, position: str, container_node: ContainerNode = None) -> None: + if self._global_container_stack is None: + return if container_node and container_node.getContainer(): self._global_container_stack.extruders[position].material = container_node.getContainer() - root_material_id = container_node.metadata["base_file"] + root_material_id = container_node.getMetaDataEntry("base_file", None) else: self._global_container_stack.extruders[position].material = self._empty_material_container root_material_id = None @@ -1154,12 +1191,13 @@ class MachineManager(QObject): def activeMaterialsCompatible(self) -> bool: # check material - variant compatibility - if Util.parseBool(self._global_container_stack.getMetaDataEntry("has_materials", False)): - for position, extruder in self._global_container_stack.extruders.items(): - if extruder.isEnabled and not extruder.material.getMetaDataEntry("compatible"): - return False - if not extruder.material.getMetaDataEntry("compatible"): - return False + if self._global_container_stack is not None: + if Util.parseBool(self._global_container_stack.getMetaDataEntry("has_materials", False)): + for position, extruder in self._global_container_stack.extruders.items(): + if extruder.isEnabled and not extruder.material.getMetaDataEntry("compatible"): + return False + if not extruder.material.getMetaDataEntry("compatible"): + return False return True ## Update current quality type and machine after setting material @@ -1202,7 +1240,7 @@ class MachineManager(QObject): current_quality_type, quality_type) self._setQualityGroup(candidate_quality_groups[quality_type], empty_quality_changes = True) - def _updateMaterialWithVariant(self, position: Optional[str]) -> None: + def updateMaterialWithVariant(self, position: Optional[str]) -> None: if self._global_container_stack is None: return if position is None: @@ -1210,8 +1248,8 @@ class MachineManager(QObject): else: position_list = [position] - for position in position_list: - extruder = self._global_container_stack.extruders[position] + for position_item in position_list: + extruder = self._global_container_stack.extruders[position_item] current_material_base_name = extruder.material.getMetaDataEntry("base_file") current_variant_name = None @@ -1229,25 +1267,25 @@ class MachineManager(QObject): material_diameter) if not candidate_materials: - self._setMaterial(position, container_node = None) + self._setMaterial(position_item, container_node = None) continue if current_material_base_name in candidate_materials: new_material = candidate_materials[current_material_base_name] - self._setMaterial(position, new_material) + self._setMaterial(position_item, new_material) continue # The current material is not available, find the preferred one material_node = self._material_manager.getDefaultMaterial(self._global_container_stack, current_variant_name) if material_node is not None: - self._setMaterial(position, material_node) + self._setMaterial(position_item, material_node) ## Given a printer definition name, select the right machine instance. In case it doesn't exist, create a new # instance with the same network key. @pyqtSlot(str) def switchPrinterType(self, machine_name: str) -> None: # Don't switch if the user tries to change to the same type of printer - if self.activeMachineDefinitionName == machine_name: + if self._global_container_stack is None or self.self.activeMachineDefinitionName == machine_name: return # Get the definition id corresponding to this machine name machine_definition_id = CuraContainerRegistry.getInstance().findDefinitionContainers(name = machine_name)[0].getId() @@ -1272,6 +1310,8 @@ class MachineManager(QObject): @pyqtSlot(QObject) def applyRemoteConfiguration(self, configuration: ConfigurationModel) -> None: + if self._global_container_stack is None: + return self.blurSettings.emit() with postponeSignals(*self._getContainerChangedSignals(), compress = CompressTechnique.CompressPerParameterValue): self.switchPrinterType(configuration.printerType) @@ -1288,7 +1328,7 @@ class MachineManager(QObject): self._setMaterial(position, material_container_node) else: self._global_container_stack.extruders[position].material = self._empty_material_container - self._updateMaterialWithVariant(position) + self.updateMaterialWithVariant(position) if configuration.buildplateConfiguration is not None: global_variant_container_node = self._variant_manager.getBuildplateVariantNode(self._global_container_stack.definition.getId(), configuration.buildplateConfiguration) @@ -1334,11 +1374,13 @@ class MachineManager(QObject): self.blurSettings.emit() with postponeSignals(*self._getContainerChangedSignals(), compress = CompressTechnique.CompressPerParameterValue): self._setGlobalVariant(container_node) - self._updateMaterialWithVariant(None) # Update all materials + self.updateMaterialWithVariant(None) # Update all materials self._updateQualityWithMaterial() @pyqtSlot(str, str) def setMaterialById(self, position: str, root_material_id: str) -> None: + if self._global_container_stack is None: + return machine_definition_id = self._global_container_stack.definition.id position = str(position) extruder_stack = self._global_container_stack.extruders[position] @@ -1361,6 +1403,8 @@ class MachineManager(QObject): @pyqtSlot(str, str) def setVariantByName(self, position: str, variant_name: str) -> None: + if self._global_container_stack is None: + return machine_definition_id = self._global_container_stack.definition.id variant_node = self._variant_manager.getVariantNode(machine_definition_id, variant_name) self.setVariant(position, variant_node) @@ -1371,7 +1415,7 @@ class MachineManager(QObject): self.blurSettings.emit() with postponeSignals(*self._getContainerChangedSignals(), compress = CompressTechnique.CompressPerParameterValue): self._setVariantNode(position, container_node) - self._updateMaterialWithVariant(position) + self.updateMaterialWithVariant(position) self._updateQualityWithMaterial() # See if we need to show the Discard or Keep changes screen @@ -1398,7 +1442,7 @@ class MachineManager(QObject): self._application.discardOrKeepProfileChanges() @pyqtProperty(QObject, fset = setQualityGroup, notify = activeQualityGroupChanged) - def activeQualityGroup(self) -> QualityGroup: + def activeQualityGroup(self) -> Optional[QualityGroup]: return self._current_quality_group @pyqtSlot(QObject) @@ -1413,13 +1457,15 @@ class MachineManager(QObject): @pyqtSlot() def resetToUseDefaultQuality(self) -> None: + if self._global_container_stack is None: + return with postponeSignals(*self._getContainerChangedSignals(), compress = CompressTechnique.CompressPerParameterValue): self._setQualityGroup(self._current_quality_group) for stack in [self._global_container_stack] + list(self._global_container_stack.extruders.values()): stack.userChanges.clear() @pyqtProperty(QObject, fset = setQualityChangesGroup, notify = activeQualityChangesGroupChanged) - def activeQualityChangesGroup(self) -> QualityChangesGroup: + def activeQualityChangesGroup(self) -> Optional[QualityChangesGroup]: return self._current_quality_changes_group @pyqtProperty(str, notify = activeQualityGroupChanged) @@ -1435,5 +1481,5 @@ class MachineManager(QObject): if self._global_container_stack is None: return with postponeSignals(*self._getContainerChangedSignals(), compress = CompressTechnique.CompressPerParameterValue): - self._updateMaterialWithVariant(None) + self.updateMaterialWithVariant(None) self._updateQualityWithMaterial() diff --git a/cura/Settings/SettingInheritanceManager.py b/cura/Settings/SettingInheritanceManager.py index 7cbfbcfda1..6d4176ebf1 100644 --- a/cura/Settings/SettingInheritanceManager.py +++ b/cura/Settings/SettingInheritanceManager.py @@ -1,5 +1,6 @@ # Copyright (c) 2017 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. +from typing import List from PyQt5.QtCore import QObject, QTimer, pyqtProperty, pyqtSignal from UM.FlameProfiler import pyqtSlot @@ -13,6 +14,7 @@ from UM.Logger import Logger # speed settings. If all the children of print_speed have a single value override, changing the speed won't # actually do anything, as only the 'leaf' settings are used by the engine. from UM.Settings.ContainerStack import ContainerStack +from UM.Settings.Interfaces import ContainerInterface from UM.Settings.SettingFunction import SettingFunction from UM.Settings.SettingInstance import InstanceState @@ -157,7 +159,7 @@ class SettingInheritanceManager(QObject): stack = self._active_container_stack if not stack: #No active container stack yet! return False - containers = [] + containers = [] # type: List[ContainerInterface] ## Check if the setting has a user state. If not, it is never overwritten. has_user_state = stack.getProperty(key, "state") == InstanceState.User diff --git a/cura/Settings/SettingOverrideDecorator.py b/cura/Settings/SettingOverrideDecorator.py index a662027d8f..27ae1d69f0 100644 --- a/cura/Settings/SettingOverrideDecorator.py +++ b/cura/Settings/SettingOverrideDecorator.py @@ -63,7 +63,7 @@ class SettingOverrideDecorator(SceneNodeDecorator): instance_container = copy.deepcopy(self._stack.getContainer(0), memo) # A unique name must be added, or replaceContainer will not replace it - instance_container.setMetaDataEntry("id", self._generateUniqueName) + instance_container.setMetaDataEntry("id", self._generateUniqueName()) ## Set the copied instance as the first (and only) instance container of the stack. deep_copy._stack.replaceContainer(0, instance_container) diff --git a/cura/SingleInstance.py b/cura/SingleInstance.py index 134c85fd8c..dca0d3237c 100644 --- a/cura/SingleInstance.py +++ b/cura/SingleInstance.py @@ -61,8 +61,11 @@ class SingleInstance: def startServer(self) -> None: self._single_instance_server = QLocalServer() - self._single_instance_server.newConnection.connect(self._onClientConnected) - self._single_instance_server.listen("ultimaker-cura") + if self._single_instance_server: + self._single_instance_server.newConnection.connect(self._onClientConnected) + self._single_instance_server.listen("ultimaker-cura") + else: + Logger.log("e", "Single instance server was not created.") def _onClientConnected(self) -> None: Logger.log("i", "New connection recevied on our single-instance server") diff --git a/plugins/3MFReader/ThreeMFWorkspaceReader.py b/plugins/3MFReader/ThreeMFWorkspaceReader.py index 90241c6e72..3df3d9d4a2 100755 --- a/plugins/3MFReader/ThreeMFWorkspaceReader.py +++ b/plugins/3MFReader/ThreeMFWorkspaceReader.py @@ -4,7 +4,7 @@ from configparser import ConfigParser import zipfile import os -from typing import List, Tuple +from typing import Dict, List, Tuple import xml.etree.ElementTree as ET @@ -13,6 +13,7 @@ from UM.Workspace.WorkspaceReader import WorkspaceReader from UM.Application import Application from UM.Logger import Logger +from UM.Message import Message from UM.i18n import i18nCatalog from UM.Signal import postponeSignals, CompressTechnique from UM.Settings.ContainerFormatError import ContainerFormatError @@ -37,7 +38,7 @@ i18n_catalog = i18nCatalog("cura") class ContainerInfo: - def __init__(self, file_name: str, serialized: str, parser: ConfigParser): + def __init__(self, file_name: str, serialized: str, parser: ConfigParser) -> None: self.file_name = file_name self.serialized = serialized self.parser = parser @@ -46,14 +47,14 @@ class ContainerInfo: class QualityChangesInfo: - def __init__(self): + def __init__(self) -> None: self.name = None self.global_info = None - self.extruder_info_dict = {} + self.extruder_info_dict = {} # type: Dict[str, ContainerInfo] class MachineInfo: - def __init__(self): + def __init__(self) -> None: self.container_id = None self.name = None self.definition_id = None @@ -65,11 +66,11 @@ class MachineInfo: self.definition_changes_info = None self.user_changes_info = None - self.extruder_info_dict = {} + self.extruder_info_dict = {} # type: Dict[str, ExtruderInfo] class ExtruderInfo: - def __init__(self): + def __init__(self) -> None: self.position = None self.enabled = True self.variant_info = None @@ -81,7 +82,7 @@ class ExtruderInfo: ## Base implementation for reading 3MF workspace files. class ThreeMFWorkspaceReader(WorkspaceReader): - def __init__(self): + def __init__(self) -> None: super().__init__() MimeTypeDatabase.addMimeType( @@ -111,28 +112,26 @@ class ThreeMFWorkspaceReader(WorkspaceReader): # - variant self._ignored_instance_container_types = {"quality", "variant"} - self._resolve_strategies = {} + self._resolve_strategies = {} # type: Dict[str, str] - self._id_mapping = {} + self._id_mapping = {} # type: Dict[str, str] # In Cura 2.5 and 2.6, the empty profiles used to have those long names self._old_empty_profile_id_dict = {"empty_%s" % k: "empty" for k in ["material", "variant"]} self._is_same_machine_type = False - self._old_new_materials = {} - self._materials_to_select = {} + self._old_new_materials = {} # type: Dict[str, str] self._machine_info = None def _clearState(self): self._is_same_machine_type = False self._id_mapping = {} self._old_new_materials = {} - self._materials_to_select = {} self._machine_info = None ## Get a unique name based on the old_id. This is different from directly calling the registry in that it caches results. # This has nothing to do with speed, but with getting consistent new naming for instances & objects. - def getNewId(self, old_id): + def getNewId(self, old_id: str): if old_id not in self._id_mapping: self._id_mapping[old_id] = self._container_registry.uniqueName(old_id) return self._id_mapping[old_id] @@ -470,6 +469,20 @@ class ThreeMFWorkspaceReader(WorkspaceReader): Logger.log("w", "File %s is not a valid workspace.", file_name) return WorkspaceReader.PreReadResult.failed + # Check if the machine definition exists. If not, indicate failure because we do not import definition files. + def_results = self._container_registry.findDefinitionContainersMetadata(id = machine_definition_id) + if not def_results: + message = Message(i18n_catalog.i18nc("@info:status Don't translate the XML tags or !", + "Project file {0} contains an unknown machine type" + " {1}. Cannot import the machine." + " Models will be imported instead.", file_name, machine_definition_id), + title = i18n_catalog.i18nc("@info:title", "Open Project File")) + message.show() + + Logger.log("i", "Could unknown machine definition %s in project file %s, cannot import it.", + self._machine_info.definition_id, file_name) + return WorkspaceReader.PreReadResult.failed + # In case we use preRead() to check if a file is a valid project file, we don't want to show a dialog. if not show_dialog: return WorkspaceReader.PreReadResult.accepted @@ -656,7 +669,7 @@ class ThreeMFWorkspaceReader(WorkspaceReader): else: material_container = materials[0] old_material_root_id = material_container.getMetaDataEntry("base_file") - if not self._container_registry.isReadOnly(old_material_root_id): # Only create new materials if they are not read only. + if old_material_root_id is not None and not self._container_registry.isReadOnly(old_material_root_id): # Only create new materials if they are not read only. to_deserialize_material = True if self._resolve_strategies["material"] == "override": diff --git a/plugins/ChangeLogPlugin/ChangeLog.py b/plugins/ChangeLogPlugin/ChangeLog.py index e93d5c4395..723c83a021 100644 --- a/plugins/ChangeLogPlugin/ChangeLog.py +++ b/plugins/ChangeLogPlugin/ChangeLog.py @@ -55,7 +55,7 @@ class ChangeLog(Extension, QObject,): def loadChangeLogs(self): self._change_logs = collections.OrderedDict() - with open(os.path.join(PluginRegistry.getInstance().getPluginPath(self.getPluginId()), "ChangeLog.txt"), "r",-1, "utf-8") as f: + with open(os.path.join(PluginRegistry.getInstance().getPluginPath(self.getPluginId()), "ChangeLog.txt"), "r", encoding = "utf-8") as f: open_version = None open_header = "" # Initialise to an empty header in case there is no "*" in the first line of the changelog for line in f: diff --git a/plugins/CuraEngineBackend/CuraEngineBackend.py b/plugins/CuraEngineBackend/CuraEngineBackend.py index d298ff1aca..3e66edc203 100755 --- a/plugins/CuraEngineBackend/CuraEngineBackend.py +++ b/plugins/CuraEngineBackend/CuraEngineBackend.py @@ -379,6 +379,14 @@ class CuraEngineBackend(QObject, Backend): else: self.backendStateChange.emit(BackendState.NotStarted) + if job.getResult() == StartSliceJob.StartJobResult.ObjectsWithDisabledExtruder: + self._error_message = Message(catalog.i18nc("@info:status", "Unable to slice because there are objects associated with disabled Extruder %s." % job.getMessage()), + title = catalog.i18nc("@info:title", "Unable to slice")) + self._error_message.show() + self.backendStateChange.emit(BackendState.Error) + self.backendError.emit(job) + return + if job.getResult() == StartSliceJob.StartJobResult.NothingToSlice: if Application.getInstance().platformActivity: self._error_message = Message(catalog.i18nc("@info:status", "Nothing to slice because none of the models fit the build volume. Please scale or rotate models to fit."), diff --git a/plugins/CuraEngineBackend/StartSliceJob.py b/plugins/CuraEngineBackend/StartSliceJob.py index 467351dd4b..b704ca0d2f 100644 --- a/plugins/CuraEngineBackend/StartSliceJob.py +++ b/plugins/CuraEngineBackend/StartSliceJob.py @@ -32,6 +32,7 @@ class StartJobResult(IntEnum): MaterialIncompatible = 5 BuildPlateError = 6 ObjectSettingError = 7 #When an error occurs in per-object settings. + ObjectsWithDisabledExtruder = 8 ## Formatter class that handles token expansion in start/end gcod @@ -213,16 +214,27 @@ class StartSliceJob(Job): extruders_enabled = {position: stack.isEnabled for position, stack in Application.getInstance().getGlobalContainerStack().extruders.items()} filtered_object_groups = [] + has_model_with_disabled_extruders = False + associated_siabled_extruders = set() for group in object_groups: stack = Application.getInstance().getGlobalContainerStack() skip_group = False for node in group: - if not extruders_enabled[node.callDecoration("getActiveExtruderPosition")]: + extruder_position = node.callDecoration("getActiveExtruderPosition") + if not extruders_enabled[extruder_position]: skip_group = True + has_model_with_disabled_extruders = True + associated_siabled_extruders.add(extruder_position) break if not skip_group: filtered_object_groups.append(group) + if has_model_with_disabled_extruders: + self.setResult(StartJobResult.ObjectsWithDisabledExtruder) + associated_siabled_extruders = [str(c) for c in sorted([int(p) + 1 for p in associated_siabled_extruders])] + self.setMessage(", ".join(associated_siabled_extruders)) + return + # There are cases when there is nothing to slice. This can happen due to one at a time slicing not being # able to find a possible sequence or because there are no objects on the build plate (or they are outside # the build volume) diff --git a/plugins/GCodeProfileReader/GCodeProfileReader.py b/plugins/GCodeProfileReader/GCodeProfileReader.py index 4b50a600ba..9fbae7b473 100644 --- a/plugins/GCodeProfileReader/GCodeProfileReader.py +++ b/plugins/GCodeProfileReader/GCodeProfileReader.py @@ -57,7 +57,7 @@ class GCodeProfileReader(ProfileReader): # TODO: Consider moving settings to the start? serialized = "" # Will be filled with the serialized profile. try: - with open(file_name, "r") as f: + with open(file_name, "r", encoding = "utf-8") as f: for line in f: if line.startswith(prefix): # Remove the prefix and the newline from the line and add it to the rest. diff --git a/plugins/LegacyProfileReader/LegacyProfileReader.py b/plugins/LegacyProfileReader/LegacyProfileReader.py index 3c2b9bfa76..40a843e6c4 100644 --- a/plugins/LegacyProfileReader/LegacyProfileReader.py +++ b/plugins/LegacyProfileReader/LegacyProfileReader.py @@ -100,7 +100,7 @@ class LegacyProfileReader(ProfileReader): return None try: - with open(os.path.join(PluginRegistry.getInstance().getPluginPath("LegacyProfileReader"), "DictionaryOfDoom.json"), "r", -1, "utf-8") as f: + with open(os.path.join(PluginRegistry.getInstance().getPluginPath("LegacyProfileReader"), "DictionaryOfDoom.json"), "r", encoding = "utf-8") as f: dict_of_doom = json.load(f) # Parse the Dictionary of Doom. except IOError as e: Logger.log("e", "Could not open DictionaryOfDoom.json for reading: %s", str(e)) diff --git a/plugins/MachineSettingsAction/MachineSettingsAction.py b/plugins/MachineSettingsAction/MachineSettingsAction.py index 7d5b317475..4c459e69cf 100755 --- a/plugins/MachineSettingsAction/MachineSettingsAction.py +++ b/plugins/MachineSettingsAction/MachineSettingsAction.py @@ -158,4 +158,4 @@ class MachineSettingsAction(MachineAction): @pyqtSlot(int) def updateMaterialForDiameter(self, extruder_position: int): # Updates the material container to a material that matches the material diameter set for the printer - self._application.getExtruderManager().updateMaterialForDiameter(extruder_position) + self._application.getMachineManager().updateMaterialWithVariant(str(extruder_position)) diff --git a/plugins/SimulationView/SimulationSliderLabel.qml b/plugins/SimulationView/SimulationSliderLabel.qml index 6f7749df63..8615a382da 100644 --- a/plugins/SimulationView/SimulationSliderLabel.qml +++ b/plugins/SimulationView/SimulationSliderLabel.qml @@ -53,7 +53,7 @@ UM.PointingRectangle { verticalCenter: parent.verticalCenter } - width: 40 * screenScaleFactor + width: maximumValue.toString().length * 12 * screenScaleFactor text: sliderLabelRoot.value + startFrom // the current handle value, add 1 because layers is an array horizontalAlignment: TextInput.AlignRight @@ -77,11 +77,12 @@ UM.PointingRectangle { if (valueLabel.text != "") { // -startFrom because we need to convert back to an array structure sliderLabelRoot.setValue(parseInt(valueLabel.text) - startFrom) + } } validator: IntValidator { - bottom:startFrom + bottom: startFrom top: sliderLabelRoot.maximumValue + startFrom // +startFrom because maybe we want to start in a different value rather than 0 } } diff --git a/plugins/Toolbox/src/Toolbox.py b/plugins/Toolbox/src/Toolbox.py index c29c673c8a..2f26e21d65 100644 --- a/plugins/Toolbox/src/Toolbox.py +++ b/plugins/Toolbox/src/Toolbox.py @@ -262,12 +262,14 @@ class Toolbox(QObject, Extension): # list of old plugins old_plugin_ids = self._plugin_registry.getInstalledPlugins() installed_package_ids = self._package_manager.getAllInstalledPackageIDs() + scheduled_to_remove_package_ids = self._package_manager.getToRemovePackageIDs() self._old_plugin_ids = [] self._old_plugin_metadata = [] for plugin_id in old_plugin_ids: - if plugin_id not in installed_package_ids: + # Neither the installed packages nor the packages that are scheduled to remove are old plugins + if plugin_id not in installed_package_ids and plugin_id not in scheduled_to_remove_package_ids: Logger.log('i', 'Found a plugin that was installed with the old plugin browser: %s', plugin_id) old_metadata = self._plugin_registry.getMetaData(plugin_id) diff --git a/plugins/USBPrinting/avr_isp/intelHex.py b/plugins/USBPrinting/avr_isp/intelHex.py index a51c798d8e..671f1788f7 100644 --- a/plugins/USBPrinting/avr_isp/intelHex.py +++ b/plugins/USBPrinting/avr_isp/intelHex.py @@ -13,7 +13,7 @@ def readHex(filename): """ data = [] extra_addr = 0 - f = io.open(filename, "r") + f = io.open(filename, "r", encoding = "utf-8") for line in f: line = line.strip() if len(line) < 1: diff --git a/plugins/VersionUpgrade/VersionUpgrade22to24/VersionUpgrade.py b/plugins/VersionUpgrade/VersionUpgrade22to24/VersionUpgrade.py index 7505911049..730a62e591 100644 --- a/plugins/VersionUpgrade/VersionUpgrade22to24/VersionUpgrade.py +++ b/plugins/VersionUpgrade/VersionUpgrade22to24/VersionUpgrade.py @@ -94,7 +94,7 @@ class VersionUpgrade22to24(VersionUpgrade): if variant_path.endswith("_variant.inst.cfg"): variant_path = variant_path[:-len("_variant.inst.cfg")] + "_settings.inst.cfg" - with open(os.path.join(machine_instances_dir, os.path.basename(variant_path)), "w") as fp: + with open(os.path.join(machine_instances_dir, os.path.basename(variant_path)), "w", encoding = "utf-8") as fp: variant_config.write(fp) return config_name @@ -105,9 +105,9 @@ class VersionUpgrade22to24(VersionUpgrade): result = [] for entry in os.scandir(variants_dir): - if entry.name.endswith('.inst.cfg') and entry.is_file(): + if entry.name.endswith(".inst.cfg") and entry.is_file(): config = configparser.ConfigParser(interpolation = None) - with open(entry.path, "r") as fhandle: + with open(entry.path, "r", encoding = "utf-8") as fhandle: config.read_file(fhandle) if config.has_section("general") and config.has_option("general", "name"): result.append( { "path": entry.path, "name": config.get("general", "name") } ) diff --git a/plugins/VersionUpgrade/VersionUpgrade25to26/VersionUpgrade25to26.py b/plugins/VersionUpgrade/VersionUpgrade25to26/VersionUpgrade25to26.py index e1c14be2e1..54b561c847 100644 --- a/plugins/VersionUpgrade/VersionUpgrade25to26/VersionUpgrade25to26.py +++ b/plugins/VersionUpgrade/VersionUpgrade25to26/VersionUpgrade25to26.py @@ -249,11 +249,11 @@ class VersionUpgrade25to26(VersionUpgrade): definition_changes_dir = Resources.getPath(CuraApplication.ResourceTypes.DefinitionChangesContainer) user_settings_dir = Resources.getPath(CuraApplication.ResourceTypes.UserInstanceContainer) - with open(os.path.join(definition_changes_dir, definition_changes_filename), "w") as f: + with open(os.path.join(definition_changes_dir, definition_changes_filename), "w", encoding = "utf-8") as f: f.write(definition_changes_output.getvalue()) - with open(os.path.join(user_settings_dir, user_settings_filename), "w") as f: + with open(os.path.join(user_settings_dir, user_settings_filename), "w", encoding = "utf-8") as f: f.write(user_settings_output.getvalue()) - with open(os.path.join(extruder_stack_dir, extruder_filename), "w") as f: + with open(os.path.join(extruder_stack_dir, extruder_filename), "w", encoding = "utf-8") as f: f.write(extruder_output.getvalue()) ## Creates a definition changes container which doesn't contain anything for the Custom FDM Printers. diff --git a/plugins/XmlMaterialProfile/XmlMaterialProfile.py b/plugins/XmlMaterialProfile/XmlMaterialProfile.py index 4985c2fd87..9d456c833d 100644 --- a/plugins/XmlMaterialProfile/XmlMaterialProfile.py +++ b/plugins/XmlMaterialProfile/XmlMaterialProfile.py @@ -1018,7 +1018,7 @@ class XmlMaterialProfile(InstanceContainer): @classmethod def getProductIdMap(cls) -> Dict[str, List[str]]: product_to_id_file = os.path.join(os.path.dirname(sys.modules[cls.__module__].__file__), "product_to_id.json") - with open(product_to_id_file) as f: + with open(product_to_id_file, encoding = "utf-8") as f: product_to_id_map = json.load(f) product_to_id_map = {key: [value] for key, value in product_to_id_map.items()} return product_to_id_map diff --git a/resources/qml/Preferences/GeneralPage.qml b/resources/qml/Preferences/GeneralPage.qml index 7841c7d506..5e3c4f700b 100644 --- a/resources/qml/Preferences/GeneralPage.qml +++ b/resources/qml/Preferences/GeneralPage.qml @@ -170,7 +170,7 @@ UM.PreferencesPage append({ text: "日本語", code: "ja_JP" }) append({ text: "한국어", code: "ko_KR" }) append({ text: "Nederlands", code: "nl_NL" }) - append({ text: "Polski", code: "pl_PL" }) + //Polish is disabled for being incomplete: append({ text: "Polski", code: "pl_PL" }) append({ text: "Português do Brasil", code: "pt_BR" }) append({ text: "Português", code: "pt_PT" }) append({ text: "Русский", code: "ru_RU" }) @@ -741,21 +741,6 @@ UM.PreferencesPage } } - UM.TooltipArea - { - width: childrenRect.width - height: childrenRect.height - text: catalog.i18nc("@info:tooltip", "Should newly loaded models be arranged on the build plate? Used in conjunction with multi build plate (EXPERIMENTAL)") - - CheckBox - { - id: arrangeOnLoadCheckbox - text: catalog.i18nc("@option:check", "Do not arrange objects on load") - checked: boolCheck(UM.Preferences.getValue("cura/not_arrange_objects_on_load")) - onCheckedChanged: UM.Preferences.setValue("cura/not_arrange_objects_on_load", checked) - } - } - Connections { target: UM.Preferences diff --git a/resources/quality/abax_pri3/apri3_pla_fast.inst.cfg b/resources/quality/abax_pri3/apri3_pla_fast.inst.cfg index b46e2473af..52a20ac306 100644 --- a/resources/quality/abax_pri3/apri3_pla_fast.inst.cfg +++ b/resources/quality/abax_pri3/apri3_pla_fast.inst.cfg @@ -17,6 +17,6 @@ top_bottom_thickness = 0.8 infill_sparse_density = 20 speed_print = 80 speed_layer_0 = =round(speed_print * 30 / 50) -speed_topbottom = 20 +speed_topbottom = =math.ceil(speed_print * 20 / 80) cool_min_layer_time = 5 cool_min_speed = 10 diff --git a/resources/quality/abax_pri3/apri3_pla_high.inst.cfg b/resources/quality/abax_pri3/apri3_pla_high.inst.cfg index a12d8d1b72..2effe4cfc2 100644 --- a/resources/quality/abax_pri3/apri3_pla_high.inst.cfg +++ b/resources/quality/abax_pri3/apri3_pla_high.inst.cfg @@ -17,6 +17,6 @@ top_bottom_thickness = 0.8 infill_sparse_density = 20 speed_print = 50 speed_layer_0 = =round(speed_print * 30 / 50) -speed_topbottom = 20 +speed_topbottom = =math.ceil(speed_print * 20 / 50) cool_min_layer_time = 5 cool_min_speed = 10 diff --git a/resources/quality/abax_pri3/apri3_pla_normal.inst.cfg b/resources/quality/abax_pri3/apri3_pla_normal.inst.cfg index 3cea7931aa..8cab45135c 100644 --- a/resources/quality/abax_pri3/apri3_pla_normal.inst.cfg +++ b/resources/quality/abax_pri3/apri3_pla_normal.inst.cfg @@ -17,6 +17,6 @@ top_bottom_thickness = 0.8 infill_sparse_density = 20 speed_print = 50 speed_layer_0 = =round(speed_print * 30 / 50) -speed_topbottom = 20 +speed_topbottom = =math.ceil(speed_print * 20 / 50) cool_min_layer_time = 5 cool_min_speed = 10 diff --git a/resources/quality/abax_pri5/apri5_pla_fast.inst.cfg b/resources/quality/abax_pri5/apri5_pla_fast.inst.cfg index ba1de97b89..0d71942031 100644 --- a/resources/quality/abax_pri5/apri5_pla_fast.inst.cfg +++ b/resources/quality/abax_pri5/apri5_pla_fast.inst.cfg @@ -17,6 +17,6 @@ top_bottom_thickness = 0.8 infill_sparse_density = 20 speed_print = 80 speed_layer_0 = =round(speed_print * 30 / 50) -speed_topbottom = 20 +speed_topbottom = =math.ceil(speed_print * 20 / 80) cool_min_layer_time = 5 cool_min_speed = 10 diff --git a/resources/quality/abax_pri5/apri5_pla_high.inst.cfg b/resources/quality/abax_pri5/apri5_pla_high.inst.cfg index d1ea040f93..184c23a331 100644 --- a/resources/quality/abax_pri5/apri5_pla_high.inst.cfg +++ b/resources/quality/abax_pri5/apri5_pla_high.inst.cfg @@ -17,6 +17,6 @@ top_bottom_thickness = 0.8 infill_sparse_density = 20 speed_print = 50 speed_layer_0 = =round(speed_print * 30 / 50) -speed_topbottom = 20 +speed_topbottom = =math.ceil(speed_print * 20 / 50) cool_min_layer_time = 5 cool_min_speed = 10 diff --git a/resources/quality/abax_pri5/apri5_pla_normal.inst.cfg b/resources/quality/abax_pri5/apri5_pla_normal.inst.cfg index c2bb8d343b..c36b4894b8 100644 --- a/resources/quality/abax_pri5/apri5_pla_normal.inst.cfg +++ b/resources/quality/abax_pri5/apri5_pla_normal.inst.cfg @@ -17,6 +17,6 @@ top_bottom_thickness = 0.8 infill_sparse_density = 20 speed_print = 50 speed_layer_0 = =round(speed_print * 30 / 50) -speed_topbottom = 20 +speed_topbottom = =math.ceil(speed_print * 20 / 50) cool_min_layer_time = 5 cool_min_speed = 10 diff --git a/resources/quality/abax_titan/atitan_pla_fast.inst.cfg b/resources/quality/abax_titan/atitan_pla_fast.inst.cfg index ec54c373c9..58c41fc68f 100644 --- a/resources/quality/abax_titan/atitan_pla_fast.inst.cfg +++ b/resources/quality/abax_titan/atitan_pla_fast.inst.cfg @@ -17,6 +17,6 @@ top_bottom_thickness = 0.8 infill_sparse_density = 20 speed_print = 80 speed_layer_0 = =round(speed_print * 30 / 50) -speed_topbottom = 20 +speed_topbottom = =math.ceil(speed_print * 20 / 80) cool_min_layer_time = 5 cool_min_speed = 10 diff --git a/resources/quality/abax_titan/atitan_pla_high.inst.cfg b/resources/quality/abax_titan/atitan_pla_high.inst.cfg index f8d016f6d0..3f1336d9e5 100644 --- a/resources/quality/abax_titan/atitan_pla_high.inst.cfg +++ b/resources/quality/abax_titan/atitan_pla_high.inst.cfg @@ -17,6 +17,6 @@ top_bottom_thickness = 0.8 infill_sparse_density = 20 speed_print = 50 speed_layer_0 = =round(speed_print * 30 / 50) -speed_topbottom = 20 +speed_topbottom = =math.ceil(speed_print * 20 / 50) cool_min_layer_time = 5 cool_min_speed = 10 diff --git a/resources/quality/abax_titan/atitan_pla_normal.inst.cfg b/resources/quality/abax_titan/atitan_pla_normal.inst.cfg index b25a0ff47e..23a3b06fd3 100644 --- a/resources/quality/abax_titan/atitan_pla_normal.inst.cfg +++ b/resources/quality/abax_titan/atitan_pla_normal.inst.cfg @@ -17,6 +17,6 @@ top_bottom_thickness = 0.8 infill_sparse_density = 20 speed_print = 50 speed_layer_0 = =round(speed_print * 30 / 50) -speed_topbottom = 20 +speed_topbottom = =math.ceil(speed_print * 20 / 50) cool_min_layer_time = 5 cool_min_speed = 10 diff --git a/resources/quality/anycubic_i3_mega/anycubic_i3_mega_draft.inst.cfg b/resources/quality/anycubic_i3_mega/anycubic_i3_mega_draft.inst.cfg index ae18246f3f..633133a8d4 100644 --- a/resources/quality/anycubic_i3_mega/anycubic_i3_mega_draft.inst.cfg +++ b/resources/quality/anycubic_i3_mega/anycubic_i3_mega_draft.inst.cfg @@ -41,13 +41,13 @@ retraction_speed = 40 skirt_brim_speed = 40 skirt_gap = 5 skirt_line_count = 3 -speed_infill = 60 +speed_infill = =speed_print speed_print = 60 speed_support = 60 -speed_topbottom = 30 +speed_topbottom = =math.ceil(speed_print * 30 / 60) speed_travel = 100 -speed_wall = 60 -speed_wall_x = 60 +speed_wall = =speed_print +speed_wall_x = =speed_print support_angle = 60 support_enable = True support_interface_enable = True diff --git a/resources/quality/anycubic_i3_mega/anycubic_i3_mega_high.inst.cfg b/resources/quality/anycubic_i3_mega/anycubic_i3_mega_high.inst.cfg index bbaa9c63b1..9954be2fac 100644 --- a/resources/quality/anycubic_i3_mega/anycubic_i3_mega_high.inst.cfg +++ b/resources/quality/anycubic_i3_mega/anycubic_i3_mega_high.inst.cfg @@ -41,13 +41,13 @@ retraction_speed = 40 skirt_brim_speed = 40 skirt_gap = 5 skirt_line_count = 3 -speed_infill = 50 +speed_infill = =speed_print speed_print = 50 speed_support = 30 -speed_topbottom = 20 +speed_topbottom = =math.ceil(speed_print * 20 / 50) speed_travel = 50 -speed_wall = 50 -speed_wall_x = 50 +speed_wall = =speed_print +speed_wall_x = =speed_print support_angle = 60 support_enable = True support_interface_enable = True diff --git a/resources/quality/anycubic_i3_mega/anycubic_i3_mega_normal.inst.cfg b/resources/quality/anycubic_i3_mega/anycubic_i3_mega_normal.inst.cfg index d319b09952..8faececc66 100644 --- a/resources/quality/anycubic_i3_mega/anycubic_i3_mega_normal.inst.cfg +++ b/resources/quality/anycubic_i3_mega/anycubic_i3_mega_normal.inst.cfg @@ -41,13 +41,13 @@ retraction_speed = 40 skirt_brim_speed = 40 skirt_gap = 5 skirt_line_count = 3 -speed_infill = 50 +speed_infill = =speed_print speed_print = 50 speed_support = 30 -speed_topbottom = 20 +speed_topbottom = =math.ceil(speed_print * 20 / 50) speed_travel = 100 -speed_wall = 50 -speed_wall_x = 50 +speed_wall = =speed_print +speed_wall_x = =speed_print support_angle = 60 support_enable = True support_interface_enable = True diff --git a/resources/quality/coarse.inst.cfg b/resources/quality/coarse.inst.cfg index ffbd57263b..478d8bc30c 100644 --- a/resources/quality/coarse.inst.cfg +++ b/resources/quality/coarse.inst.cfg @@ -1,6 +1,6 @@ [general] version = 4 -name = Coarse Quality +name = Coarse definition = fdmprinter [metadata] diff --git a/resources/quality/deltacomb/deltacomb_nylon_fast.inst.cfg b/resources/quality/deltacomb/deltacomb_nylon_fast.inst.cfg index e5718fdc95..c224414b23 100644 --- a/resources/quality/deltacomb/deltacomb_nylon_fast.inst.cfg +++ b/resources/quality/deltacomb/deltacomb_nylon_fast.inst.cfg @@ -43,11 +43,11 @@ skirt_brim_minimal_length = 75 skirt_gap = 1.5 skirt_line_count = 5 speed_infill = =speed_print -speed_layer_0 = 25 +speed_layer_0 = =math.ceil(speed_print * 25 / 50) speed_print = 50 -speed_topbottom = 40 +speed_topbottom = =math.ceil(speed_print * 40 / 50) speed_travel = 200 -speed_wall_0 = 40 +speed_wall_0 = =math.ceil(speed_print * 40 / 50) speed_wall_x = =speed_print support_angle = 70 support_type = buildplate diff --git a/resources/quality/deltacomb/deltacomb_nylon_high.inst.cfg b/resources/quality/deltacomb/deltacomb_nylon_high.inst.cfg index 2b29b49c68..bfbc1d0129 100644 --- a/resources/quality/deltacomb/deltacomb_nylon_high.inst.cfg +++ b/resources/quality/deltacomb/deltacomb_nylon_high.inst.cfg @@ -43,11 +43,11 @@ skirt_brim_minimal_length = 75 skirt_gap = 1.5 skirt_line_count = 5 speed_infill = =speed_print -speed_layer_0 = 25 +speed_layer_0 = =math.ceil(speed_print * 25 / 50) speed_print = 50 -speed_topbottom = 40 +speed_topbottom = =math.ceil(speed_print * 40 / 50) speed_travel = 200 -speed_wall_0 = 40 +speed_wall_0 = =math.ceil(speed_print * 40 / 50) speed_wall_x = =speed_print support_angle = 70 support_type = buildplate diff --git a/resources/quality/deltacomb/deltacomb_nylon_normal.inst.cfg b/resources/quality/deltacomb/deltacomb_nylon_normal.inst.cfg index 9853831b12..9636906707 100644 --- a/resources/quality/deltacomb/deltacomb_nylon_normal.inst.cfg +++ b/resources/quality/deltacomb/deltacomb_nylon_normal.inst.cfg @@ -43,11 +43,11 @@ skirt_brim_minimal_length = 75 skirt_gap = 1.5 skirt_line_count = 5 speed_infill = =speed_print -speed_layer_0 = 25 +speed_layer_0 = =math.ceil(speed_print * 25 / 50) speed_print = 50 -speed_topbottom = 40 +speed_topbottom = =math.ceil(speed_print * 40 / 50) speed_travel = 200 -speed_wall_0 = 40 +speed_wall_0 = =math.ceil(speed_print * 40 / 50) speed_wall_x = =speed_print support_angle = 70 support_type = buildplate diff --git a/resources/quality/draft.inst.cfg b/resources/quality/draft.inst.cfg index 2e0e97e812..cf32886039 100644 --- a/resources/quality/draft.inst.cfg +++ b/resources/quality/draft.inst.cfg @@ -1,6 +1,6 @@ [general] version = 4 -name = Draft Quality +name = Draft definition = fdmprinter [metadata] diff --git a/resources/quality/extra_coarse.inst.cfg b/resources/quality/extra_coarse.inst.cfg index 98aeecbc79..271dfb8a63 100644 --- a/resources/quality/extra_coarse.inst.cfg +++ b/resources/quality/extra_coarse.inst.cfg @@ -1,6 +1,6 @@ [general] version = 4 -name = Extra Coarse Quality +name = Extra Coarse definition = fdmprinter [metadata] diff --git a/resources/quality/fabtotum/fabtotum_nylon_fast.inst.cfg b/resources/quality/fabtotum/fabtotum_nylon_fast.inst.cfg index 88985a7918..010ce182e6 100644 --- a/resources/quality/fabtotum/fabtotum_nylon_fast.inst.cfg +++ b/resources/quality/fabtotum/fabtotum_nylon_fast.inst.cfg @@ -43,11 +43,11 @@ skirt_brim_minimal_length = 75 skirt_gap = 1.5 skirt_line_count = 5 speed_infill = =speed_print -speed_layer_0 = 25 +speed_layer_0 = =math.ceil(speed_print * 25 / 30) speed_print = 30 -speed_topbottom = 40 +speed_topbottom = =math.ceil(speed_print * 40 / 30) speed_travel = 200 -speed_wall_0 = 40 +speed_wall_0 = =math.ceil(speed_print * 40 / 30) speed_wall_x = =speed_print support_angle = 70 support_type = buildplate diff --git a/resources/quality/fabtotum/fabtotum_nylon_high.inst.cfg b/resources/quality/fabtotum/fabtotum_nylon_high.inst.cfg index cef9b6023a..2b7e7d7c24 100644 --- a/resources/quality/fabtotum/fabtotum_nylon_high.inst.cfg +++ b/resources/quality/fabtotum/fabtotum_nylon_high.inst.cfg @@ -43,11 +43,11 @@ skirt_brim_minimal_length = 75 skirt_gap = 1.5 skirt_line_count = 5 speed_infill = =speed_print -speed_layer_0 = 25 +speed_layer_0 = =math.ceil(speed_print * 25 / 30) speed_print = 30 -speed_topbottom = 40 +speed_topbottom = =math.ceil(speed_print * 40 / 30) speed_travel = 200 -speed_wall_0 = 40 +speed_wall_0 = =math.ceil(speed_print * 40 / 30) speed_wall_x = =speed_print support_angle = 70 support_type = buildplate diff --git a/resources/quality/fabtotum/fabtotum_nylon_normal.inst.cfg b/resources/quality/fabtotum/fabtotum_nylon_normal.inst.cfg index 63b2baf019..4a34c7e369 100644 --- a/resources/quality/fabtotum/fabtotum_nylon_normal.inst.cfg +++ b/resources/quality/fabtotum/fabtotum_nylon_normal.inst.cfg @@ -43,11 +43,11 @@ skirt_brim_minimal_length = 75 skirt_gap = 1.5 skirt_line_count = 5 speed_infill = =speed_print -speed_layer_0 = 25 +speed_layer_0 = =math.ceil(speed_print * 25 / 30) speed_print = 30 -speed_topbottom = 40 +speed_topbottom = =math.ceil(speed_print * 40 / 30) speed_travel = 200 -speed_wall_0 = 40 +speed_wall_0 = =math.ceil(speed_print * 40 / 30) speed_wall_x = =speed_print support_angle = 70 support_type = buildplate diff --git a/resources/quality/fast.inst.cfg b/resources/quality/fast.inst.cfg index a725947eba..8227b2fe63 100644 --- a/resources/quality/fast.inst.cfg +++ b/resources/quality/fast.inst.cfg @@ -1,6 +1,6 @@ [general] version = 4 -name = Low Quality +name = Normal definition = fdmprinter [metadata] @@ -14,8 +14,8 @@ global_quality = True infill_sparse_density = 10 layer_height = 0.15 cool_min_layer_time = 3 -speed_wall_0 = 40 -speed_wall_x = 80 -speed_infill = 100 +speed_wall_0 = =math.ceil(speed_print * 40 / 60) +speed_wall_x = =math.ceil(speed_print * 80 / 60) +speed_infill = =math.ceil(speed_print * 100 / 60) wall_thickness = 1 -speed_topbottom = 30 +speed_topbottom = =math.ceil(speed_print * 30 / 60) diff --git a/resources/quality/high.inst.cfg b/resources/quality/high.inst.cfg index 673ce56f04..ca621a2b9d 100644 --- a/resources/quality/high.inst.cfg +++ b/resources/quality/high.inst.cfg @@ -12,5 +12,5 @@ global_quality = True [values] layer_height = 0.06 -speed_topbottom = 15 -speed_infill = 80 +speed_topbottom = =math.ceil(speed_print * 15 / 60) +speed_infill = =math.ceil(speed_print * 80 / 60) diff --git a/resources/quality/imade3d_jellybox/generic_petg_0.4_coarse.inst.cfg b/resources/quality/imade3d_jellybox/generic_petg_0.4_coarse.inst.cfg index 25b6f1155a..4d12c193c0 100644 --- a/resources/quality/imade3d_jellybox/generic_petg_0.4_coarse.inst.cfg +++ b/resources/quality/imade3d_jellybox/generic_petg_0.4_coarse.inst.cfg @@ -43,13 +43,13 @@ skin_no_small_gaps_heuristic = False skirt_brim_minimal_length = 100 skirt_brim_speed = 25 skirt_line_count = 2 -speed_layer_0 = 14 +speed_layer_0 = =math.ceil(speed_print * 14 / 40) speed_print = 40 speed_slowdown_layers = 1 -speed_topbottom = 20 +speed_topbottom = =math.ceil(speed_print * 20 / 40) speed_travel = 120 speed_travel_layer_0 = 60 -speed_wall = 25 -speed_wall_x = 35 +speed_wall = =math.ceil(speed_print * 25 / 40) +speed_wall_x = =math.ceil(speed_print * 35 / 40) top_thickness = =top_bottom_thickness wall_thickness = 0.8 diff --git a/resources/quality/imade3d_jellybox/generic_petg_0.4_coarse_2-fans.inst.cfg b/resources/quality/imade3d_jellybox/generic_petg_0.4_coarse_2-fans.inst.cfg index 2d975b1240..f59bee301a 100644 --- a/resources/quality/imade3d_jellybox/generic_petg_0.4_coarse_2-fans.inst.cfg +++ b/resources/quality/imade3d_jellybox/generic_petg_0.4_coarse_2-fans.inst.cfg @@ -43,13 +43,13 @@ skin_no_small_gaps_heuristic = False skirt_brim_minimal_length = 100 skirt_brim_speed = 25 skirt_line_count = 2 -speed_layer_0 = 14 +speed_layer_0 = =math.ceil(speed_print * 14 / 40) speed_print = 40 speed_slowdown_layers = 1 -speed_topbottom = 20 +speed_topbottom = =math.ceil(speed_print * 20 / 40) speed_travel = 120 speed_travel_layer_0 = 60 -speed_wall = 25 -speed_wall_x = 35 +speed_wall = =math.ceil(speed_print * 25 / 40) +speed_wall_x = =math.ceil(speed_print * 35 / 40) top_thickness = =top_bottom_thickness wall_thickness = 0.8 diff --git a/resources/quality/imade3d_jellybox/generic_petg_0.4_medium.inst.cfg b/resources/quality/imade3d_jellybox/generic_petg_0.4_medium.inst.cfg index c510473c3d..f2abdd22a4 100644 --- a/resources/quality/imade3d_jellybox/generic_petg_0.4_medium.inst.cfg +++ b/resources/quality/imade3d_jellybox/generic_petg_0.4_medium.inst.cfg @@ -43,13 +43,13 @@ skin_no_small_gaps_heuristic = False skirt_brim_minimal_length = 100 skirt_brim_speed = 25 skirt_line_count = 2 -speed_layer_0 = 14 +speed_layer_0 = =math.ceil(speed_print * 14 / 40) speed_print = 40 speed_slowdown_layers = 1 -speed_topbottom = 20 +speed_topbottom = =math.ceil(speed_print * 20 / 40) speed_travel = 120 speed_travel_layer_0 = 60 -speed_wall = 25 -speed_wall_x = 35 +speed_wall = =math.ceil(speed_print * 25 / 40) +speed_wall_x = =math.ceil(speed_print * 35 / 40) top_thickness = =top_bottom_thickness wall_thickness = 0.8 diff --git a/resources/quality/imade3d_jellybox/generic_petg_0.4_medium_2-fans.inst.cfg b/resources/quality/imade3d_jellybox/generic_petg_0.4_medium_2-fans.inst.cfg index 682f850c83..c592252f54 100644 --- a/resources/quality/imade3d_jellybox/generic_petg_0.4_medium_2-fans.inst.cfg +++ b/resources/quality/imade3d_jellybox/generic_petg_0.4_medium_2-fans.inst.cfg @@ -43,13 +43,13 @@ skin_no_small_gaps_heuristic = False skirt_brim_minimal_length = 100 skirt_brim_speed = 25 skirt_line_count = 2 -speed_layer_0 = 14 +speed_layer_0 = =math.ceil(speed_print * 14 / 40) speed_print = 40 speed_slowdown_layers = 1 -speed_topbottom = 20 +speed_topbottom = =math.ceil(speed_print * 20 / 40) speed_travel = 120 speed_travel_layer_0 = 60 -speed_wall = 25 -speed_wall_x = 35 +speed_wall = =math.ceil(speed_print * 25 / 40) +speed_wall_x = =math.ceil(speed_print * 35 / 40) top_thickness = =top_bottom_thickness wall_thickness = 0.8 diff --git a/resources/quality/imade3d_jellybox/generic_pla_0.4_coarse.inst.cfg b/resources/quality/imade3d_jellybox/generic_pla_0.4_coarse.inst.cfg index 264878f9d9..98f9a8cf1b 100644 --- a/resources/quality/imade3d_jellybox/generic_pla_0.4_coarse.inst.cfg +++ b/resources/quality/imade3d_jellybox/generic_pla_0.4_coarse.inst.cfg @@ -41,13 +41,13 @@ skin_no_small_gaps_heuristic = False skirt_brim_minimal_length = 100 skirt_brim_speed = 20 skirt_line_count = 3 -speed_layer_0 = 20 +speed_layer_0 = =math.ceil(speed_print * 20 / 45) speed_print = 45 speed_slowdown_layers = 1 -speed_topbottom = 25 +speed_topbottom = =math.ceil(speed_print * 25 / 45) speed_travel = 120 speed_travel_layer_0 = 60 -speed_wall = 25 -speed_wall_x = 35 +speed_wall = =math.ceil(speed_print * 25 / 45) +speed_wall_x = =math.ceil(speed_print * 35 / 45) top_thickness = 0.8 wall_thickness = 0.8 diff --git a/resources/quality/imade3d_jellybox/generic_pla_0.4_coarse_2-fans.inst.cfg b/resources/quality/imade3d_jellybox/generic_pla_0.4_coarse_2-fans.inst.cfg index 8427144478..fd26acc671 100644 --- a/resources/quality/imade3d_jellybox/generic_pla_0.4_coarse_2-fans.inst.cfg +++ b/resources/quality/imade3d_jellybox/generic_pla_0.4_coarse_2-fans.inst.cfg @@ -41,13 +41,13 @@ skin_no_small_gaps_heuristic = False skirt_brim_minimal_length = 100 skirt_brim_speed = 20 skirt_line_count = 3 -speed_layer_0 = 20 +speed_layer_0 = =math.ceil(speed_print * 20 / 45) speed_print = 45 speed_slowdown_layers = 1 -speed_topbottom = 25 +speed_topbottom = =math.ceil(speed_print * 25 / 45) speed_travel = 120 speed_travel_layer_0 = 60 -speed_wall = 25 -speed_wall_x = 35 +speed_wall = =math.ceil(speed_print * 25 / 45) +speed_wall_x = =math.ceil(speed_print * 35 / 45) top_thickness = 0.8 wall_thickness = 0.8 diff --git a/resources/quality/imade3d_jellybox/generic_pla_0.4_fine.inst.cfg b/resources/quality/imade3d_jellybox/generic_pla_0.4_fine.inst.cfg index 335e62c698..d233e1cd4a 100644 --- a/resources/quality/imade3d_jellybox/generic_pla_0.4_fine.inst.cfg +++ b/resources/quality/imade3d_jellybox/generic_pla_0.4_fine.inst.cfg @@ -42,13 +42,13 @@ skin_no_small_gaps_heuristic = False skirt_brim_minimal_length = 100 skirt_brim_speed = 20 skirt_line_count = 3 -speed_layer_0 = 20 +speed_layer_0 = =math.ceil(speed_print * 20 / 45) speed_print = 45 speed_slowdown_layers = 1 -speed_topbottom = 25 +speed_topbottom = =math.ceil(speed_print * 25 / 45) speed_travel = 120 speed_travel_layer_0 = 60 -speed_wall = 25 -speed_wall_x = 35 +speed_wall = =math.ceil(speed_print * 25 / 45) +speed_wall_x = =math.ceil(speed_print * 35 / 45) top_thickness = 0.8 wall_thickness = 0.8 diff --git a/resources/quality/imade3d_jellybox/generic_pla_0.4_fine_2-fans.inst.cfg b/resources/quality/imade3d_jellybox/generic_pla_0.4_fine_2-fans.inst.cfg index bb4f9f0570..4fd76f6b8d 100644 --- a/resources/quality/imade3d_jellybox/generic_pla_0.4_fine_2-fans.inst.cfg +++ b/resources/quality/imade3d_jellybox/generic_pla_0.4_fine_2-fans.inst.cfg @@ -42,13 +42,13 @@ skin_no_small_gaps_heuristic = False skirt_brim_minimal_length = 100 skirt_brim_speed = 20 skirt_line_count = 3 -speed_layer_0 = 20 +speed_layer_0 = =math.ceil(speed_print * 20 / 45) speed_print = 45 speed_slowdown_layers = 1 -speed_topbottom = 25 +speed_topbottom = =math.ceil(speed_print * 25 / 45) speed_travel = 120 speed_travel_layer_0 = 60 -speed_wall = 25 -speed_wall_x = 35 +speed_wall = =math.ceil(speed_print * 25 / 45) +speed_wall_x = =math.ceil(speed_print * 35 / 45) top_thickness = 0.8 wall_thickness = 0.8 diff --git a/resources/quality/imade3d_jellybox/generic_pla_0.4_medium.inst.cfg b/resources/quality/imade3d_jellybox/generic_pla_0.4_medium.inst.cfg index 8bb391bdaa..1fa7db1c7a 100644 --- a/resources/quality/imade3d_jellybox/generic_pla_0.4_medium.inst.cfg +++ b/resources/quality/imade3d_jellybox/generic_pla_0.4_medium.inst.cfg @@ -41,13 +41,13 @@ skin_no_small_gaps_heuristic = False skirt_brim_minimal_length = 100 skirt_brim_speed = 20 skirt_line_count = 3 -speed_layer_0 = 20 +speed_layer_0 = =math.ceil(speed_print * 20 / 45) speed_print = 45 speed_slowdown_layers = 1 -speed_topbottom = 25 +speed_topbottom = =math.ceil(speed_print * 25 / 45) speed_travel = 120 speed_travel_layer_0 = 60 -speed_wall = 25 -speed_wall_x = 35 +speed_wall = =math.ceil(speed_print * 25 / 45) +speed_wall_x = =math.ceil(speed_print * 35 / 45) top_thickness = 0.8 wall_thickness = 0.8 diff --git a/resources/quality/imade3d_jellybox/generic_pla_0.4_medium_2-fans.inst.cfg b/resources/quality/imade3d_jellybox/generic_pla_0.4_medium_2-fans.inst.cfg index 9e4d8efddc..402d4dda1d 100644 --- a/resources/quality/imade3d_jellybox/generic_pla_0.4_medium_2-fans.inst.cfg +++ b/resources/quality/imade3d_jellybox/generic_pla_0.4_medium_2-fans.inst.cfg @@ -41,13 +41,13 @@ skin_no_small_gaps_heuristic = False skirt_brim_minimal_length = 100 skirt_brim_speed = 20 skirt_line_count = 3 -speed_layer_0 = 20 +speed_layer_0 = =math.ceil(speed_print * 20 / 45) speed_print = 45 speed_slowdown_layers = 1 -speed_topbottom = 25 +speed_topbottom = =math.ceil(speed_print * 25 / 45) speed_travel = 120 speed_travel_layer_0 = 60 -speed_wall = 25 -speed_wall_x = 35 +speed_wall = =math.ceil(speed_print * 25 / 45) +speed_wall_x = =math.ceil(speed_print * 35 / 45) top_thickness = 0.8 wall_thickness = 0.8 diff --git a/resources/quality/imade3d_jellybox/generic_pla_0.4_ultrafine.inst.cfg b/resources/quality/imade3d_jellybox/generic_pla_0.4_ultrafine.inst.cfg index aac761463d..de4302e853 100644 --- a/resources/quality/imade3d_jellybox/generic_pla_0.4_ultrafine.inst.cfg +++ b/resources/quality/imade3d_jellybox/generic_pla_0.4_ultrafine.inst.cfg @@ -43,13 +43,13 @@ skin_no_small_gaps_heuristic = False skirt_brim_minimal_length = 100 skirt_brim_speed = 20 skirt_line_count = 3 -speed_layer_0 = 20 +speed_layer_0 = =math.ceil(speed_print * 20 / 45) speed_print = 45 speed_slowdown_layers = 1 -speed_topbottom = 25 +speed_topbottom = =math.ceil(speed_print * 25 / 45) speed_travel = 120 speed_travel_layer_0 = 60 -speed_wall = 25 -speed_wall_x = 35 +speed_wall = =math.ceil(speed_print * 25 / 45) +speed_wall_x = =math.ceil(speed_print * 35 / 45) top_thickness = 0.8 wall_thickness = 0.8 diff --git a/resources/quality/imade3d_jellybox/generic_pla_0.4_ultrafine_2-fans.inst.cfg b/resources/quality/imade3d_jellybox/generic_pla_0.4_ultrafine_2-fans.inst.cfg index 8df712f8ee..28425681fd 100644 --- a/resources/quality/imade3d_jellybox/generic_pla_0.4_ultrafine_2-fans.inst.cfg +++ b/resources/quality/imade3d_jellybox/generic_pla_0.4_ultrafine_2-fans.inst.cfg @@ -43,13 +43,13 @@ skin_no_small_gaps_heuristic = False skirt_brim_minimal_length = 100 skirt_brim_speed = 20 skirt_line_count = 3 -speed_layer_0 = 20 +speed_layer_0 = =math.ceil(speed_print * 20 / 45) speed_print = 45 speed_slowdown_layers = 1 -speed_topbottom = 25 +speed_topbottom = =math.ceil(speed_print * 25 / 45) speed_travel = 120 speed_travel_layer_0 = 60 -speed_wall = 25 -speed_wall_x = 35 +speed_wall = =math.ceil(speed_print * 25 / 45) +speed_wall_x = =math.ceil(speed_print * 35 / 45) top_thickness = 0.8 wall_thickness = 0.8 diff --git a/resources/quality/kemiq_q2/kemiq_q2_beta_abs_draft.inst.cfg b/resources/quality/kemiq_q2/kemiq_q2_beta_abs_draft.inst.cfg index 38a5208905..c9f38786f8 100644 --- a/resources/quality/kemiq_q2/kemiq_q2_beta_abs_draft.inst.cfg +++ b/resources/quality/kemiq_q2/kemiq_q2_beta_abs_draft.inst.cfg @@ -15,11 +15,11 @@ layer_height = 0.35 layer_height_0 = 0.3 speed_print = 70 -speed_infill = 60 -speed_layer_0 = 20 -speed_wall_0 = 30 -speed_wall_x = 50 -speed_topbottom = 30 +speed_infill = =math.ceil(speed_print * 60 / 70) +speed_layer_0 = =math.ceil(speed_print * 20 / 70) +speed_wall_0 = =math.ceil(speed_print * 30 / 70) +speed_wall_x = =math.ceil(speed_print * 50 / 70) +speed_topbottom = =math.ceil(speed_print * 30 / 70) speed_travel = 120 material_print_temperature = 246 diff --git a/resources/quality/kemiq_q2/kemiq_q2_beta_abs_extra_fine.inst.cfg b/resources/quality/kemiq_q2/kemiq_q2_beta_abs_extra_fine.inst.cfg index 9438ecbfa7..a402bb0990 100644 --- a/resources/quality/kemiq_q2/kemiq_q2_beta_abs_extra_fine.inst.cfg +++ b/resources/quality/kemiq_q2/kemiq_q2_beta_abs_extra_fine.inst.cfg @@ -15,11 +15,11 @@ layer_height = 0.06 layer_height_0 = 0.3 speed_print = 40 -speed_infill = 50 -speed_layer_0 = 15 -speed_wall_0 = 20 -speed_wall_x = 40 -speed_topbottom = 20 +speed_infill = =math.ceil(speed_print * 50 / 40) +speed_layer_0 = =math.ceil(speed_print * 15 / 40) +speed_wall_0 = =math.ceil(speed_print * 20 / 40) +speed_wall_x = =speed_print +speed_topbottom = =math.ceil(speed_print * 20 / 40) speed_travel = 120 material_print_temperature = 246 diff --git a/resources/quality/kemiq_q2/kemiq_q2_beta_abs_fine.inst.cfg b/resources/quality/kemiq_q2/kemiq_q2_beta_abs_fine.inst.cfg index 16d3367472..0aa0c8ace0 100644 --- a/resources/quality/kemiq_q2/kemiq_q2_beta_abs_fine.inst.cfg +++ b/resources/quality/kemiq_q2/kemiq_q2_beta_abs_fine.inst.cfg @@ -15,11 +15,11 @@ layer_height = 0.1 layer_height_0 = 0.3 speed_print = 50 -speed_infill = 60 -speed_layer_0 = 20 -speed_wall_0 = 25 -speed_wall_x = 45 -speed_topbottom = 30 +speed_infill = =math.ceil(speed_print * 60 / 50) +speed_layer_0 = =math.ceil(speed_print * 20 / 50) +speed_wall_0 = =math.ceil(speed_print * 25 / 50) +speed_wall_x = =math.ceil(speed_print * 45 / 50) +speed_topbottom = =math.ceil(speed_print * 30 / 50) speed_travel = 120 material_print_temperature = 246 diff --git a/resources/quality/kemiq_q2/kemiq_q2_beta_abs_low.inst.cfg b/resources/quality/kemiq_q2/kemiq_q2_beta_abs_low.inst.cfg index d0b15cf47b..8c3d118315 100644 --- a/resources/quality/kemiq_q2/kemiq_q2_beta_abs_low.inst.cfg +++ b/resources/quality/kemiq_q2/kemiq_q2_beta_abs_low.inst.cfg @@ -15,11 +15,11 @@ layer_height = 0.2 layer_height_0 = 0.3 speed_print = 70 -speed_infill = 60 -speed_layer_0 = 20 -speed_wall_0 = 30 -speed_wall_x = 50 -speed_topbottom = 30 +speed_infill = =math.ceil(speed_print * 60 / 70) +speed_layer_0 = =math.ceil(speed_print * 20 / 70) +speed_wall_0 = =math.ceil(speed_print * 30 / 70) +speed_wall_x = =math.ceil(speed_print * 50 / 70) +speed_topbottom = =math.ceil(speed_print * 30 / 70) speed_travel = 120 material_print_temperature = 246 diff --git a/resources/quality/kemiq_q2/kemiq_q2_beta_abs_normal.inst.cfg b/resources/quality/kemiq_q2/kemiq_q2_beta_abs_normal.inst.cfg index 2d32a0cc87..a889f34610 100644 --- a/resources/quality/kemiq_q2/kemiq_q2_beta_abs_normal.inst.cfg +++ b/resources/quality/kemiq_q2/kemiq_q2_beta_abs_normal.inst.cfg @@ -15,11 +15,11 @@ layer_height = 0.15 layer_height_0 = 0.3 speed_print = 60 -speed_infill = 50 -speed_layer_0 = 15 -speed_wall_0 = 20 -speed_wall_x = 40 -speed_topbottom = 20 +speed_infill = =math.ceil(speed_print * 50 / 60) +speed_layer_0 = =math.ceil(speed_print * 15 / 60) +speed_wall_0 = =math.ceil(speed_print * 20 / 60) +speed_wall_x = =math.ceil(speed_print * 40 / 60) +speed_topbottom = =math.ceil(speed_print * 20 / 60) speed_travel = 120 material_print_temperature = 246 diff --git a/resources/quality/kemiq_q2/kemiq_q2_gama_pla_extra_fine.inst.cfg b/resources/quality/kemiq_q2/kemiq_q2_gama_pla_extra_fine.inst.cfg index 8c0d1cf9ca..78a59d00c2 100644 --- a/resources/quality/kemiq_q2/kemiq_q2_gama_pla_extra_fine.inst.cfg +++ b/resources/quality/kemiq_q2/kemiq_q2_gama_pla_extra_fine.inst.cfg @@ -15,11 +15,11 @@ layer_height = 0.06 adhesion_type = skirt speed_print = 40 -speed_infill = 50 -speed_layer_0 = 15 -speed_wall_0 = 20 -speed_wall_x = 40 -speed_topbottom = 20 +speed_infill = =math.ceil(speed_print * 50 / 40) +speed_layer_0 = =math.ceil(speed_print * 15 / 40) +speed_wall_0 = =math.ceil(speed_print * 20 / 40) +speed_wall_x = =speed_print +speed_topbottom = =math.ceil(speed_print * 20 / 40) speed_travel = 120 material_print_temperature = 214 diff --git a/resources/quality/kemiq_q2/kemiq_q2_gama_pla_fine.inst.cfg b/resources/quality/kemiq_q2/kemiq_q2_gama_pla_fine.inst.cfg index b1e576f162..5ce23ce0d3 100644 --- a/resources/quality/kemiq_q2/kemiq_q2_gama_pla_fine.inst.cfg +++ b/resources/quality/kemiq_q2/kemiq_q2_gama_pla_fine.inst.cfg @@ -15,11 +15,11 @@ layer_height = 0.1 adhesion_type = skirt speed_print = 50 -speed_infill = 60 -speed_layer_0 = 20 -speed_wall_0 = 25 -speed_wall_x = 45 -speed_topbottom = 30 +speed_infill = =math.ceil(speed_print * 60 / 50) +speed_layer_0 = =math.ceil(speed_print * 20 / 50) +speed_wall_0 = =math.ceil(speed_print * 25 / 50) +speed_wall_x = =math.ceil(speed_print * 45 / 50) +speed_topbottom = =math.ceil(speed_print * 30 / 50) speed_travel = 120 material_print_temperature = 214 diff --git a/resources/quality/kemiq_q2/kemiq_q2_gama_pla_normal.inst.cfg b/resources/quality/kemiq_q2/kemiq_q2_gama_pla_normal.inst.cfg index da6d2d89ae..75b7407449 100644 --- a/resources/quality/kemiq_q2/kemiq_q2_gama_pla_normal.inst.cfg +++ b/resources/quality/kemiq_q2/kemiq_q2_gama_pla_normal.inst.cfg @@ -15,11 +15,11 @@ layer_height = 0.15 adhesion_type = skirt speed_print = 60 -speed_infill = 50 -speed_layer_0 = 15 -speed_wall_0 = 20 -speed_wall_x = 40 -speed_topbottom = 20 +speed_infill = =math.ceil(speed_print * 50 / 60) +speed_layer_0 = =math.ceil(speed_print * 15 / 60) +speed_wall_0 = =math.ceil(speed_print * 20 / 60) +speed_wall_x = =math.ceil(speed_print * 40 / 60) +speed_topbottom = =math.ceil(speed_print * 20 / 60) speed_travel = 120 material_print_temperature = 214 diff --git a/resources/quality/malyan_m200/malyan_m200_global_Draft_Quality.inst.cfg b/resources/quality/malyan_m200/malyan_m200_global_Draft_Quality.inst.cfg index 91153f57f7..257f5a9e81 100644 --- a/resources/quality/malyan_m200/malyan_m200_global_Draft_Quality.inst.cfg +++ b/resources/quality/malyan_m200/malyan_m200_global_Draft_Quality.inst.cfg @@ -18,6 +18,6 @@ top_bottom_thickness = 0.72 infill_sparse_density = 22 speed_print = 50 speed_layer_0 = =round(speed_print * 30 / 50) -speed_topbottom = 20 +speed_topbottom = =math.ceil(speed_print * 20 / 50) cool_min_layer_time = 5 cool_min_speed = 10 diff --git a/resources/quality/malyan_m200/malyan_m200_global_Fast_Quality.inst.cfg b/resources/quality/malyan_m200/malyan_m200_global_Fast_Quality.inst.cfg index 6b29fc3649..c7d789e4cf 100644 --- a/resources/quality/malyan_m200/malyan_m200_global_Fast_Quality.inst.cfg +++ b/resources/quality/malyan_m200/malyan_m200_global_Fast_Quality.inst.cfg @@ -18,6 +18,6 @@ top_bottom_thickness = 0.72 infill_sparse_density = 22 speed_print = 50 speed_layer_0 = =round(speed_print * 30 / 50) -speed_topbottom = 20 +speed_topbottom = =math.ceil(speed_print * 20 / 50) cool_min_layer_time = 5 cool_min_speed = 10 diff --git a/resources/quality/malyan_m200/malyan_m200_global_High_Quality.inst.cfg b/resources/quality/malyan_m200/malyan_m200_global_High_Quality.inst.cfg index c32814152f..f474170e69 100644 --- a/resources/quality/malyan_m200/malyan_m200_global_High_Quality.inst.cfg +++ b/resources/quality/malyan_m200/malyan_m200_global_High_Quality.inst.cfg @@ -18,6 +18,6 @@ top_bottom_thickness = 0.72 infill_sparse_density = 22 speed_print = 50 speed_layer_0 = =round(speed_print * 30 / 50) -speed_topbottom = 20 +speed_topbottom = =math.ceil(speed_print * 20 / 50) cool_min_layer_time = 5 cool_min_speed = 10 diff --git a/resources/quality/malyan_m200/malyan_m200_global_Normal_Quality.inst.cfg b/resources/quality/malyan_m200/malyan_m200_global_Normal_Quality.inst.cfg index eb29cfa8a5..b887c3a1f9 100644 --- a/resources/quality/malyan_m200/malyan_m200_global_Normal_Quality.inst.cfg +++ b/resources/quality/malyan_m200/malyan_m200_global_Normal_Quality.inst.cfg @@ -18,6 +18,6 @@ top_bottom_thickness = 0.72 infill_sparse_density = 22 speed_print = 50 speed_layer_0 = =round(speed_print * 30 / 50) -speed_topbottom = 20 +speed_topbottom = =math.ceil(speed_print * 20 / 50) cool_min_layer_time = 5 cool_min_speed = 10 diff --git a/resources/quality/malyan_m200/malyan_m200_global_SuperDraft_Quality.inst.cfg b/resources/quality/malyan_m200/malyan_m200_global_SuperDraft_Quality.inst.cfg index 47bd154d90..0182bb2ad9 100644 --- a/resources/quality/malyan_m200/malyan_m200_global_SuperDraft_Quality.inst.cfg +++ b/resources/quality/malyan_m200/malyan_m200_global_SuperDraft_Quality.inst.cfg @@ -18,6 +18,6 @@ top_bottom_thickness = 0.72 infill_sparse_density = 22 speed_print = 50 speed_layer_0 = =round(speed_print * 30 / 50) -speed_topbottom = 20 +speed_topbottom = =math.ceil(speed_print * 20 / 50) cool_min_layer_time = 5 cool_min_speed = 10 diff --git a/resources/quality/malyan_m200/malyan_m200_global_ThickerDraft_Quality.inst.cfg b/resources/quality/malyan_m200/malyan_m200_global_ThickerDraft_Quality.inst.cfg index c7b6a0b44d..22fa4e8ada 100644 --- a/resources/quality/malyan_m200/malyan_m200_global_ThickerDraft_Quality.inst.cfg +++ b/resources/quality/malyan_m200/malyan_m200_global_ThickerDraft_Quality.inst.cfg @@ -18,6 +18,6 @@ top_bottom_thickness = 0.72 infill_sparse_density = 22 speed_print = 50 speed_layer_0 = =round(speed_print * 30 / 50) -speed_topbottom = 20 +speed_topbottom = =math.ceil(speed_print * 20 / 50) cool_min_layer_time = 5 cool_min_speed = 10 diff --git a/resources/quality/malyan_m200/malyan_m200_global_Ultra_Quality.inst.cfg b/resources/quality/malyan_m200/malyan_m200_global_Ultra_Quality.inst.cfg index f3917e23f7..31edd74bfe 100644 --- a/resources/quality/malyan_m200/malyan_m200_global_Ultra_Quality.inst.cfg +++ b/resources/quality/malyan_m200/malyan_m200_global_Ultra_Quality.inst.cfg @@ -18,6 +18,6 @@ top_bottom_thickness = 0.72 infill_sparse_density = 22 speed_print = 50 speed_layer_0 = =round(speed_print * 30 / 50) -speed_topbottom = 20 +speed_topbottom = =math.ceil(speed_print * 20 / 50) cool_min_layer_time = 5 cool_min_speed = 10 diff --git a/resources/quality/malyan_m200/malyan_m200_global_VeryDraft_Quality.inst.cfg b/resources/quality/malyan_m200/malyan_m200_global_VeryDraft_Quality.inst.cfg index 281374a7f1..f6d3119ada 100644 --- a/resources/quality/malyan_m200/malyan_m200_global_VeryDraft_Quality.inst.cfg +++ b/resources/quality/malyan_m200/malyan_m200_global_VeryDraft_Quality.inst.cfg @@ -18,6 +18,6 @@ top_bottom_thickness = 0.72 infill_sparse_density = 22 speed_print = 50 speed_layer_0 = =round(speed_print * 30 / 50) -speed_topbottom = 20 +speed_topbottom = =math.ceil(speed_print * 20 / 50) cool_min_layer_time = 5 cool_min_speed = 10 diff --git a/resources/quality/monoprice_select_mini_v2/monoprice_select_mini_v2_global_Draft_Quality.inst.cfg b/resources/quality/monoprice_select_mini_v2/monoprice_select_mini_v2_global_Draft_Quality.inst.cfg index 002784bf21..ca03cca9a6 100644 --- a/resources/quality/monoprice_select_mini_v2/monoprice_select_mini_v2_global_Draft_Quality.inst.cfg +++ b/resources/quality/monoprice_select_mini_v2/monoprice_select_mini_v2_global_Draft_Quality.inst.cfg @@ -18,6 +18,6 @@ top_bottom_thickness = 0.72 infill_sparse_density = 22 speed_print = 50 speed_layer_0 = =round(speed_print * 30 / 50) -speed_topbottom = 20 +speed_topbottom = =math.ceil(speed_print * 20 / 50) cool_min_layer_time = 5 cool_min_speed = 10 diff --git a/resources/quality/monoprice_select_mini_v2/monoprice_select_mini_v2_global_Fast_Quality.inst.cfg b/resources/quality/monoprice_select_mini_v2/monoprice_select_mini_v2_global_Fast_Quality.inst.cfg index 31965ff4ef..32cf802c6f 100644 --- a/resources/quality/monoprice_select_mini_v2/monoprice_select_mini_v2_global_Fast_Quality.inst.cfg +++ b/resources/quality/monoprice_select_mini_v2/monoprice_select_mini_v2_global_Fast_Quality.inst.cfg @@ -18,6 +18,6 @@ top_bottom_thickness = 0.72 infill_sparse_density = 22 speed_print = 50 speed_layer_0 = =round(speed_print * 30 / 50) -speed_topbottom = 20 +speed_topbottom = =math.ceil(speed_print * 20 / 50) cool_min_layer_time = 5 cool_min_speed = 10 diff --git a/resources/quality/monoprice_select_mini_v2/monoprice_select_mini_v2_global_High_Quality.inst.cfg b/resources/quality/monoprice_select_mini_v2/monoprice_select_mini_v2_global_High_Quality.inst.cfg index a828a3466f..4913e1c415 100644 --- a/resources/quality/monoprice_select_mini_v2/monoprice_select_mini_v2_global_High_Quality.inst.cfg +++ b/resources/quality/monoprice_select_mini_v2/monoprice_select_mini_v2_global_High_Quality.inst.cfg @@ -18,6 +18,6 @@ top_bottom_thickness = 0.72 infill_sparse_density = 22 speed_print = 50 speed_layer_0 = =round(speed_print * 30 / 50) -speed_topbottom = 20 +speed_topbottom = =math.ceil(speed_print * 20 / 50) cool_min_layer_time = 5 cool_min_speed = 10 diff --git a/resources/quality/monoprice_select_mini_v2/monoprice_select_mini_v2_global_Normal_Quality.inst.cfg b/resources/quality/monoprice_select_mini_v2/monoprice_select_mini_v2_global_Normal_Quality.inst.cfg index 560a98eedd..1d14d2d9cf 100644 --- a/resources/quality/monoprice_select_mini_v2/monoprice_select_mini_v2_global_Normal_Quality.inst.cfg +++ b/resources/quality/monoprice_select_mini_v2/monoprice_select_mini_v2_global_Normal_Quality.inst.cfg @@ -18,6 +18,6 @@ top_bottom_thickness = 0.72 infill_sparse_density = 22 speed_print = 50 speed_layer_0 = =round(speed_print * 30 / 50) -speed_topbottom = 20 +speed_topbottom = =math.ceil(speed_print * 20 / 50) cool_min_layer_time = 5 cool_min_speed = 10 diff --git a/resources/quality/monoprice_select_mini_v2/monoprice_select_mini_v2_global_SuperDraft_Quality.inst.cfg b/resources/quality/monoprice_select_mini_v2/monoprice_select_mini_v2_global_SuperDraft_Quality.inst.cfg index 32aab452b9..9b6fc58109 100644 --- a/resources/quality/monoprice_select_mini_v2/monoprice_select_mini_v2_global_SuperDraft_Quality.inst.cfg +++ b/resources/quality/monoprice_select_mini_v2/monoprice_select_mini_v2_global_SuperDraft_Quality.inst.cfg @@ -18,6 +18,6 @@ top_bottom_thickness = 0.72 infill_sparse_density = 22 speed_print = 50 speed_layer_0 = =round(speed_print * 30 / 50) -speed_topbottom = 20 +speed_topbottom = =math.ceil(speed_print * 20 / 50) cool_min_layer_time = 5 cool_min_speed = 10 diff --git a/resources/quality/monoprice_select_mini_v2/monoprice_select_mini_v2_global_ThickerDraft_Quality.inst.cfg b/resources/quality/monoprice_select_mini_v2/monoprice_select_mini_v2_global_ThickerDraft_Quality.inst.cfg index d591899d58..c8494b4600 100644 --- a/resources/quality/monoprice_select_mini_v2/monoprice_select_mini_v2_global_ThickerDraft_Quality.inst.cfg +++ b/resources/quality/monoprice_select_mini_v2/monoprice_select_mini_v2_global_ThickerDraft_Quality.inst.cfg @@ -18,6 +18,6 @@ top_bottom_thickness = 0.72 infill_sparse_density = 22 speed_print = 50 speed_layer_0 = =round(speed_print * 30 / 50) -speed_topbottom = 20 +speed_topbottom = =math.ceil(speed_print * 20 / 50) cool_min_layer_time = 5 cool_min_speed = 10 diff --git a/resources/quality/monoprice_select_mini_v2/monoprice_select_mini_v2_global_Ultra_Quality.inst.cfg b/resources/quality/monoprice_select_mini_v2/monoprice_select_mini_v2_global_Ultra_Quality.inst.cfg index 2d1cb39569..25d453a7a1 100644 --- a/resources/quality/monoprice_select_mini_v2/monoprice_select_mini_v2_global_Ultra_Quality.inst.cfg +++ b/resources/quality/monoprice_select_mini_v2/monoprice_select_mini_v2_global_Ultra_Quality.inst.cfg @@ -18,6 +18,6 @@ top_bottom_thickness = 0.72 infill_sparse_density = 22 speed_print = 50 speed_layer_0 = =round(speed_print * 30 / 50) -speed_topbottom = 20 +speed_topbottom = =math.ceil(speed_print * 20 / 50) cool_min_layer_time = 5 cool_min_speed = 10 diff --git a/resources/quality/monoprice_select_mini_v2/monoprice_select_mini_v2_global_VeryDraft_Quality.inst.cfg b/resources/quality/monoprice_select_mini_v2/monoprice_select_mini_v2_global_VeryDraft_Quality.inst.cfg index 41e6553b52..8e583a463d 100644 --- a/resources/quality/monoprice_select_mini_v2/monoprice_select_mini_v2_global_VeryDraft_Quality.inst.cfg +++ b/resources/quality/monoprice_select_mini_v2/monoprice_select_mini_v2_global_VeryDraft_Quality.inst.cfg @@ -18,6 +18,6 @@ top_bottom_thickness = 0.72 infill_sparse_density = 22 speed_print = 50 speed_layer_0 = =round(speed_print * 30 / 50) -speed_topbottom = 20 +speed_topbottom = =math.ceil(speed_print * 20 / 50) cool_min_layer_time = 5 cool_min_speed = 10 diff --git a/resources/quality/tevo_blackwidow/tevo_blackwidow_draft.inst.cfg b/resources/quality/tevo_blackwidow/tevo_blackwidow_draft.inst.cfg index 29de7591bf..b85fc8c95c 100644 --- a/resources/quality/tevo_blackwidow/tevo_blackwidow_draft.inst.cfg +++ b/resources/quality/tevo_blackwidow/tevo_blackwidow_draft.inst.cfg @@ -14,13 +14,13 @@ brim_width = 4.0 infill_pattern = zigzag layer_height = 0.3 material_diameter = 1.75 -speed_infill = 50 +speed_infill = =speed_print speed_print = 50 speed_support = 30 -speed_topbottom = 20 +speed_topbottom = =math.ceil(speed_print * 20 / 50) speed_travel = 100 -speed_wall = 50 -speed_wall_x = 50 +speed_wall = =speed_print +speed_wall_x = =speed_print support_angle = 60 support_enable = True support_interface_enable = True diff --git a/resources/quality/tevo_blackwidow/tevo_blackwidow_high.inst.cfg b/resources/quality/tevo_blackwidow/tevo_blackwidow_high.inst.cfg index e495d2d74b..9b52da8c0b 100644 --- a/resources/quality/tevo_blackwidow/tevo_blackwidow_high.inst.cfg +++ b/resources/quality/tevo_blackwidow/tevo_blackwidow_high.inst.cfg @@ -14,13 +14,13 @@ brim_width = 4.0 infill_pattern = zigzag layer_height = 0.1 material_diameter = 1.75 -speed_infill = 50 +speed_infill = =speed_print speed_print = 50 speed_support = 30 -speed_topbottom = 15 +speed_topbottom = =math.ceil(speed_print * 15 / 50) speed_travel = 100 -speed_wall = 50 -speed_wall_x = 50 +speed_wall = =speed_print +speed_wall_x = =speed_print support_angle = 60 support_enable = True support_interface_enable = True diff --git a/resources/quality/tevo_blackwidow/tevo_blackwidow_normal.inst.cfg b/resources/quality/tevo_blackwidow/tevo_blackwidow_normal.inst.cfg index 4df87784ef..a171463fde 100644 --- a/resources/quality/tevo_blackwidow/tevo_blackwidow_normal.inst.cfg +++ b/resources/quality/tevo_blackwidow/tevo_blackwidow_normal.inst.cfg @@ -14,13 +14,13 @@ brim_width = 4.0 infill_pattern = zigzag layer_height = 0.2 material_diameter = 1.75 -speed_infill = 60 +speed_infill = =math.ceil(speed_print * 60 / 50) speed_print = 50 speed_support = 30 -speed_topbottom = 20 +speed_topbottom = =math.ceil(speed_print * 20 / 50) speed_travel = 100 -speed_wall = 50 -speed_wall_x = 50 +speed_wall = =speed_print +speed_wall_x = =speed_print support_angle = 60 support_enable = True support_interface_enable = True diff --git a/resources/quality/ultimaker2/um2_draft.inst.cfg b/resources/quality/ultimaker2/um2_draft.inst.cfg index faf2b68208..27c40da15f 100644 --- a/resources/quality/ultimaker2/um2_draft.inst.cfg +++ b/resources/quality/ultimaker2/um2_draft.inst.cfg @@ -1,6 +1,6 @@ [general] version = 4 -name = Draft Quality +name = Draft definition = ultimaker2 [metadata] diff --git a/resources/quality/ultimaker2/um2_fast.inst.cfg b/resources/quality/ultimaker2/um2_fast.inst.cfg index 99ddb540cc..236a6f73cd 100644 --- a/resources/quality/ultimaker2/um2_fast.inst.cfg +++ b/resources/quality/ultimaker2/um2_fast.inst.cfg @@ -1,6 +1,6 @@ [general] version = 4 -name = Low Quality +name = Normal definition = ultimaker2 [metadata] @@ -14,8 +14,8 @@ global_quality = True infill_sparse_density = 10 layer_height = 0.15 cool_min_layer_time = 3 -speed_wall_0 = 40 -speed_wall_x = 80 -speed_infill = 100 +speed_wall_0 = =math.ceil(speed_print * 40 / 60) +speed_wall_x = =math.ceil(speed_print * 80 / 60) +speed_infill = =math.ceil(speed_print * 100 / 60) wall_thickness = 1 -speed_topbottom = 30 +speed_topbottom = =math.ceil(speed_print * 30 / 60) diff --git a/resources/quality/ultimaker2/um2_high.inst.cfg b/resources/quality/ultimaker2/um2_high.inst.cfg index f54700bf70..74e1f2f528 100644 --- a/resources/quality/ultimaker2/um2_high.inst.cfg +++ b/resources/quality/ultimaker2/um2_high.inst.cfg @@ -12,5 +12,5 @@ global_quality = True [values] layer_height = 0.06 -speed_topbottom = 15 -speed_infill = 80 +speed_topbottom = =math.ceil(speed_print * 15 / 60) +speed_infill = =math.ceil(speed_print * 80 / 60) 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 b50de37b47..02396f6820 100644 --- a/resources/quality/ultimaker2_plus/pla_0.4_fast.inst.cfg +++ b/resources/quality/ultimaker2_plus/pla_0.4_fast.inst.cfg @@ -18,8 +18,8 @@ infill_sparse_density = 18 layer_height = 0.15 speed_layer_0 = =round(speed_print * 30 / 60) speed_print = 60 -speed_topbottom = 30 +speed_topbottom = =math.ceil(speed_print * 30 / 60) speed_travel = 150 -speed_wall = 50 +speed_wall = =math.ceil(speed_print * 50 / 60) top_bottom_thickness = 0.75 wall_thickness = 0.7 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 9481e3427a..62816d0ab0 100644 --- a/resources/quality/ultimaker2_plus/pla_0.4_high.inst.cfg +++ b/resources/quality/ultimaker2_plus/pla_0.4_high.inst.cfg @@ -18,6 +18,6 @@ infill_sparse_density = 22 layer_height = 0.06 speed_layer_0 = =round(speed_print * 30 / 50) speed_print = 50 -speed_topbottom = 20 +speed_topbottom = =math.ceil(speed_print * 20 / 50) top_bottom_thickness = 0.72 wall_thickness = 1.05 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 875db4959f..51aa06dc14 100644 --- a/resources/quality/ultimaker2_plus/pla_0.4_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/pla_0.4_normal.inst.cfg @@ -18,6 +18,6 @@ infill_sparse_density = 20 layer_height = 0.1 speed_layer_0 = =round(speed_print * 30 / 50) speed_print = 50 -speed_topbottom = 20 +speed_topbottom = =math.ceil(speed_print * 20 / 50) top_bottom_thickness = 0.8 wall_thickness = 1.05 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 b07b4931ca..f6384421b2 100644 --- a/resources/quality/ultimaker2_plus/pla_0.6_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/pla_0.6_normal.inst.cfg @@ -18,8 +18,8 @@ infill_sparse_density = 20 layer_height = 0.15 speed_layer_0 = =round(speed_print * 30 / 55) speed_print = 55 -speed_topbottom = 20 -speed_wall = 40 -speed_wall_0 = 25 +speed_topbottom = =math.ceil(speed_print * 20 / 55) +speed_wall = =math.ceil(speed_print * 40 / 55) +speed_wall_0 = =math.ceil(speed_print * 25 / 55) top_bottom_thickness = 1.2 wall_thickness = 1.59 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 0e76e53316..314ef8ec68 100644 --- a/resources/quality/ultimaker2_plus/pla_0.8_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/pla_0.8_normal.inst.cfg @@ -18,6 +18,6 @@ infill_sparse_density = 20 layer_height = 0.2 speed_layer_0 = =round(speed_print * 30 / 40) speed_print = 40 -speed_wall_0 = 25 +speed_wall_0 = =math.ceil(speed_print * 25 / 40) top_bottom_thickness = 1.2 wall_thickness = 2.1 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 ded9319b3e..4d7f6eb535 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 @@ -20,8 +20,11 @@ infill_sparse_density = 18 layer_height = 0.15 speed_layer_0 = =round(speed_print * 30 / 55) speed_print = 55 -speed_topbottom = 30 +speed_topbottom = =math.ceil(speed_print * 30 / 55) speed_travel = 150 -speed_wall = 40 +speed_wall = =math.ceil(speed_print * 40 / 55) top_bottom_thickness = 0.75 wall_thickness = 0.7 +speed_wall_0 = =math.ceil(speed_print * 40 / 55) +speed_wall_x = =math.ceil(speed_print * 80 / 55) +speed_infill = =math.ceil(speed_print * 100 / 55) 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 c94333555c..155d890d78 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 @@ -20,6 +20,8 @@ infill_sparse_density = 22 layer_height = 0.06 speed_layer_0 = =round(speed_print * 30 / 45) speed_print = 45 -speed_wall = 30 +speed_wall = =math.ceil(speed_print * 30 / 45) top_bottom_thickness = 0.72 wall_thickness = 1.05 +speed_topbottom = =math.ceil(speed_print * 15 / 45) +speed_infill = =math.ceil(speed_print * 80 / 45) 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 6adb9c9caf..da79e75346 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 @@ -20,6 +20,6 @@ infill_sparse_density = 20 layer_height = 0.1 speed_layer_0 = =round(speed_print * 30 / 45) speed_print = 45 -speed_wall = 30 +speed_wall = =math.ceil(speed_print * 30 / 45) top_bottom_thickness = 0.8 wall_thickness = 1.05 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 332608a2f9..0cb3118bfc 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 @@ -18,7 +18,7 @@ cool_min_layer_time_fan_speed_max = 20 cool_min_speed = 20 infill_sparse_density = 20 layer_height = 0.15 -speed_infill = 55 +speed_infill = =math.ceil(speed_print * 55 / 40) speed_layer_0 = =round(speed_print * 30 / 40) speed_print = 40 top_bottom_thickness = 1.2 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 b9ec279e07..2c3eebc1de 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 @@ -21,6 +21,10 @@ layer_height = 0.15 speed_layer_0 = =round(speed_print * 30 / 45) speed_print = 45 speed_travel = 150 -speed_wall = 40 +speed_wall = =math.ceil(speed_print * 40 / 45) top_bottom_thickness = 0.75 wall_thickness = 0.7 +speed_wall_0 = =math.ceil(speed_print * 40 / 45) +speed_topbottom = =math.ceil(speed_print * 30 / 45) +speed_wall_x = =math.ceil(speed_print * 80 / 45) +speed_infill = =math.ceil(speed_print * 100 / 45) 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 e929d9f545..8facfa298c 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 @@ -20,6 +20,8 @@ infill_sparse_density = 22 layer_height = 0.06 speed_layer_0 = =round(speed_print * 30 / 45) speed_print = 45 -speed_wall = 30 +speed_wall = =math.ceil(speed_print * 30 / 45) top_bottom_thickness = 0.72 wall_thickness = 1.05 +speed_topbottom = =math.ceil(speed_print * 15 / 45) +speed_infill = =math.ceil(speed_print * 80 / 45) 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 7637f6440a..e7d78d68c3 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 @@ -20,6 +20,6 @@ infill_sparse_density = 20 layer_height = 0.1 speed_layer_0 = =round(speed_print * 30 / 45) speed_print = 45 -speed_wall = 30 +speed_wall = =math.ceil(speed_print * 30 / 45) top_bottom_thickness = 0.8 wall_thickness = 1.05 diff --git a/resources/quality/ultimaker2_plus/um2p_cpep_0.4_draft.inst.cfg b/resources/quality/ultimaker2_plus/um2p_cpep_0.4_draft.inst.cfg index fe975128a0..0e366a78fb 100644 --- a/resources/quality/ultimaker2_plus/um2p_cpep_0.4_draft.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_cpep_0.4_draft.inst.cfg @@ -29,11 +29,11 @@ raft_interface_line_spacing = 1 raft_interface_line_width = 0.8 raft_margin = 15 raft_surface_line_width = 0.38 -speed_layer_0 = 15 +speed_layer_0 = =math.ceil(speed_print * 15 / 25) speed_print = 25 -speed_topbottom = 20 -speed_wall_0 = 20 -speed_wall_x = 25 +speed_topbottom = =math.ceil(speed_print * 20 / 25) +speed_wall_0 = =math.ceil(speed_print * 20 / 25) +speed_wall_x = =speed_print support_angle = 45 support_enable = True support_infill_rate = 20 diff --git a/resources/quality/ultimaker2_plus/um2p_cpep_0.4_normal.inst.cfg b/resources/quality/ultimaker2_plus/um2p_cpep_0.4_normal.inst.cfg index e7bb7b3449..4e97629fb2 100644 --- a/resources/quality/ultimaker2_plus/um2p_cpep_0.4_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_cpep_0.4_normal.inst.cfg @@ -29,11 +29,11 @@ raft_interface_line_spacing = 1 raft_interface_line_width = 0.8 raft_margin = 15 raft_surface_line_width = 0.38 -speed_layer_0 = 15 +speed_layer_0 = =math.ceil(speed_print * 15 / 35) speed_print = 35 -speed_topbottom = 20 -speed_wall_0 = 20 -speed_wall_x = 30 +speed_topbottom = =math.ceil(speed_print * 20 / 35) +speed_wall_0 = =math.ceil(speed_print * 20 / 35) +speed_wall_x = =math.ceil(speed_print * 30 / 35) support_angle = 45 support_enable = True support_infill_rate = 20 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 9751bef5fe..7002367337 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 @@ -32,10 +32,10 @@ raft_surface_line_width = 0.57 raft_surface_thickness = 0.2 speed_layer_0 = =round(speed_print * 30 / 50) speed_print = 25 -speed_topbottom = 20 +speed_topbottom = =math.ceil(speed_print * 20 / 25) speed_travel = 150 -speed_wall_0 = 20 -speed_wall_x = 25 +speed_wall_0 = =math.ceil(speed_print * 20 / 25) +speed_wall_x = =speed_print support_angle = 45 support_enable = True support_infill_rate = 20 diff --git a/resources/quality/ultimaker2_plus/um2p_cpep_0.6_normal.inst.cfg b/resources/quality/ultimaker2_plus/um2p_cpep_0.6_normal.inst.cfg index 203d122de5..b79829e3e3 100644 --- a/resources/quality/ultimaker2_plus/um2p_cpep_0.6_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_cpep_0.6_normal.inst.cfg @@ -30,12 +30,12 @@ raft_interface_line_width = 1.2 raft_margin = 15 raft_surface_line_width = 0.57 raft_surface_thickness = 0.2 -speed_layer_0 = 30 +speed_layer_0 = =math.ceil(speed_print * 30 / 35) speed_print = 35 -speed_topbottom = 20 +speed_topbottom = =math.ceil(speed_print * 20 / 35) speed_travel = 150 -speed_wall_0 = 30 -speed_wall_x = 35 +speed_wall_0 = =math.ceil(speed_print * 30 / 35) +speed_wall_x = =speed_print support_angle = 45 support_enable = True support_infill_rate = 20 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 b80949a627..32b79e62cc 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 @@ -30,9 +30,9 @@ raft_surface_line_width = 0.7 raft_surface_thickness = 0.2 speed_layer_0 = =round(speed_print * 30 / 25) speed_print = 25 -speed_topbottom = 20 -speed_wall_0 = 20 -speed_wall_x = 25 +speed_topbottom = =math.ceil(speed_print * 20 / 25) +speed_wall_0 = =math.ceil(speed_print * 20 / 25) +speed_wall_x = =speed_print support_angle = 45 support_enable = True support_infill_rate = 20 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 4f96db3c3b..5ec9db4a02 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 @@ -30,9 +30,9 @@ raft_surface_line_width = 0.7 raft_surface_thickness = 0.2 speed_layer_0 = =round(speed_print * 30 / 30) speed_print = 30 -speed_topbottom = 20 -speed_wall_0 = 20 -speed_wall_x = 30 +speed_topbottom = =math.ceil(speed_print * 20 / 30) +speed_wall_0 = =math.ceil(speed_print * 20 / 30) +speed_wall_x = =speed_print support_angle = 45 support_enable = True support_infill_rate = 20 diff --git a/resources/quality/ultimaker2_plus/um2p_nylon_0.25_high.inst.cfg b/resources/quality/ultimaker2_plus/um2p_nylon_0.25_high.inst.cfg index d31c23a5c0..b4622b1cdc 100644 --- a/resources/quality/ultimaker2_plus/um2p_nylon_0.25_high.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_nylon_0.25_high.inst.cfg @@ -28,13 +28,13 @@ raft_interface_line_width = 0.5 raft_margin = 15 raft_surface_line_width = 0.2 retraction_hop_enabled = 0.2 -speed_layer_0 = 30 +speed_layer_0 = =math.ceil(speed_print * 30 / 40) speed_print = 40 speed_support = 40 -speed_topbottom = 35 +speed_topbottom = =math.ceil(speed_print * 35 / 40) speed_travel = 150 -speed_wall_0 = 20 -speed_wall_x = 40 +speed_wall_0 = =math.ceil(speed_print * 20 / 40) +speed_wall_x = =speed_print support_enable = True support_infill_rate = 20 support_pattern = lines @@ -42,3 +42,4 @@ support_xy_distance = 0.6 support_z_distance = =layer_height * 2 top_bottom_thickness = 1.2 wall_thickness = 1 +speed_infill = =math.ceil(speed_print * 80 / 40) diff --git a/resources/quality/ultimaker2_plus/um2p_nylon_0.25_normal.inst.cfg b/resources/quality/ultimaker2_plus/um2p_nylon_0.25_normal.inst.cfg index 0f9fd57197..6f1eae09c6 100644 --- a/resources/quality/ultimaker2_plus/um2p_nylon_0.25_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_nylon_0.25_normal.inst.cfg @@ -28,13 +28,13 @@ raft_interface_line_width = 0.5 raft_margin = 15 raft_surface_line_width = 0.2 retraction_hop_enabled = 0.2 -speed_layer_0 = 30 +speed_layer_0 = =math.ceil(speed_print * 30 / 40) speed_print = 40 speed_support = 40 -speed_topbottom = 35 +speed_topbottom = =math.ceil(speed_print * 35 / 40) speed_travel = 150 -speed_wall_0 = 20 -speed_wall_x = 40 +speed_wall_0 = =math.ceil(speed_print * 20 / 40) +speed_wall_x = =speed_print support_enable = True support_infill_rate = 20 support_pattern = lines diff --git a/resources/quality/ultimaker2_plus/um2p_nylon_0.4_fast.inst.cfg b/resources/quality/ultimaker2_plus/um2p_nylon_0.4_fast.inst.cfg index 0d8371760f..36fe6170af 100644 --- a/resources/quality/ultimaker2_plus/um2p_nylon_0.4_fast.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_nylon_0.4_fast.inst.cfg @@ -28,11 +28,11 @@ raft_interface_line_width = 0.8 raft_margin = 15 raft_surface_line_width = 0.5 raft_surface_thickness = 0.15 -speed_layer_0 = 30 +speed_layer_0 = =math.ceil(speed_print * 30 / 45) speed_print = 45 -speed_topbottom = 20 +speed_topbottom = =math.ceil(speed_print * 20 / 45) speed_travel = 150 -speed_wall = 40 +speed_wall = =math.ceil(speed_print * 40 / 45) support_angle = 45 support_enable = True support_infill_rate = 25 @@ -41,3 +41,6 @@ support_xy_distance = 0.6 support_z_distance = =layer_height * 2 top_bottom_thickness = 0.75 wall_thickness = 1.06 +speed_wall_0 = =math.ceil(speed_print * 40 / 45) +speed_wall_x = =math.ceil(speed_print * 80 / 45) +speed_infill = =math.ceil(speed_print * 100 / 45) diff --git a/resources/quality/ultimaker2_plus/um2p_nylon_0.4_normal.inst.cfg b/resources/quality/ultimaker2_plus/um2p_nylon_0.4_normal.inst.cfg index 3ac77b3642..7c9c13ad9d 100644 --- a/resources/quality/ultimaker2_plus/um2p_nylon_0.4_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_nylon_0.4_normal.inst.cfg @@ -28,10 +28,10 @@ raft_interface_line_width = 0.8 raft_margin = 15 raft_surface_line_width = 0.5 raft_surface_thickness = 0.15 -speed_layer_0 = 30 +speed_layer_0 = =math.ceil(speed_print * 30 / 45) speed_print = 45 speed_travel = 150 -speed_wall = 40 +speed_wall = =math.ceil(speed_print * 40 / 45) support_angle = 45 support_enable = True support_infill_rate = 25 diff --git a/resources/quality/ultimaker2_plus/um2p_nylon_0.6_fast.inst.cfg b/resources/quality/ultimaker2_plus/um2p_nylon_0.6_fast.inst.cfg index d6332e5688..527a78a6c9 100644 --- a/resources/quality/ultimaker2_plus/um2p_nylon_0.6_fast.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_nylon_0.6_fast.inst.cfg @@ -29,13 +29,13 @@ raft_margin = 15 raft_surface_line_width = 0.6 raft_surface_thickness = 0.15 retraction_hop_enabled = 0.2 -speed_layer_0 = 30 +speed_layer_0 = =math.ceil(speed_print * 30 / 55) speed_print = 55 speed_support = 40 -speed_topbottom = 35 +speed_topbottom = =math.ceil(speed_print * 35 / 55) speed_travel = 150 -speed_wall_0 = 15 -speed_wall_x = 40 +speed_wall_0 = =math.ceil(speed_print * 15 / 55) +speed_wall_x = =math.ceil(speed_print * 40 / 55) support_angle = 45 support_bottom_distance = 0.55 support_enable = True @@ -46,3 +46,4 @@ support_xy_distance = 0.7 support_z_distance = =layer_height * 2 top_bottom_thickness = 1.2 wall_thickness = 1.2 +speed_infill = =math.ceil(speed_print * 100 / 55) diff --git a/resources/quality/ultimaker2_plus/um2p_nylon_0.6_normal.inst.cfg b/resources/quality/ultimaker2_plus/um2p_nylon_0.6_normal.inst.cfg index 22250e1147..adaf07c272 100644 --- a/resources/quality/ultimaker2_plus/um2p_nylon_0.6_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_nylon_0.6_normal.inst.cfg @@ -29,13 +29,13 @@ raft_margin = 15 raft_surface_line_width = 0.6 raft_surface_thickness = 0.15 retraction_hop_enabled = 0.2 -speed_layer_0 = 30 +speed_layer_0 = =math.ceil(speed_print * 30 / 55) speed_print = 55 speed_support = 40 -speed_topbottom = 35 +speed_topbottom = =math.ceil(speed_print * 35 / 55) speed_travel = 150 -speed_wall_0 = 15 -speed_wall_x = 40 +speed_wall_0 = =math.ceil(speed_print * 15 / 55) +speed_wall_x = =math.ceil(speed_print * 40 / 55) support_angle = 45 support_enable = True support_infill_rate = 25 diff --git a/resources/quality/ultimaker2_plus/um2p_nylon_0.8_draft.inst.cfg b/resources/quality/ultimaker2_plus/um2p_nylon_0.8_draft.inst.cfg index 0ba3a33812..cd292e6a2b 100644 --- a/resources/quality/ultimaker2_plus/um2p_nylon_0.8_draft.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_nylon_0.8_draft.inst.cfg @@ -28,13 +28,13 @@ raft_margin = 15 raft_surface_line_width = 0.7 raft_surface_thickness = 0.2 retraction_hop_enabled = 0.2 -speed_layer_0 = 30 +speed_layer_0 = =math.ceil(speed_print * 30 / 55) speed_print = 55 speed_support = 40 -speed_topbottom = 35 +speed_topbottom = =math.ceil(speed_print * 35 / 55) speed_travel = 150 -speed_wall_0 = 15 -speed_wall_x = 40 +speed_wall_0 = =math.ceil(speed_print * 15 / 55) +speed_wall_x = =math.ceil(speed_print * 40 / 55) support_angle = 45 support_bottom_distance = 0.65 support_enable = True 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 5e0d64ec12..a93243dca5 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 @@ -31,10 +31,10 @@ retraction_hop_enabled = 0.2 speed_layer_0 = =round(speed_print * 30 / 55) speed_print = 55 speed_support = 40 -speed_topbottom = 35 +speed_topbottom = =math.ceil(speed_print * 35 / 55) speed_travel = 150 -speed_wall_0 = 15 -speed_wall_x = 40 +speed_wall_0 = =math.ceil(speed_print * 15 / 55) +speed_wall_x = =math.ceil(speed_print * 40 / 55) support_angle = 45 support_bottom_distance = 0.65 support_enable = True 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 d7cafd20a5..4a18f2ac65 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 @@ -36,3 +36,5 @@ support_infill_rate = 20 support_pattern = lines support_z_distance = 0.19 wall_thickness = 0.88 +speed_topbottom = =math.ceil(speed_print * 15 / 30) +speed_infill = =math.ceil(speed_print * 80 / 30) 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 aaf4812786..5cf189f8da 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 @@ -29,11 +29,13 @@ raft_interface_line_width = 0.8 raft_margin = 15 speed_layer_0 = =round(speed_print * 30 / 45) speed_print = 45 -speed_wall_0 = 20 -speed_wall_x = 30 +speed_wall_0 = =math.ceil(speed_print * 20 / 45) +speed_wall_x = =math.ceil(speed_print * 30 / 45) support_angle = 45 support_enable = True support_infill_rate = 20 support_pattern = lines support_z_distance = 0.19 wall_thickness = 1.2 +speed_topbottom = =math.ceil(speed_print * 30 / 45) +speed_infill = =math.ceil(speed_print * 100 / 45) 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 a54ce9d946..32b0c37636 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 @@ -29,8 +29,8 @@ raft_interface_line_width = 0.8 raft_margin = 15 speed_layer_0 = =round(speed_print * 30 / 45) speed_print = 45 -speed_wall_0 = 20 -speed_wall_x = 30 +speed_wall_0 = =math.ceil(speed_print * 20 / 45) +speed_wall_x = =math.ceil(speed_print * 30 / 45) support_angle = 45 support_enable = True support_infill_rate = 20 diff --git a/resources/quality/ultimaker2_plus/um2p_pc_0.6_fast.inst.cfg b/resources/quality/ultimaker2_plus/um2p_pc_0.6_fast.inst.cfg index 2d50f96661..09b60aadff 100644 --- a/resources/quality/ultimaker2_plus/um2p_pc_0.6_fast.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_pc_0.6_fast.inst.cfg @@ -29,12 +29,12 @@ raft_interface_line_width = 1.2 raft_margin = 15 raft_surface_line_width = 0.6 raft_surface_thickness = 0.15 -speed_layer_0 = 30 +speed_layer_0 = =math.ceil(speed_print * 30 / 45) speed_print = 45 -speed_topbottom = 20 +speed_topbottom = =math.ceil(speed_print * 20 / 45) speed_travel = 150 -speed_wall_0 = 30 -speed_wall_x = 40 +speed_wall_0 = =math.ceil(speed_print * 30 / 45) +speed_wall_x = =math.ceil(speed_print * 40 / 45) support_angle = 45 support_enable = True support_infill_rate = 20 @@ -43,3 +43,4 @@ support_pattern = lines support_z_distance = 0.21 top_bottom_thickness = 0.75 wall_thickness = 1.06 +speed_infill = =math.ceil(speed_print * 100 / 45) diff --git a/resources/quality/ultimaker2_plus/um2p_pc_0.6_normal.inst.cfg b/resources/quality/ultimaker2_plus/um2p_pc_0.6_normal.inst.cfg index a19483c39a..b4b556a720 100644 --- a/resources/quality/ultimaker2_plus/um2p_pc_0.6_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_pc_0.6_normal.inst.cfg @@ -29,12 +29,12 @@ raft_interface_line_width = 1.2 raft_margin = 15 raft_surface_line_width = 0.6 raft_surface_thickness = 0.15 -speed_layer_0 = 30 +speed_layer_0 = =math.ceil(speed_print * 30 / 45) speed_print = 45 -speed_topbottom = 20 +speed_topbottom = =math.ceil(speed_print * 20 / 45) speed_travel = 150 -speed_wall_0 = 30 -speed_wall_x = 40 +speed_wall_0 = =math.ceil(speed_print * 30 / 45) +speed_wall_x = =math.ceil(speed_print * 40 / 45) support_angle = 45 support_enable = True support_infill_rate = 20 diff --git a/resources/quality/ultimaker2_plus/um2p_pp_0.4_fast.inst.cfg b/resources/quality/ultimaker2_plus/um2p_pp_0.4_fast.inst.cfg index 16c4a47340..4a12fe0883 100644 --- a/resources/quality/ultimaker2_plus/um2p_pp_0.4_fast.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_pp_0.4_fast.inst.cfg @@ -50,7 +50,7 @@ retraction_hop_only_when_collides = True retraction_min_travel = 0.5 retraction_prime_speed = 15 skin_overlap = 10 -speed_layer_0 = 25 +speed_layer_0 = =speed_print speed_prime_tower = =speed_topbottom speed_print = 25 speed_support_interface = =speed_topbottom @@ -69,3 +69,5 @@ travel_avoid_distance = 3 wall_0_inset = 0 wall_line_width_x = =round(line_width * 0.38 / 0.38, 2) wall_thickness = 0.76 +speed_wall_x = =math.ceil(speed_print * 80 / 25) +speed_infill = =math.ceil(speed_print * 100 / 25) diff --git a/resources/quality/ultimaker2_plus/um2p_pp_0.4_normal.inst.cfg b/resources/quality/ultimaker2_plus/um2p_pp_0.4_normal.inst.cfg index d318275700..8ceed3cd94 100644 --- a/resources/quality/ultimaker2_plus/um2p_pp_0.4_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_pp_0.4_normal.inst.cfg @@ -49,7 +49,7 @@ retraction_hop_only_when_collides = True retraction_min_travel = 0.5 retraction_prime_speed = 15 skin_overlap = 10 -speed_layer_0 = 25 +speed_layer_0 = =speed_print speed_prime_tower = =speed_topbottom speed_print = 25 speed_support_interface = =speed_topbottom diff --git a/resources/quality/ultimaker2_plus/um2p_pp_0.6_draft.inst.cfg b/resources/quality/ultimaker2_plus/um2p_pp_0.6_draft.inst.cfg index dd150d903a..d22984afa1 100644 --- a/resources/quality/ultimaker2_plus/um2p_pp_0.6_draft.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_pp_0.6_draft.inst.cfg @@ -50,7 +50,7 @@ retraction_hop_only_when_collides = True retraction_prime_speed = 15 skin_overlap = 10 skirt_brim_line_width = 0.6 -speed_layer_0 = 25 +speed_layer_0 = =speed_print speed_prime_tower = =speed_topbottom speed_print = 25 speed_support_interface = =speed_topbottom diff --git a/resources/quality/ultimaker2_plus/um2p_pp_0.6_fast.inst.cfg b/resources/quality/ultimaker2_plus/um2p_pp_0.6_fast.inst.cfg index 8cb602b7eb..a8dd425d3d 100644 --- a/resources/quality/ultimaker2_plus/um2p_pp_0.6_fast.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_pp_0.6_fast.inst.cfg @@ -50,7 +50,7 @@ retraction_hop_only_when_collides = True retraction_prime_speed = 15 skin_overlap = 10 skirt_brim_line_width = 0.6 -speed_layer_0 = 25 +speed_layer_0 = =speed_print speed_prime_tower = =speed_topbottom speed_print = 25 speed_support_interface = =speed_topbottom @@ -70,3 +70,5 @@ travel_avoid_distance = 3 wall_0_inset = 0 wall_line_width_x = =round(line_width * 0.57 / 0.57, 2) wall_thickness = 1.14 +speed_wall_x = =math.ceil(speed_print * 80 / 25) +speed_infill = =math.ceil(speed_print * 100 / 25) diff --git a/resources/quality/ultimaker2_plus/um2p_pp_0.8_draft.inst.cfg b/resources/quality/ultimaker2_plus/um2p_pp_0.8_draft.inst.cfg index 3e38caa1ec..aa7f5c27ee 100644 --- a/resources/quality/ultimaker2_plus/um2p_pp_0.8_draft.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_pp_0.8_draft.inst.cfg @@ -50,7 +50,7 @@ retraction_hop_only_when_collides = True retraction_prime_speed = 15 skin_overlap = 10 skirt_brim_line_width = 0.8 -speed_layer_0 = 25 +speed_layer_0 = =speed_print speed_prime_tower = =speed_topbottom speed_print = 25 speed_support_interface = =speed_topbottom diff --git a/resources/quality/ultimaker2_plus/um2p_pp_0.8_verydraft.inst.cfg b/resources/quality/ultimaker2_plus/um2p_pp_0.8_verydraft.inst.cfg index 39408477af..177e86c60d 100644 --- a/resources/quality/ultimaker2_plus/um2p_pp_0.8_verydraft.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_pp_0.8_verydraft.inst.cfg @@ -50,7 +50,7 @@ retraction_hop_only_when_collides = True retraction_prime_speed = 15 skin_overlap = 10 skirt_brim_line_width = 0.8 -speed_layer_0 = 25 +speed_layer_0 = =speed_print speed_prime_tower = =speed_topbottom speed_print = 25 speed_support_interface = =speed_topbottom diff --git a/resources/quality/ultimaker2_plus/um2p_tpu_0.25_high.inst.cfg b/resources/quality/ultimaker2_plus/um2p_tpu_0.25_high.inst.cfg index 3e5f8f8180..559a636445 100644 --- a/resources/quality/ultimaker2_plus/um2p_tpu_0.25_high.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_tpu_0.25_high.inst.cfg @@ -27,13 +27,13 @@ raft_interface_line_spacing = 1 raft_interface_line_width = 0.2 raft_surface_line_width = 0.2 retraction_hop_enabled = 0.2 -speed_layer_0 = 30 +speed_layer_0 = =math.ceil(speed_print * 30 / 40) speed_print = 40 speed_support = 40 -speed_topbottom = 35 +speed_topbottom = =math.ceil(speed_print * 35 / 40) speed_travel = 150 -speed_wall_0 = 15 -speed_wall_x = 38 +speed_wall_0 = =math.ceil(speed_print * 15 / 40) +speed_wall_x = =math.ceil(speed_print * 38 / 40) support_angle = 45 support_enable = True support_infill_rate = 25 @@ -41,3 +41,4 @@ support_xy_distance = 0.6 support_z_distance = =layer_height * 2 top_bottom_thickness = 1.2 wall_thickness = 0.88 +speed_infill = =math.ceil(speed_print * 80 / 40) diff --git a/resources/quality/ultimaker2_plus/um2p_tpu_0.4_normal.inst.cfg b/resources/quality/ultimaker2_plus/um2p_tpu_0.4_normal.inst.cfg index 84065dbfdf..3a2825685e 100644 --- a/resources/quality/ultimaker2_plus/um2p_tpu_0.4_normal.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_tpu_0.4_normal.inst.cfg @@ -24,13 +24,13 @@ raft_base_line_width = 0.8 raft_interface_line_spacing = 1 raft_margin = 12 retraction_hop_enabled = 0.2 -speed_layer_0 = 30 +speed_layer_0 = =math.ceil(speed_print * 30 / 40) speed_print = 40 speed_support = 40 -speed_topbottom = 35 +speed_topbottom = =math.ceil(speed_print * 35 / 40) speed_travel = 150 -speed_wall_0 = 20 -speed_wall_x = 35 +speed_wall_0 = =math.ceil(speed_print * 20 / 40) +speed_wall_x = =math.ceil(speed_print * 35 / 40) support_angle = 45 support_enable = True support_infill_rate = 25 diff --git a/resources/quality/ultimaker2_plus/um2p_tpu_0.6_fast.inst.cfg b/resources/quality/ultimaker2_plus/um2p_tpu_0.6_fast.inst.cfg index ec424a6f40..87a429134f 100644 --- a/resources/quality/ultimaker2_plus/um2p_tpu_0.6_fast.inst.cfg +++ b/resources/quality/ultimaker2_plus/um2p_tpu_0.6_fast.inst.cfg @@ -29,13 +29,13 @@ raft_interface_line_width = 0.57 raft_margin = 15 raft_surface_line_width = 0.5 retraction_hop_enabled = 0.2 -speed_layer_0 = 30 +speed_layer_0 = =math.ceil(speed_print * 30 / 45) speed_print = 45 speed_support = 40 -speed_topbottom = 35 +speed_topbottom = =math.ceil(speed_print * 35 / 45) speed_travel = 150 -speed_wall_0 = 15 -speed_wall_x = 40 +speed_wall_0 = =math.ceil(speed_print * 15 / 45) +speed_wall_x = =math.ceil(speed_print * 40 / 45) support_angle = 45 support_enable = True support_infill_rate = 25 @@ -43,3 +43,4 @@ support_xy_distance = 0.7 support_z_distance = =layer_height * 2 top_bottom_thickness = 1.2 wall_thickness = 1.14 +speed_infill = =math.ceil(speed_print * 100 / 45) diff --git a/resources/quality/ultimaker3/um3_aa0.25_CPE_Normal_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.25_CPE_Normal_Quality.inst.cfg index fabe67cc27..0292bfa6d1 100644 --- a/resources/quality/ultimaker3/um3_aa0.25_CPE_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.25_CPE_Normal_Quality.inst.cfg @@ -16,7 +16,7 @@ prime_tower_purge_volume = 1 prime_tower_size = 12 prime_tower_wall_thickness = 0.9 retraction_extrusion_window = 0.5 -speed_infill = 40 +speed_infill = =math.ceil(speed_print * 40 / 55) speed_topbottom = =math.ceil(speed_print * 30 / 55) top_bottom_thickness = 0.8 wall_thickness = 0.92 diff --git a/resources/quality/ultimaker3/um3_aa0.25_PC_Normal_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.25_PC_Normal_Quality.inst.cfg index 8444d0faef..608bc837c7 100644 --- a/resources/quality/ultimaker3/um3_aa0.25_PC_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.25_PC_Normal_Quality.inst.cfg @@ -38,9 +38,9 @@ retraction_hop_only_when_collides = True retraction_min_travel = 0.8 retraction_prime_speed = 15 skin_overlap = 30 -speed_layer_0 = 25 +speed_layer_0 = =math.ceil(speed_print * 25 / 50) speed_print = 50 -speed_topbottom = 25 +speed_topbottom = =math.ceil(speed_print * 25 / 50) speed_travel = 250 speed_wall = =math.ceil(speed_print * 40 / 50) speed_wall_0 = =math.ceil(speed_wall * 25 / 40) diff --git a/resources/quality/ultimaker3/um3_aa0.25_PLA_Normal_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.25_PLA_Normal_Quality.inst.cfg index 14345dc626..b4c557216e 100644 --- a/resources/quality/ultimaker3/um3_aa0.25_PLA_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.25_PLA_Normal_Quality.inst.cfg @@ -24,11 +24,11 @@ material_initial_print_temperature = =max(-273.15, material_print_temperature - material_print_temperature = 190 retraction_hop = 0.2 skin_overlap = 5 -speed_layer_0 = 30 +speed_layer_0 = =speed_print speed_print = 30 speed_travel_layer_0 = 120 -speed_wall = 25 -speed_wall_0 = 20 +speed_wall = =math.ceil(speed_print * 25 / 30) +speed_wall_0 = =math.ceil(speed_print * 20 / 30) top_bottom_thickness = 0.72 travel_avoid_distance = 0.4 wall_0_inset = 0.015 diff --git a/resources/quality/ultimaker3/um3_aa0.25_PP_Normal_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.25_PP_Normal_Quality.inst.cfg index dd8a906e4c..fefbf55b97 100644 --- a/resources/quality/ultimaker3/um3_aa0.25_PP_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.25_PP_Normal_Quality.inst.cfg @@ -42,7 +42,7 @@ retraction_hop_only_when_collides = True retraction_min_travel = 0.8 retraction_prime_speed = 13 speed_equalize_flow_enabled = True -speed_layer_0 = 15 +speed_layer_0 = =math.ceil(speed_print * 15 / 25) speed_print = 25 speed_travel = 300 speed_travel_layer_0 = 50 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 f7748e3903..d03f8f24c1 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 @@ -20,7 +20,7 @@ material_final_print_temperature = =material_print_temperature - 10 prime_tower_enable = False skin_overlap = 20 speed_print = 60 -speed_layer_0 = 20 +speed_layer_0 = =math.ceil(speed_print * 20 / 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 50fb12eaa4..ca82990b13 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 @@ -21,7 +21,7 @@ material_final_print_temperature = =material_print_temperature - 10 material_standby_temperature = 100 prime_tower_enable = False speed_print = 60 -speed_layer_0 = 20 +speed_layer_0 = =math.ceil(speed_print * 20 / 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 6215afc9df..35cd06e589 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 @@ -21,6 +21,6 @@ material_initial_print_temperature = =material_print_temperature - 5 material_final_print_temperature = =material_print_temperature - 10 prime_tower_enable = False speed_print = 50 -speed_layer_0 = 20 +speed_layer_0 = =math.ceil(speed_print * 20 / 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 a7683fb249..fdeafbc86b 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 @@ -19,6 +19,6 @@ material_final_print_temperature = =material_print_temperature - 10 material_standby_temperature = 100 prime_tower_enable = False speed_print = 55 -speed_layer_0 = 20 +speed_layer_0 = =math.ceil(speed_print * 20 / 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_BAM_Draft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_BAM_Draft_Print.inst.cfg index f9a2bd88a4..d9a241742b 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_BAM_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_BAM_Draft_Print.inst.cfg @@ -20,7 +20,7 @@ material_print_temperature = =default_material_print_temperature + 5 # prime_tower_enable: see CURA-4248 prime_tower_enable = =min(extruderValues('material_surface_energy')) < 100 skin_overlap = 20 -speed_layer_0 = 20 +speed_layer_0 = =math.ceil(speed_print * 20 / 70) speed_topbottom = =math.ceil(speed_print * 35 / 70) speed_wall = =math.ceil(speed_print * 50 / 70) speed_wall_0 = =math.ceil(speed_wall * 35 / 50) diff --git a/resources/quality/ultimaker3/um3_aa0.4_BAM_Fast_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_BAM_Fast_Print.inst.cfg index d181e7e4c9..5d7d6bde25 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_BAM_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_BAM_Fast_Print.inst.cfg @@ -19,7 +19,7 @@ machine_nozzle_heat_up_speed = 1.6 # prime_tower_enable: see CURA-4248 prime_tower_enable = =min(extruderValues('material_surface_energy')) < 100 speed_print = 80 -speed_layer_0 = 20 +speed_layer_0 = =math.ceil(speed_print * 20 / 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_BAM_Normal_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_BAM_Normal_Quality.inst.cfg index 4a8bde54b3..d85bb0cbf6 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_BAM_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_BAM_Normal_Quality.inst.cfg @@ -20,7 +20,7 @@ machine_nozzle_heat_up_speed = 1.6 material_print_temperature = =default_material_print_temperature - 10 prime_tower_enable = =min(extruderValues('material_surface_energy')) < 100 skin_overlap = 10 -speed_layer_0 = 20 +speed_layer_0 = =math.ceil(speed_print * 20 / 70) support_interface_enable = True support_interface_density = =min(extruderValues('material_surface_energy')) support_interface_pattern = ='lines' if support_interface_density < 100 else 'concentric' diff --git a/resources/quality/ultimaker3/um3_aa0.4_CPEP_Draft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_CPEP_Draft_Print.inst.cfg index 8f071b18d7..9a1dd89f9c 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_CPEP_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_CPEP_Draft_Print.inst.cfg @@ -38,7 +38,7 @@ retraction_hop = 0.2 retraction_hop_enabled = False retraction_hop_only_when_collides = True skin_overlap = 20 -speed_layer_0 = 20 +speed_layer_0 = =math.ceil(speed_print * 20 / 50) speed_print = 50 speed_topbottom = =math.ceil(speed_print * 40 / 50) speed_travel = 250 diff --git a/resources/quality/ultimaker3/um3_aa0.4_CPEP_Fast_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_CPEP_Fast_Print.inst.cfg index fc6eee65bc..e3c0e9d69a 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_CPEP_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_CPEP_Fast_Print.inst.cfg @@ -38,7 +38,7 @@ retraction_hop = 0.2 retraction_hop_enabled = False retraction_hop_only_when_collides = True skin_overlap = 20 -speed_layer_0 = 20 +speed_layer_0 = =math.ceil(speed_print * 20 / 45) speed_print = 45 speed_topbottom = =math.ceil(speed_print * 35 / 45) speed_travel = 250 diff --git a/resources/quality/ultimaker3/um3_aa0.4_CPEP_High_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_CPEP_High_Quality.inst.cfg index 3559ed5e67..e3c7dd7941 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_CPEP_High_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_CPEP_High_Quality.inst.cfg @@ -40,7 +40,7 @@ retraction_hop = 0.2 retraction_hop_enabled = False retraction_hop_only_when_collides = True skin_overlap = 20 -speed_layer_0 = 20 +speed_layer_0 = =math.ceil(speed_print * 20 / 40) speed_print = 40 speed_topbottom = =math.ceil(speed_print * 30 / 35) speed_travel = 250 diff --git a/resources/quality/ultimaker3/um3_aa0.4_CPEP_Normal_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_CPEP_Normal_Quality.inst.cfg index 02a807c7b8..1496ac3c05 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_CPEP_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_CPEP_Normal_Quality.inst.cfg @@ -39,7 +39,7 @@ retraction_hop = 0.2 retraction_hop_enabled = False retraction_hop_only_when_collides = True skin_overlap = 20 -speed_layer_0 = 20 +speed_layer_0 = =math.ceil(speed_print * 20 / 40) speed_print = 40 speed_topbottom = =math.ceil(speed_print * 30 / 35) speed_travel = 250 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 7a54e34f6d..686073542f 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 @@ -19,7 +19,7 @@ material_standby_temperature = 100 prime_tower_purge_volume = 1 skin_overlap = 20 speed_print = 60 -speed_layer_0 = 20 +speed_layer_0 = =math.ceil(speed_print * 20 / 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 94476b33d1..d35ada198c 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 @@ -19,7 +19,7 @@ material_final_print_temperature = =material_print_temperature - 10 material_standby_temperature = 100 prime_tower_purge_volume = 1 speed_print = 60 -speed_layer_0 = 20 +speed_layer_0 = =math.ceil(speed_print * 20 / 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 d8899f1bca..f33425f7c6 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 @@ -21,6 +21,6 @@ material_final_print_temperature = =material_print_temperature - 10 material_standby_temperature = 100 prime_tower_purge_volume = 1 speed_print = 50 -speed_layer_0 = 20 +speed_layer_0 = =math.ceil(speed_print * 20 / 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 4f144ca92e..650e5a4bef 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 @@ -19,6 +19,6 @@ material_final_print_temperature = =material_print_temperature - 10 material_standby_temperature = 100 prime_tower_purge_volume = 1 speed_print = 55 -speed_layer_0 = 20 +speed_layer_0 = =math.ceil(speed_print * 20 / 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_Nylon_Draft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_Nylon_Draft_Print.inst.cfg index 91600ed6fa..ab5f60feb5 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_Nylon_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_Nylon_Draft_Print.inst.cfg @@ -29,7 +29,7 @@ raft_jerk = =jerk_layer_0 raft_margin = 10 raft_surface_thickness = =round(machine_nozzle_size * 0.2 / 0.4, 2) skin_overlap = 50 -speed_layer_0 = 20 +speed_layer_0 = =math.ceil(speed_print * 20 / 70) switch_extruder_prime_speed = 30 switch_extruder_retraction_amount = 30 switch_extruder_retraction_speeds = 40 diff --git a/resources/quality/ultimaker3/um3_aa0.4_Nylon_Fast_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_Nylon_Fast_Print.inst.cfg index 7db3683333..64508a15ea 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_Nylon_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_Nylon_Fast_Print.inst.cfg @@ -29,7 +29,7 @@ raft_jerk = =jerk_layer_0 raft_margin = 10 raft_surface_thickness = =round(machine_nozzle_size * 0.2 / 0.4, 2) skin_overlap = 50 -speed_layer_0 = 20 +speed_layer_0 = =math.ceil(speed_print * 20 / 70) switch_extruder_prime_speed = 30 switch_extruder_retraction_amount = 30 switch_extruder_retraction_speeds = 40 diff --git a/resources/quality/ultimaker3/um3_aa0.4_Nylon_High_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_Nylon_High_Quality.inst.cfg index fd9ffb53b4..85ac422729 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_Nylon_High_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_Nylon_High_Quality.inst.cfg @@ -28,7 +28,7 @@ raft_jerk = =jerk_layer_0 raft_margin = 10 raft_surface_thickness = =round(machine_nozzle_size * 0.2 / 0.4, 2) skin_overlap = 50 -speed_layer_0 = 20 +speed_layer_0 = =math.ceil(speed_print * 20 / 70) switch_extruder_prime_speed = 30 switch_extruder_retraction_amount = 30 switch_extruder_retraction_speeds = 40 diff --git a/resources/quality/ultimaker3/um3_aa0.4_Nylon_Normal_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_Nylon_Normal_Quality.inst.cfg index c8ed69342d..4f6ebbe993 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_Nylon_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_Nylon_Normal_Quality.inst.cfg @@ -28,7 +28,7 @@ raft_jerk = =jerk_layer_0 raft_margin = 10 raft_surface_thickness = =round(machine_nozzle_size * 0.2 / 0.4, 2) skin_overlap = 50 -speed_layer_0 = 20 +speed_layer_0 = =math.ceil(speed_print * 20 / 70) switch_extruder_prime_speed = 30 switch_extruder_retraction_amount = 30 switch_extruder_retraction_speeds = 40 diff --git a/resources/quality/ultimaker3/um3_aa0.4_PC_Draft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_PC_Draft_Print.inst.cfg index 2f05384abd..dc72708d9f 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_PC_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_PC_Draft_Print.inst.cfg @@ -48,7 +48,7 @@ retraction_hop_only_when_collides = True retraction_min_travel = 0.8 retraction_prime_speed = 15 skin_overlap = 30 -speed_layer_0 = 25 +speed_layer_0 = =math.ceil(speed_print * 25 / 50) speed_print = 50 speed_topbottom = =math.ceil(speed_print * 25 / 50) speed_travel = 250 diff --git a/resources/quality/ultimaker3/um3_aa0.4_PC_Fast_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_PC_Fast_Print.inst.cfg index ef6f5978ad..0a5990d00d 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_PC_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_PC_Fast_Print.inst.cfg @@ -47,7 +47,7 @@ retraction_hop_only_when_collides = True retraction_min_travel = 0.8 retraction_prime_speed = 15 skin_overlap = 30 -speed_layer_0 = 25 +speed_layer_0 = =math.ceil(speed_print * 25 / 50) speed_print = 50 speed_topbottom = =math.ceil(speed_print * 25 / 50) speed_travel = 250 diff --git a/resources/quality/ultimaker3/um3_aa0.4_PC_High_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_PC_High_Quality.inst.cfg index cbba3ffddb..51596c0af1 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_PC_High_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_PC_High_Quality.inst.cfg @@ -48,7 +48,7 @@ retraction_hop_only_when_collides = True retraction_min_travel = 0.8 retraction_prime_speed = 15 skin_overlap = 30 -speed_layer_0 = 25 +speed_layer_0 = =math.ceil(speed_print * 25 / 50) speed_print = 50 speed_topbottom = =math.ceil(speed_print * 25 / 50) speed_travel = 250 diff --git a/resources/quality/ultimaker3/um3_aa0.4_PC_Normal_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_PC_Normal_Quality.inst.cfg index ac78470b03..42055f214d 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_PC_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_PC_Normal_Quality.inst.cfg @@ -45,7 +45,7 @@ retraction_hop_only_when_collides = True retraction_min_travel = 0.8 retraction_prime_speed = 15 skin_overlap = 30 -speed_layer_0 = 25 +speed_layer_0 = =math.ceil(speed_print * 25 / 50) speed_print = 50 speed_topbottom = =math.ceil(speed_print * 25 / 50) speed_travel = 250 diff --git a/resources/quality/ultimaker3/um3_aa0.4_PLA_Draft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_PLA_Draft_Print.inst.cfg index 735dac3b76..cb44ec8664 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_PLA_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_PLA_Draft_Print.inst.cfg @@ -21,7 +21,7 @@ material_print_temperature = =default_material_print_temperature + 5 material_standby_temperature = 100 prime_tower_enable = False skin_overlap = 20 -speed_layer_0 = 20 +speed_layer_0 = =math.ceil(speed_print * 20 / 70) speed_topbottom = =math.ceil(speed_print * 40 / 70) speed_wall = =math.ceil(speed_print * 55 / 70) speed_wall_0 = =math.ceil(speed_wall * 45 / 50) 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 b69fa30a8b..c22c6b3a11 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 @@ -20,7 +20,7 @@ machine_nozzle_heat_up_speed = 1.6 material_standby_temperature = 100 prime_tower_enable = False speed_print = 80 -speed_layer_0 = 20 +speed_layer_0 = =math.ceil(speed_print * 20 / 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 325d22fe5a..6af3bb1e70 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 @@ -23,7 +23,7 @@ material_standby_temperature = 100 prime_tower_enable = False skin_overlap = 10 speed_print = 60 -speed_layer_0 = 20 +speed_layer_0 = =math.ceil(speed_print * 20 / 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/quality/ultimaker3/um3_aa0.4_PLA_Normal_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_PLA_Normal_Quality.inst.cfg index 910f3cec4b..f0be5bf4ea 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_PLA_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_PLA_Normal_Quality.inst.cfg @@ -21,6 +21,6 @@ machine_nozzle_heat_up_speed = 1.6 material_standby_temperature = 100 prime_tower_enable = False skin_overlap = 10 -speed_layer_0 = 20 +speed_layer_0 = =math.ceil(speed_print * 20 / 70) top_bottom_thickness = 1 wall_thickness = 1 diff --git a/resources/quality/ultimaker3/um3_aa0.4_PP_Draft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_PP_Draft_Print.inst.cfg index 4ea3552891..4870a547c6 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_PP_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_PP_Draft_Print.inst.cfg @@ -49,7 +49,7 @@ retraction_hop_only_when_collides = True retraction_min_travel = 0.8 retraction_prime_speed = 18 speed_equalize_flow_enabled = True -speed_layer_0 = 15 +speed_layer_0 = =math.ceil(speed_print * 15 / 25) speed_print = 25 speed_topbottom = =math.ceil(speed_print * 25 / 25) speed_travel = 300 diff --git a/resources/quality/ultimaker3/um3_aa0.4_PP_Fast_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_PP_Fast_Print.inst.cfg index bfb0085db4..77d5651cd9 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_PP_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_PP_Fast_Print.inst.cfg @@ -48,7 +48,7 @@ retraction_hop_only_when_collides = True retraction_min_travel = 0.8 retraction_prime_speed = 18 speed_equalize_flow_enabled = True -speed_layer_0 = 15 +speed_layer_0 = =math.ceil(speed_print * 15 / 25) speed_print = 25 speed_topbottom = =math.ceil(speed_print * 25 / 25) speed_travel = 300 diff --git a/resources/quality/ultimaker3/um3_aa0.4_PP_Normal_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_PP_Normal_Quality.inst.cfg index f3b30b853b..019bf8abda 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_PP_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_PP_Normal_Quality.inst.cfg @@ -47,7 +47,7 @@ retraction_hop_only_when_collides = True retraction_min_travel = 0.8 retraction_prime_speed = 18 speed_equalize_flow_enabled = True -speed_layer_0 = 15 +speed_layer_0 = =math.ceil(speed_print * 15 / 25) speed_print = 25 speed_topbottom = =math.ceil(speed_print * 25 / 25) speed_travel = 300 diff --git a/resources/quality/ultimaker3/um3_aa0.4_TPLA_Draft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_TPLA_Draft_Print.inst.cfg index 850fbd247b..fbe9e70219 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_TPLA_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_TPLA_Draft_Print.inst.cfg @@ -27,7 +27,7 @@ prime_tower_enable = False roofing_layer_count = 2 skin_outline_count = 0 skin_overlap = 20 -speed_layer_0 = 20 +speed_layer_0 = =math.ceil(speed_print * 20 / 50) speed_print = 50 speed_roofing = =math.ceil(speed_wall * 20 / 24) speed_topbottom = =math.ceil(speed_print * 25 / 50) diff --git a/resources/quality/ultimaker3/um3_aa0.4_TPLA_Fast_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_TPLA_Fast_Print.inst.cfg index f61e356a8f..2575a01cdb 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_TPLA_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_TPLA_Fast_Print.inst.cfg @@ -21,7 +21,7 @@ machine_nozzle_heat_up_speed = 1.6 material_print_temperature = =default_material_print_temperature -10 material_standby_temperature = 100 prime_tower_enable = False -speed_layer_0 = 20 +speed_layer_0 = =math.ceil(speed_print * 20 / 45) speed_print = 45 speed_topbottom = =math.ceil(speed_print * 35 / 45) speed_wall = =math.ceil(speed_print * 40 / 45) diff --git a/resources/quality/ultimaker3/um3_aa0.4_TPLA_Normal_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_TPLA_Normal_Quality.inst.cfg index 0779260c76..5347df099f 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_TPLA_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_TPLA_Normal_Quality.inst.cfg @@ -23,7 +23,7 @@ material_print_temperature = =default_material_print_temperature - 15 material_standby_temperature = 100 prime_tower_enable = False skin_overlap = 10 -speed_layer_0 = 20 +speed_layer_0 = =math.ceil(speed_print * 20 / 45) speed_print = 45 speed_topbottom = =math.ceil(speed_print * 35 / 45) speed_wall = =math.ceil(speed_print * 40 / 45) diff --git a/resources/quality/ultimaker3/um3_aa0.4_TPU_Draft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_TPU_Draft_Print.inst.cfg index 59c650ef0e..51e6c98306 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_TPU_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_TPU_Draft_Print.inst.cfg @@ -48,7 +48,7 @@ retraction_min_travel = =line_width * 2 retraction_prime_speed = 15 skin_overlap = 5 speed_equalize_flow_enabled = True -speed_layer_0 = 18 +speed_layer_0 = =math.ceil(speed_print * 18 / 25) speed_print = 25 speed_topbottom = =math.ceil(speed_print * 25 / 25) speed_travel = 300 diff --git a/resources/quality/ultimaker3/um3_aa0.4_TPU_Fast_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_TPU_Fast_Print.inst.cfg index f0a889c12e..1e3cb508d7 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_TPU_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_TPU_Fast_Print.inst.cfg @@ -49,7 +49,7 @@ retraction_min_travel = =line_width * 2 retraction_prime_speed = 15 skin_overlap = 5 speed_equalize_flow_enabled = True -speed_layer_0 = 18 +speed_layer_0 = =math.ceil(speed_print * 18 / 25) speed_print = 25 speed_topbottom = =math.ceil(speed_print * 25 / 25) speed_travel = 300 diff --git a/resources/quality/ultimaker3/um3_aa0.4_TPU_Normal_Quality.inst.cfg b/resources/quality/ultimaker3/um3_aa0.4_TPU_Normal_Quality.inst.cfg index 1b6ac261cf..2f113beb47 100644 --- a/resources/quality/ultimaker3/um3_aa0.4_TPU_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.4_TPU_Normal_Quality.inst.cfg @@ -46,7 +46,7 @@ retraction_min_travel = =line_width * 2 retraction_prime_speed = 15 skin_overlap = 5 speed_equalize_flow_enabled = True -speed_layer_0 = 18 +speed_layer_0 = =math.ceil(speed_print * 18 / 25) speed_print = 25 speed_topbottom = =math.ceil(speed_print * 25 / 25) speed_travel = 300 diff --git a/resources/quality/ultimaker3/um3_aa0.8_CPEP_Fast_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_CPEP_Fast_Print.inst.cfg index 961e127a57..ed6e35f700 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_CPEP_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_CPEP_Fast_Print.inst.cfg @@ -26,7 +26,7 @@ retraction_combing = off retraction_hop = 0.1 retraction_hop_enabled = False skin_overlap = 0 -speed_layer_0 = 15 +speed_layer_0 = =math.ceil(speed_print * 15 / 50) speed_print = 50 speed_slowdown_layers = 15 speed_topbottom = =math.ceil(speed_print * 35 / 50) diff --git a/resources/quality/ultimaker3/um3_aa0.8_CPEP_Superdraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_CPEP_Superdraft_Print.inst.cfg index b112bf8f4f..6ce17b25f2 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_CPEP_Superdraft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_CPEP_Superdraft_Print.inst.cfg @@ -27,7 +27,7 @@ retraction_combing = off retraction_hop = 0.1 retraction_hop_enabled = False skin_overlap = 0 -speed_layer_0 = 15 +speed_layer_0 = =math.ceil(speed_print * 15 / 50) speed_print = 50 speed_slowdown_layers = 8 speed_topbottom = =math.ceil(speed_print * 35 / 50) diff --git a/resources/quality/ultimaker3/um3_aa0.8_CPEP_Verydraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_CPEP_Verydraft_Print.inst.cfg index c51ee3a90f..c4b0655e3d 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_CPEP_Verydraft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_CPEP_Verydraft_Print.inst.cfg @@ -27,7 +27,7 @@ retraction_combing = off retraction_hop = 0.1 retraction_hop_enabled = False skin_overlap = 0 -speed_layer_0 = 15 +speed_layer_0 = =math.ceil(speed_print * 15 / 50) speed_print = 50 speed_slowdown_layers = 10 speed_topbottom = =math.ceil(speed_print * 35 / 50) diff --git a/resources/quality/ultimaker3/um3_aa0.8_PC_Fast_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_PC_Fast_Print.inst.cfg index fba7e2c824..c6258781e0 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_PC_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_PC_Fast_Print.inst.cfg @@ -22,7 +22,7 @@ material_standby_temperature = 100 raft_airgap = 0.5 raft_margin = 15 skin_overlap = 0 -speed_layer_0 = 15 +speed_layer_0 = =math.ceil(speed_print * 15 / 50) speed_print = 50 speed_slowdown_layers = 15 speed_topbottom = =math.ceil(speed_print * 25 / 50) diff --git a/resources/quality/ultimaker3/um3_aa0.8_PC_Superdraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_PC_Superdraft_Print.inst.cfg index 5838a48fb7..6e272a3c9f 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_PC_Superdraft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_PC_Superdraft_Print.inst.cfg @@ -22,7 +22,7 @@ material_standby_temperature = 100 raft_airgap = 0.5 raft_margin = 15 skin_overlap = 0 -speed_layer_0 = 15 +speed_layer_0 = =math.ceil(speed_print * 15 / 50) speed_print = 50 speed_slowdown_layers = 8 speed_topbottom = =math.ceil(speed_print * 25 / 50) diff --git a/resources/quality/ultimaker3/um3_aa0.8_PC_Verydraft_Print.inst.cfg b/resources/quality/ultimaker3/um3_aa0.8_PC_Verydraft_Print.inst.cfg index 83a331e801..61ab7e29ea 100644 --- a/resources/quality/ultimaker3/um3_aa0.8_PC_Verydraft_Print.inst.cfg +++ b/resources/quality/ultimaker3/um3_aa0.8_PC_Verydraft_Print.inst.cfg @@ -23,7 +23,7 @@ material_standby_temperature = 100 raft_airgap = 0.5 raft_margin = 15 skin_overlap = 0 -speed_layer_0 = 15 +speed_layer_0 = =math.ceil(speed_print * 15 / 50) speed_print = 50 speed_slowdown_layers = 10 speed_topbottom = =math.ceil(speed_print * 25 / 50) diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.25_CPE_Normal_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.25_CPE_Normal_Quality.inst.cfg index a69053b8ab..f8305eda7c 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.25_CPE_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.25_CPE_Normal_Quality.inst.cfg @@ -15,7 +15,7 @@ variant = AA 0.25 prime_tower_size = 12 prime_tower_wall_thickness = 0.9 retraction_extrusion_window = 0.5 -speed_infill = 40 +speed_infill = =math.ceil(speed_print * 40 / 55) speed_topbottom = =math.ceil(speed_print * 30 / 55) top_bottom_thickness = 0.8 wall_thickness = 0.92 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.25_PC_Normal_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.25_PC_Normal_Quality.inst.cfg index c188f37d96..bd5e8d08ff 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.25_PC_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.25_PC_Normal_Quality.inst.cfg @@ -38,9 +38,9 @@ retraction_hop_only_when_collides = True retraction_min_travel = 0.8 retraction_prime_speed = 15 skin_overlap = 30 -speed_layer_0 = 25 +speed_layer_0 = =math.ceil(speed_print * 25 / 50) speed_print = 50 -speed_topbottom = 25 +speed_topbottom = =math.ceil(speed_print * 25 / 50) speed_wall = =math.ceil(speed_print * 40 / 50) speed_wall_0 = =math.ceil(speed_wall * 25 / 40) support_bottom_distance = =support_z_distance diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.25_PLA_Normal_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.25_PLA_Normal_Quality.inst.cfg index f964bba440..6d7c46772c 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.25_PLA_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.25_PLA_Normal_Quality.inst.cfg @@ -24,11 +24,11 @@ material_initial_print_temperature = =max(-273.15, material_print_temperature - material_print_temperature = 190 retraction_hop = 0.2 skin_overlap = 5 -speed_layer_0 = 30 +speed_layer_0 = =speed_print speed_print = 30 speed_travel_layer_0 = 120 -speed_wall = 25 -speed_wall_0 = 20 +speed_wall = =math.ceil(speed_print * 25 / 30) +speed_wall_0 = =math.ceil(speed_print * 20 / 30) top_bottom_thickness = 0.72 travel_avoid_distance = 0.4 wall_0_inset = 0.015 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.25_PP_Normal_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.25_PP_Normal_Quality.inst.cfg index 72c16ebc1d..d4b4691be4 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.25_PP_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.25_PP_Normal_Quality.inst.cfg @@ -42,7 +42,7 @@ retraction_hop_only_when_collides = True retraction_min_travel = 0.8 retraction_prime_speed = 13 speed_equalize_flow_enabled = True -speed_layer_0 = 15 +speed_layer_0 = =math.ceil(speed_print * 15 / 25) speed_print = 25 speed_travel_layer_0 = 50 speed_wall = =math.ceil(speed_print * 25 / 25) diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_ABS_Draft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_ABS_Draft_Print.inst.cfg index b2c44dab01..2cf03fe4c9 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_ABS_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_ABS_Draft_Print.inst.cfg @@ -20,7 +20,7 @@ material_final_print_temperature = =material_print_temperature - 20 prime_tower_enable = False skin_overlap = 20 speed_print = 60 -speed_layer_0 = 20 +speed_layer_0 = =math.ceil(speed_print * 20 / 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/ultimaker_s5/um_s5_aa0.4_ABS_Fast_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_ABS_Fast_Print.inst.cfg index 0470956c6d..9b819ad56a 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_ABS_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_ABS_Fast_Print.inst.cfg @@ -20,7 +20,7 @@ material_initial_print_temperature = =material_print_temperature - 15 material_final_print_temperature = =material_print_temperature - 20 prime_tower_enable = False speed_print = 60 -speed_layer_0 = 20 +speed_layer_0 = =math.ceil(speed_print * 20 / 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/ultimaker_s5/um_s5_aa0.4_ABS_High_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_ABS_High_Quality.inst.cfg index 497071e01a..3fce280901 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_ABS_High_Quality.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_ABS_High_Quality.inst.cfg @@ -20,7 +20,7 @@ material_initial_print_temperature = =material_print_temperature - 15 material_final_print_temperature = =material_print_temperature - 20 prime_tower_enable = False speed_print = 50 -speed_layer_0 = 20 +speed_layer_0 = =math.ceil(speed_print * 20 / 50) speed_topbottom = =math.ceil(speed_print * 30 / 50) speed_wall = =math.ceil(speed_print * 30 / 50) diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_ABS_Normal_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_ABS_Normal_Quality.inst.cfg index f080adb06f..3e1836b3b6 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_ABS_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_ABS_Normal_Quality.inst.cfg @@ -19,7 +19,7 @@ material_initial_print_temperature = =material_print_temperature - 15 material_final_print_temperature = =material_print_temperature - 20 prime_tower_enable = False speed_print = 55 -speed_layer_0 = 20 +speed_layer_0 = =math.ceil(speed_print * 20 / 55) speed_topbottom = =math.ceil(speed_print * 30 / 55) speed_wall = =math.ceil(speed_print * 30 / 55) diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_BAM_Draft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_BAM_Draft_Print.inst.cfg index b4652d23dd..f33b562820 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_BAM_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_BAM_Draft_Print.inst.cfg @@ -20,7 +20,7 @@ material_print_temperature = =default_material_print_temperature + 5 # prime_tower_enable: see CURA-4248 prime_tower_enable = =min(extruderValues('material_surface_energy')) < 100 skin_overlap = 20 -speed_layer_0 = 20 +speed_layer_0 = =math.ceil(speed_print * 20 / 70) speed_topbottom = =math.ceil(speed_print * 35 / 70) speed_wall = =math.ceil(speed_print * 50 / 70) speed_wall_0 = =math.ceil(speed_wall * 35 / 50) diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_BAM_Fast_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_BAM_Fast_Print.inst.cfg index bebc993ca3..6ed4df3844 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_BAM_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_BAM_Fast_Print.inst.cfg @@ -19,7 +19,7 @@ machine_nozzle_heat_up_speed = 1.6 # prime_tower_enable: see CURA-4248 prime_tower_enable = =min(extruderValues('material_surface_energy')) < 100 speed_print = 80 -speed_layer_0 = 20 +speed_layer_0 = =math.ceil(speed_print * 20 / 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/ultimaker_s5/um_s5_aa0.4_BAM_Normal_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_BAM_Normal_Quality.inst.cfg index 40f0c2ab70..764094b897 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_BAM_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_BAM_Normal_Quality.inst.cfg @@ -21,7 +21,7 @@ material_print_temperature = =default_material_print_temperature - 10 # prime_tower_enable: see CURA-4248 prime_tower_enable = =min(extruderValues('material_surface_energy')) < 100 skin_overlap = 10 -speed_layer_0 = 20 +speed_layer_0 = =math.ceil(speed_print * 20 / 70) support_interface_enable = True support_interface_density = =min(extruderValues('material_surface_energy')) support_interface_pattern = ='lines' if support_interface_density < 100 else 'concentric' diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_CPEP_Draft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_CPEP_Draft_Print.inst.cfg index bb5cad456f..aa34425a46 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_CPEP_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_CPEP_Draft_Print.inst.cfg @@ -35,7 +35,7 @@ retraction_hop = 0.2 retraction_hop_enabled = False retraction_hop_only_when_collides = True skin_overlap = 20 -speed_layer_0 = 20 +speed_layer_0 = =math.ceil(speed_print * 20 / 50) speed_print = 50 speed_topbottom = =math.ceil(speed_print * 40 / 50) diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_CPEP_Fast_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_CPEP_Fast_Print.inst.cfg index ef3e8d7f4e..5ae2a219ef 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_CPEP_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_CPEP_Fast_Print.inst.cfg @@ -35,7 +35,7 @@ retraction_hop = 0.2 retraction_hop_enabled = False retraction_hop_only_when_collides = True skin_overlap = 20 -speed_layer_0 = 20 +speed_layer_0 = =math.ceil(speed_print * 20 / 45) speed_print = 45 speed_topbottom = =math.ceil(speed_print * 35 / 45) diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_CPEP_High_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_CPEP_High_Quality.inst.cfg index 823a6e0fdf..77b2201627 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_CPEP_High_Quality.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_CPEP_High_Quality.inst.cfg @@ -37,7 +37,7 @@ retraction_hop = 0.2 retraction_hop_enabled = False retraction_hop_only_when_collides = True skin_overlap = 20 -speed_layer_0 = 20 +speed_layer_0 = =math.ceil(speed_print * 20 / 40) speed_print = 40 speed_topbottom = =math.ceil(speed_print * 30 / 35) diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_CPEP_Normal_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_CPEP_Normal_Quality.inst.cfg index 05c960e443..3963e53991 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_CPEP_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_CPEP_Normal_Quality.inst.cfg @@ -37,7 +37,7 @@ retraction_hop = 0.2 retraction_hop_enabled = False retraction_hop_only_when_collides = True skin_overlap = 20 -speed_layer_0 = 20 +speed_layer_0 = =math.ceil(speed_print * 20 / 40) speed_print = 40 speed_topbottom = =math.ceil(speed_print * 30 / 35) diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_CPE_Draft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_CPE_Draft_Print.inst.cfg index 744b49b03b..3f0ff31ce1 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_CPE_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_CPE_Draft_Print.inst.cfg @@ -17,7 +17,7 @@ material_initial_print_temperature = =material_print_temperature - 5 material_final_print_temperature = =material_print_temperature - 10 skin_overlap = 20 speed_print = 60 -speed_layer_0 = 20 +speed_layer_0 = =math.ceil(speed_print * 20 / 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/ultimaker_s5/um_s5_aa0.4_CPE_Fast_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_CPE_Fast_Print.inst.cfg index 58757c6dd1..7b4155c1e2 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_CPE_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_CPE_Fast_Print.inst.cfg @@ -17,7 +17,7 @@ material_print_temperature = =default_material_print_temperature + 5 material_initial_print_temperature = =material_print_temperature - 5 material_final_print_temperature = =material_print_temperature - 10 speed_print = 60 -speed_layer_0 = 20 +speed_layer_0 = =math.ceil(speed_print * 20 / 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/ultimaker_s5/um_s5_aa0.4_CPE_High_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_CPE_High_Quality.inst.cfg index 010ad9114a..01cf298308 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_CPE_High_Quality.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_CPE_High_Quality.inst.cfg @@ -19,7 +19,7 @@ material_print_temperature = =default_material_print_temperature - 5 material_initial_print_temperature = =material_print_temperature - 5 material_final_print_temperature = =material_print_temperature - 10 speed_print = 50 -speed_layer_0 = 20 +speed_layer_0 = =math.ceil(speed_print * 20 / 50) speed_topbottom = =math.ceil(speed_print * 30 / 50) speed_wall = =math.ceil(speed_print * 30 / 50) diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_CPE_Normal_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_CPE_Normal_Quality.inst.cfg index 386350212d..bfec569199 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_CPE_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_CPE_Normal_Quality.inst.cfg @@ -17,7 +17,7 @@ machine_nozzle_heat_up_speed = 1.5 material_initial_print_temperature = =material_print_temperature - 5 material_final_print_temperature = =material_print_temperature - 10 speed_print = 55 -speed_layer_0 = 20 +speed_layer_0 = =math.ceil(speed_print * 20 / 55) speed_topbottom = =math.ceil(speed_print * 30 / 55) speed_wall = =math.ceil(speed_print * 30 / 55) diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_Nylon_Draft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_Nylon_Draft_Print.inst.cfg index ac23b19285..42c1e4c195 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_Nylon_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_Nylon_Draft_Print.inst.cfg @@ -29,7 +29,7 @@ raft_jerk = =jerk_layer_0 raft_margin = 10 raft_surface_thickness = =round(machine_nozzle_size * 0.2 / 0.4, 2) skin_overlap = 50 -speed_layer_0 = 20 +speed_layer_0 = =math.ceil(speed_print * 20 / 70) switch_extruder_prime_speed = 30 switch_extruder_retraction_amount = 30 switch_extruder_retraction_speeds = 40 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_Nylon_Fast_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_Nylon_Fast_Print.inst.cfg index 977ba5c309..76a1773bf4 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_Nylon_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_Nylon_Fast_Print.inst.cfg @@ -29,7 +29,7 @@ raft_jerk = =jerk_layer_0 raft_margin = 10 raft_surface_thickness = =round(machine_nozzle_size * 0.2 / 0.4, 2) skin_overlap = 50 -speed_layer_0 = 20 +speed_layer_0 = =math.ceil(speed_print * 20 / 70) switch_extruder_prime_speed = 30 switch_extruder_retraction_amount = 30 switch_extruder_retraction_speeds = 40 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_Nylon_High_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_Nylon_High_Quality.inst.cfg index 7e4ebed906..3d83a83d4e 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_Nylon_High_Quality.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_Nylon_High_Quality.inst.cfg @@ -28,7 +28,7 @@ raft_jerk = =jerk_layer_0 raft_margin = 10 raft_surface_thickness = =round(machine_nozzle_size * 0.2 / 0.4, 2) skin_overlap = 50 -speed_layer_0 = 20 +speed_layer_0 = =math.ceil(speed_print * 20 / 70) switch_extruder_prime_speed = 30 switch_extruder_retraction_amount = 30 switch_extruder_retraction_speeds = 40 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_Nylon_Normal_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_Nylon_Normal_Quality.inst.cfg index 941561499b..5ec5bed4c5 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_Nylon_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_Nylon_Normal_Quality.inst.cfg @@ -28,7 +28,7 @@ raft_jerk = =jerk_layer_0 raft_margin = 10 raft_surface_thickness = =round(machine_nozzle_size * 0.2 / 0.4, 2) skin_overlap = 50 -speed_layer_0 = 20 +speed_layer_0 = =math.ceil(speed_print * 20 / 70) switch_extruder_prime_speed = 30 switch_extruder_retraction_amount = 30 switch_extruder_retraction_speeds = 40 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_PC_Draft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_PC_Draft_Print.inst.cfg index 04db39fc54..14562c3763 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_PC_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_PC_Draft_Print.inst.cfg @@ -47,9 +47,9 @@ retraction_hop_only_when_collides = True retraction_min_travel = 0.8 retraction_prime_speed = 15 skin_overlap = 30 -speed_layer_0 = 25 +speed_layer_0 = =math.ceil(speed_print * 25 / 50) speed_print = 50 -speed_topbottom = 25 +speed_topbottom = =math.ceil(speed_print * 25 / 50) speed_wall = =math.ceil(speed_print * 40 / 50) speed_wall_0 = =math.ceil(speed_wall * 25 / 40) support_bottom_distance = =support_z_distance diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_PC_Fast_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_PC_Fast_Print.inst.cfg index 65fd293954..e331f446f7 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_PC_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_PC_Fast_Print.inst.cfg @@ -46,9 +46,9 @@ retraction_hop_only_when_collides = True retraction_min_travel = 0.8 retraction_prime_speed = 15 skin_overlap = 30 -speed_layer_0 = 25 +speed_layer_0 = =math.ceil(speed_print * 25 / 50) speed_print = 50 -speed_topbottom = 25 +speed_topbottom = =math.ceil(speed_print * 25 / 50) speed_wall = =math.ceil(speed_print * 40 / 50) speed_wall_0 = =math.ceil(speed_wall * 25 / 40) diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_PC_High_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_PC_High_Quality.inst.cfg index d75b918479..afbb374fe2 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_PC_High_Quality.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_PC_High_Quality.inst.cfg @@ -47,9 +47,9 @@ retraction_hop_only_when_collides = True retraction_min_travel = 0.8 retraction_prime_speed = 15 skin_overlap = 30 -speed_layer_0 = 25 +speed_layer_0 = =math.ceil(speed_print * 25 / 50) speed_print = 50 -speed_topbottom = 25 +speed_topbottom = =math.ceil(speed_print * 25 / 50) speed_wall = =math.ceil(speed_print * 40 / 50) speed_wall_0 = =math.ceil(speed_wall * 25 / 40) diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_PC_Normal_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_PC_Normal_Quality.inst.cfg index ccffa0bc7c..969d7fc29c 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_PC_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_PC_Normal_Quality.inst.cfg @@ -45,9 +45,9 @@ retraction_hop_only_when_collides = True retraction_min_travel = 0.8 retraction_prime_speed = 15 skin_overlap = 30 -speed_layer_0 = 25 +speed_layer_0 = =math.ceil(speed_print * 25 / 50) speed_print = 50 -speed_topbottom = 25 +speed_topbottom = =math.ceil(speed_print * 25 / 50) speed_wall = =math.ceil(speed_print * 40 / 50) speed_wall_0 = =math.ceil(speed_wall * 25 / 40) diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_PLA_Draft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_PLA_Draft_Print.inst.cfg index 8ea92a86d7..909af71245 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_PLA_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_PLA_Draft_Print.inst.cfg @@ -20,7 +20,7 @@ material_print_temperature = =default_material_print_temperature + 5 material_standby_temperature = 100 prime_tower_enable = False skin_overlap = 20 -speed_layer_0 = 20 +speed_layer_0 = =math.ceil(speed_print * 20 / 70) speed_topbottom = =math.ceil(speed_print * 40 / 70) speed_wall = =math.ceil(speed_print * 55 / 70) speed_wall_0 = =math.ceil(speed_wall * 45 / 50) diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_PLA_Fast_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_PLA_Fast_Print.inst.cfg index 35a6c51ea4..fea7a76971 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_PLA_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_PLA_Fast_Print.inst.cfg @@ -19,7 +19,7 @@ machine_nozzle_heat_up_speed = 1.6 material_standby_temperature = 100 prime_tower_enable = False speed_print = 70 -speed_layer_0 = 20 +speed_layer_0 = =math.ceil(speed_print * 20 / 70) speed_topbottom = =math.ceil(speed_print * 35 / 70) speed_wall = =math.ceil(speed_print * 45 / 70) speed_wall_0 = =math.ceil(speed_wall * 35 / 70) diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_PLA_High_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_PLA_High_Quality.inst.cfg index d739d132a9..d9ef5052e5 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_PLA_High_Quality.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_PLA_High_Quality.inst.cfg @@ -22,7 +22,7 @@ material_standby_temperature = 100 prime_tower_enable = False skin_overlap = 10 speed_print = 50 -speed_layer_0 = 20 +speed_layer_0 = =math.ceil(speed_print * 20 / 50) speed_topbottom = =math.ceil(speed_print * 35 / 50) speed_wall = =math.ceil(speed_print * 35 / 50) top_bottom_thickness = 1 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_PLA_Normal_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_PLA_Normal_Quality.inst.cfg index 7c86049fe1..a2eb547b08 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_PLA_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_PLA_Normal_Quality.inst.cfg @@ -20,7 +20,7 @@ machine_nozzle_heat_up_speed = 1.6 material_standby_temperature = 100 prime_tower_enable = False skin_overlap = 10 -speed_layer_0 = 20 +speed_layer_0 = =math.ceil(speed_print * 20 / 70) top_bottom_thickness = 1 wall_thickness = 1 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_PP_Draft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_PP_Draft_Print.inst.cfg index e53cd8f7a8..fb806d2a8e 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_PP_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_PP_Draft_Print.inst.cfg @@ -47,7 +47,7 @@ retraction_hop_only_when_collides = True retraction_min_travel = 0.8 retraction_prime_speed = 18 speed_equalize_flow_enabled = True -speed_layer_0 = 15 +speed_layer_0 = =math.ceil(speed_print * 15 / 25) speed_print = 25 speed_topbottom = =math.ceil(speed_print * 25 / 25) speed_travel_layer_0 = 50 diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_PP_Fast_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_PP_Fast_Print.inst.cfg index e9d08feaff..30fe9772ef 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_PP_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_PP_Fast_Print.inst.cfg @@ -47,7 +47,7 @@ retraction_hop_only_when_collides = True retraction_min_travel = 0.8 retraction_prime_speed = 18 speed_equalize_flow_enabled = True -speed_layer_0 = 15 +speed_layer_0 = =math.ceil(speed_print * 15 / 25) speed_print = 25 speed_topbottom = =math.ceil(speed_print * 25 / 25) diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_PP_Normal_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_PP_Normal_Quality.inst.cfg index 58d9e1639a..7be40498f5 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_PP_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_PP_Normal_Quality.inst.cfg @@ -47,7 +47,7 @@ retraction_hop_only_when_collides = True retraction_min_travel = 0.8 retraction_prime_speed = 18 speed_equalize_flow_enabled = True -speed_layer_0 = 15 +speed_layer_0 = =math.ceil(speed_print * 15 / 25) speed_print = 25 speed_topbottom = =math.ceil(speed_print * 25 / 25) diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_TPLA_Draft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_TPLA_Draft_Print.inst.cfg index 8adebb167e..d13e6a8b68 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_TPLA_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_TPLA_Draft_Print.inst.cfg @@ -27,7 +27,7 @@ prime_tower_enable = False roofing_layer_count = 2 skin_outline_count = 0 skin_overlap = 20 -speed_layer_0 = 20 +speed_layer_0 = =math.ceil(speed_print * 20 / 50) speed_print = 50 speed_roofing = =math.ceil(speed_wall * 20 / 24) speed_topbottom = =math.ceil(speed_print * 25 / 50) diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_TPLA_Fast_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_TPLA_Fast_Print.inst.cfg index 780ad37ab4..b41f7851cf 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_TPLA_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_TPLA_Fast_Print.inst.cfg @@ -21,7 +21,7 @@ machine_nozzle_heat_up_speed = 1.6 material_print_temperature = =default_material_print_temperature -10 material_standby_temperature = 100 prime_tower_enable = False -speed_layer_0 = 20 +speed_layer_0 = =math.ceil(speed_print * 20 / 45) speed_print = 45 speed_topbottom = =math.ceil(speed_print * 35 / 45) speed_wall = =math.ceil(speed_print * 40 / 45) diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_TPLA_High_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_TPLA_High_Quality.inst.cfg index 3bcb7142e9..1c3f1470a2 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_TPLA_High_Quality.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_TPLA_High_Quality.inst.cfg @@ -22,7 +22,7 @@ material_standby_temperature = 100 prime_tower_enable = False skin_overlap = 10 speed_print = 45 -speed_layer_0 = 20 +speed_layer_0 = =math.ceil(speed_print * 20 / 45) speed_topbottom = =math.ceil(speed_print * 35 / 45) speed_wall = =math.ceil(speed_print * 40 / 45) speed_wall_0 = =math.ceil(speed_wall * 35 / 45) diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_TPLA_Normal_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_TPLA_Normal_Quality.inst.cfg index b1e7eee3bb..81a952d743 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_TPLA_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_TPLA_Normal_Quality.inst.cfg @@ -23,7 +23,7 @@ material_print_temperature = =default_material_print_temperature - 15 material_standby_temperature = 100 prime_tower_enable = False skin_overlap = 10 -speed_layer_0 = 20 +speed_layer_0 = =math.ceil(speed_print * 20 / 45) speed_print = 45 speed_topbottom = =math.ceil(speed_print * 35 / 45) speed_wall = =math.ceil(speed_print * 40 / 45) diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_TPU_Draft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_TPU_Draft_Print.inst.cfg index 56249427bf..5009b8395f 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_TPU_Draft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_TPU_Draft_Print.inst.cfg @@ -46,7 +46,7 @@ retraction_min_travel = =line_width * 2 retraction_prime_speed = 15 skin_overlap = 5 speed_equalize_flow_enabled = True -speed_layer_0 = 18 +speed_layer_0 = =math.ceil(speed_print * 18 / 25) speed_print = 25 speed_topbottom = =math.ceil(speed_print * 25 / 25) diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_TPU_Fast_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_TPU_Fast_Print.inst.cfg index e362ffd25d..64475d822e 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_TPU_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_TPU_Fast_Print.inst.cfg @@ -46,7 +46,7 @@ retraction_min_travel = =line_width * 2 retraction_prime_speed = 15 skin_overlap = 5 speed_equalize_flow_enabled = True -speed_layer_0 = 18 +speed_layer_0 = =math.ceil(speed_print * 18 / 25) speed_print = 25 speed_topbottom = =math.ceil(speed_print * 25 / 25) diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.4_TPU_Normal_Quality.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.4_TPU_Normal_Quality.inst.cfg index 8ffe0afae6..ac6a62ae5a 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.4_TPU_Normal_Quality.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.4_TPU_Normal_Quality.inst.cfg @@ -45,7 +45,7 @@ retraction_min_travel = =line_width * 2 retraction_prime_speed = 15 skin_overlap = 5 speed_equalize_flow_enabled = True -speed_layer_0 = 18 +speed_layer_0 = =math.ceil(speed_print * 18 / 25) speed_print = 25 speed_topbottom = =math.ceil(speed_print * 25 / 25) diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_CPEP_Fast_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.8_CPEP_Fast_Print.inst.cfg index 4599155da4..3c1b47bfdb 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_CPEP_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_CPEP_Fast_Print.inst.cfg @@ -26,7 +26,7 @@ retraction_combing = off retraction_hop = 0.1 retraction_hop_enabled = False skin_overlap = 0 -speed_layer_0 = 15 +speed_layer_0 = =math.ceil(speed_print * 15 / 50) speed_print = 50 speed_slowdown_layers = 15 speed_topbottom = =math.ceil(speed_print * 35 / 50) diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_CPEP_Superdraft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.8_CPEP_Superdraft_Print.inst.cfg index 36654edf61..00ef557151 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_CPEP_Superdraft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_CPEP_Superdraft_Print.inst.cfg @@ -26,7 +26,7 @@ retraction_combing = off retraction_hop = 0.1 retraction_hop_enabled = False skin_overlap = 0 -speed_layer_0 = 15 +speed_layer_0 = =math.ceil(speed_print * 15 / 50) speed_print = 50 speed_slowdown_layers = 8 speed_topbottom = =math.ceil(speed_print * 35 / 50) diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_CPEP_Verydraft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.8_CPEP_Verydraft_Print.inst.cfg index 0588f2bf34..86535d5d77 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_CPEP_Verydraft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_CPEP_Verydraft_Print.inst.cfg @@ -26,7 +26,7 @@ retraction_combing = off retraction_hop = 0.1 retraction_hop_enabled = False skin_overlap = 0 -speed_layer_0 = 15 +speed_layer_0 = =math.ceil(speed_print * 15 / 50) speed_print = 50 speed_slowdown_layers = 10 speed_topbottom = =math.ceil(speed_print * 35 / 50) diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_PC_Fast_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.8_PC_Fast_Print.inst.cfg index fddb41d4b5..2e90b0215f 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_PC_Fast_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_PC_Fast_Print.inst.cfg @@ -22,7 +22,7 @@ material_standby_temperature = 100 raft_airgap = 0.5 raft_margin = 15 skin_overlap = 0 -speed_layer_0 = 15 +speed_layer_0 = =math.ceil(speed_print * 15 / 50) speed_print = 50 speed_slowdown_layers = 15 speed_topbottom = =math.ceil(speed_print * 25 / 50) diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_PC_Superdraft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.8_PC_Superdraft_Print.inst.cfg index 9f364651c4..cf1dcfe540 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_PC_Superdraft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_PC_Superdraft_Print.inst.cfg @@ -21,7 +21,7 @@ material_standby_temperature = 100 raft_airgap = 0.5 raft_margin = 15 skin_overlap = 0 -speed_layer_0 = 15 +speed_layer_0 = =math.ceil(speed_print * 15 / 50) speed_print = 50 speed_slowdown_layers = 8 speed_topbottom = =math.ceil(speed_print * 25 / 50) diff --git a/resources/quality/ultimaker_s5/um_s5_aa0.8_PC_Verydraft_Print.inst.cfg b/resources/quality/ultimaker_s5/um_s5_aa0.8_PC_Verydraft_Print.inst.cfg index d3ee0ed88c..7c77bf1d53 100644 --- a/resources/quality/ultimaker_s5/um_s5_aa0.8_PC_Verydraft_Print.inst.cfg +++ b/resources/quality/ultimaker_s5/um_s5_aa0.8_PC_Verydraft_Print.inst.cfg @@ -22,7 +22,7 @@ material_standby_temperature = 100 raft_airgap = 0.5 raft_margin = 15 skin_overlap = 0 -speed_layer_0 = 15 +speed_layer_0 = =math.ceil(speed_print * 15 / 50) speed_print = 50 speed_slowdown_layers = 10 speed_topbottom = =math.ceil(speed_print * 25 / 50) diff --git a/resources/quality/zyyx/zyyx_agile_pro_flex_fast.inst.cfg b/resources/quality/zyyx/zyyx_agile_pro_flex_fast.inst.cfg index fe1e98747d..cc538076d2 100644 --- a/resources/quality/zyyx/zyyx_agile_pro_flex_fast.inst.cfg +++ b/resources/quality/zyyx/zyyx_agile_pro_flex_fast.inst.cfg @@ -20,8 +20,8 @@ material_print_temperature_layer_0 = 235 retraction_amount = 1.0 retraction_speed = 15 speed_print = 20 -speed_wall = 20 -speed_wall_x = 20 +speed_wall = =speed_print +speed_wall_x = =speed_print adhesion_type = brim material_flow = 105 raft_airgap = 0.2 diff --git a/resources/quality/zyyx/zyyx_agile_pro_flex_fine.inst.cfg b/resources/quality/zyyx/zyyx_agile_pro_flex_fine.inst.cfg index e0b43cfd95..1791305b92 100644 --- a/resources/quality/zyyx/zyyx_agile_pro_flex_fine.inst.cfg +++ b/resources/quality/zyyx/zyyx_agile_pro_flex_fine.inst.cfg @@ -20,8 +20,8 @@ material_print_temperature_layer_0 = 235 retraction_amount = 0.2 retraction_speed = 15 speed_print = 15 -speed_wall = 15 -speed_wall_x = 15 +speed_wall = =speed_print +speed_wall_x = =speed_print adhesion_type = brim material_flow = 105 raft_airgap = 0.1 diff --git a/resources/quality/zyyx/zyyx_agile_pro_flex_normal.inst.cfg b/resources/quality/zyyx/zyyx_agile_pro_flex_normal.inst.cfg index 959f65469a..70020f5fde 100644 --- a/resources/quality/zyyx/zyyx_agile_pro_flex_normal.inst.cfg +++ b/resources/quality/zyyx/zyyx_agile_pro_flex_normal.inst.cfg @@ -20,8 +20,8 @@ material_print_temperature_layer_0 = 235 retraction_amount = 1.0 retraction_speed = 15 speed_print = 20 -speed_wall = 15 -speed_wall_x = 20 +speed_wall = =math.ceil(speed_print * 15 / 20) +speed_wall_x = =speed_print adhesion_type = brim material_flow = 105 raft_airgap = 0.2 diff --git a/resources/quality/zyyx/zyyx_agile_pro_pla_fast.inst.cfg b/resources/quality/zyyx/zyyx_agile_pro_pla_fast.inst.cfg index 14b9d50351..0f36b6cb67 100644 --- a/resources/quality/zyyx/zyyx_agile_pro_pla_fast.inst.cfg +++ b/resources/quality/zyyx/zyyx_agile_pro_pla_fast.inst.cfg @@ -20,8 +20,8 @@ material_print_temperature_layer_0 = 225 retraction_amount = 1.5 retraction_speed = 20 speed_print = 40 -speed_wall = 40 -speed_wall_x = 40 +speed_wall = =speed_print +speed_wall_x = =speed_print adhesion_type = brim material_flow = 95 raft_airgap = 0.15 diff --git a/resources/quality/zyyx/zyyx_agile_pro_pla_fine.inst.cfg b/resources/quality/zyyx/zyyx_agile_pro_pla_fine.inst.cfg index 25f3aa45de..80ad562b2a 100644 --- a/resources/quality/zyyx/zyyx_agile_pro_pla_fine.inst.cfg +++ b/resources/quality/zyyx/zyyx_agile_pro_pla_fine.inst.cfg @@ -20,8 +20,8 @@ material_print_temperature_layer_0 = 225 retraction_amount = 0.4 retraction_speed = 20 speed_print = 35 -speed_wall = 18 -speed_wall_x = 25 +speed_wall = =math.ceil(speed_print * 18 / 35) +speed_wall_x = =math.ceil(speed_print * 25 / 35) adhesion_type = brim material_flow = 95 raft_airgap = 0.08 diff --git a/resources/quality/zyyx/zyyx_agile_pro_pla_normal.inst.cfg b/resources/quality/zyyx/zyyx_agile_pro_pla_normal.inst.cfg index 3760781e54..e3b933bc1c 100644 --- a/resources/quality/zyyx/zyyx_agile_pro_pla_normal.inst.cfg +++ b/resources/quality/zyyx/zyyx_agile_pro_pla_normal.inst.cfg @@ -20,8 +20,8 @@ material_print_temperature_layer_0 = 225 retraction_amount = 1.2 retraction_speed = 20 speed_print = 50 -speed_wall = 22 -speed_wall_x = 33 +speed_wall = =math.ceil(speed_print * 22 / 50) +speed_wall_x = =math.ceil(speed_print * 33 / 50) adhesion_type = brim material_flow = 95 raft_airgap = 0.15 diff --git a/tests/TestProfileRequirements.py b/tests/TestProfileRequirements.py index edeec909f2..f75ca9da8d 100644 --- a/tests/TestProfileRequirements.py +++ b/tests/TestProfileRequirements.py @@ -19,7 +19,7 @@ import pytest def test_ultimaker3extended_variants(um3_file, um3e_file): directory = os.path.join(os.path.dirname(__file__), "..", "resources", "variants") #TODO: Hardcoded path relative to this test file. um3 = configparser.ConfigParser() - um3.read_file(open(os.path.join(directory, um3_file))) + um3.read_file(open(os.path.join(directory, um3_file), encoding = "utf-8")) um3e = configparser.ConfigParser() - um3e.read_file(open(os.path.join(directory, um3e_file))) + um3e.read_file(open(os.path.join(directory, um3e_file), encoding = "utf-8")) assert um3["values"] == um3e["values"]