diff --git a/plugins/CuraEngineBackend/CuraEngineBackend.py b/plugins/CuraEngineBackend/CuraEngineBackend.py index 74f564c825..8636c465c0 100755 --- a/plugins/CuraEngineBackend/CuraEngineBackend.py +++ b/plugins/CuraEngineBackend/CuraEngineBackend.py @@ -428,6 +428,7 @@ class CuraEngineBackend(QObject, Backend): "Unable to slice with the current settings. The following settings have errors: {0}").format(", ".join(error_labels)), title = catalog.i18nc("@info:title", "Unable to slice"), message_type = Message.MessageType.WARNING) + Logger.warning(f"Unable to slice with the current settings. The following settings have errors: {', '.join(error_labels)}") self._error_message.show() self.setState(BackendState.Error) self.backendError.emit(job) @@ -454,6 +455,7 @@ class CuraEngineBackend(QObject, Backend): "Unable to slice due to some per-model settings. The following settings have errors on one or more models: {error_labels}").format(error_labels = ", ".join(errors.values())), title = catalog.i18nc("@info:title", "Unable to slice"), message_type = Message.MessageType.WARNING) + Logger.warning(f"Unable to slice due to per-object settings. The following settings have errors on one or more models: {', '.join(errors.values())}") self._error_message.show() self.setState(BackendState.Error) self.backendError.emit(job) diff --git a/plugins/CuraEngineBackend/StartSliceJob.py b/plugins/CuraEngineBackend/StartSliceJob.py index de3b375e28..9e53ce8b3a 100644 --- a/plugins/CuraEngineBackend/StartSliceJob.py +++ b/plugins/CuraEngineBackend/StartSliceJob.py @@ -1,4 +1,4 @@ -# Copyright (c) 2020 Ultimaker B.V. +# Copyright (c) 2021 Ultimaker B.V. # Cura is released under the terms of the LGPLv3 or higher. import numpy @@ -353,10 +353,19 @@ class StartSliceJob(Job): result[key] = stack.getProperty(key, "value") Job.yieldThread() - result["print_bed_temperature"] = result["material_bed_temperature"] # Renamed settings. + # Material identification in addition to non-human-readable GUID + result["material_id"] = stack.material.getMetaDataEntry("base_file", "") + result["material_type"] = stack.material.getMetaDataEntry("material", "") + result["material_name"] = stack.material.getMetaDataEntry("name", "") + result["material_brand"] = stack.material.getMetaDataEntry("brand", "") + + # Renamed settings. + result["print_bed_temperature"] = result["material_bed_temperature"] result["print_temperature"] = result["material_print_temperature"] result["travel_speed"] = result["speed_travel"] - result["time"] = time.strftime("%H:%M:%S") #Some extra settings. + + #Some extra settings. + result["time"] = time.strftime("%H:%M:%S") result["date"] = time.strftime("%d-%m-%Y") result["day"] = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"][int(time.strftime("%w"))] result["initial_extruder_nr"] = CuraApplication.getInstance().getExtruderManager().getInitialExtruderNr() @@ -455,9 +464,9 @@ class StartSliceJob(Job): bed_temperature_settings = ["material_bed_temperature", "material_bed_temperature_layer_0"] pattern = r"\{(%s)(,\s?\w+)?\}" % "|".join(bed_temperature_settings) # match {setting} as well as {setting, extruder_nr} settings["material_bed_temp_prepend"] = re.search(pattern, start_gcode) == None - print_temperature_settings = ["material_print_temperature", "material_print_temperature_layer_0", "default_material_print_temperature", "material_initial_print_temperature", "material_final_print_temperature", "material_standby_temperature"] + print_temperature_settings = ["material_print_temperature", "material_print_temperature_layer_0", "default_material_print_temperature", "material_initial_print_temperature", "material_final_print_temperature", "material_standby_temperature", "print_temperature"] pattern = r"\{(%s)(,\s?\w+)?\}" % "|".join(print_temperature_settings) # match {setting} as well as {setting, extruder_nr} - settings["material_print_temp_prepend"] = re.search(pattern, start_gcode) == None + settings["material_print_temp_prepend"] = re.search(pattern, start_gcode) is None # Replace the setting tokens in start and end g-code. # Use values from the first used extruder by default so we get the expected temperatures diff --git a/plugins/Toolbox/src/Toolbox.py b/plugins/Toolbox/src/Toolbox.py index b91b580779..2c06c87047 100644 --- a/plugins/Toolbox/src/Toolbox.py +++ b/plugins/Toolbox/src/Toolbox.py @@ -1,4 +1,4 @@ -# Copyright (c) 2020 Ultimaker B.V. +# Copyright (c) 2021 Ultimaker B.V. # Toolbox is released under the terms of the LGPLv3 or higher. import json @@ -542,7 +542,7 @@ class Toolbox(QObject, Extension): # Make API Calls # -------------------------------------------------------------------------- def _makeRequestByType(self, request_type: str) -> None: - Logger.log("d", "Requesting [%s] metadata from server.", request_type) + Logger.debug(f"Requesting {request_type} metadata from server.") url = self._request_urls[request_type] callback = lambda r, rt = request_type: self._onDataRequestFinished(rt, r) @@ -554,7 +554,7 @@ class Toolbox(QObject, Extension): @pyqtSlot(str) def startDownload(self, url: str) -> None: - Logger.log("i", "Attempting to download & install package from %s.", url) + Logger.info(f"Attempting to download & install package from {url}.") callback = lambda r: self._onDownloadFinished(r) error_callback = lambda r, e: self._onDownloadFailed(r, e) @@ -572,7 +572,7 @@ class Toolbox(QObject, Extension): @pyqtSlot() def cancelDownload(self) -> None: - Logger.log("i", "User cancelled the download of a package. request %s", self._download_request_data) + Logger.info(f"User cancelled the download of a package. request {self._download_request_data}") if self._download_request_data is not None: self._application.getHttpRequestManager().abortRequest(self._download_request_data) self._download_request_data = None @@ -585,7 +585,7 @@ class Toolbox(QObject, Extension): # Handlers for Network Events # -------------------------------------------------------------------------- def _onDataRequestError(self, request_type: str, reply: "QNetworkReply", error: "QNetworkReply.NetworkError") -> None: - Logger.log("e", "Request [%s] failed due to error [%s]: %s", request_type, error, reply.errorString()) + Logger.error(f"Request {request_type} failed due to error {error}: {reply.errorString()}") self.setViewPage("errored") def _onDataRequestFinished(self, request_type: str, reply: "QNetworkReply") -> None: diff --git a/resources/definitions/eryone_thinker.def.json b/resources/definitions/eryone_thinker.def.json index 6534b8c471..f5487f986a 100644 --- a/resources/definitions/eryone_thinker.def.json +++ b/resources/definitions/eryone_thinker.def.json @@ -12,7 +12,7 @@ "platform_texture": "eryone_thinker_plate.png", "platform_offset": [0, -120, 0], "has_materials": true, - "preferred_material": "generic_pla", + "preferred_material": "eryone_pla", "has_machine_quality": true, "preferred_quality_type": "normal", "machine_extruder_trains": @@ -57,10 +57,10 @@ "default_value": "Marlin" }, "machine_start_gcode": { - "default_value": "G21 ;metric values\nG90 ;absolute positioning\nM82 ;set extruder to absolute mode\nM107 ;start with the fan off\nG28 X0 Y0 ;move X/Y to min endstops\nG28 Z0 ;move Z to min endstops\nG1 Z10.0 F600 ;move the platform down 10mm\nG92 E0 ;zero the extruded length\nG1 F200 E3 ;extrude 3mm of feed stock\nG92 E0 ;zero the extruded length again\nG1 Y-3 F1200 ;move to prime\nG1 X10 F1200 ;\nG1 Z0.1 F600 ;get ready to prime\nG1 X120 E15 F1200 ;prime nozzle \nG1 X120 F3600 ;quick wipe\nG92 E0 ;zero the extruded length\nG5 ;enable resume from power failure\nM117 Printing..." + "default_value": "G21 ;metric values\nG90 ;absolute positioning\nM82 ;set extruder to absolute mode\nM107 ;start with the fan off\nG28 X0 Y0 ;move X/Y to min endstops\nG28 Z0 ;move Z to min endstops\nG1 Z10.0 F600 ;move the platform down 10mm\nG92 E0 ;zero the extruded length\nG1 F200 E3 ;extrude 3mm of feed stock\nG92 E0 ;zero the extruded length again\nG1 Y-3 F1200 ;move to prime\nG1 X10 F1200 ;\nG1 Z0.1 F600 ;get ready to prime\nG1 X120 E15 F1200 ;prime nozzle \nG1 X120 F3600 ;quick wipe\nG92 E0 ;zero the extruded length\nM413 S1 ;enable resume from power failure\nM117 Printing..." }, "machine_end_gcode": { - "default_value": "M104 S0 ;turn off extruder\nM140 S0 ;turn off bed\nM107 ;turn off all fans\nG91 ;relative positioning\nG1 E-1 F300 ;retract the filament a bit before lifting the nozzle, to release some of the pressure\nG1 E-5 F300\nG1 Z+0.5 E-5 ;move Z up a bit and retract filament even more\nG90 ;absolute positioning\nG1 X0 Y250 F4800 ; position for easy part removal\nM84 ;steppers off" + "default_value": "M104 S0 ;turn off extruder\nM140 S0 ;turn off bed\nM107 ;turn off all fans\nG91 ;relative positioning\nG1 E-1 F300 ;retract the filament a bit before lifting the nozzle, to release some of the pressure\nG1 Z+0.5 E-5 ;move Z up a bit and retract filament even more\nG90 ;absolute positioning\nG1 X0 Y250 F4800 ; position for easy part removal\nM84 ;steppers off" }, "acceleration_enabled": { "value": true @@ -160,7 +160,7 @@ "value": 10 }, "skirt_brim_speed": { - "value": 40 + "value": "math.ceil(speed_print * 40 / 60)" }, "skirt_gap": { "value": 5 @@ -229,7 +229,7 @@ "value": 3 }, "wall_thickness": { - "value": "1.2" + "value": "line_width * wall_line_count" }, "bottom_layers": { "value": "4" @@ -250,4 +250,4 @@ "value": "'z_seam_corner_inner'" } } -} +} \ No newline at end of file diff --git a/resources/definitions/hellbot_magna_2_230_dual.def.json b/resources/definitions/hellbot_magna_2_230_dual.def.json index ad15ddf264..56b42a7929 100644 --- a/resources/definitions/hellbot_magna_2_230_dual.def.json +++ b/resources/definitions/hellbot_magna_2_230_dual.def.json @@ -39,11 +39,10 @@ "default_value": 2 }, "machine_start_gcode": { - "default_value": "G21\nG90\nM107\nG28 X0 Y0\nG28 Z0\nG1 Z15.0 F300\nT0\nG92 E0\nG1 F700 E-80\nT1\nG92 E0\nG1 F1000 X1 Y1 Z0.3\nG1 F600 X200 E60\nG1 F1000 Y3\nG1 F600 X1 E120\nT1\nG92 E0\nG28 X0 Y0\nG1 F700 E-80\nT0\nG92 E0" - }, + "default_value": "M104 T0 S{material_print_temperature}\nM104 T1 S{material_print_temperature}\nM109 T0 S{material_print_temperature}\nM109 T1 S{material_print_temperature}\nG21\nG90 \nG28 X0 Y0 \nG28 Z0 \nG1 Z15.0 F300 \nT0 \nG92 E0 \nG1 F700 E-80 \nT1 \nG92 E0 \nG1 F1000 X1 Y1 Z0.3 \nG1 F600 X200 E60 \nG1 F1000 Y3 \nG1 F600 X1 E120 \nT1 \nG92 E0 \nG28 X0 Y0 \nG1 F700 E-80 \nT0 \nG92 E0" + }, "machine_end_gcode": { "default_value": "M104 T0 S0\nM104 T1 S0\nM140 S0\nG92 E1\nG1 E-1 F300\nG28 X0 Y0\nM84" } - } } diff --git a/resources/definitions/hellbot_magna_2_300_dual.def.json b/resources/definitions/hellbot_magna_2_300_dual.def.json index cd94d03100..1917d4b0c1 100644 --- a/resources/definitions/hellbot_magna_2_300_dual.def.json +++ b/resources/definitions/hellbot_magna_2_300_dual.def.json @@ -39,11 +39,10 @@ "default_value": 2 }, "machine_start_gcode": { - "default_value": "G21\nG90\nM107\nG28 X0 Y0\nG28 Z0\nG1 Z15.0 F300\nT0\nG92 E0\nG1 F700 E-80\nT1\nG92 E0\nG1 F1000 X1 Y1 Z0.3\nG1 F600 X200 E60\nG1 F1000 Y3\nG1 F600 X1 E120\nT1\nG92 E0\nG28 X0 Y0\nG1 F700 E-80\nT0\nG92 E0" - }, + "default_value": "M104 T0 S{material_print_temperature}\nM104 T1 S{material_print_temperature}\nM109 T0 S{material_print_temperature}\nM109 T1 S{material_print_temperature}\nG21\nG90 \nG28 X0 Y0 \nG28 Z0 \nG1 Z15.0 F300 \nT0 \nG92 E0 \nG1 F700 E-80 \nT1 \nG92 E0 \nG1 F1000 X1 Y1 Z0.3 \nG1 F600 X200 E60 \nG1 F1000 Y3 \nG1 F600 X1 E120 \nT1 \nG92 E0 \nG28 X0 Y0 \nG1 F700 E-80 \nT0 \nG92 E0" + }, "machine_end_gcode": { "default_value": "M104 T0 S0\nM104 T1 S0\nM140 S0\nG92 E1\nG1 E-1 F300\nG28 X0 Y0\nM84" } - } } diff --git a/resources/extruders/hellbot_magna_2_230_dual_extruder_0.def.json b/resources/extruders/hellbot_magna_2_230_dual_extruder_0.def.json index b572ea4318..a043143f26 100644 --- a/resources/extruders/hellbot_magna_2_230_dual_extruder_0.def.json +++ b/resources/extruders/hellbot_magna_2_230_dual_extruder_0.def.json @@ -13,6 +13,12 @@ "maximum_value": "1" }, "machine_nozzle_size": { "default_value": 0.4 }, - "material_diameter": { "default_value": 1.75 } + "material_diameter": { "default_value": 1.75 }, + "machine_extruder_start_code": { + "default_value": "T0 \nG92 E0 \nG1 F1000 E100 \nG92 E0 \nM104 S{material_print_temperature}" + }, + "machine_extruder_end_code": { + "default_value": "G92 E0 \nG1 F2500 E-5 \nG1 F2400 X230 Y200 \nG1 F3000 E-100 \nG92 E0 \nG90" + } } } diff --git a/resources/extruders/hellbot_magna_2_230_dual_extruder_1.def.json b/resources/extruders/hellbot_magna_2_230_dual_extruder_1.def.json index 398822b156..70650e6f1a 100644 --- a/resources/extruders/hellbot_magna_2_230_dual_extruder_1.def.json +++ b/resources/extruders/hellbot_magna_2_230_dual_extruder_1.def.json @@ -13,6 +13,12 @@ "maximum_value": "1" }, "machine_nozzle_size": { "default_value": 0.4 }, - "material_diameter": { "default_value": 1.75 } + "material_diameter": { "default_value": 1.75 }, + "machine_extruder_start_code": { + "default_value": "T1 \nG92 E0 \nG1 F1000 E100 \nG92 E0 \nM104 S{material_print_temperature}" + }, + "machine_extruder_end_code": { + "default_value": "G92 E0 \nG1 F2500 E-5 \nG1 F2400 X230 Y200 \nG1 F3000 E-100 \nG92 E0 \nG90" + } } } diff --git a/resources/extruders/hellbot_magna_2_300_dual_extruder_0.def.json b/resources/extruders/hellbot_magna_2_300_dual_extruder_0.def.json index af68cc9422..b397e32789 100644 --- a/resources/extruders/hellbot_magna_2_300_dual_extruder_0.def.json +++ b/resources/extruders/hellbot_magna_2_300_dual_extruder_0.def.json @@ -13,6 +13,12 @@ "maximum_value": "1" }, "machine_nozzle_size": { "default_value": 0.4 }, - "material_diameter": { "default_value": 1.75 } + "material_diameter": { "default_value": 1.75 }, + "machine_extruder_start_code": { + "default_value": "T0 \nG92 E0 \nG1 F1000 E100 \nG92 E0 \nM104 S{material_print_temperature}" + }, + "machine_extruder_end_code": { + "default_value": "G92 E0 \nG1 F2500 E-5 \nG1 F2400 X300 Y250 \nG1 F3000 E-100 \nG92 E0 \nG90" + } } } diff --git a/resources/extruders/hellbot_magna_2_300_dual_extruder_1.def.json b/resources/extruders/hellbot_magna_2_300_dual_extruder_1.def.json index 3585978d6e..618ed06d0b 100644 --- a/resources/extruders/hellbot_magna_2_300_dual_extruder_1.def.json +++ b/resources/extruders/hellbot_magna_2_300_dual_extruder_1.def.json @@ -13,6 +13,12 @@ "maximum_value": "1" }, "machine_nozzle_size": { "default_value": 0.4 }, - "material_diameter": { "default_value": 1.75 } + "material_diameter": { "default_value": 1.75 }, + "machine_extruder_start_code": { + "default_value": "T1 \nG92 E0 \nG1 F1000 E100 \nG92 E0 \nM104 S{material_print_temperature}" + }, + "machine_extruder_end_code": { + "default_value": "G92 E0 \nG1 F2500 E-5 \nG1 F2400 X300 Y250 \nG1 F3000 E-100 \nG92 E0 \nG90" + } } } diff --git a/resources/quality/eryone_thinker/eryone_thinker_extra_fast.inst.cfg b/resources/quality/eryone_thinker/eryone_thinker_extra_fast.inst.cfg new file mode 100644 index 0000000000..a824d8f84a --- /dev/null +++ b/resources/quality/eryone_thinker/eryone_thinker_extra_fast.inst.cfg @@ -0,0 +1,37 @@ +[general] +version = 4 +name = Extra Fast +definition = eryone_thinker + +[metadata] +setting_version = 17 +type = quality +quality_type = verydraft +weight = -3 +global_quality = True + +[values] +acceleration_print = 1500 +acceleration_travel = 3000 +infill_sparse_density = 10 +initial_layer_line_width_factor = 100.0 +layer_height = 0.3 +layer_height_0 = =layer_height +material_bed_temperature = =default_material_bed_temperature +material_bed_temperature_layer_0 = =material_bed_temperature +material_final_print_temperature = =material_print_temperature +material_initial_print_temperature = =material_print_temperature +material_print_temperature = =default_material_print_temperature +material_print_temperature_layer_0 = =max(-273.15, material_print_temperature + 5) +skirt_brim_speed = =math.ceil(speed_print * 40 / 50) +speed_print = 100.0 +speed_infill = =math.ceil(speed_print * 60 / 50) +speed_topbottom = =math.ceil(speed_print * 40 / 50) +speed_travel = =speed_print if magic_spiralize else 150 +speed_layer_0 = =math.ceil(speed_print * 40 / 50) +speed_wall_0 = =math.ceil(speed_print * 40 / 50) +speed_wall_x = =math.ceil(speed_print * 60 / 50) +speed_z_hop = =math.ceil(speed_print * 30 / 60) +top_layers = 4 +bottom_layers = 2 +wall_line_count = 2 diff --git a/resources/quality/eryone_thinker/eryone_thinker_fast.inst.cfg b/resources/quality/eryone_thinker/eryone_thinker_fast.inst.cfg index 2455e0cf38..e44d39ae7d 100644 --- a/resources/quality/eryone_thinker/eryone_thinker_fast.inst.cfg +++ b/resources/quality/eryone_thinker/eryone_thinker_fast.inst.cfg @@ -11,9 +11,11 @@ weight = -1 global_quality = True [values] +acceleration_print = 1500 +acceleration_travel = 3000 infill_sparse_density = 15 initial_layer_line_width_factor = 100.0 -layer_height = 0.3 +layer_height = 0.25 layer_height_0 = =layer_height material_bed_temperature = =default_material_bed_temperature material_bed_temperature_layer_0 = =material_bed_temperature