From df9862b86610a0726f659d3cff7418837e177ac5 Mon Sep 17 00:00:00 2001 From: GeekyKayaker Date: Mon, 22 Jul 2024 17:04:17 +0100 Subject: [PATCH 01/84] Add some options to CreateThumbnail to allow for some customisation over the format of the begin block for the image --- .../scripts/CreateThumbnail.py | 25 ++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/plugins/PostProcessingPlugin/scripts/CreateThumbnail.py b/plugins/PostProcessingPlugin/scripts/CreateThumbnail.py index 7d6094ade3..8f0c74ceee 100644 --- a/plugins/PostProcessingPlugin/scripts/CreateThumbnail.py +++ b/plugins/PostProcessingPlugin/scripts/CreateThumbnail.py @@ -35,16 +35,21 @@ class CreateThumbnail(Script): def _convertSnapshotToGcode(self, encoded_snapshot, width, height, chunk_size=78): gcode = [] + use_thumbnail = self.getSettingValueByKey("use_thumbnail") + use_star = self.getSettingValueByKey("use_star") + encoded_snapshot_length = len(encoded_snapshot) + image_type = "thumbnail" if use_thumbnail else "png" + resolution_symbol = '*' if use_star else 'x' gcode.append(";") - gcode.append("; thumbnail begin {}x{} {}".format( - width, height, encoded_snapshot_length)) + gcode.append("; {} begin {}{}{} {}".format( + image_type, width, resolution_symbol, height, encoded_snapshot_length)) chunks = ["; {}".format(encoded_snapshot[i:i+chunk_size]) for i in range(0, len(encoded_snapshot), chunk_size)] gcode.extend(chunks) - gcode.append("; thumbnail end") + gcode.append("; {} end".format(image_type)) gcode.append(";") gcode.append("") @@ -79,6 +84,20 @@ class CreateThumbnail(Script): "minimum_value": "0", "minimum_value_warning": "12", "maximum_value_warning": "600" + }, + "use_thumbnail": + { + "label": "Thumbnail Begin/End", + "description": "Use Thumbnail Begin/End rather than PNG", + "type": "bool", + "default_value": true + }, + "use_star": + { + "label": "xxx*yyy", + "description": "Use '*' instead of 'x' for size of image", + "type": "bool", + "default_value": false } } }""" From f22b86a3cac17b7d22a60f4b0d139c9bac7fe8ce Mon Sep 17 00:00:00 2001 From: whoseyoung Date: Sat, 12 Oct 2024 18:28:31 +0800 Subject: [PATCH 02/84] Add geeetech M1 profile Printing settings for the M1 machine provided by Geeetech officially. --- resources/definitions/geeetech_M1.def.json | 57 +++++++++++++++++++ .../geeetech_M1_0.2.inst.cfg | 13 +++++ .../geeetech_M1_0.3.inst.cfg | 13 +++++ .../geeetech_M1_0.4.inst.cfg | 13 +++++ .../geeetech_M1_0.5.inst.cfg | 13 +++++ .../geeetech_M1_0.6.inst.cfg | 13 +++++ .../geeetech_M1_0.8.inst.cfg | 13 +++++ .../geeetech_M1_1.0.inst.cfg | 13 +++++ 8 files changed, 148 insertions(+) create mode 100644 resources/definitions/geeetech_M1.def.json create mode 100644 resources/variants/geeetech_variants/geeetech_M1_0.2.inst.cfg create mode 100644 resources/variants/geeetech_variants/geeetech_M1_0.3.inst.cfg create mode 100644 resources/variants/geeetech_variants/geeetech_M1_0.4.inst.cfg create mode 100644 resources/variants/geeetech_variants/geeetech_M1_0.5.inst.cfg create mode 100644 resources/variants/geeetech_variants/geeetech_M1_0.6.inst.cfg create mode 100644 resources/variants/geeetech_variants/geeetech_M1_0.8.inst.cfg create mode 100644 resources/variants/geeetech_variants/geeetech_M1_1.0.inst.cfg diff --git a/resources/definitions/geeetech_M1.def.json b/resources/definitions/geeetech_M1.def.json new file mode 100644 index 0000000000..02a59eb1c0 --- /dev/null +++ b/resources/definitions/geeetech_M1.def.json @@ -0,0 +1,57 @@ +{ + "version": 2, + "name": "Geeetech M1", + "inherits": "Geeetech_Base_Single_Extruder", + "metadata": + { + "visible": true, + "machine_extruder_trains": { "0": "Geeetech_Single_Extruder" } + }, + "overrides": + { + "gantry_height": { "value": 35 }, + "machine_depth": { "default_value": 105 }, + "machine_end_gcode": { "default_value": "G91 ;Switch to relative positioning\nG1 E-2.5 F2700 ;Retract filament\nG1 E-1.5 Z0.2 F2400 ;Retract and raise Z\nG1 X5 Y5 F3000 ;Move away\nG1 Z10 ;lift print head\nG90 ;Switch to absolute positioning\nG28 X Y ;homing XY\nM106 S0 ;off Fan\nM104 S0 ;Cooldown hotend\nM140 S0 ;Cooldown bed\nM84 X Y E ;Disable steppers" }, + "machine_head_with_fans_polygon": + { + "default_value": [ + [-31, 31], + [34, 31], + [34, -40], + [-31, -40] + ] + }, + "machine_height": { "default_value": 95 }, + "machine_name": { "default_value": "Geeetech M1" }, + "machine_start_gcode": { "default_value": "\nM104 S{material_print_temperature_layer_0} ; Set Hotend Temperature\nM190 S{material_bed_temperature_layer_0} ; Wait for Bed Temperature\nM109 S{material_print_temperature_layer_0} ; Wait for Hotend Temperature\nG92 E0 ; Reset Extruder\nG28 ; Home all axes\nM107 ;Off Main Fan\nM300 S2500 P1000 ;Play a short tune\nG1 Z0.28 ;Move Z Axis up little to prevent scratching of Heat Bed\nG92 E0 ;Reset Extruder\nG1 Y3 F2400 ;Move to start position\nG1 X75 E40 F500 ;Draw a filament line\nG92 E0 ;Reset Extruder\n;G1 E-0.2 F3000 ;Retract a little\nG1 Z2.0 F3000 ;Move Z Axis up little to prevent scratching of Heat Bed\nG1 X70 Y3 Z0.27 F3000 ;Quickly wipe away from the filament line\nG92 E0 ;Reset Extruder" }, + "machine_width": { "default_value": 105 }, + "retraction_amount": { "value": 1 }, + "material_print_temperature": + { + "maximum_value": "250", + "value": "200 if speed_infill <=100 else 210 if speed_infill <= 150 else 220 if speed_infill <= 200 else 230" + }, + "speed_print": + { + "maximum_value_warning": "200", + "value": 120 + }, + "speed_wall": + { + "maximum_value_warning": "200", + "value": 80 + }, + "speed_wall_0": + { "maximum_value_warning": "200", + "value": 50 + }, + "speed_wall_x": + { "maximum_value_warning": "200", + "value": 80 + }, + "speed_topbottom": + { "maximum_value_warning": "200", + "value": 60 + } + } +} \ No newline at end of file diff --git a/resources/variants/geeetech_variants/geeetech_M1_0.2.inst.cfg b/resources/variants/geeetech_variants/geeetech_M1_0.2.inst.cfg new file mode 100644 index 0000000000..055fbeb747 --- /dev/null +++ b/resources/variants/geeetech_variants/geeetech_M1_0.2.inst.cfg @@ -0,0 +1,13 @@ +[general] +definition = geeetech_M1 +name = 0.2mm Nozzle +version = 4 + +[metadata] +hardware_type = nozzle +setting_version = 23 +type = variant + +[values] +machine_nozzle_size = 0.2 + diff --git a/resources/variants/geeetech_variants/geeetech_M1_0.3.inst.cfg b/resources/variants/geeetech_variants/geeetech_M1_0.3.inst.cfg new file mode 100644 index 0000000000..a442fb90d9 --- /dev/null +++ b/resources/variants/geeetech_variants/geeetech_M1_0.3.inst.cfg @@ -0,0 +1,13 @@ +[general] +definition = geeetech_M1 +name = 0.3mm Nozzle +version = 4 + +[metadata] +hardware_type = nozzle +setting_version = 23 +type = variant + +[values] +machine_nozzle_size = 0.3 + diff --git a/resources/variants/geeetech_variants/geeetech_M1_0.4.inst.cfg b/resources/variants/geeetech_variants/geeetech_M1_0.4.inst.cfg new file mode 100644 index 0000000000..d33b7647a9 --- /dev/null +++ b/resources/variants/geeetech_variants/geeetech_M1_0.4.inst.cfg @@ -0,0 +1,13 @@ +[general] +definition = geeetech_M1 +name = 0.4mm Nozzle +version = 4 + +[metadata] +hardware_type = nozzle +setting_version = 23 +type = variant + +[values] +machine_nozzle_size = 0.4 + diff --git a/resources/variants/geeetech_variants/geeetech_M1_0.5.inst.cfg b/resources/variants/geeetech_variants/geeetech_M1_0.5.inst.cfg new file mode 100644 index 0000000000..49cb4702b2 --- /dev/null +++ b/resources/variants/geeetech_variants/geeetech_M1_0.5.inst.cfg @@ -0,0 +1,13 @@ +[general] +definition = geeetech_M1 +name = 0.5mm Nozzle +version = 4 + +[metadata] +hardware_type = nozzle +setting_version = 23 +type = variant + +[values] +machine_nozzle_size = 0.5 + diff --git a/resources/variants/geeetech_variants/geeetech_M1_0.6.inst.cfg b/resources/variants/geeetech_variants/geeetech_M1_0.6.inst.cfg new file mode 100644 index 0000000000..b2afb9c63e --- /dev/null +++ b/resources/variants/geeetech_variants/geeetech_M1_0.6.inst.cfg @@ -0,0 +1,13 @@ +[general] +definition = geeetech_M1 +name = 0.6mm Nozzle +version = 4 + +[metadata] +hardware_type = nozzle +setting_version = 23 +type = variant + +[values] +machine_nozzle_size = 0.6 + diff --git a/resources/variants/geeetech_variants/geeetech_M1_0.8.inst.cfg b/resources/variants/geeetech_variants/geeetech_M1_0.8.inst.cfg new file mode 100644 index 0000000000..15a4c2c58d --- /dev/null +++ b/resources/variants/geeetech_variants/geeetech_M1_0.8.inst.cfg @@ -0,0 +1,13 @@ +[general] +definition = geeetech_M1 +name = 0.8mm Nozzle +version = 4 + +[metadata] +hardware_type = nozzle +setting_version = 23 +type = variant + +[values] +machine_nozzle_size = 0.8 + diff --git a/resources/variants/geeetech_variants/geeetech_M1_1.0.inst.cfg b/resources/variants/geeetech_variants/geeetech_M1_1.0.inst.cfg new file mode 100644 index 0000000000..4749c6c464 --- /dev/null +++ b/resources/variants/geeetech_variants/geeetech_M1_1.0.inst.cfg @@ -0,0 +1,13 @@ +[general] +definition = geeetech_M1 +name = 1.0mm Nozzle +version = 4 + +[metadata] +hardware_type = nozzle +setting_version = 23 +type = variant + +[values] +machine_nozzle_size = 1.0 + From b66cc9d990e56a4356aec7deee518b7dc282d207 Mon Sep 17 00:00:00 2001 From: whoseyoung Date: Sat, 12 Oct 2024 10:30:18 +0000 Subject: [PATCH 03/84] Applied printer-linter format --- resources/definitions/geeetech_M1.def.json | 45 ++++++++++++---------- 1 file changed, 24 insertions(+), 21 deletions(-) diff --git a/resources/definitions/geeetech_M1.def.json b/resources/definitions/geeetech_M1.def.json index 02a59eb1c0..f0ee942386 100644 --- a/resources/definitions/geeetech_M1.def.json +++ b/resources/definitions/geeetech_M1.def.json @@ -25,33 +25,36 @@ "machine_name": { "default_value": "Geeetech M1" }, "machine_start_gcode": { "default_value": "\nM104 S{material_print_temperature_layer_0} ; Set Hotend Temperature\nM190 S{material_bed_temperature_layer_0} ; Wait for Bed Temperature\nM109 S{material_print_temperature_layer_0} ; Wait for Hotend Temperature\nG92 E0 ; Reset Extruder\nG28 ; Home all axes\nM107 ;Off Main Fan\nM300 S2500 P1000 ;Play a short tune\nG1 Z0.28 ;Move Z Axis up little to prevent scratching of Heat Bed\nG92 E0 ;Reset Extruder\nG1 Y3 F2400 ;Move to start position\nG1 X75 E40 F500 ;Draw a filament line\nG92 E0 ;Reset Extruder\n;G1 E-0.2 F3000 ;Retract a little\nG1 Z2.0 F3000 ;Move Z Axis up little to prevent scratching of Heat Bed\nG1 X70 Y3 Z0.27 F3000 ;Quickly wipe away from the filament line\nG92 E0 ;Reset Extruder" }, "machine_width": { "default_value": 105 }, - "retraction_amount": { "value": 1 }, - "material_print_temperature": + "material_print_temperature": { "maximum_value": "250", "value": "200 if speed_infill <=100 else 210 if speed_infill <= 150 else 220 if speed_infill <= 200 else 230" - }, - "speed_print": + }, + "retraction_amount": { "value": 1 }, + "speed_print": { "maximum_value_warning": "200", "value": 120 }, - "speed_wall": - { - "maximum_value_warning": "200", - "value": 80 - }, - "speed_wall_0": - { "maximum_value_warning": "200", - "value": 50 - }, - "speed_wall_x": - { "maximum_value_warning": "200", - "value": 80 - }, - "speed_topbottom": - { "maximum_value_warning": "200", - "value": 60 - } + "speed_topbottom": + { + "maximum_value_warning": "200", + "value": 60 + }, + "speed_wall": + { + "maximum_value_warning": "200", + "value": 80 + }, + "speed_wall_0": + { + "maximum_value_warning": "200", + "value": 50 + }, + "speed_wall_x": + { + "maximum_value_warning": "200", + "value": 80 + } } } \ No newline at end of file From 72f1ac1a0341f216fbb0fde9e39547f80e826c19 Mon Sep 17 00:00:00 2001 From: whoseyoung Date: Thu, 24 Oct 2024 14:36:45 +0800 Subject: [PATCH 04/84] All issue items processed. --- resources/definitions/geeetech_M1.def.json | 6 +++--- .../variants/geeetech_variants/geeetech_M1_0.2.inst.cfg | 2 +- .../variants/geeetech_variants/geeetech_M1_0.3.inst.cfg | 2 +- .../variants/geeetech_variants/geeetech_M1_0.4.inst.cfg | 2 +- .../variants/geeetech_variants/geeetech_M1_0.5.inst.cfg | 2 +- .../variants/geeetech_variants/geeetech_M1_0.6.inst.cfg | 2 +- .../variants/geeetech_variants/geeetech_M1_0.8.inst.cfg | 2 +- .../variants/geeetech_variants/geeetech_M1_1.0.inst.cfg | 2 +- 8 files changed, 10 insertions(+), 10 deletions(-) diff --git a/resources/definitions/geeetech_M1.def.json b/resources/definitions/geeetech_M1.def.json index f0ee942386..4afb9f4d60 100644 --- a/resources/definitions/geeetech_M1.def.json +++ b/resources/definitions/geeetech_M1.def.json @@ -23,12 +23,12 @@ }, "machine_height": { "default_value": 95 }, "machine_name": { "default_value": "Geeetech M1" }, - "machine_start_gcode": { "default_value": "\nM104 S{material_print_temperature_layer_0} ; Set Hotend Temperature\nM190 S{material_bed_temperature_layer_0} ; Wait for Bed Temperature\nM109 S{material_print_temperature_layer_0} ; Wait for Hotend Temperature\nG92 E0 ; Reset Extruder\nG28 ; Home all axes\nM107 ;Off Main Fan\nM300 S2500 P1000 ;Play a short tune\nG1 Z0.28 ;Move Z Axis up little to prevent scratching of Heat Bed\nG92 E0 ;Reset Extruder\nG1 Y3 F2400 ;Move to start position\nG1 X75 E40 F500 ;Draw a filament line\nG92 E0 ;Reset Extruder\n;G1 E-0.2 F3000 ;Retract a little\nG1 Z2.0 F3000 ;Move Z Axis up little to prevent scratching of Heat Bed\nG1 X70 Y3 Z0.27 F3000 ;Quickly wipe away from the filament line\nG92 E0 ;Reset Extruder" }, + "machine_start_gcode": { "default_value": ";Geeetech M1 official wiki URL for M1:https://www.geeetech.com/wiki/index.php/Geeetech_M1_3D_printer \nM104 S{material_print_temperature_layer_0} ; Set Hotend Temperature\nM190 S{material_bed_temperature_layer_0} ; Wait for Bed Temperature\nM109 S{material_print_temperature_layer_0} ; Wait for Hotend Temperature\nG92 E0 ; Reset Extruder\nG28 ; Home all axes\nM107 ;Off Main Fan\nM300 S2500 P1000 ;Play a short tune\nG1 Z0.28 ;Move Z Axis up little to prevent scratching of Heat Bed\nG92 E0 ;Reset Extruder\nG1 Y3 F2400 ;Move to start position\nG1 X75 E40 F500 ;Draw a filament line\nG92 E0 ;Reset Extruder\n;G1 E-0.2 F3000 ;Retract a little\nG1 Z2.0 F3000 ;Move Z Axis up little to prevent scratching of Heat Bed\nG1 X70 Y3 Z0.27 F3000 ;Quickly wipe away from the filament line\nG92 E0 ;Reset Extruder" }, "machine_width": { "default_value": 105 }, "material_print_temperature": { - "maximum_value": "250", - "value": "200 if speed_infill <=100 else 210 if speed_infill <= 150 else 220 if speed_infill <= 200 else 230" + "maximum_value": "230", + "value": "205 if speed_infill <=100 else 215 if speed_infill <= 150 else 220 if speed_infill <= 200 else 230" }, "retraction_amount": { "value": 1 }, "speed_print": diff --git a/resources/variants/geeetech_variants/geeetech_M1_0.2.inst.cfg b/resources/variants/geeetech_variants/geeetech_M1_0.2.inst.cfg index 055fbeb747..2ab1f4dd00 100644 --- a/resources/variants/geeetech_variants/geeetech_M1_0.2.inst.cfg +++ b/resources/variants/geeetech_variants/geeetech_M1_0.2.inst.cfg @@ -5,7 +5,7 @@ version = 4 [metadata] hardware_type = nozzle -setting_version = 23 +setting_version = 24 type = variant [values] diff --git a/resources/variants/geeetech_variants/geeetech_M1_0.3.inst.cfg b/resources/variants/geeetech_variants/geeetech_M1_0.3.inst.cfg index a442fb90d9..f2cd78d138 100644 --- a/resources/variants/geeetech_variants/geeetech_M1_0.3.inst.cfg +++ b/resources/variants/geeetech_variants/geeetech_M1_0.3.inst.cfg @@ -5,7 +5,7 @@ version = 4 [metadata] hardware_type = nozzle -setting_version = 23 +setting_version = 24 type = variant [values] diff --git a/resources/variants/geeetech_variants/geeetech_M1_0.4.inst.cfg b/resources/variants/geeetech_variants/geeetech_M1_0.4.inst.cfg index d33b7647a9..aee452940d 100644 --- a/resources/variants/geeetech_variants/geeetech_M1_0.4.inst.cfg +++ b/resources/variants/geeetech_variants/geeetech_M1_0.4.inst.cfg @@ -5,7 +5,7 @@ version = 4 [metadata] hardware_type = nozzle -setting_version = 23 +setting_version = 24 type = variant [values] diff --git a/resources/variants/geeetech_variants/geeetech_M1_0.5.inst.cfg b/resources/variants/geeetech_variants/geeetech_M1_0.5.inst.cfg index 49cb4702b2..dbd7e2a69c 100644 --- a/resources/variants/geeetech_variants/geeetech_M1_0.5.inst.cfg +++ b/resources/variants/geeetech_variants/geeetech_M1_0.5.inst.cfg @@ -5,7 +5,7 @@ version = 4 [metadata] hardware_type = nozzle -setting_version = 23 +setting_version = 24 type = variant [values] diff --git a/resources/variants/geeetech_variants/geeetech_M1_0.6.inst.cfg b/resources/variants/geeetech_variants/geeetech_M1_0.6.inst.cfg index b2afb9c63e..9c542b5fb2 100644 --- a/resources/variants/geeetech_variants/geeetech_M1_0.6.inst.cfg +++ b/resources/variants/geeetech_variants/geeetech_M1_0.6.inst.cfg @@ -5,7 +5,7 @@ version = 4 [metadata] hardware_type = nozzle -setting_version = 23 +setting_version = 24 type = variant [values] diff --git a/resources/variants/geeetech_variants/geeetech_M1_0.8.inst.cfg b/resources/variants/geeetech_variants/geeetech_M1_0.8.inst.cfg index 15a4c2c58d..628e670353 100644 --- a/resources/variants/geeetech_variants/geeetech_M1_0.8.inst.cfg +++ b/resources/variants/geeetech_variants/geeetech_M1_0.8.inst.cfg @@ -5,7 +5,7 @@ version = 4 [metadata] hardware_type = nozzle -setting_version = 23 +setting_version = 24 type = variant [values] diff --git a/resources/variants/geeetech_variants/geeetech_M1_1.0.inst.cfg b/resources/variants/geeetech_variants/geeetech_M1_1.0.inst.cfg index 4749c6c464..7a7618760a 100644 --- a/resources/variants/geeetech_variants/geeetech_M1_1.0.inst.cfg +++ b/resources/variants/geeetech_variants/geeetech_M1_1.0.inst.cfg @@ -5,7 +5,7 @@ version = 4 [metadata] hardware_type = nozzle -setting_version = 23 +setting_version = 24 type = variant [values] From 7be35b6bc14a61b2376d3c0e8f8336463f3b62d7 Mon Sep 17 00:00:00 2001 From: whoseyoung Date: Thu, 24 Oct 2024 06:37:41 +0000 Subject: [PATCH 05/84] Applied printer-linter format --- resources/definitions/geeetech_M1.def.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/definitions/geeetech_M1.def.json b/resources/definitions/geeetech_M1.def.json index 4afb9f4d60..fe4b248305 100644 --- a/resources/definitions/geeetech_M1.def.json +++ b/resources/definitions/geeetech_M1.def.json @@ -23,7 +23,7 @@ }, "machine_height": { "default_value": 95 }, "machine_name": { "default_value": "Geeetech M1" }, - "machine_start_gcode": { "default_value": ";Geeetech M1 official wiki URL for M1:https://www.geeetech.com/wiki/index.php/Geeetech_M1_3D_printer \nM104 S{material_print_temperature_layer_0} ; Set Hotend Temperature\nM190 S{material_bed_temperature_layer_0} ; Wait for Bed Temperature\nM109 S{material_print_temperature_layer_0} ; Wait for Hotend Temperature\nG92 E0 ; Reset Extruder\nG28 ; Home all axes\nM107 ;Off Main Fan\nM300 S2500 P1000 ;Play a short tune\nG1 Z0.28 ;Move Z Axis up little to prevent scratching of Heat Bed\nG92 E0 ;Reset Extruder\nG1 Y3 F2400 ;Move to start position\nG1 X75 E40 F500 ;Draw a filament line\nG92 E0 ;Reset Extruder\n;G1 E-0.2 F3000 ;Retract a little\nG1 Z2.0 F3000 ;Move Z Axis up little to prevent scratching of Heat Bed\nG1 X70 Y3 Z0.27 F3000 ;Quickly wipe away from the filament line\nG92 E0 ;Reset Extruder" }, + "machine_start_gcode": { "default_value": ";Geeetech M1 official wiki URL for M1\uff1ahttps://www.geeetech.com/wiki/index.php/Geeetech_M1_3D_printer \nM104 S{material_print_temperature_layer_0} ; Set Hotend Temperature\nM190 S{material_bed_temperature_layer_0} ; Wait for Bed Temperature\nM109 S{material_print_temperature_layer_0} ; Wait for Hotend Temperature\nG92 E0 ; Reset Extruder\nG28 ; Home all axes\nM107 ;Off Main Fan\nM300 S2500 P1000 ;Play a short tune\nG1 Z0.28 ;Move Z Axis up little to prevent scratching of Heat Bed\nG92 E0 ;Reset Extruder\nG1 Y3 F2400 ;Move to start position\nG1 X75 E40 F500 ;Draw a filament line\nG92 E0 ;Reset Extruder\n;G1 E-0.2 F3000 ;Retract a little\nG1 Z2.0 F3000 ;Move Z Axis up little to prevent scratching of Heat Bed\nG1 X70 Y3 Z0.27 F3000 ;Quickly wipe away from the filament line\nG92 E0 ;Reset Extruder" }, "machine_width": { "default_value": 105 }, "material_print_temperature": { From a4d9d309638c154ace93267261d43a0f0b5b8e8f Mon Sep 17 00:00:00 2001 From: whoseyoung Date: Fri, 15 Nov 2024 14:39:26 +0800 Subject: [PATCH 06/84] Updated geeetech_M1.def.json --- resources/definitions/geeetech_M1.def.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/definitions/geeetech_M1.def.json b/resources/definitions/geeetech_M1.def.json index fe4b248305..2ab9447205 100644 --- a/resources/definitions/geeetech_M1.def.json +++ b/resources/definitions/geeetech_M1.def.json @@ -23,7 +23,7 @@ }, "machine_height": { "default_value": 95 }, "machine_name": { "default_value": "Geeetech M1" }, - "machine_start_gcode": { "default_value": ";Geeetech M1 official wiki URL for M1\uff1ahttps://www.geeetech.com/wiki/index.php/Geeetech_M1_3D_printer \nM104 S{material_print_temperature_layer_0} ; Set Hotend Temperature\nM190 S{material_bed_temperature_layer_0} ; Wait for Bed Temperature\nM109 S{material_print_temperature_layer_0} ; Wait for Hotend Temperature\nG92 E0 ; Reset Extruder\nG28 ; Home all axes\nM107 ;Off Main Fan\nM300 S2500 P1000 ;Play a short tune\nG1 Z0.28 ;Move Z Axis up little to prevent scratching of Heat Bed\nG92 E0 ;Reset Extruder\nG1 Y3 F2400 ;Move to start position\nG1 X75 E40 F500 ;Draw a filament line\nG92 E0 ;Reset Extruder\n;G1 E-0.2 F3000 ;Retract a little\nG1 Z2.0 F3000 ;Move Z Axis up little to prevent scratching of Heat Bed\nG1 X70 Y3 Z0.27 F3000 ;Quickly wipe away from the filament line\nG92 E0 ;Reset Extruder" }, + "machine_start_gcode": { "default_value": ";Geeetech M1 official wiki URL:https://www.geeetech.com/wiki/index.php/Geeetech_M1_3D_printer \nM104 S{material_print_temperature_layer_0} ; Set Hotend Temperature\nM140 S{material_bed_temperature_layer_0} ; Set Bed Temperature\n;M190 S{material_bed_temperature_layer_0} ; Wait for Bed Temperature\nM109 S{material_print_temperature_layer_0} ; Wait for Hotend Temperature\nG92 E0 ; Reset Extruder\nG28 ; Home all axes\nM107 ;Off Fan\nM300 S2500 P1000 ;Play a short tune\nG1 Z0.28 ;Move Z Axis up little to prevent scratching of Heat Bed\nG92 E0 ;Reset Extruder\nG1 Y3 F2400 ;Move to start position\nG1 X75 E40 F500 ;Draw a filament line\nG92 E0 ;Reset Extruder\n;G1 E-0.2 F3000 ;Retract a little\nG1 Z2.0 F3000 ;Move Z Axis up little to prevent scratching of Heat Bed\nG1 X70 Y3 Z0.27 F3000 ;Quickly wipe away from the filament line\nG92 E0 ;Reset Extruder" }, "machine_width": { "default_value": 105 }, "material_print_temperature": { From 5a8087d47da74c8ff0611ed4c674170c2023d548 Mon Sep 17 00:00:00 2001 From: JoGrob <59739587+JoGrob@users.noreply.github.com> Date: Sun, 17 Nov 2024 17:15:16 +0100 Subject: [PATCH 07/84] Update sovol_sv01.def.json bowden -> titan --- resources/definitions/sovol_sv01.def.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/resources/definitions/sovol_sv01.def.json b/resources/definitions/sovol_sv01.def.json index 9d77c1c3f6..dd64702f7f 100644 --- a/resources/definitions/sovol_sv01.def.json +++ b/resources/definitions/sovol_sv01.def.json @@ -1,11 +1,11 @@ { "version": 2, "name": "Sovol SV01", - "inherits": "sovol_base_bowden", + "inherits": "sovol_base_titan", "metadata": { "visible": true, - "quality_definition": "sovol_base_bowden" + "quality_definition": "sovol_base_titan" }, "overrides": { @@ -26,4 +26,4 @@ "machine_start_gcode": { "default_value": "M201 X500.00 Y500.00 Z100.00 E5000.00 ;Setup machine max acceleration\nM203 X500.00 Y500.00 Z10.00 E50.00 ;Setup machine max feedrate\nM204 P500.00 R1000.00 T500.00 ;Setup Print/Retract/Travel acceleration\nM205 X8.00 Y8.00 Z0.40 E5.00 ;Setup Jerk\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\n\nG28 ;Home\n\nG92 E0 ;Reset Extruder\nG1 Z2.0 F3000 ;Move Z Axis up\nG1 X10.1 Y20 Z0.28 F5000.0 ;Move to start position\nG1 X10.1 Y200.0 Z0.28 F1500.0 E15 ;Draw the first line\nG1 X10.4 Y200.0 Z0.28 F5000.0 ;Move to side a little\nG1 X10.4 Y20 Z0.28 F1500.0 E30 ;Draw the second line\nG92 E0 ;Reset Extruder\nG1 Z2.0 F3000 ;Move Z Axis up\n" }, "machine_width": { "default_value": 280 } } -} \ No newline at end of file +} From e91a636152499f95da04ba75badee132dbdd7cfd Mon Sep 17 00:00:00 2001 From: GregValiant <64202104+GregValiant@users.noreply.github.com> Date: Wed, 1 Jan 2025 11:54:47 -0500 Subject: [PATCH 08/84] Update AddCoolingProfile.py Add control for a Build Volume fan. Update AddCoolingProfile.py Oops. Left in a debugging line. --- .../scripts/AddCoolingProfile.py | 286 +++++++++++++----- 1 file changed, 209 insertions(+), 77 deletions(-) diff --git a/plugins/PostProcessingPlugin/scripts/AddCoolingProfile.py b/plugins/PostProcessingPlugin/scripts/AddCoolingProfile.py index 44709afd24..ad00fbd923 100644 --- a/plugins/PostProcessingPlugin/scripts/AddCoolingProfile.py +++ b/plugins/PostProcessingPlugin/scripts/AddCoolingProfile.py @@ -1,16 +1,18 @@ # Designed in January 2023 by GregValiant (Greg Foresi) -## My design intent was to make this as full featured and "industrial strength" as I could. People printing exotic materials on large custom printers may want to turn the fans off for certain layers, and then back on again later in the print. This script allows that. +# My design intent was to make this as full featured and "industrial strength" as I could. People printing exotic materials on large custom printers may want to turn the fans off for certain layers, and then back on again later in the print. This script allows that. # Functions: -## Remove all fan speed lines from the file (optional). This should be enabled for the first instance of the script. It is disabled by default in any following instances. -## "By Layer" allows the user to adjust the fan speed up, or down, or off, within the print. "By Feature" allows different fan speeds for different features (;TYPE:WALL-OUTER, etc.). -## If 'By Feature' then a Start Layer and/or an End Layer can be defined. -## Fan speeds are scaled PWM (0 - 255) or RepRap (0.0 - 1.0) depending on {machine_scale_fan_speed_zero_to_one}. -## A minimum fan speed of 12% is enforced. It is the slowest speed that my cooling fan will turn on so that's what I used. 'M106 S14' (as Cura might insert) was pretty useless. -## If multiple extruders have separate fan circuits the speeds are set at tool changes and conform to the layer or feature setting. There is support for up to 4 layer cooling fan circuits. -## My thanks to @5axes(@CUQ), @fieldOfView(@AHoeben), @Ghostkeeper, and @Torgeir. A special thanks to @RBurema for his patience in reviewing my 'non-pythonic' script. -## 9/14/23 (Greg Foresi) Added support for One-at-a-Time print sequence. -## 12/15/23 (Greg Foresi) Split off 'Single Fan By Layer', 'Multi-fan By Layer', 'Single Fan By Feature', and 'Multi-fan By Feature' from the main 'execute' script. -## 1/5/24 (Greg Foresi) Revised the regex replacements. +# Remove all fan speed lines from the file (optional). This should be enabled for the first instance of the script. It is disabled by default in any following instances. +# "By Layer" allows the user to adjust the fan speed up, or down, or off, within the print. "By Feature" allows different fan speeds for different features (;TYPE:WALL-OUTER, etc.). +# If 'By Feature' then a Start Layer and/or an End Layer can be defined. +# Fan speeds are scaled PWM (0 - 255) or RepRap (0.0 - 1.0) depending on {machine_scale_fan_speed_zero_to_one}. +# A minimum fan speed of 12% is enforced. It is the slowest speed that my cooling fan will turn on so that's what I used. 'M106 S14' (as Cura might insert) was pretty useless. +# If multiple extruders have separate fan circuits the speeds are set at tool changes and conform to the layer or feature setting. There is support for up to 4 layer cooling fan circuits. +# My thanks to @5axes(@CUQ), @fieldOfView(@AHoeben), @Ghostkeeper, and @Torgeir. A special thanks to @RBurema for his patience in reviewing my 'non-pythonic' script. +# 09/14/23 (GV) Added support for One-at-a-Time print sequence. +# 12/15/23 (GV) Split off 'Single Fan By Layer', 'Multi-fan By Layer', 'Single Fan By Feature', and 'Multi-fan By Feature' from the main 'execute' script. +# 01/05/24 (GV) Revised the regex replacements. +# 12/11/24 (GV) Added 'off_fan_speed' for the idle nozzle layer cooling fan. It does not have to go to 0%. +# 01/01/25 (GV) Added 'Build Volume' fan control from ..Script import Script from UM.Application import Application @@ -273,37 +275,120 @@ class AddCoolingProfile(Script): "maximum_value": 100, "unit": "% ", "enabled": "fan_enable_raft" + }, + "enable_off_fan_speed": + { + "label": "Enable 'Off speed' of the idle fan", + "description": "For machines with independent layer cooling fans. Leaving a fan running while the other nozzle is printing can help with oozing. You can pick the speed % for the idle nozzle layer cooling fan to hold at.", + "type": "bool", + "default_value": false, + "enabled": "enable_off_fan_speed_enable" + }, + "off_fan_speed": + { + "label": " 'Off' speed of idle nozzle fan", + "description": "This is the speed that the 'idle nozzle' layer cooling fan will maintain rather than being turned off completely.", + "type": "int", + "default_value": 35, + "minimum_value": 0, + "maximum_value": 100, + "unit": "% ", + "enabled": "enable_off_fan_speed_enable and enable_off_fan_speed" + }, + "enable_off_fan_speed_enable": + { + "label": "Hidden setting", + "description": "For dual extruder printers, this enables 'enable_off_fan_speed'.", + "type": "bool", + "default_value": false, + "enabled": false + }, + "bv_fan_speed_control_enable": + { + "label": "Enable 'Chamber Fan' control", + "description": "Available if the 'Build Volume Fan Number' > 0 in 'Printer Settings'. Provides: On layer, off layer, and PWM speed control of the Chamber fan.", + "type": "bool", + "default_value": false, + "enabled": "enable_bv_fan" + }, + "bv_fan_speed": + { + "label": " Chamber fan speed %", + "description": "The speed of the Chamber Fan. This will be converted to PWM Duty Cycle (0-255).", + "type": "int", + "unit": "% ", + "default_value": 50, + "maximum_value": 100, + "minimum_value": 0, + "enabled": "enable_bv_fan and bv_fan_speed_control_enable" + }, + "bv_fan_start_layer": + { + "label": " Start Layer", + "description": "The layer number for Chamber Fan start. Use the Cura preview layer number. If you are using a raft the chanber fan will start when the raft finishes.", + "type": "int", + "default_value": 1, + "minimum_value": 1, + "enabled": "enable_bv_fan and bv_fan_speed_control_enable" + }, + "bv_fan_end_layer": + { + "label": " End Layer", + "description": "The layer number for Chamber Fan to turn off. Use the Cura preview layer number or '-1' to indicate the end of the print.", + "type": "int", + "default_value": -1, + "minimum_value": -1, + "enabled": "enable_bv_fan and bv_fan_speed_control_enable" + }, + "enable_bv_fan": + { + "label": "Hidden setting", + "description": "For printers with heated chambers and chamber fans, this enables 'bv_fan_speed_control_enable'.", + "type": "bool", + "default_value": false, + "enabled": false } } }""" def initialize(self) -> None: super().initialize() - scripts = Application.getInstance().getGlobalContainerStack().getMetaDataEntry("post_processing_scripts") + curaApp = Application.getInstance().getGlobalContainerStack() + extruder = curaApp.extruderList + scripts = curaApp.getMetaDataEntry("post_processing_scripts") if scripts != None: script_count = scripts.count("AddCoolingProfile") if script_count > 0: - ## Set 'Remove M106 lines' to "false" if there is already an instance of this script running. + # Set 'Remove M106 lines' to "false" if there is already an instance of this script running. self._instance.setProperty("delete_existing_m106", "value", False) + if curaApp.getProperty("machine_extruder_count", "value") > 1: + if extruder[0].getProperty("machine_extruder_cooling_fan_number", "value") != extruder[1].getProperty("machine_extruder_cooling_fan_number", "value"): + self._instance.setProperty("enable_off_fan_speed_enable", "value", True) + self.has_bv_fan = False + self.bv_fan_nr = -1 + if int(curaApp.getProperty("build_volume_fan_nr", "value")) > 0: + self.has_bv_fan = True + self.bv_fan_nr = int(curaApp.getProperty("build_volume_fan_nr", "value")) + self._instance.setProperty("enable_bv_fan", "value", True) def execute(self, data): #Initialize variables that are buried in if statements. - mycura = Application.getInstance().getGlobalContainerStack() + curaApp = Application.getInstance().getGlobalContainerStack() t0_fan = " P0"; t1_fan = " P0"; t2_fan = " P0"; t3_fan = " P0"; is_multi_extr_print = True #Get some information from Cura----------------------------------- - extruder = mycura.extruderList + extruder = curaApp.extruderList #This will be true when fan scale is 0-255pwm and false when it's RepRap 0-1 (Cura 5.x) fan_mode = True - ##For 4.x versions that don't have the 0-1 option + #For 4.x versions that don't have the 0-1 option try: fan_mode = not bool(extruder[0].getProperty("machine_scale_fan_speed_zero_to_one", "value")) except: pass bed_adhesion = (extruder[0].getProperty("adhesion_type", "value")) - extruder_count = mycura.getProperty("machine_extruder_count", "value") - print_sequence = str(mycura.getProperty("print_sequence", "value")) + extruder_count = curaApp.getProperty("machine_extruder_count", "value") + print_sequence = str(curaApp.getProperty("print_sequence", "value")) #Assign the fan numbers to the tools------------------------------ if extruder_count == 1: @@ -333,7 +418,7 @@ class AddCoolingProfile(Script): #Assign the variable values if "By Layer"------------------------- by_layer_or_feature = self.getSettingValueByKey("fan_layer_or_feature") if by_layer_or_feature == "by_layer": - ## By layer doesn't do any feature search so there is no need to look for combing moves + # By layer doesn't do any feature search so there is no need to look for combing moves feature_fan_combing = False fan_list[0] = self.getSettingValueByKey("layer_fan_1") fan_list[2] = self.getSettingValueByKey("layer_fan_2") @@ -343,25 +428,25 @@ class AddCoolingProfile(Script): fan_list[10] = self.getSettingValueByKey("layer_fan_6") fan_list[12] = self.getSettingValueByKey("layer_fan_7") fan_list[14] = self.getSettingValueByKey("layer_fan_8") - ## If there is no '/' delimiter then ignore the line else put the settings in a list + # If there is no '/' delimiter then ignore the line else put the settings in a list for num in range(0,15,2): if "/" in fan_list[num]: fan_list[num + 1] = self._layer_checker(fan_list[num], "p", fan_mode) fan_list[num] = self._layer_checker(fan_list[num], "l", fan_mode) - ## Assign the variable values if "By Feature" + # Assign the variable values if "By Feature" elif by_layer_or_feature == "by_feature": the_start_layer = self.getSettingValueByKey("feature_fan_start_layer") - 1 the_end_layer = self.getSettingValueByKey("feature_fan_end_layer") try: if int(the_end_layer) != -1: - ## Catch a possible input error. + # Catch a possible input error. if the_end_layer < the_start_layer: the_end_layer = the_start_layer except: - the_end_layer = -1 ## If there is an input error default to the entire gcode file. + the_end_layer = -1 # If there is an input error then default to the entire gcode file. - ## Get the speed for each feature + # Get the speed for each feature feature_name_list = [] feature_speed_list = [] feature_speed_list.append(self._feature_checker(self.getSettingValueByKey("feature_fan_skirt"), fan_mode)); feature_name_list.append(";TYPE:SKIRT") @@ -376,19 +461,28 @@ class AddCoolingProfile(Script): feature_speed_list.append(self._feature_checker(self.getSettingValueByKey("feature_fan_feature_final"), fan_mode)); feature_name_list.append("FINAL_FAN") feature_fan_combing = self.getSettingValueByKey("feature_fan_combing") if the_end_layer > -1 and by_layer_or_feature == "by_feature": - ## Required so the final speed input can be determined + # Required so the final speed input can be determined the_end_is_enabled = True else: - ## There is no ending layer so do the whole file + # There is no ending layer so do the whole file the_end_is_enabled = False if the_end_layer == -1 or the_end_is_enabled == False: the_end_layer = len(data) + 2 - ## Find the Layer0Index and the RaftIndex + # For multi-extruder printers with separate fans the 'idle' nozzle fan can be left on for ooze control + off_fan_speed = 0 + if Application.getInstance().getGlobalContainerStack().getProperty("machine_extruder_count", "value") > 1: + if self.getSettingValueByKey("enable_off_fan_speed"): + if fan_mode: + off_fan_speed = round(int(self.getSettingValueByKey("off_fan_speed")) * 2.55) + else: + off_fan_speed = round(int(self.getSettingValueByKey("off_fan_speed")) * .01, 2) + + # Find the Layer0Index and the RaftIndex raft_start_index = 0 number_of_raft_layers = 0 layer_0_index = 0 - ## Catch the number of raft layers. + # Catch the number of raft layers. for l_num in range(1,10,1): layer = data[l_num] if ";LAYER:-" in layer: @@ -399,13 +493,13 @@ class AddCoolingProfile(Script): layer_0_index = l_num break - ## Is this a single extruder print on a multi-extruder printer? - get the correct fan number for the extruder being used. + # Is this a single extruder print on a multi-extruder printer? - get the correct fan number for the extruder being used. if is_multi_fan: T0_used = False T1_used = False T2_used = False T3_used = False - ## Bypass the file header and ending gcode. + # Bypass the file header and ending gcode. for num in range(1,len(data)-1,1): lines = data[num] if "T0" in lines: @@ -418,7 +512,7 @@ class AddCoolingProfile(Script): T3_used = True is_multi_extr_print = True if sum([T0_used, T1_used, T2_used, T3_used]) > 1 else False - ## On a multi-extruder printer and single extruder print find out which extruder starts the file. + # On a multi-extruder printer and single extruder print find out which extruder starts the file. init_fan = t0_fan if not is_multi_extr_print: startup = data[1] @@ -431,7 +525,7 @@ class AddCoolingProfile(Script): elif line == "T3": t0_fan = t3_fan elif is_multi_extr_print: - ## On a multi-extruder printer and multi extruder print find out which extruder starts the file. + # On a multi-extruder printer and multi extruder print find out which extruder starts the file. startup = data[1] lines = startup.split("\n") for line in lines: @@ -445,7 +539,7 @@ class AddCoolingProfile(Script): init_fan = t3_fan else: init_fan = "" - ## Assign the variable values if "Raft Enabled" + # Assign the variable values if "Raft Enabled" raft_enabled = self.getSettingValueByKey("fan_enable_raft") if raft_enabled and bed_adhesion == "raft": fan_sp_raft = self._feature_checker(self.getSettingValueByKey("fan_raft_percent"), fan_mode) @@ -453,15 +547,15 @@ class AddCoolingProfile(Script): fan_sp_raft = "M106 S0" # Start to alter the data----------------------------------------- - ## Strip the existing M106 lines from the file up to the end of the last layer. If a user wants to use more than one instance of this plugin then they won't want to erase the M106 lines that the preceding plugins inserted so 'delete_existing_m106' is an option. + # Strip the existing M106 lines from the file up to the end of the last layer. If a user wants to use more than one instance of this plugin then they won't want to erase the M106 lines that the preceding plugins inserted so 'delete_existing_m106' is an option. delete_existing_m106 = self.getSettingValueByKey("delete_existing_m106") if delete_existing_m106: - ## Start deleting from the beginning + # Start deleting from the beginning start_from = int(raft_start_index) else: if by_layer_or_feature == "by_layer": altered_start_layer = str(len(data)) - ## The fan list layers don't need to be in ascending order. Get the lowest. + # The fan list layers don't need to be in ascending order. Get the lowest. for num in range(0,15,2): try: if int(fan_list[num]) < int(altered_start_layer): @@ -471,12 +565,12 @@ class AddCoolingProfile(Script): elif by_layer_or_feature == "by_feature": altered_start_layer = int(the_start_layer) - 1 start_from = int(layer_0_index) + int(altered_start_layer) - ## Strip the M106 and M107 lines from the file + # Strip the M106 and M107 lines from the file for l_index in range(int(start_from), len(data) - 1, 1): data[l_index] = re.sub(re.compile("M106(.*)\n"), "", data[l_index]) data[l_index] = re.sub(re.compile("M107(.*)\n"), "", data[l_index]) - ## Deal with a raft and with One-At-A-Time print sequence + # Deal with a raft and with One-At-A-Time print sequence if raft_enabled and bed_adhesion == "raft": if print_sequence == "one_at_a_time": for r_index in range(2,len(data)-2,1): @@ -486,9 +580,9 @@ class AddCoolingProfile(Script): lines.insert(1, "M106 S0" + str(t0_fan)) if raft_enabled and bed_adhesion == "raft": if ";LAYER:-" in data[r_index]: - ## Turn the raft fan on + # Turn the raft fan on lines.insert(1, fan_sp_raft + str(t0_fan)) - ## Shut the raft fan off at layer 0 + # Shut the raft fan off at layer 0 if ";LAYER:0" in data[r_index]: lines.insert(1,"M106 S0" + str(t0_fan)) data[r_index] = "\n".join(lines) @@ -496,13 +590,13 @@ class AddCoolingProfile(Script): layer = data[raft_start_index] lines = layer.split("\n") if ";LAYER:-" in layer: - ## Turn the raft fan on + # Turn the raft fan on lines.insert(1, fan_sp_raft + str(init_fan)) layer = "\n".join(lines) data[raft_start_index] = layer layer = data[layer_0_index] lines = layer.split("\n") - ## Shut the raft fan off + # Shut the raft fan off lines.insert(1, "M106 S0" + str(init_fan)) data[layer_0_index] = "\n".join(lines) else: @@ -513,31 +607,34 @@ class AddCoolingProfile(Script): lines.insert(1, "M106 S0" + str(t0_fan)) data[r_index] = "\n".join(lines) - ## Turn off all fans at the end of data[1]. If more than one instance of this script is running then this will result in multiple M106 lines. + # Turn off all fans at the end of data[1]. If more than one instance of this script is running then this will result in multiple M106 lines. temp_startup = data[1].split("\n") temp_startup.insert(len(temp_startup)-2,"M106 S0" + str(t0_fan)) - ## If there are multiple cooling fans shut them all off + # If there are multiple cooling fans shut them all off if is_multi_fan: if extruder_count > 1 and t1_fan != t0_fan: temp_startup.insert(len(temp_startup)-2,"M106 S0" + str(t1_fan)) if extruder_count > 2 and t2_fan != t1_fan and t2_fan != t0_fan: temp_startup.insert(len(temp_startup)-2,"M106 S0" + str(t2_fan)) if extruder_count > 3 and t3_fan != t2_fan and t3_fan != t1_fan and t3_fan != t0_fan: temp_startup.insert(len(temp_startup)-2,"M106 S0" + str(t3_fan)) data[1] = "\n".join(temp_startup) - ## If 'feature_fan_combing' is True then add additional 'MESH:NONMESH' lines for travel moves over 5 lines long - ## For compatibility with 5.3.0 change any MESH:NOMESH to MESH:NONMESH. + # If 'feature_fan_combing' is True then add additional 'MESH:NONMESH' lines for travel moves over 5 lines long + # For compatibility with 5.3.0 change any MESH:NOMESH to MESH:NONMESH. if feature_fan_combing: for layer_num in range(2,len(data)): layer = data[layer_num] data[layer_num] = re.sub(";MESH:NOMESH", ";MESH:NONMESH", layer) data = self._add_travel_comment(data, layer_0_index) - + # If there is a build volume fan + if self.has_bv_fan: + if self.getSettingValueByKey("bv_fan_speed_control_enable"): + data = self._control_bv_fan(data) # Single Fan "By Layer"-------------------------------------------- if by_layer_or_feature == "by_layer" and not is_multi_fan: return self._single_fan_by_layer(data, layer_0_index, fan_list, t0_fan) # Multi-Fan "By Layer"--------------------------------------------- if by_layer_or_feature == "by_layer" and is_multi_fan: - return self._multi_fan_by_layer(data, layer_0_index, fan_list, t0_fan, t1_fan, t2_fan, t3_fan) + return self._multi_fan_by_layer(data, layer_0_index, fan_list, t0_fan, t1_fan, t2_fan, t3_fan, fan_mode, off_fan_speed) #Single Fan "By Feature"------------------------------------------ if by_layer_or_feature == "by_feature" and (not is_multi_fan or not is_multi_extr_print): @@ -545,7 +642,7 @@ class AddCoolingProfile(Script): #Multi Fan "By Feature"------------------------------------------- if by_layer_or_feature == "by_feature" and is_multi_fan: - return self._multi_fan_by_feature(data, layer_0_index, the_start_layer, the_end_layer, the_end_is_enabled, fan_list, t0_fan, t1_fan, t2_fan, t3_fan, feature_speed_list, feature_name_list, feature_fan_combing) + return self._multi_fan_by_feature(data, layer_0_index, the_start_layer, the_end_layer, the_end_is_enabled, fan_list, t0_fan, t1_fan, t2_fan, t3_fan, feature_speed_list, feature_name_list, feature_fan_combing, fan_mode, off_fan_speed) # The Single Fan "By Layer"---------------------------------------- def _single_fan_by_layer(self, data: str, layer_0_index: int, fan_list: str, t0_fan: str)->str: @@ -557,7 +654,7 @@ class AddCoolingProfile(Script): for fan_line in fan_lines: if ";LAYER:" in fan_line: layer_number = str(fan_line.split(":")[1]) - ## If there is a match for the current layer number make the insertion + # If there is a match for the current layer number make the insertion for num in range(0,15,2): if layer_number == str(fan_list[num]): layer = layer.replace(fan_lines[0],fan_lines[0] + "\n" + fan_list[num + 1] + str(t0_fan)) @@ -565,7 +662,7 @@ class AddCoolingProfile(Script): return single_fan_data # Multi-Fan "By Layer"----------------------------------------- - def _multi_fan_by_layer(self, data: str, layer_0_index: int, fan_list: str, t0_fan: str, t1_fan: str, t2_fan: str, t3_fan: str)->str: + def _multi_fan_by_layer(self, data: str, layer_0_index: int, fan_list: str, t0_fan: str, t1_fan: str, t2_fan: str, t3_fan: str, fan_mode: bool, off_fan_speed: str)->str: multi_fan_data = data layer_number = "0" current_fan_speed = "0" @@ -573,15 +670,15 @@ class AddCoolingProfile(Script): this_fan = str(t0_fan) start_index = str(len(multi_fan_data)) for num in range(0,15,2): - ## The fan_list may not be in ascending order. Get the lowest layer number + # The fan_list may not be in ascending order. Get the lowest layer number try: if int(fan_list[num]) < int(start_index): start_index = str(fan_list[num]) except: pass - ## Move the start point if delete_existing_m106 is false + # Move the start point if delete_existing_m106 is false start_index = int(start_index) + int(layer_0_index) - ## Track the tool number + # Track the tool number for num in range(1,int(start_index),1): layer = multi_fan_data[num] lines = layer.split("\n") @@ -603,13 +700,13 @@ class AddCoolingProfile(Script): layer = multi_fan_data[l_index] fan_lines = layer.split("\n") for fan_line in fan_lines: - ## Prepare to shut down the previous fan and start the next one. + # Prepare to shut down the previous fan and start the next one. if fan_line.startswith("T"): if fan_line == "T0": this_fan = str(t0_fan) if fan_line == "T1": this_fan = str(t1_fan) if fan_line == "T2": this_fan = str(t2_fan) if fan_line == "T3": this_fan = str(t3_fan) - modified_data += "M106 S0" + prev_fan + "\n" + modified_data += f"M106 S{off_fan_speed}" + prev_fan + "\n" modified_data += fan_line + "\n" modified_data += "M106 S" + str(current_fan_speed) + this_fan + "\n" prev_fan = this_fan @@ -620,11 +717,14 @@ class AddCoolingProfile(Script): if layer_number == str(fan_list[num]): modified_data += fan_list[num + 1] + this_fan + "\n" current_fan_speed = str(fan_list[num + 1].split("S")[1]) - current_fan_speed = str(current_fan_speed.split(" ")[0]) ## Just in case + current_fan_speed = str(current_fan_speed.split(" ")[0]) # Just in case else: modified_data += fan_line + "\n" if modified_data.endswith("\n"): modified_data = modified_data[0:-1] multi_fan_data[l_index] = modified_data + # Insure the fans get shut off if 'off_fan_speed' was enabled + if Application.getInstance().getGlobalContainerStack().getProperty("machine_extruder_count", "value") > 1 and self.getSettingValueByKey("enable_off_fan_speed"): + multi_fan_data[-1] += "M106 S0 P1\nM106 S0 P0\n" return multi_fan_data # Single fan by feature----------------------------------------------- @@ -632,7 +732,7 @@ class AddCoolingProfile(Script): single_fan_data = data layer_number = "0" index = 1 - ## Start with layer:0 + # Start with layer:0 for l_index in range(layer_0_index,len(single_fan_data)-1,1): modified_data = "" layer = single_fan_data[l_index] @@ -652,7 +752,7 @@ class AddCoolingProfile(Script): if feature_fan_combing == True: modified_data += "M106 S0" + t0_fan + "\n" modified_data += line + "\n" - ## If an End Layer is defined and is less than the last layer then insert the Final Speed + # If an End Layer is defined and is less than the last layer then insert the Final Speed if line == ";LAYER:" + str(the_end_layer) and the_end_is_enabled == True: modified_data += feature_speed_list[len(feature_speed_list) - 1] + t0_fan + "\n" if modified_data.endswith("\n"): modified_data = modified_data[0: - 1] @@ -660,7 +760,7 @@ class AddCoolingProfile(Script): return single_fan_data # Multi-fan by feature------------------------------------------------ - def _multi_fan_by_feature(self, data: str, layer_0_index: int, the_start_layer: str, the_end_layer: str, the_end_is_enabled: str, fan_list: str, t0_fan: str, t1_fan: str, t2_fan: str, t3_fan: str, feature_speed_list: str, feature_name_list: str, feature_fan_combing: bool)->str: + def _multi_fan_by_feature(self, data: str, layer_0_index: int, the_start_layer: str, the_end_layer: str, the_end_is_enabled: str, fan_list: str, t0_fan: str, t1_fan: str, t2_fan: str, t3_fan: str, feature_speed_list: str, feature_name_list: str, feature_fan_combing: bool, fan_mode: bool, off_fan_speed: str)->str: multi_fan_data = data layer_number = "0" start_index = 1 @@ -673,7 +773,7 @@ class AddCoolingProfile(Script): if ";LAYER:" + str(the_start_layer) + "\n" in layer: start_index = int(my_index) - 1 break - ## Track the previous tool changes + # Track the previous tool changes for num in range(1,start_index,1): layer = multi_fan_data[num] lines = layer.split("\n") @@ -690,7 +790,7 @@ class AddCoolingProfile(Script): elif line == "T3": prev_fan = this_fan this_fan = t3_fan - ## Get the current tool. + # Get the current tool. for l_index in range(start_index,start_index + 1,1): layer = multi_fan_data[l_index] lines = layer.split("\n") @@ -702,7 +802,7 @@ class AddCoolingProfile(Script): if line == "T3": this_fan = t3_fan prev_fan = this_fan - ## Start to make insertions------------------------------------- + # Start to make insertions------------------------------------- for l_index in range(start_index+1,len(multi_fan_data)-1,1): layer = multi_fan_data[l_index] lines = layer.split("\n") @@ -712,10 +812,10 @@ class AddCoolingProfile(Script): if line == "T1": this_fan = t1_fan if line == "T2": this_fan = t2_fan if line == "T3": this_fan = t3_fan - ## Turn off the prev fan - modified_data += "M106 S0" + prev_fan + "\n" + # Turn off the prev fan + modified_data += f"M106 S{off_fan_speed}" + prev_fan + "\n" modified_data += line + "\n" - ## Turn on the current fan + # Turn on the current fan modified_data += "M106 S" + str(current_fan_speed) + this_fan + "\n" prev_fan = this_fan if ";LAYER:" in line: @@ -729,27 +829,29 @@ class AddCoolingProfile(Script): name_index = -1 if name_index != -1: modified_data += line + "\n" + feature_speed_list[name_index] + this_fan + "\n" - #modified_data += feature_speed_list[name_index] + this_fan + "\n" current_fan_speed = str(feature_speed_list[name_index].split("S")[1]) elif ";MESH:NONMESH" in line: if feature_fan_combing == True: modified_data += line + "\n" - modified_data += "M106 S0" + this_fan + "\n" + modified_data += f"M106 S{off_fan_speed}" + this_fan + "\n" current_fan_speed = "0" else: modified_data += line + "\n" - ## If an end layer is defined - Insert the final speed and set the other variables to Final Speed to finish the file - ## There cannot be a break here because if there are multiple fan numbers they still need to be shut off and turned on. + # If an end layer is defined - Insert the final speed and set the other variables to Final Speed to finish the file + # There cannot be a 'break' here because if there are multiple fan numbers they still need to be shut off and turned on. elif line == ";LAYER:" + str(the_end_layer): modified_data += feature_speed_list[len(feature_speed_list) - 1] + this_fan + "\n" for set_speed in range(0, len(feature_speed_list) - 2): feature_speed_list[set_speed] = feature_speed_list[len(feature_speed_list) - 1] else: - ## Layer and Tool get inserted into modified_data above. All other lines go into modified_data here + # Layer and Tool get inserted into modified_data above. All other lines go into modified_data here if not line.startswith("T") and not line.startswith(";LAYER:"): modified_data += line + "\n" if modified_data.endswith("\n"): modified_data = modified_data[0: - 1] multi_fan_data[l_index] = modified_data modified_data = "" + # Insure the fans get shut off if 'off_fan_speed' was enabled + if Application.getInstance().getGlobalContainerStack().getProperty("machine_extruder_count", "value") > 1 and self.getSettingValueByKey("enable_off_fan_speed"): + multi_fan_data[-1] += "M106 S0 P1\nM106 S0 P0\n" return multi_fan_data #Try to catch layer input errors, set the minimum speed to 12%, and put the strings together @@ -768,7 +870,7 @@ class AddCoolingProfile(Script): if int(fan_string_p) > 100: fan_string_p = "100" except ValueError: fan_string_p = "0" - ## Set the minimum fan speed to 12% + # Set the minimum fan speed to 12% if int(fan_string_p) < 12 and int(fan_string_p) != 0: fan_string_p = "12" fan_layer_line = str(fan_string_l) @@ -784,7 +886,7 @@ class AddCoolingProfile(Script): #Try to catch feature input errors, set the minimum speed to 12%, and put the strings together when 'By Feature' def _feature_checker(self, fan_feat_string: int, fan_mode: bool) -> str: if fan_feat_string < 0: fan_feat_string = 0 - ## Set the minimum fan speed to 12% + # Set the minimum fan speed to 12% if fan_feat_string > 0 and fan_feat_string < 12: fan_feat_string = 12 if fan_feat_string > 100: fan_feat_string = 100 if fan_mode: @@ -798,7 +900,7 @@ class AddCoolingProfile(Script): for lay_num in range(int(lay_0_index), len(comment_data)-1,1): layer = comment_data[lay_num] lines = layer.split("\n") - ## Copy the data to new_data and make the insertions there + # Copy the data to new_data and make the insertions there new_data = lines g0_count = 0 g0_index = -1 @@ -818,12 +920,12 @@ class AddCoolingProfile(Script): if g0_index == -1: g0_index = lines.index(line) elif not line.startswith("G0 ") and not is_travel: - ## Add additional 'NONMESH' lines to shut the fan off during long combing moves-------- + # Add additional 'NONMESH' lines to shut the fan off during long combing moves-------- if g0_count > 5: if not is_travel: new_data.insert(g0_index + insert_index, ";MESH:NONMESH") insert_index += 1 - ## Add the feature_type at the end of the combing move to turn the fan back on + # Add the feature_type at the end of the combing move to turn the fan back on new_data.insert(g0_index + g0_count + 1, feature_type) insert_index += 1 g0_count = 0 @@ -834,4 +936,34 @@ class AddCoolingProfile(Script): g0_index = -1 is_travel = False comment_data[lay_num] = "\n".join(new_data) - return comment_data \ No newline at end of file + return comment_data + + def _control_bv_fan(self, bv_data: str) -> str: + # Control the chamber fan + bv_start_layer = self.getSettingValueByKey("bv_fan_start_layer") - 1 + bv_end_layer = self.getSettingValueByKey("bv_fan_end_layer") + if bv_end_layer != -1: + bv_end_layer -= 1 + # Get the PWM speed or if RepRap then the 0-1 speed + if Application.getInstance().getGlobalContainerStack().extruderList[0].getProperty("machine_scale_fan_speed_zero_to_one", "value"): + bv_fan_speed = round(self.getSettingValueByKey("bv_fan_speed") * .01, 1) + else: + bv_fan_speed = int(self.getSettingValueByKey("bv_fan_speed") * 2.55) + # Turn the chamber fan on + for index, layer in enumerate(bv_data): + if ";LAYER:" + str(bv_start_layer) + "\n" in layer: + bv_data[index] = re.sub(f";LAYER:{bv_start_layer}", f";LAYER:{bv_start_layer}\nM106 S{bv_fan_speed} P{self.bv_fan_nr}",layer) + break + # Turn the chamber fan off + if bv_end_layer == -1: + bv_data[len(bv_data)-2] += f"M106 S0 P{self.bv_fan_nr}\n" + else: + for index, layer in enumerate(bv_data): + if ";LAYER:" + str(bv_end_layer) + "\n" in layer: + lines = layer.split("\n") + for fdex, line in enumerate(lines): + if ";TIME_ELAPSED:" in line: + lines[fdex] = f"M106 S0 P{self.bv_fan_nr}\n" + line + bv_data[index] = "\n".join(lines) + break + return bv_data \ No newline at end of file From 248b5915db6d4e7de6a81e27936ba48b5906dd15 Mon Sep 17 00:00:00 2001 From: GregValiant <64202104+GregValiant@users.noreply.github.com> Date: Fri, 3 Jan 2025 07:14:45 -0500 Subject: [PATCH 09/84] Update AddCoolingProfile.py Made changes per request. --- .../scripts/AddCoolingProfile.py | 34 +++++++++++-------- 1 file changed, 19 insertions(+), 15 deletions(-) diff --git a/plugins/PostProcessingPlugin/scripts/AddCoolingProfile.py b/plugins/PostProcessingPlugin/scripts/AddCoolingProfile.py index ad00fbd923..370b0aff96 100644 --- a/plugins/PostProcessingPlugin/scripts/AddCoolingProfile.py +++ b/plugins/PostProcessingPlugin/scripts/AddCoolingProfile.py @@ -314,7 +314,7 @@ class AddCoolingProfile(Script): "bv_fan_speed": { "label": " Chamber fan speed %", - "description": "The speed of the Chamber Fan. This will be converted to PWM Duty Cycle (0-255).", + "description": "The speed of the Chamber Fan. This will be converted to PWM Duty Cycle (0-255) or (RepRap 0-1 if that is enabled in Cura).", "type": "int", "unit": "% ", "default_value": 50, @@ -355,29 +355,32 @@ class AddCoolingProfile(Script): super().initialize() curaApp = Application.getInstance().getGlobalContainerStack() extruder = curaApp.extruderList + extruder_count = curaApp.getProperty("machine_extruder_count", "value") scripts = curaApp.getMetaDataEntry("post_processing_scripts") if scripts != None: script_count = scripts.count("AddCoolingProfile") if script_count > 0: # Set 'Remove M106 lines' to "false" if there is already an instance of this script running. self._instance.setProperty("delete_existing_m106", "value", False) - if curaApp.getProperty("machine_extruder_count", "value") > 1: + if extruder_count > 1: if extruder[0].getProperty("machine_extruder_cooling_fan_number", "value") != extruder[1].getProperty("machine_extruder_cooling_fan_number", "value"): self._instance.setProperty("enable_off_fan_speed_enable", "value", True) - self.has_bv_fan = False - self.bv_fan_nr = -1 - if int(curaApp.getProperty("build_volume_fan_nr", "value")) > 0: - self.has_bv_fan = True - self.bv_fan_nr = int(curaApp.getProperty("build_volume_fan_nr", "value")) + self.has_bv_fan = bool(curaApp.getProperty("build_volume_fan_nr", "value")) + self.bv_fan_nr = int(curaApp.getProperty("build_volume_fan_nr", "value")) + if self.has_bv_fan: self._instance.setProperty("enable_bv_fan", "value", True) def execute(self, data): + # Exit if the gcode has been previously post-processed. + if ";POSTPROCESSED" in data[0]: + return data #Initialize variables that are buried in if statements. - curaApp = Application.getInstance().getGlobalContainerStack() + self.curaApp = Application.getInstance().getGlobalContainerStack() t0_fan = " P0"; t1_fan = " P0"; t2_fan = " P0"; t3_fan = " P0"; is_multi_extr_print = True #Get some information from Cura----------------------------------- - extruder = curaApp.extruderList + extruder = self.curaApp.extruderList + extruder_count = self.curaApp.getProperty("machine_extruder_count", "value") #This will be true when fan scale is 0-255pwm and false when it's RepRap 0-1 (Cura 5.x) fan_mode = True @@ -387,8 +390,7 @@ class AddCoolingProfile(Script): except: pass bed_adhesion = (extruder[0].getProperty("adhesion_type", "value")) - extruder_count = curaApp.getProperty("machine_extruder_count", "value") - print_sequence = str(curaApp.getProperty("print_sequence", "value")) + print_sequence = str(self.curaApp.getProperty("print_sequence", "value")) #Assign the fan numbers to the tools------------------------------ if extruder_count == 1: @@ -471,7 +473,7 @@ class AddCoolingProfile(Script): # For multi-extruder printers with separate fans the 'idle' nozzle fan can be left on for ooze control off_fan_speed = 0 - if Application.getInstance().getGlobalContainerStack().getProperty("machine_extruder_count", "value") > 1: + if extruder_count > 1: if self.getSettingValueByKey("enable_off_fan_speed"): if fan_mode: off_fan_speed = round(int(self.getSettingValueByKey("off_fan_speed")) * 2.55) @@ -624,10 +626,12 @@ class AddCoolingProfile(Script): layer = data[layer_num] data[layer_num] = re.sub(";MESH:NOMESH", ";MESH:NONMESH", layer) data = self._add_travel_comment(data, layer_0_index) + # If there is a build volume fan if self.has_bv_fan: if self.getSettingValueByKey("bv_fan_speed_control_enable"): data = self._control_bv_fan(data) + # Single Fan "By Layer"-------------------------------------------- if by_layer_or_feature == "by_layer" and not is_multi_fan: return self._single_fan_by_layer(data, layer_0_index, fan_list, t0_fan) @@ -723,7 +727,7 @@ class AddCoolingProfile(Script): if modified_data.endswith("\n"): modified_data = modified_data[0:-1] multi_fan_data[l_index] = modified_data # Insure the fans get shut off if 'off_fan_speed' was enabled - if Application.getInstance().getGlobalContainerStack().getProperty("machine_extruder_count", "value") > 1 and self.getSettingValueByKey("enable_off_fan_speed"): + if self.curaApp.getProperty("machine_extruder_count", "value") > 1 and self.getSettingValueByKey("enable_off_fan_speed"): multi_fan_data[-1] += "M106 S0 P1\nM106 S0 P0\n" return multi_fan_data @@ -850,7 +854,7 @@ class AddCoolingProfile(Script): multi_fan_data[l_index] = modified_data modified_data = "" # Insure the fans get shut off if 'off_fan_speed' was enabled - if Application.getInstance().getGlobalContainerStack().getProperty("machine_extruder_count", "value") > 1 and self.getSettingValueByKey("enable_off_fan_speed"): + if self.curaApp.getProperty("machine_extruder_count", "value") > 1 and self.getSettingValueByKey("enable_off_fan_speed"): multi_fan_data[-1] += "M106 S0 P1\nM106 S0 P0\n" return multi_fan_data @@ -945,7 +949,7 @@ class AddCoolingProfile(Script): if bv_end_layer != -1: bv_end_layer -= 1 # Get the PWM speed or if RepRap then the 0-1 speed - if Application.getInstance().getGlobalContainerStack().extruderList[0].getProperty("machine_scale_fan_speed_zero_to_one", "value"): + if self.curaApp.extruderList[0].getProperty("machine_scale_fan_speed_zero_to_one", "value"): bv_fan_speed = round(self.getSettingValueByKey("bv_fan_speed") * .01, 1) else: bv_fan_speed = int(self.getSettingValueByKey("bv_fan_speed") * 2.55) From fba94ae2c48f1ec887c6c4caba04759a86b81e0d Mon Sep 17 00:00:00 2001 From: GregValiant <64202104+GregValiant@users.noreply.github.com> Date: Wed, 8 Jan 2025 07:27:28 -0500 Subject: [PATCH 10/84] Update AddCoolingProfile.py Changed variable name "curaApp" to "global_stack". Update AddCoolingProfile.py Add except for 'Build Volume Fan' for previous versions. --- .../scripts/AddCoolingProfile.py | 32 +++++++++++-------- 1 file changed, 19 insertions(+), 13 deletions(-) diff --git a/plugins/PostProcessingPlugin/scripts/AddCoolingProfile.py b/plugins/PostProcessingPlugin/scripts/AddCoolingProfile.py index 370b0aff96..c6ec748f96 100644 --- a/plugins/PostProcessingPlugin/scripts/AddCoolingProfile.py +++ b/plugins/PostProcessingPlugin/scripts/AddCoolingProfile.py @@ -353,10 +353,10 @@ class AddCoolingProfile(Script): def initialize(self) -> None: super().initialize() - curaApp = Application.getInstance().getGlobalContainerStack() - extruder = curaApp.extruderList - extruder_count = curaApp.getProperty("machine_extruder_count", "value") - scripts = curaApp.getMetaDataEntry("post_processing_scripts") + global_stack = Application.getInstance().getGlobalContainerStack() + extruder = global_stack.extruderList + extruder_count = global_stack.getProperty("machine_extruder_count", "value") + scripts = global_stack.getMetaDataEntry("post_processing_scripts") if scripts != None: script_count = scripts.count("AddCoolingProfile") if script_count > 0: @@ -365,8 +365,14 @@ class AddCoolingProfile(Script): if extruder_count > 1: if extruder[0].getProperty("machine_extruder_cooling_fan_number", "value") != extruder[1].getProperty("machine_extruder_cooling_fan_number", "value"): self._instance.setProperty("enable_off_fan_speed_enable", "value", True) - self.has_bv_fan = bool(curaApp.getProperty("build_volume_fan_nr", "value")) - self.bv_fan_nr = int(curaApp.getProperty("build_volume_fan_nr", "value")) + + self.has_bv_fan = False + self.bv_fan_nr = 0 + try: + self.has_bv_fan = bool(global_stack.getProperty("build_volume_fan_nr", "value")) + self.bv_fan_nr = int(global_stack.getProperty("build_volume_fan_nr", "value")) + except: + pass if self.has_bv_fan: self._instance.setProperty("enable_bv_fan", "value", True) @@ -375,12 +381,12 @@ class AddCoolingProfile(Script): if ";POSTPROCESSED" in data[0]: return data #Initialize variables that are buried in if statements. - self.curaApp = Application.getInstance().getGlobalContainerStack() + self.global_stack = Application.getInstance().getGlobalContainerStack() t0_fan = " P0"; t1_fan = " P0"; t2_fan = " P0"; t3_fan = " P0"; is_multi_extr_print = True #Get some information from Cura----------------------------------- - extruder = self.curaApp.extruderList - extruder_count = self.curaApp.getProperty("machine_extruder_count", "value") + extruder = self.global_stack.extruderList + extruder_count = self.global_stack.getProperty("machine_extruder_count", "value") #This will be true when fan scale is 0-255pwm and false when it's RepRap 0-1 (Cura 5.x) fan_mode = True @@ -390,7 +396,7 @@ class AddCoolingProfile(Script): except: pass bed_adhesion = (extruder[0].getProperty("adhesion_type", "value")) - print_sequence = str(self.curaApp.getProperty("print_sequence", "value")) + print_sequence = str(self.global_stack.getProperty("print_sequence", "value")) #Assign the fan numbers to the tools------------------------------ if extruder_count == 1: @@ -727,7 +733,7 @@ class AddCoolingProfile(Script): if modified_data.endswith("\n"): modified_data = modified_data[0:-1] multi_fan_data[l_index] = modified_data # Insure the fans get shut off if 'off_fan_speed' was enabled - if self.curaApp.getProperty("machine_extruder_count", "value") > 1 and self.getSettingValueByKey("enable_off_fan_speed"): + if self.global_stack.getProperty("machine_extruder_count", "value") > 1 and self.getSettingValueByKey("enable_off_fan_speed"): multi_fan_data[-1] += "M106 S0 P1\nM106 S0 P0\n" return multi_fan_data @@ -854,7 +860,7 @@ class AddCoolingProfile(Script): multi_fan_data[l_index] = modified_data modified_data = "" # Insure the fans get shut off if 'off_fan_speed' was enabled - if self.curaApp.getProperty("machine_extruder_count", "value") > 1 and self.getSettingValueByKey("enable_off_fan_speed"): + if self.global_stack.getProperty("machine_extruder_count", "value") > 1 and self.getSettingValueByKey("enable_off_fan_speed"): multi_fan_data[-1] += "M106 S0 P1\nM106 S0 P0\n" return multi_fan_data @@ -949,7 +955,7 @@ class AddCoolingProfile(Script): if bv_end_layer != -1: bv_end_layer -= 1 # Get the PWM speed or if RepRap then the 0-1 speed - if self.curaApp.extruderList[0].getProperty("machine_scale_fan_speed_zero_to_one", "value"): + if self.global_stack.extruderList[0].getProperty("machine_scale_fan_speed_zero_to_one", "value"): bv_fan_speed = round(self.getSettingValueByKey("bv_fan_speed") * .01, 1) else: bv_fan_speed = int(self.getSettingValueByKey("bv_fan_speed") * 2.55) From 3186cce9155d8d1cbee130048a7b6ee2c5efca60 Mon Sep 17 00:00:00 2001 From: Boris Juraga Date: Tue, 21 Jan 2025 09:24:01 +0100 Subject: [PATCH 11/84] initial add of a definition, extruder, quality and variant resources --- resources/definitions/biqu_b2.def.json | 32 ++++++++++++++ .../extruders/biqu_b2_extruder_1.def.json | 16 +++++++ .../biqu/b2/biqu_b2_0.4_PLA_adaptive.inst.cfg | 14 ++++++ .../biqu/b2/biqu_b2_0.4_PLA_draft.inst.cfg | 14 ++++++ .../biqu/b2/biqu_b2_0.4_PLA_low.inst.cfg | 14 ++++++ .../biqu/b2/biqu_b2_0.4_PLA_standard.inst.cfg | 14 ++++++ .../biqu/b2/biqu_b2_0.4_PLA_super.inst.cfg | 14 ++++++ .../biqu/b2/biqu_b2_0.4_PLA_ultra.inst.cfg | 14 ++++++ .../biqu/b2/biqu_b2_global_adaptive.inst.cfg | 43 ++++++++++++++++++ .../biqu/b2/biqu_b2_global_draft.inst.cfg | 42 ++++++++++++++++++ .../biqu/b2/biqu_b2_global_low.inst.cfg | 42 ++++++++++++++++++ .../biqu/b2/biqu_b2_global_standard.inst.cfg | 44 +++++++++++++++++++ .../biqu/b2/biqu_b2_global_super.inst.cfg | 42 ++++++++++++++++++ .../biqu/b2/biqu_b2_global_ultra.inst.cfg | 42 ++++++++++++++++++ resources/variants/biqu/biqu_b2_0.2.inst.cfg | 13 ++++++ resources/variants/biqu/biqu_b2_0.3.inst.cfg | 13 ++++++ resources/variants/biqu/biqu_b2_0.4.inst.cfg | 13 ++++++ resources/variants/biqu/biqu_b2_0.5.inst.cfg | 13 ++++++ resources/variants/biqu/biqu_b2_0.6.inst.cfg | 13 ++++++ resources/variants/biqu/biqu_b2_0.8.inst.cfg | 13 ++++++ 20 files changed, 465 insertions(+) create mode 100644 resources/definitions/biqu_b2.def.json create mode 100644 resources/extruders/biqu_b2_extruder_1.def.json create mode 100644 resources/quality/biqu/b2/biqu_b2_0.4_PLA_adaptive.inst.cfg create mode 100644 resources/quality/biqu/b2/biqu_b2_0.4_PLA_draft.inst.cfg create mode 100644 resources/quality/biqu/b2/biqu_b2_0.4_PLA_low.inst.cfg create mode 100644 resources/quality/biqu/b2/biqu_b2_0.4_PLA_standard.inst.cfg create mode 100644 resources/quality/biqu/b2/biqu_b2_0.4_PLA_super.inst.cfg create mode 100644 resources/quality/biqu/b2/biqu_b2_0.4_PLA_ultra.inst.cfg create mode 100644 resources/quality/biqu/b2/biqu_b2_global_adaptive.inst.cfg create mode 100644 resources/quality/biqu/b2/biqu_b2_global_draft.inst.cfg create mode 100644 resources/quality/biqu/b2/biqu_b2_global_low.inst.cfg create mode 100644 resources/quality/biqu/b2/biqu_b2_global_standard.inst.cfg create mode 100644 resources/quality/biqu/b2/biqu_b2_global_super.inst.cfg create mode 100644 resources/quality/biqu/b2/biqu_b2_global_ultra.inst.cfg create mode 100644 resources/variants/biqu/biqu_b2_0.2.inst.cfg create mode 100644 resources/variants/biqu/biqu_b2_0.3.inst.cfg create mode 100644 resources/variants/biqu/biqu_b2_0.4.inst.cfg create mode 100644 resources/variants/biqu/biqu_b2_0.5.inst.cfg create mode 100644 resources/variants/biqu/biqu_b2_0.6.inst.cfg create mode 100644 resources/variants/biqu/biqu_b2_0.8.inst.cfg diff --git a/resources/definitions/biqu_b2.def.json b/resources/definitions/biqu_b2.def.json new file mode 100644 index 0000000000..d5ed45ee85 --- /dev/null +++ b/resources/definitions/biqu_b2.def.json @@ -0,0 +1,32 @@ +{ + "version": 2, + "name": "Biqu B2", + "inherits": "biqu_b1", + "metadata": + { + "visible": true, + "author": "Boris Juraga", + "machine_extruder_trains": { + "0": "biqu_base_extruder_0", + "1": "biqu_b2_extruder_1" + }, + "quality_definition": "biqu_b2" + }, + "overrides": + { + "gantry_height": { "value": 27.5 }, + "machine_extruder_count": { "default_value": 2 }, + "machine_head_with_fans_polygon": + { + "default_value": [ + [-33, 35], + [-33, -23], + [33, -23], + [33, 35] + ] + }, + "machine_end_gcode": { "default_value": "M104 S0\nM140 S0\n;Retract the filament\nG91\nG1 E-30 F300\nG1 Z5\nG90\nG28 X0 Y0" }, + "machine_name": { "default_value": "BIQU B2" }, + "machine_start_gcode": { "default_value": "\nG28 ;Home\nG1 Z15.0 F6000 ;Move the platform down 15mm\n;Prime the extruder\n\nM109 S{material_print_temperature_layer_0} ; Wait for Extruder temperature\nT0\nG92 E0\nG1 F1200 E-30\nG92 E0\n\nM109 S{material_print_temperature_layer_0} ; Wait for Extruder temperature\nT1\nG92 E0\nG1 Z2.0 F3000 ; Move Z Axis up little to prevent scratching of Heat Bed\nG1 X6.1 Y20 Z0.3 F5000.0 ; Move to start position\nM117 Purging\nG1 X6.1 Y200.0 Z0.3 F1500.0 E10 ; Draw the first line\nG1 X6.4 Y200.0 Z0.3 F5000.0 ; Move to side a little\nG1 X6.4 Y20 Z0.3 F1500.0 E20 ; Draw the second line\nG1 X6.7 Y20 Z0.3 F5000.0 ; Move to side a little\nG1 X6.7 Y200.0 Z0.3 F1500.0 E30 ; Draw the three line\nG1 X7.0 Y200.0 Z0.3 F5000.0 ; Move to side a little\nG1 X7.0 Y20 Z0.3 F1500.0 E40 ; Draw the four line\nG1 X7.3 Y20 Z0.3 F5000.0 ; Move to side a little\nG1 X7.3 Y200.0 Z0.3 F1500.0 E50 ; Draw the four line\nG92 E0 \n\nT1\nG92 E0\nG1 F1200 E-30\nG92 E0\n\nT0\nG92 E0\nG1 F1200 E30\nG92 E0\nG1 Z2.0 F3000 ; Move Z Axis up little to prevent scratching of Heat Bed\nG1 X9.1 Y20 Z0.3 F5000.0 ; Move to start position\nM117 Purging\nG1 X9.1 Y200.0 Z0.3 F1500.0 E10 ; Draw the first line\nG1 X9.4 Y200.0 Z0.3 F5000.0 ; Move to side a little\nG1 X9.4 Y20 Z0.3 F1500.0 E20 ; Draw the second line\nG1 X9.7 Y20 Z0.3 F5000.0 ; Move to side a little\nG1 X9.7 Y200.0 Z0.3 F1500.0 E30 ; Draw the three line\nG1 X10.0 Y200.0 Z0.3 F5000.0 ; Move to side a little\nG1 X10.0 Y20 Z0.3 F1500.0 E40 ; Draw the four line\nG1 X10.3 Y20 Z0.3 F5000.0 ; Move to side a little\nG1 X10.3 Y200.0 Z0.3 F1500.0 E50 ; Draw the four line\nG92 E0 ; start print" } + } +} \ No newline at end of file diff --git a/resources/extruders/biqu_b2_extruder_1.def.json b/resources/extruders/biqu_b2_extruder_1.def.json new file mode 100644 index 0000000000..fc5778b071 --- /dev/null +++ b/resources/extruders/biqu_b2_extruder_1.def.json @@ -0,0 +1,16 @@ +{ + "version": 2, + "name": "Extruder 2", + "inherits": "fdmextruder", + "metadata": + { + "machine": "biqu_b2", + "position": "1" + }, + "overrides": + { + "extruder_nr": { "default_value": 1 }, + "machine_nozzle_size": { "default_value": 0.4 }, + "material_diameter": { "default_value": 1.75 } + } +} \ No newline at end of file diff --git a/resources/quality/biqu/b2/biqu_b2_0.4_PLA_adaptive.inst.cfg b/resources/quality/biqu/b2/biqu_b2_0.4_PLA_adaptive.inst.cfg new file mode 100644 index 0000000000..ef478ac259 --- /dev/null +++ b/resources/quality/biqu/b2/biqu_b2_0.4_PLA_adaptive.inst.cfg @@ -0,0 +1,14 @@ +[general] +definition = biqu_b2 +name = Dynamic Quality +version = 4 + +[metadata] +material = generic_pla_175 +quality_type = adaptive +setting_version = 24 +type = quality +variant = 0.4mm Nozzle + +[values] + diff --git a/resources/quality/biqu/b2/biqu_b2_0.4_PLA_draft.inst.cfg b/resources/quality/biqu/b2/biqu_b2_0.4_PLA_draft.inst.cfg new file mode 100644 index 0000000000..526aa6bdf2 --- /dev/null +++ b/resources/quality/biqu/b2/biqu_b2_0.4_PLA_draft.inst.cfg @@ -0,0 +1,14 @@ +[general] +definition = biqu_b2 +name = Draft Quality +version = 4 + +[metadata] +material = generic_pla_175 +quality_type = draft +setting_version = 24 +type = quality +variant = 0.4mm Nozzle + +[values] + diff --git a/resources/quality/biqu/b2/biqu_b2_0.4_PLA_low.inst.cfg b/resources/quality/biqu/b2/biqu_b2_0.4_PLA_low.inst.cfg new file mode 100644 index 0000000000..8ee3e16ff4 --- /dev/null +++ b/resources/quality/biqu/b2/biqu_b2_0.4_PLA_low.inst.cfg @@ -0,0 +1,14 @@ +[general] +definition = biqu_b2 +name = Low Quality +version = 4 + +[metadata] +material = generic_pla_175 +quality_type = low +setting_version = 24 +type = quality +variant = 0.4mm Nozzle + +[values] + diff --git a/resources/quality/biqu/b2/biqu_b2_0.4_PLA_standard.inst.cfg b/resources/quality/biqu/b2/biqu_b2_0.4_PLA_standard.inst.cfg new file mode 100644 index 0000000000..fd6ea4287d --- /dev/null +++ b/resources/quality/biqu/b2/biqu_b2_0.4_PLA_standard.inst.cfg @@ -0,0 +1,14 @@ +[general] +definition = biqu_b2 +name = Standard Quality +version = 4 + +[metadata] +material = generic_pla_175 +quality_type = standard +setting_version = 24 +type = quality +variant = 0.4mm Nozzle + +[values] + diff --git a/resources/quality/biqu/b2/biqu_b2_0.4_PLA_super.inst.cfg b/resources/quality/biqu/b2/biqu_b2_0.4_PLA_super.inst.cfg new file mode 100644 index 0000000000..4d2899b599 --- /dev/null +++ b/resources/quality/biqu/b2/biqu_b2_0.4_PLA_super.inst.cfg @@ -0,0 +1,14 @@ +[general] +definition = biqu_b2 +name = Super Quality +version = 4 + +[metadata] +material = generic_pla_175 +quality_type = super +setting_version = 24 +type = quality +variant = 0.4mm Nozzle + +[values] + diff --git a/resources/quality/biqu/b2/biqu_b2_0.4_PLA_ultra.inst.cfg b/resources/quality/biqu/b2/biqu_b2_0.4_PLA_ultra.inst.cfg new file mode 100644 index 0000000000..247fdcf1a8 --- /dev/null +++ b/resources/quality/biqu/b2/biqu_b2_0.4_PLA_ultra.inst.cfg @@ -0,0 +1,14 @@ +[general] +definition = biqu_b2 +name = Ultra Quality +version = 4 + +[metadata] +material = generic_pla_175 +quality_type = ultra +setting_version = 24 +type = quality +variant = 0.4mm Nozzle + +[values] + diff --git a/resources/quality/biqu/b2/biqu_b2_global_adaptive.inst.cfg b/resources/quality/biqu/b2/biqu_b2_global_adaptive.inst.cfg new file mode 100644 index 0000000000..81178fdeed --- /dev/null +++ b/resources/quality/biqu/b2/biqu_b2_global_adaptive.inst.cfg @@ -0,0 +1,43 @@ +[general] +definition = biqu_b2 +name = Dynamic Quality +version = 4 + +[metadata] +global_quality = True +quality_type = adaptive +setting_version = 24 +type = quality +weight = -2 + +[values] +adaptive_layer_height_enabled = true +layer_height = 0.16 +layer_height_0 = 0.20 +support_interface_height = =layer_height*6 +top_bottom_thickness = =layer_height_0+layer_height*4 +wall_thickness = =line_width*3 +cool_fan_full_at_height = 0.6 +cool_fan_speed = 50 +material_final_print_temperature = 190 +material_initial_print_temperature = 190 +material_print_temperature = 190 +material_standby_temperature = 190 +optimize_wall_printing_order = True +prime_tower_min_volume = 135 +retraction_amount = 4 +retraction_extra_prime_amount = 2 +retraction_extrusion_window = 8 +retraction_hop = 3 +retraction_hop_enabled = True +retraction_hop_only_when_collides = True +retraction_min_travel = 10 +retraction_prime_speed = 5 +retraction_speed = 30 +speed_layer_0 = 20 +speed_travel = 60 +speed_wall = 30 +speed_wall_x = 20 +switch_extruder_prime_speed = 10 +switch_extruder_retraction_amount = 40 +switch_extruder_retraction_speeds = 30 diff --git a/resources/quality/biqu/b2/biqu_b2_global_draft.inst.cfg b/resources/quality/biqu/b2/biqu_b2_global_draft.inst.cfg new file mode 100644 index 0000000000..36d50ada37 --- /dev/null +++ b/resources/quality/biqu/b2/biqu_b2_global_draft.inst.cfg @@ -0,0 +1,42 @@ +[general] +definition = biqu_b2 +name = Draft Quality +version = 4 + +[metadata] +global_quality = True +quality_type = draft +setting_version = 24 +type = quality +weight = -5 + +[values] +layer_height = 0.32 +layer_height_0 = 0.32 +support_interface_height = =layer_height*4 +top_bottom_thickness = =layer_height_0+layer_height*3 +wall_thickness = =line_width*2 +cool_fan_full_at_height = 0.6 +cool_fan_speed = 50 +material_final_print_temperature = 190 +material_initial_print_temperature = 190 +material_print_temperature = 190 +material_standby_temperature = 190 +optimize_wall_printing_order = True +prime_tower_min_volume = 135 +retraction_amount = 4 +retraction_extra_prime_amount = 2 +retraction_extrusion_window = 8 +retraction_hop = 3 +retraction_hop_enabled = True +retraction_hop_only_when_collides = True +retraction_min_travel = 10 +retraction_prime_speed = 5 +retraction_speed = 30 +speed_layer_0 = 20 +speed_travel = 60 +speed_wall = 30 +speed_wall_x = 20 +switch_extruder_prime_speed = 10 +switch_extruder_retraction_amount = 40 +switch_extruder_retraction_speeds = 30 diff --git a/resources/quality/biqu/b2/biqu_b2_global_low.inst.cfg b/resources/quality/biqu/b2/biqu_b2_global_low.inst.cfg new file mode 100644 index 0000000000..2fb4804640 --- /dev/null +++ b/resources/quality/biqu/b2/biqu_b2_global_low.inst.cfg @@ -0,0 +1,42 @@ +[general] +definition = biqu_b2 +name = Low Quality +version = 4 + +[metadata] +global_quality = True +quality_type = low +setting_version = 24 +type = quality +weight = -4 + +[values] +layer_height = 0.28 +layer_height_0 = 0.28 +support_interface_height = =layer_height*4 +top_bottom_thickness = =layer_height_0+layer_height*3 +wall_thickness = =line_width*3 +cool_fan_full_at_height = 0.6 +cool_fan_speed = 50 +material_final_print_temperature = 190 +material_initial_print_temperature = 190 +material_print_temperature = 190 +material_standby_temperature = 190 +optimize_wall_printing_order = True +prime_tower_min_volume = 135 +retraction_amount = 4 +retraction_extra_prime_amount = 2 +retraction_extrusion_window = 8 +retraction_hop = 3 +retraction_hop_enabled = True +retraction_hop_only_when_collides = True +retraction_min_travel = 10 +retraction_prime_speed = 5 +retraction_speed = 30 +speed_layer_0 = 20 +speed_travel = 60 +speed_wall = 30 +speed_wall_x = 20 +switch_extruder_prime_speed = 10 +switch_extruder_retraction_amount = 40 +switch_extruder_retraction_speeds = 30 diff --git a/resources/quality/biqu/b2/biqu_b2_global_standard.inst.cfg b/resources/quality/biqu/b2/biqu_b2_global_standard.inst.cfg new file mode 100644 index 0000000000..4d2b5660b6 --- /dev/null +++ b/resources/quality/biqu/b2/biqu_b2_global_standard.inst.cfg @@ -0,0 +1,44 @@ +[general] +definition = biqu_b2 +name = Standard Quality +version = 4 + +[metadata] +global_quality = True +quality_type = standard +setting_version = 24 +type = quality +weight = -3 +position = 0 + +[values] +layer_height = 0.2 +layer_height_0 = 0.2 +support_interface_height = =layer_height*4 +top_bottom_thickness = =layer_height_0+layer_height*3 +wall_thickness = =line_width*3 +brim_width = 4 +cool_fan_full_at_height = 0.6 +cool_fan_speed = 50 +material_final_print_temperature = 190 +material_initial_print_temperature = 190 +material_print_temperature = 190 +material_standby_temperature = 190 +optimize_wall_printing_order = True +prime_tower_min_volume = 135 +retraction_amount = 4 +retraction_extra_prime_amount = 2 +retraction_extrusion_window = 8 +retraction_hop = 3 +retraction_hop_enabled = True +retraction_hop_only_when_collides = True +retraction_min_travel = 10 +retraction_prime_speed = 5 +retraction_speed = 30 +speed_layer_0 = 20 +speed_travel = 60 +speed_wall = 30 +speed_wall_x = 20 +switch_extruder_prime_speed = 10 +switch_extruder_retraction_amount = 40 +switch_extruder_retraction_speeds = 30 \ No newline at end of file diff --git a/resources/quality/biqu/b2/biqu_b2_global_super.inst.cfg b/resources/quality/biqu/b2/biqu_b2_global_super.inst.cfg new file mode 100644 index 0000000000..fc9860a695 --- /dev/null +++ b/resources/quality/biqu/b2/biqu_b2_global_super.inst.cfg @@ -0,0 +1,42 @@ +[general] +definition = biqu_b2 +name = Super Quality +version = 4 + +[metadata] +global_quality = True +quality_type = super +setting_version = 24 +type = quality +weight = -1 + +[values] +layer_height = 0.12 +layer_height_0 = 0.12 +support_interface_height = =layer_height*8 +top_bottom_thickness = =layer_height_0+layer_height*6 +wall_thickness = =line_width*3 +cool_fan_full_at_height = 0.6 +cool_fan_speed = 50 +material_final_print_temperature = 190 +material_initial_print_temperature = 190 +material_print_temperature = 190 +material_standby_temperature = 190 +optimize_wall_printing_order = True +prime_tower_min_volume = 135 +retraction_amount = 4 +retraction_extra_prime_amount = 2 +retraction_extrusion_window = 8 +retraction_hop = 3 +retraction_hop_enabled = True +retraction_hop_only_when_collides = True +retraction_min_travel = 10 +retraction_prime_speed = 5 +retraction_speed = 30 +speed_layer_0 = 20 +speed_travel = 60 +speed_wall = 30 +speed_wall_x = 20 +switch_extruder_prime_speed = 10 +switch_extruder_retraction_amount = 40 +switch_extruder_retraction_speeds = 30 \ No newline at end of file diff --git a/resources/quality/biqu/b2/biqu_b2_global_ultra.inst.cfg b/resources/quality/biqu/b2/biqu_b2_global_ultra.inst.cfg new file mode 100644 index 0000000000..55fad68102 --- /dev/null +++ b/resources/quality/biqu/b2/biqu_b2_global_ultra.inst.cfg @@ -0,0 +1,42 @@ +[general] +definition = biqu_b2 +name = Ultra Quality +version = 4 + +[metadata] +global_quality = True +quality_type = ultra +setting_version = 24 +type = quality +weight = 0 + +[values] +layer_height = 0.08 +layer_height_0 = 0.12 +support_interface_height = =layer_height*12 +top_bottom_thickness = =layer_height_0+layer_height*10 +wall_thickness = =line_width*4 +cool_fan_full_at_height = 0.6 +cool_fan_speed = 50 +material_final_print_temperature = 190 +material_initial_print_temperature = 190 +material_print_temperature = 190 +material_standby_temperature = 190 +optimize_wall_printing_order = True +prime_tower_min_volume = 135 +retraction_amount = 4 +retraction_extra_prime_amount = 2 +retraction_extrusion_window = 8 +retraction_hop = 3 +retraction_hop_enabled = True +retraction_hop_only_when_collides = True +retraction_min_travel = 10 +retraction_prime_speed = 5 +retraction_speed = 30 +speed_layer_0 = 20 +speed_travel = 60 +speed_wall = 30 +speed_wall_x = 20 +switch_extruder_prime_speed = 10 +switch_extruder_retraction_amount = 40 +switch_extruder_retraction_speeds = 30 \ No newline at end of file diff --git a/resources/variants/biqu/biqu_b2_0.2.inst.cfg b/resources/variants/biqu/biqu_b2_0.2.inst.cfg new file mode 100644 index 0000000000..8f7d063b93 --- /dev/null +++ b/resources/variants/biqu/biqu_b2_0.2.inst.cfg @@ -0,0 +1,13 @@ +[general] +definition = biqu_b2 +name = 0.2mm Nozzle +version = 4 + +[metadata] +hardware_type = nozzle +setting_version = 24 +type = variant + +[values] +machine_nozzle_size = 0.2 + diff --git a/resources/variants/biqu/biqu_b2_0.3.inst.cfg b/resources/variants/biqu/biqu_b2_0.3.inst.cfg new file mode 100644 index 0000000000..e6381dfe80 --- /dev/null +++ b/resources/variants/biqu/biqu_b2_0.3.inst.cfg @@ -0,0 +1,13 @@ +[general] +definition = biqu_b2 +name = 0.3mm Nozzle +version = 4 + +[metadata] +hardware_type = nozzle +setting_version = 24 +type = variant + +[values] +machine_nozzle_size = 0.3 + diff --git a/resources/variants/biqu/biqu_b2_0.4.inst.cfg b/resources/variants/biqu/biqu_b2_0.4.inst.cfg new file mode 100644 index 0000000000..99958af88d --- /dev/null +++ b/resources/variants/biqu/biqu_b2_0.4.inst.cfg @@ -0,0 +1,13 @@ +[general] +definition = biqu_b2 +name = 0.4mm Nozzle +version = 4 + +[metadata] +hardware_type = nozzle +setting_version = 24 +type = variant + +[values] +machine_nozzle_size = 0.4 + diff --git a/resources/variants/biqu/biqu_b2_0.5.inst.cfg b/resources/variants/biqu/biqu_b2_0.5.inst.cfg new file mode 100644 index 0000000000..194e5a79c4 --- /dev/null +++ b/resources/variants/biqu/biqu_b2_0.5.inst.cfg @@ -0,0 +1,13 @@ +[general] +definition = biqu_b2 +name = 0.5mm Nozzle +version = 4 + +[metadata] +hardware_type = nozzle +setting_version = 24 +type = variant + +[values] +machine_nozzle_size = 0.5 + diff --git a/resources/variants/biqu/biqu_b2_0.6.inst.cfg b/resources/variants/biqu/biqu_b2_0.6.inst.cfg new file mode 100644 index 0000000000..828843f658 --- /dev/null +++ b/resources/variants/biqu/biqu_b2_0.6.inst.cfg @@ -0,0 +1,13 @@ +[general] +definition = biqu_b2 +name = 0.6mm Nozzle +version = 4 + +[metadata] +hardware_type = nozzle +setting_version = 24 +type = variant + +[values] +machine_nozzle_size = 0.6 + diff --git a/resources/variants/biqu/biqu_b2_0.8.inst.cfg b/resources/variants/biqu/biqu_b2_0.8.inst.cfg new file mode 100644 index 0000000000..8bc16cfade --- /dev/null +++ b/resources/variants/biqu/biqu_b2_0.8.inst.cfg @@ -0,0 +1,13 @@ +[general] +definition = biqu_b2 +name = 0.8mm Nozzle +version = 4 + +[metadata] +hardware_type = nozzle +setting_version = 24 +type = variant + +[values] +machine_nozzle_size = 0.8 + From b56f7db5a05b3dfbeed61939f5a538d20d6ef757 Mon Sep 17 00:00:00 2001 From: Boris Juraga Date: Tue, 21 Jan 2025 14:19:42 +0100 Subject: [PATCH 12/84] learned about shared nozzles and shared heaters --- resources/definitions/biqu_b2.def.json | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/resources/definitions/biqu_b2.def.json b/resources/definitions/biqu_b2.def.json index d5ed45ee85..6768751716 100644 --- a/resources/definitions/biqu_b2.def.json +++ b/resources/definitions/biqu_b2.def.json @@ -27,6 +27,9 @@ }, "machine_end_gcode": { "default_value": "M104 S0\nM140 S0\n;Retract the filament\nG91\nG1 E-30 F300\nG1 Z5\nG90\nG28 X0 Y0" }, "machine_name": { "default_value": "BIQU B2" }, - "machine_start_gcode": { "default_value": "\nG28 ;Home\nG1 Z15.0 F6000 ;Move the platform down 15mm\n;Prime the extruder\n\nM109 S{material_print_temperature_layer_0} ; Wait for Extruder temperature\nT0\nG92 E0\nG1 F1200 E-30\nG92 E0\n\nM109 S{material_print_temperature_layer_0} ; Wait for Extruder temperature\nT1\nG92 E0\nG1 Z2.0 F3000 ; Move Z Axis up little to prevent scratching of Heat Bed\nG1 X6.1 Y20 Z0.3 F5000.0 ; Move to start position\nM117 Purging\nG1 X6.1 Y200.0 Z0.3 F1500.0 E10 ; Draw the first line\nG1 X6.4 Y200.0 Z0.3 F5000.0 ; Move to side a little\nG1 X6.4 Y20 Z0.3 F1500.0 E20 ; Draw the second line\nG1 X6.7 Y20 Z0.3 F5000.0 ; Move to side a little\nG1 X6.7 Y200.0 Z0.3 F1500.0 E30 ; Draw the three line\nG1 X7.0 Y200.0 Z0.3 F5000.0 ; Move to side a little\nG1 X7.0 Y20 Z0.3 F1500.0 E40 ; Draw the four line\nG1 X7.3 Y20 Z0.3 F5000.0 ; Move to side a little\nG1 X7.3 Y200.0 Z0.3 F1500.0 E50 ; Draw the four line\nG92 E0 \n\nT1\nG92 E0\nG1 F1200 E-30\nG92 E0\n\nT0\nG92 E0\nG1 F1200 E30\nG92 E0\nG1 Z2.0 F3000 ; Move Z Axis up little to prevent scratching of Heat Bed\nG1 X9.1 Y20 Z0.3 F5000.0 ; Move to start position\nM117 Purging\nG1 X9.1 Y200.0 Z0.3 F1500.0 E10 ; Draw the first line\nG1 X9.4 Y200.0 Z0.3 F5000.0 ; Move to side a little\nG1 X9.4 Y20 Z0.3 F1500.0 E20 ; Draw the second line\nG1 X9.7 Y20 Z0.3 F5000.0 ; Move to side a little\nG1 X9.7 Y200.0 Z0.3 F1500.0 E30 ; Draw the three line\nG1 X10.0 Y200.0 Z0.3 F5000.0 ; Move to side a little\nG1 X10.0 Y20 Z0.3 F1500.0 E40 ; Draw the four line\nG1 X10.3 Y20 Z0.3 F5000.0 ; Move to side a little\nG1 X10.3 Y200.0 Z0.3 F1500.0 E50 ; Draw the four line\nG92 E0 ; start print" } + "machine_start_gcode": { "default_value": "G28 ;Home\nG1 Z15.0 F6000 ;Move the platform down 15mm\n;Prime the extruder\nM109 S{material_print_temperature_layer_0} ; Wait for Extruder temperature\nT0\nG92 E0\nG1 F1200 E-30\nG92 E0\nM109 S{material_print_temperature_layer_0} ; Wait for Extruder temperature\nT1\nG92 E0\nG1 Z2.0 F3000 ; Move Z Axis up little to prevent scratching of Heat Bed\nG1 X6.1 Y20 Z0.3 F5000.0 ; Move to start position\nM117 Purging\nG1 X6.1 Y200.0 Z0.3 F1500.0 E10 ; Draw the first line\nG1 X6.4 Y200.0 Z0.3 F5000.0 ; Move to side a little\nG1 X6.4 Y20 Z0.3 F1500.0 E20 ; Draw the second line\nG1 X6.7 Y20 Z0.3 F5000.0 ; Move to side a little\nG1 X6.7 Y200.0 Z0.3 F1500.0 E30 ; Draw the three line\nG1 X7.0 Y200.0 Z0.3 F5000.0 ; Move to side a little\nG1 X7.0 Y20 Z0.3 F1500.0 E40 ; Draw the four line\nG1 X7.3 Y20 Z0.3 F5000.0 ; Move to side a little\nG1 X7.3 Y200.0 Z0.3 F1500.0 E50 ; Draw the four line\nG92 E0 \nT1\nG92 E0\nG1 F1200 E-30\nG92 E0\nT0\nG92 E0\nG1 F1200 E30\nG92 E0\nG1 Z2.0 F3000 ; Move Z Axis up little to prevent scratching of Heat Bed\nG1 X9.1 Y20 Z0.3 F5000.0 ; Move to start position\nM117 Purging\nG1 X9.1 Y200.0 Z0.3 F1500.0 E10 ; Draw the first line\nG1 X9.4 Y200.0 Z0.3 F5000.0 ; Move to side a little\nG1 X9.4 Y20 Z0.3 F1500.0 E20 ; Draw the second line\nG1 X9.7 Y20 Z0.3 F5000.0 ; Move to side a little\nG1 X9.7 Y200.0 Z0.3 F1500.0 E30 ; Draw the three line\nG1 X10.0 Y200.0 Z0.3 F5000.0 ; Move to side a little\nG1 X10.0 Y20 Z0.3 F1500.0 E40 ; Draw the four line\nG1 X10.3 Y20 Z0.3 F5000.0 ; Move to side a little\nG1 X10.3 Y200.0 Z0.3 F1500.0 E50 ; Draw the four line\nT0\nG92 E0\nG1 F1200 E-30\nG92 E0\nG92 E0 ; start print" }, + "machine_extruders_share_heater": { "default_value": true }, + "machine_extruders_share_nozzle": { "default_value": true }, + "machine_extruders_shared_nozzle_initial_retraction": { "default_value": 30 } } } \ No newline at end of file From a0d2d6fb620eecc2d56b05666f40b7b1f9ce6fec Mon Sep 17 00:00:00 2001 From: Erwan MATHIEU Date: Tue, 28 Jan 2025 09:02:10 +0100 Subject: [PATCH 13/84] Add setting for retract/unretract during travel move CURA-11978 --- resources/definitions/fdmprinter.def.json | 26 +++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/resources/definitions/fdmprinter.def.json b/resources/definitions/fdmprinter.def.json index c1392e57ba..2425df01b1 100644 --- a/resources/definitions/fdmprinter.def.json +++ b/resources/definitions/fdmprinter.def.json @@ -4278,6 +4278,32 @@ "settable_per_mesh": false, "settable_per_extruder": true }, + "retraction_during_travel_ratio": + { + "label": "Retraction During Travel Move", + "description": "The ratio of retraction performed during the travel move, with the remainder completed while the nozzle is stationary, before traveling
  • When 0, the entire retraction is performed while stationary, before the travel begins
  • When 100, the entire retraction is performed during the travel move, bypassing the stationary phase
", + "unit": "%", + "type": "float", + "default_value": 0, + "minimum_value": 0, + "maximum_value": 100, + "enabled": "retraction_enable and machine_gcode_flavor != \"UltiGCode\"", + "settable_per_mesh": false, + "settable_per_extruder": true + }, + "prime_during_travel_ratio": + { + "label": "Prime During Travel Move", + "description": "The ratio of priming performed during the travel move, with the remainder completed while the nozzle is stationary, after traveling
  • When 0, the entire priming is performed while stationary, after the travel ends
  • When 100, the entire priming is performed during the travel move, allowing the print to start immediately
", + "unit": "%", + "type": "float", + "default_value": 0, + "minimum_value": 0, + "maximum_value": 100, + "enabled": "retraction_enable and machine_gcode_flavor != \"UltiGCode\"", + "settable_per_mesh": false, + "settable_per_extruder": true + }, "retraction_speed": { "label": "Retraction Speed", From 369600c29acb088ab1b763878b35c8a128c27773 Mon Sep 17 00:00:00 2001 From: Boris Juraga Date: Thu, 30 Jan 2025 14:41:51 +0100 Subject: [PATCH 14/84] profile looks good --- resources/definitions/biqu_b2.def.json | 4 ++- .../biqu/b2/biqu_b2_global_adaptive.inst.cfg | 25 ++++--------------- .../biqu/b2/biqu_b2_global_draft.inst.cfg | 25 ++++--------------- .../biqu/b2/biqu_b2_global_low.inst.cfg | 25 ++++--------------- .../biqu/b2/biqu_b2_global_standard.inst.cfg | 24 +++--------------- .../biqu/b2/biqu_b2_global_super.inst.cfg | 23 +++-------------- .../biqu/b2/biqu_b2_global_ultra.inst.cfg | 23 +++-------------- 7 files changed, 30 insertions(+), 119 deletions(-) diff --git a/resources/definitions/biqu_b2.def.json b/resources/definitions/biqu_b2.def.json index 6768751716..c174db33db 100644 --- a/resources/definitions/biqu_b2.def.json +++ b/resources/definitions/biqu_b2.def.json @@ -30,6 +30,8 @@ "machine_start_gcode": { "default_value": "G28 ;Home\nG1 Z15.0 F6000 ;Move the platform down 15mm\n;Prime the extruder\nM109 S{material_print_temperature_layer_0} ; Wait for Extruder temperature\nT0\nG92 E0\nG1 F1200 E-30\nG92 E0\nM109 S{material_print_temperature_layer_0} ; Wait for Extruder temperature\nT1\nG92 E0\nG1 Z2.0 F3000 ; Move Z Axis up little to prevent scratching of Heat Bed\nG1 X6.1 Y20 Z0.3 F5000.0 ; Move to start position\nM117 Purging\nG1 X6.1 Y200.0 Z0.3 F1500.0 E10 ; Draw the first line\nG1 X6.4 Y200.0 Z0.3 F5000.0 ; Move to side a little\nG1 X6.4 Y20 Z0.3 F1500.0 E20 ; Draw the second line\nG1 X6.7 Y20 Z0.3 F5000.0 ; Move to side a little\nG1 X6.7 Y200.0 Z0.3 F1500.0 E30 ; Draw the three line\nG1 X7.0 Y200.0 Z0.3 F5000.0 ; Move to side a little\nG1 X7.0 Y20 Z0.3 F1500.0 E40 ; Draw the four line\nG1 X7.3 Y20 Z0.3 F5000.0 ; Move to side a little\nG1 X7.3 Y200.0 Z0.3 F1500.0 E50 ; Draw the four line\nG92 E0 \nT1\nG92 E0\nG1 F1200 E-30\nG92 E0\nT0\nG92 E0\nG1 F1200 E30\nG92 E0\nG1 Z2.0 F3000 ; Move Z Axis up little to prevent scratching of Heat Bed\nG1 X9.1 Y20 Z0.3 F5000.0 ; Move to start position\nM117 Purging\nG1 X9.1 Y200.0 Z0.3 F1500.0 E10 ; Draw the first line\nG1 X9.4 Y200.0 Z0.3 F5000.0 ; Move to side a little\nG1 X9.4 Y20 Z0.3 F1500.0 E20 ; Draw the second line\nG1 X9.7 Y20 Z0.3 F5000.0 ; Move to side a little\nG1 X9.7 Y200.0 Z0.3 F1500.0 E30 ; Draw the three line\nG1 X10.0 Y200.0 Z0.3 F5000.0 ; Move to side a little\nG1 X10.0 Y20 Z0.3 F1500.0 E40 ; Draw the four line\nG1 X10.3 Y20 Z0.3 F5000.0 ; Move to side a little\nG1 X10.3 Y200.0 Z0.3 F1500.0 E50 ; Draw the four line\nT0\nG92 E0\nG1 F1200 E-30\nG92 E0\nG92 E0 ; start print" }, "machine_extruders_share_heater": { "default_value": true }, "machine_extruders_share_nozzle": { "default_value": true }, - "machine_extruders_shared_nozzle_initial_retraction": { "default_value": 30 } + "machine_extruders_shared_nozzle_initial_retraction": { "default_value": 30 }, + "prime_tower_enable": { "default_value": true }, + "prime_tower_mode": { "default_value": "interleaved" } } } \ No newline at end of file diff --git a/resources/quality/biqu/b2/biqu_b2_global_adaptive.inst.cfg b/resources/quality/biqu/b2/biqu_b2_global_adaptive.inst.cfg index 81178fdeed..cd755a1cff 100644 --- a/resources/quality/biqu/b2/biqu_b2_global_adaptive.inst.cfg +++ b/resources/quality/biqu/b2/biqu_b2_global_adaptive.inst.cfg @@ -17,27 +17,12 @@ layer_height_0 = 0.20 support_interface_height = =layer_height*6 top_bottom_thickness = =layer_height_0+layer_height*4 wall_thickness = =line_width*3 -cool_fan_full_at_height = 0.6 -cool_fan_speed = 50 -material_final_print_temperature = 190 -material_initial_print_temperature = 190 +material_final_print_temperature = 195 +material_initial_print_temperature = 195 material_print_temperature = 190 -material_standby_temperature = 190 +material_standby_temperature = 195 optimize_wall_printing_order = True -prime_tower_min_volume = 135 -retraction_amount = 4 -retraction_extra_prime_amount = 2 -retraction_extrusion_window = 8 -retraction_hop = 3 -retraction_hop_enabled = True -retraction_hop_only_when_collides = True -retraction_min_travel = 10 -retraction_prime_speed = 5 -retraction_speed = 30 -speed_layer_0 = 20 -speed_travel = 60 -speed_wall = 30 -speed_wall_x = 20 +prime_tower_min_volume = 150 switch_extruder_prime_speed = 10 switch_extruder_retraction_amount = 40 -switch_extruder_retraction_speeds = 30 +switch_extruder_retraction_speeds = 30 \ No newline at end of file diff --git a/resources/quality/biqu/b2/biqu_b2_global_draft.inst.cfg b/resources/quality/biqu/b2/biqu_b2_global_draft.inst.cfg index 36d50ada37..92deadd38c 100644 --- a/resources/quality/biqu/b2/biqu_b2_global_draft.inst.cfg +++ b/resources/quality/biqu/b2/biqu_b2_global_draft.inst.cfg @@ -16,27 +16,12 @@ layer_height_0 = 0.32 support_interface_height = =layer_height*4 top_bottom_thickness = =layer_height_0+layer_height*3 wall_thickness = =line_width*2 -cool_fan_full_at_height = 0.6 -cool_fan_speed = 50 -material_final_print_temperature = 190 -material_initial_print_temperature = 190 +material_final_print_temperature = 195 +material_initial_print_temperature = 195 material_print_temperature = 190 -material_standby_temperature = 190 +material_standby_temperature = 195 optimize_wall_printing_order = True -prime_tower_min_volume = 135 -retraction_amount = 4 -retraction_extra_prime_amount = 2 -retraction_extrusion_window = 8 -retraction_hop = 3 -retraction_hop_enabled = True -retraction_hop_only_when_collides = True -retraction_min_travel = 10 -retraction_prime_speed = 5 -retraction_speed = 30 -speed_layer_0 = 20 -speed_travel = 60 -speed_wall = 30 -speed_wall_x = 20 +prime_tower_min_volume = 150 switch_extruder_prime_speed = 10 switch_extruder_retraction_amount = 40 -switch_extruder_retraction_speeds = 30 +switch_extruder_retraction_speeds = 30 \ No newline at end of file diff --git a/resources/quality/biqu/b2/biqu_b2_global_low.inst.cfg b/resources/quality/biqu/b2/biqu_b2_global_low.inst.cfg index 2fb4804640..0455a6ec20 100644 --- a/resources/quality/biqu/b2/biqu_b2_global_low.inst.cfg +++ b/resources/quality/biqu/b2/biqu_b2_global_low.inst.cfg @@ -16,27 +16,12 @@ layer_height_0 = 0.28 support_interface_height = =layer_height*4 top_bottom_thickness = =layer_height_0+layer_height*3 wall_thickness = =line_width*3 -cool_fan_full_at_height = 0.6 -cool_fan_speed = 50 -material_final_print_temperature = 190 -material_initial_print_temperature = 190 +material_final_print_temperature = 195 +material_initial_print_temperature = 195 material_print_temperature = 190 -material_standby_temperature = 190 +material_standby_temperature = 195 optimize_wall_printing_order = True -prime_tower_min_volume = 135 -retraction_amount = 4 -retraction_extra_prime_amount = 2 -retraction_extrusion_window = 8 -retraction_hop = 3 -retraction_hop_enabled = True -retraction_hop_only_when_collides = True -retraction_min_travel = 10 -retraction_prime_speed = 5 -retraction_speed = 30 -speed_layer_0 = 20 -speed_travel = 60 -speed_wall = 30 -speed_wall_x = 20 +prime_tower_min_volume = 150 switch_extruder_prime_speed = 10 switch_extruder_retraction_amount = 40 -switch_extruder_retraction_speeds = 30 +switch_extruder_retraction_speeds = 30 \ No newline at end of file diff --git a/resources/quality/biqu/b2/biqu_b2_global_standard.inst.cfg b/resources/quality/biqu/b2/biqu_b2_global_standard.inst.cfg index 4d2b5660b6..a0fb268e52 100644 --- a/resources/quality/biqu/b2/biqu_b2_global_standard.inst.cfg +++ b/resources/quality/biqu/b2/biqu_b2_global_standard.inst.cfg @@ -17,28 +17,12 @@ layer_height_0 = 0.2 support_interface_height = =layer_height*4 top_bottom_thickness = =layer_height_0+layer_height*3 wall_thickness = =line_width*3 -brim_width = 4 -cool_fan_full_at_height = 0.6 -cool_fan_speed = 50 -material_final_print_temperature = 190 -material_initial_print_temperature = 190 +material_final_print_temperature = 195 +material_initial_print_temperature = 195 material_print_temperature = 190 -material_standby_temperature = 190 +material_standby_temperature = 195 optimize_wall_printing_order = True -prime_tower_min_volume = 135 -retraction_amount = 4 -retraction_extra_prime_amount = 2 -retraction_extrusion_window = 8 -retraction_hop = 3 -retraction_hop_enabled = True -retraction_hop_only_when_collides = True -retraction_min_travel = 10 -retraction_prime_speed = 5 -retraction_speed = 30 -speed_layer_0 = 20 -speed_travel = 60 -speed_wall = 30 -speed_wall_x = 20 +prime_tower_min_volume = 150 switch_extruder_prime_speed = 10 switch_extruder_retraction_amount = 40 switch_extruder_retraction_speeds = 30 \ No newline at end of file diff --git a/resources/quality/biqu/b2/biqu_b2_global_super.inst.cfg b/resources/quality/biqu/b2/biqu_b2_global_super.inst.cfg index fc9860a695..fd54805c04 100644 --- a/resources/quality/biqu/b2/biqu_b2_global_super.inst.cfg +++ b/resources/quality/biqu/b2/biqu_b2_global_super.inst.cfg @@ -16,27 +16,12 @@ layer_height_0 = 0.12 support_interface_height = =layer_height*8 top_bottom_thickness = =layer_height_0+layer_height*6 wall_thickness = =line_width*3 -cool_fan_full_at_height = 0.6 -cool_fan_speed = 50 -material_final_print_temperature = 190 -material_initial_print_temperature = 190 +material_final_print_temperature = 195 +material_initial_print_temperature = 195 material_print_temperature = 190 -material_standby_temperature = 190 +material_standby_temperature = 195 optimize_wall_printing_order = True -prime_tower_min_volume = 135 -retraction_amount = 4 -retraction_extra_prime_amount = 2 -retraction_extrusion_window = 8 -retraction_hop = 3 -retraction_hop_enabled = True -retraction_hop_only_when_collides = True -retraction_min_travel = 10 -retraction_prime_speed = 5 -retraction_speed = 30 -speed_layer_0 = 20 -speed_travel = 60 -speed_wall = 30 -speed_wall_x = 20 +prime_tower_min_volume = 150 switch_extruder_prime_speed = 10 switch_extruder_retraction_amount = 40 switch_extruder_retraction_speeds = 30 \ No newline at end of file diff --git a/resources/quality/biqu/b2/biqu_b2_global_ultra.inst.cfg b/resources/quality/biqu/b2/biqu_b2_global_ultra.inst.cfg index 55fad68102..cbc194ceb6 100644 --- a/resources/quality/biqu/b2/biqu_b2_global_ultra.inst.cfg +++ b/resources/quality/biqu/b2/biqu_b2_global_ultra.inst.cfg @@ -16,27 +16,12 @@ layer_height_0 = 0.12 support_interface_height = =layer_height*12 top_bottom_thickness = =layer_height_0+layer_height*10 wall_thickness = =line_width*4 -cool_fan_full_at_height = 0.6 -cool_fan_speed = 50 -material_final_print_temperature = 190 -material_initial_print_temperature = 190 +material_final_print_temperature = 195 +material_initial_print_temperature = 195 material_print_temperature = 190 -material_standby_temperature = 190 +material_standby_temperature = 195 optimize_wall_printing_order = True -prime_tower_min_volume = 135 -retraction_amount = 4 -retraction_extra_prime_amount = 2 -retraction_extrusion_window = 8 -retraction_hop = 3 -retraction_hop_enabled = True -retraction_hop_only_when_collides = True -retraction_min_travel = 10 -retraction_prime_speed = 5 -retraction_speed = 30 -speed_layer_0 = 20 -speed_travel = 60 -speed_wall = 30 -speed_wall_x = 20 +prime_tower_min_volume = 150 switch_extruder_prime_speed = 10 switch_extruder_retraction_amount = 40 switch_extruder_retraction_speeds = 30 \ No newline at end of file From ea576d0ee6093a16eeac260beeae0eb3be2c9e9c Mon Sep 17 00:00:00 2001 From: Boris Juraga Date: Sun, 2 Feb 2025 10:44:08 +0100 Subject: [PATCH 15/84] add more clarity to the start/end gcode --- resources/definitions/biqu_b2.def.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/resources/definitions/biqu_b2.def.json b/resources/definitions/biqu_b2.def.json index c174db33db..88ac6d589a 100644 --- a/resources/definitions/biqu_b2.def.json +++ b/resources/definitions/biqu_b2.def.json @@ -25,9 +25,9 @@ [33, 35] ] }, - "machine_end_gcode": { "default_value": "M104 S0\nM140 S0\n;Retract the filament\nG91\nG1 E-30 F300\nG1 Z5\nG90\nG28 X0 Y0" }, + "machine_end_gcode": { "default_value": ";BEGIN OF CUSTOM END GCODE\nM104 S0\nM140 S0\n;Retract the filament\nG91\nG1 E-30 F300\nG1 Z5\nG90\nG28 X0 Y0\n;END OF CUSTOM END GCODE" }, "machine_name": { "default_value": "BIQU B2" }, - "machine_start_gcode": { "default_value": "G28 ;Home\nG1 Z15.0 F6000 ;Move the platform down 15mm\n;Prime the extruder\nM109 S{material_print_temperature_layer_0} ; Wait for Extruder temperature\nT0\nG92 E0\nG1 F1200 E-30\nG92 E0\nM109 S{material_print_temperature_layer_0} ; Wait for Extruder temperature\nT1\nG92 E0\nG1 Z2.0 F3000 ; Move Z Axis up little to prevent scratching of Heat Bed\nG1 X6.1 Y20 Z0.3 F5000.0 ; Move to start position\nM117 Purging\nG1 X6.1 Y200.0 Z0.3 F1500.0 E10 ; Draw the first line\nG1 X6.4 Y200.0 Z0.3 F5000.0 ; Move to side a little\nG1 X6.4 Y20 Z0.3 F1500.0 E20 ; Draw the second line\nG1 X6.7 Y20 Z0.3 F5000.0 ; Move to side a little\nG1 X6.7 Y200.0 Z0.3 F1500.0 E30 ; Draw the three line\nG1 X7.0 Y200.0 Z0.3 F5000.0 ; Move to side a little\nG1 X7.0 Y20 Z0.3 F1500.0 E40 ; Draw the four line\nG1 X7.3 Y20 Z0.3 F5000.0 ; Move to side a little\nG1 X7.3 Y200.0 Z0.3 F1500.0 E50 ; Draw the four line\nG92 E0 \nT1\nG92 E0\nG1 F1200 E-30\nG92 E0\nT0\nG92 E0\nG1 F1200 E30\nG92 E0\nG1 Z2.0 F3000 ; Move Z Axis up little to prevent scratching of Heat Bed\nG1 X9.1 Y20 Z0.3 F5000.0 ; Move to start position\nM117 Purging\nG1 X9.1 Y200.0 Z0.3 F1500.0 E10 ; Draw the first line\nG1 X9.4 Y200.0 Z0.3 F5000.0 ; Move to side a little\nG1 X9.4 Y20 Z0.3 F1500.0 E20 ; Draw the second line\nG1 X9.7 Y20 Z0.3 F5000.0 ; Move to side a little\nG1 X9.7 Y200.0 Z0.3 F1500.0 E30 ; Draw the three line\nG1 X10.0 Y200.0 Z0.3 F5000.0 ; Move to side a little\nG1 X10.0 Y20 Z0.3 F1500.0 E40 ; Draw the four line\nG1 X10.3 Y20 Z0.3 F5000.0 ; Move to side a little\nG1 X10.3 Y200.0 Z0.3 F1500.0 E50 ; Draw the four line\nT0\nG92 E0\nG1 F1200 E-30\nG92 E0\nG92 E0 ; start print" }, + "machine_start_gcode": { "default_value": ";BEGIN OF CUSTOM START GCODE\nG28 ;Home\nG1 Z15.0 F6000 ;Move the platform down 15mm\n;Prime the extruder\nM109 S{material_print_temperature_layer_0} ; Wait for Extruder temperature\nT0\nG92 E0\nG1 F1200 E-30\nG92 E0\nM109 S{material_print_temperature_layer_0} ; Wait for Extruder temperature\nT1\nG92 E0\nG1 Z2.0 F3000 ; Move Z Axis up little to prevent scratching of Heat Bed\nG1 X6.1 Y20 Z0.3 F5000.0 ; Move to start position\nM117 Purging\nG1 X6.1 Y200.0 Z0.3 F1500.0 E10 ; Draw the first line\nG1 X6.4 Y200.0 Z0.3 F5000.0 ; Move to side a little\nG1 X6.4 Y20 Z0.3 F1500.0 E20 ; Draw the second line\nG1 X6.7 Y20 Z0.3 F5000.0 ; Move to side a little\nG1 X6.7 Y200.0 Z0.3 F1500.0 E30 ; Draw the three line\nG1 X7.0 Y200.0 Z0.3 F5000.0 ; Move to side a little\nG1 X7.0 Y20 Z0.3 F1500.0 E40 ; Draw the four line\nG1 X7.3 Y20 Z0.3 F5000.0 ; Move to side a little\nG1 X7.3 Y200.0 Z0.3 F1500.0 E50 ; Draw the four line\nG92 E0 \nT1\nG92 E0\nG1 F1200 E-30\nG92 E0\nT0\nG92 E0\nG1 F1200 E30\nG92 E0\nG1 Z2.0 F3000 ; Move Z Axis up little to prevent scratching of Heat Bed\nG1 X9.1 Y20 Z0.3 F5000.0 ; Move to start position\nM117 Purging\nG1 X9.1 Y200.0 Z0.3 F1500.0 E10 ; Draw the first line\nG1 X9.4 Y200.0 Z0.3 F5000.0 ; Move to side a little\nG1 X9.4 Y20 Z0.3 F1500.0 E20 ; Draw the second line\nG1 X9.7 Y20 Z0.3 F5000.0 ; Move to side a little\nG1 X9.7 Y200.0 Z0.3 F1500.0 E30 ; Draw the three line\nG1 X10.0 Y200.0 Z0.3 F5000.0 ; Move to side a little\nG1 X10.0 Y20 Z0.3 F1500.0 E40 ; Draw the four line\nG1 X10.3 Y20 Z0.3 F5000.0 ; Move to side a little\nG1 X10.3 Y200.0 Z0.3 F1500.0 E50 ; Draw the four line\nT0\nG92 E0\nG1 F1200 E-30\nG92 E0\nG92 E0\n;END OF CUSTOM START GCODE\n; start print" }, "machine_extruders_share_heater": { "default_value": true }, "machine_extruders_share_nozzle": { "default_value": true }, "machine_extruders_shared_nozzle_initial_retraction": { "default_value": 30 }, From e7def395c61dbfe01bd3907b86b6998b4a8ab9aa Mon Sep 17 00:00:00 2001 From: Boris Juraga Date: Sun, 2 Feb 2025 10:59:28 +0100 Subject: [PATCH 16/84] reset extruder to initial one --- resources/definitions/biqu_b2.def.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/definitions/biqu_b2.def.json b/resources/definitions/biqu_b2.def.json index 88ac6d589a..6fe0d9004f 100644 --- a/resources/definitions/biqu_b2.def.json +++ b/resources/definitions/biqu_b2.def.json @@ -27,7 +27,7 @@ }, "machine_end_gcode": { "default_value": ";BEGIN OF CUSTOM END GCODE\nM104 S0\nM140 S0\n;Retract the filament\nG91\nG1 E-30 F300\nG1 Z5\nG90\nG28 X0 Y0\n;END OF CUSTOM END GCODE" }, "machine_name": { "default_value": "BIQU B2" }, - "machine_start_gcode": { "default_value": ";BEGIN OF CUSTOM START GCODE\nG28 ;Home\nG1 Z15.0 F6000 ;Move the platform down 15mm\n;Prime the extruder\nM109 S{material_print_temperature_layer_0} ; Wait for Extruder temperature\nT0\nG92 E0\nG1 F1200 E-30\nG92 E0\nM109 S{material_print_temperature_layer_0} ; Wait for Extruder temperature\nT1\nG92 E0\nG1 Z2.0 F3000 ; Move Z Axis up little to prevent scratching of Heat Bed\nG1 X6.1 Y20 Z0.3 F5000.0 ; Move to start position\nM117 Purging\nG1 X6.1 Y200.0 Z0.3 F1500.0 E10 ; Draw the first line\nG1 X6.4 Y200.0 Z0.3 F5000.0 ; Move to side a little\nG1 X6.4 Y20 Z0.3 F1500.0 E20 ; Draw the second line\nG1 X6.7 Y20 Z0.3 F5000.0 ; Move to side a little\nG1 X6.7 Y200.0 Z0.3 F1500.0 E30 ; Draw the three line\nG1 X7.0 Y200.0 Z0.3 F5000.0 ; Move to side a little\nG1 X7.0 Y20 Z0.3 F1500.0 E40 ; Draw the four line\nG1 X7.3 Y20 Z0.3 F5000.0 ; Move to side a little\nG1 X7.3 Y200.0 Z0.3 F1500.0 E50 ; Draw the four line\nG92 E0 \nT1\nG92 E0\nG1 F1200 E-30\nG92 E0\nT0\nG92 E0\nG1 F1200 E30\nG92 E0\nG1 Z2.0 F3000 ; Move Z Axis up little to prevent scratching of Heat Bed\nG1 X9.1 Y20 Z0.3 F5000.0 ; Move to start position\nM117 Purging\nG1 X9.1 Y200.0 Z0.3 F1500.0 E10 ; Draw the first line\nG1 X9.4 Y200.0 Z0.3 F5000.0 ; Move to side a little\nG1 X9.4 Y20 Z0.3 F1500.0 E20 ; Draw the second line\nG1 X9.7 Y20 Z0.3 F5000.0 ; Move to side a little\nG1 X9.7 Y200.0 Z0.3 F1500.0 E30 ; Draw the three line\nG1 X10.0 Y200.0 Z0.3 F5000.0 ; Move to side a little\nG1 X10.0 Y20 Z0.3 F1500.0 E40 ; Draw the four line\nG1 X10.3 Y20 Z0.3 F5000.0 ; Move to side a little\nG1 X10.3 Y200.0 Z0.3 F1500.0 E50 ; Draw the four line\nT0\nG92 E0\nG1 F1200 E-30\nG92 E0\nG92 E0\n;END OF CUSTOM START GCODE\n; start print" }, + "machine_start_gcode": { "default_value": ";BEGIN OF CUSTOM START GCODE\nG28 ;Home\nG1 Z15.0 F6000 ;Move the platform down 15mm\n;Prime the extruder\nM109 S{material_print_temperature_layer_0} ; Wait for Extruder temperature\nT0\nG92 E0\nG1 F1200 E-30\nG92 E0\nM109 S{material_print_temperature_layer_0} ; Wait for Extruder temperature\nT1\nG92 E0\nG1 Z2.0 F3000 ; Move Z Axis up little to prevent scratching of Heat Bed\nG1 X6.1 Y20 Z0.3 F5000.0 ; Move to start position\nM117 Purging\nG1 X6.1 Y200.0 Z0.3 F1500.0 E10 ; Draw the first line\nG1 X6.4 Y200.0 Z0.3 F5000.0 ; Move to side a little\nG1 X6.4 Y20 Z0.3 F1500.0 E20 ; Draw the second line\nG1 X6.7 Y20 Z0.3 F5000.0 ; Move to side a little\nG1 X6.7 Y200.0 Z0.3 F1500.0 E30 ; Draw the three line\nG1 X7.0 Y200.0 Z0.3 F5000.0 ; Move to side a little\nG1 X7.0 Y20 Z0.3 F1500.0 E40 ; Draw the four line\nG1 X7.3 Y20 Z0.3 F5000.0 ; Move to side a little\nG1 X7.3 Y200.0 Z0.3 F1500.0 E50 ; Draw the four line\nG92 E0 \nT1\nG92 E0\nG1 F1200 E-30\nG92 E0\nT0\nG92 E0\nG1 F1200 E30\nG92 E0\nG1 Z2.0 F3000 ; Move Z Axis up little to prevent scratching of Heat Bed\nG1 X9.1 Y20 Z0.3 F5000.0 ; Move to start position\nM117 Purging\nG1 X9.1 Y200.0 Z0.3 F1500.0 E10 ; Draw the first line\nG1 X9.4 Y200.0 Z0.3 F5000.0 ; Move to side a little\nG1 X9.4 Y20 Z0.3 F1500.0 E20 ; Draw the second line\nG1 X9.7 Y20 Z0.3 F5000.0 ; Move to side a little\nG1 X9.7 Y200.0 Z0.3 F1500.0 E30 ; Draw the three line\nG1 X10.0 Y200.0 Z0.3 F5000.0 ; Move to side a little\nG1 X10.0 Y20 Z0.3 F1500.0 E40 ; Draw the four line\nG1 X10.3 Y20 Z0.3 F5000.0 ; Move to side a little\nG1 X10.3 Y200.0 Z0.3 F1500.0 E50 ; Draw the four line\nT0\nG92 E0\nG1 F1200 E-30\nG92 E0\nG92 E0\n;END OF CUSTOM START GCODE\nT{initial_extruder_nr} ; RESET EXTRUDER TO INITIAL\n; start print" }, "machine_extruders_share_heater": { "default_value": true }, "machine_extruders_share_nozzle": { "default_value": true }, "machine_extruders_shared_nozzle_initial_retraction": { "default_value": 30 }, From 850228498792684a4b282d40dedeea52bbafbc26 Mon Sep 17 00:00:00 2001 From: Erwan MATHIEU Date: Wed, 5 Feb 2025 10:33:51 +0100 Subject: [PATCH 17/84] Disable retract during travel for printers that handle retraction CURA-11978 --- resources/definitions/fdmprinter.def.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/resources/definitions/fdmprinter.def.json b/resources/definitions/fdmprinter.def.json index 1323f93a73..cf43fde121 100644 --- a/resources/definitions/fdmprinter.def.json +++ b/resources/definitions/fdmprinter.def.json @@ -4300,7 +4300,7 @@ "default_value": 0, "minimum_value": 0, "maximum_value": 100, - "enabled": "retraction_enable and machine_gcode_flavor != \"UltiGCode\"", + "enabled": "retraction_enable and not machine_firmware_retract and machine_gcode_flavor != \"UltiGCode\" and machine_gcode_flavor != \"BFB\"", "settable_per_mesh": false, "settable_per_extruder": true }, @@ -4313,7 +4313,7 @@ "default_value": 0, "minimum_value": 0, "maximum_value": 100, - "enabled": "retraction_enable and machine_gcode_flavor != \"UltiGCode\"", + "enabled": "retraction_enable and not machine_firmware_retract and machine_gcode_flavor != \"UltiGCode\" and machine_gcode_flavor != \"BFB\"", "settable_per_mesh": false, "settable_per_extruder": true }, From 87413f6b6da7570ddc557ff23735458b7a442cd9 Mon Sep 17 00:00:00 2001 From: Boris Juraga Date: Thu, 6 Feb 2025 23:28:06 +0100 Subject: [PATCH 18/84] adjust the start and end gcode --- resources/definitions/biqu_b2.def.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/resources/definitions/biqu_b2.def.json b/resources/definitions/biqu_b2.def.json index 6fe0d9004f..3676ca8955 100644 --- a/resources/definitions/biqu_b2.def.json +++ b/resources/definitions/biqu_b2.def.json @@ -25,9 +25,9 @@ [33, 35] ] }, - "machine_end_gcode": { "default_value": ";BEGIN OF CUSTOM END GCODE\nM104 S0\nM140 S0\n;Retract the filament\nG91\nG1 E-30 F300\nG1 Z5\nG90\nG28 X0 Y0\n;END OF CUSTOM END GCODE" }, + "machine_end_gcode": { "default_value": ";BEGIN OF CUSTOM END GCODE\nM104 S0\nM140 S0\n;Retract the filament\nG91\nG1 E-30 F300\nG1 Z5\nG90\nG28 X0 Y{machine_depth}\n;END OF CUSTOM END GCODE" }, "machine_name": { "default_value": "BIQU B2" }, - "machine_start_gcode": { "default_value": ";BEGIN OF CUSTOM START GCODE\nG28 ;Home\nG1 Z15.0 F6000 ;Move the platform down 15mm\n;Prime the extruder\nM109 S{material_print_temperature_layer_0} ; Wait for Extruder temperature\nT0\nG92 E0\nG1 F1200 E-30\nG92 E0\nM109 S{material_print_temperature_layer_0} ; Wait for Extruder temperature\nT1\nG92 E0\nG1 Z2.0 F3000 ; Move Z Axis up little to prevent scratching of Heat Bed\nG1 X6.1 Y20 Z0.3 F5000.0 ; Move to start position\nM117 Purging\nG1 X6.1 Y200.0 Z0.3 F1500.0 E10 ; Draw the first line\nG1 X6.4 Y200.0 Z0.3 F5000.0 ; Move to side a little\nG1 X6.4 Y20 Z0.3 F1500.0 E20 ; Draw the second line\nG1 X6.7 Y20 Z0.3 F5000.0 ; Move to side a little\nG1 X6.7 Y200.0 Z0.3 F1500.0 E30 ; Draw the three line\nG1 X7.0 Y200.0 Z0.3 F5000.0 ; Move to side a little\nG1 X7.0 Y20 Z0.3 F1500.0 E40 ; Draw the four line\nG1 X7.3 Y20 Z0.3 F5000.0 ; Move to side a little\nG1 X7.3 Y200.0 Z0.3 F1500.0 E50 ; Draw the four line\nG92 E0 \nT1\nG92 E0\nG1 F1200 E-30\nG92 E0\nT0\nG92 E0\nG1 F1200 E30\nG92 E0\nG1 Z2.0 F3000 ; Move Z Axis up little to prevent scratching of Heat Bed\nG1 X9.1 Y20 Z0.3 F5000.0 ; Move to start position\nM117 Purging\nG1 X9.1 Y200.0 Z0.3 F1500.0 E10 ; Draw the first line\nG1 X9.4 Y200.0 Z0.3 F5000.0 ; Move to side a little\nG1 X9.4 Y20 Z0.3 F1500.0 E20 ; Draw the second line\nG1 X9.7 Y20 Z0.3 F5000.0 ; Move to side a little\nG1 X9.7 Y200.0 Z0.3 F1500.0 E30 ; Draw the three line\nG1 X10.0 Y200.0 Z0.3 F5000.0 ; Move to side a little\nG1 X10.0 Y20 Z0.3 F1500.0 E40 ; Draw the four line\nG1 X10.3 Y20 Z0.3 F5000.0 ; Move to side a little\nG1 X10.3 Y200.0 Z0.3 F1500.0 E50 ; Draw the four line\nT0\nG92 E0\nG1 F1200 E-30\nG92 E0\nG92 E0\n;END OF CUSTOM START GCODE\nT{initial_extruder_nr} ; RESET EXTRUDER TO INITIAL\n; start print" }, + "machine_start_gcode": { "default_value": ";BEGIN OF CUSTOM START GCODE\nG28 ;Home\nG1 Z15.0 F6000 ;Move the platform down 15mm\n;Prime the extruder\nM109 S{material_print_temperature_layer_0} ; Wait for Extruder temperature\nT0\nG92 E0\nG1 F1200 E-30\nG92 E0\nM109 S{material_print_temperature_layer_0} ; Wait for Extruder temperature\nT1\nG92 E0\nG1 Z2.0 F3000 ; Move Z Axis up little to prevent scratching of Heat Bed\nG1 X6.1 Y20 Z0.3 F5000.0 ; Move to start position\nM117 Purging\nG1 X6.1 Y200.0 Z0.3 F1500.0 E10 ; Draw the first line\nG1 X6.4 Y200.0 Z0.3 F5000.0 ; Move to side a little\nG1 X6.4 Y20 Z0.3 F1500.0 E20 ; Draw the second line\nG1 X6.7 Y20 Z0.3 F5000.0 ; Move to side a little\nG1 X6.7 Y200.0 Z0.3 F1500.0 E30 ; Draw the three line\nG1 X7.0 Y200.0 Z0.3 F5000.0 ; Move to side a little\nG1 X7.0 Y20 Z0.3 F1500.0 E40 ; Draw the four line\nG1 X7.3 Y20 Z0.3 F5000.0 ; Move to side a little\nG1 X7.3 Y200.0 Z0.3 F1500.0 E50 ; Draw the four line\nG92 E0 \nT1\nG92 E0\nG1 F1200 E-30\nG92 E0\nT0\nG92 E0\nG1 F1200 E30\nG92 E0\nG1 Z2.0 F3000 ; Move Z Axis up little to prevent scratching of Heat Bed\nG1 X9.1 Y20 Z0.3 F5000.0 ; Move to start position\nM117 Purging\nG1 X9.1 Y200.0 Z0.3 F1500.0 E10 ; Draw the first line\nG1 X9.4 Y200.0 Z0.3 F5000.0 ; Move to side a little\nG1 X9.4 Y20 Z0.3 F1500.0 E20 ; Draw the second line\nG1 X9.7 Y20 Z0.3 F5000.0 ; Move to side a little\nG1 X9.7 Y200.0 Z0.3 F1500.0 E30 ; Draw the three line\nG1 X10.0 Y200.0 Z0.3 F5000.0 ; Move to side a little\nG1 X10.0 Y20 Z0.3 F1500.0 E40 ; Draw the four line\nG1 X10.3 Y20 Z0.3 F5000.0 ; Move to side a little\nG1 X10.3 Y200.0 Z0.3 F1500.0 E50 ; Draw the four line\nT0\nG92 E0\nG1 F1200 E-30\nG92 E0\nG92 E0\nT{initial_extruder_nr} ; RESET EXTRUDER TO INITIAL\n; start print\n;END OF CUSTOM START GCODE" }, "machine_extruders_share_heater": { "default_value": true }, "machine_extruders_share_nozzle": { "default_value": true }, "machine_extruders_shared_nozzle_initial_retraction": { "default_value": 30 }, From 3adf94cffb0450bc83ddf9aee4853153651c5910 Mon Sep 17 00:00:00 2001 From: HellAholic Date: Fri, 14 Feb 2025 10:59:38 +0100 Subject: [PATCH 19/84] move settings to experimental category --- resources/definitions/fdmprinter.def.json | 52 +++++++++++------------ 1 file changed, 26 insertions(+), 26 deletions(-) diff --git a/resources/definitions/fdmprinter.def.json b/resources/definitions/fdmprinter.def.json index cf43fde121..48342b2eb1 100644 --- a/resources/definitions/fdmprinter.def.json +++ b/resources/definitions/fdmprinter.def.json @@ -4291,32 +4291,6 @@ "settable_per_mesh": false, "settable_per_extruder": true }, - "retraction_during_travel_ratio": - { - "label": "Retraction During Travel Move", - "description": "The ratio of retraction performed during the travel move, with the remainder completed while the nozzle is stationary, before traveling
  • When 0, the entire retraction is performed while stationary, before the travel begins
  • When 100, the entire retraction is performed during the travel move, bypassing the stationary phase
", - "unit": "%", - "type": "float", - "default_value": 0, - "minimum_value": 0, - "maximum_value": 100, - "enabled": "retraction_enable and not machine_firmware_retract and machine_gcode_flavor != \"UltiGCode\" and machine_gcode_flavor != \"BFB\"", - "settable_per_mesh": false, - "settable_per_extruder": true - }, - "prime_during_travel_ratio": - { - "label": "Prime During Travel Move", - "description": "The ratio of priming performed during the travel move, with the remainder completed while the nozzle is stationary, after traveling
  • When 0, the entire priming is performed while stationary, after the travel ends
  • When 100, the entire priming is performed during the travel move, allowing the print to start immediately
", - "unit": "%", - "type": "float", - "default_value": 0, - "minimum_value": 0, - "maximum_value": 100, - "enabled": "retraction_enable and not machine_firmware_retract and machine_gcode_flavor != \"UltiGCode\" and machine_gcode_flavor != \"BFB\"", - "settable_per_mesh": false, - "settable_per_extruder": true - }, "retraction_speed": { "label": "Retraction Speed", @@ -9015,6 +8989,32 @@ "default_value": true, "settable_per_mesh": true }, + "retraction_during_travel_ratio": + { + "label": "Retraction During Travel Move", + "description": "The ratio of retraction performed during the travel move, with the remainder completed while the nozzle is stationary, before traveling
  • When 0, the entire retraction is performed while stationary, before the travel begins
  • When 100, the entire retraction is performed during the travel move, bypassing the stationary phase
", + "unit": "%", + "type": "float", + "default_value": 0, + "minimum_value": 0, + "maximum_value": 100, + "enabled": "retraction_enable and not machine_firmware_retract and machine_gcode_flavor != \"UltiGCode\" and machine_gcode_flavor != \"BFB\"", + "settable_per_mesh": false, + "settable_per_extruder": true + }, + "prime_during_travel_ratio": + { + "label": "Prime During Travel Move", + "description": "The ratio of priming performed during the travel move, with the remainder completed while the nozzle is stationary, after traveling
  • When 0, the entire priming is performed while stationary, after the travel ends
  • When 100, the entire priming is performed during the travel move, allowing the print to start immediately
", + "unit": "%", + "type": "float", + "default_value": 0, + "minimum_value": 0, + "maximum_value": 100, + "enabled": "retraction_enable and not machine_firmware_retract and machine_gcode_flavor != \"UltiGCode\" and machine_gcode_flavor != \"BFB\"", + "settable_per_mesh": false, + "settable_per_extruder": true + }, "scarf_joint_seam_length": { "label": "Scarf Seam Length", From 06cbb2c65cfb47f0a0126d0f201cdecefb3c7273 Mon Sep 17 00:00:00 2001 From: GregValiant <64202104+GregValiant@users.noreply.github.com> Date: Thu, 13 Mar 2025 20:40:59 -0400 Subject: [PATCH 20/84] Update FilamentChange.py Hide the "Z-Move" when in "use firmware configuration" mode. --- plugins/PostProcessingPlugin/scripts/FilamentChange.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/PostProcessingPlugin/scripts/FilamentChange.py b/plugins/PostProcessingPlugin/scripts/FilamentChange.py index 6fe28ef2f2..f51ba73ffb 100644 --- a/plugins/PostProcessingPlugin/scripts/FilamentChange.py +++ b/plugins/PostProcessingPlugin/scripts/FilamentChange.py @@ -92,7 +92,7 @@ class FilamentChange(Script): "type": "float", "default_value": 0, "minimum_value": 0, - "enabled": "enabled" + "enabled": "enabled and not firmware_config" }, "retract_method": { From 001dfc30af53f0154dc562cd4ddfc0200a7c347c Mon Sep 17 00:00:00 2001 From: GregValiant <64202104+GregValiant@users.noreply.github.com> Date: Sat, 22 Mar 2025 11:10:23 -0400 Subject: [PATCH 21/84] Update AddCoolingProfile.py Re-worked the Build Volume fan code to include a printers Auxiliary fan if there is one. --- .../scripts/AddCoolingProfile.py | 126 ++++++++++-------- 1 file changed, 67 insertions(+), 59 deletions(-) diff --git a/plugins/PostProcessingPlugin/scripts/AddCoolingProfile.py b/plugins/PostProcessingPlugin/scripts/AddCoolingProfile.py index c6ec748f96..e30e83b653 100644 --- a/plugins/PostProcessingPlugin/scripts/AddCoolingProfile.py +++ b/plugins/PostProcessingPlugin/scripts/AddCoolingProfile.py @@ -1,18 +1,22 @@ -# Designed in January 2023 by GregValiant (Greg Foresi) -# My design intent was to make this as full featured and "industrial strength" as I could. People printing exotic materials on large custom printers may want to turn the fans off for certain layers, and then back on again later in the print. This script allows that. -# Functions: -# Remove all fan speed lines from the file (optional). This should be enabled for the first instance of the script. It is disabled by default in any following instances. -# "By Layer" allows the user to adjust the fan speed up, or down, or off, within the print. "By Feature" allows different fan speeds for different features (;TYPE:WALL-OUTER, etc.). -# If 'By Feature' then a Start Layer and/or an End Layer can be defined. -# Fan speeds are scaled PWM (0 - 255) or RepRap (0.0 - 1.0) depending on {machine_scale_fan_speed_zero_to_one}. -# A minimum fan speed of 12% is enforced. It is the slowest speed that my cooling fan will turn on so that's what I used. 'M106 S14' (as Cura might insert) was pretty useless. -# If multiple extruders have separate fan circuits the speeds are set at tool changes and conform to the layer or feature setting. There is support for up to 4 layer cooling fan circuits. -# My thanks to @5axes(@CUQ), @fieldOfView(@AHoeben), @Ghostkeeper, and @Torgeir. A special thanks to @RBurema for his patience in reviewing my 'non-pythonic' script. -# 09/14/23 (GV) Added support for One-at-a-Time print sequence. -# 12/15/23 (GV) Split off 'Single Fan By Layer', 'Multi-fan By Layer', 'Single Fan By Feature', and 'Multi-fan By Feature' from the main 'execute' script. -# 01/05/24 (GV) Revised the regex replacements. -# 12/11/24 (GV) Added 'off_fan_speed' for the idle nozzle layer cooling fan. It does not have to go to 0%. -# 01/01/25 (GV) Added 'Build Volume' fan control +""" +Designed in January 2023 by GregValiant (Greg Foresi) + My design intent was to make this as full featured and "industrial strength" as I could. People printing exotic materials on large custom printers may want to turn the fans off for certain layers, and then back on again later in the print. This script allows that. + Functions: + Remove all fan speed lines from the file (optional). This should be enabled for the first instance of the script. It is disabled by default in any following instances. + "By Layer" allows the user to adjust the fan speed up, or down, or off, within the print. "By Feature" allows different fan speeds for different features (;TYPE:WALL-OUTER, etc.). + If 'By Feature' then a Start Layer and/or an End Layer can be defined. + Fan speeds are scaled PWM (0 - 255) or RepRap (0.0 - 1.0) depending on {machine_scale_fan_speed_zero_to_one}. + A minimum fan speed of 12% is enforced. It is the slowest speed that my cooling fan will turn on so that's what I used. 'M106 S14' (as Cura might insert) was pretty useless. + If multiple extruders have separate fan circuits the speeds are set at tool changes and conform to the layer or feature setting. There is support for up to 4 layer cooling fan circuits. + My thanks to @5axes(@CUQ), @fieldOfView(@AHoeben), @Ghostkeeper, and @Torgeir. A special thanks to @RBurema for his patience in reviewing my 'non-pythonic' script. + Changes: + 09/14/23 (GV) Added support for One-at-a-Time print sequence. + 12/15/23 (GV) Split off 'Single Fan By Layer', 'Multi-fan By Layer', 'Single Fan By Feature', and 'Multi-fan By Feature' from the main 'execute' script. + 01/05/24 (GV) Revised the regex replacements. + 12/11/24 (GV) Added 'off_fan_speed' for the idle nozzle layer cooling fan. It does not have to go to 0%. + 01/01/25 (GV) Added 'Build Volume' fan control + 03/15/25 (GV) Added 'Chamber Cooling Fan' control +""" from ..Script import Script from UM.Application import Application @@ -45,7 +49,8 @@ class AddCoolingProfile(Script): "type": "bool", "enabled": true, "value": true, - "default_value": true + "default_value": true, + "read_only": true }, "feature_fan_start_layer": { @@ -305,16 +310,26 @@ class AddCoolingProfile(Script): }, "bv_fan_speed_control_enable": { - "label": "Enable 'Chamber Fan' control", - "description": "Available if the 'Build Volume Fan Number' > 0 in 'Printer Settings'. Provides: On layer, off layer, and PWM speed control of the Chamber fan.", + "label": "Enable 'Chamber/Aux Fan' control", + "description": "Controls the 'Build Volume Fan' or an 'Auxiliary Fan' on printers with that hardware. Provides: 'On' layer, 'Off' layer, and PWM speed control of a secondary fan.", "type": "bool", "default_value": false, "enabled": "enable_bv_fan" }, + "bv_fan_nr": + { + "label": " Chamber/Aux Fan Number", + "description": "The mainboard circuit number of the Chamber or Auxiliary Fan.", + "type": "int", + "unit": "# ", + "default_value": 0, + "minimum_value": 0, + "enabled": "enable_bv_fan and bv_fan_speed_control_enable" + }, "bv_fan_speed": { - "label": " Chamber fan speed %", - "description": "The speed of the Chamber Fan. This will be converted to PWM Duty Cycle (0-255) or (RepRap 0-1 if that is enabled in Cura).", + "label": " Chamber/Aux Fan Speed %", + "description": "The speed of the Chamber or Auxiliary Fan. This will be converted to PWM Duty Cycle (0-255) or (RepRap 0-1 if that is enabled in Cura). If your specified fan does not operate on variable speeds then set this to '100'.", "type": "int", "unit": "% ", "default_value": 50, @@ -324,18 +339,20 @@ class AddCoolingProfile(Script): }, "bv_fan_start_layer": { - "label": " Start Layer", - "description": "The layer number for Chamber Fan start. Use the Cura preview layer number. If you are using a raft the chanber fan will start when the raft finishes.", + "label": " Chamber/Aux Fan Start Layer", + "description": "The layer to start the Chamber or Auxiliary Fan. Use the Cura preview layer number and the fan will start at the beginning of the layer.", "type": "int", + "unit": "Layer# ", "default_value": 1, "minimum_value": 1, "enabled": "enable_bv_fan and bv_fan_speed_control_enable" }, "bv_fan_end_layer": { - "label": " End Layer", - "description": "The layer number for Chamber Fan to turn off. Use the Cura preview layer number or '-1' to indicate the end of the print.", + "label": " Chamber/Aux Fan End Layer", + "description": "The layer number for Chamber or Auxiliary Fan to turn off. Use the Cura preview layer number or '-1' to indicate the end of the print. The fan will run until the end of the layer", "type": "int", + "unit": "Layer# ", "default_value": -1, "minimum_value": -1, "enabled": "enable_bv_fan and bv_fan_speed_control_enable" @@ -343,7 +360,7 @@ class AddCoolingProfile(Script): "enable_bv_fan": { "label": "Hidden setting", - "description": "For printers with heated chambers and chamber fans, this enables 'bv_fan_speed_control_enable'.", + "description": "This is enabled when machine_heated_bed is true, and in turn this enables 'bv_fan_speed_control_enable'.", "type": "bool", "default_value": false, "enabled": false @@ -364,18 +381,10 @@ class AddCoolingProfile(Script): self._instance.setProperty("delete_existing_m106", "value", False) if extruder_count > 1: if extruder[0].getProperty("machine_extruder_cooling_fan_number", "value") != extruder[1].getProperty("machine_extruder_cooling_fan_number", "value"): - self._instance.setProperty("enable_off_fan_speed_enable", "value", True) - - self.has_bv_fan = False - self.bv_fan_nr = 0 - try: - self.has_bv_fan = bool(global_stack.getProperty("build_volume_fan_nr", "value")) - self.bv_fan_nr = int(global_stack.getProperty("build_volume_fan_nr", "value")) - except: - pass - if self.has_bv_fan: + self._instance.setProperty("enable_off_fan_speed_enable", "value", True) + if bool(global_stack.getProperty("machine_heated_bed", "value")): self._instance.setProperty("enable_bv_fan", "value", True) - + def execute(self, data): # Exit if the gcode has been previously post-processed. if ";POSTPROCESSED" in data[0]: @@ -384,7 +393,7 @@ class AddCoolingProfile(Script): self.global_stack = Application.getInstance().getGlobalContainerStack() t0_fan = " P0"; t1_fan = " P0"; t2_fan = " P0"; t3_fan = " P0"; is_multi_extr_print = True - #Get some information from Cura----------------------------------- + #Get some information from Cura extruder = self.global_stack.extruderList extruder_count = self.global_stack.getProperty("machine_extruder_count", "value") @@ -398,14 +407,14 @@ class AddCoolingProfile(Script): bed_adhesion = (extruder[0].getProperty("adhesion_type", "value")) print_sequence = str(self.global_stack.getProperty("print_sequence", "value")) - #Assign the fan numbers to the tools------------------------------ + #Assign the fan numbers to the tools if extruder_count == 1: is_multi_fan = False is_multi_extr_print = False if int((extruder[0].getProperty("machine_extruder_cooling_fan_number", "value"))) > 0: t0_fan = " P" + str((extruder[0].getProperty("machine_extruder_cooling_fan_number", "value"))) else: - #No P parameter if there is a single fan circuit------------------ + # No P parameter if there is a single fan circuit t0_fan = "" #Get the cooling fan numbers for each extruder if the printer has multiple extruders @@ -417,13 +426,13 @@ class AddCoolingProfile(Script): if extruder_count > 2: t2_fan = " P" + str((extruder[2].getProperty("machine_extruder_cooling_fan_number", "value"))) if extruder_count > 3: t3_fan = " P" + str((extruder[3].getProperty("machine_extruder_cooling_fan_number", "value"))) - #Initialize the fan_list with defaults---------------------------- + #Initialize the fan_list with defaults fan_list = ["z"] * 16 for num in range(0,15,2): fan_list[num] = len(data) fan_list[num + 1] = "M106 S0" - #Assign the variable values if "By Layer"------------------------- + #Assign the variable values if "By Layer" by_layer_or_feature = self.getSettingValueByKey("fan_layer_or_feature") if by_layer_or_feature == "by_layer": # By layer doesn't do any feature search so there is no need to look for combing moves @@ -554,7 +563,7 @@ class AddCoolingProfile(Script): else: fan_sp_raft = "M106 S0" - # Start to alter the data----------------------------------------- + # Start to alter the data # Strip the existing M106 lines from the file up to the end of the last layer. If a user wants to use more than one instance of this plugin then they won't want to erase the M106 lines that the preceding plugins inserted so 'delete_existing_m106' is an option. delete_existing_m106 = self.getSettingValueByKey("delete_existing_m106") if delete_existing_m106: @@ -633,28 +642,26 @@ class AddCoolingProfile(Script): data[layer_num] = re.sub(";MESH:NOMESH", ";MESH:NONMESH", layer) data = self._add_travel_comment(data, layer_0_index) - # If there is a build volume fan - if self.has_bv_fan: - if self.getSettingValueByKey("bv_fan_speed_control_enable"): - data = self._control_bv_fan(data) + if bool(self.getSettingValueByKey("bv_fan_speed_control_enable")): + data = self._control_bv_fan(data) - # Single Fan "By Layer"-------------------------------------------- + # Single Fan "By Layer" if by_layer_or_feature == "by_layer" and not is_multi_fan: return self._single_fan_by_layer(data, layer_0_index, fan_list, t0_fan) - # Multi-Fan "By Layer"--------------------------------------------- + # Multi-Fan "By Layer" if by_layer_or_feature == "by_layer" and is_multi_fan: return self._multi_fan_by_layer(data, layer_0_index, fan_list, t0_fan, t1_fan, t2_fan, t3_fan, fan_mode, off_fan_speed) - #Single Fan "By Feature"------------------------------------------ + #Single Fan "By Feature" if by_layer_or_feature == "by_feature" and (not is_multi_fan or not is_multi_extr_print): return self._single_fan_by_feature(data, layer_0_index, the_start_layer, the_end_layer, the_end_is_enabled, fan_list, t0_fan, feature_speed_list, feature_name_list, feature_fan_combing) - #Multi Fan "By Feature"------------------------------------------- + #Multi Fan "By Feature" if by_layer_or_feature == "by_feature" and is_multi_fan: return self._multi_fan_by_feature(data, layer_0_index, the_start_layer, the_end_layer, the_end_is_enabled, fan_list, t0_fan, t1_fan, t2_fan, t3_fan, feature_speed_list, feature_name_list, feature_fan_combing, fan_mode, off_fan_speed) - # The Single Fan "By Layer"---------------------------------------- + # The Single Fan "By Layer" def _single_fan_by_layer(self, data: str, layer_0_index: int, fan_list: str, t0_fan: str)->str: layer_number = "0" single_fan_data = data @@ -671,7 +678,7 @@ class AddCoolingProfile(Script): single_fan_data[l_index] = layer return single_fan_data - # Multi-Fan "By Layer"----------------------------------------- + # Multi-Fan "By Layer" def _multi_fan_by_layer(self, data: str, layer_0_index: int, fan_list: str, t0_fan: str, t1_fan: str, t2_fan: str, t3_fan: str, fan_mode: bool, off_fan_speed: str)->str: multi_fan_data = data layer_number = "0" @@ -737,7 +744,7 @@ class AddCoolingProfile(Script): multi_fan_data[-1] += "M106 S0 P1\nM106 S0 P0\n" return multi_fan_data - # Single fan by feature----------------------------------------------- + # Single fan by feature def _single_fan_by_feature(self, data: str, layer_0_index: int, the_start_layer: str, the_end_layer: str, the_end_is_enabled: str, fan_list: str, t0_fan: str, feature_speed_list: str, feature_name_list: str, feature_fan_combing: bool)->str: single_fan_data = data layer_number = "0" @@ -769,7 +776,7 @@ class AddCoolingProfile(Script): single_fan_data[l_index] = modified_data return single_fan_data - # Multi-fan by feature------------------------------------------------ + # Multi-fan by feature def _multi_fan_by_feature(self, data: str, layer_0_index: int, the_start_layer: str, the_end_layer: str, the_end_is_enabled: str, fan_list: str, t0_fan: str, t1_fan: str, t2_fan: str, t3_fan: str, feature_speed_list: str, feature_name_list: str, feature_fan_combing: bool, fan_mode: bool, off_fan_speed: str)->str: multi_fan_data = data layer_number = "0" @@ -812,7 +819,7 @@ class AddCoolingProfile(Script): if line == "T3": this_fan = t3_fan prev_fan = this_fan - # Start to make insertions------------------------------------- + # Start to make insertions for l_index in range(start_index+1,len(multi_fan_data)-1,1): layer = multi_fan_data[l_index] lines = layer.split("\n") @@ -930,7 +937,7 @@ class AddCoolingProfile(Script): if g0_index == -1: g0_index = lines.index(line) elif not line.startswith("G0 ") and not is_travel: - # Add additional 'NONMESH' lines to shut the fan off during long combing moves-------- + # Add additional 'NONMESH' lines to shut the fan off during long combing moves if g0_count > 5: if not is_travel: new_data.insert(g0_index + insert_index, ";MESH:NONMESH") @@ -952,6 +959,7 @@ class AddCoolingProfile(Script): # Control the chamber fan bv_start_layer = self.getSettingValueByKey("bv_fan_start_layer") - 1 bv_end_layer = self.getSettingValueByKey("bv_fan_end_layer") + bv_fan_nr = self.getSettingValueByKey("bv_fan_nr") if bv_end_layer != -1: bv_end_layer -= 1 # Get the PWM speed or if RepRap then the 0-1 speed @@ -962,18 +970,18 @@ class AddCoolingProfile(Script): # Turn the chamber fan on for index, layer in enumerate(bv_data): if ";LAYER:" + str(bv_start_layer) + "\n" in layer: - bv_data[index] = re.sub(f";LAYER:{bv_start_layer}", f";LAYER:{bv_start_layer}\nM106 S{bv_fan_speed} P{self.bv_fan_nr}",layer) + bv_data[index] = re.sub(f";LAYER:{bv_start_layer}", f";LAYER:{bv_start_layer}\nM106 S{bv_fan_speed} P{bv_fan_nr}",layer) break # Turn the chamber fan off if bv_end_layer == -1: - bv_data[len(bv_data)-2] += f"M106 S0 P{self.bv_fan_nr}\n" + bv_data[len(bv_data)-2] += f"M106 S0 P{bv_fan_nr}\n" else: for index, layer in enumerate(bv_data): if ";LAYER:" + str(bv_end_layer) + "\n" in layer: lines = layer.split("\n") for fdex, line in enumerate(lines): if ";TIME_ELAPSED:" in line: - lines[fdex] = f"M106 S0 P{self.bv_fan_nr}\n" + line + lines[fdex] = f"M106 S0 P{bv_fan_nr}\n" + line bv_data[index] = "\n".join(lines) break return bv_data \ No newline at end of file From a94f5e0f28f29d8589a76f7623ed7dcdb7ff9d2d Mon Sep 17 00:00:00 2001 From: HellAholic Date: Sat, 22 Mar 2025 17:53:48 +0100 Subject: [PATCH 22/84] Add space after # for the comments --- .../scripts/AddCoolingProfile.py | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/plugins/PostProcessingPlugin/scripts/AddCoolingProfile.py b/plugins/PostProcessingPlugin/scripts/AddCoolingProfile.py index e30e83b653..bbf90b764c 100644 --- a/plugins/PostProcessingPlugin/scripts/AddCoolingProfile.py +++ b/plugins/PostProcessingPlugin/scripts/AddCoolingProfile.py @@ -389,17 +389,17 @@ class AddCoolingProfile(Script): # Exit if the gcode has been previously post-processed. if ";POSTPROCESSED" in data[0]: return data - #Initialize variables that are buried in if statements. + # Initialize variables that are buried in if statements. self.global_stack = Application.getInstance().getGlobalContainerStack() t0_fan = " P0"; t1_fan = " P0"; t2_fan = " P0"; t3_fan = " P0"; is_multi_extr_print = True - #Get some information from Cura + # Get some information from Cura extruder = self.global_stack.extruderList extruder_count = self.global_stack.getProperty("machine_extruder_count", "value") - #This will be true when fan scale is 0-255pwm and false when it's RepRap 0-1 (Cura 5.x) + # This will be true when fan scale is 0-255pwm and false when it's RepRap 0-1 (Cura 5.x) fan_mode = True - #For 4.x versions that don't have the 0-1 option + # For 4.x versions that don't have the 0-1 option try: fan_mode = not bool(extruder[0].getProperty("machine_scale_fan_speed_zero_to_one", "value")) except: @@ -407,7 +407,7 @@ class AddCoolingProfile(Script): bed_adhesion = (extruder[0].getProperty("adhesion_type", "value")) print_sequence = str(self.global_stack.getProperty("print_sequence", "value")) - #Assign the fan numbers to the tools + # Assign the fan numbers to the tools if extruder_count == 1: is_multi_fan = False is_multi_extr_print = False @@ -417,7 +417,7 @@ class AddCoolingProfile(Script): # No P parameter if there is a single fan circuit t0_fan = "" - #Get the cooling fan numbers for each extruder if the printer has multiple extruders + # Get the cooling fan numbers for each extruder if the printer has multiple extruders elif extruder_count > 1: is_multi_fan = True t0_fan = " P" + str((extruder[0].getProperty("machine_extruder_cooling_fan_number", "value"))) @@ -426,13 +426,13 @@ class AddCoolingProfile(Script): if extruder_count > 2: t2_fan = " P" + str((extruder[2].getProperty("machine_extruder_cooling_fan_number", "value"))) if extruder_count > 3: t3_fan = " P" + str((extruder[3].getProperty("machine_extruder_cooling_fan_number", "value"))) - #Initialize the fan_list with defaults + # Initialize the fan_list with defaults fan_list = ["z"] * 16 for num in range(0,15,2): fan_list[num] = len(data) fan_list[num + 1] = "M106 S0" - #Assign the variable values if "By Layer" + # Assign the variable values if "By Layer" by_layer_or_feature = self.getSettingValueByKey("fan_layer_or_feature") if by_layer_or_feature == "by_layer": # By layer doesn't do any feature search so there is no need to look for combing moves @@ -653,11 +653,11 @@ class AddCoolingProfile(Script): if by_layer_or_feature == "by_layer" and is_multi_fan: return self._multi_fan_by_layer(data, layer_0_index, fan_list, t0_fan, t1_fan, t2_fan, t3_fan, fan_mode, off_fan_speed) - #Single Fan "By Feature" + # Single Fan "By Feature" if by_layer_or_feature == "by_feature" and (not is_multi_fan or not is_multi_extr_print): return self._single_fan_by_feature(data, layer_0_index, the_start_layer, the_end_layer, the_end_is_enabled, fan_list, t0_fan, feature_speed_list, feature_name_list, feature_fan_combing) - #Multi Fan "By Feature" + # Multi Fan "By Feature" if by_layer_or_feature == "by_feature" and is_multi_fan: return self._multi_fan_by_feature(data, layer_0_index, the_start_layer, the_end_layer, the_end_is_enabled, fan_list, t0_fan, t1_fan, t2_fan, t3_fan, feature_speed_list, feature_name_list, feature_fan_combing, fan_mode, off_fan_speed) @@ -871,7 +871,7 @@ class AddCoolingProfile(Script): multi_fan_data[-1] += "M106 S0 P1\nM106 S0 P0\n" return multi_fan_data - #Try to catch layer input errors, set the minimum speed to 12%, and put the strings together + # Try to catch layer input errors, set the minimum speed to 12%, and put the strings together def _layer_checker(self, fan_string: str, ty_pe: str, fan_mode: bool) -> str: fan_string_l = str(fan_string.split("/")[0]) try: From 99b198339ac3447ee5d419ab8b08a4ff40ce1159 Mon Sep 17 00:00:00 2001 From: GregValiant <64202104+GregValiant@users.noreply.github.com> Date: Sat, 22 Mar 2025 15:41:39 -0400 Subject: [PATCH 23/84] Update AddCoolingProfile.py Update per requested changes. Comments are consistent with "# ". global_stack, extruder_list, extruder_count are assigned to "self". --- .../scripts/AddCoolingProfile.py | 60 +++++++++---------- 1 file changed, 27 insertions(+), 33 deletions(-) diff --git a/plugins/PostProcessingPlugin/scripts/AddCoolingProfile.py b/plugins/PostProcessingPlugin/scripts/AddCoolingProfile.py index bbf90b764c..6e43e98969 100644 --- a/plugins/PostProcessingPlugin/scripts/AddCoolingProfile.py +++ b/plugins/PostProcessingPlugin/scripts/AddCoolingProfile.py @@ -14,8 +14,7 @@ Designed in January 2023 by GregValiant (Greg Foresi) 12/15/23 (GV) Split off 'Single Fan By Layer', 'Multi-fan By Layer', 'Single Fan By Feature', and 'Multi-fan By Feature' from the main 'execute' script. 01/05/24 (GV) Revised the regex replacements. 12/11/24 (GV) Added 'off_fan_speed' for the idle nozzle layer cooling fan. It does not have to go to 0%. - 01/01/25 (GV) Added 'Build Volume' fan control - 03/15/25 (GV) Added 'Chamber Cooling Fan' control + 03/22/25 (GV) Added 'Chamber Cooling Fan / Auxiliary Fan' control. """ from ..Script import Script @@ -370,19 +369,19 @@ class AddCoolingProfile(Script): def initialize(self) -> None: super().initialize() - global_stack = Application.getInstance().getGlobalContainerStack() - extruder = global_stack.extruderList - extruder_count = global_stack.getProperty("machine_extruder_count", "value") - scripts = global_stack.getMetaDataEntry("post_processing_scripts") + self.global_stack = Application.getInstance().getGlobalContainerStack() + self.extruder_list = self.global_stack.extruderList + self.extruder_count = self.global_stack.getProperty("machine_extruder_count", "value") + scripts = self.global_stack.getMetaDataEntry("post_processing_scripts") if scripts != None: script_count = scripts.count("AddCoolingProfile") if script_count > 0: # Set 'Remove M106 lines' to "false" if there is already an instance of this script running. self._instance.setProperty("delete_existing_m106", "value", False) - if extruder_count > 1: - if extruder[0].getProperty("machine_extruder_cooling_fan_number", "value") != extruder[1].getProperty("machine_extruder_cooling_fan_number", "value"): + if self.extruder_count > 1: + if self.extruder_list[0].getProperty("machine_extruder_cooling_fan_number", "value") != self.extruder_list[1].getProperty("machine_extruder_cooling_fan_number", "value"): self._instance.setProperty("enable_off_fan_speed_enable", "value", True) - if bool(global_stack.getProperty("machine_heated_bed", "value")): + if bool(self.global_stack.getProperty("machine_heated_bed", "value")): self._instance.setProperty("enable_bv_fan", "value", True) def execute(self, data): @@ -390,41 +389,36 @@ class AddCoolingProfile(Script): if ";POSTPROCESSED" in data[0]: return data # Initialize variables that are buried in if statements. - self.global_stack = Application.getInstance().getGlobalContainerStack() t0_fan = " P0"; t1_fan = " P0"; t2_fan = " P0"; t3_fan = " P0"; is_multi_extr_print = True - # Get some information from Cura - extruder = self.global_stack.extruderList - extruder_count = self.global_stack.getProperty("machine_extruder_count", "value") - # This will be true when fan scale is 0-255pwm and false when it's RepRap 0-1 (Cura 5.x) fan_mode = True # For 4.x versions that don't have the 0-1 option try: - fan_mode = not bool(extruder[0].getProperty("machine_scale_fan_speed_zero_to_one", "value")) + fan_mode = not bool(self.extruder_list[0].getProperty("machine_scale_fan_speed_zero_to_one", "value")) except: pass - bed_adhesion = (extruder[0].getProperty("adhesion_type", "value")) + bed_adhesion = (self.extruder_list[0].getProperty("adhesion_type", "value")) print_sequence = str(self.global_stack.getProperty("print_sequence", "value")) # Assign the fan numbers to the tools - if extruder_count == 1: + if self.extruder_count == 1: is_multi_fan = False is_multi_extr_print = False - if int((extruder[0].getProperty("machine_extruder_cooling_fan_number", "value"))) > 0: - t0_fan = " P" + str((extruder[0].getProperty("machine_extruder_cooling_fan_number", "value"))) + if int((self.extruder_list[0].getProperty("machine_extruder_cooling_fan_number", "value"))) > 0: + t0_fan = " P" + str((self.extruder_list[0].getProperty("machine_extruder_cooling_fan_number", "value"))) else: # No P parameter if there is a single fan circuit t0_fan = "" # Get the cooling fan numbers for each extruder if the printer has multiple extruders - elif extruder_count > 1: + elif self.extruder_count > 1: is_multi_fan = True - t0_fan = " P" + str((extruder[0].getProperty("machine_extruder_cooling_fan_number", "value"))) + t0_fan = " P" + str((self.extruder_list[0].getProperty("machine_extruder_cooling_fan_number", "value"))) if is_multi_fan: - if extruder_count > 1: t1_fan = " P" + str((extruder[1].getProperty("machine_extruder_cooling_fan_number", "value"))) - if extruder_count > 2: t2_fan = " P" + str((extruder[2].getProperty("machine_extruder_cooling_fan_number", "value"))) - if extruder_count > 3: t3_fan = " P" + str((extruder[3].getProperty("machine_extruder_cooling_fan_number", "value"))) + if self.extruder_count > 1: t1_fan = " P" + str((self.extruder_list[1].getProperty("machine_extruder_cooling_fan_number", "value"))) + if self.extruder_count > 2: t2_fan = " P" + str((self.extruder_list[2].getProperty("machine_extruder_cooling_fan_number", "value"))) + if self.extruder_count > 3: t3_fan = " P" + str((self.extruder_list[3].getProperty("machine_extruder_cooling_fan_number", "value"))) # Initialize the fan_list with defaults fan_list = ["z"] * 16 @@ -488,7 +482,7 @@ class AddCoolingProfile(Script): # For multi-extruder printers with separate fans the 'idle' nozzle fan can be left on for ooze control off_fan_speed = 0 - if extruder_count > 1: + if self.extruder_count > 1: if self.getSettingValueByKey("enable_off_fan_speed"): if fan_mode: off_fan_speed = round(int(self.getSettingValueByKey("off_fan_speed")) * 2.55) @@ -629,9 +623,9 @@ class AddCoolingProfile(Script): temp_startup.insert(len(temp_startup)-2,"M106 S0" + str(t0_fan)) # If there are multiple cooling fans shut them all off if is_multi_fan: - if extruder_count > 1 and t1_fan != t0_fan: temp_startup.insert(len(temp_startup)-2,"M106 S0" + str(t1_fan)) - if extruder_count > 2 and t2_fan != t1_fan and t2_fan != t0_fan: temp_startup.insert(len(temp_startup)-2,"M106 S0" + str(t2_fan)) - if extruder_count > 3 and t3_fan != t2_fan and t3_fan != t1_fan and t3_fan != t0_fan: temp_startup.insert(len(temp_startup)-2,"M106 S0" + str(t3_fan)) + if self.extruder_count > 1 and t1_fan != t0_fan: temp_startup.insert(len(temp_startup)-2,"M106 S0" + str(t1_fan)) + if self.extruder_count > 2 and t2_fan != t1_fan and t2_fan != t0_fan: temp_startup.insert(len(temp_startup)-2,"M106 S0" + str(t2_fan)) + if self.extruder_count > 3 and t3_fan != t2_fan and t3_fan != t1_fan and t3_fan != t0_fan: temp_startup.insert(len(temp_startup)-2,"M106 S0" + str(t3_fan)) data[1] = "\n".join(temp_startup) # If 'feature_fan_combing' is True then add additional 'MESH:NONMESH' lines for travel moves over 5 lines long @@ -740,7 +734,7 @@ class AddCoolingProfile(Script): if modified_data.endswith("\n"): modified_data = modified_data[0:-1] multi_fan_data[l_index] = modified_data # Insure the fans get shut off if 'off_fan_speed' was enabled - if self.global_stack.getProperty("machine_extruder_count", "value") > 1 and self.getSettingValueByKey("enable_off_fan_speed"): + if self.extruder_count > 1 and self.getSettingValueByKey("enable_off_fan_speed"): multi_fan_data[-1] += "M106 S0 P1\nM106 S0 P0\n" return multi_fan_data @@ -867,7 +861,7 @@ class AddCoolingProfile(Script): multi_fan_data[l_index] = modified_data modified_data = "" # Insure the fans get shut off if 'off_fan_speed' was enabled - if self.global_stack.getProperty("machine_extruder_count", "value") > 1 and self.getSettingValueByKey("enable_off_fan_speed"): + if self.extruder_count > 1 and self.getSettingValueByKey("enable_off_fan_speed"): multi_fan_data[-1] += "M106 S0 P1\nM106 S0 P0\n" return multi_fan_data @@ -963,13 +957,13 @@ class AddCoolingProfile(Script): if bv_end_layer != -1: bv_end_layer -= 1 # Get the PWM speed or if RepRap then the 0-1 speed - if self.global_stack.extruderList[0].getProperty("machine_scale_fan_speed_zero_to_one", "value"): + if self.extruder_list[0].getProperty("machine_scale_fan_speed_zero_to_one", "value"): bv_fan_speed = round(self.getSettingValueByKey("bv_fan_speed") * .01, 1) else: bv_fan_speed = int(self.getSettingValueByKey("bv_fan_speed") * 2.55) # Turn the chamber fan on for index, layer in enumerate(bv_data): - if ";LAYER:" + str(bv_start_layer) + "\n" in layer: + if f";LAYER:{bv_start_layer}\n" in layer: bv_data[index] = re.sub(f";LAYER:{bv_start_layer}", f";LAYER:{bv_start_layer}\nM106 S{bv_fan_speed} P{bv_fan_nr}",layer) break # Turn the chamber fan off @@ -977,7 +971,7 @@ class AddCoolingProfile(Script): bv_data[len(bv_data)-2] += f"M106 S0 P{bv_fan_nr}\n" else: for index, layer in enumerate(bv_data): - if ";LAYER:" + str(bv_end_layer) + "\n" in layer: + if f";LAYER:{bv_end_layer}\n" in layer: lines = layer.split("\n") for fdex, line in enumerate(lines): if ";TIME_ELAPSED:" in line: From c91862f4bb9d894d28fa517b81e30ab08fd5d8ef Mon Sep 17 00:00:00 2001 From: HellAholic Date: Tue, 25 Mar 2025 20:33:01 +0100 Subject: [PATCH 24/84] Make the conversion to uppercase optional - Add the option type bool - Set to be enabled by default - Add condition to only convert if bool value is true --- .../scripts/InsertAtLayerChange.py | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/plugins/PostProcessingPlugin/scripts/InsertAtLayerChange.py b/plugins/PostProcessingPlugin/scripts/InsertAtLayerChange.py index ea783b08d8..cec857a8af 100644 --- a/plugins/PostProcessingPlugin/scripts/InsertAtLayerChange.py +++ b/plugins/PostProcessingPlugin/scripts/InsertAtLayerChange.py @@ -1,6 +1,7 @@ # Copyright (c) 2020 Ultimaker B.V. # Created by Wayne Porter # Re-write in April of 2024 by GregValiant (Greg Foresi) +# Made convert inserted text to upper-case optional March 2025 by HellAholic # Changes: # Added an 'Enable' setting # Added support for multi-line insertions (comma delimited) @@ -82,6 +83,14 @@ class InsertAtLayerChange(Script): "type": "str", "default_value": "", "enabled": "enabled" + }, + "convert_to_upper": + { + "label": "Convert to upper-case", + "description": "Convert all inserted text to upper-case as some firmwares don't understand lower-case.", + "type": "bool", + "default_value": true, + "enabled": "enabled" } } }""" @@ -91,7 +100,7 @@ class InsertAtLayerChange(Script): if not bool(self.getSettingValueByKey("enabled")): return data #Initialize variables - mycode = self.getSettingValueByKey("gcode_to_add").upper() + mycode = self.getSettingValueByKey("gcode_to_add").upper() if bool(self.getSettingValueByKey("convert_to_upper")) else self.getSettingValueByKey("gcode_to_add") start_layer = int(self.getSettingValueByKey("start_layer")) end_layer = int(self.getSettingValueByKey("end_layer")) when_to_insert = self.getSettingValueByKey("insert_frequency") From 1045dc976059f2c4a83103f33240d3e631083d11 Mon Sep 17 00:00:00 2001 From: Frederic Meeuwissen <13856291+Frederic98@users.noreply.github.com> Date: Mon, 31 Mar 2025 12:59:43 +0200 Subject: [PATCH 25/84] Add machine_nozzle_size to variants --- resources/variants/ultimaker_s3_aa04.inst.cfg | 1 + resources/variants/ultimaker_s3_bb04.inst.cfg | 1 + resources/variants/ultimaker_s5_aa04.inst.cfg | 1 + resources/variants/ultimaker_s5_bb04.inst.cfg | 1 + resources/variants/ultimaker_s7_aa04.inst.cfg | 1 + resources/variants/ultimaker_s7_bb04.inst.cfg | 1 + resources/variants/ultimaker_s8_bb04.inst.cfg | 1 + 7 files changed, 7 insertions(+) diff --git a/resources/variants/ultimaker_s3_aa04.inst.cfg b/resources/variants/ultimaker_s3_aa04.inst.cfg index 94d27e150b..e3f4aaff2b 100644 --- a/resources/variants/ultimaker_s3_aa04.inst.cfg +++ b/resources/variants/ultimaker_s3_aa04.inst.cfg @@ -12,6 +12,7 @@ type = variant brim_width = 7 machine_nozzle_cool_down_speed = 0.9 machine_nozzle_id = AA 0.4 +machine_nozzle_size = 0.4 machine_nozzle_tip_outer_diameter = 1.0 retraction_amount = 6.5 speed_print = 70 diff --git a/resources/variants/ultimaker_s3_bb04.inst.cfg b/resources/variants/ultimaker_s3_bb04.inst.cfg index 022b4f945c..7923a5a28e 100644 --- a/resources/variants/ultimaker_s3_bb04.inst.cfg +++ b/resources/variants/ultimaker_s3_bb04.inst.cfg @@ -15,6 +15,7 @@ acceleration_support_bottom = =math.ceil(acceleration_support_interface * 100 / acceleration_support_interface = =math.ceil(acceleration_support * 1500 / 2000) machine_nozzle_heat_up_speed = 1.5 machine_nozzle_id = BB 0.4 +machine_nozzle_size = 0.4 machine_nozzle_tip_outer_diameter = 1.0 speed_prime_tower = =math.ceil(speed_print * 10 / 35) speed_support = =math.ceil(speed_print * 25 / 35) diff --git a/resources/variants/ultimaker_s5_aa04.inst.cfg b/resources/variants/ultimaker_s5_aa04.inst.cfg index ef846a089d..69aae0757e 100644 --- a/resources/variants/ultimaker_s5_aa04.inst.cfg +++ b/resources/variants/ultimaker_s5_aa04.inst.cfg @@ -12,6 +12,7 @@ type = variant brim_width = 7 machine_nozzle_cool_down_speed = 0.9 machine_nozzle_id = AA 0.4 +machine_nozzle_size = 0.4 machine_nozzle_tip_outer_diameter = 1.0 retraction_amount = 6.5 speed_print = 70 diff --git a/resources/variants/ultimaker_s5_bb04.inst.cfg b/resources/variants/ultimaker_s5_bb04.inst.cfg index ce287e127b..294b39b8c7 100644 --- a/resources/variants/ultimaker_s5_bb04.inst.cfg +++ b/resources/variants/ultimaker_s5_bb04.inst.cfg @@ -15,6 +15,7 @@ acceleration_support_bottom = =math.ceil(acceleration_support_interface * 100 / acceleration_support_interface = =math.ceil(acceleration_support * 1500 / 2000) machine_nozzle_heat_up_speed = 1.5 machine_nozzle_id = BB 0.4 +machine_nozzle_size = 0.4 machine_nozzle_tip_outer_diameter = 1.0 speed_prime_tower = =math.ceil(speed_print * 10 / 35) speed_support = =math.ceil(speed_print * 25 / 35) diff --git a/resources/variants/ultimaker_s7_aa04.inst.cfg b/resources/variants/ultimaker_s7_aa04.inst.cfg index 7d5a08d117..ee4ebdceaf 100644 --- a/resources/variants/ultimaker_s7_aa04.inst.cfg +++ b/resources/variants/ultimaker_s7_aa04.inst.cfg @@ -12,6 +12,7 @@ type = variant brim_width = 7 machine_nozzle_cool_down_speed = 0.9 machine_nozzle_id = AA 0.4 +machine_nozzle_size = 0.4 machine_nozzle_tip_outer_diameter = 1.0 retraction_amount = 6.5 speed_print = 70 diff --git a/resources/variants/ultimaker_s7_bb04.inst.cfg b/resources/variants/ultimaker_s7_bb04.inst.cfg index 1bfa216167..18aa61ff4b 100644 --- a/resources/variants/ultimaker_s7_bb04.inst.cfg +++ b/resources/variants/ultimaker_s7_bb04.inst.cfg @@ -15,6 +15,7 @@ acceleration_support_bottom = =math.ceil(acceleration_support_interface * 100 / acceleration_support_interface = =math.ceil(acceleration_support * 1500 / 2000) machine_nozzle_heat_up_speed = 1.5 machine_nozzle_id = BB 0.4 +machine_nozzle_size = 0.4 machine_nozzle_tip_outer_diameter = 1.0 retraction_amount = 4.5 speed_prime_tower = =math.ceil(speed_print * 10 / 35) diff --git a/resources/variants/ultimaker_s8_bb04.inst.cfg b/resources/variants/ultimaker_s8_bb04.inst.cfg index 388ce27ec2..d92874e448 100644 --- a/resources/variants/ultimaker_s8_bb04.inst.cfg +++ b/resources/variants/ultimaker_s8_bb04.inst.cfg @@ -11,6 +11,7 @@ type = variant [values] machine_nozzle_heat_up_speed = 1.5 machine_nozzle_id = BB 0.4 +machine_nozzle_size = 0.4 machine_nozzle_tip_outer_diameter = 1.0 retraction_amount = 4.5 support_bottom_height = =layer_height * 2 From 03aa64448a5a410b040e8fb550cf4e22abf0ff0f Mon Sep 17 00:00:00 2001 From: GregValiant <64202104+GregValiant@users.noreply.github.com> Date: Sun, 30 Mar 2025 18:28:58 -0400 Subject: [PATCH 26/84] Update AddCoolingProfile.py Update AddCoolingProfile.py Un-trapped ValueError in line 782. It might also be an IndexError. I left it open. Update AddCoolingProfile.py Change an IndexError to a ValueError --- .../scripts/AddCoolingProfile.py | 59 ++++++++++++++----- 1 file changed, 44 insertions(+), 15 deletions(-) diff --git a/plugins/PostProcessingPlugin/scripts/AddCoolingProfile.py b/plugins/PostProcessingPlugin/scripts/AddCoolingProfile.py index 6e43e98969..64678189ab 100644 --- a/plugins/PostProcessingPlugin/scripts/AddCoolingProfile.py +++ b/plugins/PostProcessingPlugin/scripts/AddCoolingProfile.py @@ -286,7 +286,7 @@ class AddCoolingProfile(Script): "description": "For machines with independent layer cooling fans. Leaving a fan running while the other nozzle is printing can help with oozing. You can pick the speed % for the idle nozzle layer cooling fan to hold at.", "type": "bool", "default_value": false, - "enabled": "enable_off_fan_speed_enable" + "enabled": "enable_off_fan_speed_enable and self.extruder_count > 1" }, "off_fan_speed": { @@ -297,7 +297,7 @@ class AddCoolingProfile(Script): "minimum_value": 0, "maximum_value": 100, "unit": "% ", - "enabled": "enable_off_fan_speed_enable and enable_off_fan_speed" + "enabled": "enable_off_fan_speed_enable and enable_off_fan_speed and self.extruder_count > 1" }, "enable_off_fan_speed_enable": { @@ -378,13 +378,35 @@ class AddCoolingProfile(Script): if script_count > 0: # Set 'Remove M106 lines' to "false" if there is already an instance of this script running. self._instance.setProperty("delete_existing_m106", "value", False) + self._instance.setProperty("enable_off_fan_speed_enable", "value", False) if self.extruder_count > 1: if self.extruder_list[0].getProperty("machine_extruder_cooling_fan_number", "value") != self.extruder_list[1].getProperty("machine_extruder_cooling_fan_number", "value"): - self._instance.setProperty("enable_off_fan_speed_enable", "value", True) + self._instance.setProperty("enable_off_fan_speed_enable", "value", True) if bool(self.global_stack.getProperty("machine_heated_bed", "value")): self._instance.setProperty("enable_bv_fan", "value", True) - + def execute(self, data): + """ + Collect the settings from Cura and from this script + params: + t0_fan thru t3_fan: The fan numbers for up to 4 layer cooling circuits + fan_mode: Whether the fan scale will be 0-255 PWM (when true) or 0-1 RepRap (when false) + bed_adhesion: Is only important if a raft is enabled + print_seuence: Options are slightly different if in One-at-a-Time mode + is_multi-fan: Used to distinguish between a multi-extruder with a single fan for each nozzle, or one fan for both nozzles. + is_multi_extr_print: For the slight difference in handling a multi-extruder printer and a print that only uses one of the extruders. + fan_list: A list of fan speeds (even numbered items) and layer numbers (odd numbered items) + feature_speed_list: A list of the speeds for each ';TYPE:' in the gcode + feature_name_list: The list of each 'TYPE' in the gcode + off_fan_speed: The speed that will be maintained by the fan for the inactive extruder (for an anti-oozing effect) + init_fan: The fan number of the first extruder used in a print + delete_existing_m106: The first instance of the script in the post processing list should remove the CUra M106 lines. Following instances should not delete the changes made by the first instance. + feature_fan_combing: Whether or not to shut the cooling fan off during travel moves. + the_start_layer: When in By Feature this is the user selected start of the fan changes. + the_end_layer: When in By Feature this is the user selected end of the fan changes + the_end_is_enabled: When in By Feature, if the fan control ends before the print ends, then this will enable the Final Fan Speed to carry through to the print end. + + """ # Exit if the gcode has been previously post-processed. if ";POSTPROCESSED" in data[0]: return data @@ -396,8 +418,9 @@ class AddCoolingProfile(Script): # For 4.x versions that don't have the 0-1 option try: fan_mode = not bool(self.extruder_list[0].getProperty("machine_scale_fan_speed_zero_to_one", "value")) - except: + except AttributeError: pass + bed_adhesion = (self.extruder_list[0].getProperty("adhesion_type", "value")) print_sequence = str(self.global_stack.getProperty("print_sequence", "value")) @@ -454,7 +477,7 @@ class AddCoolingProfile(Script): # Catch a possible input error. if the_end_layer < the_start_layer: the_end_layer = the_start_layer - except: + except ValueError: the_end_layer = -1 # If there is an input error then default to the entire gcode file. # Get the speed for each feature @@ -480,7 +503,7 @@ class AddCoolingProfile(Script): if the_end_layer == -1 or the_end_is_enabled == False: the_end_layer = len(data) + 2 - # For multi-extruder printers with separate fans the 'idle' nozzle fan can be left on for ooze control + # For multi-extruder printers with separate cooling fans the 'idle' nozzle fan can be left on for ooze control off_fan_speed = 0 if self.extruder_count > 1: if self.getSettingValueByKey("enable_off_fan_speed"): @@ -494,7 +517,7 @@ class AddCoolingProfile(Script): number_of_raft_layers = 0 layer_0_index = 0 # Catch the number of raft layers. - for l_num in range(1,10,1): + for l_num in range(1,len(data) - 1): layer = data[l_num] if ";LAYER:-" in layer: number_of_raft_layers += 1 @@ -511,7 +534,7 @@ class AddCoolingProfile(Script): T2_used = False T3_used = False # Bypass the file header and ending gcode. - for num in range(1,len(data)-1,1): + for num in range(1,len(data)-1): lines = data[num] if "T0" in lines: T0_used = True @@ -635,10 +658,10 @@ class AddCoolingProfile(Script): layer = data[layer_num] data[layer_num] = re.sub(";MESH:NOMESH", ";MESH:NONMESH", layer) data = self._add_travel_comment(data, layer_0_index) - + if bool(self.getSettingValueByKey("bv_fan_speed_control_enable")): data = self._control_bv_fan(data) - + # Single Fan "By Layer" if by_layer_or_feature == "by_layer" and not is_multi_fan: return self._single_fan_by_layer(data, layer_0_index, fan_list, t0_fan) @@ -681,11 +704,12 @@ class AddCoolingProfile(Script): this_fan = str(t0_fan) start_index = str(len(multi_fan_data)) for num in range(0,15,2): + # The fan_list may not be in ascending order. Get the lowest layer number try: if int(fan_list[num]) < int(start_index): start_index = str(fan_list[num]) - except: + except ValueError: pass # Move the start point if delete_existing_m106 is false start_index = int(start_index) + int(layer_0_index) @@ -706,12 +730,13 @@ class AddCoolingProfile(Script): elif line == "T3": prev_fan = this_fan this_fan = t3_fan + # With Active Tool tracked - now the body of changes can start for l_index in range(int(start_index),len(multi_fan_data)-1,1): modified_data = "" layer = multi_fan_data[l_index] fan_lines = layer.split("\n") for fan_line in fan_lines: - # Prepare to shut down the previous fan and start the next one. + # Prepare to turn off the previous fan and start the next one. if fan_line.startswith("T"): if fan_line == "T0": this_fan = str(t0_fan) if fan_line == "T1": this_fan = str(t1_fan) @@ -751,6 +776,7 @@ class AddCoolingProfile(Script): for line in lines: if ";LAYER:" in line: layer_number = str(line.split(":")[1]) + continue if int(layer_number) >= int(the_start_layer) and int(layer_number) < int(the_end_layer)-1: temp = line.split(" ")[0] try: @@ -836,8 +862,9 @@ class AddCoolingProfile(Script): temp = line.split(" ")[0] try: name_index = feature_name_list.index(temp) - except: + except IndexError: name_index = -1 + if name_index != -1: modified_data += line + "\n" + feature_speed_list[name_index] + this_fan + "\n" current_fan_speed = str(feature_speed_list[name_index].split("S")[1]) @@ -848,6 +875,7 @@ class AddCoolingProfile(Script): current_fan_speed = "0" else: modified_data += line + "\n" + # If an end layer is defined - Insert the final speed and set the other variables to Final Speed to finish the file # There cannot be a 'break' here because if there are multiple fan numbers they still need to be shut off and turned on. elif line == ";LAYER:" + str(the_end_layer): @@ -857,6 +885,7 @@ class AddCoolingProfile(Script): else: # Layer and Tool get inserted into modified_data above. All other lines go into modified_data here if not line.startswith("T") and not line.startswith(";LAYER:"): modified_data += line + "\n" + if modified_data.endswith("\n"): modified_data = modified_data[0: - 1] multi_fan_data[l_index] = modified_data modified_data = "" @@ -950,7 +979,7 @@ class AddCoolingProfile(Script): return comment_data def _control_bv_fan(self, bv_data: str) -> str: - # Control the chamber fan + # Control any secondary fan. Can be used for an Auxilliary/Chamber fan bv_start_layer = self.getSettingValueByKey("bv_fan_start_layer") - 1 bv_end_layer = self.getSettingValueByKey("bv_fan_end_layer") bv_fan_nr = self.getSettingValueByKey("bv_fan_nr") From 1e18e0e63d7a305a4d795955e2d90577e708f0b7 Mon Sep 17 00:00:00 2001 From: GregValiant <64202104+GregValiant@users.noreply.github.com> Date: Wed, 16 Apr 2025 09:22:30 -0400 Subject: [PATCH 27/84] Update AddCoolingProfile.py Found a bug. The ";LAYER:" line was not being added to the "modified data" string when in "single_fan_by_feature" mode. Update AddCoolingProfile.py bug fix for the bug fix. --- plugins/PostProcessingPlugin/scripts/AddCoolingProfile.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/PostProcessingPlugin/scripts/AddCoolingProfile.py b/plugins/PostProcessingPlugin/scripts/AddCoolingProfile.py index 64678189ab..b046a77c2f 100644 --- a/plugins/PostProcessingPlugin/scripts/AddCoolingProfile.py +++ b/plugins/PostProcessingPlugin/scripts/AddCoolingProfile.py @@ -776,7 +776,6 @@ class AddCoolingProfile(Script): for line in lines: if ";LAYER:" in line: layer_number = str(line.split(":")[1]) - continue if int(layer_number) >= int(the_start_layer) and int(layer_number) < int(the_end_layer)-1: temp = line.split(" ")[0] try: @@ -789,6 +788,7 @@ class AddCoolingProfile(Script): if feature_fan_combing == True: modified_data += "M106 S0" + t0_fan + "\n" modified_data += line + "\n" + # If an End Layer is defined and is less than the last layer then insert the Final Speed if line == ";LAYER:" + str(the_end_layer) and the_end_is_enabled == True: modified_data += feature_speed_list[len(feature_speed_list) - 1] + t0_fan + "\n" From d980b5ae2e3fcb424137591ed3627ff093016d15 Mon Sep 17 00:00:00 2001 From: Luke Brewer <79376204+lukbrew25@users.noreply.github.com> Date: Tue, 22 Apr 2025 10:36:24 -0500 Subject: [PATCH 28/84] Add support for Toybox Alpha One --- .../definitions/toybox_alpha_one.def.json | 25 +++++++++++++++++++ .../toybox_alpha_one_extruder_0.def.json | 16 ++++++++++++ 2 files changed, 41 insertions(+) create mode 100644 resources/definitions/toybox_alpha_one.def.json create mode 100644 resources/extruders/toybox_alpha_one_extruder_0.def.json diff --git a/resources/definitions/toybox_alpha_one.def.json b/resources/definitions/toybox_alpha_one.def.json new file mode 100644 index 0000000000..a2d83c5f10 --- /dev/null +++ b/resources/definitions/toybox_alpha_one.def.json @@ -0,0 +1,25 @@ +{ + "version": 2, + "name": "Toybox Alpha One", + "inherits": "fdmprinter", + "metadata": + { + "visible": true, + "author": "lukbrew25", + "manufacturer": "Toybox", + "file_formats": "text/x-gcode", + "has_machine_quality": false, + "machine_extruder_trains": { "0": "toybox_alpha_one_extruder_0" } + }, + "overrides": + { + "gantry_height": { "value": "0.0" }, + "machine_depth": { "default_value": 80 }, + "machine_gcode_flavor": { "default_value": "RepRap (Marlin/Sprinter)" }, + "machine_height": { "default_value": 90 }, + "machine_name": { "default_value": "Toybox Alpha One" }, + "machine_start_gcode": { "default_value": "G90\nM82" }, + "machine_width": { "default_value": 70 }, + "material_diameter": { "default_value": 1.75 } + } +} \ No newline at end of file diff --git a/resources/extruders/toybox_alpha_one_extruder_0.def.json b/resources/extruders/toybox_alpha_one_extruder_0.def.json new file mode 100644 index 0000000000..a2787d0ed3 --- /dev/null +++ b/resources/extruders/toybox_alpha_one_extruder_0.def.json @@ -0,0 +1,16 @@ +{ + "version": 2, + "name": "Extruder 1", + "inherits": "fdmextruder", + "metadata": + { + "machine": "toybox_alpha_one", + "position": "0" + }, + "overrides": + { + "machine_nozzle_size": { "default_value": 0.4 }, + "material_diameter": { "default_value": 1.75 }, + "machine_nozzle_offset_x": { "default_value": -3.0 } + } +} \ No newline at end of file From 7ec0fa89ac955cc45ce3014a825bb6637837bbef Mon Sep 17 00:00:00 2001 From: Luke Brewer <79376204+lukbrew25@users.noreply.github.com> Date: Wed, 23 Apr 2025 10:02:46 -0500 Subject: [PATCH 29/84] Add Alpha 2 to name as both Alpha 1 and 2 are supported by this profile --- ...box_alpha_one.def.json => toybox_alpha_one_two.def.json} | 6 +++--- ..._0.def.json => toybox_alpha_one_two_extruder_0.def.json} | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) rename resources/definitions/{toybox_alpha_one.def.json => toybox_alpha_one_two.def.json} (78%) rename resources/extruders/{toybox_alpha_one_extruder_0.def.json => toybox_alpha_one_two_extruder_0.def.json} (88%) diff --git a/resources/definitions/toybox_alpha_one.def.json b/resources/definitions/toybox_alpha_one_two.def.json similarity index 78% rename from resources/definitions/toybox_alpha_one.def.json rename to resources/definitions/toybox_alpha_one_two.def.json index a2d83c5f10..6dc32a5fa7 100644 --- a/resources/definitions/toybox_alpha_one.def.json +++ b/resources/definitions/toybox_alpha_one_two.def.json @@ -1,6 +1,6 @@ { "version": 2, - "name": "Toybox Alpha One", + "name": "Toybox Alpha One/Two", "inherits": "fdmprinter", "metadata": { @@ -9,7 +9,7 @@ "manufacturer": "Toybox", "file_formats": "text/x-gcode", "has_machine_quality": false, - "machine_extruder_trains": { "0": "toybox_alpha_one_extruder_0" } + "machine_extruder_trains": { "0": "toybox_alpha_one_two_extruder_0" } }, "overrides": { @@ -17,7 +17,7 @@ "machine_depth": { "default_value": 80 }, "machine_gcode_flavor": { "default_value": "RepRap (Marlin/Sprinter)" }, "machine_height": { "default_value": 90 }, - "machine_name": { "default_value": "Toybox Alpha One" }, + "machine_name": { "default_value": "Toybox Alpha One/Two" }, "machine_start_gcode": { "default_value": "G90\nM82" }, "machine_width": { "default_value": 70 }, "material_diameter": { "default_value": 1.75 } diff --git a/resources/extruders/toybox_alpha_one_extruder_0.def.json b/resources/extruders/toybox_alpha_one_two_extruder_0.def.json similarity index 88% rename from resources/extruders/toybox_alpha_one_extruder_0.def.json rename to resources/extruders/toybox_alpha_one_two_extruder_0.def.json index a2787d0ed3..1bc498f9fb 100644 --- a/resources/extruders/toybox_alpha_one_extruder_0.def.json +++ b/resources/extruders/toybox_alpha_one_two_extruder_0.def.json @@ -4,7 +4,7 @@ "inherits": "fdmextruder", "metadata": { - "machine": "toybox_alpha_one", + "machine": "toybox_alpha_one_two", "position": "0" }, "overrides": From 6f790a6ab65df5bc9ed8eeff80b37c88f2c005ac Mon Sep 17 00:00:00 2001 From: Luke Brewer <79376204+lukbrew25@users.noreply.github.com> Date: Wed, 23 Apr 2025 19:46:27 -0500 Subject: [PATCH 30/84] Add extruder_nr to extruder def.json --- resources/extruders/toybox_alpha_one_two_extruder_0.def.json | 1 + 1 file changed, 1 insertion(+) diff --git a/resources/extruders/toybox_alpha_one_two_extruder_0.def.json b/resources/extruders/toybox_alpha_one_two_extruder_0.def.json index 1bc498f9fb..cb39ebf85b 100644 --- a/resources/extruders/toybox_alpha_one_two_extruder_0.def.json +++ b/resources/extruders/toybox_alpha_one_two_extruder_0.def.json @@ -9,6 +9,7 @@ }, "overrides": { + "extruder_nr": { "default_value": 0 }, "machine_nozzle_size": { "default_value": 0.4 }, "material_diameter": { "default_value": 1.75 }, "machine_nozzle_offset_x": { "default_value": -3.0 } From b0f175bd5a4eca4b81a13949e58d666886c4a450 Mon Sep 17 00:00:00 2001 From: Remco Burema Date: Tue, 13 May 2025 08:29:30 +0200 Subject: [PATCH 31/84] Add missing error-handling. There was error handling for the url-request, but not for handling the subsequent resolution. --- cura/CuraApplication.py | 57 ++++++++++++++++++++++------------------- 1 file changed, 30 insertions(+), 27 deletions(-) diff --git a/cura/CuraApplication.py b/cura/CuraApplication.py index 87657af5f5..8af98c2d0e 100755 --- a/cura/CuraApplication.py +++ b/cura/CuraApplication.py @@ -1895,36 +1895,39 @@ class CuraApplication(QtApplication): query = QUrlQuery(url.query()) model_url = QUrl(query.queryItemValue("file", options=QUrl.ComponentFormattingOption.FullyDecoded)) - def on_finish(response): - content_disposition_header_key = QByteArray("content-disposition".encode()) - - filename = model_url.path().split("/")[-1] + ".stl" - - if response.hasRawHeader(content_disposition_header_key): - # content_disposition is in the format - # ``` - # content_disposition attachment; filename="[FILENAME]" - # ``` - # Use a regex to extract the filename - content_disposition = str(response.rawHeader(content_disposition_header_key).data(), - encoding='utf-8') - content_disposition_match = re.match(r'attachment; filename=(?P.*)', - content_disposition) - if content_disposition_match is not None: - filename = content_disposition_match.group("filename").strip("\"") - - tmp = tempfile.NamedTemporaryFile(suffix=filename, delete=False) - with open(tmp.name, "wb") as f: - f.write(response.readAll()) - - self.readLocalFile(QUrl.fromLocalFile(tmp.name), add_to_recent_files=False) - def on_error(*args, **kwargs): - Logger.log("w", "Could not download file from {0}".format(model_url.url())) - Message("Could not download file: " + str(model_url.url()), + Logger.warning(f"Could not download file from {model_url.url()}") + Message(f"Could not download file: {str(model_url.url())}", title= "Loading Model failed", message_type=Message.MessageType.ERROR).show() - return + + def on_finish(response): + try: + content_disposition_header_key = QByteArray("content-disposition".encode()) + + filename = model_url.path().split("/")[-1] + ".stl" + + if response.hasRawHeader(content_disposition_header_key): + # content_disposition is in the format + # ``` + # content_disposition attachment; filename="[FILENAME]" + # ``` + # Use a regex to extract the filename + content_disposition = str(response.rawHeader(content_disposition_header_key).data(), + encoding='utf-8') + content_disposition_match = re.match(r'attachment; filename=(?P.*)', + content_disposition) + if content_disposition_match is not None: + filename = content_disposition_match.group("filename").strip("\"") + + tmp = tempfile.NamedTemporaryFile(suffix=filename, delete=False) + with open(tmp.name, "wb") as f: + f.write(response.readAll()) + + self.readLocalFile(QUrl.fromLocalFile(tmp.name), add_to_recent_files=False) + except Exception as ex: + Logger.warning(f"Exception {str(ex)}") + on_error() self.getHttpRequestManager().get( model_url.url(), From 86777ac666dd75bfa9a9ade7a3cdf671f4ec72ed Mon Sep 17 00:00:00 2001 From: Erwan MATHIEU Date: Mon, 26 May 2025 11:52:53 +0200 Subject: [PATCH 32/84] Add new travel types and display z-hops CURA-11978 --- cura/LayerDataBuilder.py | 10 +- cura/LayerPolygon.py | 26 ++-- plugins/CuraEngineBackend/Cura.proto | 4 +- plugins/GCodeReader/FlavorParser.py | 17 ++- plugins/SimulationView/SimulationPass.py | 4 +- plugins/SimulationView/SimulationView.py | 6 +- plugins/SimulationView/layers.shader | 14 +- plugins/SimulationView/layers3d.shader | 67 +++++++--- plugins/SimulationView/layers3d_shadow.shader | 125 +++++++++++------- plugins/SimulationView/layers_shadow.shader | 10 +- resources/themes/cura-light/theme.json | 2 + 11 files changed, 181 insertions(+), 104 deletions(-) diff --git a/cura/LayerDataBuilder.py b/cura/LayerDataBuilder.py index d8801c9e7b..ff80307223 100755 --- a/cura/LayerDataBuilder.py +++ b/cura/LayerDataBuilder.py @@ -80,9 +80,13 @@ class LayerDataBuilder(MeshBuilder): material_colors = numpy.zeros((line_dimensions.shape[0], 4), dtype=numpy.float32) for extruder_nr in range(material_color_map.shape[0]): material_colors[extruders == extruder_nr] = material_color_map[extruder_nr] - # Set material_colors with indices where line_types (also numpy array) == MoveCombingType - material_colors[line_types == LayerPolygon.MoveCombingType] = colors[line_types == LayerPolygon.MoveCombingType] - material_colors[line_types == LayerPolygon.MoveRetractionType] = colors[line_types == LayerPolygon.MoveRetractionType] + # Set material_colors with indices where line_types (also numpy array) == MoveUnretractedType + material_colors[line_types == LayerPolygon.MoveUnretractedType] = colors[line_types == LayerPolygon.MoveUnretractedType] + material_colors[line_types == LayerPolygon.MoveRetractedType] = colors[line_types == LayerPolygon.MoveRetractedType] + material_colors[line_types == LayerPolygon.MoveWhileRetractingType] = colors[ + line_types == LayerPolygon.MoveWhileRetractingType] + material_colors[line_types == LayerPolygon.MoveWhileUnretractingType] = colors[ + line_types == LayerPolygon.MoveWhileUnretractingType] attributes = { "line_dimensions": { diff --git a/cura/LayerPolygon.py b/cura/LayerPolygon.py index e772a8b78e..c4d57c07a0 100644 --- a/cura/LayerPolygon.py +++ b/cura/LayerPolygon.py @@ -19,15 +19,21 @@ class LayerPolygon: SkirtType = 5 InfillType = 6 SupportInfillType = 7 - MoveCombingType = 8 - MoveRetractionType = 9 + MoveUnretractedType = 8 + MoveRetractedType = 9 SupportInterfaceType = 10 PrimeTowerType = 11 - __number_of_types = 12 + MoveWhileRetractingType = 12 + MoveWhileUnretractingType = 13 + __number_of_types = 14 - __jump_map = numpy.logical_or(numpy.logical_or(numpy.arange(__number_of_types) == NoneType, - numpy.arange(__number_of_types) == MoveCombingType), - numpy.arange(__number_of_types) == MoveRetractionType) + __jump_map = numpy.logical_or(numpy.logical_or(numpy.logical_or( + numpy.arange(__number_of_types) == NoneType, + numpy.arange(__number_of_types) == MoveUnretractedType), + numpy.logical_or( + numpy.arange(__number_of_types) == MoveRetractedType, + numpy.arange(__number_of_types) == MoveWhileRetractingType)), + numpy.arange(__number_of_types) == MoveWhileUnretractingType) def __init__(self, extruder: int, line_types: numpy.ndarray, data: numpy.ndarray, line_widths: numpy.ndarray, line_thicknesses: numpy.ndarray, line_feedrates: numpy.ndarray) -> None: @@ -269,10 +275,12 @@ class LayerPolygon: theme.getColor("layerview_skirt").getRgbF(), # SkirtType theme.getColor("layerview_infill").getRgbF(), # InfillType theme.getColor("layerview_support_infill").getRgbF(), # SupportInfillType - theme.getColor("layerview_move_combing").getRgbF(), # MoveCombingType - theme.getColor("layerview_move_retraction").getRgbF(), # MoveRetractionType + theme.getColor("layerview_move_combing").getRgbF(), # MoveUnretractedType + theme.getColor("layerview_move_retraction").getRgbF(), # MoveRetractedType theme.getColor("layerview_support_interface").getRgbF(), # SupportInterfaceType - theme.getColor("layerview_prime_tower").getRgbF() # PrimeTowerType + theme.getColor("layerview_prime_tower").getRgbF(), # PrimeTowerType + theme.getColor("layerview_move_while_retracting").getRgbF(), # MoveWhileRetracting + theme.getColor("layerview_move_while_unretracting").getRgbF(), # MoveWhileUnretracting ]) return cls.__color_map diff --git a/plugins/CuraEngineBackend/Cura.proto b/plugins/CuraEngineBackend/Cura.proto index 238829ba64..8018c9186f 100644 --- a/plugins/CuraEngineBackend/Cura.proto +++ b/plugins/CuraEngineBackend/Cura.proto @@ -78,8 +78,8 @@ message Polygon { SkirtType = 5; InfillType = 6; SupportInfillType = 7; - MoveCombingType = 8; - MoveRetractionType = 9; + MoveUnretractedType = 8; + MoveRetractedType = 9; SupportInterfaceType = 10; PrimeTowerType = 11; } diff --git a/plugins/GCodeReader/FlavorParser.py b/plugins/GCodeReader/FlavorParser.py index 74dbeadec0..f83a9bbb34 100644 --- a/plugins/GCodeReader/FlavorParser.py +++ b/plugins/GCodeReader/FlavorParser.py @@ -133,7 +133,10 @@ class FlavorParser: if i > 0: line_feedrates[i - 1] = point[3] line_types[i - 1] = point[5] - if point[5] in [LayerPolygon.MoveCombingType, LayerPolygon.MoveRetractionType]: + if point[5] in [LayerPolygon.MoveUnretractedType, + LayerPolygon.MoveRetractedType, + LayerPolygon.MoveWhileRetractingType, + LayerPolygon.MoveWhileUnretractingType]: line_widths[i - 1] = 0.1 line_thicknesses[i - 1] = 0.0 # Travels are set as zero thickness lines else: @@ -196,7 +199,7 @@ class FlavorParser: path.append([x, y, z, f, new_extrusion_value + self._extrusion_length_offset[self._extruder_number], self._layer_type]) # extrusion self._previous_extrusion_value = new_extrusion_value else: - path.append([x, y, z, f, new_extrusion_value + self._extrusion_length_offset[self._extruder_number], LayerPolygon.MoveRetractionType]) # retraction + path.append([x, y, z, f, new_extrusion_value + self._extrusion_length_offset[self._extruder_number], LayerPolygon.MoveRetractedType]) # retraction e[self._extruder_number] = new_extrusion_value # Only when extruding we can determine the latest known "layer height" which is the difference in height between extrusions @@ -205,9 +208,9 @@ class FlavorParser: self._current_layer_thickness = z - self._previous_z # allow a tiny overlap self._previous_z = z elif self._previous_extrusion_value > e[self._extruder_number]: - path.append([x, y, z, f, e[self._extruder_number] + self._extrusion_length_offset[self._extruder_number], LayerPolygon.MoveRetractionType]) + path.append([x, y, z, f, e[self._extruder_number] + self._extrusion_length_offset[self._extruder_number], LayerPolygon.MoveRetractedType]) else: - path.append([x, y, z, f, e[self._extruder_number] + self._extrusion_length_offset[self._extruder_number], LayerPolygon.MoveCombingType]) + path.append([x, y, z, f, e[self._extruder_number] + self._extrusion_length_offset[self._extruder_number], LayerPolygon.MoveUnretractedType]) return self._position(x, y, z, f, e) @@ -419,7 +422,7 @@ class FlavorParser: self._createPolygon(self._current_layer_thickness, current_path, self._extruder_offsets.get(self._extruder_number, [0, 0])) current_path.clear() # Start the new layer at the end position of the last layer - current_path.append([current_position.x, current_position.y, current_position.z, current_position.f, current_position.e[self._extruder_number], LayerPolygon.MoveCombingType]) + current_path.append([current_position.x, current_position.y, current_position.z, current_position.f, current_position.e[self._extruder_number], LayerPolygon.MoveUnretractedType]) # When using a raft, the raft layers are stored as layers < 0, it mimics the same behavior # as in ProcessSlicedLayersJob @@ -461,9 +464,9 @@ class FlavorParser: # When changing tool, store the end point of the previous path, then process the code and finally # add another point with the new position of the head. - current_path.append([current_position.x, current_position.y, current_position.z, current_position.f, current_position.e[self._extruder_number], LayerPolygon.MoveCombingType]) + current_path.append([current_position.x, current_position.y, current_position.z, current_position.f, current_position.e[self._extruder_number], LayerPolygon.MoveUnretractedType]) current_position = self.processTCode(global_stack, T, line, current_position, current_path) - current_path.append([current_position.x, current_position.y, current_position.z, current_position.f, current_position.e[self._extruder_number], LayerPolygon.MoveCombingType]) + current_path.append([current_position.x, current_position.y, current_position.z, current_position.f, current_position.e[self._extruder_number], LayerPolygon.MoveUnretractedType]) if line.startswith("M"): M = self._getInt(line, "M") diff --git a/plugins/SimulationView/SimulationPass.py b/plugins/SimulationView/SimulationPass.py index 080b02bd9e..840fd7f6dc 100644 --- a/plugins/SimulationView/SimulationPass.py +++ b/plugins/SimulationView/SimulationPass.py @@ -202,9 +202,9 @@ class SimulationPass(RenderPass): self._layer_shader.setUniformValue("u_next_vertex", not_a_vector) self._layer_shader.setUniformValue("u_last_line_ratio", 1.0) - # The first line does not have a previous line: add a MoveCombingType in front for start detection + # The first line does not have a previous line: add a MoveUnretractedType in front for start detection # this way the first start of the layer can also be drawn - prev_line_types = numpy.concatenate([numpy.asarray([LayerPolygon.MoveCombingType], dtype = numpy.float32), layer_data._attributes["line_types"]["value"]]) + prev_line_types = numpy.concatenate([numpy.asarray([LayerPolygon.MoveUnretractedType], dtype = numpy.float32), layer_data._attributes["line_types"]["value"]]) # Remove the last element prev_line_types = prev_line_types[0:layer_data._attributes["line_types"]["value"].size] layer_data._attributes["prev_line_types"] = {'opengl_type': 'float', 'value': prev_line_types, 'opengl_name': 'a_prev_line_type'} diff --git a/plugins/SimulationView/SimulationView.py b/plugins/SimulationView/SimulationView.py index 10861acfd0..083fc73bf1 100644 --- a/plugins/SimulationView/SimulationView.py +++ b/plugins/SimulationView/SimulationView.py @@ -608,8 +608,10 @@ class SimulationView(CuraView): visible_line_types.append(LayerPolygon.SupportInterfaceType) visible_line_types_with_extrusion = visible_line_types.copy() # Copy before travel moves are added if self.getShowTravelMoves(): - visible_line_types.append(LayerPolygon.MoveCombingType) - visible_line_types.append(LayerPolygon.MoveRetractionType) + visible_line_types.append(LayerPolygon.MoveUnretractedType) + visible_line_types.append(LayerPolygon.MoveRetractedType) + visible_line_types.append(LayerPolygon.MoveWhileRetractingType) + visible_line_types.append(LayerPolygon.MoveWhileUnretractingType) for node in DepthFirstIterator(self.getController().getScene().getRoot()): layer_data = node.callDecoration("getLayerData") diff --git a/plugins/SimulationView/layers.shader b/plugins/SimulationView/layers.shader index e6210c2b65..d5079fd82b 100644 --- a/plugins/SimulationView/layers.shader +++ b/plugins/SimulationView/layers.shader @@ -22,8 +22,8 @@ vertex = gl_Position = u_projectionMatrix * u_viewMatrix * u_modelMatrix * a_vertex; // shade the color depending on the extruder index v_color = a_color; - // 8 and 9 are travel moves - if ((a_line_type != 8.0) && (a_line_type != 9.0)) { + // 8, 9, 12 and 13 are travel moves + if ((a_line_type != 8.0) && (a_line_type != 9.0) && (a_line_type != 12.0) && (a_line_type != 13.0)) { v_color = (a_extruder == u_active_extruder) ? v_color : vec4(u_shade_factor * v_color.rgb, v_color.a); } @@ -48,7 +48,9 @@ fragment = void main() { - if ((u_show_travel_moves == 0) && (v_line_type >= 7.5) && (v_line_type <= 9.5)) { // actually, 8 and 9 + // travel moves: 8, 9, 12, 13 + if ((u_show_travel_moves == 0) && (((v_line_type >= 7.5) && (v_line_type <= 9.5)) || + ((v_line_type >= 11.5) && (v_line_type <= 13.5)))) { // discard movements discard; } @@ -100,7 +102,7 @@ vertex41core = { gl_Position = u_projectionMatrix * u_viewMatrix * u_modelMatrix * a_vertex; v_color = a_color; - if ((a_line_type != 8) && (a_line_type != 9)) { + if ((a_line_type != 8) && (a_line_type != 9) && (a_line_type != 12) && (a_line_type != 13)) { v_color = (a_extruder == u_active_extruder) ? v_color : vec4(u_shade_factor * v_color.rgb, v_color.a); } @@ -120,7 +122,9 @@ fragment41core = void main() { - if ((u_show_travel_moves == 0) && (v_line_type >= 7.5) && (v_line_type <= 9.5)) { // actually, 8 and 9 + // travel moves: 8, 9, 12, 13 + if ((u_show_travel_moves == 0) && (((v_line_type >= 7.5) && (v_line_type <= 9.5)) || + ((v_line_type >= 11.5) && (v_line_type <= 13.5)))) { // discard movements discard; } diff --git a/plugins/SimulationView/layers3d.shader b/plugins/SimulationView/layers3d.shader index 494a07083d..e2f57823f3 100644 --- a/plugins/SimulationView/layers3d.shader +++ b/plugins/SimulationView/layers3d.shader @@ -228,22 +228,26 @@ geometry41core = { highp mat4 viewProjectionMatrix = u_projectionMatrix * u_viewMatrix; - vec4 g_vertex_delta; - vec3 g_vertex_normal_horz; // horizontal and vertical in respect to layers - vec4 g_vertex_offset_horz; // vec4 to match gl_in[x].gl_Position + // Vertices are declared as vec4 so that they can be used for calculations with gl_in[x].gl_Position + vec3 g_vertex_delta; + vec3 g_vertex_normal_horz; + vec4 g_vertex_offset_horz; vec3 g_vertex_normal_vert; vec4 g_vertex_offset_vert; vec3 g_vertex_normal_horz_head; vec4 g_vertex_offset_horz_head; + vec3 g_axial_plan_vector; + vec3 g_radial_plan_vector; float size_x; float size_y; - if ((v_extruder_opacity[0][int(mod(v_extruder[0], 4))][v_extruder[0] / 4] == 0.0) && (v_line_type[0] != 8) && (v_line_type[0] != 9)) { + if ((v_extruder_opacity[0][int(mod(v_extruder[0], 4))][v_extruder[0] / 4] == 0.0) && + (v_line_type[0] != 8) && (v_line_type[0] != 9) && (v_line_type[0] != 12) && (v_line_type[0] != 13)) { return; } - // See LayerPolygon; 8 is MoveCombingType, 9 is RetractionType - if ((u_show_travel_moves == 0) && ((v_line_type[0] == 8) || (v_line_type[0] == 9))) { + // See LayerPolygon; 8 is MoveUnretractedType, 9 is RetractionType, 12 is MoveWhileRetractingType, 13 is MoveWhileUnretractingType + if ((u_show_travel_moves == 0) && ((v_line_type[0] == 8) || (v_line_type[0] == 9) || (v_line_type[0] == 12) || (v_line_type[0] == 13))) { return; } if ((u_show_helpers == 0) && ((v_line_type[0] == 4) || (v_line_type[0] == 5) || (v_line_type[0] == 7) || (v_line_type[0] == 10) || v_line_type[0] == 11)) { @@ -256,7 +260,7 @@ geometry41core = return; } - if ((v_line_type[0] == 8) || (v_line_type[0] == 9)) { + if ((v_line_type[0] == 8) || (v_line_type[0] == 9) || (v_line_type[0] == 12) || (v_line_type[0] == 13)) { // fixed size for movements size_x = 0.05; } else { @@ -264,26 +268,47 @@ geometry41core = } size_y = v_line_dim[1].y / 2 + 0.01; - g_vertex_delta = gl_in[1].gl_Position - gl_in[0].gl_Position; //Actual movement exhibited by the line. - g_vertex_normal_horz_head = normalize(vec3(-g_vertex_delta.x, -g_vertex_delta.y, -g_vertex_delta.z)); //Lengthwise normal vector pointing backwards. - g_vertex_offset_horz_head = vec4(g_vertex_normal_horz_head * size_x, 0.0); //Lengthwise offset vector pointing backwards. + g_vertex_delta = (gl_in[1].gl_Position - gl_in[0].gl_Position).xyz; //Actual movement exhibited by the line. - g_vertex_normal_horz = normalize(vec3(g_vertex_delta.z, g_vertex_delta.y, -g_vertex_delta.x)); //Normal vector pointing right. + if (g_vertex_delta == vec3(0.0)) { + return; + } + + if (g_vertex_delta.y == 0.0) + { + // vector is in the horizontal plan, radial vector is a simple rotation around Y axis + g_radial_plan_vector = vec3(g_vertex_delta.z, 0.0, -g_vertex_delta.x); + } + else if(g_vertex_delta.x == 0.0 && g_vertex_delta.z == 0.0) + { + // delta vector is purely vertical, display the line rotated vertically so that it is visible in front and side views + g_radial_plan_vector = vec3(1.0, 0.0, -1.0); + } + else + { + // delta vector is completely 3D + g_axial_plan_vector = vec3(g_vertex_delta.x, 0.0, g_vertex_delta.z); // Vector projected in the horizontal plan + g_radial_plan_vector = cross(g_vertex_delta, g_axial_plan_vector); // Radial vector in the horizontal plan, pointing right. + } + + g_vertex_normal_horz_head = normalize(g_vertex_delta); //Lengthwise normal vector + g_vertex_offset_horz_head = vec4(g_vertex_normal_horz_head * size_x, 0.0); //Lengthwise offset vector + + g_vertex_normal_horz = normalize(g_radial_plan_vector); //Normal vector pointing right. g_vertex_offset_horz = vec4(g_vertex_normal_horz * size_x, 0.0); //Offset vector pointing right. g_vertex_normal_vert = vec3(0.0, 1.0, 0.0); //Upwards normal vector. g_vertex_offset_vert = vec4(g_vertex_normal_vert * size_y, 0.0); //Upwards offset vector. Goes up by half the layer thickness. - if ((v_line_type[0] == 8) || (v_line_type[0] == 9)) { //Travel or retraction moves. - vec4 va_head = viewProjectionMatrix * (gl_in[0].gl_Position + g_vertex_offset_horz_head + g_vertex_offset_vert); + if ((v_line_type[0] == 8) || (v_line_type[0] == 9) || (v_line_type[0] == 12) || (v_line_type[0] == 13)) { //Travel or retraction moves. + vec4 va_head = viewProjectionMatrix * (gl_in[0].gl_Position - g_vertex_offset_horz_head + g_vertex_offset_vert); vec4 va_up = viewProjectionMatrix * (gl_in[0].gl_Position + g_vertex_offset_horz + g_vertex_offset_vert); vec4 va_down = viewProjectionMatrix * (gl_in[0].gl_Position - g_vertex_offset_horz + g_vertex_offset_vert); - vec4 vb_head = viewProjectionMatrix * (gl_in[1].gl_Position - g_vertex_offset_horz_head + g_vertex_offset_vert); + vec4 vb_head = viewProjectionMatrix * (gl_in[1].gl_Position + g_vertex_offset_horz_head + g_vertex_offset_vert); vec4 vb_down = viewProjectionMatrix * (gl_in[1].gl_Position - g_vertex_offset_horz + g_vertex_offset_vert); vec4 vb_up = viewProjectionMatrix * (gl_in[1].gl_Position + g_vertex_offset_horz + g_vertex_offset_vert); // Travels: flat plane with pointy ends - myEmitVertex(v_vertex[0], v_color[1], g_vertex_normal_vert, va_up); myEmitVertex(v_vertex[0], v_color[1], g_vertex_normal_vert, va_head); myEmitVertex(v_vertex[0], v_color[1], g_vertex_normal_vert, va_down); myEmitVertex(v_vertex[0], v_color[1], g_vertex_normal_vert, va_up); @@ -308,8 +333,8 @@ geometry41core = vec4 vb_p_horz = viewProjectionMatrix * (gl_in[1].gl_Position + g_vertex_offset_horz); //Line end, right vertex. vec4 va_m_vert = viewProjectionMatrix * (gl_in[0].gl_Position - g_vertex_offset_vert); //Line start, bottom vertex. vec4 vb_m_vert = viewProjectionMatrix * (gl_in[1].gl_Position - g_vertex_offset_vert); //Line end, bottom vertex. - vec4 va_head = viewProjectionMatrix * (gl_in[0].gl_Position + g_vertex_offset_horz_head); //Line start, tip. - vec4 vb_head = viewProjectionMatrix * (gl_in[1].gl_Position - g_vertex_offset_horz_head); //Line end, tip. + vec4 va_head = viewProjectionMatrix * (gl_in[0].gl_Position - g_vertex_offset_horz_head); //Line start, tip. + vec4 vb_head = viewProjectionMatrix * (gl_in[1].gl_Position + g_vertex_offset_horz_head); //Line end, tip. // All normal lines are rendered as 3d tubes. myEmitVertex(v_vertex[0], v_color[1], -g_vertex_normal_horz, va_m_horz); @@ -328,14 +353,14 @@ geometry41core = // left side myEmitVertex(v_vertex[0], v_color[1], -g_vertex_normal_horz, va_m_horz); myEmitVertex(v_vertex[0], v_color[1], g_vertex_normal_vert, va_p_vert); - myEmitVertex(v_vertex[0], v_color[1], g_vertex_normal_horz_head, va_head); + myEmitVertex(v_vertex[0], v_color[1], -g_vertex_normal_horz_head, va_head); myEmitVertex(v_vertex[0], v_color[1], g_vertex_normal_horz, va_p_horz); EndPrimitive(); myEmitVertex(v_vertex[0], v_color[1], g_vertex_normal_horz, va_p_horz); myEmitVertex(v_vertex[0], v_color[1], -g_vertex_normal_vert, va_m_vert); - myEmitVertex(v_vertex[0], v_color[1], g_vertex_normal_horz_head, va_head); + myEmitVertex(v_vertex[0], v_color[1], -g_vertex_normal_horz_head, va_head); myEmitVertex(v_vertex[0], v_color[1], -g_vertex_normal_horz, va_m_horz); EndPrimitive(); @@ -343,14 +368,14 @@ geometry41core = // right side myEmitVertex(v_vertex[1], v_color[1], g_vertex_normal_horz, vb_p_horz); myEmitVertex(v_vertex[1], v_color[1], g_vertex_normal_vert, vb_p_vert); - myEmitVertex(v_vertex[1], v_color[1], -g_vertex_normal_horz_head, vb_head); + myEmitVertex(v_vertex[1], v_color[1], g_vertex_normal_horz_head, vb_head); myEmitVertex(v_vertex[1], v_color[1], -g_vertex_normal_horz, vb_m_horz); EndPrimitive(); myEmitVertex(v_vertex[1], v_color[1], -g_vertex_normal_horz, vb_m_horz); myEmitVertex(v_vertex[1], v_color[1], -g_vertex_normal_vert, vb_m_vert); - myEmitVertex(v_vertex[1], v_color[1], -g_vertex_normal_horz_head, vb_head); + myEmitVertex(v_vertex[1], v_color[1], g_vertex_normal_horz_head, vb_head); myEmitVertex(v_vertex[1], v_color[1], g_vertex_normal_horz, vb_p_horz); EndPrimitive(); diff --git a/plugins/SimulationView/layers3d_shadow.shader b/plugins/SimulationView/layers3d_shadow.shader index 88268938c9..47637cfb20 100644 --- a/plugins/SimulationView/layers3d_shadow.shader +++ b/plugins/SimulationView/layers3d_shadow.shader @@ -95,22 +95,26 @@ geometry41core = { highp mat4 viewProjectionMatrix = u_projectionMatrix * u_viewMatrix; - vec4 g_vertex_delta; - vec3 g_vertex_normal_horz; // horizontal and vertical in respect to layers - vec4 g_vertex_offset_horz; // vec4 to match gl_in[x].gl_Position + // Vertices are declared as vec4 so that they can be used for calculations with gl_in[x].gl_Position + vec3 g_vertex_delta; + vec3 g_vertex_normal_horz; + vec4 g_vertex_offset_horz; vec3 g_vertex_normal_vert; vec4 g_vertex_offset_vert; vec3 g_vertex_normal_horz_head; vec4 g_vertex_offset_horz_head; + vec3 g_axial_plan_vector; + vec3 g_radial_plan_vector; float size_x; float size_y; - if ((v_extruder_opacity[0][int(mod(v_extruder[0], 4))][v_extruder[0] / 4] == 0.0) && (v_line_type[0] != 8) && (v_line_type[0] != 9)) { + if ((v_extruder_opacity[0][int(mod(v_extruder[0], 4))][v_extruder[0] / 4] == 0.0) && + (v_line_type[0] != 8) && (v_line_type[0] != 9) && (v_line_type[0] != 12) && (v_line_type[0] != 13)) { return; } - // See LayerPolygon; 8 is MoveCombingType, 9 is RetractionType - if ((u_show_travel_moves == 0) && ((v_line_type[0] == 8) || (v_line_type[0] == 9))) { + // See LayerPolygon; 8 is MoveUnretractedType, 9 is RetractionType, 12 is MoveWhileRetractingType, 13 is MoveWhileUnretractingType + if ((u_show_travel_moves == 0) && ((v_line_type[0] == 8) || (v_line_type[0] == 9) || (v_line_type[0] == 12) || (v_line_type[0] == 13))) { return; } if ((u_show_helpers == 0) && ((v_line_type[0] == 4) || (v_line_type[0] == 5) || (v_line_type[0] == 7) || (v_line_type[0] == 10))) { @@ -123,7 +127,7 @@ geometry41core = return; } - if ((v_line_type[0] == 8) || (v_line_type[0] == 9)) { + if ((v_line_type[0] == 8) || (v_line_type[0] == 9) || (v_line_type[0] == 12) || (v_line_type[0] == 13)) { // fixed size for movements size_x = 0.05; } else { @@ -131,93 +135,114 @@ geometry41core = } size_y = v_line_dim[1].y / 2 + 0.01; - g_vertex_delta = gl_in[1].gl_Position - gl_in[0].gl_Position; - g_vertex_normal_horz_head = normalize(vec3(-g_vertex_delta.x, -g_vertex_delta.y, -g_vertex_delta.z)); - g_vertex_offset_horz_head = vec4(g_vertex_normal_horz_head * size_x, 0.0); + g_vertex_delta = (gl_in[1].gl_Position - gl_in[0].gl_Position).xyz; //Actual movement exhibited by the line. - g_vertex_normal_horz = normalize(vec3(g_vertex_delta.z, g_vertex_delta.y, -g_vertex_delta.x)); + if (g_vertex_delta == vec3(0.0)) { + return; + } - g_vertex_offset_horz = vec4(g_vertex_normal_horz * size_x, 0.0); //size * g_vertex_normal_horz; - g_vertex_normal_vert = vec3(0.0, 1.0, 0.0); - g_vertex_offset_vert = vec4(g_vertex_normal_vert * size_y, 0.0); + if (g_vertex_delta.y == 0.0) + { + // vector is in the horizontal plan, radial vector is a simple rotation around Y axis + g_radial_plan_vector = vec3(g_vertex_delta.z, 0.0, -g_vertex_delta.x); + } + else if(g_vertex_delta.x == 0.0 && g_vertex_delta.z == 0.0) + { + // delta vector is purely vertical, display the line rotated vertically so that it is visible in front and side views + g_radial_plan_vector = vec3(1.0, 0.0, -1.0); + } + else + { + // delta vector is completely 3D + g_axial_plan_vector = vec3(g_vertex_delta.x, 0.0, g_vertex_delta.z); // Vector projected in the horizontal plan + g_radial_plan_vector = cross(g_vertex_delta, g_axial_plan_vector); // Radial vector in the horizontal plan, pointing right. + } - if ((v_line_type[0] == 8) || (v_line_type[0] == 9)) { - vec4 va_head = viewProjectionMatrix * (gl_in[0].gl_Position + g_vertex_offset_horz_head + g_vertex_offset_vert); + g_vertex_normal_horz_head = normalize(g_vertex_delta); //Lengthwise normal vector + g_vertex_offset_horz_head = vec4(g_vertex_normal_horz_head * size_x, 0.0); //Lengthwise offset vector + + g_vertex_normal_horz = normalize(g_radial_plan_vector); //Normal vector pointing right. + g_vertex_offset_horz = vec4(g_vertex_normal_horz * size_x, 0.0); //Offset vector pointing right. + + g_vertex_normal_vert = vec3(0.0, 1.0, 0.0); //Upwards normal vector. + g_vertex_offset_vert = vec4(g_vertex_normal_vert * size_y, 0.0); //Upwards offset vector. Goes up by half the layer thickness. + + if ((v_line_type[0] == 8) || (v_line_type[0] == 9) || (v_line_type[0] == 12) || (v_line_type[0] == 13)) { + vec4 va_head = viewProjectionMatrix * (gl_in[0].gl_Position - g_vertex_offset_horz_head + g_vertex_offset_vert); vec4 va_up = viewProjectionMatrix * (gl_in[0].gl_Position + g_vertex_offset_horz + g_vertex_offset_vert); vec4 va_down = viewProjectionMatrix * (gl_in[0].gl_Position - g_vertex_offset_horz + g_vertex_offset_vert); - vec4 vb_head = viewProjectionMatrix * (gl_in[1].gl_Position - g_vertex_offset_horz_head + g_vertex_offset_vert); + vec4 vb_head = viewProjectionMatrix * (gl_in[1].gl_Position + g_vertex_offset_horz_head + g_vertex_offset_vert); vec4 vb_down = viewProjectionMatrix * (gl_in[1].gl_Position - g_vertex_offset_horz + g_vertex_offset_vert); vec4 vb_up = viewProjectionMatrix * (gl_in[1].gl_Position + g_vertex_offset_horz + g_vertex_offset_vert); // Travels: flat plane with pointy ends - myEmitVertex(v_vertex[0], v_color[0], g_vertex_normal_vert, va_up); - myEmitVertex(v_vertex[0], v_color[0], g_vertex_normal_vert, va_head); - myEmitVertex(v_vertex[0], v_color[0], g_vertex_normal_vert, va_down); - myEmitVertex(v_vertex[0], v_color[0], g_vertex_normal_vert, va_up); + myEmitVertex(v_vertex[0], v_color[1], g_vertex_normal_vert, va_head); + myEmitVertex(v_vertex[0], v_color[1], g_vertex_normal_vert, va_down); + myEmitVertex(v_vertex[0], v_color[1], g_vertex_normal_vert, va_up); myEmitVertex(v_vertex[1], v_color[1], g_vertex_normal_vert, vb_down); myEmitVertex(v_vertex[1], v_color[1], g_vertex_normal_vert, vb_up); myEmitVertex(v_vertex[1], v_color[1], g_vertex_normal_vert, vb_head); //And reverse so that the line is also visible from the back side. myEmitVertex(v_vertex[1], v_color[1], g_vertex_normal_vert, vb_up); myEmitVertex(v_vertex[1], v_color[1], g_vertex_normal_vert, vb_down); - myEmitVertex(v_vertex[0], v_color[0], g_vertex_normal_vert, va_up); - myEmitVertex(v_vertex[0], v_color[0], g_vertex_normal_vert, va_down); - myEmitVertex(v_vertex[0], v_color[0], g_vertex_normal_vert, va_head); - myEmitVertex(v_vertex[0], v_color[0], g_vertex_normal_vert, va_up); + myEmitVertex(v_vertex[0], v_color[1], g_vertex_normal_vert, va_up); + myEmitVertex(v_vertex[0], v_color[1], g_vertex_normal_vert, va_down); + myEmitVertex(v_vertex[0], v_color[1], g_vertex_normal_vert, va_head); + myEmitVertex(v_vertex[0], v_color[1], g_vertex_normal_vert, va_up); EndPrimitive(); } else { - vec4 va_m_horz = viewProjectionMatrix * (gl_in[0].gl_Position - g_vertex_offset_horz); - vec4 vb_m_horz = viewProjectionMatrix * (gl_in[1].gl_Position - g_vertex_offset_horz); - vec4 va_p_vert = viewProjectionMatrix * (gl_in[0].gl_Position + g_vertex_offset_vert); - vec4 vb_p_vert = viewProjectionMatrix * (gl_in[1].gl_Position + g_vertex_offset_vert); - vec4 va_p_horz = viewProjectionMatrix * (gl_in[0].gl_Position + g_vertex_offset_horz); - vec4 vb_p_horz = viewProjectionMatrix * (gl_in[1].gl_Position + g_vertex_offset_horz); - vec4 va_m_vert = viewProjectionMatrix * (gl_in[0].gl_Position - g_vertex_offset_vert); - vec4 vb_m_vert = viewProjectionMatrix * (gl_in[1].gl_Position - g_vertex_offset_vert); - vec4 va_head = viewProjectionMatrix * (gl_in[0].gl_Position + g_vertex_offset_horz_head); - vec4 vb_head = viewProjectionMatrix * (gl_in[1].gl_Position - g_vertex_offset_horz_head); + vec4 va_m_horz = viewProjectionMatrix * (gl_in[0].gl_Position - g_vertex_offset_horz); //Line start, left vertex. + vec4 vb_m_horz = viewProjectionMatrix * (gl_in[1].gl_Position - g_vertex_offset_horz); //Line end, left vertex. + vec4 va_p_vert = viewProjectionMatrix * (gl_in[0].gl_Position + g_vertex_offset_vert); //Line start, top vertex. + vec4 vb_p_vert = viewProjectionMatrix * (gl_in[1].gl_Position + g_vertex_offset_vert); //Line end, top vertex. + vec4 va_p_horz = viewProjectionMatrix * (gl_in[0].gl_Position + g_vertex_offset_horz); //Line start, right vertex. + vec4 vb_p_horz = viewProjectionMatrix * (gl_in[1].gl_Position + g_vertex_offset_horz); //Line end, right vertex. + vec4 va_m_vert = viewProjectionMatrix * (gl_in[0].gl_Position - g_vertex_offset_vert); //Line start, bottom vertex. + vec4 vb_m_vert = viewProjectionMatrix * (gl_in[1].gl_Position - g_vertex_offset_vert); //Line end, bottom vertex. + vec4 va_head = viewProjectionMatrix * (gl_in[0].gl_Position - g_vertex_offset_horz_head); //Line start, tip. + vec4 vb_head = viewProjectionMatrix * (gl_in[1].gl_Position + g_vertex_offset_horz_head); //Line end, tip. // All normal lines are rendered as 3d tubes. - myEmitVertex(v_vertex[0], v_color[0], -g_vertex_normal_horz, va_m_horz); + myEmitVertex(v_vertex[0], v_color[1], -g_vertex_normal_horz, va_m_horz); myEmitVertex(v_vertex[1], v_color[1], -g_vertex_normal_horz, vb_m_horz); - myEmitVertex(v_vertex[0], v_color[0], g_vertex_normal_vert, va_p_vert); + myEmitVertex(v_vertex[0], v_color[1], g_vertex_normal_vert, va_p_vert); myEmitVertex(v_vertex[1], v_color[1], g_vertex_normal_vert, vb_p_vert); - myEmitVertex(v_vertex[0], v_color[0], g_vertex_normal_horz, va_p_horz); + myEmitVertex(v_vertex[0], v_color[1], g_vertex_normal_horz, va_p_horz); myEmitVertex(v_vertex[1], v_color[1], g_vertex_normal_horz, vb_p_horz); - myEmitVertex(v_vertex[0], v_color[0], -g_vertex_normal_vert, va_m_vert); + myEmitVertex(v_vertex[0], v_color[1], -g_vertex_normal_vert, va_m_vert); myEmitVertex(v_vertex[1], v_color[1], -g_vertex_normal_vert, vb_m_vert); - myEmitVertex(v_vertex[0], v_color[0], -g_vertex_normal_horz, va_m_horz); + myEmitVertex(v_vertex[0], v_color[1], -g_vertex_normal_horz, va_m_horz); myEmitVertex(v_vertex[1], v_color[1], -g_vertex_normal_horz, vb_m_horz); EndPrimitive(); // left side - myEmitVertex(v_vertex[0], v_color[0], -g_vertex_normal_horz, va_m_horz); - myEmitVertex(v_vertex[0], v_color[0], g_vertex_normal_vert, va_p_vert); - myEmitVertex(v_vertex[0], v_color[0], g_vertex_normal_horz_head, va_head); - myEmitVertex(v_vertex[0], v_color[0], g_vertex_normal_horz, va_p_horz); + myEmitVertex(v_vertex[0], v_color[1], -g_vertex_normal_horz, va_m_horz); + myEmitVertex(v_vertex[0], v_color[1], g_vertex_normal_vert, va_p_vert); + myEmitVertex(v_vertex[0], v_color[1], -g_vertex_normal_horz_head, va_head); + myEmitVertex(v_vertex[0], v_color[1], g_vertex_normal_horz, va_p_horz); EndPrimitive(); - myEmitVertex(v_vertex[0], v_color[0], g_vertex_normal_horz, va_p_horz); - myEmitVertex(v_vertex[0], v_color[0], -g_vertex_normal_vert, va_m_vert); - myEmitVertex(v_vertex[0], v_color[0], g_vertex_normal_horz_head, va_head); - myEmitVertex(v_vertex[0], v_color[0], -g_vertex_normal_horz, va_m_horz); + myEmitVertex(v_vertex[0], v_color[1], g_vertex_normal_horz, va_p_horz); + myEmitVertex(v_vertex[0], v_color[1], -g_vertex_normal_vert, va_m_vert); + myEmitVertex(v_vertex[0], v_color[1], -g_vertex_normal_horz_head, va_head); + myEmitVertex(v_vertex[0], v_color[1], -g_vertex_normal_horz, va_m_horz); EndPrimitive(); // right side myEmitVertex(v_vertex[1], v_color[1], g_vertex_normal_horz, vb_p_horz); myEmitVertex(v_vertex[1], v_color[1], g_vertex_normal_vert, vb_p_vert); - myEmitVertex(v_vertex[1], v_color[1], -g_vertex_normal_horz_head, vb_head); + myEmitVertex(v_vertex[1], v_color[1], g_vertex_normal_horz_head, vb_head); myEmitVertex(v_vertex[1], v_color[1], -g_vertex_normal_horz, vb_m_horz); EndPrimitive(); myEmitVertex(v_vertex[1], v_color[1], -g_vertex_normal_horz, vb_m_horz); myEmitVertex(v_vertex[1], v_color[1], -g_vertex_normal_vert, vb_m_vert); - myEmitVertex(v_vertex[1], v_color[1], -g_vertex_normal_horz_head, vb_head); + myEmitVertex(v_vertex[1], v_color[1], g_vertex_normal_horz_head, vb_head); myEmitVertex(v_vertex[1], v_color[1], g_vertex_normal_horz, vb_p_horz); EndPrimitive(); diff --git a/plugins/SimulationView/layers_shadow.shader b/plugins/SimulationView/layers_shadow.shader index 4bc2de3d0b..73278914b7 100644 --- a/plugins/SimulationView/layers_shadow.shader +++ b/plugins/SimulationView/layers_shadow.shader @@ -48,8 +48,10 @@ fragment = void main() { - if ((u_show_travel_moves == 0) && (v_line_type >= 7.5) && (v_line_type <= 9.5)) - { // actually, 8 and 9 + // travel moves: 8, 9, 12, 13 + if ((u_show_travel_moves == 0) && (((v_line_type >= 7.5) && (v_line_type <= 9.5)) || + ((v_line_type >= 11.5) && (v_line_type <= 13.5)))) { + { // discard movements discard; } @@ -124,7 +126,9 @@ fragment41core = void main() { - if ((u_show_travel_moves == 0) && (v_line_type >= 7.5) && (v_line_type <= 9.5)) { // actually, 8 and 9 + // travel moves: 8, 9, 12, 13 + if ((u_show_travel_moves == 0) && (((v_line_type >= 7.5) && (v_line_type <= 9.5)) || + ((v_line_type >= 11.5) && (v_line_type <= 13.5)))) { // discard movements discard; } diff --git a/resources/themes/cura-light/theme.json b/resources/themes/cura-light/theme.json index 1ae316f96c..377e70f5b6 100644 --- a/resources/themes/cura-light/theme.json +++ b/resources/themes/cura-light/theme.json @@ -463,6 +463,8 @@ "layerview_support_infill": [0, 230, 230, 127], "layerview_move_combing": [0, 0, 255, 255], "layerview_move_retraction": [128, 127, 255, 255], + "layerview_move_while_retracting": [127, 255, 255, 255], + "layerview_move_while_unretracting": [255, 127, 255, 255], "layerview_support_interface": [63, 127, 255, 127], "layerview_prime_tower": [0, 255, 255, 255], "layerview_nozzle": [224, 192, 16, 64], From e1d579c6c8f7720deb05dd21e3892b1f914c6e34 Mon Sep 17 00:00:00 2001 From: Erwan MATHIEU Date: Mon, 26 May 2025 16:53:34 +0200 Subject: [PATCH 33/84] Display legend tooltip for travel types CURA-11978 --- .../SimulationViewMenuComponent.qml | 87 +++++++++++++++++-- 1 file changed, 82 insertions(+), 5 deletions(-) diff --git a/plugins/SimulationView/SimulationViewMenuComponent.qml b/plugins/SimulationView/SimulationViewMenuComponent.qml index d434d883eb..dcd2c7d178 100644 --- a/plugins/SimulationView/SimulationViewMenuComponent.qml +++ b/plugins/SimulationView/SimulationViewMenuComponent.qml @@ -227,29 +227,52 @@ Cura.ExpandableComponent id: typesLegendModel Component.onCompleted: { + const travelsTypesModel = [ + { + label: catalog.i18nc("@label", "Unretracted"), + colorId: "layerview_move_combing" + }, + { + label: catalog.i18nc("@label", "Retracted"), + colorId: "layerview_move_retraction" + }, + { + label: catalog.i18nc("@label", "Retracting"), + colorId: "layerview_move_while_retracting" + }, + { + label: catalog.i18nc("@label", "Unretracting"), + colorId: "layerview_move_while_unretracting" + } + ]; + typesLegendModel.append({ label: catalog.i18nc("@label", "Travels"), initialValue: viewSettings.show_travel_moves, preference: "layerview/show_travel_moves", - colorId: "layerview_move_combing" + colorId: "layerview_move_combing", + subTypesModel: travelsTypesModel }); typesLegendModel.append({ label: catalog.i18nc("@label", "Helpers"), initialValue: viewSettings.show_helpers, preference: "layerview/show_helpers", - colorId: "layerview_support" + colorId: "layerview_support", + subTypesModel: [] }); typesLegendModel.append({ label: catalog.i18nc("@label", "Shell"), initialValue: viewSettings.show_skin, preference: "layerview/show_skin", - colorId: "layerview_inset_0" + colorId: "layerview_inset_0", + subTypesModel: [] }); typesLegendModel.append({ label: catalog.i18nc("@label", "Infill"), initialValue: viewSettings.show_infill, preference: "layerview/show_infill", - colorId: "layerview_infill" + colorId: "layerview_infill", + subTypesModel: [] }); if (! UM.SimulationView.compatibilityMode) { @@ -257,7 +280,8 @@ Cura.ExpandableComponent label: catalog.i18nc("@label", "Starts"), initialValue: viewSettings.show_starts, preference: "layerview/show_starts", - colorId: "layerview_starts" + colorId: "layerview_starts", + subTypesModel: [] }); } } @@ -273,6 +297,7 @@ Cura.ExpandableComponent Rectangle { + id: rectangleColor anchors.verticalCenter: parent.verticalCenter anchors.right: legendModelCheckBox.right width: UM.Theme.getSize("layerview_legend_size").width @@ -281,6 +306,58 @@ Cura.ExpandableComponent border.width: UM.Theme.getSize("default_lining").width border.color: UM.Theme.getColor("lining") visible: viewSettings.show_legend + + MouseArea + { + anchors.fill: parent + hoverEnabled: true + acceptedButtons: Qt.NoButton + enabled: subTypesModel.count > 0 + + onEntered: tooltip.show() + onExited: tooltip.hide() + + UM.ToolTip + { + id: tooltip + delay: 0 + width: subTypesColumn.implicitWidth + 2 * UM.Theme.getSize("thin_margin").width + height: subTypesColumn.implicitHeight + 2 * UM.Theme.getSize("thin_margin").width + + contentItem: Column + { + id: subTypesColumn + padding: 0 + spacing: UM.Theme.getSize("layerview_row_spacing").height + + Repeater + { + model: subTypesModel + UM.Label + { + text: label + + height: UM.Theme.getSize("layerview_row").height + UM.Theme.getSize("default_lining").height + width: UM.Theme.getSize("layerview_menu_size").width + color: UM.Theme.getColor("setting_control_text") + Rectangle + { + anchors.verticalCenter: parent.verticalCenter + anchors.right: parent.right + + width: UM.Theme.getSize("layerview_legend_size").width + height: UM.Theme.getSize("layerview_legend_size").height + + color: UM.Theme.getColor(model.colorId) + + border.width: UM.Theme.getSize("default_lining").width + border.color: UM.Theme.getColor("lining") + } + } + } + } + } + } } UM.Label From b940179c54f224dfa6420a65a8f91f615f7478b6 Mon Sep 17 00:00:00 2001 From: Erwan MATHIEU Date: Wed, 4 Jun 2025 11:01:51 +0200 Subject: [PATCH 34/84] Set proper tooltip text color CURA-11978 --- plugins/SimulationView/SimulationViewMenuComponent.qml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/SimulationView/SimulationViewMenuComponent.qml b/plugins/SimulationView/SimulationViewMenuComponent.qml index dcd2c7d178..0e254a005b 100644 --- a/plugins/SimulationView/SimulationViewMenuComponent.qml +++ b/plugins/SimulationView/SimulationViewMenuComponent.qml @@ -339,7 +339,7 @@ Cura.ExpandableComponent height: UM.Theme.getSize("layerview_row").height + UM.Theme.getSize("default_lining").height width: UM.Theme.getSize("layerview_menu_size").width - color: UM.Theme.getColor("setting_control_text") + color: UM.Theme.getColor("tooltip_text") Rectangle { anchors.verticalCenter: parent.verticalCenter From db8a625d8fdece858d3766b9c24c5685d4ef7e97 Mon Sep 17 00:00:00 2001 From: HellAholic Date: Thu, 5 Jun 2025 20:57:24 +0200 Subject: [PATCH 35/84] Update PurgeLinesAndUnload.py Fixes an exception thrown upon a clean start. --- .../PostProcessingPlugin/scripts/PurgeLinesAndUnload.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/plugins/PostProcessingPlugin/scripts/PurgeLinesAndUnload.py b/plugins/PostProcessingPlugin/scripts/PurgeLinesAndUnload.py index ca95359e29..922aad902f 100644 --- a/plugins/PostProcessingPlugin/scripts/PurgeLinesAndUnload.py +++ b/plugins/PostProcessingPlugin/scripts/PurgeLinesAndUnload.py @@ -37,6 +37,10 @@ class PurgeLinesAndUnload(Script): def __init__(self): super().__init__() + + def initialize(self) -> None: + super().initialize() + # Get required values from the global stack and set default values for the script self.global_stack = Application.getInstance().getGlobalContainerStack() self.extruder = self.global_stack.extruderList self.end_purge_location = None @@ -56,9 +60,6 @@ class PurgeLinesAndUnload(Script): self.machine_back = self.machine_depth - 1.0 self.start_x = None self.start_y = None - - def initialize(self) -> None: - super().initialize() # Get the StartUp Gcode from Cura and attempt to catch if it contains purge lines. Message the user if an extrusion is in the startup. startup_gcode = self.global_stack.getProperty("machine_start_gcode", "value") start_lines = startup_gcode.splitlines() From 28d71c643beba999c83bd3887015070e59289fb6 Mon Sep 17 00:00:00 2001 From: whoseyoung Date: Sat, 7 Jun 2025 17:01:31 +0800 Subject: [PATCH 36/84] Update Geeetech 3D printer profiles Added Geeetech M1, M1S model profiles, and modified Thunder model profiles --- resources/definitions/geeetech_M1.def.json | 13 ++-- resources/definitions/geeetech_M1S.def.json | 59 +++++++++++++++++++ .../definitions/geeetech_Thunder.def.json | 5 +- .../geeetech_M1S_0.2.inst.cfg | 13 ++++ .../geeetech_M1S_0.3.inst.cfg | 13 ++++ .../geeetech_M1S_0.4.inst.cfg | 13 ++++ .../geeetech_M1S_0.5.inst.cfg | 13 ++++ .../geeetech_M1S_0.6.inst.cfg | 13 ++++ .../geeetech_M1S_0.8.inst.cfg | 13 ++++ .../geeetech_M1S_1.0.inst.cfg | 13 ++++ .../geeetech_M1_0.2.inst.cfg | 2 +- .../geeetech_M1_0.3.inst.cfg | 2 +- .../geeetech_M1_0.4.inst.cfg | 2 +- .../geeetech_M1_0.5.inst.cfg | 2 +- .../geeetech_M1_0.6.inst.cfg | 2 +- .../geeetech_M1_0.8.inst.cfg | 2 +- .../geeetech_M1_1.0.inst.cfg | 2 +- 17 files changed, 165 insertions(+), 17 deletions(-) create mode 100644 resources/definitions/geeetech_M1S.def.json create mode 100644 resources/variants/geeetech_variants/geeetech_M1S_0.2.inst.cfg create mode 100644 resources/variants/geeetech_variants/geeetech_M1S_0.3.inst.cfg create mode 100644 resources/variants/geeetech_variants/geeetech_M1S_0.4.inst.cfg create mode 100644 resources/variants/geeetech_variants/geeetech_M1S_0.5.inst.cfg create mode 100644 resources/variants/geeetech_variants/geeetech_M1S_0.6.inst.cfg create mode 100644 resources/variants/geeetech_variants/geeetech_M1S_0.8.inst.cfg create mode 100644 resources/variants/geeetech_variants/geeetech_M1S_1.0.inst.cfg diff --git a/resources/definitions/geeetech_M1.def.json b/resources/definitions/geeetech_M1.def.json index 2ab9447205..1bb0c5ce0c 100644 --- a/resources/definitions/geeetech_M1.def.json +++ b/resources/definitions/geeetech_M1.def.json @@ -23,14 +23,13 @@ }, "machine_height": { "default_value": 95 }, "machine_name": { "default_value": "Geeetech M1" }, - "machine_start_gcode": { "default_value": ";Geeetech M1 official wiki URL:https://www.geeetech.com/wiki/index.php/Geeetech_M1_3D_printer \nM104 S{material_print_temperature_layer_0} ; Set Hotend Temperature\nM140 S{material_bed_temperature_layer_0} ; Set Bed Temperature\n;M190 S{material_bed_temperature_layer_0} ; Wait for Bed Temperature\nM109 S{material_print_temperature_layer_0} ; Wait for Hotend Temperature\nG92 E0 ; Reset Extruder\nG28 ; Home all axes\nM107 ;Off Fan\nM300 S2500 P1000 ;Play a short tune\nG1 Z0.28 ;Move Z Axis up little to prevent scratching of Heat Bed\nG92 E0 ;Reset Extruder\nG1 Y3 F2400 ;Move to start position\nG1 X75 E40 F500 ;Draw a filament line\nG92 E0 ;Reset Extruder\n;G1 E-0.2 F3000 ;Retract a little\nG1 Z2.0 F3000 ;Move Z Axis up little to prevent scratching of Heat Bed\nG1 X70 Y3 Z0.27 F3000 ;Quickly wipe away from the filament line\nG92 E0 ;Reset Extruder" }, + "machine_start_gcode": { "default_value": ";Official wiki URL for Geeetech M1:https://www.geeetech.com/wiki/index.php/Geeetech_M1_3D_printer \nM104 S{material_print_temperature_layer_0} ; Set Hotend Temperature\nM140 S{material_bed_temperature_layer_0} ; Set Bed Temperature\n;M190 S{material_bed_temperature_layer_0} ; Wait for Bed Temperature\nM109 S{material_print_temperature_layer_0} ; Wait for Hotend Temperature\nG92 E0 ; Reset Extruder\nG28 ; Home all axes\nM107 ;Off Fan\nM300 S2500 P1000 ;Play a short tune\nG1 Z0.28 ;Move Z Axis up little to prevent scratching of Heat Bed\nG92 E0 ;Reset Extruder\nG1 Y3 F2400 ;Move to start position\nG1 X75 E40 F500 ;Draw a filament line\nG92 E0 ;Reset Extruder\n;G1 E-0.2 F3000 ;Retract a little\nG1 Z2.0 F3000 ;Move Z Axis up little to prevent scratching of Heat Bed\nG1 X70 Y3 Z0.27 F3000 ;Quickly wipe away from the filament line\nG92 E0 ;Reset Extruder" }, "machine_width": { "default_value": 105 }, - "material_print_temperature": - { - "maximum_value": "230", - "value": "205 if speed_infill <=100 else 215 if speed_infill <= 150 else 220 if speed_infill <= 200 else 230" - }, - "retraction_amount": { "value": 1 }, + "material_bed_temperature": { "maximum_value": 60 }, + "material_print_temperature": { "maximum_value": 230 }, + "adhesion_type": { "value": "'brim'" }, + "brim_width": { "value": 2 }, + "retraction_amount": { "value": 2 }, "speed_print": { "maximum_value_warning": "200", diff --git a/resources/definitions/geeetech_M1S.def.json b/resources/definitions/geeetech_M1S.def.json new file mode 100644 index 0000000000..c2156a332e --- /dev/null +++ b/resources/definitions/geeetech_M1S.def.json @@ -0,0 +1,59 @@ +{ + "version": 2, + "name": "Geeetech M1S", + "inherits": "Geeetech_Base_Single_Extruder", + "metadata": + { + "visible": true, + "machine_extruder_trains": { "0": "Geeetech_Single_Extruder" } + }, + "overrides": + { + "gantry_height": { "value": 35 }, + "machine_depth": { "default_value": 105 }, + "machine_end_gcode": { "default_value": "G91 ;Switch to relative positioning\nG1 E-2.5 F2700 ;Retract filament\nG1 E-1.5 Z0.2 F2400 ;Retract and raise Z\nG1 X5 Y5 F3000 ;Move away\nG1 Z10 ;lift print head\nG90 ;Switch to absolute positioning\nG28 X Y ;homing XY\nM106 S0 ;off Fan\nM104 S0 ;Cooldown hotend\nM140 S0 ;Cooldown bed\nM84 X Y E ;Disable steppers" }, + "machine_head_with_fans_polygon": + { + "default_value": [ + [-31, 31], + [34, 31], + [34, -40], + [-31, -40] + ] + }, + "machine_height": { "default_value": 95 }, + "machine_name": { "default_value": "Geeetech M1S" }, + "machine_start_gcode": { "default_value": ";Official wiki URL for Geeetech M1S:https://www.geeetech.com/wiki/index.php/Geeetech_M1S_3D_printer \nM104 S{material_print_temperature_layer_0} ; Set Hotend Temperature\nM140 S{material_bed_temperature_layer_0} ; Set Bed Temperature\n;M190 S{material_bed_temperature_layer_0} ; Wait for Bed Temperature\nM109 S{material_print_temperature_layer_0} ; Wait for Hotend Temperature\nG92 E0 ; Reset Extruder\nG28 ; Home all axes\nM107 ;Off Fan\nM300 S2500 P1000 ;Play a short tune\nG1 Z0.28 ;Move Z Axis up little to prevent scratching of Heat Bed\nG92 E0 ;Reset Extruder\nG1 Y3 F2400 ;Move to start position\nG1 X75 E40 F500 ;Draw a filament line\nG92 E0 ;Reset Extruder\n;G1 E-0.2 F3000 ;Retract a little\nG1 Z2.0 F3000 ;Move Z Axis up little to prevent scratching of Heat Bed\nG1 X70 Y3 Z0.27 F3000 ;Quickly wipe away from the filament line\nG92 E0 ;Reset Extruder" }, + "machine_width": { "default_value": 105 }, + "material_bed_temperature": { "maximum_value": 85 }, + "material_print_temperature": { "maximum_value": 250 }, + "adhesion_type": { "value": "'brim'" }, + "brim_width": { "value": 2 }, + "retraction_amount": { "value": 2 }, + "speed_print": + { + "maximum_value_warning": "200", + "value": 120 + }, + "speed_topbottom": + { + "maximum_value_warning": "200", + "value": 60 + }, + "speed_wall": + { + "maximum_value_warning": "200", + "value": 80 + }, + "speed_wall_0": + { + "maximum_value_warning": "200", + "value": 50 + }, + "speed_wall_x": + { + "maximum_value_warning": "200", + "value": 80 + } + } +} \ No newline at end of file diff --git a/resources/definitions/geeetech_Thunder.def.json b/resources/definitions/geeetech_Thunder.def.json index cc3e4044f8..3541a65bee 100644 --- a/resources/definitions/geeetech_Thunder.def.json +++ b/resources/definitions/geeetech_Thunder.def.json @@ -81,13 +81,12 @@ "machine_max_jerk_xy": { "value": 45 }, "machine_max_jerk_z": { "value": 0.8 }, "machine_name": { "default_value": "Geeetech Thunder" }, - "machine_start_gcode": { "default_value": ";Official viki homepage for Thunder:https://www.geeetech.com/wiki/index.php/Geeetech_Thunder_3D_printer \n\nM104 S{material_print_temperature_layer_0} ; Set Hotend Temperature\nM190 S{material_bed_temperature_layer_0} ; Wait for Bed Temperature\nM109 S{material_print_temperature_layer_0} ; Wait for Hotend Temperature\nG92 E0 ; Reset Extruder\nG28 ; Home all axes\nM107 P0 ;Off Main Fan\nM107 P1 ;Off Aux Fan\nM2012 P8 S1 F100 ; ON Light\n;M106 P0 S383 ; ON MainFan 150% if need\n;M106 P1 S255 ; ON Aux Fan 100% if need\nG1 Z5.0 F3000 ;Move Z Axis up little to prevent scratching of Heat Bed\nG1 X0.1 Y20 Z0.8 F5000 ; Move to start position\nG1 X0.1 Y200.0 Z1.2 F1500 E30 ; Draw the first line\nG92 E0 ; Reset Extruder\nG1 X0.4 Y200.0 Z1.2 F3000 ; Move to side a little\nG1 X0.4 Y20 Z1.2 F1500 E25 ; Draw the second line\nG92 E0 ; Reset Extruder\nG1 Z2.0 F3000 ; Move Z Axis up little to prevent scratching of Heat Bed\nG1 X5 Y20 Z0.4 F3000.0 ; Scrape off nozzle residue" }, + "machine_start_gcode": { "default_value": ";Official wiki URL for Thunder:https://www.geeetech.com/wiki/index.php/Geeetech_Thunder_3D_printer \n\nM104 S{material_print_temperature_layer_0} ; Set Hotend Temperature\nM190 S{material_bed_temperature_layer_0} ; Wait for Bed Temperature\nM109 S{material_print_temperature_layer_0} ; Wait for Hotend Temperature\nG92 E0 ; Reset Extruder\nG28 ; Home all axes\nM107 P0 ;Off Main Fan\nM107 P1 ;Off Aux Fan\nM2012 P8 S1 F100 ; ON Light\n;M106 P0 S383 ; ON MainFan 150% if need\n;M106 P1 S255 ; ON Aux Fan 100% if need\nG1 Z5.0 F3000 ;Move Z Axis up little to prevent scratching of Heat Bed\nG1 X0.1 Y20 Z0.8 F5000 ; Move to start position\nG1 X0.1 Y200.0 Z1.2 F1500 E30 ; Draw the first line\nG92 E0 ; Reset Extruder\nG1 X0.4 Y200.0 Z1.2 F3000 ; Move to side a little\nG1 X0.4 Y20 Z1.2 F1500 E25 ; Draw the second line\nG92 E0 ; Reset Extruder\nG1 Z2.0 F3000 ; Move Z Axis up little to prevent scratching of Heat Bed\nG1 X5 Y20 Z0.4 F3000.0 ; Scrape off nozzle residue" }, "machine_width": { "default_value": 250 }, "material_flow_layer_0": { "value": 95 }, "material_print_temperature": { - "maximum_value": "250", - "value": "200 if speed_infill <=150 else 205 if speed_infill <= 200 else 215 if speed_infill <= 260 else 220" + "maximum_value": "250" }, "material_print_temperature_layer_0": { diff --git a/resources/variants/geeetech_variants/geeetech_M1S_0.2.inst.cfg b/resources/variants/geeetech_variants/geeetech_M1S_0.2.inst.cfg new file mode 100644 index 0000000000..2ed913b2a4 --- /dev/null +++ b/resources/variants/geeetech_variants/geeetech_M1S_0.2.inst.cfg @@ -0,0 +1,13 @@ +[general] +definition = geeetech_M1S +name = 0.2mm Nozzle +version = 4 + +[metadata] +hardware_type = nozzle +setting_version = 25 +type = variant + +[values] +machine_nozzle_size = 0.2 + diff --git a/resources/variants/geeetech_variants/geeetech_M1S_0.3.inst.cfg b/resources/variants/geeetech_variants/geeetech_M1S_0.3.inst.cfg new file mode 100644 index 0000000000..032e25592d --- /dev/null +++ b/resources/variants/geeetech_variants/geeetech_M1S_0.3.inst.cfg @@ -0,0 +1,13 @@ +[general] +definition = geeetech_M1S +name = 0.3mm Nozzle +version = 4 + +[metadata] +hardware_type = nozzle +setting_version = 25 +type = variant + +[values] +machine_nozzle_size = 0.3 + diff --git a/resources/variants/geeetech_variants/geeetech_M1S_0.4.inst.cfg b/resources/variants/geeetech_variants/geeetech_M1S_0.4.inst.cfg new file mode 100644 index 0000000000..12306b7acc --- /dev/null +++ b/resources/variants/geeetech_variants/geeetech_M1S_0.4.inst.cfg @@ -0,0 +1,13 @@ +[general] +definition = geeetech_M1S +name = 0.4mm Nozzle +version = 4 + +[metadata] +hardware_type = nozzle +setting_version = 25 +type = variant + +[values] +machine_nozzle_size = 0.4 + diff --git a/resources/variants/geeetech_variants/geeetech_M1S_0.5.inst.cfg b/resources/variants/geeetech_variants/geeetech_M1S_0.5.inst.cfg new file mode 100644 index 0000000000..59db9afec4 --- /dev/null +++ b/resources/variants/geeetech_variants/geeetech_M1S_0.5.inst.cfg @@ -0,0 +1,13 @@ +[general] +definition = geeetech_M1S +name = 0.5mm Nozzle +version = 4 + +[metadata] +hardware_type = nozzle +setting_version = 25 +type = variant + +[values] +machine_nozzle_size = 0.5 + diff --git a/resources/variants/geeetech_variants/geeetech_M1S_0.6.inst.cfg b/resources/variants/geeetech_variants/geeetech_M1S_0.6.inst.cfg new file mode 100644 index 0000000000..ee92dc8c93 --- /dev/null +++ b/resources/variants/geeetech_variants/geeetech_M1S_0.6.inst.cfg @@ -0,0 +1,13 @@ +[general] +definition = geeetech_M1S +name = 0.6mm Nozzle +version = 4 + +[metadata] +hardware_type = nozzle +setting_version = 25 +type = variant + +[values] +machine_nozzle_size = 0.6 + diff --git a/resources/variants/geeetech_variants/geeetech_M1S_0.8.inst.cfg b/resources/variants/geeetech_variants/geeetech_M1S_0.8.inst.cfg new file mode 100644 index 0000000000..0029d6101c --- /dev/null +++ b/resources/variants/geeetech_variants/geeetech_M1S_0.8.inst.cfg @@ -0,0 +1,13 @@ +[general] +definition = geeetech_M1S +name = 0.8mm Nozzle +version = 4 + +[metadata] +hardware_type = nozzle +setting_version = 25 +type = variant + +[values] +machine_nozzle_size = 0.8 + diff --git a/resources/variants/geeetech_variants/geeetech_M1S_1.0.inst.cfg b/resources/variants/geeetech_variants/geeetech_M1S_1.0.inst.cfg new file mode 100644 index 0000000000..225b0b3c06 --- /dev/null +++ b/resources/variants/geeetech_variants/geeetech_M1S_1.0.inst.cfg @@ -0,0 +1,13 @@ +[general] +definition = geeetech_M1S +name = 1.0mm Nozzle +version = 4 + +[metadata] +hardware_type = nozzle +setting_version = 25 +type = variant + +[values] +machine_nozzle_size = 1.0 + diff --git a/resources/variants/geeetech_variants/geeetech_M1_0.2.inst.cfg b/resources/variants/geeetech_variants/geeetech_M1_0.2.inst.cfg index 2ab1f4dd00..77bf14e06e 100644 --- a/resources/variants/geeetech_variants/geeetech_M1_0.2.inst.cfg +++ b/resources/variants/geeetech_variants/geeetech_M1_0.2.inst.cfg @@ -5,7 +5,7 @@ version = 4 [metadata] hardware_type = nozzle -setting_version = 24 +setting_version = 25 type = variant [values] diff --git a/resources/variants/geeetech_variants/geeetech_M1_0.3.inst.cfg b/resources/variants/geeetech_variants/geeetech_M1_0.3.inst.cfg index f2cd78d138..f9ecf2eec2 100644 --- a/resources/variants/geeetech_variants/geeetech_M1_0.3.inst.cfg +++ b/resources/variants/geeetech_variants/geeetech_M1_0.3.inst.cfg @@ -5,7 +5,7 @@ version = 4 [metadata] hardware_type = nozzle -setting_version = 24 +setting_version = 25 type = variant [values] diff --git a/resources/variants/geeetech_variants/geeetech_M1_0.4.inst.cfg b/resources/variants/geeetech_variants/geeetech_M1_0.4.inst.cfg index aee452940d..e3c124c614 100644 --- a/resources/variants/geeetech_variants/geeetech_M1_0.4.inst.cfg +++ b/resources/variants/geeetech_variants/geeetech_M1_0.4.inst.cfg @@ -5,7 +5,7 @@ version = 4 [metadata] hardware_type = nozzle -setting_version = 24 +setting_version = 25 type = variant [values] diff --git a/resources/variants/geeetech_variants/geeetech_M1_0.5.inst.cfg b/resources/variants/geeetech_variants/geeetech_M1_0.5.inst.cfg index dbd7e2a69c..5adccce2df 100644 --- a/resources/variants/geeetech_variants/geeetech_M1_0.5.inst.cfg +++ b/resources/variants/geeetech_variants/geeetech_M1_0.5.inst.cfg @@ -5,7 +5,7 @@ version = 4 [metadata] hardware_type = nozzle -setting_version = 24 +setting_version = 25 type = variant [values] diff --git a/resources/variants/geeetech_variants/geeetech_M1_0.6.inst.cfg b/resources/variants/geeetech_variants/geeetech_M1_0.6.inst.cfg index 9c542b5fb2..f61f2febc0 100644 --- a/resources/variants/geeetech_variants/geeetech_M1_0.6.inst.cfg +++ b/resources/variants/geeetech_variants/geeetech_M1_0.6.inst.cfg @@ -5,7 +5,7 @@ version = 4 [metadata] hardware_type = nozzle -setting_version = 24 +setting_version = 25 type = variant [values] diff --git a/resources/variants/geeetech_variants/geeetech_M1_0.8.inst.cfg b/resources/variants/geeetech_variants/geeetech_M1_0.8.inst.cfg index 628e670353..0677557124 100644 --- a/resources/variants/geeetech_variants/geeetech_M1_0.8.inst.cfg +++ b/resources/variants/geeetech_variants/geeetech_M1_0.8.inst.cfg @@ -5,7 +5,7 @@ version = 4 [metadata] hardware_type = nozzle -setting_version = 24 +setting_version = 25 type = variant [values] diff --git a/resources/variants/geeetech_variants/geeetech_M1_1.0.inst.cfg b/resources/variants/geeetech_variants/geeetech_M1_1.0.inst.cfg index 7a7618760a..5df54b48df 100644 --- a/resources/variants/geeetech_variants/geeetech_M1_1.0.inst.cfg +++ b/resources/variants/geeetech_variants/geeetech_M1_1.0.inst.cfg @@ -5,7 +5,7 @@ version = 4 [metadata] hardware_type = nozzle -setting_version = 24 +setting_version = 25 type = variant [values] From c0a23e4f58097a709f510f60a8d6c867819b25b5 Mon Sep 17 00:00:00 2001 From: whoseyoung <78847564+whoseyoung@users.noreply.github.com> Date: Sat, 7 Jun 2025 09:02:39 +0000 Subject: [PATCH 37/84] Apply printer-linter format --- resources/definitions/geeetech_M1.def.json | 4 ++-- resources/definitions/geeetech_M1S.def.json | 4 ++-- resources/definitions/geeetech_Thunder.def.json | 5 +---- 3 files changed, 5 insertions(+), 8 deletions(-) diff --git a/resources/definitions/geeetech_M1.def.json b/resources/definitions/geeetech_M1.def.json index 1bb0c5ce0c..2782c7c87c 100644 --- a/resources/definitions/geeetech_M1.def.json +++ b/resources/definitions/geeetech_M1.def.json @@ -9,6 +9,8 @@ }, "overrides": { + "adhesion_type": { "value": "'brim'" }, + "brim_width": { "value": 2 }, "gantry_height": { "value": 35 }, "machine_depth": { "default_value": 105 }, "machine_end_gcode": { "default_value": "G91 ;Switch to relative positioning\nG1 E-2.5 F2700 ;Retract filament\nG1 E-1.5 Z0.2 F2400 ;Retract and raise Z\nG1 X5 Y5 F3000 ;Move away\nG1 Z10 ;lift print head\nG90 ;Switch to absolute positioning\nG28 X Y ;homing XY\nM106 S0 ;off Fan\nM104 S0 ;Cooldown hotend\nM140 S0 ;Cooldown bed\nM84 X Y E ;Disable steppers" }, @@ -27,8 +29,6 @@ "machine_width": { "default_value": 105 }, "material_bed_temperature": { "maximum_value": 60 }, "material_print_temperature": { "maximum_value": 230 }, - "adhesion_type": { "value": "'brim'" }, - "brim_width": { "value": 2 }, "retraction_amount": { "value": 2 }, "speed_print": { diff --git a/resources/definitions/geeetech_M1S.def.json b/resources/definitions/geeetech_M1S.def.json index c2156a332e..79bfec5a89 100644 --- a/resources/definitions/geeetech_M1S.def.json +++ b/resources/definitions/geeetech_M1S.def.json @@ -9,6 +9,8 @@ }, "overrides": { + "adhesion_type": { "value": "'brim'" }, + "brim_width": { "value": 2 }, "gantry_height": { "value": 35 }, "machine_depth": { "default_value": 105 }, "machine_end_gcode": { "default_value": "G91 ;Switch to relative positioning\nG1 E-2.5 F2700 ;Retract filament\nG1 E-1.5 Z0.2 F2400 ;Retract and raise Z\nG1 X5 Y5 F3000 ;Move away\nG1 Z10 ;lift print head\nG90 ;Switch to absolute positioning\nG28 X Y ;homing XY\nM106 S0 ;off Fan\nM104 S0 ;Cooldown hotend\nM140 S0 ;Cooldown bed\nM84 X Y E ;Disable steppers" }, @@ -27,8 +29,6 @@ "machine_width": { "default_value": 105 }, "material_bed_temperature": { "maximum_value": 85 }, "material_print_temperature": { "maximum_value": 250 }, - "adhesion_type": { "value": "'brim'" }, - "brim_width": { "value": 2 }, "retraction_amount": { "value": 2 }, "speed_print": { diff --git a/resources/definitions/geeetech_Thunder.def.json b/resources/definitions/geeetech_Thunder.def.json index 3541a65bee..cf0f9dd5e9 100644 --- a/resources/definitions/geeetech_Thunder.def.json +++ b/resources/definitions/geeetech_Thunder.def.json @@ -84,10 +84,7 @@ "machine_start_gcode": { "default_value": ";Official wiki URL for Thunder:https://www.geeetech.com/wiki/index.php/Geeetech_Thunder_3D_printer \n\nM104 S{material_print_temperature_layer_0} ; Set Hotend Temperature\nM190 S{material_bed_temperature_layer_0} ; Wait for Bed Temperature\nM109 S{material_print_temperature_layer_0} ; Wait for Hotend Temperature\nG92 E0 ; Reset Extruder\nG28 ; Home all axes\nM107 P0 ;Off Main Fan\nM107 P1 ;Off Aux Fan\nM2012 P8 S1 F100 ; ON Light\n;M106 P0 S383 ; ON MainFan 150% if need\n;M106 P1 S255 ; ON Aux Fan 100% if need\nG1 Z5.0 F3000 ;Move Z Axis up little to prevent scratching of Heat Bed\nG1 X0.1 Y20 Z0.8 F5000 ; Move to start position\nG1 X0.1 Y200.0 Z1.2 F1500 E30 ; Draw the first line\nG92 E0 ; Reset Extruder\nG1 X0.4 Y200.0 Z1.2 F3000 ; Move to side a little\nG1 X0.4 Y20 Z1.2 F1500 E25 ; Draw the second line\nG92 E0 ; Reset Extruder\nG1 Z2.0 F3000 ; Move Z Axis up little to prevent scratching of Heat Bed\nG1 X5 Y20 Z0.4 F3000.0 ; Scrape off nozzle residue" }, "machine_width": { "default_value": 250 }, "material_flow_layer_0": { "value": 95 }, - "material_print_temperature": - { - "maximum_value": "250" - }, + "material_print_temperature": { "maximum_value": "250" }, "material_print_temperature_layer_0": { "maximum_value_warning": 300, From f84923185ded2dde8f614a7ab6f0e50d6290b343 Mon Sep 17 00:00:00 2001 From: Erwan MATHIEU Date: Tue, 10 Jun 2025 08:30:43 +0200 Subject: [PATCH 38/84] Use proper English word for "plane" CURA-12544 The word in French to describe a geometric flat surface if "plan", which is a valid word in English but it doesn't have the same meaning, this got me confused. So replacing "plan" by "plane" because we are actually dealing with a geometrical "plane" (although it doesn't fly). --- plugins/SimulationView/layers3d_shadow.shader | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/plugins/SimulationView/layers3d_shadow.shader b/plugins/SimulationView/layers3d_shadow.shader index 47637cfb20..0cf3e4f75a 100644 --- a/plugins/SimulationView/layers3d_shadow.shader +++ b/plugins/SimulationView/layers3d_shadow.shader @@ -103,8 +103,8 @@ geometry41core = vec4 g_vertex_offset_vert; vec3 g_vertex_normal_horz_head; vec4 g_vertex_offset_horz_head; - vec3 g_axial_plan_vector; - vec3 g_radial_plan_vector; + vec3 g_axial_plane_vector; + vec3 g_radial_plane_vector; float size_x; float size_y; @@ -143,25 +143,25 @@ geometry41core = if (g_vertex_delta.y == 0.0) { - // vector is in the horizontal plan, radial vector is a simple rotation around Y axis - g_radial_plan_vector = vec3(g_vertex_delta.z, 0.0, -g_vertex_delta.x); + // vector is in the horizontal plane, radial vector is a simple rotation around Y axis + g_radial_plane_vector = vec3(g_vertex_delta.z, 0.0, -g_vertex_delta.x); } else if(g_vertex_delta.x == 0.0 && g_vertex_delta.z == 0.0) { // delta vector is purely vertical, display the line rotated vertically so that it is visible in front and side views - g_radial_plan_vector = vec3(1.0, 0.0, -1.0); + g_radial_plane_vector = vec3(1.0, 0.0, -1.0); } else { // delta vector is completely 3D - g_axial_plan_vector = vec3(g_vertex_delta.x, 0.0, g_vertex_delta.z); // Vector projected in the horizontal plan - g_radial_plan_vector = cross(g_vertex_delta, g_axial_plan_vector); // Radial vector in the horizontal plan, pointing right. + g_axial_plane_vector = vec3(g_vertex_delta.x, 0.0, g_vertex_delta.z); // Vector projected in the horizontal plane + g_radial_plane_vector = cross(g_vertex_delta, g_axial_plane_vector); // Radial vector in the horizontal plane, pointing right. } g_vertex_normal_horz_head = normalize(g_vertex_delta); //Lengthwise normal vector g_vertex_offset_horz_head = vec4(g_vertex_normal_horz_head * size_x, 0.0); //Lengthwise offset vector - g_vertex_normal_horz = normalize(g_radial_plan_vector); //Normal vector pointing right. + g_vertex_normal_horz = normalize(g_radial_plane_vector); //Normal vector pointing right. g_vertex_offset_horz = vec4(g_vertex_normal_horz * size_x, 0.0); //Offset vector pointing right. g_vertex_normal_vert = vec3(0.0, 1.0, 0.0); //Upwards normal vector. From 23edebf6fd1eea9157a36994dc27b4b1853db6dd Mon Sep 17 00:00:00 2001 From: Frederic Meeuwissen <13856291+Frederic98@users.noreply.github.com> Date: Wed, 4 Jun 2025 10:23:34 +0200 Subject: [PATCH 39/84] [PP-639] Remove quality_definition for S8 This caused an infinite loop as it refers to itself --- resources/definitions/ultimaker_s8.def.json | 1 - 1 file changed, 1 deletion(-) diff --git a/resources/definitions/ultimaker_s8.def.json b/resources/definitions/ultimaker_s8.def.json index fb8243cd60..05f1932ce1 100644 --- a/resources/definitions/ultimaker_s8.def.json +++ b/resources/definitions/ultimaker_s8.def.json @@ -48,7 +48,6 @@ "preferred_material": "ultimaker_pla_blue", "preferred_quality_type": "draft", "preferred_variant_name": "AA+ 0.4", - "quality_definition": "ultimaker_s8", "supported_actions": [ "DiscoverUM3Action" ], "supports_material_export": true, "supports_network_connection": true, From cbb9d992e9b3623e6f78b511b33ac75a9e34a111 Mon Sep 17 00:00:00 2001 From: Frederic Meeuwissen <13856291+Frederic98@users.noreply.github.com> Date: Tue, 10 Jun 2025 16:20:42 +0200 Subject: [PATCH 40/84] [PP-639] Inherit S8 from S5 i.s.o. S7 To prevent inheriting `quality_definition: ultimaker_s5` from the S7 --- resources/definitions/ultimaker_s8.def.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/definitions/ultimaker_s8.def.json b/resources/definitions/ultimaker_s8.def.json index 05f1932ce1..b7de27722d 100644 --- a/resources/definitions/ultimaker_s8.def.json +++ b/resources/definitions/ultimaker_s8.def.json @@ -1,7 +1,7 @@ { "version": 2, "name": "UltiMaker S8", - "inherits": "ultimaker_s7", + "inherits": "ultimaker_s5", "metadata": { "visible": true, From a8ab9ecb75c957419a5d3025fbb8bf0f57dbed43 Mon Sep 17 00:00:00 2001 From: Frederic Meeuwissen <13856291+Frederic98@users.noreply.github.com> Date: Tue, 10 Jun 2025 16:21:12 +0200 Subject: [PATCH 41/84] [PP-639] Move some setting overrides from S7 to S5 --- resources/definitions/ultimaker_s5.def.json | 7 ++++++- resources/definitions/ultimaker_s7.def.json | 4 +--- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/resources/definitions/ultimaker_s5.def.json b/resources/definitions/ultimaker_s5.def.json index 46d46d33eb..fa6f5a9a38 100644 --- a/resources/definitions/ultimaker_s5.def.json +++ b/resources/definitions/ultimaker_s5.def.json @@ -72,7 +72,11 @@ "brim_width": { "value": "3" }, "build_volume_temperature": { "maximum_value": 50 }, "cool_fan_speed": { "value": "50" }, - "default_material_print_temperature": { "value": "200" }, + "default_material_print_temperature": + { + "maximum_value_warning": "320", + "value": "200" + }, "extruder_prime_pos_abs": { "default_value": true }, "gantry_height": { "value": "55" }, "infill_pattern": { "value": "'zigzag' if infill_sparse_density > 80 else 'triangles'" }, @@ -104,6 +108,7 @@ "machine_nozzle_heat_up_speed": { "default_value": 1.4 }, "machine_start_gcode": { "default_value": "" }, "machine_width": { "default_value": 330 }, + "material_print_temperature_layer_0": { "maximum_value_warning": "320" }, "multiple_mesh_overlap": { "value": "0" }, "optimize_wall_printing_order": { "value": "True" }, "prime_blob_enable": diff --git a/resources/definitions/ultimaker_s7.def.json b/resources/definitions/ultimaker_s7.def.json index 14d9b21168..ac2f927ad4 100644 --- a/resources/definitions/ultimaker_s7.def.json +++ b/resources/definitions/ultimaker_s7.def.json @@ -46,8 +46,6 @@ }, "overrides": { - "default_material_print_temperature": { "maximum_value_warning": "320" }, - "machine_name": { "default_value": "Ultimaker S7" }, - "material_print_temperature_layer_0": { "maximum_value_warning": "320" } + "machine_name": { "default_value": "Ultimaker S7" } } } \ No newline at end of file From b6b2da0c148af19614cf90537dd3599263fbc316 Mon Sep 17 00:00:00 2001 From: Erwan MATHIEU Date: Thu, 12 Jun 2025 08:39:59 +0200 Subject: [PATCH 42/84] Change wording as suggested CURA-11978 "Unretraction" is a barbaric word, better use "Priming" instead --- plugins/SimulationView/SimulationViewMenuComponent.qml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/SimulationView/SimulationViewMenuComponent.qml b/plugins/SimulationView/SimulationViewMenuComponent.qml index 0e254a005b..78b0b2b74f 100644 --- a/plugins/SimulationView/SimulationViewMenuComponent.qml +++ b/plugins/SimulationView/SimulationViewMenuComponent.qml @@ -229,7 +229,7 @@ Cura.ExpandableComponent { const travelsTypesModel = [ { - label: catalog.i18nc("@label", "Unretracted"), + label: catalog.i18nc("@label", "Not retracted"), colorId: "layerview_move_combing" }, { @@ -241,7 +241,7 @@ Cura.ExpandableComponent colorId: "layerview_move_while_retracting" }, { - label: catalog.i18nc("@label", "Unretracting"), + label: catalog.i18nc("@label", "Priming"), colorId: "layerview_move_while_unretracting" } ]; From f9c6d4aad1ea06a95dd064b2c6398a8d37ced57b Mon Sep 17 00:00:00 2001 From: HellAholic Date: Thu, 12 Jun 2025 14:21:36 +0200 Subject: [PATCH 43/84] definition adjustments - If the machine has two extruder trains, they should be defined individually rather than reused from another machine, creates unnecessary linkage between machines. - Added "has_textured_buildplate" --- resources/definitions/biqu_b2.def.json | 3 ++- resources/extruders/biqu_b2_extruder_0.def.json | 16 ++++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) create mode 100644 resources/extruders/biqu_b2_extruder_0.def.json diff --git a/resources/definitions/biqu_b2.def.json b/resources/definitions/biqu_b2.def.json index 3676ca8955..a5721d62d4 100644 --- a/resources/definitions/biqu_b2.def.json +++ b/resources/definitions/biqu_b2.def.json @@ -6,8 +6,9 @@ { "visible": true, "author": "Boris Juraga", + "has_textured_buildplate": true, "machine_extruder_trains": { - "0": "biqu_base_extruder_0", + "0": "biqu_b2_extruder_0", "1": "biqu_b2_extruder_1" }, "quality_definition": "biqu_b2" diff --git a/resources/extruders/biqu_b2_extruder_0.def.json b/resources/extruders/biqu_b2_extruder_0.def.json new file mode 100644 index 0000000000..4bfb9686b3 --- /dev/null +++ b/resources/extruders/biqu_b2_extruder_0.def.json @@ -0,0 +1,16 @@ +{ + "version": 2, + "name": "Extruder 1", + "inherits": "fdmextruder", + "metadata": + { + "machine": "biqu_b2", + "position": "0" + }, + "overrides": + { + "extruder_nr": { "default_value": 0 }, + "machine_nozzle_size": { "default_value": 0.4 }, + "material_diameter": { "default_value": 1.75 } + } +} \ No newline at end of file From 45f28184e530eb357d2029faebfb7ee3f2d85f36 Mon Sep 17 00:00:00 2001 From: HellAholic <28710690+HellAholic@users.noreply.github.com> Date: Thu, 12 Jun 2025 12:47:20 +0000 Subject: [PATCH 44/84] Apply printer-linter format --- resources/definitions/sovol_sv01.def.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/definitions/sovol_sv01.def.json b/resources/definitions/sovol_sv01.def.json index dd64702f7f..5c87d8124e 100644 --- a/resources/definitions/sovol_sv01.def.json +++ b/resources/definitions/sovol_sv01.def.json @@ -26,4 +26,4 @@ "machine_start_gcode": { "default_value": "M201 X500.00 Y500.00 Z100.00 E5000.00 ;Setup machine max acceleration\nM203 X500.00 Y500.00 Z10.00 E50.00 ;Setup machine max feedrate\nM204 P500.00 R1000.00 T500.00 ;Setup Print/Retract/Travel acceleration\nM205 X8.00 Y8.00 Z0.40 E5.00 ;Setup Jerk\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\n\nG28 ;Home\n\nG92 E0 ;Reset Extruder\nG1 Z2.0 F3000 ;Move Z Axis up\nG1 X10.1 Y20 Z0.28 F5000.0 ;Move to start position\nG1 X10.1 Y200.0 Z0.28 F1500.0 E15 ;Draw the first line\nG1 X10.4 Y200.0 Z0.28 F5000.0 ;Move to side a little\nG1 X10.4 Y20 Z0.28 F1500.0 E30 ;Draw the second line\nG92 E0 ;Reset Extruder\nG1 Z2.0 F3000 ;Move Z Axis up\n" }, "machine_width": { "default_value": 280 } } -} +} \ No newline at end of file From e028f044cb63bb1a73538064e67474032a926f78 Mon Sep 17 00:00:00 2001 From: HellAholic <28710690+HellAholic@users.noreply.github.com> Date: Thu, 12 Jun 2025 13:18:47 +0000 Subject: [PATCH 45/84] Apply printer-linter format --- resources/extruders/toybox_alpha_one_two_extruder_0.def.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/resources/extruders/toybox_alpha_one_two_extruder_0.def.json b/resources/extruders/toybox_alpha_one_two_extruder_0.def.json index cb39ebf85b..f7f773257c 100644 --- a/resources/extruders/toybox_alpha_one_two_extruder_0.def.json +++ b/resources/extruders/toybox_alpha_one_two_extruder_0.def.json @@ -10,8 +10,8 @@ "overrides": { "extruder_nr": { "default_value": 0 }, + "machine_nozzle_offset_x": { "default_value": -3.0 }, "machine_nozzle_size": { "default_value": 0.4 }, - "material_diameter": { "default_value": 1.75 }, - "machine_nozzle_offset_x": { "default_value": -3.0 } + "material_diameter": { "default_value": 1.75 } } } \ No newline at end of file From ff0e12705e6c9006522e28dca54ec3353a924f1e Mon Sep 17 00:00:00 2001 From: HellAholic Date: Thu, 12 Jun 2025 15:14:45 +0200 Subject: [PATCH 46/84] Update settings version Update variant setting version --- resources/quality/biqu/b2/biqu_b2_0.4_PLA_adaptive.inst.cfg | 2 +- resources/quality/biqu/b2/biqu_b2_0.4_PLA_draft.inst.cfg | 2 +- resources/quality/biqu/b2/biqu_b2_0.4_PLA_low.inst.cfg | 2 +- resources/quality/biqu/b2/biqu_b2_0.4_PLA_standard.inst.cfg | 2 +- resources/quality/biqu/b2/biqu_b2_0.4_PLA_super.inst.cfg | 2 +- resources/quality/biqu/b2/biqu_b2_0.4_PLA_ultra.inst.cfg | 2 +- resources/quality/biqu/b2/biqu_b2_global_adaptive.inst.cfg | 2 +- resources/quality/biqu/b2/biqu_b2_global_draft.inst.cfg | 2 +- resources/quality/biqu/b2/biqu_b2_global_low.inst.cfg | 2 +- resources/quality/biqu/b2/biqu_b2_global_standard.inst.cfg | 2 +- resources/quality/biqu/b2/biqu_b2_global_super.inst.cfg | 2 +- resources/quality/biqu/b2/biqu_b2_global_ultra.inst.cfg | 2 +- resources/variants/biqu/biqu_b2_0.2.inst.cfg | 2 +- resources/variants/biqu/biqu_b2_0.3.inst.cfg | 2 +- resources/variants/biqu/biqu_b2_0.4.inst.cfg | 2 +- resources/variants/biqu/biqu_b2_0.5.inst.cfg | 2 +- resources/variants/biqu/biqu_b2_0.6.inst.cfg | 2 +- resources/variants/biqu/biqu_b2_0.8.inst.cfg | 2 +- 18 files changed, 18 insertions(+), 18 deletions(-) diff --git a/resources/quality/biqu/b2/biqu_b2_0.4_PLA_adaptive.inst.cfg b/resources/quality/biqu/b2/biqu_b2_0.4_PLA_adaptive.inst.cfg index ef478ac259..b9f8323096 100644 --- a/resources/quality/biqu/b2/biqu_b2_0.4_PLA_adaptive.inst.cfg +++ b/resources/quality/biqu/b2/biqu_b2_0.4_PLA_adaptive.inst.cfg @@ -6,7 +6,7 @@ version = 4 [metadata] material = generic_pla_175 quality_type = adaptive -setting_version = 24 +setting_version = 25 type = quality variant = 0.4mm Nozzle diff --git a/resources/quality/biqu/b2/biqu_b2_0.4_PLA_draft.inst.cfg b/resources/quality/biqu/b2/biqu_b2_0.4_PLA_draft.inst.cfg index 526aa6bdf2..57b48a55a5 100644 --- a/resources/quality/biqu/b2/biqu_b2_0.4_PLA_draft.inst.cfg +++ b/resources/quality/biqu/b2/biqu_b2_0.4_PLA_draft.inst.cfg @@ -6,7 +6,7 @@ version = 4 [metadata] material = generic_pla_175 quality_type = draft -setting_version = 24 +setting_version = 25 type = quality variant = 0.4mm Nozzle diff --git a/resources/quality/biqu/b2/biqu_b2_0.4_PLA_low.inst.cfg b/resources/quality/biqu/b2/biqu_b2_0.4_PLA_low.inst.cfg index 8ee3e16ff4..d11d6658d4 100644 --- a/resources/quality/biqu/b2/biqu_b2_0.4_PLA_low.inst.cfg +++ b/resources/quality/biqu/b2/biqu_b2_0.4_PLA_low.inst.cfg @@ -6,7 +6,7 @@ version = 4 [metadata] material = generic_pla_175 quality_type = low -setting_version = 24 +setting_version = 25 type = quality variant = 0.4mm Nozzle diff --git a/resources/quality/biqu/b2/biqu_b2_0.4_PLA_standard.inst.cfg b/resources/quality/biqu/b2/biqu_b2_0.4_PLA_standard.inst.cfg index fd6ea4287d..fa641937bb 100644 --- a/resources/quality/biqu/b2/biqu_b2_0.4_PLA_standard.inst.cfg +++ b/resources/quality/biqu/b2/biqu_b2_0.4_PLA_standard.inst.cfg @@ -6,7 +6,7 @@ version = 4 [metadata] material = generic_pla_175 quality_type = standard -setting_version = 24 +setting_version = 25 type = quality variant = 0.4mm Nozzle diff --git a/resources/quality/biqu/b2/biqu_b2_0.4_PLA_super.inst.cfg b/resources/quality/biqu/b2/biqu_b2_0.4_PLA_super.inst.cfg index 4d2899b599..7aadcb580c 100644 --- a/resources/quality/biqu/b2/biqu_b2_0.4_PLA_super.inst.cfg +++ b/resources/quality/biqu/b2/biqu_b2_0.4_PLA_super.inst.cfg @@ -6,7 +6,7 @@ version = 4 [metadata] material = generic_pla_175 quality_type = super -setting_version = 24 +setting_version = 25 type = quality variant = 0.4mm Nozzle diff --git a/resources/quality/biqu/b2/biqu_b2_0.4_PLA_ultra.inst.cfg b/resources/quality/biqu/b2/biqu_b2_0.4_PLA_ultra.inst.cfg index 247fdcf1a8..fbd8a08905 100644 --- a/resources/quality/biqu/b2/biqu_b2_0.4_PLA_ultra.inst.cfg +++ b/resources/quality/biqu/b2/biqu_b2_0.4_PLA_ultra.inst.cfg @@ -6,7 +6,7 @@ version = 4 [metadata] material = generic_pla_175 quality_type = ultra -setting_version = 24 +setting_version = 25 type = quality variant = 0.4mm Nozzle diff --git a/resources/quality/biqu/b2/biqu_b2_global_adaptive.inst.cfg b/resources/quality/biqu/b2/biqu_b2_global_adaptive.inst.cfg index cd755a1cff..7f67567ef3 100644 --- a/resources/quality/biqu/b2/biqu_b2_global_adaptive.inst.cfg +++ b/resources/quality/biqu/b2/biqu_b2_global_adaptive.inst.cfg @@ -6,7 +6,7 @@ version = 4 [metadata] global_quality = True quality_type = adaptive -setting_version = 24 +setting_version = 25 type = quality weight = -2 diff --git a/resources/quality/biqu/b2/biqu_b2_global_draft.inst.cfg b/resources/quality/biqu/b2/biqu_b2_global_draft.inst.cfg index 92deadd38c..76cc7f73a0 100644 --- a/resources/quality/biqu/b2/biqu_b2_global_draft.inst.cfg +++ b/resources/quality/biqu/b2/biqu_b2_global_draft.inst.cfg @@ -6,7 +6,7 @@ version = 4 [metadata] global_quality = True quality_type = draft -setting_version = 24 +setting_version = 25 type = quality weight = -5 diff --git a/resources/quality/biqu/b2/biqu_b2_global_low.inst.cfg b/resources/quality/biqu/b2/biqu_b2_global_low.inst.cfg index 0455a6ec20..63a69c570e 100644 --- a/resources/quality/biqu/b2/biqu_b2_global_low.inst.cfg +++ b/resources/quality/biqu/b2/biqu_b2_global_low.inst.cfg @@ -6,7 +6,7 @@ version = 4 [metadata] global_quality = True quality_type = low -setting_version = 24 +setting_version = 25 type = quality weight = -4 diff --git a/resources/quality/biqu/b2/biqu_b2_global_standard.inst.cfg b/resources/quality/biqu/b2/biqu_b2_global_standard.inst.cfg index a0fb268e52..67b106a1ba 100644 --- a/resources/quality/biqu/b2/biqu_b2_global_standard.inst.cfg +++ b/resources/quality/biqu/b2/biqu_b2_global_standard.inst.cfg @@ -6,7 +6,7 @@ version = 4 [metadata] global_quality = True quality_type = standard -setting_version = 24 +setting_version = 25 type = quality weight = -3 position = 0 diff --git a/resources/quality/biqu/b2/biqu_b2_global_super.inst.cfg b/resources/quality/biqu/b2/biqu_b2_global_super.inst.cfg index fd54805c04..da7f8a363f 100644 --- a/resources/quality/biqu/b2/biqu_b2_global_super.inst.cfg +++ b/resources/quality/biqu/b2/biqu_b2_global_super.inst.cfg @@ -6,7 +6,7 @@ version = 4 [metadata] global_quality = True quality_type = super -setting_version = 24 +setting_version = 25 type = quality weight = -1 diff --git a/resources/quality/biqu/b2/biqu_b2_global_ultra.inst.cfg b/resources/quality/biqu/b2/biqu_b2_global_ultra.inst.cfg index cbc194ceb6..a3fc49ddbf 100644 --- a/resources/quality/biqu/b2/biqu_b2_global_ultra.inst.cfg +++ b/resources/quality/biqu/b2/biqu_b2_global_ultra.inst.cfg @@ -6,7 +6,7 @@ version = 4 [metadata] global_quality = True quality_type = ultra -setting_version = 24 +setting_version = 25 type = quality weight = 0 diff --git a/resources/variants/biqu/biqu_b2_0.2.inst.cfg b/resources/variants/biqu/biqu_b2_0.2.inst.cfg index 8f7d063b93..e86b85d50b 100644 --- a/resources/variants/biqu/biqu_b2_0.2.inst.cfg +++ b/resources/variants/biqu/biqu_b2_0.2.inst.cfg @@ -5,7 +5,7 @@ version = 4 [metadata] hardware_type = nozzle -setting_version = 24 +setting_version = 25 type = variant [values] diff --git a/resources/variants/biqu/biqu_b2_0.3.inst.cfg b/resources/variants/biqu/biqu_b2_0.3.inst.cfg index e6381dfe80..8469c7e211 100644 --- a/resources/variants/biqu/biqu_b2_0.3.inst.cfg +++ b/resources/variants/biqu/biqu_b2_0.3.inst.cfg @@ -5,7 +5,7 @@ version = 4 [metadata] hardware_type = nozzle -setting_version = 24 +setting_version = 25 type = variant [values] diff --git a/resources/variants/biqu/biqu_b2_0.4.inst.cfg b/resources/variants/biqu/biqu_b2_0.4.inst.cfg index 99958af88d..472e03489b 100644 --- a/resources/variants/biqu/biqu_b2_0.4.inst.cfg +++ b/resources/variants/biqu/biqu_b2_0.4.inst.cfg @@ -5,7 +5,7 @@ version = 4 [metadata] hardware_type = nozzle -setting_version = 24 +setting_version = 25 type = variant [values] diff --git a/resources/variants/biqu/biqu_b2_0.5.inst.cfg b/resources/variants/biqu/biqu_b2_0.5.inst.cfg index 194e5a79c4..1ab4eb72d4 100644 --- a/resources/variants/biqu/biqu_b2_0.5.inst.cfg +++ b/resources/variants/biqu/biqu_b2_0.5.inst.cfg @@ -5,7 +5,7 @@ version = 4 [metadata] hardware_type = nozzle -setting_version = 24 +setting_version = 25 type = variant [values] diff --git a/resources/variants/biqu/biqu_b2_0.6.inst.cfg b/resources/variants/biqu/biqu_b2_0.6.inst.cfg index 828843f658..0ac946844a 100644 --- a/resources/variants/biqu/biqu_b2_0.6.inst.cfg +++ b/resources/variants/biqu/biqu_b2_0.6.inst.cfg @@ -5,7 +5,7 @@ version = 4 [metadata] hardware_type = nozzle -setting_version = 24 +setting_version = 25 type = variant [values] diff --git a/resources/variants/biqu/biqu_b2_0.8.inst.cfg b/resources/variants/biqu/biqu_b2_0.8.inst.cfg index 8bc16cfade..53b6910342 100644 --- a/resources/variants/biqu/biqu_b2_0.8.inst.cfg +++ b/resources/variants/biqu/biqu_b2_0.8.inst.cfg @@ -5,7 +5,7 @@ version = 4 [metadata] hardware_type = nozzle -setting_version = 24 +setting_version = 25 type = variant [values] From 8188207cd23acb85bb77d1f09c44f380fb36ca24 Mon Sep 17 00:00:00 2001 From: HellAholic <28710690+HellAholic@users.noreply.github.com> Date: Thu, 12 Jun 2025 14:12:54 +0000 Subject: [PATCH 47/84] Apply printer-linter format --- resources/definitions/biqu_b2.def.json | 13 +++++++------ .../biqu/b2/biqu_b2_global_adaptive.inst.cfg | 9 +++++---- .../quality/biqu/b2/biqu_b2_global_draft.inst.cfg | 9 +++++---- .../quality/biqu/b2/biqu_b2_global_low.inst.cfg | 9 +++++---- .../biqu/b2/biqu_b2_global_standard.inst.cfg | 11 ++++++----- .../quality/biqu/b2/biqu_b2_global_super.inst.cfg | 9 +++++---- .../quality/biqu/b2/biqu_b2_global_ultra.inst.cfg | 9 +++++---- 7 files changed, 38 insertions(+), 31 deletions(-) diff --git a/resources/definitions/biqu_b2.def.json b/resources/definitions/biqu_b2.def.json index a5721d62d4..85139b82c1 100644 --- a/resources/definitions/biqu_b2.def.json +++ b/resources/definitions/biqu_b2.def.json @@ -7,7 +7,8 @@ "visible": true, "author": "Boris Juraga", "has_textured_buildplate": true, - "machine_extruder_trains": { + "machine_extruder_trains": + { "0": "biqu_b2_extruder_0", "1": "biqu_b2_extruder_1" }, @@ -16,7 +17,11 @@ "overrides": { "gantry_height": { "value": 27.5 }, + "machine_end_gcode": { "default_value": ";BEGIN OF CUSTOM END GCODE\nM104 S0\nM140 S0\n;Retract the filament\nG91\nG1 E-30 F300\nG1 Z5\nG90\nG28 X0 Y{machine_depth}\n;END OF CUSTOM END GCODE" }, "machine_extruder_count": { "default_value": 2 }, + "machine_extruders_share_heater": { "default_value": true }, + "machine_extruders_share_nozzle": { "default_value": true }, + "machine_extruders_shared_nozzle_initial_retraction": { "default_value": 30 }, "machine_head_with_fans_polygon": { "default_value": [ @@ -26,13 +31,9 @@ [33, 35] ] }, - "machine_end_gcode": { "default_value": ";BEGIN OF CUSTOM END GCODE\nM104 S0\nM140 S0\n;Retract the filament\nG91\nG1 E-30 F300\nG1 Z5\nG90\nG28 X0 Y{machine_depth}\n;END OF CUSTOM END GCODE" }, "machine_name": { "default_value": "BIQU B2" }, "machine_start_gcode": { "default_value": ";BEGIN OF CUSTOM START GCODE\nG28 ;Home\nG1 Z15.0 F6000 ;Move the platform down 15mm\n;Prime the extruder\nM109 S{material_print_temperature_layer_0} ; Wait for Extruder temperature\nT0\nG92 E0\nG1 F1200 E-30\nG92 E0\nM109 S{material_print_temperature_layer_0} ; Wait for Extruder temperature\nT1\nG92 E0\nG1 Z2.0 F3000 ; Move Z Axis up little to prevent scratching of Heat Bed\nG1 X6.1 Y20 Z0.3 F5000.0 ; Move to start position\nM117 Purging\nG1 X6.1 Y200.0 Z0.3 F1500.0 E10 ; Draw the first line\nG1 X6.4 Y200.0 Z0.3 F5000.0 ; Move to side a little\nG1 X6.4 Y20 Z0.3 F1500.0 E20 ; Draw the second line\nG1 X6.7 Y20 Z0.3 F5000.0 ; Move to side a little\nG1 X6.7 Y200.0 Z0.3 F1500.0 E30 ; Draw the three line\nG1 X7.0 Y200.0 Z0.3 F5000.0 ; Move to side a little\nG1 X7.0 Y20 Z0.3 F1500.0 E40 ; Draw the four line\nG1 X7.3 Y20 Z0.3 F5000.0 ; Move to side a little\nG1 X7.3 Y200.0 Z0.3 F1500.0 E50 ; Draw the four line\nG92 E0 \nT1\nG92 E0\nG1 F1200 E-30\nG92 E0\nT0\nG92 E0\nG1 F1200 E30\nG92 E0\nG1 Z2.0 F3000 ; Move Z Axis up little to prevent scratching of Heat Bed\nG1 X9.1 Y20 Z0.3 F5000.0 ; Move to start position\nM117 Purging\nG1 X9.1 Y200.0 Z0.3 F1500.0 E10 ; Draw the first line\nG1 X9.4 Y200.0 Z0.3 F5000.0 ; Move to side a little\nG1 X9.4 Y20 Z0.3 F1500.0 E20 ; Draw the second line\nG1 X9.7 Y20 Z0.3 F5000.0 ; Move to side a little\nG1 X9.7 Y200.0 Z0.3 F1500.0 E30 ; Draw the three line\nG1 X10.0 Y200.0 Z0.3 F5000.0 ; Move to side a little\nG1 X10.0 Y20 Z0.3 F1500.0 E40 ; Draw the four line\nG1 X10.3 Y20 Z0.3 F5000.0 ; Move to side a little\nG1 X10.3 Y200.0 Z0.3 F1500.0 E50 ; Draw the four line\nT0\nG92 E0\nG1 F1200 E-30\nG92 E0\nG92 E0\nT{initial_extruder_nr} ; RESET EXTRUDER TO INITIAL\n; start print\n;END OF CUSTOM START GCODE" }, - "machine_extruders_share_heater": { "default_value": true }, - "machine_extruders_share_nozzle": { "default_value": true }, - "machine_extruders_shared_nozzle_initial_retraction": { "default_value": 30 }, "prime_tower_enable": { "default_value": true }, - "prime_tower_mode": { "default_value": "interleaved" } + "prime_tower_mode": { "default_value": "interleaved" } } } \ No newline at end of file diff --git a/resources/quality/biqu/b2/biqu_b2_global_adaptive.inst.cfg b/resources/quality/biqu/b2/biqu_b2_global_adaptive.inst.cfg index 7f67567ef3..54484e046e 100644 --- a/resources/quality/biqu/b2/biqu_b2_global_adaptive.inst.cfg +++ b/resources/quality/biqu/b2/biqu_b2_global_adaptive.inst.cfg @@ -14,15 +14,16 @@ weight = -2 adaptive_layer_height_enabled = true layer_height = 0.16 layer_height_0 = 0.20 -support_interface_height = =layer_height*6 -top_bottom_thickness = =layer_height_0+layer_height*4 -wall_thickness = =line_width*3 material_final_print_temperature = 195 material_initial_print_temperature = 195 material_print_temperature = 190 material_standby_temperature = 195 optimize_wall_printing_order = True prime_tower_min_volume = 150 +support_interface_height = =layer_height*6 switch_extruder_prime_speed = 10 switch_extruder_retraction_amount = 40 -switch_extruder_retraction_speeds = 30 \ No newline at end of file +switch_extruder_retraction_speeds = 30 +top_bottom_thickness = =layer_height_0+layer_height*4 +wall_thickness = =line_width*3 + diff --git a/resources/quality/biqu/b2/biqu_b2_global_draft.inst.cfg b/resources/quality/biqu/b2/biqu_b2_global_draft.inst.cfg index 76cc7f73a0..e5ebe77ad2 100644 --- a/resources/quality/biqu/b2/biqu_b2_global_draft.inst.cfg +++ b/resources/quality/biqu/b2/biqu_b2_global_draft.inst.cfg @@ -13,15 +13,16 @@ weight = -5 [values] layer_height = 0.32 layer_height_0 = 0.32 -support_interface_height = =layer_height*4 -top_bottom_thickness = =layer_height_0+layer_height*3 -wall_thickness = =line_width*2 material_final_print_temperature = 195 material_initial_print_temperature = 195 material_print_temperature = 190 material_standby_temperature = 195 optimize_wall_printing_order = True prime_tower_min_volume = 150 +support_interface_height = =layer_height*4 switch_extruder_prime_speed = 10 switch_extruder_retraction_amount = 40 -switch_extruder_retraction_speeds = 30 \ No newline at end of file +switch_extruder_retraction_speeds = 30 +top_bottom_thickness = =layer_height_0+layer_height*3 +wall_thickness = =line_width*2 + diff --git a/resources/quality/biqu/b2/biqu_b2_global_low.inst.cfg b/resources/quality/biqu/b2/biqu_b2_global_low.inst.cfg index 63a69c570e..2a0f57981f 100644 --- a/resources/quality/biqu/b2/biqu_b2_global_low.inst.cfg +++ b/resources/quality/biqu/b2/biqu_b2_global_low.inst.cfg @@ -13,15 +13,16 @@ weight = -4 [values] layer_height = 0.28 layer_height_0 = 0.28 -support_interface_height = =layer_height*4 -top_bottom_thickness = =layer_height_0+layer_height*3 -wall_thickness = =line_width*3 material_final_print_temperature = 195 material_initial_print_temperature = 195 material_print_temperature = 190 material_standby_temperature = 195 optimize_wall_printing_order = True prime_tower_min_volume = 150 +support_interface_height = =layer_height*4 switch_extruder_prime_speed = 10 switch_extruder_retraction_amount = 40 -switch_extruder_retraction_speeds = 30 \ No newline at end of file +switch_extruder_retraction_speeds = 30 +top_bottom_thickness = =layer_height_0+layer_height*3 +wall_thickness = =line_width*3 + diff --git a/resources/quality/biqu/b2/biqu_b2_global_standard.inst.cfg b/resources/quality/biqu/b2/biqu_b2_global_standard.inst.cfg index 67b106a1ba..e2860c23e3 100644 --- a/resources/quality/biqu/b2/biqu_b2_global_standard.inst.cfg +++ b/resources/quality/biqu/b2/biqu_b2_global_standard.inst.cfg @@ -5,24 +5,25 @@ version = 4 [metadata] global_quality = True +position = 0 quality_type = standard setting_version = 25 type = quality weight = -3 -position = 0 [values] layer_height = 0.2 layer_height_0 = 0.2 -support_interface_height = =layer_height*4 -top_bottom_thickness = =layer_height_0+layer_height*3 -wall_thickness = =line_width*3 material_final_print_temperature = 195 material_initial_print_temperature = 195 material_print_temperature = 190 material_standby_temperature = 195 optimize_wall_printing_order = True prime_tower_min_volume = 150 +support_interface_height = =layer_height*4 switch_extruder_prime_speed = 10 switch_extruder_retraction_amount = 40 -switch_extruder_retraction_speeds = 30 \ No newline at end of file +switch_extruder_retraction_speeds = 30 +top_bottom_thickness = =layer_height_0+layer_height*3 +wall_thickness = =line_width*3 + diff --git a/resources/quality/biqu/b2/biqu_b2_global_super.inst.cfg b/resources/quality/biqu/b2/biqu_b2_global_super.inst.cfg index da7f8a363f..9343fe00df 100644 --- a/resources/quality/biqu/b2/biqu_b2_global_super.inst.cfg +++ b/resources/quality/biqu/b2/biqu_b2_global_super.inst.cfg @@ -13,15 +13,16 @@ weight = -1 [values] layer_height = 0.12 layer_height_0 = 0.12 -support_interface_height = =layer_height*8 -top_bottom_thickness = =layer_height_0+layer_height*6 -wall_thickness = =line_width*3 material_final_print_temperature = 195 material_initial_print_temperature = 195 material_print_temperature = 190 material_standby_temperature = 195 optimize_wall_printing_order = True prime_tower_min_volume = 150 +support_interface_height = =layer_height*8 switch_extruder_prime_speed = 10 switch_extruder_retraction_amount = 40 -switch_extruder_retraction_speeds = 30 \ No newline at end of file +switch_extruder_retraction_speeds = 30 +top_bottom_thickness = =layer_height_0+layer_height*6 +wall_thickness = =line_width*3 + diff --git a/resources/quality/biqu/b2/biqu_b2_global_ultra.inst.cfg b/resources/quality/biqu/b2/biqu_b2_global_ultra.inst.cfg index a3fc49ddbf..4625e672e3 100644 --- a/resources/quality/biqu/b2/biqu_b2_global_ultra.inst.cfg +++ b/resources/quality/biqu/b2/biqu_b2_global_ultra.inst.cfg @@ -13,15 +13,16 @@ weight = 0 [values] layer_height = 0.08 layer_height_0 = 0.12 -support_interface_height = =layer_height*12 -top_bottom_thickness = =layer_height_0+layer_height*10 -wall_thickness = =line_width*4 material_final_print_temperature = 195 material_initial_print_temperature = 195 material_print_temperature = 190 material_standby_temperature = 195 optimize_wall_printing_order = True prime_tower_min_volume = 150 +support_interface_height = =layer_height*12 switch_extruder_prime_speed = 10 switch_extruder_retraction_amount = 40 -switch_extruder_retraction_speeds = 30 \ No newline at end of file +switch_extruder_retraction_speeds = 30 +top_bottom_thickness = =layer_height_0+layer_height*10 +wall_thickness = =line_width*4 + From 53b91a7b4841456f37021ff80c766699206ac234 Mon Sep 17 00:00:00 2001 From: Erwan MATHIEU Date: Thu, 12 Jun 2025 16:40:28 +0200 Subject: [PATCH 48/84] Add setting to keep retracting during travel CURA-11978 --- resources/definitions/fdmprinter.def.json | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/resources/definitions/fdmprinter.def.json b/resources/definitions/fdmprinter.def.json index 3ad11933e6..6747bf9ceb 100644 --- a/resources/definitions/fdmprinter.def.json +++ b/resources/definitions/fdmprinter.def.json @@ -9324,6 +9324,16 @@ "settable_per_mesh": false, "settable_per_extruder": true }, + "keep_retracting_during_travel": + { + "label": "Keep Retracting During Travel", + "description": "When retraction during travel is enabled, and there is more than enough time to perform a full retract during a travel move, spread the retraction over the whole travel move with a lower retraction speed, so that we do not travel with a non-retracting nozzle. This can help reducing oozing.", + "type": "bool", + "default_value": false, + "enabled": "retraction_enable and not machine_firmware_retract and machine_gcode_flavor != \"UltiGCode\" and machine_gcode_flavor != \"BFB\" and retraction_during_travel_ratio > 0", + "settable_per_mesh": false, + "settable_per_extruder": true + }, "prime_during_travel_ratio": { "label": "Prime During Travel Move", From 95227a59fdcad88b95785361f5473ec6f99010c9 Mon Sep 17 00:00:00 2001 From: HellAholic Date: Fri, 13 Jun 2025 11:27:36 +0200 Subject: [PATCH 49/84] Add v2 buildplate texture for hidra and hidra plus --- resources/definitions/hellbot_hidra.def.json | 2 +- .../definitions/hellbot_hidra_plus.def.json | 2 +- resources/definitions/hellbot_magna_SE.def.json | 6 +++--- .../definitions/hellbot_magna_SE_Pro.def.json | 4 ++-- .../images/Hellbot_Hidra_and_Hidra_Plus_V2.png | Bin 0 -> 13726 bytes 5 files changed, 7 insertions(+), 7 deletions(-) create mode 100644 resources/images/Hellbot_Hidra_and_Hidra_Plus_V2.png diff --git a/resources/definitions/hellbot_hidra.def.json b/resources/definitions/hellbot_hidra.def.json index fe1d580354..bf8eb16608 100644 --- a/resources/definitions/hellbot_hidra.def.json +++ b/resources/definitions/hellbot_hidra.def.json @@ -21,7 +21,7 @@ 0, 5 ], - "platform_texture": "hellbot_hidra.png" + "platform_texture": "Hellbot_Hidra_and_Hidra_Plus_V2.png" }, "overrides": { diff --git a/resources/definitions/hellbot_hidra_plus.def.json b/resources/definitions/hellbot_hidra_plus.def.json index dc718dc5f2..70938b5b00 100644 --- a/resources/definitions/hellbot_hidra_plus.def.json +++ b/resources/definitions/hellbot_hidra_plus.def.json @@ -21,7 +21,7 @@ 0, 5 ], - "platform_texture": "hellbot_hidra_plus.png" + "platform_texture": "Hellbot_Hidra_and_Hidra_Plus_V2.png" }, "overrides": { diff --git a/resources/definitions/hellbot_magna_SE.def.json b/resources/definitions/hellbot_magna_SE.def.json index a449a60f01..7f36c24525 100644 --- a/resources/definitions/hellbot_magna_SE.def.json +++ b/resources/definitions/hellbot_magna_SE.def.json @@ -8,11 +8,11 @@ "author": "Hellbot Development Team", "manufacturer": "Hellbot", "file_formats": "text/x-gcode", - "platform": "hellbot_magna_SE.obj", + "platform": "Hellbot_Magna_SE.obj", "has_materials": true, "has_textured_buildplate": true, "machine_extruder_trains": { "0": "hellbot_magna_SE_extruder" }, - "platform_texture": "hellbot_magna_SE.png" + "platform_texture": "Hellbot_Magna_SE.png" }, "overrides": { @@ -24,4 +24,4 @@ "machine_name": { "default_value": "Hellbot Magna SE" }, "machine_width": { "default_value": 230 } } -} \ No newline at end of file +} diff --git a/resources/definitions/hellbot_magna_SE_Pro.def.json b/resources/definitions/hellbot_magna_SE_Pro.def.json index aa71aab37b..eb3120b9ed 100644 --- a/resources/definitions/hellbot_magna_SE_Pro.def.json +++ b/resources/definitions/hellbot_magna_SE_Pro.def.json @@ -12,7 +12,7 @@ "has_materials": true, "has_textured_buildplate": true, "machine_extruder_trains": { "0": "hellbot_magna_SE_Pro_extruder" }, - "platform_texture": "Hellbot_magna_SE_Pro.png" + "platform_texture": "Hellbot_Magna_SE_Pro.png" }, "overrides": { @@ -24,4 +24,4 @@ "machine_name": { "default_value": "Hellbot Magna SE Pro" }, "machine_width": { "default_value": 230 } } -} \ No newline at end of file +} diff --git a/resources/images/Hellbot_Hidra_and_Hidra_Plus_V2.png b/resources/images/Hellbot_Hidra_and_Hidra_Plus_V2.png new file mode 100644 index 0000000000000000000000000000000000000000..1cbdea4aae04bfa83f43f67b59ae3091d1d6d5d7 GIT binary patch literal 13726 zcmeHuXH-*Lv~B>gfQYCRL5N3GR7yalHw#5Yz=rgMA|N$F=#T^pO3y*1cR7G`LT@36 zgebj8iJ=Hc?=^(9x8r^HjW_Oi_r2e5jPoM{vUXW}%{|xrzHiQ%@CQcvd_1B&AP|V} z?j4;+AP{F6@M%4K5ExmfaM=QXj=Z>IjsSspPq056{bMLP2y_;7SLfyv|J0Q+{uiS= z$X^UTr|%~o-Z*$6?u_cUvteH@VqS6oWdnXAa_F$qnWGv;2*Y`wT*I}yj?dqBTgy4a zX9G4nw{usl=aL)x$NT6>l9LKt3T+%b$FN^GZr`7J#rNv4%qzRg;mzkBmX#rAk}wt8 z^)k}t(km_$X&m&L1i8GDMxJQzx13-wn-%>5-*5ak+aPa2Kp9`OVR4;Ri6%?ho4O4GC4Oi_)Q!GizT|7o;0KF>OWU}L z_w)_|XBh%#NwEr%JYY^x^XQL+ju~ID*7b4I@A{_Lkgj)2R4U9+u*^+#H4Pk^zY$B}2{THYW(=c;%o@heT*v_u=Krw}Bj>%s1&? zkohapHd_c-@eU8@#)X}a2+Nt6=6IiJ;CgNcLt|NGn=T|bD6_vnv}`3^4g|VVq=v8& z6HSR~;siYqoT;3Rs(#N63L#zme;D}xX!U;w|BD;`Ymk2p@_!Fh|9Z&39`dh;{C6<^ z@9y|_cl^6M{(s#an?g!T5VKM2KRM&w`jq@N_u|)IL7&BVH3UI*qlW?^&tdr0_SM|n zP~P1YF%jH!w;_Y}4tl0=CO`ZI&TZvqNsd8-1^*cpdDNV><$lI!Ls07gcc&jbh_N%A z=gk8UUb~j8Y zW!xEVkDIH+VDP@rhNm(7loBfv)Yy~n0XIxN_<69+6=i9gmjU@IC;XO26!w~T*ZA~` z+VIHWuf%xWA8q(Cyw6f|^*afXqTPUq%SRKewzIlT3ZMGu6=_vb@?+JNCP-)-?`Im! zm57d#`2rs+t|ze}+=<_25}UvV(_IUG&8BsC3U1C zfl_H*1=ypuG%IToYnY-;NvJQiASgD=94`YAaz(=la!};mxg6IaZwJWagx6Bd{ypwB z?^a#=VJjaWKcRn8)_(T0=1bna!}vU|I6Vxi&}rs;mMaz>I(32WTH2JWo_nS>#V?pO z`K4hE7i3cpnG~KFA1a;@|CTHN5urX9~k=7dhD#qL`DJ2M@@|<4uB| zd8rKu6fnxs7p6or-vVRWUAv>b`Bul3$ih%VzY@re=p$w}sQj5hYN&zN49{#uTLy1J zQ}Rl}ZeIOQ&KqgR%bMvAjF+;7;1Ru}!Sq)aa4mUKU`+*521Gn-^RliKT7zbc8Kb;( z&pf8%pz*a=VwPw%TJkn1nFmh5e15u7);JW>PhUUCpmik8&wT;ywYC~-q4i5-q0y0H zGUghq5Q=f&Sj488kB?a7y@-d<{XcZrH54K!z zfz0&z^uTZ?(cOUe2L}glr#La9)grvF(_q-DU(l2WcD;Tr?%}irQBl4WSfIxxsS{2e z_h&y0Ej5k>M!MQSPn6yGxw!EuJ3PMQ3MGd!6?bycVXkPZ3%vMO$;$xUW=`iT<3c|5 zv1ZPLW{<1lU5AbSfliAi3LlX9J3Y|KAFbqDmAo?cHTRPQFuDbd#srS;dwUY!$Geu) z*Q@i^b^%K*-97cTB?ObO4zJs>L{=T!3ygBL=?11|NXO_vvJ%p7J>-|>Iz`-J?a^3u z#7fT0mfSOCyr}`1Pnj4&ryAYHp#hDK3u$Z4;r_*gho7guhI=&Tz{$7yk1=;yb++a* z;!pWG#E8ccv8*%w9}F{h@lx62n}M5(U!V62AZ9s1Q3 z)y(;u@Oj~~rc-6lcCZY7etR`+cyFtmH{pKJsa;}^rgC5p!;imJfq)H22cd2Qr^_PI zuEXyIrTn^o2g_(7oGrVh`5dzjdC!67kw?Kb)%oxr4 zn;OW0Q#a;d#~AcPVJ}4)tJ+_!gf%zS$+WfS&RVv%1D|$hhxYcSD3L%My9{{R=dk#t!ayO8A83#yj*nO*0gOWL0E;4Mk%@+_V`hD-{6(CZndK zPPUD2VU6n@%65t^w716e?g(S_;x)}k_4vk_PYNM*M!+++wY1H0C%^)AhZCCCL$`V? zP*2Iz7}kru)u1($eRha2YlAxZ^&M1uwjER<8{^CxfHVq}L5?w>xe+N~39I_b!X1S2 z_z10Z2u2pibU9s>hwZ&O)X58;$7LcJ_0kO~$wG1?HE^5laoVcbw;}Vc*7B#NN24)9 zCDRuCZ)wE0ya}U$E4^PN6;>wuz#2-yT_&b}rSkiC3LLr z2$xbq2AI|rU9+uO?K-^f;5zJE48TElcKHXxG|-*s5bpQF26qXB`<^Duy**cbrE%XN zSRFRLm}Sw^o|GXr$&5=$C#C5E1jD+)ZKr@&y(2s@B=CaG%Vz}dm&-Go{ztKuPh=t$ z(-Jx|Q0q>}u{nHUgFj<1P{6=h6UWFy&PW)&p|47zuD>@d45MNnr#se8{zXF7^VhF= z>4BK-!}Juq=T^F#Gd2+{mOV^?BW;?2+gt!{b4w<2XM+!H8Q+D#xpw&NOV>R|liz<> zQi5KC!?t5`lMc9De8qw=7km61Qq)`NBZwf=>Iu)eT&9_2^?Tyc2Yj4DpIsGtcGx5* zf_r~j#hx}yRvznvEhON?gya(aVEh$SEQuQJ?p)}D;<$3RnbT)!YB0eYTJLCRs?<}J zEcpg6dRnYwW-;jaZtq@JguX+y>`L{a8veG!e)lh%H3bJ)c4DFfD&m^7L+%|fyD@fo zoVha;Ek?7;%Xg7*vO4Rt*uIMmv^H9bo4lQkKeHb&2pz{zu~=DmC8A0SIEYOc3z4fF z?ZB(62i&Kk@V9;XlH1z3K?*~d7Bnool27aj8>8&R;ob~+18an^NC|$9*%QjaQ+`jE z$u&Q#D{oi}l-=lZAmiIU!{oGkcGz^nruwz>vx#5x-*{IfXWT^O#onUnOOyAk8ckwq zZ>+}ZgHOwi#w!hxR?w@eDQ7{7QZ_G>X#)`EcPdF^IB2Z_o*A#M%cr5BG2+|aU(Yk* zBoR<@5%I9X-ML0{` zNyR!r)|?w$#^T1X2jQ}qL%(VR&<8`3)&188B_TNaqp{9X4f)_Q59md7!2DpnYW(X% z{1T^&J@0e<29R+lvyQsQy;G)-UT)iAb{NC@M!l@YqU7b+2zXZ<{Cteo+r)G!xh0=e zTf4eh1y-%Ua#MB{oS7(KmO0Cu!qexhJtvh@3IXqeBGz+LLpXz#-LtFL*v2oSFleuY;mABC3D}kp=4vIgJyK%*HKEv= zELbQ|WKmUsU`H?~SLkwh1ul`sivUw@ys)?$0vM9JJL27&1IOtr}is!;jy! z7*z5OTi_%mmu^tZwsrtmkVq^xJP&IB3wVT6lc$0<*63gCzhc!*CnXqzKhvar8|rPo zl5jgpalh8HhB3=X8#ubkLwmNa?PIi?EVRLcV+Q~pAK6=rv+&VIsaYtLO>?XDSqw|C z$mebPh)5{oOIpt=YT})-?2Ty z_qTQXr(f)JYq=SCVjb%MIBc;cUj2CXSX?82hzr0rAC*(FrdGbXrf#nLbz<=4Xezb_ zUZ0JBG{7_N+22whHrzYf{{ZWNvrBjN9iLi@(}II401Es){MY{OESXlLS&Nj{JHb0g zd}?=oqctYCzV7eBncwZL-b!9+U5MiCZ;H)sz&z!4D7WRljINo^S>ky8Ms-tC=S)#v zWUZr`uyTs}XkXv>i7hMmSS@z#JFY?hir*Vhg)uNoq#0u~0~s(!D1G0e?Ym^V0J9uI`_vYJFaaf`{kl3ja8*eL?*m>ow4HlmZ~4=mUsFXy{T_ka04EJZ zNwz?I;`cEyV178;J@0zW;MV|E`RhtE0wZpRD$InW^)lCRYfT&-b{q&m8P5Jwd*kvf z(J^Shv|%%QOrZQRDc*OU#E^7Kofxv_pK}1{#Ti7C3xLXOISk-Obj{ef>4Ksc$6`2e zd1bB50tu{rO%zf{^mweGy_=6SjvmEQyP4t8rx+j8j4{=I*ismB|4YV>VfD+K{}bKI zS72QT?pa=dJ_Ll4`yIas3o9F*3g+V#mNN_1a}6r)>0l$OJ8OVf|DLYf|w2Jga6ZM3d(@^)I1sw<^3Mt9>cR8+GV6u-8$u3{-A>+Nt#*J8wh zAn*uTyKi(@M3*^*rt_;iZux^2qXo=tppn$l5AOM*!rq2{*Iq7!(UO;2WI+dHK%j7i zP>{_D?71)a=NcaEFll~pAmdvh1dJL8TiuXSth|1`$^Bl907a1Ed`ig1j#J2nQ_8!s zaAvfydp^k}_^s*NHhsUbI#=UKvX(#NP@s_;+%2u0NL)N59Nbt#(WlV;dm!&nT9ZEx zhEO|CafTfEC{}9As(|1e4iyQf)2Sb;%et=DoEbhvSqb2{)OA><`2fHHW7_6>(#1|M zSl4*BWJX=6L9yMD%lIgN%(7T;2RDqCF|O?OoW8zVLaFj=V*C!375IE|Z0IC~f7N_@ z^<>_43togtk>8nySwZbaB<)~~+)GpX?jN>`jq}4&^dIfh}Y1Xac-$_Zn*kE*ptPFUM#$*jK&!-fbUzpYCG$lax$&(dyFb zK03sfS&0B+?^GH1!s*q3Z;YrplX zhfX%8czahGJAaM$@(8LvY!+f4rh#A8VPT(AX>|D@PZ!vrQrToLr#Th z(ep@w;jp18OFSE4XWrUOx@QcN$xXr3&FV)rI20Rp?-~>#tm$y!(x!h9pZvu|MJ0ls z6Dfy;A*;{xe|ws~4&lCZ98x^9DRxE$a-)uCZnQ1Kes%tjs)&R;_I=VdR2Z&FUCE4u z2eH+D&zQeGe1oRzpYFLIWN8rU_{KS(jG}LVkD(FMvPjZ|binAKjUZ~?XFftAe$RgASKJCPdV-5P3ayn-zF9X7L&m!_1>t7I?yrM9g22i`{xYPIP) zqLW>US^2q>d->3y#wtLpK)QC@Q+u=DOWV`oS?r?0T#RQ2-rn8J^^we@3*cwt9I_YDlWYeNC({M zWy>@>laMJ%3~$2}XK5Wh)k2RKbmx}qQn(?O;ktosBhP)kCemR_Sd+@|_8O?eNs|p$ zMijM}KVvOD7*Ao}#S(S$w*oE1ib#vLtGrZKdd@&^?)`xw78H| z`y9|Z!iUgTpBBnG2v=1r4wC5=BaX_uzNN2k+onhOGujQ&xQ4wx^#0?Fg``XKv+rAo z5-`aUbF>M?yrUEi2Y=@x*fE!-Yr6qUzMHnF03$LVu>|K=00^v7L9TU(vPR zW3P3s2vDUv&#i8%r$rvW@|T_!oY~eDH03h!hhR*p&Bl!d0HI!rvRblOA0ZH)P*V4g zG_+g{aC~xQ00Lb+hm~D5>-S>IRsH)!<@P^N)&2R{1I>+{D{`aB&t*sI?l*HP)~sY5 zItUKfj-8a2YxpFsx7V~C3Q5IJ)A;$vk!xdIRe?veTRf|$>Lnx<^j?+X_LEna#irSL zN`D&~<)G_MFerymXtuTS!|D=r`X!z^X>akg^drWWxK7<7|!@C$=Bx9wXxcpjKrsKb@eu}Csl!K&RT zhPh-ISqLM$7qT|X(hWH7L%D!B##RfN1+Oc8@Gkav4u zzxKpFE;@RAvX)vR%cyD`alYbdT^gHcohme8W^Z0(Q9=hHzQdS#_(uOL{8CLqd$ykY zfEbN3^Oc6S^u(vsGwWRw(#Q?vxOnnKM^6TuiYxR#5*hC5GUQ#9Jy9|9rTp^I8jsNt z)0LSonUCz8K0k83MkE`I5dv_yl|19}zrN|Dgtn3)Jtls9^Bb=ZVLmo=d*@S1f7oA| zt6us-hN2lem&NsfMj4GVz;G`?TLw{XP_MpsY8AX$c3)UQtF(77Ee_eW?(F-R`Z_^Q zw|Tz|3~Oz%4w_2z1(NV)@P>?=7g4p`B#P;lQ z)^8oc@aZQK4E8*;bl#X3&l2^{m#8dtR)-C{`K9h{kvbA;_?X@=iiAAVLQ&P?&)zUs zQdZ|F{TKee%E5bH_LDqWb!l;Dslf>`SJbH!>rdZ+!ya_h%AMhh0bb*1UA}g%ZD$*j z>&b`92bxo_lKY+pqjP4b9X-eXkWr&T@nKS24|eM2=meX#mocOpP3WxXx@`jMxUd=F zXHS)i!%6YSiH9szjRSaI0@N*)A2B@i)%knOHE2!|49fJFRk@NhO6emTaBmhzQ2gPe(G*>8M(X4|M#lRn}-N$g&=?p?1o zx5O??lG8~$9a$N81&9{eD)YtSfLm&cJ&BUt_p)WAUQbD5S&7p zyAgSZG${0~Y_AHEY;H1))9K$|Oj?bQ8rSkA9?NN83HF-%G!(AwvfFswAE;hU*eIf!l|w;5 zSKWP88_X8ap7!^N|HOLG-OExoE9;z~8(oH~HbAo*rf^awkq>mkFit%*Q#5i2=%D*} z=pHw~trh+DdiOr&6~>E|A=9DkPP3wDfp(seukYIQb%Eo8PlpQW1Lk_Jc}_<`Av{-H zLn@a;y5JiQa=^hjdDLF7zYmwv8q`=AIQPMBA#H$Xgl=L-*02YGI-B>3xZPHj1sb}z zt=V65>5k?ONxsdq?&SpF@`193(Yn&4KV5^@)F%I<$8YtmmE7=Z((5Fe=~C$miZVrz z{V>*x07?P-({t%!D?lMGdui5i$KIFu3p)v9G2#1n{T{kn4p8UPhfzO)WSmeFV_$Qf5IU#16_}1jW8Lv z?McKquk}Gw3_!6&rG0{PPDv1-jImQ|jN6bHSvNOm?^Y9~Ce3%Tf9QjeT7LfC8OC(F zl>QVW#-}0_<9U@7(AhosB)#yyZ|7rV)L33q%}#lhYePAnh-C9b2PEQ>Rt*^(_Uj3c_K z#rYad`N3L_Yn0#Vnvx`zLgv&tsInnNPx$^M@?so#7nh%fU04K6IZX{s3WxtXE4b=c^S!zu`ifPJcnYI8Z&H-9}l#= zhtbLrm2A3zVk7^DG4Bog)H}WsY~~$KPHjh+_=9IO+QNog$T2h&TdI1UE7}{au1+7h z{;;`?8nxw9WZwj2xpTd(Lg#XStms&k!u%ZkcInYTS$G?<_3M-tp2u)zOM$7$gljPO z_}_If{sO7wo+h}KoZv_a=W+%*J6XR4$_*dWF4+xm_^YhQYH!bLcT0bwcQ{ffzPC4@GBe=3HB_NnIyB_{Z{)=&E z9RttCw<`Psspgf&igdd->Zlu+P(e|@9p>tO9Co+86L)n`^-E}WsX)8=DJXiZN`EfR z$nTVro@xa+@Q?E7ny3vhmScT2jQTB%pLj+Tgiy507(uTU0@KA!b#|X|Sc=4w>>GTh z-H{(Or4+!F&C%95#Z~kb46^L`KSGJs{yr!tw(au$n;kd*5)){s$iiN33Lyx8T=wgq zq!wgt1qP9gA@#La62Jl-%rg_uc_E)J3+iq>@_l2Tum6a?>73;ycedb7R#q0)Yp&Xe z_>7|x&0=D`xYRh;%!uMWeJv|p@cm><4RocM)o10n5ZN;`jp!vVef(V=5uunCBZtZg zGppt}!{RV-VtFQhs$9CB=c`7G*QW(uQU<$WLqz-fDG5`0@_ellyUC*E;jop~E7%$O z_kS`zc%J#7DJ(z^)ebYnHy=_bJnEhOluDIf zZSETSZ4-kR?Zr*$$4$CD1yLvhH5yOk7een7v{hO7v2EoBsX%6X8dp#ez>h=#!6hJ| zsJ_36e=EIn^%`Qh=zz>Z2S0=VRMcmf+hF+52%8B1OLJ$-G2yXgdu^#WEA75ZW{qyC z4AooPKt3)|@~GXLf+vUDIyw~IDbj-O`#n!T|NffiQS-`=$q=>2p^q=woz7jJS--`u zOh`wS zK0P{^*a(rXwPo|FShd-U90sIK$wlm9Yc;*#WbWxF-zVrR6Dx9*sn{MyLl16Yv3q%{ z*b3#XKyz$d+91BG_#CDhUTA7PQs=ieo-J%77<0z4=A@~ezWk}~$S5inNT;}*Kc`5m zJxp$Kh+%Ggm(t^bT#pneol4oKeYb z@t0Nnq!ufpntmxl$j`fRqZTS5E{>*b5b+z7r0$opjeon8Km6tP(NitEY%<;wKPWsY z+Ove6HJZEEiHu(0nvpP_^G7{w6ESI^jVqUe#cbvK zMtf=tG-(&Xyq&^OK?w!3#aHEr6WHx0=#I7{)H=+`wEV*f;VsWEPN__JJ`+C9xR@yv z7fe+-hfD2SsV%lQ96OAaM@Af&o?e3y$eKD7%Cl__) zcJXp^0e;|m`N2K*EO}B;FSv8x~x(+>?(u&zhyowzd*%enm zIE`g^vm!3TM3hNe;OtZdpTAIq6=UB{1&m^fl(_oehPzEC(};%~L=0oZ%hIJsxJ&lz zjZ`Mzv{`ALny$SVq>5j!okA>_Wzfu9+jO6i_&KrJLtoYXRx=h60u;}po;b6Gvytom zgXd;n8PC|M)ZAN<-x7>wY)Z~V%@~TII+*7934evw>X*`&q9*~IpfVg;A@u- zN}mFC-fh?tb_+KxFlxS9xG5kua3o%J3xs&f$CGHn8K2C)B-Qpcr(;@3j$_dS(BB$j zryiUH4!AsbTWp61{+f~tsSGo9(QAH$pbGMwv$NC`1Nrobmi_=%C1;ieI(uX)t{!+s zF=`mD6IhGSVE)O1Sp9B literal 0 HcmV?d00001 From 0d06822e1b9aaefe2d42f3e3f531eadb927a0b2c Mon Sep 17 00:00:00 2001 From: HellAholic <28710690+HellAholic@users.noreply.github.com> Date: Fri, 13 Jun 2025 09:29:06 +0000 Subject: [PATCH 50/84] Apply printer-linter format --- resources/definitions/hellbot_magna_SE.def.json | 2 +- resources/definitions/hellbot_magna_SE_Pro.def.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/resources/definitions/hellbot_magna_SE.def.json b/resources/definitions/hellbot_magna_SE.def.json index 7f36c24525..0248b0caf2 100644 --- a/resources/definitions/hellbot_magna_SE.def.json +++ b/resources/definitions/hellbot_magna_SE.def.json @@ -24,4 +24,4 @@ "machine_name": { "default_value": "Hellbot Magna SE" }, "machine_width": { "default_value": 230 } } -} +} \ No newline at end of file diff --git a/resources/definitions/hellbot_magna_SE_Pro.def.json b/resources/definitions/hellbot_magna_SE_Pro.def.json index eb3120b9ed..cb13626121 100644 --- a/resources/definitions/hellbot_magna_SE_Pro.def.json +++ b/resources/definitions/hellbot_magna_SE_Pro.def.json @@ -24,4 +24,4 @@ "machine_name": { "default_value": "Hellbot Magna SE Pro" }, "machine_width": { "default_value": 230 } } -} +} \ No newline at end of file From 890db9da6efefa51f93a82eaa292b56ae4053b7a Mon Sep 17 00:00:00 2001 From: HellAholic Date: Fri, 13 Jun 2025 12:38:02 +0200 Subject: [PATCH 51/84] Update PurgeLinesAndUnload.py --- plugins/PostProcessingPlugin/scripts/PurgeLinesAndUnload.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/plugins/PostProcessingPlugin/scripts/PurgeLinesAndUnload.py b/plugins/PostProcessingPlugin/scripts/PurgeLinesAndUnload.py index 922aad902f..44c2b50f9e 100644 --- a/plugins/PostProcessingPlugin/scripts/PurgeLinesAndUnload.py +++ b/plugins/PostProcessingPlugin/scripts/PurgeLinesAndUnload.py @@ -35,9 +35,6 @@ class Position(tuple, Enum): class PurgeLinesAndUnload(Script): - def __init__(self): - super().__init__() - def initialize(self) -> None: super().initialize() # Get required values from the global stack and set default values for the script From d0947c5fb2634e9b7a046dfd18050bbaadfdacff Mon Sep 17 00:00:00 2001 From: Erwan MATHIEU Date: Fri, 13 Jun 2025 16:17:58 +0200 Subject: [PATCH 52/84] Include new print feature type CURA-11978 --- cura/LayerPolygon.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/cura/LayerPolygon.py b/cura/LayerPolygon.py index c4d57c07a0..cd4642d719 100644 --- a/cura/LayerPolygon.py +++ b/cura/LayerPolygon.py @@ -25,7 +25,8 @@ class LayerPolygon: PrimeTowerType = 11 MoveWhileRetractingType = 12 MoveWhileUnretractingType = 13 - __number_of_types = 14 + StationaryRetractUnretract = 14 + __number_of_types = 15 __jump_map = numpy.logical_or(numpy.logical_or(numpy.logical_or( numpy.arange(__number_of_types) == NoneType, @@ -281,6 +282,7 @@ class LayerPolygon: theme.getColor("layerview_prime_tower").getRgbF(), # PrimeTowerType theme.getColor("layerview_move_while_retracting").getRgbF(), # MoveWhileRetracting theme.getColor("layerview_move_while_unretracting").getRgbF(), # MoveWhileUnretracting + theme.getColor("layerview_move_retraction").getRgbF(), # StationaryRetractUnretract ]) return cls.__color_map From 2663d8eaceb1ac79a229da230c5857e4bee7c787 Mon Sep 17 00:00:00 2001 From: HellAholic Date: Fri, 13 Jun 2025 16:32:40 +0200 Subject: [PATCH 53/84] capitalization .git ignores the capitalization on the repository so the assets rename did not update their capitalization. This fixes the unit tests --- resources/definitions/hellbot_magna_SE.def.json | 4 ++-- resources/definitions/hellbot_magna_SE_Pro.def.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/resources/definitions/hellbot_magna_SE.def.json b/resources/definitions/hellbot_magna_SE.def.json index 0248b0caf2..a449a60f01 100644 --- a/resources/definitions/hellbot_magna_SE.def.json +++ b/resources/definitions/hellbot_magna_SE.def.json @@ -8,11 +8,11 @@ "author": "Hellbot Development Team", "manufacturer": "Hellbot", "file_formats": "text/x-gcode", - "platform": "Hellbot_Magna_SE.obj", + "platform": "hellbot_magna_SE.obj", "has_materials": true, "has_textured_buildplate": true, "machine_extruder_trains": { "0": "hellbot_magna_SE_extruder" }, - "platform_texture": "Hellbot_Magna_SE.png" + "platform_texture": "hellbot_magna_SE.png" }, "overrides": { diff --git a/resources/definitions/hellbot_magna_SE_Pro.def.json b/resources/definitions/hellbot_magna_SE_Pro.def.json index cb13626121..aa71aab37b 100644 --- a/resources/definitions/hellbot_magna_SE_Pro.def.json +++ b/resources/definitions/hellbot_magna_SE_Pro.def.json @@ -12,7 +12,7 @@ "has_materials": true, "has_textured_buildplate": true, "machine_extruder_trains": { "0": "hellbot_magna_SE_Pro_extruder" }, - "platform_texture": "Hellbot_Magna_SE_Pro.png" + "platform_texture": "Hellbot_magna_SE_Pro.png" }, "overrides": { From 9feb73dcf5e8da27c84ace46892b5e0b7045f402 Mon Sep 17 00:00:00 2001 From: HellAholic Date: Sun, 15 Jun 2025 15:58:02 +0200 Subject: [PATCH 54/84] path->paths The correct keyword for filtering pull request triggers by file paths is paths (plural), not path (singular). --- .github/workflows/printer-linter-pr-diagnose.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/printer-linter-pr-diagnose.yml b/.github/workflows/printer-linter-pr-diagnose.yml index 8feecdb3ee..64892e0db1 100644 --- a/.github/workflows/printer-linter-pr-diagnose.yml +++ b/.github/workflows/printer-linter-pr-diagnose.yml @@ -2,7 +2,7 @@ name: printer-linter-pr-diagnose on: pull_request: - path: + paths: - "resources/**" permissions: From 70476db7f2b2ac1725bd74b956a3414324af8b7a Mon Sep 17 00:00:00 2001 From: HellAholic Date: Sun, 15 Jun 2025 15:58:20 +0200 Subject: [PATCH 55/84] Indentation fix --- .github/workflows/update-translation.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/update-translation.yml b/.github/workflows/update-translation.yml index 189390410b..2134467ec9 100644 --- a/.github/workflows/update-translation.yml +++ b/.github/workflows/update-translation.yml @@ -11,5 +11,5 @@ on: jobs: update-translations: uses: ultimaker/cura-workflows/.github/workflows/update-translations.yml@main - with: - branch: ${{ inputs.branch }} + with: + branch: ${{ inputs.branch }} From c5bd7009615dcda52a24656df15874b651659974 Mon Sep 17 00:00:00 2001 From: HellAholic Date: Sun, 15 Jun 2025 16:28:29 +0200 Subject: [PATCH 56/84] Create slicing-error-check.yml --- .github/workflows/slicing-error-check.yml | 67 +++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 .github/workflows/slicing-error-check.yml diff --git a/.github/workflows/slicing-error-check.yml b/.github/workflows/slicing-error-check.yml new file mode 100644 index 0000000000..7adf1a34f0 --- /dev/null +++ b/.github/workflows/slicing-error-check.yml @@ -0,0 +1,67 @@ +name: Slicing Error Check + +on: + issues: + types: [opened, edited] + +permissions: + issues: write + +jobs: + processSlicingError: + runs-on: ubuntu-latest + steps: + - name: Check for project file and set output + id: check_issue_details + uses: actions/github-script@v7 + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + script: | + const issue = context.payload.issue; + const issueNumber = issue.number; + + console.log(`Processing issue #${issueNumber}: "${issue.title}"`); + + const hasSlicingErrorLabel = issue.labels.some(label => label.name === 'Slicing Error :collision:'); + const titleContainsSliceFailed = issue.title.toLowerCase().includes('slice failed'); + const bodyText = issue.body || ""; + const bodyContainsSliceFailed = bodyText.toLowerCase().includes('slice failed'); + let setNeedsInfoOutput = false; + + if (hasSlicingErrorLabel || titleContainsSliceFailed || bodyContainsSliceFailed) { + console.log(`Issue #${issueNumber} matches slicing error criteria.`); + + const zipRegex = /(\[[^\]]*?\]\(.*?\.zip\)|https?:\/\/[^\s]*?\.zip)/i; + let hasZipAttachment = zipRegex.test(bodyText); + + if (hasZipAttachment) { + console.log(`Issue #${issueNumber} appears to have a .zip file linked in the body.`); + } else { + console.log(`Issue #${issueNumber} does not appear to have a .zip file linked in the body. Flagging for further action.`); + setNeedsInfoOutput = true; + } + } else { + console.log(`Issue #${issueNumber} does not match slicing error criteria. No action needed.`); + } + core.setOutput('needs_info', setNeedsInfoOutput.toString()); + + - name: Add comment if project file is missing + if: steps.check_issue_details.outputs.needs_info == 'true' + uses: peter-evans/create-or-update-comment@v4 + with: + issue-number: ${{ github.event.issue.number }} + body: | + This issue is related to a slicing error, but it seems a project file (`.zip`) is missing. + Please attach a `.zip` file containing your project (including models and profiles) so we can reproduce the issue. + This will help us investigate and resolve the problem more effectively. + Have Cura open with your project that fails to slice, go to `Help` > `Export Package For Technical Support`, and save the package. + Then create a .zip file with the package, attach the `.zip` file to this issue. + If you have already attached a `.zip` file, please ensure it is correctly linked in the issue body. + + - name: Add Status Needs Info Label + if: steps.check_issue_details.outputs.needs_info == 'true' + uses: actions-ecosystem/action-add-labels@v1 + with: + github_token: ${{ secrets.GITHUB_TOKEN }} + labels: | + Status: Needs Info From 18be62482e025d6dc04aa1cf5213824aaba67892 Mon Sep 17 00:00:00 2001 From: HellAholic Date: Sun, 15 Jun 2025 19:25:09 +0200 Subject: [PATCH 57/84] Update slicing-error-check.yml --- .github/workflows/slicing-error-check.yml | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/.github/workflows/slicing-error-check.yml b/.github/workflows/slicing-error-check.yml index 7adf1a34f0..3e8faaeb7f 100644 --- a/.github/workflows/slicing-error-check.yml +++ b/.github/workflows/slicing-error-check.yml @@ -10,6 +10,8 @@ permissions: jobs: processSlicingError: runs-on: ubuntu-latest + outputs: + needs_info: ${{ steps.check_issue_details.outputs.needs_info }} steps: - name: Check for project file and set output id: check_issue_details @@ -22,7 +24,7 @@ jobs: console.log(`Processing issue #${issueNumber}: "${issue.title}"`); - const hasSlicingErrorLabel = issue.labels.some(label => label.name === 'Slicing Error :collision:'); + const hasSlicingErrorLabel = issue.labels.some(label => label.name.toLowerCase().includes('slicing error')); const titleContainsSliceFailed = issue.title.toLowerCase().includes('slice failed'); const bodyText = issue.body || ""; const bodyContainsSliceFailed = bodyText.toLowerCase().includes('slice failed'); @@ -43,10 +45,10 @@ jobs: } else { console.log(`Issue #${issueNumber} does not match slicing error criteria. No action needed.`); } - core.setOutput('needs_info', setNeedsInfoOutput.toString()); + console.log(`echo "needs_info=${setNeedsInfoOutput.toString()}" >> $GITHUB_OUTPUT`); - name: Add comment if project file is missing - if: steps.check_issue_details.outputs.needs_info == 'true' + if: ${{ steps.check_issue_details.outputs.needs_info == 'true' }} uses: peter-evans/create-or-update-comment@v4 with: issue-number: ${{ github.event.issue.number }} @@ -59,7 +61,7 @@ jobs: If you have already attached a `.zip` file, please ensure it is correctly linked in the issue body. - name: Add Status Needs Info Label - if: steps.check_issue_details.outputs.needs_info == 'true' + if: ${{ steps.check_issue_details.outputs.needs_info == 'true' }} uses: actions-ecosystem/action-add-labels@v1 with: github_token: ${{ secrets.GITHUB_TOKEN }} From 5849fd9c990f30a90e487af9df4bd13489048508 Mon Sep 17 00:00:00 2001 From: HellAholic Date: Mon, 16 Jun 2025 10:22:40 +0200 Subject: [PATCH 58/84] Update CreateThumbnail.py --- plugins/PostProcessingPlugin/scripts/CreateThumbnail.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/PostProcessingPlugin/scripts/CreateThumbnail.py b/plugins/PostProcessingPlugin/scripts/CreateThumbnail.py index 8f0c74ceee..1ee85bdc0b 100644 --- a/plugins/PostProcessingPlugin/scripts/CreateThumbnail.py +++ b/plugins/PostProcessingPlugin/scripts/CreateThumbnail.py @@ -94,8 +94,8 @@ class CreateThumbnail(Script): }, "use_star": { - "label": "xxx*yyy", - "description": "Use '*' instead of 'x' for size of image", + "label": "Use '*' for size of image", + "description": "Use '*' instead of 'x' for size of image as Width '*' Height", "type": "bool", "default_value": false } From 5db75acffbdc593bbb15efe0f1eca2b502631fce Mon Sep 17 00:00:00 2001 From: HellAholic Date: Mon, 16 Jun 2025 10:44:36 +0200 Subject: [PATCH 59/84] No need for type cast -> it returns a bool --- plugins/PostProcessingPlugin/scripts/InsertAtLayerChange.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/PostProcessingPlugin/scripts/InsertAtLayerChange.py b/plugins/PostProcessingPlugin/scripts/InsertAtLayerChange.py index cec857a8af..d2a51a28fa 100644 --- a/plugins/PostProcessingPlugin/scripts/InsertAtLayerChange.py +++ b/plugins/PostProcessingPlugin/scripts/InsertAtLayerChange.py @@ -100,7 +100,7 @@ class InsertAtLayerChange(Script): if not bool(self.getSettingValueByKey("enabled")): return data #Initialize variables - mycode = self.getSettingValueByKey("gcode_to_add").upper() if bool(self.getSettingValueByKey("convert_to_upper")) else self.getSettingValueByKey("gcode_to_add") + mycode = self.getSettingValueByKey("gcode_to_add").upper() if self.getSettingValueByKey("convert_to_upper") else self.getSettingValueByKey("gcode_to_add") start_layer = int(self.getSettingValueByKey("start_layer")) end_layer = int(self.getSettingValueByKey("end_layer")) when_to_insert = self.getSettingValueByKey("insert_frequency") From 200119fe6a439c933853d10a9617c5610639a4b1 Mon Sep 17 00:00:00 2001 From: HellAholic Date: Mon, 16 Jun 2025 11:00:11 +0200 Subject: [PATCH 60/84] use core instead of echo to set output --- .github/workflows/slicing-error-check.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/slicing-error-check.yml b/.github/workflows/slicing-error-check.yml index 3e8faaeb7f..6a3bb6d4c3 100644 --- a/.github/workflows/slicing-error-check.yml +++ b/.github/workflows/slicing-error-check.yml @@ -19,6 +19,7 @@ jobs: with: github-token: ${{ secrets.GITHUB_TOKEN }} script: | + const core = require('@actions/core'); const issue = context.payload.issue; const issueNumber = issue.number; @@ -45,7 +46,7 @@ jobs: } else { console.log(`Issue #${issueNumber} does not match slicing error criteria. No action needed.`); } - console.log(`echo "needs_info=${setNeedsInfoOutput.toString()}" >> $GITHUB_OUTPUT`); + core.setOutput('needs_info', setNeedsInfoOutput.toString()); - name: Add comment if project file is missing if: ${{ steps.check_issue_details.outputs.needs_info == 'true' }} From 1803cb02a4998784bed4d70ce5498130591fd68c Mon Sep 17 00:00:00 2001 From: HellAholic Date: Mon, 16 Jun 2025 11:03:09 +0200 Subject: [PATCH 61/84] Apply review comments --- .github/workflows/slicing-error-check.yml | 3 --- 1 file changed, 3 deletions(-) diff --git a/.github/workflows/slicing-error-check.yml b/.github/workflows/slicing-error-check.yml index 6a3bb6d4c3..4d1c215d3e 100644 --- a/.github/workflows/slicing-error-check.yml +++ b/.github/workflows/slicing-error-check.yml @@ -10,14 +10,11 @@ permissions: jobs: processSlicingError: runs-on: ubuntu-latest - outputs: - needs_info: ${{ steps.check_issue_details.outputs.needs_info }} steps: - name: Check for project file and set output id: check_issue_details uses: actions/github-script@v7 with: - github-token: ${{ secrets.GITHUB_TOKEN }} script: | const core = require('@actions/core'); const issue = context.payload.issue; From baf5b450e5a3e4a1c409944157102d9f1c8c6d0c Mon Sep 17 00:00:00 2001 From: HellAholic Date: Mon, 16 Jun 2025 11:14:09 +0200 Subject: [PATCH 62/84] go away token --- .github/workflows/slicing-error-check.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/slicing-error-check.yml b/.github/workflows/slicing-error-check.yml index 4d1c215d3e..ce22b6b81a 100644 --- a/.github/workflows/slicing-error-check.yml +++ b/.github/workflows/slicing-error-check.yml @@ -62,6 +62,5 @@ jobs: if: ${{ steps.check_issue_details.outputs.needs_info == 'true' }} uses: actions-ecosystem/action-add-labels@v1 with: - github_token: ${{ secrets.GITHUB_TOKEN }} labels: | Status: Needs Info From 43ee8fd92818b916b0c86a06161c51418c004532 Mon Sep 17 00:00:00 2001 From: HellAholic Date: Mon, 16 Jun 2025 11:20:23 +0200 Subject: [PATCH 63/84] workflow update slicing error check core is already declared in actions/github-script@v7 so it's redundant --- .github/workflows/slicing-error-check.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/slicing-error-check.yml b/.github/workflows/slicing-error-check.yml index ce22b6b81a..9869ef9721 100644 --- a/.github/workflows/slicing-error-check.yml +++ b/.github/workflows/slicing-error-check.yml @@ -16,7 +16,6 @@ jobs: uses: actions/github-script@v7 with: script: | - const core = require('@actions/core'); const issue = context.payload.issue; const issueNumber = issue.number; From 429064f37b5260750725b3e8a1419463d28d3081 Mon Sep 17 00:00:00 2001 From: HellAholic Date: Mon, 16 Jun 2025 15:31:05 +0200 Subject: [PATCH 64/84] Update nightly-stable.yml Set the workflow to be triggered on dispatch Prevents workflow run errors --- .github/workflows/nightly-stable.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/nightly-stable.yml b/.github/workflows/nightly-stable.yml index 2790947ae8..badcef44e6 100644 --- a/.github/workflows/nightly-stable.yml +++ b/.github/workflows/nightly-stable.yml @@ -1,7 +1,8 @@ name: Nightly build - stable release run-name: Nightly build - stable release -# on: +on: + workflow_dispatch: # schedule: # # Daily at 5:15 CET # - cron: '15 4 * * *' From b3e9bc10868f6a06abe03130081315ad0925d974 Mon Sep 17 00:00:00 2001 From: HellAholic Date: Mon, 16 Jun 2025 15:31:22 +0200 Subject: [PATCH 65/84] Update nightly-testing.yml Set the workflow to be triggered on dispatch Prevents workflow run errors --- .github/workflows/nightly-testing.yml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/.github/workflows/nightly-testing.yml b/.github/workflows/nightly-testing.yml index 13f3670514..08d43570ec 100644 --- a/.github/workflows/nightly-testing.yml +++ b/.github/workflows/nightly-testing.yml @@ -1,10 +1,11 @@ name: Nightly build - dev release run-name: Nightly build - dev release -# on: +on: + workflow_dispatch: # schedule: -# # Daily at 4:15 CET -# - cron: '15 3 * * *' +# # Daily at 5:15 CET +# - cron: '15 4 * * *' jobs: build-nightly: From 89827ef4c1c8bf9da3fbca79164dfa977d250a4e Mon Sep 17 00:00:00 2001 From: Frederic Meeuwissen <13856291+Frederic98@users.noreply.github.com> Date: Mon, 16 Jun 2025 15:35:21 +0200 Subject: [PATCH 66/84] Revert "Remove unused global qualties" --- .../um_s8_global_High_Quality.inst.cfg | 15 +++++++++++++++ .../um_s8_global_Superdraft_Quality.inst.cfg | 15 +++++++++++++++ 2 files changed, 30 insertions(+) create mode 100644 resources/quality/ultimaker_s8/um_s8_global_High_Quality.inst.cfg create mode 100644 resources/quality/ultimaker_s8/um_s8_global_Superdraft_Quality.inst.cfg diff --git a/resources/quality/ultimaker_s8/um_s8_global_High_Quality.inst.cfg b/resources/quality/ultimaker_s8/um_s8_global_High_Quality.inst.cfg new file mode 100644 index 0000000000..d495da9f17 --- /dev/null +++ b/resources/quality/ultimaker_s8/um_s8_global_High_Quality.inst.cfg @@ -0,0 +1,15 @@ +[general] +definition = ultimaker_s8 +name = Extra Fine +version = 4 + +[metadata] +global_quality = True +quality_type = high +setting_version = 25 +type = quality +weight = 1 + +[values] +layer_height = =round(0.06 * material_shrinkage_percentage_z / 100, 5) + diff --git a/resources/quality/ultimaker_s8/um_s8_global_Superdraft_Quality.inst.cfg b/resources/quality/ultimaker_s8/um_s8_global_Superdraft_Quality.inst.cfg new file mode 100644 index 0000000000..026e5701de --- /dev/null +++ b/resources/quality/ultimaker_s8/um_s8_global_Superdraft_Quality.inst.cfg @@ -0,0 +1,15 @@ +[general] +definition = ultimaker_s8 +name = Sprint +version = 4 + +[metadata] +global_quality = True +quality_type = superdraft +setting_version = 25 +type = quality +weight = -4 + +[values] +layer_height = =round(0.4 * material_shrinkage_percentage_z / 100, 5) + From 6713ec3d7397bb22629ecfcd34ce0cf74403f6d4 Mon Sep 17 00:00:00 2001 From: Frederic Meeuwissen <13856291+Frederic98@users.noreply.github.com> Date: Tue, 17 Jun 2025 13:29:29 +0200 Subject: [PATCH 67/84] [PP-605] Add missing machine_nozzle_size to S6 BB04 --- resources/variants/ultimaker_s6_bb04.inst.cfg | 1 + 1 file changed, 1 insertion(+) diff --git a/resources/variants/ultimaker_s6_bb04.inst.cfg b/resources/variants/ultimaker_s6_bb04.inst.cfg index 756d6fd1d4..e0c62d9596 100644 --- a/resources/variants/ultimaker_s6_bb04.inst.cfg +++ b/resources/variants/ultimaker_s6_bb04.inst.cfg @@ -11,6 +11,7 @@ type = variant [values] machine_nozzle_heat_up_speed = 1.5 machine_nozzle_id = BB 0.4 +machine_nozzle_size = 0.4 machine_nozzle_tip_outer_diameter = 1.0 retraction_amount = 4.5 support_bottom_height = =layer_height * 2 From 265599a52ded3724c4d0656276156841ed200daa Mon Sep 17 00:00:00 2001 From: Sam Bonnekamp Date: Wed, 18 Jun 2025 01:31:17 +0800 Subject: [PATCH 68/84] add Anycubic kobra 3 v2 (and ace pro) profiles --- .../definitions/anycubic_kobra3v2.def.json | 52 +++++++++++++ .../anycubic_kobra3v2_ACE_PRO.def.json | 69 ++++++++++++++++++ ...ycubic_kobra3v2_ACEPRO_extruder_0.def.json | 16 ++++ ...ycubic_kobra3v2_ACEPRO_extruder_1.def.json | 16 ++++ ...ycubic_kobra3v2_ACEPRO_extruder_2.def.json | 16 ++++ ...ycubic_kobra3v2_ACEPRO_extruder_3.def.json | 16 ++++ .../anycubic_kobra3v2_extruder_0.def.json | 16 ++++ .../meshes/anycubic_kobra3v2_buildplate.stl | Bin 0 -> 4284 bytes 8 files changed, 201 insertions(+) create mode 100644 resources/definitions/anycubic_kobra3v2.def.json create mode 100644 resources/definitions/anycubic_kobra3v2_ACE_PRO.def.json create mode 100644 resources/extruders/anycubic_kobra3v2_ACEPRO_extruder_0.def.json create mode 100644 resources/extruders/anycubic_kobra3v2_ACEPRO_extruder_1.def.json create mode 100644 resources/extruders/anycubic_kobra3v2_ACEPRO_extruder_2.def.json create mode 100644 resources/extruders/anycubic_kobra3v2_ACEPRO_extruder_3.def.json create mode 100644 resources/extruders/anycubic_kobra3v2_extruder_0.def.json create mode 100644 resources/meshes/anycubic_kobra3v2_buildplate.stl diff --git a/resources/definitions/anycubic_kobra3v2.def.json b/resources/definitions/anycubic_kobra3v2.def.json new file mode 100644 index 0000000000..59afb1c660 --- /dev/null +++ b/resources/definitions/anycubic_kobra3v2.def.json @@ -0,0 +1,52 @@ +{ + "version": 2, + "name": "Anycubic Kobra 3 v2", + "inherits": "fdmprinter", + "metadata": + { + "visible": true, + "author": "Sam Bonnekamp", + "manufacturer": "Anycubic", + "file_formats": "text/x-gcode", + "platform": "anycubic_kobra3v2_buildplate.STL", + "machine_extruder_trains": { "0": "anycubic_kobra3v2_extruder_0" } + }, + "overrides": + { + "machine_height": { "default_value": 260 }, + "machine_width": { "default_value": 250 }, + "machine_depth": { "default_value": 250 }, + "machine_name": + { + "description": "Anycubic Kobra 3 v2", + "default_value": "Anycubic Kobra 3 v2" + }, + "machine_buildplate_type": { "default_value": "PEI Spring Steel" }, + "machine_heated_bed": { "default_value": true}, + "material_bed_temperature": + { + "default_value": 60, + "maximum_value": "110", + "maximum_value_warning": "90" + }, + "material_print_temp_wait": { "value": true }, + "machine_center_is_zero": { "default_value": false }, + "layer_height": { "default_value": 0.2 }, + "speed_slowdown_layers": { "value": 2 }, + "material_diameter": { "default_value": 1.75 }, + "material_initial_print_temperature": + { + "maximum_value_warning": 295, + "value": "material_print_temperature + 5" + }, + "material_print_temperature": { "maximum_value_warning": 250 }, + "material_print_temperature_layer_0": + { + "maximum_value_warning": 295, + "value": "material_print_temperature + 5" + }, + "material_print_temp_prep": { "default_value": false }, + "machine_start_gcode_first": { "default_value": true }, + "machine_start_gcode": { "default_value": "; external perimeters extrusion width = 0.42mm\n; perimeters extrusion width = 0.45mm\n; infill extrusion width = 0.45mm\n; solid infill extrusion width = 0.45mm\n; top infill extrusion width = 0.42mm\n; support material extrusion width = 0.42mm\n; first layer extrusion width = 0.50mm\nTYPE:Custom\nG9111 bedTemp={material_bed_temperature} extruderTemp={material_print_temperature}\nM117 ;display LCD message\nM900 K0.05 ;linear advance factor, ive only seen this set to k0.05\n;START HEADER\nG21 ; set units to millimeters\nG90 ; use absolute coordinates\nM83 ; use relative distances for extrusion\nT0 ;set or report the current extruder or other tool\nM107 ; turn fan off" } + } +} diff --git a/resources/definitions/anycubic_kobra3v2_ACE_PRO.def.json b/resources/definitions/anycubic_kobra3v2_ACE_PRO.def.json new file mode 100644 index 0000000000..ab2f9a3b95 --- /dev/null +++ b/resources/definitions/anycubic_kobra3v2_ACE_PRO.def.json @@ -0,0 +1,69 @@ +{ + "version": 2, + "name": "Anycubic Kobra 3 v2 ACE PRO", + "inherits": "fdmprinter", + "metadata": + { + "visible": true, + "author": "Sam Bonnekamp", + "manufacturer": "Anycubic", + "file_formats": "text/x-gcode", + "platform": "anycubic_kobra3v2_buildplate.STL", + "machine_extruder_trains": { + "0": "anycubic_kobra3v2_ACEPRO_extruder_0", + "1": "anycubic_kobra3v2_ACEPRO_extruder_1", + "2": "anycubic_kobra3v2_ACEPRO_extruder_2", + "3": "anycubic_kobra3v2_ACEPRO_extruder_3" + } + }, + "overrides": + { + "machine_height": { "default_value": 260 }, + "machine_width": { "default_value": 250 }, + "machine_depth": { "default_value": 250 }, + "machine_name": + { + "description": "Anycubic Kobra 3 v2", + "default_value": "Anycubic Kobra 3 v2" + }, + "machine_extruder_count": { "default_value": 4 }, + "machine_buildplate_type": { "default_value": "PEI Spring Steel" }, + "machine_heated_bed": { "default_value": true}, + "material_bed_temperature": + { + "default_value": 60, + "maximum_value": "110", + "maximum_value_warning": "90" + }, + "material_print_temp_wait": { "value": true }, + "machine_center_is_zero": { "default_value": false }, + "layer_height": { "default_value": 0.2 }, + "speed_slowdown_layers": { "value": 2 }, + "material_diameter": { "default_value": 1.75 }, + "material_initial_print_temperature": + { + "maximum_value_warning": 295, + "value": "material_print_temperature + 5" + }, + "default_material_print_temperature": + { + "maximum_value": 300, + "default_value": 200 + }, + "material_print_temperature": + { + "maximum_value": 300, + "default_value": 200 + }, + "material_standby_temperature" : {"default_value": "material_print_temperature"}, + "material_print_temperature_layer_0": + { + "maximum_value_warning": 295, + "value": "material_print_temperature + 5" + }, + "material_print_temp_prep": { "default_value": false }, + "machine_start_gcode_first": { "default_value": true }, + "machine_start_gcode": { "default_value": "; external perimeters extrusion width = 0.42mm\n; perimeters extrusion width = 0.45mm\n; infill extrusion width = 0.45mm\n; solid infill extrusion width = 0.45mm\n; top infill extrusion width = 0.42mm\n; support material extrusion width = 0.42mm\n; first layer extrusion width = 0.50mm\nTYPE:Custom\nG9111 bedTemp={material_bed_temperature} extruderTemp={material_print_temperature}\nM117 ;display LCD message\nM900 K0.05 ;linear advance factor, ive only seen this set to k0.05\n;START HEADER\nG21 ; set units to millimeters\nG90 ; use absolute coordinates\nM83 ; use relative distances for extrusion\nT0 ;set or report the current extruder or other tool\nM107 ; turn fan off" }, + "machine_end_gcode": { "default_value": "M104 S0\nM140 S0\n;Retract the filament\nG92 E1\nG1 E-1 F300\nG27 P2 ;Park toolhead\nM84" } + } +} diff --git a/resources/extruders/anycubic_kobra3v2_ACEPRO_extruder_0.def.json b/resources/extruders/anycubic_kobra3v2_ACEPRO_extruder_0.def.json new file mode 100644 index 0000000000..93c8618bf4 --- /dev/null +++ b/resources/extruders/anycubic_kobra3v2_ACEPRO_extruder_0.def.json @@ -0,0 +1,16 @@ +{ + "version": 2, + "name": "ACE Pro Colour 1", + "inherits": "fdmextruder", + "metadata": + { + "machine": "anycubic_kobra3v2_ACE_PRO", + "position": "0" + }, + "overrides": + { + "extruder_nr": { "default_value": 0 }, + "machine_nozzle_size": { "default_value": 0.4 }, + "material_diameter": { "default_value": 1.75 } + } +} diff --git a/resources/extruders/anycubic_kobra3v2_ACEPRO_extruder_1.def.json b/resources/extruders/anycubic_kobra3v2_ACEPRO_extruder_1.def.json new file mode 100644 index 0000000000..ed41ca1946 --- /dev/null +++ b/resources/extruders/anycubic_kobra3v2_ACEPRO_extruder_1.def.json @@ -0,0 +1,16 @@ +{ + "version": 2, + "name": "ACE Pro Colour 2", + "inherits": "fdmextruder", + "metadata": + { + "machine": "anycubic_kobra3v2_ACE_PRO", + "position": "1" + }, + "overrides": + { + "extruder_nr": { "default_value": 1 }, + "machine_nozzle_size": { "default_value": 0.4 }, + "material_diameter": { "default_value": 1.75 } + } +} diff --git a/resources/extruders/anycubic_kobra3v2_ACEPRO_extruder_2.def.json b/resources/extruders/anycubic_kobra3v2_ACEPRO_extruder_2.def.json new file mode 100644 index 0000000000..2fc2705ebb --- /dev/null +++ b/resources/extruders/anycubic_kobra3v2_ACEPRO_extruder_2.def.json @@ -0,0 +1,16 @@ +{ + "version": 2, + "name": "ACE Pro Colour 3", + "inherits": "fdmextruder", + "metadata": + { + "machine": "anycubic_kobra3v2_ACE_PRO", + "position": "1" + }, + "overrides": + { + "extruder_nr": { "default_value": 2 }, + "machine_nozzle_size": { "default_value": 0.4 }, + "material_diameter": { "default_value": 1.75 } + } +} diff --git a/resources/extruders/anycubic_kobra3v2_ACEPRO_extruder_3.def.json b/resources/extruders/anycubic_kobra3v2_ACEPRO_extruder_3.def.json new file mode 100644 index 0000000000..f5ef25efc5 --- /dev/null +++ b/resources/extruders/anycubic_kobra3v2_ACEPRO_extruder_3.def.json @@ -0,0 +1,16 @@ +{ + "version": 2, + "name": "ACE Pro Colour 4", + "inherits": "fdmextruder", + "metadata": + { + "machine": "anycubic_kobra3v2_ACE_PRO", + "position": "3" + }, + "overrides": + { + "extruder_nr": { "default_value": 3 }, + "machine_nozzle_size": { "default_value": 0.4 }, + "material_diameter": { "default_value": 1.75 } + } +} diff --git a/resources/extruders/anycubic_kobra3v2_extruder_0.def.json b/resources/extruders/anycubic_kobra3v2_extruder_0.def.json new file mode 100644 index 0000000000..dba5e6e559 --- /dev/null +++ b/resources/extruders/anycubic_kobra3v2_extruder_0.def.json @@ -0,0 +1,16 @@ +{ + "version": 2, + "name": "Extruder 1", + "inherits": "fdmextruder", + "metadata": + { + "machine": "anycubic_kobra3v2", + "position": "0" + }, + "overrides": + { + "extruder_nr": { "default_value": 0 }, + "machine_nozzle_size": { "default_value": 0.4 }, + "material_diameter": { "default_value": 1.75 } + } +} diff --git a/resources/meshes/anycubic_kobra3v2_buildplate.stl b/resources/meshes/anycubic_kobra3v2_buildplate.stl new file mode 100644 index 0000000000000000000000000000000000000000..9d526d0edada625da668ad41379a2d299965b68b GIT binary patch literal 4284 zcmbW4KWmgh5XKihvCvA;I-OXG1nl1P{03q#F|h~+Jx~j+_G{Qks^AAmeRqkCpFu$o zY;24m_$Q6d^Ugju&+gqT;=<+TotfXx&g|^ImnV<+c6TB#zWwbf}<$2iC)MBt!q!EMqVFDHY57x#m7U#p@&J*WudNx-56W$1k{k3-vU z#vqLt)YCumP>T|jL0C`COJCX3%wljqNFxUI!vri!P=?+I^FR)a!FdsbdiqBmYEgo+ z%wJ#-=iihwDDkKlBD<^>#v54G+=+`#49270z3?|T1ayqY7@#qJ*nWJqk3YRd{~UWB zoEHT3FAjzXSd^d)y$`Mm^D_qLMGWfcA9<)n3Ci{ScmlyaC(Rhp`{-AcT_%C2mcVm8 zKr;Gx@oN9WK;41@!J5>><(C&G*DsAq_tXS$nSSjP_SpN6S53yMppStVvCntj-CWK) zOsJ(LuD$+U$H>?dB_PvlI1jZbvGe)La)prvVkl92MGb30tE+_OG)&Z9QNxyCm!R%5 ztIfI|3#Q)>^Wsh^!FSY}9TY;nqTeEdpAoevq1_Wq-Mji$tNU1q+7k0>FD(7Duc~^J z+4*3tf?g6PU{z}2dkOX7`(w3MN~qUgc5uQ|RL{%z$7&3nOTD0HPDsE$Hh2bUQDRmT z4)nju*ws)mUP{rG#Z?Gq3l(eC%SXPd;#$6P7bhyEI3Fp+4z`3^TEfq~5ZN;CbnPyq z3K-1XpZFJqT39RCqYCuKcN;?qtw=B}pq#n1~Lze z5^*cJr@OaA?WGk73NgZ>gr0)%_ZUIcUjNd&Ns^O6kP@H~3lp$I-Q~ zuN7{%^~89gM9Ae%%(kLAmZfXgc%hG5v?t`2(ceBP1q}kfL%)|iB6@vCg?^YAFJdK1 zgZO0gpFQWlceSG0yP+Q@#tS7vF2uaV$huQ8uiotqA-BHg!OjR8gpKSSQs3tquU=Kp O^gX4-c%ekdi17zYNr Date: Wed, 18 Jun 2025 02:39:22 +0800 Subject: [PATCH 69/84] removed redudant fields --- .../definitions/anycubic_kobra3v2.def.json | 18 +++++++++++++----- .../anycubic_kobra3v2_ACE_PRO.def.json | 6 ++---- ...nycubic_kobra3v2_ACEPRO_extruder_2.def.json | 2 +- 3 files changed, 16 insertions(+), 10 deletions(-) diff --git a/resources/definitions/anycubic_kobra3v2.def.json b/resources/definitions/anycubic_kobra3v2.def.json index 59afb1c660..ec37f3174a 100644 --- a/resources/definitions/anycubic_kobra3v2.def.json +++ b/resources/definitions/anycubic_kobra3v2.def.json @@ -20,15 +20,24 @@ { "description": "Anycubic Kobra 3 v2", "default_value": "Anycubic Kobra 3 v2" - }, + }, "machine_buildplate_type": { "default_value": "PEI Spring Steel" }, "machine_heated_bed": { "default_value": true}, + "material_bed_temperature": - { - "default_value": 60, - "maximum_value": "110", + { "maximum_value": "110", "maximum_value_warning": "90" }, + "default_material_print_temperature": + { + "maximum_value": 300, + "default_value": 210 + }, + "material_print_temperature": + { + "maximum_value": 300, + "default_value": 210 + }, "material_print_temp_wait": { "value": true }, "machine_center_is_zero": { "default_value": false }, "layer_height": { "default_value": 0.2 }, @@ -45,7 +54,6 @@ "maximum_value_warning": 295, "value": "material_print_temperature + 5" }, - "material_print_temp_prep": { "default_value": false }, "machine_start_gcode_first": { "default_value": true }, "machine_start_gcode": { "default_value": "; external perimeters extrusion width = 0.42mm\n; perimeters extrusion width = 0.45mm\n; infill extrusion width = 0.45mm\n; solid infill extrusion width = 0.45mm\n; top infill extrusion width = 0.42mm\n; support material extrusion width = 0.42mm\n; first layer extrusion width = 0.50mm\nTYPE:Custom\nG9111 bedTemp={material_bed_temperature} extruderTemp={material_print_temperature}\nM117 ;display LCD message\nM900 K0.05 ;linear advance factor, ive only seen this set to k0.05\n;START HEADER\nG21 ; set units to millimeters\nG90 ; use absolute coordinates\nM83 ; use relative distances for extrusion\nT0 ;set or report the current extruder or other tool\nM107 ; turn fan off" } } diff --git a/resources/definitions/anycubic_kobra3v2_ACE_PRO.def.json b/resources/definitions/anycubic_kobra3v2_ACE_PRO.def.json index ab2f9a3b95..a201ab32f4 100644 --- a/resources/definitions/anycubic_kobra3v2_ACE_PRO.def.json +++ b/resources/definitions/anycubic_kobra3v2_ACE_PRO.def.json @@ -31,7 +31,6 @@ "machine_heated_bed": { "default_value": true}, "material_bed_temperature": { - "default_value": 60, "maximum_value": "110", "maximum_value_warning": "90" }, @@ -48,12 +47,12 @@ "default_material_print_temperature": { "maximum_value": 300, - "default_value": 200 + "default_value": 210 }, "material_print_temperature": { "maximum_value": 300, - "default_value": 200 + "default_value": 210 }, "material_standby_temperature" : {"default_value": "material_print_temperature"}, "material_print_temperature_layer_0": @@ -61,7 +60,6 @@ "maximum_value_warning": 295, "value": "material_print_temperature + 5" }, - "material_print_temp_prep": { "default_value": false }, "machine_start_gcode_first": { "default_value": true }, "machine_start_gcode": { "default_value": "; external perimeters extrusion width = 0.42mm\n; perimeters extrusion width = 0.45mm\n; infill extrusion width = 0.45mm\n; solid infill extrusion width = 0.45mm\n; top infill extrusion width = 0.42mm\n; support material extrusion width = 0.42mm\n; first layer extrusion width = 0.50mm\nTYPE:Custom\nG9111 bedTemp={material_bed_temperature} extruderTemp={material_print_temperature}\nM117 ;display LCD message\nM900 K0.05 ;linear advance factor, ive only seen this set to k0.05\n;START HEADER\nG21 ; set units to millimeters\nG90 ; use absolute coordinates\nM83 ; use relative distances for extrusion\nT0 ;set or report the current extruder or other tool\nM107 ; turn fan off" }, "machine_end_gcode": { "default_value": "M104 S0\nM140 S0\n;Retract the filament\nG92 E1\nG1 E-1 F300\nG27 P2 ;Park toolhead\nM84" } diff --git a/resources/extruders/anycubic_kobra3v2_ACEPRO_extruder_2.def.json b/resources/extruders/anycubic_kobra3v2_ACEPRO_extruder_2.def.json index 2fc2705ebb..2761e3d08e 100644 --- a/resources/extruders/anycubic_kobra3v2_ACEPRO_extruder_2.def.json +++ b/resources/extruders/anycubic_kobra3v2_ACEPRO_extruder_2.def.json @@ -5,7 +5,7 @@ "metadata": { "machine": "anycubic_kobra3v2_ACE_PRO", - "position": "1" + "position": "2" }, "overrides": { From c5550695d664678ab6cafb8f85f4423a147e2b9a Mon Sep 17 00:00:00 2001 From: Sam Bonnekamp Date: Wed, 18 Jun 2025 12:39:29 +0800 Subject: [PATCH 70/84] removed redundant directives, removed colonialism --- resources/definitions/anycubic_kobra3v2.def.json | 15 ++------------- .../anycubic_kobra3v2_ACE_PRO.def.json | 16 +++------------- .../anycubic_kobra3v2_ACEPRO_extruder_0.def.json | 4 ++-- .../anycubic_kobra3v2_ACEPRO_extruder_1.def.json | 4 ++-- .../anycubic_kobra3v2_ACEPRO_extruder_2.def.json | 2 +- .../anycubic_kobra3v2_ACEPRO_extruder_3.def.json | 4 ++-- .../anycubic_kobra3v2_extruder_0.def.json | 2 +- 7 files changed, 13 insertions(+), 34 deletions(-) diff --git a/resources/definitions/anycubic_kobra3v2.def.json b/resources/definitions/anycubic_kobra3v2.def.json index ec37f3174a..8c24b1391c 100644 --- a/resources/definitions/anycubic_kobra3v2.def.json +++ b/resources/definitions/anycubic_kobra3v2.def.json @@ -8,7 +8,7 @@ "author": "Sam Bonnekamp", "manufacturer": "Anycubic", "file_formats": "text/x-gcode", - "platform": "anycubic_kobra3v2_buildplate.STL", + "platform": "anycubic_kobra3v2_buildplate.stl", "machine_extruder_trains": { "0": "anycubic_kobra3v2_extruder_0" } }, "overrides": @@ -27,21 +27,10 @@ "material_bed_temperature": { "maximum_value": "110", "maximum_value_warning": "90" - }, - "default_material_print_temperature": - { - "maximum_value": 300, - "default_value": 210 }, - "material_print_temperature": - { - "maximum_value": 300, - "default_value": 210 - }, - "material_print_temp_wait": { "value": true }, + "material_print_temperature":{ "maximum_value": 300 }, "machine_center_is_zero": { "default_value": false }, "layer_height": { "default_value": 0.2 }, - "speed_slowdown_layers": { "value": 2 }, "material_diameter": { "default_value": 1.75 }, "material_initial_print_temperature": { diff --git a/resources/definitions/anycubic_kobra3v2_ACE_PRO.def.json b/resources/definitions/anycubic_kobra3v2_ACE_PRO.def.json index a201ab32f4..6b9c65e59a 100644 --- a/resources/definitions/anycubic_kobra3v2_ACE_PRO.def.json +++ b/resources/definitions/anycubic_kobra3v2_ACE_PRO.def.json @@ -8,7 +8,7 @@ "author": "Sam Bonnekamp", "manufacturer": "Anycubic", "file_formats": "text/x-gcode", - "platform": "anycubic_kobra3v2_buildplate.STL", + "platform": "anycubic_kobra3v2_buildplate.stl", "machine_extruder_trains": { "0": "anycubic_kobra3v2_ACEPRO_extruder_0", "1": "anycubic_kobra3v2_ACEPRO_extruder_1", @@ -37,23 +37,13 @@ "material_print_temp_wait": { "value": true }, "machine_center_is_zero": { "default_value": false }, "layer_height": { "default_value": 0.2 }, - "speed_slowdown_layers": { "value": 2 }, "material_diameter": { "default_value": 1.75 }, "material_initial_print_temperature": { "maximum_value_warning": 295, "value": "material_print_temperature + 5" - }, - "default_material_print_temperature": - { - "maximum_value": 300, - "default_value": 210 - }, - "material_print_temperature": - { - "maximum_value": 300, - "default_value": 210 - }, + }, + "material_print_temperature": { "maximum_value": 300 }, "material_standby_temperature" : {"default_value": "material_print_temperature"}, "material_print_temperature_layer_0": { diff --git a/resources/extruders/anycubic_kobra3v2_ACEPRO_extruder_0.def.json b/resources/extruders/anycubic_kobra3v2_ACEPRO_extruder_0.def.json index 93c8618bf4..104d6bb0f1 100644 --- a/resources/extruders/anycubic_kobra3v2_ACEPRO_extruder_0.def.json +++ b/resources/extruders/anycubic_kobra3v2_ACEPRO_extruder_0.def.json @@ -1,10 +1,10 @@ { "version": 2, - "name": "ACE Pro Colour 1", + "name": "ACE Pro Color 1", "inherits": "fdmextruder", "metadata": { - "machine": "anycubic_kobra3v2_ACE_PRO", + "machine": "kobra3v2_ACE_PRO", "position": "0" }, "overrides": diff --git a/resources/extruders/anycubic_kobra3v2_ACEPRO_extruder_1.def.json b/resources/extruders/anycubic_kobra3v2_ACEPRO_extruder_1.def.json index ed41ca1946..2c3d072215 100644 --- a/resources/extruders/anycubic_kobra3v2_ACEPRO_extruder_1.def.json +++ b/resources/extruders/anycubic_kobra3v2_ACEPRO_extruder_1.def.json @@ -1,10 +1,10 @@ { "version": 2, - "name": "ACE Pro Colour 2", + "name": "ACE Pro Color 2", "inherits": "fdmextruder", "metadata": { - "machine": "anycubic_kobra3v2_ACE_PRO", + "machine": "kobra3v2_ACE_PRO", "position": "1" }, "overrides": diff --git a/resources/extruders/anycubic_kobra3v2_ACEPRO_extruder_2.def.json b/resources/extruders/anycubic_kobra3v2_ACEPRO_extruder_2.def.json index 2761e3d08e..fb732d5fd4 100644 --- a/resources/extruders/anycubic_kobra3v2_ACEPRO_extruder_2.def.json +++ b/resources/extruders/anycubic_kobra3v2_ACEPRO_extruder_2.def.json @@ -1,6 +1,6 @@ { "version": 2, - "name": "ACE Pro Colour 3", + "name": "ACE Pro Color 3", "inherits": "fdmextruder", "metadata": { diff --git a/resources/extruders/anycubic_kobra3v2_ACEPRO_extruder_3.def.json b/resources/extruders/anycubic_kobra3v2_ACEPRO_extruder_3.def.json index f5ef25efc5..fb64b590fc 100644 --- a/resources/extruders/anycubic_kobra3v2_ACEPRO_extruder_3.def.json +++ b/resources/extruders/anycubic_kobra3v2_ACEPRO_extruder_3.def.json @@ -1,10 +1,10 @@ { "version": 2, - "name": "ACE Pro Colour 4", + "name": "ACE Pro Color 4", "inherits": "fdmextruder", "metadata": { - "machine": "anycubic_kobra3v2_ACE_PRO", + "machine": "kobra3v2_ACE_PRO", "position": "3" }, "overrides": diff --git a/resources/extruders/anycubic_kobra3v2_extruder_0.def.json b/resources/extruders/anycubic_kobra3v2_extruder_0.def.json index dba5e6e559..d96e91ce07 100644 --- a/resources/extruders/anycubic_kobra3v2_extruder_0.def.json +++ b/resources/extruders/anycubic_kobra3v2_extruder_0.def.json @@ -4,7 +4,7 @@ "inherits": "fdmextruder", "metadata": { - "machine": "anycubic_kobra3v2", + "machine": "kobra3v2_ACE_PRO", "position": "0" }, "overrides": From bbe0b7f9f5a30adeb546f7501f5c2aba8e32ccc9 Mon Sep 17 00:00:00 2001 From: Sam Bonnekamp Date: Wed, 18 Jun 2025 13:14:53 +0800 Subject: [PATCH 71/84] missing comment semicolon --- resources/definitions/anycubic_kobra3v2.def.json | 2 +- resources/definitions/anycubic_kobra3v2_ACE_PRO.def.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/resources/definitions/anycubic_kobra3v2.def.json b/resources/definitions/anycubic_kobra3v2.def.json index 8c24b1391c..8ca9800fde 100644 --- a/resources/definitions/anycubic_kobra3v2.def.json +++ b/resources/definitions/anycubic_kobra3v2.def.json @@ -44,6 +44,6 @@ "value": "material_print_temperature + 5" }, "machine_start_gcode_first": { "default_value": true }, - "machine_start_gcode": { "default_value": "; external perimeters extrusion width = 0.42mm\n; perimeters extrusion width = 0.45mm\n; infill extrusion width = 0.45mm\n; solid infill extrusion width = 0.45mm\n; top infill extrusion width = 0.42mm\n; support material extrusion width = 0.42mm\n; first layer extrusion width = 0.50mm\nTYPE:Custom\nG9111 bedTemp={material_bed_temperature} extruderTemp={material_print_temperature}\nM117 ;display LCD message\nM900 K0.05 ;linear advance factor, ive only seen this set to k0.05\n;START HEADER\nG21 ; set units to millimeters\nG90 ; use absolute coordinates\nM83 ; use relative distances for extrusion\nT0 ;set or report the current extruder or other tool\nM107 ; turn fan off" } + "machine_start_gcode": { "default_value": "; external perimeters extrusion width = 0.42mm\n; perimeters extrusion width = 0.45mm\n; infill extrusion width = 0.45mm\n; solid infill extrusion width = 0.45mm\n; top infill extrusion width = 0.42mm\n; support material extrusion width = 0.42mm\n; first layer extrusion width = 0.50mm\n;TYPE:Custom\nG9111 bedTemp={material_bed_temperature} extruderTemp={material_print_temperature}\nM117 ;display LCD message\nM900 K0.05 ;linear advance factor, ive only seen this set to k0.05\n;START HEADER\nG21 ; set units to millimeters\nG90 ; use absolute coordinates\nM83 ; use relative distances for extrusion\nT0 ;set or report the current extruder or other tool\nM107 ; turn fan off" } } } diff --git a/resources/definitions/anycubic_kobra3v2_ACE_PRO.def.json b/resources/definitions/anycubic_kobra3v2_ACE_PRO.def.json index 6b9c65e59a..9686c4c192 100644 --- a/resources/definitions/anycubic_kobra3v2_ACE_PRO.def.json +++ b/resources/definitions/anycubic_kobra3v2_ACE_PRO.def.json @@ -51,7 +51,7 @@ "value": "material_print_temperature + 5" }, "machine_start_gcode_first": { "default_value": true }, - "machine_start_gcode": { "default_value": "; external perimeters extrusion width = 0.42mm\n; perimeters extrusion width = 0.45mm\n; infill extrusion width = 0.45mm\n; solid infill extrusion width = 0.45mm\n; top infill extrusion width = 0.42mm\n; support material extrusion width = 0.42mm\n; first layer extrusion width = 0.50mm\nTYPE:Custom\nG9111 bedTemp={material_bed_temperature} extruderTemp={material_print_temperature}\nM117 ;display LCD message\nM900 K0.05 ;linear advance factor, ive only seen this set to k0.05\n;START HEADER\nG21 ; set units to millimeters\nG90 ; use absolute coordinates\nM83 ; use relative distances for extrusion\nT0 ;set or report the current extruder or other tool\nM107 ; turn fan off" }, + "machine_start_gcode": { "default_value": "; external perimeters extrusion width = 0.42mm\n; perimeters extrusion width = 0.45mm\n; infill extrusion width = 0.45mm\n; solid infill extrusion width = 0.45mm\n; top infill extrusion width = 0.42mm\n; support material extrusion width = 0.42mm\n; first layer extrusion width = 0.50mm\n;TYPE:Custom\nG9111 bedTemp={material_bed_temperature} extruderTemp={material_print_temperature}\nM117 ;display LCD message\nM900 K0.05 ;linear advance factor, ive only seen this set to k0.05\n;START HEADER\nG21 ; set units to millimeters\nG90 ; use absolute coordinates\nM83 ; use relative distances for extrusion\nT0 ;set or report the current extruder or other tool\nM107 ; turn fan off" }, "machine_end_gcode": { "default_value": "M104 S0\nM140 S0\n;Retract the filament\nG92 E1\nG1 E-1 F300\nG27 P2 ;Park toolhead\nM84" } } } From bfbc6e4dc8269ca51e23e84af3072417f9e9015b Mon Sep 17 00:00:00 2001 From: Sam Bonnekamp Date: Wed, 18 Jun 2025 13:27:02 +0800 Subject: [PATCH 72/84] update printer names --- .../extruders/anycubic_kobra3v2_ACEPRO_extruder_0.def.json | 2 +- .../extruders/anycubic_kobra3v2_ACEPRO_extruder_1.def.json | 2 +- .../extruders/anycubic_kobra3v2_ACEPRO_extruder_3.def.json | 2 +- resources/extruders/anycubic_kobra3v2_extruder_0.def.json | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/resources/extruders/anycubic_kobra3v2_ACEPRO_extruder_0.def.json b/resources/extruders/anycubic_kobra3v2_ACEPRO_extruder_0.def.json index 104d6bb0f1..ab4a7d1a68 100644 --- a/resources/extruders/anycubic_kobra3v2_ACEPRO_extruder_0.def.json +++ b/resources/extruders/anycubic_kobra3v2_ACEPRO_extruder_0.def.json @@ -4,7 +4,7 @@ "inherits": "fdmextruder", "metadata": { - "machine": "kobra3v2_ACE_PRO", + "machine": "anycubic_kobra3v2_ACE_PRO", "position": "0" }, "overrides": diff --git a/resources/extruders/anycubic_kobra3v2_ACEPRO_extruder_1.def.json b/resources/extruders/anycubic_kobra3v2_ACEPRO_extruder_1.def.json index 2c3d072215..029e7ad2bf 100644 --- a/resources/extruders/anycubic_kobra3v2_ACEPRO_extruder_1.def.json +++ b/resources/extruders/anycubic_kobra3v2_ACEPRO_extruder_1.def.json @@ -4,7 +4,7 @@ "inherits": "fdmextruder", "metadata": { - "machine": "kobra3v2_ACE_PRO", + "machine": "anycubic_kobra3v2_ACE_PRO", "position": "1" }, "overrides": diff --git a/resources/extruders/anycubic_kobra3v2_ACEPRO_extruder_3.def.json b/resources/extruders/anycubic_kobra3v2_ACEPRO_extruder_3.def.json index fb64b590fc..2f64b0532a 100644 --- a/resources/extruders/anycubic_kobra3v2_ACEPRO_extruder_3.def.json +++ b/resources/extruders/anycubic_kobra3v2_ACEPRO_extruder_3.def.json @@ -4,7 +4,7 @@ "inherits": "fdmextruder", "metadata": { - "machine": "kobra3v2_ACE_PRO", + "machine": "anycubic_kobra3v2_ACE_PRO", "position": "3" }, "overrides": diff --git a/resources/extruders/anycubic_kobra3v2_extruder_0.def.json b/resources/extruders/anycubic_kobra3v2_extruder_0.def.json index d96e91ce07..dba5e6e559 100644 --- a/resources/extruders/anycubic_kobra3v2_extruder_0.def.json +++ b/resources/extruders/anycubic_kobra3v2_extruder_0.def.json @@ -4,7 +4,7 @@ "inherits": "fdmextruder", "metadata": { - "machine": "kobra3v2_ACE_PRO", + "machine": "anycubic_kobra3v2", "position": "0" }, "overrides": From 4f52a3d9389e192a7be2e32d19f1e5172b1e2580 Mon Sep 17 00:00:00 2001 From: Sam Bonnekamp Date: Wed, 18 Jun 2025 17:21:03 +0800 Subject: [PATCH 73/84] machine uses relative extrusion --- .../definitions/anycubic_kobra3v2.def.json | 21 ++++++++++++------- .../anycubic_kobra3v2_ACE_PRO.def.json | 19 ++++++++++------- 2 files changed, 25 insertions(+), 15 deletions(-) diff --git a/resources/definitions/anycubic_kobra3v2.def.json b/resources/definitions/anycubic_kobra3v2.def.json index 8ca9800fde..a6d1c26d33 100644 --- a/resources/definitions/anycubic_kobra3v2.def.json +++ b/resources/definitions/anycubic_kobra3v2.def.json @@ -8,8 +8,9 @@ "author": "Sam Bonnekamp", "manufacturer": "Anycubic", "file_formats": "text/x-gcode", + "has_textured_buildplate": true, "platform": "anycubic_kobra3v2_buildplate.stl", - "machine_extruder_trains": { "0": "anycubic_kobra3v2_extruder_0" } + "machine_extruder_trains": { "0": "anycubic_kobra3v2_extruder_0" } }, "overrides": { @@ -20,17 +21,19 @@ { "description": "Anycubic Kobra 3 v2", "default_value": "Anycubic Kobra 3 v2" - }, + }, "machine_buildplate_type": { "default_value": "PEI Spring Steel" }, "machine_heated_bed": { "default_value": true}, - + "machine_center_is_zero": { "default_value": false }, + "machine_start_gcode_first": { "default_value": true }, + "machine_start_gcode": { "default_value": "; external perimeters extrusion width = 0.42mm\n; perimeters extrusion width = 0.45mm\n; infill extrusion width = 0.45mm\n; solid infill extrusion width = 0.45mm\n; top infill extrusion width = 0.42mm\n; support material extrusion width = 0.42mm\n; first layer extrusion width = 0.50mm\n;TYPE:Custom\nG9111 bedTemp={material_bed_temperature} extruderTemp={material_print_temperature}\nM117 ;display LCD message\nM900 K0.05 ;linear advance factor, ive only seen this set to k0.05\n;START HEADER\nG21 ; set units to millimeters\nG90 ; use absolute coordinates\nT0 ;set or report the current extruder or other tool\nM107 ; turn fan off" }, + "machine_end_gcode": { "default_value": "M104 S0\nM140 S0\n;Retract the filament\nG92 E1\nG1 E-1 F300\nG27 P2 ;Park toolhead\nM84" } + "material_bed_temperature": { "maximum_value": "110", - "maximum_value_warning": "90" + "maximum_value_warning": "90" }, "material_print_temperature":{ "maximum_value": 300 }, - "machine_center_is_zero": { "default_value": false }, - "layer_height": { "default_value": 0.2 }, "material_diameter": { "default_value": 1.75 }, "material_initial_print_temperature": { @@ -43,7 +46,9 @@ "maximum_value_warning": 295, "value": "material_print_temperature + 5" }, - "machine_start_gcode_first": { "default_value": true }, - "machine_start_gcode": { "default_value": "; external perimeters extrusion width = 0.42mm\n; perimeters extrusion width = 0.45mm\n; infill extrusion width = 0.45mm\n; solid infill extrusion width = 0.45mm\n; top infill extrusion width = 0.42mm\n; support material extrusion width = 0.42mm\n; first layer extrusion width = 0.50mm\n;TYPE:Custom\nG9111 bedTemp={material_bed_temperature} extruderTemp={material_print_temperature}\nM117 ;display LCD message\nM900 K0.05 ;linear advance factor, ive only seen this set to k0.05\n;START HEADER\nG21 ; set units to millimeters\nG90 ; use absolute coordinates\nM83 ; use relative distances for extrusion\nT0 ;set or report the current extruder or other tool\nM107 ; turn fan off" } + + "layer_height": { "default_value": 0.2 }, + "adhesion_type": { "value": "'skirt'" } + "relative_extrusion" : {"default_value": true} } } diff --git a/resources/definitions/anycubic_kobra3v2_ACE_PRO.def.json b/resources/definitions/anycubic_kobra3v2_ACE_PRO.def.json index 9686c4c192..bc76df7a99 100644 --- a/resources/definitions/anycubic_kobra3v2_ACE_PRO.def.json +++ b/resources/definitions/anycubic_kobra3v2_ACE_PRO.def.json @@ -8,6 +8,7 @@ "author": "Sam Bonnekamp", "manufacturer": "Anycubic", "file_formats": "text/x-gcode", + "has_textured_buildplate": true, "platform": "anycubic_kobra3v2_buildplate.stl", "machine_extruder_trains": { "0": "anycubic_kobra3v2_ACEPRO_extruder_0", @@ -36,22 +37,26 @@ }, "material_print_temp_wait": { "value": true }, "machine_center_is_zero": { "default_value": false }, - "layer_height": { "default_value": 0.2 }, + "machine_start_gcode_first": { "default_value": true }, + "machine_start_gcode": { "default_value": "; external perimeters extrusion width = 0.42mm\n; perimeters extrusion width = 0.45mm\n; infill extrusion width = 0.45mm\n; solid infill extrusion width = 0.45mm\n; top infill extrusion width = 0.42mm\n; support material extrusion width = 0.42mm\n; first layer extrusion width = 0.50mm\n;TYPE:Custom\nG9111 bedTemp={material_bed_temperature} extruderTemp={material_print_temperature}\nM117 ;display LCD message\nM900 K0.05 ;linear advance factor, ive only seen this set to k0.05\n;START HEADER\nG21 ; set units to millimeters\nG90 ; use absolute coordinates\nT0 ;set or report the current extruder or other tool\nM107 ; turn fan off" }, + "machine_end_gcode": { "default_value": "M104 S0\nM140 S0\n;Retract the filament\nG92 E1\nG1 E-1 F300\nG27 P2 ;Park toolhead\nM84" } + "material_diameter": { "default_value": 1.75 }, "material_initial_print_temperature": - { + { "maximum_value_warning": 295, "value": "material_print_temperature + 5" - }, - "material_print_temperature": { "maximum_value": 300 }, + }, + "material_print_temperature": { "maximum_value": 300 }, "material_standby_temperature" : {"default_value": "material_print_temperature"}, "material_print_temperature_layer_0": { "maximum_value_warning": 295, "value": "material_print_temperature + 5" }, - "machine_start_gcode_first": { "default_value": true }, - "machine_start_gcode": { "default_value": "; external perimeters extrusion width = 0.42mm\n; perimeters extrusion width = 0.45mm\n; infill extrusion width = 0.45mm\n; solid infill extrusion width = 0.45mm\n; top infill extrusion width = 0.42mm\n; support material extrusion width = 0.42mm\n; first layer extrusion width = 0.50mm\n;TYPE:Custom\nG9111 bedTemp={material_bed_temperature} extruderTemp={material_print_temperature}\nM117 ;display LCD message\nM900 K0.05 ;linear advance factor, ive only seen this set to k0.05\n;START HEADER\nG21 ; set units to millimeters\nG90 ; use absolute coordinates\nM83 ; use relative distances for extrusion\nT0 ;set or report the current extruder or other tool\nM107 ; turn fan off" }, - "machine_end_gcode": { "default_value": "M104 S0\nM140 S0\n;Retract the filament\nG92 E1\nG1 E-1 F300\nG27 P2 ;Park toolhead\nM84" } + + "layer_height": { "default_value": 0.2 }, + "adhesion_type": { "value": "'skirt'" }, + "relative_extrusion" : {"default_value": true} } } From 0ed4be3e94bf80effae215594558dd1bca35a84e Mon Sep 17 00:00:00 2001 From: Sam Bonnekamp Date: Wed, 18 Jun 2025 17:32:45 +0800 Subject: [PATCH 74/84] machine end gcode matches anycubic --- resources/definitions/anycubic_kobra3v2.def.json | 2 +- resources/definitions/anycubic_kobra3v2_ACE_PRO.def.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/resources/definitions/anycubic_kobra3v2.def.json b/resources/definitions/anycubic_kobra3v2.def.json index a6d1c26d33..597c3578ed 100644 --- a/resources/definitions/anycubic_kobra3v2.def.json +++ b/resources/definitions/anycubic_kobra3v2.def.json @@ -27,7 +27,7 @@ "machine_center_is_zero": { "default_value": false }, "machine_start_gcode_first": { "default_value": true }, "machine_start_gcode": { "default_value": "; external perimeters extrusion width = 0.42mm\n; perimeters extrusion width = 0.45mm\n; infill extrusion width = 0.45mm\n; solid infill extrusion width = 0.45mm\n; top infill extrusion width = 0.42mm\n; support material extrusion width = 0.42mm\n; first layer extrusion width = 0.50mm\n;TYPE:Custom\nG9111 bedTemp={material_bed_temperature} extruderTemp={material_print_temperature}\nM117 ;display LCD message\nM900 K0.05 ;linear advance factor, ive only seen this set to k0.05\n;START HEADER\nG21 ; set units to millimeters\nG90 ; use absolute coordinates\nT0 ;set or report the current extruder or other tool\nM107 ; turn fan off" }, - "machine_end_gcode": { "default_value": "M104 S0\nM140 S0\n;Retract the filament\nG92 E1\nG1 E-1 F300\nG27 P2 ;Park toolhead\nM84" } + "machine_end_gcode": { "default_value": "G1 X5 Y{machine_depth*0.95} F{speed_travel*60} ; present print\nM140 S0 ; turn off heat bed\nM104 S0 ; turn off temperature\nM84; disable motors ; disable stepper motors" }, "material_bed_temperature": { "maximum_value": "110", diff --git a/resources/definitions/anycubic_kobra3v2_ACE_PRO.def.json b/resources/definitions/anycubic_kobra3v2_ACE_PRO.def.json index bc76df7a99..c1738ddacd 100644 --- a/resources/definitions/anycubic_kobra3v2_ACE_PRO.def.json +++ b/resources/definitions/anycubic_kobra3v2_ACE_PRO.def.json @@ -39,7 +39,7 @@ "machine_center_is_zero": { "default_value": false }, "machine_start_gcode_first": { "default_value": true }, "machine_start_gcode": { "default_value": "; external perimeters extrusion width = 0.42mm\n; perimeters extrusion width = 0.45mm\n; infill extrusion width = 0.45mm\n; solid infill extrusion width = 0.45mm\n; top infill extrusion width = 0.42mm\n; support material extrusion width = 0.42mm\n; first layer extrusion width = 0.50mm\n;TYPE:Custom\nG9111 bedTemp={material_bed_temperature} extruderTemp={material_print_temperature}\nM117 ;display LCD message\nM900 K0.05 ;linear advance factor, ive only seen this set to k0.05\n;START HEADER\nG21 ; set units to millimeters\nG90 ; use absolute coordinates\nT0 ;set or report the current extruder or other tool\nM107 ; turn fan off" }, - "machine_end_gcode": { "default_value": "M104 S0\nM140 S0\n;Retract the filament\nG92 E1\nG1 E-1 F300\nG27 P2 ;Park toolhead\nM84" } + "machine_end_gcode": { "default_value": "G1 X5 Y{machine_depth*0.95} F{speed_travel*60} ; present print\nM140 S0 ; turn off heat bed\nM104 S0 ; turn off temperature\nM84; disable motors ; disable stepper motors" }, "material_diameter": { "default_value": 1.75 }, "material_initial_print_temperature": From 350c95a110ee4074be8b80b9fe029bc58a7eb865 Mon Sep 17 00:00:00 2001 From: Sam Bonnekamp Date: Wed, 18 Jun 2025 17:36:32 +0800 Subject: [PATCH 75/84] missing semicolon --- resources/definitions/anycubic_kobra3v2.def.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/definitions/anycubic_kobra3v2.def.json b/resources/definitions/anycubic_kobra3v2.def.json index 597c3578ed..0f87ea130d 100644 --- a/resources/definitions/anycubic_kobra3v2.def.json +++ b/resources/definitions/anycubic_kobra3v2.def.json @@ -48,7 +48,7 @@ }, "layer_height": { "default_value": 0.2 }, - "adhesion_type": { "value": "'skirt'" } + "adhesion_type": { "value": "'skirt'" }, "relative_extrusion" : {"default_value": true} } } From f7dc928d3283878e80ad8694ebc6d24a78cc9fea Mon Sep 17 00:00:00 2001 From: Sam Bonnekamp Date: Wed, 18 Jun 2025 19:03:55 +0800 Subject: [PATCH 76/84] fixed unecessary default --- resources/definitions/anycubic_kobra3v2.def.json | 2 +- resources/definitions/anycubic_kobra3v2_ACE_PRO.def.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/resources/definitions/anycubic_kobra3v2.def.json b/resources/definitions/anycubic_kobra3v2.def.json index 0f87ea130d..0f32de2604 100644 --- a/resources/definitions/anycubic_kobra3v2.def.json +++ b/resources/definitions/anycubic_kobra3v2.def.json @@ -49,6 +49,6 @@ "layer_height": { "default_value": 0.2 }, "adhesion_type": { "value": "'skirt'" }, - "relative_extrusion" : {"default_value": true} + "relative_extrusion" : {"value": true} } } diff --git a/resources/definitions/anycubic_kobra3v2_ACE_PRO.def.json b/resources/definitions/anycubic_kobra3v2_ACE_PRO.def.json index c1738ddacd..b85fb3c0ed 100644 --- a/resources/definitions/anycubic_kobra3v2_ACE_PRO.def.json +++ b/resources/definitions/anycubic_kobra3v2_ACE_PRO.def.json @@ -57,6 +57,6 @@ "layer_height": { "default_value": 0.2 }, "adhesion_type": { "value": "'skirt'" }, - "relative_extrusion" : {"default_value": true} + "relative_extrusion" : {"value": true} } } From 425a167391252c41b920955a77ecf38a6f94f4bd Mon Sep 17 00:00:00 2001 From: Sam Bonnekamp Date: Thu, 19 Jun 2025 15:28:49 +0800 Subject: [PATCH 77/84] added 32px cura thumbnail to start gcode --- resources/definitions/anycubic_kobra3v2.def.json | 2 +- resources/definitions/anycubic_kobra3v2_ACE_PRO.def.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/resources/definitions/anycubic_kobra3v2.def.json b/resources/definitions/anycubic_kobra3v2.def.json index 0f32de2604..143d08b92b 100644 --- a/resources/definitions/anycubic_kobra3v2.def.json +++ b/resources/definitions/anycubic_kobra3v2.def.json @@ -26,7 +26,7 @@ "machine_heated_bed": { "default_value": true}, "machine_center_is_zero": { "default_value": false }, "machine_start_gcode_first": { "default_value": true }, - "machine_start_gcode": { "default_value": "; external perimeters extrusion width = 0.42mm\n; perimeters extrusion width = 0.45mm\n; infill extrusion width = 0.45mm\n; solid infill extrusion width = 0.45mm\n; top infill extrusion width = 0.42mm\n; support material extrusion width = 0.42mm\n; first layer extrusion width = 0.50mm\n;TYPE:Custom\nG9111 bedTemp={material_bed_temperature} extruderTemp={material_print_temperature}\nM117 ;display LCD message\nM900 K0.05 ;linear advance factor, ive only seen this set to k0.05\n;START HEADER\nG21 ; set units to millimeters\nG90 ; use absolute coordinates\nT0 ;set or report the current extruder or other tool\nM107 ; turn fan off" }, + "machine_start_gcode": { "default_value": "; thumbnail begin 32x32\n; iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAX\n; NSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAARWSURBVHgB1Vc7bx1FFD5n/cC+YOQ4RBTXlg0STfIH\n; gM78h0SAhGgQjyqARO8eFEQFBaKhCHIoKagcOkJJQUWBI19XJLaJgp+5M8x5zZzdO+sg0ZCR1zM7u3\n; e+73znMbMAT0KLMVqPdKVhvuze+o2NjUafget7Gz4GeO3s7Ow29YiYiXSJ2TPft0BwEmZ2dpYnp+Ec\n; 8NPT09tpyOAhhF4CXSBPwhOvEZk+B/ynNFzd2QvwxlfHMEq9PqR//mVaWcegmqKCIf9FKGS2Px30Ey\n; A/Hh8fE/gWgRPomww+VkxVgYFoWcz3xXpUJo2QsXvEFu8qAQJvmobA13b3I1u+Q+AhQuRfB1kTBDS6\n; FUVmVBx5iwmqNIgNv9ONkUzg4ODgBQNn2b80yyNbCzFQqMsC4MCNg/eveSQGdQM6glhXYDAYbJHvRw\n; q+ux90dQ8eeBxacaD+5T5ZSdLbfIcT61hTgCZTuq1R/zqDjxMOva6SKzBdMQRoO1OsovcLZrpPkmOO\n; ytibCdPejOQCGJHl5l+zlEGNxBiuvjxI1zNwZTgDzw4a6LbV6/fTT8eqSGD/G3hVgTQRT05OOv6Nyl\n; zBwxgW5iN8/e4leOWlOTivESjAlNhvYJoEvTEA6gq7wIqMyZ76zevPw5XlWdi5/wi+2foLNu88hAeH\n; QQKQJG/ScjjFY1cUFD3mYKxmgeef+1z9AstO4KMEfu3zXdi594gXlHIj3hYFY6su5fVQU7OjgAvZNg\n; kpaDFn8jvrC9zf+GEvgZ+16HqX5QRVctl6FmAyXhq3TmHnROBhWuBysp7aj7/+rS+IWybKO8oPWTns\n; zFX2kxalEKTe+6pZXR9kx0X3olhXdmqJ+GIF6lyfC8ArUCnZ8PPvJ9xfXn4KLMCkuBlo306payJMWD\n; 9BoGspE9LrVop4ajfevgQrz82U5xkQyg7onyEWfpUzxSQBlUnjWRZM8t66cwi/jU5h5eIMbH40hKuv\n; LqS6UFwh7mhv1RL4AYojY9VQbqkQRWL34icPtQ5o6dXqR9fwQlLgrYuPLUSrH96TvZDigsg1UwxFc3\n; c/e5rfsRNRI/JFNNns8MBy8QKNvJYKzGgf4NoXf8LH3+5xTDw4jP0szH16ZvBlybdcitMhpJzrwKUB\n; jcmCiDkDvv/liK92qRWLeTdsZYSsQaPhhXOOZD44uLJhqXAIxYKIQUIaSqBGg+Di09CuBiUYxQ0E/t\n; 0Hc2bk9gQB26kiYJEK7a6kJyqdvL/bKSiKOmx9dGumfpnA35/jnsDH4/H6BAH7Qba3dobTTQYrOY0N\n; usOnbr9JieEiCPgSzzH4/Pz8dpVASw3T2OY0Y2V7FkBrdjDOarErkLPmpgNPkb/u5e8l4CqHG1IqhU\n; xEoQuZztlwuIRw8705WFma8uB3a0jcUhb05pQ/zdp+Ufso8R8hdLqygDs6OnptcXHxD+gx9V8R6H6a\n; dQ8WrSwq81XZ/1NToLztuY9T8D3U687/r/0D2siIlZoKRzIAAAAASUVORK5CYII=\n; thumbnail end\n; external perimeters extrusion width = 0.42mm\n; perimeters extrusion width = 0.45mm\n; infill extrusion width = 0.45mm\n; solid infill extrusion width = 0.45mm\n; top infill extrusion width = 0.42mm\n; support material extrusion width = 0.42mm\n; first layer extrusion width = 0.50mm\n;TYPE:Custom\nG9111 bedTemp={material_bed_temperature} extruderTemp={material_print_temperature}\nM117 ;display LCD message\nM900 K0.05 ;linear advance factor, ive only seen this set to k0.05\n;START HEADER\nG21 ; set units to millimeters\nG90 ; use absolute coordinates\nT0 ;set or report the current extruder or other tool\nM107 ; turn fan off" }, "machine_end_gcode": { "default_value": "G1 X5 Y{machine_depth*0.95} F{speed_travel*60} ; present print\nM140 S0 ; turn off heat bed\nM104 S0 ; turn off temperature\nM84; disable motors ; disable stepper motors" }, "material_bed_temperature": diff --git a/resources/definitions/anycubic_kobra3v2_ACE_PRO.def.json b/resources/definitions/anycubic_kobra3v2_ACE_PRO.def.json index b85fb3c0ed..6e6fb31e2a 100644 --- a/resources/definitions/anycubic_kobra3v2_ACE_PRO.def.json +++ b/resources/definitions/anycubic_kobra3v2_ACE_PRO.def.json @@ -38,7 +38,7 @@ "material_print_temp_wait": { "value": true }, "machine_center_is_zero": { "default_value": false }, "machine_start_gcode_first": { "default_value": true }, - "machine_start_gcode": { "default_value": "; external perimeters extrusion width = 0.42mm\n; perimeters extrusion width = 0.45mm\n; infill extrusion width = 0.45mm\n; solid infill extrusion width = 0.45mm\n; top infill extrusion width = 0.42mm\n; support material extrusion width = 0.42mm\n; first layer extrusion width = 0.50mm\n;TYPE:Custom\nG9111 bedTemp={material_bed_temperature} extruderTemp={material_print_temperature}\nM117 ;display LCD message\nM900 K0.05 ;linear advance factor, ive only seen this set to k0.05\n;START HEADER\nG21 ; set units to millimeters\nG90 ; use absolute coordinates\nT0 ;set or report the current extruder or other tool\nM107 ; turn fan off" }, + "machine_start_gcode": { "default_value": "; thumbnail begin 32x32\n; iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAX\n; NSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAARWSURBVHgB1Vc7bx1FFD5n/cC+YOQ4RBTXlg0STfIH\n; gM78h0SAhGgQjyqARO8eFEQFBaKhCHIoKagcOkJJQUWBI19XJLaJgp+5M8x5zZzdO+sg0ZCR1zM7u3\n; e+73znMbMAT0KLMVqPdKVhvuze+o2NjUafget7Gz4GeO3s7Ow29YiYiXSJ2TPft0BwEmZ2dpYnp+Ec\n; 8NPT09tpyOAhhF4CXSBPwhOvEZk+B/ynNFzd2QvwxlfHMEq9PqR//mVaWcegmqKCIf9FKGS2Px30Ey\n; A/Hh8fE/gWgRPomww+VkxVgYFoWcz3xXpUJo2QsXvEFu8qAQJvmobA13b3I1u+Q+AhQuRfB1kTBDS6\n; FUVmVBx5iwmqNIgNv9ONkUzg4ODgBQNn2b80yyNbCzFQqMsC4MCNg/eveSQGdQM6glhXYDAYbJHvRw\n; q+ux90dQ8eeBxacaD+5T5ZSdLbfIcT61hTgCZTuq1R/zqDjxMOva6SKzBdMQRoO1OsovcLZrpPkmOO\n; ytibCdPejOQCGJHl5l+zlEGNxBiuvjxI1zNwZTgDzw4a6LbV6/fTT8eqSGD/G3hVgTQRT05OOv6Nyl\n; zBwxgW5iN8/e4leOWlOTivESjAlNhvYJoEvTEA6gq7wIqMyZ76zevPw5XlWdi5/wi+2foLNu88hAeH\n; QQKQJG/ScjjFY1cUFD3mYKxmgeef+1z9AstO4KMEfu3zXdi594gXlHIj3hYFY6su5fVQU7OjgAvZNg\n; kpaDFn8jvrC9zf+GEvgZ+16HqX5QRVctl6FmAyXhq3TmHnROBhWuBysp7aj7/+rS+IWybKO8oPWTns\n; zFX2kxalEKTe+6pZXR9kx0X3olhXdmqJ+GIF6lyfC8ArUCnZ8PPvJ9xfXn4KLMCkuBlo306payJMWD\n; 9BoGspE9LrVop4ajfevgQrz82U5xkQyg7onyEWfpUzxSQBlUnjWRZM8t66cwi/jU5h5eIMbH40hKuv\n; LqS6UFwh7mhv1RL4AYojY9VQbqkQRWL34icPtQ5o6dXqR9fwQlLgrYuPLUSrH96TvZDigsg1UwxFc3\n; c/e5rfsRNRI/JFNNns8MBy8QKNvJYKzGgf4NoXf8LH3+5xTDw4jP0szH16ZvBlybdcitMhpJzrwKUB\n; jcmCiDkDvv/liK92qRWLeTdsZYSsQaPhhXOOZD44uLJhqXAIxYKIQUIaSqBGg+Di09CuBiUYxQ0E/t\n; 0Hc2bk9gQB26kiYJEK7a6kJyqdvL/bKSiKOmx9dGumfpnA35/jnsDH4/H6BAH7Qba3dobTTQYrOY0N\n; usOnbr9JieEiCPgSzzH4/Pz8dpVASw3T2OY0Y2V7FkBrdjDOarErkLPmpgNPkb/u5e8l4CqHG1IqhU\n; xEoQuZztlwuIRw8705WFma8uB3a0jcUhb05pQ/zdp+Ufso8R8hdLqygDs6OnptcXHxD+gx9V8R6H6a\n; dQ8WrSwq81XZ/1NToLztuY9T8D3U687/r/0D2siIlZoKRzIAAAAASUVORK5CYII=\n; thumbnail end\n; external perimeters extrusion width = 0.42mm\n; perimeters extrusion width = 0.45mm\n; infill extrusion width = 0.45mm\n; solid infill extrusion width = 0.45mm\n; top infill extrusion width = 0.42mm\n; support material extrusion width = 0.42mm\n; first layer extrusion width = 0.50mm\n;TYPE:Custom\nG9111 bedTemp={material_bed_temperature} extruderTemp={material_print_temperature}\nM117 ;display LCD message\nM900 K0.05 ;linear advance factor, ive only seen this set to k0.05\n;START HEADER\nG21 ; set units to millimeters\nG90 ; use absolute coordinates\nT0 ;set or report the current extruder or other tool\nM107 ; turn fan off" }, "machine_end_gcode": { "default_value": "G1 X5 Y{machine_depth*0.95} F{speed_travel*60} ; present print\nM140 S0 ; turn off heat bed\nM104 S0 ; turn off temperature\nM84; disable motors ; disable stepper motors" }, "material_diameter": { "default_value": 1.75 }, From 95f35275be464edf537a4abb76bd16c04f95cd60 Mon Sep 17 00:00:00 2001 From: HellAholic <28710690+HellAholic@users.noreply.github.com> Date: Fri, 20 Jun 2025 07:22:21 +0000 Subject: [PATCH 78/84] Apply printer-linter format --- .../definitions/anycubic_kobra3v2.def.json | 52 ++++++------- .../anycubic_kobra3v2_ACE_PRO.def.json | 77 +++++++++---------- ...ycubic_kobra3v2_ACEPRO_extruder_0.def.json | 2 +- ...ycubic_kobra3v2_ACEPRO_extruder_1.def.json | 2 +- ...ycubic_kobra3v2_ACEPRO_extruder_2.def.json | 2 +- ...ycubic_kobra3v2_ACEPRO_extruder_3.def.json | 2 +- .../anycubic_kobra3v2_extruder_0.def.json | 2 +- 7 files changed, 68 insertions(+), 71 deletions(-) diff --git a/resources/definitions/anycubic_kobra3v2.def.json b/resources/definitions/anycubic_kobra3v2.def.json index 143d08b92b..6b8df0cc4b 100644 --- a/resources/definitions/anycubic_kobra3v2.def.json +++ b/resources/definitions/anycubic_kobra3v2.def.json @@ -8,34 +8,35 @@ "author": "Sam Bonnekamp", "manufacturer": "Anycubic", "file_formats": "text/x-gcode", - "has_textured_buildplate": true, "platform": "anycubic_kobra3v2_buildplate.stl", - "machine_extruder_trains": { "0": "anycubic_kobra3v2_extruder_0" } + "has_textured_buildplate": true, + "machine_extruder_trains": { "0": "anycubic_kobra3v2_extruder_0" } }, "overrides": { + "adhesion_type": { "value": "'skirt'" }, + "layer_height": { "default_value": 0.2 }, + "machine_buildplate_type": { "default_value": "PEI Spring Steel" }, + "machine_center_is_zero": { "default_value": false }, + "machine_depth": { "default_value": 250 }, + "machine_end_gcode": { "default_value": "G1 X5 Y{machine_depth*0.95} F{speed_travel*60} ; present print\nM140 S0 ; turn off heat bed\nM104 S0 ; turn off temperature\nM84; disable motors ; disable stepper motors" }, + "machine_heated_bed": { "default_value": true }, "machine_height": { "default_value": 260 }, - "machine_width": { "default_value": 250 }, - "machine_depth": { "default_value": 250 }, - "machine_name": - { - "description": "Anycubic Kobra 3 v2", - "default_value": "Anycubic Kobra 3 v2" + "machine_name": + { + "default_value": "Anycubic Kobra 3 v2", + "description": "Anycubic Kobra 3 v2" }, - "machine_buildplate_type": { "default_value": "PEI Spring Steel" }, - "machine_heated_bed": { "default_value": true}, - "machine_center_is_zero": { "default_value": false }, - "machine_start_gcode_first": { "default_value": true }, - "machine_start_gcode": { "default_value": "; thumbnail begin 32x32\n; iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAX\n; NSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAARWSURBVHgB1Vc7bx1FFD5n/cC+YOQ4RBTXlg0STfIH\n; gM78h0SAhGgQjyqARO8eFEQFBaKhCHIoKagcOkJJQUWBI19XJLaJgp+5M8x5zZzdO+sg0ZCR1zM7u3\n; e+73znMbMAT0KLMVqPdKVhvuze+o2NjUafget7Gz4GeO3s7Ow29YiYiXSJ2TPft0BwEmZ2dpYnp+Ec\n; 8NPT09tpyOAhhF4CXSBPwhOvEZk+B/ynNFzd2QvwxlfHMEq9PqR//mVaWcegmqKCIf9FKGS2Px30Ey\n; A/Hh8fE/gWgRPomww+VkxVgYFoWcz3xXpUJo2QsXvEFu8qAQJvmobA13b3I1u+Q+AhQuRfB1kTBDS6\n; FUVmVBx5iwmqNIgNv9ONkUzg4ODgBQNn2b80yyNbCzFQqMsC4MCNg/eveSQGdQM6glhXYDAYbJHvRw\n; q+ux90dQ8eeBxacaD+5T5ZSdLbfIcT61hTgCZTuq1R/zqDjxMOva6SKzBdMQRoO1OsovcLZrpPkmOO\n; ytibCdPejOQCGJHl5l+zlEGNxBiuvjxI1zNwZTgDzw4a6LbV6/fTT8eqSGD/G3hVgTQRT05OOv6Nyl\n; zBwxgW5iN8/e4leOWlOTivESjAlNhvYJoEvTEA6gq7wIqMyZ76zevPw5XlWdi5/wi+2foLNu88hAeH\n; QQKQJG/ScjjFY1cUFD3mYKxmgeef+1z9AstO4KMEfu3zXdi594gXlHIj3hYFY6su5fVQU7OjgAvZNg\n; kpaDFn8jvrC9zf+GEvgZ+16HqX5QRVctl6FmAyXhq3TmHnROBhWuBysp7aj7/+rS+IWybKO8oPWTns\n; zFX2kxalEKTe+6pZXR9kx0X3olhXdmqJ+GIF6lyfC8ArUCnZ8PPvJ9xfXn4KLMCkuBlo306payJMWD\n; 9BoGspE9LrVop4ajfevgQrz82U5xkQyg7onyEWfpUzxSQBlUnjWRZM8t66cwi/jU5h5eIMbH40hKuv\n; LqS6UFwh7mhv1RL4AYojY9VQbqkQRWL34icPtQ5o6dXqR9fwQlLgrYuPLUSrH96TvZDigsg1UwxFc3\n; c/e5rfsRNRI/JFNNns8MBy8QKNvJYKzGgf4NoXf8LH3+5xTDw4jP0szH16ZvBlybdcitMhpJzrwKUB\n; jcmCiDkDvv/liK92qRWLeTdsZYSsQaPhhXOOZD44uLJhqXAIxYKIQUIaSqBGg+Di09CuBiUYxQ0E/t\n; 0Hc2bk9gQB26kiYJEK7a6kJyqdvL/bKSiKOmx9dGumfpnA35/jnsDH4/H6BAH7Qba3dobTTQYrOY0N\n; usOnbr9JieEiCPgSzzH4/Pz8dpVASw3T2OY0Y2V7FkBrdjDOarErkLPmpgNPkb/u5e8l4CqHG1IqhU\n; xEoQuZztlwuIRw8705WFma8uB3a0jcUhb05pQ/zdp+Ufso8R8hdLqygDs6OnptcXHxD+gx9V8R6H6a\n; dQ8WrSwq81XZ/1NToLztuY9T8D3U687/r/0D2siIlZoKRzIAAAAASUVORK5CYII=\n; thumbnail end\n; external perimeters extrusion width = 0.42mm\n; perimeters extrusion width = 0.45mm\n; infill extrusion width = 0.45mm\n; solid infill extrusion width = 0.45mm\n; top infill extrusion width = 0.42mm\n; support material extrusion width = 0.42mm\n; first layer extrusion width = 0.50mm\n;TYPE:Custom\nG9111 bedTemp={material_bed_temperature} extruderTemp={material_print_temperature}\nM117 ;display LCD message\nM900 K0.05 ;linear advance factor, ive only seen this set to k0.05\n;START HEADER\nG21 ; set units to millimeters\nG90 ; use absolute coordinates\nT0 ;set or report the current extruder or other tool\nM107 ; turn fan off" }, - "machine_end_gcode": { "default_value": "G1 X5 Y{machine_depth*0.95} F{speed_travel*60} ; present print\nM140 S0 ; turn off heat bed\nM104 S0 ; turn off temperature\nM84; disable motors ; disable stepper motors" }, - - "material_bed_temperature": - { "maximum_value": "110", - "maximum_value_warning": "90" - }, - "material_print_temperature":{ "maximum_value": 300 }, - "material_diameter": { "default_value": 1.75 }, - "material_initial_print_temperature": + "machine_start_gcode": { "default_value": "; thumbnail begin 32x32\n; iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAX\n; NSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAARWSURBVHgB1Vc7bx1FFD5n/cC+YOQ4RBTXlg0STfIH\n; gM78h0SAhGgQjyqARO8eFEQFBaKhCHIoKagcOkJJQUWBI19XJLaJgp+5M8x5zZzdO+sg0ZCR1zM7u3\n; e+73znMbMAT0KLMVqPdKVhvuze+o2NjUafget7Gz4GeO3s7Ow29YiYiXSJ2TPft0BwEmZ2dpYnp+Ec\n; 8NPT09tpyOAhhF4CXSBPwhOvEZk+B/ynNFzd2QvwxlfHMEq9PqR//mVaWcegmqKCIf9FKGS2Px30Ey\n; A/Hh8fE/gWgRPomww+VkxVgYFoWcz3xXpUJo2QsXvEFu8qAQJvmobA13b3I1u+Q+AhQuRfB1kTBDS6\n; FUVmVBx5iwmqNIgNv9ONkUzg4ODgBQNn2b80yyNbCzFQqMsC4MCNg/eveSQGdQM6glhXYDAYbJHvRw\n; q+ux90dQ8eeBxacaD+5T5ZSdLbfIcT61hTgCZTuq1R/zqDjxMOva6SKzBdMQRoO1OsovcLZrpPkmOO\n; ytibCdPejOQCGJHl5l+zlEGNxBiuvjxI1zNwZTgDzw4a6LbV6/fTT8eqSGD/G3hVgTQRT05OOv6Nyl\n; zBwxgW5iN8/e4leOWlOTivESjAlNhvYJoEvTEA6gq7wIqMyZ76zevPw5XlWdi5/wi+2foLNu88hAeH\n; QQKQJG/ScjjFY1cUFD3mYKxmgeef+1z9AstO4KMEfu3zXdi594gXlHIj3hYFY6su5fVQU7OjgAvZNg\n; kpaDFn8jvrC9zf+GEvgZ+16HqX5QRVctl6FmAyXhq3TmHnROBhWuBysp7aj7/+rS+IWybKO8oPWTns\n; zFX2kxalEKTe+6pZXR9kx0X3olhXdmqJ+GIF6lyfC8ArUCnZ8PPvJ9xfXn4KLMCkuBlo306payJMWD\n; 9BoGspE9LrVop4ajfevgQrz82U5xkQyg7onyEWfpUzxSQBlUnjWRZM8t66cwi/jU5h5eIMbH40hKuv\n; LqS6UFwh7mhv1RL4AYojY9VQbqkQRWL34icPtQ5o6dXqR9fwQlLgrYuPLUSrH96TvZDigsg1UwxFc3\n; c/e5rfsRNRI/JFNNns8MBy8QKNvJYKzGgf4NoXf8LH3+5xTDw4jP0szH16ZvBlybdcitMhpJzrwKUB\n; jcmCiDkDvv/liK92qRWLeTdsZYSsQaPhhXOOZD44uLJhqXAIxYKIQUIaSqBGg+Di09CuBiUYxQ0E/t\n; 0Hc2bk9gQB26kiYJEK7a6kJyqdvL/bKSiKOmx9dGumfpnA35/jnsDH4/H6BAH7Qba3dobTTQYrOY0N\n; usOnbr9JieEiCPgSzzH4/Pz8dpVASw3T2OY0Y2V7FkBrdjDOarErkLPmpgNPkb/u5e8l4CqHG1IqhU\n; xEoQuZztlwuIRw8705WFma8uB3a0jcUhb05pQ/zdp+Ufso8R8hdLqygDs6OnptcXHxD+gx9V8R6H6a\n; dQ8WrSwq81XZ/1NToLztuY9T8D3U687/r/0D2siIlZoKRzIAAAAASUVORK5CYII=\n; thumbnail end\n; external perimeters extrusion width = 0.42mm\n; perimeters extrusion width = 0.45mm\n; infill extrusion width = 0.45mm\n; solid infill extrusion width = 0.45mm\n; top infill extrusion width = 0.42mm\n; support material extrusion width = 0.42mm\n; first layer extrusion width = 0.50mm\n;TYPE:Custom\nG9111 bedTemp={material_bed_temperature} extruderTemp={material_print_temperature}\nM117 ;display LCD message\nM900 K0.05 ;linear advance factor, ive only seen this set to k0.05\n;START HEADER\nG21 ; set units to millimeters\nG90 ; use absolute coordinates\nT0 ;set or report the current extruder or other tool\nM107 ; turn fan off" }, + "machine_start_gcode_first": { "default_value": true }, + "machine_width": { "default_value": 250 }, + "material_bed_temperature": + { + "maximum_value": "110", + "maximum_value_warning": "90" + }, + "material_diameter": { "default_value": 1.75 }, + "material_initial_print_temperature": { "maximum_value_warning": 295, "value": "material_print_temperature + 5" @@ -46,9 +47,6 @@ "maximum_value_warning": 295, "value": "material_print_temperature + 5" }, - - "layer_height": { "default_value": 0.2 }, - "adhesion_type": { "value": "'skirt'" }, - "relative_extrusion" : {"value": true} + "relative_extrusion": { "value": true } } -} +} \ No newline at end of file diff --git a/resources/definitions/anycubic_kobra3v2_ACE_PRO.def.json b/resources/definitions/anycubic_kobra3v2_ACE_PRO.def.json index 6e6fb31e2a..fc464c9eee 100644 --- a/resources/definitions/anycubic_kobra3v2_ACE_PRO.def.json +++ b/resources/definitions/anycubic_kobra3v2_ACE_PRO.def.json @@ -8,55 +8,54 @@ "author": "Sam Bonnekamp", "manufacturer": "Anycubic", "file_formats": "text/x-gcode", - "has_textured_buildplate": true, "platform": "anycubic_kobra3v2_buildplate.stl", - "machine_extruder_trains": { - "0": "anycubic_kobra3v2_ACEPRO_extruder_0", - "1": "anycubic_kobra3v2_ACEPRO_extruder_1", - "2": "anycubic_kobra3v2_ACEPRO_extruder_2", - "3": "anycubic_kobra3v2_ACEPRO_extruder_3" - } + "has_textured_buildplate": true, + "machine_extruder_trains": + { + "0": "anycubic_kobra3v2_ACEPRO_extruder_0", + "1": "anycubic_kobra3v2_ACEPRO_extruder_1", + "2": "anycubic_kobra3v2_ACEPRO_extruder_2", + "3": "anycubic_kobra3v2_ACEPRO_extruder_3" + } }, "overrides": { - "machine_height": { "default_value": 260 }, - "machine_width": { "default_value": 250 }, - "machine_depth": { "default_value": 250 }, - "machine_name": - { - "description": "Anycubic Kobra 3 v2", - "default_value": "Anycubic Kobra 3 v2" - }, + "adhesion_type": { "value": "'skirt'" }, + "layer_height": { "default_value": 0.2 }, + "machine_buildplate_type": { "default_value": "PEI Spring Steel" }, + "machine_center_is_zero": { "default_value": false }, + "machine_depth": { "default_value": 250 }, + "machine_end_gcode": { "default_value": "G1 X5 Y{machine_depth*0.95} F{speed_travel*60} ; present print\nM140 S0 ; turn off heat bed\nM104 S0 ; turn off temperature\nM84; disable motors ; disable stepper motors" }, "machine_extruder_count": { "default_value": 4 }, - "machine_buildplate_type": { "default_value": "PEI Spring Steel" }, - "machine_heated_bed": { "default_value": true}, - "material_bed_temperature": - { - "maximum_value": "110", - "maximum_value_warning": "90" - }, - "material_print_temp_wait": { "value": true }, - "machine_center_is_zero": { "default_value": false }, - "machine_start_gcode_first": { "default_value": true }, - "machine_start_gcode": { "default_value": "; thumbnail begin 32x32\n; iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAX\n; NSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAARWSURBVHgB1Vc7bx1FFD5n/cC+YOQ4RBTXlg0STfIH\n; gM78h0SAhGgQjyqARO8eFEQFBaKhCHIoKagcOkJJQUWBI19XJLaJgp+5M8x5zZzdO+sg0ZCR1zM7u3\n; e+73znMbMAT0KLMVqPdKVhvuze+o2NjUafget7Gz4GeO3s7Ow29YiYiXSJ2TPft0BwEmZ2dpYnp+Ec\n; 8NPT09tpyOAhhF4CXSBPwhOvEZk+B/ynNFzd2QvwxlfHMEq9PqR//mVaWcegmqKCIf9FKGS2Px30Ey\n; A/Hh8fE/gWgRPomww+VkxVgYFoWcz3xXpUJo2QsXvEFu8qAQJvmobA13b3I1u+Q+AhQuRfB1kTBDS6\n; FUVmVBx5iwmqNIgNv9ONkUzg4ODgBQNn2b80yyNbCzFQqMsC4MCNg/eveSQGdQM6glhXYDAYbJHvRw\n; q+ux90dQ8eeBxacaD+5T5ZSdLbfIcT61hTgCZTuq1R/zqDjxMOva6SKzBdMQRoO1OsovcLZrpPkmOO\n; ytibCdPejOQCGJHl5l+zlEGNxBiuvjxI1zNwZTgDzw4a6LbV6/fTT8eqSGD/G3hVgTQRT05OOv6Nyl\n; zBwxgW5iN8/e4leOWlOTivESjAlNhvYJoEvTEA6gq7wIqMyZ76zevPw5XlWdi5/wi+2foLNu88hAeH\n; QQKQJG/ScjjFY1cUFD3mYKxmgeef+1z9AstO4KMEfu3zXdi594gXlHIj3hYFY6su5fVQU7OjgAvZNg\n; kpaDFn8jvrC9zf+GEvgZ+16HqX5QRVctl6FmAyXhq3TmHnROBhWuBysp7aj7/+rS+IWybKO8oPWTns\n; zFX2kxalEKTe+6pZXR9kx0X3olhXdmqJ+GIF6lyfC8ArUCnZ8PPvJ9xfXn4KLMCkuBlo306payJMWD\n; 9BoGspE9LrVop4ajfevgQrz82U5xkQyg7onyEWfpUzxSQBlUnjWRZM8t66cwi/jU5h5eIMbH40hKuv\n; LqS6UFwh7mhv1RL4AYojY9VQbqkQRWL34icPtQ5o6dXqR9fwQlLgrYuPLUSrH96TvZDigsg1UwxFc3\n; c/e5rfsRNRI/JFNNns8MBy8QKNvJYKzGgf4NoXf8LH3+5xTDw4jP0szH16ZvBlybdcitMhpJzrwKUB\n; jcmCiDkDvv/liK92qRWLeTdsZYSsQaPhhXOOZD44uLJhqXAIxYKIQUIaSqBGg+Di09CuBiUYxQ0E/t\n; 0Hc2bk9gQB26kiYJEK7a6kJyqdvL/bKSiKOmx9dGumfpnA35/jnsDH4/H6BAH7Qba3dobTTQYrOY0N\n; usOnbr9JieEiCPgSzzH4/Pz8dpVASw3T2OY0Y2V7FkBrdjDOarErkLPmpgNPkb/u5e8l4CqHG1IqhU\n; xEoQuZztlwuIRw8705WFma8uB3a0jcUhb05pQ/zdp+Ufso8R8hdLqygDs6OnptcXHxD+gx9V8R6H6a\n; dQ8WrSwq81XZ/1NToLztuY9T8D3U687/r/0D2siIlZoKRzIAAAAASUVORK5CYII=\n; thumbnail end\n; external perimeters extrusion width = 0.42mm\n; perimeters extrusion width = 0.45mm\n; infill extrusion width = 0.45mm\n; solid infill extrusion width = 0.45mm\n; top infill extrusion width = 0.42mm\n; support material extrusion width = 0.42mm\n; first layer extrusion width = 0.50mm\n;TYPE:Custom\nG9111 bedTemp={material_bed_temperature} extruderTemp={material_print_temperature}\nM117 ;display LCD message\nM900 K0.05 ;linear advance factor, ive only seen this set to k0.05\n;START HEADER\nG21 ; set units to millimeters\nG90 ; use absolute coordinates\nT0 ;set or report the current extruder or other tool\nM107 ; turn fan off" }, - "machine_end_gcode": { "default_value": "G1 X5 Y{machine_depth*0.95} F{speed_travel*60} ; present print\nM140 S0 ; turn off heat bed\nM104 S0 ; turn off temperature\nM84; disable motors ; disable stepper motors" }, - - "material_diameter": { "default_value": 1.75 }, - "material_initial_print_temperature": - { + "machine_heated_bed": { "default_value": true }, + "machine_height": { "default_value": 260 }, + "machine_name": + { + "default_value": "Anycubic Kobra 3 v2", + "description": "Anycubic Kobra 3 v2" + }, + "machine_start_gcode": { "default_value": "; thumbnail begin 32x32\n; iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAX\n; NSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAARWSURBVHgB1Vc7bx1FFD5n/cC+YOQ4RBTXlg0STfIH\n; gM78h0SAhGgQjyqARO8eFEQFBaKhCHIoKagcOkJJQUWBI19XJLaJgp+5M8x5zZzdO+sg0ZCR1zM7u3\n; e+73znMbMAT0KLMVqPdKVhvuze+o2NjUafget7Gz4GeO3s7Ow29YiYiXSJ2TPft0BwEmZ2dpYnp+Ec\n; 8NPT09tpyOAhhF4CXSBPwhOvEZk+B/ynNFzd2QvwxlfHMEq9PqR//mVaWcegmqKCIf9FKGS2Px30Ey\n; A/Hh8fE/gWgRPomww+VkxVgYFoWcz3xXpUJo2QsXvEFu8qAQJvmobA13b3I1u+Q+AhQuRfB1kTBDS6\n; FUVmVBx5iwmqNIgNv9ONkUzg4ODgBQNn2b80yyNbCzFQqMsC4MCNg/eveSQGdQM6glhXYDAYbJHvRw\n; q+ux90dQ8eeBxacaD+5T5ZSdLbfIcT61hTgCZTuq1R/zqDjxMOva6SKzBdMQRoO1OsovcLZrpPkmOO\n; ytibCdPejOQCGJHl5l+zlEGNxBiuvjxI1zNwZTgDzw4a6LbV6/fTT8eqSGD/G3hVgTQRT05OOv6Nyl\n; zBwxgW5iN8/e4leOWlOTivESjAlNhvYJoEvTEA6gq7wIqMyZ76zevPw5XlWdi5/wi+2foLNu88hAeH\n; QQKQJG/ScjjFY1cUFD3mYKxmgeef+1z9AstO4KMEfu3zXdi594gXlHIj3hYFY6su5fVQU7OjgAvZNg\n; kpaDFn8jvrC9zf+GEvgZ+16HqX5QRVctl6FmAyXhq3TmHnROBhWuBysp7aj7/+rS+IWybKO8oPWTns\n; zFX2kxalEKTe+6pZXR9kx0X3olhXdmqJ+GIF6lyfC8ArUCnZ8PPvJ9xfXn4KLMCkuBlo306payJMWD\n; 9BoGspE9LrVop4ajfevgQrz82U5xkQyg7onyEWfpUzxSQBlUnjWRZM8t66cwi/jU5h5eIMbH40hKuv\n; LqS6UFwh7mhv1RL4AYojY9VQbqkQRWL34icPtQ5o6dXqR9fwQlLgrYuPLUSrH96TvZDigsg1UwxFc3\n; c/e5rfsRNRI/JFNNns8MBy8QKNvJYKzGgf4NoXf8LH3+5xTDw4jP0szH16ZvBlybdcitMhpJzrwKUB\n; jcmCiDkDvv/liK92qRWLeTdsZYSsQaPhhXOOZD44uLJhqXAIxYKIQUIaSqBGg+Di09CuBiUYxQ0E/t\n; 0Hc2bk9gQB26kiYJEK7a6kJyqdvL/bKSiKOmx9dGumfpnA35/jnsDH4/H6BAH7Qba3dobTTQYrOY0N\n; usOnbr9JieEiCPgSzzH4/Pz8dpVASw3T2OY0Y2V7FkBrdjDOarErkLPmpgNPkb/u5e8l4CqHG1IqhU\n; xEoQuZztlwuIRw8705WFma8uB3a0jcUhb05pQ/zdp+Ufso8R8hdLqygDs6OnptcXHxD+gx9V8R6H6a\n; dQ8WrSwq81XZ/1NToLztuY9T8D3U687/r/0D2siIlZoKRzIAAAAASUVORK5CYII=\n; thumbnail end\n; external perimeters extrusion width = 0.42mm\n; perimeters extrusion width = 0.45mm\n; infill extrusion width = 0.45mm\n; solid infill extrusion width = 0.45mm\n; top infill extrusion width = 0.42mm\n; support material extrusion width = 0.42mm\n; first layer extrusion width = 0.50mm\n;TYPE:Custom\nG9111 bedTemp={material_bed_temperature} extruderTemp={material_print_temperature}\nM117 ;display LCD message\nM900 K0.05 ;linear advance factor, ive only seen this set to k0.05\n;START HEADER\nG21 ; set units to millimeters\nG90 ; use absolute coordinates\nT0 ;set or report the current extruder or other tool\nM107 ; turn fan off" }, + "machine_start_gcode_first": { "default_value": true }, + "machine_width": { "default_value": 250 }, + "material_bed_temperature": + { + "maximum_value": "110", + "maximum_value_warning": "90" + }, + "material_diameter": { "default_value": 1.75 }, + "material_initial_print_temperature": + { "maximum_value_warning": 295, "value": "material_print_temperature + 5" - }, - "material_print_temperature": { "maximum_value": 300 }, - "material_standby_temperature" : {"default_value": "material_print_temperature"}, + }, + "material_print_temp_wait": { "value": true }, + "material_print_temperature": { "maximum_value": 300 }, "material_print_temperature_layer_0": { "maximum_value_warning": 295, "value": "material_print_temperature + 5" }, - - "layer_height": { "default_value": 0.2 }, - "adhesion_type": { "value": "'skirt'" }, - "relative_extrusion" : {"value": true} + "material_standby_temperature": { "default_value": "material_print_temperature" }, + "relative_extrusion": { "value": true } } -} +} \ No newline at end of file diff --git a/resources/extruders/anycubic_kobra3v2_ACEPRO_extruder_0.def.json b/resources/extruders/anycubic_kobra3v2_ACEPRO_extruder_0.def.json index ab4a7d1a68..5537606b12 100644 --- a/resources/extruders/anycubic_kobra3v2_ACEPRO_extruder_0.def.json +++ b/resources/extruders/anycubic_kobra3v2_ACEPRO_extruder_0.def.json @@ -13,4 +13,4 @@ "machine_nozzle_size": { "default_value": 0.4 }, "material_diameter": { "default_value": 1.75 } } -} +} \ No newline at end of file diff --git a/resources/extruders/anycubic_kobra3v2_ACEPRO_extruder_1.def.json b/resources/extruders/anycubic_kobra3v2_ACEPRO_extruder_1.def.json index 029e7ad2bf..2370427eea 100644 --- a/resources/extruders/anycubic_kobra3v2_ACEPRO_extruder_1.def.json +++ b/resources/extruders/anycubic_kobra3v2_ACEPRO_extruder_1.def.json @@ -13,4 +13,4 @@ "machine_nozzle_size": { "default_value": 0.4 }, "material_diameter": { "default_value": 1.75 } } -} +} \ No newline at end of file diff --git a/resources/extruders/anycubic_kobra3v2_ACEPRO_extruder_2.def.json b/resources/extruders/anycubic_kobra3v2_ACEPRO_extruder_2.def.json index fb732d5fd4..ae860e5f7a 100644 --- a/resources/extruders/anycubic_kobra3v2_ACEPRO_extruder_2.def.json +++ b/resources/extruders/anycubic_kobra3v2_ACEPRO_extruder_2.def.json @@ -13,4 +13,4 @@ "machine_nozzle_size": { "default_value": 0.4 }, "material_diameter": { "default_value": 1.75 } } -} +} \ No newline at end of file diff --git a/resources/extruders/anycubic_kobra3v2_ACEPRO_extruder_3.def.json b/resources/extruders/anycubic_kobra3v2_ACEPRO_extruder_3.def.json index 2f64b0532a..fed2c1fc6b 100644 --- a/resources/extruders/anycubic_kobra3v2_ACEPRO_extruder_3.def.json +++ b/resources/extruders/anycubic_kobra3v2_ACEPRO_extruder_3.def.json @@ -13,4 +13,4 @@ "machine_nozzle_size": { "default_value": 0.4 }, "material_diameter": { "default_value": 1.75 } } -} +} \ No newline at end of file diff --git a/resources/extruders/anycubic_kobra3v2_extruder_0.def.json b/resources/extruders/anycubic_kobra3v2_extruder_0.def.json index dba5e6e559..f5983cf3fb 100644 --- a/resources/extruders/anycubic_kobra3v2_extruder_0.def.json +++ b/resources/extruders/anycubic_kobra3v2_extruder_0.def.json @@ -13,4 +13,4 @@ "machine_nozzle_size": { "default_value": 0.4 }, "material_diameter": { "default_value": 1.75 } } -} +} \ No newline at end of file From 4001e23d913a84bece91bbd54976adb272627d2d Mon Sep 17 00:00:00 2001 From: HellAholic Date: Fri, 20 Jun 2025 14:08:09 +0200 Subject: [PATCH 79/84] Update Cura.proto Add the types missing --- plugins/CuraEngineBackend/Cura.proto | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/plugins/CuraEngineBackend/Cura.proto b/plugins/CuraEngineBackend/Cura.proto index 8018c9186f..cdbe463d81 100644 --- a/plugins/CuraEngineBackend/Cura.proto +++ b/plugins/CuraEngineBackend/Cura.proto @@ -78,10 +78,14 @@ message Polygon { SkirtType = 5; InfillType = 6; SupportInfillType = 7; - MoveUnretractedType = 8; - MoveRetractedType = 9; + MoveUnretracted = 8; + MoveRetracted = 9; SupportInterfaceType = 10; PrimeTowerType = 11; + MoveWhileRetracting = 12; + MoveWhileUnretracting = 13; + StationaryRetractUnretract = 14; + NumPrintFeatureTypes = 15; } Type type = 1; // Type of move bytes points = 2; // The points of the polygon, or two points if only a line segment (Currently only line segments are used) From 436d5a669d4fc2af5cd656795ef06508e971d676 Mon Sep 17 00:00:00 2001 From: HellAholic Date: Fri, 20 Jun 2025 20:39:43 +0200 Subject: [PATCH 80/84] Create find-packages.yml --- .github/workflows/find-packages.yml | 118 ++++++++++++++++++++++++++++ 1 file changed, 118 insertions(+) create mode 100644 .github/workflows/find-packages.yml diff --git a/.github/workflows/find-packages.yml b/.github/workflows/find-packages.yml new file mode 100644 index 0000000000..693dff9ae8 --- /dev/null +++ b/.github/workflows/find-packages.yml @@ -0,0 +1,118 @@ +name: Conan Package Discovery by Jira Ticket + +on: + workflow_dispatch: + inputs: + jira_ticket_number: + description: 'Jira ticket number for Conan package discovery (e.g., cura_12345)' + required: true + type: string + +jobs: + discover_conan_packages: + runs-on: ubuntu-latest + steps: + - name: Checkout repository code + uses: actions/checkout@v4 + + - name: Validate Jira Ticket Number Format + id: validate_input + run: | + set -eou pipefail + JIRA_TICKET="${{ github.event.inputs.jira_ticket_number }}" + # Regex to validate the format: "cura_" followed by one or more digits. + # The '^' and '$' anchors ensure the entire string matches the pattern. + if [[ ! "$JIRA_TICKET" =~ ^cura_[0-9]+$ ]]; then + # Output an error message that will appear as an annotation in the GitHub Actions UI. + # This provides immediate and clear feedback to the user about the expected format. + echo "::error::Invalid Jira ticket number format. Expected format: cura_# (e.g., cura_12345)." + # Exit with a non-zero status code to fail the workflow immediately. + exit 1 + fi + echo "Jira ticket number '$JIRA_TICKET' is valid." + + - name: Setup Conan Client + uses: conan-io/setup-conan@v1 + + - name: Install jq for JSON parsing + run: sudo apt-get update && sudo apt-get install -y jq + + - name: Discover Conan Packages + id: conan_search + env: + CONAN_USERNAME: ${{ secrets.CONAN_USERNAME }} + CONAN_PASSWORD: ${{ secrets.CONAN_PASSWORD }} + run: | + set -eou pipefail + JIRA_TICKET="${{ github.event.inputs.jira_ticket_number }}" + # Construct the full Conan package reference dynamically. + # The format '5.11.0-alpha.0@ultimaker/cura_#' is based on the user's requirement. + CONAN_PACKAGE_REFERENCE="5.11.0-alpha.0@ultimaker/${JIRA_TICKET}" + echo "Searching for Conan packages matching tag: $CONAN_PACKAGE_REFERENCE" + + # Initialize an empty array to store discovered packages. + # This array will hold Markdown-formatted strings for the summary. + DISCOVERED_PACKAGES=() + + # Get a list of all configured Conan remotes in JSON format. + # Conan 2.x's 'conan remote list --format=json' provides structured output. + # This dynamic approach ensures the workflow adapts to any remote configuration changes. + REMOTES_JSON=$(conan remote list --format=json) + + # Parse the JSON to extract remote names. + # The 'jq -r..name' command extracts the 'name' field from each object in the JSON array. + REMOTE_NAMES=$(echo "$REMOTES_JSON" | jq -r '..name') + + # Iterate through each remote to perform a targeted search for binaries. + # For Conan 2.x, 'conan list' is used for detailed package information. + # To find specific binaries, iteration over individual remotes is necessary. + for REMOTE_NAME in $REMOTE_NAMES; do + echo "Searching remote: $REMOTE_NAME" + # Authenticate with the remote if credentials are provided as secrets. + # This is a security best practice for private remotes. + if [ -n "${CONAN_USERNAME:-}" ] && [ -n "${CONAN_PASSWORD:-}" ]; then + echo "Attempting to log in to remote '$REMOTE_NAME'..." + conan remote login "$REMOTE_NAME" -u "$CONAN_USERNAME" -p "$CONAN_PASSWORD" || echo "Login failed for remote $REMOTE_NAME, continuing without authentication for this remote." + fi + # Execute 'conan list' for the specific package reference on the current remote. + # The '--format=json' flag ensures machine-readable output. + # Redirect stderr to /dev/null to suppress non-critical error messages (e.g., remote not found). + SEARCH_RESULT=$(conan list "$CONAN_PACKAGE_REFERENCE" -r "$REMOTE_NAME" --format=json 2>/dev/null || true) + + # Check if any packages were found in this remote's search result. + # The '.results.items | select(.recipe.id == "$CONAN_PACKAGE_REFERENCE")' + # filters for the exact recipe ID. + # '.packages.id' extracts package IDs if binaries are present. + FOUND_ITEMS=$(echo "$SEARCH_RESULT" | jq -r --arg ref "$CONAN_PACKAGE_REFERENCE" \ + '.results.items | select(.recipe.id == $ref) |.packages.id' 2>/dev/null || true) + + if [ -n "$FOUND_ITEMS" ]; then + # If packages are found, add them to the DISCOVERED_PACKAGES array. + # Format: "- `package/version@user/channel#package_id` (Remote: `remote_name`)" + while IFS= read -r PACKAGE_ID; do + DISCOVERED_PACKAGES+=("- \`${CONAN_PACKAGE_REFERENCE}#${PACKAGE_ID}\` (Remote: \`${REMOTE_NAME}\`)") + done <<< "$FOUND_ITEMS" + else + echo "No packages found in $REMOTE_NAME matching $CONAN_PACKAGE_REFERENCE" + fi + done + + # Prepare the summary content for the GitHub Actions run summary. + # This content will be written to the GITHUB_STEP_SUMMARY file. + echo "### Conan Packages Found for Jira Ticket: ${JIRA_TICKET}" >> "$GITHUB_STEP_SUMMARY" + echo "" >> "$GITHUB_STEP_SUMMARY" # Add a blank line for spacing + echo "The workflow searched for Conan packages tagged \`${CONAN_PACKAGE_REFERENCE}\` across all configured remotes." >> "$GITHUB_STEP_SUMMARY" + echo "" >> "$GITHUB_STEP_SUMMARY" # Add a blank line for spacing + echo "**Discovered Packages:**" >> "$GITHUB_STEP_SUMMARY" + echo "" >> "$GITHUB_STEP_SUMMARY" # Add a blank line for spacing + + if [ ${#DISCOVERED_PACKAGES[@]} -eq 0 ]; then + echo "*No packages found matching the specified tag.*" >> "$GITHUB_STEP_SUMMARY" + else + # Iterate through the array of discovered packages and append each to the summary file. + for PACKAGE_ENTRY in "${DISCOVERED_PACKAGES[@]}"; do + echo "$PACKAGE_ENTRY" >> "$GITHUB_STEP_SUMMARY" + done + fi + echo "" >> "$GITHUB_STEP_SUMMARY" # Add a blank line for spacing + echo "---" >> "$GITHUB_STEP_SUMMARY" # Add a separator for cleanliness \ No newline at end of file From 4948adf03e199b46351073c893f3e1297e4821e7 Mon Sep 17 00:00:00 2001 From: HellAholic Date: Fri, 20 Jun 2025 21:02:32 +0200 Subject: [PATCH 81/84] Update find-packages.yml --- .github/workflows/find-packages.yml | 113 ++-------------------------- 1 file changed, 6 insertions(+), 107 deletions(-) diff --git a/.github/workflows/find-packages.yml b/.github/workflows/find-packages.yml index 693dff9ae8..e9c60a89b4 100644 --- a/.github/workflows/find-packages.yml +++ b/.github/workflows/find-packages.yml @@ -9,110 +9,9 @@ on: type: string jobs: - discover_conan_packages: - runs-on: ubuntu-latest - steps: - - name: Checkout repository code - uses: actions/checkout@v4 - - - name: Validate Jira Ticket Number Format - id: validate_input - run: | - set -eou pipefail - JIRA_TICKET="${{ github.event.inputs.jira_ticket_number }}" - # Regex to validate the format: "cura_" followed by one or more digits. - # The '^' and '$' anchors ensure the entire string matches the pattern. - if [[ ! "$JIRA_TICKET" =~ ^cura_[0-9]+$ ]]; then - # Output an error message that will appear as an annotation in the GitHub Actions UI. - # This provides immediate and clear feedback to the user about the expected format. - echo "::error::Invalid Jira ticket number format. Expected format: cura_# (e.g., cura_12345)." - # Exit with a non-zero status code to fail the workflow immediately. - exit 1 - fi - echo "Jira ticket number '$JIRA_TICKET' is valid." - - - name: Setup Conan Client - uses: conan-io/setup-conan@v1 - - - name: Install jq for JSON parsing - run: sudo apt-get update && sudo apt-get install -y jq - - - name: Discover Conan Packages - id: conan_search - env: - CONAN_USERNAME: ${{ secrets.CONAN_USERNAME }} - CONAN_PASSWORD: ${{ secrets.CONAN_PASSWORD }} - run: | - set -eou pipefail - JIRA_TICKET="${{ github.event.inputs.jira_ticket_number }}" - # Construct the full Conan package reference dynamically. - # The format '5.11.0-alpha.0@ultimaker/cura_#' is based on the user's requirement. - CONAN_PACKAGE_REFERENCE="5.11.0-alpha.0@ultimaker/${JIRA_TICKET}" - echo "Searching for Conan packages matching tag: $CONAN_PACKAGE_REFERENCE" - - # Initialize an empty array to store discovered packages. - # This array will hold Markdown-formatted strings for the summary. - DISCOVERED_PACKAGES=() - - # Get a list of all configured Conan remotes in JSON format. - # Conan 2.x's 'conan remote list --format=json' provides structured output. - # This dynamic approach ensures the workflow adapts to any remote configuration changes. - REMOTES_JSON=$(conan remote list --format=json) - - # Parse the JSON to extract remote names. - # The 'jq -r..name' command extracts the 'name' field from each object in the JSON array. - REMOTE_NAMES=$(echo "$REMOTES_JSON" | jq -r '..name') - - # Iterate through each remote to perform a targeted search for binaries. - # For Conan 2.x, 'conan list' is used for detailed package information. - # To find specific binaries, iteration over individual remotes is necessary. - for REMOTE_NAME in $REMOTE_NAMES; do - echo "Searching remote: $REMOTE_NAME" - # Authenticate with the remote if credentials are provided as secrets. - # This is a security best practice for private remotes. - if [ -n "${CONAN_USERNAME:-}" ] && [ -n "${CONAN_PASSWORD:-}" ]; then - echo "Attempting to log in to remote '$REMOTE_NAME'..." - conan remote login "$REMOTE_NAME" -u "$CONAN_USERNAME" -p "$CONAN_PASSWORD" || echo "Login failed for remote $REMOTE_NAME, continuing without authentication for this remote." - fi - # Execute 'conan list' for the specific package reference on the current remote. - # The '--format=json' flag ensures machine-readable output. - # Redirect stderr to /dev/null to suppress non-critical error messages (e.g., remote not found). - SEARCH_RESULT=$(conan list "$CONAN_PACKAGE_REFERENCE" -r "$REMOTE_NAME" --format=json 2>/dev/null || true) - - # Check if any packages were found in this remote's search result. - # The '.results.items | select(.recipe.id == "$CONAN_PACKAGE_REFERENCE")' - # filters for the exact recipe ID. - # '.packages.id' extracts package IDs if binaries are present. - FOUND_ITEMS=$(echo "$SEARCH_RESULT" | jq -r --arg ref "$CONAN_PACKAGE_REFERENCE" \ - '.results.items | select(.recipe.id == $ref) |.packages.id' 2>/dev/null || true) - - if [ -n "$FOUND_ITEMS" ]; then - # If packages are found, add them to the DISCOVERED_PACKAGES array. - # Format: "- `package/version@user/channel#package_id` (Remote: `remote_name`)" - while IFS= read -r PACKAGE_ID; do - DISCOVERED_PACKAGES+=("- \`${CONAN_PACKAGE_REFERENCE}#${PACKAGE_ID}\` (Remote: \`${REMOTE_NAME}\`)") - done <<< "$FOUND_ITEMS" - else - echo "No packages found in $REMOTE_NAME matching $CONAN_PACKAGE_REFERENCE" - fi - done - - # Prepare the summary content for the GitHub Actions run summary. - # This content will be written to the GITHUB_STEP_SUMMARY file. - echo "### Conan Packages Found for Jira Ticket: ${JIRA_TICKET}" >> "$GITHUB_STEP_SUMMARY" - echo "" >> "$GITHUB_STEP_SUMMARY" # Add a blank line for spacing - echo "The workflow searched for Conan packages tagged \`${CONAN_PACKAGE_REFERENCE}\` across all configured remotes." >> "$GITHUB_STEP_SUMMARY" - echo "" >> "$GITHUB_STEP_SUMMARY" # Add a blank line for spacing - echo "**Discovered Packages:**" >> "$GITHUB_STEP_SUMMARY" - echo "" >> "$GITHUB_STEP_SUMMARY" # Add a blank line for spacing - - if [ ${#DISCOVERED_PACKAGES[@]} -eq 0 ]; then - echo "*No packages found matching the specified tag.*" >> "$GITHUB_STEP_SUMMARY" - else - # Iterate through the array of discovered packages and append each to the summary file. - for PACKAGE_ENTRY in "${DISCOVERED_PACKAGES[@]}"; do - echo "$PACKAGE_ENTRY" >> "$GITHUB_STEP_SUMMARY" - done - fi - echo "" >> "$GITHUB_STEP_SUMMARY" # Add a blank line for spacing - echo "---" >> "$GITHUB_STEP_SUMMARY" # Add a separator for cleanliness \ No newline at end of file + find-packages: + name: Find packages for Jira ticket + uses: ultimaker/cura-workflows/.github/workflows/find_package_by_ticket.yml@jira_find_package + with: + jira_ticket_number: ${{ inputs.jira_ticket_number }} + secrets: inherit \ No newline at end of file From 2a45cf3274cd533b3a1cb406c9d54b56d0e6e6fc Mon Sep 17 00:00:00 2001 From: HellAholic Date: Sat, 21 Jun 2025 10:03:49 +0200 Subject: [PATCH 82/84] set_permission set high level permission to none --- .github/workflows/find-packages.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/find-packages.yml b/.github/workflows/find-packages.yml index e9c60a89b4..fdb3d8ebf4 100644 --- a/.github/workflows/find-packages.yml +++ b/.github/workflows/find-packages.yml @@ -8,10 +8,12 @@ on: required: true type: string +permissions: {} + jobs: find-packages: name: Find packages for Jira ticket uses: ultimaker/cura-workflows/.github/workflows/find_package_by_ticket.yml@jira_find_package with: jira_ticket_number: ${{ inputs.jira_ticket_number }} - secrets: inherit \ No newline at end of file + secrets: inherit From 694ef2a8c9486f37c86a66c95836d9f86b229c63 Mon Sep 17 00:00:00 2001 From: HellAholic Date: Tue, 24 Jun 2025 12:16:05 +0200 Subject: [PATCH 83/84] Update find-packages workflow Add input to start builds Update the reference to the workflow name --- .github/workflows/find-packages.yml | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/.github/workflows/find-packages.yml b/.github/workflows/find-packages.yml index fdb3d8ebf4..43c4b6f17e 100644 --- a/.github/workflows/find-packages.yml +++ b/.github/workflows/find-packages.yml @@ -7,13 +7,18 @@ on: description: 'Jira ticket number for Conan package discovery (e.g., cura_12345)' required: true type: string + start_builds: + default: false + required: false + type: boolean permissions: {} jobs: find-packages: name: Find packages for Jira ticket - uses: ultimaker/cura-workflows/.github/workflows/find_package_by_ticket.yml@jira_find_package + uses: ultimaker/cura-workflows/.github/workflows/find-package-by-ticket.yml@jira_find_package with: jira_ticket_number: ${{ inputs.jira_ticket_number }} + start_builds: ${{ inputs.start_builds }} secrets: inherit From 94faa4cacfb64b6af8eb56d4a0060009cbad78b1 Mon Sep 17 00:00:00 2001 From: HellAholic Date: Tue, 24 Jun 2025 12:38:09 +0200 Subject: [PATCH 84/84] Add read permission to allow for triggering builds --- .github/workflows/find-packages.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/find-packages.yml b/.github/workflows/find-packages.yml index 43c4b6f17e..ad8fb6271d 100644 --- a/.github/workflows/find-packages.yml +++ b/.github/workflows/find-packages.yml @@ -12,7 +12,8 @@ on: required: false type: boolean -permissions: {} +permissions: + contents: read jobs: find-packages: