diff --git a/cura/CuraApplication.py b/cura/CuraApplication.py index 61ead2d570..a71422aa7d 100644 --- a/cura/CuraApplication.py +++ b/cura/CuraApplication.py @@ -20,6 +20,8 @@ from UM.JobQueue import JobQueue from UM.SaveFile import SaveFile from UM.Scene.Selection import Selection from UM.Scene.GroupDecorator import GroupDecorator +from UM.Settings.ContainerStack import ContainerStack +from UM.Settings.InstanceContainer import InstanceContainer from UM.Settings.Validator import Validator from UM.Message import Message from UM.i18n import i18nCatalog @@ -148,11 +150,11 @@ class CuraApplication(QtApplication): UM.VersionUpgradeManager.VersionUpgradeManager.getInstance().setCurrentVersions( { - ("quality", UM.Settings.InstanceContainer.InstanceContainer.Version): (self.ResourceTypes.QualityInstanceContainer, "application/x-uranium-instancecontainer"), - ("machine_stack", UM.Settings.ContainerStack.ContainerStack.Version): (self.ResourceTypes.MachineStack, "application/x-uranium-containerstack"), - ("extruder_train", UM.Settings.ContainerStack.ContainerStack.Version): (self.ResourceTypes.ExtruderStack, "application/x-uranium-extruderstack"), + ("quality", InstanceContainer.Version): (self.ResourceTypes.QualityInstanceContainer, "application/x-uranium-instancecontainer"), + ("machine_stack", ContainerStack.Version): (self.ResourceTypes.MachineStack, "application/x-uranium-containerstack"), + ("extruder_train", ContainerStack.Version): (self.ResourceTypes.ExtruderStack, "application/x-uranium-extruderstack"), ("preferences", Preferences.Version): (Resources.Preferences, "application/x-uranium-preferences"), - ("user", UM.Settings.InstanceContainer.InstanceContainer.Version): (self.ResourceTypes.UserInstanceContainer, "application/x-uranium-instancecontainer") + ("user", InstanceContainer.Version): (self.ResourceTypes.UserInstanceContainer, "application/x-uranium-instancecontainer") } ) diff --git a/cura/Settings/ContainerManager.py b/cura/Settings/ContainerManager.py index 9cd9ece79c..7bc2ff9efc 100644 --- a/cura/Settings/ContainerManager.py +++ b/cura/Settings/ContainerManager.py @@ -3,15 +3,15 @@ import os.path import urllib +from typing import Dict, Union -from PyQt5.QtCore import QObject, pyqtProperty, pyqtSignal, QUrl, QVariant +from PyQt5.QtCore import QObject, QUrl, QVariant from UM.FlameProfiler import pyqtSlot from PyQt5.QtWidgets import QMessageBox from UM.PluginRegistry import PluginRegistry - -from UM.Platform import Platform from UM.SaveFile import SaveFile +from UM.Platform import Platform from UM.MimeTypeDatabase import MimeTypeDatabase from UM.Logger import Logger @@ -307,18 +307,20 @@ class ContainerManager(QObject): # # \param container_id The ID of the container to export # \param file_type The type of file to save as. Should be in the form of "description (*.extension, *.ext)" - # \param file_url The URL where to save the file. + # \param file_url_or_string The URL where to save the file. # # \return A dictionary containing a key "status" with a status code and a key "message" with a message # explaining the status. # The status code can be one of "error", "cancelled", "success" @pyqtSlot(str, str, QUrl, result = "QVariantMap") - def exportContainer(self, container_id, file_type, file_url): - if not container_id or not file_type or not file_url: + def exportContainer(self, container_id: str, file_type: str, file_url_or_string: Union[QUrl, str]) -> Dict[str, str]: + if not container_id or not file_type or not file_url_or_string: return { "status": "error", "message": "Invalid arguments"} - if isinstance(file_url, QUrl): - file_url = file_url.toLocalFile() + if isinstance(file_url_or_string, QUrl): + file_url = file_url_or_string.toLocalFile() + else: + file_url = file_url_or_string if not file_url: return { "status": "error", "message": "Invalid path"} @@ -373,12 +375,14 @@ class ContainerManager(QObject): # \return \type{Dict} dict with a 'status' key containing the string 'success' or 'error', and a 'message' key # containing a message for the user @pyqtSlot(QUrl, result = "QVariantMap") - def importContainer(self, file_url): - if not file_url: + def importContainer(self, file_url_or_string: Union[QUrl, str]) -> Dict[str, str]: + if not file_url_or_string: return { "status": "error", "message": "Invalid path"} - if isinstance(file_url, QUrl): - file_url = file_url.toLocalFile() + if isinstance(file_url_or_string, QUrl): + file_url = file_url_or_string.toLocalFile() + else: + file_url = file_url_or_string if not file_url or not os.path.exists(file_url): return { "status": "error", "message": "Invalid path" } @@ -438,7 +442,7 @@ class ContainerManager(QObject): ## Clear the top-most (user) containers of the active stacks. @pyqtSlot() - def clearUserContainers(self): + def clearUserContainers(self) -> None: self._machine_manager.blurSettings.emit() send_emits_containers = [] @@ -668,7 +672,7 @@ class ContainerManager(QObject): return new_change_instances @pyqtSlot(str, result = str) - def duplicateMaterial(self, material_id): + def duplicateMaterial(self, material_id: str) -> str: containers = self._container_registry.findInstanceContainers(id=material_id) if not containers: Logger.log("d", "Unable to duplicate the material with id %s, because it doesn't exist.", material_id) @@ -692,7 +696,7 @@ class ContainerManager(QObject): ## Get the singleton instance for this class. @classmethod - def getInstance(cls): + def getInstance(cls) -> "ContainerManager": # Note: Explicit use of class name to prevent issues with inheritance. if ContainerManager.__instance is None: ContainerManager.__instance = cls() @@ -717,7 +721,7 @@ class ContainerManager(QObject): if clear_settings: merge.clear() - def _updateContainerNameFilters(self): + def _updateContainerNameFilters(self) -> None: self._container_name_filters = {} for plugin_id, container_type in self._container_registry.getContainerTypes(): # Ignore default container types since those are not plugins diff --git a/cura/Settings/MachineNameValidator.py b/cura/Settings/MachineNameValidator.py index 68782a2148..dcb83b7a4c 100644 --- a/cura/Settings/MachineNameValidator.py +++ b/cura/Settings/MachineNameValidator.py @@ -6,7 +6,7 @@ from PyQt5.QtGui import QValidator import os #For statvfs. import urllib #To escape machine names for how they're saved to file. -import UM.Resources +from UM.Resources import Resources from UM.Settings.ContainerRegistry import ContainerRegistry from UM.Settings.InstanceContainer import InstanceContainer @@ -19,7 +19,7 @@ class MachineNameValidator(QObject): #Compute the validation regex for printer names. This is limited by the maximum file name length. try: - filename_max_length = os.statvfs(UM.Resources.getDataStoragePath()).f_namemax + filename_max_length = os.statvfs(Resources.getDataStoragePath()).f_namemax except AttributeError: #Doesn't support statvfs. Probably because it's not a Unix system. filename_max_length = 255 #Assume it's Windows on NTFS. machine_name_max_length = filename_max_length - len("_current_settings.") - len(ContainerRegistry.getMimeTypeForContainer(InstanceContainer).preferredSuffix) @@ -41,7 +41,7 @@ class MachineNameValidator(QObject): def validate(self, name, position): #Check for file name length of the current settings container (which is the longest file we're saving with the name). try: - filename_max_length = os.statvfs(UM.Resources.getDataStoragePath()).f_namemax + filename_max_length = os.statvfs(Resources.getDataStoragePath()).f_namemax except AttributeError: #Doesn't support statvfs. Probably because it's not a Unix system. filename_max_length = 255 #Assume it's Windows on NTFS. escaped_name = urllib.parse.quote_plus(name) diff --git a/cura/Settings/SettingOverrideDecorator.py b/cura/Settings/SettingOverrideDecorator.py index 1b0294bd9f..76c155cb99 100644 --- a/cura/Settings/SettingOverrideDecorator.py +++ b/cura/Settings/SettingOverrideDecorator.py @@ -8,7 +8,7 @@ from UM.Signal import Signal, signalemitter from UM.Settings.ContainerStack import ContainerStack from UM.Settings.InstanceContainer import InstanceContainer from UM.Settings.ContainerRegistry import ContainerRegistry -import UM.Logger +from UM.Logger import Logger from UM.Application import Application @@ -99,7 +99,7 @@ class SettingOverrideDecorator(SceneNodeDecorator): Application.getInstance().getBackend().needsSlicing() Application.getInstance().getBackend().tickle() else: - UM.Logger.log("e", "Extruder stack %s below per-object settings does not exist.", self._extruder_stack) + Logger.log("e", "Extruder stack %s below per-object settings does not exist.", self._extruder_stack) else: self._stack.setNextStack(Application.getInstance().getGlobalContainerStack()) diff --git a/plugins/CuraProfileReader/CuraProfileReader.py b/plugins/CuraProfileReader/CuraProfileReader.py index 2198d73b22..f3ac6bab8a 100644 --- a/plugins/CuraProfileReader/CuraProfileReader.py +++ b/plugins/CuraProfileReader/CuraProfileReader.py @@ -2,7 +2,7 @@ # Cura is released under the terms of the AGPLv3 or higher. import configparser -from UM import PluginRegistry +from UM.PluginRegistry import PluginRegistry from UM.Logger import Logger from UM.Settings.InstanceContainer import InstanceContainer # The new profile to make. from cura.ProfileReader import ProfileReader diff --git a/plugins/RemovableDriveOutputDevice/__init__.py b/plugins/RemovableDriveOutputDevice/__init__.py index 616fe6ee8c..b00214d425 100644 --- a/plugins/RemovableDriveOutputDevice/__init__.py +++ b/plugins/RemovableDriveOutputDevice/__init__.py @@ -2,7 +2,7 @@ # Cura is released under the terms of the AGPLv3 or higher. from UM.Platform import Platform - +from UM.Logger import Logger from UM.i18n import i18nCatalog catalog = i18nCatalog("cura") diff --git a/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py b/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py index a95a63995d..a7223128b4 100644 --- a/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py +++ b/plugins/UM3NetworkPrinting/NetworkPrinterOutputDevice.py @@ -99,6 +99,7 @@ class NetworkPrinterOutputDevice(PrinterOutputDevice): self._material_ids = [""] * self._num_extruders self._hotend_ids = [""] * self._num_extruders self._target_bed_temperature = 0 + self._processing_preheat_requests = True self.setPriority(2) # Make sure the output device gets selected above local file output self.setName(key) @@ -262,6 +263,7 @@ class NetworkPrinterOutputDevice(PrinterOutputDevice): Logger.log("i", "Pre-heating bed to %i degrees.", temperature) put_request = QNetworkRequest(url) put_request.setHeader(QNetworkRequest.ContentTypeHeader, "application/json") + self._processing_preheat_requests = False self._manager.put(put_request, data.encode()) self._preheat_bed_timer.start(self._preheat_bed_timeout * 1000) #Times 1000 because it needs to be provided as milliseconds. self.preheatBedRemainingTimeChanged.emit() @@ -532,6 +534,30 @@ class NetworkPrinterOutputDevice(PrinterOutputDevice): self._updateHeadPosition(head_x, head_y, head_z) self._updatePrinterState(self._json_printer_state["status"]) + if self._processing_preheat_requests: + try: + is_preheating = self._json_printer_state["bed"]["pre_heat"]["active"] + except KeyError: #Old firmware doesn't support that. + pass #Don't update the pre-heat remaining time. + else: + if is_preheating: + try: + remaining_preheat_time = self._json_printer_state["bed"]["pre_heat"]["remaining"] + except KeyError: #Error in firmware. If "active" is supported, "remaining" should also be supported. + pass #Anyway, don't update. + else: + #Only update if time estimate is significantly off (>5000ms). + #Otherwise we get issues with latency causing the timer to count inconsistently. + if abs(self._preheat_bed_timer.remainingTime() - remaining_preheat_time * 1000) > 5000: + self._preheat_bed_timer.setInterval(remaining_preheat_time * 1000) + self._preheat_bed_timer.start() + self.preheatBedRemainingTimeChanged.emit() + else: #Not pre-heating. Must've cancelled. + if self._preheat_bed_timer.isActive(): + self._preheat_bed_timer.setInterval(0) + self._preheat_bed_timer.stop() + self.preheatBedRemainingTimeChanged.emit() + def close(self): Logger.log("d", "Closing connection of printer %s with ip %s", self._key, self._address) @@ -1033,6 +1059,8 @@ class NetworkPrinterOutputDevice(PrinterOutputDevice): self._progress_message.hide() elif reply.operation() == QNetworkAccessManager.PutOperation: + if "printer/bed/pre_heat" in reply_url: #Pre-heat command has completed. Re-enable syncing pre-heating. + self._processing_preheat_requests = True if status_code in [200, 201, 202, 204]: pass # Request was successful! else: diff --git a/plugins/VersionUpgrade/VersionUpgrade21to22/MachineInstance.py b/plugins/VersionUpgrade/VersionUpgrade21to22/MachineInstance.py index 4491a00d3d..faf9105cff 100644 --- a/plugins/VersionUpgrade/VersionUpgrade21to22/MachineInstance.py +++ b/plugins/VersionUpgrade/VersionUpgrade21to22/MachineInstance.py @@ -3,7 +3,7 @@ import UM.VersionUpgrade #To indicate that a file is of incorrect format. import UM.VersionUpgradeManager #To schedule more files to be upgraded. -import UM.Resources #To get the config storage path. +from UM.Resources import Resources #To get the config storage path. import configparser #To read config files. import io #To write config files to strings as if they were files. @@ -107,7 +107,7 @@ class MachineInstance: user_profile["values"] = {} version_upgrade_manager = UM.VersionUpgradeManager.VersionUpgradeManager.getInstance() - user_storage = os.path.join(UM.Resources.getDataStoragePath(), next(iter(version_upgrade_manager.getStoragePaths("user")))) + user_storage = os.path.join(Resources.getDataStoragePath(), next(iter(version_upgrade_manager.getStoragePaths("user")))) user_profile_file = os.path.join(user_storage, urllib.parse.quote_plus(self._name) + "_current_settings.inst.cfg") if not os.path.exists(user_storage): os.makedirs(user_storage) diff --git a/plugins/VersionUpgrade/VersionUpgrade21to22/Profile.py b/plugins/VersionUpgrade/VersionUpgrade21to22/Profile.py index 3bff7c1bf5..7cc404de6b 100644 --- a/plugins/VersionUpgrade/VersionUpgrade21to22/Profile.py +++ b/plugins/VersionUpgrade/VersionUpgrade21to22/Profile.py @@ -3,6 +3,8 @@ import configparser #To read config files. import io #To write config files to strings as if they were files. +from typing import Dict +from typing import List import UM.VersionUpgrade from UM.Logger import Logger diff --git a/resources/definitions/cartesio.def.json b/resources/definitions/cartesio.def.json index ba32a2bf9c..9e0ad6e228 100644 --- a/resources/definitions/cartesio.def.json +++ b/resources/definitions/cartesio.def.json @@ -9,7 +9,6 @@ "manufacturer": "Cartesio bv", "category": "Other", "file_formats": "text/x-gcode", - "has_materials": true, "has_machine_materials": true, "has_variants": true, "variants_name": "Nozzle size", @@ -31,12 +30,11 @@ "machine_heated_bed": { "default_value": true }, "machine_center_is_zero": { "default_value": false }, "machine_height": { "default_value": 400 }, - "machine_gcode_flavor": { "default_value": "RepRap (Marlin/Sprinter)" }, "machine_depth": { "default_value": 270 }, "machine_width": { "default_value": 430 }, - "machine_name": { "default_value": "Cartesio" }, + "machine_gcode_flavor": { "default_value": "RepRap (Marlin/Sprinter)" }, "machine_start_gcode": { - "default_value": "M92 E162\nG21\nG90\nM42 S255 P13;chamber lights\nM42 S255 P12;fume extraction\nM140 S{material_bed_temperature}\n\nM117 Homing Y ......\nG28 Y\nM117 Homing X ......\nG28 X\nM117 Homing Z ......\nG28 Z F100\nG1 Z10 F600\nG1 X70 Y20 F9000;go to wipe point\n\nM190 S{material_bed_temperature}\nM104 S120 T1\nM109 S{material_print_temperature} T0\nM104 S21 T1\n\nM117 purging nozzle....\n\nT0\nG92 E0;set E\nG1 E10 F100\nG92 E0\nG1 E-{retraction_amount} F600\nG92 E0\n\nM117 wiping nozzle....\n\nG1 X1 Y24 F3000\nG1 X70 F9000\n\nM117 Printing .....\n\nG1 E1 F100\nG92 E-1\n" + "default_value": "M92 E159\nG21\nG90\nM42 S255 P13;chamber lights\nM42 S255 P12;fume extraction\nM140 S{material_bed_temperature}\n\nM117 Homing Y ......\nG28 Y\nM117 Homing X ......\nG28 X\nM117 Homing Z ......\nG28 Z F100\nG1 Z10 F600\nG1 X70 Y20 F9000;go to wipe point\n\nM190 S{material_bed_temperature}\nM104 S120 T1\nM109 S{material_print_temperature} T0\nM104 S21 T1\n\nM117 purging nozzle....\n\nT0\nG92 E0;set E\nG1 E10 F100\nG92 E0\nG1 E-{retraction_amount} F600\nG92 E0\n\nM117 wiping nozzle....\n\nG1 X1 Y24 F3000\nG1 X70 F9000\n\nM117 Printing .....\n\nG1 E1 F100\nG92 E-1\n" }, "machine_end_gcode": { "default_value": "; -- END GCODE --\nM106 S255\nM140 S5\nM104 S5 T0\nM104 S5 T1\nG1 X20.0 Y260.0 F6000\nG4 S7\nM84\nG4 S90\nM107\nM42 P12 S0\nM42 P13 S0\nM84\n; -- end of END GCODE --" diff --git a/resources/extruders/cartesio_extruder_0.def.json b/resources/extruders/cartesio_extruder_0.def.json index 8f71c68c43..cda2f48bc0 100644 --- a/resources/extruders/cartesio_extruder_0.def.json +++ b/resources/extruders/cartesio_extruder_0.def.json @@ -16,10 +16,10 @@ "machine_nozzle_offset_x": { "default_value": 0.0 }, "machine_nozzle_offset_y": { "default_value": 0.0 }, "machine_extruder_start_code": { - "default_value": "M117 Heating nozzles....\nM104 S190 T0\nG1 X70 Y20 F9000\nM109 S270 T0 ;wait for nozzle to heat up\nT0\n\nM117 purging nozzle\nG92 E0\nG1 E6 F90\nG92 E0\nG1 E-2 F300\nG92 E0\nM117 wiping nozzle\nG1 X1 Y28 F3000\nG1 X70 F6000\n\nM117 printing\n" + "default_value": "\n;start extruder_0\nM117 Heating nozzles....\nM104 S190 T0\nG1 X70 Y20 F9000\nM109 S190 T0\n\nM117 purging nozzle\nG92 E0\nG1 E6 F90\nG92 E0\nG1 E-2 F300\nG92 E0\nM117 wiping nozzle\nG1 X1 Y28 F3000\nG1 X70 F6000\n\nM117 printing\n" }, "machine_extruder_end_code": { - "default_value": "\nM104 S160 T0\n;end extruder_0\nM117 temp is {material_print_temp}" + "default_value": "\nM104 T0 S155\n;end extruder_0\nM117 temp is {material_print_temp}" } } } diff --git a/resources/extruders/cartesio_extruder_1.def.json b/resources/extruders/cartesio_extruder_1.def.json index ee09b6d363..b2bae26983 100644 --- a/resources/extruders/cartesio_extruder_1.def.json +++ b/resources/extruders/cartesio_extruder_1.def.json @@ -16,10 +16,10 @@ "machine_nozzle_offset_x": { "default_value": 24.0 }, "machine_nozzle_offset_y": { "default_value": 0.0 }, "machine_extruder_start_code": { - "default_value": "\n;start extruder_1\nM117 Heating nozzles....\nM104 S190 T1\nG1 X70 Y20 F9000\nM109 S190 T1 ;wait for nozzle to heat up\n\nM117 purging nozzle\nG92 E0\nG1 E6 F90\nG92 E0\nG1 E-2 F300\nG92 E0\n\nM117 wiping nozzle\nG1 X1 Y28 F3000\nG1 X70 F6000\n\nM117 printing\n" + "default_value": "\n;start extruder_1\nM117 Heating nozzles....\nM104 S190 T1\nG1 X70 Y20 F9000\nM109 S190 T1\n\nM117 purging nozzle\nG92 E0\nG1 E6 F90\nG92 E0\nG1 E-2 F300\nG92 E0\n\nM117 wiping nozzle\nG1 X1 Y28 F3000\nG1 X70 F6000\n\nM117 printing\n" }, "machine_extruder_end_code": { - "default_value": "\nM104 T0 S120\n;end extruder_1\n" + "default_value": "\nM104 T1 S155\n;end extruder_1\n" } } } diff --git a/resources/extruders/cartesio_extruder_2.def.json b/resources/extruders/cartesio_extruder_2.def.json index 9d4bfd8c42..b7c382538a 100644 --- a/resources/extruders/cartesio_extruder_2.def.json +++ b/resources/extruders/cartesio_extruder_2.def.json @@ -19,7 +19,7 @@ "default_value": "\n;start extruder_2\nM117 Heating nozzles....\nM104 S190 T2\nG1 X70 Y20 F9000\nM109 S190 T2\n\nM117 purging nozzle\nG92 E0\nG1 E6 F90\nG92 E0\nG1 E-2 F300\nG92 E0\n\nM117 wiping nozzle\nG1 X1 Y28 F3000\nG1 X70 F6000\n\nM117 printing\n" }, "machine_extruder_end_code": { - "default_value": "\nM104 T2 S120\n;end extruder_2\n" + "default_value": "\nM104 T2 S155\n;end extruder_2\n" } } } diff --git a/resources/extruders/cartesio_extruder_3.def.json b/resources/extruders/cartesio_extruder_3.def.json index cdcb392876..ec400103aa 100644 --- a/resources/extruders/cartesio_extruder_3.def.json +++ b/resources/extruders/cartesio_extruder_3.def.json @@ -19,7 +19,7 @@ "default_value": "\n;start extruder_3\nM117 Heating nozzles....\nM104 S190 T3\nG1 X70 Y20 F9000\nM109 S190 T3\n\nM117 purging nozzle\nG92 E0\nG1 E6 F90\nG92 E0\nG1 E-2 F300\nG92 E0\n\nM117 wiping nozzle\nG1 X1 Y28 F3000\nG1 X70 F6000\n\nM117 printing\n" }, "machine_extruder_end_code": { - "default_value": "\nM104 T3 S120\n;end extruder_3\n" + "default_value": "\nM104 T3 S155\n;end extruder_3\n" } } } 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 8d749e29ce..f99c3997f7 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 @@ -10,12 +10,25 @@ material = generic_cpe_plus_ultimaker3_AA_0.4 weight = -2 [values] +brim_width = 7 cool_fan_speed_max = 80 +cool_min_speed = 5 +infill_wipe_dist = 0 layer_height = 0.2 machine_nozzle_cool_down_speed = 0.9 -speed_print = 50 +machine_nozzle_heat_up_speed = 1.4 +prime_tower_size = 17 +retraction_combing = off +retraction_hop = 0.2 +retraction_hop_enabled = False +retraction_min_travel = =5 +retraction_prime_speed = =15 speed_topbottom = =math.ceil(speed_print * 65 / 50) speed_wall = =math.ceil(speed_print * 50 / 50) speed_wall_0 = =math.ceil(speed_wall * 40 / 50) +support_z_distance = =layer_height +switch_extruder_prime_speed = =15 +switch_extruder_retraction_amount = =8 +switch_extruder_retraction_speeds = 20 wall_thickness = 1 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 2536420c1d..c03e072c8e 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 @@ -10,12 +10,26 @@ material = generic_cpe_plus_ultimaker3_AA_0.4 weight = -1 [values] +brim_width = 7 cool_fan_speed_max = 80 cool_min_speed = 6 +infill_wipe_dist = 0 layer_height = 0.15 machine_nozzle_cool_down_speed = 0.9 +machine_nozzle_heat_up_speed = 1.4 +prime_tower_size = 17 +retraction_combing = off +retraction_hop = 0.2 +retraction_hop_enabled = False +retraction_min_travel = =5 +retraction_prime_speed = =15 speed_print = 45 speed_topbottom = =math.ceil(speed_print * 55 / 45) speed_wall = =math.ceil(speed_print * 45 / 45) speed_wall_0 = =math.ceil(speed_wall * 35 / 45) +support_z_distance = =layer_height +switch_extruder_prime_speed = =15 +switch_extruder_retraction_amount = =8 +switch_extruder_retraction_speeds = 20 +wall_thickness = 1.3 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 90c23b7d8f..c88fe1a56a 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 @@ -10,6 +10,24 @@ material = generic_cpe_plus_ultimaker3_AA_0.4 weight = 1 [values] -machine_nozzle_heat_up_speed = 1.5 +brim_width = 7 +cool_min_speed = 5 +infill_wipe_dist = 0 +layer_height = 0.06 material_print_temperature = =default_material_print_temperature + 2 +prime_tower_size = 17 +retraction_combing = off +retraction_hop = 0.2 +retraction_hop_enabled = False +retraction_min_travel = =5 +retraction_prime_speed = =15 +speed_print = 40 +speed_topbottom = =math.ceil(speed_print * 30 / 35) +speed_wall = =math.ceil(speed_print * 35 / 40) +speed_wall_0 = =math.ceil(speed_wall * 30 / 35) +support_z_distance = =layer_height +switch_extruder_prime_speed = =15 +switch_extruder_retraction_amount = =8 +switch_extruder_retraction_speeds = 20 +wall_thickness = 1.3 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 f12d1ca613..9aaceb3a7a 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 @@ -10,8 +10,23 @@ material = generic_cpe_plus_ultimaker3_AA_0.4 weight = 0 [values] +brim_width = 7 cool_min_speed = 7 -layer_height = 0.1 -machine_nozzle_heat_up_speed = 1.5 +infill_wipe_dist = 0 material_print_temperature = =default_material_print_temperature + 5 +prime_tower_size = 17 +retraction_combing = off +retraction_hop = 0.2 +retraction_hop_enabled = False +retraction_min_travel = =5 +retraction_prime_speed = =15 +speed_print = 40 +speed_topbottom = =math.ceil(speed_print * 30 / 35) +speed_wall = =math.ceil(speed_print * 35 / 40) +speed_wall_0 = =math.ceil(speed_wall * 30 / 35) +support_z_distance = =layer_height +switch_extruder_prime_speed = =15 +switch_extruder_retraction_amount = =8 +switch_extruder_retraction_speeds = 20 +wall_thickness = 1.3 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 876941d82b..0cc074b7a0 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 @@ -10,7 +10,24 @@ material = generic_pc_ultimaker3_AA_0.4 weight = -2 [values] +adhesion_type = raft +cool_fan_full_at_height = =layer_height_0 + layer_height cool_fan_speed_max = 90 +cool_min_layer_time_fan_speed_max = 5 cool_min_speed = 6 +infill_line_width = =round(line_width * 0.4 / 0.35, 2) +infill_overlap_mm = 0.05 layer_height = 0.2 +material_print_temperature_layer_0 = =material_print_temperature + 5 +ooze_shield_angle = 40 +raft_airgap = 0.25 +raft_margin = 15 +retraction_count_max = 80 +skin_overlap = 30 +speed_layer_0 = 25 +support_interface_line_distance = 0.4 +support_interface_pattern = lines +support_pattern = zigzag +wall_line_width_x = =round(line_width * 0.4 / 0.35, 2) +xy_offset = -0.15 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 93babeba51..c887fb283d 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 @@ -10,8 +10,25 @@ material = generic_pc_ultimaker3_AA_0.4 weight = -1 [values] +adhesion_type = raft +cool_fan_full_at_height = =layer_height_0 + layer_height cool_fan_speed_max = 85 +cool_min_layer_time_fan_speed_max = 5 cool_min_speed = 7 +infill_line_width = =round(line_width * 0.4 / 0.35, 2) infill_overlap = =0 +infill_overlap_mm = 0.05 layer_height = 0.15 +material_print_temperature_layer_0 = =material_print_temperature + 5 +ooze_shield_angle = 40 +raft_airgap = 0.25 +raft_margin = 15 +retraction_count_max = 80 +skin_overlap = 30 +speed_layer_0 = 25 +support_interface_line_distance = 0.4 +support_interface_pattern = lines +support_pattern = zigzag +wall_line_width_x = =round(line_width * 0.4 / 0.35, 2) +xy_offset = -0.15 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 03f7b2ffd9..6555c13f74 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 @@ -10,6 +10,24 @@ material = generic_pc_ultimaker3_AA_0.4 weight = 1 [values] +adhesion_type = raft +cool_fan_full_at_height = =layer_height_0 + layer_height +cool_min_layer_time_fan_speed_max = 5 cool_min_speed = 8 +infill_line_width = =round(line_width * 0.4 / 0.35, 2) +infill_overlap_mm = 0.05 +layer_height = 0.06 material_print_temperature = =default_material_print_temperature - 10 +material_print_temperature_layer_0 = =material_print_temperature + 5 +ooze_shield_angle = 40 +raft_airgap = 0.25 +raft_margin = 15 +retraction_count_max = 80 +skin_overlap = 30 +speed_layer_0 = 25 +support_interface_line_distance = 0.4 +support_interface_pattern = lines +support_pattern = zigzag +wall_line_width_x = =round(line_width * 0.4 / 0.35, 2) +xy_offset = -0.15 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 7fb9c74ca0..eeea96cd18 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 @@ -10,6 +10,23 @@ material = generic_pc_ultimaker3_AA_0.4 weight = 0 [values] -layer_height = 0.1 +adhesion_type = raft +cool_fan_full_at_height = =layer_height_0 + layer_height +cool_min_layer_time_fan_speed_max = 5 +cool_min_speed = 5 +infill_line_width = =round(line_width * 0.4 / 0.35, 2) +infill_overlap_mm = 0.05 material_print_temperature = =default_material_print_temperature +material_print_temperature_layer_0 = =material_print_temperature + 5 +ooze_shield_angle = 40 +raft_airgap = 0.25 +raft_margin = 15 +retraction_count_max = 80 +skin_overlap = 30 +speed_layer_0 = 25 +support_interface_line_distance = 0.4 +support_interface_pattern = lines +support_pattern = zigzag +wall_line_width_x = =round(line_width * 0.4 / 0.35, 2) +xy_offset = -0.15 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 72bb42c7bd..bcdd8044b8 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 @@ -10,5 +10,31 @@ material = generic_tpu_ultimaker3_AA_0.4 weight = -2 [values] +brim_width = 8.75 +cool_fan_speed_max = 100 +cool_min_layer_time_fan_speed_max = 6 +gradual_infill_step_height = =5 * layer_height +gradual_infill_steps = 4 +infill_line_width = =round(line_width * 0.38 / 0.38, 2) +infill_pattern = tetrahedral +infill_sparse_density = 96 layer_height = 0.2 +line_width = =machine_nozzle_size * 0.95 +material_flow = 106 +material_print_temperature_layer_0 = =default_material_print_temperature + 2 +retraction_count_max = 12 +retraction_extra_prime_amount = 0.8 +skin_overlap = 15 +speed_equalize_flow_enabled = True +speed_layer_0 = 18 +speed_print = 25 +speed_topbottom = =math.ceil(speed_print * 25 / 25) +speed_travel = 300 +speed_wall = =math.ceil(speed_print * 25 / 25) +speed_wall_0 = =math.ceil(speed_wall * 25 / 25) +support_angle = 50 +support_bottom_distance = =support_z_distance / 2 +top_bottom_thickness = 0.7 +wall_line_width_x = =line_width +wall_thickness = 0.76 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 6e0bbc362d..567d9273b5 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 @@ -10,6 +10,32 @@ material = generic_tpu_ultimaker3_AA_0.4 weight = -1 [values] +brim_width = 8.75 +cool_fan_speed_max = 100 +cool_min_layer_time_fan_speed_max = 6 +gradual_infill_step_height = =5 * layer_height +gradual_infill_steps = 4 +infill_line_width = =round(line_width * 0.38 / 0.38, 2) +infill_pattern = tetrahedral +infill_sparse_density = 96 layer_height = 0.15 +line_width = =machine_nozzle_size * 0.95 +material_flow = 106 +material_print_temperature_layer_0 = =default_material_print_temperature + 2 retraction_amount = 7 +retraction_count_max = 12 +retraction_extra_prime_amount = 0.8 +skin_overlap = 15 +speed_equalize_flow_enabled = True +speed_layer_0 = 18 +speed_print = 25 +speed_topbottom = =math.ceil(speed_print * 25 / 25) +speed_travel = 300 +speed_wall = =math.ceil(speed_print * 25 / 25) +speed_wall_0 = =math.ceil(speed_wall * 25 / 25) +support_angle = 50 +support_bottom_distance = =support_z_distance / 2 +top_bottom_thickness = 0.7 +wall_line_width_x = =line_width +wall_thickness = 0.76 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 66f6e91ec9..75d76a32f2 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 @@ -10,7 +10,32 @@ material = generic_tpu_ultimaker3_AA_0.4 weight = 0 [values] +brim_width = 8.75 +cool_fan_speed_max = 100 +cool_min_layer_time_fan_speed_max = 6 +gradual_infill_step_height = =5 * layer_height +gradual_infill_steps = 4 +infill_line_width = =round(line_width * 0.38 / 0.38, 2) +infill_pattern = tetrahedral +infill_sparse_density = 96 +line_width = =machine_nozzle_size * 0.95 +material_flow = 106 material_initial_print_temperature = =material_print_temperature - 10 material_print_temperature = =default_material_print_temperature material_print_temperature_layer_0 = =default_material_print_temperature +retraction_count_max = 12 +retraction_extra_prime_amount = 0.8 +skin_overlap = 15 +speed_equalize_flow_enabled = True +speed_layer_0 = 18 +speed_print = 25 +speed_topbottom = =math.ceil(speed_print * 25 / 25) +speed_travel = 300 +speed_wall = =math.ceil(speed_print * 25 / 25) +speed_wall_0 = =math.ceil(speed_wall * 25 / 25) +support_angle = 50 +support_bottom_distance = =support_z_distance / 2 +top_bottom_thickness = 0.7 +wall_line_width_x = =line_width +wall_thickness = 0.76 diff --git a/resources/variants/cartesio_0.25.inst.cfg b/resources/variants/cartesio_0.25.inst.cfg index 455fd7ee56..1e46c1eb0e 100644 --- a/resources/variants/cartesio_0.25.inst.cfg +++ b/resources/variants/cartesio_0.25.inst.cfg @@ -11,6 +11,9 @@ type = variant machine_nozzle_size = 0.25 machine_nozzle_tip_outer_diameter = 1.05 +infill_line_width = 0.3 + +wall_thickness = 1 wall_0_inset = -0.05 fill_perimeter_gaps = nowhere travel_compensate_overlapping_walls_enabled = @@ -43,6 +46,7 @@ speed_support_interface = =round(speed_topbottom) retraction_combing = off retraction_hop_enabled = true +retraction_hop = 1 support_z_distance = 0 support_xy_distance = 0.5 diff --git a/resources/variants/cartesio_0.4.inst.cfg b/resources/variants/cartesio_0.4.inst.cfg index 44a09c706f..c3ba238726 100644 --- a/resources/variants/cartesio_0.4.inst.cfg +++ b/resources/variants/cartesio_0.4.inst.cfg @@ -12,6 +12,9 @@ type = variant machine_nozzle_size = 0.4 machine_nozzle_tip_outer_diameter = 0.8 +infill_line_width = 0.5 + +wall_thickness = 1.2 wall_0_inset = -0.05 fill_perimeter_gaps = nowhere travel_compensate_overlapping_walls_enabled = @@ -20,7 +23,6 @@ infill_sparse_density = 25 infill_overlap = -50 skin_overlap = -40 - material_print_temperature_layer_0 = =round(material_print_temperature) material_initial_print_temperature = =round(material_print_temperature) material_diameter = 1.75 @@ -44,6 +46,7 @@ speed_support_interface = =round(speed_topbottom) retraction_combing = off retraction_hop_enabled = true +retraction_hop = 1 support_z_distance = 0 support_xy_distance = 0.5 diff --git a/resources/variants/cartesio_0.8.inst.cfg b/resources/variants/cartesio_0.8.inst.cfg index 772ede33fb..851a36256b 100644 --- a/resources/variants/cartesio_0.8.inst.cfg +++ b/resources/variants/cartesio_0.8.inst.cfg @@ -11,18 +11,22 @@ type = variant machine_nozzle_size = 0.8 machine_nozzle_tip_outer_diameter = 1.05 +infill_line_width = 0.9 + +wall_thickness = 2.4 +top_bottom_thickness = =0.8 if layer_height < 0.3 else (layer_height * 3) wall_0_inset = -0.05 fill_perimeter_gaps = nowhere travel_compensate_overlapping_walls_enabled = -infill_sparse_density = 25 +infill_sparse_density = 15 infill_overlap = -50 skin_overlap = -40 material_print_temperature_layer_0 = =round(material_print_temperature) material_initial_print_temperature = =round(material_print_temperature) material_diameter = 1.75 -retraction_amount = 2 +retraction_amount = 1.5 retraction_speed = 40 retraction_prime_speed = =round(retraction_speed / 4) retraction_min_travel = =round(line_width * 10) @@ -43,6 +47,7 @@ speed_support_interface = =round(speed_topbottom) retraction_combing = off retraction_hop_enabled = true +retraction_hop = 1 support_z_distance = 0 support_xy_distance = 0.5