From 454ef1571b30d49312a3f4c037f41882663531b6 Mon Sep 17 00:00:00 2001 From: Davide Garberi Date: Mon, 21 Sep 2026 10:01:14 +0200 Subject: [PATCH 01/17] Update generic filament profiles for Creality SPARKX i7 (#14388) --- resources/profiles/Creality.json | 2 +- .../filament/Generic PETG @SPARKX i7-all.json | 2 +- .../filament/Generic PLA @SPARKX i7-all.json | 17 ++++++++++------- 3 files changed, 12 insertions(+), 9 deletions(-) diff --git a/resources/profiles/Creality.json b/resources/profiles/Creality.json index 2ba6a5aa62..ecb8ebe2b1 100644 --- a/resources/profiles/Creality.json +++ b/resources/profiles/Creality.json @@ -1,6 +1,6 @@ { "name": "Creality", - "version": "02.03.02.82", + "version": "02.03.02.83", "force_update": "0", "description": "Creality configurations", "machine_model_list": [ diff --git a/resources/profiles/Creality/filament/Generic PETG @SPARKX i7-all.json b/resources/profiles/Creality/filament/Generic PETG @SPARKX i7-all.json index a7c58188b0..4005f5c8b4 100644 --- a/resources/profiles/Creality/filament/Generic PETG @SPARKX i7-all.json +++ b/resources/profiles/Creality/filament/Generic PETG @SPARKX i7-all.json @@ -55,7 +55,7 @@ "0" ], "filament_max_volumetric_speed": [ - "12" + "8" ], "filament_retract_before_wipe": [ "100" diff --git a/resources/profiles/Creality/filament/Generic PLA @SPARKX i7-all.json b/resources/profiles/Creality/filament/Generic PLA @SPARKX i7-all.json index bfa143866e..3a8af3548a 100644 --- a/resources/profiles/Creality/filament/Generic PLA @SPARKX i7-all.json +++ b/resources/profiles/Creality/filament/Generic PLA @SPARKX i7-all.json @@ -43,19 +43,19 @@ "1.75" ], "filament_flow_ratio": [ - "0.98" + "0.95" ], "filament_is_support": [ "0" ], "filament_max_volumetric_speed": [ - "16" + "14" ], "filament_minimal_purge_on_wipe_tower": [ "15" ], "filament_retract_before_wipe": [ - "nil" + "100%" ], "filament_retract_restart_extra": [ "nil" @@ -67,7 +67,7 @@ "nil" ], "filament_retraction_minimum_travel": [ - "nil" + "2" ], "filament_retraction_speed": [ "nil" @@ -106,7 +106,10 @@ "0" ], "slow_down_layer_time": [ - "8" + "14" + ], + "slow_down_min_speed": [ + "20" ], "temperature_vitrification": [ "110" @@ -118,7 +121,7 @@ "55" ], "filament_start_gcode": [ - "; Filament gcode\n" + ";filament start gcode\n" ], "filament_end_gcode": [ "; filament end gcode \n" @@ -153,7 +156,7 @@ "filament_unloading_speed_start": "100", "material_flow_dependent_temperature": "0", "material_flow_temp_graph": "[[0.2,210],[0.6,220]]", - "pressure_advance": "0.12", + "pressure_advance": "0.032", "support_material_interface_fan_speed": "-1", "compatible_printers": [ "Creality SPARKX i7 0.2 nozzle", From 83eaf3bcfc2a33840f4b80f6ad908c501d23514d Mon Sep 17 00:00:00 2001 From: gyarros Date: Mon, 21 Sep 2026 05:07:49 -0300 Subject: [PATCH 02/17] FilAr PLA-mate: lower bed temperature to 50 C (#14489) --- .../filament/FilAr/FilAr PLA-mate @base.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA-mate @base.json b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA-mate @base.json index 729e9d7b9c..972f5a4220 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA-mate @base.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/FilAr/FilAr PLA-mate @base.json @@ -33,15 +33,15 @@ "210" ], "hot_plate_temp": [ - "60" + "50" ], "hot_plate_temp_initial_layer": [ - "60" + "50" ], "textured_plate_temp": [ - "60" + "50" ], "textured_plate_temp_initial_layer": [ - "60" + "50" ] } \ No newline at end of file From 3eae4c69978d10eda341ead98f1370e7df20a218 Mon Sep 17 00:00:00 2001 From: Alexander Haibl Date: Mon, 21 Sep 2026 10:22:32 +0200 Subject: [PATCH 03/17] fix-start-gcode for many creality printers (#14652) --- resources/profiles/Creality.json | 2 +- .../Creality/machine/Creality Ender-3 V4 0.4 nozzle.json | 2 +- .../profiles/Creality/machine/Creality K1 (0.4 nozzle).json | 2 +- .../profiles/Creality/machine/Creality K1 (0.6 nozzle).json | 2 +- .../profiles/Creality/machine/Creality K1 (0.8 nozzle).json | 2 +- .../profiles/Creality/machine/Creality K1 Max (0.4 nozzle).json | 2 +- .../profiles/Creality/machine/Creality K1 Max (0.6 nozzle).json | 2 +- .../profiles/Creality/machine/Creality K1 Max (0.8 nozzle).json | 2 +- .../Creality/machine/Creality K1 Max_CFS-C 0.4 nozzle.json | 2 +- .../profiles/Creality/machine/Creality K1 SE 0.4 nozzle.json | 2 +- .../profiles/Creality/machine/Creality K1 SE 0.6 nozzle.json | 2 +- .../profiles/Creality/machine/Creality K1 SE 0.8 nozzle.json | 2 +- .../Creality/machine/Creality K1 SE_CFS-C 0.4 nozzle.json | 2 +- .../profiles/Creality/machine/Creality K1C 0.4 nozzle.json | 2 +- .../profiles/Creality/machine/Creality K1C 0.6 nozzle.json | 2 +- .../profiles/Creality/machine/Creality K1C 0.8 nozzle.json | 2 +- .../Creality/machine/Creality K1C_CFS-C 0.4 nozzle.json | 2 +- .../profiles/Creality/machine/Creality K1_CFS-C 0.4 nozzle.json | 2 +- .../Creality/machine/Creality SPARKX i7 0.2 nozzle.json | 2 +- .../Creality/machine/Creality SPARKX i7 0.4 nozzle.json | 2 +- .../Creality/machine/Creality SPARKX i7 0.6 nozzle.json | 2 +- .../Creality/machine/Creality SPARKX i7 0.8 nozzle.json | 2 +- 22 files changed, 22 insertions(+), 22 deletions(-) diff --git a/resources/profiles/Creality.json b/resources/profiles/Creality.json index ecb8ebe2b1..b5d5b420bd 100644 --- a/resources/profiles/Creality.json +++ b/resources/profiles/Creality.json @@ -1,6 +1,6 @@ { "name": "Creality", - "version": "02.03.02.83", + "version": "02.03.02.84", "force_update": "0", "description": "Creality configurations", "machine_model_list": [ diff --git a/resources/profiles/Creality/machine/Creality Ender-3 V4 0.4 nozzle.json b/resources/profiles/Creality/machine/Creality Ender-3 V4 0.4 nozzle.json index 5829268d2e..ce5d13c8d9 100644 --- a/resources/profiles/Creality/machine/Creality Ender-3 V4 0.4 nozzle.json +++ b/resources/profiles/Creality/machine/Creality Ender-3 V4 0.4 nozzle.json @@ -54,7 +54,7 @@ "machine_min_travel_rate": "0,0", "machine_pause_gcode": "PAUSE", "machine_platform_motion_enable": "0", - "machine_start_gcode": "M140 S0\nM104 S0 \nSTART_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]\nT[initial_no_support_extruder]\nM104 S[nozzle_temperature_initial_layer]\nM204 S2000\nG1 Z3 F600\nM83\nG1 X20 Y-1 F30000\nG1 Z0.3 F1200\nG1 X100 E10 F{filament_max_volumetric_speed[initial_extruder]/0.3*60}\nG1 X105 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5)/4*60}\nG1 X110 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5)*60}\nG1 X115 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5)/4*60}\nG1 X120 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5)*60}\nG1 X125 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5)/4*60}\nG91\nG1 X1 Z-0.300\nG1 X4\nG92 E0\nG1 Z1 F1200", + "machine_start_gcode": "M140 S0\nM104 S0 \nSTART_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]\nT[initial_no_support_extruder]\nM109 S[nozzle_temperature_initial_layer]\nM204 S2000\nG1 Z3 F600\nM83\nG1 X20 Y-1 F30000\nG1 Z0.3 F1200\nG1 X100 E10 F{filament_max_volumetric_speed[initial_extruder]/0.3*60}\nG1 X105 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5)/4*60}\nG1 X110 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5)*60}\nG1 X115 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5)/4*60}\nG1 X120 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5)*60}\nG1 X125 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5)/4*60}\nG91\nG1 X1 Z-0.300\nG1 X4\nG92 E0\nG1 Z1 F1200", "machine_unload_filament_time": "0", "manual_filament_change": "0", "nozzle_hrc": "0", diff --git a/resources/profiles/Creality/machine/Creality K1 (0.4 nozzle).json b/resources/profiles/Creality/machine/Creality K1 (0.4 nozzle).json index 765e3b3125..11edd6f072 100644 --- a/resources/profiles/Creality/machine/Creality K1 (0.4 nozzle).json +++ b/resources/profiles/Creality/machine/Creality K1 (0.4 nozzle).json @@ -123,7 +123,7 @@ "default_filament_profile": [ "Generic PLA HF @Creality" ], - "machine_start_gcode": "START_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]\nT[initial_no_support_extruder]\nM204 S2000\nM104 S[nozzle_temperature_initial_layer]\nG1 Z3 F600\nM83\nG92 E0\nG1 Z1 F600", + "machine_start_gcode": "START_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]\nT[initial_no_support_extruder]\nM204 S2000\nM109 S[nozzle_temperature_initial_layer]\nG1 Z3 F600\nM83\nG92 E0\nG1 Z1 F600", "machine_end_gcode": "END_PRINT", "scan_first_layer": "0", "thumbnails": [ diff --git a/resources/profiles/Creality/machine/Creality K1 (0.6 nozzle).json b/resources/profiles/Creality/machine/Creality K1 (0.6 nozzle).json index ac6c71187b..1c79748908 100644 --- a/resources/profiles/Creality/machine/Creality K1 (0.6 nozzle).json +++ b/resources/profiles/Creality/machine/Creality K1 (0.6 nozzle).json @@ -123,7 +123,7 @@ "default_filament_profile": [ "Generic PLA HF @Creality" ], - "machine_start_gcode": "START_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]\nT[initial_no_support_extruder]\nM204 S2000\nM104 S[nozzle_temperature_initial_layer]\nG1 Z3 F600\nM83\nG92 E0\nG1 Z1 F600", + "machine_start_gcode": "START_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]\nT[initial_no_support_extruder]\nM204 S2000\nM109 S[nozzle_temperature_initial_layer]\nG1 Z3 F600\nM83\nG92 E0\nG1 Z1 F600", "machine_end_gcode": "END_PRINT", "scan_first_layer": "0", "thumbnails": [ diff --git a/resources/profiles/Creality/machine/Creality K1 (0.8 nozzle).json b/resources/profiles/Creality/machine/Creality K1 (0.8 nozzle).json index e2df1ba34c..64744dd2d5 100644 --- a/resources/profiles/Creality/machine/Creality K1 (0.8 nozzle).json +++ b/resources/profiles/Creality/machine/Creality K1 (0.8 nozzle).json @@ -123,7 +123,7 @@ "default_filament_profile": [ "Generic PLA HF @Creality" ], - "machine_start_gcode": "START_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]\nT[initial_no_support_extruder]\nM204 S2000\nM104 S[nozzle_temperature_initial_layer]\nG1 Z3 F600\nM83\nG92 E0\nG1 Z1 F600", + "machine_start_gcode": "START_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]\nT[initial_no_support_extruder]\nM204 S2000\nM109 S[nozzle_temperature_initial_layer]\nG1 Z3 F600\nM83\nG92 E0\nG1 Z1 F600", "machine_end_gcode": "END_PRINT", "scan_first_layer": "0", "thumbnails": [ diff --git a/resources/profiles/Creality/machine/Creality K1 Max (0.4 nozzle).json b/resources/profiles/Creality/machine/Creality K1 Max (0.4 nozzle).json index 291affba77..037c48e64a 100644 --- a/resources/profiles/Creality/machine/Creality K1 Max (0.4 nozzle).json +++ b/resources/profiles/Creality/machine/Creality K1 Max (0.4 nozzle).json @@ -124,7 +124,7 @@ "default_filament_profile": [ "Generic PLA HF @Creality" ], - "machine_start_gcode": "START_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]\nT[initial_no_support_extruder]\nM204 S2000\nM104 S[nozzle_temperature_initial_layer]\nG1 Z3 F600\nM83\nG92 E0\nG1 Z1 F600", + "machine_start_gcode": "START_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]\nT[initial_no_support_extruder]\nM204 S2000\nM109 S[nozzle_temperature_initial_layer]\nG1 Z3 F600\nM83\nG92 E0\nG1 Z1 F600", "machine_end_gcode": "END_PRINT", "scan_first_layer": "0", "thumbnails": [ diff --git a/resources/profiles/Creality/machine/Creality K1 Max (0.6 nozzle).json b/resources/profiles/Creality/machine/Creality K1 Max (0.6 nozzle).json index 523abd4de4..097777db73 100644 --- a/resources/profiles/Creality/machine/Creality K1 Max (0.6 nozzle).json +++ b/resources/profiles/Creality/machine/Creality K1 Max (0.6 nozzle).json @@ -124,7 +124,7 @@ "default_filament_profile": [ "Generic PLA HF @Creality" ], - "machine_start_gcode": "START_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]\nT[initial_no_support_extruder]\nM204 S2000\nM104 S[nozzle_temperature_initial_layer]\nG1 Z3 F600\nM83\nG92 E0\nG1 Z1 F600", + "machine_start_gcode": "START_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]\nT[initial_no_support_extruder]\nM204 S2000\nM109 S[nozzle_temperature_initial_layer]\nG1 Z3 F600\nM83\nG92 E0\nG1 Z1 F600", "machine_end_gcode": "END_PRINT", "scan_first_layer": "0", "thumbnails": [ diff --git a/resources/profiles/Creality/machine/Creality K1 Max (0.8 nozzle).json b/resources/profiles/Creality/machine/Creality K1 Max (0.8 nozzle).json index c67622c90b..e2ae32cae4 100644 --- a/resources/profiles/Creality/machine/Creality K1 Max (0.8 nozzle).json +++ b/resources/profiles/Creality/machine/Creality K1 Max (0.8 nozzle).json @@ -124,7 +124,7 @@ "default_filament_profile": [ "Generic PLA HF @Creality" ], - "machine_start_gcode": "START_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]\nT[initial_no_support_extruder]\nM204 S2000\nM104 S[nozzle_temperature_initial_layer]\nG1 Z3 F600\nM83\nG92 E0\nG1 Z1 F600", + "machine_start_gcode": "START_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]\nT[initial_no_support_extruder]\nM204 S2000\nM109 S[nozzle_temperature_initial_layer]\nG1 Z3 F600\nM83\nG92 E0\nG1 Z1 F600", "machine_end_gcode": "END_PRINT", "scan_first_layer": "0", "thumbnails": [ diff --git a/resources/profiles/Creality/machine/Creality K1 Max_CFS-C 0.4 nozzle.json b/resources/profiles/Creality/machine/Creality K1 Max_CFS-C 0.4 nozzle.json index 6d382f4c09..2e96b092ab 100644 --- a/resources/profiles/Creality/machine/Creality K1 Max_CFS-C 0.4 nozzle.json +++ b/resources/profiles/Creality/machine/Creality K1 Max_CFS-C 0.4 nozzle.json @@ -56,7 +56,7 @@ "machine_pause_gcode": "PAUSE", "machine_platform_motion_enable": "1", "machine_ptc_exist": "1", - "machine_start_gcode": "START_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]\nT[initial_no_support_extruder]\nM204 S2000\nM104 S[nozzle_temperature_initial_layer]\nG1 Z3 F600\nM83\nG92 E0\nG1 Z1 F600", + "machine_start_gcode": "START_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]\nT[initial_no_support_extruder]\nM204 S2000\nM109 S[nozzle_temperature_initial_layer]\nG1 Z3 F600\nM83\nG92 E0\nG1 Z1 F600", "machine_unload_filament_time": "0", "manual_filament_change": "0", "nozzle_hrc": "0", diff --git a/resources/profiles/Creality/machine/Creality K1 SE 0.4 nozzle.json b/resources/profiles/Creality/machine/Creality K1 SE 0.4 nozzle.json index a8aaadeadb..71214d34a8 100644 --- a/resources/profiles/Creality/machine/Creality K1 SE 0.4 nozzle.json +++ b/resources/profiles/Creality/machine/Creality K1 SE 0.4 nozzle.json @@ -123,7 +123,7 @@ "default_filament_profile": [ "Generic PLA @Creality K1-all" ], - "machine_start_gcode": "START_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]\nT[initial_no_support_extruder]\nM204 S2000\nM104 S[nozzle_temperature_initial_layer]\nG1 Z3 F600\nM83\nG92 E0\nG1 Z1 F600", + "machine_start_gcode": "START_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]\nT[initial_no_support_extruder]\nM204 S2000\nM109 S[nozzle_temperature_initial_layer]\nG1 Z3 F600\nM83\nG92 E0\nG1 Z1 F600", "machine_end_gcode": "END_PRINT", "scan_first_layer": "0", "thumbnails_format": "PNG", diff --git a/resources/profiles/Creality/machine/Creality K1 SE 0.6 nozzle.json b/resources/profiles/Creality/machine/Creality K1 SE 0.6 nozzle.json index 59435515f5..e1212431e2 100644 --- a/resources/profiles/Creality/machine/Creality K1 SE 0.6 nozzle.json +++ b/resources/profiles/Creality/machine/Creality K1 SE 0.6 nozzle.json @@ -57,7 +57,7 @@ "machine_min_travel_rate": "0,0", "machine_pause_gcode": "PAUSE", "machine_platform_motion_enable": "1", - "machine_start_gcode": "START_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]\nT[initial_no_support_extruder]\nM204 S2000\nM104 S[nozzle_temperature_initial_layer]\nG1 Z3 F600\nM83\nG92 E0\nG1 Z1 F600", + "machine_start_gcode": "START_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]\nT[initial_no_support_extruder]\nM204 S2000\nM109 S[nozzle_temperature_initial_layer]\nG1 Z3 F600\nM83\nG92 E0\nG1 Z1 F600", "machine_unload_filament_time": "0", "manual_filament_change": "0", "nozzle_hrc": "0", diff --git a/resources/profiles/Creality/machine/Creality K1 SE 0.8 nozzle.json b/resources/profiles/Creality/machine/Creality K1 SE 0.8 nozzle.json index 0db81bbdec..e17cfbaee4 100644 --- a/resources/profiles/Creality/machine/Creality K1 SE 0.8 nozzle.json +++ b/resources/profiles/Creality/machine/Creality K1 SE 0.8 nozzle.json @@ -57,7 +57,7 @@ "machine_min_travel_rate": "0,0", "machine_pause_gcode": "PAUSE", "machine_platform_motion_enable": "1", - "machine_start_gcode": "START_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]\nT[initial_no_support_extruder]\nM204 S2000\nM104 S[nozzle_temperature_initial_layer]\nG1 Z3 F600\nM83\nG92 E0\nG1 Z1 F600", + "machine_start_gcode": "START_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]\nT[initial_no_support_extruder]\nM204 S2000\nM109 S[nozzle_temperature_initial_layer]\nG1 Z3 F600\nM83\nG92 E0\nG1 Z1 F600", "machine_unload_filament_time": "0", "manual_filament_change": "0", "nozzle_hrc": "0", diff --git a/resources/profiles/Creality/machine/Creality K1 SE_CFS-C 0.4 nozzle.json b/resources/profiles/Creality/machine/Creality K1 SE_CFS-C 0.4 nozzle.json index 8fda2c9f43..aff5f6df86 100644 --- a/resources/profiles/Creality/machine/Creality K1 SE_CFS-C 0.4 nozzle.json +++ b/resources/profiles/Creality/machine/Creality K1 SE_CFS-C 0.4 nozzle.json @@ -55,7 +55,7 @@ "machine_min_travel_rate": "0,0", "machine_pause_gcode": "PAUSE", "machine_platform_motion_enable": "1", - "machine_start_gcode": "START_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]\nT[initial_no_support_extruder]\nM204 S2000\nM104 S[nozzle_temperature_initial_layer]\nG1 Z3 F600\nM83\nG92 E0\nG1 Z1 F600", + "machine_start_gcode": "START_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]\nT[initial_no_support_extruder]\nM204 S2000\nM109 S[nozzle_temperature_initial_layer]\nG1 Z3 F600\nM83\nG92 E0\nG1 Z1 F600", "machine_unload_filament_time": "0", "manual_filament_change": "0", "nozzle_hrc": "0", diff --git a/resources/profiles/Creality/machine/Creality K1C 0.4 nozzle.json b/resources/profiles/Creality/machine/Creality K1C 0.4 nozzle.json index 9f355f391a..00e71f72c3 100644 --- a/resources/profiles/Creality/machine/Creality K1C 0.4 nozzle.json +++ b/resources/profiles/Creality/machine/Creality K1C 0.4 nozzle.json @@ -124,7 +124,7 @@ "default_filament_profile": [ "Generic PLA @Creality K1-all" ], - "machine_start_gcode": "START_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]\nT[initial_no_support_extruder]\nM204 S2000\nM104 S[nozzle_temperature_initial_layer]\nG1 Z3 F600\nM83\nG92 E0\nG1 Z1 F600", + "machine_start_gcode": "START_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]\nT[initial_no_support_extruder]\nM204 S2000\nM109 S[nozzle_temperature_initial_layer]\nG1 Z3 F600\nM83\nG92 E0\nG1 Z1 F600", "machine_end_gcode": "END_PRINT", "scan_first_layer": "0", "thumbnails": [ diff --git a/resources/profiles/Creality/machine/Creality K1C 0.6 nozzle.json b/resources/profiles/Creality/machine/Creality K1C 0.6 nozzle.json index 44c5147f58..755128ca67 100644 --- a/resources/profiles/Creality/machine/Creality K1C 0.6 nozzle.json +++ b/resources/profiles/Creality/machine/Creality K1C 0.6 nozzle.json @@ -124,7 +124,7 @@ "default_filament_profile": [ "Generic PLA @Creality K1-all" ], - "machine_start_gcode": "START_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]\nT[initial_no_support_extruder]\nM204 S2000\nM104 S[nozzle_temperature_initial_layer]\nG1 Z3 F600\nM83\nG92 E0\nG1 Z1 F600", + "machine_start_gcode": "START_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]\nT[initial_no_support_extruder]\nM204 S2000\nM109 S[nozzle_temperature_initial_layer]\nG1 Z3 F600\nM83\nG92 E0\nG1 Z1 F600", "machine_end_gcode": "END_PRINT", "scan_first_layer": "0", "thumbnails": [ diff --git a/resources/profiles/Creality/machine/Creality K1C 0.8 nozzle.json b/resources/profiles/Creality/machine/Creality K1C 0.8 nozzle.json index 9a271da17f..5aad49cdc1 100644 --- a/resources/profiles/Creality/machine/Creality K1C 0.8 nozzle.json +++ b/resources/profiles/Creality/machine/Creality K1C 0.8 nozzle.json @@ -124,7 +124,7 @@ "default_filament_profile": [ "Generic PLA @Creality K1-all" ], - "machine_start_gcode": "START_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]\nT[initial_no_support_extruder]\nM204 S2000\nM104 S[nozzle_temperature_initial_layer]\nG1 Z3 F600\nM83\nG92 E0\nG1 Z1 F600", + "machine_start_gcode": "START_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]\nT[initial_no_support_extruder]\nM204 S2000\nM109 S[nozzle_temperature_initial_layer]\nG1 Z3 F600\nM83\nG92 E0\nG1 Z1 F600", "machine_end_gcode": "END_PRINT", "scan_first_layer": "0", "thumbnails": [ diff --git a/resources/profiles/Creality/machine/Creality K1C_CFS-C 0.4 nozzle.json b/resources/profiles/Creality/machine/Creality K1C_CFS-C 0.4 nozzle.json index a49967f597..3c21fddd9e 100644 --- a/resources/profiles/Creality/machine/Creality K1C_CFS-C 0.4 nozzle.json +++ b/resources/profiles/Creality/machine/Creality K1C_CFS-C 0.4 nozzle.json @@ -56,7 +56,7 @@ "machine_pause_gcode": "PAUSE", "machine_platform_motion_enable": "1", "machine_ptc_exist": "1", - "machine_start_gcode": "START_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]\nT[initial_no_support_extruder]\nM204 S2000\nM104 S[nozzle_temperature_initial_layer]\nG1 Z3 F600\nM83\nG92 E0\nG1 Z1 F600", + "machine_start_gcode": "START_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]\nT[initial_no_support_extruder]\nM204 S2000\nM109 S[nozzle_temperature_initial_layer]\nG1 Z3 F600\nM83\nG92 E0\nG1 Z1 F600", "machine_unload_filament_time": "0", "manual_filament_change": "0", "nozzle_hrc": "0", diff --git a/resources/profiles/Creality/machine/Creality K1_CFS-C 0.4 nozzle.json b/resources/profiles/Creality/machine/Creality K1_CFS-C 0.4 nozzle.json index 375e0bc71b..c19ca981f8 100644 --- a/resources/profiles/Creality/machine/Creality K1_CFS-C 0.4 nozzle.json +++ b/resources/profiles/Creality/machine/Creality K1_CFS-C 0.4 nozzle.json @@ -57,7 +57,7 @@ "machine_pause_gcode": "PAUSE", "machine_platform_motion_enable": "1", "machine_ptc_exist": "1", - "machine_start_gcode": "START_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]\nT[initial_no_support_extruder]\nM204 S2000\nM104 S[nozzle_temperature_initial_layer]\nG1 Z3 F600\nM83\nG92 E0\nG1 Z1 F600", + "machine_start_gcode": "START_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]\nT[initial_no_support_extruder]\nM204 S2000\nM109 S[nozzle_temperature_initial_layer]\nG1 Z3 F600\nM83\nG92 E0\nG1 Z1 F600", "machine_unload_filament_time": "0", "manual_filament_change": "0", "nozzle_hrc": "0", diff --git a/resources/profiles/Creality/machine/Creality SPARKX i7 0.2 nozzle.json b/resources/profiles/Creality/machine/Creality SPARKX i7 0.2 nozzle.json index 6a499942bf..146628aded 100644 --- a/resources/profiles/Creality/machine/Creality SPARKX i7 0.2 nozzle.json +++ b/resources/profiles/Creality/machine/Creality SPARKX i7 0.2 nozzle.json @@ -59,7 +59,7 @@ "machine_pause_gcode": "PAUSE", "machine_platform_motion_enable": "0", "machine_ptc_exist": "0", - "machine_start_gcode": "M140 S0\nM104 S0 \nSTART_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]\nM83 \nM8200 P S[initial_no_support_extruder]\nM220 S100\n\nSET_VELOCITY_LIMIT ACCEL=5000 ACCEL_TO_DECEL=5000\nG0 X267 F18000 \nG0 X278 F2400\nM104 S[nozzle_temperature_initial_layer]\nM106 S0\nT[initial_no_support_extruder]\n\nM8200 O\nM204 S2000\nG1 Z3 F600\nM83\nG1 Y0 F12000\nG1 X150 F30000\nG1 Z0.2 F600\nG1 X120 Y0 E15 F{filament_max_volumetric_speed[initial_extruder]/0.3*60*0.1}\nG1 X115 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5)/4*60}\nG1 X110 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5)*60}\nG1 X105 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5)/4*60}\nG1 X100 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5)*60}\nG1 X95 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5)/4*60}\nG91\nG1 X-1 Z-0.3\nG1 X-4\nG92 E0", + "machine_start_gcode": "M140 S0\nM104 S0 \nSTART_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]\nM83 \nM8200 P S[initial_no_support_extruder]\nM220 S100\n\nSET_VELOCITY_LIMIT ACCEL=5000 ACCEL_TO_DECEL=5000\nG0 X267 F18000 \nG0 X278 F2400\nM109 S[nozzle_temperature_initial_layer]\nM106 S0\nT[initial_no_support_extruder]\n\nM8200 O\nM204 S2000\nG1 Z3 F600\nM83\nG1 Y0 F12000\nG1 X150 F30000\nG1 Z0.2 F600\nG1 X120 Y0 E15 F{filament_max_volumetric_speed[initial_extruder]/0.3*60*0.1}\nG1 X115 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5)/4*60}\nG1 X110 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5)*60}\nG1 X105 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5)/4*60}\nG1 X100 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5)*60}\nG1 X95 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5)/4*60}\nG91\nG1 X-1 Z-0.3\nG1 X-4\nG92 E0", "machine_tool_change_time": "0", "machine_unload_filament_time": "30", "manual_filament_change": "0", diff --git a/resources/profiles/Creality/machine/Creality SPARKX i7 0.4 nozzle.json b/resources/profiles/Creality/machine/Creality SPARKX i7 0.4 nozzle.json index 68dedf568b..bf30a2ce49 100644 --- a/resources/profiles/Creality/machine/Creality SPARKX i7 0.4 nozzle.json +++ b/resources/profiles/Creality/machine/Creality SPARKX i7 0.4 nozzle.json @@ -59,7 +59,7 @@ "machine_pause_gcode": "PAUSE", "machine_platform_motion_enable": "0", "machine_ptc_exist": "0", - "machine_start_gcode": "M140 S0\nM104 S0 \nSTART_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]\nM83 \nM8200 P S[initial_no_support_extruder]\nM220 S100\n\nSET_VELOCITY_LIMIT ACCEL=5000 ACCEL_TO_DECEL=5000\nG0 X267 F18000 \nG0 X278 F2400\nM104 S[nozzle_temperature_initial_layer]\nM106 S0\nT[initial_no_support_extruder]\n\nM8200 O\nM204 S2000\nG1 Z3 F600\nM83\nG1 Y0 F12000\nG1 X150 F30000\nG1 Z0.2 F600\nG1 X120 Y0 E15 F{filament_max_volumetric_speed[initial_extruder]/0.3*60*0.1}\nG1 X115 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5)/4*60}\nG1 X110 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5)*60}\nG1 X105 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5)/4*60}\nG1 X100 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5)*60}\nG1 X95 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5)/4*60}\nG91\nG1 X-1 Z-0.3\nG1 X-4\nG92 E0", + "machine_start_gcode": "M140 S0\nM104 S0 \nSTART_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]\nM83 \nM8200 P S[initial_no_support_extruder]\nM220 S100\n\nSET_VELOCITY_LIMIT ACCEL=5000 ACCEL_TO_DECEL=5000\nG0 X267 F18000 \nG0 X278 F2400\nM109 S[nozzle_temperature_initial_layer]\nM106 S0\nT[initial_no_support_extruder]\n\nM8200 O\nM204 S2000\nG1 Z3 F600\nM83\nG1 Y0 F12000\nG1 X150 F30000\nG1 Z0.2 F600\nG1 X120 Y0 E15 F{filament_max_volumetric_speed[initial_extruder]/0.3*60*0.1}\nG1 X115 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5)/4*60}\nG1 X110 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5)*60}\nG1 X105 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5)/4*60}\nG1 X100 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5)*60}\nG1 X95 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5)/4*60}\nG91\nG1 X-1 Z-0.3\nG1 X-4\nG92 E0", "machine_tool_change_time": "0", "machine_unload_filament_time": "30", "manual_filament_change": "0", diff --git a/resources/profiles/Creality/machine/Creality SPARKX i7 0.6 nozzle.json b/resources/profiles/Creality/machine/Creality SPARKX i7 0.6 nozzle.json index f13761fa81..e327895da7 100644 --- a/resources/profiles/Creality/machine/Creality SPARKX i7 0.6 nozzle.json +++ b/resources/profiles/Creality/machine/Creality SPARKX i7 0.6 nozzle.json @@ -59,7 +59,7 @@ "machine_pause_gcode": "PAUSE", "machine_platform_motion_enable": "0", "machine_ptc_exist": "0", - "machine_start_gcode": "M140 S0\nM104 S0 \nSTART_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]\nM83 \nM8200 P S[initial_no_support_extruder]\nM220 S100\n\nSET_VELOCITY_LIMIT ACCEL=5000 ACCEL_TO_DECEL=5000\nG0 X267 F18000 \nG0 X278 F2400\nM104 S[nozzle_temperature_initial_layer]\nM106 S0\nT[initial_no_support_extruder]\n\nM8200 O\nM204 S2000\nG1 Z3 F600\nM83\nG1 Y0 F12000\nG1 X150 F30000\nG1 Z0.2 F600\nG1 X120 Y0 E15 F{filament_max_volumetric_speed[initial_extruder]/0.3*60*0.1}\nG1 X115 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5)/4*60}\nG1 X110 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5)*60}\nG1 X105 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5)/4*60}\nG1 X100 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5)*60}\nG1 X95 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5)/4*60}\nG91\nG1 X-1 Z-0.3\nG1 X-4\nG92 E0", + "machine_start_gcode": "M140 S0\nM104 S0 \nSTART_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]\nM83 \nM8200 P S[initial_no_support_extruder]\nM220 S100\n\nSET_VELOCITY_LIMIT ACCEL=5000 ACCEL_TO_DECEL=5000\nG0 X267 F18000 \nG0 X278 F2400\nM109 S[nozzle_temperature_initial_layer]\nM106 S0\nT[initial_no_support_extruder]\n\nM8200 O\nM204 S2000\nG1 Z3 F600\nM83\nG1 Y0 F12000\nG1 X150 F30000\nG1 Z0.2 F600\nG1 X120 Y0 E15 F{filament_max_volumetric_speed[initial_extruder]/0.3*60*0.1}\nG1 X115 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5)/4*60}\nG1 X110 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5)*60}\nG1 X105 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5)/4*60}\nG1 X100 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5)*60}\nG1 X95 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5)/4*60}\nG91\nG1 X-1 Z-0.3\nG1 X-4\nG92 E0", "machine_tool_change_time": "0", "machine_unload_filament_time": "30", "manual_filament_change": "0", diff --git a/resources/profiles/Creality/machine/Creality SPARKX i7 0.8 nozzle.json b/resources/profiles/Creality/machine/Creality SPARKX i7 0.8 nozzle.json index 053f23fd77..a3fad94bab 100644 --- a/resources/profiles/Creality/machine/Creality SPARKX i7 0.8 nozzle.json +++ b/resources/profiles/Creality/machine/Creality SPARKX i7 0.8 nozzle.json @@ -59,7 +59,7 @@ "machine_pause_gcode": "PAUSE", "machine_platform_motion_enable": "0", "machine_ptc_exist": "0", - "machine_start_gcode": "M140 S0\nM104 S0 \nSTART_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]\nM83 \nM8200 P S[initial_no_support_extruder]\nM220 S100\n\nSET_VELOCITY_LIMIT ACCEL=5000 ACCEL_TO_DECEL=5000\nG0 X267 F18000 \nG0 X278 F2400\nM104 S[nozzle_temperature_initial_layer]\nM106 S0\nT[initial_no_support_extruder]\n\nM8200 O\nM204 S2000\nG1 Z3 F600\nM83\nG1 Y0 F12000\nG1 X150 F30000\nG1 Z0.2 F600\nG1 X120 Y0 E15 F{filament_max_volumetric_speed[initial_extruder]/0.3*60*0.1}\nG1 X115 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5)/4*60}\nG1 X110 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5)*60}\nG1 X105 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5)/4*60}\nG1 X100 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5)*60}\nG1 X95 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5)/4*60}\nG91\nG1 X-1 Z-0.3\nG1 X-4\nG92 E0", + "machine_start_gcode": "M140 S0\nM104 S0 \nSTART_PRINT EXTRUDER_TEMP=[nozzle_temperature_initial_layer] BED_TEMP=[bed_temperature_initial_layer_single]\nM83 \nM8200 P S[initial_no_support_extruder]\nM220 S100\n\nSET_VELOCITY_LIMIT ACCEL=5000 ACCEL_TO_DECEL=5000\nG0 X267 F18000 \nG0 X278 F2400\nM109 S[nozzle_temperature_initial_layer]\nM106 S0\nT[initial_no_support_extruder]\n\nM8200 O\nM204 S2000\nG1 Z3 F600\nM83\nG1 Y0 F12000\nG1 X150 F30000\nG1 Z0.2 F600\nG1 X120 Y0 E15 F{filament_max_volumetric_speed[initial_extruder]/0.3*60*0.1}\nG1 X115 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5)/4*60}\nG1 X110 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5)*60}\nG1 X105 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5)/4*60}\nG1 X100 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5)*60}\nG1 X95 E.3742 F{outer_wall_volumetric_speed/(0.3*0.5)/4*60}\nG91\nG1 X-1 Z-0.3\nG1 X-4\nG92 E0", "machine_tool_change_time": "0", "machine_unload_filament_time": "30", "manual_filament_change": "0", From c8bfd2ad3e28ea557b6c7abe8248b7062ed33743 Mon Sep 17 00:00:00 2001 From: dremc <93659055+dremc@users.noreply.github.com> Date: Mon, 21 Sep 2026 18:53:16 +1000 Subject: [PATCH 04/17] Fix instantiation on DREMC Filament (#14659) --- resources/profiles/OrcaFilamentLibrary.json | 2 +- .../filament/DREMC/DREMC ABS @System.json | 3 ++- .../filament/DREMC/DREMC ABS+ @System.json | 3 ++- .../filament/DREMC/DREMC ASA @System.json | 3 ++- .../filament/DREMC/DREMC ASA CF @System.json | 3 ++- .../filament/DREMC/DREMC ASA GF @System.json | 3 ++- .../filament/DREMC/DREMC PA12-CF @System.json | 3 ++- .../filament/DREMC/DREMC PET-CF @System.json | 3 ++- .../filament/DREMC/DREMC PETG @System.json | 3 ++- .../filament/DREMC/DREMC PLA HS @System.json | 5 +++-- .../filament/DREMC/DREMC PLA+ @System.json | 3 ++- .../filament/DREMC/DREMC TPU 95A @System.json | 3 ++- 12 files changed, 24 insertions(+), 13 deletions(-) diff --git a/resources/profiles/OrcaFilamentLibrary.json b/resources/profiles/OrcaFilamentLibrary.json index 68212a1d5e..58abbb2be0 100644 --- a/resources/profiles/OrcaFilamentLibrary.json +++ b/resources/profiles/OrcaFilamentLibrary.json @@ -1,6 +1,6 @@ { "name": "OrcaFilamentLibrary", - "version": "02.04.00.08", + "version": "02.04.00.09", "force_update": "0", "description": "Orca Filament Library", "filament_list": [ diff --git a/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC ABS @System.json b/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC ABS @System.json index 6f46fb74dd..5fac752fcf 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC ABS @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC ABS @System.json @@ -3,6 +3,7 @@ "name": "DREMC ABS @System", "inherits": "DREMC ABS @base", "from": "system", - "instantiation": "false", + "setting_id": "gNjISMxTLwQzDrV9", + "instantiation": "true", "compatible_printers": [] } \ No newline at end of file diff --git a/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC ABS+ @System.json b/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC ABS+ @System.json index e9279cc5ba..0d0345828e 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC ABS+ @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC ABS+ @System.json @@ -3,6 +3,7 @@ "name": "DREMC ABS+ @System", "inherits": "DREMC ABS+ @base", "from": "system", - "instantiation": "false", + "setting_id": "M73sIwcpWv6zpFrb", + "instantiation": "true", "compatible_printers": [] } diff --git a/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC ASA @System.json b/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC ASA @System.json index 6a11bbe8ce..10d6626540 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC ASA @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC ASA @System.json @@ -3,6 +3,7 @@ "name": "DREMC ASA @System", "inherits": "DREMC ASA @base", "from": "system", - "instantiation": "false", + "setting_id": "PMulSQ0tYbNyvOYw", + "instantiation": "true", "compatible_printers": [] } diff --git a/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC ASA CF @System.json b/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC ASA CF @System.json index 6814312593..0e10750d78 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC ASA CF @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC ASA CF @System.json @@ -3,6 +3,7 @@ "name": "DREMC ASA CF @System", "inherits": "DREMC ASA CF @base", "from": "system", - "instantiation": "false", + "setting_id": "ZcipEKAqtBcAm6vR", + "instantiation": "true", "compatible_printers": [] } diff --git a/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC ASA GF @System.json b/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC ASA GF @System.json index e40cd71479..2d0f99fa1e 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC ASA GF @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC ASA GF @System.json @@ -3,6 +3,7 @@ "name": "DREMC ASA GF @System", "inherits": "DREMC ASA GF @base", "from": "system", - "instantiation": "false", + "setting_id": "8J3lt7KlQWcx0VUS", + "instantiation": "true", "compatible_printers": [] } \ No newline at end of file diff --git a/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC PA12-CF @System.json b/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC PA12-CF @System.json index 0cecab4c3c..b126651441 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC PA12-CF @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC PA12-CF @System.json @@ -3,6 +3,7 @@ "name": "DREMC PA12-CF @System", "inherits": "DREMC PA12-CF @base", "from": "system", - "instantiation": "false", + "setting_id": "jVlZ1KPsA5i8RIED", + "instantiation": "true", "compatible_printers": [] } diff --git a/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC PET-CF @System.json b/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC PET-CF @System.json index 80100b072f..85efd31920 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC PET-CF @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC PET-CF @System.json @@ -3,6 +3,7 @@ "name": "DREMC PET-CF @System", "inherits": "DREMC PET-CF @base", "from": "system", - "instantiation": "false", + "setting_id": "hal1nPyBF13UL9qB", + "instantiation": "true", "compatible_printers": [] } diff --git a/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC PETG @System.json b/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC PETG @System.json index 04cfb22339..46f2cb9b20 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC PETG @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC PETG @System.json @@ -3,7 +3,8 @@ "name": "DREMC PETG @System", "inherits": "DREMC PETG @base", "from": "system", - "instantiation": "false", + "setting_id": "gTGiaBYfymmtlyfG", + "instantiation": "true", "filament_max_volumetric_speed": [ "20" ], diff --git a/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC PLA HS @System.json b/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC PLA HS @System.json index a2b96c1862..8e98be30b8 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC PLA HS @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC PLA HS @System.json @@ -1,9 +1,10 @@ { "type": "filament", "name": "DREMC PLA+ HS @System", - "inherits": "DREMC PLA+ @base", + "inherits": "DREMC PLA+ HS @base", "from": "system", - "instantiation": "false", + "setting_id": "I0HWhYAZ3ppq91Gx", + "instantiation": "true", "filament_max_volumetric_speed": [ "22" ], diff --git a/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC PLA+ @System.json b/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC PLA+ @System.json index 71ff24bb1b..869633969a 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC PLA+ @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC PLA+ @System.json @@ -3,7 +3,8 @@ "name": "DREMC PLA+ @System", "inherits": "DREMC PLA+ @base", "from": "system", - "instantiation": "false", + "setting_id": "fIjHIsFmdDWIM1bf", + "instantiation": "true", "filament_max_volumetric_speed": [ "18" ], diff --git a/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC TPU 95A @System.json b/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC TPU 95A @System.json index 3b58f57d25..86d5d02151 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC TPU 95A @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/DREMC/DREMC TPU 95A @System.json @@ -3,7 +3,8 @@ "name": "DREMC TPU 95A @System", "inherits": "DREMC TPU 95A @base", "from": "system", - "instantiation": "false", + "setting_id": "AfnFh14wKZsNEaZ1", + "instantiation": "true", "filament_max_volumetric_speed": [ "6" ], From 8b63628cf9dd1de4aebf9d1945025ec091c98226 Mon Sep 17 00:00:00 2001 From: HanifKoh <76276251+HanifKoh@users.noreply.github.com> Date: Mon, 21 Sep 2026 17:09:05 +0800 Subject: [PATCH 05/17] Restore Plugin HTML After a WebKit Reload (#15737) Plugin dialog content is injected with SetPage, so on the WebKit backends a reload (context menu, keyboard shortcut or location.reload()) re-fetches the SetPage base URL instead of the injected document, and the plugin UI is gone for good: load_plugin_content() returned early once m_content_loaded was set. Re-inject the plugin HTML when a main-frame load after the initial swap is neither that swap nor a page the plugin linked to. m_own_page_load marks the load our own SetPage caused, and the URL test recognises the reload: the injected document and the directory a reload re-fetches both report the base URL, so a load of any other URL is left alone. The test ignores a fragment the page navigated to, and undoes the escaping the web view applies to what the resources path holds. A load reaching the base URL is not enough on its own, because WebKitGTK reports a navigation that never committed against the document that stayed and then finishes that document again: a link to a missing file therefore arrives as a load of the base URL and reads exactly like a reload. So the re-injection also requires a navigation to the base URL to have committed, which a reload always does and a failure never does. A bootstrap page that cannot be loaded is still not recovered from: WebKitGTK substitutes a stock error page for it, and that load supersedes the swap whichever way the swap is ordered around it. The file ships, so this is a broken-install path; nothing here makes it worse than it already was. No separate MSW path is needed: wxWebViewEdge ignores the SetPage base URL, so its documents report about:blank and the test never matches there, and WebView2 reloads NavigateToString content from its own history entry anyway. --- src/slic3r/GUI/PluginWebDialog.cpp | 40 +++++++++++++++++++++++++----- src/slic3r/GUI/PluginWebDialog.hpp | 3 +++ 2 files changed, 37 insertions(+), 6 deletions(-) diff --git a/src/slic3r/GUI/PluginWebDialog.cpp b/src/slic3r/GUI/PluginWebDialog.cpp index d89aac7270..7d696dd8db 100644 --- a/src/slic3r/GUI/PluginWebDialog.cpp +++ b/src/slic3r/GUI/PluginWebDialog.cpp @@ -8,6 +8,7 @@ #include #include +#include #include @@ -55,6 +56,14 @@ wxString web_base_url() return wxString("file://") + from_u8(dir) + "/"; } +// Whether a loaded document is the plugin HTML's own base URL. The web view reports the URL it +// parsed, so any fragment the page navigated to is ignored and the escaping it applies to what the +// resources path holds (a space, a non-ASCII character) is undone first. +bool is_content_url(const wxString& url) +{ + return wxURI::Unescape(url.BeforeFirst('#')) == web_base_url(); +} + } // namespace PluginWebDialog::PluginWebDialog(wxWindow* parent, @@ -89,6 +98,7 @@ PluginWebDialog::PluginWebDialog(wxWindow* parent, // missing/blocked bootstrap resource (e.g. a packaged build) still triggers it. Bind(wxEVT_WEBVIEW_LOADED, &PluginWebDialog::on_bootstrap_event, this, wv->GetId()); Bind(wxEVT_WEBVIEW_ERROR, &PluginWebDialog::on_bootstrap_event, this, wv->GetId()); + Bind(wxEVT_WEBVIEW_NAVIGATED, &PluginWebDialog::on_navigated, this, wv->GetId()); } Bind(wxEVT_CLOSE_WINDOW, &PluginWebDialog::on_close_window, this); } @@ -139,19 +149,37 @@ void PluginWebDialog::destroy_for_plugin(PluginWebDialog* dialog) void PluginWebDialog::on_bootstrap_event(wxWebViewEvent& event) { - // The first bootstrap load (or its error) triggers the swap to plugin HTML; - // the resulting plugin-page load is ignored (guarded by m_content_loaded). - load_plugin_content(); + const bool loaded = event.GetEventType() == wxEVT_WEBVIEW_LOADED; + // The first bootstrap load (or its error) triggers the swap to plugin HTML. + if (!m_content_loaded) + load_plugin_content(); + // WebKit reloads the SetPage base URL, so a committed load of it that we did not start is a reload. + // A failed navigation is reported against the page that stayed but never commits. Edge ignores the + // base URL and restores SetPage content itself, so nothing matches there. + else if (is_content_url(event.GetURL())) { + if (m_own_page_load) + m_own_page_load = false; + else if (loaded && m_content_navigated) + load_plugin_content(); + } + if (loaded) + m_content_navigated = false; + event.Skip(); +} + +void PluginWebDialog::on_navigated(wxWebViewEvent& event) +{ + m_content_navigated = is_content_url(event.GetURL()); event.Skip(); } void PluginWebDialog::load_plugin_content() { - if (m_content_loaded) - return; m_content_loaded = true; - if (wxWebView* wv = browser()) + if (wxWebView* wv = browser()) { + m_own_page_load = true; wv->SetPage(wxString::FromUTF8(m_html), web_base_url()); + } } void PluginWebDialog::on_script_message(const nlohmann::json& payload) diff --git a/src/slic3r/GUI/PluginWebDialog.hpp b/src/slic3r/GUI/PluginWebDialog.hpp index 05f77f5148..a62e0b260c 100644 --- a/src/slic3r/GUI/PluginWebDialog.hpp +++ b/src/slic3r/GUI/PluginWebDialog.hpp @@ -64,6 +64,7 @@ protected: private: void on_bootstrap_event(wxWebViewEvent& event); + void on_navigated(wxWebViewEvent& event); void load_plugin_content(); void on_close_window(wxCloseEvent& event); void fire_submit(const nlohmann::json& data); @@ -72,6 +73,8 @@ private: std::string m_html; bool m_content_loaded{false}; + bool m_own_page_load{false}; // a SetPage of the plugin HTML is in flight + bool m_content_navigated{false}; // a navigation to the base URL has committed bool m_open{true}; bool m_close_fired{false}; std::optional m_result; From 45940a573d1a9af2e2d1cc5ab182cd4a79b9e3a4 Mon Sep 17 00:00:00 2001 From: SoftFever Date: Mon, 21 Sep 2026 17:11:56 +0800 Subject: [PATCH 06/17] Grant pull-requests write so profile PR labels and the partner notice actually post --- .github/workflows/pr-merge-bot.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/pr-merge-bot.yml b/.github/workflows/pr-merge-bot.yml index a2722f105e..75025daddf 100644 --- a/.github/workflows/pr-merge-bot.yml +++ b/.github/workflows/pr-merge-bot.yml @@ -529,7 +529,7 @@ jobs: && github.event_name == 'pull_request_target' permissions: contents: read - pull-requests: read + pull-requests: write issues: write runs-on: ubuntu-latest timeout-minutes: 5 @@ -636,7 +636,7 @@ jobs: && github.event_name == 'pull_request_target' permissions: contents: read # delegatable subtree, for file modes - pull-requests: read + pull-requests: write issues: write # label + comment runs-on: ubuntu-latest timeout-minutes: 10 From 64cad00569a31e31319e05798432fd0528eaf9e1 Mon Sep 17 00:00:00 2001 From: barmanr Date: Mon, 21 Sep 2026 15:23:13 +0530 Subject: [PATCH 07/17] fix: update OrcaArena product URL (#15796) Merged by /bot merge on behalf of @barmanr (id 281100727). Grants: resources/profiles/OrcaArena, resources/profiles/OrcaArena.json Head: 794db5d30d4d05f648be970bef9125ba3b0ee58d --- resources/profiles/OrcaArena.json | 2 +- resources/profiles/OrcaArena/machine/Orca Arena X1 Carbon.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/resources/profiles/OrcaArena.json b/resources/profiles/OrcaArena.json index dd5f307a95..d997b9eb73 100644 --- a/resources/profiles/OrcaArena.json +++ b/resources/profiles/OrcaArena.json @@ -1,7 +1,7 @@ { "name": "Orca Arena Printer", "url": "", - "version": "02.04.00.05", + "version": "02.04.00.06", "force_update": "0", "description": "Orca Arena configuration files", "machine_model_list": [ diff --git a/resources/profiles/OrcaArena/machine/Orca Arena X1 Carbon.json b/resources/profiles/OrcaArena/machine/Orca Arena X1 Carbon.json index aa166a4c90..8d543bac21 100644 --- a/resources/profiles/OrcaArena/machine/Orca Arena X1 Carbon.json +++ b/resources/profiles/OrcaArena/machine/Orca Arena X1 Carbon.json @@ -2,7 +2,7 @@ "type": "machine_model", "name": "Orca Arena X1 Carbon", "model_id": "orca_arena_x1c", - "url": "", + "url": "https://www.orcaslicer.com", "nozzle_diameter": "0.4;0.2;0.6;0.8", "machine_tech": "FFF", "family": "ARENA-3DP", From 09d67b1bb490b6d2239644b61c794e2a29e342aa Mon Sep 17 00:00:00 2001 From: peachismomo Date: Mon, 21 Sep 2026 18:17:15 +0800 Subject: [PATCH 08/17] fix: remove some logging --- .github/workflows/post_merge_profiles.yml | 9 --------- 1 file changed, 9 deletions(-) diff --git a/.github/workflows/post_merge_profiles.yml b/.github/workflows/post_merge_profiles.yml index 469bb2a6c3..67780e37bd 100644 --- a/.github/workflows/post_merge_profiles.yml +++ b/.github/workflows/post_merge_profiles.yml @@ -75,8 +75,6 @@ jobs: if [ -z "$base" ] || [ "$base" = "0000000000000000000000000000000000000000" ] || ! git cat-file -e "$base^{commit}" 2>/dev/null; then base="$head^" fi - echo "Diffing $base..$head" - mapfile -t candidates < <( git diff --name-only "$base" "$head" -- resources/profiles \ | sed -nE 's#^resources/profiles/([^/]+)/.*#\1#p; s#^resources/profiles/([^/]+)\.json$#\1#p' \ @@ -95,7 +93,6 @@ jobs: done if [ "${#vendors[@]}" -eq 0 ]; then - echo "No changed vendor profiles in this push; nothing to publish." echo "vendors=" >> "$GITHUB_OUTPUT" exit 0 fi @@ -138,13 +135,10 @@ jobs: done if [ "${#unauthorized[@]}" -ne 0 ]; then - echo "Changed vendor profiles are not covered by FOLDER_MERGERS: ${unauthorized[*]}" - echo "No profile caches will be published for this push." echo "vendors=" >> "$GITHUB_OUTPUT" exit 0 fi - printf 'Changed vendors: %s\n' "${vendors[*]}" echo "vendors=${vendors[*]}" >> "$GITHUB_OUTPUT" - name: Resolve Orca version @@ -163,7 +157,6 @@ jobs: # OrcaCloud keys R2 on; orca_ver (X.Y.Z) is the asset-name prefix. echo "release_tag=$raw" >> "$GITHUB_OUTPUT" echo "orca_ver=$orca_ver" >> "$GITHUB_OUTPUT" - echo "Orca version: release_tag=$raw asset_prefix=$orca_ver" - name: Validate profile versions id: pver @@ -179,7 +172,6 @@ jobs: exit 1 fi printf '%s\t%s\n' "$v" "$pv" >> "$RUNNER_TEMP/pver.tsv" - echo "$v -> $pv" done - name: Download generate_system_cache @@ -214,7 +206,6 @@ jobs: pv="$(awk -F'\t' -v v="$v" '$1==v{print $2}' "$RUNNER_TEMP/pver.tsv")" name="${orca_ver}_${v}_${pv}_${ts}.zip" ( cd resources/profiles && zip -q -j "$out/$name" "$v.opc" ) - echo "packaged $name" done echo "dir=$out" >> "$GITHUB_OUTPUT" From 162cf7fd4c0756ae1d17b7b23472635153afb192 Mon Sep 17 00:00:00 2001 From: "Byeon Ho cheol." Date: Mon, 21 Sep 2026 19:18:57 +0900 Subject: [PATCH 09/17] Update Cubicon profiles: filament/process tuning and xCeler-Mini compatibility (#14660) --- resources/profiles/Cubicon.json | 2 +- .../Cubicon/filament/Cubicon ABS @base.json | 23 ++++-- .../filament/Cubicon ABS-A100 @base.json | 45 +++++++++--- .../Cubicon/filament/Cubicon ABSk @base.json | 14 ++-- .../Cubicon/filament/Cubicon PC @base.json | 72 +++++++++++++++++++ .../Cubicon/filament/Cubicon PETG @base.json | 37 +++++++++- .../Cubicon/filament/Cubicon PLA @base.json | 33 +++++++++ .../Cubicon/filament/Cubicon PLA+ @base.json | 9 +++ .../Cubicon xCeler-Plus 0.4 nozzle.json | 8 +-- .../Cubicon/process/cubicon common @base.json | 45 ++++++------ .../Cubicon/process/fdm_process_common.json | 2 +- .../process/process template @base.json | 2 +- 12 files changed, 238 insertions(+), 54 deletions(-) diff --git a/resources/profiles/Cubicon.json b/resources/profiles/Cubicon.json index f70517a0b1..57f9da37d6 100644 --- a/resources/profiles/Cubicon.json +++ b/resources/profiles/Cubicon.json @@ -1,6 +1,6 @@ { "name": "Cubicon", - "version": "02.04.00.05", + "version": "02.04.00.06", "force_update": "0", "description": "Cubicon configurations", "machine_model_list": [ diff --git a/resources/profiles/Cubicon/filament/Cubicon ABS @base.json b/resources/profiles/Cubicon/filament/Cubicon ABS @base.json index 31efe73b11..42e6db95e7 100644 --- a/resources/profiles/Cubicon/filament/Cubicon ABS @base.json +++ b/resources/profiles/Cubicon/filament/Cubicon ABS @base.json @@ -15,7 +15,7 @@ "115" ], "hot_plate_temp_initial_layer": [ - "115" + "120" ], "close_fan_the_first_x_layers": [ "3" @@ -24,13 +24,13 @@ "30" ], "filament_density": [ - "1.24" + "1.04" ], "filament_flow_ratio": [ "0.99" ], "filament_max_volumetric_speed": [ - "23" + "14" ], "nozzle_temperature_initial_layer": [ "240" @@ -39,19 +39,19 @@ "80" ], "fan_min_speed": [ - "70" + "15" ], "slow_down_min_speed": [ - "30" + "20" ], "slow_down_layer_time": [ - "3" + "10" ], "nozzle_temperature": [ "245" ], "temperature_vitrification": [ - "78" + "105" ], "nozzle_temperature_range_low": [ "220" @@ -61,5 +61,14 @@ ], "additional_cooling_fan_speed": [ "0" + ], + "activate_air_filtration": [ + "1" + ], + "during_print_exhaust_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "255" ] } diff --git a/resources/profiles/Cubicon/filament/Cubicon ABS-A100 @base.json b/resources/profiles/Cubicon/filament/Cubicon ABS-A100 @base.json index 5c64ed0fa5..52b06dbb80 100644 --- a/resources/profiles/Cubicon/filament/Cubicon ABS-A100 @base.json +++ b/resources/profiles/Cubicon/filament/Cubicon ABS-A100 @base.json @@ -12,10 +12,10 @@ "Cubicon" ], "hot_plate_temp": [ - "100" + "105" ], "hot_plate_temp_initial_layer": [ - "100" + "115" ], "close_fan_the_first_x_layers": [ "3" @@ -24,13 +24,13 @@ "30" ], "filament_density": [ - "1.24" + "1.04" ], "filament_flow_ratio": [ - "0.99" + "1.04" ], "filament_max_volumetric_speed": [ - "23" + "8" ], "nozzle_temperature_initial_layer": [ "225" @@ -39,19 +39,19 @@ "80" ], "fan_min_speed": [ - "70" + "15" ], "slow_down_min_speed": [ - "30" + "20" ], "slow_down_layer_time": [ - "3" + "10" ], "nozzle_temperature": [ "230" ], "temperature_vitrification": [ - "78" + "105" ], "nozzle_temperature_range_low": [ "220" @@ -61,5 +61,32 @@ ], "additional_cooling_fan_speed": [ "0" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.04" + ], + "filament_retraction_length": [ + "1.2" + ], + "filament_z_hop": [ + "0" + ], + "filament_retraction_speed": [ + "40" + ], + "filament_deretraction_speed": [ + "25" + ], + "filament_wipe": [ + "1" + ], + "filament_wipe_distance": [ + "2" + ], + "filament_retract_before_wipe": [ + "70%" ] } diff --git a/resources/profiles/Cubicon/filament/Cubicon ABSk @base.json b/resources/profiles/Cubicon/filament/Cubicon ABSk @base.json index 46a8f2d48c..584ce663ad 100644 --- a/resources/profiles/Cubicon/filament/Cubicon ABSk @base.json +++ b/resources/profiles/Cubicon/filament/Cubicon ABSk @base.json @@ -15,7 +15,7 @@ "115" ], "hot_plate_temp_initial_layer": [ - "115" + "120" ], "close_fan_the_first_x_layers": [ "3" @@ -24,13 +24,13 @@ "30" ], "filament_density": [ - "1.24" + "1.04" ], "filament_flow_ratio": [ "0.99" ], "filament_max_volumetric_speed": [ - "23" + "14" ], "nozzle_temperature_initial_layer": [ "240" @@ -39,19 +39,19 @@ "80" ], "fan_min_speed": [ - "70" + "15" ], "slow_down_min_speed": [ - "30" + "20" ], "slow_down_layer_time": [ - "3" + "10" ], "nozzle_temperature": [ "240" ], "temperature_vitrification": [ - "85" + "105" ], "nozzle_temperature_range_low": [ "220" diff --git a/resources/profiles/Cubicon/filament/Cubicon PC @base.json b/resources/profiles/Cubicon/filament/Cubicon PC @base.json index 001434a2b1..e5f12e1503 100644 --- a/resources/profiles/Cubicon/filament/Cubicon PC @base.json +++ b/resources/profiles/Cubicon/filament/Cubicon PC @base.json @@ -10,5 +10,77 @@ ], "filament_vendor": [ "Cubicon" + ], + "fan_max_speed": [ + "25" + ], + "fan_min_speed": [ + "0" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.01" + ], + "close_fan_the_first_x_layers": [ + "5" + ], + "overhang_fan_threshold": [ + "50%" + ], + "overhang_fan_speed": [ + "25" + ], + "slow_down_layer_time": [ + "8" + ], + "filament_max_volumetric_speed": [ + "4" + ], + "filament_flow_ratio": [ + "0.94" + ], + "nozzle_temperature_initial_layer": [ + "245" + ], + "nozzle_temperature": [ + "250" + ], + "nozzle_temperature_range_low": [ + "240" + ], + "nozzle_temperature_range_high": [ + "280" + ], + "filament_retraction_length": [ + "0.8" + ], + "filament_z_hop": [ + "0" + ], + "filament_retraction_speed": [ + "40" + ], + "filament_deretraction_speed": [ + "25" + ], + "filament_wipe": [ + "1" + ], + "filament_wipe_distance": [ + "2" + ], + "filament_retract_before_wipe": [ + "70%" + ], + "activate_air_filtration": [ + "1" + ], + "during_print_exhaust_fan_speed": [ + "0" + ], + "complete_print_exhaust_fan_speed": [ + "255" ] } diff --git a/resources/profiles/Cubicon/filament/Cubicon PETG @base.json b/resources/profiles/Cubicon/filament/Cubicon PETG @base.json index 61fc5c647a..a1e38584a7 100644 --- a/resources/profiles/Cubicon/filament/Cubicon PETG @base.json +++ b/resources/profiles/Cubicon/filament/Cubicon PETG @base.json @@ -15,7 +15,7 @@ "80" ], "hot_plate_temp_initial_layer": [ - "80" + "85" ], "close_fan_the_first_x_layers": [ "3" @@ -54,12 +54,45 @@ "70" ], "nozzle_temperature_range_low": [ - "230" + "220" ], "nozzle_temperature_range_high": [ "250" ], "additional_cooling_fan_speed": [ "0" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.08" + ], + "filament_retraction_length": [ + "2.0" + ], + "filament_z_hop": [ + "0" + ], + "filament_retraction_speed": [ + "40" + ], + "filament_deretraction_speed": [ + "25" + ], + "filament_wipe": [ + "1" + ], + "filament_wipe_distance": [ + "2" + ], + "filament_retract_before_wipe": [ + "70%" + ], + "activate_air_filtration": [ + "1" + ], + "complete_print_exhaust_fan_speed": [ + "255" ] } diff --git a/resources/profiles/Cubicon/filament/Cubicon PLA @base.json b/resources/profiles/Cubicon/filament/Cubicon PLA @base.json index 53df18afc5..dae8e34bee 100644 --- a/resources/profiles/Cubicon/filament/Cubicon PLA @base.json +++ b/resources/profiles/Cubicon/filament/Cubicon PLA @base.json @@ -53,5 +53,38 @@ ], "additional_cooling_fan_speed": [ "80" + ], + "close_fan_the_first_x_layers": [ + "1" + ], + "filament_retraction_length": [ + "2.0" + ], + "filament_z_hop": [ + "0" + ], + "filament_retraction_speed": [ + "40" + ], + "filament_deretraction_speed": [ + "25" + ], + "filament_wipe": [ + "1" + ], + "filament_wipe_distance": [ + "2" + ], + "filament_retract_before_wipe": [ + "70%" + ], + "activate_air_filtration": [ + "1" + ], + "during_print_exhaust_fan_speed": [ + "255" + ], + "complete_print_exhaust_fan_speed": [ + "255" ] } diff --git a/resources/profiles/Cubicon/filament/Cubicon PLA+ @base.json b/resources/profiles/Cubicon/filament/Cubicon PLA+ @base.json index 5e7c8dc10b..635f6483d1 100644 --- a/resources/profiles/Cubicon/filament/Cubicon PLA+ @base.json +++ b/resources/profiles/Cubicon/filament/Cubicon PLA+ @base.json @@ -18,5 +18,14 @@ ], "nozzle_temperature_range_high": [ "220" + ], + "filament_max_volumetric_speed": [ + "8" + ], + "enable_pressure_advance": [ + "1" + ], + "pressure_advance": [ + "0.025" ] } diff --git a/resources/profiles/Cubicon/machine/Cubicon xCeler-Plus 0.4 nozzle.json b/resources/profiles/Cubicon/machine/Cubicon xCeler-Plus 0.4 nozzle.json index 398f4e3457..616fa60297 100644 --- a/resources/profiles/Cubicon/machine/Cubicon xCeler-Plus 0.4 nozzle.json +++ b/resources/profiles/Cubicon/machine/Cubicon xCeler-Plus 0.4 nozzle.json @@ -73,12 +73,12 @@ "20000" ], "machine_max_acceleration_z": [ - "250", - "500" + "50", + "100" ], "machine_max_speed_z": [ - "25", - "12" + "5", + "10" ], "machine_max_acceleration_retracting": [ "5000", diff --git a/resources/profiles/Cubicon/process/cubicon common @base.json b/resources/profiles/Cubicon/process/cubicon common @base.json index 8de7c25078..a269d19529 100644 --- a/resources/profiles/Cubicon/process/cubicon common @base.json +++ b/resources/profiles/Cubicon/process/cubicon common @base.json @@ -5,7 +5,8 @@ "instantiation": "false", "compatible_printers": [ "Cubicon xCeler-I 0.4 nozzle", - "Cubicon xCeler-Plus 0.4 nozzle" + "Cubicon xCeler-Plus 0.4 nozzle", + "Cubicon xCeler-Mini 0.4 nozzle" ], "print_settings_id": "cubicon common @base", "accel_to_decel_enable": "1", @@ -14,26 +15,24 @@ "bridge_flow": "0.9", "internal_bridge_flow": "0.9", "brim_type": "no_brim", - "detect_overhang_wall": "1", + "detect_overhang_wall": "0", "resolution": "0.012", "elefant_foot_compensation": "0.15", - "percise_outer_wall": "1", - "percise_z_height": "0.2", "enable_overhang_speed": "1", - "enable_prime_tower": "1", + "enable_prime_tower": "0", "enable_support": "0", "exclude_object": "0", "filename_format": "{input_filename_base}_{layer_height}mm_{filament_type[initial_tool]}_{printer_model}_{print_time}.gcode", "gap_infill_speed": "250", - "infill_combination": "1", + "infill_combination": "0", "infill_direction": "45", "infill_wall_overlap": "15", "infill_anchor": "400%", "infill_anchor_max": "20", "initial_layer_line_width": "0.5", - "initial_layer_print_height": "0.25", - "initial_layer_speed": "60", - "initial_layer_infill_speed": "60", + "initial_layer_print_height": "0.2", + "initial_layer_speed": "50", + "initial_layer_infill_speed": "100", "initial_layer_travel_speed": "500", "slow_down_layers": "1", "only_one_wall_top": "1", @@ -47,9 +46,9 @@ "outer_wall_speed": "200", "print_sequence": "by layer", "raft_layers": "0", - "reduce_crossing_wall": "0", + "reduce_crossing_wall": "1", "reduce_infill_retraction": "1", - "seam_position": "back", + "seam_position": "aligned", "seam_gap": "10%", "enable_arc_fitting": "0", "staggered_inner_seams": "1", @@ -57,7 +56,7 @@ "skirt_distance": "2.5", "skirt_height": "1", "skirt_speed": "50", - "skirt_start_angle": "-45", + "skirt_start_angle": "-135", "sparse_infill_density": "15", "sparse_infill_speed": "270", "sparse_infill_pattern": "grid", @@ -84,7 +83,7 @@ "support_threshold_angle": "15", "wall_loops": "2", "thick_bridges": "0", - "extra_perimeters_on_overhangs": "1", + "extra_perimeters_on_overhangs": "0", "top_shell_layers": "5", "top_shell_thickness": "1", "slow_down_curled_perimeters": "0", @@ -93,18 +92,18 @@ "travel_jerk": "12", "infill_jerk": "12", "initial_layer_jerk": "9", - "inner_wall_jerk": "7", - "outer_wall_jerk": "7", - "default_acceleration": "13000", - "travel_acceleration": "13000", - "outer_wall_acceleration": "5000", - "inner_wall_acceleration": "5000", - "initial_layer_acceleration": "1000", + "inner_wall_jerk": "3.5", + "outer_wall_jerk": "3", + "default_acceleration": "10000", + "travel_acceleration": "10000", + "outer_wall_acceleration": "2000", + "inner_wall_acceleration": "6000", + "initial_layer_acceleration": "500", "top_surface_acceleration": "2000", "raft_first_layer_density": "90", "raft_first_layer_expansion": "2", "precise_outer_wall": "1", - "precise_z_height": "0", + "precise_z_height": "1", "slowdown_for_curled_perimeters": "0", "bridge_speed": "50", "internal_bridge_speed": "150%", @@ -112,5 +111,7 @@ "overhang_2_4_speed": "50", "overhang_3_4_speed": "30", "overhang_4_4_speed": "10", - "independent_support_layer_height": "1" + "independent_support_layer_height": "1", + "solid_infill_direction": "90", + "max_travel_detour_distance": "80%" } diff --git a/resources/profiles/Cubicon/process/fdm_process_common.json b/resources/profiles/Cubicon/process/fdm_process_common.json index d7da41458a..7308a806fa 100644 --- a/resources/profiles/Cubicon/process/fdm_process_common.json +++ b/resources/profiles/Cubicon/process/fdm_process_common.json @@ -62,7 +62,7 @@ "top_surface_line_width": "0.4", "top_surface_speed": "30", "travel_speed": "400", - "enable_prime_tower": "1", + "enable_prime_tower": "0", "prime_tower_width": "60", "xy_hole_compensation": "0", "xy_contour_compensation": "0" diff --git a/resources/profiles/Cubicon/process/process template @base.json b/resources/profiles/Cubicon/process/process template @base.json index 073bf4ea23..1b9b4d2288 100644 --- a/resources/profiles/Cubicon/process/process template @base.json +++ b/resources/profiles/Cubicon/process/process template @base.json @@ -42,7 +42,7 @@ "enable_arc_fitting": "1", "enable_extra_bridge_layer": "disabled", "enable_overhang_speed": "1", - "enable_prime_tower": "1", + "enable_prime_tower": "0", "enable_support": "0", "enforce_support_layers": "0", "ensure_vertical_shell_thickness": "ensure_all", From 8581df4a8a4e30f67c96ffb655dc9f7b34a6120a Mon Sep 17 00:00:00 2001 From: peachismomo Date: Mon, 21 Sep 2026 18:30:25 +0800 Subject: [PATCH 10/17] fix: update pr-merge-bot.yml to run post_merge_profiles.yml after merge --- .github/workflows/pr-merge-bot.yml | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/.github/workflows/pr-merge-bot.yml b/.github/workflows/pr-merge-bot.yml index a2722f105e..102f9ae413 100644 --- a/.github/workflows/pr-merge-bot.yml +++ b/.github/workflows/pr-merge-bot.yml @@ -520,6 +520,28 @@ jobs: } catch (error) { core.warning(`Merged successfully, but dispatching build_all.yml failed: ${error.message}`); } + // ---- re-kick the profile publish ---- + // Same reason as above: post_merge_profiles.yml is push-triggered, so a + // GITHUB_TOKEN merge never starts it. workflow_dispatch skips the paths: + // filter, so only dispatch when the PR actually touched profiles. + const touchesProfiles = files.some((file) => + [file.filename, file.previous_filename] + .filter(Boolean) + .some((p) => p.startsWith('resources/profiles/')) + ); + if (touchesProfiles) { + try { + await github.rest.actions.createWorkflowDispatch({ + owner, + repo, + workflow_id: 'post_merge_profiles.yml', + ref: pr.base.ref + }); + core.info(`Dispatched post_merge_profiles.yml on ${pr.base.ref}.`); + } catch (error) { + core.warning(`Merged successfully, but dispatching post_merge_profiles.yml failed: ${error.message}`); + } + } label-profile: # Independent of the merge rules: any PR that changes only files inside From cdcef47e3db87956c4803ccf15fdb722b5256546 Mon Sep 17 00:00:00 2001 From: barmanr Date: Mon, 21 Sep 2026 16:40:10 +0530 Subject: [PATCH 11/17] test: bump OrcaArena profile version for OTA retry (#15798) Merged by /bot merge on behalf of @barmanr (id 281100727). Grants: resources/profiles/OrcaArena, resources/profiles/OrcaArena.json Head: 32113de7fd96de0d4a84b4d10f7c5c75bbef1de9 --- resources/profiles/OrcaArena.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/profiles/OrcaArena.json b/resources/profiles/OrcaArena.json index d997b9eb73..9bb97fb232 100644 --- a/resources/profiles/OrcaArena.json +++ b/resources/profiles/OrcaArena.json @@ -1,7 +1,7 @@ { "name": "Orca Arena Printer", "url": "", - "version": "02.04.00.06", + "version": "02.04.00.07", "force_update": "0", "description": "Orca Arena configuration files", "machine_model_list": [ From 1e038bfc531c74ca42375be445372615e0f7b1b3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C4=B0lker=20Kara?= <48905528+karailker@users.noreply.github.com> Date: Mon, 21 Sep 2026 15:36:55 +0300 Subject: [PATCH 12/17] fix(linux): build deps on older GCC and Ubuntu 22.04 (#15151) - GMP: name the parameters in the configure probe from 0001-GMP_GCC15.patch. Unnamed parameters are a hard error on GCC 10 and older, so configure failed there. - TBB: turn off the automatic hwloc search so a system libhwloc-dev is not picked up. - scripts/linux.d/debian: run apt update before checking which webkit2gtk package exists, and prefer webkit2gtk-4.1 since the build requires it. Add automake, which MPFR's autoreconf needs. --- deps/GMP/0001-GMP_GCC15.patch | 6 +++--- deps/TBB/TBB.cmake | 1 + scripts/linux.d/debian | 15 ++++++++++----- 3 files changed, 14 insertions(+), 8 deletions(-) diff --git a/deps/GMP/0001-GMP_GCC15.patch b/deps/GMP/0001-GMP_GCC15.patch index e005120acd..fdabed26f7 100644 --- a/deps/GMP/0001-GMP_GCC15.patch +++ b/deps/GMP/0001-GMP_GCC15.patch @@ -5,7 +5,7 @@ #if defined (__GNUC__) && ! defined (__cplusplus) typedef unsigned long long t1;typedef t1*t2; -void g(){} -+void g(int,t1 const*,t1,t2,t1 const*,int){} ++void g(int a,t1 const*b,t1 c,t2 dd,t1 const*e,int ff){} void h(){} static __inline__ t1 e(t2 rp,t2 up,int n,t1 v0) {t1 c,x,r;int i;if(v0){c=1;for(i=1;i/dev/null)" != "" ] + # The package lists must be current before checking what is available. + sudo apt update + + # src/slic3r/CMakeLists.txt requires webkit2gtk-4.1 unconditionally (no + # 4.0 fallback), so prefer it; only fall back to 4.0-dev when 4.1 isn't + # packaged for this distro. + if [ "$(apt show --quiet libwebkit2gtk-4.1-dev 2>/dev/null)" != "" ] then - REQUIRED_DEV_PACKAGES+=(libwebkit2gtk-4.0-dev) - else REQUIRED_DEV_PACKAGES+=(libwebkit2gtk-4.1-dev) + else + REQUIRED_DEV_PACKAGES+=(libwebkit2gtk-4.0-dev) fi # install them all at once - sudo apt update sudo apt install -y "${REQUIRED_DEV_PACKAGES[@]}" echo -e "done\n" From 2adb631d6fe018df7d1e4b3ffaf9cd6350730df7 Mon Sep 17 00:00:00 2001 From: RH3D <127200179+RH3D@users.noreply.github.com> Date: Mon, 21 Sep 2026 16:02:31 +0200 Subject: [PATCH 13/17] RH3D new printer and print profiles update (#14707) * Update 0.25mm Standard @E3NG v1.2S.json * Create 0.20mm Fast @Virtu E3.json * Update 0.20mm Fast Virtu E3.json * Create 0.20mm SLOW Virtu E3.json * Update and rename 0.20mm Fast @Virtu E3.json to 0.20mm FAST @Virtu E3.json * Update and rename 0.20mm Fast @E3NG v1.2S.json to 0.20mm FAST @E3NG v1.2S.json * Update and rename 0.20mm Slow @E3NG v1.2S.json to 0.20mm SLOW @E3NG v1.2S.json * Update and rename 0.20mm Standard @E3NG v1.2S.json to 0.20mm STANDARD @E3NG v1.2S.json * Create 0.20mm STANDARD @VIRTU E3 * Update and rename 0.20mm FAST Virtu E3.json to 0.20mm FAST VIRTU E3.json * Rename 0.20mm SLOW Virtu E3.json to 0.20mm SLOW VIRTU E3.json * Update 0.20mm STANDARD @VIRTU E3 * Update 0.20mm STANDARD VIRTU E3 * Update and rename 0.25mm Fast @E3NG v1.2S.json to 0.25mm FAST @E3NG v1.2S.json * Create 0.25mm FAST VIRTU E3 * Update and rename 0.15mm Standard @E3NG v1.2S.json to 0.15mm STANDARD @E3NG v1.2S.json * Update and rename 0.10mm Standard @E3NG v1.2S.json to 0.10mm STANDARD @E3NG v1.2S.json * Create 0.15mm STANDARD VIRTU E3 * Create 0.10mm STANDARD VIRTU E3.json * Rename 0.15mm STANDARD @VIRTU E3 to 0.15mm STANDARD @VIRTU E3.json * Update 0.15mm STANDARD VIRTU E3.json * Update 0.20mm STANDARD VIRTU E3 * Update and rename 0.25mm FAST VIRTU E3 to 0.25mm FAST VIRTU E3.json * Rename 0.20mm STANDARD VIRTU E3 to 0.20mm STANDARD VIRTU E3.json * Update 0.15mm STANDARD VIRTU E3.json * Update and rename 0.25mm Standard @E3NG v1.2S.json to 0.25mm STANDARD @E3NG v1.2S.json * Create 0.25mm STANDARD VIRTU E3.json * Create process_common_VIRTU E3.json * Create process_FAST_VIRTU E3.json * Update 0.20mm FAST VIRTU E3.json * Update 0.25mm FAST VIRTU E3.json * Create process_SLOW_VIRTU E3.json * Update 0.20mm SLOW @VIRTU E3.json * Update 0.20mm SLOW VIRTU E3.json * Update and rename process_common_VIRTU E3.json to process_STANDARD_VIRTU E3.json * Update 0.10mm STANDARD VIRTU E3.json * Update 0.15mm STANDARD VIRTU E3.json * Update 0.20mm STANDARD VIRTU E3.json * Update 0.25mm STANDARD @VIRTU E3.json * Update process_STANDARD_VIRTU E3.json * Update 0.25mm STANDARD VIRTU E3.json * Update 0.20mm STANDARD VIRTU E3.json * Update 0.15mm STANDARD @VIRTU E3.json * Update 0.10mm STANDARD VIRTU E3.json * Update 0.15mm STANDARD VIRTU E3.json * Update 0.20mm SLOW VIRTU E3.json * Update RH3D.json * Update RH3D.json * Create VIRTU E3 - 0.2 nozzle.json * Create VIRTU E3 - 0.3 nozzle.json * Create VIRTU E3 - 0.4 nozzle.json * Create VIRTU E3 - 0.5 nozzle.json * Create VIRTU E3 - 0.6 nozzle.json * Create VIRTU E3,json * Update fdm_common_E3NG v1.2S.json * Update fdm_machine_common.json * Create fdm_common_VIRTU E3.json * Create Generic ABS VIRTU E3.json * Create Generic ASA @VIRTU E3.json * Update Generic ASA VIRTU E3.json * Create Generic PCCF VIRTU E3.json * Create Generic PETG @VIRTU E3.json * Create Generic PLA VIRTU E3.json * Create Generic TPU VIRTU E3.json * Update Generic ASA VIRTU E3.json * Update Generic PETG VIRTU E3.json * Update 0.20mm SLOW VIRTU E3.json * Update 0.15mm STANDARD VIRTU E3.json * Rename VIRTU E3,json to VIRTU E3.json * Add files via upload * Update VIRTU E3 - 0.2 nozzle.json * Update E3NG v1.2S - 0.2 nozzle.json * Update E3NG v1.2S - 0.3 nozzle.json * Update E3NG v1.2S - 0.4 nozzle.json * Update E3NG v1.2S - 0.5 nozzle.json * Update E3NG v1.2S - 0.6 nozzle.json * Update 0.10mm STANDARD @E3NG v1.2S.json * Update 0.15mm STANDARD @E3NG v1.2S.json * Update 0.20mm STANDARD @E3NG v1.2S.json * Update 0.25mm STANDARD @E3NG v1.2S.json * Delete resources/profiles/RH3D/VIRTU-bed.stl * Update fdm_common_VIRTU E3.json * Add files via upload * Delete resources/profiles/RH3D/E3NG-bed-texture.svg * Add files via upload * Delete resources/profiles/RH3D/VIRTU E3_cover.png * Add files via upload * Add files via upload * Create process_STANDARD_E3NG.json * Create process_SLOW_E3NG.json * Update and rename process_STANDARD_E3NG.json to process_STANDARD_E3NG v1.2S.json * Update and rename process_SLOW_E3NG.json to process_SLOW_E3NG v1.2S.json * Create process_FAST_E3NG v1.2S.json * Update 0.25mm STANDARD @E3NG v1.2S.json * Update 0.20mm STANDARD @E3NG v1.2S.json * Update 0.15mm STANDARD @E3NG v1.2S.json * Update 0.10mm STANDARD @E3NG v1.2S.json * Update 0.20mm SLOW @E3NG v1.2S.json * Update 0.20mm FAST @E3NG v1.2S.json * Update 0.25mm FAST @E3NG v1.2S.json * Update 0.20mm STANDARD @E3NG v1.2S.json * Update 0.20mm STANDARD VIRTU E3.json * Delete resources/profiles/RH3D/process/process_common_E3NG v1.2S.json * Update RH3D.json * Update fdm_process_common.json * Update fdm_filament_common.json * Update fdm_filament_abs.json * Update fdm_filament_abs.json * Update fdm_filament_asa.json * Update fdm_filament_pccf.json * Update fdm_filament_petg.json * Update fdm_filament_pla.json * Update fdm_process_common.json * Update fdm_common_VIRTU E3.json update speeds * Update fdm_common_E3NG v1.2S.json update speeds * Update fdm_process_common.json fix accel_to_decel * Update fdm_machine_common.json fix speed profile output * Create 0.10mm SLOW @E3NG v1.2S.json * Create 0.10mm FAST @E3NG v1.2S.json * Create 0.15mm FAST @E3NG v1.2S.json * Create 0.15mm SLOW @E3NG v1.2S.json * Create 0.25mm SLOW @E3NG v1.2S.json * Create 0.10mm SLOW VIRTU E3.json * Create 0.10mm FAST VIRTU E3.json * Create 0.15mm SLOW VIRTU E3.json * Create 0.15mm FAST VIRTU E3.json * Create 0.25mm SLOW VIRTU E3.json * Update RH3D.json add more slow and fast profiles * Update 0.20mm FAST @E3NG v1.2S.json * Update 0.20mm SLOW @E3NG v1.2S.json * Update 0.20mm FAST @VIRTU E3.json * Update 0.20mm SLOW @VIRTU E3.json * Update fdm_process_common.json * Update fdm_process_common.json * Update Generic ABS @VIRTU E3.json * Update Generic ABS VIRTU E3.json * Update Generic PCCF VIRTU E3.json * Update Generic PETG VIRTU E3.json * Update Generic PLA VIRTU E3.json * Update Generic ASA VIRTU E3.json * Update Generic TPU VIRTU E3.json * Update 0.20mm SLOW @E3NG v1.2S.json * Update 0.25mm SLOW @E3NG v1.2S.json * Update 0.15mm FAST @VIRTU E3.json * Update 0.20mm FAST VIRTU E3.json * Update 0.20mm STANDARD @E3NG v1.2S.json * Update 0.15mm SLOW @E3NG v1.2S.json * Update 0.25mm STANDARD @VIRTU E3.json * Update 0.20mm STANDARD VIRTU E3.json * Update 0.20mm FAST @E3NG v1.2S.json * Update 0.25mm FAST VIRTU E3.json * Update 0.10mm FAST VIRTU E3.json * Update 0.10mm SLOW VIRTU E3.json * Update 0.15mm SLOW VIRTU E3.json * Update 0.20mm SLOW VIRTU E3.json * Update 0.25mm FAST @E3NG v1.2S.json * Update 0.10mm SLOW @E3NG v1.2S.json * Update 0.10mm STANDARD @E3NG v1.2S.json * Update 0.15mm STANDARD @VIRTU E3.json * Update 0.25mm STANDARD @E3NG v1.2S.json * Update 0.15mm STANDARD @E3NG v1.2S.json * Update 0.25mm SLOW @VIRTU E3.json * Update 0.10mm STANDARD VIRTU E3.json * Update 0.15mm FAST @E3NG v1.2S.json * Update 0.10mm FAST @E3NG v1.2S.json * Update VIRTU E3 - 0.4 nozzle.json * Update VIRTU E3 - 0.5 nozzle.json * Update VIRTU E3 - 0.6 nozzle.json * Update VIRTU E3 - 0.3 nozzle.json * Update VIRTU E3 - 0.2 nozzle.json * Replace cover PNGs for edge to edge images * Update 0.10mm STANDARD @E3NG v1.2S.json added alias with previous name * Update 0.10mm STANDARD @E3NG v1.2S.json update aliases * Update and rename 0.10mm STANDARD @E3NG v1.2S.json to 0.10mm Standard @E3NG v1.2S.json * Update RH3D.json update naming * Update and rename 0.10mm FAST @E3NG v1.2S.json to 0.10mm Fast @E3NG v1.2S.json * Update and rename 0.10mm FAST VIRTU E3.json to 0.10mm Fast VIRTU E3.json * Update and rename 0.15mm FAST @E3NG v1.2S.json to 0.15mm Fast @E3NG v1.2S.json * Update and rename 0.15mm FAST VIRTU E3.json to 0.15mm Fast VIRTU E3.json * Update and rename 0.20mm FAST @E3NG v1.2S.json to 0.20mm Fast @E3NG v1.2S.json * Update and rename 0.20mm FAST VIRTU E3.json to 0.20mm Fast VIRTU E3.json * Update and rename 0.25mm FAST @E3NG v1.2S.json to 0.25mm Fast @E3NG v1.2S.json * Update and rename 0.25mm FAST @VIRTU E3.json to 0.25mm Fast @VIRTU E3.json * Update and rename process_FAST_E3NG v1.2S.json to process_Fast_E3NG v1.2S.json * Update and rename process_FAST_VIRTU E3.json to process_Fast_VIRTU E3.json * Update and rename 0.10mm SLOW @E3NG v1.2S.json to 0.10mm Slow @E3NG v1.2S.json * Update and rename 0.10mm SLOW @VIRTU E3.json to 0.10mm Slow @VIRTU E3.json * Update and rename 0.15mm SLOW @E3NG v1.2S.json to 0.15mm Slow @E3NG v1.2S.json * Update and rename 0.20mm SLOW @E3NG v1.2S.json to 0.20mm Slow @E3NG v1.2S.json * Update and rename 0.15mm SLOW VIRTU E3.json to 0.15mm Slow VIRTU E3.json * Update and rename 0.20mm SLOW @VIRTU E3.json to 0.20mm Slow @VIRTU E3.json * Update and rename 0.25mm SLOW @E3NG v1.2S.json to 0.25mm Slow @E3NG v1.2S.json * Update and rename 0.25mm SLOW @VIRTU E3.json to 0.25mm Slow @VIRTU E3.json * Update and rename process_SLOW_E3NG v1.2S.json to process_Slow_E3NG v1.2S.json * Update and rename process_SLOW_VIRTU E3.json to process_Slow_VIRTU E3.json * Update and rename 0.10mm STANDARD @VIRTU E3.json to 0.10mm Standard @VIRTU E3.json * Update and rename 0.15mm STANDARD @E3NG v1.2S.json to 0.15mm Standard @E3NG v1.2S.json * Update and rename 0.20mm STANDARD @E3NG v1.2S.json to 0.20mm Standard @E3NG v1.2S.json * Update and rename 0.15mm STANDARD @VIRTU E3.json to 0.15mm Standard @VIRTU E3.json * Update and rename 0.20mm STANDARD @VIRTU E3.json to 0.20mm Standard @VIRTU E3.json * Update and rename 0.25mm STANDARD @E3NG v1.2S.json to 0.25mm Standard @E3NG v1.2S.json * Update and rename 0.25mm STANDARD VIRTU E3.json to 0.25mm Standard VIRTU E3.json * Update and rename process_STANDARD_E3NG v1.2S.json to process_Standard_E3NG v1.2S.json * Update and rename process_STANDARD_VIRTU E3.json to process_Standard_VIRTU E3.json * Update E3NG v1.2S - 0.2 nozzle.json * Update E3NG v1.2S - 0.3 nozzle.json * Update E3NG v1.2S - 0.4 nozzle.json * Update E3NG v1.2S - 0.5 nozzle.json * Update E3NG v1.2S - 0.6 nozzle.json * Update VIRTU E3 - 0.2 nozzle.json * Update VIRTU E3 - 0.3 nozzle.json * Update VIRTU E3 - 0.4 nozzle.json * Update VIRTU E3 - 0.5 nozzle.json * Update VIRTU E3 - 0.6 nozzle.json * Update 0.15mm Slow @E3NG v1.2S.json * Update 0.10mm Fast VIRTU E3.json * Update 0.20mm Slow VIRTU E3.json * Update 0.10mm Standard @E3NG v1.2S.json * Update 0.10mm Fast @E3NG v1.2S.json * Update 0.25mm Standard @E3NG v1.2S.json * Update 0.15mm Standard @E3NG v1.2S.json * Update 0.15mm Standard VIRTU E3.json * Update 0.20mm Standard VIRTU E3.json * Update 0.20mm Standard @E3NG v1.2S.json * Update 0.25mm Slow VIRTU E3.json * Update 0.25mm Fast @E3NG v1.2S.json * Update 0.20mm Slow @E3NG v1.2S.json * Update 0.10mm Slow VIRTU E3.json * Update 0.25mm Slow @E3NG v1.2S.json * Update 0.25mm Standard VIRTU E3.json * Update 0.10mm Standard VIRTU E3.json * Update 0.20mm Fast @E3NG v1.2S.json * Update 0.10mm Slow @E3NG v1.2S.json * Update 0.15mm Fast @E3NG v1.2S.json * Update 0.15mm Fast VIRTU E3.json * Update 0.15mm Slow VIRTU E3.json * Update 0.20mm Fast VIRTU E3.json * Update 0.25mm Fast VIRTU E3.json * Update fdm_machine_common.json * Profile verification/fix Fixing profiles with orca_profile_tool.py * bump version --------- Co-authored-by: yw4z Co-authored-by: SoftFever <103989404+SoftFever@users.noreply.github.com> Co-authored-by: SoftFever --- resources/profiles/RH3D.json | 170 ++++++- resources/profiles/RH3D/E3NG v1.2S_cover.png | Bin 55770 -> 93293 bytes resources/profiles/RH3D/E3NG-bed-texture.svg | 444 ++++++++++++++++- resources/profiles/RH3D/VIRTU E3_cover.png | Bin 0 -> 89595 bytes resources/profiles/RH3D/VIRTU-bed-texture.svg | 460 ++++++++++++++++++ resources/profiles/RH3D/VIRTU-bed.stl | Bin 0 -> 440684 bytes .../RH3D/filament/Generic ABS @VIRTU E3.json | 16 + .../RH3D/filament/Generic ASA @VIRTU E3.json | 16 + .../RH3D/filament/Generic PCCF @VIRTU E3.json | 13 + .../RH3D/filament/Generic PETG @VIRTU E3.json | 16 + .../RH3D/filament/Generic PLA @VIRTU E3.json | 16 + .../RH3D/filament/Generic TPU @VIRTU E3.json | 14 + .../RH3D/filament/fdm_filament_abs.json | 8 +- .../RH3D/filament/fdm_filament_asa.json | 10 +- .../RH3D/filament/fdm_filament_common.json | 17 +- .../RH3D/filament/fdm_filament_pccf.json | 6 +- .../RH3D/filament/fdm_filament_petg.json | 8 +- .../RH3D/filament/fdm_filament_pla.json | 4 +- .../RH3D/machine/VIRTU E3 - 0.2 nozzle.json | 14 + .../RH3D/machine/VIRTU E3 - 0.3 nozzle.json | 14 + .../RH3D/machine/VIRTU E3 - 0.4 nozzle.json | 14 + .../RH3D/machine/VIRTU E3 - 0.5 nozzle.json | 14 + .../RH3D/machine/VIRTU E3 - 0.6 nozzle.json | 14 + resources/profiles/RH3D/machine/VIRTU E3.json | 12 + .../RH3D/machine/fdm_common_E3NG v1.2S.json | 9 +- .../RH3D/machine/fdm_common_VIRTU E3.json | 71 +++ .../RH3D/machine/fdm_machine_common.json | 5 +- .../RH3D/process/0.10mm Fast @E3NG v1.2S.json | 15 + .../RH3D/process/0.10mm Fast @VIRTU E3.json | 15 + .../RH3D/process/0.10mm Slow @E3NG v1.2S.json | 15 + .../RH3D/process/0.10mm Slow @VIRTU E3.json | 15 + .../process/0.10mm Standard @E3NG v1.2S.json | 2 +- .../process/0.10mm Standard @VIRTU E3.json | 15 + .../RH3D/process/0.15mm Fast @E3NG v1.2S.json | 16 + .../RH3D/process/0.15mm Fast @VIRTU E3.json | 16 + .../RH3D/process/0.15mm Slow @E3NG v1.2S.json | 16 + .../RH3D/process/0.15mm Slow @VIRTU E3.json | 16 + .../process/0.15mm Standard @E3NG v1.2S.json | 2 +- .../process/0.15mm Standard @VIRTU E3.json | 16 + .../RH3D/process/0.20mm Fast @E3NG v1.2S.json | 39 +- .../RH3D/process/0.20mm Fast @VIRTU E3.json | 16 + .../RH3D/process/0.20mm Slow @E3NG v1.2S.json | 39 +- .../RH3D/process/0.20mm Slow @VIRTU E3.json | 16 + .../process/0.20mm Standard @E3NG v1.2S.json | 4 +- .../process/0.20mm Standard @VIRTU E3.json | 16 + .../RH3D/process/0.25mm Fast @E3NG v1.2S.json | 38 +- .../RH3D/process/0.25mm Fast @VIRTU E3.json | 15 + .../RH3D/process/0.25mm Slow @E3NG v1.2S.json | 15 + .../RH3D/process/0.25mm Slow @VIRTU E3.json | 15 + .../process/0.25mm Standard @E3NG v1.2S.json | 2 +- .../process/0.25mm Standard @VIRTU E3.json | 15 + .../RH3D/process/fdm_process_common.json | 9 +- .../RH3D/process/process_Fast_E3NG v1.2S.json | 42 ++ .../RH3D/process/process_Fast_VIRTU E3.json | 42 ++ .../RH3D/process/process_Slow_E3NG v1.2S.json | 42 ++ .../RH3D/process/process_Slow_VIRTU E3.json | 42 ++ .../process/process_Standard_E3NG v1.2S.json | 33 ++ .../process/process_Standard_VIRTU E3.json | 33 ++ .../process/process_common_E3NG v1.2S.json | 7 - 59 files changed, 1854 insertions(+), 170 deletions(-) create mode 100644 resources/profiles/RH3D/VIRTU E3_cover.png create mode 100644 resources/profiles/RH3D/VIRTU-bed-texture.svg create mode 100644 resources/profiles/RH3D/VIRTU-bed.stl create mode 100644 resources/profiles/RH3D/filament/Generic ABS @VIRTU E3.json create mode 100644 resources/profiles/RH3D/filament/Generic ASA @VIRTU E3.json create mode 100644 resources/profiles/RH3D/filament/Generic PCCF @VIRTU E3.json create mode 100644 resources/profiles/RH3D/filament/Generic PETG @VIRTU E3.json create mode 100644 resources/profiles/RH3D/filament/Generic PLA @VIRTU E3.json create mode 100644 resources/profiles/RH3D/filament/Generic TPU @VIRTU E3.json create mode 100644 resources/profiles/RH3D/machine/VIRTU E3 - 0.2 nozzle.json create mode 100644 resources/profiles/RH3D/machine/VIRTU E3 - 0.3 nozzle.json create mode 100644 resources/profiles/RH3D/machine/VIRTU E3 - 0.4 nozzle.json create mode 100644 resources/profiles/RH3D/machine/VIRTU E3 - 0.5 nozzle.json create mode 100644 resources/profiles/RH3D/machine/VIRTU E3 - 0.6 nozzle.json create mode 100644 resources/profiles/RH3D/machine/VIRTU E3.json create mode 100644 resources/profiles/RH3D/machine/fdm_common_VIRTU E3.json create mode 100644 resources/profiles/RH3D/process/0.10mm Fast @E3NG v1.2S.json create mode 100644 resources/profiles/RH3D/process/0.10mm Fast @VIRTU E3.json create mode 100644 resources/profiles/RH3D/process/0.10mm Slow @E3NG v1.2S.json create mode 100644 resources/profiles/RH3D/process/0.10mm Slow @VIRTU E3.json create mode 100644 resources/profiles/RH3D/process/0.10mm Standard @VIRTU E3.json create mode 100644 resources/profiles/RH3D/process/0.15mm Fast @E3NG v1.2S.json create mode 100644 resources/profiles/RH3D/process/0.15mm Fast @VIRTU E3.json create mode 100644 resources/profiles/RH3D/process/0.15mm Slow @E3NG v1.2S.json create mode 100644 resources/profiles/RH3D/process/0.15mm Slow @VIRTU E3.json create mode 100644 resources/profiles/RH3D/process/0.15mm Standard @VIRTU E3.json create mode 100644 resources/profiles/RH3D/process/0.20mm Fast @VIRTU E3.json create mode 100644 resources/profiles/RH3D/process/0.20mm Slow @VIRTU E3.json create mode 100644 resources/profiles/RH3D/process/0.20mm Standard @VIRTU E3.json create mode 100644 resources/profiles/RH3D/process/0.25mm Fast @VIRTU E3.json create mode 100644 resources/profiles/RH3D/process/0.25mm Slow @E3NG v1.2S.json create mode 100644 resources/profiles/RH3D/process/0.25mm Slow @VIRTU E3.json create mode 100644 resources/profiles/RH3D/process/0.25mm Standard @VIRTU E3.json create mode 100644 resources/profiles/RH3D/process/process_Fast_E3NG v1.2S.json create mode 100644 resources/profiles/RH3D/process/process_Fast_VIRTU E3.json create mode 100644 resources/profiles/RH3D/process/process_Slow_E3NG v1.2S.json create mode 100644 resources/profiles/RH3D/process/process_Slow_VIRTU E3.json create mode 100644 resources/profiles/RH3D/process/process_Standard_E3NG v1.2S.json create mode 100644 resources/profiles/RH3D/process/process_Standard_VIRTU E3.json delete mode 100644 resources/profiles/RH3D/process/process_common_E3NG v1.2S.json diff --git a/resources/profiles/RH3D.json b/resources/profiles/RH3D.json index dbf9500ca0..3e177c5efd 100644 --- a/resources/profiles/RH3D.json +++ b/resources/profiles/RH3D.json @@ -1,12 +1,16 @@ { "name": "RH3D", - "version": "02.04.00.03", + "version": "02.04.00.04", "force_update": "0", "description": "RH3D - printer profiles", "machine_model_list": [ { "name": "E3NG v1.2S", "sub_path": "machine/E3NG v1.2S.json" + }, + { + "name": "VIRTU E3", + "sub_path": "machine/VIRTU E3.json" } ], "machine_list": [ @@ -18,6 +22,10 @@ "name": "fdm_common_E3NG v1.2S", "sub_path": "machine/fdm_common_E3NG v1.2S.json" }, + { + "name": "fdm_common_VIRTU E3", + "sub_path": "machine/fdm_common_VIRTU E3.json" + }, { "name": "E3NG v1.2S - 0.2 nozzle", "sub_path": "machine/E3NG v1.2S - 0.2 nozzle.json" @@ -37,6 +45,26 @@ { "name": "E3NG v1.2S - 0.6 nozzle", "sub_path": "machine/E3NG v1.2S - 0.6 nozzle.json" + }, + { + "name": "VIRTU E3 - 0.2 nozzle", + "sub_path": "machine/VIRTU E3 - 0.2 nozzle.json" + }, + { + "name": "VIRTU E3 - 0.3 nozzle", + "sub_path": "machine/VIRTU E3 - 0.3 nozzle.json" + }, + { + "name": "VIRTU E3 - 0.4 nozzle", + "sub_path": "machine/VIRTU E3 - 0.4 nozzle.json" + }, + { + "name": "VIRTU E3 - 0.5 nozzle", + "sub_path": "machine/VIRTU E3 - 0.5 nozzle.json" + }, + { + "name": "VIRTU E3 - 0.6 nozzle", + "sub_path": "machine/VIRTU E3 - 0.6 nozzle.json" } ], "process_list": [ @@ -45,8 +73,92 @@ "sub_path": "process/fdm_process_common.json" }, { - "name": "process_common_E3NG v1.2S", - "sub_path": "process/process_common_E3NG v1.2S.json" + "name": "process_Fast_E3NG v1.2S", + "sub_path": "process/process_Fast_E3NG v1.2S.json" + }, + { + "name": "process_Fast_VIRTU E3", + "sub_path": "process/process_Fast_VIRTU E3.json" + }, + { + "name": "process_Slow_E3NG v1.2S", + "sub_path": "process/process_Slow_E3NG v1.2S.json" + }, + { + "name": "process_Slow_VIRTU E3", + "sub_path": "process/process_Slow_VIRTU E3.json" + }, + { + "name": "process_Standard_E3NG v1.2S", + "sub_path": "process/process_Standard_E3NG v1.2S.json" + }, + { + "name": "process_Standard_VIRTU E3", + "sub_path": "process/process_Standard_VIRTU E3.json" + }, + { + "name": "0.10mm Fast @E3NG v1.2S", + "sub_path": "process/0.10mm Fast @E3NG v1.2S.json" + }, + { + "name": "0.15mm Fast @E3NG v1.2S", + "sub_path": "process/0.15mm Fast @E3NG v1.2S.json" + }, + { + "name": "0.20mm Fast @E3NG v1.2S", + "sub_path": "process/0.20mm Fast @E3NG v1.2S.json" + }, + { + "name": "0.25mm Fast @E3NG v1.2S", + "sub_path": "process/0.25mm Fast @E3NG v1.2S.json" + }, + { + "name": "0.10mm Fast @VIRTU E3", + "sub_path": "process/0.10mm Fast @VIRTU E3.json" + }, + { + "name": "0.15mm Fast @VIRTU E3", + "sub_path": "process/0.15mm Fast @VIRTU E3.json" + }, + { + "name": "0.20mm Fast @VIRTU E3", + "sub_path": "process/0.20mm Fast @VIRTU E3.json" + }, + { + "name": "0.25mm Fast @VIRTU E3", + "sub_path": "process/0.25mm Fast @VIRTU E3.json" + }, + { + "name": "0.10mm Slow @E3NG v1.2S", + "sub_path": "process/0.10mm Slow @E3NG v1.2S.json" + }, + { + "name": "0.15mm Slow @E3NG v1.2S", + "sub_path": "process/0.15mm Slow @E3NG v1.2S.json" + }, + { + "name": "0.20mm Slow @E3NG v1.2S", + "sub_path": "process/0.20mm Slow @E3NG v1.2S.json" + }, + { + "name": "0.25mm Slow @E3NG v1.2S", + "sub_path": "process/0.25mm Slow @E3NG v1.2S.json" + }, + { + "name": "0.10mm Slow @VIRTU E3", + "sub_path": "process/0.10mm Slow @VIRTU E3.json" + }, + { + "name": "0.15mm Slow @VIRTU E3", + "sub_path": "process/0.15mm Slow @VIRTU E3.json" + }, + { + "name": "0.20mm Slow @VIRTU E3", + "sub_path": "process/0.20mm Slow @VIRTU E3.json" + }, + { + "name": "0.25mm Slow @VIRTU E3", + "sub_path": "process/0.25mm Slow @VIRTU E3.json" }, { "name": "0.10mm Standard @E3NG v1.2S", @@ -56,25 +168,29 @@ "name": "0.15mm Standard @E3NG v1.2S", "sub_path": "process/0.15mm Standard @E3NG v1.2S.json" }, - { - "name": "0.20mm Fast @E3NG v1.2S", - "sub_path": "process/0.20mm Fast @E3NG v1.2S.json" - }, - { - "name": "0.20mm Slow @E3NG v1.2S", - "sub_path": "process/0.20mm Slow @E3NG v1.2S.json" - }, { "name": "0.20mm Standard @E3NG v1.2S", "sub_path": "process/0.20mm Standard @E3NG v1.2S.json" }, - { - "name": "0.25mm Fast @E3NG v1.2S", - "sub_path": "process/0.25mm Fast @E3NG v1.2S.json" - }, { "name": "0.25mm Standard @E3NG v1.2S", "sub_path": "process/0.25mm Standard @E3NG v1.2S.json" + }, + { + "name": "0.10mm Standard @VIRTU E3", + "sub_path": "process/0.10mm Standard @VIRTU E3.json" + }, + { + "name": "0.15mm Standard @VIRTU E3", + "sub_path": "process/0.15mm Standard @VIRTU E3.json" + }, + { + "name": "0.20mm Standard @VIRTU E3", + "sub_path": "process/0.20mm Standard @VIRTU E3.json" + }, + { + "name": "0.25mm Standard @VIRTU E3", + "sub_path": "process/0.25mm Standard @VIRTU E3.json" } ], "filament_list": [ @@ -110,25 +226,49 @@ "name": "Generic ABS @E3NG v1.2S", "sub_path": "filament/Generic ABS @E3NG v1.2S.json" }, + { + "name": "Generic ABS @VIRTU E3", + "sub_path": "filament/Generic ABS @VIRTU E3.json" + }, { "name": "Generic ASA @E3NG v1.2S", "sub_path": "filament/Generic ASA @E3NG v1.2S.json" }, + { + "name": "Generic ASA @VIRTU E3", + "sub_path": "filament/Generic ASA @VIRTU E3.json" + }, { "name": "Generic PCCF @E3NG v1.2S", "sub_path": "filament/Generic PCCF @E3NG v1.2S.json" }, + { + "name": "Generic PCCF @VIRTU E3", + "sub_path": "filament/Generic PCCF @VIRTU E3.json" + }, { "name": "Generic PETG @E3NG v1.2S", "sub_path": "filament/Generic PETG @E3NG v1.2S.json" }, + { + "name": "Generic PETG @VIRTU E3", + "sub_path": "filament/Generic PETG @VIRTU E3.json" + }, { "name": "Generic PLA @E3NG v1.2S", "sub_path": "filament/Generic PLA @E3NG v1.2S.json" }, + { + "name": "Generic PLA @VIRTU E3", + "sub_path": "filament/Generic PLA @VIRTU E3.json" + }, { "name": "Generic TPU @E3NG v1.2S", "sub_path": "filament/Generic TPU @E3NG v1.2S.json" + }, + { + "name": "Generic TPU @VIRTU E3", + "sub_path": "filament/Generic TPU @VIRTU E3.json" } ] } diff --git a/resources/profiles/RH3D/E3NG v1.2S_cover.png b/resources/profiles/RH3D/E3NG v1.2S_cover.png index 03bb5a9e420d6ee748f14738c45fb07f3e39d0d6..f70e2ed35fb29a1f3f9ffebe306d9c85a7babe36 100644 GIT binary patch literal 93293 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 pGzjDXY^k#(?4Yan?gf|4^~Pd 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 literal 55770 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 diff --git a/resources/profiles/RH3D/E3NG-bed-texture.svg b/resources/profiles/RH3D/E3NG-bed-texture.svg index 2cc13e29ad..93e944d534 100644 --- a/resources/profiles/RH3D/E3NG-bed-texture.svg +++ b/resources/profiles/RH3D/E3NG-bed-texture.svg @@ -1 +1,443 @@ - \ No newline at end of file + + diff --git a/resources/profiles/RH3D/VIRTU E3_cover.png b/resources/profiles/RH3D/VIRTU E3_cover.png new file mode 100644 index 0000000000000000000000000000000000000000..085b853cc0e987698dff899750e36613a02cb7b9 GIT binary patch literal 89595 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 O0000 + diff --git a/resources/profiles/RH3D/VIRTU-bed.stl b/resources/profiles/RH3D/VIRTU-bed.stl new file mode 100644 index 0000000000000000000000000000000000000000..c26e99e4194bd82335f03a0be31f64908430d85d GIT binary patch literal 440684 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 OxbCWHqbpRcp8gNjR4+9E literal 0 HcmV?d00001 diff --git a/resources/profiles/Meltingplot/Meltingplot MBL 133_cover.png b/resources/profiles/Meltingplot/Meltingplot MBL 133_cover.png new file mode 100644 index 0000000000000000000000000000000000000000..eb9865c0cbdfeb2ff710db7a101c63c763ff82b5 GIT binary patch literal 42858 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%0D=N*S|v_+f22i;kT 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 Xtt-}#I6Wg@00000NkvXXu0mjfnwddW literal 0 HcmV?d00001 diff --git a/resources/profiles/Meltingplot/Meltingplot MBL 136_cover.png b/resources/profiles/Meltingplot/Meltingplot MBL 136_cover.png new file mode 100644 index 0000000000000000000000000000000000000000..746dfb1fbb2c536d060b43e8b13588615694226e GIT binary patch literal 32398 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 literal 0 HcmV?d00001 diff --git a/resources/profiles/Meltingplot/Meltingplot MBL 308_cover.png b/resources/profiles/Meltingplot/Meltingplot MBL 308_cover.png new file mode 100644 index 0000000000000000000000000000000000000000..cb4df7250e9fdf42d760246a57f121404868b0c5 GIT binary patch literal 36673 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 JPDHLkV1hb&_zVC5 literal 0 HcmV?d00001 diff --git a/resources/profiles/Meltingplot/Meltingplot MBL 480_cover.png b/resources/profiles/Meltingplot/Meltingplot MBL 480_cover.png new file mode 100644 index 0000000000000000000000000000000000000000..fb7e11d5b232838b4b3053164e302368ec482c59 GIT binary patch literal 36570 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 literal 0 HcmV?d00001 diff --git a/resources/profiles/Meltingplot/chx350-texture.svg b/resources/profiles/Meltingplot/chx350-texture.svg new file mode 100644 index 0000000000..130afe556e --- /dev/null +++ b/resources/profiles/Meltingplot/chx350-texture.svg @@ -0,0 +1,5 @@ + + +Meltingplot CHX350 build plate — 1C Navy HUD (outlined) + + \ No newline at end of file diff --git a/resources/profiles/Meltingplot/filament/Extrudr PLA NX2 Matt @0.4 nozzle.json b/resources/profiles/Meltingplot/filament/Extrudr PLA NX2 Matt @0.4 nozzle.json new file mode 100644 index 0000000000..1f759767fa --- /dev/null +++ b/resources/profiles/Meltingplot/filament/Extrudr PLA NX2 Matt @0.4 nozzle.json @@ -0,0 +1,21 @@ +{ + "type": "filament", + "name": "Extrudr PLA NX2 Matt @0.4 nozzle", + "inherits": "Extrudr PLA NX2 Matt", + "from": "system", + "setting_id": "AL4mb7soA7L0FKTb", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "10" + ], + "slow_down_layer_time": [ + "9" + ], + "compatible_printers": [ + "Meltingplot MBL 133 0.4 nozzle", + "Meltingplot MBL 136 0.4 nozzle", + "Meltingplot MBL 308 0.4 nozzle", + "Meltingplot MBL 480 0.4 nozzle", + "Meltingplot CHX 350 0.4 nozzle" + ] +} diff --git a/resources/profiles/Meltingplot/filament/Extrudr PLA NX2 Matt @0.6 nozzle.json b/resources/profiles/Meltingplot/filament/Extrudr PLA NX2 Matt @0.6 nozzle.json new file mode 100644 index 0000000000..c7984aa06d --- /dev/null +++ b/resources/profiles/Meltingplot/filament/Extrudr PLA NX2 Matt @0.6 nozzle.json @@ -0,0 +1,21 @@ +{ + "type": "filament", + "name": "Extrudr PLA NX2 Matt @0.6 nozzle", + "inherits": "Extrudr PLA NX2 Matt", + "from": "system", + "setting_id": "OCnoqOQbcfgikNmA", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "15" + ], + "slow_down_layer_time": [ + "20" + ], + "compatible_printers": [ + "Meltingplot MBL 133 0.6 nozzle", + "Meltingplot MBL 136 0.6 nozzle", + "Meltingplot MBL 308 0.6 nozzle", + "Meltingplot MBL 480 0.6 nozzle", + "Meltingplot CHX 350 0.6 nozzle" + ] +} diff --git a/resources/profiles/Meltingplot/filament/Extrudr PLA NX2 Matt @0.8 nozzle.json b/resources/profiles/Meltingplot/filament/Extrudr PLA NX2 Matt @0.8 nozzle.json new file mode 100644 index 0000000000..a28a1feca0 --- /dev/null +++ b/resources/profiles/Meltingplot/filament/Extrudr PLA NX2 Matt @0.8 nozzle.json @@ -0,0 +1,21 @@ +{ + "type": "filament", + "name": "Extrudr PLA NX2 Matt @0.8 nozzle", + "inherits": "Extrudr PLA NX2 Matt", + "from": "system", + "setting_id": "HO2NCV1i1l21mokh", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "20" + ], + "slow_down_layer_time": [ + "38" + ], + "compatible_printers": [ + "Meltingplot MBL 133 0.8 nozzle", + "Meltingplot MBL 136 0.8 nozzle", + "Meltingplot MBL 308 0.8 nozzle", + "Meltingplot MBL 480 0.8 nozzle", + "Meltingplot CHX 350 0.8 nozzle" + ] +} diff --git a/resources/profiles/Meltingplot/filament/Extrudr PLA NX2 Matt @1.0 nozzle.json b/resources/profiles/Meltingplot/filament/Extrudr PLA NX2 Matt @1.0 nozzle.json new file mode 100644 index 0000000000..545acdf113 --- /dev/null +++ b/resources/profiles/Meltingplot/filament/Extrudr PLA NX2 Matt @1.0 nozzle.json @@ -0,0 +1,21 @@ +{ + "type": "filament", + "name": "Extrudr PLA NX2 Matt @1.0 nozzle", + "inherits": "Extrudr PLA NX2 Matt", + "from": "system", + "setting_id": "dRH4HfWHQPwo33cP", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "25" + ], + "slow_down_layer_time": [ + "56" + ], + "compatible_printers": [ + "Meltingplot MBL 133 1.0 nozzle", + "Meltingplot MBL 136 1.0 nozzle", + "Meltingplot MBL 308 1.0 nozzle", + "Meltingplot MBL 480 1.0 nozzle", + "Meltingplot CHX 350 1.0 nozzle" + ] +} diff --git a/resources/profiles/Meltingplot/filament/Extrudr PLA NX2 Matt.json b/resources/profiles/Meltingplot/filament/Extrudr PLA NX2 Matt.json new file mode 100644 index 0000000000..b9f864f79f --- /dev/null +++ b/resources/profiles/Meltingplot/filament/Extrudr PLA NX2 Matt.json @@ -0,0 +1,79 @@ +{ + "type": "filament", + "name": "Extrudr PLA NX2 Matt", + "inherits": "Generic PLA Matte @System", + "from": "system", + "setting_id": "qmPRaTcPlmtk6zB2", + "filament_id": "OF1PznHI", + "instantiation": "true", + "filament_vendor": [ + "Extrudr" + ], + "nozzle_temperature_range_low": [ + "200" + ], + "nozzle_temperature_range_high": [ + "230" + ], + "filament_max_volumetric_speed": [ + "30" + ], + "filament_adaptive_volumetric_speed": [ + "1" + ], + "filament_density": [ + "1.3" + ], + "filament_cost": [ + "13" + ], + "temperature_vitrification": [ + "50" + ], + "full_fan_speed_layer": [ + "1" + ], + "overhang_fan_threshold": [ + "25%" + ], + "fan_cooling_layer_time": [ + "100" + ], + "slow_down_layer_time": [ + "83" + ], + "cool_plate_temp": [ + "60" + ], + "eng_plate_temp": [ + "60" + ], + "hot_plate_temp": [ + "60" + ], + "textured_plate_temp": [ + "60" + ], + "cool_plate_temp_initial_layer": [ + "60" + ], + "eng_plate_temp_initial_layer": [ + "60" + ], + "hot_plate_temp_initial_layer": [ + "60" + ], + "textured_plate_temp_initial_layer": [ + "60" + ], + "filament_diameter": [ + "2.85" + ], + "compatible_printers": [ + "Meltingplot MBL 133 1.2 nozzle", + "Meltingplot MBL 136 1.2 nozzle", + "Meltingplot MBL 308 1.2 nozzle", + "Meltingplot MBL 480 1.2 nozzle", + "Meltingplot CHX 350 1.2 nozzle" + ] +} diff --git a/resources/profiles/Meltingplot/filament/Meltingplot ABS @0.4 nozzle.json b/resources/profiles/Meltingplot/filament/Meltingplot ABS @0.4 nozzle.json new file mode 100644 index 0000000000..837e55a36f --- /dev/null +++ b/resources/profiles/Meltingplot/filament/Meltingplot ABS @0.4 nozzle.json @@ -0,0 +1,21 @@ +{ + "type": "filament", + "name": "Meltingplot ABS @0.4 nozzle", + "inherits": "Meltingplot ABS", + "from": "system", + "setting_id": "NjuuWYHSc7IlwWAy", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "11" + ], + "slow_down_layer_time": [ + "5" + ], + "compatible_printers": [ + "Meltingplot MBL 133 0.4 nozzle", + "Meltingplot MBL 136 0.4 nozzle", + "Meltingplot MBL 308 0.4 nozzle", + "Meltingplot MBL 480 0.4 nozzle", + "Meltingplot CHX 350 0.4 nozzle" + ] +} diff --git a/resources/profiles/Meltingplot/filament/Meltingplot ABS @0.6 nozzle.json b/resources/profiles/Meltingplot/filament/Meltingplot ABS @0.6 nozzle.json new file mode 100644 index 0000000000..d73964b709 --- /dev/null +++ b/resources/profiles/Meltingplot/filament/Meltingplot ABS @0.6 nozzle.json @@ -0,0 +1,21 @@ +{ + "type": "filament", + "name": "Meltingplot ABS @0.6 nozzle", + "inherits": "Meltingplot ABS", + "from": "system", + "setting_id": "md24RPsRyxBhGRoW", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "16" + ], + "slow_down_layer_time": [ + "11" + ], + "compatible_printers": [ + "Meltingplot MBL 133 0.6 nozzle", + "Meltingplot MBL 136 0.6 nozzle", + "Meltingplot MBL 308 0.6 nozzle", + "Meltingplot MBL 480 0.6 nozzle", + "Meltingplot CHX 350 0.6 nozzle" + ] +} diff --git a/resources/profiles/Meltingplot/filament/Meltingplot ABS @0.8 nozzle.json b/resources/profiles/Meltingplot/filament/Meltingplot ABS @0.8 nozzle.json new file mode 100644 index 0000000000..82c5ed8935 --- /dev/null +++ b/resources/profiles/Meltingplot/filament/Meltingplot ABS @0.8 nozzle.json @@ -0,0 +1,21 @@ +{ + "type": "filament", + "name": "Meltingplot ABS @0.8 nozzle", + "inherits": "Meltingplot ABS", + "from": "system", + "setting_id": "Y2LYeWL7Zxel3m0c", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "22" + ], + "slow_down_layer_time": [ + "20" + ], + "compatible_printers": [ + "Meltingplot MBL 133 0.8 nozzle", + "Meltingplot MBL 136 0.8 nozzle", + "Meltingplot MBL 308 0.8 nozzle", + "Meltingplot MBL 480 0.8 nozzle", + "Meltingplot CHX 350 0.8 nozzle" + ] +} diff --git a/resources/profiles/Meltingplot/filament/Meltingplot ABS @1.0 nozzle.json b/resources/profiles/Meltingplot/filament/Meltingplot ABS @1.0 nozzle.json new file mode 100644 index 0000000000..a74a3a1925 --- /dev/null +++ b/resources/profiles/Meltingplot/filament/Meltingplot ABS @1.0 nozzle.json @@ -0,0 +1,21 @@ +{ + "type": "filament", + "name": "Meltingplot ABS @1.0 nozzle", + "inherits": "Meltingplot ABS", + "from": "system", + "setting_id": "G2UYPHTEWjun65jj", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "27" + ], + "slow_down_layer_time": [ + "30" + ], + "compatible_printers": [ + "Meltingplot MBL 133 1.0 nozzle", + "Meltingplot MBL 136 1.0 nozzle", + "Meltingplot MBL 308 1.0 nozzle", + "Meltingplot MBL 480 1.0 nozzle", + "Meltingplot CHX 350 1.0 nozzle" + ] +} diff --git a/resources/profiles/Meltingplot/filament/Meltingplot ABS.json b/resources/profiles/Meltingplot/filament/Meltingplot ABS.json new file mode 100644 index 0000000000..c947cd55e9 --- /dev/null +++ b/resources/profiles/Meltingplot/filament/Meltingplot ABS.json @@ -0,0 +1,70 @@ +{ + "type": "filament", + "name": "Meltingplot ABS", + "inherits": "Generic ABS @System", + "from": "system", + "setting_id": "zVQixgSSn1jm1c7n", + "filament_id": "OFVIMei2", + "instantiation": "true", + "filament_vendor": [ + "Meltingplot" + ], + "filament_flow_ratio": [ + "0.93" + ], + "filament_shrink": [ + "99%" + ], + "filament_shrinkage_compensation_z": [ + "99%" + ], + "filament_density": [ + "1.1" + ], + "filament_cost": [ + "30" + ], + "default_filament_colour": [ + "#F8F8F8" + ], + "slow_down_layer_time": [ + "44" + ], + "cool_plate_temp": [ + "110" + ], + "eng_plate_temp": [ + "110" + ], + "hot_plate_temp": [ + "110" + ], + "textured_plate_temp": [ + "110" + ], + "cool_plate_temp_initial_layer": [ + "110" + ], + "eng_plate_temp_initial_layer": [ + "110" + ], + "hot_plate_temp_initial_layer": [ + "110" + ], + "textured_plate_temp_initial_layer": [ + "110" + ], + "filament_diameter": [ + "2.85" + ], + "filament_max_volumetric_speed": [ + "33" + ], + "compatible_printers": [ + "Meltingplot MBL 133 1.2 nozzle", + "Meltingplot MBL 136 1.2 nozzle", + "Meltingplot MBL 308 1.2 nozzle", + "Meltingplot MBL 480 1.2 nozzle", + "Meltingplot CHX 350 1.2 nozzle" + ] +} diff --git a/resources/profiles/Meltingplot/filament/Meltingplot ASA @0.4 nozzle.json b/resources/profiles/Meltingplot/filament/Meltingplot ASA @0.4 nozzle.json new file mode 100644 index 0000000000..f567231b8d --- /dev/null +++ b/resources/profiles/Meltingplot/filament/Meltingplot ASA @0.4 nozzle.json @@ -0,0 +1,21 @@ +{ + "type": "filament", + "name": "Meltingplot ASA @0.4 nozzle", + "inherits": "Meltingplot ASA", + "from": "system", + "setting_id": "4EBXMyiXoLrw5rLC", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "11" + ], + "slow_down_layer_time": [ + "2" + ], + "compatible_printers": [ + "Meltingplot MBL 133 0.4 nozzle", + "Meltingplot MBL 136 0.4 nozzle", + "Meltingplot MBL 308 0.4 nozzle", + "Meltingplot MBL 480 0.4 nozzle", + "Meltingplot CHX 350 0.4 nozzle" + ] +} diff --git a/resources/profiles/Meltingplot/filament/Meltingplot ASA @0.6 nozzle.json b/resources/profiles/Meltingplot/filament/Meltingplot ASA @0.6 nozzle.json new file mode 100644 index 0000000000..96553662a8 --- /dev/null +++ b/resources/profiles/Meltingplot/filament/Meltingplot ASA @0.6 nozzle.json @@ -0,0 +1,21 @@ +{ + "type": "filament", + "name": "Meltingplot ASA @0.6 nozzle", + "inherits": "Meltingplot ASA", + "from": "system", + "setting_id": "2UdzXwYGT5nqtcdK", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "16" + ], + "slow_down_layer_time": [ + "5" + ], + "compatible_printers": [ + "Meltingplot MBL 133 0.6 nozzle", + "Meltingplot MBL 136 0.6 nozzle", + "Meltingplot MBL 308 0.6 nozzle", + "Meltingplot MBL 480 0.6 nozzle", + "Meltingplot CHX 350 0.6 nozzle" + ] +} diff --git a/resources/profiles/Meltingplot/filament/Meltingplot ASA @0.8 nozzle.json b/resources/profiles/Meltingplot/filament/Meltingplot ASA @0.8 nozzle.json new file mode 100644 index 0000000000..9e6d846c7f --- /dev/null +++ b/resources/profiles/Meltingplot/filament/Meltingplot ASA @0.8 nozzle.json @@ -0,0 +1,21 @@ +{ + "type": "filament", + "name": "Meltingplot ASA @0.8 nozzle", + "inherits": "Meltingplot ASA", + "from": "system", + "setting_id": "4hk1aKrMkppVYH4z", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "22" + ], + "slow_down_layer_time": [ + "10" + ], + "compatible_printers": [ + "Meltingplot MBL 133 0.8 nozzle", + "Meltingplot MBL 136 0.8 nozzle", + "Meltingplot MBL 308 0.8 nozzle", + "Meltingplot MBL 480 0.8 nozzle", + "Meltingplot CHX 350 0.8 nozzle" + ] +} diff --git a/resources/profiles/Meltingplot/filament/Meltingplot ASA @1.0 nozzle.json b/resources/profiles/Meltingplot/filament/Meltingplot ASA @1.0 nozzle.json new file mode 100644 index 0000000000..e8bc7d7a32 --- /dev/null +++ b/resources/profiles/Meltingplot/filament/Meltingplot ASA @1.0 nozzle.json @@ -0,0 +1,21 @@ +{ + "type": "filament", + "name": "Meltingplot ASA @1.0 nozzle", + "inherits": "Meltingplot ASA", + "from": "system", + "setting_id": "JRSnSdwkvrQx8uH8", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "27" + ], + "slow_down_layer_time": [ + "15" + ], + "compatible_printers": [ + "Meltingplot MBL 133 1.0 nozzle", + "Meltingplot MBL 136 1.0 nozzle", + "Meltingplot MBL 308 1.0 nozzle", + "Meltingplot MBL 480 1.0 nozzle", + "Meltingplot CHX 350 1.0 nozzle" + ] +} diff --git a/resources/profiles/Meltingplot/filament/Meltingplot ASA.json b/resources/profiles/Meltingplot/filament/Meltingplot ASA.json new file mode 100644 index 0000000000..180ef14e39 --- /dev/null +++ b/resources/profiles/Meltingplot/filament/Meltingplot ASA.json @@ -0,0 +1,70 @@ +{ + "type": "filament", + "name": "Meltingplot ASA", + "inherits": "Generic ASA @System", + "from": "system", + "setting_id": "5VuPxdOXfTIidM4X", + "filament_id": "OFRdywGp", + "instantiation": "true", + "filament_vendor": [ + "Meltingplot" + ], + "nozzle_temperature": [ + "255" + ], + "nozzle_temperature_initial_layer": [ + "255" + ], + "filament_max_volumetric_speed": [ + "33" + ], + "filament_density": [ + "1.11" + ], + "filament_cost": [ + "46.65" + ], + "default_filament_colour": [ + "#123123" + ], + "slow_down_layer_time": [ + "22" + ], + "slow_down_min_speed": [ + "15" + ], + "cool_plate_temp": [ + "90" + ], + "eng_plate_temp": [ + "90" + ], + "hot_plate_temp": [ + "90" + ], + "textured_plate_temp": [ + "90" + ], + "cool_plate_temp_initial_layer": [ + "90" + ], + "eng_plate_temp_initial_layer": [ + "90" + ], + "hot_plate_temp_initial_layer": [ + "90" + ], + "textured_plate_temp_initial_layer": [ + "90" + ], + "filament_diameter": [ + "2.85" + ], + "compatible_printers": [ + "Meltingplot MBL 133 1.2 nozzle", + "Meltingplot MBL 136 1.2 nozzle", + "Meltingplot MBL 308 1.2 nozzle", + "Meltingplot MBL 480 1.2 nozzle", + "Meltingplot CHX 350 1.2 nozzle" + ] +} diff --git a/resources/profiles/Meltingplot/filament/Meltingplot PA6 CF HT @0.4 nozzle.json b/resources/profiles/Meltingplot/filament/Meltingplot PA6 CF HT @0.4 nozzle.json new file mode 100644 index 0000000000..5fd012ed93 --- /dev/null +++ b/resources/profiles/Meltingplot/filament/Meltingplot PA6 CF HT @0.4 nozzle.json @@ -0,0 +1,21 @@ +{ + "type": "filament", + "name": "Meltingplot PA6 CF HT @0.4 nozzle", + "inherits": "Meltingplot PA6 CF HT", + "from": "system", + "setting_id": "yUlzU6KMVx8bpxj1", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "7" + ], + "slow_down_layer_time": [ + "4" + ], + "compatible_printers": [ + "Meltingplot MBL 133 0.4 nozzle", + "Meltingplot MBL 136 0.4 nozzle", + "Meltingplot MBL 308 0.4 nozzle", + "Meltingplot MBL 480 0.4 nozzle", + "Meltingplot CHX 350 0.4 nozzle" + ] +} diff --git a/resources/profiles/Meltingplot/filament/Meltingplot PA6 CF HT @0.6 nozzle.json b/resources/profiles/Meltingplot/filament/Meltingplot PA6 CF HT @0.6 nozzle.json new file mode 100644 index 0000000000..4ece916d20 --- /dev/null +++ b/resources/profiles/Meltingplot/filament/Meltingplot PA6 CF HT @0.6 nozzle.json @@ -0,0 +1,21 @@ +{ + "type": "filament", + "name": "Meltingplot PA6 CF HT @0.6 nozzle", + "inherits": "Meltingplot PA6 CF HT", + "from": "system", + "setting_id": "9XzYyYbJ4jnO4nhJ", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "11" + ], + "slow_down_layer_time": [ + "8" + ], + "compatible_printers": [ + "Meltingplot MBL 133 0.6 nozzle", + "Meltingplot MBL 136 0.6 nozzle", + "Meltingplot MBL 308 0.6 nozzle", + "Meltingplot MBL 480 0.6 nozzle", + "Meltingplot CHX 350 0.6 nozzle" + ] +} diff --git a/resources/profiles/Meltingplot/filament/Meltingplot PA6 CF HT @0.8 nozzle.json b/resources/profiles/Meltingplot/filament/Meltingplot PA6 CF HT @0.8 nozzle.json new file mode 100644 index 0000000000..b1b4d489f8 --- /dev/null +++ b/resources/profiles/Meltingplot/filament/Meltingplot PA6 CF HT @0.8 nozzle.json @@ -0,0 +1,21 @@ +{ + "type": "filament", + "name": "Meltingplot PA6 CF HT @0.8 nozzle", + "inherits": "Meltingplot PA6 CF HT", + "from": "system", + "setting_id": "BMbLehqxegpSvMci", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "15" + ], + "slow_down_layer_time": [ + "15" + ], + "compatible_printers": [ + "Meltingplot MBL 133 0.8 nozzle", + "Meltingplot MBL 136 0.8 nozzle", + "Meltingplot MBL 308 0.8 nozzle", + "Meltingplot MBL 480 0.8 nozzle", + "Meltingplot CHX 350 0.8 nozzle" + ] +} diff --git a/resources/profiles/Meltingplot/filament/Meltingplot PA6 CF HT @1.0 nozzle.json b/resources/profiles/Meltingplot/filament/Meltingplot PA6 CF HT @1.0 nozzle.json new file mode 100644 index 0000000000..b2ab6f3cf5 --- /dev/null +++ b/resources/profiles/Meltingplot/filament/Meltingplot PA6 CF HT @1.0 nozzle.json @@ -0,0 +1,21 @@ +{ + "type": "filament", + "name": "Meltingplot PA6 CF HT @1.0 nozzle", + "inherits": "Meltingplot PA6 CF HT", + "from": "system", + "setting_id": "7R3XuQlzD8IHq4PZ", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "18" + ], + "slow_down_layer_time": [ + "22" + ], + "compatible_printers": [ + "Meltingplot MBL 133 1.0 nozzle", + "Meltingplot MBL 136 1.0 nozzle", + "Meltingplot MBL 308 1.0 nozzle", + "Meltingplot MBL 480 1.0 nozzle", + "Meltingplot CHX 350 1.0 nozzle" + ] +} diff --git a/resources/profiles/Meltingplot/filament/Meltingplot PA6 CF HT.json b/resources/profiles/Meltingplot/filament/Meltingplot PA6 CF HT.json new file mode 100644 index 0000000000..6b2852b4b2 --- /dev/null +++ b/resources/profiles/Meltingplot/filament/Meltingplot PA6 CF HT.json @@ -0,0 +1,94 @@ +{ + "type": "filament", + "name": "Meltingplot PA6 CF HT", + "inherits": "Generic PA-CF @System", + "from": "system", + "setting_id": "kzlYLTM6H5CgpQ8y", + "filament_id": "OFdPevOo", + "instantiation": "true", + "filament_vendor": [ + "Meltingplot" + ], + "nozzle_temperature": [ + "275" + ], + "nozzle_temperature_initial_layer": [ + "275" + ], + "filament_max_volumetric_speed": [ + "22" + ], + "filament_density": [ + "1.25" + ], + "filament_cost": [ + "89" + ], + "default_filament_colour": [ + "#858078" + ], + "filament_shrink": [ + "99.9%" + ], + "filament_shrinkage_compensation_z": [ + "99.9%" + ], + "fan_min_speed": [ + "40" + ], + "fan_max_speed": [ + "100" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "overhang_fan_speed": [ + "100" + ], + "overhang_fan_threshold": [ + "95%" + ], + "additional_cooling_fan_speed": [ + "40" + ], + "close_fan_the_first_x_layers": [ + "1" + ], + "slow_down_layer_time": [ + "33" + ], + "cool_plate_temp": [ + "80" + ], + "eng_plate_temp": [ + "80" + ], + "hot_plate_temp": [ + "80" + ], + "textured_plate_temp": [ + "80" + ], + "cool_plate_temp_initial_layer": [ + "80" + ], + "eng_plate_temp_initial_layer": [ + "80" + ], + "hot_plate_temp_initial_layer": [ + "80" + ], + "textured_plate_temp_initial_layer": [ + "80" + ], + "filament_diameter": [ + "2.85" + ], + "compatible_printers": [ + "Meltingplot MBL 133 1.2 nozzle", + "Meltingplot MBL 136 1.2 nozzle", + "Meltingplot MBL 308 1.2 nozzle", + "Meltingplot MBL 480 1.2 nozzle", + "Meltingplot CHX 350 1.2 nozzle" + ] +} diff --git a/resources/profiles/Meltingplot/filament/Meltingplot PET-CF15 @0.4 nozzle.json b/resources/profiles/Meltingplot/filament/Meltingplot PET-CF15 @0.4 nozzle.json new file mode 100644 index 0000000000..f828906a7c --- /dev/null +++ b/resources/profiles/Meltingplot/filament/Meltingplot PET-CF15 @0.4 nozzle.json @@ -0,0 +1,21 @@ +{ + "type": "filament", + "name": "Meltingplot PET-CF15 @0.4 nozzle", + "inherits": "Meltingplot PET-CF15", + "from": "system", + "setting_id": "2fkQa1BwTGZbSi2z", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "10" + ], + "slow_down_layer_time": [ + "1" + ], + "compatible_printers": [ + "Meltingplot MBL 133 0.4 nozzle", + "Meltingplot MBL 136 0.4 nozzle", + "Meltingplot MBL 308 0.4 nozzle", + "Meltingplot MBL 480 0.4 nozzle", + "Meltingplot CHX 350 0.4 nozzle" + ] +} diff --git a/resources/profiles/Meltingplot/filament/Meltingplot PET-CF15 @0.6 nozzle.json b/resources/profiles/Meltingplot/filament/Meltingplot PET-CF15 @0.6 nozzle.json new file mode 100644 index 0000000000..11b9bb2550 --- /dev/null +++ b/resources/profiles/Meltingplot/filament/Meltingplot PET-CF15 @0.6 nozzle.json @@ -0,0 +1,21 @@ +{ + "type": "filament", + "name": "Meltingplot PET-CF15 @0.6 nozzle", + "inherits": "Meltingplot PET-CF15", + "from": "system", + "setting_id": "PcNAj2kwuUNBAjQE", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "16" + ], + "slow_down_layer_time": [ + "3" + ], + "compatible_printers": [ + "Meltingplot MBL 133 0.6 nozzle", + "Meltingplot MBL 136 0.6 nozzle", + "Meltingplot MBL 308 0.6 nozzle", + "Meltingplot MBL 480 0.6 nozzle", + "Meltingplot CHX 350 0.6 nozzle" + ] +} diff --git a/resources/profiles/Meltingplot/filament/Meltingplot PET-CF15 @0.8 nozzle.json b/resources/profiles/Meltingplot/filament/Meltingplot PET-CF15 @0.8 nozzle.json new file mode 100644 index 0000000000..20039024ce --- /dev/null +++ b/resources/profiles/Meltingplot/filament/Meltingplot PET-CF15 @0.8 nozzle.json @@ -0,0 +1,21 @@ +{ + "type": "filament", + "name": "Meltingplot PET-CF15 @0.8 nozzle", + "inherits": "Meltingplot PET-CF15", + "from": "system", + "setting_id": "70EwKatuncZBKgoD", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "21" + ], + "slow_down_layer_time": [ + "5" + ], + "compatible_printers": [ + "Meltingplot MBL 133 0.8 nozzle", + "Meltingplot MBL 136 0.8 nozzle", + "Meltingplot MBL 308 0.8 nozzle", + "Meltingplot MBL 480 0.8 nozzle", + "Meltingplot CHX 350 0.8 nozzle" + ] +} diff --git a/resources/profiles/Meltingplot/filament/Meltingplot PET-CF15 @1.0 nozzle.json b/resources/profiles/Meltingplot/filament/Meltingplot PET-CF15 @1.0 nozzle.json new file mode 100644 index 0000000000..9913b5f812 --- /dev/null +++ b/resources/profiles/Meltingplot/filament/Meltingplot PET-CF15 @1.0 nozzle.json @@ -0,0 +1,21 @@ +{ + "type": "filament", + "name": "Meltingplot PET-CF15 @1.0 nozzle", + "inherits": "Meltingplot PET-CF15", + "from": "system", + "setting_id": "X2yhWBjK4j46bUYW", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "26" + ], + "slow_down_layer_time": [ + "7" + ], + "compatible_printers": [ + "Meltingplot MBL 133 1.0 nozzle", + "Meltingplot MBL 136 1.0 nozzle", + "Meltingplot MBL 308 1.0 nozzle", + "Meltingplot MBL 480 1.0 nozzle", + "Meltingplot CHX 350 1.0 nozzle" + ] +} diff --git a/resources/profiles/Meltingplot/filament/Meltingplot PET-CF15.json b/resources/profiles/Meltingplot/filament/Meltingplot PET-CF15.json new file mode 100644 index 0000000000..f932be9d05 --- /dev/null +++ b/resources/profiles/Meltingplot/filament/Meltingplot PET-CF15.json @@ -0,0 +1,91 @@ +{ + "type": "filament", + "name": "Meltingplot PET-CF15", + "inherits": "Generic PETG-CF @System", + "from": "system", + "setting_id": "IdqfEh7xRXKTYmV3", + "filament_id": "OFJdf5nt", + "instantiation": "true", + "filament_vendor": [ + "Meltingplot" + ], + "filament_type": [ + "PET-CF" + ], + "nozzle_temperature": [ + "280" + ], + "nozzle_temperature_initial_layer": [ + "280" + ], + "nozzle_temperature_range_low": [ + "260" + ], + "nozzle_temperature_range_high": [ + "290" + ], + "filament_max_volumetric_speed": [ + "31" + ], + "filament_density": [ + "1.4" + ], + "filament_cost": [ + "77.5" + ], + "filament_shrink": [ + "99.9%" + ], + "filament_shrinkage_compensation_z": [ + "99.9%" + ], + "temperature_vitrification": [ + "125" + ], + "fan_min_speed": [ + "100" + ], + "fan_max_speed": [ + "100" + ], + "slow_down_layer_time": [ + "11" + ], + "cool_plate_temp": [ + "90" + ], + "eng_plate_temp": [ + "90" + ], + "hot_plate_temp": [ + "90" + ], + "textured_plate_temp": [ + "90" + ], + "cool_plate_temp_initial_layer": [ + "90" + ], + "eng_plate_temp_initial_layer": [ + "90" + ], + "hot_plate_temp_initial_layer": [ + "90" + ], + "textured_plate_temp_initial_layer": [ + "90" + ], + "filament_diameter": [ + "2.85" + ], + "close_fan_the_first_x_layers": [ + "1" + ], + "compatible_printers": [ + "Meltingplot MBL 133 1.2 nozzle", + "Meltingplot MBL 136 1.2 nozzle", + "Meltingplot MBL 308 1.2 nozzle", + "Meltingplot MBL 480 1.2 nozzle", + "Meltingplot CHX 350 1.2 nozzle" + ] +} diff --git a/resources/profiles/Meltingplot/filament/Meltingplot PETG @0.4 nozzle.json b/resources/profiles/Meltingplot/filament/Meltingplot PETG @0.4 nozzle.json new file mode 100644 index 0000000000..55df65bb99 --- /dev/null +++ b/resources/profiles/Meltingplot/filament/Meltingplot PETG @0.4 nozzle.json @@ -0,0 +1,21 @@ +{ + "type": "filament", + "name": "Meltingplot PETG @0.4 nozzle", + "inherits": "Meltingplot PETG", + "from": "system", + "setting_id": "2ohDGd34awK2DVbV", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "9" + ], + "slow_down_layer_time": [ + "4" + ], + "compatible_printers": [ + "Meltingplot MBL 133 0.4 nozzle", + "Meltingplot MBL 136 0.4 nozzle", + "Meltingplot MBL 308 0.4 nozzle", + "Meltingplot MBL 480 0.4 nozzle", + "Meltingplot CHX 350 0.4 nozzle" + ] +} diff --git a/resources/profiles/Meltingplot/filament/Meltingplot PETG @0.6 nozzle.json b/resources/profiles/Meltingplot/filament/Meltingplot PETG @0.6 nozzle.json new file mode 100644 index 0000000000..5d77c69c8f --- /dev/null +++ b/resources/profiles/Meltingplot/filament/Meltingplot PETG @0.6 nozzle.json @@ -0,0 +1,21 @@ +{ + "type": "filament", + "name": "Meltingplot PETG @0.6 nozzle", + "inherits": "Meltingplot PETG", + "from": "system", + "setting_id": "DZe1WokuOM5byttU", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "14" + ], + "slow_down_layer_time": [ + "8" + ], + "compatible_printers": [ + "Meltingplot MBL 133 0.6 nozzle", + "Meltingplot MBL 136 0.6 nozzle", + "Meltingplot MBL 308 0.6 nozzle", + "Meltingplot MBL 480 0.6 nozzle", + "Meltingplot CHX 350 0.6 nozzle" + ] +} diff --git a/resources/profiles/Meltingplot/filament/Meltingplot PETG @0.8 nozzle.json b/resources/profiles/Meltingplot/filament/Meltingplot PETG @0.8 nozzle.json new file mode 100644 index 0000000000..4e5f16b411 --- /dev/null +++ b/resources/profiles/Meltingplot/filament/Meltingplot PETG @0.8 nozzle.json @@ -0,0 +1,21 @@ +{ + "type": "filament", + "name": "Meltingplot PETG @0.8 nozzle", + "inherits": "Meltingplot PETG", + "from": "system", + "setting_id": "LwFY7N8Uisy6ivOV", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "18" + ], + "slow_down_layer_time": [ + "15" + ], + "compatible_printers": [ + "Meltingplot MBL 133 0.8 nozzle", + "Meltingplot MBL 136 0.8 nozzle", + "Meltingplot MBL 308 0.8 nozzle", + "Meltingplot MBL 480 0.8 nozzle", + "Meltingplot CHX 350 0.8 nozzle" + ] +} diff --git a/resources/profiles/Meltingplot/filament/Meltingplot PETG @1.0 nozzle.json b/resources/profiles/Meltingplot/filament/Meltingplot PETG @1.0 nozzle.json new file mode 100644 index 0000000000..cdc4620078 --- /dev/null +++ b/resources/profiles/Meltingplot/filament/Meltingplot PETG @1.0 nozzle.json @@ -0,0 +1,21 @@ +{ + "type": "filament", + "name": "Meltingplot PETG @1.0 nozzle", + "inherits": "Meltingplot PETG", + "from": "system", + "setting_id": "kR8Vbizk0CPciCbD", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "23" + ], + "slow_down_layer_time": [ + "22" + ], + "compatible_printers": [ + "Meltingplot MBL 133 1.0 nozzle", + "Meltingplot MBL 136 1.0 nozzle", + "Meltingplot MBL 308 1.0 nozzle", + "Meltingplot MBL 480 1.0 nozzle", + "Meltingplot CHX 350 1.0 nozzle" + ] +} diff --git a/resources/profiles/Meltingplot/filament/Meltingplot PETG.json b/resources/profiles/Meltingplot/filament/Meltingplot PETG.json new file mode 100644 index 0000000000..d6ed4e25cb --- /dev/null +++ b/resources/profiles/Meltingplot/filament/Meltingplot PETG.json @@ -0,0 +1,70 @@ +{ + "type": "filament", + "name": "Meltingplot PETG", + "inherits": "Generic PETG @System", + "from": "system", + "setting_id": "dsW7JrzWhKAY1fey", + "filament_id": "OFvlreVF", + "instantiation": "true", + "filament_vendor": [ + "Meltingplot" + ], + "nozzle_temperature": [ + "245" + ], + "nozzle_temperature_initial_layer": [ + "245" + ], + "filament_max_volumetric_speed": [ + "27" + ], + "filament_cost": [ + "35" + ], + "default_filament_colour": [ + "#123123" + ], + "fan_min_speed": [ + "50" + ], + "fan_cooling_layer_time": [ + "60" + ], + "slow_down_layer_time": [ + "33" + ], + "cool_plate_temp": [ + "90" + ], + "eng_plate_temp": [ + "90" + ], + "hot_plate_temp": [ + "90" + ], + "textured_plate_temp": [ + "90" + ], + "cool_plate_temp_initial_layer": [ + "90" + ], + "eng_plate_temp_initial_layer": [ + "90" + ], + "hot_plate_temp_initial_layer": [ + "90" + ], + "textured_plate_temp_initial_layer": [ + "90" + ], + "filament_diameter": [ + "2.85" + ], + "compatible_printers": [ + "Meltingplot MBL 133 1.2 nozzle", + "Meltingplot MBL 136 1.2 nozzle", + "Meltingplot MBL 308 1.2 nozzle", + "Meltingplot MBL 480 1.2 nozzle", + "Meltingplot CHX 350 1.2 nozzle" + ] +} diff --git a/resources/profiles/Meltingplot/filament/Meltingplot PLA @0.4 nozzle.json b/resources/profiles/Meltingplot/filament/Meltingplot PLA @0.4 nozzle.json new file mode 100644 index 0000000000..4ec8bc1fb5 --- /dev/null +++ b/resources/profiles/Meltingplot/filament/Meltingplot PLA @0.4 nozzle.json @@ -0,0 +1,21 @@ +{ + "type": "filament", + "name": "Meltingplot PLA @0.4 nozzle", + "inherits": "Meltingplot PLA", + "from": "system", + "setting_id": "T3OEfrhyZ6ISyv20", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "11" + ], + "slow_down_layer_time": [ + "8" + ], + "compatible_printers": [ + "Meltingplot MBL 133 0.4 nozzle", + "Meltingplot MBL 136 0.4 nozzle", + "Meltingplot MBL 308 0.4 nozzle", + "Meltingplot MBL 480 0.4 nozzle", + "Meltingplot CHX 350 0.4 nozzle" + ] +} diff --git a/resources/profiles/Meltingplot/filament/Meltingplot PLA @0.6 nozzle.json b/resources/profiles/Meltingplot/filament/Meltingplot PLA @0.6 nozzle.json new file mode 100644 index 0000000000..054bc03ab6 --- /dev/null +++ b/resources/profiles/Meltingplot/filament/Meltingplot PLA @0.6 nozzle.json @@ -0,0 +1,21 @@ +{ + "type": "filament", + "name": "Meltingplot PLA @0.6 nozzle", + "inherits": "Meltingplot PLA", + "from": "system", + "setting_id": "hsgzwjPc26BJ4sQu", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "16" + ], + "slow_down_layer_time": [ + "17" + ], + "compatible_printers": [ + "Meltingplot MBL 133 0.6 nozzle", + "Meltingplot MBL 136 0.6 nozzle", + "Meltingplot MBL 308 0.6 nozzle", + "Meltingplot MBL 480 0.6 nozzle", + "Meltingplot CHX 350 0.6 nozzle" + ] +} diff --git a/resources/profiles/Meltingplot/filament/Meltingplot PLA @0.8 nozzle.json b/resources/profiles/Meltingplot/filament/Meltingplot PLA @0.8 nozzle.json new file mode 100644 index 0000000000..7fa45fc182 --- /dev/null +++ b/resources/profiles/Meltingplot/filament/Meltingplot PLA @0.8 nozzle.json @@ -0,0 +1,21 @@ +{ + "type": "filament", + "name": "Meltingplot PLA @0.8 nozzle", + "inherits": "Meltingplot PLA", + "from": "system", + "setting_id": "cz6RkfsQ0hJE0hYG", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "22" + ], + "slow_down_layer_time": [ + "30" + ], + "compatible_printers": [ + "Meltingplot MBL 133 0.8 nozzle", + "Meltingplot MBL 136 0.8 nozzle", + "Meltingplot MBL 308 0.8 nozzle", + "Meltingplot MBL 480 0.8 nozzle", + "Meltingplot CHX 350 0.8 nozzle" + ] +} diff --git a/resources/profiles/Meltingplot/filament/Meltingplot PLA @1.0 nozzle.json b/resources/profiles/Meltingplot/filament/Meltingplot PLA @1.0 nozzle.json new file mode 100644 index 0000000000..bbb19233db --- /dev/null +++ b/resources/profiles/Meltingplot/filament/Meltingplot PLA @1.0 nozzle.json @@ -0,0 +1,21 @@ +{ + "type": "filament", + "name": "Meltingplot PLA @1.0 nozzle", + "inherits": "Meltingplot PLA", + "from": "system", + "setting_id": "H3n0VPl3CymiK9VN", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "27" + ], + "slow_down_layer_time": [ + "45" + ], + "compatible_printers": [ + "Meltingplot MBL 133 1.0 nozzle", + "Meltingplot MBL 136 1.0 nozzle", + "Meltingplot MBL 308 1.0 nozzle", + "Meltingplot MBL 480 1.0 nozzle", + "Meltingplot CHX 350 1.0 nozzle" + ] +} diff --git a/resources/profiles/Meltingplot/filament/Meltingplot PLA.json b/resources/profiles/Meltingplot/filament/Meltingplot PLA.json new file mode 100644 index 0000000000..60575e7aa6 --- /dev/null +++ b/resources/profiles/Meltingplot/filament/Meltingplot PLA.json @@ -0,0 +1,67 @@ +{ + "type": "filament", + "name": "Meltingplot PLA", + "inherits": "Generic PLA @System", + "from": "system", + "setting_id": "ONpaHlfJVJyh7Shb", + "filament_id": "OFwXRVbB", + "instantiation": "true", + "filament_vendor": [ + "Meltingplot" + ], + "nozzle_temperature": [ + "210" + ], + "nozzle_temperature_initial_layer": [ + "215" + ], + "filament_cost": [ + "34.9" + ], + "default_filament_colour": [ + "#F8F8F8" + ], + "slow_down_layer_time": [ + "66" + ], + "slow_down_min_speed": [ + "15" + ], + "cool_plate_temp": [ + "60" + ], + "eng_plate_temp": [ + "60" + ], + "hot_plate_temp": [ + "60" + ], + "textured_plate_temp": [ + "60" + ], + "cool_plate_temp_initial_layer": [ + "65" + ], + "eng_plate_temp_initial_layer": [ + "65" + ], + "hot_plate_temp_initial_layer": [ + "65" + ], + "textured_plate_temp_initial_layer": [ + "65" + ], + "filament_diameter": [ + "2.85" + ], + "filament_max_volumetric_speed": [ + "33" + ], + "compatible_printers": [ + "Meltingplot MBL 133 1.2 nozzle", + "Meltingplot MBL 136 1.2 nozzle", + "Meltingplot MBL 308 1.2 nozzle", + "Meltingplot MBL 480 1.2 nozzle", + "Meltingplot CHX 350 1.2 nozzle" + ] +} diff --git a/resources/profiles/Meltingplot/filament/Meltingplot TitanX @0.4 nozzle.json b/resources/profiles/Meltingplot/filament/Meltingplot TitanX @0.4 nozzle.json new file mode 100644 index 0000000000..6804806002 --- /dev/null +++ b/resources/profiles/Meltingplot/filament/Meltingplot TitanX @0.4 nozzle.json @@ -0,0 +1,21 @@ +{ + "type": "filament", + "name": "Meltingplot TitanX @0.4 nozzle", + "inherits": "Meltingplot TitanX", + "from": "system", + "setting_id": "i5ttRpqpqF3Kg8IF", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "11" + ], + "slow_down_layer_time": [ + "4" + ], + "compatible_printers": [ + "Meltingplot MBL 133 0.4 nozzle", + "Meltingplot MBL 136 0.4 nozzle", + "Meltingplot MBL 308 0.4 nozzle", + "Meltingplot MBL 480 0.4 nozzle", + "Meltingplot CHX 350 0.4 nozzle" + ] +} diff --git a/resources/profiles/Meltingplot/filament/Meltingplot TitanX @0.6 nozzle.json b/resources/profiles/Meltingplot/filament/Meltingplot TitanX @0.6 nozzle.json new file mode 100644 index 0000000000..a80febac3f --- /dev/null +++ b/resources/profiles/Meltingplot/filament/Meltingplot TitanX @0.6 nozzle.json @@ -0,0 +1,21 @@ +{ + "type": "filament", + "name": "Meltingplot TitanX @0.6 nozzle", + "inherits": "Meltingplot TitanX", + "from": "system", + "setting_id": "Vbm6NJb4il6QAU6v", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "16" + ], + "slow_down_layer_time": [ + "8" + ], + "compatible_printers": [ + "Meltingplot MBL 133 0.6 nozzle", + "Meltingplot MBL 136 0.6 nozzle", + "Meltingplot MBL 308 0.6 nozzle", + "Meltingplot MBL 480 0.6 nozzle", + "Meltingplot CHX 350 0.6 nozzle" + ] +} diff --git a/resources/profiles/Meltingplot/filament/Meltingplot TitanX @0.8 nozzle.json b/resources/profiles/Meltingplot/filament/Meltingplot TitanX @0.8 nozzle.json new file mode 100644 index 0000000000..3815b36da9 --- /dev/null +++ b/resources/profiles/Meltingplot/filament/Meltingplot TitanX @0.8 nozzle.json @@ -0,0 +1,21 @@ +{ + "type": "filament", + "name": "Meltingplot TitanX @0.8 nozzle", + "inherits": "Meltingplot TitanX", + "from": "system", + "setting_id": "jYrElhVPtK2Dpb9K", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "22" + ], + "slow_down_layer_time": [ + "15" + ], + "compatible_printers": [ + "Meltingplot MBL 133 0.8 nozzle", + "Meltingplot MBL 136 0.8 nozzle", + "Meltingplot MBL 308 0.8 nozzle", + "Meltingplot MBL 480 0.8 nozzle", + "Meltingplot CHX 350 0.8 nozzle" + ] +} diff --git a/resources/profiles/Meltingplot/filament/Meltingplot TitanX @1.0 nozzle.json b/resources/profiles/Meltingplot/filament/Meltingplot TitanX @1.0 nozzle.json new file mode 100644 index 0000000000..51ccd444e2 --- /dev/null +++ b/resources/profiles/Meltingplot/filament/Meltingplot TitanX @1.0 nozzle.json @@ -0,0 +1,21 @@ +{ + "type": "filament", + "name": "Meltingplot TitanX @1.0 nozzle", + "inherits": "Meltingplot TitanX", + "from": "system", + "setting_id": "lQDEFxTsxFsT5A4n", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "27" + ], + "slow_down_layer_time": [ + "22" + ], + "compatible_printers": [ + "Meltingplot MBL 133 1.0 nozzle", + "Meltingplot MBL 136 1.0 nozzle", + "Meltingplot MBL 308 1.0 nozzle", + "Meltingplot MBL 480 1.0 nozzle", + "Meltingplot CHX 350 1.0 nozzle" + ] +} diff --git a/resources/profiles/Meltingplot/filament/Meltingplot TitanX.json b/resources/profiles/Meltingplot/filament/Meltingplot TitanX.json new file mode 100644 index 0000000000..5082e6e19e --- /dev/null +++ b/resources/profiles/Meltingplot/filament/Meltingplot TitanX.json @@ -0,0 +1,61 @@ +{ + "type": "filament", + "name": "Meltingplot TitanX", + "inherits": "Generic ABS @System", + "from": "system", + "setting_id": "LDPRmxlvX97NXF0F", + "filament_id": "OFyYfgDM", + "instantiation": "true", + "filament_vendor": [ + "Meltingplot" + ], + "filament_flow_ratio": [ + "0.93" + ], + "filament_shrink": [ + "99.75%" + ], + "filament_density": [ + "1.07" + ], + "slow_down_layer_time": [ + "33" + ], + "cool_plate_temp": [ + "110" + ], + "eng_plate_temp": [ + "110" + ], + "hot_plate_temp": [ + "110" + ], + "textured_plate_temp": [ + "110" + ], + "cool_plate_temp_initial_layer": [ + "110" + ], + "eng_plate_temp_initial_layer": [ + "110" + ], + "hot_plate_temp_initial_layer": [ + "110" + ], + "textured_plate_temp_initial_layer": [ + "110" + ], + "filament_diameter": [ + "2.85" + ], + "filament_max_volumetric_speed": [ + "33" + ], + "compatible_printers": [ + "Meltingplot MBL 133 1.2 nozzle", + "Meltingplot MBL 136 1.2 nozzle", + "Meltingplot MBL 308 1.2 nozzle", + "Meltingplot MBL 480 1.2 nozzle", + "Meltingplot CHX 350 1.2 nozzle" + ] +} diff --git a/resources/profiles/Meltingplot/machine/Meltingplot CHX 350 0.4 nozzle.json b/resources/profiles/Meltingplot/machine/Meltingplot CHX 350 0.4 nozzle.json new file mode 100644 index 0000000000..c59db36162 --- /dev/null +++ b/resources/profiles/Meltingplot/machine/Meltingplot CHX 350 0.4 nozzle.json @@ -0,0 +1,30 @@ +{ + "type": "machine", + "name": "Meltingplot CHX 350 0.4 nozzle", + "inherits": "fdm_machine_meltingplot_chx", + "from": "system", + "setting_id": "gyTKYZ8qKgen4dOM", + "instantiation": "true", + "printer_model": "Meltingplot CHX 350", + "printer_variant": "0.4", + "nozzle_diameter": [ + "0.4" + ], + "min_layer_height": [ + "0.16" + ], + "max_layer_height": [ + "0.24" + ], + "printable_area": [ + "0x0", + "880x0", + "880x422", + "0x422" + ], + "printable_height": "943", + "default_print_profile": "0.18mm Fine 0.4 nozzle @Meltingplot CHX 350", + "default_filament_profile": [ + "Meltingplot PLA @0.4 nozzle" + ] +} diff --git a/resources/profiles/Meltingplot/machine/Meltingplot CHX 350 0.6 nozzle.json b/resources/profiles/Meltingplot/machine/Meltingplot CHX 350 0.6 nozzle.json new file mode 100644 index 0000000000..bddf34e56a --- /dev/null +++ b/resources/profiles/Meltingplot/machine/Meltingplot CHX 350 0.6 nozzle.json @@ -0,0 +1,30 @@ +{ + "type": "machine", + "name": "Meltingplot CHX 350 0.6 nozzle", + "inherits": "fdm_machine_meltingplot_chx", + "from": "system", + "setting_id": "OeqLbNEMEImXnJBz", + "instantiation": "true", + "printer_model": "Meltingplot CHX 350", + "printer_variant": "0.6", + "nozzle_diameter": [ + "0.6" + ], + "min_layer_height": [ + "0.24" + ], + "max_layer_height": [ + "0.36" + ], + "printable_area": [ + "0x0", + "880x0", + "880x422", + "0x422" + ], + "printable_height": "943", + "default_print_profile": "0.30mm Standard 0.6 nozzle @Meltingplot CHX 350", + "default_filament_profile": [ + "Meltingplot PLA @0.6 nozzle" + ] +} diff --git a/resources/profiles/Meltingplot/machine/Meltingplot CHX 350 0.8 nozzle.json b/resources/profiles/Meltingplot/machine/Meltingplot CHX 350 0.8 nozzle.json new file mode 100644 index 0000000000..bb3a56b5ce --- /dev/null +++ b/resources/profiles/Meltingplot/machine/Meltingplot CHX 350 0.8 nozzle.json @@ -0,0 +1,32 @@ +{ + "type": "machine", + "name": "Meltingplot CHX 350 0.8 nozzle", + "inherits": "fdm_machine_meltingplot_chx", + "from": "system", + "setting_id": "IlK23KWfTD7BLPpZ", + "instantiation": "true", + "printer_model": "Meltingplot CHX 350", + "printer_variant": "0.8", + "nozzle_diameter": [ + "0.8" + ], + "min_layer_height": [ + "0.32" + ], + "max_layer_height": [ + "0.48" + ], + "printable_area": [ + "0x0", + "880x0", + "880x422", + "0x422" + ], + "printable_height": "943", + "default_print_profile": "0.38mm Standard 0.8 nozzle @Meltingplot CHX 350", + "default_filament_profile": [ + "Meltingplot PLA @0.8 nozzle" + ], + "min_resonance_avoidance_speed": "55", + "max_resonance_avoidance_speed": "115" +} diff --git a/resources/profiles/Meltingplot/machine/Meltingplot CHX 350 1.0 nozzle.json b/resources/profiles/Meltingplot/machine/Meltingplot CHX 350 1.0 nozzle.json new file mode 100644 index 0000000000..0c2f656c94 --- /dev/null +++ b/resources/profiles/Meltingplot/machine/Meltingplot CHX 350 1.0 nozzle.json @@ -0,0 +1,33 @@ +{ + "type": "machine", + "name": "Meltingplot CHX 350 1.0 nozzle", + "inherits": "fdm_machine_meltingplot_chx", + "from": "system", + "setting_id": "AGIxh7arXUPLFcnj", + "instantiation": "true", + "printer_model": "Meltingplot CHX 350", + "printer_variant": "1.0", + "nozzle_diameter": [ + "1.0" + ], + "min_layer_height": [ + "0.40" + ], + "max_layer_height": [ + "0.60" + ], + "printable_area": [ + "0x0", + "880x0", + "880x422", + "0x422" + ], + "printable_height": "943", + "default_print_profile": "0.48mm Optimal 1.0 nozzle @Meltingplot CHX 350", + "default_filament_profile": [ + "Meltingplot PLA @1.0 nozzle" + ], + "nozzle_type": [ + "hardened_steel" + ] +} diff --git a/resources/profiles/Meltingplot/machine/Meltingplot CHX 350 1.2 nozzle.json b/resources/profiles/Meltingplot/machine/Meltingplot CHX 350 1.2 nozzle.json new file mode 100644 index 0000000000..fa511ee85a --- /dev/null +++ b/resources/profiles/Meltingplot/machine/Meltingplot CHX 350 1.2 nozzle.json @@ -0,0 +1,33 @@ +{ + "type": "machine", + "name": "Meltingplot CHX 350 1.2 nozzle", + "inherits": "fdm_machine_meltingplot_chx", + "from": "system", + "setting_id": "xcwkp9Kdund0y4Zh", + "instantiation": "true", + "printer_model": "Meltingplot CHX 350", + "printer_variant": "1.2", + "nozzle_diameter": [ + "1.2" + ], + "min_layer_height": [ + "0.48" + ], + "max_layer_height": [ + "0.72" + ], + "printable_area": [ + "0x0", + "880x0", + "880x422", + "0x422" + ], + "printable_height": "943", + "default_print_profile": "0.56mm Optimal 1.2 nozzle @Meltingplot CHX 350", + "default_filament_profile": [ + "Meltingplot PLA" + ], + "nozzle_type": [ + "hardened_steel" + ] +} diff --git a/resources/profiles/Meltingplot/machine/Meltingplot CHX 350.json b/resources/profiles/Meltingplot/machine/Meltingplot CHX 350.json new file mode 100644 index 0000000000..22d9b57d30 --- /dev/null +++ b/resources/profiles/Meltingplot/machine/Meltingplot CHX 350.json @@ -0,0 +1,12 @@ +{ + "type": "machine_model", + "name": "Meltingplot CHX 350", + "model_id": "Meltingplot-CHX-350", + "nozzle_diameter": "0.4;0.6;0.8;1.0;1.2", + "machine_tech": "FFF", + "family": "Meltingplot", + "bed_model": "chx350-printbed.stl", + "bed_texture": "chx350-texture.svg", + "hotend_model": "", + "default_materials": "Meltingplot PLA @0.4 nozzle;Meltingplot PLA @0.6 nozzle;Meltingplot PLA @0.8 nozzle;Meltingplot PLA @1.0 nozzle;Meltingplot PLA;Meltingplot PETG @0.4 nozzle;Meltingplot PETG @0.6 nozzle;Meltingplot PETG @0.8 nozzle;Meltingplot PETG @1.0 nozzle;Meltingplot PETG;Meltingplot ABS @0.4 nozzle;Meltingplot ABS @0.6 nozzle;Meltingplot ABS @0.8 nozzle;Meltingplot ABS @1.0 nozzle;Meltingplot ABS;Meltingplot ASA @0.4 nozzle;Meltingplot ASA @0.6 nozzle;Meltingplot ASA @0.8 nozzle;Meltingplot ASA @1.0 nozzle;Meltingplot ASA" +} diff --git a/resources/profiles/Meltingplot/machine/Meltingplot MBL 133 0.4 nozzle.json b/resources/profiles/Meltingplot/machine/Meltingplot MBL 133 0.4 nozzle.json new file mode 100644 index 0000000000..413b86a245 --- /dev/null +++ b/resources/profiles/Meltingplot/machine/Meltingplot MBL 133 0.4 nozzle.json @@ -0,0 +1,30 @@ +{ + "type": "machine", + "name": "Meltingplot MBL 133 0.4 nozzle", + "inherits": "fdm_machine_meltingplot_mbl", + "from": "system", + "setting_id": "wyroTvO4uFQPS3Se", + "instantiation": "true", + "printer_model": "Meltingplot MBL 133", + "printer_variant": "0.4", + "nozzle_diameter": [ + "0.4" + ], + "min_layer_height": [ + "0.16" + ], + "max_layer_height": [ + "0.24" + ], + "printable_area": [ + "0x0", + "835x0", + "835x405", + "0x405" + ], + "printable_height": "394", + "default_print_profile": "0.18mm Fine 0.4 nozzle @Meltingplot MBL", + "default_filament_profile": [ + "Meltingplot PLA @0.4 nozzle" + ] +} diff --git a/resources/profiles/Meltingplot/machine/Meltingplot MBL 133 0.6 nozzle.json b/resources/profiles/Meltingplot/machine/Meltingplot MBL 133 0.6 nozzle.json new file mode 100644 index 0000000000..1f6e02ec96 --- /dev/null +++ b/resources/profiles/Meltingplot/machine/Meltingplot MBL 133 0.6 nozzle.json @@ -0,0 +1,30 @@ +{ + "type": "machine", + "name": "Meltingplot MBL 133 0.6 nozzle", + "inherits": "fdm_machine_meltingplot_mbl", + "from": "system", + "setting_id": "QbxTZqa4I7jaXUzw", + "instantiation": "true", + "printer_model": "Meltingplot MBL 133", + "printer_variant": "0.6", + "nozzle_diameter": [ + "0.6" + ], + "min_layer_height": [ + "0.24" + ], + "max_layer_height": [ + "0.36" + ], + "printable_area": [ + "0x0", + "835x0", + "835x405", + "0x405" + ], + "printable_height": "394", + "default_print_profile": "0.30mm Standard 0.6 nozzle @Meltingplot MBL", + "default_filament_profile": [ + "Meltingplot PLA @0.6 nozzle" + ] +} diff --git a/resources/profiles/Meltingplot/machine/Meltingplot MBL 133 0.8 nozzle.json b/resources/profiles/Meltingplot/machine/Meltingplot MBL 133 0.8 nozzle.json new file mode 100644 index 0000000000..506acfdf6f --- /dev/null +++ b/resources/profiles/Meltingplot/machine/Meltingplot MBL 133 0.8 nozzle.json @@ -0,0 +1,30 @@ +{ + "type": "machine", + "name": "Meltingplot MBL 133 0.8 nozzle", + "inherits": "fdm_machine_meltingplot_mbl", + "from": "system", + "setting_id": "VXumP32DSNKwddyS", + "instantiation": "true", + "printer_model": "Meltingplot MBL 133", + "printer_variant": "0.8", + "nozzle_diameter": [ + "0.8" + ], + "min_layer_height": [ + "0.32" + ], + "max_layer_height": [ + "0.48" + ], + "printable_area": [ + "0x0", + "835x0", + "835x405", + "0x405" + ], + "printable_height": "394", + "default_print_profile": "0.38mm Standard 0.8 nozzle @Meltingplot MBL", + "default_filament_profile": [ + "Meltingplot PLA @0.8 nozzle" + ] +} diff --git a/resources/profiles/Meltingplot/machine/Meltingplot MBL 133 1.0 nozzle.json b/resources/profiles/Meltingplot/machine/Meltingplot MBL 133 1.0 nozzle.json new file mode 100644 index 0000000000..d4943d8642 --- /dev/null +++ b/resources/profiles/Meltingplot/machine/Meltingplot MBL 133 1.0 nozzle.json @@ -0,0 +1,30 @@ +{ + "type": "machine", + "name": "Meltingplot MBL 133 1.0 nozzle", + "inherits": "fdm_machine_meltingplot_mbl", + "from": "system", + "setting_id": "A2a4j8nclQxokoHn", + "instantiation": "true", + "printer_model": "Meltingplot MBL 133", + "printer_variant": "1.0", + "nozzle_diameter": [ + "1.0" + ], + "min_layer_height": [ + "0.40" + ], + "max_layer_height": [ + "0.60" + ], + "printable_area": [ + "0x0", + "835x0", + "835x405", + "0x405" + ], + "printable_height": "394", + "default_print_profile": "0.48mm Optimal 1.0 nozzle @Meltingplot MBL", + "default_filament_profile": [ + "Meltingplot PLA @1.0 nozzle" + ] +} diff --git a/resources/profiles/Meltingplot/machine/Meltingplot MBL 133 1.2 nozzle.json b/resources/profiles/Meltingplot/machine/Meltingplot MBL 133 1.2 nozzle.json new file mode 100644 index 0000000000..6107f64728 --- /dev/null +++ b/resources/profiles/Meltingplot/machine/Meltingplot MBL 133 1.2 nozzle.json @@ -0,0 +1,30 @@ +{ + "type": "machine", + "name": "Meltingplot MBL 133 1.2 nozzle", + "inherits": "fdm_machine_meltingplot_mbl", + "from": "system", + "setting_id": "wn8Ez4ZM1ubuftLv", + "instantiation": "true", + "printer_model": "Meltingplot MBL 133", + "printer_variant": "1.2", + "nozzle_diameter": [ + "1.2" + ], + "min_layer_height": [ + "0.48" + ], + "max_layer_height": [ + "0.72" + ], + "printable_area": [ + "0x0", + "835x0", + "835x405", + "0x405" + ], + "printable_height": "394", + "default_print_profile": "0.56mm Optimal 1.2 nozzle @Meltingplot MBL", + "default_filament_profile": [ + "Meltingplot PLA" + ] +} diff --git a/resources/profiles/Meltingplot/machine/Meltingplot MBL 133.json b/resources/profiles/Meltingplot/machine/Meltingplot MBL 133.json new file mode 100644 index 0000000000..5a8d76e344 --- /dev/null +++ b/resources/profiles/Meltingplot/machine/Meltingplot MBL 133.json @@ -0,0 +1,12 @@ +{ + "type": "machine_model", + "name": "Meltingplot MBL 133", + "model_id": "Meltingplot-MBL-133", + "nozzle_diameter": "0.8;0.4;0.6;1.0;1.2", + "machine_tech": "FFF", + "family": "Meltingplot", + "bed_model": "mbl133-printbed.stl", + "bed_texture": "mbl-133-texture.svg", + "hotend_model": "", + "default_materials": "Meltingplot PLA @0.4 nozzle;Meltingplot PLA @0.6 nozzle;Meltingplot PLA @0.8 nozzle;Meltingplot PLA @1.0 nozzle;Meltingplot PLA;Meltingplot PETG @0.4 nozzle;Meltingplot PETG @0.6 nozzle;Meltingplot PETG @0.8 nozzle;Meltingplot PETG @1.0 nozzle;Meltingplot PETG;Meltingplot ABS @0.4 nozzle;Meltingplot ABS @0.6 nozzle;Meltingplot ABS @0.8 nozzle;Meltingplot ABS @1.0 nozzle;Meltingplot ABS;Meltingplot ASA @0.4 nozzle;Meltingplot ASA @0.6 nozzle;Meltingplot ASA @0.8 nozzle;Meltingplot ASA @1.0 nozzle;Meltingplot ASA" +} diff --git a/resources/profiles/Meltingplot/machine/Meltingplot MBL 136 0.4 nozzle.json b/resources/profiles/Meltingplot/machine/Meltingplot MBL 136 0.4 nozzle.json new file mode 100644 index 0000000000..efcd27c2ec --- /dev/null +++ b/resources/profiles/Meltingplot/machine/Meltingplot MBL 136 0.4 nozzle.json @@ -0,0 +1,30 @@ +{ + "type": "machine", + "name": "Meltingplot MBL 136 0.4 nozzle", + "inherits": "fdm_machine_meltingplot_mbl", + "from": "system", + "setting_id": "Wv2F2INNahYnIP2n", + "instantiation": "true", + "printer_model": "Meltingplot MBL 136", + "printer_variant": "0.4", + "nozzle_diameter": [ + "0.4" + ], + "min_layer_height": [ + "0.16" + ], + "max_layer_height": [ + "0.24" + ], + "printable_area": [ + "0x0", + "850x0", + "850x405", + "0x405" + ], + "printable_height": "396", + "default_print_profile": "0.18mm Fine 0.4 nozzle @Meltingplot MBL", + "default_filament_profile": [ + "Meltingplot PLA @0.4 nozzle" + ] +} diff --git a/resources/profiles/Meltingplot/machine/Meltingplot MBL 136 0.6 nozzle.json b/resources/profiles/Meltingplot/machine/Meltingplot MBL 136 0.6 nozzle.json new file mode 100644 index 0000000000..2bf1e00ae6 --- /dev/null +++ b/resources/profiles/Meltingplot/machine/Meltingplot MBL 136 0.6 nozzle.json @@ -0,0 +1,30 @@ +{ + "type": "machine", + "name": "Meltingplot MBL 136 0.6 nozzle", + "inherits": "fdm_machine_meltingplot_mbl", + "from": "system", + "setting_id": "bmYfNrpRLtITsguf", + "instantiation": "true", + "printer_model": "Meltingplot MBL 136", + "printer_variant": "0.6", + "nozzle_diameter": [ + "0.6" + ], + "min_layer_height": [ + "0.24" + ], + "max_layer_height": [ + "0.36" + ], + "printable_area": [ + "0x0", + "850x0", + "850x405", + "0x405" + ], + "printable_height": "396", + "default_print_profile": "0.30mm Standard 0.6 nozzle @Meltingplot MBL", + "default_filament_profile": [ + "Meltingplot PLA @0.6 nozzle" + ] +} diff --git a/resources/profiles/Meltingplot/machine/Meltingplot MBL 136 0.8 nozzle.json b/resources/profiles/Meltingplot/machine/Meltingplot MBL 136 0.8 nozzle.json new file mode 100644 index 0000000000..922ec96fce --- /dev/null +++ b/resources/profiles/Meltingplot/machine/Meltingplot MBL 136 0.8 nozzle.json @@ -0,0 +1,30 @@ +{ + "type": "machine", + "name": "Meltingplot MBL 136 0.8 nozzle", + "inherits": "fdm_machine_meltingplot_mbl", + "from": "system", + "setting_id": "9fv3aEc4tAsdeaPI", + "instantiation": "true", + "printer_model": "Meltingplot MBL 136", + "printer_variant": "0.8", + "nozzle_diameter": [ + "0.8" + ], + "min_layer_height": [ + "0.32" + ], + "max_layer_height": [ + "0.48" + ], + "printable_area": [ + "0x0", + "850x0", + "850x405", + "0x405" + ], + "printable_height": "396", + "default_print_profile": "0.38mm Standard 0.8 nozzle @Meltingplot MBL", + "default_filament_profile": [ + "Meltingplot PLA @0.8 nozzle" + ] +} diff --git a/resources/profiles/Meltingplot/machine/Meltingplot MBL 136 1.0 nozzle.json b/resources/profiles/Meltingplot/machine/Meltingplot MBL 136 1.0 nozzle.json new file mode 100644 index 0000000000..0e1e6dadb7 --- /dev/null +++ b/resources/profiles/Meltingplot/machine/Meltingplot MBL 136 1.0 nozzle.json @@ -0,0 +1,30 @@ +{ + "type": "machine", + "name": "Meltingplot MBL 136 1.0 nozzle", + "inherits": "fdm_machine_meltingplot_mbl", + "from": "system", + "setting_id": "l45hlHUCFi1UcGpM", + "instantiation": "true", + "printer_model": "Meltingplot MBL 136", + "printer_variant": "1.0", + "nozzle_diameter": [ + "1.0" + ], + "min_layer_height": [ + "0.40" + ], + "max_layer_height": [ + "0.60" + ], + "printable_area": [ + "0x0", + "850x0", + "850x405", + "0x405" + ], + "printable_height": "396", + "default_print_profile": "0.48mm Optimal 1.0 nozzle @Meltingplot MBL", + "default_filament_profile": [ + "Meltingplot PLA @1.0 nozzle" + ] +} diff --git a/resources/profiles/Meltingplot/machine/Meltingplot MBL 136 1.2 nozzle.json b/resources/profiles/Meltingplot/machine/Meltingplot MBL 136 1.2 nozzle.json new file mode 100644 index 0000000000..1fb6101070 --- /dev/null +++ b/resources/profiles/Meltingplot/machine/Meltingplot MBL 136 1.2 nozzle.json @@ -0,0 +1,30 @@ +{ + "type": "machine", + "name": "Meltingplot MBL 136 1.2 nozzle", + "inherits": "fdm_machine_meltingplot_mbl", + "from": "system", + "setting_id": "LAAqt3v5IkT75PMJ", + "instantiation": "true", + "printer_model": "Meltingplot MBL 136", + "printer_variant": "1.2", + "nozzle_diameter": [ + "1.2" + ], + "min_layer_height": [ + "0.48" + ], + "max_layer_height": [ + "0.72" + ], + "printable_area": [ + "0x0", + "850x0", + "850x405", + "0x405" + ], + "printable_height": "396", + "default_print_profile": "0.56mm Optimal 1.2 nozzle @Meltingplot MBL", + "default_filament_profile": [ + "Meltingplot PLA" + ] +} diff --git a/resources/profiles/Meltingplot/machine/Meltingplot MBL 136.json b/resources/profiles/Meltingplot/machine/Meltingplot MBL 136.json new file mode 100644 index 0000000000..1afe141a6b --- /dev/null +++ b/resources/profiles/Meltingplot/machine/Meltingplot MBL 136.json @@ -0,0 +1,12 @@ +{ + "type": "machine_model", + "name": "Meltingplot MBL 136", + "model_id": "Meltingplot-MBL-136", + "nozzle_diameter": "0.8;0.4;0.6;1.0;1.2", + "machine_tech": "FFF", + "family": "Meltingplot", + "bed_model": "mbl136-printbed.stl", + "bed_texture": "mbl-136-texture.svg", + "hotend_model": "", + "default_materials": "Meltingplot PLA @0.4 nozzle;Meltingplot PLA @0.6 nozzle;Meltingplot PLA @0.8 nozzle;Meltingplot PLA @1.0 nozzle;Meltingplot PLA;Meltingplot PETG @0.4 nozzle;Meltingplot PETG @0.6 nozzle;Meltingplot PETG @0.8 nozzle;Meltingplot PETG @1.0 nozzle;Meltingplot PETG;Meltingplot ABS @0.4 nozzle;Meltingplot ABS @0.6 nozzle;Meltingplot ABS @0.8 nozzle;Meltingplot ABS @1.0 nozzle;Meltingplot ABS;Meltingplot ASA @0.4 nozzle;Meltingplot ASA @0.6 nozzle;Meltingplot ASA @0.8 nozzle;Meltingplot ASA @1.0 nozzle;Meltingplot ASA" +} diff --git a/resources/profiles/Meltingplot/machine/Meltingplot MBL 308 0.4 nozzle.json b/resources/profiles/Meltingplot/machine/Meltingplot MBL 308 0.4 nozzle.json new file mode 100644 index 0000000000..2e3f428374 --- /dev/null +++ b/resources/profiles/Meltingplot/machine/Meltingplot MBL 308 0.4 nozzle.json @@ -0,0 +1,30 @@ +{ + "type": "machine", + "name": "Meltingplot MBL 308 0.4 nozzle", + "inherits": "fdm_machine_meltingplot_mbl", + "from": "system", + "setting_id": "AbxDaZCTmysg7JTf", + "instantiation": "true", + "printer_model": "Meltingplot MBL 308", + "printer_variant": "0.4", + "nozzle_diameter": [ + "0.4" + ], + "min_layer_height": [ + "0.16" + ], + "max_layer_height": [ + "0.24" + ], + "printable_area": [ + "0x0", + "850x0", + "850x405", + "0x405" + ], + "printable_height": "896", + "default_print_profile": "0.18mm Fine 0.4 nozzle @Meltingplot MBL", + "default_filament_profile": [ + "Meltingplot PLA @0.4 nozzle" + ] +} diff --git a/resources/profiles/Meltingplot/machine/Meltingplot MBL 308 0.6 nozzle.json b/resources/profiles/Meltingplot/machine/Meltingplot MBL 308 0.6 nozzle.json new file mode 100644 index 0000000000..d21e5b08df --- /dev/null +++ b/resources/profiles/Meltingplot/machine/Meltingplot MBL 308 0.6 nozzle.json @@ -0,0 +1,30 @@ +{ + "type": "machine", + "name": "Meltingplot MBL 308 0.6 nozzle", + "inherits": "fdm_machine_meltingplot_mbl", + "from": "system", + "setting_id": "YRQhtucLD6iZRcY0", + "instantiation": "true", + "printer_model": "Meltingplot MBL 308", + "printer_variant": "0.6", + "nozzle_diameter": [ + "0.6" + ], + "min_layer_height": [ + "0.24" + ], + "max_layer_height": [ + "0.36" + ], + "printable_area": [ + "0x0", + "850x0", + "850x405", + "0x405" + ], + "printable_height": "896", + "default_print_profile": "0.30mm Standard 0.6 nozzle @Meltingplot MBL", + "default_filament_profile": [ + "Meltingplot PLA @0.6 nozzle" + ] +} diff --git a/resources/profiles/Meltingplot/machine/Meltingplot MBL 308 0.8 nozzle.json b/resources/profiles/Meltingplot/machine/Meltingplot MBL 308 0.8 nozzle.json new file mode 100644 index 0000000000..2feb7f2162 --- /dev/null +++ b/resources/profiles/Meltingplot/machine/Meltingplot MBL 308 0.8 nozzle.json @@ -0,0 +1,30 @@ +{ + "type": "machine", + "name": "Meltingplot MBL 308 0.8 nozzle", + "inherits": "fdm_machine_meltingplot_mbl", + "from": "system", + "setting_id": "3scvx4P2vXtmoMmI", + "instantiation": "true", + "printer_model": "Meltingplot MBL 308", + "printer_variant": "0.8", + "nozzle_diameter": [ + "0.8" + ], + "min_layer_height": [ + "0.32" + ], + "max_layer_height": [ + "0.48" + ], + "printable_area": [ + "0x0", + "850x0", + "850x405", + "0x405" + ], + "printable_height": "896", + "default_print_profile": "0.38mm Standard 0.8 nozzle @Meltingplot MBL", + "default_filament_profile": [ + "Meltingplot PLA @0.8 nozzle" + ] +} diff --git a/resources/profiles/Meltingplot/machine/Meltingplot MBL 308 1.0 nozzle.json b/resources/profiles/Meltingplot/machine/Meltingplot MBL 308 1.0 nozzle.json new file mode 100644 index 0000000000..dd54275283 --- /dev/null +++ b/resources/profiles/Meltingplot/machine/Meltingplot MBL 308 1.0 nozzle.json @@ -0,0 +1,30 @@ +{ + "type": "machine", + "name": "Meltingplot MBL 308 1.0 nozzle", + "inherits": "fdm_machine_meltingplot_mbl", + "from": "system", + "setting_id": "VpAHWQ6v3aZLUIs1", + "instantiation": "true", + "printer_model": "Meltingplot MBL 308", + "printer_variant": "1.0", + "nozzle_diameter": [ + "1.0" + ], + "min_layer_height": [ + "0.40" + ], + "max_layer_height": [ + "0.60" + ], + "printable_area": [ + "0x0", + "850x0", + "850x405", + "0x405" + ], + "printable_height": "896", + "default_print_profile": "0.48mm Optimal 1.0 nozzle @Meltingplot MBL", + "default_filament_profile": [ + "Meltingplot PLA @1.0 nozzle" + ] +} diff --git a/resources/profiles/Meltingplot/machine/Meltingplot MBL 308 1.2 nozzle.json b/resources/profiles/Meltingplot/machine/Meltingplot MBL 308 1.2 nozzle.json new file mode 100644 index 0000000000..eb56bc5da6 --- /dev/null +++ b/resources/profiles/Meltingplot/machine/Meltingplot MBL 308 1.2 nozzle.json @@ -0,0 +1,30 @@ +{ + "type": "machine", + "name": "Meltingplot MBL 308 1.2 nozzle", + "inherits": "fdm_machine_meltingplot_mbl", + "from": "system", + "setting_id": "WuT3Qj2xyAPfDsXW", + "instantiation": "true", + "printer_model": "Meltingplot MBL 308", + "printer_variant": "1.2", + "nozzle_diameter": [ + "1.2" + ], + "min_layer_height": [ + "0.48" + ], + "max_layer_height": [ + "0.72" + ], + "printable_area": [ + "0x0", + "850x0", + "850x405", + "0x405" + ], + "printable_height": "896", + "default_print_profile": "0.56mm Optimal 1.2 nozzle @Meltingplot MBL", + "default_filament_profile": [ + "Meltingplot PLA" + ] +} diff --git a/resources/profiles/Meltingplot/machine/Meltingplot MBL 308.json b/resources/profiles/Meltingplot/machine/Meltingplot MBL 308.json new file mode 100644 index 0000000000..7d43a425a7 --- /dev/null +++ b/resources/profiles/Meltingplot/machine/Meltingplot MBL 308.json @@ -0,0 +1,12 @@ +{ + "type": "machine_model", + "name": "Meltingplot MBL 308", + "model_id": "Meltingplot-MBL-308", + "nozzle_diameter": "0.8;0.4;0.6;1.0;1.2", + "machine_tech": "FFF", + "family": "Meltingplot", + "bed_model": "mbl308-printbed.stl", + "bed_texture": "mbl-308-texture.svg", + "hotend_model": "", + "default_materials": "Meltingplot PLA @0.4 nozzle;Meltingplot PLA @0.6 nozzle;Meltingplot PLA @0.8 nozzle;Meltingplot PLA @1.0 nozzle;Meltingplot PLA;Meltingplot PETG @0.4 nozzle;Meltingplot PETG @0.6 nozzle;Meltingplot PETG @0.8 nozzle;Meltingplot PETG @1.0 nozzle;Meltingplot PETG;Meltingplot ABS @0.4 nozzle;Meltingplot ABS @0.6 nozzle;Meltingplot ABS @0.8 nozzle;Meltingplot ABS @1.0 nozzle;Meltingplot ABS;Meltingplot ASA @0.4 nozzle;Meltingplot ASA @0.6 nozzle;Meltingplot ASA @0.8 nozzle;Meltingplot ASA @1.0 nozzle;Meltingplot ASA" +} diff --git a/resources/profiles/Meltingplot/machine/Meltingplot MBL 480 0.4 nozzle.json b/resources/profiles/Meltingplot/machine/Meltingplot MBL 480 0.4 nozzle.json new file mode 100644 index 0000000000..1638cf61e5 --- /dev/null +++ b/resources/profiles/Meltingplot/machine/Meltingplot MBL 480 0.4 nozzle.json @@ -0,0 +1,30 @@ +{ + "type": "machine", + "name": "Meltingplot MBL 480 0.4 nozzle", + "inherits": "fdm_machine_meltingplot_mbl", + "from": "system", + "setting_id": "14E0ywGwPgPzuR7q", + "instantiation": "true", + "printer_model": "Meltingplot MBL 480", + "printer_variant": "0.4", + "nozzle_diameter": [ + "0.4" + ], + "min_layer_height": [ + "0.16" + ], + "max_layer_height": [ + "0.24" + ], + "printable_area": [ + "0x0", + "850x0", + "850x405", + "0x405" + ], + "printable_height": "1396", + "default_print_profile": "0.18mm Fine 0.4 nozzle @Meltingplot MBL", + "default_filament_profile": [ + "Meltingplot PLA @0.4 nozzle" + ] +} diff --git a/resources/profiles/Meltingplot/machine/Meltingplot MBL 480 0.6 nozzle.json b/resources/profiles/Meltingplot/machine/Meltingplot MBL 480 0.6 nozzle.json new file mode 100644 index 0000000000..d727e6e540 --- /dev/null +++ b/resources/profiles/Meltingplot/machine/Meltingplot MBL 480 0.6 nozzle.json @@ -0,0 +1,30 @@ +{ + "type": "machine", + "name": "Meltingplot MBL 480 0.6 nozzle", + "inherits": "fdm_machine_meltingplot_mbl", + "from": "system", + "setting_id": "RntAZ9kYe1JiK9qL", + "instantiation": "true", + "printer_model": "Meltingplot MBL 480", + "printer_variant": "0.6", + "nozzle_diameter": [ + "0.6" + ], + "min_layer_height": [ + "0.24" + ], + "max_layer_height": [ + "0.36" + ], + "printable_area": [ + "0x0", + "850x0", + "850x405", + "0x405" + ], + "printable_height": "1396", + "default_print_profile": "0.30mm Standard 0.6 nozzle @Meltingplot MBL", + "default_filament_profile": [ + "Meltingplot PLA @0.6 nozzle" + ] +} diff --git a/resources/profiles/Meltingplot/machine/Meltingplot MBL 480 0.8 nozzle.json b/resources/profiles/Meltingplot/machine/Meltingplot MBL 480 0.8 nozzle.json new file mode 100644 index 0000000000..2ca80661af --- /dev/null +++ b/resources/profiles/Meltingplot/machine/Meltingplot MBL 480 0.8 nozzle.json @@ -0,0 +1,30 @@ +{ + "type": "machine", + "name": "Meltingplot MBL 480 0.8 nozzle", + "inherits": "fdm_machine_meltingplot_mbl", + "from": "system", + "setting_id": "3wnBTip16mjzuNaR", + "instantiation": "true", + "printer_model": "Meltingplot MBL 480", + "printer_variant": "0.8", + "nozzle_diameter": [ + "0.8" + ], + "min_layer_height": [ + "0.32" + ], + "max_layer_height": [ + "0.48" + ], + "printable_area": [ + "0x0", + "850x0", + "850x405", + "0x405" + ], + "printable_height": "1396", + "default_print_profile": "0.38mm Standard 0.8 nozzle @Meltingplot MBL", + "default_filament_profile": [ + "Meltingplot PLA @0.8 nozzle" + ] +} diff --git a/resources/profiles/Meltingplot/machine/Meltingplot MBL 480 1.0 nozzle.json b/resources/profiles/Meltingplot/machine/Meltingplot MBL 480 1.0 nozzle.json new file mode 100644 index 0000000000..95a2b7a7da --- /dev/null +++ b/resources/profiles/Meltingplot/machine/Meltingplot MBL 480 1.0 nozzle.json @@ -0,0 +1,30 @@ +{ + "type": "machine", + "name": "Meltingplot MBL 480 1.0 nozzle", + "inherits": "fdm_machine_meltingplot_mbl", + "from": "system", + "setting_id": "KXzVlZQpxRpoYCZC", + "instantiation": "true", + "printer_model": "Meltingplot MBL 480", + "printer_variant": "1.0", + "nozzle_diameter": [ + "1.0" + ], + "min_layer_height": [ + "0.40" + ], + "max_layer_height": [ + "0.60" + ], + "printable_area": [ + "0x0", + "850x0", + "850x405", + "0x405" + ], + "printable_height": "1396", + "default_print_profile": "0.48mm Optimal 1.0 nozzle @Meltingplot MBL", + "default_filament_profile": [ + "Meltingplot PLA @1.0 nozzle" + ] +} diff --git a/resources/profiles/Meltingplot/machine/Meltingplot MBL 480 1.2 nozzle.json b/resources/profiles/Meltingplot/machine/Meltingplot MBL 480 1.2 nozzle.json new file mode 100644 index 0000000000..2a992dc643 --- /dev/null +++ b/resources/profiles/Meltingplot/machine/Meltingplot MBL 480 1.2 nozzle.json @@ -0,0 +1,30 @@ +{ + "type": "machine", + "name": "Meltingplot MBL 480 1.2 nozzle", + "inherits": "fdm_machine_meltingplot_mbl", + "from": "system", + "setting_id": "FhIoFCxemK2Miw2J", + "instantiation": "true", + "printer_model": "Meltingplot MBL 480", + "printer_variant": "1.2", + "nozzle_diameter": [ + "1.2" + ], + "min_layer_height": [ + "0.48" + ], + "max_layer_height": [ + "0.72" + ], + "printable_area": [ + "0x0", + "850x0", + "850x405", + "0x405" + ], + "printable_height": "1396", + "default_print_profile": "0.56mm Optimal 1.2 nozzle @Meltingplot MBL", + "default_filament_profile": [ + "Meltingplot PLA" + ] +} diff --git a/resources/profiles/Meltingplot/machine/Meltingplot MBL 480.json b/resources/profiles/Meltingplot/machine/Meltingplot MBL 480.json new file mode 100644 index 0000000000..0360c5bcee --- /dev/null +++ b/resources/profiles/Meltingplot/machine/Meltingplot MBL 480.json @@ -0,0 +1,12 @@ +{ + "type": "machine_model", + "name": "Meltingplot MBL 480", + "model_id": "Meltingplot-MBL-480", + "nozzle_diameter": "0.8;0.4;0.6;1.0;1.2", + "machine_tech": "FFF", + "family": "Meltingplot", + "bed_model": "mbl480-printbed.stl", + "bed_texture": "mbl-480-texture.svg", + "hotend_model": "", + "default_materials": "Meltingplot PLA @0.4 nozzle;Meltingplot PLA @0.6 nozzle;Meltingplot PLA @0.8 nozzle;Meltingplot PLA @1.0 nozzle;Meltingplot PLA;Meltingplot PETG @0.4 nozzle;Meltingplot PETG @0.6 nozzle;Meltingplot PETG @0.8 nozzle;Meltingplot PETG @1.0 nozzle;Meltingplot PETG;Meltingplot ABS @0.4 nozzle;Meltingplot ABS @0.6 nozzle;Meltingplot ABS @0.8 nozzle;Meltingplot ABS @1.0 nozzle;Meltingplot ABS;Meltingplot ASA @0.4 nozzle;Meltingplot ASA @0.6 nozzle;Meltingplot ASA @0.8 nozzle;Meltingplot ASA @1.0 nozzle;Meltingplot ASA" +} diff --git a/resources/profiles/Meltingplot/machine/fdm_machine_common.json b/resources/profiles/Meltingplot/machine/fdm_machine_common.json new file mode 100644 index 0000000000..a27cc95405 --- /dev/null +++ b/resources/profiles/Meltingplot/machine/fdm_machine_common.json @@ -0,0 +1,68 @@ +{ + "type": "machine", + "name": "fdm_machine_common", + "from": "system", + "instantiation": "false", + "printer_technology": "FFF", + "gcode_flavor": "reprapfirmware", + "host_type": "duet", + "disable_m73": "1", + "emit_machine_limits_to_gcode": "0", + "extruder_colour": [ + "#FCE94F" + ], + "extruder_offset": [ + "0x0" + ], + "machine_min_extruding_rate": [ + "0" + ], + "machine_min_travel_rate": [ + "0" + ], + "machine_max_speed_e": [ + "60" + ], + "printer_settings_id": "", + "resonance_avoidance": "0", + "retraction_length": [ + "0" + ], + "use_firmware_retraction": "1", + "retract_when_changing_layer": [ + "1" + ], + "retract_before_wipe": [ + "0%" + ], + "retract_length_toolchange": [ + "0" + ], + "retract_restart_extra": [ + "0" + ], + "retract_restart_extra_toolchange": [ + "0" + ], + "wipe": [ + "0" + ], + "z_hop": [ + "0" + ], + "z_hop_types": [ + "Normal Lift" + ], + "travel_slope": [ + "1" + ], + "single_extruder_multi_material": "0", + "purge_in_prime_tower": "0", + "time_cost": "2", + "default_print_profile": "", + "change_filament_gcode": "", + "machine_pause_gcode": "M226", + "machine_end_gcode": "G90\nG1 Z{min(max_layer_z + 5, printable_height)} F600\nM98 P\"0:/sys/meltingplot/print_end\"", + "layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]", + "before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\n;[layer_z]\n" +} diff --git a/resources/profiles/Meltingplot/machine/fdm_machine_meltingplot_chx.json b/resources/profiles/Meltingplot/machine/fdm_machine_meltingplot_chx.json new file mode 100644 index 0000000000..f68678716e --- /dev/null +++ b/resources/profiles/Meltingplot/machine/fdm_machine_meltingplot_chx.json @@ -0,0 +1,71 @@ +{ + "type": "machine", + "name": "fdm_machine_meltingplot_chx", + "inherits": "fdm_machine_common", + "from": "system", + "instantiation": "false", + "fan_kickstart": "0.5", + "fan_speedup_time": "1", + "machine_max_acceleration_e": [ + "3000" + ], + "machine_max_acceleration_extruding": [ + "6000" + ], + "machine_max_acceleration_retracting": [ + "3000" + ], + "machine_max_acceleration_travel": [ + "6000" + ], + "machine_max_acceleration_x": [ + "6000" + ], + "machine_max_acceleration_y": [ + "6000" + ], + "machine_max_acceleration_z": [ + "400" + ], + "machine_max_jerk_e": [ + "33.33" + ], + "machine_max_jerk_x": [ + "12" + ], + "machine_max_jerk_y": [ + "12" + ], + "machine_max_jerk_z": [ + "1.2" + ], + "machine_max_speed_x": [ + "833.33" + ], + "machine_max_speed_y": [ + "1000" + ], + "machine_max_speed_z": [ + "30" + ], + "extruder_clearance_radius": "65", + "extruder_clearance_height_to_rod": "20", + "extruder_clearance_height_to_lid": "150", + "nozzle_type": [ + "stainless_steel" + ], + "min_resonance_avoidance_speed": "40", + "max_resonance_avoidance_speed": "105", + "time_cost": "5", + "retraction_minimum_travel": [ + "2" + ], + "retraction_speed": [ + "60" + ], + "deretraction_speed": [ + "40" + ], + "printable_height": "943", + "machine_start_gcode": "M140 P0 S{first_layer_bed_temperature[0]} ; set bed temp\nG10 P0 S{first_layer_temperature[0]}\nM568 P0 R{first_layer_temperature[0] + standby_temperature_delta} S{first_layer_temperature[0]} A2\n\nM83 ; use relative distances for extrusion\nG90 ; use absolute coordinates\n\nM98 P\"0:/sys/meltingplot/print_start\"" +} diff --git a/resources/profiles/Meltingplot/machine/fdm_machine_meltingplot_mbl.json b/resources/profiles/Meltingplot/machine/fdm_machine_meltingplot_mbl.json new file mode 100644 index 0000000000..6d8f974073 --- /dev/null +++ b/resources/profiles/Meltingplot/machine/fdm_machine_meltingplot_mbl.json @@ -0,0 +1,69 @@ +{ + "type": "machine", + "name": "fdm_machine_meltingplot_mbl", + "inherits": "fdm_machine_common", + "from": "system", + "instantiation": "false", + "fan_kickstart": "0.5", + "fan_speedup_time": "0.5", + "machine_max_acceleration_e": [ + "2500" + ], + "machine_max_acceleration_extruding": [ + "800" + ], + "machine_max_acceleration_retracting": [ + "1250" + ], + "machine_max_acceleration_travel": [ + "1500" + ], + "machine_max_acceleration_x": [ + "1500" + ], + "machine_max_acceleration_y": [ + "1500" + ], + "machine_max_acceleration_z": [ + "72" + ], + "machine_max_jerk_e": [ + "3" + ], + "machine_max_jerk_x": [ + "9" + ], + "machine_max_jerk_y": [ + "9" + ], + "machine_max_jerk_z": [ + "0.3" + ], + "machine_max_speed_x": [ + "240" + ], + "machine_max_speed_y": [ + "240" + ], + "machine_max_speed_z": [ + "12" + ], + "extruder_clearance_radius": "75", + "extruder_clearance_height_to_rod": "30", + "extruder_clearance_height_to_lid": "30", + "retraction_minimum_travel": [ + "4" + ], + "retraction_speed": [ + "35" + ], + "deretraction_speed": [ + "0" + ], + "thumbnails": [ + "64x64", + "400x300" + ], + "thumbnails_format": "PNG", + "machine_start_gcode": "M140 P0 S{first_layer_bed_temperature[0]} ; set bed temp\nG10 P0 R{first_layer_temperature[0] + standby_temperature_delta} S{first_layer_temperature[0]}\n\nM83 ; use relative distances for extrusion\nG90 ; use absolute coordinates\n\nM98 P\"0:/sys/meltingplot/print_start\"" +} diff --git a/resources/profiles/Meltingplot/mbl-133-texture.svg b/resources/profiles/Meltingplot/mbl-133-texture.svg new file mode 100644 index 0000000000..d7572a5a2e --- /dev/null +++ b/resources/profiles/Meltingplot/mbl-133-texture.svg @@ -0,0 +1,158 @@ + + + + + + image/svg+xml + + MBL133 + + + + + + MBL133 + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/resources/profiles/Meltingplot/mbl-136-texture.svg b/resources/profiles/Meltingplot/mbl-136-texture.svg new file mode 100644 index 0000000000..415bd0fdc0 --- /dev/null +++ b/resources/profiles/Meltingplot/mbl-136-texture.svg @@ -0,0 +1,158 @@ + + + + + + image/svg+xml + + MBL133 + + + + + + MBL133 + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/resources/profiles/Meltingplot/mbl-308-texture.svg b/resources/profiles/Meltingplot/mbl-308-texture.svg new file mode 100644 index 0000000000..96ee77c84d --- /dev/null +++ b/resources/profiles/Meltingplot/mbl-308-texture.svg @@ -0,0 +1,158 @@ + + + + + + image/svg+xml + + MBL133 + + + + + + MBL133 + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/resources/profiles/Meltingplot/mbl-480-texture.svg b/resources/profiles/Meltingplot/mbl-480-texture.svg new file mode 100644 index 0000000000..e76d969d72 --- /dev/null +++ b/resources/profiles/Meltingplot/mbl-480-texture.svg @@ -0,0 +1,158 @@ + + + + + + image/svg+xml + + MBL133 + + + + + + MBL133 + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/resources/profiles/Meltingplot/mbl133-printbed.stl b/resources/profiles/Meltingplot/mbl133-printbed.stl new file mode 100644 index 0000000000000000000000000000000000000000..888491edeaa01f0dd422b657dfdb32dcbf119fea GIT binary patch literal 222284 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

|AcyE3W?5 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 P-?T>X?2^EFTQ2?&pk&*@ literal 0 HcmV?d00001 diff --git a/resources/profiles/Meltingplot/mbl308-printbed.stl b/resources/profiles/Meltingplot/mbl308-printbed.stl new file mode 100644 index 0000000000000000000000000000000000000000..ab252885915ab48e163d412f7ddb4491745ea73d GIT binary patch literal 160484 zcmb5XZ>(-tb>92>9QP_8sOsKC_}G9sA(2uyCDeb5P4GVVZW^JKsBTh4B7(-T!QeRb zT7<}!Kg6$e1F{rTp(>(j>QG0ZQqkQ4u@uoHX1~qe^#>F~2)g7(N|BX*a1w2W50-6g zite4y7<0_=n`@0XHd_gvI?wp6XU(@~zK3_x%5N@w@za_*I+DvzOm=p#R_K=hAl$H{16g-f+X?$5DRj z56^a+-AnD?KVbj<#QhTir6NQ>alakg{%1QK_w8T)*5TJa`u;b|qmo|G<+V z>d6-mZ~4OKE5hpWK|3q2c|Sv(t<`+%S2(V&M@_^PFCIR8yZ`&*TH#n5MBV*QUOar~ zcYeXV7sSQOPd8gXtIhVc?TYrZ!r3keC?p=d;&tr~mS+WmQ6GEsb*;se#2tUDos}y; z_(SJUBWi=QU7QsZ64zXQ{&de-fne0;>2s%X6&4R!S2){>=vNfPpB$Y( zz4w~8S*zSnFzS~+dH(c&{=oZYqP3LPN~|6qu;$cTX}fYM7;g{>BG1CzwakD zhZRg!UOdn@!%D2KH1YVfMC?e9)0sk^hC3V zp45+g^F4OH_MC6u>t#IuGcomp>KQtrBRzP<-C1*gXmvkuEJmqk_}HTrLFH}#v3Xqd zE6OA7KPwXd`IlcjeCp%4ALUsw%6o>2pyGW=Z&#?FomJj*C?wd=FNy5KPhNOoi~uo4 z75y&S6^So={)I96EUpy@Ms4nUq4lC@?O6{fzj5OWt>^6b14r8LLE@>8Uo+_a1fw<= zubIzk+(Aas-RjhR7m{fe|Y{C5RBUF+O_Jv#C)x&OvGdDS}lpz8e3n2V{H(n zvyFai_Mk#Sek;N}NH9uQ{l2@rube%okkEBo5#~XHQPz5%zN_d(sgSVyza-3q1f%p6 z+;C6jL4}0c@rp1H5{%Nb`RQ|&2Ne=}9#@2UkYJR0h6g@-XK}5lOhoI)R)l$wP(K(^ znvuQngOvvr66#T3o?w*9=fC#157vD<6%y*_KlP64tVl3Q<$v(58ww99BrKb_RC$nK zl$AG^3J)qIl)cnvMP*6UH7B8RL}{$8uP&7(QQtulDo2#Y_7|@Bt=rajkjj#XHa7Pq zBvg(l%|8CcXRiJIwFi|Yv3jC5>P1PY98s@qenmnvr&Z5j9y}JKY<9NnuZ*Cg8DR9B zJksJ?VSYt|v)ToL*@S0XeGd1EW-=r^Z^LY<)j>ZRqx^k>?i8auH>`+{eDgJ9ruUI= z-aKaaD`IOF^03U*k2MpSSuAP}g4qPmb|!dSp5c9W-MlB8pfVG$*)taWv?~@ubexsLaGwd*-4f-uS_c`qVpa zJgGBCDl>7_p1CNAPrW0fHkaD9TFxx}sf98V?J6vZ_8hjB2x4<7qvXAsS(*oxnYe1t zT$F^)Dvqmb82#gX&#BDBRij58gw=zDu5KLH+Cte=Q<;f&6_$i~kg!(LqtvGB@q@}t zT)iG~%!7nldmLBKW{hy7=5{}*%*54WOdN!HkkC^b$5kH_BlRH6gUU=?J;wGymj_|YcD8GgkL1iX%rC*NltLstT7Ak_u zOsK`Y9O13Rqr6SOzqnRZW9_7zwMNpXuJ;5(W_*3gq-p5n~m6=d~^>T#w zJ|5+L`QJj%zepD*e`WhOMjEeLzgN%*Md zQ99cPuei7HpfVF0sTYKKkkDC0l&<>69$gUDmr$7r%{Uf>d63Z6jVNn97k{Cs2bGy< z*J??a2MKE>JxWi(Qy;H9sLX_BfD6JrNT{_(l%D2#&5O!RXeL{EkkC^bQRO~_;qeQ(*Mr9_H!&M$6G#W&dXJHFs zV>3%zA97_Tay@d?+^-b~u0gKW2V3-}6YW_2{f^!z#u}}USJitTDkSvAvtAP>!6=Tq zb3K$V$2>uA?&6Jy)v0_NMTLakEuP%{$6s8}07x*(-gs{Am{+RpTJc>U->~s)M?G|b zkExK*o5K1{5eY`IPUg|hNI%D+0Z2~#2Q&hOmP`o!w2NHFRfKip=PeXVf5A5=&@eEY3?a%U2Z z`qkH-JFPQeDkQ%4(OcUXRjqT9VAQqWd+xN(gsG5t*W~|?tn>Y#LPCBk!aPVYO4l$l*4cv!30=1pVICwHWo==Z*V?tB zLc;FMT*TP5KC3tuqg20oG@wF4 zS3SnW*@FrRn`M+ECkaNW_0%IL6%y8_mm}v!Jp&aIdeUOXG1r3%3D4WBc?k(dsmG}2 zB~(c8{lk1#x>hkl>fU^pV=V}^o_a41$67}H`R|=;JGOjmpU;Yl@6!6NW&pOY%L(7_ zReA8N7{z^3c2@0))z9{rd!T;$q4Q(Z-@KyzS0vu>Yi&KX{_DaNwu@0 zqJ3mBTJlKq)ul2K+PAhG2d(BLHi!~EjcPip_W#>sDmud$mw2T8XGOxU!g9n}ofV^W zrKj;@oD~(_%@_e**;$cLx$ducEJn$@?tOS%?YWE5fb@K=sE|;3PrnO=gj#z&e(+d~ zQaSqk`K+jr(9>0qA0!y1a=m^|g@pAIc+TWe=Uf>C}}l?N3PUcXbC--OtQtWga9LrS}1M{O;$IXm!xf_EK63Bx zn4+jyD_9X0E`kaPe`8VAg9M{^w)3^(ae0QmTd4A&Lc;d}eIaXZ^^Tgy>I7I|8lTbOLd?!!kL1jtQEs=!E5vATIo|RGa zt?q~VsCd@A@A9{iCDH2Qdy3*%OJcQFWF9=0$`Qr09cN`8JS*>az5k%!Oi&@AKELka zNH9u!ilRrIJ*e<^Wq2ebTCMf7J?0$8W@ItqyrLO03C#dw?3&Mt^D9Pa#yMq0TRW+C zR#a^E8own}omHcJP90a#&#K=KBg!}1P)O*CM0>01;m2Z>=62EE#?`g6(u^!xxXjm|Re!mflTe-Nbxt0OQFh(RRZG@fbH>q^*lfA%OQ4YO zd1*yZA))zW^pE3OwJW?mCc!A5msTEBNcdc|8b3%d%4eCC2Ne=NXRHV+OQNnh36&#C zbJQ5y=W9h}NyOdUPl%2ve=}9pg9-_MYg7?bNa#&SJZbY;kzkbGqfAfjcm_!@%HIK1 zXGMjC-cs%9OSDRM$&bY-e@j)(MXBgLQ}lN9o@-8pguiF1>OqBs-cr>g4hcr>e}Cn_ zcjc?z{(D}&M!y=P#{Hl|!uQrzdksi1%6H~g1Qi>dd#}bLEv~NZ`1Sskgk}bNdQlLJ z;*4YV;H;Q)U;iC}>JCzw2>VTfmm`!L#Eu>RU59E%3KbH{MPl@s>p_B1{yQ6$2Ne>^ zuj;Eyf>HjvCzS^k5|-(eqZ$cD`R~wF?TQKs<)8Il91@K3-vz2XsE|+|UGK#q!6^To zrp3-08#$>=g#G5zg4k-TC1LLa`i>oW$DWzFl~5rezZGE~Bp9V@7<*=B4=N;d-ByHo zkYJRxh2_o~yH-?4*!^D;=0So{YSXc2X08Vn5^BdQ!aPVYO3!BOnVCJPkkIq^@&u!N zXTSd@`|LqwB3e%ryKMFo>U|4%rC*rzm{D}Mf%El-XHeM}TqP1Nfi%}XMSI>tLRHm^VqupE& zjcTK|_FFK1Mfca7iblA&=WL;~2WPLGWoiZ(Biu|-nFw3$Ek{lq%U5_kN;ANE9Hc_R z*PyF0iUgxHXROCTDkOX@z49QzD4TJX;~*6hz9*paAi*fjGV5`W3JKraP>q8m7^Qh> zJq}VK;d?YH4-$;>ohplQ(4Q#Vk>bik*zS}CVLdgER)l$wV3f6mviG4v!tVc)Fb@)pQk#zcaemIJkWf2b5#~XHQF=C`Kb}3P zkkIqEBFuvXqkPS~9Ha1!l$p@}yK;;Iq24E=)Z0aWJnCU*MMYV0jAXCutR@1xLWjpj z^F+Qw@>OJi?)c7WCa93`73}J%CBZ0P884qfTQhe>L_9@2(*Cm|p)*`PA69c7i&1t( z%GORr@8P1o@<{v7iiF<#ty<#htQe&?deLHrhqV$adcziNsXQwuv|ih1NP4&Q-L)$c z8t21roR!xDt({RC=l9eD3ZKViYv1}eyqb&8miQg751cH&>7}z;6Sh0H&ybRcr?!9j z>sS^s_pzvHmZ@)ux!?F!m=ip1LHIu8=5ai}N7ldAV;;S1XV~Aj>)*{I2`Jo`gkbo@KN z{M&EUS^e?%ef#h|TYY=uXcuL_Zr|>|oq4n%HWyQ=2tTXt@r2bJM9_*7{pds5TMG{( zs8ob|{MC=$fBe_~_pf|0>Ji5ZT2a6G>`R9qx?g*p0u(c~3 zD`-Xi?pt0wy!DyzAVH-f+(T_jEkzzAqO7PdAAjrclh@wc>p_A_MYuZyvkG<^$+z%2|D#AV5 z9lR~>If*DMYV$|Wqg|1pQW5UaTH-;pT@q1N)L-8HJf05{R4T$fI1ZACvZAhg)$@GL z{VSW+N~lys_jvrD9q6f2yCM-~Mg6-!cnU72zJOr61_2k_U+>D{6B`yH>U*wU1GQpi&W& zhsN41i6}=sVhpy?Ssq5{xS>>pd-R&$CJz!(R+O&7BM;xz`zsPuD#AVb9W)OTQC5`Q z&BwHpypMxwB}P!G2>0kM@j&$;5oJZGRetrUpX(kZs8mGv$nVx}Nkmyudb;ksFg!p| zsR;MzJ%iPQM3fb!UgG8t-_h$qf=WfWNAKaxgG7`SrQYtz3*kY6N=3Lw@2Sm$M3fb! zUi;l&|Jhy-5>zU}J^F}a9wefyC>wot;X#5*MGOy(wen~=j=lrw$BMF|G>T?D)GGu* zr6SxzeU+XnS&)dbqBI-G`$2+AMYxChTs?>KAQ5FnX;zc%iUgI4a1V_gdaC3>BFc)= z>@1%T5>zU}J(#PJh_a$I%fxez?2bxBbPu0XTRlibSy47y9{p9TwPxW)P^k#_X!k<7 zfqJ+Ni6|>dv;ORNNl>W>_h@bESWlHaNJLpt%3flW7&(p+R4T$fbZr0G9z-UjKHS$o zJU@#p%=`9;Zyogkm5CVNu+?a=kH~N1x}X0x2Z*gacwC;Luhv8c**sdbezpfxNa!kL zKIqY+W`a?^ZWI}0C(MHi3A>vkAEXBfM)_)1%x@L3)s|a*xuOxH_u_wyQh7X@9h1l&=q0XGMjC#`e|K zH4hSu@)hjLg9-`FQR4oOR$?9`80Bl}l?N3Pnrp3EyI(6?m-k~a%2)WSCyELQ%^6ou zt$C1OlU!>@W#^B}<}-#LPwx<%_}dq9PRa*=qW zH{Wv-jPe~Yl?N3PzAr~#W?%JJ;~U6FyNQ_cL9c_?gU5F96{u_?VdQc$|S=hSfBp79P)_xCi=|P1=WMOL$5{yy{_1~OadQc$|S=icx1f%q% z`R`pWJ*bd~ENtyTf>FMYFfw7@K`Ik5<%9c($klWv>iPWl?w0kSLL#!Tbv;NhNOU(tu#j2?^OC275SNuU6Bt?*9ruqBBvT>wRNhGgWZEs8nx@1 zQy~#K)!Ksuqcr=d?;sTtkyEWbNH9vXDF1!ld_LZkYElskAox_rEF;$afSyK z63pS|^}!_0EFX;HX5MzTTpt{H-#$VuQL7Ak%VN(Vh&(RyPk0!S`C$7h)1XPnqvy_F zln03{AMG+vlm`haH6f3l(VGW}EFbMM>yrlwDm5XG{$}D>^&pYuqg`fw@*qK_Cd>n? zeI&Acw9Bl|JU~#X33>E4MOF_ISw7lj)+Y}VRBA#V{f(D-kjV1U^w+>9q^3c00JymMEB(m%?nf!7KiOlZKa3&<=p?7e4s^mc;%k5f?98UEhL8T_-p*Mqi zs^mc;%SXG+;p9PrN=?Xv>w_e+e6-6PP97wv)P#9pwU0!Wk9L{EnFk0eH6f37FUI;H zi7X%OGKZ4~2`V)qkJhHf`XGrcd*&5iqnU}!2hVUOB;>*MK@wSR?P}zSss{-wH31J_ zAH=beW(EllBXnFJkz0Q?XcF@1*Gg}MwS1J#2>mi_tgd7`cr3ANWyYQj9Q+D9VG{+!2`d&V%0^lLTN2T5ev z=OuB~$DF}DG*1YnCgjoX;8-6dk>z%+Mn0%(MS@CA$fLF0Tpz@-lJPruPKlWddpi&X;(OcrNE)|I=E9w)^Ts+K`1`<>%qI)2_BN1gqz3KXkSTX5Ot(_H> zig1tKm#m1O6}7qJ^;r2KL8T(xqxW#;K_beE`q2H?UF_ z>dp%n_?%zU} zJ$jB~9wefysCR$;)fhiWP^k#_&^%O6mHJ&0QC8Gu_v(2Z90Zk$m^?IcZb?Kr>Jek` z$T^MBaYLyH_vkghO&%notSDWD+_yx6N=3Lwzk}vMBFc)gyE*n>k)To$?$KM~f$Bjb z%8F8}#6B`)kW?z7dmtYq5oJZ`>B{|Z{i(IHqEZp=(R+p!5wxPzOXR*j5>zU}J$esk z9wefyDD`%^Kam8Lig1tKQ=12gC@V_6cC6#g`5={waF0IXmxAfXZd`Ppi&X;!F-TJloh2}CZ2Qb7o}1W-2?d`i6|?|X3L|$ z>T_zlgH$TQJz5Vp@<9?&R+MJ_+3%8|QW5Uadg^06hiZu=qO2%oFEL8Y`5={wa1R~Z zf3^pa326n?zhBe$i%$7q#J7&R?L5m&aU#ZFAXm=0kI27M?tZZzIf$)1cwC;LfBgnK zgj%$Iwg*&5=qjvsI&GH(qx|bP)ov;(BNeB-AQ1A5@*&&sOyy z!6^S4N##L>gr2U|4m$H7!6^UwNx4gJ{5|2L-9$|JpeoURwyFn@rM@Kg3;Oq2Di10o z)Z49gG@1tqM(G>B{+9%nZI=oO_1deQndU))Q9hPb^`NpM>iweQZx**Vf-3hYjftzX z(gi-C2cz`e>bmAsNN8+dU0w4a!6^T0U{%ejkkA|@?*Hf+%!34@{I8l-9#lwZuC;3I zeyzseLO$9t%KtiB^+Zu2p*iE~sWlH0jPk!SS9wq&VRPSQ?_(Y$80CL0ukxTmLUZ_4 zFKQkn80CNU4?T5@*3b5U3JK*R`F7Bw*94>duNPJxR7m9C7G6H*R3>7|2YFT`B3IKW zD(}^(W;LfmLVh`((}M(~bPfI8^0FRONJJJkb~<$%zaMcdM%kUUcjQYCDkLHcTYHdT zlv=32>tA|MArV>F+Jgk6^rZQk#nOWciO9m%9wZp0K4#A@Jtz|~<%7KEJXYjtIurGL z^=?BdBq9r2*MkJ3{I3{PdpW6)h%9XFL4r{}UR54cR>a5$r)yUSl+Dh|9*zo$$f?#IBp9WfB zdG14kQOcI45odT%A;BDOULQ>2%<{oFZsu)gixovGNw<0Fln-*XFO{#UZ=839D&$f-AQWF|KdPct@l0MpH)+Y}VRBA#VTw_e+e6-7~&pbd-sR?=XH$}(ldr4%uwUUu1%7X-znvh3-<7FNsvV645tWO>! zsMLf!`kOoRAd%&xU1ojqAVH-jgJ(Ds67t~sAc-uuc6F)!1^e+g4oOg{ z33&MWAdZzZGe}*l?qP(E>m%|R&V&T6)otw&+>*$$-;daxG_I}@x}u@fggp8kToFn4 zb~W~2k+A#Rm70(T*9S>t*`E)eC+b>}PotgCw%-&w1>68_(c@uCAWDP-;RR zy=PbvNqc`4yFzC|{YNM@A&=g}nFon1GlSH%BB6dT_9xbaJbK@59wf5t<45eKoC%Ep zq11#txIRcC%k5f?tWWhIL8T_T$Gkph`CxmZ#&LZ-kFyAPyV zUldA3_!?yQctRdLR+JSbI^PJBpi&X;(XZ7PWkDj!ihAo3mD{AxDjVHPCLxM_0xJU03&4Wag74^u&H=X1P76~d9;U3KHNJLpt@7dmb zk}Gi}s8ob|FuNlWWkva4)T;N3>hF2EQW3*rWOqDPloj>pLvKbs`dDjMmr6yr2lGJ^ zQC8H4?!N{1g9Md|aF0Hdv9lr(Wkqf7xE1Y+1eJ<#k3NUT_zVIhBfVk3Q44K9NL}6?N+~ zKZ<^r1eJ<#4`z2HqO7P-Ui(&zA0(($gnRVN%f=`YQC8IE(p%?oF!zf>sffwLvO69t z%2AIPgXeru#|@<-+@sfAbA~O6C@V@=A@?njpi&X;(eI#nkchIP>~4Zx^dhOh2NrFm6xCgU45>Zx^jXq<2kOY;A z7#_$6+sGN;7q!0<^0SAE(kPns=%cf0zM&F+B;2FbeB^^9qO2&*2J(K8pi&X;(eB{L z2T4R(QJU3cyCOlQBHW|3#N026V+E}!&Cc@qAVH-f+=KZbi6|>dvrIha*e^<@BDx3i zK@w3`l+Bh$f7R#IcF(C)gnP6eZsda`qO2&*`m^69L8T(xqxIBdzbJ_)D@xf*j1qGO zNu?s(L#^C@wg-_3X$ACC@3^u3J*U236j|TAY8m<2inw$mM$T|(UHbuv4Wi^1>yg7_ zD}rajGkoI*Z)|@J3Oj^aw0^YfB^4673YiajwC_(O!Kep5+v;(#-c6MX3A>xi9a~$S z6_3TJPoKM~{WYk{g9-_?%FG8@4-$;J;hvk?UxTVVsF2XpmH8k&NHA*i^iA#WJk`7O zQkjU>$7DW84<1W>NkrXu*Ucxsx}qckS2&dRP8-5KS7MXNe1DkL@H4hSu^1rW#p1MWrM?3rV7yVozp2 z4tn&OV3hxzz{-OP3IFSb<@ZH*w~o=dnv-CZ zuA#qMUiOJpNJJJkb~<$%zaMcdM%kUUcjQYCDkLHcTYHdTlv=32>tA|MArV>F+Jgk6 z^rZQk#nOWciO9m%9wZp$e{HqirFY9o>?ECtDIerL=dmJJ)0wE}+qc^=6%vt!t?R*K zF-kqSuZ1nI6%`VZg{?hEFv`cP@>*#e9D6x4&-AgY{Jtm%Mnz6F&T8vdSo=lOgHal_ z>zY#`5joY`g9M{A`>5|A6%vtCtvyIEO0%eFZ;Sp43W><6)*d_-qcj_=pC~FMG|SBF zuHB1qKS(f2v)a06ph6;Ys&zd`Fv@1&u}Iruo%>c2;`sLa7OP^qyfwB<=lG?&~9={v(u{kVo&~%!5RhnL+AWkx)Mv`x9$I9=)eF z4-#4S(I9qH&V>5&P-;RRT*`1F#k=$$gi;goXm@a|50c1oyH+FXJ6jM`YC;~ZCFc4d zj+L~}6XPkE3C-I=sR?;-eULJ_iOx5|B&bw`doa5r5oJYP_mRs^^UXF1 zDiz@#{hr&rghZ4T^%K98%jmEN3Xf&3|kUWR+O$n?pq>3r6Sy;-$C;r z5oJZ$-5mR`NKmN=_vkJ0K=mLIWksn~=1KzzDizT^kPniGvZC~K<$k#S)Y@55sR;Mz zJ;RC!T2bmHa$g?_Diz@#y@xXo5>Zx^db`}8NPtBcgCwG?D9!q_-z7n%BHW|()MLLWi6|>d z*-MNPb3RC=BHTl*+<&$QkqK!9^xE$|cRKcqBI}!1Eh9f$5m&TlbBvtf(7N^m5*tLx zFV-W6$5sT-glG7xuRV7fdyVGRS1KfQ6*3=;YRiKJqrUOOtsdomQ7RzR>;0lsNT^k2K1dG|jQWY6Id@v`7o|c%PgmxH^dP~g%>(C7_v{yiG7(cgNDm%M zeMw}EfA;I=PV4=mR7j||%Y2X?BpCJQzjy95*StE>{ctgIgNVAM62pWjn+DkLxddi=fT_dHQlNNCQudTPys1fzcXq4Rrs1}Y?M z?z`-L%!34@-tcSZ_w;a7NN5hf>P5|i1fzcGljrB2x<%_}dq9PRa*=#H=+SF}QGarD zevDUhE1^PS^SM^@dW?cH5y;_Y4<0LWHI0e#UX5y2b1Ed{m*Y8WPJ&UohW>6@?{`U1 zArV>F*y+?EzaMcdM%kUUcjQYCDkLHcTYHdTlv=32>tA|MArV>F+Jgk6^rZQk#nOWc ziO9m%9wZp0-e=D)Jtz|~<%7I~JXYjtIurGL^=?BdBq9r2*MkJ3)Pu(w+uW|Gkccd7 z?LmT3K3g{3g!5gckyDMc+B((dq97QhQM;}=6%vtCtvyIE zO0$pp4pJczIn~;O1fw*I+S3xDkcgaW?ZIO)O0&WGiK0Rxa;mil2}WsFTlWl9NJLJx z_8`G1o1K?E92F9gQ>{HnFiKfQ^se?qjh0A-1ar9g86?4|RUS1wsE}YrHm?sRac22o zjAWU&oh?=rsU+Q2s*&jp4__Y~%GnepI`{iN4xxYdGt3$R*zK9rl`#NIBZQfci9QJMA0 zg9MeDP(AvaJM$os<)d9@eexhdr6%OT^+6I@ZZ+4~)%SSL1eKcT9`pKOKUUI5yUgKK z53UbVsR?wHi5`>Oq1^O~|9Q#N026 zV{eULI(zR~y^N=@`@HP#17Wcg^P*+5+NF=sFjDm5XG zb_d7$Ac-uuYc;aIvjst=Cgjm)WOi00vh1_IcnW4h^R`fGLLOWnB#~vGy~fi#6Pka9 zQWNHZ^+6I@?z8aGU-db))!gRMU8xCqv>tA(50c2TXA{x8&V=%TP-;RRJ!4V7yCIQf zU&o74VkVT=gi;go=$V&BoXsD9-?tB6^~}%il<`JctB9M6-#*-IF517(1eJ>LHArT6 zB%-V+(SLE>?%1zU}J^Hn>IRl9(E9y6&ed+KUzxqAhg9Md|aF2e^&4Wag74_aH zUTW8BcbnIP1eJ<#4`z2HqO7Q|{NhW84_x_g58Q(Um5S&d$nHo)Sy5MB_0r+@eC65j z070c9+@tp;$7)w3qO7RR=UzPg@NZvp$?HLaN=3Lw?-R{~M3fcvyKi~%@MB-TrF)Q| zQW5UK?2bf~74_xgZyo;k_y2hJAVH-f+=KZbi6|>-bLm^HUESV2NKmPW;gR_ujuo_` zuHU_YdN3cPQW5UaX8?9TNJLptKlZj4a6d>;sR;MzGa2(B5oJYf{^)tMD-u*H!ae#N z&f67^6||!M^6uyHe2}105$?h4jzp9db=|9;=W~wzqEsrPdmy_b5oJaFyFYji{Z*e+ zTg|CdgnRUvzV(SDqO7R99(fM^E(t0X;T}E5F%J?^R@9H&`y9p(5>zU}J(%5*h_a$K zcj#JS9L(>FLaB(!!}CE9aong!jKL%4G(yJ>r6Sy;*Zj8D?QTg#Sy8$Qzw+1rYUlkf z2`Uxg9{moQ2Z<;v%I{|T{kt}om@`N!72zJeB_60AB%-V+waRb&<0rcZ2`UxQJ&+HQ zh_a&ebp64ze-<7fs8ob|^q#@$K_beEQZI4%&Tn=P5>zU}J$esk9wefyDD`%4f98L6 z4-!-=!aaIVZ5|||tSI%`*Zs!1|K|6c1eJ<#59Wg;qO2$%eJ<}FB&bxx@W_17#z8+; z(2CM1n)T>ot!loZQW5UaYCiHo5>Zx^W&?RYNKmN=_h@%;CHmfL-q!o8I3;=TxIDwZdh*4? zTfXr5p4~NK>(usu3JG0>%m?W~f>Ce#kE+KV=@HNY6%u|oBOi=#)q@11{_`)tczAO6 zAAfOub*Ye0tIT|m9wZob_dj{@@Lzo9+TUM$P$8kGEAv5mkYLp2iWd)GxZ<~ZCftek zpVmsCOhoHrG9RP|3H2or_4Y4+>+t;7{&vq&=|P2rdb`XA=|O@~Z+-Y%hyUPRHxwRJ zNT}D&e2^X_80BNhrNV>CnuvUm9wfZ%Q5q9hXVt)VKWrRycSfDO@WP&&Qz4E#jug}jtb&J-| z_J9frfR3-vB-0VRjay9j}@?MQ+4In9F#iO9m%qX7v<`JMfh!h;Hl$imhhBp9U@`fGpsuL}<< zBq9r2dyrt1p0pqSPyfE~ph6D~));$9i5|LA_JxDOhXXjN9M}RBI0sj8c{{_0*#!QX#<{ZXR(+ zFlv=Y4G$_Ln8VGheMy{IJ{Tie=51$-6-6pZYgM25AXocRIh&$Hd;STJC-me}NqWv$ zM<#6VkV$0uXqQ=^JbJcm1eKcTZ#lIlydsi5+GW-!kNyt82r4xpkN#%jST!e+<)d9@ zeexhdr6$Y+t9>N0e6-7~&pbd-sR?=XH$_$t5?OAor1eUkLCS*!m70)8f8%8yB(i+8 z%dAfxB&gJcJo=kE^B|Gsqg`fw@*qK_CgjoIK$-`MEVpYlayWUApi&dvW3fJ{e6T%( zIFI-`0kYEr~4q{qT8-JV@w@hEfyq=y%XONMt$M zmF8FSAmR7fm70(TSNlk0*`E)eC(46_+G{8^VIElRBavl)&V9aX9w7AGg;Epp=sm-M z?gxo1dw=Egc6pFc{}D<}$fNgg=0PIM%pm1KLj9m;Caql!KN9ljJ+*m|$g+W>_vqKk<_sjFtSJ4aX1>`bL8T(xqu+D$AQ5Fn*>9Yd z`$ef#gnKZ%BN1gq={IL{rGW&Mis&B5?np#gQTh$wTrufS?Xg-3m5OkW-j}S1pcSRx zWX_cz5>zU}J$esk9wefyDE&ruu3(X%QW5Ua`*!mn5oJZ`H_LM+js%s8a1Um8B%-V+ z`)!4Kzo>q*uqzcYJVtiMV?|j}`n~jQ*<6sm+5*MYu06&jBFc)=cSf?`B|)Vk+@ohK=0PILiqiK| za{M4cr6Sy;jW}cXCy6L4%D(%;ac~e+Dq`~Rd{Ez}>BkB>>Jek`$T^MBaYLyH_vkgh zt##D)ebFF-R+O$n?pq>3r6Sy;-$C;r5oJaB-HiQLB&bw`d-Rrgpn8yqvZB-~v5(AK zyAf0>qI)2_BN1gq>FLV-aQ&$@4=NSm9=&H+5kV_Ty+rQoBSEDi+@tq!=0PILic)Wv z`x8k}sR;MzJ+*m|h_a&8Yv(>o5>zU}J(%5*h_a%5^ojLB5>zT;cw|0kBWK?)+RKX4 zD4O-?qqAym-xm!f{7AS*tNF+Wd8{ZaO0$8yA0(($gnP6*IPyUfQC5^@HQBC6P^k#_ zXe}}GK^!Y+MQL`H&j$%A72zJt2T4R(QJQ7qImdocDizT^kPniGvZ8#p9Q{?FQ`ycw+bSn=YH*z(t(du_1>;0lsNa!l$ zydPh>qvFiO8`TkjX8LPAeh z&UfiSf>HXN;XV6Bp-jY-57L9jQeP6Yd;RWny+nGrLQ9FX^BusXs)$t?S8F5FiKx{sGle*Bs6DSJ+HWP zMcp${A>ni1Mek!CBp791+bDZDDkL5l)m-Sm5D$OH+%3{k*n$4<-Ho!tmafm$S=q9UhNgZC|zBD zx2*TOB&d*xEUdn|aV$ppoz*+?r3V!fk%j%u1f$eK{aydkg9?er!qy%n7^Nr8*DRJE zR7gY?w)P;wDD^&jcIiQxh$$cB9ptehSJRoO=c{)cQXvsp*t#Ah7^NQE*TR<9iVBIy z!qy%n808~TxnI=AC|A}*{HnFiNwJ z`VLYd5joY`g9M{Ai`vr?p^%82YVE;eF-o(+`iY`KB66y=2MI=LR$KQBR7gZlwe}#v zD4(5IJscGhkyEWbNH9uSM)a=MQ;(KNg#>fBxo;=IC}m62h%-E>kcc%luLoEAlJM_x z#&I)mJ6o(MQb}4X)yxOE+LuaOqeqnJ-0wqzN=>N0>bbMMLne`BW{|1}iOdJR<}tI# zf0swk=*=S)|GsF zD*k=Zn15#0XC7Elq>{9MX)0&P{Y}xa`d$)QZmp#CN_+N;La7PWqrdSo4<0Ma{vEH} zpGYF}!PXLo9|?K%H+SYiBFp|gGS8!Qtw>}(cxGP|i%cm0T^{`nqw~GB*>_9hInNwU_2{cIRu3vk_b*3| z{;KtG2YRaXoRi41f6vnUM|qIQO!3UWblQ)b|E_xU6)f{e#lIFB{cdJ`@*qJaY0uT7 zpC2o6wugm8mRlAF*3(Ce&U-sR{GI z`XGrc`*R+<-o{gFXO;P&KT$Db&3~6i?-^DEqtvg&uF#pFQWNs%J)C)v$TBm?vjw4k zF!m?bggkmrZ5|}D?Bhr5rksh)2fe3`Oep_d9(}|yk5qg#i2TgQE8pWe6I7CJPpyq` zk#qKuQy!aC+7pE+jiOl(5>#rUU#qb`NFvKV%ZRH!<_vaLnceveAZnifE)Vs&da6{7 zRD6~ZS68!|Y*!?xB;BsnAmqW-zEs+^LX>7_`FxO|QWNsv`XGrc`+PT^=9$p^GnASz z53CQ8$a2iWqrd8NYP-5V^LC{stW9f>F_ zO7wfS_skwPI#a0#_vqKk<_sjFtSJ4a<|7Zkzk86NQW5Ua@40!9h_a&WH%=dWU-uwE zr6Sye*&T@}D@wmP`_-rJ?j9tlR7Cecc1I%0iqdZY-+5tpfS^(l?$LXOW3?+1QC5_G zllkTkzqi+e1eJ<#kKV(X2Z<;vO23i)Zx^zCV!n zg9Md|aF2EeM?Od*%8Jr=6tZ2Bpi&X;(OP2u{veJOw4(Gqh?xSyB34N{$~Ss8ob|FuNlWWkuO{UpNlteo=jCrYjXOd3ZhuB90sNh%tE1Aa&eO zD#AT_&2MYB!@e&XM9_-TRrt{TztHzU}J^CFq4-!#Ul-R; z^&k;tMX6Q3>H2@!JxEZgi0*-WkVKRfrKjr?&kPR`R4T$fde30>AQ5Fnsh9ZDga22r z2MH<_;U2w*GY=9`R+M_XTb~IJ5>zU}J$g@V9wefyDD~Q(y!O6c4-!-=!ae$kV;&@; ztSB3OE`(R$rot1rGG?a>Pk5==M5As-1R+MG~c|S-{ zsR;K_pR1=zXGJ2)iqfnm+Z72a72zJOCFXun94lx=X?B*+2MH<_;U3HfNkmyunq}fS z$9_>N712GA50Z$oqHMN2`l~*twyR5}BHW|hi;)kKh_a$I>(73d1eJ<#kJeKk>#5Q` zClO^uDSL@Nf6fP~RD^rz*#6_+7mYDhzkT?TZ+dJ9f)9#lxERpvaA9wZp0-?jbpxypkI2|Zmo-=zl$ zM(KBkANXu!!kuXUY4;q;M6^C8=k4?$p}r)d^t;b*{9xrlg@k&$%s=Qsf>HV%?oYj= z@}NROy>{kN^dP|~A4@6^Dl1~-gY+O_LPK-JyP>sF2W{arM-i z2MI>$D;0ImK!t?OeV4tDd5~a~eQl%c;i!<%9Ddb{ng8l~pAJ2D?3W><6)*}uH zM(OJ(F<#9cR7lu2S?V!LUu)^gL?DNoJ$S6h)pYLiUX5yYt*DTYUykQ3wEt`mNH9uQ zUSl+Dh|9*zo$$f?#IBp9WPC3;sIKSoQWLV`KmJmQdG)GCh}9#lv$ zhnrXXlJM_~#z>ZV+u348kxJ59qh~%itq%@GYxEf<+Q)Nv*!m!qn!sABy+bCEWoD4_ z=-IXrnOl0zV`h>6E{~qkuLwqE)+Y}VRBA#V{msO&`YaMzKCQAUGo5u`QSc69{o*`)q_NqTPtb3lF!@aL4rz6$fLjUG7l12 z_V0Lk{vi(%nGd#>IL?HGJo=kE^B|FB{~np=QSu;>`QVv-=`=E-{C9cuH<0F$%9(w) zH1e~|;p9PrO49A>BI_GFYy4UbrPX|t{rhlPkN)n}h|KQx5&c??-Jc|~>@%6XA9~xR z=TNOZvpfI3Xw*FaT^{WYj`hJ*&TNJhS2y!PT`Lk)l5W=uS>M>P<=1K`t>&Zb-yO{7 zqqW_!qL|s;K0@{2`XGrc`}Y&^oMU}3v%53<(rIL-`S0d|^}$rm?7O9rXJ!tkYt`3S ztmagb?q7}^8D#6>#`++MEc^E?Js*?@iOlZK{7a|(xcTp@M_<9Rem52WT4>~%nf1wo z1eK&cSBrjrti;)fLn6zqm5e-59$ZnRQWL62CwzSn$4Z(RBs`4JaeYK??P|~@ zTYI4F`=UW4?f1jyCGsGl>k~>%$fMsu^B|Gs-b!qKB@YtTGP+U|^5`w`K=mMzWq&?= zo+u9zYOkTxgn3}Kk3^RJIrsUld4R}#(4VN7vF5+aqxTF}k5v4rjd`^C6`!}ug9MeN zTT2{-JbDjj9;tZm6ZwF8JI_DlL4r!s%bc_K)aF4V%RYX19wiSFnGbqT9hp%6yXw(L z9P>!UM}x@EY`n4@P97wvB;BqR^29N6%43sCyH<$OD4O-?W33TXYC`qsGk_J5w9hi~ zevruQ&SwBo^Za*tv^zM~2UGD`MqFLZYO-CCpptaER)dg7pON{s8cMrXqwMp zC$D|OcsChkts-tNy z^Zj_UO@c~AxJSR|=0PILiu%%n-+#CnZ|F%-sR;MzE%8|QgG7`S^@(RLVx@rum5S&d z$nHo)Sy6Ag{vuXP`crFXMWrI#qxTFeB4|Zz?sz>`en?QM2>0kcoOzIlvZ6k8|20^_ zB0;4h+@tr@=0PILihA^+*I^}&1eJ<#k3Qm<2Z<;vYO{Uq*yA}yHLp38iWnYa_a~1P zWktPb`x?}vkG1AOr6Sy;)qG@kB%-XSM;^W!_k#qLig1s12S+|gBFc)|Ja!e@6$vU8 z;U29ej_i&^loj>Wr!L_6AVH-f+=KZbi6|@T&I=d#oFgBkQW4z)`5=iXE9&MCUy1&z z&#CR6Q>h5|=reum6G=o_QBPjD68$a-Diz@#J!3Hs5>ZyvyTATwj2|SZRD^plyCV^0 zMQwJkp2xx5FAAk1CJ)aCLBw&R9=Sfq3{uApr6Sy;*Zj6Nd~8WXSy8$Qxo?RCm5OkW zeh1BiM3fa}cXRB&B0;4h+@rU|1J#2>loh2`iG5_=+Kr%65#0mX9f>F_N>5krhwD$R zc~Gec_vk&tiU?X!>Lqet9|wpo`XC7^6)`+=zoAM`R?v#l>@1%T5>zU}J(v%Y zh_a$I%fxez{i0MVqI)18BoSpr*=%|ASA9-xcaTa&xJT>ZMm|U)%8JsgKl@!0R4T$f zT2DRlK@w3`l(Lr?CFXpPN=3MbTDkvh4@M|A^{k#il>(usu3JG0>)lR2I%><(!zP;6BybJGV z)&8?RphCj#=Ew&-VICwH_0I2Hvu9Tr6%uNdtDR@&L4r|Fef*j|yW6Oc(9^ZrL1!K$ z7`3^0&AwfFP$r`FF{_<`=D}mBFNvs+J^H#myA7$3P;a-|(P$nd81>*4uiLY0k_rj+ z+N+(J=0So{K9-dGMQvPiWkuBcMM2ncdz8k+)md%q83e(ok9_krdumRFgvR#O)in$E zYaS#R_33k0@97z+kg&P$viC6$5{!D_vsdlu;i!<%9Ddb{ng;y*6%vt!t;cf`jIujB-i7n5sE~*(Z0$jUQEH*_wtl|4R7gY? zw)P;wC_QPhhA?|jArV>F+Jgk6)ceG$-0VSRBBp$hSC>TOYC043e6b2Ndr%<}S=hQB zBp9V0Jl3XW4=N-g3tM}TV3dzn<$h6(QGGAxiWvFebge){uBJ1IoNAoa)~PlZ1;Hqd z+I7vTkcgaW?LmT3ntjxFkP3;&sn#AO7^PX%o|XuOMC4R!4<3tAnhn-Z6crMYQ>{Hn zFiNx9x@Vw5B66y=2MI>m?7ZyZsE~-9YVARSQOZlEo_e%IDkPZ0&CehSMy>Lw;X#E2 zGqSM~XX}GWoLN2?BU$EcXNwg@DoM9>XJmTA!&duJY3t625?${XrBV|b2Yc>p?~qAk z`DmAUqUu3{N=?Y4XY}SlBFjg+%=+X(f=W%ugR6ZcvV645tWO>!sMLgcV11B8mfPQ9 z85yK`fS^(n^5}1hj@9>)$Z~5XBTtkE2`V)qkN(EXJV<2uXqQ=^JV;Qf33>E4cjiGN z%SXG+`s6`^N=?Y4zkxIl5?OB7YUFV8AVH-jy2rdecu6^Ddj`jGk9L{Eb&o+%sR?L zL8T_-!Sz8BSw7lj4kr&1RBFOJus%p4%SXG+;miXBm70)8>*2Rsr6%OjdxjN}wD(uJuaAWKk5Fnt9=(S% z4-#2s26?t1)DOna#hQ>u@7v9TM3#O0$bFV1Gy;TD6Y}6{ABiltYc+B>)q@0;n&=+$ z`e5ICnzWDSakgWuRn0dVUqh*heyzT!=Wt0R?emhj>SNAegyspM)Py|xOlCzS-LBQh z`gE;GP^k%dw3e9bgE&^wK2MCNU?wzg3#BIH!Sz8BS@!vEJk2wq`DZ9KVIEi?B$4Gl zZy)^?*9UDL-Ibbr5yg2&E?E(c08lA0&}wU&o74VkVT=gi;go zXrtP(o+`E7cYpo5lXy27WvwD^cGsQcn^Y21D#F(wJJIvOJXX+(5}j{^Nl>W>_vqKk z<_sjFtf(h1Tz`^pwn0ms+&oA`Sy4BC`1+H2zbKW8a1Um8B%-XSJ1^XDk}C}) zs8mGvKz2tW%8L5xQ#YLCib;QJkJU=3RD^rQWyyj3U zVt9<~j>n3!q8@$d&8SBoYt4g7MYu-bLp+~I5-F@6)}1Ad@zp{bkrlp;E{70q2q>95$@4zep|a# zTM|)Ll&(VVTOvWFBHW|jLGvIHWkuQD9Q&_GP^k#_=q>R;^&k;tMX6O{9~tsNDizT^ zkPniGvZC~K<$k#S)Y@55sR;MzJ;RC!T2bmHa$g?_Diz@#y@xXo5>Zx^db`}8NPZ|lrEs3BNrP)B<4-!-=!adp@{Gy&Jd60;*qBN_?c140pMYu<6iJ1@L zSV1dFv$K3YNKmN=_h3FqBFc)=EECT;_KQ-fi0*-WkVKRfWwYhcU-db)U0o^_;U4W? zjC_zploh2}fA+g1s8ob|v^F*JK@w3`l(Lr?CFXpPN=3Mb+LQlm4^#CBsPc=9qW-}Wppco$K@Hm@q;&>#McCjXwmx7o}yGp z=qhAB=+XXtQ4)-L;IpkB<$h5rB2o)o#Md20&8;3(NT^k2KFE5I zVAKuw+;kG(oR~eRkkHeW`5-+=FlzJkO(%Q4>Ih{bS|5}7AU$|2^(7H?-(5GK#8*S+ zdQc&u-Y)Y&dXQk$N4|OUNqoy>_Mk#Sy>{k<^dP|~A4}@}q8gW6SrL2oizZ>m?NJ&N zS7+5uPWxn%VAO+Gym?Q}sgTgvzPh^RL4r{qd-TnF?jRKsnxn-1pYI0=Mr|(MvacmV zA)&d}sP-KK7PxdCyELQ%^6out$C1O)H}a(%buQr3JIJ0E_)yIAi=1IZ@+a< z4@ZTB=J2at)I3Nq>T4gpb?&KKw0^d2XMZXrl#66`XTkPAGr_2LJ$~yLujW=lg~Vpp zYF_Ubg)$LSKFG7;u_9N~Xesa2sMbLJ7DOr}-{bXDkLHcTaV`? z7-e_X-jOdosE~*(Z0$jUQEH+7u7Bx4g+ydwYY!5P(v#+E7E2E*Bq9r2dyrt1dY^r} z^ir9KDIeq=qLEXLv)Ve<$HDHwD2>{6&8d)xoNDbsf>D}%)OU~y ziO8we9wZp0S=64E2!%xCRBI0&i&2^l)=v}_5}IXZcGvF3xE~}KrCDv=Gf*KBIn}xz zBp7A0^RkDdLLzdiwFe1CDa)98>QQqlB$&g^eLD$8t@5bhL4^b}vUzaPlBQ zC261gl_v=6+EeD{1YMiF{BVB&gJcJh(ncBFow* z6ZxP#NKmN>^T7Hbi7acMOyq;+0fI_R$fNaeW4|bgENh=kWPS1=L8T_-(O0mn-zAY{ z&%AQ{Ad>8P0@+Jh(ncBFn8^jXY8HAVH-j;Nk0oI9AfkAmL$zjvM=ZYC;~p=C`$O zcS|D6em`P&(oE=zhEfyq=y%XONMyOUtFixzgx%+^)Py{^K1d?V{(Qu4v6)bN4W%Z` z1M7n%vh2@!?0Or|;DN5Lp1V+LLLR+mSP@Bke-*nzXF~l)C^aFE-ou#(i7YdNJX;Xz z2V;L?O~|A7)aF4V%RU;!ZpxWZe;!Ir$b+kWB(mJcLCfJ(4-%PM`iK)5UH*IbnAZpU zu^6RMG|qO6wW|4sN=@`@HP#17WZCB>an;A1!8|li2&E?E(PuI%BI$OmM%JfmMS@CA z$fM85%!5RheV!Ok!Axl07D`RXgX@DNvh4HSc$#NI^UqLf!aT4(NFvL9-ah&(t`FKg zx+^sykJiJD^+6I@_WUDy*O^d05K2wRqh~DYcQ+)m>{(Ha5;LK^CX||xN6)-8;%xrS zFI{#T?@q|1`L|IXy^NlbGDiz@#{aV?afkc!Qb=^lU zJIy!SB&bw`d-Qv59wefysGs<)cCE%6dJ?J zDiz@#eWq`HB8ey~>MOTgj((Q}m5OkWp5vGYi6|@To*%y);|B>U72zIj#2LFkNkmyu zo7>y98Y_wzUpdmtYq5oJZ`>B{|Z{i(IH zqEZp=(R+p!5wxPzOXR*j5>zU}J$esk9wefyDD`%^Kam8Lig1tKQ=12gC@V_6cJ8wz zL8T(xgV`O4C@acFpRqnjf=WdUkIV-(a>jnqURIPw(X2-womKMZx^W;NNaNKmN=_h>CK_lx3KK`TnLvwS{CP^k#_U_MA9 z%8Jq~6VEyJi&CkG?ty%eM3fa}v*poW^*OcOb1D_#9<7HP`5=iXD@wEe>~~2}sR;LI zJ@wcxN+QaNQuY#~#GDUOsR;K_EBBx6L1aQ&0loHn&z+9_qEkK?@vWmii2Q6tT+yDi zF>>xBHi(j6tVfQO(XBjqCOpGmeeJo^dcP0@gkg&Ts z@R+;%AJxDO>Cw}JKX}w>R3JE=3nGe!~1fw<&oIBmKUlhtj zO!*)^cr5iLkv0C=ub(^3wW3b6|7;JakWg=z`5-+=FzU~L@7!si-NG@_9%^stFy9eMR!JBbNTr_HK#&CWBcmrngCJV-F=ryn}M zr)Qu-!sfoq-p4#hFzOAzc79I}M}>su@T*?bJV-F=mp*xZ?x|a}ezpfxNGKP{w}T$N zCK&Z6N9V_QHMbHfBsQOGHLu4gC=-DkZua1@B3ILxDDTy%W;LfmLVh`(v*siirEBQ# zmi2y@1QimIg^is~9rF7T$6}P-S$jvm^q@i_vaq!W2}Y@f`n&$62Ne>Lg{?hEFiKCF zuURZTsE~*(Z0$jUQR;p6?9ziW5mP?MJIG^2uBJ0l&sXm@q(UOHuys91FiJgmtg+4Q ziVBIy!qy%n80F(tyfv6=u2Id_?v8dVV&sGS2p{2mzi8xCh8P5}}ZYoNDdCV=+pz!TO1!LLzdiwFe1CX;xeJ z3{*%&PPO(R!6=)ZmpvR65|LA_JxDN0Sw{4(_C$@ANQDG*xcM0*!KhUpH9V-0U=BC0 z4<>PD`CyD>nYW!SRuriu-BzlR=?xEG9~{cr6eT+M`*3}b3XhxruD-qJ&h`#D6|YC+ zwVCy)9wewFeYDGemq*X&%_EhwDJru*d61xz^wBQ=T^{|-#IgFURL-WT%=+X(f=bdy zyZm?a!1`b+XH!&WedYmzO43KW{C9cuH$_&DRL-WT%=+X(f=be@UA2BJbI$(8%REwP z?Fvzu^~r+-m6}jJ`kOoRAd%&xU1ojqAVH-je6B6=hcW|r^lE`wqRwIW~JxEZg z33;@ZnEOR>tfY^2nZwD01eKbQ2iFHlWcg^9Ih;I5P^k&?!1^GGEFbMMhcgclRBA#V zt%n=?MM-4&XqQ=^JV;Qf33>DtEbDhkWZ5&X96v~8K6r*RAt4X0_L0bPYgZ#rR6R&g zsR?-a`XG*#G&4we7@_0FexI6IY+gVok`S_wD9EBFjD+E-_KTv0S)6NHoviC!MW zwjKUBJwAAnL@%4i2kjg98+&iBfzUTS|Y^PWTVyY!t_zxP{t zK|mq#m0x`6@J-h{y`Nyzd!K06@D6xvbxw9xxF+_k;!F4XS>bFK9#Ba5U%qjAKfx&f zJ2pRG)%=dX)$X&OufMbG*9vF5@PINA_Lj5s0O9W}J<8uLmV}+v2Tts+>8x=ihc~*Y5m4_=N;tljTt9E?- zw6=?yGb-MT55j@b+WRxne~;eI%C5Tq`{Jyi*l$6!_pKu0_x1}95R8hi2^54qQC@R@ zqW-1d&HkJh1eA&R+>7>Cb^m5!gQ(wq%Zv86ehUK6`R3xc4@bMg*)FaX6cT^@ecwKO z)iXb9t#UuXsNa0{rNdwO>wlHR)^FkVKv9oAbhka7=COURmvOe0hd;F>bfoue-(&QC zf>AoFM;^W_iE&m`tXF&N&hO%^NT`4O>Qg_L9$s;^UDS|KDnD@Lzde}lU^}zz0TmKz zF?U|5JV-D~noH|?P$8kV`{aeng9M{g{@9mq zDLkl<`10|$4&VLtpDpS^f>A2}_xJyJ;X#GO=F+#?-;b+2NHEIEo7)QyDkQGoy|6y3 z*0#0>RF=f5=GLxAs2ov0_O=(+SJynKEQ!?}G!GIgN0dhAD9=wV6%zgzcF{`O@%5we zLw~K;m5KPH=f}U#9wau1^1l>}Cu(aJ&4UVwzr6eTJvqWJa@S1z1@7RNHEI(0(I4kQXz5IBhStKu3y}CbxAPF|B^QP z_E8TiB!1-H=ML-9fCQubZ_)YaGhZtz6LCkoR(-r0*Q%YF`gZ-L@jj9v%K!GAk9M;M zl?@2_#rQaTkYJSm4Zrtg4>ztA6%x8`AG#mJru|qwNHEI(7GX8hr$WN+KXZfOL4r~K zHx=(G>OqBs+VLu5v3ihTl>cqW%7Y3CJ&%!7&G&-@qx^4NVy55DNI%|Red$40CZhF3 z@$a(-kEPxxqE8M1j$Az{75W_Q~( z7d3(k3H4p8OxOr2B>ZpFSM?ylDD}a0eolpijSM}zpYJ&p68>G*>a1o$UxoE3+cUBB z*jj(3z4Be*akb-ORSzSmkkCGm`sz|4;a@CR)WbYTFv|9`EbqAyR7hx-&8l4)L4}0& z{?x6V3JJYIh$}trpm~sBl=d*KoY$%C4nmoT_N~c@a9~0Bw{d;euWLAE!dpk$I0%J=fAto#@Zmv%QECfQMn62L zknpeGRvsi6Wi6Dm@Zmv)gn#uGGyPEy5{%MwQ@{P7Lc+g#i<$oLAi*d-|I;jd)Po8M z|AsAQ`on_+qkNB7Id8Y$?Qvxy?Ay2?0SK2e{gEA5JZQRA2daHWySpKD3k5Vr> z%|%8Qo;O7#9(g#U{M-7K2bGz)YTuh8`?9|uYx7t}`QHdY-@f&#Zx5)<#DzU? zib#C*sf^OsV(Sry%1m6?^QMTzofk67|7HWmk5LaQGjZjfH$^0F{%}V5-=4tuF+8Zu z#FcyA6p?uHLPq)D(7^aHJgCgXs}H9!YU4lgH%9ze@BVs5`B!K$ehd#PGx6&2K4?5q zjcPrE{ryTm)@GMc{?%KIAH##nOuTx}n<5fAs~E5R>%AC1h6k0IxN>Byb3I7t>c&Xs zUm?c$F+8ZuL~Ah|qc-iQQQHF&)=GMm+H^hQP??Dfd)^e0P-~Cl`d6VbevEohnTZSI zeZYLJNa(4Jk<7ntjqzi6P??FV<~I}VQuUck>#t(;QtuOG|4Mh|L1iYcUcWDCXSO{c zp`uVi{WzG(f0NZSQ~mqPXI>;!u2+|+knp`&i%i(giUgyqT(2%^M|4+6Jkx%^c6CT5-1NknEj?uXq$5-LZOc3iA-XR8O5C9%pm&4Yx>5v9Ei^*aD6OJd4W z+Zp*&OG4#{(r$>=n+dB2l_fFF8HNW5l_Sb`U!bQJ(SF((bw}=#Az}M6n58xFiK^8 zb71X3g@o2Z-u}%0Dm+LqN@aaJVeLVMgjQ&-`;Bw|Z6fTRlVFs}`Ub>A*tMcU!q$*B zmlqx+7-i-5&55-K6%xK1VnJ9vs4R(9&8;3JRE{X$+pxI0=0RmitnQ$BkWe|Id<|*g zVFVQtzNS;voC*o8F4b+91f#Sfw0ffKtVl4*S7@rUqC!GzNPBvQZJR;%*1#xVL-L+z z?n|g>6)5^HdJn?tL4}0B390Hqg@o3S>Royy7{wJKJF9j^`k8m0c`xc~X|HV6l7xEj zdgX`5VwBc7r`4scom4w3D%_vQBhB^Dd)&At{$|RrXu0NPHK#&?*KqcjiPwxiYISwJ z8m%5YE4{gmRzkngO6;ttkg!Z<*@QAvZAsXB-#&`Y9y}JK^cJ^%KB(xeYCNet z(tZyTzBX00b}A(FhILVL|^Nfp7(<*V%$M0Bz!e%(Tm#s zAi*fsZ@yMMF3(WqdK{!e!t=pu93;Ug&-51eV{5Zl%?EpnBcVCt>a48hRF*_s^-**4 zAfa+ZdEQoCT`Egry65eTd@f2t<%sgUt@5COn%~i1NH`G3(Qb9Z*>k@pR4C ziiFA$<#}7>L1js-o^z`Q36&$tv!ZeqZkdTIBrM;ldmj*tQce~9UVc`69IP@gJ1b_2B>w-(&MxG#s*K|Yx-h%&Vx+JOOR_M!QNqlM zJcBRdMR+d4=pu+g`*6}X$YTwG;g0blZxl=^y@(;`%LpZGu+(`6HeFOOMG3t#y_Dp< z5fTXEZPEHa&wAGRJ!h{o^Uh%y7VrQ0o&VZPKzN>HFKi;_1T& znd6Y~9YXi!(W~bQ-^D23UvyuGpkn>`5x<(8Ewyts@gSkOkDh>;#?%vnQJTr1qVk4 z+fN{4PfM9?zZ!6%rc5_e&xPM)_VsF1K3K&>nJI7l$c_uQfm zHV-N!H0sy0Sf}-a1fzWKFj|J@L4}0o33_(h)Pn@0d=Ip@U3TQngGwT7-!q6=`4p;@ zMB7hY+d)LhThG#Kxhm26409?r@-9!qQGDiIdGPN?;XDBk19WtR#GwU3iKUY0A~>$85aUbRc; zIV+()IF&0MNBO9Jti}e6;#eZLKI|v#oZ?cj zT5+#eqml`&D1&GoBzzUwqkPR9L^}>Dnb68Oh~`1USHnHZ*Y0~gCzVWS9{`BvLBdz{ zJ<9hWpdW0PW@myj!=AmNf6orgT7YBQK;A_Q96hH_KHd-w37#YZTWup zAfdAxQC1e%4~i(Cx?7|wnb3|T^tBegPFN|aQ7Y4^9~^{;pppsgtU_OF;p>D-dqk;j zrhae`B7#aLv_q`tK|-}QqSVGj4`;3DU>3!LN+z_^ZSC$yp)#S?C!*9=rhc$_P|1XL z?DafIs1=PU-u=wSK_wHb`>?tH@V%9_J-2zv*B zAf7ouLigvQhg&-i5R9@rZ2fsHj+SS^_rs!XZC3Eu+?!i!ZYB_tT-JApwo4=N;l zFE5DZL4r}fqZ$22^Pob)_auX89wZp$`>fG_G!H5yd~Y>~=0So{zV{scNAsXU!uN=S zXdWaO<@?^ze>4v&iLgENAmmY~(lXRHYN+?}9q}F|@8}tFt))Ujeu-!vBp9W07(GL- zA5=)_yd|O>gC7S8Mp;>4{~@A$>K^*4kg)4d!ot@HMyX6k&ydd*6%s1PiD(`q7^S)y zJwx`OLPGU15zT`Hqtre|&yYQ+B*K34)9VdLsP&2O<+@1rphAM{Ek@`#%BPfFt!C8L zQtJlM)*h^-CZQF9es93|Qtt-vQNY zOZZ)kiYNZJ(W{+WJG=EA15!jp-R3vtGI3$xtzZ_y*s}3(*5IXc;thTe)_4WPQ9)C{o}v%zb_XgsPqWY%f&yI56u5^ z`S;C(M5GmU&#B$$GGd%SVo7v^Vf`nP$Ih_s^KdU1EW^#|cWf=Z8Yk1IZV z$NY&`ud*kYk%+XSe*MDk_{5XpL4rz;aF1($dc*viw|~q$NJLsue|&y-y!z4bAVH-^ zxW|A0bH)77-FKP?iAXEz)6eaWSAHivNKok!?(wUe|9s1p+egiVM5GmU_s@67A07`6 z5>$GGdp!H(aLf1paLhbNL|ReT{djkLeFzT{RC0L{BuPYCQL}4Gxf;TQ1eG4)9?F0D4CUWWlyIwq_}-{p`ulQW@%CS79aw8gSSt~^ z+DIU3cDl4Hwf?VpK=Jm&zxUyty{%QtKo2S;4xQTDTGewBR7jkBvE-`NS`t)99DiYN zYgGqHP$BX7^LtyX8byK%iP>{|TdVp(f(nT@pV`}5m39(TNIdqVlB-sBNwAbed$nF- z)~+B*28n2iI^_xkqoQ4z5>%pPIC!oSky;-fIcrq34DyH?Jk1rAsDl^D6>AhqKKtN& zcB!xydD?sGixD2>*S|+l;rDt?yBNVJuW3Dkir217$rTB&X*~}f2cx{E^$03nyDlYH zB)q2eJeVs+c^&K$C?)Co>+f}Rman&UP}g(GBoZ}uR; zG5ltNQJh)iTv6d1=U}-a!CBbmTrrAs!_5SvW{3Y)uHZ2nU#}A@g#_ogn+Zn!@67J_ z)$cAl9#r1*#_srzyB@HpgXN0E_1ByoUwz-#J0AQlM*aTC*>U?%J%Y-+o;^Fh^u=#n zLas>s_3h`zNB-{g=5xiU2k$*M9{FhRdQiFXm2>0CZI9ydZT6U*{%5<+2P=srZog@N zyzTS7D@cXJm*2fV{_Z1wHFK`0kht~r^W$vRyB<_X-1f}*@wX>?1Qil@eeV4D$eq3G zL50L@c78nmN{^sIV*lya#xo!8T|p`&uD$-X@zMK0loqbsuhgfGOKjv_N3YXSxJ9lJ z*6Wj~X&*E24He!S_!u|R^2j4H5>$GGkM#N83=)x66i0*01qmuW!aexL5E7AA6vwE` z1qmuW!aexr6B3bD6i3d>1qmuW!aeFck#x-m5|LIE$Meet2`W9JdiXn$%!5Rv6~$Rb z@c==kN4N*yk3%BTisIa7xgbHMN4N*y3`8Q*isFoHxgbHMN4Q6QCz8Fdh(x3n#j&s5 zDVnQ}=n7Kl5y|6atGzbzt|PsgUL8k_$oQrv|K81nd(g`1@wUa)NPmjL4j*cb!$whZuP|v6?%@ zC~8Vj30i%4{N4NWQfqh08CD$}LeY0cT2V3Xat{(zdW3tFTB|n$nFonTD=J26?m>b| zk8qEA4_ViIAQ5Rr#n{e0NKok!)noMz(1Apx6&0hw>H&gEk8qDtYj>109S4a>D=Nm1 z?m>b|k8lrN3!PyrS9O%C?+RK`G2(O&5>$GGd#FsQq{xFrq!ksTSN9-6rAN3&skM5O znR$?iw4!nyBtfM|xJSvpzTZE%m%$ok>2gQdkE0TUA(gPRi#r}cH)38LN?YQ0myJMw z9)EASnh<`pqJ1sRiD*T+?#vl>q~*ssbzZ5a(j)vhxb93M(u(5DJFjh1=@IV1b!QTh zRut#z%LNH4J;FV>?o1-misDRvxgbHMN4N*qok>JmQM@0pT#%sBBiw`Q&LkqODBeL> zE=W-65$?ftXA+TC6z@MQ7bK|k2>0N+Gl@tmiuW~^3lda%gnMw^nM9-&6}_|9K@wDY zgnN`a?yW+ZamPJ&DRJ-JJTPxhcR%Kw(I=v=0yK}>l$84b_^wz5P*kiTG@|8-N~}{H zJXa)QEu?vLbH%7wZ)rr!6_r@iIe4xTf%bUw*=2hk?QYA}>Nwa^<9p*S_k{^YMN7Sj z@b)|rCrUeC?vY=Zh>@(KI19^1PK5;LRGFYcf-|H{P$9wjP9~_3;Or$6R7h|xk_jp# zIJ3wE6%w2$WFnO%m6CeZcr`OYh2w-+*_d8)DkNf+V@gmV5i1*0f(nUP*_aYkNW?0~ zl%PT)RyL*t6%w(sF(s&wh;@o7L4`!L`4=O6KBy>;obolN!tdocC=*mja8#2CDkL~Y z$pjS=9C2iV3JH!MGC_p|M+2FlLV|sJCa92LPn`)yrE6Yi`qOL9*#wE06iWsCb{~QS@HBg2)vK?;m>}{4Pd$|JWm_c%OJFxgz2H zW6y)RVwCrsLGWGJzK^}GF7YXn^{Fa83Qq)-pzZf2cn*usE@t#lxU<{S_iVMGhY>j}z-=gz3<7qvr?5))=*8RLk+K#-Qw|33vTE((+45dfJk=IpGArp`7 zx<>Ebn+eNFJwM8ce^Z>Rx~`^@(%#T*QFw|=5a~Fa;P-Y2&s8n$UK(rZGY^);de)oA zj;NBSA$}RMiHIZDEHze<{hjAV@Jypj$2HG{ohuSGojg2O^=QoldC#RpC$-hwN|*pZe^CS`ta1{$GGVRKDglOFEYJe1_HasD8MzJ&#&m5f$f3 P-?T>X?2^EFTQ2?&pk&*@ literal 0 HcmV?d00001 diff --git a/resources/profiles/Meltingplot/mbl480-printbed.stl b/resources/profiles/Meltingplot/mbl480-printbed.stl new file mode 100644 index 0000000000000000000000000000000000000000..ab252885915ab48e163d412f7ddb4491745ea73d GIT binary patch literal 160484 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 P-?T>X?2^EFTQ2?&pk&*@ literal 0 HcmV?d00001 diff --git a/resources/profiles/Meltingplot/process/0.18mm Fine 0.4 nozzle @Meltingplot CHX 350.json b/resources/profiles/Meltingplot/process/0.18mm Fine 0.4 nozzle @Meltingplot CHX 350.json new file mode 100644 index 0000000000..29b161150e --- /dev/null +++ b/resources/profiles/Meltingplot/process/0.18mm Fine 0.4 nozzle @Meltingplot CHX 350.json @@ -0,0 +1,12 @@ +{ + "type": "process", + "name": "0.18mm Fine 0.4 nozzle @Meltingplot CHX 350", + "inherits": "fdm_process_meltingplot_chx_small_nozzle", + "from": "system", + "setting_id": "AbSOyKLL1fGceKJM", + "instantiation": "true", + "layer_height": "0.18", + "compatible_printers": [ + "Meltingplot CHX 350 0.4 nozzle" + ] +} diff --git a/resources/profiles/Meltingplot/process/0.18mm Fine 0.4 nozzle @Meltingplot MBL.json b/resources/profiles/Meltingplot/process/0.18mm Fine 0.4 nozzle @Meltingplot MBL.json new file mode 100644 index 0000000000..09624e8d1d --- /dev/null +++ b/resources/profiles/Meltingplot/process/0.18mm Fine 0.4 nozzle @Meltingplot MBL.json @@ -0,0 +1,15 @@ +{ + "type": "process", + "name": "0.18mm Fine 0.4 nozzle @Meltingplot MBL", + "inherits": "fdm_process_meltingplot_mbl_04_nozzle", + "from": "system", + "setting_id": "WF0wYUMc1HUHPyVQ", + "instantiation": "true", + "layer_height": "0.18", + "compatible_printers": [ + "Meltingplot MBL 133 0.4 nozzle", + "Meltingplot MBL 136 0.4 nozzle", + "Meltingplot MBL 308 0.4 nozzle", + "Meltingplot MBL 480 0.4 nozzle" + ] +} diff --git a/resources/profiles/Meltingplot/process/0.24mm Fine 0.6 nozzle @Meltingplot CHX 350.json b/resources/profiles/Meltingplot/process/0.24mm Fine 0.6 nozzle @Meltingplot CHX 350.json new file mode 100644 index 0000000000..b5114e1fee --- /dev/null +++ b/resources/profiles/Meltingplot/process/0.24mm Fine 0.6 nozzle @Meltingplot CHX 350.json @@ -0,0 +1,12 @@ +{ + "type": "process", + "name": "0.24mm Fine 0.6 nozzle @Meltingplot CHX 350", + "inherits": "fdm_process_meltingplot_chx_small_nozzle", + "from": "system", + "setting_id": "KrZSDq4Tsnlnu0Dm", + "instantiation": "true", + "layer_height": "0.24", + "compatible_printers": [ + "Meltingplot CHX 350 0.6 nozzle" + ] +} diff --git a/resources/profiles/Meltingplot/process/0.24mm Fine 0.6 nozzle @Meltingplot MBL.json b/resources/profiles/Meltingplot/process/0.24mm Fine 0.6 nozzle @Meltingplot MBL.json new file mode 100644 index 0000000000..c6ff710938 --- /dev/null +++ b/resources/profiles/Meltingplot/process/0.24mm Fine 0.6 nozzle @Meltingplot MBL.json @@ -0,0 +1,15 @@ +{ + "type": "process", + "name": "0.24mm Fine 0.6 nozzle @Meltingplot MBL", + "inherits": "fdm_process_meltingplot_mbl_06_nozzle", + "from": "system", + "setting_id": "9PDbCLSnBEocONzB", + "instantiation": "true", + "layer_height": "0.24", + "compatible_printers": [ + "Meltingplot MBL 133 0.6 nozzle", + "Meltingplot MBL 136 0.6 nozzle", + "Meltingplot MBL 308 0.6 nozzle", + "Meltingplot MBL 480 0.6 nozzle" + ] +} diff --git a/resources/profiles/Meltingplot/process/0.28mm Optimal 0.6 nozzle @Meltingplot CHX 350.json b/resources/profiles/Meltingplot/process/0.28mm Optimal 0.6 nozzle @Meltingplot CHX 350.json new file mode 100644 index 0000000000..476156be3a --- /dev/null +++ b/resources/profiles/Meltingplot/process/0.28mm Optimal 0.6 nozzle @Meltingplot CHX 350.json @@ -0,0 +1,12 @@ +{ + "type": "process", + "name": "0.28mm Optimal 0.6 nozzle @Meltingplot CHX 350", + "inherits": "fdm_process_meltingplot_chx_small_nozzle", + "from": "system", + "setting_id": "RrsJ1yXD61T1Sk2u", + "instantiation": "true", + "layer_height": "0.28", + "compatible_printers": [ + "Meltingplot CHX 350 0.6 nozzle" + ] +} diff --git a/resources/profiles/Meltingplot/process/0.28mm Optimal 0.6 nozzle @Meltingplot MBL.json b/resources/profiles/Meltingplot/process/0.28mm Optimal 0.6 nozzle @Meltingplot MBL.json new file mode 100644 index 0000000000..4187f5f899 --- /dev/null +++ b/resources/profiles/Meltingplot/process/0.28mm Optimal 0.6 nozzle @Meltingplot MBL.json @@ -0,0 +1,15 @@ +{ + "type": "process", + "name": "0.28mm Optimal 0.6 nozzle @Meltingplot MBL", + "inherits": "fdm_process_meltingplot_mbl_06_nozzle", + "from": "system", + "setting_id": "ewObaiyN5k5Jl17T", + "instantiation": "true", + "layer_height": "0.28", + "compatible_printers": [ + "Meltingplot MBL 133 0.6 nozzle", + "Meltingplot MBL 136 0.6 nozzle", + "Meltingplot MBL 308 0.6 nozzle", + "Meltingplot MBL 480 0.6 nozzle" + ] +} diff --git a/resources/profiles/Meltingplot/process/0.30mm Standard 0.6 nozzle @Meltingplot CHX 350.json b/resources/profiles/Meltingplot/process/0.30mm Standard 0.6 nozzle @Meltingplot CHX 350.json new file mode 100644 index 0000000000..90de66ee6e --- /dev/null +++ b/resources/profiles/Meltingplot/process/0.30mm Standard 0.6 nozzle @Meltingplot CHX 350.json @@ -0,0 +1,12 @@ +{ + "type": "process", + "name": "0.30mm Standard 0.6 nozzle @Meltingplot CHX 350", + "inherits": "fdm_process_meltingplot_chx_small_nozzle", + "from": "system", + "setting_id": "nHe2gihvCHahJ4Pw", + "instantiation": "true", + "layer_height": "0.30", + "compatible_printers": [ + "Meltingplot CHX 350 0.6 nozzle" + ] +} diff --git a/resources/profiles/Meltingplot/process/0.30mm Standard 0.6 nozzle @Meltingplot MBL.json b/resources/profiles/Meltingplot/process/0.30mm Standard 0.6 nozzle @Meltingplot MBL.json new file mode 100644 index 0000000000..6ef66db3bc --- /dev/null +++ b/resources/profiles/Meltingplot/process/0.30mm Standard 0.6 nozzle @Meltingplot MBL.json @@ -0,0 +1,15 @@ +{ + "type": "process", + "name": "0.30mm Standard 0.6 nozzle @Meltingplot MBL", + "inherits": "fdm_process_meltingplot_mbl_06_nozzle", + "from": "system", + "setting_id": "6exgbZxVLHjH3Bhd", + "instantiation": "true", + "layer_height": "0.30", + "compatible_printers": [ + "Meltingplot MBL 133 0.6 nozzle", + "Meltingplot MBL 136 0.6 nozzle", + "Meltingplot MBL 308 0.6 nozzle", + "Meltingplot MBL 480 0.6 nozzle" + ] +} diff --git a/resources/profiles/Meltingplot/process/0.32mm Fine 0.8 nozzle @Meltingplot CHX 350.json b/resources/profiles/Meltingplot/process/0.32mm Fine 0.8 nozzle @Meltingplot CHX 350.json new file mode 100644 index 0000000000..285d6594aa --- /dev/null +++ b/resources/profiles/Meltingplot/process/0.32mm Fine 0.8 nozzle @Meltingplot CHX 350.json @@ -0,0 +1,12 @@ +{ + "type": "process", + "name": "0.32mm Fine 0.8 nozzle @Meltingplot CHX 350", + "inherits": "fdm_process_meltingplot_chx_large_nozzle", + "from": "system", + "setting_id": "HSqTmgZq9mxKpWzq", + "instantiation": "true", + "layer_height": "0.32", + "compatible_printers": [ + "Meltingplot CHX 350 0.8 nozzle" + ] +} diff --git a/resources/profiles/Meltingplot/process/0.34mm Fine 0.8 nozzle @Meltingplot MBL.json b/resources/profiles/Meltingplot/process/0.34mm Fine 0.8 nozzle @Meltingplot MBL.json new file mode 100644 index 0000000000..1acc2ebb64 --- /dev/null +++ b/resources/profiles/Meltingplot/process/0.34mm Fine 0.8 nozzle @Meltingplot MBL.json @@ -0,0 +1,15 @@ +{ + "type": "process", + "name": "0.34mm Fine 0.8 nozzle @Meltingplot MBL", + "inherits": "fdm_process_meltingplot_mbl_08_nozzle", + "from": "system", + "setting_id": "XVRHVR0F8UrpWAeP", + "instantiation": "true", + "layer_height": "0.34", + "compatible_printers": [ + "Meltingplot MBL 133 0.8 nozzle", + "Meltingplot MBL 136 0.8 nozzle", + "Meltingplot MBL 308 0.8 nozzle", + "Meltingplot MBL 480 0.8 nozzle" + ] +} diff --git a/resources/profiles/Meltingplot/process/0.36mm Optimal 0.8 nozzle @Meltingplot CHX 350.json b/resources/profiles/Meltingplot/process/0.36mm Optimal 0.8 nozzle @Meltingplot CHX 350.json new file mode 100644 index 0000000000..fc6c41bd75 --- /dev/null +++ b/resources/profiles/Meltingplot/process/0.36mm Optimal 0.8 nozzle @Meltingplot CHX 350.json @@ -0,0 +1,12 @@ +{ + "type": "process", + "name": "0.36mm Optimal 0.8 nozzle @Meltingplot CHX 350", + "inherits": "fdm_process_meltingplot_chx_large_nozzle", + "from": "system", + "setting_id": "KLnV7sCKomrmvKxU", + "instantiation": "true", + "layer_height": "0.36", + "compatible_printers": [ + "Meltingplot CHX 350 0.8 nozzle" + ] +} diff --git a/resources/profiles/Meltingplot/process/0.36mm Optimal 0.8 nozzle @Meltingplot MBL.json b/resources/profiles/Meltingplot/process/0.36mm Optimal 0.8 nozzle @Meltingplot MBL.json new file mode 100644 index 0000000000..9694cff7d9 --- /dev/null +++ b/resources/profiles/Meltingplot/process/0.36mm Optimal 0.8 nozzle @Meltingplot MBL.json @@ -0,0 +1,15 @@ +{ + "type": "process", + "name": "0.36mm Optimal 0.8 nozzle @Meltingplot MBL", + "inherits": "fdm_process_meltingplot_mbl_08_nozzle", + "from": "system", + "setting_id": "WpPpQuf0jWaXQaPU", + "instantiation": "true", + "layer_height": "0.36", + "compatible_printers": [ + "Meltingplot MBL 133 0.8 nozzle", + "Meltingplot MBL 136 0.8 nozzle", + "Meltingplot MBL 308 0.8 nozzle", + "Meltingplot MBL 480 0.8 nozzle" + ] +} diff --git a/resources/profiles/Meltingplot/process/0.38mm Standard 0.8 nozzle @Meltingplot CHX 350.json b/resources/profiles/Meltingplot/process/0.38mm Standard 0.8 nozzle @Meltingplot CHX 350.json new file mode 100644 index 0000000000..40d74e2bb3 --- /dev/null +++ b/resources/profiles/Meltingplot/process/0.38mm Standard 0.8 nozzle @Meltingplot CHX 350.json @@ -0,0 +1,12 @@ +{ + "type": "process", + "name": "0.38mm Standard 0.8 nozzle @Meltingplot CHX 350", + "inherits": "fdm_process_meltingplot_chx_large_nozzle", + "from": "system", + "setting_id": "pKcgDKQM9IVmXiym", + "instantiation": "true", + "layer_height": "0.38", + "compatible_printers": [ + "Meltingplot CHX 350 0.8 nozzle" + ] +} diff --git a/resources/profiles/Meltingplot/process/0.38mm Standard 0.8 nozzle @Meltingplot MBL.json b/resources/profiles/Meltingplot/process/0.38mm Standard 0.8 nozzle @Meltingplot MBL.json new file mode 100644 index 0000000000..c555721f40 --- /dev/null +++ b/resources/profiles/Meltingplot/process/0.38mm Standard 0.8 nozzle @Meltingplot MBL.json @@ -0,0 +1,15 @@ +{ + "type": "process", + "name": "0.38mm Standard 0.8 nozzle @Meltingplot MBL", + "inherits": "fdm_process_meltingplot_mbl_08_nozzle", + "from": "system", + "setting_id": "IMZxMsLnd5IfiDFQ", + "instantiation": "true", + "layer_height": "0.38", + "compatible_printers": [ + "Meltingplot MBL 133 0.8 nozzle", + "Meltingplot MBL 136 0.8 nozzle", + "Meltingplot MBL 308 0.8 nozzle", + "Meltingplot MBL 480 0.8 nozzle" + ] +} diff --git a/resources/profiles/Meltingplot/process/0.44mm Fine 1.0 nozzle @Meltingplot CHX 350.json b/resources/profiles/Meltingplot/process/0.44mm Fine 1.0 nozzle @Meltingplot CHX 350.json new file mode 100644 index 0000000000..4f8e9487d5 --- /dev/null +++ b/resources/profiles/Meltingplot/process/0.44mm Fine 1.0 nozzle @Meltingplot CHX 350.json @@ -0,0 +1,12 @@ +{ + "type": "process", + "name": "0.44mm Fine 1.0 nozzle @Meltingplot CHX 350", + "inherits": "fdm_process_meltingplot_chx_large_nozzle", + "from": "system", + "setting_id": "QLMHgE0vHGQWiuz7", + "instantiation": "true", + "layer_height": "0.44", + "compatible_printers": [ + "Meltingplot CHX 350 1.0 nozzle" + ] +} diff --git a/resources/profiles/Meltingplot/process/0.44mm Fine 1.0 nozzle @Meltingplot MBL.json b/resources/profiles/Meltingplot/process/0.44mm Fine 1.0 nozzle @Meltingplot MBL.json new file mode 100644 index 0000000000..4f321f0192 --- /dev/null +++ b/resources/profiles/Meltingplot/process/0.44mm Fine 1.0 nozzle @Meltingplot MBL.json @@ -0,0 +1,15 @@ +{ + "type": "process", + "name": "0.44mm Fine 1.0 nozzle @Meltingplot MBL", + "inherits": "fdm_process_meltingplot_mbl_10_nozzle", + "from": "system", + "setting_id": "tjLfITsaMySQV6OC", + "instantiation": "true", + "layer_height": "0.44", + "compatible_printers": [ + "Meltingplot MBL 133 1.0 nozzle", + "Meltingplot MBL 136 1.0 nozzle", + "Meltingplot MBL 308 1.0 nozzle", + "Meltingplot MBL 480 1.0 nozzle" + ] +} diff --git a/resources/profiles/Meltingplot/process/0.48mm Fine 1.2 nozzle @Meltingplot CHX 350.json b/resources/profiles/Meltingplot/process/0.48mm Fine 1.2 nozzle @Meltingplot CHX 350.json new file mode 100644 index 0000000000..2df947e174 --- /dev/null +++ b/resources/profiles/Meltingplot/process/0.48mm Fine 1.2 nozzle @Meltingplot CHX 350.json @@ -0,0 +1,12 @@ +{ + "type": "process", + "name": "0.48mm Fine 1.2 nozzle @Meltingplot CHX 350", + "inherits": "fdm_process_meltingplot_chx_large_nozzle", + "from": "system", + "setting_id": "yzaZIGtEhvf2GGbl", + "instantiation": "true", + "layer_height": "0.48", + "compatible_printers": [ + "Meltingplot CHX 350 1.2 nozzle" + ] +} diff --git a/resources/profiles/Meltingplot/process/0.48mm Fine 1.2 nozzle @Meltingplot MBL.json b/resources/profiles/Meltingplot/process/0.48mm Fine 1.2 nozzle @Meltingplot MBL.json new file mode 100644 index 0000000000..7702399184 --- /dev/null +++ b/resources/profiles/Meltingplot/process/0.48mm Fine 1.2 nozzle @Meltingplot MBL.json @@ -0,0 +1,15 @@ +{ + "type": "process", + "name": "0.48mm Fine 1.2 nozzle @Meltingplot MBL", + "inherits": "fdm_process_meltingplot_mbl_12_nozzle", + "from": "system", + "setting_id": "erJDLPP5pRQnGwoJ", + "instantiation": "true", + "layer_height": "0.48", + "compatible_printers": [ + "Meltingplot MBL 133 1.2 nozzle", + "Meltingplot MBL 136 1.2 nozzle", + "Meltingplot MBL 308 1.2 nozzle", + "Meltingplot MBL 480 1.2 nozzle" + ] +} diff --git a/resources/profiles/Meltingplot/process/0.48mm Optimal 1.0 nozzle @Meltingplot CHX 350.json b/resources/profiles/Meltingplot/process/0.48mm Optimal 1.0 nozzle @Meltingplot CHX 350.json new file mode 100644 index 0000000000..d88e9a538c --- /dev/null +++ b/resources/profiles/Meltingplot/process/0.48mm Optimal 1.0 nozzle @Meltingplot CHX 350.json @@ -0,0 +1,12 @@ +{ + "type": "process", + "name": "0.48mm Optimal 1.0 nozzle @Meltingplot CHX 350", + "inherits": "fdm_process_meltingplot_chx_large_nozzle", + "from": "system", + "setting_id": "dZw2B5t8nN5lhyXI", + "instantiation": "true", + "layer_height": "0.48", + "compatible_printers": [ + "Meltingplot CHX 350 1.0 nozzle" + ] +} diff --git a/resources/profiles/Meltingplot/process/0.48mm Optimal 1.0 nozzle @Meltingplot MBL.json b/resources/profiles/Meltingplot/process/0.48mm Optimal 1.0 nozzle @Meltingplot MBL.json new file mode 100644 index 0000000000..2b20bba856 --- /dev/null +++ b/resources/profiles/Meltingplot/process/0.48mm Optimal 1.0 nozzle @Meltingplot MBL.json @@ -0,0 +1,15 @@ +{ + "type": "process", + "name": "0.48mm Optimal 1.0 nozzle @Meltingplot MBL", + "inherits": "fdm_process_meltingplot_mbl_10_nozzle", + "from": "system", + "setting_id": "5wtjDWniGYAAtn79", + "instantiation": "true", + "layer_height": "0.48", + "compatible_printers": [ + "Meltingplot MBL 133 1.0 nozzle", + "Meltingplot MBL 136 1.0 nozzle", + "Meltingplot MBL 308 1.0 nozzle", + "Meltingplot MBL 480 1.0 nozzle" + ] +} diff --git a/resources/profiles/Meltingplot/process/0.56mm Optimal 1.2 nozzle @Meltingplot CHX 350.json b/resources/profiles/Meltingplot/process/0.56mm Optimal 1.2 nozzle @Meltingplot CHX 350.json new file mode 100644 index 0000000000..c29d827b2e --- /dev/null +++ b/resources/profiles/Meltingplot/process/0.56mm Optimal 1.2 nozzle @Meltingplot CHX 350.json @@ -0,0 +1,12 @@ +{ + "type": "process", + "name": "0.56mm Optimal 1.2 nozzle @Meltingplot CHX 350", + "inherits": "fdm_process_meltingplot_chx_large_nozzle", + "from": "system", + "setting_id": "l6wYSAIFuyQFgT5X", + "instantiation": "true", + "layer_height": "0.56", + "compatible_printers": [ + "Meltingplot CHX 350 1.2 nozzle" + ] +} diff --git a/resources/profiles/Meltingplot/process/0.56mm Optimal 1.2 nozzle @Meltingplot MBL.json b/resources/profiles/Meltingplot/process/0.56mm Optimal 1.2 nozzle @Meltingplot MBL.json new file mode 100644 index 0000000000..f33064051a --- /dev/null +++ b/resources/profiles/Meltingplot/process/0.56mm Optimal 1.2 nozzle @Meltingplot MBL.json @@ -0,0 +1,15 @@ +{ + "type": "process", + "name": "0.56mm Optimal 1.2 nozzle @Meltingplot MBL", + "inherits": "fdm_process_meltingplot_mbl_12_nozzle", + "from": "system", + "setting_id": "i2aDrQXA45e6DpzC", + "instantiation": "true", + "layer_height": "0.56", + "compatible_printers": [ + "Meltingplot MBL 133 1.2 nozzle", + "Meltingplot MBL 136 1.2 nozzle", + "Meltingplot MBL 308 1.2 nozzle", + "Meltingplot MBL 480 1.2 nozzle" + ] +} diff --git a/resources/profiles/Meltingplot/process/fdm_process_common.json b/resources/profiles/Meltingplot/process/fdm_process_common.json new file mode 100644 index 0000000000..ae3651d8fd --- /dev/null +++ b/resources/profiles/Meltingplot/process/fdm_process_common.json @@ -0,0 +1,107 @@ +{ + "type": "process", + "name": "fdm_process_common", + "from": "system", + "instantiation": "false", + "reduce_crossing_wall": "0", + "max_travel_detour_distance": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_thickness": "0", + "bridge_speed": "50", + "brim_width": "5", + "brim_object_gap": "0.1", + "compatible_printers": [], + "compatible_printers_condition": "", + "print_sequence": "by layer", + "default_acceleration": "1000", + "initial_layer_acceleration": "500", + "top_surface_acceleration": "1000", + "travel_acceleration": "1000", + "inner_wall_acceleration": "1000", + "outer_wall_acceleration": "700", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0", + "enable_arc_fitting": "0", + "wall_infill_order": "inner wall/outer wall/infill", + "infill_direction": "45", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "crosshatch", + "initial_layer_print_height": "0.2", + "infill_combination": "0", + "infill_wall_overlap": "25%", + "interface_shells": "0", + "ironing_flow": "10%", + "ironing_spacing": "0.15", + "ironing_speed": "30", + "ironing_type": "no ironing", + "reduce_infill_retraction": "1", + "filename_format": "{input_filename_base}_{layer_height}mm_{filament_type[initial_tool]}_{printer_model}_{print_time}.gcode", + "detect_overhang_wall": "1", + "slowdown_for_curled_perimeters": "1", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "50", + "overhang_3_4_speed": "30", + "overhang_4_4_speed": "10", + "line_width": "110%", + "inner_wall_line_width": "110%", + "outer_wall_line_width": "100%", + "precise_outer_wall": "0", + "top_surface_line_width": "93.75%", + "sparse_infill_line_width": "110%", + "initial_layer_line_width": "120%", + "internal_solid_infill_line_width": "120%", + "support_line_width": "96%", + "wall_loops": "3", + "print_settings_id": "", + "raft_layers": "0", + "seam_position": "aligned", + "skirt_distance": "2", + "skirt_height": "3", + "min_skirt_length": "4", + "skirt_loops": "0", + "minimum_sparse_infill_area": "15", + "spiral_mode": "0", + "standby_temperature_delta": "-5", + "enable_support": "0", + "resolution": "0.012", + "support_type": "normal(auto)", + "support_on_build_plate_only": "0", + "support_top_z_distance": "0.2", + "support_bottom_z_distance": "0.2", + "support_filament": "0", + "support_interface_loop_pattern": "0", + "support_interface_filament": "0", + "support_interface_top_layers": "2", + "support_interface_bottom_layers": "2", + "support_interface_spacing": "0.5", + "support_interface_speed": "80", + "support_base_pattern": "default", + "support_base_pattern_spacing": "2.5", + "support_speed": "150", + "support_threshold_angle": "30", + "support_object_xy_distance": "0.35", + "tree_support_branch_angle": "30", + "tree_support_wall_count": "0", + "detect_thin_wall": "0", + "top_surface_pattern": "monotonicline", + "top_shell_thickness": "0.8", + "enable_prime_tower": "1", + "wipe_tower_no_sparse_layers": "0", + "prime_tower_width": "60", + "xy_hole_compensation": "0", + "xy_contour_compensation": "0", + "layer_height": "0.2", + "bottom_shell_layers": "3", + "top_shell_layers": "4", + "bridge_flow": "1", + "initial_layer_speed": "45", + "initial_layer_infill_speed": "45", + "outer_wall_speed": "45", + "inner_wall_speed": "80", + "sparse_infill_speed": "150", + "internal_solid_infill_speed": "150", + "top_surface_speed": "50", + "gap_infill_speed": "30", + "travel_speed": "200" +} diff --git a/resources/profiles/Meltingplot/process/fdm_process_meltingplot_chx_common.json b/resources/profiles/Meltingplot/process/fdm_process_meltingplot_chx_common.json new file mode 100644 index 0000000000..2a27efcb54 --- /dev/null +++ b/resources/profiles/Meltingplot/process/fdm_process_meltingplot_chx_common.json @@ -0,0 +1,39 @@ +{ + "type": "process", + "name": "fdm_process_meltingplot_chx_common", + "inherits": "fdm_process_common", + "from": "system", + "instantiation": "false", + "filename_format": "{input_filename_base}_L{layer_height}mm_N{nozzle_diameter[0]}_{filament_type[initial_tool]}_{printer_model}_{print_time}.gcode", + "brim_object_gap": "0", + "brim_type": "outer_only", + "default_acceleration": "6000", + "slowdown_for_curled_perimeters": "0", + "enable_support": "1", + "extrusion_rate_smoothing_external_perimeter_only": "1", + "gap_infill_speed": "250", + "infill_wall_overlap": "15%", + "initial_layer_acceleration": "500", + "initial_layer_infill_speed": "30", + "initial_layer_line_width": "120%", + "initial_layer_speed": "20", + "inner_wall_line_width": "110%", + "inner_wall_speed": "300", + "internal_solid_infill_line_width": "115%", + "internal_solid_infill_speed": "250", + "line_width": "120%", + "reduce_infill_retraction": "0", + "seam_gap": "0", + "skirt_speed": "20", + "skirt_type": "perobject", + "slow_down_layers": "3", + "sparse_infill_line_width": "110%", + "support_line_width": "110%", + "support_type": "tree(auto)", + "top_shell_layers": "5", + "top_surface_acceleration": "2000", + "top_surface_line_width": "110%", + "top_surface_speed": "200", + "travel_speed": "1000", + "wall_generator": "classic" +} diff --git a/resources/profiles/Meltingplot/process/fdm_process_meltingplot_chx_large_nozzle.json b/resources/profiles/Meltingplot/process/fdm_process_meltingplot_chx_large_nozzle.json new file mode 100644 index 0000000000..63bf9517b0 --- /dev/null +++ b/resources/profiles/Meltingplot/process/fdm_process_meltingplot_chx_large_nozzle.json @@ -0,0 +1,26 @@ +{ + "type": "process", + "name": "fdm_process_meltingplot_chx_large_nozzle", + "inherits": "fdm_process_meltingplot_chx_common", + "from": "system", + "instantiation": "false", + "bottom_shell_layers": "4", + "initial_layer_print_height": "0.5", + "inner_wall_acceleration": "6000", + "max_volumetric_extrusion_rate_slope": "300", + "outer_wall_acceleration": "2000", + "outer_wall_line_width": "110%", + "outer_wall_speed": "80", + "sparse_infill_pattern": "cubic", + "sparse_infill_speed": "300", + "support_base_pattern_spacing": "7.5", + "support_interface_speed": "80", + "support_object_first_layer_gap": "0.5", + "support_object_xy_distance": "0.45", + "support_speed": "200", + "support_style": "tree_slim", + "support_threshold_angle": "22", + "top_shell_thickness": "0.6", + "travel_acceleration": "6000", + "tree_support_tip_diameter": "1.2" +} diff --git a/resources/profiles/Meltingplot/process/fdm_process_meltingplot_chx_small_nozzle.json b/resources/profiles/Meltingplot/process/fdm_process_meltingplot_chx_small_nozzle.json new file mode 100644 index 0000000000..95506dcd70 --- /dev/null +++ b/resources/profiles/Meltingplot/process/fdm_process_meltingplot_chx_small_nozzle.json @@ -0,0 +1,24 @@ +{ + "type": "process", + "name": "fdm_process_meltingplot_chx_small_nozzle", + "inherits": "fdm_process_meltingplot_chx_common", + "from": "system", + "instantiation": "false", + "bottom_shell_thickness": "2", + "default_jerk": "12", + "infill_jerk": "12", + "initial_layer_jerk": "5", + "initial_layer_print_height": "0.4", + "inner_wall_acceleration": "6000", + "outer_wall_acceleration": "3000", + "outer_wall_jerk": "6", + "outer_wall_line_width": "115%", + "outer_wall_speed": "220", + "sparse_infill_speed": "270", + "support_top_z_distance": "0.3", + "top_shell_thickness": "2", + "top_surface_jerk": "6", + "travel_acceleration": "6000", + "wall_sequence": "inner-outer-inner wall", + "wipe_before_external_loop": "1" +} diff --git a/resources/profiles/Meltingplot/process/fdm_process_meltingplot_mbl_04_nozzle.json b/resources/profiles/Meltingplot/process/fdm_process_meltingplot_mbl_04_nozzle.json new file mode 100644 index 0000000000..bef0abf7e6 --- /dev/null +++ b/resources/profiles/Meltingplot/process/fdm_process_meltingplot_mbl_04_nozzle.json @@ -0,0 +1,14 @@ +{ + "type": "process", + "name": "fdm_process_meltingplot_mbl_04_nozzle", + "inherits": "fdm_process_meltingplot_mbl_common", + "from": "system", + "instantiation": "false", + "bridge_flow": "0.85", + "initial_layer_print_height": "0.3", + "line_width": "115%", + "inner_wall_line_width": "115%", + "outer_wall_line_width": "115%", + "sparse_infill_line_width": "115%", + "internal_solid_infill_line_width": "115%" +} diff --git a/resources/profiles/Meltingplot/process/fdm_process_meltingplot_mbl_06_nozzle.json b/resources/profiles/Meltingplot/process/fdm_process_meltingplot_mbl_06_nozzle.json new file mode 100644 index 0000000000..e35d4446c1 --- /dev/null +++ b/resources/profiles/Meltingplot/process/fdm_process_meltingplot_mbl_06_nozzle.json @@ -0,0 +1,14 @@ +{ + "type": "process", + "name": "fdm_process_meltingplot_mbl_06_nozzle", + "inherits": "fdm_process_meltingplot_mbl_common", + "from": "system", + "instantiation": "false", + "bridge_flow": "0.65", + "initial_layer_print_height": "0.4", + "line_width": "120%", + "inner_wall_line_width": "120%", + "outer_wall_line_width": "110%", + "sparse_infill_line_width": "120%", + "internal_solid_infill_line_width": "120%" +} diff --git a/resources/profiles/Meltingplot/process/fdm_process_meltingplot_mbl_08_nozzle.json b/resources/profiles/Meltingplot/process/fdm_process_meltingplot_mbl_08_nozzle.json new file mode 100644 index 0000000000..7548418e1f --- /dev/null +++ b/resources/profiles/Meltingplot/process/fdm_process_meltingplot_mbl_08_nozzle.json @@ -0,0 +1,14 @@ +{ + "type": "process", + "name": "fdm_process_meltingplot_mbl_08_nozzle", + "inherits": "fdm_process_meltingplot_mbl_common", + "from": "system", + "instantiation": "false", + "bridge_flow": "0.5", + "initial_layer_print_height": "0.5", + "line_width": "120%", + "inner_wall_line_width": "120%", + "outer_wall_line_width": "115%", + "sparse_infill_line_width": "115%", + "internal_solid_infill_line_width": "120%" +} diff --git a/resources/profiles/Meltingplot/process/fdm_process_meltingplot_mbl_10_nozzle.json b/resources/profiles/Meltingplot/process/fdm_process_meltingplot_mbl_10_nozzle.json new file mode 100644 index 0000000000..811916f197 --- /dev/null +++ b/resources/profiles/Meltingplot/process/fdm_process_meltingplot_mbl_10_nozzle.json @@ -0,0 +1,15 @@ +{ + "type": "process", + "name": "fdm_process_meltingplot_mbl_10_nozzle", + "inherits": "fdm_process_meltingplot_mbl_common", + "from": "system", + "instantiation": "false", + "bridge_flow": "0.4", + "initial_layer_print_height": "0.5", + "infill_wall_overlap": "15%", + "line_width": "120%", + "inner_wall_line_width": "120%", + "outer_wall_line_width": "110%", + "sparse_infill_line_width": "120%", + "internal_solid_infill_line_width": "120%" +} diff --git a/resources/profiles/Meltingplot/process/fdm_process_meltingplot_mbl_12_nozzle.json b/resources/profiles/Meltingplot/process/fdm_process_meltingplot_mbl_12_nozzle.json new file mode 100644 index 0000000000..02f4221eb9 --- /dev/null +++ b/resources/profiles/Meltingplot/process/fdm_process_meltingplot_mbl_12_nozzle.json @@ -0,0 +1,15 @@ +{ + "type": "process", + "name": "fdm_process_meltingplot_mbl_12_nozzle", + "inherits": "fdm_process_meltingplot_mbl_common", + "from": "system", + "instantiation": "false", + "bridge_flow": "0.4", + "initial_layer_print_height": "0.5", + "infill_wall_overlap": "15%", + "line_width": "120%", + "inner_wall_line_width": "120%", + "outer_wall_line_width": "110%", + "sparse_infill_line_width": "120%", + "internal_solid_infill_line_width": "120%" +} diff --git a/resources/profiles/Meltingplot/process/fdm_process_meltingplot_mbl_common.json b/resources/profiles/Meltingplot/process/fdm_process_meltingplot_mbl_common.json new file mode 100644 index 0000000000..0e94be6513 --- /dev/null +++ b/resources/profiles/Meltingplot/process/fdm_process_meltingplot_mbl_common.json @@ -0,0 +1,60 @@ +{ + "type": "process", + "name": "fdm_process_meltingplot_mbl_common", + "inherits": "fdm_process_common", + "from": "system", + "instantiation": "false", + "filename_format": "{input_filename_base}_L{layer_height}mm_N{nozzle_diameter[0]}_{filament_type[initial_tool]}_{printer_model}_{print_time}.gcode", + "bottom_shell_layers": "4", + "bottom_shell_thickness": "0.8", + "bridge_speed": "20", + "slowdown_for_curled_perimeters": "0", + "default_acceleration": "0", + "initial_layer_acceleration": "0", + "inner_wall_acceleration": "0", + "outer_wall_acceleration": "0", + "top_surface_acceleration": "0", + "travel_acceleration": "0", + "detect_thin_wall": "1", + "elefant_foot_compensation": "0.1", + "enable_prime_tower": "0", + "enable_support": "0", + "gap_infill_speed": "42", + "infill_wall_overlap": "20%", + "initial_layer_infill_speed": "30", + "initial_layer_line_width": "120%", + "initial_layer_speed": "20", + "inner_wall_speed": "45", + "internal_solid_infill_speed": "80", + "outer_wall_speed": "42", + "prime_tower_width": "60", + "resolution": "0.01", + "seam_position": "aligned", + "skirt_distance": "5", + "skirt_height": "1", + "skirt_loops": "3", + "small_perimeter_speed": "42", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "cubic", + "sparse_infill_speed": "80", + "standby_temperature_delta": "-100", + "support_base_pattern": "rectilinear", + "support_base_pattern_spacing": "5", + "support_interface_spacing": "0.2", + "support_interface_speed": "40", + "support_interface_top_layers": "4", + "support_interface_bottom_layers": "4", + "support_line_width": "100%", + "support_object_xy_distance": "0.2", + "support_on_build_plate_only": "1", + "support_speed": "50", + "support_style": "snug", + "support_threshold_angle": "55", + "support_top_z_distance": "0.1", + "top_shell_layers": "5", + "top_shell_thickness": "1", + "top_surface_line_width": "110%", + "top_surface_speed": "42", + "travel_speed": "350", + "wall_loops": "2" +} From bfe458507bc05007c32f3e208501fdf471e89819 Mon Sep 17 00:00:00 2001 From: Ian Bassi Date: Mon, 21 Sep 2026 14:23:32 -0300 Subject: [PATCH 16/17] Add X-Ray view mode to 3D viewport (#15770) --- resources/shaders/110/xray.fs | 28 ++++++++++++++ resources/shaders/110/xray.vs | 31 +++++++++++++++ resources/shaders/140/xray.fs | 30 +++++++++++++++ resources/shaders/140/xray.vs | 31 +++++++++++++++ src/slic3r/GUI/3DScene.cpp | 6 ++- src/slic3r/GUI/GLCanvas3D.cpp | 60 +++++++++++++++++++++++++++++ src/slic3r/GUI/GLCanvas3D.hpp | 2 + src/slic3r/GUI/GLShadersManager.cpp | 2 + src/slic3r/GUI/Plater.cpp | 11 ++++++ src/slic3r/GUI/Plater.hpp | 3 ++ 10 files changed, 203 insertions(+), 1 deletion(-) create mode 100644 resources/shaders/110/xray.fs create mode 100644 resources/shaders/110/xray.vs create mode 100644 resources/shaders/140/xray.fs create mode 100644 resources/shaders/140/xray.vs diff --git a/resources/shaders/110/xray.fs b/resources/shaders/110/xray.fs new file mode 100644 index 0000000000..27bdb17044 --- /dev/null +++ b/resources/shaders/110/xray.fs @@ -0,0 +1,28 @@ +#version 110 + +// X-Ray view: each surface is a thin translucent layer of its own color, covering more the more +// edge-on it is seen. The caller draws it with depth writes off, so every surface a view ray crosses +// composites and overlapping geometry reads as denser. Source-alpha rather than additive blending: +// additive would saturate to white on the light theme's near-white background. +#define EDGE_FALLOFF 2.0 +// Coverage head-on and edge-on. +#define FACE_DENSITY 0.12 +#define EDGE_DENSITY 0.65 + +uniform vec4 uniform_color; + +varying vec3 eye_normal; +varying vec3 eye_position; +varying vec3 clipping_planes_dots; + +void main() +{ + if (any(lessThan(clipping_planes_dots, vec3(0.0)))) + discard; + + // abs(): back faces are drawn too, and there only the angle matters. + float facing = abs(dot(normalize(eye_normal), normalize(-eye_position))); + float density = mix(EDGE_DENSITY, FACE_DENSITY, pow(facing, EDGE_FALLOFF)); + + gl_FragColor = vec4(uniform_color.rgb, density * uniform_color.a); +} diff --git a/resources/shaders/110/xray.vs b/resources/shaders/110/xray.vs new file mode 100644 index 0000000000..85f932f2df --- /dev/null +++ b/resources/shaders/110/xray.vs @@ -0,0 +1,31 @@ +#version 110 + +uniform mat4 view_model_matrix; +uniform mat4 projection_matrix; +uniform mat3 view_normal_matrix; +uniform mat4 volume_world_matrix; + +// Clipping, as in gouraud.vs: the preview's top / bottom plane and the SLA gizmo's free one. +uniform vec2 z_range; +uniform vec4 clipping_plane; + +attribute vec3 v_position; +attribute vec3 v_normal; + +varying vec3 eye_normal; +varying vec3 eye_position; +varying vec3 clipping_planes_dots; + +void main() +{ + eye_normal = view_normal_matrix * v_normal; + + vec4 position = view_model_matrix * vec4(v_position, 1.0); + eye_position = position.xyz; + + // A component below zero means the fragment is clipped away. + vec4 world_pos = volume_world_matrix * vec4(v_position, 1.0); + clipping_planes_dots = vec3(dot(world_pos, clipping_plane), world_pos.z - z_range.x, z_range.y - world_pos.z); + + gl_Position = projection_matrix * position; +} diff --git a/resources/shaders/140/xray.fs b/resources/shaders/140/xray.fs new file mode 100644 index 0000000000..71c3569f8e --- /dev/null +++ b/resources/shaders/140/xray.fs @@ -0,0 +1,30 @@ +#version 140 + +// X-Ray view: each surface is a thin translucent layer of its own color, covering more the more +// edge-on it is seen. The caller draws it with depth writes off, so every surface a view ray crosses +// composites and overlapping geometry reads as denser. Source-alpha rather than additive blending: +// additive would saturate to white on the light theme's near-white background. +#define EDGE_FALLOFF 2.0 +// Coverage head-on and edge-on. +#define FACE_DENSITY 0.12 +#define EDGE_DENSITY 0.65 + +uniform vec4 uniform_color; + +in vec3 eye_normal; +in vec3 eye_position; +in vec3 clipping_planes_dots; + +out vec4 out_color; + +void main() +{ + if (any(lessThan(clipping_planes_dots, vec3(0.0)))) + discard; + + // abs(): back faces are drawn too, and there only the angle matters. + float facing = abs(dot(normalize(eye_normal), normalize(-eye_position))); + float density = mix(EDGE_DENSITY, FACE_DENSITY, pow(facing, EDGE_FALLOFF)); + + out_color = vec4(uniform_color.rgb, density * uniform_color.a); +} diff --git a/resources/shaders/140/xray.vs b/resources/shaders/140/xray.vs new file mode 100644 index 0000000000..9cb0d64b32 --- /dev/null +++ b/resources/shaders/140/xray.vs @@ -0,0 +1,31 @@ +#version 140 + +uniform mat4 view_model_matrix; +uniform mat4 projection_matrix; +uniform mat3 view_normal_matrix; +uniform mat4 volume_world_matrix; + +// Clipping, as in gouraud.vs: the preview's top / bottom plane and the SLA gizmo's free one. +uniform vec2 z_range; +uniform vec4 clipping_plane; + +in vec3 v_position; +in vec3 v_normal; + +out vec3 eye_normal; +out vec3 eye_position; +out vec3 clipping_planes_dots; + +void main() +{ + eye_normal = view_normal_matrix * v_normal; + + vec4 position = view_model_matrix * vec4(v_position, 1.0); + eye_position = position.xyz; + + // A component below zero means the fragment is clipped away. + vec4 world_pos = volume_world_matrix * vec4(v_position, 1.0); + clipping_planes_dots = vec3(dot(world_pos, clipping_plane), world_pos.z - z_range.x, z_range.y - world_pos.z); + + gl_Position = projection_matrix * position; +} diff --git a/src/slic3r/GUI/3DScene.cpp b/src/slic3r/GUI/3DScene.cpp index fd23337b44..bf3cdc5303 100644 --- a/src/slic3r/GUI/3DScene.cpp +++ b/src/slic3r/GUI/3DScene.cpp @@ -1157,6 +1157,10 @@ void GLVolumeCollection::render(GLVolumeCollection::ERenderType type, const float support_normal_z = get_selection_support_normal_z(); + // The outline passes below are driven by is_outline, which only the object shaders have; with an + // overlay one (wireframe, x-ray) bound they would just draw the volume again. + const bool shader_can_outline = shader->get_uniform_location("is_outline") >= 0; + // Prime depth_tex on every frame so non-outline draws do not keep the // default sampler unit 0, which can conflict with other sampler types. shader->set_uniform("depth_tex", OUTLINE_DEPTH_TEX_UNIT); @@ -1257,7 +1261,7 @@ void GLVolumeCollection::render(GLVolumeCollection::ERenderType type, const Matrix3d view_normal_matrix = view_matrix.matrix().block(0, 0, 3, 3) * model_matrix.matrix().block(0, 0, 3, 3).inverse().transpose(); shader->set_uniform("view_normal_matrix", view_normal_matrix); //BBS: add outline related logic - if (volume.first->selected && GUI::wxGetApp().show_outline()) + if (volume.first->selected && shader_can_outline && GUI::wxGetApp().show_outline()) volume.first->render_with_outline(cnv_size); else volume.first->render(); diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp index 02ef95e2c6..19bc6eb98a 100644 --- a/src/slic3r/GUI/GLCanvas3D.cpp +++ b/src/slic3r/GUI/GLCanvas3D.cpp @@ -8758,6 +8758,15 @@ void GLCanvas3D::_render_objects(GLVolumeCollection::ERenderType type, bool with else m_volumes.set_show_sinking_contours(!m_gizmos.is_hiding_instances()); + // Orca: X-Ray replaces both shaded passes with a single one, driven from the opaque call, and + // reuses the volume state (print volume, z range, clipping plane) set up above. + if (_is_xray_view_active()) { + if (type == GLVolumeCollection::ERenderType::Opaque) + _render_xray_volumes(); + m_camera_clipping_plane = ClippingPlane::ClipsNothing(); + return; + } + const bool realistic_mode = wxGetApp().app_config != nullptr && wxGetApp().app_config->get_bool(SETTING_OPENGL_REALISTIC_MODE); const bool realistic_phong = wxGetApp().app_config != nullptr && wxGetApp().app_config->get_bool(SETTING_OPENGL_REALISTIC_PHONG); const std::string shader_name = (realistic_mode && realistic_phong) ? "phong" : "gouraud"; @@ -8894,6 +8903,51 @@ void GLCanvas3D::_render_objects(GLVolumeCollection::ERenderType type, bool with m_camera_clipping_plane = ClippingPlane::ClipsNothing(); } +bool GLCanvas3D::_is_xray_view_active() const +{ + if (m_canvas_type == ECanvasType::CanvasPreview || !wxGetApp().plater()->is_show_xray()) + return false; + + // A painting gizmo and the layer height editor draw the object through their own shaders, and + // would lose what they draw if X-Ray took the pass over. + if (dynamic_cast(m_gizmos.get_current()) != nullptr) + return false; + return !(m_picking_enabled && m_layers_editing.is_enabled() && m_layers_editing.last_object_id != -1 && + m_layers_editing.object_max_z() > 0.0f); +} + +void GLCanvas3D::_render_xray_volumes() +{ + if (m_volumes.empty()) + return; + + GLShaderProgram* shader = wxGetApp().get_shader("xray"); + if (shader == nullptr) + return; + + const Camera& camera = wxGetApp().plater()->get_camera(); + const ECanvasType canvas_type = m_canvas_type; + + // Depth writes off so every surface along a view ray composites, not just the nearest one, and + // back faces kept for the far wall of a hollow part. The low, near-uniform coverage the shader + // emits saturates towards the volume color whatever the order, so the volumes are not sorted. + glsafe(::glDepthMask(GL_FALSE)); + glsafe(::glEnable(GL_BLEND)); + glsafe(::glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)); + + shader->start_using(); + m_volumes.render(GLVolumeCollection::ERenderType::All, true, camera.get_view_matrix(), camera.get_projection_matrix(), + get_canvas_size(), [this, canvas_type](const GLVolume& volume) { + if (canvas_type == ECanvasType::CanvasAssembleView) + return !volume.is_modifier && !volume.is_wipe_tower; + return m_render_sla_auxiliaries || volume.composite_id.volume_id >= 0; + }); + shader->stop_using(); + + glsafe(::glDisable(GL_BLEND)); + glsafe(::glDepthMask(GL_TRUE)); +} + void GLCanvas3D::_render_wireframe_overlay() { if (!wxGetApp().plater()->is_show_wireframe()) @@ -10020,6 +10074,12 @@ void GLCanvas3D::_render_canvas_toolbar() [this, p]{p->toggle_show_wireframe(); m_dirty = true;} ); + create_menu_item( _utf8(L("X-Ray")), + m_canvas_type != ECanvasType::CanvasPreview, // not work on preview + p->is_show_xray(), + [this, p]{p->toggle_show_xray(); m_dirty = true;} + ); + create_menu_item( _utf8(L("Realistic View")), m_canvas_type != ECanvasType::CanvasPreview, // not work on preview cfg->get_bool(SETTING_OPENGL_REALISTIC_MODE), diff --git a/src/slic3r/GUI/GLCanvas3D.hpp b/src/slic3r/GUI/GLCanvas3D.hpp index fe6108d39f..9c78581f69 100644 --- a/src/slic3r/GUI/GLCanvas3D.hpp +++ b/src/slic3r/GUI/GLCanvas3D.hpp @@ -1333,6 +1333,8 @@ private: //BBS: add outline drawing logic void _render_objects(GLVolumeCollection::ERenderType type, bool with_outline = true); void _render_wireframe_overlay(); + bool _is_xray_view_active() const; + void _render_xray_volumes(); //BBS: GUI refactor: add canvas size as parameters void _render_gcode(int canvas_width, int canvas_height); void _render_gcode_overlay(int canvas_width, int canvas_height); diff --git a/src/slic3r/GUI/GLShadersManager.cpp b/src/slic3r/GUI/GLShadersManager.cpp index 2b8a0edf0a..b35d598829 100644 --- a/src/slic3r/GUI/GLShadersManager.cpp +++ b/src/slic3r/GUI/GLShadersManager.cpp @@ -90,6 +90,8 @@ std::pair GLShadersManager::init() , { "ENABLE_ENVIRONMENT_MAP"sv } #endif // ENABLE_ENVIRONMENT_MAP ); + // used to render objects as translucent, edge weighted surfaces in the X-Ray view + valid &= append_shader("xray", { prefix + "xray.vs", prefix + "xray.fs" }); // used to render variable layers heights in 3d editor valid &= append_shader("variable_layer_height", { prefix + "variable_layer_height.vs", prefix + "variable_layer_height.fs" }); // used to render highlight contour around selected triangles inside the multi-material gizmo diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index 502265af00..d2196fefe6 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -6827,6 +6827,7 @@ struct Plater::priv bool show_render_statistic_dialog{ false }; bool show_wireframe{ false }; bool wireframe_enabled{ true }; + bool show_xray{ false }; static const std::regex pattern_bundle; static const std::regex pattern_3mf; @@ -22399,6 +22400,16 @@ bool Plater::is_wireframe_enabled() const return p->wireframe_enabled; } +void Plater::toggle_show_xray() +{ + p->show_xray = !p->show_xray; +} + +bool Plater::is_show_xray() const +{ + return p->show_xray; +} + /*Plater::TakeSnapshot::TakeSnapshot(Plater *plater, const std::string &snapshot_name) : TakeSnapshot(plater, from_u8(snapshot_name)) {} diff --git a/src/slic3r/GUI/Plater.hpp b/src/slic3r/GUI/Plater.hpp index 1474356e45..ae70a6a0bb 100644 --- a/src/slic3r/GUI/Plater.hpp +++ b/src/slic3r/GUI/Plater.hpp @@ -956,6 +956,9 @@ public: void enable_wireframe(bool status); bool is_wireframe_enabled() const; + void toggle_show_xray(); + bool is_show_xray() const; + // Wrapper around wxWindow::PopupMenu to suppress error messages popping out while tracking the popup menu. bool PopupMenu(wxMenu *menu, const wxPoint& pos = wxDefaultPosition); bool PopupMenu(wxMenu *menu, int x, int y) { return this->PopupMenu(menu, wxPoint(x, y)); } From 824b216f18232a0e25644e225c286746ee07cb5f Mon Sep 17 00:00:00 2001 From: Kris Austin Date: Mon, 21 Sep 2026 15:36:04 -0500 Subject: [PATCH 17/17] feat(gui): assignable keyboard shortcuts (#15706) --- docs/HLSD/keyboard-shortcuts.md | 132 +++ src/slic3r/CMakeLists.txt | 4 + src/slic3r/GUI/GLCanvas3D.cpp | 824 ++++++------------ src/slic3r/GUI/GLCanvas3D.hpp | 27 +- src/slic3r/GUI/GUI_App.cpp | 30 +- src/slic3r/GUI/GUI_App.hpp | 12 +- src/slic3r/GUI/GUI_Factories.cpp | 10 +- src/slic3r/GUI/GUI_ObjectList.cpp | 131 ++- src/slic3r/GUI/GUI_ObjectList.hpp | 9 +- src/slic3r/GUI/GUI_Preview.cpp | 24 - src/slic3r/GUI/GUI_Preview.hpp | 1 - src/slic3r/GUI/Gizmos/GLGizmoAdvancedCut.cpp | 1 - src/slic3r/GUI/Gizmos/GLGizmoAssembly.cpp | 3 +- src/slic3r/GUI/Gizmos/GLGizmoBase.cpp | 9 +- src/slic3r/GUI/Gizmos/GLGizmoBase.hpp | 9 +- src/slic3r/GUI/Gizmos/GLGizmoBrimEars.cpp | 3 +- src/slic3r/GUI/Gizmos/GLGizmoCut.cpp | 3 +- src/slic3r/GUI/Gizmos/GLGizmoEmboss.cpp | 3 +- src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp | 30 +- src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.hpp | 3 +- src/slic3r/GUI/Gizmos/GLGizmoFlatten.cpp | 3 +- src/slic3r/GUI/Gizmos/GLGizmoFuzzySkin.cpp | 3 +- src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp | 1 - src/slic3r/GUI/Gizmos/GLGizmoMeasure.cpp | 3 +- src/slic3r/GUI/Gizmos/GLGizmoMeshBoolean.cpp | 3 +- .../GUI/Gizmos/GLGizmoMmuSegmentation.cpp | 37 +- .../GUI/Gizmos/GLGizmoMmuSegmentation.hpp | 2 +- src/slic3r/GUI/Gizmos/GLGizmoMove.cpp | 3 +- src/slic3r/GUI/Gizmos/GLGizmoPainterBase.hpp | 2 + src/slic3r/GUI/Gizmos/GLGizmoRotate.cpp | 3 +- src/slic3r/GUI/Gizmos/GLGizmoScale.cpp | 3 +- src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp | 22 +- src/slic3r/GUI/Gizmos/GLGizmoSeam.hpp | 3 +- src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp | 1 - src/slic3r/GUI/Gizmos/GLGizmoText.cpp | 1 - src/slic3r/GUI/Gizmos/GLGizmosManager.cpp | 86 +- src/slic3r/GUI/Gizmos/GLGizmosManager.hpp | 5 +- src/slic3r/GUI/HintNotification.cpp | 4 +- src/slic3r/GUI/KBShortcutsDialog.cpp | 800 ++++++++++------- src/slic3r/GUI/KBShortcutsDialog.hpp | 123 ++- src/slic3r/GUI/KeyChord.cpp | 314 +++++++ src/slic3r/GUI/KeyChord.hpp | 64 ++ src/slic3r/GUI/MainFrame.cpp | 314 ++++--- src/slic3r/GUI/MainFrame.hpp | 26 + src/slic3r/GUI/NativeCommands.cpp | 3 +- src/slic3r/GUI/Plater.cpp | 12 +- src/slic3r/GUI/Preferences.cpp | 35 +- src/slic3r/GUI/Preferences.hpp | 6 + src/slic3r/GUI/Shortcuts.cpp | 377 ++++++++ src/slic3r/GUI/Shortcuts.hpp | 127 +++ tests/slic3rutils/CMakeLists.txt | 1 + tests/slic3rutils/test_shortcuts.cpp | 329 +++++++ 52 files changed, 2685 insertions(+), 1299 deletions(-) create mode 100644 docs/HLSD/keyboard-shortcuts.md create mode 100644 src/slic3r/GUI/KeyChord.cpp create mode 100644 src/slic3r/GUI/KeyChord.hpp create mode 100644 src/slic3r/GUI/Shortcuts.cpp create mode 100644 src/slic3r/GUI/Shortcuts.hpp create mode 100644 tests/slic3rutils/test_shortcuts.cpp diff --git a/docs/HLSD/keyboard-shortcuts.md b/docs/HLSD/keyboard-shortcuts.md new file mode 100644 index 0000000000..7cfc72c30f --- /dev/null +++ b/docs/HLSD/keyboard-shortcuts.md @@ -0,0 +1,132 @@ +# Keyboard Shortcuts + +## Why it exists + +Key events arrive in several windows (the main frame's char hook, the 3D canvases, the +gizmo manager and the object list), and the same keys are shown again in menu labels, +toolbar tooltips, gizmo names and the shortcuts dialog. The registry is the one table all +of them read. Each binding is defined once; dispatchers look key events up there, labels +are derived from it, and a change the user makes updates all of them. + +## Data model + +`KeyChord` (`src/slic3r/GUI/KeyChord.hpp`) is one key press: the key code as +`wxEVT_KEY_DOWN` reports it, plus the `wxMOD_*` modifiers held with it. It has two +text forms. The canonical one (`Ctrl+Shift+S`) is platform-neutral and doubles as the wx +accelerator string and the config format. The display one uses translated modifier +names and the command and option glyphs on macOS. `KeyChord::from_event()` turns any wx +key event into the same key code and modifiers, so a chord recorded in the dialog is +equal to the chord a dispatcher builds from the key press. + +`Shortcut` is the enum of every user-facing binding. `shortcut_table` in +`src/slic3r/GUI/Shortcuts.cpp` gives each one a config key, a description, a context +mask, a default chord, a `repeatable` flag and a `modifier_variants` flag, in the order +the dialog lists them; a `static_assert` keeps the table and the enum in step. + +`ShortcutRegistry` overlays the user's overrides on the defaults and keeps a +chord-to-shortcut index for lookups. It reads and writes the `shortcuts` section of +`AppConfig`. Only overrides are stored, so a default can change between releases +without touching anyone's config; `none` records a shortcut the user unbound. + +## Contexts + +A key press is looked up in the context of the window that received it. + +| Context | Dispatcher | Examples | +|--------------|-----------------------------------------------------------|-------------------------------| +| `Global` | `MainFrame`'s `wxEVT_CHAR_HOOK`, before any child sees it | New project, camera views | +| `Plater` | `GLCanvas3D` of the 3D and assembly views | Arrange, gizmo activation | +| `Preview` | `GLCanvas3D` of the G-code preview | One-layer mode, jump to layer | +| `ObjectList` | the object list | Copy, delete, auto drop | +| `Painting` | `GLGizmosManager` while a painting gizmo is open | Circle, sphere, fill tools | + +A shortcut can belong to several contexts, which is how copy and paste are a single +binding for the canvas and the object list. Two shortcuts can share a chord when their +contexts do not overlap; `C` is the cut gizmo in the 3D view, the G-code window in the +preview and the circle tool while painting. A Global chord is dispatched before every +other context, so the dialog treats it as conflicting with all of them. + +A Global shortcut has to include Ctrl or Alt or use a key that types nothing, since a +bare printable key in the frame hook would swallow that character in every text field. +The dialog refuses such chords and `ShortcutRegistry::load()` drops them from the config. +Space counts as typing. The speed dial's default is the one bare Space, and +`MainFrame` leaves it to a focused control that uses Space itself (text fields, buttons, +combo boxes), so it opens the dial from the canvases and the tab strip only. + +## Which event a chord matches + +Letters, digits and special keys match on `wxEVT_KEY_DOWN`. Its key codes do not depend +on the keyboard layout: the key labelled `Q` on an AZERTY keyboard and the key in the +same position under a Cyrillic layout both report `Q`. Numpad keys fold onto their main +keyboard equivalents, so `Ctrl+1` and `Ctrl+Numpad 1` are one binding. + +Punctuation matches on `wxEVT_CHAR`, because only the char event knows which character +a key produced under the active layout. `+` is Shift and `=` on a US keyboard and a key +of its own on a German one, and the binding means the character in both cases. The +canvas looks a key up on key-down first and, when nothing matched, once more on the char +event, for punctuation chords only. The dialog records chords the same way: a printable +non-alphanumeric key pressed with nothing but Shift is taken from the char event that +follows. + +wxGTK does not report key auto-repeat, so the canvases share one record of the keys +seen going down and swallow the repeats of every shortcut not marked `repeatable`. Zoom +and undo repeat, for example; a toggle such as Tab does not. The record is shared because +a shortcut can move the focus to another canvas while its key is still held; a key +released while no canvas had the focus is dropped on the next press. + +A few shortcuts have `modifier_variants`: Shift or Ctrl added to their binding selects a +step of the same action (1 mm and camera-space moves of the selection, five-step slider +moves). Only a binding without Shift or Ctrl of its own has steps, so no two bindings +share one. `ShortcutRegistry::match()` looks the exact chord up first and only then, when +nothing is bound to it, looks for such a shortcut whose binding is the chord minus those +modifiers, reporting which were added; a binding on Ctrl+Shift+key therefore wins over +the combined step. The Shift and Ctrl steps themselves are reserved. `step_owner()` names +the shortcut they belong to, the capture dialog refuses to assign them, and +`conflicts()` reports exact chords only. A binding made before its key became a stepping +key keeps its chord and shadows that one step. A move or rotation of the selection +started from the keyboard runs until the key that started it is released, or the +canvas loses focus, so a held key is one undo step. + +## Labels + +Menu labels, toolbar tooltips, gizmo names, the context menu and the shortcuts dialog +read the registry, so a rebinding shows up in all of them. Each tracked menu item keeps +its base label; `MainFrame::update_shortcut_labels()` appends the current binding +again after an edit, which also installs the new wx accelerator. + +A chord that is unsafe as a menu accelerator, meaning a bare printable key, is appended +to the label as plain text so the menu cannot take it away from text fields. The macOS +edit menu shows its clipboard and undo entries that way, because a system-menu key +equivalent for Cmd+C would run instead of the text field's own copy. + +On macOS the object list receives no key events at all, so its bindings are installed as +a `wxAcceleratorTable`, regenerated from the registry after each edit. + +## Editing + +The shortcuts dialog has a page per context, each opening with a line that says when its +keys apply. A page lists the shortcuts under the headings of `section_table`, with the +fixed keys that cannot change (mouse buttons, the step modifiers, Esc, the digit keys +that pick a filament) sorted into the same sections. The mouse drag rows describe the +camera actions chosen in Preferences; their button opens Preferences > Control with that +option scrolled into view and focused, instead of editing a key. +Editing a row opens a capture dialog that records the next chord, names the shortcuts it +would take the chord from, and on confirmation unbinds those and binds this one. +Resetting a row asks the same question when its default is now held by another +shortcut, so a reset cannot leave two shortcuts on one chord. Each change is written to +the config at once and pushed to the menus, tooltips and accelerator tables through +`GUI_App::on_shortcuts_changed()`. The dialog opens from the Help menu and Preferences > +Control on the Global page, and from the `?` key on the page of the view that received it. + +## Adding a shortcut + +1. Add the enum value to `Shortcut` and its row to `shortcut_table`, in the position + the dialog should list it; the row's section heading is the `section_table` entry + above it, so a new section needs an entry there too. Pick a default that does not + collide inside its contexts; the `[Shortcuts]` tests check every default against the + others. +2. Handle it in the dispatcher of its context: `MainFrame::handle_global_shortcut`, + `GLCanvas3D::handle_shortcut`, `ObjectList::dispatch_shortcut`, or a gizmo's + `on_tool_shortcut`. A gizmo that opens on a key sets `m_shortcut` in its constructor. +3. Where the UI shows the key, ask the registry (`display()` for tooltips, + `accelerator()` for menu labels); no label holds a literal key name. diff --git a/src/slic3r/CMakeLists.txt b/src/slic3r/CMakeLists.txt index d04e38086f..d925ca6333 100644 --- a/src/slic3r/CMakeLists.txt +++ b/src/slic3r/CMakeLists.txt @@ -123,6 +123,8 @@ set(SLIC3R_GUI_SOURCES GUI/PluginPickerDialog.hpp GUI/PluginsDialog.cpp GUI/PluginsDialog.hpp + GUI/Shortcuts.cpp + GUI/Shortcuts.hpp GUI/SpeedDialDialog.cpp GUI/SpeedDialDialog.hpp GUI/ActionRegistry.cpp @@ -335,6 +337,8 @@ set(SLIC3R_GUI_SOURCES GUI/Jobs/Worker.hpp GUI/KBShortcutsDialog.cpp GUI/KBShortcutsDialog.hpp + GUI/KeyChord.cpp + GUI/KeyChord.hpp GUI/LibVGCode/LibVGCodeWrapper.hpp GUI/LibVGCode/LibVGCodeWrapper.cpp GUI/LinuxDisplayBackend.cpp diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp index 19bc6eb98a..190eeedbb4 100644 --- a/src/slic3r/GUI/GLCanvas3D.cpp +++ b/src/slic3r/GUI/GLCanvas3D.cpp @@ -29,6 +29,7 @@ #include "MainFrame.hpp" #include "WipeTowerDialog.hpp" #include "GUI_App.hpp" +#include "Shortcuts.hpp" #include "GUI_ObjectList.hpp" #include "GUI_Colors.hpp" #include "Mouse3DController.hpp" @@ -77,6 +78,7 @@ #include #include #include +#include #ifndef IMGUI_DEFINE_MATH_OPERATORS #define IMGUI_DEFINE_MATH_OPERATORS @@ -1055,7 +1057,6 @@ wxDEFINE_EVENT(EVT_GLCANVAS_UPDATE_BED_SHAPE, SimpleEvent); wxDEFINE_EVENT(EVT_GLCANVAS_TAB, SimpleEvent); wxDEFINE_EVENT(EVT_GLCANVAS_RESETGIZMOS, SimpleEvent); wxDEFINE_EVENT(EVT_GLCANVAS_MOVE_SLIDERS, wxKeyEvent); -wxDEFINE_EVENT(EVT_GLCANVAS_EDIT_COLOR_CHANGE, wxKeyEvent); wxDEFINE_EVENT(EVT_GLCANVAS_JUMP_TO, wxKeyEvent); wxDEFINE_EVENT(EVT_GLCANVAS_UNDO, SimpleEvent); wxDEFINE_EVENT(EVT_GLCANVAS_REDO, SimpleEvent); @@ -1174,7 +1175,6 @@ GLCanvas3D::GLCanvas3D(wxGLCanvas* canvas, Bed3D &bed) , m_dynamic_background_enabled(false) , m_multisample_allowed(false) , m_moving(false) - , m_tab_down(false) , m_camera_movement(false) , m_cursor_type(Standard) , m_color_by("volume") @@ -3229,6 +3229,9 @@ void GLCanvas3D::bind_event_handlers() m_canvas->Bind(wxEVT_PAINT, &GLCanvas3D::on_paint, this); m_canvas->Bind(wxEVT_SET_FOCUS, &GLCanvas3D::on_set_focus, this); m_canvas->Bind(wxEVT_KILL_FOCUS, [this](wxFocusEvent& evt) { + // The key-up that would commit a keyboard edit goes to whatever took the focus. + if (m_selection_edit.kind != SelectionEdit::None) + finish_selection_edit(); ImGui::SetWindowFocus(nullptr); render(); evt.Skip(); @@ -3358,8 +3361,6 @@ void GLCanvas3D::on_char(wxKeyEvent& evt) // see include/wx/defs.h enum wxKeyCode int keyCode = evt.GetKeyCode(); - int ctrlMask = wxMOD_CONTROL; - int shiftMask = wxMOD_SHIFT; auto imgui = wxGetApp().imgui(); if (imgui->update_key_data(evt)) { @@ -3367,6 +3368,11 @@ void GLCanvas3D::on_char(wxKeyEvent& evt) return; } +#ifdef SLIC3R_CAD + const int ctrlMask = wxMOD_CONTROL; + const int shiftMask = wxMOD_SHIFT; +#endif + // Design tab: Delete/Backspace removes the selected sketch entities while a // sketch tool is active and the canvas has focus (dialog text fields are separate // wx controls, so this never eats their editing keys). @@ -3425,12 +3431,6 @@ void GLCanvas3D::on_char(wxKeyEvent& evt) } #endif - bool is_in_painting_mode = false; - GLGizmoPainterBase *current_gizmo_painter = dynamic_cast(get_gizmos_manager().get_current()); - if (current_gizmo_painter != nullptr) { - is_in_painting_mode = true; - } - //BBS: add orient deactivate logic if (keyCode == WXK_ESCAPE && (_deactivate_arrange_menu() || _deactivate_orient_menu())) @@ -3439,361 +3439,271 @@ void GLCanvas3D::on_char(wxKeyEvent& evt) if (m_gizmos.on_char(evt)) return; - if ((evt.GetModifiers() & ctrlMask) != 0) { - // CTRL is pressed - switch (keyCode) { -#ifdef __APPLE__ - case 'a': - case 'A': -#else /* __APPLE__ */ - case WXK_CONTROL_A: -#endif /* __APPLE__ */ - if (!is_in_painting_mode && !m_layers_editing.is_enabled()) { - if (evt.ShiftDown()) - post_event(SimpleEvent(EVT_GLCANVAS_SELECT_ALL)); - else - post_event(SimpleEvent(EVT_GLCANVAS_SELECT_CURR_PLATE_ALL)); - } + if (const KeyChord chord = KeyChord::from_event(evt); chord.is_punctuation() && handle_shortcut(chord)) + return; + + if (evt.HasModifiers()) { + evt.Skip(); + return; + } + + auto obj_list = wxGetApp().obj_list(); + switch (keyCode) + { + case WXK_ESCAPE: { deselect_all(); break; } + + // BBS: use keypad to change extruder + case '1': { + if (!m_timer_set_color.IsRunning()) { + m_timer_set_color.StartOnce(500); + break; + } + } + case '0': //Color logic for material 10 + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': { + if (m_timer_set_color.IsRunning()) { + if (keyCode < '7') keyCode += 10; + m_timer_set_color.Stop(); + } + if (m_gizmos.get_current_type() != GLGizmosManager::MmSegmentation) + obj_list->set_extruder_for_selected_items(keyCode - '0'); break; -#ifdef __APPLE__ - case 'c': - case 'C': -#else /* __APPLE__ */ - case WXK_CONTROL_C: -#endif /* __APPLE__ */ - if (!is_in_painting_mode) - post_event(SimpleEvent(EVT_GLTOOLBAR_COPY)); - break; -#ifdef __APPLE__ - case 'm': - case 'M': -#else /* __APPLE__ */ - case WXK_CONTROL_M: -#endif /* __APPLE__ */ - { -#ifdef _WIN32 - if (wxGetApp().app_config->get("use_legacy_3DConnexion") == "true") { -#endif //_WIN32 -#ifdef __APPLE__ - // On OSX use Cmd+Shift+M to "Show/Hide 3Dconnexion devices settings dialog" - if ((evt.GetModifiers() & shiftMask) != 0) { -#endif // __APPLE__ - Mouse3DController& controller = wxGetApp().plater()->get_mouse3d_controller(); - controller.show_settings_dialog(!controller.is_settings_dialog_shown()); - m_dirty = true; -#ifdef __APPLE__ - } - else - // and Cmd+M to minimize application - wxGetApp().mainframe->Iconize(); -#endif // __APPLE__ -#ifdef _WIN32 - } -#endif //_WIN32 - break; - } -#ifdef __APPLE__ - case 'v': - case 'V': -#else /* __APPLE__ */ - case WXK_CONTROL_V: -#endif /* __APPLE__ */ - if (!is_in_painting_mode) - post_event(SimpleEvent(EVT_GLTOOLBAR_PASTE)); - break; - -#ifdef __APPLE__ - case 'x': - case 'X': -#else /* __APPLE__ */ - case WXK_CONTROL_X: -#endif /* __APPLE__ */ - if (!is_in_painting_mode) - post_event(SimpleEvent(EVT_GLTOOLBAR_CUT)); - break; - -#ifdef __APPLE__ - case 'f': - case 'F': -#else /* __APPLE__ */ - case WXK_CONTROL_F: -#endif /* __APPLE__ */ - break; - - -#ifdef __APPLE__ - case 'y': - case 'Y': -#else /* __APPLE__ */ - case WXK_CONTROL_Y: -#endif /* __APPLE__ */ - if (m_canvas_type == CanvasView3D || m_canvas_type == CanvasAssembleView) { - post_event(SimpleEvent(EVT_GLCANVAS_REDO)); - } - break; -#ifdef __APPLE__ - case 'z': - case 'Z': -#else /* __APPLE__ */ - case WXK_CONTROL_Z: -#endif /* __APPLE__ */ - // only support redu/undo in CanvasView3D - if (m_canvas_type == CanvasView3D || m_canvas_type == CanvasAssembleView) { - post_event(SimpleEvent(EVT_GLCANVAS_UNDO)); - } - break; - - // BBS -#ifdef __APPLE__ - case 'E': - case 'e': -#else /* __APPLE__ */ - case WXK_CONTROL_E: -#endif /* __APPLE__ */ - { m_labels.show(!m_labels.is_shown()); m_dirty = true; break; } - case '0': { - select_view("plate"); - zoom_to_bed(); - break; } - case '1': { select_view("top"); break; } - case '2': { select_view("bottom"); break; } - case '3': { select_view("front"); break; } - case '4': { select_view("rear"); break; } - case '5': { select_view("left"); break; } - case '6': { select_view("right"); break; } - case '7': { select_plate(); break; } - - //case WXK_BACK: - //case WXK_DELETE: -#ifdef __APPLE__ - case 'd': - case 'D': -#else /* __APPLE__ */ - case WXK_CONTROL_D: -#endif /* __APPLE__ */ - post_event(SimpleEvent(EVT_GLTOOLBAR_DELETE_ALL)); - break; -#ifdef __APPLE__ - case 'k': - case 'K': -#else /* __APPLE__ */ - case WXK_CONTROL_K: -#endif /* __APPLE__ */ - post_event(SimpleEvent(EVT_GLTOOLBAR_CLONE)); - break; - default: evt.Skip(); - } - } else { - auto obj_list = wxGetApp().obj_list(); - switch (keyCode) - { - //case WXK_BACK: - case WXK_DELETE: { post_event(SimpleEvent(EVT_GLTOOLBAR_DELETE)); break; } - // BBS -#ifdef __APPLE__ - case WXK_BACK: { post_event(SimpleEvent(EVT_GLTOOLBAR_DELETE)); break; } -#endif - case WXK_ESCAPE: { deselect_all(); break; } - case WXK_F5: { - if (wxGetApp().mainframe->is_printer_view()) - wxGetApp().mainframe->load_printer_url(); - - //if ((wxGetApp().is_editor() && !wxGetApp().plater()->model().objects.empty()) || - // (wxGetApp().is_gcode_viewer() && !wxGetApp().plater()->get_last_loaded_gcode().empty())) - // post_event(SimpleEvent(EVT_GLCANVAS_RELOAD_FROM_DISK)); - break; - } - - // BBS: use keypad to change extruder - case '1': { - if (!m_timer_set_color.IsRunning()) { - m_timer_set_color.StartOnce(500); - break; - } - } - case '0': //Color logic for material 10 - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': { - if (m_timer_set_color.IsRunning()) { - if (keyCode < '7') keyCode += 10; - m_timer_set_color.Stop(); - } - if (m_gizmos.get_current_type() != GLGizmosManager::MmSegmentation) - obj_list->set_extruder_for_selected_items(keyCode - '0'); - break; - } - - case '+': { - if (dynamic_cast(m_canvas->GetParent()) != nullptr) - post_event(wxKeyEvent(EVT_GLCANVAS_EDIT_COLOR_CHANGE, evt)); - else - post_event(Event(EVT_GLCANVAS_INCREASE_INSTANCES, +1)); - break; - } - case '-': { - if (dynamic_cast(m_canvas->GetParent()) != nullptr) - post_event(wxKeyEvent(EVT_GLCANVAS_EDIT_COLOR_CHANGE, evt)); - else - post_event(Event(EVT_GLCANVAS_INCREASE_INSTANCES, -1)); - break; - } - case '?': { post_event(SimpleEvent(EVT_GLCANVAS_QUESTION_MARK)); break; } - case 'A': - case 'a': - { - if ((evt.GetModifiers() & shiftMask) != 0) - post_event(SimpleEvent(EVT_GLCANVAS_ARRANGE_PARTPLATE)); - else - post_event(SimpleEvent(EVT_GLCANVAS_ARRANGE)); - break; - } - //case 'B': - //case 'b': { zoom_to_bed(); break; } - case 'C': - case 'c': { wxGetApp().toggle_show_gcode_window(); m_dirty = true; request_extra_frame(); break; } - //case 'G': - //case 'g': { - // if ((evt.GetModifiers() & shiftMask) != 0) { - // if (dynamic_cast(m_canvas->GetParent()) != nullptr) - // post_event(wxKeyEvent(EVT_GLCANVAS_JUMP_TO, evt)); - // } - // break; - //} - case 'I': - case 'i': { _update_camera_zoom(1.0); break; } - //case 'K': - //case 'k': { wxGetApp().plater()->get_camera().select_next_type(); m_dirty = true; break; } - //case 'L': - //case 'l': { - //if (!m_main_toolbar.is_enabled()) { - // m_gcode_viewer.enable_legend(!m_gcode_viewer.is_legend_enabled()); - // m_dirty = true; - // wxGetApp().plater()->update_preview_bottom_toolbar(); - //} - //break; - //} - case 'O': - case 'o': { _update_camera_zoom(-1.0); break; } - case 'q': - case 'Q': - { - if ((evt.GetModifiers() & shiftMask) != 0) - post_event(SimpleEvent(EVT_GLCANVAS_ORIENT_PARTPLATE)); - else - post_event(SimpleEvent(EVT_GLCANVAS_ORIENT)); - break; - } - //case 'Z': - //case 'z': { - // if (!m_selection.is_empty()) - // zoom_to_selection(); - // else { - // if (!m_volumes.empty()) - // zoom_to_volumes(); - // else - // _zoom_to_box(m_gcode_viewer.get_paths_bounding_box()); - // } - // break; - //} - case 'v': - case 'V': { post_event(SimpleEvent(EVT_GLCANVAS_PRINTABLE)); break; } - default: { evt.Skip(); break; } - } + } + default: { evt.Skip(); break; } } } -class TranslationProcessor +bool GLCanvas3D::handle_shortcut(const KeyChord& chord) { - using UpAction = std::function; - using DownAction = std::function; + const ShortcutContext context = m_canvas_type == CanvasPreview ? ShortcutContext::Preview : ShortcutContext::Plater; + const std::optional match = wxGetApp().shortcuts().match(context, chord); + if (!match.has_value()) + return false; + const Shortcut shortcut = match->shortcut; + const int held = match->step_modifiers; + if (m_key_down.repeat && !shortcut_info(shortcut).repeatable) + return true; - UpAction m_up_action{ nullptr }; - DownAction m_down_action{ nullptr }; + const bool painting = dynamic_cast(m_gizmos.get_current()) != nullptr; + const bool can_edit = m_canvas_type == CanvasView3D || m_canvas_type == CanvasAssembleView; + auto edit_selection = [this](SelectionEdit::Kind kind, const Vec3d& direction) { + if (!m_gizmos.is_enabled() || m_selection.is_empty() || m_canvas_type == CanvasAssembleView) + return false; + m_selection_edit.kind = kind; + m_selection_edit.key = m_key_down.code; + m_selection_edit.direction = direction; + return true; + }; + auto move_selection = [&](const Vec3d& direction) { + if (edit_selection(SelectionEdit::Move, direction)) + apply_selection_move((held & wxMOD_SHIFT) != 0, (held & wxMOD_CONTROL) != 0); + }; + auto rotate_selection = [&](double angle_z_rad) { + if (edit_selection(SelectionEdit::Rotate, Vec3d::UnitZ())) + apply_selection_rotate(angle_z_rad); + }; + auto step_slider = [this, held](auto&& step) { + IMSlider* layers = get_gcode_viewer().get_layers_slider(); + IMSlider* moves = get_gcode_viewer().get_moves_slider(); + step(layers, moves, held != 0 ? 5 : 1); + if (layers->is_dirty() && layers->is_one_layer()) + layers->SetLowerValue(layers->GetHigherValue()); + m_dirty = true; + }; - bool m_running{ false }; - Vec3d m_direction{ Vec3d::UnitX() }; - -public: - TranslationProcessor(UpAction up_action, DownAction down_action) - : m_up_action(up_action), m_down_action(down_action) - { - } - - void process(wxKeyEvent& evt) - { - const int keyCode = evt.GetKeyCode(); - wxEventType type = evt.GetEventType(); - if (type == wxEVT_KEY_UP) { - switch (keyCode) - { - case WXK_NUMPAD_LEFT: case WXK_LEFT: - case WXK_NUMPAD_RIGHT: case WXK_RIGHT: - case WXK_NUMPAD_UP: case WXK_UP: - case WXK_NUMPAD_DOWN: case WXK_DOWN: - { - m_running = false; - m_up_action(); - break; - } - default: { break; } - } - } - else if (type == wxEVT_KEY_DOWN) { - bool apply = false; - - switch (keyCode) - { - case WXK_SHIFT: - { - if (m_running) - apply = true; - - break; - } - case WXK_NUMPAD_LEFT: - case WXK_LEFT: - { - m_direction = -Vec3d::UnitX(); - apply = true; - break; - } - case WXK_NUMPAD_RIGHT: - case WXK_RIGHT: - { - m_direction = Vec3d::UnitX(); - apply = true; - break; - } - case WXK_NUMPAD_UP: - case WXK_UP: - { - m_direction = Vec3d::UnitY(); - apply = true; - break; - } - case WXK_NUMPAD_DOWN: - case WXK_DOWN: - { - m_direction = -Vec3d::UnitY(); - apply = true; - break; - } - default: { break; } - } - - if (apply) { - m_running = true; - m_down_action(m_direction, evt.ShiftDown(), evt.CmdDown()); - } + switch (shortcut) { + case Shortcut::SelectAll: + if (!painting && !m_layers_editing.is_enabled()) + post_event(SimpleEvent(EVT_GLCANVAS_SELECT_CURR_PLATE_ALL)); + break; + case Shortcut::SelectAllPlates: + if (!painting && !m_layers_editing.is_enabled()) + post_event(SimpleEvent(EVT_GLCANVAS_SELECT_ALL)); + break; + case Shortcut::Copy: if (!painting) post_event(SimpleEvent(EVT_GLTOOLBAR_COPY)); break; + case Shortcut::Paste: if (!painting) post_event(SimpleEvent(EVT_GLTOOLBAR_PASTE)); break; + case Shortcut::Cut: if (!painting) post_event(SimpleEvent(EVT_GLTOOLBAR_CUT)); break; + case Shortcut::Undo: if (can_edit) post_event(SimpleEvent(EVT_GLCANVAS_UNDO)); break; + case Shortcut::Redo: if (can_edit) post_event(SimpleEvent(EVT_GLCANVAS_REDO)); break; + case Shortcut::DeleteSelected: + if (!m_gizmos.on_delete_key()) + post_event(SimpleEvent(EVT_GLTOOLBAR_DELETE)); + break; + case Shortcut::DeleteAll: post_event(SimpleEvent(EVT_GLTOOLBAR_DELETE_ALL)); break; + case Shortcut::CloneSelected: post_event(SimpleEvent(EVT_GLTOOLBAR_CLONE)); break; + case Shortcut::AddInstance: post_event(Event(EVT_GLCANVAS_INCREASE_INSTANCES, +1)); break; + case Shortcut::RemoveInstance: post_event(Event(EVT_GLCANVAS_INCREASE_INSTANCES, -1)); break; + case Shortcut::TogglePrintable: post_event(SimpleEvent(EVT_GLCANVAS_PRINTABLE)); break; + case Shortcut::Arrange: + if (!m_gizmos.is_running()) + post_event(SimpleEvent(EVT_GLCANVAS_ARRANGE)); + break; + case Shortcut::ArrangePlate: + if (!m_gizmos.is_running()) + post_event(SimpleEvent(EVT_GLCANVAS_ARRANGE_PARTPLATE)); + break; + case Shortcut::Orient: post_event(SimpleEvent(EVT_GLCANVAS_ORIENT)); break; + case Shortcut::OrientPlate: post_event(SimpleEvent(EVT_GLCANVAS_ORIENT_PARTPLATE)); break; + case Shortcut::RotateSelectionLeft: rotate_selection(0.25 * M_PI); break; + case Shortcut::RotateSelectionRight: rotate_selection(-0.25 * M_PI); break; + case Shortcut::MoveSelectionLeft: move_selection(-Vec3d::UnitX()); break; + case Shortcut::MoveSelectionRight: move_selection(Vec3d::UnitX()); break; + case Shortcut::MoveSelectionUp: move_selection(Vec3d::UnitY()); break; + case Shortcut::MoveSelectionDown: move_selection(-Vec3d::UnitY()); break; + case Shortcut::ZoomIn: _update_camera_zoom(1.0); break; + case Shortcut::ZoomOut: _update_camera_zoom(-1.0); break; + case Shortcut::SwitchView: post_event(SimpleEvent(EVT_GLCANVAS_TAB)); break; + case Shortcut::CollapseSidebar: + if (!wxGetApp().is_gcode_viewer()) + post_event(SimpleEvent(EVT_GLCANVAS_COLLAPSE_SIDEBAR)); + break; + case Shortcut::ShowWireframe: + wxGetApp().plater()->toggle_show_wireframe(); + m_dirty = true; + break; + case Shortcut::Mouse3DSettings: { +#ifdef _WIN32 + if (wxGetApp().app_config->get("use_legacy_3DConnexion") == "true") { +#endif //_WIN32 + Mouse3DController& controller = wxGetApp().plater()->get_mouse3d_controller(); + controller.show_settings_dialog(!controller.is_settings_dialog_shown()); + m_dirty = true; +#ifdef _WIN32 } +#endif //_WIN32 + break; } -}; + case Shortcut::ReloadDevicePage: + if (wxGetApp().mainframe->is_printer_view()) + wxGetApp().mainframe->load_printer_url(); + break; + case Shortcut::KeyboardShortcuts: post_event(SimpleEvent(EVT_GLCANVAS_QUESTION_MARK)); break; + case Shortcut::ToggleGcodeWindow: + wxGetApp().toggle_show_gcode_window(); + m_dirty = true; + request_extra_frame(); + break; + case Shortcut::ToggleOneLayerMode: + get_gcode_viewer().get_layers_slider()->switch_one_layer_mode(); + m_dirty = true; + break; + case Shortcut::GoToLayer: + if (!m_gizmos.is_enabled()) { + get_gcode_viewer().get_layers_slider()->show_go_to_layer(true); + m_dirty = true; + } + break; + case Shortcut::LayerSliderUp: + case Shortcut::LayerSliderDown: + step_slider([up = shortcut == Shortcut::LayerSliderUp](IMSlider* layers, IMSlider* moves, int increment) { + const int delta = up ? increment : -increment; + if (layers->GetSelection() == ssHigher) { + layers->SetHigherValue(layers->GetHigherValue() + delta); + moves->SetHigherValue(moves->GetMaxValue()); + } + else if (layers->GetSelection() == ssLower) + layers->SetLowerValue(layers->GetLowerValue() + delta); + }); + break; + case Shortcut::MovesSliderLeft: + step_slider([](IMSlider* layers, IMSlider* moves, int increment) { + if (moves->GetHigherValue() == moves->GetMinValue() && layers->GetHigherValue() > layers->GetMinValue()) { + layers->SetHigherValue(layers->GetHigherValue() - 1); + moves->SetHigherValue(moves->GetMaxValue()); + } + else + moves->SetHigherValue(moves->GetHigherValue() - increment); + }); + break; + case Shortcut::MovesSliderRight: + step_slider([](IMSlider* layers, IMSlider* moves, int increment) { + if (moves->GetHigherValue() == moves->GetMaxValue() && layers->GetHigherValue() < layers->GetMaxValue()) { + layers->SetHigherValue(layers->GetHigherValue() + 1); + moves->SetHigherValue(moves->GetMinValue()); + } + else + moves->SetHigherValue(moves->GetHigherValue() + increment); + }); + break; + case Shortcut::MovesSliderStart: + case Shortcut::MovesSliderEnd: + step_slider([start = shortcut == Shortcut::MovesSliderStart](IMSlider*, IMSlider* moves, int) { + moves->SetHigherValue(start ? moves->GetMinValue() : moves->GetMaxValue()); + moves->set_as_dirty(); + }); + break; + default: + if (!m_gizmos.open_gizmo_by_shortcut(shortcut)) + return false; + m_dirty = true; + break; + } + return true; +} + +void GLCanvas3D::apply_selection_move(bool slow, bool camera_space) +{ + m_selection.setup_cache(); + const double multiplier = slow ? 1.0 : 10.0; + + Vec3d displacement; + if (camera_space) { + Eigen::Matrix inv_view_3x3 = wxGetApp().plater()->get_camera().get_view_matrix().inverse().matrix().block(0, 0, 3, 3); + displacement = multiplier * (inv_view_3x3 * m_selection_edit.direction); + displacement.z() = 0.0; + } + else + displacement = multiplier * m_selection_edit.direction; + + TransformationType trafo_type; + trafo_type.set_relative(); + m_selection.translate(displacement, trafo_type); + m_dirty = true; +} + +void GLCanvas3D::apply_selection_rotate(double angle_z_rad) +{ + m_selection.setup_cache(); + m_selection.rotate(angle_z_rad * m_selection_edit.direction, TransformationType(TransformationType::World_Relative_Joint)); + m_dirty = true; +} + +void GLCanvas3D::finish_selection_edit() +{ + const SelectionEdit::Kind kind = m_selection_edit.kind; + m_selection_edit.kind = SelectionEdit::None; + if (kind == SelectionEdit::Move) + do_move(L("Tool move")); + else + do_rotate(L("Tool Rotate")); + m_gizmos.update_data(); + // Let the plater know that the dragging finished, so a delayed refresh + // of the scene with the background processing data should be performed. + post_event(SimpleEvent(EVT_GLCANVAS_MOUSE_DRAGGING_FINISHED)); + // updates camera target constraints + refresh_camera_scene_box(); + m_dirty = true; +} + +// Keys held since their last key-up, shared by every canvas because a shortcut can move the +// focus, and with it the key-up, to another one. +static std::set s_keys_down; + +static bool key_repeats(int key) +{ + for (auto it = s_keys_down.begin(); it != s_keys_down.end();) // drops keys released while no canvas had the focus + it = wxGetKeyState(wxKeyCode(*it)) ? std::next(it) : s_keys_down.erase(it); + return !s_keys_down.insert(key).second; +} + +static void key_released(int key) { s_keys_down.erase(key); } void GLCanvas3D::on_key(wxKeyEvent& evt) { @@ -3811,45 +3721,11 @@ void GLCanvas3D::on_key(wxKeyEvent& evt) } #endif - static GLCanvas3D const * thiz = nullptr; - static TranslationProcessor translationProcessor(nullptr, nullptr); - if (thiz != this) { - thiz = this; - translationProcessor = TranslationProcessor( - [this]() { - do_move(L("Tool move")); - m_gizmos.update_data(); - - // BBS - //wxGetApp().obj_manipul()->set_dirty(); - // Let the plater know that the dragging finished, so a delayed refresh - // of the scene with the background processing data should be performed. - post_event(SimpleEvent(EVT_GLCANVAS_MOUSE_DRAGGING_FINISHED)); - // updates camera target constraints - refresh_camera_scene_box(); - m_dirty = true; - }, - [this](const Vec3d& direction, bool slow, bool camera_space) { - m_selection.setup_cache(); - double multiplier = slow ? 1.0 : 10.0; - - Vec3d displacement; - if (camera_space) { - Eigen::Matrix inv_view_3x3 = wxGetApp().plater()->get_camera().get_view_matrix().inverse().matrix().block(0, 0, 3, 3); - displacement = multiplier * (inv_view_3x3 * direction); - displacement.z() = 0.0; - } - else - displacement = multiplier * direction; - - TransformationType trafo_type; - trafo_type.set_relative(); - m_selection.translate(displacement, trafo_type); - m_dirty = true; - } - );} - const int keyCode = evt.GetKeyCode(); + if (evt.GetEventType() == wxEVT_KEY_DOWN) + m_key_down = { keyCode, key_repeats(keyCode) }; + else if (evt.GetEventType() == wxEVT_KEY_UP) + key_released(keyCode); auto imgui = wxGetApp().imgui(); if (imgui->update_key_data(evt)) @@ -3863,23 +3739,8 @@ void GLCanvas3D::on_key(wxKeyEvent& evt) wxGetApp().plater()->toggle_render_statistic_dialog(); m_dirty = true; #endif - } else if ((evt.ShiftDown() && evt.ControlDown() && keyCode == WXK_RETURN) || - (evt.ShiftDown() && evt.AltDown() && keyCode == WXK_RETURN)) { - wxGetApp().plater()->toggle_show_wireframe(); - m_dirty = true; - } - else if (m_tab_down && keyCode == WXK_TAB && !evt.HasAnyModifiers()) { - // Enable switching between 3D and Preview with Tab - // m_canvas->HandleAsNavigationKey(evt); // XXX: Doesn't work in some cases / on Linux - post_event(SimpleEvent(EVT_GLCANVAS_TAB)); - } - else if (keyCode == WXK_TAB && evt.ShiftDown() && !evt.ControlDown() && ! wxGetApp().is_gcode_viewer()) { - // Collapse side-panel with Shift+Tab - post_event(SimpleEvent(EVT_GLCANVAS_COLLAPSE_SIDEBAR)); } else if (keyCode == WXK_SHIFT) { - translationProcessor.process(evt); - if (m_picking_enabled && m_rectangle_selection.is_dragging()) { _update_selection_from_hover(); m_rectangle_selection.stop_dragging(); @@ -3905,70 +3766,15 @@ void GLCanvas3D::on_key(wxKeyEvent& evt) } else if (keyCode == WXK_CONTROL) m_dirty = true; - else if (m_gizmos.is_enabled() && !m_selection.is_empty() && m_canvas_type != CanvasAssembleView) { - translationProcessor.process(evt); - - switch (keyCode) - { - case WXK_NUMPAD_PAGEUP: case WXK_PAGEUP: - case WXK_NUMPAD_PAGEDOWN: case WXK_PAGEDOWN: - { - do_rotate(L("Tool Rotate")); - m_gizmos.update_data(); - - // BBS - //wxGetApp().obj_manipul()->set_dirty(); - // Let the plater know that the dragging finished, so a delayed refresh - // of the scene with the background processing data should be performed. - post_event(SimpleEvent(EVT_GLCANVAS_MOUSE_DRAGGING_FINISHED)); - // updates camera target constraints - refresh_camera_scene_box(); - m_dirty = true; - - break; - } - default: { break; } - } - } - - // BBS: add select view logic - if (evt.ControlDown()) { - switch (keyCode) { - case '0': - case WXK_NUMPAD0: //0 on numpad - { select_view("plate"); - zoom_to_bed(); - break; - } - case '1': - case WXK_NUMPAD1: //1 on numpad - { select_view("top"); break; } - case '2': - case WXK_NUMPAD2: //2 on numpad - { select_view("bottom"); break; } - case '3': - case WXK_NUMPAD3: //3 on numpad - { select_view("front"); break; } - case '4': - case WXK_NUMPAD4: //4 on numpad - { select_view("rear"); break; } - case '5': - case WXK_NUMPAD5: //5 on numpad - { select_view("left"); break; } - case '6': - case WXK_NUMPAD6: //6 on numpad - { select_view("right"); break; } - case '7': - case WXK_NUMPAD7: //7 on numpad - { select_plate(); break; } - default: break; - } - } + else if (m_selection_edit.kind != SelectionEdit::None && keyCode == m_selection_edit.key) + finish_selection_edit(); } else if (evt.GetEventType() == wxEVT_KEY_DOWN) { - m_tab_down = keyCode == WXK_TAB && !evt.HasAnyModifiers(); + if (handle_shortcut(KeyChord::from_event(evt))) + return; if (keyCode == WXK_SHIFT) { - translationProcessor.process(evt); + if (m_selection_edit.kind == SelectionEdit::Move) + apply_selection_move(true, evt.CmdDown()); if (m_picking_enabled /*&& (m_gizmos.get_current_type() != GLGizmosManager::SlaSupports)*/) { @@ -3985,68 +3791,6 @@ void GLCanvas3D::on_key(wxKeyEvent& evt) } else if (keyCode == WXK_CONTROL) m_dirty = true; - else if (m_gizmos.is_enabled() && !m_selection.is_empty() && m_canvas_type != CanvasAssembleView) { - auto _do_rotate = [this](double angle_z_rad) { - m_selection.setup_cache(); - m_selection.rotate(Vec3d(0.0, 0.0, angle_z_rad), TransformationType(TransformationType::World_Relative_Joint)); - m_dirty = true; -// wxGetApp().obj_manipul()->set_dirty(); - }; - - translationProcessor.process(evt); - - switch (keyCode) - { - case WXK_NUMPAD_PAGEUP: case WXK_PAGEUP: { _do_rotate(0.25 * M_PI); break; } - case WXK_NUMPAD_PAGEDOWN: case WXK_PAGEDOWN: { _do_rotate(-0.25 * M_PI); break; } - default: { break; } - } - } else if (!m_gizmos.is_enabled()) { - // DoubleSlider navigation in Preview - if (m_canvas_type == CanvasPreview) { - IMSlider *m_layers_slider = get_gcode_viewer().get_layers_slider(); - IMSlider *m_moves_slider = get_gcode_viewer().get_moves_slider(); - int increment = (evt.CmdDown() || evt.ShiftDown()) ? 5 : 1; - if ((evt.CmdDown() || evt.ShiftDown()) && evt.GetKeyCode() == 'G') { - m_layers_slider->show_go_to_layer(true); - } - else if (keyCode == WXK_UP || keyCode == WXK_DOWN) { - int new_pos; - if (m_layers_slider->GetSelection() == ssHigher) { - new_pos = keyCode == WXK_UP ? m_layers_slider->GetHigherValue() + increment : m_layers_slider->GetHigherValue() - increment; - m_layers_slider->SetHigherValue(new_pos); - m_moves_slider->SetHigherValue(m_moves_slider->GetMaxValue()); - } - else if (m_layers_slider->GetSelection() == ssLower) { - new_pos = keyCode == WXK_UP ? m_layers_slider->GetLowerValue() + increment : m_layers_slider->GetLowerValue() - increment; - m_layers_slider->SetLowerValue(new_pos); - } - } else if (keyCode == WXK_LEFT) { - if (m_moves_slider->GetHigherValue() == m_moves_slider->GetMinValue() && (m_layers_slider->GetHigherValue() > m_layers_slider->GetMinValue())) { - m_layers_slider->SetHigherValue(m_layers_slider->GetHigherValue() - 1); - m_moves_slider->SetHigherValue(m_moves_slider->GetMaxValue()); - } else { - m_moves_slider->SetHigherValue(m_moves_slider->GetHigherValue() - increment); - } - } else if (keyCode == WXK_RIGHT) { - if (m_moves_slider->GetHigherValue() == m_moves_slider->GetMaxValue() && (m_layers_slider->GetHigherValue() < m_layers_slider->GetMaxValue())) { - m_layers_slider->SetHigherValue(m_layers_slider->GetHigherValue() + 1); - m_moves_slider->SetHigherValue(m_moves_slider->GetMinValue()); - } else { - m_moves_slider->SetHigherValue(m_moves_slider->GetHigherValue() + increment); - } - } else if (keyCode == WXK_HOME || keyCode == WXK_END) { - const int new_pos = keyCode == WXK_HOME ? m_moves_slider->GetMinValue() : m_moves_slider->GetMaxValue(); - m_moves_slider->SetHigherValue(new_pos); - m_moves_slider->set_as_dirty(); - } - - if (m_layers_slider->is_dirty() && m_layers_slider->is_one_layer()) - m_layers_slider->SetLowerValue(m_layers_slider->GetHigherValue()); - - m_dirty = true; - } - } } } else return; @@ -7115,7 +6859,6 @@ bool GLCanvas3D::_init_main_toolbar() item.name = "add"; item.icon_filename = m_is_dark ? "toolbar_open_dark.svg" : "toolbar_open.svg"; - item.tooltip = _utf8(L("Add")) + " [" + GUI::shortkey_ctrl_prefix() + "I]"; item.sprite_id = 0; item.left.action_callback = [this]() { if (m_canvas != nullptr) wxPostEvent(m_canvas, SimpleEvent(EVT_GLTOOLBAR_ADD)); }; item.enabling_callback = []()->bool {return wxGetApp().plater()->can_add_model(); }; @@ -7133,7 +6876,6 @@ bool GLCanvas3D::_init_main_toolbar() item.name = "orient"; item.icon_filename = m_is_dark ? "toolbar_orient_dark.svg" : "toolbar_orient.svg"; - item.tooltip = _utf8(L("Auto orient all/selected objects")) + " [Q]\n" + _utf8(L("Auto orient all objects on current plate")) + " [" + _utf8(L("Shift+")) + "Q]"; item.sprite_id++; item.left.render_callback = nullptr; item.enabling_callback = []()->bool { return wxGetApp().plater()->can_arrange(); }; @@ -7155,7 +6897,6 @@ bool GLCanvas3D::_init_main_toolbar() item.name = "arrange"; item.icon_filename = m_is_dark ? "toolbar_arrange_dark.svg" : "toolbar_arrange.svg"; - item.tooltip = _utf8(L("Arrange all objects")) + " [A]\n" + _utf8(L("Arrange objects on selected plates")) + " [" + _utf8(L("Shift+")) + "A]"; item.sprite_id++; item.left.action_callback = []() {}; item.enabling_callback = []()->bool { return wxGetApp().plater()->can_arrange(); }; @@ -7179,7 +6920,6 @@ bool GLCanvas3D::_init_main_toolbar() item.name = "more"; item.icon_filename = m_is_dark ? "instance_add_dark.svg" : "instance_add.svg"; - item.tooltip = _utf8(L("Add instance")) + " [+]"; item.sprite_id++; item.left.render_callback = nullptr; item.left.action_callback = [this]() { if (m_canvas != nullptr) wxPostEvent(m_canvas, SimpleEvent(EVT_GLTOOLBAR_MORE)); }; @@ -7191,7 +6931,6 @@ bool GLCanvas3D::_init_main_toolbar() item.name = "fewer"; item.icon_filename = m_is_dark ? "instance_remove_dark.svg" : "instance_remove.svg"; - item.tooltip = _utf8(L("Remove instance")) + " [-]"; item.sprite_id++; item.left.render_callback = nullptr; item.left.action_callback = [this]() { if (m_canvas != nullptr) wxPostEvent(m_canvas, SimpleEvent(EVT_GLTOOLBAR_FEWER)); }; @@ -7241,9 +6980,20 @@ bool GLCanvas3D::_init_main_toolbar() if (!m_main_toolbar.add_item(item)) return false; + update_shortcut_tooltips(); return true; } +void GLCanvas3D::update_shortcut_tooltips() +{ + const ShortcutRegistry& shortcuts = wxGetApp().shortcuts(); + m_main_toolbar.set_tooltip(m_main_toolbar.get_item_id("add"), shortcuts.with_key(_u8L("Add"), Shortcut::ImportModel)); + m_main_toolbar.set_tooltip(m_main_toolbar.get_item_id("orient"), shortcuts.with_key(_u8L("Auto orient all/selected objects"), Shortcut::Orient) + "\n" + shortcuts.with_key(_u8L("Auto orient all objects on current plate"), Shortcut::OrientPlate)); + m_main_toolbar.set_tooltip(m_main_toolbar.get_item_id("arrange"), shortcuts.with_key(_u8L("Arrange all objects"), Shortcut::Arrange) + "\n" + shortcuts.with_key(_u8L("Arrange objects on selected plates"), Shortcut::ArrangePlate)); + m_main_toolbar.set_tooltip(m_main_toolbar.get_item_id("more"), shortcuts.with_key(_u8L("Add instance"), Shortcut::AddInstance)); + m_main_toolbar.set_tooltip(m_main_toolbar.get_item_id("fewer"), shortcuts.with_key(_u8L("Remove instance"), Shortcut::RemoveInstance)); +} + //BBS: GUI refactor: GLToolbar bool GLCanvas3D::_init_select_plate_toolbar() { diff --git a/src/slic3r/GUI/GLCanvas3D.hpp b/src/slic3r/GUI/GLCanvas3D.hpp index 9c78581f69..ad5188f2f3 100644 --- a/src/slic3r/GUI/GLCanvas3D.hpp +++ b/src/slic3r/GUI/GLCanvas3D.hpp @@ -63,6 +63,7 @@ class PartPlateList; #ifdef SLIC3R_CAD class DesignSketchTool; // Design tab: interactive 2D sketch tool #endif +struct KeyChord; #if ENABLE_RETINA_GL class RetinaHelper; @@ -185,7 +186,6 @@ wxDECLARE_EVENT(EVT_GLCANVAS_UPDATE_BED_SHAPE, SimpleEvent); wxDECLARE_EVENT(EVT_GLCANVAS_TAB, SimpleEvent); wxDECLARE_EVENT(EVT_GLCANVAS_RESETGIZMOS, SimpleEvent); wxDECLARE_EVENT(EVT_GLCANVAS_MOVE_SLIDERS, wxKeyEvent); -wxDECLARE_EVENT(EVT_GLCANVAS_EDIT_COLOR_CHANGE, wxKeyEvent); wxDECLARE_EVENT(EVT_GLCANVAS_JUMP_TO, wxKeyEvent); wxDECLARE_EVENT(EVT_GLCANVAS_UNDO, SimpleEvent); wxDECLARE_EVENT(EVT_GLCANVAS_REDO, SimpleEvent); @@ -626,7 +626,23 @@ private: bool m_dynamic_background_enabled; bool m_multisample_allowed; bool m_moving; - bool m_tab_down; + // The key-down being dispatched, kept for the char event that may follow it. + struct KeyDown + { + int code = WXK_NONE; + bool repeat = false; + }; + KeyDown m_key_down; + // A keyboard move or rotation of the selection runs from the key-down that started it to + // that key's release, so a held key becomes one undo step. + struct SelectionEdit + { + enum Kind { None, Move, Rotate }; + Kind kind = None; + int key = WXK_NONE; // raw key code of the key-down, matched against the key-up + Vec3d direction{ Vec3d::UnitX() }; + }; + SelectionEdit m_selection_edit; bool m_camera_movement; //BBS: add toolpath outside bool m_toolpath_outside{ false }; @@ -1094,6 +1110,13 @@ public: void on_idle(wxIdleEvent& evt); void on_char(wxKeyEvent& evt); void on_key(wxKeyEvent& evt); + // Runs the Plater/Preview shortcut bound to chord, swallowing auto-repeats of one-shot + // shortcuts; false when nothing is bound. + bool handle_shortcut(const KeyChord& chord); + void apply_selection_move(bool slow, bool camera_space); + void apply_selection_rotate(double angle_z_rad); + void finish_selection_edit(); + void update_shortcut_tooltips(); void on_mouse_wheel(wxMouseEvent& evt); void on_timer(wxTimerEvent& evt); void on_render_timer(wxTimerEvent& evt); diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp index ab53b773a2..48bd58b1a5 100644 --- a/src/slic3r/GUI/GUI_App.cpp +++ b/src/slic3r/GUI/GUI_App.cpp @@ -3,6 +3,7 @@ #include "libslic3r/Technologies.hpp" #include "libslic3r/Platform.hpp" #include "GUI_App.hpp" +#include "Shortcuts.hpp" #include "BindDialog.hpp" #include "DeviceManager.hpp" #include "HMS.hpp" @@ -1120,6 +1121,8 @@ GUI_App::GUI_App() { //app config initializes early becasuse it is used in instance checking in OrcaSlicer.cpp this->init_app_config(); + m_shortcuts = std::make_unique(); + m_shortcuts->load(*app_config); this->init_download_path(); // Note: the WebView2 runtime check (init_webview_runtime) used to run here, but // the constructor executes before wxWidgets is fully initialized and before the @@ -4677,12 +4680,28 @@ void GUI_App::system_info() //dlg.ShowModal(); } -void GUI_App::keyboard_shortcuts() +void GUI_App::keyboard_shortcuts(ShortcutContext page, wxWindow* parent) { - KBShortcutsDialog dlg; + KBShortcutsDialog dlg(parent != nullptr ? parent : mainframe, page); dlg.ShowModal(); } +void GUI_App::on_shortcuts_changed() +{ + m_shortcuts->save(*app_config); + app_config->save(); + if (mainframe == nullptr) + return; + mainframe->update_shortcut_labels(); + if (Plater* plater = this->plater(); plater != nullptr) { + if (GLCanvas3D* canvas = plater->get_view3D_canvas3D(); canvas != nullptr) + canvas->update_shortcut_tooltips(); +#ifdef __WXOSX__ + obj_list()->update_shortcut_accelerators(); +#endif + } +} + void GUI_App::troubleshoot() { TroubleshootDialog dlg; @@ -8465,7 +8484,9 @@ void GUI_App::open_exportpresetbundledialog(size_t open_on_tab, const std::strin } } -void GUI_App::open_preferences(size_t open_on_tab, const std::string& highlight_option) +void GUI_App::open_preferences() { open_preferences(PreferencesTab::General); } + +void GUI_App::open_preferences(PreferencesTab tab, const std::string& highlight_option) { // Render settings the canvas reads every frame; a change needs one redraw to show. static constexpr const char* opengl_render_setting_keys[] = { @@ -8482,7 +8503,8 @@ void GUI_App::open_preferences(size_t open_on_tab, const std::string& highlight_ // the dialog needs to be destroyed before the call to recreate_GUI() // or sometimes the application crashes into wxDialogBase() destructor // so we put it into an inner scope - PreferencesDialog dlg(mainframe, open_on_tab, highlight_option); + PreferencesDialog dlg(mainframe); + dlg.select_tab(tab, highlight_option); dlg.ShowModal(); need_recreate_gui = dlg.recreate_GUI(); pending_language = dlg.pending_language(); diff --git a/src/slic3r/GUI/GUI_App.hpp b/src/slic3r/GUI/GUI_App.hpp index 97213d170b..2d55c5e96c 100644 --- a/src/slic3r/GUI/GUI_App.hpp +++ b/src/slic3r/GUI/GUI_App.hpp @@ -70,6 +70,9 @@ namespace GUI{ class RemovableDriveManager; class OtherInstanceMessageHandler; +class ShortcutRegistry; +enum class ShortcutContext : uint8_t; +enum class PreferencesTab; class MainFrame; class Sidebar; class ObjectSettings; @@ -286,6 +289,7 @@ private: std::unique_ptr m_removable_drive_manager; std::unique_ptr m_imgui; + std::unique_ptr m_shortcuts; std::unique_ptr m_printhost_job_queue; std::unique_ptr m_other_instance_message_handler; std::unique_ptr m_single_instance_checker; @@ -483,7 +487,7 @@ public: void recreate_GUI(const wxString& message); void system_info(); - void keyboard_shortcuts(); + void keyboard_shortcuts(ShortcutContext page, wxWindow* parent = nullptr); // the main frame when null void troubleshoot(); void load_project(wxWindow *parent, wxString& input_file) const; void import_model(wxWindow *parent, wxArrayString& input_files) const; @@ -639,7 +643,8 @@ public: wxString current_language_code_safe() const; bool is_localized() const { return m_wxLocale->GetLocale() != "English"; } - void open_preferences(size_t open_on_tab = 0, const std::string& highlight_option = std::string()); + void open_preferences(); // on the General tab + void open_preferences(PreferencesTab tab, const std::string& highlight_option = std::string()); void open_presetbundledialog(size_t open_on_tab = 0, const std::string& highlight_option = std::string()); void open_plugins_dialog(size_t open_on_tab = 0, const std::string& highlight_option = std::string()); // Dialog-free plugin actions used by the speed dial: they never require the Plugins dialog to be open. @@ -737,6 +742,9 @@ public: size_t get_instance_hash_int () { return m_instance_hash_int; } ImGuiWrapper* imgui() { return m_imgui.get(); } + ShortcutRegistry& shortcuts() { return *m_shortcuts; } + // Saves the bindings and refreshes every menu label, tooltip and accelerator table that shows one. + void on_shortcuts_changed(); PrintHostJobQueue& printhost_job_queue() { return *m_printhost_job_queue.get(); } diff --git a/src/slic3r/GUI/GUI_Factories.cpp b/src/slic3r/GUI/GUI_Factories.cpp index d02922497e..ecca540aa9 100644 --- a/src/slic3r/GUI/GUI_Factories.cpp +++ b/src/slic3r/GUI/GUI_Factories.cpp @@ -6,6 +6,7 @@ #include "GUI_Factories.hpp" #include "GUI_ObjectList.hpp" #include "GUI_App.hpp" +#include "Shortcuts.hpp" #include "I18N.hpp" #include "Plater.hpp" #include "ObjectDataViewModel.hpp" @@ -2083,13 +2084,8 @@ wxMenu* MenuFactory::assemble_part_menu() void MenuFactory::append_menu_item_clone(wxMenu* menu) { -#ifdef __APPLE__ - static const wxString ctrl = ("Ctrl+"); -#else - // FIXME: maybe should be using GUI::shortkey_ctrl_prefix() or equivalent? - static const wxString ctrl = _L("Ctrl+"); -#endif - append_menu_item(menu, wxID_ANY, _L("Clone") + "\t" + ctrl + "K", "", + const std::string accel = wxGetApp().shortcuts().accelerator(Shortcut::CloneSelected); + append_menu_item(menu, wxID_ANY, _L("Clone") + (accel.empty() ? wxString() : "\t" + from_u8(accel)), "", [](wxCommandEvent&) { plater()->clone_selection(); }, "", nullptr, diff --git a/src/slic3r/GUI/GUI_ObjectList.cpp b/src/slic3r/GUI/GUI_ObjectList.cpp index 8067afd8df..2d77200eef 100644 --- a/src/slic3r/GUI/GUI_ObjectList.cpp +++ b/src/slic3r/GUI/GUI_ObjectList.cpp @@ -4,6 +4,7 @@ #include "GUI_Factories.hpp" //#include "GUI_ObjectLayers.hpp" #include "GUI_App.hpp" +#include "Shortcuts.hpp" #include "I18N.hpp" #include "Plater.hpp" #include "BitmapComboBox.hpp" @@ -245,56 +246,15 @@ ObjectList::ObjectList(wxWindow* parent) : // Key events are not correctly processed by the wxDataViewCtrl on OSX. // Our patched wxWidgets process the keyboard accelerators. // On the other hand, using accelerators will break in-place editing on Windows & Linux/GTK (there is no in-place editing working on OSX for wxDataViewCtrl for now). -// Bind(wxEVT_KEY_DOWN, &ObjectList::OnChar, this); - { - // Accelerators - // wxAcceleratorEntry entries[25]; - wxAcceleratorEntry entries[26]; - int index = 0; - entries[index++].Set(wxACCEL_CTRL, (int)'C', wxID_COPY); - entries[index++].Set(wxACCEL_CTRL, (int)'X', wxID_CUT); - entries[index++].Set(wxACCEL_CTRL, (int)'V', wxID_PASTE); - entries[index++].Set(wxACCEL_CTRL, (int)'M', wxID_DUPLICATE); - entries[index++].Set(wxACCEL_CTRL, (int)'A', wxID_SELECTALL); - entries[index++].Set(wxACCEL_CTRL, (int)'Z', wxID_UNDO); - entries[index++].Set(wxACCEL_CTRL, (int)'Y', wxID_REDO); - entries[index++].Set(wxACCEL_NORMAL, WXK_BACK, wxID_DELETE); - //entries[index++].Set(wxACCEL_NORMAL, int('+'), wxID_ADD); - //entries[index++].Set(wxACCEL_NORMAL, WXK_NUMPAD_ADD, wxID_ADD); - //entries[index++].Set(wxACCEL_NORMAL, int('-'), wxID_REMOVE); - //entries[index++].Set(wxACCEL_NORMAL, WXK_NUMPAD_SUBTRACT, wxID_REMOVE); - //entries[index++].Set(wxACCEL_NORMAL, int('p'), wxID_PRINT); - - int numbers_cnt = 0; - for (auto char_number : { '1', '2', '3', '4', '5', '6', '7', '8', '9' }) { - entries[index + numbers_cnt].Set(wxACCEL_NORMAL, int(char_number), wxID_LAST + numbers_cnt+1); - entries[index + 9 + numbers_cnt].Set(wxACCEL_NORMAL, WXK_NUMPAD0 + numbers_cnt - 1, wxID_LAST + numbers_cnt+1); - numbers_cnt++; - // index++; - } - wxAcceleratorTable accel(26, entries); - SetAcceleratorTable(accel); - - this->Bind(wxEVT_MENU, [this](wxCommandEvent &evt) { this->copy(); }, wxID_COPY); - this->Bind(wxEVT_MENU, [this](wxCommandEvent &evt) { this->paste(); }, wxID_PASTE); - this->Bind(wxEVT_MENU, [this](wxCommandEvent &evt) { this->select_item_all_children(); }, wxID_SELECTALL); - this->Bind(wxEVT_MENU, [this](wxCommandEvent &evt) { this->remove(); }, wxID_DELETE); - this->Bind(wxEVT_MENU, [this](wxCommandEvent &evt) { this->undo(); }, wxID_UNDO); - this->Bind(wxEVT_MENU, [this](wxCommandEvent &evt) { this->redo(); }, wxID_REDO); - this->Bind(wxEVT_MENU, [this](wxCommandEvent &evt) { this->cut(); }, wxID_CUT); - this->Bind(wxEVT_MENU, [this](wxCommandEvent &evt) { this->clone(); }, wxID_DUPLICATE); - //this->Bind(wxEVT_MENU, [this](wxCommandEvent &evt) { this->increase_instances(); }, wxID_ADD); - //this->Bind(wxEVT_MENU, [this](wxCommandEvent &evt) { this->decrease_instances(); }, wxID_REMOVE); - //this->Bind(wxEVT_MENU, [this](wxCommandEvent &evt) { this->toggle_printable_state(); }, wxID_PRINT); - - for (int i = 1; i < 10; i++) - this->Bind(wxEVT_MENU, [this, i](wxCommandEvent &evt) { - if (filaments_count() > 1 && i <= filaments_count()) - this->set_extruder_for_selected_items(i); - }, wxID_LAST+i); - - m_accel = accel; - } + m_shortcut_id_base = wxWindow::NewControlId(int(Shortcut::Count)); + for (size_t i = 0; i < size_t(Shortcut::Count); ++i) + this->Bind(wxEVT_MENU, [this, shortcut = Shortcut(i)](wxCommandEvent&) { dispatch_shortcut(shortcut); }, m_shortcut_id_base + int(i)); + for (int i = 1; i < 10; i++) + this->Bind(wxEVT_MENU, [this, i](wxCommandEvent &evt) { + if (filaments_count() > 1 && i <= filaments_count()) + this->set_extruder_for_selected_items(i); + }, wxID_LAST+i); + update_shortcut_accelerators(); #else //__WXOSX__ Bind(wxEVT_CHAR, [this](wxKeyEvent& event) { key_event(event); }); // doesn't work on OSX #endif @@ -1796,36 +1756,10 @@ void ObjectList::decrease_instances() #ifndef __WXOSX__ void ObjectList::key_event(wxKeyEvent& event) { - //if (event.GetKeyCode() == WXK_TAB) - // Navigate(event.ShiftDown() ? wxNavigationKeyEvent::IsBackward : wxNavigationKeyEvent::IsForward); - //else - if (event.GetKeyCode() == WXK_DELETE /*|| event.GetKeyCode() == WXK_BACK*/ ) - remove(); - //else if (event.GetKeyCode() == WXK_F5) - // wxGetApp().plater()->reload_all_from_disk(); - else if (wxGetKeyState(wxKeyCode('A')) && wxGetKeyState(WXK_CONTROL/*WXK_SHIFT*/)) - select_item_all_children(); - else if (wxGetKeyState(wxKeyCode('C')) && wxGetKeyState(WXK_CONTROL)) - copy(); - else if (wxGetKeyState(wxKeyCode('V')) && wxGetKeyState(WXK_CONTROL)) - paste(); - else if (wxGetKeyState(wxKeyCode('Y')) && wxGetKeyState(WXK_CONTROL)) - redo(); - else if (wxGetKeyState(wxKeyCode('Z')) && wxGetKeyState(WXK_CONTROL)) - undo(); - else if (wxGetKeyState(wxKeyCode('X')) && wxGetKeyState(WXK_CONTROL)) - cut(); - else if (wxGetKeyState(wxKeyCode('K')) && wxGetKeyState(WXK_CONTROL)) - clone(); - else if (event.GetUnicodeKey() == '+') - increase_instances(); - else if (event.GetUnicodeKey() == '-') - decrease_instances(); - else if (event.GetUnicodeKey() == 'p') - toggle_printable_state(); - else if (event.GetUnicodeKey() == 'd') - toggle_auto_drop(); - else if (filaments_count() > 1) { + const std::optional shortcut = wxGetApp().shortcuts().lookup(ShortcutContext::ObjectList, KeyChord::from_event(event)); + if (shortcut.has_value() && dispatch_shortcut(*shortcut)) + return; + if (filaments_count() > 1) { std::vector numbers = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' }; wxChar key_char = event.GetUnicodeKey(); if (std::find(numbers.begin(), numbers.end(), key_char) != numbers.end()) { @@ -1842,6 +1776,43 @@ void ObjectList::key_event(wxKeyEvent& event) } #endif /* __WXOSX__ */ +#ifdef __WXOSX__ +void ObjectList::update_shortcut_accelerators() +{ + std::vector entries; + const ShortcutRegistry& shortcuts = wxGetApp().shortcuts(); + for (Shortcut shortcut : shortcuts_in(ShortcutContext::ObjectList)) + if (const KeyChord chord = shortcuts.binding(shortcut); chord.valid()) + entries.push_back(chord.to_accelerator_entry(m_shortcut_id_base + int(shortcut))); + for (int i = 1; i < 10; ++i) { + entries.emplace_back(wxACCEL_NORMAL, '0' + i, wxID_LAST + i); + entries.emplace_back(wxACCEL_NORMAL, WXK_NUMPAD0 + i, wxID_LAST + i); + } + m_accel = wxAcceleratorTable(int(entries.size()), entries.data()); + SetAcceleratorTable(m_accel); +} +#endif /* __WXOSX__ */ + +bool ObjectList::dispatch_shortcut(Shortcut shortcut) +{ + switch (shortcut) { + case Shortcut::DeleteSelected: remove(); break; + case Shortcut::SelectAll: select_item_all_children(); break; + case Shortcut::Copy: copy(); break; + case Shortcut::Paste: paste(); break; + case Shortcut::Cut: cut(); break; + case Shortcut::Undo: undo(); break; + case Shortcut::Redo: redo(); break; + case Shortcut::CloneSelected: clone(); break; + case Shortcut::AddInstance: increase_instances(); break; + case Shortcut::RemoveInstance: decrease_instances(); break; + case Shortcut::TogglePrintable: toggle_printable_state(); break; + case Shortcut::ToggleAutoDrop: toggle_auto_drop(); break; + default: return false; + } + return true; +} + void ObjectList::OnBeginDrag(wxDataViewEvent &event) { const bool mult_sel = multiple_selection(); diff --git a/src/slic3r/GUI/GUI_ObjectList.hpp b/src/slic3r/GUI/GUI_ObjectList.hpp index cab78b6adc..5705aa2c8b 100644 --- a/src/slic3r/GUI/GUI_ObjectList.hpp +++ b/src/slic3r/GUI/GUI_ObjectList.hpp @@ -40,6 +40,9 @@ typedef std::map t_layer_config_ranges; #define FIX_THROUGH_CGAL_ALWAYS 1 namespace GUI { + +enum class Shortcut : uint8_t; + struct ObjectVolumeID { ModelObject* object{ nullptr }; ModelVolume* volume{ nullptr }; @@ -270,7 +273,11 @@ public: void extruder_editing(); #ifndef __WXOSX__ void key_event(wxKeyEvent& event); +#else + // wxDataViewCtrl never sees key events on macOS, so the bindings are installed as accelerators. + void update_shortcut_accelerators(); #endif /* __WXOSX__ */ + bool dispatch_shortcut(Shortcut shortcut); void copy(); void paste(); @@ -482,8 +489,8 @@ public: private: #ifdef __WXOSX__ -// void OnChar(wxKeyEvent& event); wxAcceleratorTable m_accel; + wxWindowID m_shortcut_id_base; #endif /* __WXOSX__ */ void OnContextMenu(wxDataViewEvent &event); void list_manipulation(const wxPoint& mouse_pos, bool evt_context_menu = false); diff --git a/src/slic3r/GUI/GUI_Preview.cpp b/src/slic3r/GUI/GUI_Preview.cpp index ea3ae5d21d..2c44202876 100644 --- a/src/slic3r/GUI/GUI_Preview.cpp +++ b/src/slic3r/GUI/GUI_Preview.cpp @@ -280,8 +280,6 @@ bool Preview::init(wxWindow* parent, Bed3D& bed, Model* model) m_canvas->enable_assemble_view_toolbar(false); // sizer, m_canvas_widget - m_canvas_widget->Bind(wxEVT_KEY_DOWN, &Preview::update_layers_slider_from_canvas, this); - wxBoxSizer *main_sizer = new wxBoxSizer(wxVERTICAL); main_sizer->Add(m_canvas_widget, 1, wxALL | wxEXPAND, 0); @@ -505,28 +503,6 @@ void Preview::update_layers_slider_mode() m_layers_slider->SetModeAndOnlyExtruder(one_extruder_printed_model, only_extruder, can_change_color); } -void Preview::update_layers_slider_from_canvas(wxKeyEvent &event) -{ - if (event.HasModifiers()) { - event.Skip(); - return; - } - - const auto key = event.GetKeyCode(); - - IMSlider *m_layers_slider = m_canvas->get_gcode_viewer().get_layers_slider(); - IMSlider *m_moves_slider = m_canvas->get_gcode_viewer().get_moves_slider(); - if (key == 'L') { - if(!m_layers_slider->switch_one_layer_mode()) - event.Skip(); - m_canvas->set_as_dirty(); - } - /*else if (key == WXK_SHIFT) - m_layers_slider->UseDefaultColors(false);*/ - else - event.Skip(); -} - void Preview::update_layers_slider(const std::vector& layers_z, bool keep_z_range) { IMSlider *m_layers_slider = m_canvas->get_gcode_viewer().get_layers_slider(); diff --git a/src/slic3r/GUI/GUI_Preview.hpp b/src/slic3r/GUI/GUI_Preview.hpp index 5469e32b71..fdfe364fb8 100644 --- a/src/slic3r/GUI/GUI_Preview.hpp +++ b/src/slic3r/GUI/GUI_Preview.hpp @@ -171,7 +171,6 @@ private: void update_layers_slider(const std::vector& layers_z, bool keep_z_range = false); void update_layers_slider_mode(); - void update_layers_slider_from_canvas(wxKeyEvent &event); //BBS: add only gcode mode void load_print_as_fff(bool keep_z_range = false, bool only_gcode = false); }; diff --git a/src/slic3r/GUI/Gizmos/GLGizmoAdvancedCut.cpp b/src/slic3r/GUI/Gizmos/GLGizmoAdvancedCut.cpp index 99ad00fe55..09bb92dddf 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoAdvancedCut.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoAdvancedCut.cpp @@ -354,7 +354,6 @@ bool GLGizmoAdvancedCut::on_init() if (!GLGizmoRotate3D::on_init()) return false; - m_shortcut_key = WXK_CONTROL_C; // initiate info shortcuts const wxString ctrl = GUI::shortkey_ctrl_prefix(); diff --git a/src/slic3r/GUI/Gizmos/GLGizmoAssembly.cpp b/src/slic3r/GUI/Gizmos/GLGizmoAssembly.cpp index e686d5bb8f..9560078cb2 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoAssembly.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoAssembly.cpp @@ -1,6 +1,7 @@ #include "GLGizmoAssembly.hpp" #include "slic3r/GUI/GLCanvas3D.hpp" #include "slic3r/GUI/GUI_App.hpp" +#include "slic3r/GUI/Shortcuts.hpp" #include "slic3r/GUI/Plater.hpp" #include "slic3r/GUI/Gizmos/GizmoObjectManipulation.hpp" #include "slic3r/Utils/UndoRedo.hpp" @@ -46,7 +47,7 @@ bool GLGizmoAssembly::on_init() { GLGizmoMeasure::on_init(); - m_shortcut_key = WXK_CONTROL_Y; + m_shortcut = Shortcut::GizmoAssembly; return true; } diff --git a/src/slic3r/GUI/Gizmos/GLGizmoBase.cpp b/src/slic3r/GUI/Gizmos/GLGizmoBase.cpp index 1aaac99d40..6ff2c8213d 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoBase.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoBase.cpp @@ -4,6 +4,7 @@ #include #include "slic3r/GUI/GUI_App.hpp" +#include "slic3r/GUI/Shortcuts.hpp" #include "slic3r/GUI/Plater.hpp" #include "slic3r/GUI/GUI_Colors.hpp" @@ -299,7 +300,6 @@ GLGizmoBase::GLGizmoBase(GLCanvas3D &parent, const std::string &icon_filename, u : m_parent(parent) , m_group_id(-1) , m_state(Off) - , m_shortcut_key(NO_SHORTCUT_KEY_VALUE) , m_icon_filename(icon_filename) , m_sprite_id(sprite_id) , m_imgui(wxGetApp().imgui()) @@ -515,11 +515,8 @@ void GLGizmoBase::render_input_window(float x, float y, float bottom_limit) std::string GLGizmoBase::get_name(bool include_shortcut) const { - int key = get_shortcut_key(); - std::string out = on_get_name(); - if (include_shortcut && key >= WXK_CONTROL_A && key <= WXK_CONTROL_Z) - out += std::string(" [") + char(int('A') + key - int(WXK_CONTROL_A)) + "]"; - return out; + const std::string name = on_get_name(); + return include_shortcut && m_shortcut.has_value() ? wxGetApp().shortcuts().with_key(name, *m_shortcut) : name; } } // namespace GUI diff --git a/src/slic3r/GUI/Gizmos/GLGizmoBase.hpp b/src/slic3r/GUI/Gizmos/GLGizmoBase.hpp index 92491d0d44..47e8f832a6 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoBase.hpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoBase.hpp @@ -11,6 +11,7 @@ #include "slic3r/GUI/3DScene.hpp" #include +#include #include @@ -29,6 +30,7 @@ namespace GUI { class ImGuiWrapper; +enum class Shortcut : uint8_t; class GLCanvas3D; enum class CommonGizmosDataID; class CommonGizmosDataPool; @@ -72,9 +74,6 @@ public: NegZ = 1 << 5, }; - // Represents NO key(button on keyboard) value - static const int NO_SHORTCUT_KEY_VALUE = 0; - protected: struct Grabber { @@ -138,7 +137,7 @@ protected: int m_group_id; // TODO: remove only for rotate EState m_state; - int m_shortcut_key; + std::optional m_shortcut; // the registry entry that opens this gizmo std::string m_icon_filename; unsigned int m_sprite_id; int m_hover_id{ -1 }; @@ -169,7 +168,7 @@ public: EState get_state() const { return m_state; } void set_state(EState state) { m_state = state; on_set_state(); } - int get_shortcut_key() const { return m_shortcut_key; } + std::optional shortcut() const { return m_shortcut; } const std::string& get_icon_filename() const { return m_icon_filename; } diff --git a/src/slic3r/GUI/Gizmos/GLGizmoBrimEars.cpp b/src/slic3r/GUI/Gizmos/GLGizmoBrimEars.cpp index 6d9e810815..750e5fe6cb 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoBrimEars.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoBrimEars.cpp @@ -5,6 +5,7 @@ #include "slic3r/GUI/Camera.hpp" #include "slic3r/GUI/Gizmos/GLGizmosCommon.hpp" #include "slic3r/GUI/GUI_App.hpp" +#include "slic3r/GUI/Shortcuts.hpp" #include "slic3r/GUI/Plater.hpp" #include "libslic3r/ClipperUtils.hpp" #include "libslic3r/ExPolygon.hpp" @@ -46,7 +47,7 @@ bool GLGizmoBrimEars::on_init() { m_new_point_head_radius = get_brim_default_radius(); - m_shortcut_key = WXK_CONTROL_E; + m_shortcut = Shortcut::GizmoBrimEars; const wxString ctrl = GUI::shortkey_ctrl_prefix(); const wxString alt = GUI::shortkey_alt_prefix(); diff --git a/src/slic3r/GUI/Gizmos/GLGizmoCut.cpp b/src/slic3r/GUI/Gizmos/GLGizmoCut.cpp index 273bb94b90..2100b1fca7 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoCut.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoCut.cpp @@ -6,6 +6,7 @@ #include #include "slic3r/GUI/GUI_App.hpp" +#include "slic3r/GUI/Shortcuts.hpp" #include "slic3r/GUI/Plater.hpp" #include "slic3r/GUI/Gizmos/GizmoObjectManipulation.hpp" #include "slic3r/GUI/format.hpp" @@ -1310,7 +1311,7 @@ void GLGizmoCut3D::render_cut_line() bool GLGizmoCut3D::on_init() { m_grabbers.emplace_back(); - m_shortcut_key = WXK_CONTROL_C; + m_shortcut = Shortcut::GizmoCut; // initiate info shortcuts const wxString ctrl = GUI::shortkey_ctrl_prefix(); diff --git a/src/slic3r/GUI/Gizmos/GLGizmoEmboss.cpp b/src/slic3r/GUI/Gizmos/GLGizmoEmboss.cpp index ecf465afe7..1009a6e89b 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoEmboss.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoEmboss.cpp @@ -1,6 +1,7 @@ #include "GLGizmoEmboss.hpp" #include "slic3r/GUI/GLCanvas3D.hpp" #include "slic3r/GUI/GUI_App.hpp" +#include "slic3r/GUI/Shortcuts.hpp" #include "slic3r/GUI/GUI_ObjectList.hpp" #include "slic3r/GUI/Gizmos/GizmoObjectManipulation.hpp" #include "slic3r/GUI/MainFrame.hpp" // to update title when add text @@ -727,7 +728,7 @@ bool GLGizmoEmboss::on_init() m_rotate_gizmo.set_highlight_color(gray_color); // NOTE: It has special handling in GLGizmosManager::handle_shortcut - m_shortcut_key = WXK_CONTROL_T; + m_shortcut = Shortcut::GizmoEmboss; m_shortcuts = { {_L("Drag"), _L("Position on surface")} diff --git a/src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp b/src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp index 035fb895aa..06d69c3e82 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp @@ -8,6 +8,7 @@ //#include "slic3r/GUI/3DScene.hpp" #include "slic3r/GUI/GLCanvas3D.hpp" #include "slic3r/GUI/GUI_App.hpp" +#include "slic3r/GUI/Shortcuts.hpp" #include "slic3r/GUI/ImGuiWrapper.hpp" #include "slic3r/GUI/Plater.hpp" #include "slic3r/GUI/GUI_ObjectList.hpp" @@ -78,7 +79,7 @@ std::string GLGizmoFdmSupports::on_get_name() const bool GLGizmoFdmSupports::on_init() { // BBS - m_shortcut_key = WXK_CONTROL_L; + m_shortcut = Shortcut::GizmoFdmSupports; m_desc["perform"] = _L("Apply"); m_desc["on_overhangs_only"] = _L("On highlighted overhangs only"); @@ -149,25 +150,14 @@ void GLGizmoFdmSupports::render_painter_gizmo() glsafe(::glDisable(GL_BLEND)); } -// BBS -bool GLGizmoFdmSupports::on_key_down_select_tool_type(int keyCode) { - switch (keyCode) - { - case 'F': - m_current_tool = ImGui::FillButtonIcon; - break; - case 'S': - m_current_tool = ImGui::SphereButtonIcon; - break; - case 'C': - m_current_tool = ImGui::CircleButtonIcon; - break; - case 'G': - m_current_tool = ImGui::GapFillIcon; - break; - default: - return false; - break; +bool GLGizmoFdmSupports::on_tool_shortcut(Shortcut shortcut) +{ + switch (shortcut) { + case Shortcut::PaintToolFill: m_current_tool = ImGui::FillButtonIcon; break; + case Shortcut::PaintToolSphere: m_current_tool = ImGui::SphereButtonIcon; break; + case Shortcut::PaintToolCircle: m_current_tool = ImGui::CircleButtonIcon; break; + case Shortcut::PaintToolGapFill: m_current_tool = ImGui::GapFillIcon; break; + default: return false; } return true; } diff --git a/src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.hpp b/src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.hpp index 57a6cc1981..d282a06b65 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.hpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.hpp @@ -26,8 +26,7 @@ public: state_ready }; - //BBS - bool on_key_down_select_tool_type(int keyCode); + bool on_tool_shortcut(Shortcut shortcut) override; protected: void on_render_input_window(float x, float y, float bottom_limit) override; diff --git a/src/slic3r/GUI/Gizmos/GLGizmoFlatten.cpp b/src/slic3r/GUI/Gizmos/GLGizmoFlatten.cpp index e9d8598423..54dbd96ba7 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoFlatten.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoFlatten.cpp @@ -1,6 +1,7 @@ #include "GLGizmoFlatten.hpp" #include "slic3r/GUI/GLCanvas3D.hpp" #include "slic3r/GUI/GUI_App.hpp" +#include "slic3r/GUI/Shortcuts.hpp" #include "slic3r/GUI/Plater.hpp" #include "slic3r/GUI/Gizmos/GLGizmosCommon.hpp" @@ -54,7 +55,7 @@ void GLGizmoFlatten::data_changed(bool is_serializing) bool GLGizmoFlatten::on_init() { - m_shortcut_key = WXK_CONTROL_F; + m_shortcut = Shortcut::GizmoFlatten; return true; } diff --git a/src/slic3r/GUI/Gizmos/GLGizmoFuzzySkin.cpp b/src/slic3r/GUI/Gizmos/GLGizmoFuzzySkin.cpp index d807e466c8..8938e8a264 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoFuzzySkin.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoFuzzySkin.cpp @@ -6,6 +6,7 @@ #include "slic3r/GUI/GLCanvas3D.hpp" #include "slic3r/GUI/GUI.hpp" #include "slic3r/GUI/GUI_App.hpp" +#include "slic3r/GUI/Shortcuts.hpp" #include "slic3r/GUI/GUI_ObjectList.hpp" #include "slic3r/GUI/ImGuiWrapper.hpp" #include "slic3r/GUI/MsgDialog.hpp" @@ -31,7 +32,7 @@ std::string GLGizmoFuzzySkin::on_get_name() const bool GLGizmoFuzzySkin::on_init() { - m_shortcut_key = WXK_CONTROL_H; + m_shortcut = Shortcut::GizmoFuzzySkin; const wxString ctrl = GUI::shortkey_ctrl_prefix(); const wxString alt = GUI::shortkey_alt_prefix(); diff --git a/src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp b/src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp index 843a4b45fe..e5c6502452 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp @@ -25,7 +25,6 @@ GLGizmoHollow::GLGizmoHollow(GLCanvas3D& parent, const std::string& icon_filenam bool GLGizmoHollow::on_init() { - m_shortcut_key = WXK_CONTROL_H; m_desc["enable"] = _(L("Hollow this object")); m_desc["preview"] = _(L("Preview hollowed and drilled model")); m_desc["offset"] = _(L("Offset")) + ": "; diff --git a/src/slic3r/GUI/Gizmos/GLGizmoMeasure.cpp b/src/slic3r/GUI/Gizmos/GLGizmoMeasure.cpp index ba2f54d5c5..8ec564e5b4 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoMeasure.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoMeasure.cpp @@ -2,6 +2,7 @@ #include "slic3r/GUI/GUI.hpp" #include "slic3r/GUI/GLCanvas3D.hpp" #include "slic3r/GUI/GUI_App.hpp" +#include "slic3r/GUI/Shortcuts.hpp" #include "slic3r/GUI/Plater.hpp" #include "slic3r/GUI/Gizmos/GizmoObjectManipulation.hpp" #include "slic3r/Utils/UndoRedo.hpp" @@ -449,7 +450,7 @@ bool GLGizmoMeasure::gizmo_event(SLAGizmoEventType action, const Vec2d& mouse_po bool GLGizmoMeasure::on_init() { - m_shortcut_key = WXK_CONTROL_U; + m_shortcut = Shortcut::GizmoMeasure; const wxString shift = GUI::shortkey_shift_prefix(); diff --git a/src/slic3r/GUI/Gizmos/GLGizmoMeshBoolean.cpp b/src/slic3r/GUI/Gizmos/GLGizmoMeshBoolean.cpp index 8b12da14f9..b91f0a9468 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoMeshBoolean.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoMeshBoolean.cpp @@ -1,5 +1,6 @@ #include "GLGizmoMeshBoolean.hpp" #include "slic3r/GUI/GLCanvas3D.hpp" +#include "slic3r/GUI/Shortcuts.hpp" #include "slic3r/GUI/ImGuiWrapper.hpp" #include "slic3r/GUI/GUI.hpp" #include "libslic3r/MeshBoolean.hpp" @@ -104,7 +105,7 @@ bool GLGizmoMeshBoolean::on_mouse(const wxMouseEvent &mouse_event) bool GLGizmoMeshBoolean::on_init() { - m_shortcut_key = WXK_CONTROL_B; + m_shortcut = Shortcut::GizmoMeshBoolean; return true; } diff --git a/src/slic3r/GUI/Gizmos/GLGizmoMmuSegmentation.cpp b/src/slic3r/GUI/Gizmos/GLGizmoMmuSegmentation.cpp index 3d4af75cde..2e741fa5e5 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoMmuSegmentation.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoMmuSegmentation.cpp @@ -2,6 +2,7 @@ #include "slic3r/GUI/GLCanvas3D.hpp" #include "slic3r/GUI/GUI_App.hpp" +#include "slic3r/GUI/Shortcuts.hpp" #include "slic3r/GUI/ImGuiWrapper.hpp" #include "slic3r/GUI/Camera.hpp" #include "slic3r/GUI/Plater.hpp" @@ -90,7 +91,7 @@ void GLGizmoMmuSegmentation::init_extruders_data() bool GLGizmoMmuSegmentation::on_init() { // BBS - m_shortcut_key = WXK_CONTROL_N; + m_shortcut = Shortcut::GizmoMmuSegmentation; const wxString ctrl = GUI::shortkey_ctrl_prefix(); const wxString alt = GUI::shortkey_alt_prefix(); @@ -209,30 +210,16 @@ bool GLGizmoMmuSegmentation::on_number_key_down(int number) return true; } -bool GLGizmoMmuSegmentation::on_key_down_select_tool_type(int keyCode) { - switch (keyCode) - { - case 'F': - m_current_tool = ImGui::FillButtonIcon; - break; - case 'T': - m_current_tool = ImGui::TriangleButtonIcon; - break; - case 'S': - m_current_tool = ImGui::SphereButtonIcon; - break; - case 'C': - m_current_tool = ImGui::CircleButtonIcon; - break; - case 'H': - m_current_tool = ImGui::HeightRangeIcon; - break; - case 'G': - m_current_tool = ImGui::GapFillIcon; - break; - default: - return false; - break; +bool GLGizmoMmuSegmentation::on_tool_shortcut(Shortcut shortcut) +{ + switch (shortcut) { + case Shortcut::PaintToolFill: m_current_tool = ImGui::FillButtonIcon; break; + case Shortcut::PaintToolTriangle: m_current_tool = ImGui::TriangleButtonIcon; break; + case Shortcut::PaintToolSphere: m_current_tool = ImGui::SphereButtonIcon; break; + case Shortcut::PaintToolCircle: m_current_tool = ImGui::CircleButtonIcon; break; + case Shortcut::PaintToolHeightRange: m_current_tool = ImGui::HeightRangeIcon; break; + case Shortcut::PaintToolGapFill: m_current_tool = ImGui::GapFillIcon; break; + default: return false; } return true; } diff --git a/src/slic3r/GUI/Gizmos/GLGizmoMmuSegmentation.hpp b/src/slic3r/GUI/Gizmos/GLGizmoMmuSegmentation.hpp index 70cfde5aed..b2b04acdbe 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoMmuSegmentation.hpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoMmuSegmentation.hpp @@ -82,7 +82,7 @@ public: // BBS bool on_number_key_down(int number); - bool on_key_down_select_tool_type(int keyCode); + bool on_tool_shortcut(Shortcut shortcut) override; protected: // BBS diff --git a/src/slic3r/GUI/Gizmos/GLGizmoMove.cpp b/src/slic3r/GUI/Gizmos/GLGizmoMove.cpp index 2f3195620a..4bee1a6cfc 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoMove.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoMove.cpp @@ -1,6 +1,7 @@ #include "GLGizmoMove.hpp" #include "slic3r/GUI/GLCanvas3D.hpp" #include "slic3r/GUI/GUI_App.hpp" +#include "slic3r/GUI/Shortcuts.hpp" //BBS: GUI refactor #include "slic3r/GUI/Plater.hpp" #include "libslic3r/AppConfig.hpp" @@ -61,7 +62,7 @@ bool GLGizmoMove3D::on_init() m_grabbers[0].angles = { 0.0, 0.5 * double(PI), 0.0 }; m_grabbers[1].angles = { -0.5 * double(PI), 0.0, 0.0 }; - m_shortcut_key = WXK_CONTROL_M; + m_shortcut = Shortcut::GizmoMove; return true; } diff --git a/src/slic3r/GUI/Gizmos/GLGizmoPainterBase.hpp b/src/slic3r/GUI/Gizmos/GLGizmoPainterBase.hpp index 63e9d3f436..9ba6065458 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoPainterBase.hpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoPainterBase.hpp @@ -192,6 +192,8 @@ public: ~GLGizmoPainterBase() override; void data_changed(bool is_serializing) override; virtual bool gizmo_event(SLAGizmoEventType action, const Vec2d& mouse_position, bool shift_down, bool alt_down, bool control_down); + // Switches the painting tool a Painting-context shortcut names; false when this gizmo has no such tool. + virtual bool on_tool_shortcut(Shortcut shortcut) { return false; } // Following function renders the triangles and cursor. Having this separated // from usual on_render method allows to render them before transparent diff --git a/src/slic3r/GUI/Gizmos/GLGizmoRotate.cpp b/src/slic3r/GUI/Gizmos/GLGizmoRotate.cpp index 5521640eee..835b97f072 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoRotate.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoRotate.cpp @@ -3,6 +3,7 @@ #include "slic3r/GUI/ImGuiWrapper.hpp" #include "slic3r/GUI/GUI_App.hpp" +#include "slic3r/GUI/Shortcuts.hpp" #include "slic3r/GUI/GUI.hpp" #include "slic3r/GUI/Plater.hpp" #include "slic3r/GUI/Jobs/RotoptimizeJob.hpp" @@ -555,7 +556,7 @@ bool GLGizmoRotate3D::on_init() for (unsigned int i = 0; i < 3; ++i) m_gizmos[i].set_highlight_color(AXES_COLOR[i]); - m_shortcut_key = WXK_CONTROL_R; + m_shortcut = Shortcut::GizmoRotate; return true; } diff --git a/src/slic3r/GUI/Gizmos/GLGizmoScale.cpp b/src/slic3r/GUI/Gizmos/GLGizmoScale.cpp index 88e744c2b8..c30acba386 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoScale.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoScale.cpp @@ -1,6 +1,7 @@ #include "GLGizmoScale.hpp" #include "slic3r/GUI/GLCanvas3D.hpp" #include "slic3r/GUI/GUI_App.hpp" +#include "slic3r/GUI/Shortcuts.hpp" #include "slic3r/GUI/Plater.hpp" #include @@ -135,7 +136,7 @@ bool GLGizmoScale3D::on_init() // BBS m_grabbers[4].enabled = false; - m_shortcut_key = WXK_CONTROL_S; + m_shortcut = Shortcut::GizmoScale; return true; } diff --git a/src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp b/src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp index b211a18fb2..f36a47c8ec 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp @@ -5,6 +5,7 @@ //#include "slic3r/GUI/3DScene.hpp" #include "slic3r/GUI/GLCanvas3D.hpp" #include "slic3r/GUI/GUI_App.hpp" +#include "slic3r/GUI/Shortcuts.hpp" #include "slic3r/GUI/ImGuiWrapper.hpp" #include "slic3r/GUI/Plater.hpp" #include "slic3r/GUI/GUI_ObjectList.hpp" @@ -28,7 +29,7 @@ void GLGizmoSeam::on_shutdown() bool GLGizmoSeam::on_init() { - m_shortcut_key = WXK_CONTROL_P; + m_shortcut = Shortcut::GizmoSeam; const wxString ctrl = GUI::shortkey_ctrl_prefix(); const wxString alt = GUI::shortkey_alt_prefix(); @@ -86,19 +87,12 @@ void GLGizmoSeam::render_painter_gizmo() glsafe(::glDisable(GL_BLEND)); } -// BBS -bool GLGizmoSeam::on_key_down_select_tool_type(int keyCode) { - switch (keyCode) - { - case 'S': - m_current_tool = ImGui::SphereButtonIcon; - break; - case 'C': - m_current_tool = ImGui::CircleButtonIcon; - break; - default: - return false; - break; +bool GLGizmoSeam::on_tool_shortcut(Shortcut shortcut) +{ + switch (shortcut) { + case Shortcut::PaintToolSphere: m_current_tool = ImGui::SphereButtonIcon; break; + case Shortcut::PaintToolCircle: m_current_tool = ImGui::CircleButtonIcon; break; + default: return false; } return true; } diff --git a/src/slic3r/GUI/Gizmos/GLGizmoSeam.hpp b/src/slic3r/GUI/Gizmos/GLGizmoSeam.hpp index 5b143dc32c..f1c48a12d6 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoSeam.hpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoSeam.hpp @@ -12,8 +12,7 @@ public: void render_painter_gizmo() override; - //BBS - bool on_key_down_select_tool_type(int keyCode); + bool on_tool_shortcut(Shortcut shortcut) override; protected: // BBS diff --git a/src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp b/src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp index ca22b14d99..49818e8e11 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp @@ -34,7 +34,6 @@ GLGizmoSlaSupports::GLGizmoSlaSupports(GLCanvas3D& parent, const std::string& ic bool GLGizmoSlaSupports::on_init() { - m_shortcut_key = WXK_CONTROL_L; m_desc["head_diameter"] = _L("Head diameter") + ": "; m_desc["lock_supports"] = _L("Lock supports under new islands"); diff --git a/src/slic3r/GUI/Gizmos/GLGizmoText.cpp b/src/slic3r/GUI/Gizmos/GLGizmoText.cpp index df3e9be584..9ae979eeef 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoText.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoText.cpp @@ -261,7 +261,6 @@ bool GLGizmoText::on_init() //m_avail_font_names = init_occt_fonts(); update_font_texture(); m_scale = m_imgui->get_font_size(); - m_shortcut_key = WXK_CONTROL_T; m_grabbers.push_back(Grabber()); diff --git a/src/slic3r/GUI/Gizmos/GLGizmosManager.cpp b/src/slic3r/GUI/Gizmos/GLGizmosManager.cpp index 17a7b769c3..dc51518acc 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmosManager.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmosManager.cpp @@ -4,6 +4,7 @@ #include "slic3r/GUI/3DScene.hpp" #include "slic3r/GUI/Camera.hpp" #include "slic3r/GUI/GUI_App.hpp" +#include "slic3r/GUI/Shortcuts.hpp" #include "slic3r/GUI/GUI_ObjectList.hpp" #include "slic3r/GUI/Plater.hpp" #include "slic3r/Utils/UndoRedo.hpp" @@ -486,15 +487,13 @@ bool GLGizmosManager::is_running() const return m_current != Undefined; } -bool GLGizmosManager::handle_shortcut(int key) +bool GLGizmosManager::open_gizmo_by_shortcut(Shortcut shortcut) { if (!m_enabled) return false; - auto is_key = [pressed_key = key](int gizmo_key) { return (gizmo_key == pressed_key - 64) || (gizmo_key == pressed_key - 96); }; - // allowe open shortcut even when selection is empty - if (GLGizmoBase* gizmo_emboss = m_gizmos[Emboss].get(); - is_key(gizmo_emboss->get_shortcut_key())) { + // The text tool opens without a selection because it creates its own object. + if (GLGizmoBase* gizmo_emboss = m_gizmos[Emboss].get(); gizmo_emboss->shortcut() == shortcut) { dynamic_cast(gizmo_emboss)->on_shortcut_key(); return true; } @@ -502,16 +501,21 @@ bool GLGizmosManager::handle_shortcut(int key) if (m_parent.get_selection().is_empty()) return false; - auto is_gizmo = [is_key](const std::unique_ptr &gizmo) { - return gizmo->is_activable() && is_key(gizmo->get_shortcut_key()); - }; - auto it = std::find_if(m_gizmos.begin(), m_gizmos.end(), is_gizmo); - + auto it = std::find_if(m_gizmos.begin(), m_gizmos.end(), [shortcut](const std::unique_ptr &gizmo) { + return gizmo->is_activable() && gizmo->shortcut() == shortcut; + }); if (it == m_gizmos.end()) return false; - EType gizmo_type = EType(it - m_gizmos.begin()); - return open_gizmo(gizmo_type); + return open_gizmo(EType(it - m_gizmos.begin())); +} + +bool GLGizmosManager::on_delete_key() +{ + const bool processed = (m_current == Cut || m_current == Measure || m_current == Assembly) && gizmo_event(SLAGizmoEventType::Delete); + if (processed) + m_parent.set_as_dirty(); + return processed; } bool GLGizmosManager::is_dragging() const @@ -856,15 +860,6 @@ bool GLGizmosManager::on_char(wxKeyEvent& evt) } break; } - //skip some keys when gizmo - case 'A': - case 'a': - { - if (is_running()) { - processed = true; - } - break; - } //case WXK_RETURN: //{ // if ((m_current == SlaSupports) && gizmo_event(SLAGizmoEventType::ApplyChanges)) @@ -883,12 +878,6 @@ bool GLGizmosManager::on_char(wxKeyEvent& evt) //} - case WXK_BACK: - case WXK_DELETE: { - if ((m_current == Cut || m_current == Measure || m_current == Assembly) && gizmo_event(SLAGizmoEventType::Delete)) - processed = true; - break; - } //case 'A': //case 'a': //{ @@ -932,11 +921,6 @@ bool GLGizmosManager::on_char(wxKeyEvent& evt) } } - if (!processed && !evt.HasModifiers()) { - if (handle_shortcut(keyCode)) - processed = true; - } - if (processed) m_parent.set_as_dirty(); @@ -1077,40 +1061,24 @@ bool GLGizmosManager::on_key(wxKeyEvent& evt) processed = select(digit); } } - else if (keyCode == 'F' || keyCode == 'T' || keyCode == 'S' || keyCode == 'C' || keyCode == 'H' || keyCode == 'G') { - processed = mmu_seg->on_key_down_select_tool_type(keyCode); - if (processed) { - // force extra frame to automatically update window size - wxGetApp().imgui()->set_requires_extra_frame(); - } - } } } - else if (m_current == FdmSupports) { - GLGizmoFdmSupports* fdm_support = dynamic_cast(get_current()); - if (fdm_support != nullptr && (keyCode == 'F' || keyCode == 'S' || keyCode == 'C' || keyCode == 'G')) { - processed = fdm_support->on_key_down_select_tool_type(keyCode); - } - if (processed) { - // force extra frame to automatically update window size - wxGetApp().imgui()->set_requires_extra_frame(); - } - } - else if (m_current == Seam) { - GLGizmoSeam* seam = dynamic_cast(get_current()); - if (seam != nullptr && (keyCode == 'S' || keyCode == 'C')) { - processed = seam->on_key_down_select_tool_type(keyCode); - } - if (processed) { - // force extra frame to automatically update window size - wxGetApp().imgui()->set_requires_extra_frame(); - } - } else if (m_current == Measure || m_current == Assembly) { + else if (m_current == Measure || m_current == Assembly) { if (keyCode == WXK_CONTROL) gizmo_event(SLAGizmoEventType::CtrlDown, Vec2d::Zero(), evt.ShiftDown(), evt.AltDown(), evt.CmdDown()); else if (keyCode == WXK_SHIFT) gizmo_event(SLAGizmoEventType::ShiftDown, Vec2d::Zero(), evt.ShiftDown(), evt.AltDown(), evt.CmdDown()); } + + if (!processed) { + if (auto painter = dynamic_cast(get_current()); painter != nullptr) { + const std::optional shortcut = wxGetApp().shortcuts().lookup(ShortcutContext::Painting, KeyChord::from_event(evt)); + processed = shortcut.has_value() && painter->on_tool_shortcut(*shortcut); + if (processed) + // force extra frame to automatically update window size + wxGetApp().imgui()->set_requires_extra_frame(); + } + } } if (processed) diff --git a/src/slic3r/GUI/Gizmos/GLGizmosManager.hpp b/src/slic3r/GUI/Gizmos/GLGizmosManager.hpp index 5f249d2ef7..2a4afac16d 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmosManager.hpp +++ b/src/slic3r/GUI/Gizmos/GLGizmosManager.hpp @@ -263,7 +263,10 @@ public: EType get_gizmo_from_name(const std::string& gizmo_name) const; bool is_running() const; - bool handle_shortcut(int key); + // Opens the gizmo bound to a Plater-context shortcut; false when no gizmo has it or it cannot open now. + bool open_gizmo_by_shortcut(Shortcut shortcut); + // Lets the current gizmo consume the delete key; false when it did not. + bool on_delete_key(); bool is_dragging() const; diff --git a/src/slic3r/GUI/HintNotification.cpp b/src/slic3r/GUI/HintNotification.cpp index c08a447e1e..de5f12e07e 100644 --- a/src/slic3r/GUI/HintNotification.cpp +++ b/src/slic3r/GUI/HintNotification.cpp @@ -5,6 +5,7 @@ #include "GUI_ObjectList.hpp" #include "GLCanvas3D.hpp" #include "MainFrame.hpp" +#include "Preferences.hpp" #include "Tab.hpp" #include "libslic3r/AppConfig.hpp" #include "libslic3r/Utils.hpp" @@ -444,9 +445,8 @@ void HintDatabase::load_hints_from_file(const boost::filesystem::path& path) // open preferences } else if (dict["hypertext_type"] == "preferences") { - std::string page = dict["hypertext_preferences_page"]; std::string item = dict["hypertext_preferences_item"]; - HintData hint_data{ id_string, text1, weight, was_displayed, hypertext_text, follow_text, disabled_tags, enabled_tags, false, documentation_link, img_url, [page, item]() { wxGetApp().open_preferences(1, page); } };// 1 is to modify + HintData hint_data{ id_string, text1, weight, was_displayed, hypertext_text, follow_text, disabled_tags, enabled_tags, false, documentation_link, img_url, [item]() { wxGetApp().open_preferences(PreferencesTab::Control, item); } }; m_loaded_hints.emplace_back(hint_data); } else if (dict["hypertext_type"] == "plater") { diff --git a/src/slic3r/GUI/KBShortcutsDialog.cpp b/src/slic3r/GUI/KBShortcutsDialog.cpp index be1f53ef97..c03d331627 100644 --- a/src/slic3r/GUI/KBShortcutsDialog.cpp +++ b/src/slic3r/GUI/KBShortcutsDialog.cpp @@ -6,359 +6,319 @@ #include "Notebook.hpp" #include #include +#include +#include #include "GUI_App.hpp" #include "wxExtensions.hpp" #include "MainFrame.hpp" +#include "MsgDialog.hpp" +#include "Preferences.hpp" +#include "Widgets/Button.hpp" +#include "Widgets/DialogButtons.hpp" +#include "Widgets/Label.hpp" +#include "Widgets/StaticBox.hpp" +#include "Widgets/StaticLine.hpp" +#include "Widgets/TabCtrl.hpp" #include namespace Slic3r { namespace GUI { -wxDEFINE_EVENT(EVT_PREFERENCES_SELECT_TAB, wxCommandEvent); +namespace { -KBShortcutsDialog::KBShortcutsDialog() - : DPIDialog(static_cast(wxGetApp().mainframe), wxID_ANY,_L("Keyboard Shortcuts"), - wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE) +wxString shortcut_names(const std::vector& shortcuts) { - // fonts - const wxFont& font = wxGetApp().normal_font(); - const wxFont& bold_font = wxGetApp().bold_font(); - SetFont(font); - - this->SetSizeHints(wxDefaultSize, wxDefaultSize); - this->SetBackgroundColour(wxColour(255, 255, 255)); - - wxBoxSizer *m_sizer_top = new wxBoxSizer(wxVERTICAL); - - auto m_top_line = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxSize(-1, 1), wxTAB_TRAVERSAL); - m_top_line->SetBackgroundColour(wxColour(166, 169, 170)); - - m_sizer_top->Add(m_top_line, 0, wxEXPAND, 0); - m_sizer_body = new wxBoxSizer(wxHORIZONTAL); - - m_panel_selects = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL); - m_panel_selects->SetBackgroundColour(wxColour(248, 248, 248)); - wxBoxSizer *m_sizer_left = new wxBoxSizer(wxVERTICAL); - - m_sizer_left->Add(0, 0, 0, wxEXPAND | wxTOP, FromDIP(20)); - - m_sizer_left->Add(create_button(0, _L("Global")), 0, wxEXPAND, 0); - m_sizer_left->Add(create_button(1, _L("Prepare")), 0, wxEXPAND, 0); - m_sizer_left->Add(create_button(2, _L("Toolbar")), 0, wxEXPAND, 0); - m_sizer_left->Add(create_button(3, _L("Objects list")), 0, wxEXPAND, 0); - m_sizer_left->Add(create_button(4, _L("Preview")), 0, wxEXPAND, 0); - - m_panel_selects->SetSizer(m_sizer_left); - m_panel_selects->Layout(); - m_sizer_left->Fit(m_panel_selects); - m_sizer_body->Add(m_panel_selects, 0, wxEXPAND, 0); - - m_sizer_right = new wxBoxSizer(wxHORIZONTAL); - - m_sizer_right->Add(0, 0, 0, wxEXPAND | wxLEFT, FromDIP(12)); - - m_simplebook = new wxSimplebook(this, wxID_ANY, wxDefaultPosition, wxSize(FromDIP(870), FromDIP(500)), 0); - - m_sizer_right->Add(m_simplebook, 1, wxEXPAND, 0); - m_sizer_body->Add(m_sizer_right, 1, wxEXPAND, 0); - m_sizer_top->Add(m_sizer_body, 1, wxEXPAND, 0); - - fill_shortcuts(); - for (size_t i = 0; i < m_full_shortcuts.size(); ++i) { - wxPanel *page = create_page(m_simplebook, m_full_shortcuts[i], font, bold_font); - m_pages.push_back(page); - m_simplebook->AddPage(page, m_full_shortcuts[i].first.first, i == 0); + wxString names; + for (Shortcut shortcut : shortcuts) { + if (!names.empty()) + names += ", "; + names += _(shortcut_info(shortcut).name); } + return names; +} - Bind(EVT_PREFERENCES_SELECT_TAB, &KBShortcutsDialog::OnSelectTabel, this); +const wxColour ERROR_COLOUR("#D01B1B"); - SetSizer(m_sizer_top); - Layout(); - Fit(); +// The camera action a mouse button drags, as set in Preferences > Control. +const char* mouse_action(const char* preference) +{ + const std::string action = wxGetApp().app_config->get(preference); + return action == "1" ? L("Pan View") : action == "2" ? L("Rotate View") : L("None"); +} + +// Page layout in DIPs; titles and rows are indented as in the Preferences dialog. +constexpr int PAGE_WIDTH = 640; +constexpr int TITLE_MARGIN = DESIGN_LEFT_MARGIN - 10; +constexpr int ROW_MARGIN = DESIGN_LEFT_MARGIN; +constexpr int ROW_GAP = 16; + +template struct overloaded : Ts... { using Ts::operator()...; }; +template overloaded(Ts...) -> overloaded; + +std::vector to_wx(const std::vector& parts) +{ + std::vector out; + for (const std::string& part : parts) + out.push_back(from_u8(part)); + return out; +} + +// The keys a Global shortcut can use, the second line of its hint and of a rejection. +wxString global_key_advice() +{ + return wxString::Format(_L("Use %s or %s, or a key that does not type a character."), + from_u8(KeyChord::modifier_name(wxMOD_CONTROL)), from_u8(KeyChord::modifier_name(wxMOD_ALT))); +} + +// The pieces of a chord, spaced out for the dialog: "Ctrl + Shift + A". +wxString join_keys(const std::vector& parts) +{ + wxString out; + for (const wxString& part : parts) + out += (out.empty() ? "" : " + ") + part; + return out; +} + +} // namespace + +KBShortcutsDialog::KBShortcutsDialog(wxWindow* parent, ShortcutContext page) + : DPIDialog(parent, wxID_ANY, _L("Keyboard Shortcuts"), wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE) +{ + SetFont(wxGetApp().normal_font()); + SetBackgroundColour(*wxWHITE); + + fill_pages(); + + ScalableButton* probe = new ScalableButton(this, wxID_ANY, "edit"); + m_edit_size = probe->GetBestSize(); + probe->Destroy(); + m_buttons_width = 2 * m_edit_size.x + FromDIP(6); + m_row_text_width = FromDIP(PAGE_WIDTH) - FromDIP(ROW_MARGIN) - FromDIP(TITLE_MARGIN) - 2 * FromDIP(ROW_GAP) - m_buttons_width; + GetTextExtent("W", &m_key_slot, nullptr, nullptr, nullptr, &Label::Head_14); + + // The page tabs follow the Preferences dialog. + m_tabs = new TabCtrl(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTR_NO_BUTTONS | wxTR_HIDE_ROOT | wxTR_SINGLE | wxTR_NO_LINES | wxBORDER_NONE | wxWANTS_CHARS | wxTR_FULL_ROW_HIGHLIGHT); + m_tabs->Bind(wxEVT_RIGHT_DOWN, [](auto&) {}); + m_tabs->SetFont(Label::Body_14); + m_simplebook = new wxSimplebook(this, wxID_ANY, wxDefaultPosition, wxSize(FromDIP(660), FromDIP(500))); + for (const Page& page : m_pages) { + m_tabs->AppendItem(page.title); + m_simplebook->AddPage(create_page(m_simplebook, page), page.title); + } + const StateColor tab_colour(std::make_pair(wxColour("#6B6B6C"), (int) StateColor::NotChecked), std::make_pair(wxColour("#363636"), (int) StateColor::Normal)); + for (size_t i = 0; i < m_tabs->GetCount(); ++i) + m_tabs->SetItemTextColour(i, tab_colour); + m_tabs->Bind(wxEVT_TAB_SEL_CHANGED, [this](wxCommandEvent& e) { + for (size_t i = 0; i < m_tabs->GetCount(); ++i) + m_tabs->SetItemBold(i, int(i) == e.GetSelection()); + m_simplebook->SetSelection(e.GetSelection()); + }); + const auto shown = std::find_if(m_pages.begin(), m_pages.end(), [page](const Page& entry) { return entry.context == page; }); + m_tabs->SelectItem(shown == m_pages.end() ? 0 : int(shown - m_pages.begin())); + + wxBoxSizer* sizer = new wxBoxSizer(wxVERTICAL); + sizer->Add(m_tabs, 0, wxEXPAND | wxTOP | wxBOTTOM, FromDIP(5)); + sizer->Add(m_simplebook, 1, wxEXPAND); + SetSizerAndFit(sizer); CenterOnParent(); - - // select first - auto event = wxCommandEvent(EVT_PREFERENCES_SELECT_TAB); - event.SetInt(0); - event.SetEventObject(this); - wxPostEvent(this, event); wxGetApp().UpdateDlgDarkUI(this); } -void KBShortcutsDialog::OnSelectTabel(wxCommandEvent &event) -{ - auto id = event.GetInt(); - SelectHash::iterator i = m_hash_selector.begin(); - while (i != m_hash_selector.end()) { - Select *sel = i->second; - if (id == sel->m_index) { - sel->m_tab_button->SetBackgroundColour(StateColor::darkModeColorFor(wxColour("#BFE1DE"))); // ORCA color for selected tab background - sel->m_tab_text->SetBackgroundColour(StateColor::darkModeColorFor(wxColour("#BFE1DE"))); // ORCA color for selected tab background - sel->m_tab_text->SetFont(::Label::Head_13); - sel->m_tab_button->Refresh(); - sel->m_tab_text->Refresh(); - - m_simplebook->SetSelection(id); - } else { - sel->m_tab_button->SetBackgroundColour(StateColor::darkModeColorFor(wxColour("#F8F8F8"))); - sel->m_tab_text->SetBackgroundColour(StateColor::darkModeColorFor(wxColour("#F8F8F8"))); - sel->m_tab_text->SetFont(::Label::Body_13); - sel->m_tab_button->Refresh(); - sel->m_tab_text->Refresh(); - } - i++; - } - wxGetApp().UpdateDlgDarkUI(this); -} - -wxWindow *KBShortcutsDialog::create_button(int id, wxString text) -{ - auto tab_button = new wxWindow(m_panel_selects, wxID_ANY, wxDefaultPosition, wxSize( FromDIP(150), FromDIP(28)), wxTAB_TRAVERSAL); - - wxBoxSizer *sizer = new wxBoxSizer(wxHORIZONTAL); - - sizer->Add(0, 0, 0, wxEXPAND | wxLEFT, FromDIP(22)); - - auto stext = new wxStaticText(tab_button, wxID_ANY, text, wxDefaultPosition, wxDefaultSize, 0); - stext->SetFont(::Label::Body_13); - stext->SetForegroundColour(wxColour(38, 46, 48)); - stext->Wrap(-1); - sizer->Add(stext, 1, wxALIGN_CENTER, 0); - - tab_button->Bind(wxEVT_LEFT_DOWN, [this, id](auto &e) { - auto event = wxCommandEvent(EVT_PREFERENCES_SELECT_TAB); - event.SetInt(id); - event.SetEventObject(this); - wxPostEvent(this, event); - }); - - stext->Bind(wxEVT_LEFT_DOWN, [this, id](wxMouseEvent &e) { - auto event = wxCommandEvent(EVT_PREFERENCES_SELECT_TAB); - event.SetInt(id); - event.SetEventObject(this); - wxPostEvent(this, event); - }); - - Select *sel = new Select; - sel->m_index = id; - sel->m_tab_button = tab_button; - sel->m_tab_text = stext; - m_hash_selector[sel->m_index] = sel; - - tab_button->SetSizer(sizer); - tab_button->Layout(); - return tab_button; -} - void KBShortcutsDialog::on_dpi_changed(const wxRect& suggested_rect) { - m_logo_bmp.msw_rescale(); - m_header_bitmap->SetBitmap(m_logo_bmp.bmp()); - msw_buttons_rescale(this, em_unit(), { wxID_OK }); - + m_tabs->Rescale(); Layout(); Fit(); Refresh(); } -void KBShortcutsDialog::fill_shortcuts() +void KBShortcutsDialog::fill_pages() { - const std::string ctrl = GUI::shortkey_ctrl_prefix(); - const std::string alt = GUI::shortkey_alt_prefix(); - const std::string shift = L("Shift+"); + // A fixed row is listed in the section of the shortcuts it belongs with. + auto fixed = [](ShortcutSection section, std::vector keys, const char* description) { return Row{ FixedKey{ std::move(keys), description }, section }; }; + auto mouse = [](ShortcutSection section, const wxString& button, const char* preference) { return Row{ MouseAction{ button, preference }, section }; }; + auto key = [](const std::string& key) { return _L_CONTEXT(key, "Keyboard Shortcut"); }; + auto page = [this](const wxString& title, const wxString& caption, ShortcutContext context, std::vector fixed_rows) { + Page entry{ title, caption, context, {} }; + for (Shortcut shortcut : shortcuts_in(context)) + entry.rows.push_back({ shortcut, shortcut_section(shortcut) }); + entry.rows.insert(entry.rows.end(), fixed_rows.begin(), fixed_rows.end()); + std::stable_sort(entry.rows.begin(), entry.rows.end(), [](const Row& a, const Row& b) { return a.section < b.section; }); + m_pages.push_back(std::move(entry)); + }; + + const wxString ctrl = from_u8(KeyChord::modifier_name(wxMOD_CONTROL)); + const wxString alt = from_u8(KeyChord::modifier_name(wxMOD_ALT)); + const wxString shift = from_u8(KeyChord::modifier_name(wxMOD_SHIFT)); + const wxString shift_ctrl = shift + "/" + ctrl; // either one + const wxString any_key = key(L_CONTEXT("Key", "Keyboard Shortcut")); // the key the row's shortcut is bound to + const wxString esc = key(L_CONTEXT("Esc", "Keyboard Shortcut")); + const wxString left_button = _L("Left mouse"); + const wxString wheel = _L("Mouse wheel"); + using Section = ShortcutSection; if (wxGetApp().is_editor()) { - Shortcuts global_shortcuts = { - // File - { ctrl + "N", L("New Project") }, - { ctrl + "O", L("Open Project") }, - { ctrl + "S", L("Save Project") }, - { ctrl + shift + "S", L("Save Project as")}, - { ctrl + shift + "E", L("Publish 3MF") }, - // File>Import - { ctrl + "I", L("Import geometry data from STL/STEP/3MF/OBJ/AMF files") }, - // File>Export - { ctrl + "G", L("Export plate sliced file")}, - // Slice plate - { ctrl + "R", L("Slice plate")}, - // Send to Print - { ctrl + shift + "G", L("Print plate")}, - // Edit - { ctrl + "X", L("Cut") }, - { ctrl + "C", L("Copy to clipboard") }, - { ctrl + "V", L("Paste from clipboard") }, - // Configuration - { ctrl + "P", L("Preferences") }, - //3D control -#ifdef __APPLE__ - { ctrl + shift + "M", L("Show/Hide 3Dconnexion devices settings dialog") }, -#else - { ctrl + "M", L("Show/Hide 3Dconnexion devices settings dialog") }, -#endif // __APPLE + page(_L("Global"), _L("Available anywhere in the window, even while typing in a text field."), ShortcutContext::Global, { + fixed(Section::Application, { alt, "1-9, 0" }, L("Run a speed dial favorite while the dial is open")), + fixed(Section::Application, { ctrl, key(L_CONTEXT("Tab", "Keyboard Shortcut")) }, L("Switch to the next main tab")), + }); - // Switch table page - { ctrl + L("Tab"), L("Switch table page")}, - // Open speed dial - { L_CONTEXT("Space", "Keyboard Shortcut"), L("Open speed dial") }, - { alt + "1..9,0", L("Run a Speed Dial favourite (while the Speed Dial is open)") }, - //DEL - #ifdef __APPLE__ - {"fn+⌫", L("Delete Selected")}, - #else - {L_CONTEXT("Del", "Keyboard Shortcut"), L("Delete Selected")}, - #endif - // Help - { "?", L("Show keyboard shortcuts list") } - }; - m_full_shortcuts.push_back({{_L("Global shortcuts"), ""}, global_shortcuts}); + page(_L("Prepare"), _L("Available while the 3D view on the Prepare tab has focus."), ShortcutContext::Plater, { + fixed(Section::Selection, { alt, left_button }, L("Select a part")), + fixed(Section::Selection, { ctrl, left_button }, L("Select multiple objects")), + fixed(Section::Selection, { shift, left_button }, L("Select objects by rectangle")), + fixed(Section::Selection, { esc }, L("Deselect All")), + fixed(Section::Objects, { "1-9" }, L("Keyboard 1-9: set filament for object/part")), + fixed(Section::Placement, { shift, any_key }, L("Movement step set to 1mm")), + fixed(Section::Placement, { ctrl, any_key }, L("Movement in camera space")), + mouse(Section::Camera, left_button, "left_mouse_drag_action"), + mouse(Section::Camera, _L("Middle mouse"), "middle_mouse_drag_action"), + mouse(Section::Camera, _L("Right mouse"), "right_mouse_drag_action"), + fixed(Section::Camera, { wheel }, L("Zoom View")), + }); - - // Retrieve mouse actions from config and map to MouseAction - std::map mouse_actions; - mouse_actions["0"] = L("None"); - mouse_actions["1"] = L("Pan View"); - mouse_actions["2"] = L("Rotate View"); + page(_L("Painting"), _L("Available while a painting gizmo is open: supports, seam, fuzzy skin or color painting."), ShortcutContext::Painting, { + fixed(Section::Gizmos, { esc }, L("Deselect All")), + fixed(Section::Gizmos, { shift, left_button }, L("Move: press to snap by 1mm")), + fixed(Section::PaintingTools, { ctrl, wheel }, L("Support/Color Painting: adjust pen radius")), + fixed(Section::PaintingTools, { alt, wheel }, L("Support/Color Painting: adjust section position")), + }); - Shortcuts plater_shortcuts = { - { L("Left mouse button"), mouse_actions[wxGetApp().app_config->get("left_mouse_drag_action").c_str()]}, - { L("Middle mouse button"), mouse_actions[wxGetApp().app_config->get("middle_mouse_drag_action").c_str()]}, - { L("Right mouse button"), mouse_actions[wxGetApp().app_config->get("right_mouse_drag_action").c_str()]}, - { L("Mouse wheel"), L("Zoom View") }, - { "A", L("Arrange all objects") }, - { shift + "A", L("Arrange objects on selected plates") }, - - { "Q", L("Auto orients selected objects or all objects. If there are selected objects, it just orients the selected ones. Otherwise, it will orient all objects in the current project.") }, - { shift + "Q", L("Auto orients all objects on the active plate.") }, - - {shift + L("Tab"), L("Collapse/Expand the sidebar")}, - {ctrl + L("Any arrow"), L("Movement in camera space")}, - {alt + L("Left mouse button"), L("Select a part")}, - {ctrl + L("Left mouse button"), L("Select multiple objects")}, - {shift + L("Left mouse button"), L("Select objects by rectangle")}, - {L_CONTEXT("Arrow Up", "Keyboard Shortcut"), L("Move selection 10mm in positive Y direction")}, - {L_CONTEXT("Arrow Down", "Keyboard Shortcut"), L("Move selection 10mm in negative Y direction")}, - {L_CONTEXT("Arrow Left", "Keyboard Shortcut"), L("Move selection 10mm in negative X direction")}, - {L_CONTEXT("Arrow Right", "Keyboard Shortcut"), L("Move selection 10mm in positive X direction")}, - {shift + L("Any arrow"), L("Movement step set to 1mm")}, - {L_CONTEXT("Esc", "Keyboard Shortcut"), L("Deselect All")}, - {"1-9", L("Keyboard 1-9: set filament for object/part")}, - {ctrl + "0", L("Camera view - Default")}, - {ctrl + "1", L("Camera view - Top")}, - {ctrl + "2", L("Camera view - Bottom")}, - {ctrl + "3", L("Camera view - Front")}, - {ctrl + "4", L("Camera view - Behind")}, - {ctrl + "5", L("Camera Angle - Left side")}, - {ctrl + "6", L("Camera Angle - Right side")}, - - {ctrl + "A", L("Select all objects")}, - {ctrl + "D", L("Delete All")}, - {ctrl + "Z", L("Undo")}, - {ctrl + "Y", L("Redo")}, - { "M", L("Gizmo move") }, - { "R", L("Gizmo rotate") }, - { "S", L("Gizmo scale") }, - { "F", L("Gizmo place face on bed") }, - { "C", L("Gizmo cut") }, - { "B", L("Gizmo mesh boolean") }, - { "H", L("Gizmo FDM paint-on fuzzy skin") }, - { "L", L("Gizmo SLA support points") }, - { "P", L("Gizmo FDM paint-on seam") }, - { "T", L("Gizmo text emboss/engrave") }, - { "U", L("Gizmo measure") }, - { "Y", L("Gizmo assemble") }, - { "E", L("Gizmo brim ears") }, - { "I", L("Zoom in") }, - { "O", L("Zoom out") }, - { "V", L("Toggle printable for object/part") }, - { L_CONTEXT("Tab", "Keyboard Shortcut"), L("Switch between Prepare/Preview") }, - }; - m_full_shortcuts.push_back({ { _L("Plater"), "" }, plater_shortcuts }); - - Shortcuts gizmos_shortcuts = { - {L_CONTEXT("Esc", "Keyboard Shortcut"), L("Deselect All")}, - {shift, L("Move: press to snap by 1mm")}, - {ctrl + L("Mouse wheel"), L("Support/Color Painting: adjust pen radius")}, - {alt + L("Mouse wheel"), L("Support/Color Painting: adjust section position")}, - }; - m_full_shortcuts.push_back({{_L("Gizmo"), ""}, gizmos_shortcuts}); - - Shortcuts object_list_shortcuts = { - {"1-9", L("Set extruder number for the objects and parts") }, - {L_CONTEXT("Del", "Keyboard Shortcut"), L("Delete objects, parts, modifiers")}, - {L_CONTEXT("Esc", "Keyboard Shortcut"), L("Deselect All")}, - {ctrl + "C", L("Copy to clipboard")}, - {ctrl + "V", L("Paste from clipboard")}, - {ctrl + "X", L("Cut")}, - {ctrl + "A", L("Select all objects")}, - {ctrl + "K", L("Clone Selected")}, - {ctrl + "Z", L("Undo")}, - {ctrl + "Y", L("Redo")}, - {L_CONTEXT("Space", "Keyboard Shortcut"), L("Select the object/part and press space to change the name")}, - {L("Mouse click"), L("Select the object/part and mouse click to change the name")}, - }; - m_full_shortcuts.push_back({ { _L("Objects List"), "" }, object_list_shortcuts }); + page(_L("Objects list"), _L("Available while the object list has focus."), ShortcutContext::ObjectList, { + fixed(Section::Selection, { esc }, L("Deselect All")), + fixed(Section::Objects, { "1-9" }, L("Set extruder number for the objects and parts")), + fixed(Section::Objects, { key(L_CONTEXT("Space", "Keyboard Shortcut")) }, L("Select the object/part and press space to change the name")), + fixed(Section::Objects, { _L("Mouse click") }, L("Select the object/part and mouse click to change the name")), + }); } - Shortcuts preview_shortcuts = { - { L_CONTEXT("Arrow Up", "Keyboard Shortcut"), L("Vertical slider - Move active thumb Up")}, - { L_CONTEXT("Arrow Down", "Keyboard Shortcut"), L("Vertical slider - Move active thumb Down")}, - { L_CONTEXT("Arrow Left", "Keyboard Shortcut"), L("Horizontal slider - Move active thumb Left")}, - { L_CONTEXT("Arrow Right", "Keyboard Shortcut"), L("Horizontal slider - Move active thumb Right")}, - { "L", L("On/Off one layer mode of the vertical slider")}, - { "C", L("On/Off G-code window")}, - { L_CONTEXT("Tab", "Keyboard Shortcut"), L("Switch between Prepare/Preview")}, - {shift + L("Any arrow"), L("Move slider 5x faster")}, - {shift + L("Mouse wheel"), L("Move slider 5x faster")}, - {ctrl + L("Any arrow"), L("Move slider 5x faster")}, - {ctrl + L("Mouse wheel"), L("Move slider 5x faster")}, - { L_CONTEXT("Home", "Keyboard Shortcut"), L("Horizontal slider - Move to start position")}, - { L_CONTEXT("End", "Keyboard Shortcut"), L("Horizontal slider - Move to last position")}, - }; - m_full_shortcuts.push_back({ { _L("Preview"), "" }, preview_shortcuts }); + page(_L("Preview"), _L("Available while the 3D view on the Preview tab has focus."), ShortcutContext::Preview, { + fixed(Section::Sliders, { shift_ctrl, any_key }, L("Move slider 5x faster")), + fixed(Section::Sliders, { shift_ctrl, wheel }, L("Scroll slider 5x faster")), + }); } -wxPanel* KBShortcutsDialog::create_page(wxWindow* parent, const ShortcutsItem& shortcuts, const wxFont& font, const wxFont& bold_font) +wxPanel* KBShortcutsDialog::create_page(wxWindow* parent, const Page& page) { wxPanel* main_page = new wxPanel(parent); wxBoxSizer* main_sizer = new wxBoxSizer(wxVERTICAL); - if (!shortcuts.first.second.empty()) { - main_sizer->AddSpacer(FromDIP(10)); - wxBoxSizer* info_sizer = new wxBoxSizer(wxHORIZONTAL); - info_sizer->AddStretchSpacer(); - info_sizer->Add(new wxStaticText(main_page, wxID_ANY, shortcuts.first.second), 0); - info_sizer->AddStretchSpacer(); - main_sizer->Add(info_sizer, 0, wxEXPAND); - main_sizer->AddSpacer(FromDIP(10)); - } - - int items_count = (int) shortcuts.second.size(); wxScrolledWindow *scrollable_panel = new wxScrolledWindow(main_page); wxGetApp().UpdateDarkUI(scrollable_panel); - scrollable_panel->SetScrollbars(20, 20, 50, 50); - scrollable_panel->SetInitialSize(wxSize(FromDIP(850), FromDIP(450))); + const wxColour page_colour = StateColor::darkModeColorFor(*wxWHITE); + scrollable_panel->SetBackgroundColour(page_colour); + scrollable_panel->SetScrollRate(0, 20); + const int page_width = FromDIP(PAGE_WIDTH); + scrollable_panel->SetInitialSize(wxSize(page_width, FromDIP(450))); - wxBoxSizer * scrollable_panel_sizer = new wxBoxSizer(wxVERTICAL); - wxFlexGridSizer *grid_sizer = new wxFlexGridSizer(items_count, 2, FromDIP(10), FromDIP(20)); + const int title_margin = FromDIP(TITLE_MARGIN); + const int row_margin = FromDIP(ROW_MARGIN); + const int gap = FromDIP(ROW_GAP); - for (int i = 0; i < items_count; ++i) { - const auto &[shortcut, description] = shortcuts.second[i]; - // Keyboard keys carry a "Keyboard Shortcut" context so translators keep them in English; - // mouse-input labels are ordinary phrases and use the plain lookup. - const bool is_mouse = shortcut.find("Mouse") != std::string::npos || shortcut.find("mouse") != std::string::npos; - auto key = new wxStaticText(scrollable_panel, wxID_ANY, is_mouse ? _(shortcut) : _L_CONTEXT(shortcut, "Keyboard Shortcut")); - key->SetForegroundColour(wxColour(50, 58, 61)); - key->SetFont(bold_font); - grid_sizer->Add(key, 0, wxALIGN_CENTRE_VERTICAL); + wxBoxSizer* scrollable_panel_sizer = new wxBoxSizer(wxVERTICAL); - auto desc = new wxStaticText(scrollable_panel, wxID_ANY, _(description)); - desc->SetFont(font); - desc->SetForegroundColour(wxColour(50, 58, 61)); - desc->Wrap(FromDIP(600)); - grid_sizer->Add(desc, 0, wxALIGN_CENTRE_VERTICAL); + const wxColour note_colour = StateColor::darkModeColorFor(wxColour("#F8F8F8")); + const wxColour note_text = StateColor::darkModeColorFor(wxColour("#6B6B6A")); + StaticBox* note = new StaticBox(scrollable_panel); + note->SetCornerRadius(FromDIP(4)); + note->SetBorderWidth(0); + note->SetBackgroundColor(note_colour); + note->SetBackgroundColour(note_colour); + auto note_icon = new wxStaticBitmap(note, wxID_ANY, ScalableBitmap(note, "help", 16).bmp()); + auto note_text_ctrl = new wxStaticText(note, wxID_ANY, page.caption); + note_text_ctrl->SetFont(Label::Body_13); + note_text_ctrl->SetForegroundColour(note_text); + note_text_ctrl->SetBackgroundColour(note_colour); + note_text_ctrl->Wrap(page_width - 2 * title_margin - FromDIP(10 + 16 + 8 + 10)); + wxBoxSizer* note_sizer = new wxBoxSizer(wxHORIZONTAL); + note_sizer->Add(note_icon, 0, wxALIGN_CENTRE_VERTICAL | wxLEFT, FromDIP(10)); + note_sizer->Add(note_text_ctrl, 1, wxALIGN_CENTRE_VERTICAL | wxALL, FromDIP(8)); + note->SetSizer(note_sizer); + scrollable_panel_sizer->Add(note, 0, wxEXPAND | wxLEFT | wxRIGHT | wxTOP, title_margin); + + auto key_parts = [](const Row& row) { + return std::visit(overloaded{ + [](Shortcut shortcut) { return to_wx(wxGetApp().shortcuts().binding(shortcut).display_parts()); }, + [](const FixedKey& fixed) { return fixed.keys; }, + [](const MouseAction& mouse) { return std::vector{ mouse.button }; }, + }, row.content); + }; + auto description = [](const Row& row) { + return std::visit(overloaded{ + [](Shortcut shortcut) { return _(shortcut_info(shortcut).name); }, + [](const FixedKey& fixed) { return _(fixed.description); }, + [](const MouseAction& mouse) { return _(mouse_action(mouse.preference)); }, + }, row.content); + }; + auto icon_button = [&](const char* icon, const wxString& tooltip) { + auto button = new ScalableButton(scrollable_panel, wxID_ANY, icon); + button->SetBackgroundColour(page_colour); + button->SetToolTip(tooltip); + return button; + }; + + std::optional section; + for (const Row& row : page.rows) { + if (section != row.section) { + auto heading = new StaticLine(scrollable_panel, false, _(section_name(row.section))); + heading->SetFont(Label::Head_14); + heading->SetForegroundColour(DESIGN_GRAY900_COLOR); + wxBoxSizer* heading_sizer = new wxBoxSizer(wxHORIZONTAL); + heading_sizer->AddSpacer(title_margin); + heading_sizer->Add(heading, 1, wxEXPAND | wxTOP | wxBOTTOM, FromDIP(6)); + heading_sizer->AddSpacer(title_margin); + scrollable_panel_sizer->Add(heading_sizer, 0, wxEXPAND | wxTOP, FromDIP(section.has_value() ? 10 : 6)); + section = row.section; + } + auto desc = new wxStaticText(scrollable_panel, wxID_ANY, description(row)); + desc->SetFont(Label::Body_14); + desc->SetForegroundColour(DESIGN_GRAY900_COLOR); + auto chord_label = [&](long style) { + auto label = new wxStaticText(scrollable_panel, wxID_ANY, "", wxDefaultPosition, wxDefaultSize, style); + label->SetFont(Label::Head_14); + label->SetForegroundColour(DESIGN_GRAY900_COLOR); + return label; + }; + wxStaticText* modifiers = chord_label(0); + wxStaticText* key = chord_label(wxALIGN_CENTRE_HORIZONTAL); // a single key is centred in its column + desc->Wrap(m_row_text_width - set_chord_labels(modifiers, key, key_parts(row))); + + wxBoxSizer* buttons = new wxBoxSizer(wxHORIZONTAL); + if (const MouseAction* mouse = std::get_if(&row.content)) { + auto settings = icon_button("settings", _L("Preferences")); + settings->Bind(wxEVT_BUTTON, [this, preference = mouse->preference](wxCommandEvent&) { open_mouse_preferences(preference); }); + buttons->Add(settings, 0, wxALIGN_CENTRE_VERTICAL); + m_preference_rows.push_back({ mouse->preference, desc }); + } else if (const Shortcut* editable = std::get_if(&row.content)) { + const Shortcut shortcut = *editable; + auto change = icon_button("edit", _L("Edit")); + change->Bind(wxEVT_BUTTON, [this, shortcut](wxCommandEvent&) { edit_shortcut(shortcut); }); + auto reset = icon_button("undo", _L("Reset")); + reset->Bind(wxEVT_BUTTON, [this, shortcut](wxCommandEvent&) { reset_shortcut(shortcut); }); + reset->Show(wxGetApp().shortcuts().is_customized(shortcut)); + buttons->Add(change, 0, wxALIGN_CENTRE_VERTICAL | wxRIGHT, FromDIP(6)); + buttons->Add(reset, 0, wxALIGN_CENTRE_VERTICAL | wxRESERVE_SPACE_EVEN_IF_HIDDEN); + m_editable_rows.push_back({ shortcut, desc, modifiers, key, reset }); + } else { + auto lock = new wxStaticBitmap(scrollable_panel, wxID_ANY, ScalableBitmap(scrollable_panel, "printer_status_lock", 16).bmp()); + lock->SetToolTip(_L("Not customizable")); + buttons->Add((m_edit_size.x - lock->GetBestSize().x) / 2, m_edit_size.y); // centred under the edit icons, at their height + buttons->Add(lock, 0, wxALIGN_CENTRE_VERTICAL); + } + if (const int used = buttons->GetMinSize().x; used < m_buttons_width) // a box sizer recomputes its own min size, so pad it + buttons->AddSpacer(m_buttons_width - used); + + wxBoxSizer* row_sizer = new wxBoxSizer(wxHORIZONTAL); + row_sizer->AddSpacer(row_margin); + row_sizer->Add(desc, 1, wxALIGN_CENTRE_VERTICAL); + row_sizer->AddSpacer(gap); + row_sizer->Add(modifiers, 0, wxALIGN_CENTRE_VERTICAL); + row_sizer->Add(key, 0, wxALIGN_CENTRE_VERTICAL); + row_sizer->Add(buttons, 0, wxALIGN_CENTRE_VERTICAL | wxLEFT, gap); + row_sizer->AddSpacer(title_margin); + scrollable_panel_sizer->Add(row_sizer, 0, wxEXPAND | wxTOP, FromDIP(4)); } - - scrollable_panel_sizer->Add(grid_sizer, 1, wxEXPAND | wxALL, FromDIP(20)); + scrollable_panel_sizer->AddSpacer(title_margin); scrollable_panel->SetSizer(scrollable_panel_sizer); main_sizer->Add(scrollable_panel, 1, wxEXPAND); @@ -367,5 +327,227 @@ wxPanel* KBShortcutsDialog::create_page(wxWindow* parent, const ShortcutsItem& s return main_page; } +void KBShortcutsDialog::edit_shortcut(Shortcut shortcut) +{ + ShortcutCaptureDialog dlg(this, shortcut); + if (dlg.ShowModal() != wxID_OK) + return; + const wxString question = wxString::Format(_L("%s is assigned to %s. Reassign it to %s?"), + join_keys(to_wx(dlg.chord().display_parts())), shortcut_names(dlg.conflicts()), _(shortcut_info(shortcut).name)); + if (!take_chord_from(shortcut, dlg.conflicts(), question)) + return; + wxGetApp().shortcuts().bind(shortcut, dlg.chord()); + apply_bindings(); +} + +void KBShortcutsDialog::reset_shortcut(Shortcut shortcut) +{ + const std::vector conflicts = wxGetApp().shortcuts().conflicts(shortcut, shortcut_info(shortcut).default_chord); + const wxString question = wxString::Format(_L("The default %s is assigned to %s. Reassign it to %s?"), + join_keys(to_wx(shortcut_info(shortcut).default_chord.display_parts())), shortcut_names(conflicts), _(shortcut_info(shortcut).name)); + if (!take_chord_from(shortcut, conflicts, question)) + return; + wxGetApp().shortcuts().reset(shortcut); + apply_bindings(); +} + +bool KBShortcutsDialog::take_chord_from(Shortcut shortcut, const std::vector& conflicts, const wxString& question) +{ + if (conflicts.empty()) + return true; + MessageDialog confirm(this, question, _(shortcut_info(shortcut).name), wxICON_QUESTION | wxOK | wxCANCEL); + if (confirm.ShowModal() != wxID_OK) + return false; + for (Shortcut other : conflicts) + wxGetApp().shortcuts().bind(other, KeyChord{}); + return true; +} + +void KBShortcutsDialog::apply_bindings() +{ + const ShortcutRegistry& shortcuts = wxGetApp().shortcuts(); + std::set pages; + for (const EditableRow& row : m_editable_rows) { + const int chord_width = set_chord_labels(row.modifiers, row.key, to_wx(shortcuts.binding(row.shortcut).display_parts())); + row.description->SetLabel(_(shortcut_info(row.shortcut).name)); + row.description->Wrap(m_row_text_width - chord_width); + row.reset->Show(shortcuts.is_customized(row.shortcut)); + pages.insert(row.key->GetParent()); + } + for (wxWindow* page : pages) + page->Layout(); + wxGetApp().on_shortcuts_changed(); +} + +int KBShortcutsDialog::set_chord_labels(wxStaticText* modifiers, wxStaticText* key, std::vector parts) +{ + const wxString last = parts.empty() ? wxString() : parts.back(); + if (!parts.empty()) + parts.pop_back(); + modifiers->SetLabel(parts.empty() ? wxString() : join_keys(parts) + " + "); + modifiers->Show(!parts.empty()); + key->SetLabel(last); + const int key_width = last.length() == 1 ? m_key_slot : key->GetBestSize().x; + key->SetMinSize(wxSize(key_width, -1)); + return (parts.empty() ? 0 : modifiers->GetBestSize().x) + key_width; +} + +void KBShortcutsDialog::open_mouse_preferences(const char* preference) +{ + // Opened from Preferences > Control, the settings are right behind this dialog. + if (auto preferences = dynamic_cast(GetParent()); preferences != nullptr) { + // Runs once this dialog has closed and the focus is back in Preferences. + preferences->CallAfter([preferences, preference] { preferences->select_tab(PreferencesTab::Control, preference); }); + EndModal(wxID_OK); + return; + } + wxGetApp().open_preferences(PreferencesTab::Control, preference); + // A language change rebuilds the main frame, taking this dialog with it. + if (GetParent() != wxGetApp().mainframe) { + EndModal(wxID_CANCEL); + return; + } + for (const PreferenceRow& row : m_preference_rows) + row.description->SetLabel(_(mouse_action(row.preference))); +} + +ShortcutCaptureDialog::ShortcutCaptureDialog(wxWindow* parent, Shortcut shortcut) + : DPIDialog(parent, wxID_ANY, _(shortcut_info(shortcut).name), wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE) + , m_shortcut(shortcut) +{ + SetBackgroundColour(*wxWHITE); + wxBoxSizer* sizer = new wxBoxSizer(wxVERTICAL); + + // A Global shortcut also runs while a text field has the focus, so its hint names the keys it can use. + const bool global = (shortcut_info(shortcut).contexts & context_bit(ShortcutContext::Global)) != 0; + const wxString advice = global_key_advice(); + const wxString typing = _L("Global shortcuts also apply while typing."); + const wxString rule = _L("A key that types a character cannot be a global shortcut."); + m_hint = global ? typing + "\n" + advice : _L("Esc cancels, Enter confirms."); + m_rejection = rule + "\n" + advice; + + // Wide enough for each sentence on a line of its own where the translation allows, within limits. + int width = FromDIP(450); + for (const wxString& sentence : { typing, rule, advice }) { + int extent = 0; + GetTextExtent(sentence, &extent, nullptr, nullptr, nullptr, &wxGetApp().normal_font()); + width = std::max(width, extent); + } + width = std::min(width, FromDIP(550)); + + auto prompt = new Label(this, wxGetApp().normal_font(), wxString::Format(_L("Press the new shortcut for\n\"%s\""), _(shortcut_info(shortcut).name)), LB_AUTO_WRAP); + prompt->SetMinSize(wxSize(width, -1)); + sizer->Add(prompt, 0, wxALL, FromDIP(20)); + + // Keyboard focus stays on this box so the buttons never receive the key presses. + const wxColour box_colour = StateColor::darkModeColorFor(*wxWHITE); + StaticBox* capture = new StaticBox(this, wxID_ANY, wxDefaultPosition, wxSize(width, FromDIP(60)), wxWANTS_CHARS); + capture->SetCornerRadius(FromDIP(4)); + capture->SetBorderColorNormal(StateColor::darkModeColorFor(wxColour("#009688"))); // the focused-input colour, since the box always has the focus + capture->SetBackgroundColorNormal(box_colour); + capture->SetBackgroundColour(box_colour); + wxBoxSizer* capture_sizer = new wxBoxSizer(wxVERTICAL); + m_chord_label = new wxStaticText(capture, wxID_ANY, join_keys(to_wx(wxGetApp().shortcuts().binding(shortcut).display_parts()))); + m_chord_label->SetFont(::Label::Head_14); + m_chord_label->SetBackgroundColour(box_colour); + capture_sizer->AddStretchSpacer(); + capture_sizer->Add(m_chord_label, 0, wxALIGN_CENTER); + capture_sizer->AddStretchSpacer(); + capture->SetSizer(capture_sizer); + capture->Bind(wxEVT_KEY_DOWN, &ShortcutCaptureDialog::on_key, this); + capture->Bind(wxEVT_CHAR, &ShortcutCaptureDialog::on_char, this); + capture->Bind(wxEVT_LEFT_DOWN, [capture](wxMouseEvent&) { capture->SetFocus(); }); + sizer->Add(capture, 0, wxLEFT | wxRIGHT | wxEXPAND, FromDIP(20)); + + m_status = new Label(this, wxGetApp().normal_font(), m_hint, LB_AUTO_WRAP); + m_status->SetMinSize(wxSize(width, 3 * m_status->GetCharHeight())); // room for three lines, so the dialog keeps its size while keys are tried + m_status_colour = m_status->GetForegroundColour(); + sizer->Add(m_status, 0, wxLEFT | wxRIGHT | wxTOP, FromDIP(20)); + + auto dlg_btns = new DialogButtons(this, {"Unbind", "OK", "Cancel"}, "", 1 /*left_aligned*/); + dlg_btns->GetFIRST()->Bind(wxEVT_BUTTON, [this](wxCommandEvent&) { + m_chord = KeyChord{}; + m_conflicts.clear(); + EndModal(wxID_OK); + }); + dlg_btns->GetCANCEL()->Bind(wxEVT_BUTTON, [this](wxCommandEvent&) { EndModal(wxID_CANCEL); }); + m_ok = dlg_btns->GetOK(); + m_ok->Bind(wxEVT_BUTTON, [this](wxCommandEvent&) { EndModal(wxID_OK); }); + m_ok->Enable(false); + sizer->Add(dlg_btns, 0, wxEXPAND | wxTOP, FromDIP(10)); + + SetSizerAndFit(sizer); + CenterOnParent(); + wxGetApp().UpdateDlgDarkUI(this); + capture->CallAfter([capture]() { capture->SetFocus(); }); +} + +void ShortcutCaptureDialog::on_dpi_changed(const wxRect& suggested_rect) +{ + Layout(); + Fit(); +} + +void ShortcutCaptureDialog::on_key(wxKeyEvent& evt) +{ + if (!evt.HasAnyModifiers()) { + if (evt.GetKeyCode() == WXK_ESCAPE) { + EndModal(wxID_CANCEL); + return; + } + if (evt.GetKeyCode() == WXK_RETURN || evt.GetKeyCode() == WXK_NUMPAD_ENTER) { + if (m_ok->IsEnabled()) + EndModal(wxID_OK); + return; + } + } + const KeyChord chord = KeyChord::from_event(evt); + if (!chord.valid()) + return; + if (chord.needs_char_event()) { + evt.Skip(); + return; + } + record(chord); +} + +void ShortcutCaptureDialog::on_char(wxKeyEvent& evt) +{ + const KeyChord chord = KeyChord::from_event(evt); + if (chord.is_punctuation()) + record(chord); +} + +void ShortcutCaptureDialog::record(const KeyChord& chord) +{ + m_chord = chord; + m_chord_label->SetLabel(join_keys(to_wx(chord.display_parts()))); + m_chord_label->GetParent()->Layout(); + + auto reject = [this](const wxString& reason) { + m_status->SetForegroundColour(ERROR_COLOUR); + m_status->SetLabel(reason); + m_conflicts.clear(); + m_ok->Enable(false); + }; + const bool global = (shortcut_info(m_shortcut).contexts & context_bit(ShortcutContext::Global)) != 0; + if (global && !chord.is_menu_accelerator()) { + reject(m_rejection); + } else if (const std::optional owner = wxGetApp().shortcuts().step_owner(m_shortcut, chord); owner.has_value()) { + reject(wxString::Format(_L("Already used as a step of %s."), _(shortcut_info(*owner).name))); + } else { + m_conflicts = wxGetApp().shortcuts().conflicts(m_shortcut, chord); + m_status->SetForegroundColour(m_status_colour); + if (m_conflicts.empty()) + m_status->SetLabel(m_hint); + else + m_status->SetLabel(wxString::Format(_L("Already assigned to %s. Press OK to reassign it."), shortcut_names(m_conflicts))); + m_ok->Enable(true); + } + m_status->Refresh(); // a colour change alone does not repaint + Layout(); + Fit(); +} + } // namespace GUI } // namespace Slic3r diff --git a/src/slic3r/GUI/KBShortcutsDialog.hpp b/src/slic3r/GUI/KBShortcutsDialog.hpp index 9d49cd35c5..3091726147 100644 --- a/src/slic3r/GUI/KBShortcutsDialog.hpp +++ b/src/slic3r/GUI/KBShortcutsDialog.hpp @@ -3,53 +3,120 @@ #include #include +#include #include #include "GUI_Utils.hpp" +#include "Shortcuts.hpp" #include "wxExtensions.hpp" #include +class Button; +class Label; +class TabCtrl; + namespace Slic3r { namespace GUI { -class Select -{ -public: - int m_index; - wxWindow *m_tab_button; - wxWindow *m_tab_text; -}; -WX_DECLARE_HASH_MAP(int, Select *, wxIntegerHash, wxIntegerEqual, SelectHash); - +// Lists every shortcut per context and lets the user rebind the assignable ones. class KBShortcutsDialog : public DPIDialog { - typedef std::pair Shortcut; - typedef std::vector Shortcuts; - typedef std::pair, Shortcuts> ShortcutsItem; - typedef std::vector ShortcutsVec; + // A key the user cannot rebind. + struct FixedKey + { + std::vector keys; // modifier names and the key, shown joined with "+" + const char* description; // untranslated + }; + // A mouse button whose camera action is chosen in Preferences. + struct MouseAction + { + wxString button; + const char* preference; // AppConfig key of the action + }; + struct Row + { + std::variant content; + ShortcutSection section; + }; + struct Page + { + wxString title; + wxString caption; // when the page's keys apply + ShortcutContext context; + std::vector rows; + }; + struct EditableRow + { + Shortcut shortcut; + wxStaticText* description; + wxStaticText* modifiers; + wxStaticText* key; + ScalableButton* reset; + }; + struct PreferenceRow + { + const char* preference; + wxStaticText* description; + }; - ShortcutsVec m_full_shortcuts; - ScalableBitmap m_logo_bmp; - wxStaticBitmap* m_header_bitmap; - std::vector m_pages; + std::vector m_pages; + std::vector m_editable_rows; + std::vector m_preference_rows; + // Row geometry, measured once and shared by every page. + wxSize m_edit_size; // an edit or reset icon + int m_buttons_width = 0; // every row's buttons column, so the right-aligned keys share an edge + int m_row_text_width = 0; // what a description and its chord share; the description wraps at the rest + int m_key_slot = 0; // width of the widest single key, the column single keys line up in + + TabCtrl* m_tabs; + wxSimplebook* m_simplebook; public: - KBShortcutsDialog(); - wxWindow* create_button(int id, wxString text); - void OnSelectTabel(wxCommandEvent &event); - wxPanel *m_panel_selects; - wxBoxSizer *m_sizer_right; - wxSimplebook *m_simplebook; - wxBoxSizer * m_sizer_body; - SelectHash m_hash_selector; + KBShortcutsDialog(wxWindow* parent, ShortcutContext page); // opens on the page of that context protected: void on_dpi_changed(const wxRect &suggested_rect) override; private: - void fill_shortcuts(); - wxPanel* create_header(wxWindow* parent, const wxFont& bold_font); - wxPanel* create_page(wxWindow* parent, const ShortcutsItem& shortcuts, const wxFont& font, const wxFont& bold_font); + void fill_pages(); + wxPanel* create_page(wxWindow* parent, const Page& page); + void edit_shortcut(Shortcut shortcut); + void reset_shortcut(Shortcut shortcut); + // Asks question before unbinding conflicts; false when the user declined. + bool take_chord_from(Shortcut shortcut, const std::vector& conflicts, const wxString& question); + void apply_bindings(); // refreshes the rows and pushes the change to the rest of the app + // Puts a chord on a row's two labels, a single key in the shared column, and returns the width the chord takes. + int set_chord_labels(wxStaticText* modifiers, wxStaticText* key, std::vector parts); + void open_mouse_preferences(const char* preference); +}; + +// Records one key chord for a shortcut, warning about the shortcuts it would take the chord from. +class ShortcutCaptureDialog : public DPIDialog +{ +public: + ShortcutCaptureDialog(wxWindow* parent, Shortcut shortcut); + + // Valid after ShowModal() returned wxID_OK; an invalid chord means "unbind". + const KeyChord& chord() const { return m_chord; } + const std::vector& conflicts() const { return m_conflicts; } + +protected: + void on_dpi_changed(const wxRect& suggested_rect) override; + +private: + void on_key(wxKeyEvent& evt); + void on_char(wxKeyEvent& evt); + void record(const KeyChord& chord); + + Shortcut m_shortcut; + KeyChord m_chord; + std::vector m_conflicts; + wxStaticText* m_chord_label; + wxString m_hint; // what m_status shows while there is nothing to warn about + wxString m_rejection; // what it shows for a key a Global shortcut cannot use + Label* m_status; + wxColour m_status_colour; + Button* m_ok; }; } // namespace GUI diff --git a/src/slic3r/GUI/KeyChord.cpp b/src/slic3r/GUI/KeyChord.cpp new file mode 100644 index 0000000000..cd746d2f92 --- /dev/null +++ b/src/slic3r/GUI/KeyChord.cpp @@ -0,0 +1,314 @@ +#include "KeyChord.hpp" + +#include "GUI.hpp" +#include "I18N.hpp" + +#include + +#include +#include +#include + +namespace Slic3r { namespace GUI { + +namespace { + +constexpr int BINDABLE_MODIFIERS = wxMOD_CONTROL | wxMOD_SHIFT | wxMOD_ALT | wxMOD_RAW_CONTROL; + +struct KeyName +{ + int key; + const char* name; // canonical name, as wx parses it + const char* alias; // accepted when parsing; nullptr when there is none + const char* label; // translation key for KeyChord::display(); nullptr when name is it +}; + +constexpr std::array special_keys{{ + { WXK_BACK, L_CONTEXT("Backspace", "Keyboard Shortcut"), "Back", nullptr }, + { WXK_TAB, L_CONTEXT("Tab", "Keyboard Shortcut"), nullptr, nullptr }, + { WXK_RETURN, L_CONTEXT("Enter", "Keyboard Shortcut"), "Return", nullptr }, + { WXK_ESCAPE, L_CONTEXT("Esc", "Keyboard Shortcut"), "Escape", nullptr }, + { WXK_SPACE, L_CONTEXT("Space", "Keyboard Shortcut"), nullptr, nullptr }, + { WXK_DELETE, L_CONTEXT("Del", "Keyboard Shortcut"), "Delete", nullptr }, + { WXK_INSERT, L_CONTEXT("Ins", "Keyboard Shortcut"), "Insert", nullptr }, + { WXK_HOME, L_CONTEXT("Home", "Keyboard Shortcut"), nullptr, nullptr }, + { WXK_END, L_CONTEXT("End", "Keyboard Shortcut"), nullptr, nullptr }, + { WXK_PAGEUP, L_CONTEXT("PgUp", "Keyboard Shortcut"), "PageUp", nullptr }, + { WXK_PAGEDOWN, L_CONTEXT("PgDn", "Keyboard Shortcut"), "PageDown", nullptr }, + // Displayed as "Arrow Left" and so on, which is what the catalogs translate. + { WXK_LEFT, "Left", nullptr, L_CONTEXT("Arrow Left", "Keyboard Shortcut") }, + { WXK_RIGHT, "Right", nullptr, L_CONTEXT("Arrow Right", "Keyboard Shortcut") }, + { WXK_UP, "Up", nullptr, L_CONTEXT("Arrow Up", "Keyboard Shortcut") }, + { WXK_DOWN, "Down", nullptr, L_CONTEXT("Arrow Down", "Keyboard Shortcut") }, +}}; + +bool equals_ignoring_case(const std::string& a, const char* b) +{ + if (b == nullptr) + return false; + size_t i = 0; + for (; i < a.size() && b[i] != '\0'; ++i) + if (std::tolower(static_cast(a[i])) != std::tolower(static_cast(b[i]))) + return false; + return i == a.size() && b[i] == '\0'; +} + +bool is_letter(int key) { return key >= 'A' && key <= 'Z'; } +bool is_digit(int key) { return key >= '0' && key <= '9'; } +bool is_printable(int key) { return key > ' ' && key < 127; } +bool is_symbol(int key) { return is_printable(key) && !std::isalnum(key); } +bool is_function_key(int key) { return key >= WXK_F1 && key <= WXK_F24; } + +bool is_special(int key) +{ + if (is_function_key(key)) + return true; + return std::any_of(special_keys.begin(), special_keys.end(), [key](const KeyName& k) { return k.key == key; }); +} + +std::string special_key_name(int key) +{ + if (is_function_key(key)) + return "F" + std::to_string(key - WXK_F1 + 1); + for (const KeyName& k : special_keys) + if (k.key == key) + return k.name; + return {}; +} + +std::string special_key_label(int key) +{ + for (const KeyName& k : special_keys) + if (k.key == key) + return _u8L_CONTEXT(k.label != nullptr ? k.label : k.name, "Keyboard Shortcut"); + return special_key_name(key); +} + +int parse_key(const std::string& text) +{ + if (text.size() == 1) { + const int key = static_cast(text[0]); + return is_printable(key) ? std::toupper(key) : WXK_NONE; + } + for (const KeyName& k : special_keys) + if (equals_ignoring_case(text, k.name) || equals_ignoring_case(text, k.alias)) + return k.key; + if ((text[0] == 'F' || text[0] == 'f') && text.size() <= 3 && std::all_of(text.begin() + 1, text.end(), [](char c) { return std::isdigit(static_cast(c)); })) { + const int n = std::stoi(text.substr(1)); + if (n >= 1 && n <= 24) + return WXK_F1 + n - 1; + } + return WXK_NONE; +} + +int parse_modifier(const std::string& text) +{ + if (equals_ignoring_case(text, "Ctrl") || equals_ignoring_case(text, "Control") || equals_ignoring_case(text, "Cmd") || equals_ignoring_case(text, "Command")) + return wxMOD_CONTROL; + if (equals_ignoring_case(text, "Shift")) + return wxMOD_SHIFT; + if (equals_ignoring_case(text, "Alt") || equals_ignoring_case(text, "Option")) + return wxMOD_ALT; + if (equals_ignoring_case(text, "RawCtrl")) + return wxMOD_RAW_CONTROL; + return wxMOD_NONE; +} + +// Numpad keys act as their main-keyboard counterparts, so one binding covers both. +int fold_numpad(int key) +{ + if (key >= WXK_NUMPAD0 && key <= WXK_NUMPAD9) + return '0' + (key - WXK_NUMPAD0); + switch (key) { + case WXK_NUMPAD_ENTER: return WXK_RETURN; + case WXK_NUMPAD_SPACE: return WXK_SPACE; + case WXK_NUMPAD_TAB: return WXK_TAB; + case WXK_NUMPAD_HOME: return WXK_HOME; + case WXK_NUMPAD_END: return WXK_END; + case WXK_NUMPAD_PAGEUP: return WXK_PAGEUP; + case WXK_NUMPAD_PAGEDOWN: return WXK_PAGEDOWN; + case WXK_NUMPAD_LEFT: return WXK_LEFT; + case WXK_NUMPAD_RIGHT: return WXK_RIGHT; + case WXK_NUMPAD_UP: return WXK_UP; + case WXK_NUMPAD_DOWN: return WXK_DOWN; + case WXK_NUMPAD_INSERT: return WXK_INSERT; + case WXK_NUMPAD_DELETE: return WXK_DELETE; + case WXK_NUMPAD_ADD: return '+'; + case WXK_NUMPAD_SUBTRACT: return '-'; + case WXK_NUMPAD_MULTIPLY: return '*'; + case WXK_NUMPAD_DIVIDE: return '/'; + case WXK_NUMPAD_DECIMAL: return '.'; + case WXK_NUMPAD_EQUAL: return '='; + default: return key; + } +} + +// Modifiers in the order the text forms list them; wxMOD_RAW_CONTROL is wxMOD_CONTROL off macOS. +#ifdef __APPLE__ +constexpr std::array MODIFIER_ORDER{ wxMOD_CONTROL, wxMOD_SHIFT, wxMOD_ALT, wxMOD_RAW_CONTROL }; +#else +constexpr std::array MODIFIER_ORDER{ wxMOD_CONTROL, wxMOD_SHIFT, wxMOD_ALT }; +#endif + +const char* canonical_modifier_prefix(int modifier) +{ + if (modifier == wxMOD_CONTROL) + return "Ctrl+"; + if (modifier == wxMOD_SHIFT) + return "Shift+"; + if (modifier == wxMOD_ALT) + return "Alt+"; + return "RawCtrl+"; +} + +template +std::string join_modifiers(int modifiers, Prefix prefix) +{ + std::string out; + for (int modifier : MODIFIER_ORDER) + if (modifiers & modifier) + out += prefix(modifier); + return out; +} + +} // namespace + +bool KeyChord::is_punctuation() const { return is_symbol(key) && modifiers == wxMOD_NONE; } + +bool KeyChord::needs_char_event() const { return is_symbol(key) && (modifiers & ~wxMOD_SHIFT) == 0; } + +bool KeyChord::is_menu_accelerator() const +{ + return valid() && ((modifiers & (wxMOD_CONTROL | wxMOD_ALT | wxMOD_RAW_CONTROL)) != 0 || (!is_printable(key) && key != WXK_SPACE)); +} + +std::string KeyChord::to_string() const +{ + if (!valid()) + return {}; + std::string out = join_modifiers(modifiers, canonical_modifier_prefix); + if (is_printable(key)) + out += char(key); + else + out += special_key_name(key); + return out; +} + +std::optional KeyChord::parse(const std::string& text) +{ + if (text.empty()) + return std::nullopt; + + // The key is whatever follows the last separator; a trailing '+' is the '+' key itself. + size_t key_start = text.size() - 1; + if (text.back() != '+') { + const size_t sep = text.rfind('+'); + key_start = sep == std::string::npos ? 0 : sep + 1; + } + KeyChord chord; + chord.key = parse_key(text.substr(key_start)); + if (chord.key == WXK_NONE) + return std::nullopt; + + const std::string prefix = key_start == 0 ? std::string() : text.substr(0, key_start - 1); + size_t begin = 0; + while (begin < prefix.size()) { + size_t end = prefix.find('+', begin); + if (end == std::string::npos) + end = prefix.size(); + const int modifier = parse_modifier(prefix.substr(begin, end - begin)); + if (modifier == wxMOD_NONE) + return std::nullopt; + chord.modifiers |= modifier; + begin = end + 1; + } + if (is_letter(chord.key) || is_digit(chord.key) || !is_printable(chord.key) || chord.modifiers == wxMOD_NONE) + return chord; + // Shift is folded into the character for punctuation, so "Shift+/" is not accepted. + return (chord.modifiers & wxMOD_SHIFT) ? std::nullopt : std::optional(chord); +} + +std::string KeyChord::display() const +{ + std::string out; + for (const std::string& part : display_parts()) + out += (out.empty() ? "" : "+") + part; + return out; +} + +std::vector KeyChord::display_parts() const +{ + std::vector parts; + if (!valid()) + return parts; + for (int modifier : MODIFIER_ORDER) + if (modifiers & modifier) + parts.push_back(modifier_name(modifier)); + parts.push_back(is_printable(key) ? std::string(1, char(key)) : special_key_label(key)); + return parts; +} + +std::string KeyChord::modifier_prefix(int modifier) +{ + if (modifier == wxMOD_CONTROL) + return shortkey_ctrl_prefix(); + if (modifier == wxMOD_SHIFT) + return _u8L("Shift+"); + if (modifier == wxMOD_ALT) + return shortkey_alt_prefix(); +#ifdef __APPLE__ + if (modifier == wxMOD_RAW_CONTROL) + return u8"⌃+"; +#endif + return {}; +} + +// The catalogue holds the "Ctrl+" prefixes, so the bare name is the prefix without its "+" +// and any space before it ("Strg +" in German). +std::string KeyChord::modifier_name(int modifier) +{ + std::string name = modifier_prefix(modifier); + if (!name.empty() && name.back() == '+') + name.pop_back(); + while (!name.empty() && name.back() == ' ') + name.pop_back(); + return name; +} + +wxAcceleratorEntry KeyChord::to_accelerator_entry(int command) const +{ + int flags = wxACCEL_NORMAL; + if (modifiers & wxMOD_CONTROL) + flags |= wxACCEL_CTRL; + if (modifiers & wxMOD_SHIFT) + flags |= wxACCEL_SHIFT; + if (modifiers & wxMOD_ALT) + flags |= wxACCEL_ALT; +#ifdef __APPLE__ + if (modifiers & wxMOD_RAW_CONTROL) + flags |= wxACCEL_RAW_CTRL; +#endif + return wxAcceleratorEntry(flags, key, command); +} + +KeyChord KeyChord::from_event(const wxKeyEvent& evt) +{ + KeyChord chord; + chord.modifiers = evt.GetModifiers() & BINDABLE_MODIFIERS; + int key = fold_numpad(evt.GetKeyCode()); + + if (evt.GetEventType() == wxEVT_CHAR) { + if (key >= 1 && key <= 26 && evt.ControlDown()) + key = 'A' + key - 1; // Ctrl+letter arrives as the control character + else if (is_symbol(key)) + chord.modifiers &= ~wxMOD_SHIFT; // the character already reflects Shift + } + if (key >= 'a' && key <= 'z') + key -= 'a' - 'A'; + + if (is_printable(key) || is_special(key)) + chord.key = key; + return chord; +} + +}} // namespace Slic3r::GUI diff --git a/src/slic3r/GUI/KeyChord.hpp b/src/slic3r/GUI/KeyChord.hpp new file mode 100644 index 0000000000..c7884409eb --- /dev/null +++ b/src/slic3r/GUI/KeyChord.hpp @@ -0,0 +1,64 @@ +#pragma once + +#include +#include + +#include +#include +#include +#include + +class wxKeyEvent; + +namespace Slic3r { namespace GUI { + +// One key press: a key code as wxEVT_KEY_DOWN reports it (letters upper-case, numpad keys +// folded onto their main-keyboard equivalents) plus the wxMOD_* modifiers held with it. +// Printable punctuation is stored as the character it produces, so "+" means the key that +// types "+" on the user's layout. +struct KeyChord +{ + int key = WXK_NONE; + int modifiers = wxMOD_NONE; + + bool valid() const { return key != WXK_NONE; } + bool operator==(const KeyChord& other) const { return key == other.key && modifiers == other.modifiers; } + bool operator!=(const KeyChord& other) const { return !(*this == other); } + + // Bare printable keys other than letters and digits are matched on wxEVT_CHAR, because + // only the char event knows which character a key produces under the active layout. + bool is_punctuation() const; + // True for a printable non-alphanumeric key pressed with nothing but Shift, which only the + // char event that follows can resolve. + bool needs_char_event() const; + // True when Ctrl or Alt is held or the key is non-printable, the chords a menu can own without + // swallowing typing in text fields. + bool is_menu_accelerator() const; + + // Platform-neutral text ("Ctrl+Shift+S") for persistence and wx accelerator strings. + std::string to_string() const; + static std::optional parse(const std::string& text); + + // Text for menus, tooltips and the shortcuts dialog, with translated modifier names and the + // command and option glyphs on macOS. + std::string display() const; + // The pieces display() joins with "+": the modifier names, then the key name. + std::vector display_parts() const; + // Translated text of one wxMOD_* modifier, as a "Ctrl+" prefix or the bare "Ctrl" name. + static std::string modifier_prefix(int modifier); + static std::string modifier_name(int modifier); + + wxAcceleratorEntry to_accelerator_entry(int command) const; + + // Builds the chord a key event describes, or an invalid chord for pure modifier presses and + // keys outside the bindable set. wxEVT_CHAR events are normalized to the key codes + // wxEVT_KEY_DOWN reports for letters, digits and special keys. + static KeyChord from_event(const wxKeyEvent& evt); +}; + +struct KeyChordHash +{ + size_t operator()(const KeyChord& chord) const { return std::hash()((static_cast(chord.modifiers) << 32) | unsigned(chord.key)); } +}; + +}} // namespace Slic3r::GUI diff --git a/src/slic3r/GUI/MainFrame.cpp b/src/slic3r/GUI/MainFrame.cpp index 288a666901..38ef3141d6 100644 --- a/src/slic3r/GUI/MainFrame.cpp +++ b/src/slic3r/GUI/MainFrame.cpp @@ -56,6 +56,7 @@ #include "../Utils/PrintHost.hpp" #include "GUI_App.hpp" +#include "Shortcuts.hpp" #include "UnsavedChangesDialog.hpp" #include "PublishSettingsDialog.hpp" #include "MsgDialog.hpp" @@ -310,17 +311,6 @@ static wxIcon main_frame_icon(GUI_App::EAppMode app_mode) wxDEFINE_EVENT(EVT_SYNC_CLOUD_PRESET, SimpleEvent); -#ifdef __APPLE__ -static const wxString ctrl = ("Ctrl+"); -// FIXME: maybe should be using GUI::shortkey_ctrl_prefix() or equivalent? -static const std::string ctrl_t = u8"\u2318+"; // "⌘" (Mac Command) -#else -static const wxString ctrl = _L("Ctrl+"); -// FIXME: maybe should be using GUI::shortkey_ctrl_prefix() or equivalent? -static const wxString ctrl_t = ctrl; -#endif -static const wxString shift = _L("Shift+"); - MainFrame::MainFrame() : DPIFrame(NULL, wxID_ANY, "", wxDefaultPosition, wxDefaultSize, BORDERLESS_FRAME_STYLE, "mainframe") , m_printhost_queue_dlg(new PrintHostQueueDialog(this)) @@ -730,69 +720,8 @@ DPIFrame(NULL, wxID_ANY, "", wxDefaultPosition, wxDefaultSize, BORDERLESS_FRAME_ } return;} #endif - // Orca: open the speed dial from any page with a bare Space. Only when no modifier is held (so - // editing shortcuts like Ctrl+Shift+Space in the canvas still reach it) and the focused window - // doesn't use Space to activate itself (buttons, checkboxes, list/choice controls, text fields), - // so a bare Space there still clicks/toggles instead of being hijacked. Gated by a preference - // (default on) so users can hand Space back to the focused control entirely. - if (wxGetApp().app_config->get_bool("enable_speed_dial") && !evt.CmdDown() && !evt.ShiftDown() && - !evt.AltDown() && evt.GetKeyCode() == WXK_SPACE) { - if (focus_keeps_space(wxWindow::FindFocus())) { - evt.Skip(); // let the focused control keep Space - return; - } - // Defer out of the native key-event stack: open_speed_dial() may create a WebView and - // run script, the same window work the codebase avoids doing on native callbacks. - this->CallAfter([] { wxGetApp().open_speed_dial(); }); - return; - } - if (evt.CmdDown() && evt.GetKeyCode() == 'R') { if (m_slice_enable) { wxGetApp().plater()->update(true, true); wxPostEvent(m_plater, SimpleEvent(EVT_GLTOOLBAR_SLICE_PLATE)); this->m_tabpanel->SelectPageByName(TAB_ID_PREVIEW); } return; } - if (evt.CmdDown() && evt.ShiftDown() && evt.GetKeyCode() == 'G') { - m_plater->apply_background_progress(); - m_print_enable = get_enable_print_status(); - m_print_btn->Enable(m_print_enable); - if (m_print_enable) { - if (wxGetApp().preset_bundle->use_bbl_network() || wxGetApp().app_config->get_bool("use_printer_agents")) - wxPostEvent(m_plater, SimpleEvent(EVT_GLTOOLBAR_PRINT_PLATE)); - else - wxPostEvent(m_plater, SimpleEvent(EVT_GLTOOLBAR_SEND_GCODE)); - } + if (!handle_global_shortcut(KeyChord::from_event(evt))) evt.Skip(); - return; - } - else if (evt.CmdDown() && evt.GetKeyCode() == 'G') { if (can_export_gcode()) { wxPostEvent(m_plater, SimpleEvent(EVT_GLTOOLBAR_EXPORT_SLICED_FILE)); } evt.Skip(); return; } - if (evt.CmdDown() && evt.GetKeyCode() == 'J') { m_printhost_queue_dlg->Show(); return; } - if (evt.CmdDown() && evt.GetKeyCode() == 'N') { m_plater->new_project(); return;} - if (evt.CmdDown() && evt.GetKeyCode() == 'O') { m_plater->load_project(); return;} - if (evt.CmdDown() && evt.ShiftDown() && evt.GetKeyCode() == 'S') { if (can_save_as()) m_plater->save_project(true); return;} - else if (evt.CmdDown() && evt.GetKeyCode() == 'S') { if (can_save()) m_plater->save_project(); return;} - if (evt.CmdDown() && evt.GetKeyCode() == 'F') { - if (m_plater && is_prepare_or_preview_tab()) { - m_plater->sidebar().can_search(); - } - } -#ifdef __APPLE__ - if (evt.CmdDown() && evt.GetKeyCode() == ',') -#else - if (evt.CmdDown() && evt.GetKeyCode() == 'P') -#endif - { - // Orca: Use GUI_App::open_preferences instead of direct call so windows associations are updated on exit - wxGetApp().open_preferences(); - plater()->get_current_canvas3D()->force_set_focus(); - return; - } - - if (evt.CmdDown() && evt.GetKeyCode() == 'I' && !evt.ShiftDown()) { - if (!can_add_models()) return; - if (m_plater) { m_plater->add_file(); } - return; - } - if (evt.CmdDown() && evt.ShiftDown() && evt.GetKeyCode() == 'E') { - if (can_export_model()) publish_project(); - return; - } - evt.Skip(); }); Bind(wxEVT_SHOW, [](wxShowEvent &evt) { @@ -813,6 +742,96 @@ DPIFrame(NULL, wxID_ANY, "", wxDefaultPosition, wxDefaultSize, BORDERLESS_FRAME_ bind_diff_dialog(); } +bool MainFrame::handle_global_shortcut(const KeyChord& chord) +{ + const std::optional shortcut = wxGetApp().shortcuts().lookup(ShortcutContext::Global, chord); + if (!shortcut.has_value()) + return false; + + switch (*shortcut) { + case Shortcut::SlicePlate: + if (m_slice_enable) { + wxGetApp().plater()->update(true, true); + wxPostEvent(m_plater, SimpleEvent(EVT_GLTOOLBAR_SLICE_PLATE)); + m_tabpanel->SelectPageByName(TAB_ID_PREVIEW); + } + break; + case Shortcut::PrintPlate: + m_plater->apply_background_progress(); + m_print_enable = get_enable_print_status(); + m_print_btn->Enable(m_print_enable); + if (m_print_enable) { + if (wxGetApp().preset_bundle->use_bbl_network() || wxGetApp().app_config->get_bool("use_printer_agents")) + wxPostEvent(m_plater, SimpleEvent(EVT_GLTOOLBAR_PRINT_PLATE)); + else + wxPostEvent(m_plater, SimpleEvent(EVT_GLTOOLBAR_SEND_GCODE)); + } + return false; + case Shortcut::ExportSlicedFile: + if (can_export_gcode()) + wxPostEvent(m_plater, SimpleEvent(EVT_GLTOOLBAR_EXPORT_SLICED_FILE)); + return false; + case Shortcut::PrintHostQueue: m_printhost_queue_dlg->Show(); break; + case Shortcut::SpeedDial: + if (!wxGetApp().app_config->get_bool("enable_speed_dial") || (chord == KeyChord{ WXK_SPACE } && focus_keeps_space(wxWindow::FindFocus()))) + return false; + // Deferred out of the native key-event stack: open_speed_dial() may create a WebView and run script. + CallAfter([] { wxGetApp().open_speed_dial(); }); + break; + case Shortcut::NewProject: m_plater->new_project(); break; + case Shortcut::OpenProject: m_plater->load_project(); break; + case Shortcut::SaveProjectAs: + if (can_save_as()) + m_plater->save_project(true); + break; + case Shortcut::SaveProject: + if (can_save()) + m_plater->save_project(); + break; + case Shortcut::Search: + if (m_plater && is_prepare_or_preview_tab()) + m_plater->sidebar().can_search(); + return false; + case Shortcut::Preferences: + // Orca: Use GUI_App::open_preferences instead of direct call so windows associations are updated on exit + wxGetApp().open_preferences(); + plater()->get_current_canvas3D()->force_set_focus(); + break; + case Shortcut::ImportModel: + if (can_add_models() && m_plater) + m_plater->add_file(); + break; + case Shortcut::Publish3mf: + if (can_export_model()) + publish_project(); + break; + case Shortcut::ShowLabels: + if (m_plater && m_plater->is_view3D_shown()) { + m_plater->show_view3D_labels(!m_plater->are_view3D_labels_shown()); + m_plater->get_current_canvas3D()->post_event(SimpleEvent(wxEVT_PAINT)); + } + break; + case Shortcut::ViewDefault: + if (m_plater) { + select_view("plate"); + m_plater->get_current_canvas3D()->zoom_to_bed(); + } + break; + case Shortcut::ViewTop: select_view("top"); break; + case Shortcut::ViewBottom: select_view("bottom"); break; + case Shortcut::ViewFront: select_view("front"); break; + case Shortcut::ViewRear: select_view("rear"); break; + case Shortcut::ViewLeft: select_view("left"); break; + case Shortcut::ViewRight: select_view("right"); break; + case Shortcut::ViewPlate: + if (m_plater) + m_plater->get_current_canvas3D()->select_plate(); + break; + default: return false; + } + return true; +} + void MainFrame::bind_diff_dialog() { auto get_tab = [](Preset::Type type) { @@ -2766,13 +2785,31 @@ static const wxString sep = " - "; static const wxString sep = "\t"; #endif -static wxMenu* generate_help_menu() +wxString MainFrame::shortcut_label(const wxString& label, Shortcut shortcut, bool accelerator) +{ + const ShortcutRegistry& shortcuts = wxGetApp().shortcuts(); + if (accelerator) { + const std::string accel = shortcuts.accelerator(shortcut); + if (!accel.empty()) + return label + " " + from_u8(accel); + } + const std::string text = shortcuts.display(shortcut); + return text.empty() ? label : label + sep + from_u8(text); +} + +void MainFrame::update_shortcut_labels() +{ + for (const ShortcutMenuItem& entry : m_shortcut_menu_items) + entry.item->SetItemLabel(shortcut_label(entry.label, entry.shortcut, entry.accelerator)); +} + +wxMenu* MainFrame::generate_help_menu() { wxMenu* helpMenu = new wxMenu(); // shortcut key - append_menu_item(helpMenu, wxID_ANY, _L("Keyboard Shortcuts") + sep + "&?", _L("Show the list of keyboard shortcuts"), - [](wxCommandEvent&) { wxGetApp().keyboard_shortcuts(); }); + append_shortcut_item(helpMenu, Shortcut::KeyboardShortcuts, false, _L("Keyboard Shortcuts"), _L("Show the list of keyboard shortcuts"), + [](wxCommandEvent&) { wxGetApp().keyboard_shortcuts(ShortcutContext::Global); }); // Show Beginner's Tutorial append_menu_item(helpMenu, wxID_ANY, _L("Setup Wizard"), _L("Setup Wizard"), [](wxCommandEvent &) {wxGetApp().ShowUserGuide();}); @@ -2854,29 +2891,28 @@ static void add_common_publish_menu_items(wxMenu* publish_menu, MainFrame* mainF #endif } -static void add_common_view_menu_items(wxMenu* view_menu, MainFrame* mainFrame, std::function can_change_view) +void MainFrame::add_common_view_menu_items(wxMenu* view_menu, std::function can_change_view) { - // The camera control accelerators are captured by GLCanvas3D::on_char(). - append_menu_item(view_menu, wxID_ANY, _L("Default View") + "\t" + ctrl + "0", _L("Default View"), [mainFrame](wxCommandEvent&) { - mainFrame->select_view("plate"); - mainFrame->plater()->get_current_canvas3D()->zoom_to_bed(); + append_shortcut_item(view_menu, Shortcut::ViewDefault, true, _L("Default View"), _L("Default View"), [this](wxCommandEvent&) { + select_view("plate"); + plater()->get_current_canvas3D()->zoom_to_bed(); }, - "", nullptr, [can_change_view]() { return can_change_view(); }, mainFrame); + "", nullptr, [can_change_view]() { return can_change_view(); }, this); //view_menu->AppendSeparator(); //TRN To be shown in the main menu View->Top - append_menu_item(view_menu, wxID_ANY, _L_CONTEXT("Top", "Camera View") + "\t" + ctrl + "1", _L("Top View"), [mainFrame](wxCommandEvent&) { mainFrame->select_view("top"); }, - "", nullptr, [can_change_view]() { return can_change_view(); }, mainFrame); + append_shortcut_item(view_menu, Shortcut::ViewTop, true, _L_CONTEXT("Top", "Camera View"), _L("Top View"), [this](wxCommandEvent&) { select_view("top"); }, + "", nullptr, [can_change_view]() { return can_change_view(); }, this); //TRN To be shown in the main menu View->Bottom - append_menu_item(view_menu, wxID_ANY, _L_CONTEXT("Bottom", "Camera View") + "\t" + ctrl + "2", _L("Bottom View"), [mainFrame](wxCommandEvent&) { mainFrame->select_view("bottom"); }, - "", nullptr, [can_change_view]() { return can_change_view(); }, mainFrame); - append_menu_item(view_menu, wxID_ANY, _L_CONTEXT("Front", "Camera View") + "\t" + ctrl + "3", _L("Front View"), [mainFrame](wxCommandEvent&) { mainFrame->select_view("front"); }, - "", nullptr, [can_change_view]() { return can_change_view(); }, mainFrame); - append_menu_item(view_menu, wxID_ANY, _L_CONTEXT("Rear", "Camera View") + "\t" + ctrl + "4", _L("Rear View"), [mainFrame](wxCommandEvent&) { mainFrame->select_view("rear"); }, - "", nullptr, [can_change_view]() { return can_change_view(); }, mainFrame); - append_menu_item(view_menu, wxID_ANY, _L_CONTEXT("Left", "Camera View") + "\t" + ctrl + "5", _L("Left View"),[mainFrame](wxCommandEvent &) {mainFrame->select_view("left"); }, - "", nullptr, [can_change_view]() { return can_change_view(); }, mainFrame); - append_menu_item(view_menu, wxID_ANY, _L_CONTEXT("Right", "Camera View") + "\t" + ctrl + "6", _L("Right View"),[mainFrame](wxCommandEvent &) { mainFrame->select_view("right"); }, - "", nullptr, [can_change_view]() { return can_change_view(); }, mainFrame); + append_shortcut_item(view_menu, Shortcut::ViewBottom, true, _L_CONTEXT("Bottom", "Camera View"), _L("Bottom View"), [this](wxCommandEvent&) { select_view("bottom"); }, + "", nullptr, [can_change_view]() { return can_change_view(); }, this); + append_shortcut_item(view_menu, Shortcut::ViewFront, true, _L_CONTEXT("Front", "Camera View"), _L("Front View"), [this](wxCommandEvent&) { select_view("front"); }, + "", nullptr, [can_change_view]() { return can_change_view(); }, this); + append_shortcut_item(view_menu, Shortcut::ViewRear, true, _L_CONTEXT("Rear", "Camera View"), _L("Rear View"), [this](wxCommandEvent&) { select_view("rear"); }, + "", nullptr, [can_change_view]() { return can_change_view(); }, this); + append_shortcut_item(view_menu, Shortcut::ViewLeft, true, _L_CONTEXT("Left", "Camera View"), _L("Left View"), [this](wxCommandEvent &) { select_view("left"); }, + "", nullptr, [can_change_view]() { return can_change_view(); }, this); + append_shortcut_item(view_menu, Shortcut::ViewRight, true, _L_CONTEXT("Right", "Camera View"), _L("Right View"), [this](wxCommandEvent &) { select_view("right"); }, + "", nullptr, [can_change_view]() { return can_change_view(); }, this); } void MainFrame::init_menubar_as_editor() @@ -2895,17 +2931,17 @@ void MainFrame::init_menubar_as_editor() [this] { return m_plater != nullptr && wxGetApp().app_config->get("app", "single_instance") == "false"; }, this); #endif // New Project - append_menu_item(fileMenu, wxID_ANY, _L("New Project") + "\t" + ctrl + "N", _L("Start a new project"), + append_shortcut_item(fileMenu, Shortcut::NewProject, true, _L("New Project"), _L("Start a new project"), [this](wxCommandEvent&) { if (m_plater) m_plater->new_project(); }, "", nullptr, [this](){return can_start_new_project(); }, this); // Open Project #ifndef __APPLE__ - append_menu_item(fileMenu, wxID_ANY, _L("Open Project") + dots + "\t" + ctrl + "O", _L("Open a project file"), + append_shortcut_item(fileMenu, Shortcut::OpenProject, true, _L("Open Project") + dots, _L("Open a project file"), [this](wxCommandEvent&) { if (m_plater) m_plater->load_project(); }, "menu_open", nullptr, [this](){return can_open_project(); }, this); #else - append_menu_item(fileMenu, wxID_ANY, _L("Open Project") + dots + "\t" + ctrl + "O", _L("Open a project file"), + append_shortcut_item(fileMenu, Shortcut::OpenProject, true, _L("Open Project") + dots, _L("Open a project file"), [this](wxCommandEvent&) { if (m_plater) m_plater->load_project(); }, "", nullptr, [this](){return can_open_project(); }, this); #endif @@ -2932,21 +2968,21 @@ void MainFrame::init_menubar_as_editor() // BBS: close save project #ifndef __APPLE__ - append_menu_item(fileMenu, wxID_ANY, _L("Save Project") + "\t" + ctrl + "S", _L("Save current project to file"), + append_shortcut_item(fileMenu, Shortcut::SaveProject, true, _L("Save Project"), _L("Save current project to file"), [this](wxCommandEvent&) { if (m_plater) m_plater->save_project(); }, "menu_save", nullptr, [this](){return m_plater != nullptr && can_save(); }, this); #else - append_menu_item(fileMenu, wxID_ANY, _L("Save Project") + "\t" + ctrl + "S", _L("Save current project to file"), + append_shortcut_item(fileMenu, Shortcut::SaveProject, true, _L("Save Project"), _L("Save current project to file"), [this](wxCommandEvent&) { if (m_plater) m_plater->save_project(); }, "", nullptr, [this](){return m_plater != nullptr && can_save(); }, this); #endif #ifndef __APPLE__ - append_menu_item(fileMenu, wxID_ANY, _L("Save Project as") + dots + "\t" + ctrl + shift + "S", _L("Save current project as"), + append_shortcut_item(fileMenu, Shortcut::SaveProjectAs, true, _L("Save Project as") + dots, _L("Save current project as"), [this](wxCommandEvent&) { if (m_plater) m_plater->save_project(true); }, "menu_save", nullptr, [this](){return m_plater != nullptr && can_save_as(); }, this); #else - append_menu_item(fileMenu, wxID_ANY, _L("Save Project as") + dots + "\t" + ctrl + shift + "S", _L("Save current project as"), + append_shortcut_item(fileMenu, Shortcut::SaveProjectAs, true, _L("Save Project as") + dots, _L("Save current project as"), [this](wxCommandEvent&) { if (m_plater) m_plater->save_project(true); }, "", nullptr, [this](){return m_plater != nullptr && can_save_as(); }, this); #endif @@ -2956,11 +2992,11 @@ void MainFrame::init_menubar_as_editor() auto publish_handler = [this](wxCommandEvent&) { publish_project(); }; #ifndef __APPLE__ - append_menu_item(fileMenu, wxID_ANY, _L("Publish 3MF") + dots + "\t" + ctrl + shift + "E", _L("Export a 3MF file with the selected settings embedded"), + append_shortcut_item(fileMenu, Shortcut::Publish3mf, true, _L("Publish 3MF") + dots, _L("Export a 3MF file with the selected settings embedded"), publish_handler, "menu_publish", nullptr, [this](){return can_export_model(); }, this); #else - append_menu_item(fileMenu, wxID_ANY, _L("Publish 3MF") + dots + "\t" + ctrl + shift + "E", _L("Export a 3MF file with the selected settings embedded"), + append_shortcut_item(fileMenu, Shortcut::Publish3mf, true, _L("Publish 3MF") + dots, _L("Export a 3MF file with the selected settings embedded"), publish_handler, "", nullptr, [this](){return can_export_model(); }, this); #endif @@ -2971,13 +3007,13 @@ void MainFrame::init_menubar_as_editor() // BBS wxMenu *import_menu = new wxMenu(); #ifndef __APPLE__ - append_menu_item(import_menu, wxID_ANY, _L("Import 3MF/STL/STEP/SVG/OBJ/AMF") + dots + "\t" + ctrl + "I", _L("Load a model"), + append_shortcut_item(import_menu, Shortcut::ImportModel, true, _L("Import 3MF/STL/STEP/SVG/OBJ/AMF") + dots, _L("Load a model"), [this](wxCommandEvent&) { if (m_plater) { m_plater->add_file(); } }, "menu_import", nullptr, [this](){return can_add_models(); }, this); #else - append_menu_item(import_menu, wxID_ANY, _L("Import 3MF/STL/STEP/SVG/OBJ/AMF") + dots + "\t" + ctrl + "I", _L("Load a model"), + append_shortcut_item(import_menu, Shortcut::ImportModel, true, _L("Import 3MF/STL/STEP/SVG/OBJ/AMF") + dots, _L("Load a model"), [this](wxCommandEvent&) { if (m_plater) { m_plater->add_model(); } }, "", nullptr, [this](){return can_add_models(); }, this); #endif @@ -3009,7 +3045,7 @@ void MainFrame::init_menubar_as_editor() [this](wxCommandEvent&) { if (m_plater) m_plater->export_core_3mf(); }, "menu_export_sliced_file", nullptr, [this](){return can_export_model(); }, this); // BBS export .gcode.3mf - append_menu_item(export_menu, wxID_ANY, _L("Export plate sliced file") + dots + "\t" + ctrl + "G", _L("Export current sliced file"), + append_shortcut_item(export_menu, Shortcut::ExportSlicedFile, true, _L("Export plate sliced file") + dots, _L("Export current sliced file"), [this](wxCommandEvent&) { if (m_plater) wxPostEvent(m_plater, SimpleEvent(EVT_GLTOOLBAR_EXPORT_SLICED_FILE)); }, "menu_export_sliced_file", nullptr, [this](){return can_export_gcode(); }, this); @@ -3059,37 +3095,37 @@ void MainFrame::init_menubar_as_editor() }; #ifndef __APPLE__ // BBS undo - append_menu_item(editMenu, wxID_ANY, _L("Undo") + "\t" + ctrl + "Z", + append_shortcut_item(editMenu, Shortcut::Undo, true, _L("Undo"), _L("Undo"), [this](wxCommandEvent&) { m_plater->undo(); }, "menu_undo", nullptr, [this](){return m_plater->can_undo(); }, this); // BBS redo - append_menu_item(editMenu, wxID_ANY, _L("Redo") + "\t" + ctrl + "Y", + append_shortcut_item(editMenu, Shortcut::Redo, true, _L("Redo"), _L("Redo"), [this](wxCommandEvent&) { m_plater->redo(); }, "menu_redo", nullptr, [this](){return m_plater->can_redo(); }, this); editMenu->AppendSeparator(); // BBS Cut TODO - append_menu_item(editMenu, wxID_ANY, _L("Cut") + "\t" + ctrl + "X", + append_shortcut_item(editMenu, Shortcut::Cut, true, _L("Cut"), _L("Cut selection to clipboard"), [this](wxCommandEvent&) {m_plater->cut_selection_to_clipboard(); }, "menu_cut", nullptr, [this]() {return m_plater->can_copy_to_clipboard(); }, this); // BBS Copy - append_menu_item(editMenu, wxID_ANY, _L("Copy") + "\t" + ctrl + "C", + append_shortcut_item(editMenu, Shortcut::Copy, true, _L("Copy"), _L("Copy selection to clipboard"), [this](wxCommandEvent&) { m_plater->copy_selection_to_clipboard(); }, "menu_copy", nullptr, [this](){return m_plater->can_copy_to_clipboard(); }, this); // BBS Paste - append_menu_item(editMenu, wxID_ANY, _L("Paste") + "\t" + ctrl + "V", + append_shortcut_item(editMenu, Shortcut::Paste, true, _L("Paste"), _L("Paste clipboard"), [this](wxCommandEvent&) { m_plater->paste_from_clipboard(); }, "menu_paste", nullptr, [this](){return m_plater->can_paste_from_clipboard(); }, this); // BBS Delete selected - append_menu_item(editMenu, wxID_ANY, _L("Delete Selected") + "\t" + _L_CONTEXT("Del", "Keyboard Shortcut"), + append_shortcut_item(editMenu, Shortcut::DeleteSelected, true, _L("Delete Selected"), _L("Deletes the current selection"),[this](wxCommandEvent&) { m_plater->remove_selected(); }, "menu_remove", nullptr, [this](){return can_delete(); }, this); //BBS: delete all - append_menu_item(editMenu, wxID_ANY, _L("Delete All") + "\t" + ctrl + "D", + append_shortcut_item(editMenu, Shortcut::DeleteAll, true, _L("Delete All"), _L("Deletes all objects"),[this](wxCommandEvent&) { m_plater->delete_all_objects_from_model(); }, "menu_remove", nullptr, [this](){return can_delete_all(); }, this); editMenu->AppendSeparator(); // BBS Clone Selected - append_menu_item(editMenu, wxID_ANY, _L("Clone Selected") /*+ "\t" + ctrl + "M"*/, + append_shortcut_item(editMenu, Shortcut::CloneSelected, true, _L("Clone Selected"), _L("Clone copies of selections"),[this](wxCommandEvent&) { m_plater->clone_selection(); }, @@ -3103,7 +3139,7 @@ void MainFrame::init_menubar_as_editor() editMenu->AppendSeparator(); #else // BBS undo - append_menu_item(editMenu, wxID_ANY, _L("Undo") + sep + ctrl_t + "Z", + append_shortcut_item(editMenu, Shortcut::Undo, false, _L("Undo"), _L("Undo"), [this, handle_key_event](wxCommandEvent&) { wxKeyEvent e; e.SetEventType(wxEVT_KEY_DOWN); @@ -3115,7 +3151,7 @@ void MainFrame::init_menubar_as_editor() m_plater->undo(); }, "", nullptr, [this](){return m_plater->can_undo(); }, this); // BBS redo - append_menu_item(editMenu, wxID_ANY, _L("Redo") + sep + ctrl_t + "Y", + append_shortcut_item(editMenu, Shortcut::Redo, false, _L("Redo"), _L("Redo"), [this, handle_key_event](wxCommandEvent&) { wxKeyEvent e; e.SetEventType(wxEVT_KEY_DOWN); @@ -3128,7 +3164,7 @@ void MainFrame::init_menubar_as_editor() "", nullptr, [this](){return m_plater->can_redo(); }, this); editMenu->AppendSeparator(); // BBS Cut TODO - append_menu_item(editMenu, wxID_ANY, _L("Cut") + sep + ctrl_t + "X", + append_shortcut_item(editMenu, Shortcut::Cut, false, _L("Cut"), _L("Cut selection to clipboard"), [this, handle_key_event](wxCommandEvent&) { wxKeyEvent e; e.SetEventType(wxEVT_KEY_DOWN); @@ -3140,7 +3176,7 @@ void MainFrame::init_menubar_as_editor() m_plater->cut_selection_to_clipboard(); }, "", nullptr, [this]() {return m_plater->can_copy_to_clipboard(); }, this); // BBS Copy - append_menu_item(editMenu, wxID_ANY, _L("Copy") + sep + ctrl_t + "C", + append_shortcut_item(editMenu, Shortcut::Copy, false, _L("Copy"), _L("Copy selection to clipboard"), [this, handle_key_event](wxCommandEvent&) { wxKeyEvent e; e.SetEventType(wxEVT_KEY_DOWN); @@ -3152,7 +3188,7 @@ void MainFrame::init_menubar_as_editor() m_plater->copy_selection_to_clipboard(); }, "", nullptr, [this](){return m_plater->can_copy_to_clipboard(); }, this); // BBS Paste - append_menu_item(editMenu, wxID_ANY, _L("Paste") + sep + ctrl_t + "V", + append_shortcut_item(editMenu, Shortcut::Paste, false, _L("Paste"), _L("Paste clipboard"), [this, handle_key_event](wxCommandEvent&) { wxKeyEvent e; e.SetEventType(wxEVT_KEY_DOWN); @@ -3165,14 +3201,14 @@ void MainFrame::init_menubar_as_editor() "", nullptr, [this](){return m_plater->can_paste_from_clipboard(); }, this); #if 0 // BBS Delete selected - append_menu_item(editMenu, wxID_ANY, _L("Delete Selected") + "\t" + _L_CONTEXT("Backspace", "Keyboard Shortcut"), + append_shortcut_item(editMenu, Shortcut::DeleteSelected, true, _L("Delete Selected"), _L("Deletes the current selection"),[this](wxCommandEvent&) { m_plater->remove_selected(); }, "", nullptr, [this](){return can_delete(); }, this); #endif //BBS: delete all - append_menu_item(editMenu, wxID_ANY, _L("Delete All") + "\t" + ctrl + "D", + append_shortcut_item(editMenu, Shortcut::DeleteAll, true, _L("Delete All"), _L("Deletes all objects"),[this, handle_key_event](wxCommandEvent&) { wxKeyEvent e; e.SetEventType(wxEVT_KEY_DOWN); @@ -3185,7 +3221,7 @@ void MainFrame::init_menubar_as_editor() "", nullptr, [this](){return can_delete_all(); }, this); editMenu->AppendSeparator(); // BBS Clone Selected - append_menu_item(editMenu, wxID_ANY, _L("Clone Selected") + "\t" + ctrl + "K", + append_shortcut_item(editMenu, Shortcut::CloneSelected, true, _L("Clone Selected"), _L("Clone copies of selections"),[this, handle_key_event](wxCommandEvent&) { wxKeyEvent e; e.SetEventType(wxEVT_KEY_DOWN); @@ -3208,7 +3244,7 @@ void MainFrame::init_menubar_as_editor() #endif // BBS Select All - append_menu_item(editMenu, wxID_ANY, _L("Select All") + sep + ctrl_t + "A", + append_shortcut_item(editMenu, Shortcut::SelectAll, false, _L("Select All"), _L("Selects all objects"), [this, handle_key_event](wxCommandEvent&) { wxKeyEvent e; e.SetEventType(wxEVT_KEY_DOWN); @@ -3260,7 +3296,7 @@ void MainFrame::init_menubar_as_editor() wxMenu* viewMenu = nullptr; if (m_plater) { viewMenu = new wxMenu(); - add_common_view_menu_items(viewMenu, this, std::bind(&MainFrame::can_change_view, this)); + add_common_view_menu_items(viewMenu, std::bind(&MainFrame::can_change_view, this)); viewMenu->AppendSeparator(); //BBS perspective view @@ -3291,13 +3327,14 @@ void MainFrame::init_menubar_as_editor() []() { return wxGetApp().app_config->get_bool("auto_perspective"); }, this); viewMenu->AppendSeparator(); - append_menu_check_item(viewMenu, wxID_ANY, _L("Show &G-code Window") + sep + "C", _L("Show G-code window in Preview scene."), + wxMenuItem* gcode_window = append_menu_check_item(viewMenu, wxID_ANY, shortcut_label(_L("Show &G-code Window"), Shortcut::ToggleGcodeWindow, true), _L("Show G-code window in Preview scene."), [this](wxCommandEvent &) { wxGetApp().toggle_show_gcode_window(); m_plater->get_current_canvas3D()->post_event(SimpleEvent(wxEVT_PAINT)); }, this, [this]() { return m_tabpanel->GetSelectedPageName() == TAB_ID_PREVIEW; }, []() { return wxGetApp().show_gcode_window(); }, this); + m_shortcut_menu_items.push_back({ gcode_window, Shortcut::ToggleGcodeWindow, _L("Show &G-code Window"), true }); append_menu_check_item( viewMenu, wxID_ANY, _L("Show 3D Navigator"), _L("Show 3D navigator in Prepare and Preview scene."), @@ -3325,9 +3362,10 @@ void MainFrame::init_menubar_as_editor() this); viewMenu->AppendSeparator(); - append_menu_check_item(viewMenu, wxID_ANY, _L("Show &Labels") + "\t" + ctrl + "E", _L("Show object labels in 3D scene."), + wxMenuItem* show_labels = append_menu_check_item(viewMenu, wxID_ANY, shortcut_label(_L("Show &Labels"), Shortcut::ShowLabels, true), _L("Show object labels in 3D scene."), [this](wxCommandEvent&) { m_plater->show_view3D_labels(!m_plater->are_view3D_labels_shown()); m_plater->get_current_canvas3D()->post_event(SimpleEvent(wxEVT_PAINT)); }, this, [this]() { return m_plater->is_view3D_shown(); }, [this]() { return m_plater->are_view3D_labels_shown(); }, this); + m_shortcut_menu_items.push_back({ show_labels, Shortcut::ShowLabels, _L("Show &Labels"), true }); append_menu_check_item(viewMenu, wxID_ANY, _L("Show &Overhang"), _L("Show object overhang highlight in 3D scene."), [this](wxCommandEvent &) { @@ -3372,8 +3410,6 @@ void MainFrame::init_menubar_as_editor() //auto preference_item = new wxMenuItem(parent_menu, OrcaSlicerMenuPreferences + bambu_studio_id_base, _L("Preferences") + "\t" + ctrl + ",", ""); #else wxMenu* parent_menu = m_topbar->GetTopMenu(); - auto preference_item = new wxMenuItem(parent_menu, ConfigMenuPreferences + config_id_base, _L("Preferences") + "\t" + ctrl + "P", ""); - #endif #ifdef __APPLE__ @@ -3382,15 +3418,15 @@ void MainFrame::init_menubar_as_editor() parent_menu, wxID_ANY, _L(about_title), "", [](wxCommandEvent &) { Slic3r::GUI::about();}, "", nullptr, []() { return true; }, this, 0); - append_menu_item( - parent_menu, wxID_ANY, _L("Preferences") + "\t" + ctrl + ",", "", + append_shortcut_item( + parent_menu, Shortcut::Preferences, true, _L("Preferences"), "", [](wxCommandEvent &) { wxGetApp().open_preferences(); }, "", nullptr, []() { return true; }, this, 1); parent_menu->AppendSeparator(); - append_menu_item( - parent_menu, wxID_ANY, _L("Open speed dial...") + sep + "Space", "", + append_shortcut_item( + parent_menu, Shortcut::SpeedDial, false, _L("Open speed dial..."), "", [](wxCommandEvent &) { wxGetApp().open_speed_dial(); }, "", nullptr, []() { return true; }, this); //parent_menu->Insert(1, preference_item); @@ -3406,8 +3442,8 @@ void MainFrame::init_menubar_as_editor() m_topbar->AddDropDownSubMenu(viewMenu, _L("View")); //BBS add Preference - append_menu_item( - m_topbar->GetTopMenu(), wxID_ANY, _L("Preferences") + "\t" + ctrl + "P", "", + append_shortcut_item( + m_topbar->GetTopMenu(), Shortcut::Preferences, true, _L("Preferences"), "", [](wxCommandEvent &) { // Orca: Use GUI_App::open_preferences instead of direct call so windows associations are updated on exit wxGetApp().open_preferences(); @@ -3417,8 +3453,8 @@ void MainFrame::init_menubar_as_editor() auto top_menu = m_topbar->GetTopMenu(); top_menu->AppendSeparator(); - append_menu_item( - top_menu, wxID_ANY, _L("Open speed dial...") + "\t" + "Space", "", + append_shortcut_item( + top_menu, Shortcut::SpeedDial, false, _L("Open speed dial..."), "", [](wxCommandEvent &) { wxGetApp().open_speed_dial(); }, "", nullptr, []() { return true; }, this); top_menu->AppendSeparator(); @@ -3524,8 +3560,8 @@ void MainFrame::init_menubar_as_editor() #else // On Mac, the Apple menu ignores non-standard custom items, so add Preset Bundle to the File menu fileMenu->AppendSeparator(); - append_menu_item( - fileMenu, wxID_ANY, _L("Open speed dial...") + sep + "Space", "", + append_shortcut_item( + fileMenu, Shortcut::SpeedDial, false, _L("Open speed dial..."), "", [](wxCommandEvent&) { wxGetApp().open_speed_dial(); }, "", nullptr, []() { return true; }, this); append_menu_item( @@ -3728,7 +3764,7 @@ void MainFrame::init_menubar_as_gcodeviewer() wxMenu* viewMenu = nullptr; if (m_plater != nullptr) { viewMenu = new wxMenu(); - add_common_view_menu_items(viewMenu, this, std::bind(&MainFrame::can_change_view, this)); + add_common_view_menu_items(viewMenu, std::bind(&MainFrame::can_change_view, this)); } // helpmenu diff --git a/src/slic3r/GUI/MainFrame.hpp b/src/slic3r/GUI/MainFrame.hpp index 6851935059..66f3b31263 100644 --- a/src/slic3r/GUI/MainFrame.hpp +++ b/src/slic3r/GUI/MainFrame.hpp @@ -74,6 +74,8 @@ class DesignPanel; class MainFrame; class WebViewPanel; class ParamsDialog; +enum class Shortcut : uint8_t; +struct KeyChord; #ifdef __WXGTK__ class ResizeEdgePanel; #endif @@ -195,6 +197,29 @@ class MainFrame : public DPIFrame // vector of a MenuBar items changeable in respect to printer technology std::vector m_changeable_menu_items; + // Menu items whose label shows a key binding; update_shortcut_labels() rewrites them. + struct ShortcutMenuItem + { + wxMenuItem* item; + Shortcut shortcut; + wxString label; + bool accelerator; // false keeps the binding display-only on macOS, where the menu bar's accelerators are live + }; + std::vector m_shortcut_menu_items; + + wxString shortcut_label(const wxString& label, Shortcut shortcut, bool accelerator); + template + wxMenuItem* append_shortcut_item(wxMenu* menu, Shortcut shortcut, bool accelerator, const wxString& label, Args&&... args) + { + wxMenuItem* item = append_menu_item(menu, wxID_ANY, shortcut_label(label, shortcut, accelerator), std::forward(args)...); + m_shortcut_menu_items.push_back({ item, shortcut, label, accelerator }); + return item; + } + // Runs the Global shortcut bound to chord; false when the focused control should see the key as well. + bool handle_global_shortcut(const KeyChord& chord); + void add_common_view_menu_items(wxMenu* view_menu, std::function can_change_view); + wxMenu* generate_help_menu(); + struct FileHistory : wxFileHistory { FileHistory(int max) : wxFileHistory(max) {} @@ -354,6 +379,7 @@ public: void request_select_tab(const wxString& id); int get_calibration_curr_tab(); void select_view(const std::string& direction); + void update_shortcut_labels(); // Propagate changed configuration from the Tab to the Plater and save changes to the AppConfig void on_config_changed(DynamicPrintConfig* cfg) const ; void set_print_button_to_default(PrintSelectType select_type); diff --git a/src/slic3r/GUI/NativeCommands.cpp b/src/slic3r/GUI/NativeCommands.cpp index 2e24f14326..1297cd4a24 100644 --- a/src/slic3r/GUI/NativeCommands.cpp +++ b/src/slic3r/GUI/NativeCommands.cpp @@ -10,6 +10,7 @@ #include "GUI_Factories.hpp" #include "GUI_ObjectList.hpp" #include "I18N.hpp" +#include "Shortcuts.hpp" #include "IMSlider.hpp" #include "MainFrame.hpp" #include "NetworkTestDialog.hpp" @@ -563,7 +564,7 @@ std::vector build_command_catalog() // ---- Help ---- (mirrors the top-bar Help menu, plus the wiki/YouTube links) add("help_keyboard_shortcuts", _u8L("Keyboard Shortcuts"), _u8L("Help"), [](const std::string&) { - wxGetApp().keyboard_shortcuts(); + wxGetApp().keyboard_shortcuts(ShortcutContext::Global); return AppActionRunResult{AppActionRunResult::Level::Success}; }); add("help_setup_wizard", _u8L("Setup Wizard"), _u8L("Help"), [](const std::string&) { diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index d2196fefe6..6258cf19af 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -82,6 +82,7 @@ #include "GUI.hpp" #include "GUI_App.hpp" +#include "Shortcuts.hpp" #include "GUI_ObjectList.hpp" #ifdef __WXGTK__ #include "LinuxDisplayBackend.hpp" @@ -7595,7 +7596,9 @@ Plater::priv::priv(Plater *q, MainFrame *main_frame) view3D_canvas->Bind(EVT_GLCANVAS_PRINTABLE, [this](SimpleEvent& evt) { this->sidebar->obj_list()->toggle_printable_state(); }); view3D_canvas->Bind(EVT_GLCANVAS_SELECT_ALL, [this](SimpleEvent&) { this->q->select_all(); }); - view3D_canvas->Bind(EVT_GLCANVAS_QUESTION_MARK, [](SimpleEvent&) { wxGetApp().keyboard_shortcuts(); }); + view3D_canvas->Bind(EVT_GLCANVAS_QUESTION_MARK, [this](SimpleEvent&) { + wxGetApp().keyboard_shortcuts(view3D->get_canvas3d()->get_gizmos_manager().is_paint_gizmo() ? ShortcutContext::Painting : ShortcutContext::Plater); + }); view3D_canvas->Bind(EVT_GLCANVAS_INCREASE_INSTANCES, [this](Event& evt) { if (evt.data == 1) this->q->increase_instances(); else if (this->can_decrease_instances()) this->q->decrease_instances(); }); view3D_canvas->Bind(EVT_GLCANVAS_INSTANCE_MOVED, [this](SimpleEvent&) { update(); }); @@ -7672,7 +7675,7 @@ Plater::priv::priv(Plater *q, MainFrame *main_frame) view3D_canvas->Bind(EVT_GLCANVAS_UPDATE_BED_SHAPE, [q](SimpleEvent&) { q->set_bed_shape(); }); // Preview events: - preview->get_wxglcanvas()->Bind(EVT_GLCANVAS_QUESTION_MARK, [](SimpleEvent&) { wxGetApp().keyboard_shortcuts(); }); + preview->get_wxglcanvas()->Bind(EVT_GLCANVAS_QUESTION_MARK, [](SimpleEvent&) { wxGetApp().keyboard_shortcuts(ShortcutContext::Preview); }); preview->get_wxglcanvas()->Bind(EVT_GLCANVAS_UPDATE_BED_SHAPE, [q](SimpleEvent&) { q->set_bed_shape(); }); preview->get_wxglcanvas()->Bind(EVT_GLCANVAS_UPDATE, [this](SimpleEvent &) { preview->get_canvas3d()->set_as_dirty(); @@ -8133,10 +8136,7 @@ void Plater::priv::collapse_sidebar(bool collapse) sidebar_layout.is_collapsed = collapse; // Now update the tooltip in the toolbar. - std::string new_tooltip = collapse - ? _u8L("Expand sidebar") - : _u8L("Collapse sidebar"); - new_tooltip += " [" + _u8L("Shift+") + _u8L("Tab") + "]"; + const std::string new_tooltip = wxGetApp().shortcuts().with_key(collapse ? _u8L("Expand sidebar") : _u8L("Collapse sidebar"), Shortcut::CollapseSidebar); int id = collapse_toolbar.get_item_id("collapse_sidebar"); collapse_toolbar.set_tooltip(id, new_tooltip); diff --git a/src/slic3r/GUI/Preferences.cpp b/src/slic3r/GUI/Preferences.cpp index adda0edd74..be4bfcfa63 100644 --- a/src/slic3r/GUI/Preferences.cpp +++ b/src/slic3r/GUI/Preferences.cpp @@ -18,6 +18,7 @@ #include "NetworkTestDialog.hpp" #include "Widgets/StaticLine.hpp" #include "Widgets/RadioGroup.hpp" +#include "Shortcuts.hpp" #include "slic3r/Utils/bambu_networking.hpp" #include "slic3r/Utils/NetworkAgent.hpp" #include "NetworkPluginDialog.hpp" @@ -285,6 +286,7 @@ std::tuple PreferencesDialog::create_item_combobox_base( auto combobox = new ::ComboBox(m_parent, wxID_ANY, wxEmptyString, wxDefaultPosition, DESIGN_LARGE_COMBOBOX_SIZE, 0, nullptr, wxCB_READONLY); combobox->GetDropDown().SetUseContentWidth(true); combobox->SetToolTip(tip); + combobox->SetName(param); // select_tab() finds the row by this name std::vector::iterator iter; for (iter = vlist.begin(); iter != vlist.end(); iter++) { @@ -1522,6 +1524,19 @@ PreferencesDialog::~PreferencesDialog() { } +void PreferencesDialog::select_tab(PreferencesTab tab, const std::string& option) +{ + if (const auto index = m_tab_index.find(tab); index != m_tab_index.end()) + m_pref_tabs->SelectItem(index->second); + wxWindow* control = option.empty() ? nullptr : m_parent->FindWindow(wxString(option)); + if (control == nullptr) + return; + int unit = 1; + m_parent->GetScrollPixelsPerUnit(nullptr, &unit); + m_parent->Scroll(wxDefaultCoord, (m_parent->CalcUnscrolledPosition(control->GetPosition()).y - FromDIP(10)) / unit); + control->SetFocus(); // the focused tint marks the row +} + void PreferencesDialog::on_dpi_changed(const wxRect &suggested_rect) { m_pref_tabs->Rescale(); @@ -1599,7 +1614,7 @@ void PreferencesDialog::create_items() ////////////////////////// //// GENERAL TAB ///////////////////////////////////// - m_pref_tabs->AppendItem(_L("General")); + m_tab_index[PreferencesTab::General] = m_pref_tabs->AppendItem(_L("General")); f_sizers.push_back(new wxFlexGridSizer(1, 1, v_gap, 0)); g_sizer = f_sizers.back(); g_sizer->AddGrowableCol(0, 1); @@ -1730,8 +1745,8 @@ void PreferencesDialog::create_items() auto item_multi_machine = create_item_checkbox(_L("Multi device management"), _L("With this option enabled, you can send a task to multiple devices at the same time and manage multiple devices."), "enable_multi_machine", _L("(Requires restart)")); g_sizer->Add(item_multi_machine); - auto item_speed_dial = create_item_checkbox(_L("Open the Speed Dial with the Space key"), - _L("When enabled, pressing Space (with no other key held) opens the Speed Dial action search from any page."), + auto item_speed_dial = create_item_checkbox(_L("Open the Speed Dial from the keyboard"), + _L("When enabled, the Speed Dial keyboard shortcut (Space by default) opens the action search from any page."), "enable_speed_dial"); g_sizer->Add(item_speed_dial); @@ -1789,7 +1804,7 @@ void PreferencesDialog::create_items() ////////////////////////// //// CONTROL TAB ///////////////////////////////////// - m_pref_tabs->AppendItem(_L("Control")); + m_tab_index[PreferencesTab::Control] = m_pref_tabs->AppendItem(_L("Control")); f_sizers.push_back(new wxFlexGridSizer(1, 1, v_gap, 0)); g_sizer = f_sizers.back(); g_sizer->AddGrowableCol(0, 1); @@ -1859,6 +1874,14 @@ void PreferencesDialog::create_items() auto item_right_mouse_drag = create_item_combobox(_L("Right Mouse Drag"), _L("Set the action that dragging the right mouse button should perform."), "right_mouse_drag_action", ButtonDragActions); g_sizer->Add(item_right_mouse_drag); + //// CONTROL > Keyboard + g_sizer->Add(create_item_title(_L("Keyboard")), 1, wxEXPAND); + + auto item_shortcuts = create_item_button(_L("Keyboard shortcuts"), _L("Edit") + dots, "", _L("Choose the key for each action."), [this]() { + wxGetApp().keyboard_shortcuts(ShortcutContext::Global, this); + }); + g_sizer->Add(item_shortcuts); + //// CONTROL > Clear my choice on ... g_sizer->Add(create_item_title(_L("Clear my choice on...")), 1, wxEXPAND); @@ -1883,7 +1906,7 @@ void PreferencesDialog::create_items() ////////////////////////// //// GRAPHICS TAB ///////////////////////////////////// - m_pref_tabs->AppendItem(_L("Graphics")); + m_tab_index[PreferencesTab::Graphics] = m_pref_tabs->AppendItem(_L("Graphics")); f_sizers.push_back(new wxFlexGridSizer(1, 1, v_gap, 0)); g_sizer = f_sizers.back(); g_sizer->AddGrowableCol(0, 1); @@ -2031,7 +2054,7 @@ void PreferencesDialog::create_items() ////////////////////////// //// ONLINE TAB ///////////////////////////////////// - m_pref_tabs->AppendItem(_L("Online")); + m_tab_index[PreferencesTab::Online] = m_pref_tabs->AppendItem(_L("Online")); f_sizers.push_back(new wxFlexGridSizer(1, 1, v_gap, 0)); g_sizer = f_sizers.back(); g_sizer->AddGrowableCol(0, 1); diff --git a/src/slic3r/GUI/Preferences.hpp b/src/slic3r/GUI/Preferences.hpp index 5ab7fb1919..e3b6ffdc7d 100644 --- a/src/slic3r/GUI/Preferences.hpp +++ b/src/slic3r/GUI/Preferences.hpp @@ -29,6 +29,9 @@ namespace Slic3r { namespace GUI { #define DESIGN_INPUT_SIZE wxSize(FromDIP(120), -1) #define DESIGN_LEFT_MARGIN 25 +// The tabs other dialogs open Preferences on. +enum class PreferencesTab { General, Control, Graphics, Online }; + class PreferencesDialog : public DPIDialog { private: @@ -38,6 +41,7 @@ protected: wxBoxSizer * m_sizer_body; wxScrolledWindow* m_parent; TabCtrl* m_pref_tabs; + std::map m_tab_index; // position of each tab in m_pref_tabs // bool m_settings_layout_changed {false}; bool m_seq_top_layer_only_changed{false}; @@ -60,6 +64,8 @@ public: ~PreferencesDialog(); + void select_tab(PreferencesTab tab, const std::string& option = {}); // and scrolls a combobox option's row into view, focused + wxString m_backup_interval_time; wxTimer m_filament_height_timer; diff --git a/src/slic3r/GUI/Shortcuts.cpp b/src/slic3r/GUI/Shortcuts.cpp new file mode 100644 index 0000000000..0bcf0ccef9 --- /dev/null +++ b/src/slic3r/GUI/Shortcuts.cpp @@ -0,0 +1,377 @@ +#include "Shortcuts.hpp" + +#include "I18N.hpp" +#include "libslic3r/AppConfig.hpp" + +#include +#include +#include + +namespace Slic3r { namespace GUI { + +namespace { + +constexpr uint8_t GLOBAL = context_bit(ShortcutContext::Global); +constexpr uint8_t PLATER = context_bit(ShortcutContext::Plater); +constexpr uint8_t PREVIEW = context_bit(ShortcutContext::Preview); +constexpr uint8_t OBJECT_LIST = context_bit(ShortcutContext::ObjectList); +constexpr uint8_t PAINTING = context_bit(ShortcutContext::Painting); +constexpr uint8_t CANVAS = PLATER | PREVIEW; + +constexpr int CTRL = wxMOD_CONTROL; +constexpr int SHIFT = wxMOD_SHIFT; +constexpr int CTRL_SHIFT = wxMOD_CONTROL | wxMOD_SHIFT; + +#ifdef __APPLE__ +constexpr KeyChord PREFERENCES_CHORD{ ',', CTRL }; +constexpr KeyChord DELETE_CHORD{ WXK_BACK }; +constexpr KeyChord MOUSE3D_CHORD{ 'M', CTRL_SHIFT }; +#else +constexpr KeyChord PREFERENCES_CHORD{ 'P', CTRL }; +constexpr KeyChord DELETE_CHORD{ WXK_DELETE }; +constexpr KeyChord MOUSE3D_CHORD{ 'M', CTRL }; +#endif + +// Each row: enum value, AppConfig key, description shown in the dialog, contexts the key is +// looked up in, and the default chord. Rows are in the order the dialog lists them, within +// the sections of the Shortcut enum. +// SHORTCUT runs once per key press. +// REPEATING runs again on every auto-repeat of a held key. +// STEPPING repeats, and Shift or Ctrl held with its key select a step variant of it instead +// of another shortcut (ShortcutInfo::modifier_variants). +#define SHORTCUT(id, key, name, contexts, ...) ShortcutInfo{ Shortcut::id, key, name, contexts, __VA_ARGS__, false, false } +#define REPEATING(id, key, name, contexts, ...) ShortcutInfo{ Shortcut::id, key, name, contexts, __VA_ARGS__, true, false } +#define STEPPING(id, key, name, contexts, ...) ShortcutInfo{ Shortcut::id, key, name, contexts, __VA_ARGS__, true, true } + +constexpr std::array shortcut_table = {{ + // Project + SHORTCUT(NewProject, "new_project", L("New Project"), GLOBAL, { 'N', CTRL }), + SHORTCUT(OpenProject, "open_project", L("Open Project"), GLOBAL, { 'O', CTRL }), + SHORTCUT(SaveProject, "save_project", L("Save Project"), GLOBAL, { 'S', CTRL }), + SHORTCUT(SaveProjectAs, "save_project_as", L("Save Project as"), GLOBAL, { 'S', CTRL_SHIFT }), + SHORTCUT(ImportModel, "import_model", L("Import geometry data from STL/STEP/3MF/OBJ/AMF files"), GLOBAL, { 'I', CTRL }), + SHORTCUT(Publish3mf, "publish_3mf", L("Publish 3MF"), GLOBAL, { 'E', CTRL_SHIFT }), + + // Slicing and printing + SHORTCUT(SlicePlate, "slice_plate", L("Slice plate"), GLOBAL, { 'R', CTRL }), + SHORTCUT(ExportSlicedFile, "export_sliced_file", L("Export plate sliced file"), GLOBAL, { 'G', CTRL }), + SHORTCUT(PrintPlate, "print_plate", L("Print plate"), GLOBAL, { 'G', CTRL_SHIFT }), + SHORTCUT(PrintHostQueue, "print_host_queue", L("Print host upload queue"), GLOBAL, { 'J', CTRL }), + + // Selection + SHORTCUT(SelectAll, "select_all", L("Select all objects"), PLATER | OBJECT_LIST, { 'A', CTRL }), + SHORTCUT(SelectAllPlates, "select_all_plates", L("Select all objects on all plates"), PLATER, { 'A', CTRL_SHIFT }), + + // Editing + REPEATING(Undo, "undo", L("Undo"), PLATER | OBJECT_LIST, { 'Z', CTRL }), + REPEATING(Redo, "redo", L("Redo"), PLATER | OBJECT_LIST, { 'Y', CTRL }), + SHORTCUT(Cut, "cut", L("Cut"), PLATER | OBJECT_LIST, { 'X', CTRL }), + SHORTCUT(Copy, "copy", L("Copy to clipboard"), PLATER | OBJECT_LIST, { 'C', CTRL }), + SHORTCUT(Paste, "paste", L("Paste from clipboard"), PLATER | OBJECT_LIST, { 'V', CTRL }), + SHORTCUT(DeleteSelected, "delete_selected", L("Delete Selected"), PLATER | OBJECT_LIST, DELETE_CHORD), + SHORTCUT(DeleteAll, "delete_all", L("Delete All"), PLATER, { 'D', CTRL }), + SHORTCUT(CloneSelected, "clone_selected", L("Clone Selected"), PLATER | OBJECT_LIST, { 'K', CTRL }), + + // Objects + REPEATING(AddInstance, "add_instance", L("Add instance"), PLATER | OBJECT_LIST, { '+' }), + REPEATING(RemoveInstance, "remove_instance", L("Remove instance"), PLATER | OBJECT_LIST, { '-' }), + SHORTCUT(TogglePrintable, "toggle_printable", L("Toggle printable for object/part"), PLATER | OBJECT_LIST, { 'V' }), + SHORTCUT(ToggleAutoDrop, "toggle_auto_drop", L("Auto Drop"), OBJECT_LIST, { 'D' }), + + // Placement + SHORTCUT(Arrange, "arrange", L("Arrange all objects"), PLATER, { 'A' }), + SHORTCUT(ArrangePlate, "arrange_plate", L("Arrange objects on selected plates"), PLATER, { 'A', SHIFT }), + SHORTCUT(Orient, "orient", L("Auto orient all/selected objects"), PLATER, { 'Q' }), + SHORTCUT(OrientPlate, "orient_plate", L("Auto orient all objects on current plate"), PLATER, { 'Q', SHIFT }), + STEPPING(MoveSelectionLeft, "move_selection_left", L("Move selection 10mm in negative X direction"), PLATER, { WXK_LEFT }), + STEPPING(MoveSelectionRight, "move_selection_right", L("Move selection 10mm in positive X direction"), PLATER, { WXK_RIGHT }), + STEPPING(MoveSelectionUp, "move_selection_up", L("Move selection 10mm in positive Y direction"), PLATER, { WXK_UP }), + STEPPING(MoveSelectionDown, "move_selection_down", L("Move selection 10mm in negative Y direction"), PLATER, { WXK_DOWN }), + REPEATING(RotateSelectionLeft, "rotate_selection_left", L("Rotate selection 45 degrees counterclockwise"), PLATER, { WXK_PAGEUP }), + REPEATING(RotateSelectionRight, "rotate_selection_right", L("Rotate selection 45 degrees clockwise"), PLATER, { WXK_PAGEDOWN }), + + // Gizmos + SHORTCUT(GizmoMove, "gizmo_move", L("Gizmo move"), PLATER, { 'M' }), + SHORTCUT(GizmoRotate, "gizmo_rotate", L("Gizmo rotate"), PLATER, { 'R' }), + SHORTCUT(GizmoScale, "gizmo_scale", L("Gizmo scale"), PLATER, { 'S' }), + SHORTCUT(GizmoFlatten, "gizmo_flatten", L("Gizmo place face on bed"), PLATER, { 'F' }), + SHORTCUT(GizmoCut, "gizmo_cut", L("Gizmo cut"), PLATER, { 'C' }), + SHORTCUT(GizmoMeshBoolean, "gizmo_mesh_boolean", L("Gizmo mesh boolean"), PLATER, { 'B' }), + SHORTCUT(GizmoFdmSupports, "gizmo_fdm_supports", L("Gizmo FDM paint-on supports"), PLATER, { 'L' }), + SHORTCUT(GizmoSeam, "gizmo_seam", L("Gizmo FDM paint-on seam"), PLATER, { 'P' }), + SHORTCUT(GizmoFuzzySkin, "gizmo_fuzzy_skin", L("Gizmo FDM paint-on fuzzy skin"), PLATER, { 'H' }), + SHORTCUT(GizmoMmuSegmentation, "gizmo_mmu_segmentation", L("Gizmo multi-material painting"), PLATER, { 'N' }), + SHORTCUT(GizmoEmboss, "gizmo_emboss", L("Gizmo text emboss/engrave"), PLATER, { 'T' }), + SHORTCUT(GizmoMeasure, "gizmo_measure", L("Gizmo measure"), PLATER, { 'U' }), + SHORTCUT(GizmoAssembly, "gizmo_assembly", L("Gizmo assemble"), PLATER, { 'Y' }), + SHORTCUT(GizmoBrimEars, "gizmo_brim_ears", L("Gizmo brim ears"), PLATER, { 'E' }), + + // Sliders + SHORTCUT(GoToLayer, "go_to_layer", L("Jump to layer"), PREVIEW, { 'G', SHIFT }), + STEPPING(LayerSliderUp, "layer_slider_up", L("Vertical slider - Move active thumb Up"), PREVIEW, { WXK_UP }), + STEPPING(LayerSliderDown, "layer_slider_down", L("Vertical slider - Move active thumb Down"), PREVIEW, { WXK_DOWN }), + STEPPING(MovesSliderLeft, "moves_slider_left", L("Horizontal slider - Move active thumb Left"), PREVIEW, { WXK_LEFT }), + STEPPING(MovesSliderRight, "moves_slider_right", L("Horizontal slider - Move active thumb Right"), PREVIEW, { WXK_RIGHT }), + REPEATING(MovesSliderStart, "moves_slider_start", L("Horizontal slider - Move to start position"), PREVIEW, { WXK_HOME }), + REPEATING(MovesSliderEnd, "moves_slider_end", L("Horizontal slider - Move to last position"), PREVIEW, { WXK_END }), + + // Painting tools + SHORTCUT(PaintToolCircle, "paint_tool_circle", L("Circle"), PAINTING, { 'C' }), + SHORTCUT(PaintToolSphere, "paint_tool_sphere", L("Sphere"), PAINTING, { 'S' }), + SHORTCUT(PaintToolFill, "paint_tool_fill", L("Fill"), PAINTING, { 'F' }), + SHORTCUT(PaintToolGapFill, "paint_tool_gap_fill", L("Gap Fill"), PAINTING, { 'G' }), + SHORTCUT(PaintToolTriangle, "paint_tool_triangle", L("Triangle"), PAINTING, { 'T' }), + SHORTCUT(PaintToolHeightRange, "paint_tool_height_range", L("Height Range"), PAINTING, { 'H' }), + + // Camera + SHORTCUT(ViewDefault, "view_default", L("Camera view - Default"), GLOBAL, { '0', CTRL }), + SHORTCUT(ViewTop, "view_top", L("Camera view - Top"), GLOBAL, { '1', CTRL }), + SHORTCUT(ViewBottom, "view_bottom", L("Camera view - Bottom"), GLOBAL, { '2', CTRL }), + SHORTCUT(ViewFront, "view_front", L("Camera view - Front"), GLOBAL, { '3', CTRL }), + SHORTCUT(ViewRear, "view_rear", L("Camera view - Behind"), GLOBAL, { '4', CTRL }), + SHORTCUT(ViewLeft, "view_left", L("Camera Angle - Left side"), GLOBAL, { '5', CTRL }), + SHORTCUT(ViewRight, "view_right", L("Camera Angle - Right side"), GLOBAL, { '6', CTRL }), + SHORTCUT(ViewPlate, "view_plate", L("Camera view - Current plate"), GLOBAL, { '7', CTRL }), + REPEATING(ZoomIn, "zoom_in", L("Zoom in"), CANVAS, { 'I' }), + REPEATING(ZoomOut, "zoom_out", L("Zoom out"), CANVAS, { 'O' }), + SHORTCUT(Mouse3DSettings, "mouse3d_settings", L("Show/Hide 3Dconnexion devices settings dialog"), CANVAS, MOUSE3D_CHORD), + + // Display + SHORTCUT(ShowLabels, "show_labels", L("Show object labels in 3D scene."), GLOBAL, { 'E', CTRL }), + SHORTCUT(ShowWireframe, "show_wireframe", L("Show/Hide wireframe"), CANVAS, { WXK_RETURN, CTRL_SHIFT }), + SHORTCUT(ToggleGcodeWindow, "toggle_gcode_window", L("On/Off G-code window"), PREVIEW, { 'C' }), + SHORTCUT(ToggleOneLayerMode, "toggle_one_layer_mode", L("On/Off one layer mode of the vertical slider"), PREVIEW, { 'L' }), + + // Application + SHORTCUT(Preferences, "preferences", L("Preferences"), GLOBAL, PREFERENCES_CHORD), + SHORTCUT(Search, "search", L("Search"), GLOBAL, { 'F', CTRL }), + SHORTCUT(SwitchView, "switch_view", L("Switch between Prepare/Preview"), CANVAS, { WXK_TAB }), + SHORTCUT(CollapseSidebar, "collapse_sidebar", L("Collapse/Expand the sidebar"), CANVAS, { WXK_TAB, SHIFT }), + SHORTCUT(SpeedDial, "speed_dial", L("Open the speed dial"), GLOBAL, { WXK_SPACE }), + SHORTCUT(ReloadDevicePage, "reload_device_page", L("Reload the device page"), CANVAS, { WXK_F5 }), + SHORTCUT(KeyboardShortcuts, "keyboard_shortcuts", L("Show keyboard shortcuts list"), CANVAS, { '?' }), +}}; + +#undef SHORTCUT +#undef REPEATING +#undef STEPPING + +// The first shortcut of each section's run in shortcut_table and the section's heading, indexed +// by ShortcutSection. +struct SectionInfo +{ + Shortcut first; + const char* name; +}; + +constexpr std::array section_table = {{ + { Shortcut::NewProject, L("Project") }, + { Shortcut::SlicePlate, L("Slicing and printing") }, + { Shortcut::SelectAll, L("Selection") }, + { Shortcut::Undo, L("Editing") }, + { Shortcut::AddInstance, L("Objects") }, + { Shortcut::Arrange, L("Placement") }, + { Shortcut::GizmoMove, L("Gizmos") }, + { Shortcut::GoToLayer, L("Sliders") }, + { Shortcut::PaintToolCircle, L("Painting tools") }, + { Shortcut::ViewDefault, L("Camera") }, + { Shortcut::ShowLabels, L("Display") }, + { Shortcut::Preferences, L("Application") }, +}}; + +constexpr bool sections_follow_table_order() +{ + if (section_table.front().first != Shortcut(0)) + return false; + for (size_t i = 1; i < section_table.size(); ++i) + if (section_table[i].first <= section_table[i - 1].first) + return false; + return true; +} +static_assert(sections_follow_table_order(), "section_table must begin at the first shortcut and ascend"); + +constexpr bool table_is_in_enum_order() +{ + for (size_t i = 0; i < shortcut_table.size(); ++i) + if (shortcut_table[i].id != Shortcut(i)) + return false; + return true; +} +static_assert(table_is_in_enum_order(), "shortcut_table must list every Shortcut in declaration order"); + +const char* CONFIG_SECTION = "shortcuts"; +const char* UNBOUND = "none"; + +bool share_context(uint8_t a, uint8_t b) { return (a & b) != 0 || (a & GLOBAL) != 0 || (b & GLOBAL) != 0; } + +// The modifiers a modifier_variants shortcut accepts on top of its binding. +constexpr int STEP_MODIFIERS = wxMOD_SHIFT | wxMOD_CONTROL; + +// The step modifiers chord adds to binding, 0 when chord is not a step of it; a binding with +// Shift or Ctrl of its own has no steps, so no two bindings share one. +int step_modifiers(const KeyChord& chord, const KeyChord& binding) +{ + if (!binding.valid() || (binding.modifiers & STEP_MODIFIERS) != 0 || chord.key != binding.key || + (chord.modifiers & ~STEP_MODIFIERS) != binding.modifiers) + return 0; + return chord.modifiers & STEP_MODIFIERS; +} + +} // namespace + +const ShortcutInfo& shortcut_info(Shortcut shortcut) { return shortcut_table[size_t(shortcut)]; } + +ShortcutSection shortcut_section(Shortcut shortcut) +{ + size_t section = 0; + for (size_t i = 1; i < section_table.size(); ++i) + if (section_table[i].first <= shortcut) + section = i; + return ShortcutSection(section); +} + +const char* section_name(ShortcutSection section) { return section_table[size_t(section)].name; } + +std::vector shortcuts_in(ShortcutContext context) +{ + std::vector out; + for (const ShortcutInfo& info : shortcut_table) + if (info.contexts & context_bit(context)) + out.push_back(info.id); + return out; +} + +ShortcutRegistry::ShortcutRegistry() { rebuild_index(); } + +KeyChord ShortcutRegistry::binding(Shortcut shortcut) const +{ + const std::optional& override = m_overrides[size_t(shortcut)]; + return override.has_value() ? *override : shortcut_info(shortcut).default_chord; +} + +bool ShortcutRegistry::is_customized(Shortcut shortcut) const { return m_overrides[size_t(shortcut)].has_value(); } + +std::string ShortcutRegistry::display(Shortcut shortcut) const { return binding(shortcut).display(); } + +std::string ShortcutRegistry::with_key(const std::string& text, Shortcut shortcut) const +{ + const std::string key = display(shortcut); + return key.empty() ? text : text + " [" + key + "]"; +} + +std::string ShortcutRegistry::accelerator(Shortcut shortcut) const +{ + const KeyChord chord = binding(shortcut); + return chord.is_menu_accelerator() ? chord.to_string() : std::string(); +} + +std::optional ShortcutRegistry::lookup(ShortcutContext context, const KeyChord& chord) const +{ + if (!chord.valid()) + return std::nullopt; + auto it = m_index.find(chord); + if (it == m_index.end()) + return std::nullopt; + for (Shortcut shortcut : it->second) + if (shortcut_info(shortcut).contexts & context_bit(context)) + return shortcut; + return std::nullopt; +} + +std::optional ShortcutRegistry::match(ShortcutContext context, const KeyChord& chord) const +{ + if (const std::optional exact = lookup(context, chord); exact.has_value()) + return Match{ *exact, 0 }; + if ((chord.modifiers & STEP_MODIFIERS) == 0) + return std::nullopt; + for (const ShortcutInfo& info : shortcut_table) + if (info.modifier_variants && (info.contexts & context_bit(context))) + if (const int step = step_modifiers(chord, binding(info.id)); step != 0) + return Match{ info.id, step }; + return std::nullopt; +} + +std::vector ShortcutRegistry::conflicts(Shortcut shortcut, const KeyChord& chord) const +{ + std::vector out; + if (!chord.valid()) + return out; + const uint8_t contexts = shortcut_info(shortcut).contexts; + for (const ShortcutInfo& other : shortcut_table) + if (other.id != shortcut && share_context(contexts, other.contexts) && binding(other.id) == chord) + out.push_back(other.id); + return out; +} + +std::optional ShortcutRegistry::step_owner(Shortcut shortcut, const KeyChord& chord) const +{ + const uint8_t contexts = shortcut_info(shortcut).contexts; + for (const ShortcutInfo& other : shortcut_table) + if (other.modifier_variants && other.id != shortcut && share_context(contexts, other.contexts)) + if (const int step = step_modifiers(chord, binding(other.id)); step == wxMOD_SHIFT || step == wxMOD_CONTROL) // the combined step stays assignable + return other.id; + return std::nullopt; +} + +void ShortcutRegistry::bind(Shortcut shortcut, const KeyChord& chord) +{ + const ShortcutInfo& info = shortcut_info(shortcut); + if (chord == info.default_chord) + m_overrides[size_t(shortcut)].reset(); + else + m_overrides[size_t(shortcut)] = chord; + rebuild_index(); +} + +void ShortcutRegistry::reset(Shortcut shortcut) +{ + m_overrides[size_t(shortcut)].reset(); + rebuild_index(); +} + +void ShortcutRegistry::reset_all() +{ + m_overrides.fill(std::nullopt); + rebuild_index(); +} + +void ShortcutRegistry::load(const AppConfig& config) +{ + m_overrides.fill(std::nullopt); + if (config.has_section(CONFIG_SECTION)) { + const std::map& section = config.get_section(CONFIG_SECTION); + for (const ShortcutInfo& info : shortcut_table) { + auto it = section.find(info.key); + if (it == section.end()) + continue; + if (it->second == UNBOUND) + m_overrides[size_t(info.id)] = KeyChord{}; + else if (std::optional chord = KeyChord::parse(it->second); chord.has_value()) + // A Global chord is seen before any text field, so it needs a modifier or a non-typing key. + if ((info.contexts & GLOBAL) == 0 || chord->is_menu_accelerator()) + m_overrides[size_t(info.id)] = *chord; + } + } + rebuild_index(); +} + +void ShortcutRegistry::save(AppConfig& config) const +{ + for (const ShortcutInfo& info : shortcut_table) { + const std::optional& override = m_overrides[size_t(info.id)]; + if (override.has_value()) + config.set(CONFIG_SECTION, info.key, override->valid() ? override->to_string() : UNBOUND); + else + config.erase(CONFIG_SECTION, info.key); + } +} + +void ShortcutRegistry::rebuild_index() +{ + m_index.clear(); + for (const ShortcutInfo& info : shortcut_table) + if (const KeyChord chord = binding(info.id); chord.valid()) + m_index[chord].push_back(info.id); +} + +}} // namespace Slic3r::GUI diff --git a/src/slic3r/GUI/Shortcuts.hpp b/src/slic3r/GUI/Shortcuts.hpp new file mode 100644 index 0000000000..ba002556ca --- /dev/null +++ b/src/slic3r/GUI/Shortcuts.hpp @@ -0,0 +1,127 @@ +#pragma once + +#include "KeyChord.hpp" + +#include +#include +#include +#include +#include +#include + +namespace Slic3r { + +class AppConfig; + +namespace GUI { + +// Where a key press is looked up. A shortcut may belong to several contexts; Global ones are +// dispatched by the main frame before any child window sees the key. +enum class ShortcutContext : uint8_t { Global, Plater, Preview, ObjectList, Painting, Count }; + +constexpr uint8_t context_bit(ShortcutContext context) { return uint8_t(1u << unsigned(context)); } + +enum class Shortcut : uint8_t { + // Project + NewProject, OpenProject, SaveProject, SaveProjectAs, ImportModel, Publish3mf, + // Slicing and printing + SlicePlate, ExportSlicedFile, PrintPlate, PrintHostQueue, + // Selection + SelectAll, SelectAllPlates, + // Editing + Undo, Redo, Cut, Copy, Paste, DeleteSelected, DeleteAll, CloneSelected, + // Objects + AddInstance, RemoveInstance, TogglePrintable, ToggleAutoDrop, + // Placement + Arrange, ArrangePlate, Orient, OrientPlate, + MoveSelectionLeft, MoveSelectionRight, MoveSelectionUp, MoveSelectionDown, RotateSelectionLeft, RotateSelectionRight, + // Gizmos + GizmoMove, GizmoRotate, GizmoScale, GizmoFlatten, GizmoCut, GizmoMeshBoolean, GizmoFdmSupports, GizmoSeam, GizmoFuzzySkin, + GizmoMmuSegmentation, GizmoEmboss, GizmoMeasure, GizmoAssembly, GizmoBrimEars, + // Sliders + GoToLayer, LayerSliderUp, LayerSliderDown, MovesSliderLeft, MovesSliderRight, MovesSliderStart, MovesSliderEnd, + // Painting tools + PaintToolCircle, PaintToolSphere, PaintToolFill, PaintToolGapFill, PaintToolTriangle, PaintToolHeightRange, + // Camera + ViewDefault, ViewTop, ViewBottom, ViewFront, ViewRear, ViewLeft, ViewRight, ViewPlate, ZoomIn, ZoomOut, Mouse3DSettings, + // Display + ShowLabels, ShowWireframe, ToggleGcodeWindow, ToggleOneLayerMode, + // Application + Preferences, Search, SwitchView, CollapseSidebar, SpeedDial, ReloadDevicePage, KeyboardShortcuts, + Count +}; + +struct ShortcutInfo +{ + Shortcut id; + const char* key; // AppConfig key + const char* name; // untranslated description + uint8_t contexts; // context_bit() mask + KeyChord default_chord; + bool repeatable; // runs on key auto-repeat as well + // Shift or Ctrl held with the bound key select a variant of this action, such as the finer + // move step or the faster slider step. + bool modifier_variants; +}; + +// Headings of the shortcuts dialog, in listing order. +enum class ShortcutSection : uint8_t { + Project, SlicingAndPrinting, Selection, Editing, Objects, Placement, Gizmos, Sliders, PaintingTools, Camera, Display, Application, + Count +}; + +const ShortcutInfo& shortcut_info(Shortcut shortcut); +ShortcutSection shortcut_section(Shortcut shortcut); +const char* section_name(ShortcutSection section); // untranslated heading +std::vector shortcuts_in(ShortcutContext context); // in table order + +// Effective key bindings: the built-in defaults overlaid with the user's own. Owns the +// chord -> shortcut index every dispatcher queries. +class ShortcutRegistry +{ +public: + ShortcutRegistry(); + + KeyChord binding(Shortcut shortcut) const; // invalid when unbound + bool is_customized(Shortcut shortcut) const; + + std::string display(Shortcut shortcut) const; // "Ctrl+N" for tooltips and the shortcuts dialog + std::string with_key(const std::string& text, Shortcut shortcut) const; // "text [Ctrl+N]", or text alone when unbound + std::string accelerator(Shortcut shortcut) const; // wx accelerator text for menu labels; empty when unbound or not menu-safe + + // Matches a key event in one context. Global shortcuts are only found through the Global context. + std::optional lookup(ShortcutContext context, const KeyChord& chord) const; + + // lookup(), then the modifier_variants shortcuts, which also match with Shift or Ctrl added + // to their binding; step_modifiers holds whichever of the two were added. + struct Match + { + Shortcut shortcut; + int step_modifiers; + }; + std::optional match(ShortcutContext context, const KeyChord& chord) const; + + // Shortcuts other than shortcut bound to chord in a context it shares; Global shortcuts + // share every context. + std::vector conflicts(Shortcut shortcut, const KeyChord& chord) const; + + // The modifier_variants shortcut in a shared context whose Shift or Ctrl step is chord; + // such a chord is reserved for that step. + std::optional step_owner(Shortcut shortcut, const KeyChord& chord) const; + + void bind(Shortcut shortcut, const KeyChord& chord); // an invalid chord unbinds + void reset(Shortcut shortcut); + void reset_all(); + + void load(const AppConfig& config); + void save(AppConfig& config) const; + +private: + void rebuild_index(); + + std::array, size_t(Shortcut::Count)> m_overrides; + std::unordered_map, KeyChordHash> m_index; +}; + +} // namespace GUI +} // namespace Slic3r diff --git a/tests/slic3rutils/CMakeLists.txt b/tests/slic3rutils/CMakeLists.txt index 3ddacc5a1b..f86f40c3e1 100644 --- a/tests/slic3rutils/CMakeLists.txt +++ b/tests/slic3rutils/CMakeLists.txt @@ -18,6 +18,7 @@ add_executable(${_TEST_NAME}_tests test_plugin_sort.cpp test_plugin_cloud_metadata.cpp test_plugin_audit.cpp + test_shortcuts.cpp ../fff_print/test_helpers.cpp ) diff --git a/tests/slic3rutils/test_shortcuts.cpp b/tests/slic3rutils/test_shortcuts.cpp new file mode 100644 index 0000000000..7826a0610a --- /dev/null +++ b/tests/slic3rutils/test_shortcuts.cpp @@ -0,0 +1,329 @@ +#include +#include + +#include "libslic3r/AppConfig.hpp" +#include "slic3r/GUI/KeyChord.hpp" +#include "slic3r/GUI/Shortcuts.hpp" + +#include + +using namespace Slic3r; +using namespace Slic3r::GUI; + +namespace { + +wxKeyEvent key_event(wxEventType type, int key_code, int modifiers = wxMOD_NONE) +{ + wxKeyEvent evt(type); + evt.m_keyCode = key_code; + evt.SetControlDown(modifiers & wxMOD_CONTROL); + evt.SetShiftDown(modifiers & wxMOD_SHIFT); + evt.SetAltDown(modifiers & wxMOD_ALT); + return evt; +} + +} // namespace + +TEST_CASE("KeyChord round-trips through its canonical text", "[Shortcuts]") +{ + const auto [chord, text] = GENERATE(table({ + { { 'N', wxMOD_CONTROL }, "Ctrl+N" }, + { { 'S', wxMOD_CONTROL | wxMOD_SHIFT }, "Ctrl+Shift+S" }, + { { WXK_RETURN, wxMOD_SHIFT | wxMOD_ALT }, "Shift+Alt+Enter" }, + { { WXK_TAB, wxMOD_SHIFT }, "Shift+Tab" }, + { { WXK_DELETE }, "Del" }, + { { WXK_F5 }, "F5" }, + { { WXK_F12, wxMOD_CONTROL }, "Ctrl+F12" }, + { { '+' }, "+" }, + { { '-', wxMOD_CONTROL }, "Ctrl+-" }, + { { '?' }, "?" }, + { { ',', wxMOD_CONTROL }, "Ctrl+," }, + })); + CAPTURE(text); + CHECK(chord.to_string() == text); + REQUIRE(KeyChord::parse(text).has_value()); + CHECK(*KeyChord::parse(text) == chord); +} + +TEST_CASE("KeyChord::parse accepts aliases and rejects malformed text", "[Shortcuts]") +{ + CHECK(KeyChord::parse("control+n") == KeyChord{ 'N', wxMOD_CONTROL }); + CHECK(KeyChord::parse("Cmd+Shift+Delete") == KeyChord{ WXK_DELETE, wxMOD_CONTROL | wxMOD_SHIFT }); + CHECK(KeyChord::parse("PageUp") == KeyChord{ WXK_PAGEUP }); + CHECK(KeyChord::parse("f3") == KeyChord{ WXK_F3 }); + + CHECK_FALSE(KeyChord::parse("").has_value()); + CHECK_FALSE(KeyChord::parse("Ctrl+").has_value()); + CHECK_FALSE(KeyChord::parse("Meta+A").has_value()); + CHECK_FALSE(KeyChord::parse("F25").has_value()); + CHECK_FALSE(KeyChord::parse("Shift+/").has_value()); // Shift is part of the punctuation character +} + +TEST_CASE("Key events normalize to the key-down key codes", "[Shortcuts]") +{ + CHECK(KeyChord::from_event(key_event(wxEVT_KEY_DOWN, 'A', wxMOD_CONTROL)) == KeyChord{ 'A', wxMOD_CONTROL }); + CHECK(KeyChord::from_event(key_event(wxEVT_KEY_DOWN, WXK_NUMPAD5, wxMOD_CONTROL)) == KeyChord{ '5', wxMOD_CONTROL }); + CHECK(KeyChord::from_event(key_event(wxEVT_KEY_DOWN, WXK_NUMPAD_ADD)) == KeyChord{ '+' }); + CHECK(KeyChord::from_event(key_event(wxEVT_KEY_DOWN, WXK_NUMPAD_PAGEUP)) == KeyChord{ WXK_PAGEUP }); + CHECK_FALSE(KeyChord::from_event(key_event(wxEVT_KEY_DOWN, WXK_SHIFT, wxMOD_SHIFT)).valid()); + CHECK_FALSE(KeyChord::from_event(key_event(wxEVT_KEY_DOWN, WXK_CONTROL, wxMOD_CONTROL)).valid()); + + CHECK(KeyChord::from_event(key_event(wxEVT_CHAR, 'a')) == KeyChord{ 'A' }); + CHECK(KeyChord::from_event(key_event(wxEVT_CHAR, 'A', wxMOD_SHIFT)) == KeyChord{ 'A', wxMOD_SHIFT }); + CHECK(KeyChord::from_event(key_event(wxEVT_CHAR, WXK_CONTROL_C, wxMOD_CONTROL)) == KeyChord{ 'C', wxMOD_CONTROL }); + CHECK(KeyChord::from_event(key_event(wxEVT_CHAR, '+', wxMOD_SHIFT)) == KeyChord{ '+' }); + CHECK(KeyChord::from_event(key_event(wxEVT_CHAR, WXK_DELETE)) == KeyChord{ WXK_DELETE }); + CHECK_FALSE(KeyChord::from_event(key_event(wxEVT_CHAR, 0x444)).valid()); // a Cyrillic letter is not bindable +} + +TEST_CASE("Punctuation chords are the ones matched on char events", "[Shortcuts]") +{ + CHECK(KeyChord{ '+' }.is_punctuation()); + CHECK(KeyChord{ '?' }.is_punctuation()); + CHECK_FALSE(KeyChord{ 'A' }.is_punctuation()); + CHECK_FALSE(KeyChord{ '1' }.is_punctuation()); + CHECK_FALSE(KeyChord{ '=', wxMOD_CONTROL }.is_punctuation()); + CHECK_FALSE(KeyChord{ WXK_DELETE }.is_punctuation()); +} + +TEST_CASE("Chords that only the char event can resolve are recognized", "[Shortcuts]") +{ + CHECK(KeyChord{ '/', wxMOD_SHIFT }.needs_char_event()); + CHECK(KeyChord{ '-' }.needs_char_event()); + CHECK_FALSE(KeyChord{ '=', wxMOD_CONTROL }.needs_char_event()); + CHECK_FALSE(KeyChord{ 'A', wxMOD_SHIFT }.needs_char_event()); + CHECK_FALSE(KeyChord{ '1' }.needs_char_event()); + CHECK_FALSE(KeyChord{ WXK_F5 }.needs_char_event()); +} + +TEST_CASE("Only modified or non-printable chords qualify as menu accelerators", "[Shortcuts]") +{ + CHECK(KeyChord{ 'N', wxMOD_CONTROL }.is_menu_accelerator()); + CHECK(KeyChord{ 'N', wxMOD_ALT }.is_menu_accelerator()); + CHECK(KeyChord{ WXK_DELETE }.is_menu_accelerator()); + CHECK(KeyChord{ WXK_F5 }.is_menu_accelerator()); + CHECK_FALSE(KeyChord{ 'A' }.is_menu_accelerator()); + CHECK_FALSE(KeyChord{ 'A', wxMOD_SHIFT }.is_menu_accelerator()); + CHECK_FALSE(KeyChord{ '?' }.is_menu_accelerator()); + CHECK_FALSE(KeyChord{ WXK_SPACE }.is_menu_accelerator()); + CHECK_FALSE(KeyChord{}.is_menu_accelerator()); + + ShortcutRegistry registry; + CHECK(registry.accelerator(Shortcut::NewProject) == "Ctrl+N"); +#ifdef __APPLE__ + CHECK(registry.accelerator(Shortcut::DeleteSelected) == "Backspace"); +#else + CHECK(registry.accelerator(Shortcut::DeleteSelected) == "Del"); +#endif + CHECK(registry.accelerator(Shortcut::Arrange).empty()); + CHECK(registry.accelerator(Shortcut::ArrangePlate).empty()); + CHECK(registry.accelerator(Shortcut::KeyboardShortcuts).empty()); +} + +TEST_CASE("Chords convert to wx accelerator entries", "[Shortcuts]") +{ + const wxAcceleratorEntry entry = KeyChord{ 'S', wxMOD_CONTROL | wxMOD_SHIFT }.to_accelerator_entry(42); + CHECK(entry.GetFlags() == (wxACCEL_CTRL | wxACCEL_SHIFT)); + CHECK(entry.GetKeyCode() == 'S'); + CHECK(entry.GetCommand() == 42); + + const wxAcceleratorEntry bare = KeyChord{ WXK_BACK }.to_accelerator_entry(7); + CHECK(bare.GetFlags() == wxACCEL_NORMAL); + CHECK(bare.GetKeyCode() == WXK_BACK); +} + +#ifndef __APPLE__ +TEST_CASE("Display text matches the canonical text without translations", "[Shortcuts]") +{ + CHECK(KeyChord{ WXK_DELETE, wxMOD_CONTROL | wxMOD_SHIFT }.display() == "Ctrl+Shift+Del"); + CHECK(KeyChord{ WXK_DELETE, wxMOD_CONTROL | wxMOD_SHIFT }.display_parts() == std::vector{ "Ctrl", "Shift", "Del" }); + CHECK(KeyChord{ '+' }.display() == "+"); + CHECK(KeyChord{ WXK_UP, wxMOD_SHIFT }.display() == "Shift+Arrow Up"); // the arrows keep the old dialog's names + CHECK(KeyChord{ WXK_UP, wxMOD_SHIFT }.to_string() == "Shift+Up"); + CHECK(KeyChord{}.display().empty()); +} +#endif + +TEST_CASE("Every shortcut is listed under the section of its table row", "[Shortcuts]") +{ + CHECK(shortcut_section(Shortcut::NewProject) == ShortcutSection::Project); + CHECK(shortcut_section(Shortcut::Publish3mf) == ShortcutSection::Project); + CHECK(shortcut_section(Shortcut::SlicePlate) == ShortcutSection::SlicingAndPrinting); + CHECK(shortcut_section(Shortcut::GizmoBrimEars) == ShortcutSection::Gizmos); + CHECK(shortcut_section(Shortcut::MovesSliderEnd) == ShortcutSection::Sliders); + CHECK(shortcut_section(Shortcut::ViewDefault) == ShortcutSection::Camera); + CHECK(shortcut_section(Shortcut::KeyboardShortcuts) == ShortcutSection::Application); + CHECK(std::string(section_name(ShortcutSection::SlicingAndPrinting)) == "Slicing and printing"); +} + +TEST_CASE("Default bindings never collide inside a context", "[Shortcuts]") +{ + ShortcutRegistry registry; + for (size_t i = 0; i < size_t(Shortcut::Count); ++i) { + const Shortcut shortcut = Shortcut(i); + CAPTURE(shortcut_info(shortcut).key); + CHECK(registry.conflicts(shortcut, registry.binding(shortcut)).empty()); + } +} + +TEST_CASE("Shift and Ctrl variants of stepping shortcuts are left unbound", "[Shortcuts]") +{ + ShortcutRegistry registry; + for (size_t i = 0; i < size_t(Shortcut::Count); ++i) { + const ShortcutInfo& info = shortcut_info(Shortcut(i)); + if (!info.modifier_variants) + continue; + CAPTURE(info.key); + const KeyChord chord = registry.binding(info.id); + for (int modifier : { int(wxMOD_SHIFT), int(wxMOD_CONTROL), int(wxMOD_SHIFT | wxMOD_CONTROL) }) + for (size_t c = 0; c < size_t(ShortcutContext::Count); ++c) + if (info.contexts & context_bit(ShortcutContext(c))) + CHECK_FALSE(registry.lookup(ShortcutContext(c), KeyChord{ chord.key, chord.modifiers | modifier }).has_value()); + } +} + +TEST_CASE("Lookups are scoped to the context of the key press", "[Shortcuts]") +{ + ShortcutRegistry registry; + const KeyChord ctrl_n{ 'N', wxMOD_CONTROL }; + const KeyChord ctrl_c{ 'C', wxMOD_CONTROL }; + const KeyChord a{ 'A' }; + const KeyChord c{ 'C' }; + + CHECK(registry.lookup(ShortcutContext::Global, ctrl_n) == Shortcut::NewProject); + CHECK_FALSE(registry.lookup(ShortcutContext::Plater, ctrl_n).has_value()); + + CHECK(registry.lookup(ShortcutContext::Plater, ctrl_c) == Shortcut::Copy); + CHECK(registry.lookup(ShortcutContext::ObjectList, ctrl_c) == Shortcut::Copy); + CHECK_FALSE(registry.lookup(ShortcutContext::Global, ctrl_c).has_value()); + + CHECK(registry.lookup(ShortcutContext::Plater, a) == Shortcut::Arrange); + CHECK_FALSE(registry.lookup(ShortcutContext::Preview, a).has_value()); + + CHECK(registry.lookup(ShortcutContext::Plater, c) == Shortcut::GizmoCut); + CHECK(registry.lookup(ShortcutContext::Preview, c) == Shortcut::ToggleGcodeWindow); + CHECK(registry.lookup(ShortcutContext::Painting, c) == Shortcut::PaintToolCircle); +} + +TEST_CASE("Stepping shortcuts match with Shift or Ctrl added to their binding", "[Shortcuts]") +{ + ShortcutRegistry registry; + using Match = ShortcutRegistry::Match; + auto same = [](const std::optional& match, Shortcut shortcut, int step_modifiers) { + return match.has_value() && match->shortcut == shortcut && match->step_modifiers == step_modifiers; + }; + CHECK(same(registry.match(ShortcutContext::Preview, { WXK_UP }), Shortcut::LayerSliderUp, 0)); + CHECK(same(registry.match(ShortcutContext::Preview, { WXK_UP, wxMOD_SHIFT }), Shortcut::LayerSliderUp, wxMOD_SHIFT)); + CHECK(same(registry.match(ShortcutContext::Plater, { WXK_LEFT, wxMOD_CONTROL | wxMOD_SHIFT }), Shortcut::MoveSelectionLeft, wxMOD_CONTROL | wxMOD_SHIFT)); + CHECK(same(registry.match(ShortcutContext::Plater, { 'A', wxMOD_SHIFT }), Shortcut::ArrangePlate, 0)); // an exact binding wins + CHECK_FALSE(registry.match(ShortcutContext::Plater, { 'Q', wxMOD_CONTROL }).has_value()); // Orient has no variants + CHECK_FALSE(registry.match(ShortcutContext::Preview, { WXK_UP, wxMOD_ALT }).has_value()); // Alt is not a step modifier + + CHECK_FALSE(registry.match(ShortcutContext::Preview, { WXK_HOME, wxMOD_SHIFT }).has_value()); // Home has no variants + + // A binding with Shift or Ctrl of its own has no steps. + registry.bind(Shortcut::LayerSliderUp, { WXK_UP, wxMOD_CONTROL }); + CHECK(same(registry.match(ShortcutContext::Preview, { WXK_UP, wxMOD_CONTROL }), Shortcut::LayerSliderUp, 0)); + CHECK_FALSE(registry.match(ShortcutContext::Preview, { WXK_UP, wxMOD_CONTROL | wxMOD_SHIFT }).has_value()); + CHECK_FALSE(registry.match(ShortcutContext::Preview, { WXK_UP, wxMOD_SHIFT }).has_value()); + + // An exact binding on the combined step wins over it. + registry.bind(Shortcut::Arrange, { WXK_LEFT, wxMOD_CONTROL | wxMOD_SHIFT }); + CHECK(same(registry.match(ShortcutContext::Plater, { WXK_LEFT, wxMOD_CONTROL | wxMOD_SHIFT }), Shortcut::Arrange, 0)); + CHECK(same(registry.match(ShortcutContext::Plater, { WXK_LEFT, wxMOD_SHIFT }), Shortcut::MoveSelectionLeft, wxMOD_SHIFT)); +} + +TEST_CASE("Conflicts cover shared contexts and every Global shortcut", "[Shortcuts]") +{ + ShortcutRegistry registry; + CHECK(registry.conflicts(Shortcut::Arrange, { 'N', wxMOD_CONTROL }) == std::vector{ Shortcut::NewProject }); + CHECK(registry.conflicts(Shortcut::NewProject, { 'A' }) == std::vector{ Shortcut::Arrange }); + CHECK(registry.conflicts(Shortcut::ToggleGcodeWindow, { 'C' }).empty()); + CHECK(registry.conflicts(Shortcut::ZoomIn, { 'C' }) == std::vector{ Shortcut::GizmoCut, Shortcut::ToggleGcodeWindow }); + CHECK(registry.conflicts(Shortcut::Arrange, { 'A' }).empty()); // a shortcut never conflicts with itself + + // Only the exact chord conflicts; the steps of a stepping shortcut are reserved instead. + CHECK(registry.conflicts(Shortcut::GoToLayer, { WXK_UP, wxMOD_SHIFT }).empty()); + CHECK(registry.conflicts(Shortcut::LayerSliderUp, { 'G', wxMOD_SHIFT }) == std::vector{ Shortcut::GoToLayer }); +} + +TEST_CASE("Shift and Ctrl with a stepping shortcut's key are reserved for its steps", "[Shortcuts]") +{ + ShortcutRegistry registry; + CHECK(registry.step_owner(Shortcut::GoToLayer, { WXK_UP, wxMOD_SHIFT }) == Shortcut::LayerSliderUp); + CHECK(registry.step_owner(Shortcut::NewProject, { WXK_LEFT, wxMOD_CONTROL }) == Shortcut::MoveSelectionLeft); // Global shares every context + CHECK_FALSE(registry.step_owner(Shortcut::GoToLayer, { WXK_UP, wxMOD_CONTROL | wxMOD_SHIFT }).has_value()); // the combined step is free + CHECK_FALSE(registry.step_owner(Shortcut::MoveSelectionLeft, { WXK_LEFT, wxMOD_SHIFT }).has_value()); // its own step + CHECK_FALSE(registry.step_owner(Shortcut::PaintToolCircle, { WXK_UP, wxMOD_SHIFT }).has_value()); // Painting shares no context + registry.bind(Shortcut::LayerSliderUp, { WXK_UP, wxMOD_CONTROL }); + CHECK_FALSE(registry.step_owner(Shortcut::GoToLayer, { WXK_UP, wxMOD_CONTROL | wxMOD_SHIFT }).has_value()); // a modified binding has no steps +} + +TEST_CASE("Custom bindings replace the default and survive a config round trip", "[Shortcuts]") +{ + ShortcutRegistry registry; + const KeyChord w{ 'W' }; + registry.bind(Shortcut::Arrange, w); + + CHECK(registry.is_customized(Shortcut::Arrange)); + CHECK(registry.lookup(ShortcutContext::Plater, w) == Shortcut::Arrange); + CHECK_FALSE(registry.lookup(ShortcutContext::Plater, { 'A' }).has_value()); + + AppConfig config; + registry.save(config); + CHECK(config.get("shortcuts", "arrange") == "W"); + CHECK_FALSE(config.has("shortcuts", "orient")); + + ShortcutRegistry loaded; + loaded.load(config); + CHECK(loaded.lookup(ShortcutContext::Plater, w) == Shortcut::Arrange); + CHECK(loaded.binding(Shortcut::Orient) == KeyChord{ 'Q' }); + + SECTION("rebinding to the default clears the override") + { + registry.bind(Shortcut::Arrange, { 'A' }); + CHECK_FALSE(registry.is_customized(Shortcut::Arrange)); + registry.save(config); + CHECK_FALSE(config.has("shortcuts", "arrange")); + } + SECTION("an invalid chord unbinds and persists as none") + { + registry.bind(Shortcut::Arrange, KeyChord{}); + CHECK_FALSE(registry.binding(Shortcut::Arrange).valid()); + registry.save(config); + CHECK(config.get("shortcuts", "arrange") == "none"); + loaded.load(config); + CHECK_FALSE(loaded.lookup(ShortcutContext::Plater, { 'A' }).has_value()); + CHECK_FALSE(loaded.lookup(ShortcutContext::Plater, w).has_value()); + } + SECTION("reset_all restores every default") + { + registry.reset_all(); + CHECK(registry.lookup(ShortcutContext::Plater, { 'A' }) == Shortcut::Arrange); + CHECK_FALSE(registry.is_customized(Shortcut::Arrange)); + } +} + +TEST_CASE("A Global shortcut refuses a config binding that would swallow typing", "[Shortcuts]") +{ + AppConfig config; + // A string literal would pick AppConfig::set's bool overload. + config.set("shortcuts", "save_project", std::string("S")); + config.set("shortcuts", "new_project", std::string("F9")); + ShortcutRegistry registry; + registry.load(config); + CHECK(registry.binding(Shortcut::SaveProject) == KeyChord{ 'S', wxMOD_CONTROL }); + CHECK(registry.binding(Shortcut::NewProject) == KeyChord{ WXK_F9 }); +} + +TEST_CASE("Unreadable config entries fall back to the default binding", "[Shortcuts]") +{ + AppConfig config; + config.set("shortcuts", "arrange", std::string("Hyper+Q")); + config.set("shortcuts", "no_such_shortcut", std::string("Ctrl+Q")); + + ShortcutRegistry registry; + registry.load(config); + CHECK_FALSE(registry.is_customized(Shortcut::Arrange)); + CHECK(registry.lookup(ShortcutContext::Plater, { 'A' }) == Shortcut::Arrange); +}

<%i4Pl&&`tZ@CdthAP-&G%Vyg{jglxT`wY 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 HzXkDsxE8&z literal 0 HcmV?d00001 diff --git a/resources/profiles/RH3D/filament/Generic ABS @VIRTU E3.json b/resources/profiles/RH3D/filament/Generic ABS @VIRTU E3.json new file mode 100644 index 0000000000..be6f94b304 --- /dev/null +++ b/resources/profiles/RH3D/filament/Generic ABS @VIRTU E3.json @@ -0,0 +1,16 @@ +{ + "type": "filament", + "name": "Generic ABS @VIRTU E3", + "inherits": "fdm_filament_abs", + "from": "system", + "setting_id": "AULhQhVApTASqF2p", + "filament_id": "OFY9muEs", + "instantiation": "true", + "compatible_printers": [ + "VIRTU E3 - 0.2 nozzle", + "VIRTU E3 - 0.3 nozzle", + "VIRTU E3 - 0.4 nozzle", + "VIRTU E3 - 0.5 nozzle", + "VIRTU E3 - 0.6 nozzle" + ] +} diff --git a/resources/profiles/RH3D/filament/Generic ASA @VIRTU E3.json b/resources/profiles/RH3D/filament/Generic ASA @VIRTU E3.json new file mode 100644 index 0000000000..c2626f57c6 --- /dev/null +++ b/resources/profiles/RH3D/filament/Generic ASA @VIRTU E3.json @@ -0,0 +1,16 @@ +{ + "type": "filament", + "name": "Generic ASA @VIRTU E3", + "inherits": "fdm_filament_asa", + "from": "system", + "setting_id": "yJa8PC5f8c4uYgny", + "filament_id": "OFLPAxz3", + "instantiation": "true", + "compatible_printers": [ + "VIRTU E3 - 0.2 nozzle", + "VIRTU E3 - 0.3 nozzle", + "VIRTU E3 - 0.4 nozzle", + "VIRTU E3 - 0.5 nozzle", + "VIRTU E3 - 0.6 nozzle" + ] +} diff --git a/resources/profiles/RH3D/filament/Generic PCCF @VIRTU E3.json b/resources/profiles/RH3D/filament/Generic PCCF @VIRTU E3.json new file mode 100644 index 0000000000..c8a7f3f800 --- /dev/null +++ b/resources/profiles/RH3D/filament/Generic PCCF @VIRTU E3.json @@ -0,0 +1,13 @@ +{ + "type": "filament", + "name": "Generic PCCF @VIRTU E3", + "inherits": "fdm_filament_pccf", + "from": "system", + "setting_id": "5byL7KQPKyybDAgQ", + "filament_id": "OFC5f4Ay", + "instantiation": "true", + "compatible_printers": [ + "VIRTU E3 - 0.5 nozzle", + "VIRTU E3 - 0.6 nozzle" + ] +} diff --git a/resources/profiles/RH3D/filament/Generic PETG @VIRTU E3.json b/resources/profiles/RH3D/filament/Generic PETG @VIRTU E3.json new file mode 100644 index 0000000000..2e39f9e1d9 --- /dev/null +++ b/resources/profiles/RH3D/filament/Generic PETG @VIRTU E3.json @@ -0,0 +1,16 @@ +{ + "type": "filament", + "name": "Generic PETG @VIRTU E3", + "inherits": "fdm_filament_petg", + "from": "system", + "setting_id": "OAN1Ozk75r0ODvVw", + "filament_id": "OFYPdQJh", + "instantiation": "true", + "compatible_printers": [ + "VIRTU E3 - 0.2 nozzle", + "VIRTU E3 - 0.3 nozzle", + "VIRTU E3 - 0.4 nozzle", + "VIRTU E3 - 0.5 nozzle", + "VIRTU E3 - 0.6 nozzle" + ] +} diff --git a/resources/profiles/RH3D/filament/Generic PLA @VIRTU E3.json b/resources/profiles/RH3D/filament/Generic PLA @VIRTU E3.json new file mode 100644 index 0000000000..394a92f0c8 --- /dev/null +++ b/resources/profiles/RH3D/filament/Generic PLA @VIRTU E3.json @@ -0,0 +1,16 @@ +{ + "type": "filament", + "name": "Generic PLA @VIRTU E3", + "inherits": "fdm_filament_pla", + "from": "system", + "setting_id": "DgSFTqNWfJEp0w9f", + "filament_id": "OFDSrzZ8", + "instantiation": "true", + "compatible_printers": [ + "VIRTU E3 - 0.2 nozzle", + "VIRTU E3 - 0.3 nozzle", + "VIRTU E3 - 0.4 nozzle", + "VIRTU E3 - 0.5 nozzle", + "VIRTU E3 - 0.6 nozzle" + ] +} diff --git a/resources/profiles/RH3D/filament/Generic TPU @VIRTU E3.json b/resources/profiles/RH3D/filament/Generic TPU @VIRTU E3.json new file mode 100644 index 0000000000..ff816313da --- /dev/null +++ b/resources/profiles/RH3D/filament/Generic TPU @VIRTU E3.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "name": "Generic TPU @VIRTU E3", + "inherits": "fdm_filament_tpu", + "from": "system", + "setting_id": "ifG0f5hgJ7L9zw34", + "filament_id": "OFgbpcy9", + "instantiation": "true", + "compatible_printers": [ + "VIRTU E3 - 0.4 nozzle", + "VIRTU E3 - 0.5 nozzle", + "VIRTU E3 - 0.6 nozzle" + ] +} diff --git a/resources/profiles/RH3D/filament/fdm_filament_abs.json b/resources/profiles/RH3D/filament/fdm_filament_abs.json index f4ab005733..2aab3d25ba 100644 --- a/resources/profiles/RH3D/filament/fdm_filament_abs.json +++ b/resources/profiles/RH3D/filament/fdm_filament_abs.json @@ -26,10 +26,10 @@ "55" ], "fan_cooling_layer_time": [ - "10" + "12" ], "filament_max_volumetric_speed": [ - "32" + "24" ], "filament_type": [ "ABS" @@ -75,9 +75,9 @@ "275" ], "slow_down_min_speed": [ - "10" + "20" ], "slow_down_layer_time": [ - "2" + "4" ] } diff --git a/resources/profiles/RH3D/filament/fdm_filament_asa.json b/resources/profiles/RH3D/filament/fdm_filament_asa.json index ac03beef13..cbf4f5dc36 100644 --- a/resources/profiles/RH3D/filament/fdm_filament_asa.json +++ b/resources/profiles/RH3D/filament/fdm_filament_asa.json @@ -26,10 +26,10 @@ "55" ], "fan_cooling_layer_time": [ - "10" + "12" ], "filament_max_volumetric_speed": [ - "32" + "24" ], "filament_type": [ "ASA" @@ -54,7 +54,7 @@ "50" ], "fan_min_speed": [ - "10" + "15" ], "overhang_fan_threshold": [ "25%" @@ -75,9 +75,9 @@ "275" ], "slow_down_min_speed": [ - "10" + "20" ], "slow_down_layer_time": [ - "2" + "4" ] } diff --git a/resources/profiles/RH3D/filament/fdm_filament_common.json b/resources/profiles/RH3D/filament/fdm_filament_common.json index 576ae24a48..fe143ce05b 100644 --- a/resources/profiles/RH3D/filament/fdm_filament_common.json +++ b/resources/profiles/RH3D/filament/fdm_filament_common.json @@ -22,7 +22,7 @@ "60" ], "overhang_fan_threshold": [ - "95%" + "25%" ], "overhang_fan_speed": [ "100" @@ -40,10 +40,10 @@ "1" ], "reduce_fan_stop_start_freq": [ - "0" + "1" ], "fan_cooling_layer_time": [ - "15" + "20" ], "filament_cost": [ "0" @@ -51,6 +51,9 @@ "filament_density": [ "0" ], + "filament_change_length": [ + "0" + ], "filament_deretraction_speed": [ "nil" ], @@ -61,7 +64,7 @@ "10" ], "filament_minimal_purge_on_wipe_tower": [ - "40" + "50" ], "filament_retraction_minimum_travel": [ "nil" @@ -115,13 +118,13 @@ "100" ], "fan_min_speed": [ - "10" + "20" ], "slow_down_min_speed": [ - "10" + "20" ], "slow_down_layer_time": [ - "3" + "7" ], "filament_start_gcode": [ "; Filament gcode\n" diff --git a/resources/profiles/RH3D/filament/fdm_filament_pccf.json b/resources/profiles/RH3D/filament/fdm_filament_pccf.json index 4296da76c5..401ab2eb23 100644 --- a/resources/profiles/RH3D/filament/fdm_filament_pccf.json +++ b/resources/profiles/RH3D/filament/fdm_filament_pccf.json @@ -26,7 +26,7 @@ "55" ], "fan_cooling_layer_time": [ - "10" + "12" ], "filament_max_volumetric_speed": [ "8" @@ -75,9 +75,9 @@ "330" ], "slow_down_min_speed": [ - "10" + "20" ], "slow_down_layer_time": [ - "2" + "4" ] } diff --git a/resources/profiles/RH3D/filament/fdm_filament_petg.json b/resources/profiles/RH3D/filament/fdm_filament_petg.json index aaa0f62357..8a69c94f7d 100644 --- a/resources/profiles/RH3D/filament/fdm_filament_petg.json +++ b/resources/profiles/RH3D/filament/fdm_filament_petg.json @@ -23,10 +23,10 @@ "90" ], "fan_cooling_layer_time": [ - "10" + "15" ], "filament_max_volumetric_speed": [ - "26" + "18" ], "filament_type": [ "PETG" @@ -72,9 +72,9 @@ "260" ], "slow_down_min_speed": [ - "12" + "20" ], "slow_down_layer_time": [ - "3" + "6" ] } diff --git a/resources/profiles/RH3D/filament/fdm_filament_pla.json b/resources/profiles/RH3D/filament/fdm_filament_pla.json index 873a78461b..770af83296 100644 --- a/resources/profiles/RH3D/filament/fdm_filament_pla.json +++ b/resources/profiles/RH3D/filament/fdm_filament_pla.json @@ -72,9 +72,9 @@ "250" ], "slow_down_min_speed": [ - "10" + "20" ], "slow_down_layer_time": [ - "6" + "8" ] } diff --git a/resources/profiles/RH3D/machine/VIRTU E3 - 0.2 nozzle.json b/resources/profiles/RH3D/machine/VIRTU E3 - 0.2 nozzle.json new file mode 100644 index 0000000000..8814f25e0c --- /dev/null +++ b/resources/profiles/RH3D/machine/VIRTU E3 - 0.2 nozzle.json @@ -0,0 +1,14 @@ +{ + "type": "machine", + "name": "VIRTU E3 - 0.2 nozzle", + "printer_model": "VIRTU E3", + "inherits": "fdm_common_VIRTU E3", + "from": "system", + "setting_id": "NEqwtUJ9txtcf1vY", + "instantiation": "true", + "default_print_profile": "0.10mm Standard @VIRTU E3", + "nozzle_diameter": [ + "0.2" + ], + "printer_variant": "0.2" +} diff --git a/resources/profiles/RH3D/machine/VIRTU E3 - 0.3 nozzle.json b/resources/profiles/RH3D/machine/VIRTU E3 - 0.3 nozzle.json new file mode 100644 index 0000000000..4c27b80bb8 --- /dev/null +++ b/resources/profiles/RH3D/machine/VIRTU E3 - 0.3 nozzle.json @@ -0,0 +1,14 @@ +{ + "type": "machine", + "name": "VIRTU E3 - 0.3 nozzle", + "printer_model": "VIRTU E3", + "inherits": "fdm_common_VIRTU E3", + "from": "system", + "setting_id": "3PjlEiZxmdLJjoGw", + "instantiation": "true", + "default_print_profile": "0.15mm Standard @VIRTU E3", + "nozzle_diameter": [ + "0.3" + ], + "printer_variant": "0.3" +} diff --git a/resources/profiles/RH3D/machine/VIRTU E3 - 0.4 nozzle.json b/resources/profiles/RH3D/machine/VIRTU E3 - 0.4 nozzle.json new file mode 100644 index 0000000000..7b02993a2b --- /dev/null +++ b/resources/profiles/RH3D/machine/VIRTU E3 - 0.4 nozzle.json @@ -0,0 +1,14 @@ +{ + "type": "machine", + "name": "VIRTU E3 - 0.4 nozzle", + "printer_model": "VIRTU E3", + "inherits": "fdm_common_VIRTU E3", + "from": "system", + "setting_id": "mYCTx4ovF6z0STDL", + "instantiation": "true", + "default_print_profile": "0.20mm Standard @VIRTU E3", + "nozzle_diameter": [ + "0.4" + ], + "printer_variant": "0.4" +} diff --git a/resources/profiles/RH3D/machine/VIRTU E3 - 0.5 nozzle.json b/resources/profiles/RH3D/machine/VIRTU E3 - 0.5 nozzle.json new file mode 100644 index 0000000000..660dd35305 --- /dev/null +++ b/resources/profiles/RH3D/machine/VIRTU E3 - 0.5 nozzle.json @@ -0,0 +1,14 @@ +{ + "type": "machine", + "name": "VIRTU E3 - 0.5 nozzle", + "printer_model": "VIRTU E3", + "inherits": "fdm_common_VIRTU E3", + "from": "system", + "setting_id": "iMnENFt2zw6UTcbM", + "instantiation": "true", + "default_print_profile": "0.20mm Standard @VIRTU E3", + "nozzle_diameter": [ + "0.5" + ], + "printer_variant": "0.5" +} diff --git a/resources/profiles/RH3D/machine/VIRTU E3 - 0.6 nozzle.json b/resources/profiles/RH3D/machine/VIRTU E3 - 0.6 nozzle.json new file mode 100644 index 0000000000..bce4e91736 --- /dev/null +++ b/resources/profiles/RH3D/machine/VIRTU E3 - 0.6 nozzle.json @@ -0,0 +1,14 @@ +{ + "type": "machine", + "name": "VIRTU E3 - 0.6 nozzle", + "printer_model": "VIRTU E3", + "inherits": "fdm_common_VIRTU E3", + "from": "system", + "setting_id": "T1RuDWhyFkI1GH1h", + "instantiation": "true", + "default_print_profile": "0.25mm Standard @VIRTU E3", + "nozzle_diameter": [ + "0.6" + ], + "printer_variant": "0.6" +} diff --git a/resources/profiles/RH3D/machine/VIRTU E3.json b/resources/profiles/RH3D/machine/VIRTU E3.json new file mode 100644 index 0000000000..f34fa3aefe --- /dev/null +++ b/resources/profiles/RH3D/machine/VIRTU E3.json @@ -0,0 +1,12 @@ +{ + "type": "machine_model", + "name": "VIRTU E3", + "nozzle_diameter": "0.2;0.3;0.4;0.5;0.6", + "bed_model": "VIRTU-bed.stl", + "bed_texture": "VIRTU-bed-texture.svg", + "model_id": "VIRTUE3", + "family": "RH3D", + "hotend_model": "", + "machine_tech": "FFF", + "default_materials": "Generic ABS @VIRTU E3;Generic ASA @VIRTU E3;Generic PCCF @VIRTU E3;Generic PETG @VIRTU E3;Generic PLA @VIRTU E3;Generic TPU @VIRTU E3" +} diff --git a/resources/profiles/RH3D/machine/fdm_common_E3NG v1.2S.json b/resources/profiles/RH3D/machine/fdm_common_E3NG v1.2S.json index 0b952c73f3..8479a4e451 100644 --- a/resources/profiles/RH3D/machine/fdm_common_E3NG v1.2S.json +++ b/resources/profiles/RH3D/machine/fdm_common_E3NG v1.2S.json @@ -7,6 +7,7 @@ "extruder_clearance_height_to_lid": "140", "extruder_clearance_height_to_rod": "36", "extruder_clearance_radius": "65", + "default_filament_profile": "Generic PLA @E3NG v1.2S", "machine_max_acceleration_e": [ "7500", "7500" @@ -40,12 +41,12 @@ "25" ], "machine_max_speed_x": [ - "400", - "400" + "600", + "600" ], "machine_max_speed_y": [ - "400", - "400" + "600", + "600" ], "machine_max_speed_z": [ "12", diff --git a/resources/profiles/RH3D/machine/fdm_common_VIRTU E3.json b/resources/profiles/RH3D/machine/fdm_common_VIRTU E3.json new file mode 100644 index 0000000000..e825838811 --- /dev/null +++ b/resources/profiles/RH3D/machine/fdm_common_VIRTU E3.json @@ -0,0 +1,71 @@ +{ + "type": "machine", + "name": "fdm_common_VIRTU E3", + "inherits": "fdm_machine_common", + "from": "system", + "instantiation": "false", + "extruder_clearance_height_to_lid": "140", + "extruder_clearance_height_to_rod": "36", + "extruder_clearance_radius": "65", + "default_filament_profile": "Generic PLA @VIRTU E3", + "machine_max_acceleration_e": [ + "7500", + "7500" + ], + "machine_max_acceleration_extruding": [ + "35000", + "35000" + ], + "machine_max_acceleration_retracting": [ + "35000", + "35000" + ], + "machine_max_acceleration_travel": [ + "10000", + "10000" + ], + "machine_max_acceleration_x": [ + "35000", + "35000" + ], + "machine_max_acceleration_y": [ + "35000", + "35000" + ], + "machine_max_acceleration_z": [ + "2000", + "2000" + ], + "machine_max_speed_e": [ + "25", + "25" + ], + "machine_max_speed_x": [ + "900", + "900" + ], + "machine_max_speed_y": [ + "900", + "900" + ], + "machine_max_speed_z": [ + "400", + "400" + ], + "printable_area": [ + "0x0", + "230x0", + "230x232", + "0x232" + ], + "printable_height": "232", + "printer_model": "VIRTU E3", + "printer_notes": [ + "Design by RH3D" + ], + "retract_before_wipe": "80%", + "retract_length_toolchange": "0", + "retract_lift_below": "230", + "retraction_minimum_travel": "1.5", + "travel_slope": "1" +} diff --git a/resources/profiles/RH3D/machine/fdm_machine_common.json b/resources/profiles/RH3D/machine/fdm_machine_common.json index 4a3245b701..0f23916d97 100644 --- a/resources/profiles/RH3D/machine/fdm_machine_common.json +++ b/resources/profiles/RH3D/machine/fdm_machine_common.json @@ -5,12 +5,11 @@ "instantiation": "false", "printer_structure": "corexy", "gcode_flavor": "klipper", - "machine_start_gcode": "M104 S0 ; Stops OrcaSlicer from sending temp waits separately\nM140 S0\nPRINT_START EXTRUDER=[first_layer_temperature] BED=[first_layer_bed_temperature]\n; Start of actual GCode for the print", + "machine_start_gcode": "M104 S0 ; Stops OrcaSlicer from sending temp waits separately\nM140 S0\nPRINT_START EXTRUDER=[first_layer_temperature] BED=[first_layer_bed_temperature] CHAMBER=[chamber_temperature] PROFILE=[notes]\n; Start of actual GCode for the print", "machine_end_gcode": "PRINT_END", "extruder_colour": "#02aba2", "extruder_offset": "0x0", "emit_machine_limits_to_gcode": "0", - "default_filament_profile": "Generic PLA @E3NG v1.2S", "machine_min_extruding_rate": [ "0", "0" @@ -47,7 +46,7 @@ "320x240/PNG", "640x480/PNG" ], - "change_filament_gcode": "PAUSE\nG1 E1.0 F300 ; prime after color change", + "change_filament_gcode": "G1 E1.0 F300 ; prime after color change", "before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\nG92 E0", "layer_change_gcode": ";AFTER_LAYER_CHANGE", "machine_pause_gcode": "PAUSE\n", diff --git a/resources/profiles/RH3D/process/0.10mm Fast @E3NG v1.2S.json b/resources/profiles/RH3D/process/0.10mm Fast @E3NG v1.2S.json new file mode 100644 index 0000000000..f8103a4582 --- /dev/null +++ b/resources/profiles/RH3D/process/0.10mm Fast @E3NG v1.2S.json @@ -0,0 +1,15 @@ +{ + "type": "process", + "name": "0.10mm Fast @E3NG v1.2S", + "inherits": "process_Fast_E3NG v1.2S", + "from": "system", + "setting_id": "zaYFBkbfYXxSz5eU", + "instantiation": "true", + "layer_height": "0.1", + "initial_layer_print_height": "0.15", + "compatible_printers": [ + "E3NG v1.2S - 0.2 nozzle", + "E3NG v1.2S - 0.3 nozzle", + "E3NG v1.2S - 0.4 nozzle" + ] +} diff --git a/resources/profiles/RH3D/process/0.10mm Fast @VIRTU E3.json b/resources/profiles/RH3D/process/0.10mm Fast @VIRTU E3.json new file mode 100644 index 0000000000..a72467ecfd --- /dev/null +++ b/resources/profiles/RH3D/process/0.10mm Fast @VIRTU E3.json @@ -0,0 +1,15 @@ +{ + "type": "process", + "name": "0.10mm Fast @VIRTU E3", + "inherits": "process_Fast_VIRTU E3", + "from": "system", + "setting_id": "nWpKy9NYLGggsHlM", + "instantiation": "true", + "layer_height": "0.1", + "initial_layer_print_height": "0.15", + "compatible_printers": [ + "VIRTU E3 - 0.2 nozzle", + "VIRTU E3 - 0.3 nozzle", + "VIRTU E3 - 0.4 nozzle" + ] +} diff --git a/resources/profiles/RH3D/process/0.10mm Slow @E3NG v1.2S.json b/resources/profiles/RH3D/process/0.10mm Slow @E3NG v1.2S.json new file mode 100644 index 0000000000..c853471ef9 --- /dev/null +++ b/resources/profiles/RH3D/process/0.10mm Slow @E3NG v1.2S.json @@ -0,0 +1,15 @@ +{ + "type": "process", + "name": "0.10mm Slow @E3NG v1.2S", + "inherits": "process_Slow_E3NG v1.2S", + "from": "system", + "setting_id": "W35S1kwfonBFrHAy", + "instantiation": "true", + "layer_height": "0.1", + "initial_layer_print_height": "0.15", + "compatible_printers": [ + "E3NG v1.2S - 0.2 nozzle", + "E3NG v1.2S - 0.3 nozzle", + "E3NG v1.2S - 0.4 nozzle" + ] +} diff --git a/resources/profiles/RH3D/process/0.10mm Slow @VIRTU E3.json b/resources/profiles/RH3D/process/0.10mm Slow @VIRTU E3.json new file mode 100644 index 0000000000..5c33e2e8f8 --- /dev/null +++ b/resources/profiles/RH3D/process/0.10mm Slow @VIRTU E3.json @@ -0,0 +1,15 @@ +{ + "type": "process", + "name": "0.10mm Slow @VIRTU E3", + "inherits": "process_Slow_VIRTU E3", + "from": "system", + "setting_id": "br9ISgiSBZTgKEqn", + "instantiation": "true", + "layer_height": "0.1", + "initial_layer_print_height": "0.15", + "compatible_printers": [ + "VIRTU E3 - 0.2 nozzle", + "VIRTU E3 - 0.3 nozzle", + "VIRTU E3 - 0.4 nozzle" + ] +} diff --git a/resources/profiles/RH3D/process/0.10mm Standard @E3NG v1.2S.json b/resources/profiles/RH3D/process/0.10mm Standard @E3NG v1.2S.json index dcaecb6b0b..86e7415897 100644 --- a/resources/profiles/RH3D/process/0.10mm Standard @E3NG v1.2S.json +++ b/resources/profiles/RH3D/process/0.10mm Standard @E3NG v1.2S.json @@ -1,7 +1,7 @@ { "type": "process", "name": "0.10mm Standard @E3NG v1.2S", - "inherits": "process_common_E3NG v1.2S", + "inherits": "process_Standard_E3NG v1.2S", "from": "system", "setting_id": "YhKounYUzB4FB9Em", "instantiation": "true", diff --git a/resources/profiles/RH3D/process/0.10mm Standard @VIRTU E3.json b/resources/profiles/RH3D/process/0.10mm Standard @VIRTU E3.json new file mode 100644 index 0000000000..675d8b3646 --- /dev/null +++ b/resources/profiles/RH3D/process/0.10mm Standard @VIRTU E3.json @@ -0,0 +1,15 @@ +{ + "type": "process", + "name": "0.10mm Standard @VIRTU E3", + "inherits": "process_Standard_VIRTU E3", + "from": "system", + "setting_id": "qf2uqEsVBJLb87TW", + "instantiation": "true", + "layer_height": "0.1", + "initial_layer_print_height": "0.15", + "compatible_printers": [ + "VIRTU E3 - 0.2 nozzle", + "VIRTU E3 - 0.3 nozzle", + "VIRTU E3 - 0.4 nozzle" + ] +} diff --git a/resources/profiles/RH3D/process/0.15mm Fast @E3NG v1.2S.json b/resources/profiles/RH3D/process/0.15mm Fast @E3NG v1.2S.json new file mode 100644 index 0000000000..8a301ed822 --- /dev/null +++ b/resources/profiles/RH3D/process/0.15mm Fast @E3NG v1.2S.json @@ -0,0 +1,16 @@ +{ + "type": "process", + "name": "0.15mm Fast @E3NG v1.2S", + "inherits": "process_Fast_E3NG v1.2S", + "from": "system", + "setting_id": "O4zDtFKxom68L07o", + "instantiation": "true", + "layer_height": "0.15", + "initial_layer_print_height": "0.2", + "compatible_printers": [ + "E3NG v1.2S - 0.2 nozzle", + "E3NG v1.2S - 0.3 nozzle", + "E3NG v1.2S - 0.4 nozzle", + "E3NG v1.2S - 0.5 nozzle" + ] +} diff --git a/resources/profiles/RH3D/process/0.15mm Fast @VIRTU E3.json b/resources/profiles/RH3D/process/0.15mm Fast @VIRTU E3.json new file mode 100644 index 0000000000..8c4040d1bb --- /dev/null +++ b/resources/profiles/RH3D/process/0.15mm Fast @VIRTU E3.json @@ -0,0 +1,16 @@ +{ + "type": "process", + "name": "0.15mm Fast @VIRTU E3", + "inherits": "process_Fast_VIRTU E3", + "from": "system", + "setting_id": "G0HkboSFDavmOAU4", + "instantiation": "true", + "layer_height": "0.15", + "initial_layer_print_height": "0.2", + "compatible_printers": [ + "VIRTU E3 - 0.2 nozzle", + "VIRTU E3 - 0.3 nozzle", + "VIRTU E3 - 0.4 nozzle", + "VIRTU E3 - 0.5 nozzle" + ] +} diff --git a/resources/profiles/RH3D/process/0.15mm Slow @E3NG v1.2S.json b/resources/profiles/RH3D/process/0.15mm Slow @E3NG v1.2S.json new file mode 100644 index 0000000000..f3693f8cbb --- /dev/null +++ b/resources/profiles/RH3D/process/0.15mm Slow @E3NG v1.2S.json @@ -0,0 +1,16 @@ +{ + "type": "process", + "name": "0.15mm Slow @E3NG v1.2S", + "inherits": "process_Slow_E3NG v1.2S", + "from": "system", + "setting_id": "zfmqi9qahym79w71", + "instantiation": "true", + "layer_height": "0.15", + "initial_layer_print_height": "0.2", + "compatible_printers": [ + "E3NG v1.2S - 0.2 nozzle", + "E3NG v1.2S - 0.3 nozzle", + "E3NG v1.2S - 0.4 nozzle", + "E3NG v1.2S - 0.5 nozzle" + ] +} diff --git a/resources/profiles/RH3D/process/0.15mm Slow @VIRTU E3.json b/resources/profiles/RH3D/process/0.15mm Slow @VIRTU E3.json new file mode 100644 index 0000000000..bac33744bb --- /dev/null +++ b/resources/profiles/RH3D/process/0.15mm Slow @VIRTU E3.json @@ -0,0 +1,16 @@ +{ + "type": "process", + "name": "0.15mm Slow @VIRTU E3", + "inherits": "process_Slow_VIRTU E3", + "from": "system", + "setting_id": "6RvsW4p0AVsAXYlf", + "instantiation": "true", + "layer_height": "0.15", + "initial_layer_print_height": "0.2", + "compatible_printers": [ + "VIRTU E3 - 0.2 nozzle", + "VIRTU E3 - 0.3 nozzle", + "VIRTU E3 - 0.4 nozzle", + "VIRTU E3 - 0.5 nozzle" + ] +} diff --git a/resources/profiles/RH3D/process/0.15mm Standard @E3NG v1.2S.json b/resources/profiles/RH3D/process/0.15mm Standard @E3NG v1.2S.json index deaded91ab..0c1a8367a8 100644 --- a/resources/profiles/RH3D/process/0.15mm Standard @E3NG v1.2S.json +++ b/resources/profiles/RH3D/process/0.15mm Standard @E3NG v1.2S.json @@ -1,7 +1,7 @@ { "type": "process", "name": "0.15mm Standard @E3NG v1.2S", - "inherits": "process_common_E3NG v1.2S", + "inherits": "process_Standard_E3NG v1.2S", "from": "system", "setting_id": "jYPd3BedSG1oG6S3", "instantiation": "true", diff --git a/resources/profiles/RH3D/process/0.15mm Standard @VIRTU E3.json b/resources/profiles/RH3D/process/0.15mm Standard @VIRTU E3.json new file mode 100644 index 0000000000..de6a3e1ddf --- /dev/null +++ b/resources/profiles/RH3D/process/0.15mm Standard @VIRTU E3.json @@ -0,0 +1,16 @@ +{ + "type": "process", + "name": "0.15mm Standard @VIRTU E3", + "inherits": "process_Standard_VIRTU E3", + "from": "system", + "setting_id": "NFY8TFxasqh2wUvX", + "instantiation": "true", + "layer_height": "0.15", + "initial_layer_print_height": "0.2", + "compatible_printers": [ + "VIRTU E3 - 0.2 nozzle", + "VIRTU E3 - 0.3 nozzle", + "VIRTU E3 - 0.4 nozzle", + "VIRTU E3 - 0.5 nozzle" + ] +} diff --git a/resources/profiles/RH3D/process/0.20mm Fast @E3NG v1.2S.json b/resources/profiles/RH3D/process/0.20mm Fast @E3NG v1.2S.json index bca60006c4..61fd819a39 100644 --- a/resources/profiles/RH3D/process/0.20mm Fast @E3NG v1.2S.json +++ b/resources/profiles/RH3D/process/0.20mm Fast @E3NG v1.2S.json @@ -1,49 +1,16 @@ { "type": "process", "name": "0.20mm Fast @E3NG v1.2S", - "inherits": "process_common_E3NG v1.2S", + "inherits": "process_Fast_E3NG v1.2S", "from": "system", "setting_id": "S7z7EwSYYbjVWRK0", "instantiation": "true", "layer_height": "0.2", "initial_layer_print_height": "0.2", "compatible_printers": [ + "E3NG v1.2S - 0.3 nozzle", "E3NG v1.2S - 0.4 nozzle", "E3NG v1.2S - 0.5 nozzle", "E3NG v1.2S - 0.6 nozzle" - ], - "reduce_crossing_wall": "0", - "bridge_speed": "75", - "default_acceleration": "10000", - "initial_layer_acceleration": "7500", - "top_surface_acceleration": "7500", - "travel_acceleration": "10000", - "inner_wall_acceleration": "10000", - "outer_wall_acceleration": "7500", - "bridge_acceleration": "5000", - "sparse_infill_acceleration": "12500", - "internal_solid_infill_acceleration": "10000", - "infill_combination": "1", - "ironing_speed": "150", - "overhang_1_4_speed": "100", - "overhang_2_4_speed": "50", - "overhang_3_4_speed": "30", - "overhang_4_4_speed": "15", - "support_interface_speed": "120", - "top_surface_line_width": "100%", - "sparse_infill_line_width": "125%", - "internal_solid_infill_line_width": "125%", - "seam_position": "nearest", - "initial_layer_speed": "100", - "initial_layer_infill_speed": "150", - "outer_wall_speed": "300", - "inner_wall_speed": "340", - "small_perimeter_speed": "300", - "sparse_infill_speed": "400", - "internal_solid_infill_speed": "340", - "top_surface_speed": "300", - "gap_infill_speed": "300", - "travel_speed": "400", - "only_one_wall_top": "0", - "only_one_wall_first_layer": "0" + ] } diff --git a/resources/profiles/RH3D/process/0.20mm Fast @VIRTU E3.json b/resources/profiles/RH3D/process/0.20mm Fast @VIRTU E3.json new file mode 100644 index 0000000000..1c182fd117 --- /dev/null +++ b/resources/profiles/RH3D/process/0.20mm Fast @VIRTU E3.json @@ -0,0 +1,16 @@ +{ + "type": "process", + "name": "0.20mm Fast @VIRTU E3", + "inherits": "process_Fast_VIRTU E3", + "from": "system", + "setting_id": "cSol8x6vF51GUloq", + "instantiation": "true", + "layer_height": "0.2", + "initial_layer_print_height": "0.2", + "compatible_printers": [ + "VIRTU E3 - 0.3 nozzle", + "VIRTU E3 - 0.4 nozzle", + "VIRTU E3 - 0.5 nozzle", + "VIRTU E3 - 0.6 nozzle" + ] +} diff --git a/resources/profiles/RH3D/process/0.20mm Slow @E3NG v1.2S.json b/resources/profiles/RH3D/process/0.20mm Slow @E3NG v1.2S.json index 45be150670..4894fc3637 100644 --- a/resources/profiles/RH3D/process/0.20mm Slow @E3NG v1.2S.json +++ b/resources/profiles/RH3D/process/0.20mm Slow @E3NG v1.2S.json @@ -1,49 +1,16 @@ { "type": "process", "name": "0.20mm Slow @E3NG v1.2S", - "inherits": "process_common_E3NG v1.2S", + "inherits": "process_Slow_E3NG v1.2S", "from": "system", "setting_id": "JH4jITLGT8tbtnu1", "instantiation": "true", "layer_height": "0.2", "initial_layer_print_height": "0.2", "compatible_printers": [ + "E3NG v1.2S - 0.3 nozzle", "E3NG v1.2S - 0.4 nozzle", "E3NG v1.2S - 0.5 nozzle", "E3NG v1.2S - 0.6 nozzle" - ], - "reduce_crossing_wall": "1", - "bridge_speed": "40", - "default_acceleration": "3000", - "initial_layer_acceleration": "3000", - "top_surface_acceleration": "2000", - "travel_acceleration": "3000", - "inner_wall_acceleration": "3000", - "outer_wall_acceleration": "3000", - "bridge_acceleration": "2000", - "sparse_infill_acceleration": "4000", - "internal_solid_infill_acceleration": "3000", - "infill_combination": "0", - "ironing_speed": "80", - "overhang_1_4_speed": "60", - "overhang_2_4_speed": "35", - "overhang_3_4_speed": "20", - "overhang_4_4_speed": "8", - "support_interface_speed": "60", - "top_surface_line_width": "100%", - "sparse_infill_line_width": "125%", - "internal_solid_infill_line_width": "125%", - "seam_position": "aligned", - "initial_layer_speed": "60", - "initial_layer_infill_speed": "75", - "outer_wall_speed": "140", - "inner_wall_speed": "140", - "small_perimeter_speed": "140", - "sparse_infill_speed": "140", - "internal_solid_infill_speed": "140", - "top_surface_speed": "140", - "gap_infill_speed": "140", - "travel_speed": "400", - "only_one_wall_top": "1", - "only_one_wall_first_layer": "1" + ] } diff --git a/resources/profiles/RH3D/process/0.20mm Slow @VIRTU E3.json b/resources/profiles/RH3D/process/0.20mm Slow @VIRTU E3.json new file mode 100644 index 0000000000..1ee87921aa --- /dev/null +++ b/resources/profiles/RH3D/process/0.20mm Slow @VIRTU E3.json @@ -0,0 +1,16 @@ +{ + "type": "process", + "name": "0.20mm Slow @VIRTU E3", + "inherits": "process_Slow_VIRTU E3", + "from": "system", + "setting_id": "NlGjHdIRQnp9PCfc", + "instantiation": "true", + "layer_height": "0.2", + "initial_layer_print_height": "0.2", + "compatible_printers": [ + "VIRTU E3 - 0.3 nozzle", + "VIRTU E3 - 0.4 nozzle", + "VIRTU E3 - 0.5 nozzle", + "VIRTU E3 - 0.6 nozzle" + ] +} diff --git a/resources/profiles/RH3D/process/0.20mm Standard @E3NG v1.2S.json b/resources/profiles/RH3D/process/0.20mm Standard @E3NG v1.2S.json index 92ddcd9109..95b149cfba 100644 --- a/resources/profiles/RH3D/process/0.20mm Standard @E3NG v1.2S.json +++ b/resources/profiles/RH3D/process/0.20mm Standard @E3NG v1.2S.json @@ -1,10 +1,12 @@ { "type": "process", "name": "0.20mm Standard @E3NG v1.2S", - "inherits": "process_common_E3NG v1.2S", + "inherits": "process_Standard_E3NG v1.2S", "from": "system", "setting_id": "XgaEHNWBsBQoPjbP", "instantiation": "true", + "layer_height": "0.2", + "initial_layer_print_height": "0.2", "compatible_printers": [ "E3NG v1.2S - 0.3 nozzle", "E3NG v1.2S - 0.4 nozzle", diff --git a/resources/profiles/RH3D/process/0.20mm Standard @VIRTU E3.json b/resources/profiles/RH3D/process/0.20mm Standard @VIRTU E3.json new file mode 100644 index 0000000000..ad7ac64a0b --- /dev/null +++ b/resources/profiles/RH3D/process/0.20mm Standard @VIRTU E3.json @@ -0,0 +1,16 @@ +{ + "type": "process", + "name": "0.20mm Standard @VIRTU E3", + "inherits": "process_Standard_VIRTU E3", + "from": "system", + "setting_id": "F0hx03mNji9yec5G", + "instantiation": "true", + "layer_height": "0.2", + "initial_layer_print_height": "0.2", + "compatible_printers": [ + "VIRTU E3 - 0.3 nozzle", + "VIRTU E3 - 0.4 nozzle", + "VIRTU E3 - 0.5 nozzle", + "VIRTU E3 - 0.6 nozzle" + ] +} diff --git a/resources/profiles/RH3D/process/0.25mm Fast @E3NG v1.2S.json b/resources/profiles/RH3D/process/0.25mm Fast @E3NG v1.2S.json index bf910f676a..f9442067d1 100644 --- a/resources/profiles/RH3D/process/0.25mm Fast @E3NG v1.2S.json +++ b/resources/profiles/RH3D/process/0.25mm Fast @E3NG v1.2S.json @@ -1,7 +1,7 @@ { "type": "process", "name": "0.25mm Fast @E3NG v1.2S", - "inherits": "process_common_E3NG v1.2S", + "inherits": "process_Fast_E3NG v1.2S", "from": "system", "setting_id": "QqkHiZPjk3QWyKKN", "instantiation": "true", @@ -11,39 +11,5 @@ "E3NG v1.2S - 0.4 nozzle", "E3NG v1.2S - 0.5 nozzle", "E3NG v1.2S - 0.6 nozzle" - ], - "reduce_crossing_wall": "0", - "bridge_speed": "75", - "default_acceleration": "10000", - "initial_layer_acceleration": "7500", - "top_surface_acceleration": "7500", - "travel_acceleration": "10000", - "inner_wall_acceleration": "10000", - "outer_wall_acceleration": "7500", - "bridge_acceleration": "5000", - "sparse_infill_acceleration": "12500", - "internal_solid_infill_acceleration": "10000", - "infill_combination": "1", - "ironing_speed": "150", - "overhang_1_4_speed": "100", - "overhang_2_4_speed": "50", - "overhang_3_4_speed": "30", - "overhang_4_4_speed": "15", - "support_interface_speed": "120", - "top_surface_line_width": "100%", - "sparse_infill_line_width": "125%", - "internal_solid_infill_line_width": "125%", - "seam_position": "nearest", - "initial_layer_speed": "100", - "initial_layer_infill_speed": "150", - "outer_wall_speed": "300", - "inner_wall_speed": "340", - "small_perimeter_speed": "300", - "sparse_infill_speed": "400", - "internal_solid_infill_speed": "340", - "top_surface_speed": "300", - "gap_infill_speed": "300", - "travel_speed": "400", - "only_one_wall_top": "0", - "only_one_wall_first_layer": "0" + ] } diff --git a/resources/profiles/RH3D/process/0.25mm Fast @VIRTU E3.json b/resources/profiles/RH3D/process/0.25mm Fast @VIRTU E3.json new file mode 100644 index 0000000000..0e6c3ef6eb --- /dev/null +++ b/resources/profiles/RH3D/process/0.25mm Fast @VIRTU E3.json @@ -0,0 +1,15 @@ +{ + "type": "process", + "name": "0.25mm Fast @VIRTU E3", + "inherits": "process_Fast_VIRTU E3", + "from": "system", + "setting_id": "MyqBOD8a6YOpgm8h", + "instantiation": "true", + "layer_height": "0.25", + "initial_layer_print_height": "0.25", + "compatible_printers": [ + "VIRTU E3 - 0.4 nozzle", + "VIRTU E3 - 0.5 nozzle", + "VIRTU E3 - 0.6 nozzle" + ] +} diff --git a/resources/profiles/RH3D/process/0.25mm Slow @E3NG v1.2S.json b/resources/profiles/RH3D/process/0.25mm Slow @E3NG v1.2S.json new file mode 100644 index 0000000000..65de472eec --- /dev/null +++ b/resources/profiles/RH3D/process/0.25mm Slow @E3NG v1.2S.json @@ -0,0 +1,15 @@ +{ + "type": "process", + "name": "0.25mm Slow @E3NG v1.2S", + "inherits": "process_Slow_E3NG v1.2S", + "from": "system", + "setting_id": "7sr967Tgq1J3qxTG", + "instantiation": "true", + "layer_height": "0.25", + "initial_layer_print_height": "0.25", + "compatible_printers": [ + "E3NG v1.2S - 0.4 nozzle", + "E3NG v1.2S - 0.5 nozzle", + "E3NG v1.2S - 0.6 nozzle" + ] +} diff --git a/resources/profiles/RH3D/process/0.25mm Slow @VIRTU E3.json b/resources/profiles/RH3D/process/0.25mm Slow @VIRTU E3.json new file mode 100644 index 0000000000..36ef0d460f --- /dev/null +++ b/resources/profiles/RH3D/process/0.25mm Slow @VIRTU E3.json @@ -0,0 +1,15 @@ +{ + "type": "process", + "name": "0.25mm Slow @VIRTU E3", + "inherits": "process_Slow_VIRTU E3", + "from": "system", + "setting_id": "BqoOYOcFMFNbkpAb", + "instantiation": "true", + "layer_height": "0.25", + "initial_layer_print_height": "0.25", + "compatible_printers": [ + "VIRTU E3 - 0.4 nozzle", + "VIRTU E3 - 0.5 nozzle", + "VIRTU E3 - 0.6 nozzle" + ] +} diff --git a/resources/profiles/RH3D/process/0.25mm Standard @E3NG v1.2S.json b/resources/profiles/RH3D/process/0.25mm Standard @E3NG v1.2S.json index 5ebe88f3fe..4234924db2 100644 --- a/resources/profiles/RH3D/process/0.25mm Standard @E3NG v1.2S.json +++ b/resources/profiles/RH3D/process/0.25mm Standard @E3NG v1.2S.json @@ -1,7 +1,7 @@ { "type": "process", "name": "0.25mm Standard @E3NG v1.2S", - "inherits": "process_common_E3NG v1.2S", + "inherits": "process_Standard_E3NG v1.2S", "from": "system", "setting_id": "2dPD9ljxZ8hknXZu", "instantiation": "true", diff --git a/resources/profiles/RH3D/process/0.25mm Standard @VIRTU E3.json b/resources/profiles/RH3D/process/0.25mm Standard @VIRTU E3.json new file mode 100644 index 0000000000..3aa8db5be4 --- /dev/null +++ b/resources/profiles/RH3D/process/0.25mm Standard @VIRTU E3.json @@ -0,0 +1,15 @@ +{ + "type": "process", + "name": "0.25mm Standard @VIRTU E3", + "inherits": "process_Standard_VIRTU E3", + "from": "system", + "setting_id": "uKXPx0hfphTLXfmI", + "instantiation": "true", + "layer_height": "0.25", + "initial_layer_print_height": "0.25", + "compatible_printers": [ + "VIRTU E3 - 0.4 nozzle", + "VIRTU E3 - 0.5 nozzle", + "VIRTU E3 - 0.6 nozzle" + ] +} diff --git a/resources/profiles/RH3D/process/fdm_process_common.json b/resources/profiles/RH3D/process/fdm_process_common.json index 4f02e37fa6..0f5087af8c 100644 --- a/resources/profiles/RH3D/process/fdm_process_common.json +++ b/resources/profiles/RH3D/process/fdm_process_common.json @@ -8,6 +8,7 @@ "bottom_surface_pattern": "monotonicline", "bottom_shell_thickness": "0", "bridge_speed": "50", + "brim_type": "no_brim", "brim_width": "0", "brim_object_gap": "0.1", "compatible_printers": [], @@ -22,6 +23,8 @@ "bridge_acceleration": "2500", "sparse_infill_acceleration": "8000", "internal_solid_infill_acceleration": "5000", + "accel_to_decel_enable": "0", + "accel_to_decel_factor": "100%", "bridge_no_support": "0", "draft_shield": "disabled", "elefant_foot_compensation": "0.1", @@ -41,8 +44,8 @@ "reduce_infill_retraction": "1", "filename_format": "{input_filename_base}_{filament_type[0]}_{print_time}_{printer_model}.gcode", "detect_overhang_wall": "1", - "slowdown_for_curled_perimeters": "1", - "overhang_1_4_speed": "70", + "slowdown_for_curled_perimeters": "0", + "overhang_1_4_speed": "0", "overhang_2_4_speed": "40", "overhang_3_4_speed": "25", "overhang_4_4_speed": "10", @@ -102,7 +105,7 @@ "initial_layer_infill_speed": "100", "outer_wall_speed": "220", "inner_wall_speed": "220", - "small_perimeter_speed": "220", + "small_perimeter_speed": "50%", "sparse_infill_speed": "300", "internal_solid_infill_speed": "220", "top_surface_speed": "180", diff --git a/resources/profiles/RH3D/process/process_Fast_E3NG v1.2S.json b/resources/profiles/RH3D/process/process_Fast_E3NG v1.2S.json new file mode 100644 index 0000000000..73d0ae5202 --- /dev/null +++ b/resources/profiles/RH3D/process/process_Fast_E3NG v1.2S.json @@ -0,0 +1,42 @@ +{ + "type": "process", + "name": "process_Fast_E3NG v1.2S", + "inherits": "fdm_process_common", + "from": "system", + "instantiation": "false", + "reduce_crossing_wall": "0", + "bridge_speed": "75", + "default_acceleration": "10000", + "initial_layer_acceleration": "7500", + "top_surface_acceleration": "7500", + "travel_acceleration": "10000", + "inner_wall_acceleration": "10000", + "outer_wall_acceleration": "7500", + "bridge_acceleration": "5000", + "sparse_infill_acceleration": "12500", + "internal_solid_infill_acceleration": "10000", + "infill_combination": "0", + "ironing_speed": "150", + "overhang_1_4_speed": "100", + "overhang_2_4_speed": "50", + "overhang_3_4_speed": "30", + "overhang_4_4_speed": "15", + "support_interface_speed": "120", + "top_surface_line_width": "100%", + "sparse_infill_line_width": "125%", + "internal_solid_infill_line_width": "125%", + "seam_position": "nearest", + "initial_layer_speed": "100", + "initial_layer_infill_speed": "150", + "outer_wall_speed": "300", + "inner_wall_speed": "340", + "small_perimeter_speed": "300", + "sparse_infill_speed": "400", + "internal_solid_infill_speed": "340", + "top_surface_speed": "300", + "gap_infill_speed": "300", + "travel_speed": "400", + "only_one_wall_top": "0", + "only_one_wall_first_layer": "0", + "notes": "fast" +} diff --git a/resources/profiles/RH3D/process/process_Fast_VIRTU E3.json b/resources/profiles/RH3D/process/process_Fast_VIRTU E3.json new file mode 100644 index 0000000000..b981150596 --- /dev/null +++ b/resources/profiles/RH3D/process/process_Fast_VIRTU E3.json @@ -0,0 +1,42 @@ +{ + "type": "process", + "name": "process_Fast_VIRTU E3", + "inherits": "fdm_process_common", + "from": "system", + "instantiation": "false", + "reduce_crossing_wall": "0", + "bridge_speed": "75", + "default_acceleration": "20000", + "initial_layer_acceleration": "15000", + "top_surface_acceleration": "15000", + "travel_acceleration": "15000", + "inner_wall_acceleration": "25000", + "outer_wall_acceleration": "15000", + "bridge_acceleration": "10000", + "sparse_infill_acceleration": "30000", + "internal_solid_infill_acceleration": "25000", + "infill_combination": "0", + "ironing_speed": "150", + "overhang_1_4_speed": "100", + "overhang_2_4_speed": "50", + "overhang_3_4_speed": "30", + "overhang_4_4_speed": "15", + "support_interface_speed": "120", + "top_surface_line_width": "90%", + "sparse_infill_line_width": "125%", + "internal_solid_infill_line_width": "125%", + "seam_position": "nearest", + "initial_layer_speed": "100", + "initial_layer_infill_speed": "150", + "outer_wall_speed": "300", + "inner_wall_speed": "600", + "small_perimeter_speed": "300", + "sparse_infill_speed": "600", + "internal_solid_infill_speed": "500", + "top_surface_speed": "300", + "gap_infill_speed": "300", + "travel_speed": "800", + "only_one_wall_top": "0", + "only_one_wall_first_layer": "0", + "notes": "fast" +} diff --git a/resources/profiles/RH3D/process/process_Slow_E3NG v1.2S.json b/resources/profiles/RH3D/process/process_Slow_E3NG v1.2S.json new file mode 100644 index 0000000000..5cf259e378 --- /dev/null +++ b/resources/profiles/RH3D/process/process_Slow_E3NG v1.2S.json @@ -0,0 +1,42 @@ +{ + "type": "process", + "name": "process_Slow_E3NG v1.2S", + "inherits": "fdm_process_common", + "from": "system", + "instantiation": "false", + "reduce_crossing_wall": "1", + "bridge_speed": "40", + "default_acceleration": "3000", + "initial_layer_acceleration": "3000", + "top_surface_acceleration": "2000", + "travel_acceleration": "3000", + "inner_wall_acceleration": "3000", + "outer_wall_acceleration": "3000", + "bridge_acceleration": "2000", + "sparse_infill_acceleration": "4000", + "internal_solid_infill_acceleration": "3000", + "infill_combination": "0", + "ironing_speed": "80", + "overhang_1_4_speed": "60", + "overhang_2_4_speed": "35", + "overhang_3_4_speed": "20", + "overhang_4_4_speed": "8", + "support_interface_speed": "60", + "top_surface_line_width": "90%", + "sparse_infill_line_width": "125%", + "internal_solid_infill_line_width": "125%", + "seam_position": "aligned", + "initial_layer_speed": "60", + "initial_layer_infill_speed": "75", + "outer_wall_speed": "120", + "inner_wall_speed": "120", + "small_perimeter_speed": "120", + "sparse_infill_speed": "160", + "internal_solid_infill_speed": "160", + "top_surface_speed": "120", + "gap_infill_speed": "120", + "travel_speed": "400", + "only_one_wall_top": "1", + "only_one_wall_first_layer": "1", + "notes": "quiet" +} diff --git a/resources/profiles/RH3D/process/process_Slow_VIRTU E3.json b/resources/profiles/RH3D/process/process_Slow_VIRTU E3.json new file mode 100644 index 0000000000..4f7f41e5eb --- /dev/null +++ b/resources/profiles/RH3D/process/process_Slow_VIRTU E3.json @@ -0,0 +1,42 @@ +{ + "type": "process", + "name": "process_Slow_VIRTU E3", + "inherits": "fdm_process_common", + "from": "system", + "instantiation": "false", + "reduce_crossing_wall": "1", + "bridge_speed": "40", + "default_acceleration": "3000", + "initial_layer_acceleration": "3000", + "top_surface_acceleration": "2000", + "travel_acceleration": "3000", + "inner_wall_acceleration": "3000", + "outer_wall_acceleration": "3000", + "bridge_acceleration": "2000", + "sparse_infill_acceleration": "4000", + "internal_solid_infill_acceleration": "3000", + "infill_combination": "0", + "ironing_speed": "80", + "overhang_1_4_speed": "60", + "overhang_2_4_speed": "35", + "overhang_3_4_speed": "20", + "overhang_4_4_speed": "8", + "support_interface_speed": "60", + "top_surface_line_width": "90%", + "sparse_infill_line_width": "125%", + "internal_solid_infill_line_width": "125%", + "seam_position": "aligned", + "initial_layer_speed": "60", + "initial_layer_infill_speed": "75", + "outer_wall_speed": "140", + "inner_wall_speed": "140", + "small_perimeter_speed": "140", + "sparse_infill_speed": "140", + "internal_solid_infill_speed": "140", + "top_surface_speed": "140", + "gap_infill_speed": "140", + "travel_speed": "400", + "only_one_wall_top": "1", + "only_one_wall_first_layer": "1", + "notes": "quiet" +} diff --git a/resources/profiles/RH3D/process/process_Standard_E3NG v1.2S.json b/resources/profiles/RH3D/process/process_Standard_E3NG v1.2S.json new file mode 100644 index 0000000000..55828f200a --- /dev/null +++ b/resources/profiles/RH3D/process/process_Standard_E3NG v1.2S.json @@ -0,0 +1,33 @@ +{ + "type": "process", + "name": "process_Standard_E3NG v1.2S", + "inherits": "fdm_process_common", + "from": "system", + "instantiation": "false", + "default_acceleration": "10000", + "initial_layer_acceleration": "5000", + "top_surface_acceleration": "5000", + "travel_acceleration": "7500", + "inner_wall_acceleration": "10000", + "outer_wall_acceleration": "10000", + "bridge_acceleration": "3500", + "sparse_infill_acceleration": "12500", + "internal_solid_infill_acceleration": "12500", + "overhang_1_4_speed": "70", + "overhang_2_4_speed": "40", + "overhang_3_4_speed": "25", + "overhang_4_4_speed": "10", + "support_interface_speed": "100", + "support_speed": "180", + "initial_layer_speed": "90", + "initial_layer_infill_speed": "120", + "outer_wall_speed": "180", + "inner_wall_speed": "220", + "small_perimeter_speed": "180", + "sparse_infill_speed": "220", + "internal_solid_infill_speed": "220", + "top_surface_speed": "180", + "gap_infill_speed": "180", + "travel_speed": "500", + "notes": "normal" +} diff --git a/resources/profiles/RH3D/process/process_Standard_VIRTU E3.json b/resources/profiles/RH3D/process/process_Standard_VIRTU E3.json new file mode 100644 index 0000000000..d312218844 --- /dev/null +++ b/resources/profiles/RH3D/process/process_Standard_VIRTU E3.json @@ -0,0 +1,33 @@ +{ + "type": "process", + "name": "process_Standard_VIRTU E3", + "inherits": "fdm_process_common", + "from": "system", + "instantiation": "false", + "default_acceleration": "15000", + "initial_layer_acceleration": "7500", + "top_surface_acceleration": "7500", + "travel_acceleration": "10000", + "inner_wall_acceleration": "15000", + "outer_wall_acceleration": "15000", + "bridge_acceleration": "5000", + "sparse_infill_acceleration": "20000", + "internal_solid_infill_acceleration": "20000", + "overhang_1_4_speed": "70", + "overhang_2_4_speed": "40", + "overhang_3_4_speed": "25", + "overhang_4_4_speed": "10", + "support_interface_speed": "100", + "support_speed": "250", + "initial_layer_speed": "100", + "initial_layer_infill_speed": "150", + "outer_wall_speed": "260", + "inner_wall_speed": "350", + "small_perimeter_speed": "260", + "sparse_infill_speed": "350", + "internal_solid_infill_speed": "350", + "top_surface_speed": "260", + "gap_infill_speed": "260", + "travel_speed": "600", + "notes": "normal" +} diff --git a/resources/profiles/RH3D/process/process_common_E3NG v1.2S.json b/resources/profiles/RH3D/process/process_common_E3NG v1.2S.json deleted file mode 100644 index b43952fb89..0000000000 --- a/resources/profiles/RH3D/process/process_common_E3NG v1.2S.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "type": "process", - "name": "process_common_E3NG v1.2S", - "inherits": "fdm_process_common", - "from": "system", - "instantiation": "false" -} From 61dbe5572f5d8199401b9bd8d823b9520c0eef2e Mon Sep 17 00:00:00 2001 From: Jordan Hubbard Date: Mon, 21 Sep 2026 08:19:41 -0700 Subject: [PATCH 14/17] Add Flashforge Adventurer A5 printer profiles (#14733) * Add Flashforge Adventurer A5 printer profiles Adds system profiles for the Flashforge Adventurer A5 to the existing Flashforge vendor: the machine model with 0.25/0.4/0.6/0.8 mm nozzle variants, 14 process presets, and 43 filament presets, plus the printer cover image. All presets inherit from existing Flashforge bases already in-tree (Adventurer 5M Pro nozzle profiles, AD5M Pro process/filament presets, Flashforge generics); no new base assets are introduced (the A5 reuses the existing 5M-series bed/hotend models and buildplate texture). Every inherits reference and sub_path was validated to resolve. Co-Authored-By: Claude Opus 4.8 (1M context) * Assign setting_id to Adventurer A5 presets (fix profile check) The new A5 filament and process presets were missing the deterministic setting_id required by OrcaSlicer's profile validator. Generated via scripts/assign_vendor_setting_ids.py (61 instantiated presets). Verified with scripts/orca_extra_profile_check.py: 0 errors. Co-Authored-By: Claude Opus 4.8 (1M context) * Fix Flashforge Adventurer A5 profiles so the bundle loads and validates The new A5 presets were not in canonical form, several filaments resolved no or the wrong filament_id, and the model and machines pointed at non-existent or AD5M Pro defaults. Run the standard profile tooling (normalize, update-index, generate-id), give the branded filaments the ids of their existing Flashforge products, and repoint the defaults at A5-compatible filaments and processes. Bump the Flashforge bundle version. --------- Co-authored-by: Claude Opus 4.8 (1M context) Co-authored-by: yw4z Co-authored-by: SoftFever <103989404+SoftFever@users.noreply.github.com> Co-authored-by: SoftFever --- resources/profiles/Flashforge.json | 250 +++++++++++++++++- .../Flashforge Adventurer A5_cover.png | Bin 0 -> 11981 bytes ...S Basic @FF Adventurer A5 0.25 nozzle.json | 44 +++ ...lashforge ABS Basic @FF Adventurer A5.json | 50 ++++ ...A Basic @FF Adventurer A5 0.25 nozzle.json | 44 +++ ...lashforge ASA Basic @FF Adventurer A5.json | 50 ++++ ...HS PETG @FF Adventurer A5 0.25 nozzle.json | 44 +++ .../Flashforge HS PETG @FF Adventurer A5.json | 59 +++++ ... HS PLA @FF Adventurer A5 0.25 nozzle.json | 26 ++ .../Flashforge HS PLA @FF Adventurer A5.json | 47 ++++ ...HS PLA+ @FF Adventurer A5 0.25 nozzle.json | 36 +++ .../Flashforge HS PLA+ @FF Adventurer A5.json | 50 ++++ ...G Basic @FF Adventurer A5 0.25 nozzle.json | 44 +++ ...ETG Pro @FF Adventurer A5 0.25 nozzle.json | 44 +++ ...Flashforge PETG Pro @FF Adventurer A5.json | 92 +++++++ ...sparent @FF Adventurer A5 0.25 nozzle.json | 44 +++ ...ge PETG Transparent @FF Adventurer A5.json | 92 +++++++ .../Flashforge PETG-CF @FF Adventurer A5.json | 53 ++++ ...A Basic @FF Adventurer A5 0.25 nozzle.json | 32 +++ ...lashforge PLA Basic @FF Adventurer A5.json | 47 ++++ ... Change @FF Adventurer A5 0.25 nozzle.json | 32 +++ ...ge PLA Color Change @FF Adventurer A5.json | 47 ++++ ... Galaxy @FF Adventurer A5 0.25 nozzle.json | 32 +++ ...ashforge PLA Galaxy @FF Adventurer A5.json | 47 ++++ ...LA LITE @FF Adventurer A5 0.25 nozzle.json | 36 +++ ...Flashforge PLA LITE @FF Adventurer A5.json | 50 ++++ ...uminous @FF Adventurer A5 0.25 nozzle.json | 32 +++ ...hforge PLA Luminous @FF Adventurer A5.json | 47 ++++ ...A Matte @FF Adventurer A5 0.25 nozzle.json | 32 +++ ...lashforge PLA Matte @FF Adventurer A5.json | 47 ++++ ...A Metal @FF Adventurer A5 0.25 nozzle.json | 32 +++ ...lashforge PLA Metal @FF Adventurer A5.json | 47 ++++ ...PLA Pro @FF Adventurer A5 0.25 nozzle.json | 32 +++ .../Flashforge PLA Pro @FF Adventurer A5.json | 47 ++++ ...LA Silk @FF Adventurer A5 0.25 nozzle.json | 35 +++ ...Flashforge PLA Silk @FF Adventurer A5.json | 47 ++++ ...Sparkle @FF Adventurer A5 0.25 nozzle.json | 32 +++ ...shforge PLA Sparkle @FF Adventurer A5.json | 47 ++++ .../Flashforge PLA-CF @FF Adventurer A5.json | 56 ++++ ...e R PLA @FF Adventurer A5 0.25 nozzle.json | 33 +++ .../Flashforge R PLA @FF Adventurer A5.json | 50 ++++ .../Flashforge TPU 95A @FF Adventurer A5.json | 38 +++ ...ic PETG @FF Adventurer A5 0.25 nozzle.json | 17 ++ ...ric PLA @FF Adventurer A5 0.25 nozzle.json | 35 +++ .../Kexcelled TPU 64D @FF Adventurer A5.json | 38 +++ .../Flashforge Adventurer A5 0.25 nozzle.json | 233 ++++++++++++++++ .../Flashforge Adventurer A5 0.4 nozzle.json | 233 ++++++++++++++++ .../Flashforge Adventurer A5 0.6 nozzle.json | 233 ++++++++++++++++ .../Flashforge Adventurer A5 0.8 nozzle.json | 233 ++++++++++++++++ .../machine/Flashforge Adventurer A5.json | 12 + ...tandard @FF Adventurer A5 0.25 nozzle.json | 23 ++ ...tandard @FF Adventurer A5 0.25 nozzle.json | 23 ++ ...tandard @FF Adventurer A5 0.25 nozzle.json | 23 ++ ...2mm Fine @FF Adventurer A5 0.4 nozzle.json | 24 ++ ...tandard @FF Adventurer A5 0.25 nozzle.json | 17 ++ ...tandard @FF Adventurer A5 0.25 nozzle.json | 23 ++ ...8mm Fine @FF Adventurer A5 0.6 nozzle.json | 24 ++ ...Standard @FF Adventurer A5 0.4 nozzle.json | 21 ++ ...mm Draft @FF Adventurer A5 0.4 nozzle.json | 23 ++ ...4mm Fine @FF Adventurer A5 0.8 nozzle.json | 19 ++ ...Standard @FF Adventurer A5 0.6 nozzle.json | 22 ++ ...Standard @FF Adventurer A5 0.8 nozzle.json | 18 ++ ...mm Draft @FF Adventurer A5 0.6 nozzle.json | 23 ++ ...mm Draft @FF Adventurer A5 0.8 nozzle.json | 16 ++ 64 files changed, 3378 insertions(+), 1 deletion(-) create mode 100644 resources/profiles/Flashforge/Flashforge Adventurer A5_cover.png create mode 100644 resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF Adventurer A5 0.25 nozzle.json create mode 100644 resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF Adventurer A5.json create mode 100644 resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF Adventurer A5 0.25 nozzle.json create mode 100644 resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF Adventurer A5.json create mode 100644 resources/profiles/Flashforge/filament/Flashforge HS PETG @FF Adventurer A5 0.25 nozzle.json create mode 100644 resources/profiles/Flashforge/filament/Flashforge HS PETG @FF Adventurer A5.json create mode 100644 resources/profiles/Flashforge/filament/Flashforge HS PLA @FF Adventurer A5 0.25 nozzle.json create mode 100644 resources/profiles/Flashforge/filament/Flashforge HS PLA @FF Adventurer A5.json create mode 100644 resources/profiles/Flashforge/filament/Flashforge HS PLA+ @FF Adventurer A5 0.25 nozzle.json create mode 100644 resources/profiles/Flashforge/filament/Flashforge HS PLA+ @FF Adventurer A5.json create mode 100644 resources/profiles/Flashforge/filament/Flashforge PETG Basic @FF Adventurer A5 0.25 nozzle.json create mode 100644 resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF Adventurer A5 0.25 nozzle.json create mode 100644 resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF Adventurer A5.json create mode 100644 resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF Adventurer A5 0.25 nozzle.json create mode 100644 resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF Adventurer A5.json create mode 100644 resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF Adventurer A5.json create mode 100644 resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF Adventurer A5 0.25 nozzle.json create mode 100644 resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF Adventurer A5.json create mode 100644 resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF Adventurer A5 0.25 nozzle.json create mode 100644 resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF Adventurer A5.json create mode 100644 resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF Adventurer A5 0.25 nozzle.json create mode 100644 resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF Adventurer A5.json create mode 100644 resources/profiles/Flashforge/filament/Flashforge PLA LITE @FF Adventurer A5 0.25 nozzle.json create mode 100644 resources/profiles/Flashforge/filament/Flashforge PLA LITE @FF Adventurer A5.json create mode 100644 resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF Adventurer A5 0.25 nozzle.json create mode 100644 resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF Adventurer A5.json create mode 100644 resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF Adventurer A5 0.25 nozzle.json create mode 100644 resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF Adventurer A5.json create mode 100644 resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF Adventurer A5 0.25 nozzle.json create mode 100644 resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF Adventurer A5.json create mode 100644 resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF Adventurer A5 0.25 nozzle.json create mode 100644 resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF Adventurer A5.json create mode 100644 resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF Adventurer A5 0.25 nozzle.json create mode 100644 resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF Adventurer A5.json create mode 100644 resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF Adventurer A5 0.25 nozzle.json create mode 100644 resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF Adventurer A5.json create mode 100644 resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF Adventurer A5.json create mode 100644 resources/profiles/Flashforge/filament/Flashforge R PLA @FF Adventurer A5 0.25 nozzle.json create mode 100644 resources/profiles/Flashforge/filament/Flashforge R PLA @FF Adventurer A5.json create mode 100644 resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF Adventurer A5.json create mode 100644 resources/profiles/Flashforge/filament/Generic PETG @FF Adventurer A5 0.25 nozzle.json create mode 100644 resources/profiles/Flashforge/filament/Generic PLA @FF Adventurer A5 0.25 nozzle.json create mode 100644 resources/profiles/Flashforge/filament/Kexcelled TPU 64D @FF Adventurer A5.json create mode 100644 resources/profiles/Flashforge/machine/Flashforge Adventurer A5 0.25 nozzle.json create mode 100644 resources/profiles/Flashforge/machine/Flashforge Adventurer A5 0.4 nozzle.json create mode 100644 resources/profiles/Flashforge/machine/Flashforge Adventurer A5 0.6 nozzle.json create mode 100644 resources/profiles/Flashforge/machine/Flashforge Adventurer A5 0.8 nozzle.json create mode 100644 resources/profiles/Flashforge/machine/Flashforge Adventurer A5.json create mode 100644 resources/profiles/Flashforge/process/0.06mm Standard @FF Adventurer A5 0.25 nozzle.json create mode 100644 resources/profiles/Flashforge/process/0.08mm Standard @FF Adventurer A5 0.25 nozzle.json create mode 100644 resources/profiles/Flashforge/process/0.10mm Standard @FF Adventurer A5 0.25 nozzle.json create mode 100644 resources/profiles/Flashforge/process/0.12mm Fine @FF Adventurer A5 0.4 nozzle.json create mode 100644 resources/profiles/Flashforge/process/0.12mm Standard @FF Adventurer A5 0.25 nozzle.json create mode 100644 resources/profiles/Flashforge/process/0.14mm Standard @FF Adventurer A5 0.25 nozzle.json create mode 100644 resources/profiles/Flashforge/process/0.18mm Fine @FF Adventurer A5 0.6 nozzle.json create mode 100644 resources/profiles/Flashforge/process/0.20mm Standard @FF Adventurer A5 0.4 nozzle.json create mode 100644 resources/profiles/Flashforge/process/0.24mm Draft @FF Adventurer A5 0.4 nozzle.json create mode 100644 resources/profiles/Flashforge/process/0.24mm Fine @FF Adventurer A5 0.8 nozzle.json create mode 100644 resources/profiles/Flashforge/process/0.30mm Standard @FF Adventurer A5 0.6 nozzle.json create mode 100644 resources/profiles/Flashforge/process/0.40mm Standard @FF Adventurer A5 0.8 nozzle.json create mode 100644 resources/profiles/Flashforge/process/0.42mm Draft @FF Adventurer A5 0.6 nozzle.json create mode 100644 resources/profiles/Flashforge/process/0.56mm Draft @FF Adventurer A5 0.8 nozzle.json diff --git a/resources/profiles/Flashforge.json b/resources/profiles/Flashforge.json index 5bccaf9dfb..cda2215a33 100644 --- a/resources/profiles/Flashforge.json +++ b/resources/profiles/Flashforge.json @@ -1,7 +1,7 @@ { "name": "Flashforge", "url": "", - "version": "02.04.00.08", + "version": "02.04.00.09", "force_update": "0", "description": "Flashforge configurations", "machine_model_list": [ @@ -25,6 +25,10 @@ "name": "Flashforge Adventurer 5M Pro", "sub_path": "machine/Flashforge Adventurer 5M Pro.json" }, + { + "name": "Flashforge Adventurer A5", + "sub_path": "machine/Flashforge Adventurer A5.json" + }, { "name": "Flashforge Artemis", "sub_path": "machine/Flashforge Artemis.json" @@ -199,6 +203,10 @@ "name": "0.20mm Standard @FF AD5X", "sub_path": "process/0.20mm Standard @FF AD5X.json" }, + { + "name": "0.20mm Standard @FF Adventurer A5 0.4 nozzle", + "sub_path": "process/0.20mm Standard @FF Adventurer A5 0.4 nozzle.json" + }, { "name": "0.20mm Standard @FF C5", "sub_path": "process/0.20mm Standard @FF C5.json" @@ -311,6 +319,10 @@ "name": "0.30mm Standard @FF AD5X 0.6 nozzle", "sub_path": "process/0.30mm Standard @FF AD5X 0.6 nozzle.json" }, + { + "name": "0.30mm Standard @FF Adventurer A5 0.6 nozzle", + "sub_path": "process/0.30mm Standard @FF Adventurer A5 0.6 nozzle.json" + }, { "name": "0.40mm Standard @Flashforge AD5M Pro 0.8 Nozzle", "sub_path": "process/0.40mm Standard @Flashforge AD5M Pro 0.8 Nozzle.json" @@ -443,6 +455,10 @@ "name": "0.14mm Standard @Flashforge AD5M 0.25 Nozzle", "sub_path": "process/0.14mm Standard @Flashforge AD5M 0.25 Nozzle.json" }, + { + "name": "0.12mm Fine @FF Adventurer A5 0.4 nozzle", + "sub_path": "process/0.12mm Fine @FF Adventurer A5 0.4 nozzle.json" + }, { "name": "0.06mm Standard @Flashforge AD5M Pro 0.25 Nozzle", "sub_path": "process/0.06mm Standard @Flashforge AD5M Pro 0.25 Nozzle.json" @@ -463,6 +479,10 @@ "name": "0.10mm Standard @Flashforge AD5M Pro 0.25 Nozzle", "sub_path": "process/0.10mm Standard @Flashforge AD5M Pro 0.25 Nozzle.json" }, + { + "name": "0.12mm Standard @FF Adventurer A5 0.25 nozzle", + "sub_path": "process/0.12mm Standard @FF Adventurer A5 0.25 nozzle.json" + }, { "name": "0.12mm Standard @FF G4 0.25 nozzle", "sub_path": "process/0.12mm Standard @FF G4 0.25 nozzle.json" @@ -483,6 +503,10 @@ "name": "0.14mm Standard @Flashforge AD5M Pro 0.25 Nozzle", "sub_path": "process/0.14mm Standard @Flashforge AD5M Pro 0.25 Nozzle.json" }, + { + "name": "0.24mm Draft @FF Adventurer A5 0.4 nozzle", + "sub_path": "process/0.24mm Draft @FF Adventurer A5 0.4 nozzle.json" + }, { "name": "0.24mm Fine @Flashforge AD5M 0.8 Nozzle", "sub_path": "process/0.24mm Fine @Flashforge AD5M 0.8 Nozzle.json" @@ -495,6 +519,10 @@ "name": "0.18mm Fine @FF AD5X 0.6 nozzle", "sub_path": "process/0.18mm Fine @FF AD5X 0.6 nozzle.json" }, + { + "name": "0.18mm Fine @FF Adventurer A5 0.6 nozzle", + "sub_path": "process/0.18mm Fine @FF Adventurer A5 0.6 nozzle.json" + }, { "name": "0.24mm Fine @Flashforge AD5M Pro 0.8 Nozzle", "sub_path": "process/0.24mm Fine @Flashforge AD5M Pro 0.8 Nozzle.json" @@ -503,6 +531,10 @@ "name": "0.40mm Standard @FF AD5X 0.8 nozzle", "sub_path": "process/0.40mm Standard @FF AD5X 0.8 nozzle.json" }, + { + "name": "0.40mm Standard @FF Adventurer A5 0.8 nozzle", + "sub_path": "process/0.40mm Standard @FF Adventurer A5 0.8 nozzle.json" + }, { "name": "0.56mm Draft @Flashforge AD5M Pro 0.8 Nozzle", "sub_path": "process/0.56mm Draft @Flashforge AD5M Pro 0.8 Nozzle.json" @@ -511,6 +543,10 @@ "name": "0.42mm Draft @FF AD5X 0.6 nozzle", "sub_path": "process/0.42mm Draft @FF AD5X 0.6 nozzle.json" }, + { + "name": "0.42mm Draft @FF Adventurer A5 0.6 nozzle", + "sub_path": "process/0.42mm Draft @FF Adventurer A5 0.6 nozzle.json" + }, { "name": "0.08mm Standard @FF C5 0.25 nozzle", "sub_path": "process/0.08mm Standard @FF C5 0.25 nozzle.json" @@ -527,13 +563,37 @@ "name": "0.14mm Standard @FF C5 0.25 nozzle", "sub_path": "process/0.14mm Standard @FF C5 0.25 nozzle.json" }, + { + "name": "0.06mm Standard @FF Adventurer A5 0.25 nozzle", + "sub_path": "process/0.06mm Standard @FF Adventurer A5 0.25 nozzle.json" + }, + { + "name": "0.08mm Standard @FF Adventurer A5 0.25 nozzle", + "sub_path": "process/0.08mm Standard @FF Adventurer A5 0.25 nozzle.json" + }, + { + "name": "0.10mm Standard @FF Adventurer A5 0.25 nozzle", + "sub_path": "process/0.10mm Standard @FF Adventurer A5 0.25 nozzle.json" + }, + { + "name": "0.14mm Standard @FF Adventurer A5 0.25 nozzle", + "sub_path": "process/0.14mm Standard @FF Adventurer A5 0.25 nozzle.json" + }, { "name": "0.24mm Fine @FF AD5X 0.8 nozzle", "sub_path": "process/0.24mm Fine @FF AD5X 0.8 nozzle.json" }, + { + "name": "0.24mm Fine @FF Adventurer A5 0.8 nozzle", + "sub_path": "process/0.24mm Fine @FF Adventurer A5 0.8 nozzle.json" + }, { "name": "0.56mm Draft @FF AD5X 0.8 nozzle", "sub_path": "process/0.56mm Draft @FF AD5X 0.8 nozzle.json" + }, + { + "name": "0.56mm Draft @FF Adventurer A5 0.8 nozzle", + "sub_path": "process/0.56mm Draft @FF Adventurer A5 0.8 nozzle.json" } ], "filament_list": [ @@ -661,6 +721,10 @@ "name": "Flashforge ABS Basic @FF AD5X 0.8 nozzle", "sub_path": "filament/Flashforge ABS Basic @FF AD5X 0.8 nozzle.json" }, + { + "name": "Flashforge ABS Basic @FF Adventurer A5", + "sub_path": "filament/Flashforge ABS Basic @FF Adventurer A5.json" + }, { "name": "Flashforge ABS Basic @FF G4", "sub_path": "filament/Flashforge ABS Basic @FF G4.json" @@ -741,6 +805,10 @@ "name": "Flashforge ASA Basic", "sub_path": "filament/Flashforge ASA Basic.json" }, + { + "name": "Flashforge ASA Basic @FF Adventurer A5", + "sub_path": "filament/Flashforge ASA Basic @FF Adventurer A5.json" + }, { "name": "Generic ASA @FF AD5M 0.25 Nozzle", "sub_path": "filament/Generic ASA @FF AD5M 0.25 Nozzle.json" @@ -769,6 +837,10 @@ "name": "Flashforge HS PETG @FF AD5X 0.8 nozzle", "sub_path": "filament/Flashforge HS PETG @FF AD5X 0.8 nozzle.json" }, + { + "name": "Flashforge HS PETG @FF Adventurer A5", + "sub_path": "filament/Flashforge HS PETG @FF Adventurer A5.json" + }, { "name": "Flashforge HS PETG @FF G4", "sub_path": "filament/Flashforge HS PETG @FF G4.json" @@ -801,6 +873,10 @@ "name": "Flashforge PETG Pro @FF AD5X 0.8 nozzle", "sub_path": "filament/Flashforge PETG Pro @FF AD5X 0.8 nozzle.json" }, + { + "name": "Flashforge PETG Pro @FF Adventurer A5", + "sub_path": "filament/Flashforge PETG Pro @FF Adventurer A5.json" + }, { "name": "Flashforge PETG Pro @FF G4", "sub_path": "filament/Flashforge PETG Pro @FF G4.json" @@ -825,6 +901,10 @@ "name": "Flashforge PETG Transparent @FF AD5X 0.8 nozzle", "sub_path": "filament/Flashforge PETG Transparent @FF AD5X 0.8 nozzle.json" }, + { + "name": "Flashforge PETG Transparent @FF Adventurer A5", + "sub_path": "filament/Flashforge PETG Transparent @FF Adventurer A5.json" + }, { "name": "Flashforge PETG Transparent @FF G4", "sub_path": "filament/Flashforge PETG Transparent @FF G4.json" @@ -925,6 +1005,10 @@ "name": "Flashforge PETG-CF @FF AD5X 0.8 nozzle", "sub_path": "filament/Flashforge PETG-CF @FF AD5X 0.8 nozzle.json" }, + { + "name": "Flashforge PETG-CF @FF Adventurer A5", + "sub_path": "filament/Flashforge PETG-CF @FF Adventurer A5.json" + }, { "name": "Generic PETG-CF10 @Flashforge AD4", "sub_path": "filament/Generic PETG-CF10 @Flashforge AD4.json" @@ -1069,6 +1153,14 @@ "name": "Flashforge HS PLA @FF AD5X 0.8 nozzle", "sub_path": "filament/Flashforge HS PLA @FF AD5X 0.8 nozzle.json" }, + { + "name": "Flashforge HS PLA @FF Adventurer A5", + "sub_path": "filament/Flashforge HS PLA @FF Adventurer A5.json" + }, + { + "name": "Flashforge HS PLA+ @FF Adventurer A5", + "sub_path": "filament/Flashforge HS PLA+ @FF Adventurer A5.json" + }, { "name": "Flashforge PLA @FF AD5M 0.25 Nozzle", "sub_path": "filament/Flashforge PLA @FF AD5M 0.25 Nozzle.json" @@ -1089,6 +1181,10 @@ "name": "Flashforge PLA Basic @FF AD5X 0.8 nozzle", "sub_path": "filament/Flashforge PLA Basic @FF AD5X 0.8 nozzle.json" }, + { + "name": "Flashforge PLA Basic @FF Adventurer A5", + "sub_path": "filament/Flashforge PLA Basic @FF Adventurer A5.json" + }, { "name": "Flashforge PLA Color Change", "sub_path": "filament/Flashforge PLA Color Change.json" @@ -1105,6 +1201,10 @@ "name": "Flashforge PLA Color Change @FF AD5X 0.8 nozzle", "sub_path": "filament/Flashforge PLA Color Change @FF AD5X 0.8 nozzle.json" }, + { + "name": "Flashforge PLA Color Change @FF Adventurer A5", + "sub_path": "filament/Flashforge PLA Color Change @FF Adventurer A5.json" + }, { "name": "Flashforge PLA Galaxy", "sub_path": "filament/Flashforge PLA Galaxy.json" @@ -1121,6 +1221,14 @@ "name": "Flashforge PLA Galaxy @FF AD5X 0.8 nozzle", "sub_path": "filament/Flashforge PLA Galaxy @FF AD5X 0.8 nozzle.json" }, + { + "name": "Flashforge PLA Galaxy @FF Adventurer A5", + "sub_path": "filament/Flashforge PLA Galaxy @FF Adventurer A5.json" + }, + { + "name": "Flashforge PLA LITE @FF Adventurer A5", + "sub_path": "filament/Flashforge PLA LITE @FF Adventurer A5.json" + }, { "name": "Flashforge PLA Luminous", "sub_path": "filament/Flashforge PLA Luminous.json" @@ -1137,6 +1245,10 @@ "name": "Flashforge PLA Luminous @FF AD5X 0.8 nozzle", "sub_path": "filament/Flashforge PLA Luminous @FF AD5X 0.8 nozzle.json" }, + { + "name": "Flashforge PLA Luminous @FF Adventurer A5", + "sub_path": "filament/Flashforge PLA Luminous @FF Adventurer A5.json" + }, { "name": "Flashforge PLA Matte", "sub_path": "filament/Flashforge PLA Matte.json" @@ -1153,6 +1265,10 @@ "name": "Flashforge PLA Matte @FF AD5X 0.8 nozzle", "sub_path": "filament/Flashforge PLA Matte @FF AD5X 0.8 nozzle.json" }, + { + "name": "Flashforge PLA Matte @FF Adventurer A5", + "sub_path": "filament/Flashforge PLA Matte @FF Adventurer A5.json" + }, { "name": "Flashforge PLA Metal", "sub_path": "filament/Flashforge PLA Metal.json" @@ -1169,6 +1285,10 @@ "name": "Flashforge PLA Metal @FF AD5X 0.8 nozzle", "sub_path": "filament/Flashforge PLA Metal @FF AD5X 0.8 nozzle.json" }, + { + "name": "Flashforge PLA Metal @FF Adventurer A5", + "sub_path": "filament/Flashforge PLA Metal @FF Adventurer A5.json" + }, { "name": "Flashforge PLA Pro", "sub_path": "filament/Flashforge PLA Pro.json" @@ -1185,6 +1305,10 @@ "name": "Flashforge PLA Pro @FF AD5X 0.8 nozzle", "sub_path": "filament/Flashforge PLA Pro @FF AD5X 0.8 nozzle.json" }, + { + "name": "Flashforge PLA Pro @FF Adventurer A5", + "sub_path": "filament/Flashforge PLA Pro @FF Adventurer A5.json" + }, { "name": "Flashforge PLA Sparkle", "sub_path": "filament/Flashforge PLA Sparkle.json" @@ -1201,6 +1325,14 @@ "name": "Flashforge PLA Sparkle @FF AD5X 0.8 nozzle", "sub_path": "filament/Flashforge PLA Sparkle @FF AD5X 0.8 nozzle.json" }, + { + "name": "Flashforge PLA Sparkle @FF Adventurer A5", + "sub_path": "filament/Flashforge PLA Sparkle @FF Adventurer A5.json" + }, + { + "name": "Flashforge R PLA @FF Adventurer A5", + "sub_path": "filament/Flashforge R PLA @FF Adventurer A5.json" + }, { "name": "Generic PLA @FF AD5M 0.25 Nozzle", "sub_path": "filament/Generic PLA @FF AD5M 0.25 Nozzle.json" @@ -1269,6 +1401,10 @@ "name": "Flashforge PLA-CF @FF AD5X 0.8 nozzle", "sub_path": "filament/Flashforge PLA-CF @FF AD5X 0.8 nozzle.json" }, + { + "name": "Flashforge PLA-CF @FF Adventurer A5", + "sub_path": "filament/Flashforge PLA-CF @FF Adventurer A5.json" + }, { "name": "Flashforge PPS @FF G4", "sub_path": "filament/Flashforge PPS @FF G4.json" @@ -1313,6 +1449,10 @@ "name": "Flashforge PLA Silk @FF AD5X 0.8 nozzle", "sub_path": "filament/Flashforge PLA Silk @FF AD5X 0.8 nozzle.json" }, + { + "name": "Flashforge PLA Silk @FF Adventurer A5", + "sub_path": "filament/Flashforge PLA Silk @FF Adventurer A5.json" + }, { "name": "Flashforge PLA-SILK @FF AD5M 0.25 Nozzle", "sub_path": "filament/Flashforge PLA-SILK @FF AD5M 0.25 Nozzle.json" @@ -1413,6 +1553,10 @@ "name": "Flashforge TPU 95A @FF AD5X 0.8 nozzle", "sub_path": "filament/Flashforge TPU 95A @FF AD5X 0.8 nozzle.json" }, + { + "name": "Flashforge TPU 95A @FF Adventurer A5", + "sub_path": "filament/Flashforge TPU 95A @FF Adventurer A5.json" + }, { "name": "Flashforge TPU 95A @FF G4", "sub_path": "filament/Flashforge TPU 95A @FF G4.json" @@ -1453,6 +1597,10 @@ "name": "Generic TPU @Flashforge AD4", "sub_path": "filament/Generic TPU @Flashforge AD4.json" }, + { + "name": "Kexcelled TPU 64D @FF Adventurer A5", + "sub_path": "filament/Kexcelled TPU 64D @FF Adventurer A5.json" + }, { "name": "Flashforge ABS Basic @FF AD5M 0.25 nozzle", "sub_path": "filament/Flashforge ABS Basic @FF AD5M 0.25 nozzle.json" @@ -1949,6 +2097,10 @@ "name": "Polymaker CoPA @FF G4P 0.8 HF nozzle", "sub_path": "filament/Polymaker CoPA @FF G4P 0.8 HF nozzle.json" }, + { + "name": "Generic PETG @FF Adventurer A5 0.25 nozzle", + "sub_path": "filament/Generic PETG @FF Adventurer A5 0.25 nozzle.json" + }, { "name": "Flashforge HS PETG @FF G4 0.6 HF nozzle", "sub_path": "filament/Flashforge HS PETG @FF G4 0.6 HF nozzle.json" @@ -2045,6 +2197,10 @@ "name": "Flashforge PETG-CF @FF G4P 0.6 nozzle", "sub_path": "filament/Flashforge PETG-CF @FF G4P 0.6 nozzle.json" }, + { + "name": "Flashforge HS PLA @FF Adventurer A5 0.25 nozzle", + "sub_path": "filament/Flashforge HS PLA @FF Adventurer A5 0.25 nozzle.json" + }, { "name": "Flashforge HS PLA @FF AD5X 0.25 nozzle", "sub_path": "filament/Flashforge HS PLA @FF AD5X 0.25 nozzle.json" @@ -2057,6 +2213,10 @@ "name": "Flashforge HS PLA @FF G4P 0.25 nozzle", "sub_path": "filament/Flashforge HS PLA @FF G4P 0.25 nozzle.json" }, + { + "name": "Flashforge HS PLA+ @FF Adventurer A5 0.25 nozzle", + "sub_path": "filament/Flashforge HS PLA+ @FF Adventurer A5 0.25 nozzle.json" + }, { "name": "Flashforge PLA Basic @FF AD5M 0.25 nozzle", "sub_path": "filament/Flashforge PLA Basic @FF AD5M 0.25 nozzle.json" @@ -2105,6 +2265,10 @@ "name": "Flashforge PLA Galaxy @FF G4P 0.25 nozzle", "sub_path": "filament/Flashforge PLA Galaxy @FF G4P 0.25 nozzle.json" }, + { + "name": "Flashforge PLA LITE @FF Adventurer A5 0.25 nozzle", + "sub_path": "filament/Flashforge PLA LITE @FF Adventurer A5 0.25 nozzle.json" + }, { "name": "Flashforge PLA Luminous @FF AD5M 0.25 nozzle", "sub_path": "filament/Flashforge PLA Luminous @FF AD5M 0.25 nozzle.json" @@ -2197,6 +2361,14 @@ "name": "Flashforge PLA Sparkle @FF G4P 0.25 nozzle", "sub_path": "filament/Flashforge PLA Sparkle @FF G4P 0.25 nozzle.json" }, + { + "name": "Flashforge R PLA @FF Adventurer A5 0.25 nozzle", + "sub_path": "filament/Flashforge R PLA @FF Adventurer A5 0.25 nozzle.json" + }, + { + "name": "Generic PLA @FF Adventurer A5 0.25 nozzle", + "sub_path": "filament/Generic PLA @FF Adventurer A5 0.25 nozzle.json" + }, { "name": "Flashforge HS PLA @FF G4 0.6 HF nozzle", "sub_path": "filament/Flashforge HS PLA @FF G4 0.6 HF nozzle.json" @@ -2497,6 +2669,66 @@ "name": "Flashforge PLA Silk @FF AD5M 0.25 nozzle", "sub_path": "filament/Flashforge PLA Silk @FF AD5M 0.25 nozzle.json" }, + { + "name": "Flashforge ABS Basic @FF Adventurer A5 0.25 nozzle", + "sub_path": "filament/Flashforge ABS Basic @FF Adventurer A5 0.25 nozzle.json" + }, + { + "name": "Flashforge ASA Basic @FF Adventurer A5 0.25 nozzle", + "sub_path": "filament/Flashforge ASA Basic @FF Adventurer A5 0.25 nozzle.json" + }, + { + "name": "Flashforge HS PETG @FF Adventurer A5 0.25 nozzle", + "sub_path": "filament/Flashforge HS PETG @FF Adventurer A5 0.25 nozzle.json" + }, + { + "name": "Flashforge PETG Basic @FF Adventurer A5 0.25 nozzle", + "sub_path": "filament/Flashforge PETG Basic @FF Adventurer A5 0.25 nozzle.json" + }, + { + "name": "Flashforge PETG Pro @FF Adventurer A5 0.25 nozzle", + "sub_path": "filament/Flashforge PETG Pro @FF Adventurer A5 0.25 nozzle.json" + }, + { + "name": "Flashforge PETG Transparent @FF Adventurer A5 0.25 nozzle", + "sub_path": "filament/Flashforge PETG Transparent @FF Adventurer A5 0.25 nozzle.json" + }, + { + "name": "Flashforge PLA Basic @FF Adventurer A5 0.25 nozzle", + "sub_path": "filament/Flashforge PLA Basic @FF Adventurer A5 0.25 nozzle.json" + }, + { + "name": "Flashforge PLA Color Change @FF Adventurer A5 0.25 nozzle", + "sub_path": "filament/Flashforge PLA Color Change @FF Adventurer A5 0.25 nozzle.json" + }, + { + "name": "Flashforge PLA Galaxy @FF Adventurer A5 0.25 nozzle", + "sub_path": "filament/Flashforge PLA Galaxy @FF Adventurer A5 0.25 nozzle.json" + }, + { + "name": "Flashforge PLA Luminous @FF Adventurer A5 0.25 nozzle", + "sub_path": "filament/Flashforge PLA Luminous @FF Adventurer A5 0.25 nozzle.json" + }, + { + "name": "Flashforge PLA Matte @FF Adventurer A5 0.25 nozzle", + "sub_path": "filament/Flashforge PLA Matte @FF Adventurer A5 0.25 nozzle.json" + }, + { + "name": "Flashforge PLA Metal @FF Adventurer A5 0.25 nozzle", + "sub_path": "filament/Flashforge PLA Metal @FF Adventurer A5 0.25 nozzle.json" + }, + { + "name": "Flashforge PLA Pro @FF Adventurer A5 0.25 nozzle", + "sub_path": "filament/Flashforge PLA Pro @FF Adventurer A5 0.25 nozzle.json" + }, + { + "name": "Flashforge PLA Sparkle @FF Adventurer A5 0.25 nozzle", + "sub_path": "filament/Flashforge PLA Sparkle @FF Adventurer A5 0.25 nozzle.json" + }, + { + "name": "Flashforge PLA Silk @FF Adventurer A5 0.25 nozzle", + "sub_path": "filament/Flashforge PLA Silk @FF Adventurer A5 0.25 nozzle.json" + }, { "name": "Flashforge ABS Basic @FF C5", "sub_path": "filament/Flashforge ABS Basic @FF C5.json" @@ -2907,6 +3139,10 @@ "name": "Flashforge AD5X 0.25 nozzle", "sub_path": "machine/FlashForge AD5X 0.25 nozzle.json" }, + { + "name": "Flashforge Adventurer A5 0.25 nozzle", + "sub_path": "machine/Flashforge Adventurer A5 0.25 nozzle.json" + }, { "name": "Flashforge Guider4 0.25 nozzle", "sub_path": "machine/Flashforge Guider4 0.25 nozzle.json" @@ -2919,6 +3155,10 @@ "name": "Flashforge AD5X 0.4 nozzle", "sub_path": "machine/Flashforge AD5X 0.4 nozzle.json" }, + { + "name": "Flashforge Adventurer A5 0.4 nozzle", + "sub_path": "machine/Flashforge Adventurer A5 0.4 nozzle.json" + }, { "name": "Flashforge Creator 5 0.25 nozzle", "sub_path": "machine/Flashforge Creator 5 0.25 nozzle.json" @@ -2963,10 +3203,18 @@ "name": "Flashforge AD5X 0.6 nozzle", "sub_path": "machine/Flashforge AD5X 0.6 nozzle.json" }, + { + "name": "Flashforge Adventurer A5 0.6 nozzle", + "sub_path": "machine/Flashforge Adventurer A5 0.6 nozzle.json" + }, { "name": "Flashforge AD5X 0.8 nozzle", "sub_path": "machine/Flashforge AD5X 0.8 nozzle.json" }, + { + "name": "Flashforge Adventurer A5 0.8 nozzle", + "sub_path": "machine/Flashforge Adventurer A5 0.8 nozzle.json" + }, { "name": "Flashforge Guider4 0.4 HF nozzle", "sub_path": "machine/Flashforge Guider4 0.4 HF nozzle.json" diff --git a/resources/profiles/Flashforge/Flashforge Adventurer A5_cover.png b/resources/profiles/Flashforge/Flashforge Adventurer A5_cover.png new file mode 100644 index 0000000000000000000000000000000000000000..70966ac6856d4a4c678b166cfa9e0656ee865d17 GIT binary patch literal 11981 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 S;r%bB4k0hCB2_D468t}qAyz;D literal 0 HcmV?d00001 diff --git a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF Adventurer A5 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF Adventurer A5 0.25 nozzle.json new file mode 100644 index 0000000000..08b228c11a --- /dev/null +++ b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF Adventurer A5 0.25 nozzle.json @@ -0,0 +1,44 @@ +{ + "type": "filament", + "name": "Flashforge ABS Basic @FF Adventurer A5 0.25 nozzle", + "inherits": "Flashforge ABS Basic @FF AD5M 0.25 nozzle", + "from": "system", + "setting_id": "jRIJ0cO4GhaMg2By", + "instantiation": "true", + "cool_plate_temp": [ + "0" + ], + "cool_plate_temp_initial_layer": [ + "0" + ], + "eng_plate_temp": [ + "105" + ], + "eng_plate_temp_initial_layer": [ + "105" + ], + "filament_settings_id": [ + "Flashforge ABS Basic @FF Adventurer A5 0.25 nozzle" + ], + "compatible_printers": [ + "Flashforge Adventurer A5 0.25 nozzle" + ], + "supertack_plate_temp": [ + "0" + ], + "supertack_plate_temp_initial_layer": [ + "0" + ], + "textured_cool_plate_temp": [ + "0" + ], + "textured_cool_plate_temp_initial_layer": [ + "0" + ], + "textured_plate_temp": [ + "105" + ], + "textured_plate_temp_initial_layer": [ + "105" + ] +} diff --git a/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF Adventurer A5.json b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF Adventurer A5.json new file mode 100644 index 0000000000..0ea70e0bf4 --- /dev/null +++ b/resources/profiles/Flashforge/filament/Flashforge ABS Basic @FF Adventurer A5.json @@ -0,0 +1,50 @@ +{ + "type": "filament", + "name": "Flashforge ABS Basic @FF Adventurer A5", + "inherits": "Generic ABS @Flashforge", + "from": "system", + "setting_id": "rDW4AwKc7SD7WIxN", + "filament_id": "OFibWuBd", + "filament_vendor": [ + "Flashforge" + ], + "instantiation": "true", + "cool_plate_temp": [ + "0" + ], + "cool_plate_temp_initial_layer": [ + "0" + ], + "eng_plate_temp": [ + "105" + ], + "eng_plate_temp_initial_layer": [ + "105" + ], + "filament_settings_id": [ + "Flashforge ABS Basic @FF Adventurer A5" + ], + "compatible_printers": [ + "Flashforge Adventurer A5 0.4 nozzle", + "Flashforge Adventurer A5 0.6 nozzle", + "Flashforge Adventurer A5 0.8 nozzle" + ], + "supertack_plate_temp": [ + "0" + ], + "supertack_plate_temp_initial_layer": [ + "0" + ], + "textured_cool_plate_temp": [ + "0" + ], + "textured_cool_plate_temp_initial_layer": [ + "0" + ], + "textured_plate_temp": [ + "105" + ], + "textured_plate_temp_initial_layer": [ + "105" + ] +} diff --git a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF Adventurer A5 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF Adventurer A5 0.25 nozzle.json new file mode 100644 index 0000000000..7d65841413 --- /dev/null +++ b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF Adventurer A5 0.25 nozzle.json @@ -0,0 +1,44 @@ +{ + "type": "filament", + "name": "Flashforge ASA Basic @FF Adventurer A5 0.25 nozzle", + "inherits": "Flashforge ASA Basic @FF AD5M 0.25 nozzle", + "from": "system", + "setting_id": "OIUW8rw2VhNpeVpF", + "instantiation": "true", + "cool_plate_temp": [ + "0" + ], + "cool_plate_temp_initial_layer": [ + "0" + ], + "eng_plate_temp": [ + "105" + ], + "eng_plate_temp_initial_layer": [ + "105" + ], + "filament_settings_id": [ + "Flashforge ASA Basic @FF Adventurer A5 0.25 nozzle" + ], + "compatible_printers": [ + "Flashforge Adventurer A5 0.25 nozzle" + ], + "supertack_plate_temp": [ + "0" + ], + "supertack_plate_temp_initial_layer": [ + "0" + ], + "textured_cool_plate_temp": [ + "0" + ], + "textured_cool_plate_temp_initial_layer": [ + "0" + ], + "textured_plate_temp": [ + "105" + ], + "textured_plate_temp_initial_layer": [ + "105" + ] +} diff --git a/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF Adventurer A5.json b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF Adventurer A5.json new file mode 100644 index 0000000000..80943c015a --- /dev/null +++ b/resources/profiles/Flashforge/filament/Flashforge ASA Basic @FF Adventurer A5.json @@ -0,0 +1,50 @@ +{ + "type": "filament", + "name": "Flashforge ASA Basic @FF Adventurer A5", + "inherits": "Generic ASA @Flashforge", + "from": "system", + "setting_id": "FY9mcqOyuu1Gqq1m", + "filament_id": "OFFFg2Pf", + "filament_vendor": [ + "Flashforge" + ], + "instantiation": "true", + "cool_plate_temp": [ + "0" + ], + "cool_plate_temp_initial_layer": [ + "0" + ], + "eng_plate_temp": [ + "105" + ], + "eng_plate_temp_initial_layer": [ + "105" + ], + "filament_settings_id": [ + "Flashforge ASA Basic @FF Adventurer A5" + ], + "compatible_printers": [ + "Flashforge Adventurer A5 0.4 nozzle", + "Flashforge Adventurer A5 0.6 nozzle", + "Flashforge Adventurer A5 0.8 nozzle" + ], + "supertack_plate_temp": [ + "0" + ], + "supertack_plate_temp_initial_layer": [ + "0" + ], + "textured_cool_plate_temp": [ + "0" + ], + "textured_cool_plate_temp_initial_layer": [ + "0" + ], + "textured_plate_temp": [ + "105" + ], + "textured_plate_temp_initial_layer": [ + "105" + ] +} diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF Adventurer A5 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF Adventurer A5 0.25 nozzle.json new file mode 100644 index 0000000000..609de4b870 --- /dev/null +++ b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF Adventurer A5 0.25 nozzle.json @@ -0,0 +1,44 @@ +{ + "type": "filament", + "name": "Flashforge HS PETG @FF Adventurer A5 0.25 nozzle", + "inherits": "Flashforge HS PETG @FF AD5M 0.25 nozzle", + "from": "system", + "setting_id": "UFal5gkMUJpoiOWP", + "instantiation": "true", + "cool_plate_temp": [ + "0" + ], + "cool_plate_temp_initial_layer": [ + "0" + ], + "eng_plate_temp": [ + "70" + ], + "eng_plate_temp_initial_layer": [ + "70" + ], + "filament_settings_id": [ + "Flashforge HS PETG @FF Adventurer A5 0.25 nozzle" + ], + "compatible_printers": [ + "Flashforge Adventurer A5 0.25 nozzle" + ], + "supertack_plate_temp": [ + "70" + ], + "supertack_plate_temp_initial_layer": [ + "70" + ], + "textured_cool_plate_temp": [ + "70" + ], + "textured_cool_plate_temp_initial_layer": [ + "70" + ], + "textured_plate_temp": [ + "70" + ], + "textured_plate_temp_initial_layer": [ + "70" + ] +} diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF Adventurer A5.json b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF Adventurer A5.json new file mode 100644 index 0000000000..5825f17141 --- /dev/null +++ b/resources/profiles/Flashforge/filament/Flashforge HS PETG @FF Adventurer A5.json @@ -0,0 +1,59 @@ +{ + "type": "filament", + "name": "Flashforge HS PETG @FF Adventurer A5", + "inherits": "Generic PETG @Flashforge", + "from": "system", + "setting_id": "ZpNEEHTtvhMJS8Kv", + "filament_id": "OFDxxTpW", + "filament_vendor": [ + "Flashforge" + ], + "instantiation": "true", + "close_fan_the_first_x_layers": [ + "2" + ], + "cool_plate_temp": [ + "0" + ], + "cool_plate_temp_initial_layer": [ + "0" + ], + "eng_plate_temp": [ + "70" + ], + "eng_plate_temp_initial_layer": [ + "70" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "21" + ], + "filament_settings_id": [ + "Flashforge HS PETG @FF Adventurer A5" + ], + "compatible_printers": [ + "Flashforge Adventurer A5 0.4 nozzle", + "Flashforge Adventurer A5 0.6 nozzle", + "Flashforge Adventurer A5 0.8 nozzle" + ], + "supertack_plate_temp": [ + "70" + ], + "supertack_plate_temp_initial_layer": [ + "70" + ], + "textured_cool_plate_temp": [ + "70" + ], + "textured_cool_plate_temp_initial_layer": [ + "70" + ], + "textured_plate_temp": [ + "70" + ], + "textured_plate_temp_initial_layer": [ + "70" + ] +} diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF Adventurer A5 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF Adventurer A5 0.25 nozzle.json new file mode 100644 index 0000000000..797c72be19 --- /dev/null +++ b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF Adventurer A5 0.25 nozzle.json @@ -0,0 +1,26 @@ +{ + "type": "filament", + "name": "Flashforge HS PLA @FF Adventurer A5 0.25 nozzle", + "inherits": "Flashforge HS PLA @FF AD5M 0.25 nozzle", + "from": "system", + "setting_id": "Ewx6vNp0sDLDczPc", + "instantiation": "true", + "cool_plate_temp": [ + "40" + ], + "cool_plate_temp_initial_layer": [ + "40" + ], + "filament_settings_id": [ + "Flashforge HS PLA @FF Adventurer A5 0.25 nozzle" + ], + "compatible_printers": [ + "Flashforge Adventurer A5 0.25 nozzle" + ], + "hot_plate_temp": [ + "60" + ], + "hot_plate_temp_initial_layer": [ + "60" + ] +} diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF Adventurer A5.json b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF Adventurer A5.json new file mode 100644 index 0000000000..9f34aa44af --- /dev/null +++ b/resources/profiles/Flashforge/filament/Flashforge HS PLA @FF Adventurer A5.json @@ -0,0 +1,47 @@ +{ + "type": "filament", + "name": "Flashforge HS PLA @FF Adventurer A5", + "inherits": "Generic PLA @Flashforge", + "from": "system", + "setting_id": "2L7FS5JeAyPb3y0s", + "filament_id": "OFIK2H3G", + "filament_vendor": [ + "Flashforge" + ], + "instantiation": "true", + "cool_plate_temp": [ + "45" + ], + "cool_plate_temp_initial_layer": [ + "45" + ], + "eng_plate_temp": [ + "55" + ], + "filament_max_volumetric_speed": [ + "22" + ], + "filament_settings_id": [ + "Flashforge HS PLA @FF Adventurer A5" + ], + "compatible_printers": [ + "Flashforge Adventurer A5 0.4 nozzle", + "Flashforge Adventurer A5 0.6 nozzle", + "Flashforge Adventurer A5 0.8 nozzle" + ], + "hot_plate_temp": [ + "55" + ], + "pressure_advance": [ + "0.0325" + ], + "textured_cool_plate_temp": [ + "45" + ], + "textured_cool_plate_temp_initial_layer": [ + "45" + ], + "textured_plate_temp": [ + "55" + ] +} diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PLA+ @FF Adventurer A5 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge HS PLA+ @FF Adventurer A5 0.25 nozzle.json new file mode 100644 index 0000000000..1d6ac25b9f --- /dev/null +++ b/resources/profiles/Flashforge/filament/Flashforge HS PLA+ @FF Adventurer A5 0.25 nozzle.json @@ -0,0 +1,36 @@ +{ + "type": "filament", + "name": "Flashforge HS PLA+ @FF Adventurer A5 0.25 nozzle", + "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", + "from": "system", + "setting_id": "DeiDOP4VfKSyMtjw", + "filament_id": "OFXB8ZI7", + "instantiation": "true", + "cool_plate_temp": [ + "40" + ], + "cool_plate_temp_initial_layer": [ + "40" + ], + "eng_plate_temp_initial_layer": [ + "60" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_settings_id": [ + "Flashforge HS PLA+ @FF Adventurer A5 0.25 nozzle" + ], + "compatible_printers": [ + "Flashforge Adventurer A5 0.25 nozzle" + ], + "hot_plate_temp": [ + "60" + ], + "hot_plate_temp_initial_layer": [ + "60" + ], + "textured_plate_temp_initial_layer": [ + "60" + ] +} diff --git a/resources/profiles/Flashforge/filament/Flashforge HS PLA+ @FF Adventurer A5.json b/resources/profiles/Flashforge/filament/Flashforge HS PLA+ @FF Adventurer A5.json new file mode 100644 index 0000000000..22c1c9870f --- /dev/null +++ b/resources/profiles/Flashforge/filament/Flashforge HS PLA+ @FF Adventurer A5.json @@ -0,0 +1,50 @@ +{ + "type": "filament", + "name": "Flashforge HS PLA+ @FF Adventurer A5", + "inherits": "Generic PLA @Flashforge", + "from": "system", + "setting_id": "V4jIUQzxoZkK50mn", + "filament_id": "OFXB8ZI7", + "filament_vendor": [ + "Flashforge" + ], + "instantiation": "true", + "cool_plate_temp": [ + "45" + ], + "cool_plate_temp_initial_layer": [ + "45" + ], + "eng_plate_temp": [ + "55" + ], + "filament_flow_ratio": [ + "0.94" + ], + "filament_max_volumetric_speed": [ + "22" + ], + "filament_settings_id": [ + "Flashforge HS PLA+ @FF Adventurer A5" + ], + "compatible_printers": [ + "Flashforge Adventurer A5 0.4 nozzle", + "Flashforge Adventurer A5 0.6 nozzle", + "Flashforge Adventurer A5 0.8 nozzle" + ], + "hot_plate_temp": [ + "55" + ], + "pressure_advance": [ + "0.0325" + ], + "textured_cool_plate_temp": [ + "45" + ], + "textured_cool_plate_temp_initial_layer": [ + "45" + ], + "textured_plate_temp": [ + "55" + ] +} diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Basic @FF Adventurer A5 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG Basic @FF Adventurer A5 0.25 nozzle.json new file mode 100644 index 0000000000..ec9f63af46 --- /dev/null +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Basic @FF Adventurer A5 0.25 nozzle.json @@ -0,0 +1,44 @@ +{ + "type": "filament", + "name": "Flashforge PETG Basic @FF Adventurer A5 0.25 nozzle", + "inherits": "Flashforge PETG Basic @FF AD5M 0.25 nozzle", + "from": "system", + "setting_id": "0sotIYsGkpQpcq6Y", + "instantiation": "true", + "cool_plate_temp": [ + "0" + ], + "cool_plate_temp_initial_layer": [ + "0" + ], + "eng_plate_temp": [ + "70" + ], + "eng_plate_temp_initial_layer": [ + "70" + ], + "filament_settings_id": [ + "Flashforge PETG Basic @FF Adventurer A5 0.25 nozzle" + ], + "compatible_printers": [ + "Flashforge Adventurer A5 0.25 nozzle" + ], + "supertack_plate_temp": [ + "70" + ], + "supertack_plate_temp_initial_layer": [ + "70" + ], + "textured_cool_plate_temp": [ + "70" + ], + "textured_cool_plate_temp_initial_layer": [ + "70" + ], + "textured_plate_temp": [ + "70" + ], + "textured_plate_temp_initial_layer": [ + "70" + ] +} diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF Adventurer A5 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF Adventurer A5 0.25 nozzle.json new file mode 100644 index 0000000000..7ebc60dc50 --- /dev/null +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF Adventurer A5 0.25 nozzle.json @@ -0,0 +1,44 @@ +{ + "type": "filament", + "name": "Flashforge PETG Pro @FF Adventurer A5 0.25 nozzle", + "inherits": "Flashforge PETG Pro @FF AD5M 0.25 nozzle", + "from": "system", + "setting_id": "SZmG7gbmfOCGc8Fa", + "instantiation": "true", + "cool_plate_temp": [ + "0" + ], + "cool_plate_temp_initial_layer": [ + "0" + ], + "eng_plate_temp": [ + "70" + ], + "eng_plate_temp_initial_layer": [ + "70" + ], + "filament_settings_id": [ + "Flashforge PETG Pro @FF Adventurer A5 0.25 nozzle" + ], + "compatible_printers": [ + "Flashforge Adventurer A5 0.25 nozzle" + ], + "supertack_plate_temp": [ + "70" + ], + "supertack_plate_temp_initial_layer": [ + "70" + ], + "textured_cool_plate_temp": [ + "70" + ], + "textured_cool_plate_temp_initial_layer": [ + "70" + ], + "textured_plate_temp": [ + "70" + ], + "textured_plate_temp_initial_layer": [ + "70" + ] +} diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF Adventurer A5.json b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF Adventurer A5.json new file mode 100644 index 0000000000..b1a6a9f7e5 --- /dev/null +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Pro @FF Adventurer A5.json @@ -0,0 +1,92 @@ +{ + "type": "filament", + "name": "Flashforge PETG Pro @FF Adventurer A5", + "inherits": "Generic PETG @Flashforge", + "from": "system", + "setting_id": "rPy6e6kaIt2tI34j", + "filament_id": "OFXiArjA", + "filament_vendor": [ + "Flashforge" + ], + "instantiation": "true", + "additional_cooling_fan_speed": [ + "60" + ], + "close_fan_the_first_x_layers": [ + "2" + ], + "cool_plate_temp": [ + "0" + ], + "cool_plate_temp_initial_layer": [ + "0" + ], + "eng_plate_temp": [ + "75" + ], + "eng_plate_temp_initial_layer": [ + "75" + ], + "fan_max_speed": [ + "50" + ], + "fan_min_speed": [ + "10" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "10" + ], + "filament_settings_id": [ + "Flashforge PETG Pro @FF Adventurer A5" + ], + "compatible_printers": [ + "Flashforge Adventurer A5 0.4 nozzle", + "Flashforge Adventurer A5 0.6 nozzle", + "Flashforge Adventurer A5 0.8 nozzle" + ], + "hot_plate_temp": [ + "75" + ], + "hot_plate_temp_initial_layer": [ + "75" + ], + "nozzle_temperature": [ + "265" + ], + "nozzle_temperature_range_high": [ + "270" + ], + "overhang_fan_speed": [ + "100" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "20" + ], + "supertack_plate_temp": [ + "75" + ], + "supertack_plate_temp_initial_layer": [ + "75" + ], + "support_material_interface_fan_speed": [ + "100" + ], + "textured_cool_plate_temp": [ + "75" + ], + "textured_cool_plate_temp_initial_layer": [ + "75" + ], + "textured_plate_temp": [ + "75" + ], + "textured_plate_temp_initial_layer": [ + "75" + ] +} diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF Adventurer A5 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF Adventurer A5 0.25 nozzle.json new file mode 100644 index 0000000000..1c116250c6 --- /dev/null +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF Adventurer A5 0.25 nozzle.json @@ -0,0 +1,44 @@ +{ + "type": "filament", + "name": "Flashforge PETG Transparent @FF Adventurer A5 0.25 nozzle", + "inherits": "Flashforge PETG Transparent @FF AD5M 0.25 nozzle", + "from": "system", + "setting_id": "PJ1sXWRB5uQa7TAJ", + "instantiation": "true", + "cool_plate_temp": [ + "0" + ], + "cool_plate_temp_initial_layer": [ + "0" + ], + "eng_plate_temp": [ + "70" + ], + "eng_plate_temp_initial_layer": [ + "70" + ], + "filament_settings_id": [ + "Flashforge PETG Transparent @FF Adventurer A5 0.25 nozzle" + ], + "compatible_printers": [ + "Flashforge Adventurer A5 0.25 nozzle" + ], + "supertack_plate_temp": [ + "70" + ], + "supertack_plate_temp_initial_layer": [ + "70" + ], + "textured_cool_plate_temp": [ + "70" + ], + "textured_cool_plate_temp_initial_layer": [ + "70" + ], + "textured_plate_temp": [ + "70" + ], + "textured_plate_temp_initial_layer": [ + "70" + ] +} diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF Adventurer A5.json b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF Adventurer A5.json new file mode 100644 index 0000000000..15ccd1d0ac --- /dev/null +++ b/resources/profiles/Flashforge/filament/Flashforge PETG Transparent @FF Adventurer A5.json @@ -0,0 +1,92 @@ +{ + "type": "filament", + "name": "Flashforge PETG Transparent @FF Adventurer A5", + "inherits": "Generic PETG @Flashforge", + "from": "system", + "setting_id": "axOWrjnN5lofH9qM", + "filament_id": "OFwjMiKL", + "filament_vendor": [ + "Flashforge" + ], + "instantiation": "true", + "additional_cooling_fan_speed": [ + "60" + ], + "close_fan_the_first_x_layers": [ + "2" + ], + "cool_plate_temp": [ + "0" + ], + "cool_plate_temp_initial_layer": [ + "0" + ], + "eng_plate_temp": [ + "75" + ], + "eng_plate_temp_initial_layer": [ + "75" + ], + "fan_max_speed": [ + "50" + ], + "fan_min_speed": [ + "10" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "10" + ], + "filament_settings_id": [ + "Flashforge PETG Transparent @FF Adventurer A5" + ], + "compatible_printers": [ + "Flashforge Adventurer A5 0.4 nozzle", + "Flashforge Adventurer A5 0.6 nozzle", + "Flashforge Adventurer A5 0.8 nozzle" + ], + "hot_plate_temp": [ + "75" + ], + "hot_plate_temp_initial_layer": [ + "75" + ], + "nozzle_temperature": [ + "265" + ], + "nozzle_temperature_range_high": [ + "270" + ], + "overhang_fan_speed": [ + "100" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "20" + ], + "supertack_plate_temp": [ + "75" + ], + "supertack_plate_temp_initial_layer": [ + "75" + ], + "support_material_interface_fan_speed": [ + "100" + ], + "textured_cool_plate_temp": [ + "75" + ], + "textured_cool_plate_temp_initial_layer": [ + "75" + ], + "textured_plate_temp": [ + "75" + ], + "textured_plate_temp_initial_layer": [ + "75" + ] +} diff --git a/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF Adventurer A5.json b/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF Adventurer A5.json new file mode 100644 index 0000000000..c4001061f2 --- /dev/null +++ b/resources/profiles/Flashforge/filament/Flashforge PETG-CF @FF Adventurer A5.json @@ -0,0 +1,53 @@ +{ + "type": "filament", + "name": "Flashforge PETG-CF @FF Adventurer A5", + "inherits": "Generic PETG-CF10 @Flashforge", + "from": "system", + "setting_id": "aDSOS4PWssYHk8Fh", + "filament_id": "OFuFEtKX", + "filament_vendor": [ + "Flashforge" + ], + "instantiation": "true", + "cool_plate_temp": [ + "0" + ], + "cool_plate_temp_initial_layer": [ + "0" + ], + "eng_plate_temp": [ + "70" + ], + "eng_plate_temp_initial_layer": [ + "70" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_settings_id": [ + "Flashforge PETG-CF @FF Adventurer A5" + ], + "compatible_printers": [ + "Flashforge Adventurer A5 0.4 nozzle", + "Flashforge Adventurer A5 0.6 nozzle", + "Flashforge Adventurer A5 0.8 nozzle" + ], + "supertack_plate_temp": [ + "70" + ], + "supertack_plate_temp_initial_layer": [ + "70" + ], + "textured_cool_plate_temp": [ + "70" + ], + "textured_cool_plate_temp_initial_layer": [ + "70" + ], + "textured_plate_temp": [ + "70" + ], + "textured_plate_temp_initial_layer": [ + "70" + ] +} diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF Adventurer A5 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF Adventurer A5 0.25 nozzle.json new file mode 100644 index 0000000000..f94dbbd8c4 --- /dev/null +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF Adventurer A5 0.25 nozzle.json @@ -0,0 +1,32 @@ +{ + "type": "filament", + "name": "Flashforge PLA Basic @FF Adventurer A5 0.25 nozzle", + "inherits": "Flashforge PLA Basic @FF AD5M 0.25 nozzle", + "from": "system", + "setting_id": "e8JkrQPgHO1ekM7Q", + "instantiation": "true", + "cool_plate_temp": [ + "40" + ], + "cool_plate_temp_initial_layer": [ + "40" + ], + "eng_plate_temp_initial_layer": [ + "60" + ], + "filament_settings_id": [ + "Flashforge PLA Basic @FF Adventurer A5 0.25 nozzle" + ], + "compatible_printers": [ + "Flashforge Adventurer A5 0.25 nozzle" + ], + "hot_plate_temp": [ + "60" + ], + "hot_plate_temp_initial_layer": [ + "60" + ], + "textured_plate_temp_initial_layer": [ + "60" + ] +} diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF Adventurer A5.json b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF Adventurer A5.json new file mode 100644 index 0000000000..6fdc1bdb17 --- /dev/null +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Basic @FF Adventurer A5.json @@ -0,0 +1,47 @@ +{ + "type": "filament", + "name": "Flashforge PLA Basic @FF Adventurer A5", + "inherits": "Generic PLA @Flashforge", + "from": "system", + "setting_id": "HCpI817HAWckXBtk", + "filament_id": "OFJ3F2jm", + "filament_vendor": [ + "Flashforge" + ], + "instantiation": "true", + "cool_plate_temp": [ + "45" + ], + "cool_plate_temp_initial_layer": [ + "45" + ], + "eng_plate_temp": [ + "55" + ], + "filament_max_volumetric_speed": [ + "22" + ], + "filament_settings_id": [ + "Flashforge PLA Basic @FF Adventurer A5" + ], + "compatible_printers": [ + "Flashforge Adventurer A5 0.4 nozzle", + "Flashforge Adventurer A5 0.6 nozzle", + "Flashforge Adventurer A5 0.8 nozzle" + ], + "hot_plate_temp": [ + "55" + ], + "pressure_advance": [ + "0.0325" + ], + "textured_cool_plate_temp": [ + "45" + ], + "textured_cool_plate_temp_initial_layer": [ + "45" + ], + "textured_plate_temp": [ + "55" + ] +} diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF Adventurer A5 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF Adventurer A5 0.25 nozzle.json new file mode 100644 index 0000000000..7cd3bae5bd --- /dev/null +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF Adventurer A5 0.25 nozzle.json @@ -0,0 +1,32 @@ +{ + "type": "filament", + "name": "Flashforge PLA Color Change @FF Adventurer A5 0.25 nozzle", + "inherits": "Flashforge PLA Color Change @FF AD5M 0.25 nozzle", + "from": "system", + "setting_id": "8ifsgreK3DQhMfeh", + "instantiation": "true", + "cool_plate_temp": [ + "40" + ], + "cool_plate_temp_initial_layer": [ + "40" + ], + "eng_plate_temp_initial_layer": [ + "60" + ], + "filament_settings_id": [ + "Flashforge PLA Color Change @FF Adventurer A5 0.25 nozzle" + ], + "compatible_printers": [ + "Flashforge Adventurer A5 0.25 nozzle" + ], + "hot_plate_temp": [ + "60" + ], + "hot_plate_temp_initial_layer": [ + "60" + ], + "textured_plate_temp_initial_layer": [ + "60" + ] +} diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF Adventurer A5.json b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF Adventurer A5.json new file mode 100644 index 0000000000..2eeb85526c --- /dev/null +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Color Change @FF Adventurer A5.json @@ -0,0 +1,47 @@ +{ + "type": "filament", + "name": "Flashforge PLA Color Change @FF Adventurer A5", + "inherits": "Generic PLA @Flashforge", + "from": "system", + "setting_id": "o1Fl6t8nFCKZoj3Q", + "filament_id": "OFMkAW6r", + "filament_vendor": [ + "Flashforge" + ], + "instantiation": "true", + "cool_plate_temp": [ + "45" + ], + "cool_plate_temp_initial_layer": [ + "45" + ], + "eng_plate_temp": [ + "55" + ], + "filament_max_volumetric_speed": [ + "22" + ], + "filament_settings_id": [ + "Flashforge PLA Color Change @FF Adventurer A5" + ], + "compatible_printers": [ + "Flashforge Adventurer A5 0.4 nozzle", + "Flashforge Adventurer A5 0.6 nozzle", + "Flashforge Adventurer A5 0.8 nozzle" + ], + "hot_plate_temp": [ + "55" + ], + "pressure_advance": [ + "0.035" + ], + "textured_cool_plate_temp": [ + "45" + ], + "textured_cool_plate_temp_initial_layer": [ + "45" + ], + "textured_plate_temp": [ + "55" + ] +} diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF Adventurer A5 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF Adventurer A5 0.25 nozzle.json new file mode 100644 index 0000000000..c75415adf9 --- /dev/null +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF Adventurer A5 0.25 nozzle.json @@ -0,0 +1,32 @@ +{ + "type": "filament", + "name": "Flashforge PLA Galaxy @FF Adventurer A5 0.25 nozzle", + "inherits": "Flashforge PLA Galaxy @FF AD5M 0.25 nozzle", + "from": "system", + "setting_id": "WViVLfSsNolVB55w", + "instantiation": "true", + "cool_plate_temp": [ + "40" + ], + "cool_plate_temp_initial_layer": [ + "40" + ], + "eng_plate_temp_initial_layer": [ + "60" + ], + "filament_settings_id": [ + "Flashforge PLA Galaxy @FF Adventurer A5 0.25 nozzle" + ], + "compatible_printers": [ + "Flashforge Adventurer A5 0.25 nozzle" + ], + "hot_plate_temp": [ + "60" + ], + "hot_plate_temp_initial_layer": [ + "60" + ], + "textured_plate_temp_initial_layer": [ + "60" + ] +} diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF Adventurer A5.json b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF Adventurer A5.json new file mode 100644 index 0000000000..a833b55331 --- /dev/null +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Galaxy @FF Adventurer A5.json @@ -0,0 +1,47 @@ +{ + "type": "filament", + "name": "Flashforge PLA Galaxy @FF Adventurer A5", + "inherits": "Generic PLA @Flashforge", + "from": "system", + "setting_id": "4rpfTTgZrsVDwxI9", + "filament_id": "OFJJ0Ar3", + "filament_vendor": [ + "Flashforge" + ], + "instantiation": "true", + "cool_plate_temp": [ + "45" + ], + "cool_plate_temp_initial_layer": [ + "45" + ], + "eng_plate_temp": [ + "55" + ], + "filament_max_volumetric_speed": [ + "22" + ], + "filament_settings_id": [ + "Flashforge PLA Galaxy @FF Adventurer A5" + ], + "compatible_printers": [ + "Flashforge Adventurer A5 0.4 nozzle", + "Flashforge Adventurer A5 0.6 nozzle", + "Flashforge Adventurer A5 0.8 nozzle" + ], + "hot_plate_temp": [ + "55" + ], + "pressure_advance": [ + "0.0325" + ], + "textured_cool_plate_temp": [ + "45" + ], + "textured_cool_plate_temp_initial_layer": [ + "45" + ], + "textured_plate_temp": [ + "55" + ] +} diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA LITE @FF Adventurer A5 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA LITE @FF Adventurer A5 0.25 nozzle.json new file mode 100644 index 0000000000..85f661e98f --- /dev/null +++ b/resources/profiles/Flashforge/filament/Flashforge PLA LITE @FF Adventurer A5 0.25 nozzle.json @@ -0,0 +1,36 @@ +{ + "type": "filament", + "name": "Flashforge PLA LITE @FF Adventurer A5 0.25 nozzle", + "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", + "from": "system", + "setting_id": "FpqRF3Gw0ftvpvay", + "filament_id": "OFDDdgHM", + "instantiation": "true", + "cool_plate_temp": [ + "40" + ], + "cool_plate_temp_initial_layer": [ + "40" + ], + "eng_plate_temp_initial_layer": [ + "60" + ], + "filament_flow_ratio": [ + "1.04" + ], + "filament_settings_id": [ + "Flashforge PLA LITE @FF Adventurer A5 0.25 nozzle" + ], + "compatible_printers": [ + "Flashforge Adventurer A5 0.25 nozzle" + ], + "hot_plate_temp": [ + "60" + ], + "hot_plate_temp_initial_layer": [ + "60" + ], + "textured_plate_temp_initial_layer": [ + "60" + ] +} diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA LITE @FF Adventurer A5.json b/resources/profiles/Flashforge/filament/Flashforge PLA LITE @FF Adventurer A5.json new file mode 100644 index 0000000000..36e0a64d69 --- /dev/null +++ b/resources/profiles/Flashforge/filament/Flashforge PLA LITE @FF Adventurer A5.json @@ -0,0 +1,50 @@ +{ + "type": "filament", + "name": "Flashforge PLA LITE @FF Adventurer A5", + "inherits": "Generic PLA @Flashforge", + "from": "system", + "setting_id": "2QZaQyg66IJPbsSc", + "filament_id": "OFDDdgHM", + "filament_vendor": [ + "Flashforge" + ], + "instantiation": "true", + "cool_plate_temp": [ + "45" + ], + "cool_plate_temp_initial_layer": [ + "45" + ], + "eng_plate_temp": [ + "55" + ], + "filament_flow_ratio": [ + "1.02" + ], + "filament_max_volumetric_speed": [ + "22" + ], + "filament_settings_id": [ + "Flashforge PLA LITE @FF Adventurer A5" + ], + "compatible_printers": [ + "Flashforge Adventurer A5 0.4 nozzle", + "Flashforge Adventurer A5 0.6 nozzle", + "Flashforge Adventurer A5 0.8 nozzle" + ], + "hot_plate_temp": [ + "55" + ], + "pressure_advance": [ + "0.0325" + ], + "textured_cool_plate_temp": [ + "45" + ], + "textured_cool_plate_temp_initial_layer": [ + "45" + ], + "textured_plate_temp": [ + "55" + ] +} diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF Adventurer A5 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF Adventurer A5 0.25 nozzle.json new file mode 100644 index 0000000000..53a0749e1d --- /dev/null +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF Adventurer A5 0.25 nozzle.json @@ -0,0 +1,32 @@ +{ + "type": "filament", + "name": "Flashforge PLA Luminous @FF Adventurer A5 0.25 nozzle", + "inherits": "Flashforge PLA Luminous @FF AD5M 0.25 nozzle", + "from": "system", + "setting_id": "e3Yir3COUY9MyFdE", + "instantiation": "true", + "cool_plate_temp": [ + "40" + ], + "cool_plate_temp_initial_layer": [ + "40" + ], + "eng_plate_temp_initial_layer": [ + "60" + ], + "filament_settings_id": [ + "Flashforge PLA Luminous @FF Adventurer A5 0.25 nozzle" + ], + "compatible_printers": [ + "Flashforge Adventurer A5 0.25 nozzle" + ], + "hot_plate_temp": [ + "60" + ], + "hot_plate_temp_initial_layer": [ + "60" + ], + "textured_plate_temp_initial_layer": [ + "60" + ] +} diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF Adventurer A5.json b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF Adventurer A5.json new file mode 100644 index 0000000000..0be02b85f5 --- /dev/null +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Luminous @FF Adventurer A5.json @@ -0,0 +1,47 @@ +{ + "type": "filament", + "name": "Flashforge PLA Luminous @FF Adventurer A5", + "inherits": "Generic PLA @Flashforge", + "from": "system", + "setting_id": "GqNeJoH4M1IVAXrZ", + "filament_id": "OFdqkWtz", + "filament_vendor": [ + "Flashforge" + ], + "instantiation": "true", + "cool_plate_temp": [ + "45" + ], + "cool_plate_temp_initial_layer": [ + "45" + ], + "eng_plate_temp": [ + "55" + ], + "filament_max_volumetric_speed": [ + "22" + ], + "filament_settings_id": [ + "Flashforge PLA Luminous @FF Adventurer A5" + ], + "compatible_printers": [ + "Flashforge Adventurer A5 0.4 nozzle", + "Flashforge Adventurer A5 0.6 nozzle", + "Flashforge Adventurer A5 0.8 nozzle" + ], + "hot_plate_temp": [ + "55" + ], + "pressure_advance": [ + "0.0325" + ], + "textured_cool_plate_temp": [ + "45" + ], + "textured_cool_plate_temp_initial_layer": [ + "45" + ], + "textured_plate_temp": [ + "55" + ] +} diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF Adventurer A5 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF Adventurer A5 0.25 nozzle.json new file mode 100644 index 0000000000..cc011b9336 --- /dev/null +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF Adventurer A5 0.25 nozzle.json @@ -0,0 +1,32 @@ +{ + "type": "filament", + "name": "Flashforge PLA Matte @FF Adventurer A5 0.25 nozzle", + "inherits": "Flashforge PLA Matte @FF AD5M 0.25 nozzle", + "from": "system", + "setting_id": "o2Ttw4qaxOTgEWtp", + "instantiation": "true", + "cool_plate_temp": [ + "40" + ], + "cool_plate_temp_initial_layer": [ + "40" + ], + "eng_plate_temp_initial_layer": [ + "60" + ], + "filament_settings_id": [ + "Flashforge PLA Matte @FF Adventurer A5 0.25 nozzle" + ], + "compatible_printers": [ + "Flashforge Adventurer A5 0.25 nozzle" + ], + "hot_plate_temp": [ + "60" + ], + "hot_plate_temp_initial_layer": [ + "60" + ], + "textured_plate_temp_initial_layer": [ + "60" + ] +} diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF Adventurer A5.json b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF Adventurer A5.json new file mode 100644 index 0000000000..33a2228f8d --- /dev/null +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Matte @FF Adventurer A5.json @@ -0,0 +1,47 @@ +{ + "type": "filament", + "name": "Flashforge PLA Matte @FF Adventurer A5", + "inherits": "Generic PLA @Flashforge", + "from": "system", + "setting_id": "Jk7PRQkF2lFEtI8Q", + "filament_id": "OF6qAuyi", + "filament_vendor": [ + "Flashforge" + ], + "instantiation": "true", + "cool_plate_temp": [ + "45" + ], + "cool_plate_temp_initial_layer": [ + "45" + ], + "eng_plate_temp": [ + "55" + ], + "filament_max_volumetric_speed": [ + "22" + ], + "filament_settings_id": [ + "Flashforge PLA Matte @FF Adventurer A5" + ], + "compatible_printers": [ + "Flashforge Adventurer A5 0.4 nozzle", + "Flashforge Adventurer A5 0.6 nozzle", + "Flashforge Adventurer A5 0.8 nozzle" + ], + "hot_plate_temp": [ + "55" + ], + "pressure_advance": [ + "0.0325" + ], + "textured_cool_plate_temp": [ + "45" + ], + "textured_cool_plate_temp_initial_layer": [ + "45" + ], + "textured_plate_temp": [ + "55" + ] +} diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF Adventurer A5 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF Adventurer A5 0.25 nozzle.json new file mode 100644 index 0000000000..92a8d1c8db --- /dev/null +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF Adventurer A5 0.25 nozzle.json @@ -0,0 +1,32 @@ +{ + "type": "filament", + "name": "Flashforge PLA Metal @FF Adventurer A5 0.25 nozzle", + "inherits": "Flashforge PLA Metal @FF AD5M 0.25 nozzle", + "from": "system", + "setting_id": "eg4osx9bpk61uXvT", + "instantiation": "true", + "cool_plate_temp": [ + "40" + ], + "cool_plate_temp_initial_layer": [ + "40" + ], + "eng_plate_temp_initial_layer": [ + "60" + ], + "filament_settings_id": [ + "Flashforge PLA Metal @FF Adventurer A5 0.25 nozzle" + ], + "compatible_printers": [ + "Flashforge Adventurer A5 0.25 nozzle" + ], + "hot_plate_temp": [ + "60" + ], + "hot_plate_temp_initial_layer": [ + "60" + ], + "textured_plate_temp_initial_layer": [ + "60" + ] +} diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF Adventurer A5.json b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF Adventurer A5.json new file mode 100644 index 0000000000..1ef06a756b --- /dev/null +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Metal @FF Adventurer A5.json @@ -0,0 +1,47 @@ +{ + "type": "filament", + "name": "Flashforge PLA Metal @FF Adventurer A5", + "inherits": "Generic PLA @Flashforge", + "from": "system", + "setting_id": "Gs8hS5CpV3W62pjs", + "filament_id": "OFAebKg8", + "filament_vendor": [ + "Flashforge" + ], + "instantiation": "true", + "cool_plate_temp": [ + "45" + ], + "cool_plate_temp_initial_layer": [ + "45" + ], + "eng_plate_temp": [ + "55" + ], + "filament_max_volumetric_speed": [ + "22" + ], + "filament_settings_id": [ + "Flashforge PLA Metal @FF Adventurer A5" + ], + "compatible_printers": [ + "Flashforge Adventurer A5 0.4 nozzle", + "Flashforge Adventurer A5 0.6 nozzle", + "Flashforge Adventurer A5 0.8 nozzle" + ], + "hot_plate_temp": [ + "55" + ], + "pressure_advance": [ + "0.0325" + ], + "textured_cool_plate_temp": [ + "45" + ], + "textured_cool_plate_temp_initial_layer": [ + "45" + ], + "textured_plate_temp": [ + "55" + ] +} diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF Adventurer A5 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF Adventurer A5 0.25 nozzle.json new file mode 100644 index 0000000000..15f7813b78 --- /dev/null +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF Adventurer A5 0.25 nozzle.json @@ -0,0 +1,32 @@ +{ + "type": "filament", + "name": "Flashforge PLA Pro @FF Adventurer A5 0.25 nozzle", + "inherits": "Flashforge PLA Pro @FF AD5M 0.25 nozzle", + "from": "system", + "setting_id": "sD9IWFJxvKTDfpXm", + "instantiation": "true", + "cool_plate_temp": [ + "40" + ], + "cool_plate_temp_initial_layer": [ + "40" + ], + "eng_plate_temp_initial_layer": [ + "60" + ], + "filament_settings_id": [ + "Flashforge PLA Pro @FF Adventurer A5 0.25 nozzle" + ], + "compatible_printers": [ + "Flashforge Adventurer A5 0.25 nozzle" + ], + "hot_plate_temp": [ + "60" + ], + "hot_plate_temp_initial_layer": [ + "60" + ], + "textured_plate_temp_initial_layer": [ + "60" + ] +} diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF Adventurer A5.json b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF Adventurer A5.json new file mode 100644 index 0000000000..416c8bf207 --- /dev/null +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Pro @FF Adventurer A5.json @@ -0,0 +1,47 @@ +{ + "type": "filament", + "name": "Flashforge PLA Pro @FF Adventurer A5", + "inherits": "Generic PLA @Flashforge", + "from": "system", + "setting_id": "vTVCr1id0cTtMzuE", + "filament_id": "OFm4SivL", + "filament_vendor": [ + "Flashforge" + ], + "instantiation": "true", + "cool_plate_temp": [ + "45" + ], + "cool_plate_temp_initial_layer": [ + "45" + ], + "eng_plate_temp": [ + "55" + ], + "filament_max_volumetric_speed": [ + "22" + ], + "filament_settings_id": [ + "Flashforge PLA Pro @FF Adventurer A5" + ], + "compatible_printers": [ + "Flashforge Adventurer A5 0.4 nozzle", + "Flashforge Adventurer A5 0.6 nozzle", + "Flashforge Adventurer A5 0.8 nozzle" + ], + "hot_plate_temp": [ + "55" + ], + "pressure_advance": [ + "0.0325" + ], + "textured_cool_plate_temp": [ + "45" + ], + "textured_cool_plate_temp_initial_layer": [ + "45" + ], + "textured_plate_temp": [ + "55" + ] +} diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF Adventurer A5 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF Adventurer A5 0.25 nozzle.json new file mode 100644 index 0000000000..0a63c055a3 --- /dev/null +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF Adventurer A5 0.25 nozzle.json @@ -0,0 +1,35 @@ +{ + "type": "filament", + "name": "Flashforge PLA Silk @FF Adventurer A5 0.25 nozzle", + "inherits": "Flashforge PLA Silk @FF AD5M 0.25 nozzle", + "from": "system", + "setting_id": "ipe3qzXePPZ9pMmY", + "instantiation": "true", + "cool_plate_temp": [ + "40" + ], + "cool_plate_temp_initial_layer": [ + "40" + ], + "eng_plate_temp_initial_layer": [ + "60" + ], + "filament_settings_id": [ + "Flashforge PLA Silk @FF Adventurer A5 0.25 nozzle" + ], + "compatible_printers": [ + "Flashforge Adventurer A5 0.25 nozzle" + ], + "hot_plate_temp": [ + "60" + ], + "hot_plate_temp_initial_layer": [ + "60" + ], + "nozzle_temperature": [ + "220" + ], + "textured_plate_temp_initial_layer": [ + "60" + ] +} diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF Adventurer A5.json b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF Adventurer A5.json new file mode 100644 index 0000000000..e157b16c6d --- /dev/null +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Silk @FF Adventurer A5.json @@ -0,0 +1,47 @@ +{ + "type": "filament", + "name": "Flashforge PLA Silk @FF Adventurer A5", + "inherits": "Generic PLA-Silk @Flashforge", + "from": "system", + "setting_id": "XXmeUWaLyVCTDS6G", + "filament_id": "OFgjgN35", + "filament_vendor": [ + "Flashforge" + ], + "instantiation": "true", + "cool_plate_temp": [ + "45" + ], + "cool_plate_temp_initial_layer": [ + "45" + ], + "eng_plate_temp": [ + "55" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_settings_id": [ + "Flashforge PLA Silk @FF Adventurer A5" + ], + "compatible_printers": [ + "Flashforge Adventurer A5 0.4 nozzle", + "Flashforge Adventurer A5 0.6 nozzle", + "Flashforge Adventurer A5 0.8 nozzle" + ], + "hot_plate_temp": [ + "55" + ], + "pressure_advance": [ + "0.035" + ], + "textured_cool_plate_temp": [ + "45" + ], + "textured_cool_plate_temp_initial_layer": [ + "45" + ], + "textured_plate_temp": [ + "55" + ] +} diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF Adventurer A5 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF Adventurer A5 0.25 nozzle.json new file mode 100644 index 0000000000..ebf72e7fb1 --- /dev/null +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF Adventurer A5 0.25 nozzle.json @@ -0,0 +1,32 @@ +{ + "type": "filament", + "name": "Flashforge PLA Sparkle @FF Adventurer A5 0.25 nozzle", + "inherits": "Flashforge PLA Sparkle @FF AD5M 0.25 nozzle", + "from": "system", + "setting_id": "VV75FchmjnPjnDE8", + "instantiation": "true", + "cool_plate_temp": [ + "40" + ], + "cool_plate_temp_initial_layer": [ + "40" + ], + "eng_plate_temp_initial_layer": [ + "60" + ], + "filament_settings_id": [ + "Flashforge PLA Sparkle @FF Adventurer A5 0.25 nozzle" + ], + "compatible_printers": [ + "Flashforge Adventurer A5 0.25 nozzle" + ], + "hot_plate_temp": [ + "60" + ], + "hot_plate_temp_initial_layer": [ + "60" + ], + "textured_plate_temp_initial_layer": [ + "60" + ] +} diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF Adventurer A5.json b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF Adventurer A5.json new file mode 100644 index 0000000000..b7954c6677 --- /dev/null +++ b/resources/profiles/Flashforge/filament/Flashforge PLA Sparkle @FF Adventurer A5.json @@ -0,0 +1,47 @@ +{ + "type": "filament", + "name": "Flashforge PLA Sparkle @FF Adventurer A5", + "inherits": "Generic PLA @Flashforge", + "from": "system", + "setting_id": "dscnwSfbrGWiS4Um", + "filament_id": "OFV5c8hG", + "filament_vendor": [ + "Flashforge" + ], + "instantiation": "true", + "cool_plate_temp": [ + "45" + ], + "cool_plate_temp_initial_layer": [ + "45" + ], + "eng_plate_temp": [ + "55" + ], + "filament_max_volumetric_speed": [ + "22" + ], + "filament_settings_id": [ + "Flashforge PLA Sparkle @FF Adventurer A5" + ], + "compatible_printers": [ + "Flashforge Adventurer A5 0.4 nozzle", + "Flashforge Adventurer A5 0.6 nozzle", + "Flashforge Adventurer A5 0.8 nozzle" + ], + "hot_plate_temp": [ + "55" + ], + "pressure_advance": [ + "0.0325" + ], + "textured_cool_plate_temp": [ + "45" + ], + "textured_cool_plate_temp_initial_layer": [ + "45" + ], + "textured_plate_temp": [ + "55" + ] +} diff --git a/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF Adventurer A5.json b/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF Adventurer A5.json new file mode 100644 index 0000000000..542045cdeb --- /dev/null +++ b/resources/profiles/Flashforge/filament/Flashforge PLA-CF @FF Adventurer A5.json @@ -0,0 +1,56 @@ +{ + "type": "filament", + "name": "Flashforge PLA-CF @FF Adventurer A5", + "inherits": "Generic PLA-CF10 @Flashforge", + "from": "system", + "setting_id": "EpC2ItdGUxFV7x1y", + "filament_id": "OF9cAwMK", + "filament_vendor": [ + "Flashforge" + ], + "instantiation": "true", + "cool_plate_temp": [ + "45" + ], + "cool_plate_temp_initial_layer": [ + "45" + ], + "eng_plate_temp": [ + "55" + ], + "eng_plate_temp_initial_layer": [ + "55" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "15" + ], + "filament_settings_id": [ + "Flashforge PLA-CF @FF Adventurer A5" + ], + "compatible_printers": [ + "Flashforge Adventurer A5 0.4 nozzle", + "Flashforge Adventurer A5 0.6 nozzle", + "Flashforge Adventurer A5 0.8 nozzle" + ], + "hot_plate_temp": [ + "55" + ], + "pressure_advance": [ + "0.0325" + ], + "textured_cool_plate_temp": [ + "45" + ], + "textured_cool_plate_temp_initial_layer": [ + "45" + ], + "textured_plate_temp": [ + "55" + ], + "textured_plate_temp_initial_layer": [ + "55" + ] +} diff --git a/resources/profiles/Flashforge/filament/Flashforge R PLA @FF Adventurer A5 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Flashforge R PLA @FF Adventurer A5 0.25 nozzle.json new file mode 100644 index 0000000000..e898843db9 --- /dev/null +++ b/resources/profiles/Flashforge/filament/Flashforge R PLA @FF Adventurer A5 0.25 nozzle.json @@ -0,0 +1,33 @@ +{ + "type": "filament", + "name": "Flashforge R PLA @FF Adventurer A5 0.25 nozzle", + "inherits": "Flashforge PLA @FF AD5M 0.25 Nozzle", + "from": "system", + "setting_id": "G0qAKoO8Dyo0hO6G", + "filament_id": "OFT02Lz9", + "instantiation": "true", + "cool_plate_temp": [ + "40" + ], + "cool_plate_temp_initial_layer": [ + "40" + ], + "eng_plate_temp_initial_layer": [ + "60" + ], + "filament_settings_id": [ + "Flashforge R PLA @FF Adventurer A5 0.25 nozzle" + ], + "compatible_printers": [ + "Flashforge Adventurer A5 0.25 nozzle" + ], + "hot_plate_temp": [ + "60" + ], + "hot_plate_temp_initial_layer": [ + "60" + ], + "textured_plate_temp_initial_layer": [ + "60" + ] +} diff --git a/resources/profiles/Flashforge/filament/Flashforge R PLA @FF Adventurer A5.json b/resources/profiles/Flashforge/filament/Flashforge R PLA @FF Adventurer A5.json new file mode 100644 index 0000000000..e5511d5622 --- /dev/null +++ b/resources/profiles/Flashforge/filament/Flashforge R PLA @FF Adventurer A5.json @@ -0,0 +1,50 @@ +{ + "type": "filament", + "name": "Flashforge R PLA @FF Adventurer A5", + "inherits": "Generic PLA @Flashforge", + "from": "system", + "setting_id": "sN7eGcbuGZxGrbR5", + "filament_id": "OFT02Lz9", + "filament_vendor": [ + "Flashforge" + ], + "instantiation": "true", + "cool_plate_temp": [ + "45" + ], + "cool_plate_temp_initial_layer": [ + "45" + ], + "eng_plate_temp": [ + "55" + ], + "filament_max_volumetric_speed": [ + "22" + ], + "filament_settings_id": [ + "Flashforge R PLA @FF Adventurer A5" + ], + "compatible_printers": [ + "Flashforge Adventurer A5 0.4 nozzle", + "Flashforge Adventurer A5 0.6 nozzle", + "Flashforge Adventurer A5 0.8 nozzle" + ], + "hot_plate_temp": [ + "55" + ], + "pressure_advance": [ + "0.0325" + ], + "slow_down_layer_time": [ + "8" + ], + "textured_cool_plate_temp": [ + "45" + ], + "textured_cool_plate_temp_initial_layer": [ + "45" + ], + "textured_plate_temp": [ + "55" + ] +} diff --git a/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF Adventurer A5.json b/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF Adventurer A5.json new file mode 100644 index 0000000000..19b0981798 --- /dev/null +++ b/resources/profiles/Flashforge/filament/Flashforge TPU 95A @FF Adventurer A5.json @@ -0,0 +1,38 @@ +{ + "type": "filament", + "name": "Flashforge TPU 95A @FF Adventurer A5", + "inherits": "Generic TPU @Flashforge", + "from": "system", + "setting_id": "2MT9C2rvvQ3uU1lG", + "filament_id": "OFSqIcJC", + "filament_vendor": [ + "Flashforge" + ], + "instantiation": "true", + "cool_plate_temp": [ + "40" + ], + "cool_plate_temp_initial_layer": [ + "40" + ], + "eng_plate_temp": [ + "45" + ], + "eng_plate_temp_initial_layer": [ + "45" + ], + "filament_settings_id": [ + "Flashforge TPU 95A @FF Adventurer A5" + ], + "compatible_printers": [ + "Flashforge Adventurer A5 0.4 nozzle", + "Flashforge Adventurer A5 0.6 nozzle", + "Flashforge Adventurer A5 0.8 nozzle" + ], + "textured_plate_temp": [ + "45" + ], + "textured_plate_temp_initial_layer": [ + "45" + ] +} diff --git a/resources/profiles/Flashforge/filament/Generic PETG @FF Adventurer A5 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Generic PETG @FF Adventurer A5 0.25 nozzle.json new file mode 100644 index 0000000000..764b31e9c4 --- /dev/null +++ b/resources/profiles/Flashforge/filament/Generic PETG @FF Adventurer A5 0.25 nozzle.json @@ -0,0 +1,17 @@ +{ + "type": "filament", + "name": "Generic PETG @FF Adventurer A5 0.25 nozzle", + "inherits": "Generic PETG @FF AD5M 0.25 Nozzle", + "from": "system", + "setting_id": "KSKX6BHNQgmOEShO", + "instantiation": "true", + "filament_max_volumetric_speed": [ + "1.2" + ], + "filament_settings_id": [ + "Generic PETG @FF Adventurer A5 0.25 nozzle" + ], + "compatible_printers": [ + "Flashforge Adventurer A5 0.25 nozzle" + ] +} diff --git a/resources/profiles/Flashforge/filament/Generic PLA @FF Adventurer A5 0.25 nozzle.json b/resources/profiles/Flashforge/filament/Generic PLA @FF Adventurer A5 0.25 nozzle.json new file mode 100644 index 0000000000..416e42006f --- /dev/null +++ b/resources/profiles/Flashforge/filament/Generic PLA @FF Adventurer A5 0.25 nozzle.json @@ -0,0 +1,35 @@ +{ + "type": "filament", + "name": "Generic PLA @FF Adventurer A5 0.25 nozzle", + "inherits": "Generic PLA @FF AD5M 0.25 Nozzle", + "from": "system", + "setting_id": "kHdLzX8Auwz9tFvw", + "instantiation": "true", + "cool_plate_temp": [ + "40" + ], + "cool_plate_temp_initial_layer": [ + "40" + ], + "eng_plate_temp_initial_layer": [ + "60" + ], + "filament_max_volumetric_speed": [ + "2.2" + ], + "filament_settings_id": [ + "Generic PLA @FF Adventurer A5 0.25 nozzle" + ], + "compatible_printers": [ + "Flashforge Adventurer A5 0.25 nozzle" + ], + "hot_plate_temp": [ + "60" + ], + "hot_plate_temp_initial_layer": [ + "60" + ], + "textured_plate_temp_initial_layer": [ + "60" + ] +} diff --git a/resources/profiles/Flashforge/filament/Kexcelled TPU 64D @FF Adventurer A5.json b/resources/profiles/Flashforge/filament/Kexcelled TPU 64D @FF Adventurer A5.json new file mode 100644 index 0000000000..285af63564 --- /dev/null +++ b/resources/profiles/Flashforge/filament/Kexcelled TPU 64D @FF Adventurer A5.json @@ -0,0 +1,38 @@ +{ + "type": "filament", + "name": "Kexcelled TPU 64D @FF Adventurer A5", + "inherits": "Generic TPU @Flashforge", + "from": "system", + "setting_id": "OB4I8nwZn8sCcCcF", + "filament_id": "OF20zavY", + "filament_vendor": [ + "Kexcelled" + ], + "instantiation": "true", + "cool_plate_temp": [ + "40" + ], + "cool_plate_temp_initial_layer": [ + "40" + ], + "eng_plate_temp": [ + "45" + ], + "eng_plate_temp_initial_layer": [ + "45" + ], + "filament_settings_id": [ + "Kexcelled TPU 64D @FF Adventurer A5" + ], + "compatible_printers": [ + "Flashforge Adventurer A5 0.4 nozzle", + "Flashforge Adventurer A5 0.6 nozzle", + "Flashforge Adventurer A5 0.8 nozzle" + ], + "textured_plate_temp": [ + "45" + ], + "textured_plate_temp_initial_layer": [ + "45" + ] +} diff --git a/resources/profiles/Flashforge/machine/Flashforge Adventurer A5 0.25 nozzle.json b/resources/profiles/Flashforge/machine/Flashforge Adventurer A5 0.25 nozzle.json new file mode 100644 index 0000000000..d9665ff0bb --- /dev/null +++ b/resources/profiles/Flashforge/machine/Flashforge Adventurer A5 0.25 nozzle.json @@ -0,0 +1,233 @@ +{ + "type": "machine", + "name": "Flashforge Adventurer A5 0.25 nozzle", + "inherits": "Flashforge Adventurer 5M Pro 0.25 Nozzle", + "from": "system", + "setting_id": "TZyRxvTiJNKNJWCD", + "instantiation": "true", + "adaptive_bed_mesh_margin": "0", + "auxiliary_fan": "1", + "bbl_use_printhost": "0", + "bed_custom_model": "", + "bed_custom_texture": "", + "bed_exclude_area": [ + "0x0" + ], + "bed_mesh_max": "99999,99999", + "bed_mesh_min": "-99999,-99999", + "bed_mesh_probe_distance": "50,50", + "before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\n;[layer_z]", + "best_object_pos": "0.5,0.5", + "change_extrusion_role_gcode": "", + "change_filament_gcode": "", + "cooling_tube_length": "0", + "cooling_tube_retraction": "0", + "default_filament_profile": [ + "Generic PLA @Flashforge" + ], + "default_print_profile": "0.12mm Standard @FF Adventurer A5 0.25 nozzle", + "deretraction_speed": [ + "35" + ], + "disable_m73": "0", + "emit_machine_limits_to_gcode": "1", + "enable_filament_ramming": "0", + "enable_long_retraction_when_cut": "0", + "extra_loading_move": "0", + "extruder_clearance_height_to_lid": "150", + "extruder_clearance_height_to_rod": "27", + "extruder_clearance_radius": "76", + "extruder_colour": [ + "#FCE94F" + ], + "extruder_offset": [ + "0x0" + ], + "fan_kickstart": "0", + "fan_speedup_overhangs": "1", + "fan_speedup_time": "0", + "gcode_flavor": "klipper", + "head_wrap_detect_zone": [], + "high_current_on_filament_swap": "0", + "host_type": "octoprint", + "layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]", + "long_retractions_when_cut": [ + "0" + ], + "machine_end_gcode": "G1 E-3 F3600\nG0 X50 Y50 F30000\nM104 S0 ; turn off temperature", + "machine_load_filament_time": "0", + "machine_max_acceleration_e": [ + "5000", + "5000" + ], + "machine_max_acceleration_extruding": [ + "20000", + "20000" + ], + "machine_max_acceleration_retracting": [ + "5000", + "5000" + ], + "machine_max_acceleration_travel": [ + "20000", + "20000" + ], + "machine_max_acceleration_x": [ + "20000", + "20000" + ], + "machine_max_acceleration_y": [ + "20000", + "20000" + ], + "machine_max_acceleration_z": [ + "500", + "500" + ], + "machine_max_jerk_e": [ + "2.5", + "2.5" + ], + "machine_max_jerk_x": [ + "9", + "9" + ], + "machine_max_jerk_y": [ + "9", + "9" + ], + "machine_max_jerk_z": [ + "3", + "3" + ], + "machine_max_speed_e": [ + "30", + "30" + ], + "machine_max_speed_x": [ + "600", + "600" + ], + "machine_max_speed_y": [ + "600", + "600" + ], + "machine_max_speed_z": [ + "20", + "20" + ], + "machine_min_extruding_rate": [ + "0", + "0" + ], + "machine_min_travel_rate": [ + "0", + "0" + ], + "machine_pause_gcode": "PAUSE", + "machine_start_gcode": "M190 S[bed_temperature_initial_layer_single]\nM104 S[nozzle_temperature_initial_layer]\nG1 Z5 F6000\nG90 E0\nM83\nG1 E-1 F600\nG1 E8 F300\nG1 X85 Y110 Z0.2 F1200\nG1 X-110 E15 F2400\nG1 Y0 E4 F2400\nG1 X-109.6 F2400\nG1 Y110 E5 F2400\nG92 E0", + "machine_tool_change_time": "0", + "machine_unload_filament_time": "0", + "manual_filament_change": "0", + "max_layer_height": [ + "0.14" + ], + "min_layer_height": [ + "0.08" + ], + "nozzle_diameter": [ + "0.25" + ], + "nozzle_height": "2.5", + "nozzle_hrc": "0", + "nozzle_type": "stainless_steel", + "nozzle_volume": "0", + "parking_pos_retraction": "0", + "pellet_modded_printer": "0", + "preferred_orientation": "0", + "printable_area": [ + "-110x-110", + "110x-110", + "110x110", + "-110x110" + ], + "printable_height": "220", + "printer_model": "Flashforge Adventurer A5", + "printer_notes": "", + "printer_settings_id": "Flashforge Adventurer A5 0.25 nozzle", + "printer_structure": "undefine", + "printer_technology": "FFF", + "printer_variant": "0.25", + "printhost_authorization_type": "key", + "printhost_ssl_ignore_revoke": "0", + "printing_by_object_gcode": "", + "purge_in_prime_tower": "1", + "retract_before_wipe": [ + "100%" + ], + "retract_length_toolchange": [ + "2" + ], + "retract_lift_above": [ + "0" + ], + "retract_lift_below": [ + "0" + ], + "retract_lift_enforce": [ + "All Surfaces" + ], + "retract_on_top_layer": [ + "1" + ], + "retract_restart_extra": [ + "0" + ], + "retract_restart_extra_toolchange": [ + "0" + ], + "retract_when_changing_layer": [ + "1" + ], + "retraction_distances_when_cut": [ + "18" + ], + "retraction_length": [ + "1" + ], + "retraction_minimum_travel": [ + "1" + ], + "retraction_speed": [ + "35" + ], + "scan_first_layer": "0", + "single_extruder_multi_material": "0", + "support_air_filtration": "1", + "support_chamber_temp_control": "1", + "support_multi_bed_types": "1", + "template_custom_gcode": "", + "thumbnails": "140x110/PNG", + "thumbnails_format": "PNG", + "time_cost": "0", + "time_lapse_gcode": "", + "travel_slope": [ + "3" + ], + "upward_compatible_machine": [], + "use_firmware_retraction": "0", + "use_relative_e_distances": "1", + "wipe": [ + "1" + ], + "wipe_distance": [ + "2" + ], + "z_hop": [ + "0.3" + ], + "z_hop_types": [ + "Auto Lift" + ], + "z_offset": "0" +} diff --git a/resources/profiles/Flashforge/machine/Flashforge Adventurer A5 0.4 nozzle.json b/resources/profiles/Flashforge/machine/Flashforge Adventurer A5 0.4 nozzle.json new file mode 100644 index 0000000000..04de9fb9ec --- /dev/null +++ b/resources/profiles/Flashforge/machine/Flashforge Adventurer A5 0.4 nozzle.json @@ -0,0 +1,233 @@ +{ + "type": "machine", + "name": "Flashforge Adventurer A5 0.4 nozzle", + "inherits": "Flashforge Adventurer 5M Pro 0.4 Nozzle", + "from": "system", + "setting_id": "EOhWyVbRzFtAc33v", + "instantiation": "true", + "adaptive_bed_mesh_margin": "0", + "auxiliary_fan": "1", + "bbl_use_printhost": "0", + "bed_custom_model": "", + "bed_custom_texture": "", + "bed_exclude_area": [ + "0x0" + ], + "bed_mesh_max": "99999,99999", + "bed_mesh_min": "-99999,-99999", + "bed_mesh_probe_distance": "50,50", + "before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\n;[layer_z]", + "best_object_pos": "0.5,0.5", + "change_extrusion_role_gcode": "", + "change_filament_gcode": "", + "cooling_tube_length": "0", + "cooling_tube_retraction": "0", + "default_filament_profile": [ + "Generic PLA @Flashforge" + ], + "default_print_profile": "0.20mm Standard @FF Adventurer A5 0.4 nozzle", + "deretraction_speed": [ + "35" + ], + "disable_m73": "0", + "emit_machine_limits_to_gcode": "1", + "enable_filament_ramming": "0", + "enable_long_retraction_when_cut": "0", + "extra_loading_move": "0", + "extruder_clearance_height_to_lid": "150", + "extruder_clearance_height_to_rod": "27", + "extruder_clearance_radius": "76", + "extruder_colour": [ + "#FCE94F" + ], + "extruder_offset": [ + "0x0" + ], + "fan_kickstart": "0", + "fan_speedup_overhangs": "1", + "fan_speedup_time": "0", + "gcode_flavor": "klipper", + "head_wrap_detect_zone": [], + "high_current_on_filament_swap": "0", + "host_type": "octoprint", + "layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]", + "long_retractions_when_cut": [ + "0" + ], + "machine_end_gcode": "G1 E-3 F3600\nG0 X50 Y50 F30000\nM104 S0 ; turn off temperature", + "machine_load_filament_time": "0", + "machine_max_acceleration_e": [ + "5000", + "5000" + ], + "machine_max_acceleration_extruding": [ + "20000", + "20000" + ], + "machine_max_acceleration_retracting": [ + "5000", + "5000" + ], + "machine_max_acceleration_travel": [ + "20000", + "20000" + ], + "machine_max_acceleration_x": [ + "20000", + "20000" + ], + "machine_max_acceleration_y": [ + "20000", + "20000" + ], + "machine_max_acceleration_z": [ + "500", + "500" + ], + "machine_max_jerk_e": [ + "2.5", + "2.5" + ], + "machine_max_jerk_x": [ + "9", + "9" + ], + "machine_max_jerk_y": [ + "9", + "9" + ], + "machine_max_jerk_z": [ + "3", + "3" + ], + "machine_max_speed_e": [ + "30", + "30" + ], + "machine_max_speed_x": [ + "600", + "600" + ], + "machine_max_speed_y": [ + "600", + "600" + ], + "machine_max_speed_z": [ + "20", + "20" + ], + "machine_min_extruding_rate": [ + "0", + "0" + ], + "machine_min_travel_rate": [ + "0", + "0" + ], + "machine_pause_gcode": "PAUSE", + "machine_start_gcode": "M190 S[bed_temperature_initial_layer_single]\nM104 S[nozzle_temperature_initial_layer]\nG90\nM83\nG1 Z5 F6000\nG1 E-0.2 F800\nG1 X110 Y-110 F6000\nG1 E2 F800\nG1 Y-110 X55 Z0.25 F4800\nG1 X-55 E8 F2400\nG1 Y-109.6 F2400\nG1 X55 E5 F2400\nG1 Y-110 X55 Z0.45 F4800\nG1 X-55 E8 F2400\nG1 Y-109.6 F2400\nG1 X55 E5 F2400\nG92 E0", + "machine_tool_change_time": "0", + "machine_unload_filament_time": "0", + "manual_filament_change": "0", + "max_layer_height": [ + "0.28" + ], + "min_layer_height": [ + "0.08" + ], + "nozzle_diameter": [ + "0.4" + ], + "nozzle_height": "2.5", + "nozzle_hrc": "0", + "nozzle_type": "hardened_steel", + "nozzle_volume": "0", + "parking_pos_retraction": "0", + "pellet_modded_printer": "0", + "preferred_orientation": "0", + "printable_area": [ + "-110x-110", + "110x-110", + "110x110", + "-110x110" + ], + "printable_height": "220", + "printer_model": "Flashforge Adventurer A5", + "printer_notes": "", + "printer_settings_id": "Flashforge Adventurer A5 0.4 nozzle", + "printer_structure": "undefine", + "printer_technology": "FFF", + "printer_variant": "0.4", + "printhost_authorization_type": "key", + "printhost_ssl_ignore_revoke": "0", + "printing_by_object_gcode": "", + "purge_in_prime_tower": "1", + "retract_before_wipe": [ + "100%" + ], + "retract_length_toolchange": [ + "2" + ], + "retract_lift_above": [ + "0" + ], + "retract_lift_below": [ + "0" + ], + "retract_lift_enforce": [ + "All Surfaces" + ], + "retract_on_top_layer": [ + "1" + ], + "retract_restart_extra": [ + "0" + ], + "retract_restart_extra_toolchange": [ + "0" + ], + "retract_when_changing_layer": [ + "1" + ], + "retraction_distances_when_cut": [ + "18" + ], + "retraction_length": [ + "0.8" + ], + "retraction_minimum_travel": [ + "1" + ], + "retraction_speed": [ + "35" + ], + "scan_first_layer": "0", + "single_extruder_multi_material": "0", + "support_air_filtration": "1", + "support_chamber_temp_control": "1", + "support_multi_bed_types": "1", + "template_custom_gcode": "", + "thumbnails": "140x110/PNG", + "thumbnails_format": "PNG", + "time_cost": "0", + "time_lapse_gcode": "", + "travel_slope": [ + "3" + ], + "upward_compatible_machine": [], + "use_firmware_retraction": "0", + "use_relative_e_distances": "1", + "wipe": [ + "1" + ], + "wipe_distance": [ + "2" + ], + "z_hop": [ + "0.4" + ], + "z_hop_types": [ + "Auto Lift" + ], + "z_offset": "0" +} diff --git a/resources/profiles/Flashforge/machine/Flashforge Adventurer A5 0.6 nozzle.json b/resources/profiles/Flashforge/machine/Flashforge Adventurer A5 0.6 nozzle.json new file mode 100644 index 0000000000..0ac8ffe783 --- /dev/null +++ b/resources/profiles/Flashforge/machine/Flashforge Adventurer A5 0.6 nozzle.json @@ -0,0 +1,233 @@ +{ + "type": "machine", + "name": "Flashforge Adventurer A5 0.6 nozzle", + "inherits": "Flashforge Adventurer 5M Pro 0.6 Nozzle", + "from": "system", + "setting_id": "gu3ZxlImr6zK3yb6", + "instantiation": "true", + "adaptive_bed_mesh_margin": "0", + "auxiliary_fan": "1", + "bbl_use_printhost": "0", + "bed_custom_model": "", + "bed_custom_texture": "", + "bed_exclude_area": [ + "0x0" + ], + "bed_mesh_max": "99999,99999", + "bed_mesh_min": "-99999,-99999", + "bed_mesh_probe_distance": "50,50", + "before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\n;[layer_z]", + "best_object_pos": "0.5,0.5", + "change_extrusion_role_gcode": "", + "change_filament_gcode": "", + "cooling_tube_length": "0", + "cooling_tube_retraction": "0", + "default_filament_profile": [ + "Generic PLA @Flashforge" + ], + "default_print_profile": "0.30mm Standard @FF Adventurer A5 0.6 nozzle", + "deretraction_speed": [ + "35" + ], + "disable_m73": "0", + "emit_machine_limits_to_gcode": "1", + "enable_filament_ramming": "0", + "enable_long_retraction_when_cut": "0", + "extra_loading_move": "0", + "extruder_clearance_height_to_lid": "150", + "extruder_clearance_height_to_rod": "27", + "extruder_clearance_radius": "76", + "extruder_colour": [ + "#FCE94F" + ], + "extruder_offset": [ + "0x0" + ], + "fan_kickstart": "0", + "fan_speedup_overhangs": "1", + "fan_speedup_time": "0", + "gcode_flavor": "klipper", + "head_wrap_detect_zone": [], + "high_current_on_filament_swap": "0", + "host_type": "octoprint", + "layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]", + "long_retractions_when_cut": [ + "0" + ], + "machine_end_gcode": "G1 E-3 F3600\nG0 X50 Y50 F30000\nM104 S0 ; turn off temperature", + "machine_load_filament_time": "0", + "machine_max_acceleration_e": [ + "5000", + "5000" + ], + "machine_max_acceleration_extruding": [ + "20000", + "20000" + ], + "machine_max_acceleration_retracting": [ + "5000", + "5000" + ], + "machine_max_acceleration_travel": [ + "20000", + "20000" + ], + "machine_max_acceleration_x": [ + "20000", + "20000" + ], + "machine_max_acceleration_y": [ + "20000", + "20000" + ], + "machine_max_acceleration_z": [ + "500", + "500" + ], + "machine_max_jerk_e": [ + "2.5", + "2.5" + ], + "machine_max_jerk_x": [ + "9", + "9" + ], + "machine_max_jerk_y": [ + "9", + "9" + ], + "machine_max_jerk_z": [ + "3", + "3" + ], + "machine_max_speed_e": [ + "30", + "30" + ], + "machine_max_speed_x": [ + "600", + "600" + ], + "machine_max_speed_y": [ + "600", + "600" + ], + "machine_max_speed_z": [ + "20", + "20" + ], + "machine_min_extruding_rate": [ + "0", + "0" + ], + "machine_min_travel_rate": [ + "0", + "0" + ], + "machine_pause_gcode": "PAUSE", + "machine_start_gcode": "M190 S[bed_temperature_initial_layer_single]\nM104 S[nozzle_temperature_initial_layer]\nG90\nM83\nG1 Z5 F6000\nG1 E-0.2 F800\nG1 X110 Y-110 F6000\nG1 E2 F800\nG1 Y-110 X55 Z0.25 F4800\nG1 X-55 E8 F2400\nG1 Y-109.6 F2400\nG1 X55 E5 F2400\nG1 Y-110 X55 Z0.45 F4800\nG1 X-55 E8 F2400\nG1 Y-109.6 F2400\nG1 X55 E5 F2400\nG92 E0", + "machine_tool_change_time": "0", + "machine_unload_filament_time": "0", + "manual_filament_change": "0", + "max_layer_height": [ + "0.42" + ], + "min_layer_height": [ + "0.15" + ], + "nozzle_diameter": [ + "0.6" + ], + "nozzle_height": "2.5", + "nozzle_hrc": "0", + "nozzle_type": "hardened_steel", + "nozzle_volume": "0", + "parking_pos_retraction": "0", + "pellet_modded_printer": "0", + "preferred_orientation": "0", + "printable_area": [ + "-110x-110", + "110x-110", + "110x110", + "-110x110" + ], + "printable_height": "220", + "printer_model": "Flashforge Adventurer A5", + "printer_notes": "", + "printer_settings_id": "Flashforge Adventurer A5 0.6 nozzle", + "printer_structure": "undefine", + "printer_technology": "FFF", + "printer_variant": "0.6", + "printhost_authorization_type": "key", + "printhost_ssl_ignore_revoke": "0", + "printing_by_object_gcode": "", + "purge_in_prime_tower": "1", + "retract_before_wipe": [ + "100%" + ], + "retract_length_toolchange": [ + "2" + ], + "retract_lift_above": [ + "0" + ], + "retract_lift_below": [ + "0" + ], + "retract_lift_enforce": [ + "All Surfaces" + ], + "retract_on_top_layer": [ + "1" + ], + "retract_restart_extra": [ + "0" + ], + "retract_restart_extra_toolchange": [ + "0" + ], + "retract_when_changing_layer": [ + "1" + ], + "retraction_distances_when_cut": [ + "18" + ], + "retraction_length": [ + "1.2" + ], + "retraction_minimum_travel": [ + "1" + ], + "retraction_speed": [ + "35" + ], + "scan_first_layer": "0", + "single_extruder_multi_material": "0", + "support_air_filtration": "1", + "support_chamber_temp_control": "1", + "support_multi_bed_types": "1", + "template_custom_gcode": "", + "thumbnails": "140x110/PNG", + "thumbnails_format": "PNG", + "time_cost": "0", + "time_lapse_gcode": "", + "travel_slope": [ + "3" + ], + "upward_compatible_machine": [], + "use_firmware_retraction": "0", + "use_relative_e_distances": "1", + "wipe": [ + "1" + ], + "wipe_distance": [ + "2" + ], + "z_hop": [ + "0.4" + ], + "z_hop_types": [ + "Auto Lift" + ], + "z_offset": "0" +} diff --git a/resources/profiles/Flashforge/machine/Flashforge Adventurer A5 0.8 nozzle.json b/resources/profiles/Flashforge/machine/Flashforge Adventurer A5 0.8 nozzle.json new file mode 100644 index 0000000000..e982ec00a9 --- /dev/null +++ b/resources/profiles/Flashforge/machine/Flashforge Adventurer A5 0.8 nozzle.json @@ -0,0 +1,233 @@ +{ + "type": "machine", + "name": "Flashforge Adventurer A5 0.8 nozzle", + "inherits": "Flashforge Adventurer 5M Pro 0.8 Nozzle", + "from": "system", + "setting_id": "tKE8SP6KOhIupWbU", + "instantiation": "true", + "adaptive_bed_mesh_margin": "0", + "auxiliary_fan": "1", + "bbl_use_printhost": "0", + "bed_custom_model": "", + "bed_custom_texture": "", + "bed_exclude_area": [ + "0x0" + ], + "bed_mesh_max": "99999,99999", + "bed_mesh_min": "-99999,-99999", + "bed_mesh_probe_distance": "50,50", + "before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\n;[layer_z]", + "best_object_pos": "0.5,0.5", + "change_extrusion_role_gcode": "", + "change_filament_gcode": "", + "cooling_tube_length": "0", + "cooling_tube_retraction": "0", + "default_filament_profile": [ + "Generic PLA @Flashforge" + ], + "default_print_profile": "0.40mm Standard @FF Adventurer A5 0.8 nozzle", + "deretraction_speed": [ + "35" + ], + "disable_m73": "0", + "emit_machine_limits_to_gcode": "1", + "enable_filament_ramming": "0", + "enable_long_retraction_when_cut": "0", + "extra_loading_move": "0", + "extruder_clearance_height_to_lid": "150", + "extruder_clearance_height_to_rod": "27", + "extruder_clearance_radius": "76", + "extruder_colour": [ + "#FCE94F" + ], + "extruder_offset": [ + "0x0" + ], + "fan_kickstart": "0", + "fan_speedup_overhangs": "1", + "fan_speedup_time": "0", + "gcode_flavor": "klipper", + "head_wrap_detect_zone": [], + "high_current_on_filament_swap": "0", + "host_type": "octoprint", + "layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]", + "long_retractions_when_cut": [ + "0" + ], + "machine_end_gcode": "G1 E-3 F3600\nG0 X50 Y50 F30000\nM104 S0 ; turn off temperature", + "machine_load_filament_time": "0", + "machine_max_acceleration_e": [ + "5000", + "5000" + ], + "machine_max_acceleration_extruding": [ + "20000", + "20000" + ], + "machine_max_acceleration_retracting": [ + "5000", + "5000" + ], + "machine_max_acceleration_travel": [ + "20000", + "20000" + ], + "machine_max_acceleration_x": [ + "20000", + "20000" + ], + "machine_max_acceleration_y": [ + "20000", + "20000" + ], + "machine_max_acceleration_z": [ + "500", + "500" + ], + "machine_max_jerk_e": [ + "2.5", + "2.5" + ], + "machine_max_jerk_x": [ + "9", + "9" + ], + "machine_max_jerk_y": [ + "9", + "9" + ], + "machine_max_jerk_z": [ + "3", + "3" + ], + "machine_max_speed_e": [ + "30", + "30" + ], + "machine_max_speed_x": [ + "600", + "600" + ], + "machine_max_speed_y": [ + "600", + "600" + ], + "machine_max_speed_z": [ + "20", + "20" + ], + "machine_min_extruding_rate": [ + "0", + "0" + ], + "machine_min_travel_rate": [ + "0", + "0" + ], + "machine_pause_gcode": "PAUSE", + "machine_start_gcode": "M190 S[bed_temperature_initial_layer_single]\nM104 S[nozzle_temperature_initial_layer]\nG1 Z5 F6000\nG1 E-1.5 F600\nG1 E12 F800\nG1 X85 Y110 Z0.3 F1200\nG1 X-110 E30 F2400\nG1 Y0 E8 F2400\nG1 X-109.6 F2400\nG1 Y110 E10 F2400\nG92 E0", + "machine_tool_change_time": "0", + "machine_unload_filament_time": "0", + "manual_filament_change": "0", + "max_layer_height": [ + "0.56" + ], + "min_layer_height": [ + "0.24" + ], + "nozzle_diameter": [ + "0.8" + ], + "nozzle_height": "2.5", + "nozzle_hrc": "0", + "nozzle_type": "hardened_steel", + "nozzle_volume": "0", + "parking_pos_retraction": "0", + "pellet_modded_printer": "0", + "preferred_orientation": "0", + "printable_area": [ + "-110x-110", + "110x-110", + "110x110", + "-110x110" + ], + "printable_height": "220", + "printer_model": "Flashforge Adventurer A5", + "printer_notes": "", + "printer_settings_id": "Flashforge Adventurer A5 0.8 nozzle", + "printer_structure": "undefine", + "printer_technology": "FFF", + "printer_variant": "0.8", + "printhost_authorization_type": "key", + "printhost_ssl_ignore_revoke": "0", + "printing_by_object_gcode": "", + "purge_in_prime_tower": "1", + "retract_before_wipe": [ + "100%" + ], + "retract_length_toolchange": [ + "2" + ], + "retract_lift_above": [ + "0" + ], + "retract_lift_below": [ + "0" + ], + "retract_lift_enforce": [ + "All Surfaces" + ], + "retract_on_top_layer": [ + "1" + ], + "retract_restart_extra": [ + "0" + ], + "retract_restart_extra_toolchange": [ + "0" + ], + "retract_when_changing_layer": [ + "1" + ], + "retraction_distances_when_cut": [ + "18" + ], + "retraction_length": [ + "1.5" + ], + "retraction_minimum_travel": [ + "1" + ], + "retraction_speed": [ + "35" + ], + "scan_first_layer": "0", + "single_extruder_multi_material": "0", + "support_air_filtration": "1", + "support_chamber_temp_control": "1", + "support_multi_bed_types": "1", + "template_custom_gcode": "", + "thumbnails": "140x110/PNG", + "thumbnails_format": "PNG", + "time_cost": "0", + "time_lapse_gcode": "", + "travel_slope": [ + "3" + ], + "upward_compatible_machine": [], + "use_firmware_retraction": "0", + "use_relative_e_distances": "1", + "wipe": [ + "1" + ], + "wipe_distance": [ + "2" + ], + "z_hop": [ + "0" + ], + "z_hop_types": [ + "Auto Lift" + ], + "z_offset": "0" +} diff --git a/resources/profiles/Flashforge/machine/Flashforge Adventurer A5.json b/resources/profiles/Flashforge/machine/Flashforge Adventurer A5.json new file mode 100644 index 0000000000..8b7c579ca4 --- /dev/null +++ b/resources/profiles/Flashforge/machine/Flashforge Adventurer A5.json @@ -0,0 +1,12 @@ +{ + "type": "machine_model", + "name": "Flashforge Adventurer A5", + "model_id": "Flashforge-Adventurer-A5", + "nozzle_diameter": "0.25;0.4;0.6;0.8", + "machine_tech": "FFF", + "family": "Flashforge", + "bed_model": "flashforge_adventurer5m_series_buildplate_model.STL", + "bed_texture": "flashforge_adventurer5m_buildplate_texture.svg", + "hotend_model": "flashforge_adventurer_5m_series_hotend.STL", + "default_materials": "Generic ABS @Flashforge;Generic PETG @Flashforge;Generic PLA @Flashforge;Flashforge PLA Basic @FF Adventurer A5;Generic PLA @FF Adventurer A5 0.25 nozzle" +} diff --git a/resources/profiles/Flashforge/process/0.06mm Standard @FF Adventurer A5 0.25 nozzle.json b/resources/profiles/Flashforge/process/0.06mm Standard @FF Adventurer A5 0.25 nozzle.json new file mode 100644 index 0000000000..62a2cbd3d1 --- /dev/null +++ b/resources/profiles/Flashforge/process/0.06mm Standard @FF Adventurer A5 0.25 nozzle.json @@ -0,0 +1,23 @@ +{ + "type": "process", + "name": "0.06mm Standard @FF Adventurer A5 0.25 nozzle", + "inherits": "0.06mm Standard @Flashforge AD5M Pro 0.25 Nozzle", + "from": "system", + "setting_id": "426xS3MFF3smfdDE", + "instantiation": "true", + "elefant_foot_compensation": "0.15", + "enable_arc_fitting": "1", + "filename_format": "{input_filename_base}_{filament_type[initial_tool]}_{print_time}.gcode", + "compatible_printers": [ + "Flashforge Adventurer A5 0.25 nozzle" + ], + "infill_wall_overlap": "15%", + "only_one_wall_top": "1", + "print_settings_id": "0.06mm Standard @FF Adventurer A5 0.25 nozzle", + "seam_slope_conditional": "1", + "seam_slope_inner_walls": "1", + "slowdown_for_curled_perimeters": "0", + "small_perimeter_speed": "25", + "sparse_infill_pattern": "grid", + "wipe_speed": "200" +} diff --git a/resources/profiles/Flashforge/process/0.08mm Standard @FF Adventurer A5 0.25 nozzle.json b/resources/profiles/Flashforge/process/0.08mm Standard @FF Adventurer A5 0.25 nozzle.json new file mode 100644 index 0000000000..21c8dd069b --- /dev/null +++ b/resources/profiles/Flashforge/process/0.08mm Standard @FF Adventurer A5 0.25 nozzle.json @@ -0,0 +1,23 @@ +{ + "type": "process", + "name": "0.08mm Standard @FF Adventurer A5 0.25 nozzle", + "inherits": "0.08mm Standard @Flashforge AD5M Pro 0.25 Nozzle", + "from": "system", + "setting_id": "2N8NG8IpxxCPXZlq", + "instantiation": "true", + "elefant_foot_compensation": "0.15", + "enable_arc_fitting": "1", + "filename_format": "{input_filename_base}_{filament_type[initial_tool]}_{print_time}.gcode", + "compatible_printers": [ + "Flashforge Adventurer A5 0.25 nozzle" + ], + "infill_wall_overlap": "15%", + "only_one_wall_top": "1", + "print_settings_id": "0.08mm Standard @FF Adventurer A5 0.25 nozzle", + "seam_slope_conditional": "1", + "seam_slope_inner_walls": "1", + "slowdown_for_curled_perimeters": "0", + "small_perimeter_speed": "25", + "sparse_infill_pattern": "grid", + "wipe_speed": "200" +} diff --git a/resources/profiles/Flashforge/process/0.10mm Standard @FF Adventurer A5 0.25 nozzle.json b/resources/profiles/Flashforge/process/0.10mm Standard @FF Adventurer A5 0.25 nozzle.json new file mode 100644 index 0000000000..a53d6c235f --- /dev/null +++ b/resources/profiles/Flashforge/process/0.10mm Standard @FF Adventurer A5 0.25 nozzle.json @@ -0,0 +1,23 @@ +{ + "type": "process", + "name": "0.10mm Standard @FF Adventurer A5 0.25 nozzle", + "inherits": "0.10mm Standard @Flashforge AD5M Pro 0.25 Nozzle", + "from": "system", + "setting_id": "H74U0yaiNgyQpdbc", + "instantiation": "true", + "elefant_foot_compensation": "0.15", + "enable_arc_fitting": "1", + "filename_format": "{input_filename_base}_{filament_type[initial_tool]}_{print_time}.gcode", + "compatible_printers": [ + "Flashforge Adventurer A5 0.25 nozzle" + ], + "infill_wall_overlap": "15%", + "only_one_wall_top": "1", + "print_settings_id": "0.10mm Standard @FF Adventurer A5 0.25 nozzle", + "seam_slope_conditional": "1", + "seam_slope_inner_walls": "1", + "slowdown_for_curled_perimeters": "0", + "small_perimeter_speed": "25", + "sparse_infill_pattern": "grid", + "wipe_speed": "200" +} diff --git a/resources/profiles/Flashforge/process/0.12mm Fine @FF Adventurer A5 0.4 nozzle.json b/resources/profiles/Flashforge/process/0.12mm Fine @FF Adventurer A5 0.4 nozzle.json new file mode 100644 index 0000000000..58b5bc5c5d --- /dev/null +++ b/resources/profiles/Flashforge/process/0.12mm Fine @FF Adventurer A5 0.4 nozzle.json @@ -0,0 +1,24 @@ +{ + "type": "process", + "name": "0.12mm Fine @FF Adventurer A5 0.4 nozzle", + "inherits": "0.12mm Fine @Flashforge AD5M Pro 0.4 Nozzle", + "from": "system", + "setting_id": "G5AhxHk95GfXw6ec", + "instantiation": "true", + "bridge_flow": "1", + "enable_arc_fitting": "1", + "filename_format": "{input_filename_base}_{filament_type[initial_tool]}_{print_time}.gcode", + "compatible_printers": [ + "Flashforge Adventurer A5 0.4 nozzle" + ], + "infill_wall_overlap": "15%", + "initial_layer_print_height": "0.2", + "only_one_wall_top": "1", + "print_settings_id": "0.12mm Fine @FF Adventurer A5 0.4 nozzle", + "seam_slope_conditional": "1", + "seam_slope_inner_walls": "1", + "slowdown_for_curled_perimeters": "0", + "small_perimeter_speed": "25", + "sparse_infill_pattern": "grid", + "support_line_width": "0.42" +} diff --git a/resources/profiles/Flashforge/process/0.12mm Standard @FF Adventurer A5 0.25 nozzle.json b/resources/profiles/Flashforge/process/0.12mm Standard @FF Adventurer A5 0.25 nozzle.json new file mode 100644 index 0000000000..ddd5449889 --- /dev/null +++ b/resources/profiles/Flashforge/process/0.12mm Standard @FF Adventurer A5 0.25 nozzle.json @@ -0,0 +1,17 @@ +{ + "type": "process", + "name": "0.12mm Standard @FF Adventurer A5 0.25 nozzle", + "inherits": "0.12mm Standard @Flashforge AD5M Pro 0.25 Nozzle", + "from": "system", + "setting_id": "x28lWqpQxkirzYXm", + "instantiation": "true", + "enable_arc_fitting": "1", + "compatible_printers": [ + "Flashforge Adventurer A5 0.25 nozzle" + ], + "infill_wall_overlap": "15%", + "only_one_wall_top": "1", + "slowdown_for_curled_perimeters": "0", + "print_settings_id": "0.12mm Standard @FF Adventurer A5 0.25 nozzle", + "sparse_infill_pattern": "grid" +} diff --git a/resources/profiles/Flashforge/process/0.14mm Standard @FF Adventurer A5 0.25 nozzle.json b/resources/profiles/Flashforge/process/0.14mm Standard @FF Adventurer A5 0.25 nozzle.json new file mode 100644 index 0000000000..09cf76fb60 --- /dev/null +++ b/resources/profiles/Flashforge/process/0.14mm Standard @FF Adventurer A5 0.25 nozzle.json @@ -0,0 +1,23 @@ +{ + "type": "process", + "name": "0.14mm Standard @FF Adventurer A5 0.25 nozzle", + "inherits": "0.14mm Standard @Flashforge AD5M Pro 0.25 Nozzle", + "from": "system", + "setting_id": "Xx4fcIZ3esI4IXbl", + "instantiation": "true", + "elefant_foot_compensation": "0.15", + "enable_arc_fitting": "1", + "filename_format": "{input_filename_base}_{filament_type[initial_tool]}_{print_time}.gcode", + "compatible_printers": [ + "Flashforge Adventurer A5 0.25 nozzle" + ], + "infill_wall_overlap": "15%", + "only_one_wall_top": "1", + "print_settings_id": "0.14mm Standard @FF Adventurer A5 0.25 nozzle", + "seam_slope_conditional": "1", + "seam_slope_inner_walls": "1", + "slowdown_for_curled_perimeters": "0", + "small_perimeter_speed": "25", + "sparse_infill_pattern": "grid", + "wipe_speed": "200" +} diff --git a/resources/profiles/Flashforge/process/0.18mm Fine @FF Adventurer A5 0.6 nozzle.json b/resources/profiles/Flashforge/process/0.18mm Fine @FF Adventurer A5 0.6 nozzle.json new file mode 100644 index 0000000000..6213e93574 --- /dev/null +++ b/resources/profiles/Flashforge/process/0.18mm Fine @FF Adventurer A5 0.6 nozzle.json @@ -0,0 +1,24 @@ +{ + "type": "process", + "name": "0.18mm Fine @FF Adventurer A5 0.6 nozzle", + "inherits": "0.18mm Fine @Flashforge AD5M Pro 0.6 Nozzle", + "from": "system", + "setting_id": "USICCgjHQ4aHkqMM", + "instantiation": "true", + "enable_arc_fitting": "1", + "enable_support": "1", + "filename_format": "{input_filename_base}_{filament_type[initial_tool]}_{print_time}.gcode", + "compatible_printers": [ + "Flashforge Adventurer A5 0.6 nozzle" + ], + "infill_wall_overlap": "15%", + "initial_layer_print_height": "0.25", + "only_one_wall_top": "1", + "print_settings_id": "0.18mm Fine @FF Adventurer A5 0.6 nozzle", + "seam_slope_conditional": "1", + "seam_slope_inner_walls": "1", + "slowdown_for_curled_perimeters": "0", + "small_perimeter_speed": "25", + "support_bottom_z_distance": "0.2", + "support_top_z_distance": "0.2" +} diff --git a/resources/profiles/Flashforge/process/0.20mm Standard @FF Adventurer A5 0.4 nozzle.json b/resources/profiles/Flashforge/process/0.20mm Standard @FF Adventurer A5 0.4 nozzle.json new file mode 100644 index 0000000000..4f1e8cba7c --- /dev/null +++ b/resources/profiles/Flashforge/process/0.20mm Standard @FF Adventurer A5 0.4 nozzle.json @@ -0,0 +1,21 @@ +{ + "type": "process", + "name": "0.20mm Standard @FF Adventurer A5 0.4 nozzle", + "inherits": "0.20mm Standard @Flashforge AD5M Pro 0.4 Nozzle", + "from": "system", + "setting_id": "ZrWC7sW8I5eH0nI0", + "instantiation": "true", + "enable_arc_fitting": "1", + "compatible_printers": [ + "Flashforge Adventurer A5 0.4 nozzle" + ], + "infill_wall_overlap": "15%", + "only_one_wall_top": "1", + "print_settings_id": "0.20mm Standard @FF Adventurer A5 0.4 nozzle", + "seam_slope_conditional": "1", + "seam_slope_inner_walls": "1", + "slowdown_for_curled_perimeters": "0", + "small_perimeter_speed": "25", + "support_bottom_z_distance": "0.2", + "support_top_z_distance": "0.2" +} diff --git a/resources/profiles/Flashforge/process/0.24mm Draft @FF Adventurer A5 0.4 nozzle.json b/resources/profiles/Flashforge/process/0.24mm Draft @FF Adventurer A5 0.4 nozzle.json new file mode 100644 index 0000000000..7cbac2a836 --- /dev/null +++ b/resources/profiles/Flashforge/process/0.24mm Draft @FF Adventurer A5 0.4 nozzle.json @@ -0,0 +1,23 @@ +{ + "type": "process", + "name": "0.24mm Draft @FF Adventurer A5 0.4 nozzle", + "inherits": "0.24mm Draft @Flashforge AD5M Pro 0.4 Nozzle", + "from": "system", + "setting_id": "nniAHPVQxmVlEZqp", + "instantiation": "true", + "enable_arc_fitting": "1", + "filename_format": "{input_filename_base}_{filament_type[initial_tool]}_{print_time}.gcode", + "compatible_printers": [ + "Flashforge Adventurer A5 0.4 nozzle" + ], + "infill_wall_overlap": "15%", + "initial_layer_print_height": "0.25", + "only_one_wall_top": "1", + "print_settings_id": "0.24mm Draft @FF Adventurer A5 0.4 nozzle", + "seam_slope_conditional": "1", + "seam_slope_inner_walls": "1", + "slowdown_for_curled_perimeters": "0", + "small_perimeter_speed": "25", + "support_bottom_z_distance": "0.2", + "support_top_z_distance": "0.2" +} diff --git a/resources/profiles/Flashforge/process/0.24mm Fine @FF Adventurer A5 0.8 nozzle.json b/resources/profiles/Flashforge/process/0.24mm Fine @FF Adventurer A5 0.8 nozzle.json new file mode 100644 index 0000000000..8ff452ef10 --- /dev/null +++ b/resources/profiles/Flashforge/process/0.24mm Fine @FF Adventurer A5 0.8 nozzle.json @@ -0,0 +1,19 @@ +{ + "type": "process", + "name": "0.24mm Fine @FF Adventurer A5 0.8 nozzle", + "inherits": "0.24mm Fine @Flashforge AD5M Pro 0.8 Nozzle", + "from": "system", + "setting_id": "INfUgOlQBMZLYrfu", + "instantiation": "true", + "bridge_flow": "1", + "enable_arc_fitting": "1", + "compatible_printers": [ + "Flashforge Adventurer A5 0.8 nozzle" + ], + "infill_wall_overlap": "15%", + "initial_layer_print_height": "0.3", + "only_one_wall_top": "1", + "print_settings_id": "0.24mm Fine @FF Adventurer A5 0.8 nozzle", + "slowdown_for_curled_perimeters": "0", + "sparse_infill_pattern": "grid" +} diff --git a/resources/profiles/Flashforge/process/0.30mm Standard @FF Adventurer A5 0.6 nozzle.json b/resources/profiles/Flashforge/process/0.30mm Standard @FF Adventurer A5 0.6 nozzle.json new file mode 100644 index 0000000000..d8376dad80 --- /dev/null +++ b/resources/profiles/Flashforge/process/0.30mm Standard @FF Adventurer A5 0.6 nozzle.json @@ -0,0 +1,22 @@ +{ + "type": "process", + "name": "0.30mm Standard @FF Adventurer A5 0.6 nozzle", + "inherits": "0.30mm Standard @Flashforge AD5M Pro 0.6 Nozzle", + "from": "system", + "setting_id": "zNxUHo9HvYPlL2KP", + "instantiation": "true", + "enable_arc_fitting": "1", + "compatible_printers": [ + "Flashforge Adventurer A5 0.6 nozzle" + ], + "infill_wall_overlap": "15%", + "only_one_wall_top": "1", + "print_settings_id": "0.30mm Standard @FF Adventurer A5 0.6 nozzle", + "seam_slope_conditional": "1", + "seam_slope_inner_walls": "1", + "slowdown_for_curled_perimeters": "0", + "small_perimeter_speed": "25", + "sparse_infill_pattern": "grid", + "support_bottom_z_distance": "0.2", + "support_top_z_distance": "0.2" +} diff --git a/resources/profiles/Flashforge/process/0.40mm Standard @FF Adventurer A5 0.8 nozzle.json b/resources/profiles/Flashforge/process/0.40mm Standard @FF Adventurer A5 0.8 nozzle.json new file mode 100644 index 0000000000..4a0300bccc --- /dev/null +++ b/resources/profiles/Flashforge/process/0.40mm Standard @FF Adventurer A5 0.8 nozzle.json @@ -0,0 +1,18 @@ +{ + "type": "process", + "name": "0.40mm Standard @FF Adventurer A5 0.8 nozzle", + "inherits": "0.40mm Standard @Flashforge AD5M Pro 0.8 Nozzle", + "from": "system", + "setting_id": "Davfy2YyV2b7ofhd", + "instantiation": "true", + "enable_arc_fitting": "1", + "compatible_printers": [ + "Flashforge Adventurer A5 0.8 nozzle" + ], + "infill_wall_overlap": "15%", + "print_settings_id": "0.40mm Standard @FF Adventurer A5 0.8 nozzle", + "slowdown_for_curled_perimeters": "0", + "sparse_infill_pattern": "grid", + "support_bottom_z_distance": "0.25", + "support_top_z_distance": "0.25" +} diff --git a/resources/profiles/Flashforge/process/0.42mm Draft @FF Adventurer A5 0.6 nozzle.json b/resources/profiles/Flashforge/process/0.42mm Draft @FF Adventurer A5 0.6 nozzle.json new file mode 100644 index 0000000000..de9c64ea11 --- /dev/null +++ b/resources/profiles/Flashforge/process/0.42mm Draft @FF Adventurer A5 0.6 nozzle.json @@ -0,0 +1,23 @@ +{ + "type": "process", + "name": "0.42mm Draft @FF Adventurer A5 0.6 nozzle", + "inherits": "0.42mm Draft @Flashforge AD5M Pro 0.6 Nozzle", + "from": "system", + "setting_id": "k35K2zIeyVhqNVC1", + "instantiation": "true", + "bridge_flow": "1", + "enable_arc_fitting": "1", + "filename_format": "{input_filename_base}_{filament_type[initial_tool]}_{print_time}.gcode", + "compatible_printers": [ + "Flashforge Adventurer A5 0.6 nozzle" + ], + "infill_wall_overlap": "15%", + "initial_layer_print_height": "0.3", + "only_one_wall_top": "1", + "print_settings_id": "0.42mm Draft @FF Adventurer A5 0.6 nozzle", + "seam_slope_conditional": "1", + "seam_slope_inner_walls": "1", + "slowdown_for_curled_perimeters": "0", + "small_perimeter_speed": "25", + "sparse_infill_pattern": "grid" +} diff --git a/resources/profiles/Flashforge/process/0.56mm Draft @FF Adventurer A5 0.8 nozzle.json b/resources/profiles/Flashforge/process/0.56mm Draft @FF Adventurer A5 0.8 nozzle.json new file mode 100644 index 0000000000..b95c9c1895 --- /dev/null +++ b/resources/profiles/Flashforge/process/0.56mm Draft @FF Adventurer A5 0.8 nozzle.json @@ -0,0 +1,16 @@ +{ + "type": "process", + "name": "0.56mm Draft @FF Adventurer A5 0.8 nozzle", + "inherits": "0.56mm Draft @Flashforge AD5M Pro 0.8 Nozzle", + "from": "system", + "setting_id": "AMe67pwFNPpsDJ9B", + "instantiation": "true", + "enable_arc_fitting": "1", + "compatible_printers": [ + "Flashforge Adventurer A5 0.8 nozzle" + ], + "infill_wall_overlap": "25%", + "print_settings_id": "0.56mm Draft @FF Adventurer A5 0.8 nozzle", + "slowdown_for_curled_perimeters": "0", + "sparse_infill_pattern": "grid" +} From b6bb1b92c941c1f7f0eeb5f980fd949e3a9f2430 Mon Sep 17 00:00:00 2001 From: Tim Schneider Date: Mon, 21 Sep 2026 18:14:33 +0200 Subject: [PATCH 15/17] Add Meltingplot vendor profiles (CHX 350 + MBL series) (#14756) * Add Meltingplot vendor profiles (CHX 350 + MBL series) Adds the Meltingplot vendor bundle with 5 printer models: - CHX 350 (880x422x943, RepRapFirmware/Duet) - MBL 133/136/308/480 (RepRapFirmware/Duet) Each model ships 0.4/0.6/0.8/1.0/1.2 nozzle variants. Layer height presets span 40-60% of the nozzle diameter and deliberately avoid heights that divide the Z screw lead evenly (CHX: 1204 ball screw, 4 mm lead; MBL: TR4x2 trapezoidal screw, 8 mm lead) so periodic screw error does not repeat as banding. All printers use 2.85 mm filament, so the bundle carries its own filament library (PLA, StoneFil, ABS, TitanX, ASA, PETG, PA6 CF HT, STYX 12, PP 9-2, PET-CF15, Extrudr PLA NX2 Matt, Igus iglidur J260) with the 2.85 mm diameter pinned once in the vendor-local fdm_filament_common base. Machine limits mirror the printers' firmware configuration; machine limit emission is disabled so the values only feed the time estimator. * Add per-nozzle volumetric flow limits and nozzle size in filename Cap filament volumetric speed per nozzle (0.4: 14, 0.6: 20, 0.8: 26, 1.0: 30, 1.2: 40 mm3/s). Filaments whose limit exceeds a nozzle's capability get a nozzle-scoped child profile that only lowers filament_max_volumetric_speed; filament_id is inherited so all nozzle variants remain the same material. Also include layer height and nozzle diameter in the g-code filename. * Set CHX 350 machine time cost to 5 EUR/h * Inherit Meltingplot filaments from OrcaFilamentLibrary generics Per the profile creation guide, vendor filament profiles now inherit from Generic * @System instead of vendor-local fdm_filament_* copies. Each profile carries only Meltingplot-specific deviations plus the 2.85 mm filament diameter; the seven local fdm_filament_* base files are removed. Deliberate pins where the library default would change tuned behavior: - PLA/ABS/TitanX keep filament_max_volumetric_speed 20 (0.6 nozzle cap) - ABS/PET-CF15 keep close_fan_the_first_x_layers 1 - STYX 12 sets required_nozzle_HRC 0 (unfilled PA12, density 1.02) * Remove Meltingplot StoneFil filament profile * Meltingplot ABS: use library fan settings * Meltingplot TitanX/ABS: use library fan and nozzle temperature settings * Remove STYX 12, PP 9-2 and Igus iglidur J260 filament profiles * Meltingplot ASA: use library fan_max_speed * Derive per-nozzle volumetric speed caps from physical limit formula Caps now follow V = 34*d * m / S: the 34*d limit line calibrated on Micro Swiss Volcano plated copper at 2.85 mm, material factor m from the OrcaFilamentLibrary generic ratios (PLA/ABS/ASA 1.0, PETG 10/12, PETG-CF 11.5/12, PA-CF 8/12, PLA Matte 11/12), safety factor S = 1.25 covering batch/moisture/wear/diameter tolerances. Each material base now serves the 1.2 nozzle at its maximum cap; children @0.4-@1.0 lower the cap per nozzle. Machine variant default_filament_profile entries point at the matching preset. * Scale slow_down_layer_time per nozzle from bead cross-section Minimum layer time follows the derived cooling rule: heat per layer scales with bead cross-section (layer height x line width), so the 0.8-nozzle-tuned values are scaled by q(d)/q(0.8) using each nozzle's standard preset geometry. Bases carry the 1.2 value, children @0.4-@1.0 their nozzle-specific value. * Meltingplot: lift Z above the print before the end macro Add a G90 / G1 Z{min(max_layer_z + 5, printable_height)} F600 move at the start of machine_end_gcode, before M98 print_end shuts the printer down and parks it. Besides clearing the part, the explicit Z coordinate lets the Duet file-info parser pick up the object height. * Meltingplot: cap default layer height at 40% of outer wall width A 45 deg slope shifts each bead outward by exactly one layer height. With the Slic3r bead model (rectangle (w-h) x h plus half-circles of diameter h) the flat contact band to the layer below is w - 2h, so the maximum self-supporting angle is atan((w-h)/h). Support cannot compensate: the stair tread at 45 deg is only h wide, far below one support line width, so no support line ever fits underneath a single step. All ten machine variants defaulted to h/w = 0.455..0.524, i.e. at or past the h/w = 0.5 point where the flat contact vanishes. The 0.8 nozzle default (0.44 mm at w = 0.84) reached atan(0.4/0.44) = 42.3 deg and failed on 45 deg slopes even with support. Default presets now satisfy h <= 0.40 * outer_wall_line_width, which leaves one third of the bead's flat underside in contact at 45 deg and puts the geometric limit at 56.3 deg. To keep the defaults on sensible ladder rungs, outer wall width is widened where it was the binding constraint: chx_small 110 -> 115%, chx_large 105 -> 110%, mbl_04 105 -> 115%. Ladders are unchanged; the thicker rungs stay available for parts without steep overhangs. * Meltingplot PLA: raise slow_down_layer_time by calibration factor 1.5 Print feedback on CHX 350 with a 0.8 nozzle at 0.44 mm layer height showed curling at the retraction points with the derived value of 25 s. There is no cooling headroom left to trade: fdm_filament_pla pins fan_min_speed = fan_max_speed = 100, and additional_cooling_fan_speed is inert because no Meltingplot machine enables auxiliary_fan. Minimum layer time is the only remaining lever; 35 s prints cleanly at that geometry. The cross-section rule only fixes the ratios between nozzle sizes, so this is a calibration of the PLA anchor itself: both PLA ladders are scaled by 1.5 (Extrudr 9/20/38/56/83 s, Meltingplot PLA 8/17/30/45/66 s for 0.4/0.6/0.8/1.0/1.2). The Extrudr base fan_cooling_layer_time goes 60 -> 100 so the 1.2-nozzle value stays below it. Other materials are left unchanged - only the PLA anchor has a real counter-example so far. * Meltingplot: drop layer heights that cannot print 45 degree walls A preset whose layer height exceeds ~45% of the outer wall line width has less than ~6 degrees of reserve on a 45 degree wall (max self-supporting angle atan((w-h)/h)), and support cannot compensate because the 45 degree stair tread is only h wide - far below one support line. Those presets are not usable in practice, so shipping them only invites failed prints. Removes the 22 rungs above h/w = 0.45 and prunes them from the vendor index. What remains per nozzle (default first): CHX 350 0.4: 0.18 | 0.6: 0.24 0.28 | 0.8: 0.32 0.36 1.0: 0.44 0.48 | 1.2: 0.48 0.56 MBL 0.4: 0.18 | 0.6: 0.24 0.28 | 0.8: 0.36 0.34 1.0: 0.44 0.48 | 1.2: 0.48 0.56 The 0.4 nozzle keeps a single rung: 0.20 mm would qualify (h/w = 0.435) but divides both screw leads evenly (4/0.20, 8/0.20) and stays excluded by the Z-artifact rule, and 0.22 is already at 0.478. Also corrects the MBL 0.8 default to 0.36 mm, which at w = 0.92 sits at h/w = 0.391 and therefore still satisfies the stricter 40% default rule. * Meltingplot: require 5 degrees of reserve on 45 degree walls Replaces the two separate thresholds (h <= 0.40 * outer wall width for defaults, 0.45 for ladder rungs) with a single requirement stated on the design constraint itself: every shipped preset must reach a_max = atan((w - h) / h) >= 50 deg i.e. 5 degrees of reserve on a 45 degree wall, equivalent to h <= 0.456 * outer_wall_line_width. The default is simply the thickest rung that passes. The 11 degrees the 40% rule produced were more margin than the failure mode warrants, and cost throughput for no return. For calibration: across 940 machine defaults from 60 vendor bundles in this repo, the median reserve is +1.8 deg, 71% ship less than 5 deg, and 8% cannot geometrically produce a 45 deg wall at all. Adds the rungs the relaxed threshold makes available - 0.30 (0.6 nozzle, both series) and 0.38 (0.8 nozzle, both series) - and restores the 0.30 mm MBL preset removed in 5b4862b3 with its original setting_id. 0.20 mm on the 0.4 nozzle and 0.50 mm on the 1.0 nozzle would also qualify but stay excluded because they divide both screw leads evenly. Defaults are now (0.4/0.6/0.8/1.0/1.2) 0.18/0.30/0.38/0.48/0.56 for both series, at 50.2 to 57.3 deg. The 1.2 nozzle deliberately keeps 0.56 rather than the 0.60 the rule would allow: solidification time scales with h^2 and bead weight with h*w, so the largest nozzle is the one that should not sit on the minimum. * Meltingplot: disable precise wall by default Precise wall was inheriting OrcaSlicer's global default of true. Disable it bundle-wide in the vendor process root so it applies to CHX 350 and all MBL models. Note it was already ignored on the CHX small-nozzle branch, which uses the inner-outer-inner wall sequence. * Meltingplot CHX: raise max extruding acceleration to 6000 The 4000 limit silently clamped the profiles' 6000 values for default and inner wall acceleration, since GCodeWriter caps print acceleration against machine_max_acceleration_extruding regardless of emit_machine_limits_to_gcode. Raising it to 6000 matches the X/Y limits so the configured values are emitted as-is. The firmware's own M201 still governs what is actually driven. * Meltingplot PA6 CF HT: raise part cooling floor to 40% Sharp 90 degree corners were washing out layer by layer while straight walls and overhangs printed cleanly. Overhangs are fine because overhang_fan_speed forces 100% regardless of layer time; everything else fell back to fan_min_speed, since at the layer times seen in practice neither branch of the layer-time fan interpolation applies. Raise fan_min_speed to 40% and set reduce_fan_stop_start_freq so that floor is actually applied instead of dropping to zero. Also lower the auxiliary fan to 40% and raise the overhang cooling threshold to 95%, matching the values validated on the print. * Meltingplot: re-mint filament ids with orca_id_tool Upstream now requires every filament_id to be a minted "OF" id derived from the (filament_vendor, filament_type, name) triple and recorded in scripts/filament_id_snapshot.json. The hand-made ids this bundle shipped with (MPFPLA0, EXTNX2M, ...) were rejected by orca_extra_profile_check. Regenerate them with "orca_id_tool.py --generate --vendor Meltingplot" and record the result with --update-snapshot. No setting_id changed, and the ids were never released, so no existing project file refers to them. * Meltingplot: normalize bundle for updated profile checks Drop obsolete keys (silent_mode, adaptive_layer_height, tree_support_with_infill) and rebuild the vendor index in canonical order, as orca_profile_tool.py normalize / update-index write them. * Meltingplot: list per-nozzle filaments in default_materials The unsuffixed filament presets only cover the 1.2 mm variants, so the 0.4-1.0 mm printer presets had no compatible entry in their model's default_materials. The validator's check_printer_default_materials rejects that, and load_installed_filaments would auto-install no filament for those variants on first run. Name the @0.4/0.6/0.8/1.0 nozzle presets alongside the base ones for PLA, PETG, ABS and ASA. --------- Co-authored-by: yw4z --- resources/profiles/Meltingplot.json | 434 ++++++++++++++++++ .../Meltingplot/Meltingplot CHX 350_cover.png | Bin 0 -> 147766 bytes .../Meltingplot/Meltingplot MBL 133_cover.png | Bin 0 -> 42858 bytes .../Meltingplot/Meltingplot MBL 136_cover.png | Bin 0 -> 32398 bytes .../Meltingplot/Meltingplot MBL 308_cover.png | Bin 0 -> 36673 bytes .../Meltingplot/Meltingplot MBL 480_cover.png | Bin 0 -> 36570 bytes .../profiles/Meltingplot/chx350-printbed.stl | Bin 0 -> 183284 bytes .../profiles/Meltingplot/chx350-texture.svg | 5 + .../Extrudr PLA NX2 Matt @0.4 nozzle.json | 21 + .../Extrudr PLA NX2 Matt @0.6 nozzle.json | 21 + .../Extrudr PLA NX2 Matt @0.8 nozzle.json | 21 + .../Extrudr PLA NX2 Matt @1.0 nozzle.json | 21 + .../filament/Extrudr PLA NX2 Matt.json | 79 ++++ .../filament/Meltingplot ABS @0.4 nozzle.json | 21 + .../filament/Meltingplot ABS @0.6 nozzle.json | 21 + .../filament/Meltingplot ABS @0.8 nozzle.json | 21 + .../filament/Meltingplot ABS @1.0 nozzle.json | 21 + .../Meltingplot/filament/Meltingplot ABS.json | 70 +++ .../filament/Meltingplot ASA @0.4 nozzle.json | 21 + .../filament/Meltingplot ASA @0.6 nozzle.json | 21 + .../filament/Meltingplot ASA @0.8 nozzle.json | 21 + .../filament/Meltingplot ASA @1.0 nozzle.json | 21 + .../Meltingplot/filament/Meltingplot ASA.json | 70 +++ .../Meltingplot PA6 CF HT @0.4 nozzle.json | 21 + .../Meltingplot PA6 CF HT @0.6 nozzle.json | 21 + .../Meltingplot PA6 CF HT @0.8 nozzle.json | 21 + .../Meltingplot PA6 CF HT @1.0 nozzle.json | 21 + .../filament/Meltingplot PA6 CF HT.json | 94 ++++ .../Meltingplot PET-CF15 @0.4 nozzle.json | 21 + .../Meltingplot PET-CF15 @0.6 nozzle.json | 21 + .../Meltingplot PET-CF15 @0.8 nozzle.json | 21 + .../Meltingplot PET-CF15 @1.0 nozzle.json | 21 + .../filament/Meltingplot PET-CF15.json | 91 ++++ .../Meltingplot PETG @0.4 nozzle.json | 21 + .../Meltingplot PETG @0.6 nozzle.json | 21 + .../Meltingplot PETG @0.8 nozzle.json | 21 + .../Meltingplot PETG @1.0 nozzle.json | 21 + .../filament/Meltingplot PETG.json | 70 +++ .../filament/Meltingplot PLA @0.4 nozzle.json | 21 + .../filament/Meltingplot PLA @0.6 nozzle.json | 21 + .../filament/Meltingplot PLA @0.8 nozzle.json | 21 + .../filament/Meltingplot PLA @1.0 nozzle.json | 21 + .../Meltingplot/filament/Meltingplot PLA.json | 67 +++ .../Meltingplot TitanX @0.4 nozzle.json | 21 + .../Meltingplot TitanX @0.6 nozzle.json | 21 + .../Meltingplot TitanX @0.8 nozzle.json | 21 + .../Meltingplot TitanX @1.0 nozzle.json | 21 + .../filament/Meltingplot TitanX.json | 61 +++ .../Meltingplot CHX 350 0.4 nozzle.json | 30 ++ .../Meltingplot CHX 350 0.6 nozzle.json | 30 ++ .../Meltingplot CHX 350 0.8 nozzle.json | 32 ++ .../Meltingplot CHX 350 1.0 nozzle.json | 33 ++ .../Meltingplot CHX 350 1.2 nozzle.json | 33 ++ .../machine/Meltingplot CHX 350.json | 12 + .../Meltingplot MBL 133 0.4 nozzle.json | 30 ++ .../Meltingplot MBL 133 0.6 nozzle.json | 30 ++ .../Meltingplot MBL 133 0.8 nozzle.json | 30 ++ .../Meltingplot MBL 133 1.0 nozzle.json | 30 ++ .../Meltingplot MBL 133 1.2 nozzle.json | 30 ++ .../machine/Meltingplot MBL 133.json | 12 + .../Meltingplot MBL 136 0.4 nozzle.json | 30 ++ .../Meltingplot MBL 136 0.6 nozzle.json | 30 ++ .../Meltingplot MBL 136 0.8 nozzle.json | 30 ++ .../Meltingplot MBL 136 1.0 nozzle.json | 30 ++ .../Meltingplot MBL 136 1.2 nozzle.json | 30 ++ .../machine/Meltingplot MBL 136.json | 12 + .../Meltingplot MBL 308 0.4 nozzle.json | 30 ++ .../Meltingplot MBL 308 0.6 nozzle.json | 30 ++ .../Meltingplot MBL 308 0.8 nozzle.json | 30 ++ .../Meltingplot MBL 308 1.0 nozzle.json | 30 ++ .../Meltingplot MBL 308 1.2 nozzle.json | 30 ++ .../machine/Meltingplot MBL 308.json | 12 + .../Meltingplot MBL 480 0.4 nozzle.json | 30 ++ .../Meltingplot MBL 480 0.6 nozzle.json | 30 ++ .../Meltingplot MBL 480 0.8 nozzle.json | 30 ++ .../Meltingplot MBL 480 1.0 nozzle.json | 30 ++ .../Meltingplot MBL 480 1.2 nozzle.json | 30 ++ .../machine/Meltingplot MBL 480.json | 12 + .../machine/fdm_machine_common.json | 68 +++ .../machine/fdm_machine_meltingplot_chx.json | 71 +++ .../machine/fdm_machine_meltingplot_mbl.json | 69 +++ .../profiles/Meltingplot/mbl-133-texture.svg | 158 +++++++ .../profiles/Meltingplot/mbl-136-texture.svg | 158 +++++++ .../profiles/Meltingplot/mbl-308-texture.svg | 158 +++++++ .../profiles/Meltingplot/mbl-480-texture.svg | 158 +++++++ .../profiles/Meltingplot/mbl133-printbed.stl | Bin 0 -> 222284 bytes .../profiles/Meltingplot/mbl136-printbed.stl | Bin 0 -> 160484 bytes .../profiles/Meltingplot/mbl308-printbed.stl | Bin 0 -> 160484 bytes .../profiles/Meltingplot/mbl480-printbed.stl | Bin 0 -> 160484 bytes ... Fine 0.4 nozzle @Meltingplot CHX 350.json | 12 + ...18mm Fine 0.4 nozzle @Meltingplot MBL.json | 15 + ... Fine 0.6 nozzle @Meltingplot CHX 350.json | 12 + ...24mm Fine 0.6 nozzle @Meltingplot MBL.json | 15 + ...timal 0.6 nozzle @Meltingplot CHX 350.json | 12 + ...m Optimal 0.6 nozzle @Meltingplot MBL.json | 15 + ...ndard 0.6 nozzle @Meltingplot CHX 350.json | 12 + ... Standard 0.6 nozzle @Meltingplot MBL.json | 15 + ... Fine 0.8 nozzle @Meltingplot CHX 350.json | 12 + ...34mm Fine 0.8 nozzle @Meltingplot MBL.json | 15 + ...timal 0.8 nozzle @Meltingplot CHX 350.json | 12 + ...m Optimal 0.8 nozzle @Meltingplot MBL.json | 15 + ...ndard 0.8 nozzle @Meltingplot CHX 350.json | 12 + ... Standard 0.8 nozzle @Meltingplot MBL.json | 15 + ... Fine 1.0 nozzle @Meltingplot CHX 350.json | 12 + ...44mm Fine 1.0 nozzle @Meltingplot MBL.json | 15 + ... Fine 1.2 nozzle @Meltingplot CHX 350.json | 12 + ...48mm Fine 1.2 nozzle @Meltingplot MBL.json | 15 + ...timal 1.0 nozzle @Meltingplot CHX 350.json | 12 + ...m Optimal 1.0 nozzle @Meltingplot MBL.json | 15 + ...timal 1.2 nozzle @Meltingplot CHX 350.json | 12 + ...m Optimal 1.2 nozzle @Meltingplot MBL.json | 15 + .../process/fdm_process_common.json | 107 +++++ .../fdm_process_meltingplot_chx_common.json | 39 ++ ..._process_meltingplot_chx_large_nozzle.json | 26 ++ ..._process_meltingplot_chx_small_nozzle.json | 24 + ...fdm_process_meltingplot_mbl_04_nozzle.json | 14 + ...fdm_process_meltingplot_mbl_06_nozzle.json | 14 + ...fdm_process_meltingplot_mbl_08_nozzle.json | 14 + ...fdm_process_meltingplot_mbl_10_nozzle.json | 15 + ...fdm_process_meltingplot_mbl_12_nozzle.json | 15 + .../fdm_process_meltingplot_mbl_common.json | 60 +++ 121 files changed, 3996 insertions(+) create mode 100644 resources/profiles/Meltingplot.json create mode 100644 resources/profiles/Meltingplot/Meltingplot CHX 350_cover.png create mode 100644 resources/profiles/Meltingplot/Meltingplot MBL 133_cover.png create mode 100644 resources/profiles/Meltingplot/Meltingplot MBL 136_cover.png create mode 100644 resources/profiles/Meltingplot/Meltingplot MBL 308_cover.png create mode 100644 resources/profiles/Meltingplot/Meltingplot MBL 480_cover.png create mode 100644 resources/profiles/Meltingplot/chx350-printbed.stl create mode 100644 resources/profiles/Meltingplot/chx350-texture.svg create mode 100644 resources/profiles/Meltingplot/filament/Extrudr PLA NX2 Matt @0.4 nozzle.json create mode 100644 resources/profiles/Meltingplot/filament/Extrudr PLA NX2 Matt @0.6 nozzle.json create mode 100644 resources/profiles/Meltingplot/filament/Extrudr PLA NX2 Matt @0.8 nozzle.json create mode 100644 resources/profiles/Meltingplot/filament/Extrudr PLA NX2 Matt @1.0 nozzle.json create mode 100644 resources/profiles/Meltingplot/filament/Extrudr PLA NX2 Matt.json create mode 100644 resources/profiles/Meltingplot/filament/Meltingplot ABS @0.4 nozzle.json create mode 100644 resources/profiles/Meltingplot/filament/Meltingplot ABS @0.6 nozzle.json create mode 100644 resources/profiles/Meltingplot/filament/Meltingplot ABS @0.8 nozzle.json create mode 100644 resources/profiles/Meltingplot/filament/Meltingplot ABS @1.0 nozzle.json create mode 100644 resources/profiles/Meltingplot/filament/Meltingplot ABS.json create mode 100644 resources/profiles/Meltingplot/filament/Meltingplot ASA @0.4 nozzle.json create mode 100644 resources/profiles/Meltingplot/filament/Meltingplot ASA @0.6 nozzle.json create mode 100644 resources/profiles/Meltingplot/filament/Meltingplot ASA @0.8 nozzle.json create mode 100644 resources/profiles/Meltingplot/filament/Meltingplot ASA @1.0 nozzle.json create mode 100644 resources/profiles/Meltingplot/filament/Meltingplot ASA.json create mode 100644 resources/profiles/Meltingplot/filament/Meltingplot PA6 CF HT @0.4 nozzle.json create mode 100644 resources/profiles/Meltingplot/filament/Meltingplot PA6 CF HT @0.6 nozzle.json create mode 100644 resources/profiles/Meltingplot/filament/Meltingplot PA6 CF HT @0.8 nozzle.json create mode 100644 resources/profiles/Meltingplot/filament/Meltingplot PA6 CF HT @1.0 nozzle.json create mode 100644 resources/profiles/Meltingplot/filament/Meltingplot PA6 CF HT.json create mode 100644 resources/profiles/Meltingplot/filament/Meltingplot PET-CF15 @0.4 nozzle.json create mode 100644 resources/profiles/Meltingplot/filament/Meltingplot PET-CF15 @0.6 nozzle.json create mode 100644 resources/profiles/Meltingplot/filament/Meltingplot PET-CF15 @0.8 nozzle.json create mode 100644 resources/profiles/Meltingplot/filament/Meltingplot PET-CF15 @1.0 nozzle.json create mode 100644 resources/profiles/Meltingplot/filament/Meltingplot PET-CF15.json create mode 100644 resources/profiles/Meltingplot/filament/Meltingplot PETG @0.4 nozzle.json create mode 100644 resources/profiles/Meltingplot/filament/Meltingplot PETG @0.6 nozzle.json create mode 100644 resources/profiles/Meltingplot/filament/Meltingplot PETG @0.8 nozzle.json create mode 100644 resources/profiles/Meltingplot/filament/Meltingplot PETG @1.0 nozzle.json create mode 100644 resources/profiles/Meltingplot/filament/Meltingplot PETG.json create mode 100644 resources/profiles/Meltingplot/filament/Meltingplot PLA @0.4 nozzle.json create mode 100644 resources/profiles/Meltingplot/filament/Meltingplot PLA @0.6 nozzle.json create mode 100644 resources/profiles/Meltingplot/filament/Meltingplot PLA @0.8 nozzle.json create mode 100644 resources/profiles/Meltingplot/filament/Meltingplot PLA @1.0 nozzle.json create mode 100644 resources/profiles/Meltingplot/filament/Meltingplot PLA.json create mode 100644 resources/profiles/Meltingplot/filament/Meltingplot TitanX @0.4 nozzle.json create mode 100644 resources/profiles/Meltingplot/filament/Meltingplot TitanX @0.6 nozzle.json create mode 100644 resources/profiles/Meltingplot/filament/Meltingplot TitanX @0.8 nozzle.json create mode 100644 resources/profiles/Meltingplot/filament/Meltingplot TitanX @1.0 nozzle.json create mode 100644 resources/profiles/Meltingplot/filament/Meltingplot TitanX.json create mode 100644 resources/profiles/Meltingplot/machine/Meltingplot CHX 350 0.4 nozzle.json create mode 100644 resources/profiles/Meltingplot/machine/Meltingplot CHX 350 0.6 nozzle.json create mode 100644 resources/profiles/Meltingplot/machine/Meltingplot CHX 350 0.8 nozzle.json create mode 100644 resources/profiles/Meltingplot/machine/Meltingplot CHX 350 1.0 nozzle.json create mode 100644 resources/profiles/Meltingplot/machine/Meltingplot CHX 350 1.2 nozzle.json create mode 100644 resources/profiles/Meltingplot/machine/Meltingplot CHX 350.json create mode 100644 resources/profiles/Meltingplot/machine/Meltingplot MBL 133 0.4 nozzle.json create mode 100644 resources/profiles/Meltingplot/machine/Meltingplot MBL 133 0.6 nozzle.json create mode 100644 resources/profiles/Meltingplot/machine/Meltingplot MBL 133 0.8 nozzle.json create mode 100644 resources/profiles/Meltingplot/machine/Meltingplot MBL 133 1.0 nozzle.json create mode 100644 resources/profiles/Meltingplot/machine/Meltingplot MBL 133 1.2 nozzle.json create mode 100644 resources/profiles/Meltingplot/machine/Meltingplot MBL 133.json create mode 100644 resources/profiles/Meltingplot/machine/Meltingplot MBL 136 0.4 nozzle.json create mode 100644 resources/profiles/Meltingplot/machine/Meltingplot MBL 136 0.6 nozzle.json create mode 100644 resources/profiles/Meltingplot/machine/Meltingplot MBL 136 0.8 nozzle.json create mode 100644 resources/profiles/Meltingplot/machine/Meltingplot MBL 136 1.0 nozzle.json create mode 100644 resources/profiles/Meltingplot/machine/Meltingplot MBL 136 1.2 nozzle.json create mode 100644 resources/profiles/Meltingplot/machine/Meltingplot MBL 136.json create mode 100644 resources/profiles/Meltingplot/machine/Meltingplot MBL 308 0.4 nozzle.json create mode 100644 resources/profiles/Meltingplot/machine/Meltingplot MBL 308 0.6 nozzle.json create mode 100644 resources/profiles/Meltingplot/machine/Meltingplot MBL 308 0.8 nozzle.json create mode 100644 resources/profiles/Meltingplot/machine/Meltingplot MBL 308 1.0 nozzle.json create mode 100644 resources/profiles/Meltingplot/machine/Meltingplot MBL 308 1.2 nozzle.json create mode 100644 resources/profiles/Meltingplot/machine/Meltingplot MBL 308.json create mode 100644 resources/profiles/Meltingplot/machine/Meltingplot MBL 480 0.4 nozzle.json create mode 100644 resources/profiles/Meltingplot/machine/Meltingplot MBL 480 0.6 nozzle.json create mode 100644 resources/profiles/Meltingplot/machine/Meltingplot MBL 480 0.8 nozzle.json create mode 100644 resources/profiles/Meltingplot/machine/Meltingplot MBL 480 1.0 nozzle.json create mode 100644 resources/profiles/Meltingplot/machine/Meltingplot MBL 480 1.2 nozzle.json create mode 100644 resources/profiles/Meltingplot/machine/Meltingplot MBL 480.json create mode 100644 resources/profiles/Meltingplot/machine/fdm_machine_common.json create mode 100644 resources/profiles/Meltingplot/machine/fdm_machine_meltingplot_chx.json create mode 100644 resources/profiles/Meltingplot/machine/fdm_machine_meltingplot_mbl.json create mode 100644 resources/profiles/Meltingplot/mbl-133-texture.svg create mode 100644 resources/profiles/Meltingplot/mbl-136-texture.svg create mode 100644 resources/profiles/Meltingplot/mbl-308-texture.svg create mode 100644 resources/profiles/Meltingplot/mbl-480-texture.svg create mode 100644 resources/profiles/Meltingplot/mbl133-printbed.stl create mode 100644 resources/profiles/Meltingplot/mbl136-printbed.stl create mode 100644 resources/profiles/Meltingplot/mbl308-printbed.stl create mode 100644 resources/profiles/Meltingplot/mbl480-printbed.stl create mode 100644 resources/profiles/Meltingplot/process/0.18mm Fine 0.4 nozzle @Meltingplot CHX 350.json create mode 100644 resources/profiles/Meltingplot/process/0.18mm Fine 0.4 nozzle @Meltingplot MBL.json create mode 100644 resources/profiles/Meltingplot/process/0.24mm Fine 0.6 nozzle @Meltingplot CHX 350.json create mode 100644 resources/profiles/Meltingplot/process/0.24mm Fine 0.6 nozzle @Meltingplot MBL.json create mode 100644 resources/profiles/Meltingplot/process/0.28mm Optimal 0.6 nozzle @Meltingplot CHX 350.json create mode 100644 resources/profiles/Meltingplot/process/0.28mm Optimal 0.6 nozzle @Meltingplot MBL.json create mode 100644 resources/profiles/Meltingplot/process/0.30mm Standard 0.6 nozzle @Meltingplot CHX 350.json create mode 100644 resources/profiles/Meltingplot/process/0.30mm Standard 0.6 nozzle @Meltingplot MBL.json create mode 100644 resources/profiles/Meltingplot/process/0.32mm Fine 0.8 nozzle @Meltingplot CHX 350.json create mode 100644 resources/profiles/Meltingplot/process/0.34mm Fine 0.8 nozzle @Meltingplot MBL.json create mode 100644 resources/profiles/Meltingplot/process/0.36mm Optimal 0.8 nozzle @Meltingplot CHX 350.json create mode 100644 resources/profiles/Meltingplot/process/0.36mm Optimal 0.8 nozzle @Meltingplot MBL.json create mode 100644 resources/profiles/Meltingplot/process/0.38mm Standard 0.8 nozzle @Meltingplot CHX 350.json create mode 100644 resources/profiles/Meltingplot/process/0.38mm Standard 0.8 nozzle @Meltingplot MBL.json create mode 100644 resources/profiles/Meltingplot/process/0.44mm Fine 1.0 nozzle @Meltingplot CHX 350.json create mode 100644 resources/profiles/Meltingplot/process/0.44mm Fine 1.0 nozzle @Meltingplot MBL.json create mode 100644 resources/profiles/Meltingplot/process/0.48mm Fine 1.2 nozzle @Meltingplot CHX 350.json create mode 100644 resources/profiles/Meltingplot/process/0.48mm Fine 1.2 nozzle @Meltingplot MBL.json create mode 100644 resources/profiles/Meltingplot/process/0.48mm Optimal 1.0 nozzle @Meltingplot CHX 350.json create mode 100644 resources/profiles/Meltingplot/process/0.48mm Optimal 1.0 nozzle @Meltingplot MBL.json create mode 100644 resources/profiles/Meltingplot/process/0.56mm Optimal 1.2 nozzle @Meltingplot CHX 350.json create mode 100644 resources/profiles/Meltingplot/process/0.56mm Optimal 1.2 nozzle @Meltingplot MBL.json create mode 100644 resources/profiles/Meltingplot/process/fdm_process_common.json create mode 100644 resources/profiles/Meltingplot/process/fdm_process_meltingplot_chx_common.json create mode 100644 resources/profiles/Meltingplot/process/fdm_process_meltingplot_chx_large_nozzle.json create mode 100644 resources/profiles/Meltingplot/process/fdm_process_meltingplot_chx_small_nozzle.json create mode 100644 resources/profiles/Meltingplot/process/fdm_process_meltingplot_mbl_04_nozzle.json create mode 100644 resources/profiles/Meltingplot/process/fdm_process_meltingplot_mbl_06_nozzle.json create mode 100644 resources/profiles/Meltingplot/process/fdm_process_meltingplot_mbl_08_nozzle.json create mode 100644 resources/profiles/Meltingplot/process/fdm_process_meltingplot_mbl_10_nozzle.json create mode 100644 resources/profiles/Meltingplot/process/fdm_process_meltingplot_mbl_12_nozzle.json create mode 100644 resources/profiles/Meltingplot/process/fdm_process_meltingplot_mbl_common.json diff --git a/resources/profiles/Meltingplot.json b/resources/profiles/Meltingplot.json new file mode 100644 index 0000000000..654d955380 --- /dev/null +++ b/resources/profiles/Meltingplot.json @@ -0,0 +1,434 @@ +{ + "name": "Meltingplot", + "version": "02.04.00.00", + "force_update": "0", + "description": "Meltingplot configurations", + "machine_model_list": [ + { + "name": "Meltingplot CHX 350", + "sub_path": "machine/Meltingplot CHX 350.json" + }, + { + "name": "Meltingplot MBL 133", + "sub_path": "machine/Meltingplot MBL 133.json" + }, + { + "name": "Meltingplot MBL 136", + "sub_path": "machine/Meltingplot MBL 136.json" + }, + { + "name": "Meltingplot MBL 308", + "sub_path": "machine/Meltingplot MBL 308.json" + }, + { + "name": "Meltingplot MBL 480", + "sub_path": "machine/Meltingplot MBL 480.json" + } + ], + "process_list": [ + { + "name": "fdm_process_common", + "sub_path": "process/fdm_process_common.json" + }, + { + "name": "fdm_process_meltingplot_chx_common", + "sub_path": "process/fdm_process_meltingplot_chx_common.json" + }, + { + "name": "fdm_process_meltingplot_mbl_common", + "sub_path": "process/fdm_process_meltingplot_mbl_common.json" + }, + { + "name": "fdm_process_meltingplot_chx_large_nozzle", + "sub_path": "process/fdm_process_meltingplot_chx_large_nozzle.json" + }, + { + "name": "fdm_process_meltingplot_chx_small_nozzle", + "sub_path": "process/fdm_process_meltingplot_chx_small_nozzle.json" + }, + { + "name": "fdm_process_meltingplot_mbl_04_nozzle", + "sub_path": "process/fdm_process_meltingplot_mbl_04_nozzle.json" + }, + { + "name": "fdm_process_meltingplot_mbl_06_nozzle", + "sub_path": "process/fdm_process_meltingplot_mbl_06_nozzle.json" + }, + { + "name": "fdm_process_meltingplot_mbl_08_nozzle", + "sub_path": "process/fdm_process_meltingplot_mbl_08_nozzle.json" + }, + { + "name": "fdm_process_meltingplot_mbl_10_nozzle", + "sub_path": "process/fdm_process_meltingplot_mbl_10_nozzle.json" + }, + { + "name": "fdm_process_meltingplot_mbl_12_nozzle", + "sub_path": "process/fdm_process_meltingplot_mbl_12_nozzle.json" + }, + { + "name": "0.32mm Fine 0.8 nozzle @Meltingplot CHX 350", + "sub_path": "process/0.32mm Fine 0.8 nozzle @Meltingplot CHX 350.json" + }, + { + "name": "0.36mm Optimal 0.8 nozzle @Meltingplot CHX 350", + "sub_path": "process/0.36mm Optimal 0.8 nozzle @Meltingplot CHX 350.json" + }, + { + "name": "0.38mm Standard 0.8 nozzle @Meltingplot CHX 350", + "sub_path": "process/0.38mm Standard 0.8 nozzle @Meltingplot CHX 350.json" + }, + { + "name": "0.44mm Fine 1.0 nozzle @Meltingplot CHX 350", + "sub_path": "process/0.44mm Fine 1.0 nozzle @Meltingplot CHX 350.json" + }, + { + "name": "0.48mm Fine 1.2 nozzle @Meltingplot CHX 350", + "sub_path": "process/0.48mm Fine 1.2 nozzle @Meltingplot CHX 350.json" + }, + { + "name": "0.48mm Optimal 1.0 nozzle @Meltingplot CHX 350", + "sub_path": "process/0.48mm Optimal 1.0 nozzle @Meltingplot CHX 350.json" + }, + { + "name": "0.56mm Optimal 1.2 nozzle @Meltingplot CHX 350", + "sub_path": "process/0.56mm Optimal 1.2 nozzle @Meltingplot CHX 350.json" + }, + { + "name": "0.18mm Fine 0.4 nozzle @Meltingplot CHX 350", + "sub_path": "process/0.18mm Fine 0.4 nozzle @Meltingplot CHX 350.json" + }, + { + "name": "0.24mm Fine 0.6 nozzle @Meltingplot CHX 350", + "sub_path": "process/0.24mm Fine 0.6 nozzle @Meltingplot CHX 350.json" + }, + { + "name": "0.28mm Optimal 0.6 nozzle @Meltingplot CHX 350", + "sub_path": "process/0.28mm Optimal 0.6 nozzle @Meltingplot CHX 350.json" + }, + { + "name": "0.30mm Standard 0.6 nozzle @Meltingplot CHX 350", + "sub_path": "process/0.30mm Standard 0.6 nozzle @Meltingplot CHX 350.json" + }, + { + "name": "0.18mm Fine 0.4 nozzle @Meltingplot MBL", + "sub_path": "process/0.18mm Fine 0.4 nozzle @Meltingplot MBL.json" + }, + { + "name": "0.24mm Fine 0.6 nozzle @Meltingplot MBL", + "sub_path": "process/0.24mm Fine 0.6 nozzle @Meltingplot MBL.json" + }, + { + "name": "0.28mm Optimal 0.6 nozzle @Meltingplot MBL", + "sub_path": "process/0.28mm Optimal 0.6 nozzle @Meltingplot MBL.json" + }, + { + "name": "0.30mm Standard 0.6 nozzle @Meltingplot MBL", + "sub_path": "process/0.30mm Standard 0.6 nozzle @Meltingplot MBL.json" + }, + { + "name": "0.34mm Fine 0.8 nozzle @Meltingplot MBL", + "sub_path": "process/0.34mm Fine 0.8 nozzle @Meltingplot MBL.json" + }, + { + "name": "0.36mm Optimal 0.8 nozzle @Meltingplot MBL", + "sub_path": "process/0.36mm Optimal 0.8 nozzle @Meltingplot MBL.json" + }, + { + "name": "0.38mm Standard 0.8 nozzle @Meltingplot MBL", + "sub_path": "process/0.38mm Standard 0.8 nozzle @Meltingplot MBL.json" + }, + { + "name": "0.44mm Fine 1.0 nozzle @Meltingplot MBL", + "sub_path": "process/0.44mm Fine 1.0 nozzle @Meltingplot MBL.json" + }, + { + "name": "0.48mm Optimal 1.0 nozzle @Meltingplot MBL", + "sub_path": "process/0.48mm Optimal 1.0 nozzle @Meltingplot MBL.json" + }, + { + "name": "0.48mm Fine 1.2 nozzle @Meltingplot MBL", + "sub_path": "process/0.48mm Fine 1.2 nozzle @Meltingplot MBL.json" + }, + { + "name": "0.56mm Optimal 1.2 nozzle @Meltingplot MBL", + "sub_path": "process/0.56mm Optimal 1.2 nozzle @Meltingplot MBL.json" + } + ], + "filament_list": [ + { + "name": "Extrudr PLA NX2 Matt", + "sub_path": "filament/Extrudr PLA NX2 Matt.json" + }, + { + "name": "Meltingplot ABS", + "sub_path": "filament/Meltingplot ABS.json" + }, + { + "name": "Meltingplot ASA", + "sub_path": "filament/Meltingplot ASA.json" + }, + { + "name": "Meltingplot PA6 CF HT", + "sub_path": "filament/Meltingplot PA6 CF HT.json" + }, + { + "name": "Meltingplot PET-CF15", + "sub_path": "filament/Meltingplot PET-CF15.json" + }, + { + "name": "Meltingplot PETG", + "sub_path": "filament/Meltingplot PETG.json" + }, + { + "name": "Meltingplot PLA", + "sub_path": "filament/Meltingplot PLA.json" + }, + { + "name": "Meltingplot TitanX", + "sub_path": "filament/Meltingplot TitanX.json" + }, + { + "name": "Extrudr PLA NX2 Matt @0.4 nozzle", + "sub_path": "filament/Extrudr PLA NX2 Matt @0.4 nozzle.json" + }, + { + "name": "Extrudr PLA NX2 Matt @0.6 nozzle", + "sub_path": "filament/Extrudr PLA NX2 Matt @0.6 nozzle.json" + }, + { + "name": "Extrudr PLA NX2 Matt @0.8 nozzle", + "sub_path": "filament/Extrudr PLA NX2 Matt @0.8 nozzle.json" + }, + { + "name": "Extrudr PLA NX2 Matt @1.0 nozzle", + "sub_path": "filament/Extrudr PLA NX2 Matt @1.0 nozzle.json" + }, + { + "name": "Meltingplot ABS @0.4 nozzle", + "sub_path": "filament/Meltingplot ABS @0.4 nozzle.json" + }, + { + "name": "Meltingplot ABS @0.6 nozzle", + "sub_path": "filament/Meltingplot ABS @0.6 nozzle.json" + }, + { + "name": "Meltingplot ABS @0.8 nozzle", + "sub_path": "filament/Meltingplot ABS @0.8 nozzle.json" + }, + { + "name": "Meltingplot ABS @1.0 nozzle", + "sub_path": "filament/Meltingplot ABS @1.0 nozzle.json" + }, + { + "name": "Meltingplot ASA @0.4 nozzle", + "sub_path": "filament/Meltingplot ASA @0.4 nozzle.json" + }, + { + "name": "Meltingplot ASA @0.6 nozzle", + "sub_path": "filament/Meltingplot ASA @0.6 nozzle.json" + }, + { + "name": "Meltingplot ASA @0.8 nozzle", + "sub_path": "filament/Meltingplot ASA @0.8 nozzle.json" + }, + { + "name": "Meltingplot ASA @1.0 nozzle", + "sub_path": "filament/Meltingplot ASA @1.0 nozzle.json" + }, + { + "name": "Meltingplot PA6 CF HT @0.4 nozzle", + "sub_path": "filament/Meltingplot PA6 CF HT @0.4 nozzle.json" + }, + { + "name": "Meltingplot PA6 CF HT @0.6 nozzle", + "sub_path": "filament/Meltingplot PA6 CF HT @0.6 nozzle.json" + }, + { + "name": "Meltingplot PA6 CF HT @0.8 nozzle", + "sub_path": "filament/Meltingplot PA6 CF HT @0.8 nozzle.json" + }, + { + "name": "Meltingplot PA6 CF HT @1.0 nozzle", + "sub_path": "filament/Meltingplot PA6 CF HT @1.0 nozzle.json" + }, + { + "name": "Meltingplot PET-CF15 @0.4 nozzle", + "sub_path": "filament/Meltingplot PET-CF15 @0.4 nozzle.json" + }, + { + "name": "Meltingplot PET-CF15 @0.6 nozzle", + "sub_path": "filament/Meltingplot PET-CF15 @0.6 nozzle.json" + }, + { + "name": "Meltingplot PET-CF15 @0.8 nozzle", + "sub_path": "filament/Meltingplot PET-CF15 @0.8 nozzle.json" + }, + { + "name": "Meltingplot PET-CF15 @1.0 nozzle", + "sub_path": "filament/Meltingplot PET-CF15 @1.0 nozzle.json" + }, + { + "name": "Meltingplot PETG @0.4 nozzle", + "sub_path": "filament/Meltingplot PETG @0.4 nozzle.json" + }, + { + "name": "Meltingplot PETG @0.6 nozzle", + "sub_path": "filament/Meltingplot PETG @0.6 nozzle.json" + }, + { + "name": "Meltingplot PETG @0.8 nozzle", + "sub_path": "filament/Meltingplot PETG @0.8 nozzle.json" + }, + { + "name": "Meltingplot PETG @1.0 nozzle", + "sub_path": "filament/Meltingplot PETG @1.0 nozzle.json" + }, + { + "name": "Meltingplot PLA @0.4 nozzle", + "sub_path": "filament/Meltingplot PLA @0.4 nozzle.json" + }, + { + "name": "Meltingplot PLA @0.6 nozzle", + "sub_path": "filament/Meltingplot PLA @0.6 nozzle.json" + }, + { + "name": "Meltingplot PLA @0.8 nozzle", + "sub_path": "filament/Meltingplot PLA @0.8 nozzle.json" + }, + { + "name": "Meltingplot PLA @1.0 nozzle", + "sub_path": "filament/Meltingplot PLA @1.0 nozzle.json" + }, + { + "name": "Meltingplot TitanX @0.4 nozzle", + "sub_path": "filament/Meltingplot TitanX @0.4 nozzle.json" + }, + { + "name": "Meltingplot TitanX @0.6 nozzle", + "sub_path": "filament/Meltingplot TitanX @0.6 nozzle.json" + }, + { + "name": "Meltingplot TitanX @0.8 nozzle", + "sub_path": "filament/Meltingplot TitanX @0.8 nozzle.json" + }, + { + "name": "Meltingplot TitanX @1.0 nozzle", + "sub_path": "filament/Meltingplot TitanX @1.0 nozzle.json" + } + ], + "machine_list": [ + { + "name": "fdm_machine_common", + "sub_path": "machine/fdm_machine_common.json" + }, + { + "name": "fdm_machine_meltingplot_chx", + "sub_path": "machine/fdm_machine_meltingplot_chx.json" + }, + { + "name": "fdm_machine_meltingplot_mbl", + "sub_path": "machine/fdm_machine_meltingplot_mbl.json" + }, + { + "name": "Meltingplot CHX 350 0.4 nozzle", + "sub_path": "machine/Meltingplot CHX 350 0.4 nozzle.json" + }, + { + "name": "Meltingplot CHX 350 0.6 nozzle", + "sub_path": "machine/Meltingplot CHX 350 0.6 nozzle.json" + }, + { + "name": "Meltingplot CHX 350 0.8 nozzle", + "sub_path": "machine/Meltingplot CHX 350 0.8 nozzle.json" + }, + { + "name": "Meltingplot CHX 350 1.0 nozzle", + "sub_path": "machine/Meltingplot CHX 350 1.0 nozzle.json" + }, + { + "name": "Meltingplot CHX 350 1.2 nozzle", + "sub_path": "machine/Meltingplot CHX 350 1.2 nozzle.json" + }, + { + "name": "Meltingplot MBL 133 0.4 nozzle", + "sub_path": "machine/Meltingplot MBL 133 0.4 nozzle.json" + }, + { + "name": "Meltingplot MBL 133 0.6 nozzle", + "sub_path": "machine/Meltingplot MBL 133 0.6 nozzle.json" + }, + { + "name": "Meltingplot MBL 133 0.8 nozzle", + "sub_path": "machine/Meltingplot MBL 133 0.8 nozzle.json" + }, + { + "name": "Meltingplot MBL 133 1.0 nozzle", + "sub_path": "machine/Meltingplot MBL 133 1.0 nozzle.json" + }, + { + "name": "Meltingplot MBL 133 1.2 nozzle", + "sub_path": "machine/Meltingplot MBL 133 1.2 nozzle.json" + }, + { + "name": "Meltingplot MBL 136 0.4 nozzle", + "sub_path": "machine/Meltingplot MBL 136 0.4 nozzle.json" + }, + { + "name": "Meltingplot MBL 136 0.6 nozzle", + "sub_path": "machine/Meltingplot MBL 136 0.6 nozzle.json" + }, + { + "name": "Meltingplot MBL 136 0.8 nozzle", + "sub_path": "machine/Meltingplot MBL 136 0.8 nozzle.json" + }, + { + "name": "Meltingplot MBL 136 1.0 nozzle", + "sub_path": "machine/Meltingplot MBL 136 1.0 nozzle.json" + }, + { + "name": "Meltingplot MBL 136 1.2 nozzle", + "sub_path": "machine/Meltingplot MBL 136 1.2 nozzle.json" + }, + { + "name": "Meltingplot MBL 308 0.4 nozzle", + "sub_path": "machine/Meltingplot MBL 308 0.4 nozzle.json" + }, + { + "name": "Meltingplot MBL 308 0.6 nozzle", + "sub_path": "machine/Meltingplot MBL 308 0.6 nozzle.json" + }, + { + "name": "Meltingplot MBL 308 0.8 nozzle", + "sub_path": "machine/Meltingplot MBL 308 0.8 nozzle.json" + }, + { + "name": "Meltingplot MBL 308 1.0 nozzle", + "sub_path": "machine/Meltingplot MBL 308 1.0 nozzle.json" + }, + { + "name": "Meltingplot MBL 308 1.2 nozzle", + "sub_path": "machine/Meltingplot MBL 308 1.2 nozzle.json" + }, + { + "name": "Meltingplot MBL 480 0.4 nozzle", + "sub_path": "machine/Meltingplot MBL 480 0.4 nozzle.json" + }, + { + "name": "Meltingplot MBL 480 0.6 nozzle", + "sub_path": "machine/Meltingplot MBL 480 0.6 nozzle.json" + }, + { + "name": "Meltingplot MBL 480 0.8 nozzle", + "sub_path": "machine/Meltingplot MBL 480 0.8 nozzle.json" + }, + { + "name": "Meltingplot MBL 480 1.0 nozzle", + "sub_path": "machine/Meltingplot MBL 480 1.0 nozzle.json" + }, + { + "name": "Meltingplot MBL 480 1.2 nozzle", + "sub_path": "machine/Meltingplot MBL 480 1.2 nozzle.json" + } + ] +} diff --git a/resources/profiles/Meltingplot/Meltingplot CHX 350_cover.png b/resources/profiles/Meltingplot/Meltingplot CHX 350_cover.png new file mode 100644 index 0000000000000000000000000000000000000000..2f625aedc4d78a5f2888a506ff483caae0e5e041 GIT binary patch literal 147766 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%0DBt*F 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