From 727a3887c52df2bd8be856c6a863dd8042068348 Mon Sep 17 00:00:00 2001 From: SoftFever Date: Wed, 15 Jan 2025 22:40:27 +0800 Subject: [PATCH 01/25] Add Orca Filament Library --- resources/profiles/OrcaFilamentLibrary.json | 84 ++++++++++ .../OrcaFilamentLibrary/filament/ABS.json | 17 +++ .../OrcaFilamentLibrary/filament/ASA.json | 17 +++ .../OrcaFilamentLibrary/filament/PA-CF.json | 23 +++ .../OrcaFilamentLibrary/filament/PA.json | 21 +++ .../OrcaFilamentLibrary/filament/PC.json | 18 +++ .../OrcaFilamentLibrary/filament/PETG.json | 48 ++++++ .../OrcaFilamentLibrary/filament/PLA-CF.json | 24 +++ .../OrcaFilamentLibrary/filament/PLA.json | 20 +++ .../OrcaFilamentLibrary/filament/PVA.json | 24 +++ .../OrcaFilamentLibrary/filament/TPU.json | 15 ++ .../filament/fdm_filament_abs.json | 88 +++++++++++ .../filament/fdm_filament_asa.json | 88 +++++++++++ .../filament/fdm_filament_common.json | 144 ++++++++++++++++++ .../filament/fdm_filament_pa.json | 85 +++++++++++ .../filament/fdm_filament_pc.json | 88 +++++++++++ .../filament/fdm_filament_pet.json | 82 ++++++++++ .../filament/fdm_filament_pla.json | 94 ++++++++++++ .../filament/fdm_filament_pva.json | 100 ++++++++++++ .../filament/fdm_filament_tpu.json | 88 +++++++++++ resources/web/guide/22/22.js | 4 +- src/libslic3r/Preset.cpp | 14 +- src/libslic3r/PresetBundle.cpp | 95 +++++++----- src/libslic3r/PresetBundle.hpp | 12 +- src/slic3r/GUI/ConfigWizard.cpp | 33 ++-- src/slic3r/GUI/GCodeViewer.cpp | 2 +- src/slic3r/GUI/GUI_App.cpp | 2 +- src/slic3r/GUI/WebGuideDialog.cpp | 38 ++--- src/slic3r/GUI/WebGuideDialog.hpp | 2 +- src/slic3r/Utils/PresetUpdater.cpp | 10 +- 30 files changed, 1283 insertions(+), 97 deletions(-) create mode 100644 resources/profiles/OrcaFilamentLibrary.json create mode 100644 resources/profiles/OrcaFilamentLibrary/filament/ABS.json create mode 100644 resources/profiles/OrcaFilamentLibrary/filament/ASA.json create mode 100644 resources/profiles/OrcaFilamentLibrary/filament/PA-CF.json create mode 100644 resources/profiles/OrcaFilamentLibrary/filament/PA.json create mode 100644 resources/profiles/OrcaFilamentLibrary/filament/PC.json create mode 100644 resources/profiles/OrcaFilamentLibrary/filament/PETG.json create mode 100644 resources/profiles/OrcaFilamentLibrary/filament/PLA-CF.json create mode 100644 resources/profiles/OrcaFilamentLibrary/filament/PLA.json create mode 100644 resources/profiles/OrcaFilamentLibrary/filament/PVA.json create mode 100644 resources/profiles/OrcaFilamentLibrary/filament/TPU.json create mode 100644 resources/profiles/OrcaFilamentLibrary/filament/fdm_filament_abs.json create mode 100644 resources/profiles/OrcaFilamentLibrary/filament/fdm_filament_asa.json create mode 100644 resources/profiles/OrcaFilamentLibrary/filament/fdm_filament_common.json create mode 100644 resources/profiles/OrcaFilamentLibrary/filament/fdm_filament_pa.json create mode 100644 resources/profiles/OrcaFilamentLibrary/filament/fdm_filament_pc.json create mode 100644 resources/profiles/OrcaFilamentLibrary/filament/fdm_filament_pet.json create mode 100644 resources/profiles/OrcaFilamentLibrary/filament/fdm_filament_pla.json create mode 100644 resources/profiles/OrcaFilamentLibrary/filament/fdm_filament_pva.json create mode 100644 resources/profiles/OrcaFilamentLibrary/filament/fdm_filament_tpu.json diff --git a/resources/profiles/OrcaFilamentLibrary.json b/resources/profiles/OrcaFilamentLibrary.json new file mode 100644 index 0000000000..8422993b6b --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary.json @@ -0,0 +1,84 @@ +{ + "name": "OrcaFilamentLibrary", + "version": "02.02.00.04", + "force_update": "0", + "description": "Orca Filament Library", + "filament_list": [ + { + "name": "fdm_filament_common", + "sub_path": "filament/fdm_filament_common.json" + }, + { + "name": "fdm_filament_pla", + "sub_path": "filament/fdm_filament_pla.json" + }, + { + "name": "fdm_filament_tpu", + "sub_path": "filament/fdm_filament_tpu.json" + }, + { + "name": "fdm_filament_pet", + "sub_path": "filament/fdm_filament_pet.json" + }, + { + "name": "fdm_filament_abs", + "sub_path": "filament/fdm_filament_abs.json" + }, + { + "name": "fdm_filament_pc", + "sub_path": "filament/fdm_filament_pc.json" + }, + { + "name": "fdm_filament_asa", + "sub_path": "filament/fdm_filament_asa.json" + }, + { + "name": "fdm_filament_pva", + "sub_path": "filament/fdm_filament_pva.json" + }, + { + "name": "fdm_filament_pa", + "sub_path": "filament/fdm_filament_pa.json" + }, + { + "name": "PLA", + "sub_path": "filament/PLA.json" + }, + { + "name": "PLA-CF", + "sub_path": "filament/PLA-CF.json" + }, + { + "name": "PETG", + "sub_path": "filament/PETG.json" + }, + { + "name": "ABS", + "sub_path": "filament/ABS.json" + }, + { + "name": "TPU", + "sub_path": "filament/TPU.json" + }, + { + "name": "ASA", + "sub_path": "filament/ASA.json" + }, + { + "name": "PC", + "sub_path": "filament/PC.json" + }, + { + "name": "PVA", + "sub_path": "filament/PVA.json" + }, + { + "name": "PA", + "sub_path": "filament/PA.json" + }, + { + "name": "PA-CF", + "sub_path": "filament/PA-CF.json" + } + ] +} \ No newline at end of file diff --git a/resources/profiles/OrcaFilamentLibrary/filament/ABS.json b/resources/profiles/OrcaFilamentLibrary/filament/ABS.json new file mode 100644 index 0000000000..44070049e0 --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/ABS.json @@ -0,0 +1,17 @@ +{ + "type": "filament", + "filament_id": "GFB99", + "setting_id": "GFSA04", + "name": "ABS", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_abs", + "filament_flow_ratio": [ + "0.926" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "compatible_printers": [ + ] +} \ No newline at end of file diff --git a/resources/profiles/OrcaFilamentLibrary/filament/ASA.json b/resources/profiles/OrcaFilamentLibrary/filament/ASA.json new file mode 100644 index 0000000000..cf8550658a --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/ASA.json @@ -0,0 +1,17 @@ +{ + "type": "filament", + "filament_id": "GFB98", + "setting_id": "GFSA04", + "name": "ASA", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_asa", + "filament_flow_ratio": [ + "0.93" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "compatible_printers": [ + ] +} \ No newline at end of file diff --git a/resources/profiles/OrcaFilamentLibrary/filament/PA-CF.json b/resources/profiles/OrcaFilamentLibrary/filament/PA-CF.json new file mode 100644 index 0000000000..dd6a8b6821 --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/PA-CF.json @@ -0,0 +1,23 @@ +{ + "type": "filament", + "filament_id": "GFN98", + "setting_id": "GFSA04", + "name": "PA-CF", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_pa", + "filament_type": [ + "PA-CF" + ], + "nozzle_temperature_initial_layer": [ + "280" + ], + "nozzle_temperature": [ + "280" + ], + "filament_max_volumetric_speed": [ + "8" + ], + "compatible_printers": [ + ] +} \ No newline at end of file diff --git a/resources/profiles/OrcaFilamentLibrary/filament/PA.json b/resources/profiles/OrcaFilamentLibrary/filament/PA.json new file mode 100644 index 0000000000..6066074460 --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/PA.json @@ -0,0 +1,21 @@ +{ + "type": "filament", + "filament_id": "GFN99", + "setting_id": "GFSA04", + "name": "PA", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_pa", + "nozzle_temperature_initial_layer": [ + "280" + ], + "nozzle_temperature": [ + "280" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "compatible_printers": [ + + ] +} \ No newline at end of file diff --git a/resources/profiles/OrcaFilamentLibrary/filament/PC.json b/resources/profiles/OrcaFilamentLibrary/filament/PC.json new file mode 100644 index 0000000000..f312594a28 --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/PC.json @@ -0,0 +1,18 @@ +{ + "type": "filament", + "filament_id": "GFC99", + "setting_id": "GFSA04", + "name": "PC", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_pc", + "filament_max_volumetric_speed": [ + "12" + ], + "filament_flow_ratio": [ + "0.94" + ], + "compatible_printers": [ + + ] +} \ No newline at end of file diff --git a/resources/profiles/OrcaFilamentLibrary/filament/PETG.json b/resources/profiles/OrcaFilamentLibrary/filament/PETG.json new file mode 100644 index 0000000000..4f1a274205 --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/PETG.json @@ -0,0 +1,48 @@ +{ + "type": "filament", + "filament_id": "GFG99", + "setting_id": "GFSA04", + "name": "PETG", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_pet", + "reduce_fan_stop_start_freq": [ + "1" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "fan_cooling_layer_time": [ + "30" + ], + "overhang_fan_speed": [ + "90" + ], + "overhang_fan_threshold": [ + "25%" + ], + "fan_max_speed": [ + "90" + ], + "fan_min_speed": [ + "40" + ], + "slow_down_min_speed": [ + "10" + ], + "slow_down_layer_time": [ + "8" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_max_volumetric_speed": [ + "10" + ], + "filament_start_gcode": [ + "; filament start gcode\n" + ], + "compatible_printers": [ + + ] +} \ No newline at end of file diff --git a/resources/profiles/OrcaFilamentLibrary/filament/PLA-CF.json b/resources/profiles/OrcaFilamentLibrary/filament/PLA-CF.json new file mode 100644 index 0000000000..331000a180 --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/PLA-CF.json @@ -0,0 +1,24 @@ +{ + "type": "filament", + "filament_id": "GFL98", + "setting_id": "GFSA04", + "name": "PLA-CF", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_pla", + "filament_flow_ratio": [ + "0.95" + ], + "filament_type": [ + "PLA-CF" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "slow_down_layer_time": [ + "7" + ], + "compatible_printers": [ + + ] +} \ No newline at end of file diff --git a/resources/profiles/OrcaFilamentLibrary/filament/PLA.json b/resources/profiles/OrcaFilamentLibrary/filament/PLA.json new file mode 100644 index 0000000000..db4f22f2cc --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/PLA.json @@ -0,0 +1,20 @@ +{ + "type": "filament", + "filament_id": "GFL99", + "setting_id": "GFSA04", + "name": "PLA", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_pla", + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "slow_down_layer_time": [ + "8" + ], + "compatible_printers": [ + ] +} \ No newline at end of file diff --git a/resources/profiles/OrcaFilamentLibrary/filament/PVA.json b/resources/profiles/OrcaFilamentLibrary/filament/PVA.json new file mode 100644 index 0000000000..cfc400222b --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/PVA.json @@ -0,0 +1,24 @@ +{ + "type": "filament", + "filament_id": "GFS99", + "setting_id": "GFSA04", + "name": "PVA", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_pva", + "filament_flow_ratio": [ + "0.95" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "slow_down_layer_time": [ + "7" + ], + "slow_down_min_speed": [ + "10" + ], + "compatible_printers": [ + + ] +} \ No newline at end of file diff --git a/resources/profiles/OrcaFilamentLibrary/filament/TPU.json b/resources/profiles/OrcaFilamentLibrary/filament/TPU.json new file mode 100644 index 0000000000..9c59eaea0a --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/TPU.json @@ -0,0 +1,15 @@ +{ + "type": "filament", + "filament_id": "GFU99", + "setting_id": "GFSA04", + "name": "TPU", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_tpu", + "filament_max_volumetric_speed": [ + "3.2" + ], + "compatible_printers": [ + + ] +} \ No newline at end of file diff --git a/resources/profiles/OrcaFilamentLibrary/filament/fdm_filament_abs.json b/resources/profiles/OrcaFilamentLibrary/filament/fdm_filament_abs.json new file mode 100644 index 0000000000..b9d4eeda31 --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/fdm_filament_abs.json @@ -0,0 +1,88 @@ +{ + "type": "filament", + "name": "fdm_filament_abs", + "from": "system", + "instantiation": "false", + "inherits": "fdm_filament_common", + "cool_plate_temp" : [ + "105" + ], + "eng_plate_temp" : [ + "105" + ], + "hot_plate_temp" : [ + "105" + ], + "textured_plate_temp" : [ + "105" + ], + "cool_plate_temp_initial_layer" : [ + "105" + ], + "eng_plate_temp_initial_layer" : [ + "105" + ], + "hot_plate_temp_initial_layer" : [ + "105" + ], + "textured_plate_temp_initial_layer" : [ + "105" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "fan_cooling_layer_time": [ + "30" + ], + "filament_max_volumetric_speed": [ + "28.6" + ], + "filament_type": [ + "ABS" + ], + "filament_density": [ + "1.04" + ], + "filament_cost": [ + "20" + ], + "nozzle_temperature_initial_layer": [ + "260" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "10" + ], + "overhang_fan_threshold": [ + "25%" + ], + "overhang_fan_speed": [ + "80" + ], + "nozzle_temperature": [ + "260" + ], + "temperature_vitrification": [ + "110" + ], + "nozzle_temperature_range_low": [ + "240" + ], + "nozzle_temperature_range_high": [ + "270" + ], + "slow_down_min_speed": [ + "10" + ], + "slow_down_layer_time": [ + "3" + ] +} diff --git a/resources/profiles/OrcaFilamentLibrary/filament/fdm_filament_asa.json b/resources/profiles/OrcaFilamentLibrary/filament/fdm_filament_asa.json new file mode 100644 index 0000000000..262c561bda --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/fdm_filament_asa.json @@ -0,0 +1,88 @@ +{ + "type": "filament", + "name": "fdm_filament_asa", + "from": "system", + "instantiation": "false", + "inherits": "fdm_filament_common", + "cool_plate_temp" : [ + "105" + ], + "eng_plate_temp" : [ + "105" + ], + "hot_plate_temp" : [ + "105" + ], + "textured_plate_temp" : [ + "105" + ], + "cool_plate_temp_initial_layer" : [ + "105" + ], + "eng_plate_temp_initial_layer" : [ + "105" + ], + "hot_plate_temp_initial_layer" : [ + "105" + ], + "textured_plate_temp_initial_layer" : [ + "105" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "fan_cooling_layer_time": [ + "35" + ], + "filament_max_volumetric_speed": [ + "28.6" + ], + "filament_type": [ + "ASA" + ], + "filament_density": [ + "1.04" + ], + "filament_cost": [ + "20" + ], + "nozzle_temperature_initial_layer": [ + "260" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "fan_max_speed": [ + "80" + ], + "fan_min_speed": [ + "10" + ], + "overhang_fan_threshold": [ + "25%" + ], + "overhang_fan_speed": [ + "80" + ], + "nozzle_temperature": [ + "260" + ], + "temperature_vitrification": [ + "110" + ], + "nozzle_temperature_range_low": [ + "240" + ], + "nozzle_temperature_range_high": [ + "270" + ], + "slow_down_min_speed": [ + "10" + ], + "slow_down_layer_time": [ + "3" + ] +} diff --git a/resources/profiles/OrcaFilamentLibrary/filament/fdm_filament_common.json b/resources/profiles/OrcaFilamentLibrary/filament/fdm_filament_common.json new file mode 100644 index 0000000000..6c199d1e5c --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/fdm_filament_common.json @@ -0,0 +1,144 @@ +{ + "type": "filament", + "name": "fdm_filament_common", + "from": "system", + "instantiation": "false", + "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" + ], + "overhang_fan_threshold": [ + "95%" + ], + "overhang_fan_speed": [ + "100" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "filament_end_gcode": [ + "; filament end gcode \n" + ], + "filament_flow_ratio": [ + "1" + ], + "reduce_fan_stop_start_freq": [ + "0" + ], + "fan_cooling_layer_time": [ + "60" + ], + "filament_cost": [ + "0" + ], + "filament_density": [ + "0" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_max_volumetric_speed": [ + "0" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_settings_id": [ + "" + ], + "filament_soluble": [ + "0" + ], + "filament_type": [ + "PLA" + ], + "filament_vendor": [ + "OrcaSlicer" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "bed_type": [ + "Cool Plate" + ], + "nozzle_temperature_initial_layer": [ + "200" + ], + "full_fan_speed_layer": [ + "0" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "35" + ], + "slow_down_min_speed": [ + "10" + ], + "slow_down_layer_time": [ + "8" + ], + "filament_start_gcode": [ + "; Filament gcode\n" + ], + "nozzle_temperature": [ + "200" + ], + "temperature_vitrification": [ + "100" + ] +} diff --git a/resources/profiles/OrcaFilamentLibrary/filament/fdm_filament_pa.json b/resources/profiles/OrcaFilamentLibrary/filament/fdm_filament_pa.json new file mode 100644 index 0000000000..58f53cd451 --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/fdm_filament_pa.json @@ -0,0 +1,85 @@ +{ + "type": "filament", + "name": "fdm_filament_pa", + "from": "system", + "instantiation": "false", + "inherits": "fdm_filament_common", + "cool_plate_temp" : [ + "0" + ], + "eng_plate_temp" : [ + "100" + ], + "hot_plate_temp" : [ + "100" + ], + "textured_plate_temp" : [ + "100" + ], + "cool_plate_temp_initial_layer" : [ + "0" + ], + "eng_plate_temp_initial_layer" : [ + "100" + ], + "hot_plate_temp_initial_layer" : [ + "100" + ], + "textured_plate_temp_initial_layer" : [ + "100" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "fan_cooling_layer_time": [ + "4" + ], + "filament_max_volumetric_speed": [ + "8" + ], + "filament_type": [ + "PA" + ], + "filament_density": [ + "1.04" + ], + "filament_cost": [ + "20" + ], + "nozzle_temperature_initial_layer": [ + "290" + ], + "reduce_fan_stop_start_freq": [ + "0" + ], + "fan_max_speed": [ + "60" + ], + "fan_min_speed": [ + "0" + ], + "overhang_fan_speed": [ + "30" + ], + "nozzle_temperature": [ + "290" + ], + "temperature_vitrification": [ + "108" + ], + "nozzle_temperature_range_low": [ + "270" + ], + "nozzle_temperature_range_high": [ + "300" + ], + "slow_down_min_speed": [ + "10" + ], + "slow_down_layer_time": [ + "2" + ] +} diff --git a/resources/profiles/OrcaFilamentLibrary/filament/fdm_filament_pc.json b/resources/profiles/OrcaFilamentLibrary/filament/fdm_filament_pc.json new file mode 100644 index 0000000000..cec8b89a38 --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/fdm_filament_pc.json @@ -0,0 +1,88 @@ +{ + "type": "filament", + "name": "fdm_filament_pc", + "from": "system", + "instantiation": "false", + "inherits": "fdm_filament_common", + "cool_plate_temp" : [ + "0" + ], + "eng_plate_temp" : [ + "110" + ], + "hot_plate_temp" : [ + "110" + ], + "textured_plate_temp" : [ + "110" + ], + "cool_plate_temp_initial_layer" : [ + "0" + ], + "eng_plate_temp_initial_layer" : [ + "110" + ], + "hot_plate_temp_initial_layer" : [ + "110" + ], + "textured_plate_temp_initial_layer" : [ + "110" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "fan_cooling_layer_time": [ + "30" + ], + "filament_max_volumetric_speed": [ + "23.2" + ], + "filament_type": [ + "PC" + ], + "filament_density": [ + "1.04" + ], + "filament_cost": [ + "20" + ], + "nozzle_temperature_initial_layer": [ + "270" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "fan_max_speed": [ + "60" + ], + "fan_min_speed": [ + "10" + ], + "overhang_fan_threshold": [ + "25%" + ], + "overhang_fan_speed": [ + "60" + ], + "nozzle_temperature": [ + "280" + ], + "temperature_vitrification": [ + "140" + ], + "nozzle_temperature_range_low": [ + "260" + ], + "nozzle_temperature_range_high": [ + "280" + ], + "slow_down_min_speed": [ + "10" + ], + "slow_down_layer_time": [ + "2" + ] +} diff --git a/resources/profiles/OrcaFilamentLibrary/filament/fdm_filament_pet.json b/resources/profiles/OrcaFilamentLibrary/filament/fdm_filament_pet.json new file mode 100644 index 0000000000..bb2323e9c1 --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/fdm_filament_pet.json @@ -0,0 +1,82 @@ +{ + "type": "filament", + "name": "fdm_filament_pet", + "from": "system", + "instantiation": "false", + "inherits": "fdm_filament_common", + "cool_plate_temp" : [ + "60" + ], + "eng_plate_temp" : [ + "0" + ], + "hot_plate_temp" : [ + "80" + ], + "textured_plate_temp" : [ + "80" + ], + "cool_plate_temp_initial_layer" : [ + "60" + ], + "eng_plate_temp_initial_layer" : [ + "0" + ], + "hot_plate_temp_initial_layer" : [ + "80" + ], + "textured_plate_temp_initial_layer" : [ + "80" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "fan_cooling_layer_time": [ + "20" + ], + "filament_max_volumetric_speed": [ + "25" + ], + "filament_type": [ + "PETG" + ], + "filament_density": [ + "1.27" + ], + "filament_cost": [ + "30" + ], + "nozzle_temperature_initial_layer": [ + "255" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "20" + ], + "overhang_fan_speed": [ + "100" + ], + "nozzle_temperature": [ + "255" + ], + "temperature_vitrification": [ + "80" + ], + "nozzle_temperature_range_low": [ + "220" + ], + "nozzle_temperature_range_high": [ + "260" + ], + "filament_start_gcode": [ + "; filament start gcode\n" + ] +} diff --git a/resources/profiles/OrcaFilamentLibrary/filament/fdm_filament_pla.json b/resources/profiles/OrcaFilamentLibrary/filament/fdm_filament_pla.json new file mode 100644 index 0000000000..82c6772f35 --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/fdm_filament_pla.json @@ -0,0 +1,94 @@ +{ + "type": "filament", + "name": "fdm_filament_pla", + "from": "system", + "instantiation": "false", + "inherits": "fdm_filament_common", + "fan_cooling_layer_time": [ + "100" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "filament_type": [ + "PLA" + ], + "filament_density": [ + "1.24" + ], + "filament_cost": [ + "20" + ], + "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" + ], + "nozzle_temperature_initial_layer": [ + "220" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "overhang_fan_speed": [ + "100" + ], + "overhang_fan_threshold": [ + "50%" + ], + "close_fan_the_first_x_layers": [ + "1" + ], + "nozzle_temperature": [ + "220" + ], + "temperature_vitrification": [ + "60" + ], + "nozzle_temperature_range_low": [ + "190" + ], + "nozzle_temperature_range_high": [ + "230" + ], + "slow_down_min_speed": [ + "10" + ], + "slow_down_layer_time": [ + "4" + ], + "additional_cooling_fan_speed": [ + "70" + ], + "filament_start_gcode": [ + "; filament start gcode\n" + ] +} diff --git a/resources/profiles/OrcaFilamentLibrary/filament/fdm_filament_pva.json b/resources/profiles/OrcaFilamentLibrary/filament/fdm_filament_pva.json new file mode 100644 index 0000000000..ebf25aa3ae --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/fdm_filament_pva.json @@ -0,0 +1,100 @@ +{ + "type": "filament", + "name": "fdm_filament_pva", + "from": "system", + "instantiation": "false", + "inherits": "fdm_filament_common", + "cool_plate_temp" : [ + "35" + ], + "eng_plate_temp" : [ + "0" + ], + "hot_plate_temp" : [ + "45" + ], + "textured_plate_temp" : [ + "45" + ], + "cool_plate_temp_initial_layer" : [ + "35" + ], + "eng_plate_temp_initial_layer" : [ + "0" + ], + "hot_plate_temp_initial_layer" : [ + "45" + ], + "textured_plate_temp_initial_layer" : [ + "45" + ], + "fan_cooling_layer_time": [ + "100" + ], + "filament_max_volumetric_speed": [ + "15" + ], + "filament_soluble": [ + "1" + ], + "filament_is_support": [ + "1" + ], + "filament_type": [ + "PVA" + ], + "filament_density": [ + "1.24" + ], + "filament_cost": [ + "20" + ], + "nozzle_temperature_initial_layer": [ + "220" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "overhang_fan_speed": [ + "100" + ], + "overhang_fan_threshold": [ + "50%" + ], + "close_fan_the_first_x_layers": [ + "1" + ], + "nozzle_temperature": [ + "220" + ], + "temperature_vitrification": [ + "50" + ], + "nozzle_temperature_range_low": [ + "190" + ], + "nozzle_temperature_range_high": [ + "250" + ], + "slow_down_min_speed": [ + "10" + ], + "slow_down_layer_time": [ + "4" + ], + "additional_cooling_fan_speed": [ + "70" + ], + "filament_start_gcode": [ + "; filament start gcode\n" + ] +} diff --git a/resources/profiles/OrcaFilamentLibrary/filament/fdm_filament_tpu.json b/resources/profiles/OrcaFilamentLibrary/filament/fdm_filament_tpu.json new file mode 100644 index 0000000000..d00b7dbcab --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/fdm_filament_tpu.json @@ -0,0 +1,88 @@ +{ + "type": "filament", + "name": "fdm_filament_tpu", + "from": "system", + "instantiation": "false", + "inherits": "fdm_filament_common", + "cool_plate_temp" : [ + "30" + ], + "eng_plate_temp" : [ + "30" + ], + "hot_plate_temp" : [ + "35" + ], + "textured_plate_temp" : [ + "35" + ], + "cool_plate_temp_initial_layer" : [ + "30" + ], + "eng_plate_temp_initial_layer" : [ + "30" + ], + "hot_plate_temp_initial_layer" : [ + "35" + ], + "textured_plate_temp_initial_layer" : [ + "35" + ], + "fan_cooling_layer_time": [ + "100" + ], + "filament_max_volumetric_speed": [ + "15" + ], + "filament_type": [ + "TPU" + ], + "filament_density": [ + "1.24" + ], + "filament_cost": [ + "20" + ], + "filament_retraction_length": [ + "0.4" + ], + "nozzle_temperature_initial_layer": [ + "240" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "100" + ], + "overhang_fan_speed": [ + "100" + ], + "additional_cooling_fan_speed": [ + "70" + ], + "close_fan_the_first_x_layers": [ + "1" + ], + "nozzle_temperature": [ + "240" + ], + "temperature_vitrification": [ + "60" + ], + "nozzle_temperature_range_low": [ + "200" + ], + "nozzle_temperature_range_high": [ + "250" + ], + "filament_start_gcode": [ + "; filament start gcode\n" + ] +} diff --git a/resources/web/guide/22/22.js b/resources/web/guide/22/22.js index cdb00f26c8..90f0bcef68 100644 --- a/resources/web/guide/22/22.js +++ b/resources/web/guide/22/22.js @@ -2,7 +2,7 @@ var m_ProfileItem; var FilamentPriority=new Array( "pla","abs","pet","tpu","pc"); -var VendorPriority=new Array("bambu lab","bambulab","bbl","kexcelled","polymaker","esun","generic"); +var VendorPriority=new Array("Orca Built-in","bambu lab","bambulab","bbl","kexcelled","polymaker","esun","Generic"); function OnInit() { @@ -139,7 +139,7 @@ function SortUI() if( fModel=='') { // Orca: hide - bFind=false; + bFind=true; } else { diff --git a/src/libslic3r/Preset.cpp b/src/libslic3r/Preset.cpp index 1906013cbd..b09171ee0e 100644 --- a/src/libslic3r/Preset.cpp +++ b/src/libslic3r/Preset.cpp @@ -566,9 +566,10 @@ std::string Preset::label(bool no_alias) const bool is_compatible_with_print(const PresetWithVendorProfile &preset, const PresetWithVendorProfile &active_print, const PresetWithVendorProfile &active_printer) { - if (preset.vendor != nullptr && preset.vendor != active_printer.vendor) - // The current profile has a vendor assigned and it is different from the active print's vendor. - return false; + // Orca: we allow cross vendor compatibility + // if (preset.vendor != nullptr && preset.vendor != active_printer.vendor) + // // The current profile has a vendor assigned and it is different from the active print's vendor. + // return false; auto &condition = preset.preset.compatible_prints_condition(); auto *compatible_prints = dynamic_cast(preset.preset.config.option("compatible_prints")); bool has_compatible_prints = compatible_prints != nullptr && ! compatible_prints->values.empty(); @@ -603,9 +604,10 @@ bool is_compatible_with_parent_printer(const PresetWithVendorProfile& preset, co bool is_compatible_with_printer(const PresetWithVendorProfile &preset, const PresetWithVendorProfile &active_printer, const DynamicPrintConfig *extra_config) { - if (preset.vendor != nullptr && preset.vendor != active_printer.vendor) - // The current profile has a vendor assigned and it is different from the active print's vendor. - return false; + // Orca: we allow cross vendor compatibility + // if (preset.vendor != nullptr && preset.vendor != active_printer.vendor) + // // The current profile has a vendor assigned and it is different from the active print's vendor. + // return false; auto &condition = preset.preset.compatible_printers_condition(); auto *compatible_printers = dynamic_cast(preset.preset.config.option("compatible_printers")); bool has_compatible_printers = compatible_printers != nullptr && ! compatible_printers->values.empty(); diff --git a/src/libslic3r/PresetBundle.cpp b/src/libslic3r/PresetBundle.cpp index 039930c387..7fd5ff1ce2 100644 --- a/src/libslic3r/PresetBundle.cpp +++ b/src/libslic3r/PresetBundle.cpp @@ -43,11 +43,12 @@ static std::vector s_project_options { "flush_multiplier", }; -//BBS: add BBL as default -const char *PresetBundle::BBL_BUNDLE = "Custom"; -const char *PresetBundle::BBL_DEFAULT_PRINTER_MODEL = "MyKlipper 0.4 nozzle"; -const char *PresetBundle::BBL_DEFAULT_PRINTER_VARIANT = "0.4"; -const char *PresetBundle::BBL_DEFAULT_FILAMENT = "My Generic PLA"; +//Orca: add custom as default +const char *PresetBundle::ORCA_DEFAULT_BUNDLE = "Custom"; +const char *PresetBundle::ORCA_DEFAULT_PRINTER_MODEL = "MyKlipper 0.4 nozzle"; +const char *PresetBundle::ORCA_DEFAULT_PRINTER_VARIANT = "0.4"; +const char *PresetBundle::ORCA_DEFAULT_FILAMENT = "My Generic PLA"; +const char *PresetBundle::ORCA_FILAMENT_LIBRARY = "OrcaFilamentLibrary"; PresetBundle::PresetBundle() : prints(Preset::TYPE_PRINT, Preset::print_options(), static_cast(FullPrintConfig::defaults())) @@ -1094,7 +1095,7 @@ void PresetBundle::remove_users_preset(AppConfig &config, std::mapconfig.has("printer_model")) { @@ -1244,45 +1245,59 @@ std::pair PresetBundle::load_system_pre PresetsConfigSubstitutions substitutions; std::string errors_cummulative; bool first = true; - for (auto &dir_entry : boost::filesystem::directory_iterator(dir)) - { + std::vector vendor_names; + // store all vendor names in vendor_names + for (auto& dir_entry : boost::filesystem::directory_iterator(dir)) { std::string vendor_file = dir_entry.path().string(); - if (Slic3r::is_json_file(vendor_file)) { - std::string vendor_name = dir_entry.path().filename().string(); - // Remove the .json suffix. - vendor_name.erase(vendor_name.size() - 5); + if (!Slic3r::is_json_file(vendor_file)) + continue; - if (validation_mode && !vendor_to_validate.empty() && vendor_name != vendor_to_validate) - continue; + std::string vendor_name = dir_entry.path().filename().string(); - try { - // Load the config bundle, flatten it. - if (first) { - // Reset this PresetBundle and load the first vendor config. - append(substitutions, this->load_vendor_configs_from_json(dir.string(), vendor_name, PresetBundle::LoadSystem, compatibility_rule).first); - first = false; - } else { - // Load the other vendor configs, merge them with this PresetBundle. - // Report duplicate profiles. - PresetBundle other; - append(substitutions, other.load_vendor_configs_from_json(dir.string(), vendor_name, PresetBundle::LoadSystem, compatibility_rule).first); - std::vector duplicates = this->merge_presets(std::move(other)); - if (! duplicates.empty()) { - errors_cummulative += "Found duplicated settings in vendor " + vendor_name + "'s json file lists: "; - for (size_t i = 0; i < duplicates.size(); ++ i) { - if (i > 0) - errors_cummulative += ", "; - errors_cummulative += duplicates[i]; - } + // Remove the .json suffix. + vendor_name.erase(vendor_name.size() - 5); + vendor_names.push_back(vendor_name); + } + // Move ORCA_FILAMENT_LIBRARY to the beginning of the list + for (size_t i = 0; i < vendor_names.size(); ++ i) { + if (vendor_names[i] == ORCA_FILAMENT_LIBRARY) { + std::swap(vendor_names[0], vendor_names[i]); + break; + } + } + + for (auto &vendor_name : vendor_names) + { + if (validation_mode && !vendor_to_validate.empty() && vendor_name != vendor_to_validate) + continue; + + try { + // Load the config bundle, flatten it. + if (first) { + // Reset this PresetBundle and load the first vendor config. + append(substitutions, this->load_vendor_configs_from_json(dir.string(), vendor_name, PresetBundle::LoadSystem, compatibility_rule).first); + first = false; + } else { + // Load the other vendor configs, merge them with this PresetBundle. + // Report duplicate profiles. + PresetBundle other; + append(substitutions, other.load_vendor_configs_from_json(dir.string(), vendor_name, PresetBundle::LoadSystem, compatibility_rule).first); + std::vector duplicates = this->merge_presets(std::move(other)); + if (! duplicates.empty()) { + errors_cummulative += "Found duplicated settings in vendor " + vendor_name + "'s json file lists: "; + for (size_t i = 0; i < duplicates.size(); ++ i) { + if (i > 0) + errors_cummulative += ", "; + errors_cummulative += duplicates[i]; } } - } catch (const std::runtime_error &err) { - if (validation_mode) - throw err; - else { - errors_cummulative += err.what(); - errors_cummulative += "\n"; - } + } + } catch (const std::runtime_error &err) { + if (validation_mode) + throw err; + else { + errors_cummulative += err.what(); + errors_cummulative += "\n"; } } } diff --git a/src/libslic3r/PresetBundle.hpp b/src/libslic3r/PresetBundle.hpp index da952dde27..50592876e0 100644 --- a/src/libslic3r/PresetBundle.hpp +++ b/src/libslic3r/PresetBundle.hpp @@ -261,11 +261,13 @@ public: std::pair load_system_filaments_json(ForwardCompatibilitySubstitutionRule compatibility_rule); VendorProfile get_custom_vendor_models() const; - //BBS: add BBL as default - static const char *BBL_BUNDLE; - static const char *BBL_DEFAULT_PRINTER_MODEL; - static const char *BBL_DEFAULT_PRINTER_VARIANT; - static const char *BBL_DEFAULT_FILAMENT; + //orca: add 'custom' as default + static const char *ORCA_DEFAULT_BUNDLE; + static const char *ORCA_DEFAULT_PRINTER_MODEL; + static const char *ORCA_DEFAULT_PRINTER_VARIANT; + static const char *ORCA_DEFAULT_FILAMENT; + static const char *ORCA_FILAMENT_LIBRARY; + static std::array types_list(PrinterTechnology pt) { if (pt == ptFFF) diff --git a/src/slic3r/GUI/ConfigWizard.cpp b/src/slic3r/GUI/ConfigWizard.cpp index 1768d8cd47..f6c059e540 100644 --- a/src/slic3r/GUI/ConfigWizard.cpp +++ b/src/slic3r/GUI/ConfigWizard.cpp @@ -123,18 +123,18 @@ BundleMap BundleMap::load() const auto vendor_dir = (boost::filesystem::path(Slic3r::data_dir()) / PRESET_SYSTEM_DIR).make_preferred(); const auto rsrc_vendor_dir = (boost::filesystem::path(resources_dir()) / "profiles").make_preferred(); - //BBS: add BBL as default - //BBS: add json logic for vendor bundle - auto bbl_bundle_path = (vendor_dir / PresetBundle::BBL_BUNDLE).replace_extension(".json"); - auto bbl_bundle_rsrc = false; - if (!boost::filesystem::exists(bbl_bundle_path)) { - bbl_bundle_path = (rsrc_vendor_dir / PresetBundle::BBL_BUNDLE).replace_extension(".json"); - bbl_bundle_rsrc = true; + //Orca: add custom as default + //Orca: add json logic for vendor bundle + auto orca_bundle_path = (vendor_dir / PresetBundle::ORCA_DEFAULT_BUNDLE).replace_extension(".json"); + auto orca_bundle_rsrc = false; + if (!boost::filesystem::exists(orca_bundle_path)) { + orca_bundle_path = (rsrc_vendor_dir / PresetBundle::ORCA_DEFAULT_BUNDLE).replace_extension(".json"); + orca_bundle_rsrc = true; } { Bundle bbl_bundle; - if (bbl_bundle.load(std::move(bbl_bundle_path), bbl_bundle_rsrc, true)) - res.emplace(PresetBundle::BBL_BUNDLE, std::move(bbl_bundle)); + if (bbl_bundle.load(std::move(orca_bundle_path), orca_bundle_rsrc, true)) + res.emplace(PresetBundle::ORCA_DEFAULT_BUNDLE, std::move(bbl_bundle)); } // Load the other bundles in the datadir/vendor directory @@ -163,10 +163,10 @@ BundleMap BundleMap::load() Bundle& BundleMap::bbl_bundle() { - //BBS: add BBL as default - auto it = find(PresetBundle::BBL_BUNDLE); + //Orca: add custom as default + auto it = find(PresetBundle::ORCA_DEFAULT_BUNDLE); if (it == end()) { - throw Slic3r::RuntimeError("ConfigWizard: Internal error in BundleMap: BBL_BUNDLE not loaded"); + throw Slic3r::RuntimeError("ConfigWizard: Internal error in BundleMap: ORCA_DEFAULT_BUNDLE not loaded"); } return it->second; @@ -625,12 +625,11 @@ std::set PagePrinters::get_selected_models() void PagePrinters::set_run_reason(ConfigWizard::RunReason run_reason) { - //BBS: add BBL as default + //Orca: add custom as default if (is_primary_printer_page && (run_reason == ConfigWizard::RR_DATA_EMPTY || run_reason == ConfigWizard::RR_DATA_LEGACY) && printer_pickers.size() > 0 - && printer_pickers[0]->vendor_id == PresetBundle::BBL_BUNDLE) { - //BBS: select alll bbs machine by default + && printer_pickers[0]->vendor_id == PresetBundle::ORCA_DEFAULT_BUNDLE) { //printer_pickers[0]->select_one(0, true); printer_pickers[0]->select_all(true); } @@ -1941,8 +1940,8 @@ void ConfigWizard::priv::create_3rdparty_pages() { for (const auto &pair : bundles) { const VendorProfile *vendor = pair.second.vendor_profile; - //BBS: add BBL as default - if (vendor->id == PresetBundle::BBL_BUNDLE) { continue; } + //Orca: add custom as default + if (vendor->id == PresetBundle::ORCA_DEFAULT_BUNDLE) { continue; } bool is_fff_technology = false; bool is_sla_technology = false; diff --git a/src/slic3r/GUI/GCodeViewer.cpp b/src/slic3r/GUI/GCodeViewer.cpp index 00b9685861..0190594182 100644 --- a/src/slic3r/GUI/GCodeViewer.cpp +++ b/src/slic3r/GUI/GCodeViewer.cpp @@ -845,7 +845,7 @@ void GCodeViewer::init(ConfigOptionMode mode, PresetBundle* preset_bundle) } if (filename.empty()) { - filename = preset_bundle->get_hotend_model_for_printer_model(PresetBundle::BBL_DEFAULT_PRINTER_MODEL); + filename = preset_bundle->get_hotend_model_for_printer_model(PresetBundle::ORCA_DEFAULT_PRINTER_MODEL); } } } diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp index 2cbbd21683..9e3bd6c5d6 100644 --- a/src/slic3r/GUI/GUI_App.cpp +++ b/src/slic3r/GUI/GUI_App.cpp @@ -4736,7 +4736,7 @@ void GUI_App::start_sync_user_preset(bool with_progress_dlg) m_sync_update_thread = Slic3r::create_thread( [this, progressFn, cancelFn, finishFn, t = std::weak_ptr(m_user_sync_token)] { // get setting list, update setting list - std::string version = preset_bundle->get_vendor_profile_version(PresetBundle::BBL_BUNDLE).to_string(); + std::string version = preset_bundle->get_vendor_profile_version(PresetBundle::ORCA_DEFAULT_BUNDLE).to_string(); int ret = m_agent->get_setting_list2(version, [this](auto info) { auto type = info[BBL_JSON_KEY_TYPE]; auto name = info[BBL_JSON_KEY_NAME]; diff --git a/src/slic3r/GUI/WebGuideDialog.cpp b/src/slic3r/GUI/WebGuideDialog.cpp index f8994ff929..48315505bd 100644 --- a/src/slic3r/GUI/WebGuideDialog.cpp +++ b/src/slic3r/GUI/WebGuideDialog.cpp @@ -592,7 +592,7 @@ bool GuideFrame::IsFirstUse() if (strVal == "1") return false; - if (bbl_bundle_rsrc == true) + if (orca_bundle_rsrc == true) return true; return true; @@ -881,11 +881,11 @@ bool GuideFrame::apply_config(AppConfig *app_config, PresetBundle *preset_bundle variant.clear(); return std::string(); }; - // Prusa printers are considered first, then 3rd party. - if (preferred_model = get_preferred_printer_model(PresetBundle::BBL_BUNDLE, preferred_variant); + // Orca "custom" printers are considered first, then 3rd party. + if (preferred_model = get_preferred_printer_model(PresetBundle::ORCA_DEFAULT_BUNDLE, preferred_variant); preferred_model.empty()) { for (const auto& bundle : enabled_vendors) { - if (bundle.first == PresetBundle::BBL_BUNDLE) { continue; } + if (bundle.first == PresetBundle::ORCA_DEFAULT_BUNDLE) { continue; } if (preferred_model = get_preferred_printer_model(bundle.first, preferred_variant); !preferred_model.empty()) break; @@ -962,10 +962,10 @@ bool GuideFrame::run() //we install the default here bool apply_keeped_changes = false; //clear filament section and use default materials - app.app_config->set_variant(PresetBundle::BBL_BUNDLE, - PresetBundle::BBL_DEFAULT_PRINTER_MODEL, PresetBundle::BBL_DEFAULT_PRINTER_VARIANT, "true"); + app.app_config->set_variant(PresetBundle::ORCA_DEFAULT_BUNDLE, + PresetBundle::ORCA_DEFAULT_PRINTER_MODEL, PresetBundle::ORCA_DEFAULT_PRINTER_VARIANT, "true"); app.app_config->clear_section(AppConfig::SECTION_FILAMENTS); - app.preset_bundle->load_selections(*app.app_config, {PresetBundle::BBL_DEFAULT_PRINTER_MODEL, PresetBundle::BBL_DEFAULT_PRINTER_VARIANT, PresetBundle::BBL_DEFAULT_FILAMENT, std::string()}); + app.preset_bundle->load_selections(*app.app_config, {PresetBundle::ORCA_DEFAULT_PRINTER_MODEL, PresetBundle::ORCA_DEFAULT_PRINTER_VARIANT, PresetBundle::ORCA_DEFAULT_FILAMENT, std::string()}); app.app_config->set_legacy_datadir(false); app.update_mode(); @@ -1099,13 +1099,13 @@ int GuideFrame::LoadProfile() vendor_dir = (boost::filesystem::path(Slic3r::data_dir()) / PRESET_SYSTEM_DIR ).make_preferred(); rsrc_vendor_dir = (boost::filesystem::path(resources_dir()) / "profiles").make_preferred(); - // BBS: add BBL as default - // BBS: add json logic for vendor bundle - auto bbl_bundle_path = vendor_dir; - bbl_bundle_rsrc = false; - if (!boost::filesystem::exists((vendor_dir / PresetBundle::BBL_BUNDLE).replace_extension(".json"))) { - bbl_bundle_path = rsrc_vendor_dir; - bbl_bundle_rsrc = true; + // Orca: add custom as default + // Orca: add json logic for vendor bundle + auto orca_custom_bundle_path = vendor_dir; + orca_bundle_rsrc = false; + if (!boost::filesystem::exists((vendor_dir / PresetBundle::ORCA_DEFAULT_BUNDLE).replace_extension(".json"))) { + orca_custom_bundle_path = rsrc_vendor_dir; + orca_bundle_rsrc = true; } // intptr_t handle; @@ -1126,8 +1126,8 @@ int GuideFrame::LoadProfile() //} while (_findnext(handle, &findData) == 0); // ??????????? - //load BBL bundle from user data path - string targetPath = bbl_bundle_path.make_preferred().string(); + //load custom bundle from user data path + string targetPath = orca_custom_bundle_path.make_preferred().string(); boost::filesystem::path myPath(targetPath); boost::filesystem::directory_iterator endIter; for (boost::filesystem::directory_iterator iter(myPath); iter != endIter; iter++) { @@ -1143,7 +1143,7 @@ int GuideFrame::LoadProfile() strVendor = strVendor.AfterLast('/'); wxString strExtension = from_u8(iter->path().string()).AfterLast('.').Lower(); - if (w2s(strVendor) == PresetBundle::BBL_BUNDLE && strExtension.CmpNoCase("json") == 0) + if ((w2s(strVendor) == PresetBundle::ORCA_DEFAULT_BUNDLE || w2s(strVendor) == PresetBundle::ORCA_FILAMENT_LIBRARY) && strExtension.CmpNoCase("json") == 0) LoadProfileFamily(w2s(strVendor), iter->path().string()); } } @@ -1162,13 +1162,13 @@ int GuideFrame::LoadProfile() strVendor = strVendor.AfterLast('/'); wxString strExtension = from_u8(iter->path().string()).AfterLast('.').Lower(); - if (w2s(strVendor) != PresetBundle::BBL_BUNDLE && strExtension.CmpNoCase("json")==0) + if (w2s(strVendor) != PresetBundle::ORCA_DEFAULT_BUNDLE && w2s(strVendor) != PresetBundle::ORCA_FILAMENT_LIBRARY && strExtension.CmpNoCase("json")==0) LoadProfileFamily(w2s(strVendor), iter->path().string()); } } - //LoadProfileFamily(PresetBundle::BBL_BUNDLE, bbl_bundle_path.string()); + //LoadProfileFamily(PresetBundle::ORCA_DEFAULT_BUNDLE, bbl_bundle_path.string()); const auto enabled_filaments = wxGetApp().app_config->has_section(AppConfig::SECTION_FILAMENTS) ? wxGetApp().app_config->get_section(AppConfig::SECTION_FILAMENTS) : std::map(); m_appconfig_new.set_vendors(*wxGetApp().app_config); diff --git a/src/slic3r/GUI/WebGuideDialog.hpp b/src/slic3r/GUI/WebGuideDialog.hpp index 4fd495fe6d..98ce915f51 100644 --- a/src/slic3r/GUI/WebGuideDialog.hpp +++ b/src/slic3r/GUI/WebGuideDialog.hpp @@ -103,7 +103,7 @@ private: wxString m_SectionName; - bool bbl_bundle_rsrc; + bool orca_bundle_rsrc; boost::filesystem::path vendor_dir; boost::filesystem::path rsrc_vendor_dir; diff --git a/src/slic3r/Utils/PresetUpdater.cpp b/src/slic3r/Utils/PresetUpdater.cpp index cdd91eb22e..41cd23acdd 100644 --- a/src/slic3r/Utils/PresetUpdater.cpp +++ b/src/slic3r/Utils/PresetUpdater.cpp @@ -1071,8 +1071,7 @@ bool PresetUpdater::priv::install_bundles_rsrc(std::vector bundles, } -//BBS: refine preset update logic -// Install indicies from resources. Only installs those that are either missing or older than in resources. +// Orca: copy/update the vendor profiles from resource to system folder void PresetUpdater::priv::check_installed_vendor_profiles() const { BOOST_LOG_TRIVIAL(info) << "[Orca Updater]:Checking whether the profile from resource is newer"; @@ -1080,8 +1079,9 @@ void PresetUpdater::priv::check_installed_vendor_profiles() const AppConfig *app_config = GUI::wxGetApp().app_config; const auto enabled_vendors = app_config->vendors(); - //BBS: refine the init check logic std::vector bundles; + // Orca: always install filament library + bundles.push_back(PresetBundle::ORCA_FILAMENT_LIBRARY); for (auto &dir_entry : boost::filesystem::directory_iterator(rsrc_path)) { const auto &path = dir_entry.path(); std::string file_path = path.string(); @@ -1111,11 +1111,11 @@ void PresetUpdater::priv::check_installed_vendor_profiles() const fs::remove_all(path_of_vendor); } } - else if ((vendor_name == PresetBundle::BBL_BUNDLE) || (enabled_vendors.find(vendor_name) != enabled_vendors.end())) {//if vendor has no file, copy it from resource for BBL + else if ((vendor_name == PresetBundle::ORCA_DEFAULT_BUNDLE) || (enabled_vendors.find(vendor_name) != enabled_vendors.end())) {//if vendor has no file, copy it from resource for ORCA_DEFAULT_BUNDLE bundles.push_back(vendor_name); } } - else if ((vendor_name == PresetBundle::BBL_BUNDLE) || (enabled_vendors.find(vendor_name) != enabled_vendors.end())) { //always update configs from resource to vendor for BBL + else if ((vendor_name == PresetBundle::ORCA_DEFAULT_BUNDLE) || (enabled_vendors.find(vendor_name) != enabled_vendors.end())) { //always update configs from resource to vendor for ORCA_DEFAULT_BUNDLE bundles.push_back(vendor_name); } } From f8698d89a4be743a6b59234fe854ef8bdb892117 Mon Sep 17 00:00:00 2001 From: SoftFever Date: Wed, 15 Jan 2025 22:54:56 +0800 Subject: [PATCH 02/25] Move compatible_printers from developer mode to Advance mode --- src/libslic3r/PrintConfig.cpp | 22 +++++++++++----------- src/slic3r/GUI/Tab.cpp | 19 ++++++++----------- 2 files changed, 19 insertions(+), 22 deletions(-) diff --git a/src/libslic3r/PrintConfig.cpp b/src/libslic3r/PrintConfig.cpp index 278cda17c6..eafd14d506 100644 --- a/src/libslic3r/PrintConfig.cpp +++ b/src/libslic3r/PrintConfig.cpp @@ -1261,38 +1261,38 @@ void PrintConfigDef::init_fff_params() def = this->add("compatible_printers", coStrings); def->label = L("Compatible machine"); - def->mode = comDevelop; + def->mode = comAdvanced; def->set_default_value(new ConfigOptionStrings()); def->cli = ConfigOptionDef::nocli; //BBS. def = this->add("upward_compatible_machine", coStrings); def->label = L("upward compatible machine"); - def->mode = comDevelop; + def->mode = comAdvanced; def->set_default_value(new ConfigOptionStrings()); def->cli = ConfigOptionDef::nocli; def = this->add("compatible_printers_condition", coString); def->label = L("Compatible machine condition"); - //def->tooltip = L("A boolean expression using the configuration values of an active printer profile. " - // "If this expression evaluates to true, this profile is considered compatible " - // "with the active printer profile."); - def->mode = comDevelop; + def->tooltip = L("A boolean expression using the configuration values of an active printer profile. " + "If this expression evaluates to true, this profile is considered compatible " + "with the active printer profile."); + def->mode = comAdvanced; def->set_default_value(new ConfigOptionString()); def->cli = ConfigOptionDef::nocli; def = this->add("compatible_prints", coStrings); def->label = L("Compatible process profiles"); - def->mode = comDevelop; + def->mode = comAdvanced; def->set_default_value(new ConfigOptionStrings()); def->cli = ConfigOptionDef::nocli; def = this->add("compatible_prints_condition", coString); def->label = L("Compatible process profiles condition"); - //def->tooltip = L("A boolean expression using the configuration values of an active print profile. " - // "If this expression evaluates to true, this profile is considered compatible " - // "with the active print profile."); - def->mode = comDevelop; + def->tooltip = L("A boolean expression using the configuration values of an active print profile. " + "If this expression evaluates to true, this profile is considered compatible " + "with the active print profile."); + def->mode = comAdvanced; def->set_default_value(new ConfigOptionString()); def->cli = ConfigOptionDef::nocli; diff --git a/src/slic3r/GUI/Tab.cpp b/src/slic3r/GUI/Tab.cpp index 27a85e0276..180760e5ad 100644 --- a/src/slic3r/GUI/Tab.cpp +++ b/src/slic3r/GUI/Tab.cpp @@ -2381,7 +2381,6 @@ page = add_options_page(L("Others"), "custom-gcode_other"); // ORCA: icon only v option.opt.height = 25;//250; optgroup->append_single_option_line(option); -#if 1 page = add_options_page(L("Dependencies"), "custom-gcode_advanced"); optgroup = page->new_optgroup(L("Profile dependencies")); @@ -2394,7 +2393,6 @@ page = add_options_page(L("Others"), "custom-gcode_other"); // ORCA: icon only v optgroup->append_single_option_line(option); build_preset_description_line(optgroup.get()); -#endif } // Reload current config (aka presets->edited_preset->config) into the UI fields. @@ -3527,14 +3525,6 @@ void TabFilament::build() optgroup->append_single_option_line("filament_multitool_ramming_volume"); optgroup->append_single_option_line("filament_multitool_ramming_flow"); - page = add_options_page(L("Notes"), "custom-gcode_note"); // ORCA: icon only visible on placeholders - optgroup = page->new_optgroup(L("Notes"),"note", 0); - optgroup->label_width = 0; - option = optgroup->get_option("filament_notes"); - option.opt.full_width = true; - option.opt.height = notes_field_height;// 250; - optgroup->append_single_option_line(option); -#if 1 page = add_options_page(L("Dependencies"), "advanced"); optgroup = page->new_optgroup(L("Profile dependencies")); create_line_with_widget(optgroup.get(), "compatible_printers", "", [this](wxWindow* parent) { @@ -3553,8 +3543,15 @@ void TabFilament::build() option.opt.full_width = true; optgroup->append_single_option_line(option); + page = add_options_page(L("Notes"), "custom-gcode_note"); // ORCA: icon only visible on placeholders + optgroup = page->new_optgroup(L("Notes"),"note", 0); + optgroup->label_width = 0; + option = optgroup->get_option("filament_notes"); + option.opt.full_width = true; + option.opt.height = notes_field_height;// 250; + optgroup->append_single_option_line(option); + //build_preset_description_line(optgroup.get()); -#endif } // Reload current config (aka presets->edited_preset->config) into the UI fields. From 26a55a12678b184c0b50ff7902a46a6d8fd7238f Mon Sep 17 00:00:00 2001 From: SoftFever Date: Thu, 16 Jan 2025 19:25:43 +0800 Subject: [PATCH 03/25] Update profile valdiator --- src/OrcaSlicer_profile_validator.cpp | 2 ++ src/libslic3r/PresetBundle.cpp | 3 +++ 2 files changed, 5 insertions(+) diff --git a/src/OrcaSlicer_profile_validator.cpp b/src/OrcaSlicer_profile_validator.cpp index ba4e7ce687..84fe4c2037 100644 --- a/src/OrcaSlicer_profile_validator.cpp +++ b/src/OrcaSlicer_profile_validator.cpp @@ -147,6 +147,8 @@ int main(int argc, char* argv[]) std::cout << "Validation failed" << std::endl; return 1; } + // Report loaded presets + std::cout << "Total loaded vendors: " << preset_bundle->vendors.size() << std::endl; if (generate_user_preset) { generate_custom_presets(preset_bundle, app_config); diff --git a/src/libslic3r/PresetBundle.cpp b/src/libslic3r/PresetBundle.cpp index 7fd5ff1ce2..0f6a4cc569 100644 --- a/src/libslic3r/PresetBundle.cpp +++ b/src/libslic3r/PresetBundle.cpp @@ -4215,6 +4215,9 @@ bool PresetBundle::has_errors() const for (auto& preset : filaments) { if (!preset.is_system) continue; + // It's per design that the Orca Filament Library can have the empty compatible_printers. + if(preset.vendor->name == PresetBundle::ORCA_FILAMENT_LIBRARY) + continue; auto* compatible_printers = dynamic_cast(preset.config.option("compatible_printers")); if (compatible_printers == nullptr || compatible_printers->values.empty()) { has_errors = true; From 7179797d5581e197ee1e404bd8c965c6d404dd99 Mon Sep 17 00:00:00 2001 From: SoftFever Date: Sun, 19 Jan 2025 00:39:45 +0800 Subject: [PATCH 04/25] suport renamed_from --- src/libslic3r/Config.cpp | 5 +++-- src/libslic3r/Preset.cpp | 8 +++++++- src/libslic3r/Preset.hpp | 3 ++- src/libslic3r/PresetBundle.cpp | 10 +++++++--- 4 files changed, 19 insertions(+), 7 deletions(-) diff --git a/src/libslic3r/Config.cpp b/src/libslic3r/Config.cpp index e826bb4c5b..57f51f0b23 100644 --- a/src/libslic3r/Config.cpp +++ b/src/libslic3r/Config.cpp @@ -839,8 +839,9 @@ int ConfigBase::load_from_json(const std::string &file, ConfigSubstitutionContex } else if (!load_inherits_to_config && boost::iequals(it.key(), BBL_JSON_KEY_INHERITS)) { key_values.emplace(BBL_JSON_KEY_INHERITS, it.value()); - } - else { + } else if (boost::iequals(it.key(), ORCA_JSON_KEY_RENAMED_FROM)) { + key_values.emplace(ORCA_JSON_KEY_RENAMED_FROM, it.value()); + } else { t_config_option_key opt_key = it.key(); std::string value_str; diff --git a/src/libslic3r/Preset.cpp b/src/libslic3r/Preset.cpp index b09171ee0e..102f02d0f9 100644 --- a/src/libslic3r/Preset.cpp +++ b/src/libslic3r/Preset.cpp @@ -1137,7 +1137,7 @@ void PresetCollection::load_presets( if (key_values.find("instantiation") != key_values.end()) preset.is_visible = key_values["instantiation"] != "false"; - //BBS: use inherit config as the base + //Orca: find and use the inherit config as the base Preset* inherit_preset = nullptr; ConfigOption* inherits_config = config.option(BBL_JSON_KEY_INHERITS); @@ -1146,6 +1146,12 @@ void PresetCollection::load_presets( ConfigOptionString * option_str = dynamic_cast (inherits_config); std::string inherits_value = option_str->value; inherit_preset = this->find_preset(inherits_value, false, true); + // Orca: try to find if the parent preset has been renamed + if (inherit_preset == nullptr) { + auto it = this->find_preset_renamed(inherits_value); + if (it != m_presets.end()) + inherit_preset = &(*it); + } } else { ; } diff --git a/src/libslic3r/Preset.hpp b/src/libslic3r/Preset.hpp index 145ae5b6f7..cf88071748 100644 --- a/src/libslic3r/Preset.hpp +++ b/src/libslic3r/Preset.hpp @@ -63,7 +63,8 @@ #define BBL_JSON_KEY_DEFAULT_MATERIALS "default_materials" #define BBL_JSON_KEY_MODEL_ID "model_id" -//BBL: json path +// Orca extension +#define ORCA_JSON_KEY_RENAMED_FROM "renamed_from" namespace Slic3r { diff --git a/src/libslic3r/PresetBundle.cpp b/src/libslic3r/PresetBundle.cpp index 0f6a4cc569..bb5a39271d 100644 --- a/src/libslic3r/PresetBundle.cpp +++ b/src/libslic3r/PresetBundle.cpp @@ -3533,6 +3533,7 @@ std::pair PresetBundle::load_vendor_configs_ //parse the json elements DynamicPrintConfig config_src; + std::string _renamed_from_str; config_src.load_from_json(subfile, substitution_context, false, key_values, reason); if (!reason.empty()) { ++m_errors; @@ -3586,9 +3587,12 @@ std::pair PresetBundle::load_vendor_configs_ } if (config.has("alias")) alias_name = (dynamic_cast(config.option("alias")))->value; - if (config.has("renamed_from")) { - const ConfigOptionVectorBase *vec = static_cast(config.option("renamed_from")); - renamed_from = vec->vserialize(); + + if (key_values.find(ORCA_JSON_KEY_RENAMED_FROM) != key_values.end()) { + if (!unescape_strings_cstyle(key_values[ORCA_JSON_KEY_RENAMED_FROM], renamed_from)) { + BOOST_LOG_TRIVIAL(error) << "Error in a Config \"" << path << "\": The preset \"" << preset_name + << "\" contains invalid \"renamed_from\" key, which is being ignored."; + } } Preset::normalize(config); } From 206c6228a540eb934ffbe9804a81581f2edbb785 Mon Sep 17 00:00:00 2001 From: SoftFever Date: Sun, 19 Jan 2025 23:04:35 +0800 Subject: [PATCH 05/25] Fix renamed_from feature and others --- src/libslic3r/Preset.cpp | 11 ++++ src/libslic3r/Preset.hpp | 2 + src/libslic3r/PresetBundle.cpp | 30 +++++++-- src/libslic3r/PresetBundle.hpp | 11 +++- src/slic3r/GUI/WebGuideDialog.cpp | 106 ++++++++++-------------------- src/slic3r/GUI/WebGuideDialog.hpp | 2 + 6 files changed, 83 insertions(+), 79 deletions(-) diff --git a/src/libslic3r/Preset.cpp b/src/libslic3r/Preset.cpp index 102f02d0f9..a4394f624c 100644 --- a/src/libslic3r/Preset.cpp +++ b/src/libslic3r/Preset.cpp @@ -2523,6 +2523,17 @@ Preset* PresetCollection::find_preset(const std::string &name, bool first_visibl first_visible_if_not_found ? &this->first_visible() : nullptr; } +const Preset* PresetCollection::find_preset2(const std::string& name) const +{ + auto preset = const_cast(this)->find_preset(name, false, true); + if (preset == nullptr) { + auto _name = get_preset_name_renamed(name); + if(_name != nullptr) + preset = const_cast(this)->find_preset(*_name, false, true); + } + return preset; +} + // Return index of the first visible preset. Certainly at least the '- default -' preset shall be visible. size_t PresetCollection::first_visible_idx() const { diff --git a/src/libslic3r/Preset.hpp b/src/libslic3r/Preset.hpp index cf88071748..359abf6d62 100644 --- a/src/libslic3r/Preset.hpp +++ b/src/libslic3r/Preset.hpp @@ -596,6 +596,8 @@ public: Preset* find_preset(const std::string &name, bool first_visible_if_not_found = false, bool real = false); const Preset* find_preset(const std::string &name, bool first_visible_if_not_found = false) const { return const_cast(this)->find_preset(name, first_visible_if_not_found); } + // Orca: find preset, if not found, keep searching in the renamed history + const Preset* find_preset2(const std::string &name) const; size_t first_visible_idx() const; // Return index of the first compatible preset. Certainly at least the '- default -' preset shall be compatible. diff --git a/src/libslic3r/PresetBundle.cpp b/src/libslic3r/PresetBundle.cpp index bb5a39271d..f8103ff4fe 100644 --- a/src/libslic3r/PresetBundle.cpp +++ b/src/libslic3r/PresetBundle.cpp @@ -1,6 +1,7 @@ #include #include "PresetBundle.hpp" +#include "PrintConfig.hpp" #include "libslic3r.h" #include "Utils.hpp" #include "Model.hpp" @@ -1281,7 +1282,7 @@ std::pair PresetBundle::load_system_pre // Load the other vendor configs, merge them with this PresetBundle. // Report duplicate profiles. PresetBundle other; - append(substitutions, other.load_vendor_configs_from_json(dir.string(), vendor_name, PresetBundle::LoadSystem, compatibility_rule).first); + append(substitutions, other.load_vendor_configs_from_json(dir.string(), vendor_name, PresetBundle::LoadSystem, compatibility_rule, this).first); std::vector duplicates = this->merge_presets(std::move(other)); if (! duplicates.empty()) { errors_cummulative += "Found duplicated settings in vendor " + vendor_name + "'s json file lists: "; @@ -3300,7 +3301,7 @@ void PresetBundle::load_config_file_config(const std::string &name_or_path, bool //BBS: Load a config bundle file from json std::pair PresetBundle::load_vendor_configs_from_json( - const std::string &path, const std::string &vendor_name, LoadConfigBundleAttributes flags, ForwardCompatibilitySubstitutionRule compatibility_rule) + const std::string &path, const std::string &vendor_name, LoadConfigBundleAttributes flags, ForwardCompatibilitySubstitutionRule compatibility_rule, const PresetBundle* base_bundle) { // Enable substitutions for user config bundle, throw an exception when loading a system profile. ConfigSubstitutionContext substitution_context { compatibility_rule }; @@ -3509,7 +3510,7 @@ std::pair PresetBundle::load_vendor_configs_ PresetCollection *presets = nullptr; size_t presets_loaded = 0; - auto parse_subfile = [this, path, vendor_name, presets_loaded, current_vendor_profile]( + auto parse_subfile = [this, path, vendor_name, presets_loaded, current_vendor_profile, base_bundle]( ConfigSubstitutionContext& substitution_context, PresetsConfigSubstitutions& substitutions, LoadConfigBundleAttributes& flags, @@ -3554,19 +3555,32 @@ std::pair PresetBundle::load_vendor_configs_ if (it1 != key_values.end()) { inherits = it1->second; auto it2 = config_maps.find(inherits); - if (it2 != config_maps.end()) { + default_config = nullptr; + if (it2 != config_maps.end()) default_config = &(it2->second); + if(default_config == nullptr && base_bundle != nullptr) { + auto base_it2 = base_bundle->m_config_maps.find(inherits); + if (base_it2 != base_bundle->m_config_maps.end()) + default_config = &(base_it2->second); + } + if (default_config != nullptr) { if (filament_id.empty() && (presets_collection->type() == Preset::TYPE_FILAMENT)) { auto filament_id_map_iter = filament_id_maps.find(inherits); if (filament_id_map_iter != filament_id_maps.end()) { filament_id = filament_id_map_iter->second; } + if (filament_id.empty() && base_bundle != nullptr) { + auto filament_id_map_iter = base_bundle->m_filament_id_maps.find(inherits); + if (filament_id_map_iter != base_bundle->m_filament_id_maps.end()) { + filament_id = filament_id_map_iter->second; + } + } } } else { ++m_errors; - BOOST_LOG_TRIVIAL(error) << __FUNCTION__<< ": can not find inherits "< PresetBundle::load_vendor_configs_ throw ConfigurationError((boost::format("Failed loading configuration file %1%\nSuggest cleaning the directory %2% firstly") % subfile_path % path).str()); } } + if (vendor_name == ORCA_FILAMENT_LIBRARY) { + m_config_maps = configs; + m_filament_id_maps = filament_id_maps; + } //3.3) paste the printers presets = &this->printers; diff --git a/src/libslic3r/PresetBundle.hpp b/src/libslic3r/PresetBundle.hpp index 50592876e0..58b5941168 100644 --- a/src/libslic3r/PresetBundle.hpp +++ b/src/libslic3r/PresetBundle.hpp @@ -160,7 +160,12 @@ public: // and the system profiles will point to the VendorProfile instances owned by PresetBundle::vendors. VendorMap vendors; - struct ObsoletePresets { + // Orca: for OrcaFilamentLibrary + std::map m_config_maps; + std::map m_filament_id_maps; + + struct ObsoletePresets + { std::vector prints; std::vector sla_prints; std::vector filaments; @@ -212,9 +217,9 @@ public: // Don't do any config substitutions when loading a system profile, perform and report substitutions otherwise. /*std::pair load_configbundle( const std::string &path, LoadConfigBundleAttributes flags, ForwardCompatibilitySubstitutionRule compatibility_rule);*/ - //BBS: add json related logic + //Orca: load config bundle from json, pass the base bundle to support cross vendor inheritance std::pair load_vendor_configs_from_json( - const std::string &path, const std::string &vendor_name, LoadConfigBundleAttributes flags, ForwardCompatibilitySubstitutionRule compatibility_rule); + const std::string &path, const std::string &vendor_name, LoadConfigBundleAttributes flags, ForwardCompatibilitySubstitutionRule compatibility_rule, const PresetBundle* base_bundle = nullptr); // Export a config bundle file containing all the presets and the names of the active presets. //void export_configbundle(const std::string &path, bool export_system_settings = false, bool export_physical_printers = false); diff --git a/src/slic3r/GUI/WebGuideDialog.cpp b/src/slic3r/GUI/WebGuideDialog.cpp index 48315505bd..db0451c475 100644 --- a/src/slic3r/GUI/WebGuideDialog.cpp +++ b/src/slic3r/GUI/WebGuideDialog.cpp @@ -1,9 +1,13 @@ #include "WebGuideDialog.hpp" #include "ConfigWizard.hpp" +#include +#include +#include #include #include "I18N.hpp" #include "libslic3r/AppConfig.hpp" +#include "libslic3r/PresetBundle.hpp" #include "slic3r/GUI/wxExtensions.hpp" #include "slic3r/GUI/GUI_App.hpp" #include "libslic3r_version.h" @@ -1066,31 +1070,7 @@ int GuideFrame::GetFilamentInfo( std::string VendorDirectory, json & pFilaList, int GuideFrame::LoadProfile() { try { - //wxString ExePath = boost::dll::program_location().parent_path().string(); - //wxString TargetFolder = ExePath + "\\resources\\profiles\\"; - //wxString TargetFolderSearch = ExePath + "\\resources\\profiles\\*.json"; - - //intptr_t handle; - //_finddata_t findData; - - //handle = _findfirst(TargetFolderSearch.mb_str(), &findData); // ??????????? - //if (handle == -1) { return -1; } - - //do { - // if (findData.attrib & _A_SUBDIR && strcmp(findData.name, ".") == 0 && strcmp(findData.name, "..") == 0) // ??????????"."?".." - // { - // // cout << findData.name << "\t\n"; - // } else { - // wxString strVendor = wxString(findData.name).BeforeLast('.'); - // LoadProfileFamily(strVendor, TargetFolder + findData.name); - // } - - //} while (_findnext(handle, &findData) == 0); // ??????????? - - // BBS: change directories by design - //BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(", will load config from %1%.") % bbl_bundle_path; m_ProfileJson = json::parse("{}"); - //m_ProfileJson["configpath"] = Slic3r::data_dir(); m_ProfileJson["model"] = json::array(); m_ProfileJson["machine"] = json::object(); m_ProfileJson["filament"] = json::object(); @@ -1101,74 +1081,58 @@ int GuideFrame::LoadProfile() // Orca: add custom as default // Orca: add json logic for vendor bundle - auto orca_custom_bundle_path = vendor_dir; - orca_bundle_rsrc = false; - if (!boost::filesystem::exists((vendor_dir / PresetBundle::ORCA_DEFAULT_BUNDLE).replace_extension(".json"))) { - orca_custom_bundle_path = rsrc_vendor_dir; - orca_bundle_rsrc = true; + orca_bundle_rsrc = true; + + // search if there exists a .json file in vendor_dir folder, if exists, set orca_bundle_rsrc to false + for (const auto& entry : boost::filesystem::directory_iterator(vendor_dir)) { + if (!boost::filesystem::is_directory(entry) && boost::iequals(entry.path().extension().string(), ".json") && !boost::iequals(entry.path().stem().string(), PresetBundle::ORCA_FILAMENT_LIBRARY)) { + orca_bundle_rsrc = false; + break; + } } - // intptr_t handle; - //_finddata_t findData; - - //handle = _findfirst((bbl_bundle_path / "*.json").make_preferred().string().c_str(), &findData); // ??????????? - // if (handle == -1) { return -1; } - - // do { - // if (findData.attrib & _A_SUBDIR && strcmp(findData.name, ".") == 0 && strcmp(findData.name, "..") == 0) // ??????????"."?".." - // { - // // cout << findData.name << "\t\n"; - // } else { - // wxString strVendor = wxString(findData.name).BeforeLast('.'); - // LoadProfileFamily(w2s(strVendor), vendor_dir.make_preferred().string() + "\\"+ findData.name); - // } - - //} while (_findnext(handle, &findData) == 0); // ??????????? - + // load the default filament library first + std::set loaded_vendors; + auto filament_library_name = boost::filesystem::path(PresetBundle::ORCA_FILAMENT_LIBRARY).replace_extension(".json"); + if (boost::filesystem::exists(vendor_dir / filament_library_name)) { + LoadProfileFamily(PresetBundle::ORCA_FILAMENT_LIBRARY, (vendor_dir / filament_library_name).string()); + } else { + LoadProfileFamily(PresetBundle::ORCA_FILAMENT_LIBRARY, (rsrc_vendor_dir / filament_library_name).string()); + } + loaded_vendors.insert(PresetBundle::ORCA_FILAMENT_LIBRARY); //load custom bundle from user data path - string targetPath = orca_custom_bundle_path.make_preferred().string(); - boost::filesystem::path myPath(targetPath); boost::filesystem::directory_iterator endIter; - for (boost::filesystem::directory_iterator iter(myPath); iter != endIter; iter++) { - if (boost::filesystem::is_directory(*iter)) { - //cout << "is dir" << endl; - //cout << iter->path().string() << endl; - } else { - //cout << "is a file" << endl; - //cout << iter->path().string() << endl; - + for (boost::filesystem::directory_iterator iter(vendor_dir); iter != endIter; iter++) { + if (!boost::filesystem::is_directory(*iter)) { wxString strVendor = from_u8(iter->path().string()).BeforeLast('.'); strVendor = strVendor.AfterLast('\\'); strVendor = strVendor.AfterLast('/'); - wxString strExtension = from_u8(iter->path().string()).AfterLast('.').Lower(); - if ((w2s(strVendor) == PresetBundle::ORCA_DEFAULT_BUNDLE || w2s(strVendor) == PresetBundle::ORCA_FILAMENT_LIBRARY) && strExtension.CmpNoCase("json") == 0) - LoadProfileFamily(w2s(strVendor), iter->path().string()); + wxString strExtension = from_u8(iter->path().string()).AfterLast('.').Lower(); + if(strExtension.CmpNoCase("json") != 0 || loaded_vendors.find(w2s(strVendor)) != loaded_vendors.end()) + continue; + + LoadProfileFamily(w2s(strVendor), iter->path().string()); + loaded_vendors.insert(w2s(strVendor)); } } - //string others_targetPath = rsrc_vendor_dir.string(); boost::filesystem::directory_iterator others_endIter; for (boost::filesystem::directory_iterator iter(rsrc_vendor_dir); iter != others_endIter; iter++) { - if (boost::filesystem::is_directory(*iter)) { - //cout << "is dir" << endl; - //cout << iter->path().string() << endl; - } else { - //cout << "is a file" << endl; - //cout << iter->path().string() << endl; + if (!boost::filesystem::is_directory(*iter)) { wxString strVendor = from_u8(iter->path().string()).BeforeLast('.'); strVendor = strVendor.AfterLast('\\'); strVendor = strVendor.AfterLast('/'); wxString strExtension = from_u8(iter->path().string()).AfterLast('.').Lower(); + if (strExtension.CmpNoCase("json") != 0 || loaded_vendors.find(w2s(strVendor)) != loaded_vendors.end()) + continue; - if (w2s(strVendor) != PresetBundle::ORCA_DEFAULT_BUNDLE && w2s(strVendor) != PresetBundle::ORCA_FILAMENT_LIBRARY && strExtension.CmpNoCase("json")==0) - LoadProfileFamily(w2s(strVendor), iter->path().string()); + LoadProfileFamily(w2s(strVendor), iter->path().string()); } } - //LoadProfileFamily(PresetBundle::ORCA_DEFAULT_BUNDLE, bbl_bundle_path.string()); const auto enabled_filaments = wxGetApp().app_config->has_section(AppConfig::SECTION_FILAMENTS) ? wxGetApp().app_config->get_section(AppConfig::SECTION_FILAMENTS) : std::map(); m_appconfig_new.set_vendors(*wxGetApp().app_config); @@ -1531,7 +1495,7 @@ int GuideFrame::LoadProfileFamily(std::string strVendor, std::string strFilePath // BBS:Filament json pFilament = jLocal["filament_list"]; - json tFilaList = json::object(); + json tFilaList = m_OrcaFilaList; nsize = pFilament.size(); for (int n = 0; n < nsize; n++) { @@ -1604,6 +1568,8 @@ int GuideFrame::LoadProfileFamily(std::string strVendor, std::string strFilePath } } + if(strVendor == PresetBundle::ORCA_FILAMENT_LIBRARY) + m_OrcaFilaList = tFilaList; // process json pProcess = jLocal["process_list"]; diff --git a/src/slic3r/GUI/WebGuideDialog.hpp b/src/slic3r/GUI/WebGuideDialog.hpp index 98ce915f51..03f2e752b4 100644 --- a/src/slic3r/GUI/WebGuideDialog.hpp +++ b/src/slic3r/GUI/WebGuideDialog.hpp @@ -115,6 +115,8 @@ private: bool InstallNetplugin; bool network_plugin_ready {false}; + json m_OrcaFilaList; + #if wxUSE_WEBVIEW_IE wxMenuItem *m_script_object_el; wxMenuItem *m_script_date_el; From d1bc4e1e9f922c7820bbc229c5dc353f210e4bb9 Mon Sep 17 00:00:00 2001 From: SoftFever Date: Wed, 22 Jan 2025 21:29:24 +0800 Subject: [PATCH 06/25] Allow each vendor's filament profile inherit from OrcaFilamentLibrary and many many fixes... --- resources/profiles/Custom.json | 118 +-- ...r.json => Generic ABS @MyToolChanger.json} | 5 +- ...r.json => Generic ASA @MyToolChanger.json} | 5 +- ...er.json => Generic PA @MyToolChanger.json} | 5 +- ...json => Generic PA-CF @MyToolChanger.json} | 5 +- ...er.json => Generic PC @MyToolChanger.json} | 5 +- ....json => Generic PETG @MyToolChanger.json} | 5 +- ...r.json => Generic PLA @MyToolChanger.json} | 5 +- ...son => Generic PLA-CF @MyToolChanger.json} | 5 +- ...r.json => Generic PVA @MyToolChanger.json} | 5 +- ...r.json => Generic TPU @MyToolChanger.json} | 5 +- .../Custom/filament/My Generic ABS.json | 23 - .../Custom/filament/My Generic ASA.json | 23 - .../Custom/filament/My Generic PA-CF.json | 29 - .../Custom/filament/My Generic PA.json | 26 - .../Custom/filament/My Generic PC.json | 23 - .../Custom/filament/My Generic PETG.json | 53 -- .../Custom/filament/My Generic PLA-CF.json | 29 - .../Custom/filament/My Generic PLA.json | 26 - .../Custom/filament/My Generic PVA.json | 29 - .../Custom/filament/My Generic TPU.json | 20 - .../Custom/filament/fdm_filament_abs.json | 88 -- .../Custom/filament/fdm_filament_asa.json | 88 -- .../Custom/filament/fdm_filament_common.json | 144 --- .../Custom/filament/fdm_filament_pa.json | 85 -- .../Custom/filament/fdm_filament_pc.json | 88 -- .../Custom/filament/fdm_filament_pet.json | 82 -- .../Custom/filament/fdm_filament_pla.json | 94 -- .../Custom/filament/fdm_filament_pva.json | 100 -- .../Custom/filament/fdm_filament_tpu.json | 88 -- .../profiles/Custom/machine/MyKlipper.json | 2 +- .../profiles/Custom/machine/MyMarlin.json | 2 +- resources/profiles/Custom/machine/MyRRF.json | 4 +- .../Custom/machine/MyToolChanger.json | 2 +- resources/profiles/OrcaFilamentLibrary.json | 40 +- .../{ABS.json => Generic ABS @System.json} | 12 +- .../{ASA.json => Generic ASA @System.json} | 12 +- .../filament/Generic PA @System.json | 11 + .../filament/Generic PA-CF @System.json | 14 + .../{PC.json => Generic PC @System.json} | 13 +- .../filament/Generic PETG @System.json | 11 + .../filament/Generic PLA @System.json | 11 + ...LA-CF.json => Generic PLA-CF @System.json} | 13 +- .../filament/Generic PVA @System.json | 11 + .../{TPU.json => Generic TPU @System.json} | 10 +- .../OrcaFilamentLibrary/filament/PA-CF.json | 23 - .../OrcaFilamentLibrary/filament/PA.json | 21 - .../OrcaFilamentLibrary/filament/PETG.json | 48 - .../OrcaFilamentLibrary/filament/PLA.json | 20 - .../OrcaFilamentLibrary/filament/PVA.json | 24 - .../filament/fdm_filament_abs.json | 27 +- .../filament/fdm_filament_asa.json | 9 +- .../filament/fdm_filament_common.json | 2 +- .../filament/fdm_filament_pa.json | 18 +- .../filament/fdm_filament_pc.json | 9 +- .../filament/fdm_filament_pet.json | 54 +- .../filament/fdm_filament_pla.json | 33 +- .../filament/fdm_filament_pva.json | 39 +- .../filament/fdm_filament_tpu.json | 24 +- .../Prusa/process/0.20mm Speed @MK3S 0.4.json | 1 - resources/web/guide/22/22.js | 6 +- resources/web/guide/23/23.js | 39 +- src/libslic3r/Preset.cpp | 51 +- src/libslic3r/Preset.hpp | 10 + src/libslic3r/PresetBundle.cpp | 853 +----------------- src/slic3r/GUI/WebGuideDialog.cpp | 280 +----- src/slic3r/GUI/WebGuideDialog.hpp | 1 + 67 files changed, 350 insertions(+), 2716 deletions(-) rename resources/profiles/Custom/filament/{My Generic ABS @MyToolChanger.json => Generic ABS @MyToolChanger.json} (89%) rename resources/profiles/Custom/filament/{My Generic ASA @MyToolChanger.json => Generic ASA @MyToolChanger.json} (89%) rename resources/profiles/Custom/filament/{My Generic PA @MyToolChanger.json => Generic PA @MyToolChanger.json} (89%) rename resources/profiles/Custom/filament/{My Generic PA-CF @MyToolChanger.json => Generic PA-CF @MyToolChanger.json} (89%) rename resources/profiles/Custom/filament/{My Generic PC @MyToolChanger.json => Generic PC @MyToolChanger.json} (89%) rename resources/profiles/Custom/filament/{My Generic PETG @MyToolChanger.json => Generic PETG @MyToolChanger.json} (92%) rename resources/profiles/Custom/filament/{My Generic PLA @MyToolChanger.json => Generic PLA @MyToolChanger.json} (89%) rename resources/profiles/Custom/filament/{My Generic PLA-CF @MyToolChanger.json => Generic PLA-CF @MyToolChanger.json} (89%) rename resources/profiles/Custom/filament/{My Generic PVA @MyToolChanger.json => Generic PVA @MyToolChanger.json} (79%) rename resources/profiles/Custom/filament/{My Generic TPU @MyToolChanger.json => Generic TPU @MyToolChanger.json} (73%) delete mode 100644 resources/profiles/Custom/filament/My Generic ABS.json delete mode 100644 resources/profiles/Custom/filament/My Generic ASA.json delete mode 100644 resources/profiles/Custom/filament/My Generic PA-CF.json delete mode 100644 resources/profiles/Custom/filament/My Generic PA.json delete mode 100644 resources/profiles/Custom/filament/My Generic PC.json delete mode 100644 resources/profiles/Custom/filament/My Generic PETG.json delete mode 100644 resources/profiles/Custom/filament/My Generic PLA-CF.json delete mode 100644 resources/profiles/Custom/filament/My Generic PLA.json delete mode 100644 resources/profiles/Custom/filament/My Generic PVA.json delete mode 100644 resources/profiles/Custom/filament/My Generic TPU.json delete mode 100644 resources/profiles/Custom/filament/fdm_filament_abs.json delete mode 100644 resources/profiles/Custom/filament/fdm_filament_asa.json delete mode 100644 resources/profiles/Custom/filament/fdm_filament_common.json delete mode 100644 resources/profiles/Custom/filament/fdm_filament_pa.json delete mode 100644 resources/profiles/Custom/filament/fdm_filament_pc.json delete mode 100644 resources/profiles/Custom/filament/fdm_filament_pet.json delete mode 100644 resources/profiles/Custom/filament/fdm_filament_pla.json delete mode 100644 resources/profiles/Custom/filament/fdm_filament_pva.json delete mode 100644 resources/profiles/Custom/filament/fdm_filament_tpu.json rename resources/profiles/OrcaFilamentLibrary/filament/{ABS.json => Generic ABS @System.json} (50%) rename resources/profiles/OrcaFilamentLibrary/filament/{ASA.json => Generic ASA @System.json} (50%) create mode 100644 resources/profiles/OrcaFilamentLibrary/filament/Generic PA @System.json create mode 100644 resources/profiles/OrcaFilamentLibrary/filament/Generic PA-CF @System.json rename resources/profiles/OrcaFilamentLibrary/filament/{PC.json => Generic PC @System.json} (50%) create mode 100644 resources/profiles/OrcaFilamentLibrary/filament/Generic PETG @System.json create mode 100644 resources/profiles/OrcaFilamentLibrary/filament/Generic PLA @System.json rename resources/profiles/OrcaFilamentLibrary/filament/{PLA-CF.json => Generic PLA-CF @System.json} (61%) create mode 100644 resources/profiles/OrcaFilamentLibrary/filament/Generic PVA @System.json rename resources/profiles/OrcaFilamentLibrary/filament/{TPU.json => Generic TPU @System.json} (59%) delete mode 100644 resources/profiles/OrcaFilamentLibrary/filament/PA-CF.json delete mode 100644 resources/profiles/OrcaFilamentLibrary/filament/PA.json delete mode 100644 resources/profiles/OrcaFilamentLibrary/filament/PETG.json delete mode 100644 resources/profiles/OrcaFilamentLibrary/filament/PLA.json delete mode 100644 resources/profiles/OrcaFilamentLibrary/filament/PVA.json diff --git a/resources/profiles/Custom.json b/resources/profiles/Custom.json index 5141e5f323..eea4025908 100644 --- a/resources/profiles/Custom.json +++ b/resources/profiles/Custom.json @@ -1,6 +1,6 @@ { "name": "Custom Printer", - "version": "02.02.00.04", + "version": "02.02.00.05", "force_update": "0", "description": "My configurations", "machine_model_list": [ @@ -173,120 +173,44 @@ ], "filament_list": [ { - "name": "fdm_filament_common", - "sub_path": "filament/fdm_filament_common.json" + "name": "Generic PLA @MyToolChanger", + "sub_path": "filament/Generic PLA @MyToolChanger.json" }, { - "name": "fdm_filament_pla", - "sub_path": "filament/fdm_filament_pla.json" + "name": "Generic PLA-CF @MyToolChanger", + "sub_path": "filament/Generic PLA-CF @MyToolChanger.json" }, { - "name": "fdm_filament_tpu", - "sub_path": "filament/fdm_filament_tpu.json" + "name": "Generic PETG @MyToolChanger", + "sub_path": "filament/Generic PETG @MyToolChanger.json" }, { - "name": "fdm_filament_pet", - "sub_path": "filament/fdm_filament_pet.json" + "name": "Generic ABS @MyToolChanger", + "sub_path": "filament/Generic ABS @MyToolChanger.json" }, { - "name": "fdm_filament_abs", - "sub_path": "filament/fdm_filament_abs.json" + "name": "Generic TPU @MyToolChanger", + "sub_path": "filament/Generic TPU @MyToolChanger.json" }, { - "name": "fdm_filament_pc", - "sub_path": "filament/fdm_filament_pc.json" + "name": "Generic ASA @MyToolChanger", + "sub_path": "filament/Generic ASA @MyToolChanger.json" }, { - "name": "fdm_filament_asa", - "sub_path": "filament/fdm_filament_asa.json" + "name": "Generic PC @MyToolChanger", + "sub_path": "filament/Generic PC @MyToolChanger.json" }, { - "name": "fdm_filament_pva", - "sub_path": "filament/fdm_filament_pva.json" + "name": "Generic PVA @MyToolChanger", + "sub_path": "filament/Generic PVA @MyToolChanger.json" }, { - "name": "fdm_filament_pa", - "sub_path": "filament/fdm_filament_pa.json" + "name": "Generic PA @MyToolChanger", + "sub_path": "filament/Generic PA @MyToolChanger.json" }, { - "name": "My Generic PLA", - "sub_path": "filament/My Generic PLA.json" - }, - { - "name": "My Generic PLA-CF", - "sub_path": "filament/My Generic PLA-CF.json" - }, - { - "name": "My Generic PETG", - "sub_path": "filament/My Generic PETG.json" - }, - { - "name": "My Generic ABS", - "sub_path": "filament/My Generic ABS.json" - }, - { - "name": "My Generic TPU", - "sub_path": "filament/My Generic TPU.json" - }, - { - "name": "My Generic ASA", - "sub_path": "filament/My Generic ASA.json" - }, - { - "name": "My Generic PC", - "sub_path": "filament/My Generic PC.json" - }, - { - "name": "My Generic PVA", - "sub_path": "filament/My Generic PVA.json" - }, - { - "name": "My Generic PA", - "sub_path": "filament/My Generic PA.json" - }, - { - "name": "My Generic PA-CF", - "sub_path": "filament/My Generic PA-CF.json" - }, - { - "name": "My Generic PLA @MyToolChanger", - "sub_path": "filament/My Generic PLA @MyToolChanger.json" - }, - { - "name": "My Generic PLA-CF @MyToolChanger", - "sub_path": "filament/My Generic PLA-CF @MyToolChanger.json" - }, - { - "name": "My Generic PETG @MyToolChanger", - "sub_path": "filament/My Generic PETG @MyToolChanger.json" - }, - { - "name": "My Generic ABS @MyToolChanger", - "sub_path": "filament/My Generic ABS @MyToolChanger.json" - }, - { - "name": "My Generic TPU @MyToolChanger", - "sub_path": "filament/My Generic TPU @MyToolChanger.json" - }, - { - "name": "My Generic ASA @MyToolChanger", - "sub_path": "filament/My Generic ASA @MyToolChanger.json" - }, - { - "name": "My Generic PC @MyToolChanger", - "sub_path": "filament/My Generic PC @MyToolChanger.json" - }, - { - "name": "My Generic PVA @MyToolChanger", - "sub_path": "filament/My Generic PVA @MyToolChanger.json" - }, - { - "name": "My Generic PA @MyToolChanger", - "sub_path": "filament/My Generic PA @MyToolChanger.json" - }, - { - "name": "My Generic PA-CF @MyToolChanger", - "sub_path": "filament/My Generic PA-CF @MyToolChanger.json" + "name": "Generic PA-CF @MyToolChanger", + "sub_path": "filament/Generic PA-CF @MyToolChanger.json" } ], "machine_list": [ diff --git a/resources/profiles/Custom/filament/My Generic ABS @MyToolChanger.json b/resources/profiles/Custom/filament/Generic ABS @MyToolChanger.json similarity index 89% rename from resources/profiles/Custom/filament/My Generic ABS @MyToolChanger.json rename to resources/profiles/Custom/filament/Generic ABS @MyToolChanger.json index fb8f51bf95..d1eb791459 100644 --- a/resources/profiles/Custom/filament/My Generic ABS @MyToolChanger.json +++ b/resources/profiles/Custom/filament/Generic ABS @MyToolChanger.json @@ -2,10 +2,11 @@ "type": "filament", "filament_id": "GFB99", "setting_id": "GFB99_MTC_0", - "name": "My Generic ABS @MyToolChanger", + "name": "Generic ABS @MyToolChanger", + "renamed_from": "My Generic ABS @MyToolChanger", "from": "system", "instantiation": "true", - "inherits": "fdm_filament_abs", + "inherits": "Generic ABS @System", "filament_flow_ratio": [ "0.926" ], diff --git a/resources/profiles/Custom/filament/My Generic ASA @MyToolChanger.json b/resources/profiles/Custom/filament/Generic ASA @MyToolChanger.json similarity index 89% rename from resources/profiles/Custom/filament/My Generic ASA @MyToolChanger.json rename to resources/profiles/Custom/filament/Generic ASA @MyToolChanger.json index 05bab114b4..fa45cde5db 100644 --- a/resources/profiles/Custom/filament/My Generic ASA @MyToolChanger.json +++ b/resources/profiles/Custom/filament/Generic ASA @MyToolChanger.json @@ -2,10 +2,11 @@ "type": "filament", "filament_id": "GFB98", "setting_id": "GFB98_MTC_0", - "name": "My Generic ASA @MyToolChanger", + "name": "Generic ASA @MyToolChanger", + "renamed_from": "My Generic ASA @MyToolChanger", "from": "system", "instantiation": "true", - "inherits": "fdm_filament_asa", + "inherits": "Generic ASA @System", "filament_flow_ratio": [ "0.93" ], diff --git a/resources/profiles/Custom/filament/My Generic PA @MyToolChanger.json b/resources/profiles/Custom/filament/Generic PA @MyToolChanger.json similarity index 89% rename from resources/profiles/Custom/filament/My Generic PA @MyToolChanger.json rename to resources/profiles/Custom/filament/Generic PA @MyToolChanger.json index 17a9b793cc..66ac2ff73c 100644 --- a/resources/profiles/Custom/filament/My Generic PA @MyToolChanger.json +++ b/resources/profiles/Custom/filament/Generic PA @MyToolChanger.json @@ -2,10 +2,11 @@ "type": "filament", "filament_id": "GFN99", "setting_id": "GFN99_MTC_0", - "name": "My Generic PA @MyToolChanger", + "name": "Generic PA @MyToolChanger", + "renamed_from": "My Generic PA @MyToolChanger", "from": "system", "instantiation": "true", - "inherits": "fdm_filament_pa", + "inherits": "Generic PA @System", "nozzle_temperature_initial_layer": [ "280" ], diff --git a/resources/profiles/Custom/filament/My Generic PA-CF @MyToolChanger.json b/resources/profiles/Custom/filament/Generic PA-CF @MyToolChanger.json similarity index 89% rename from resources/profiles/Custom/filament/My Generic PA-CF @MyToolChanger.json rename to resources/profiles/Custom/filament/Generic PA-CF @MyToolChanger.json index 0b0f065eed..78f2ae0202 100644 --- a/resources/profiles/Custom/filament/My Generic PA-CF @MyToolChanger.json +++ b/resources/profiles/Custom/filament/Generic PA-CF @MyToolChanger.json @@ -2,10 +2,11 @@ "type": "filament", "filament_id": "GFN98", "setting_id": "GFN98_MTC_0", - "name": "My Generic PA-CF @MyToolChanger", + "name": "Generic PA-CF @MyToolChanger", + "renamed_from": "My Generic PA-CF @MyToolChanger", "from": "system", "instantiation": "true", - "inherits": "fdm_filament_pa", + "inherits": "Generic PA-CF @System", "filament_type": [ "PA-CF" ], diff --git a/resources/profiles/Custom/filament/My Generic PC @MyToolChanger.json b/resources/profiles/Custom/filament/Generic PC @MyToolChanger.json similarity index 89% rename from resources/profiles/Custom/filament/My Generic PC @MyToolChanger.json rename to resources/profiles/Custom/filament/Generic PC @MyToolChanger.json index 7ae24c6774..b3fa761a1e 100644 --- a/resources/profiles/Custom/filament/My Generic PC @MyToolChanger.json +++ b/resources/profiles/Custom/filament/Generic PC @MyToolChanger.json @@ -2,10 +2,11 @@ "type": "filament", "filament_id": "GFC99", "setting_id": "GFC99_MTC_0", - "name": "My Generic PC @MyToolChanger", + "name": "Generic PC @MyToolChanger", + "renamed_from": "My Generic PC @MyToolChanger", "from": "system", "instantiation": "true", - "inherits": "fdm_filament_pc", + "inherits": "Generic PC @System", "filament_max_volumetric_speed": [ "12" ], diff --git a/resources/profiles/Custom/filament/My Generic PETG @MyToolChanger.json b/resources/profiles/Custom/filament/Generic PETG @MyToolChanger.json similarity index 92% rename from resources/profiles/Custom/filament/My Generic PETG @MyToolChanger.json rename to resources/profiles/Custom/filament/Generic PETG @MyToolChanger.json index f9cb2e0b16..1b4e8de6b0 100644 --- a/resources/profiles/Custom/filament/My Generic PETG @MyToolChanger.json +++ b/resources/profiles/Custom/filament/Generic PETG @MyToolChanger.json @@ -2,10 +2,11 @@ "type": "filament", "filament_id": "GFG99", "setting_id": "GFG99_MTC_0", - "name": "My Generic PETG @MyToolChanger", + "name": "Generic PETG @MyToolChanger", + "renamed_from": "My Generic PETG @MyToolChanger", "from": "system", "instantiation": "true", - "inherits": "fdm_filament_pet", + "inherits": "Generic PETG @System", "reduce_fan_stop_start_freq": [ "1" ], diff --git a/resources/profiles/Custom/filament/My Generic PLA @MyToolChanger.json b/resources/profiles/Custom/filament/Generic PLA @MyToolChanger.json similarity index 89% rename from resources/profiles/Custom/filament/My Generic PLA @MyToolChanger.json rename to resources/profiles/Custom/filament/Generic PLA @MyToolChanger.json index facaf08984..91e1ac329a 100644 --- a/resources/profiles/Custom/filament/My Generic PLA @MyToolChanger.json +++ b/resources/profiles/Custom/filament/Generic PLA @MyToolChanger.json @@ -2,10 +2,11 @@ "type": "filament", "filament_id": "GFL99", "setting_id": "GFL99_MTC_0", - "name": "My Generic PLA @MyToolChanger", + "name": "Generic PLA @MyToolChanger", + "renamed_from": "My Generic PLA @MyToolChanger", "from": "system", "instantiation": "true", - "inherits": "fdm_filament_pla", + "inherits": "Generic PLA @System", "filament_flow_ratio": [ "0.98" ], diff --git a/resources/profiles/Custom/filament/My Generic PLA-CF @MyToolChanger.json b/resources/profiles/Custom/filament/Generic PLA-CF @MyToolChanger.json similarity index 89% rename from resources/profiles/Custom/filament/My Generic PLA-CF @MyToolChanger.json rename to resources/profiles/Custom/filament/Generic PLA-CF @MyToolChanger.json index 8adf8d53d2..5600c63fa1 100644 --- a/resources/profiles/Custom/filament/My Generic PLA-CF @MyToolChanger.json +++ b/resources/profiles/Custom/filament/Generic PLA-CF @MyToolChanger.json @@ -2,10 +2,11 @@ "type": "filament", "filament_id": "GFL98", "setting_id": "GFL98_MTC_0", - "name": "My Generic PLA-CF @MyToolChanger", + "name": "Generic PLA-CF @MyToolChanger", + "renamed_from": "My Generic PLA-CF @MyToolChanger", "from": "system", "instantiation": "true", - "inherits": "fdm_filament_pla", + "inherits": "Generic PLA-CF @System", "filament_flow_ratio": [ "0.95" ], diff --git a/resources/profiles/Custom/filament/My Generic PVA @MyToolChanger.json b/resources/profiles/Custom/filament/Generic PVA @MyToolChanger.json similarity index 79% rename from resources/profiles/Custom/filament/My Generic PVA @MyToolChanger.json rename to resources/profiles/Custom/filament/Generic PVA @MyToolChanger.json index a2dd357753..fd1f0bec80 100644 --- a/resources/profiles/Custom/filament/My Generic PVA @MyToolChanger.json +++ b/resources/profiles/Custom/filament/Generic PVA @MyToolChanger.json @@ -2,10 +2,11 @@ "type": "filament", "filament_id": "GFS99", "setting_id": "GFS99_MTC_0", - "name": "My Generic PVA @MyToolChanger", + "name": "Generic PVA @MyToolChanger", + "renamed_from": "My Generic PVA @MyToolChanger", "from": "system", "instantiation": "true", - "inherits": "fdm_filament_pva", + "inherits": "Generic PVA @System", "filament_flow_ratio": [ "0.95" ], diff --git a/resources/profiles/Custom/filament/My Generic TPU @MyToolChanger.json b/resources/profiles/Custom/filament/Generic TPU @MyToolChanger.json similarity index 73% rename from resources/profiles/Custom/filament/My Generic TPU @MyToolChanger.json rename to resources/profiles/Custom/filament/Generic TPU @MyToolChanger.json index 54c4a15a19..1f207dc2f1 100644 --- a/resources/profiles/Custom/filament/My Generic TPU @MyToolChanger.json +++ b/resources/profiles/Custom/filament/Generic TPU @MyToolChanger.json @@ -2,10 +2,11 @@ "type": "filament", "filament_id": "GFU99", "setting_id": "GFU99_MTC_0", - "name": "My Generic TPU @MyToolChanger", + "name": "Generic TPU @MyToolChanger", + "renamed_from": "My Generic TPU @MyToolChanger", "from": "system", "instantiation": "true", - "inherits": "fdm_filament_tpu", + "inherits": "Generic TPU @System", "filament_max_volumetric_speed": [ "3.2" ], diff --git a/resources/profiles/Custom/filament/My Generic ABS.json b/resources/profiles/Custom/filament/My Generic ABS.json deleted file mode 100644 index 14fe0490e5..0000000000 --- a/resources/profiles/Custom/filament/My Generic ABS.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "type": "filament", - "filament_id": "GFB99", - "setting_id": "GFSA04", - "name": "My Generic ABS", - "from": "system", - "instantiation": "true", - "inherits": "fdm_filament_abs", - "filament_flow_ratio": [ - "0.926" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "compatible_printers": [ - "MyKlipper 0.4 nozzle", - "MyKlipper 0.2 nozzle", - "MyKlipper 0.6 nozzle", - "MyKlipper 0.8 nozzle", - "MyMarlin 0.4 nozzle", - "MyRRF 0.4 nozzle" - ] -} \ No newline at end of file diff --git a/resources/profiles/Custom/filament/My Generic ASA.json b/resources/profiles/Custom/filament/My Generic ASA.json deleted file mode 100644 index ca6539c115..0000000000 --- a/resources/profiles/Custom/filament/My Generic ASA.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "type": "filament", - "filament_id": "GFB98", - "setting_id": "GFSA04", - "name": "My Generic ASA", - "from": "system", - "instantiation": "true", - "inherits": "fdm_filament_asa", - "filament_flow_ratio": [ - "0.93" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "compatible_printers": [ - "MyKlipper 0.4 nozzle", - "MyKlipper 0.2 nozzle", - "MyKlipper 0.6 nozzle", - "MyKlipper 0.8 nozzle", - "MyMarlin 0.4 nozzle", - "MyRRF 0.4 nozzle" - ] -} \ No newline at end of file diff --git a/resources/profiles/Custom/filament/My Generic PA-CF.json b/resources/profiles/Custom/filament/My Generic PA-CF.json deleted file mode 100644 index 60efac620c..0000000000 --- a/resources/profiles/Custom/filament/My Generic PA-CF.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "type": "filament", - "filament_id": "GFN98", - "setting_id": "GFSA04", - "name": "My Generic PA-CF", - "from": "system", - "instantiation": "true", - "inherits": "fdm_filament_pa", - "filament_type": [ - "PA-CF" - ], - "nozzle_temperature_initial_layer": [ - "280" - ], - "nozzle_temperature": [ - "280" - ], - "filament_max_volumetric_speed": [ - "8" - ], - "compatible_printers": [ - "MyKlipper 0.4 nozzle", - "MyKlipper 0.2 nozzle", - "MyKlipper 0.6 nozzle", - "MyKlipper 0.8 nozzle", - "MyMarlin 0.4 nozzle", - "MyRRF 0.4 nozzle" - ] -} \ No newline at end of file diff --git a/resources/profiles/Custom/filament/My Generic PA.json b/resources/profiles/Custom/filament/My Generic PA.json deleted file mode 100644 index 2e284b6d37..0000000000 --- a/resources/profiles/Custom/filament/My Generic PA.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "type": "filament", - "filament_id": "GFN99", - "setting_id": "GFSA04", - "name": "My Generic PA", - "from": "system", - "instantiation": "true", - "inherits": "fdm_filament_pa", - "nozzle_temperature_initial_layer": [ - "280" - ], - "nozzle_temperature": [ - "280" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "compatible_printers": [ - "MyKlipper 0.4 nozzle", - "MyKlipper 0.2 nozzle", - "MyKlipper 0.6 nozzle", - "MyKlipper 0.8 nozzle", - "MyMarlin 0.4 nozzle", - "MyRRF 0.4 nozzle" - ] -} \ No newline at end of file diff --git a/resources/profiles/Custom/filament/My Generic PC.json b/resources/profiles/Custom/filament/My Generic PC.json deleted file mode 100644 index 4738b42e18..0000000000 --- a/resources/profiles/Custom/filament/My Generic PC.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "type": "filament", - "filament_id": "GFC99", - "setting_id": "GFSA04", - "name": "My Generic PC", - "from": "system", - "instantiation": "true", - "inherits": "fdm_filament_pc", - "filament_max_volumetric_speed": [ - "12" - ], - "filament_flow_ratio": [ - "0.94" - ], - "compatible_printers": [ - "MyKlipper 0.4 nozzle", - "MyKlipper 0.2 nozzle", - "MyKlipper 0.6 nozzle", - "MyKlipper 0.8 nozzle", - "MyMarlin 0.4 nozzle", - "MyRRF 0.4 nozzle" - ] -} \ No newline at end of file diff --git a/resources/profiles/Custom/filament/My Generic PETG.json b/resources/profiles/Custom/filament/My Generic PETG.json deleted file mode 100644 index f640aea59e..0000000000 --- a/resources/profiles/Custom/filament/My Generic PETG.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "type": "filament", - "filament_id": "GFG99", - "setting_id": "GFSA04", - "name": "My Generic PETG", - "from": "system", - "instantiation": "true", - "inherits": "fdm_filament_pet", - "reduce_fan_stop_start_freq": [ - "1" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "fan_cooling_layer_time": [ - "30" - ], - "overhang_fan_speed": [ - "90" - ], - "overhang_fan_threshold": [ - "25%" - ], - "fan_max_speed": [ - "90" - ], - "fan_min_speed": [ - "40" - ], - "slow_down_min_speed": [ - "10" - ], - "slow_down_layer_time": [ - "8" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_max_volumetric_speed": [ - "10" - ], - "filament_start_gcode": [ - "; filament start gcode\n" - ], - "compatible_printers": [ - "MyKlipper 0.4 nozzle", - "MyKlipper 0.2 nozzle", - "MyKlipper 0.6 nozzle", - "MyKlipper 0.8 nozzle", - "MyMarlin 0.4 nozzle", - "MyRRF 0.4 nozzle" - ] -} \ No newline at end of file diff --git a/resources/profiles/Custom/filament/My Generic PLA-CF.json b/resources/profiles/Custom/filament/My Generic PLA-CF.json deleted file mode 100644 index b0ed43b93c..0000000000 --- a/resources/profiles/Custom/filament/My Generic PLA-CF.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "type": "filament", - "filament_id": "GFL98", - "setting_id": "GFSA04", - "name": "My Generic PLA-CF", - "from": "system", - "instantiation": "true", - "inherits": "fdm_filament_pla", - "filament_flow_ratio": [ - "0.95" - ], - "filament_type": [ - "PLA-CF" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "slow_down_layer_time": [ - "7" - ], - "compatible_printers": [ - "MyKlipper 0.4 nozzle", - "MyKlipper 0.2 nozzle", - "MyKlipper 0.6 nozzle", - "MyKlipper 0.8 nozzle", - "MyMarlin 0.4 nozzle", - "MyRRF 0.4 nozzle" - ] -} \ No newline at end of file diff --git a/resources/profiles/Custom/filament/My Generic PLA.json b/resources/profiles/Custom/filament/My Generic PLA.json deleted file mode 100644 index 54dc3dc779..0000000000 --- a/resources/profiles/Custom/filament/My Generic PLA.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "type": "filament", - "filament_id": "GFL99", - "setting_id": "GFSA04", - "name": "My Generic PLA", - "from": "system", - "instantiation": "true", - "inherits": "fdm_filament_pla", - "filament_flow_ratio": [ - "0.98" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "slow_down_layer_time": [ - "8" - ], - "compatible_printers": [ - "MyKlipper 0.4 nozzle", - "MyKlipper 0.2 nozzle", - "MyKlipper 0.6 nozzle", - "MyKlipper 0.8 nozzle", - "MyMarlin 0.4 nozzle", - "MyRRF 0.4 nozzle" - ] -} \ No newline at end of file diff --git a/resources/profiles/Custom/filament/My Generic PVA.json b/resources/profiles/Custom/filament/My Generic PVA.json deleted file mode 100644 index ba874665cb..0000000000 --- a/resources/profiles/Custom/filament/My Generic PVA.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "type": "filament", - "filament_id": "GFS99", - "setting_id": "GFSA04", - "name": "My Generic PVA", - "from": "system", - "instantiation": "true", - "inherits": "fdm_filament_pva", - "filament_flow_ratio": [ - "0.95" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "slow_down_layer_time": [ - "7" - ], - "slow_down_min_speed": [ - "10" - ], - "compatible_printers": [ - "MyKlipper 0.4 nozzle", - "MyKlipper 0.2 nozzle", - "MyKlipper 0.6 nozzle", - "MyKlipper 0.8 nozzle", - "MyMarlin 0.4 nozzle", - "MyRRF 0.4 nozzle" - ] -} \ No newline at end of file diff --git a/resources/profiles/Custom/filament/My Generic TPU.json b/resources/profiles/Custom/filament/My Generic TPU.json deleted file mode 100644 index 359d3da7a7..0000000000 --- a/resources/profiles/Custom/filament/My Generic TPU.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "filament", - "filament_id": "GFU99", - "setting_id": "GFSA04", - "name": "My Generic TPU", - "from": "system", - "instantiation": "true", - "inherits": "fdm_filament_tpu", - "filament_max_volumetric_speed": [ - "3.2" - ], - "compatible_printers": [ - "MyKlipper 0.4 nozzle", - "MyKlipper 0.2 nozzle", - "MyKlipper 0.6 nozzle", - "MyKlipper 0.8 nozzle", - "MyMarlin 0.4 nozzle", - "MyRRF 0.4 nozzle" - ] -} \ No newline at end of file diff --git a/resources/profiles/Custom/filament/fdm_filament_abs.json b/resources/profiles/Custom/filament/fdm_filament_abs.json deleted file mode 100644 index b9d4eeda31..0000000000 --- a/resources/profiles/Custom/filament/fdm_filament_abs.json +++ /dev/null @@ -1,88 +0,0 @@ -{ - "type": "filament", - "name": "fdm_filament_abs", - "from": "system", - "instantiation": "false", - "inherits": "fdm_filament_common", - "cool_plate_temp" : [ - "105" - ], - "eng_plate_temp" : [ - "105" - ], - "hot_plate_temp" : [ - "105" - ], - "textured_plate_temp" : [ - "105" - ], - "cool_plate_temp_initial_layer" : [ - "105" - ], - "eng_plate_temp_initial_layer" : [ - "105" - ], - "hot_plate_temp_initial_layer" : [ - "105" - ], - "textured_plate_temp_initial_layer" : [ - "105" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "close_fan_the_first_x_layers": [ - "3" - ], - "fan_cooling_layer_time": [ - "30" - ], - "filament_max_volumetric_speed": [ - "28.6" - ], - "filament_type": [ - "ABS" - ], - "filament_density": [ - "1.04" - ], - "filament_cost": [ - "20" - ], - "nozzle_temperature_initial_layer": [ - "260" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "fan_max_speed": [ - "80" - ], - "fan_min_speed": [ - "10" - ], - "overhang_fan_threshold": [ - "25%" - ], - "overhang_fan_speed": [ - "80" - ], - "nozzle_temperature": [ - "260" - ], - "temperature_vitrification": [ - "110" - ], - "nozzle_temperature_range_low": [ - "240" - ], - "nozzle_temperature_range_high": [ - "270" - ], - "slow_down_min_speed": [ - "10" - ], - "slow_down_layer_time": [ - "3" - ] -} diff --git a/resources/profiles/Custom/filament/fdm_filament_asa.json b/resources/profiles/Custom/filament/fdm_filament_asa.json deleted file mode 100644 index 262c561bda..0000000000 --- a/resources/profiles/Custom/filament/fdm_filament_asa.json +++ /dev/null @@ -1,88 +0,0 @@ -{ - "type": "filament", - "name": "fdm_filament_asa", - "from": "system", - "instantiation": "false", - "inherits": "fdm_filament_common", - "cool_plate_temp" : [ - "105" - ], - "eng_plate_temp" : [ - "105" - ], - "hot_plate_temp" : [ - "105" - ], - "textured_plate_temp" : [ - "105" - ], - "cool_plate_temp_initial_layer" : [ - "105" - ], - "eng_plate_temp_initial_layer" : [ - "105" - ], - "hot_plate_temp_initial_layer" : [ - "105" - ], - "textured_plate_temp_initial_layer" : [ - "105" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "close_fan_the_first_x_layers": [ - "3" - ], - "fan_cooling_layer_time": [ - "35" - ], - "filament_max_volumetric_speed": [ - "28.6" - ], - "filament_type": [ - "ASA" - ], - "filament_density": [ - "1.04" - ], - "filament_cost": [ - "20" - ], - "nozzle_temperature_initial_layer": [ - "260" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "fan_max_speed": [ - "80" - ], - "fan_min_speed": [ - "10" - ], - "overhang_fan_threshold": [ - "25%" - ], - "overhang_fan_speed": [ - "80" - ], - "nozzle_temperature": [ - "260" - ], - "temperature_vitrification": [ - "110" - ], - "nozzle_temperature_range_low": [ - "240" - ], - "nozzle_temperature_range_high": [ - "270" - ], - "slow_down_min_speed": [ - "10" - ], - "slow_down_layer_time": [ - "3" - ] -} diff --git a/resources/profiles/Custom/filament/fdm_filament_common.json b/resources/profiles/Custom/filament/fdm_filament_common.json deleted file mode 100644 index 9f77975119..0000000000 --- a/resources/profiles/Custom/filament/fdm_filament_common.json +++ /dev/null @@ -1,144 +0,0 @@ -{ - "type": "filament", - "name": "fdm_filament_common", - "from": "system", - "instantiation": "false", - "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" - ], - "overhang_fan_threshold": [ - "95%" - ], - "overhang_fan_speed": [ - "100" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "close_fan_the_first_x_layers": [ - "3" - ], - "filament_end_gcode": [ - "; filament end gcode \n" - ], - "filament_flow_ratio": [ - "1" - ], - "reduce_fan_stop_start_freq": [ - "0" - ], - "fan_cooling_layer_time": [ - "60" - ], - "filament_cost": [ - "0" - ], - "filament_density": [ - "0" - ], - "filament_deretraction_speed": [ - "nil" - ], - "filament_diameter": [ - "1.75" - ], - "filament_max_volumetric_speed": [ - "0" - ], - "filament_minimal_purge_on_wipe_tower": [ - "15" - ], - "filament_retraction_minimum_travel": [ - "nil" - ], - "filament_retract_before_wipe": [ - "nil" - ], - "filament_retract_when_changing_layer": [ - "nil" - ], - "filament_retraction_length": [ - "nil" - ], - "filament_z_hop": [ - "nil" - ], - "filament_z_hop_types": [ - "nil" - ], - "filament_retract_restart_extra": [ - "nil" - ], - "filament_retraction_speed": [ - "nil" - ], - "filament_settings_id": [ - "" - ], - "filament_soluble": [ - "0" - ], - "filament_type": [ - "PLA" - ], - "filament_vendor": [ - "Generic" - ], - "filament_wipe": [ - "nil" - ], - "filament_wipe_distance": [ - "nil" - ], - "bed_type": [ - "Cool Plate" - ], - "nozzle_temperature_initial_layer": [ - "200" - ], - "full_fan_speed_layer": [ - "0" - ], - "fan_max_speed": [ - "100" - ], - "fan_min_speed": [ - "35" - ], - "slow_down_min_speed": [ - "10" - ], - "slow_down_layer_time": [ - "8" - ], - "filament_start_gcode": [ - "; Filament gcode\n" - ], - "nozzle_temperature": [ - "200" - ], - "temperature_vitrification": [ - "100" - ] -} diff --git a/resources/profiles/Custom/filament/fdm_filament_pa.json b/resources/profiles/Custom/filament/fdm_filament_pa.json deleted file mode 100644 index 58f53cd451..0000000000 --- a/resources/profiles/Custom/filament/fdm_filament_pa.json +++ /dev/null @@ -1,85 +0,0 @@ -{ - "type": "filament", - "name": "fdm_filament_pa", - "from": "system", - "instantiation": "false", - "inherits": "fdm_filament_common", - "cool_plate_temp" : [ - "0" - ], - "eng_plate_temp" : [ - "100" - ], - "hot_plate_temp" : [ - "100" - ], - "textured_plate_temp" : [ - "100" - ], - "cool_plate_temp_initial_layer" : [ - "0" - ], - "eng_plate_temp_initial_layer" : [ - "100" - ], - "hot_plate_temp_initial_layer" : [ - "100" - ], - "textured_plate_temp_initial_layer" : [ - "100" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "close_fan_the_first_x_layers": [ - "3" - ], - "fan_cooling_layer_time": [ - "4" - ], - "filament_max_volumetric_speed": [ - "8" - ], - "filament_type": [ - "PA" - ], - "filament_density": [ - "1.04" - ], - "filament_cost": [ - "20" - ], - "nozzle_temperature_initial_layer": [ - "290" - ], - "reduce_fan_stop_start_freq": [ - "0" - ], - "fan_max_speed": [ - "60" - ], - "fan_min_speed": [ - "0" - ], - "overhang_fan_speed": [ - "30" - ], - "nozzle_temperature": [ - "290" - ], - "temperature_vitrification": [ - "108" - ], - "nozzle_temperature_range_low": [ - "270" - ], - "nozzle_temperature_range_high": [ - "300" - ], - "slow_down_min_speed": [ - "10" - ], - "slow_down_layer_time": [ - "2" - ] -} diff --git a/resources/profiles/Custom/filament/fdm_filament_pc.json b/resources/profiles/Custom/filament/fdm_filament_pc.json deleted file mode 100644 index cec8b89a38..0000000000 --- a/resources/profiles/Custom/filament/fdm_filament_pc.json +++ /dev/null @@ -1,88 +0,0 @@ -{ - "type": "filament", - "name": "fdm_filament_pc", - "from": "system", - "instantiation": "false", - "inherits": "fdm_filament_common", - "cool_plate_temp" : [ - "0" - ], - "eng_plate_temp" : [ - "110" - ], - "hot_plate_temp" : [ - "110" - ], - "textured_plate_temp" : [ - "110" - ], - "cool_plate_temp_initial_layer" : [ - "0" - ], - "eng_plate_temp_initial_layer" : [ - "110" - ], - "hot_plate_temp_initial_layer" : [ - "110" - ], - "textured_plate_temp_initial_layer" : [ - "110" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "close_fan_the_first_x_layers": [ - "3" - ], - "fan_cooling_layer_time": [ - "30" - ], - "filament_max_volumetric_speed": [ - "23.2" - ], - "filament_type": [ - "PC" - ], - "filament_density": [ - "1.04" - ], - "filament_cost": [ - "20" - ], - "nozzle_temperature_initial_layer": [ - "270" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "fan_max_speed": [ - "60" - ], - "fan_min_speed": [ - "10" - ], - "overhang_fan_threshold": [ - "25%" - ], - "overhang_fan_speed": [ - "60" - ], - "nozzle_temperature": [ - "280" - ], - "temperature_vitrification": [ - "140" - ], - "nozzle_temperature_range_low": [ - "260" - ], - "nozzle_temperature_range_high": [ - "280" - ], - "slow_down_min_speed": [ - "10" - ], - "slow_down_layer_time": [ - "2" - ] -} diff --git a/resources/profiles/Custom/filament/fdm_filament_pet.json b/resources/profiles/Custom/filament/fdm_filament_pet.json deleted file mode 100644 index bb2323e9c1..0000000000 --- a/resources/profiles/Custom/filament/fdm_filament_pet.json +++ /dev/null @@ -1,82 +0,0 @@ -{ - "type": "filament", - "name": "fdm_filament_pet", - "from": "system", - "instantiation": "false", - "inherits": "fdm_filament_common", - "cool_plate_temp" : [ - "60" - ], - "eng_plate_temp" : [ - "0" - ], - "hot_plate_temp" : [ - "80" - ], - "textured_plate_temp" : [ - "80" - ], - "cool_plate_temp_initial_layer" : [ - "60" - ], - "eng_plate_temp_initial_layer" : [ - "0" - ], - "hot_plate_temp_initial_layer" : [ - "80" - ], - "textured_plate_temp_initial_layer" : [ - "80" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "close_fan_the_first_x_layers": [ - "3" - ], - "fan_cooling_layer_time": [ - "20" - ], - "filament_max_volumetric_speed": [ - "25" - ], - "filament_type": [ - "PETG" - ], - "filament_density": [ - "1.27" - ], - "filament_cost": [ - "30" - ], - "nozzle_temperature_initial_layer": [ - "255" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "fan_max_speed": [ - "100" - ], - "fan_min_speed": [ - "20" - ], - "overhang_fan_speed": [ - "100" - ], - "nozzle_temperature": [ - "255" - ], - "temperature_vitrification": [ - "80" - ], - "nozzle_temperature_range_low": [ - "220" - ], - "nozzle_temperature_range_high": [ - "260" - ], - "filament_start_gcode": [ - "; filament start gcode\n" - ] -} diff --git a/resources/profiles/Custom/filament/fdm_filament_pla.json b/resources/profiles/Custom/filament/fdm_filament_pla.json deleted file mode 100644 index 82c6772f35..0000000000 --- a/resources/profiles/Custom/filament/fdm_filament_pla.json +++ /dev/null @@ -1,94 +0,0 @@ -{ - "type": "filament", - "name": "fdm_filament_pla", - "from": "system", - "instantiation": "false", - "inherits": "fdm_filament_common", - "fan_cooling_layer_time": [ - "100" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "filament_type": [ - "PLA" - ], - "filament_density": [ - "1.24" - ], - "filament_cost": [ - "20" - ], - "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" - ], - "nozzle_temperature_initial_layer": [ - "220" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "fan_max_speed": [ - "100" - ], - "fan_min_speed": [ - "100" - ], - "overhang_fan_speed": [ - "100" - ], - "overhang_fan_threshold": [ - "50%" - ], - "close_fan_the_first_x_layers": [ - "1" - ], - "nozzle_temperature": [ - "220" - ], - "temperature_vitrification": [ - "60" - ], - "nozzle_temperature_range_low": [ - "190" - ], - "nozzle_temperature_range_high": [ - "230" - ], - "slow_down_min_speed": [ - "10" - ], - "slow_down_layer_time": [ - "4" - ], - "additional_cooling_fan_speed": [ - "70" - ], - "filament_start_gcode": [ - "; filament start gcode\n" - ] -} diff --git a/resources/profiles/Custom/filament/fdm_filament_pva.json b/resources/profiles/Custom/filament/fdm_filament_pva.json deleted file mode 100644 index ebf25aa3ae..0000000000 --- a/resources/profiles/Custom/filament/fdm_filament_pva.json +++ /dev/null @@ -1,100 +0,0 @@ -{ - "type": "filament", - "name": "fdm_filament_pva", - "from": "system", - "instantiation": "false", - "inherits": "fdm_filament_common", - "cool_plate_temp" : [ - "35" - ], - "eng_plate_temp" : [ - "0" - ], - "hot_plate_temp" : [ - "45" - ], - "textured_plate_temp" : [ - "45" - ], - "cool_plate_temp_initial_layer" : [ - "35" - ], - "eng_plate_temp_initial_layer" : [ - "0" - ], - "hot_plate_temp_initial_layer" : [ - "45" - ], - "textured_plate_temp_initial_layer" : [ - "45" - ], - "fan_cooling_layer_time": [ - "100" - ], - "filament_max_volumetric_speed": [ - "15" - ], - "filament_soluble": [ - "1" - ], - "filament_is_support": [ - "1" - ], - "filament_type": [ - "PVA" - ], - "filament_density": [ - "1.24" - ], - "filament_cost": [ - "20" - ], - "nozzle_temperature_initial_layer": [ - "220" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "fan_max_speed": [ - "100" - ], - "fan_min_speed": [ - "100" - ], - "overhang_fan_speed": [ - "100" - ], - "overhang_fan_threshold": [ - "50%" - ], - "close_fan_the_first_x_layers": [ - "1" - ], - "nozzle_temperature": [ - "220" - ], - "temperature_vitrification": [ - "50" - ], - "nozzle_temperature_range_low": [ - "190" - ], - "nozzle_temperature_range_high": [ - "250" - ], - "slow_down_min_speed": [ - "10" - ], - "slow_down_layer_time": [ - "4" - ], - "additional_cooling_fan_speed": [ - "70" - ], - "filament_start_gcode": [ - "; filament start gcode\n" - ] -} diff --git a/resources/profiles/Custom/filament/fdm_filament_tpu.json b/resources/profiles/Custom/filament/fdm_filament_tpu.json deleted file mode 100644 index d00b7dbcab..0000000000 --- a/resources/profiles/Custom/filament/fdm_filament_tpu.json +++ /dev/null @@ -1,88 +0,0 @@ -{ - "type": "filament", - "name": "fdm_filament_tpu", - "from": "system", - "instantiation": "false", - "inherits": "fdm_filament_common", - "cool_plate_temp" : [ - "30" - ], - "eng_plate_temp" : [ - "30" - ], - "hot_plate_temp" : [ - "35" - ], - "textured_plate_temp" : [ - "35" - ], - "cool_plate_temp_initial_layer" : [ - "30" - ], - "eng_plate_temp_initial_layer" : [ - "30" - ], - "hot_plate_temp_initial_layer" : [ - "35" - ], - "textured_plate_temp_initial_layer" : [ - "35" - ], - "fan_cooling_layer_time": [ - "100" - ], - "filament_max_volumetric_speed": [ - "15" - ], - "filament_type": [ - "TPU" - ], - "filament_density": [ - "1.24" - ], - "filament_cost": [ - "20" - ], - "filament_retraction_length": [ - "0.4" - ], - "nozzle_temperature_initial_layer": [ - "240" - ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "fan_max_speed": [ - "100" - ], - "fan_min_speed": [ - "100" - ], - "overhang_fan_speed": [ - "100" - ], - "additional_cooling_fan_speed": [ - "70" - ], - "close_fan_the_first_x_layers": [ - "1" - ], - "nozzle_temperature": [ - "240" - ], - "temperature_vitrification": [ - "60" - ], - "nozzle_temperature_range_low": [ - "200" - ], - "nozzle_temperature_range_high": [ - "250" - ], - "filament_start_gcode": [ - "; filament start gcode\n" - ] -} diff --git a/resources/profiles/Custom/machine/MyKlipper.json b/resources/profiles/Custom/machine/MyKlipper.json index 8c4b9f56e9..9f909d3615 100644 --- a/resources/profiles/Custom/machine/MyKlipper.json +++ b/resources/profiles/Custom/machine/MyKlipper.json @@ -8,5 +8,5 @@ "bed_model": "", "bed_texture": "orcaslicer_bed_texture.svg", "hotend_model": "", - "default_materials": "My Generic ABS;My Generic PLA;My Generic PLA-CF;My Generic PETG;My Generic TPU;My Generic ASA;My Generic PC;My Generic PVA;My Generic PA;My Generic PA-CF" + "default_materials": "Generic ABS @System;Generic PLA @System;Generic PLA-CF @System;Generic PETG @System;Generic TPU @System;Generic ASA @System;Generic PC @System;Generic PVA @System;Generic PA @System;Generic PA-CF @System" } diff --git a/resources/profiles/Custom/machine/MyMarlin.json b/resources/profiles/Custom/machine/MyMarlin.json index 78f5f2c125..afd744e9a2 100644 --- a/resources/profiles/Custom/machine/MyMarlin.json +++ b/resources/profiles/Custom/machine/MyMarlin.json @@ -8,5 +8,5 @@ "bed_model": "", "bed_texture": "orcaslicer_bed_texture.svg", "hotend_model": "", - "default_materials": "My Generic ABS;My Generic PLA;My Generic PLA-CF;My Generic PETG;My Generic TPU;My Generic ASA;My Generic PC;My Generic PVA;My Generic PA;My Generic PA-CF" + "default_materials": "Generic ABS @System;Generic PLA @System;Generic PLA-CF @System;Generic PETG @System;Generic TPU @System;Generic ASA @System;Generic PC @System;Generic PVA @System;Generic PA @System;Generic PA-CF @System" } diff --git a/resources/profiles/Custom/machine/MyRRF.json b/resources/profiles/Custom/machine/MyRRF.json index f03683d61f..c830e20956 100644 --- a/resources/profiles/Custom/machine/MyRRF.json +++ b/resources/profiles/Custom/machine/MyRRF.json @@ -8,5 +8,5 @@ "bed_model": "", "bed_texture": "orcaslicer_bed_texture.svg", "hotend_model": "", - "default_materials": "My Generic ABS;My Generic PLA;My Generic PLA-CF;My Generic PETG;My Generic TPU;My Generic ASA;My Generic PC;My Generic PVA;My Generic PA;My Generic PA-CF" -} + "default_materials": "Generic ABS @System;Generic PLA @System;Generic PLA-CF @System;Generic PETG @System;Generic TPU @System;Generic ASA @System;Generic PC @System;Generic PVA @System;Generic PA @System;Generic PA-CF @System" +} \ No newline at end of file diff --git a/resources/profiles/Custom/machine/MyToolChanger.json b/resources/profiles/Custom/machine/MyToolChanger.json index 9c927e4be2..97b29c97e7 100644 --- a/resources/profiles/Custom/machine/MyToolChanger.json +++ b/resources/profiles/Custom/machine/MyToolChanger.json @@ -8,5 +8,5 @@ "bed_model": "Custom_350_bed.stl", "bed_texture": "orcaslicer_bed_texture.svg", "hotend_model": "", - "default_materials": "My Generic PLA @MyToolChanger;My Generic ABS @MyToolChanger;My Generic PLA-CF @MyToolChanger;My Generic PETG @MyToolChanger;My Generic TPU @MyToolChanger;My Generic ASA @MyToolChanger;My Generic PC @MyToolChanger;My Generic PVA @MyToolChanger;My Generic PA @MyToolChanger;My Generic PA-CF @MyToolChanger" + "default_materials": "Generic PLA @MyToolChanger;Generic ABS @MyToolChanger;Generic PLA-CF @MyToolChanger;Generic PETG @MyToolChanger;Generic TPU @MyToolChanger;Generic ASA @MyToolChanger;Generic PC @MyToolChanger;Generic PVA @MyToolChanger;Generic PA @MyToolChanger;Generic PA-CF @MyToolChanger" } diff --git a/resources/profiles/OrcaFilamentLibrary.json b/resources/profiles/OrcaFilamentLibrary.json index 8422993b6b..6ade81d8dc 100644 --- a/resources/profiles/OrcaFilamentLibrary.json +++ b/resources/profiles/OrcaFilamentLibrary.json @@ -41,44 +41,44 @@ "sub_path": "filament/fdm_filament_pa.json" }, { - "name": "PLA", - "sub_path": "filament/PLA.json" + "name": "Generic PLA @System", + "sub_path": "filament/Generic PLA @System.json" }, { - "name": "PLA-CF", - "sub_path": "filament/PLA-CF.json" + "name": "Generic PLA-CF @System", + "sub_path": "filament/Generic PLA-CF @System.json" }, { - "name": "PETG", - "sub_path": "filament/PETG.json" + "name": "Generic PETG @System", + "sub_path": "filament/Generic PETG @System.json" }, { - "name": "ABS", - "sub_path": "filament/ABS.json" + "name": "Generic ABS @System", + "sub_path": "filament/Generic ABS @System.json" }, { - "name": "TPU", - "sub_path": "filament/TPU.json" + "name": "Generic TPU @System", + "sub_path": "filament/Generic TPU @System.json" }, { - "name": "ASA", - "sub_path": "filament/ASA.json" + "name": "Generic ASA @System", + "sub_path": "filament/Generic ASA @System.json" }, { - "name": "PC", - "sub_path": "filament/PC.json" + "name": "Generic PC @System", + "sub_path": "filament/Generic PC @System.json" }, { - "name": "PVA", - "sub_path": "filament/PVA.json" + "name": "Generic PVA @System", + "sub_path": "filament/Generic PVA @System.json" }, { - "name": "PA", - "sub_path": "filament/PA.json" + "name": "Generic PA @System", + "sub_path": "filament/Generic PA @System.json" }, { - "name": "PA-CF", - "sub_path": "filament/PA-CF.json" + "name": "Generic PA-CF @System", + "sub_path": "filament/Generic PA-CF @System.json" } ] } \ No newline at end of file diff --git a/resources/profiles/OrcaFilamentLibrary/filament/ABS.json b/resources/profiles/OrcaFilamentLibrary/filament/Generic ABS @System.json similarity index 50% rename from resources/profiles/OrcaFilamentLibrary/filament/ABS.json rename to resources/profiles/OrcaFilamentLibrary/filament/Generic ABS @System.json index 44070049e0..ea71bb0be1 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/ABS.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Generic ABS @System.json @@ -2,16 +2,10 @@ "type": "filament", "filament_id": "GFB99", "setting_id": "GFSA04", - "name": "ABS", + "name": "Generic ABS @System", "from": "system", "instantiation": "true", + "renamed_from": "My Generic ABS", "inherits": "fdm_filament_abs", - "filament_flow_ratio": [ - "0.926" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "compatible_printers": [ - ] + "compatible_printers": [] } \ No newline at end of file diff --git a/resources/profiles/OrcaFilamentLibrary/filament/ASA.json b/resources/profiles/OrcaFilamentLibrary/filament/Generic ASA @System.json similarity index 50% rename from resources/profiles/OrcaFilamentLibrary/filament/ASA.json rename to resources/profiles/OrcaFilamentLibrary/filament/Generic ASA @System.json index cf8550658a..a1a3b7dff1 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/ASA.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Generic ASA @System.json @@ -2,16 +2,10 @@ "type": "filament", "filament_id": "GFB98", "setting_id": "GFSA04", - "name": "ASA", + "name": "Generic ASA @System", "from": "system", "instantiation": "true", + "renamed_from": "My Generic ADA", "inherits": "fdm_filament_asa", - "filament_flow_ratio": [ - "0.93" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "compatible_printers": [ - ] + "compatible_printers": [] } \ No newline at end of file diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Generic PA @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Generic PA @System.json new file mode 100644 index 0000000000..4ea536ff67 --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/Generic PA @System.json @@ -0,0 +1,11 @@ +{ + "type": "filament", + "filament_id": "GFN99", + "setting_id": "GFSA04", + "name": "Generic PA @System", + "from": "system", + "instantiation": "true", + "renamed_from": "My Generic PA", + "inherits": "fdm_filament_pa", + "compatible_printers": [] +} \ No newline at end of file diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Generic PA-CF @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Generic PA-CF @System.json new file mode 100644 index 0000000000..db9bda2b68 --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/Generic PA-CF @System.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "filament_id": "GFN98", + "setting_id": "GFSA04", + "name": "Generic PA-CF @System", + "from": "system", + "instantiation": "true", + "renamed_from": "My Generic PA-CF", + "inherits": "fdm_filament_pa", + "filament_type": [ + "PA-CF" + ], + "compatible_printers": [] +} \ No newline at end of file diff --git a/resources/profiles/OrcaFilamentLibrary/filament/PC.json b/resources/profiles/OrcaFilamentLibrary/filament/Generic PC @System.json similarity index 50% rename from resources/profiles/OrcaFilamentLibrary/filament/PC.json rename to resources/profiles/OrcaFilamentLibrary/filament/Generic PC @System.json index f312594a28..a675580352 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/PC.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Generic PC @System.json @@ -2,17 +2,10 @@ "type": "filament", "filament_id": "GFC99", "setting_id": "GFSA04", - "name": "PC", + "name": "Generic PC @System", "from": "system", "instantiation": "true", + "renamed_from": "My Generic PC", "inherits": "fdm_filament_pc", - "filament_max_volumetric_speed": [ - "12" - ], - "filament_flow_ratio": [ - "0.94" - ], - "compatible_printers": [ - - ] + "compatible_printers": [] } \ No newline at end of file diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Generic PETG @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Generic PETG @System.json new file mode 100644 index 0000000000..b8894b5689 --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/Generic PETG @System.json @@ -0,0 +1,11 @@ +{ + "type": "filament", + "filament_id": "GFG99", + "setting_id": "GFSA04", + "name": "Generic PETG @System", + "from": "system", + "instantiation": "true", + "renamed_from": "My Generic PETG", + "inherits": "fdm_filament_pet", + "compatible_printers": [] +} \ No newline at end of file diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Generic PLA @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Generic PLA @System.json new file mode 100644 index 0000000000..bd6664bcc1 --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/Generic PLA @System.json @@ -0,0 +1,11 @@ +{ + "type": "filament", + "filament_id": "GFL99", + "setting_id": "GFSA04", + "name": "Generic PLA @System", + "from": "system", + "instantiation": "true", + "renamed_from": "My Generic PLA", + "inherits": "fdm_filament_pla", + "compatible_printers": [] +} \ No newline at end of file diff --git a/resources/profiles/OrcaFilamentLibrary/filament/PLA-CF.json b/resources/profiles/OrcaFilamentLibrary/filament/Generic PLA-CF @System.json similarity index 61% rename from resources/profiles/OrcaFilamentLibrary/filament/PLA-CF.json rename to resources/profiles/OrcaFilamentLibrary/filament/Generic PLA-CF @System.json index 331000a180..b3230a54c3 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/PLA-CF.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Generic PLA-CF @System.json @@ -2,9 +2,10 @@ "type": "filament", "filament_id": "GFL98", "setting_id": "GFSA04", - "name": "PLA-CF", + "name": "Generic PLA-CF @System", "from": "system", "instantiation": "true", + "renamed_from": "My Generic PLA-CF", "inherits": "fdm_filament_pla", "filament_flow_ratio": [ "0.95" @@ -12,13 +13,5 @@ "filament_type": [ "PLA-CF" ], - "filament_max_volumetric_speed": [ - "12" - ], - "slow_down_layer_time": [ - "7" - ], - "compatible_printers": [ - - ] + "compatible_printers": [] } \ No newline at end of file diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Generic PVA @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Generic PVA @System.json new file mode 100644 index 0000000000..9cd38a379c --- /dev/null +++ b/resources/profiles/OrcaFilamentLibrary/filament/Generic PVA @System.json @@ -0,0 +1,11 @@ +{ + "type": "filament", + "filament_id": "GFS99", + "setting_id": "GFSA04", + "name": "Generic PVA @System", + "from": "system", + "instantiation": "true", + "renamed_from": "My Generic PVA", + "inherits": "fdm_filament_pva", + "compatible_printers": [] +} \ No newline at end of file diff --git a/resources/profiles/OrcaFilamentLibrary/filament/TPU.json b/resources/profiles/OrcaFilamentLibrary/filament/Generic TPU @System.json similarity index 59% rename from resources/profiles/OrcaFilamentLibrary/filament/TPU.json rename to resources/profiles/OrcaFilamentLibrary/filament/Generic TPU @System.json index 9c59eaea0a..2d579a4a09 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/TPU.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Generic TPU @System.json @@ -2,14 +2,10 @@ "type": "filament", "filament_id": "GFU99", "setting_id": "GFSA04", - "name": "TPU", + "name": "Generic TPU @System", "from": "system", "instantiation": "true", + "renamed_from": "My Generic TPU", "inherits": "fdm_filament_tpu", - "filament_max_volumetric_speed": [ - "3.2" - ], - "compatible_printers": [ - - ] + "compatible_printers": [] } \ No newline at end of file diff --git a/resources/profiles/OrcaFilamentLibrary/filament/PA-CF.json b/resources/profiles/OrcaFilamentLibrary/filament/PA-CF.json deleted file mode 100644 index dd6a8b6821..0000000000 --- a/resources/profiles/OrcaFilamentLibrary/filament/PA-CF.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "type": "filament", - "filament_id": "GFN98", - "setting_id": "GFSA04", - "name": "PA-CF", - "from": "system", - "instantiation": "true", - "inherits": "fdm_filament_pa", - "filament_type": [ - "PA-CF" - ], - "nozzle_temperature_initial_layer": [ - "280" - ], - "nozzle_temperature": [ - "280" - ], - "filament_max_volumetric_speed": [ - "8" - ], - "compatible_printers": [ - ] -} \ No newline at end of file diff --git a/resources/profiles/OrcaFilamentLibrary/filament/PA.json b/resources/profiles/OrcaFilamentLibrary/filament/PA.json deleted file mode 100644 index 6066074460..0000000000 --- a/resources/profiles/OrcaFilamentLibrary/filament/PA.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "filament", - "filament_id": "GFN99", - "setting_id": "GFSA04", - "name": "PA", - "from": "system", - "instantiation": "true", - "inherits": "fdm_filament_pa", - "nozzle_temperature_initial_layer": [ - "280" - ], - "nozzle_temperature": [ - "280" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "compatible_printers": [ - - ] -} \ No newline at end of file diff --git a/resources/profiles/OrcaFilamentLibrary/filament/PETG.json b/resources/profiles/OrcaFilamentLibrary/filament/PETG.json deleted file mode 100644 index 4f1a274205..0000000000 --- a/resources/profiles/OrcaFilamentLibrary/filament/PETG.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "type": "filament", - "filament_id": "GFG99", - "setting_id": "GFSA04", - "name": "PETG", - "from": "system", - "instantiation": "true", - "inherits": "fdm_filament_pet", - "reduce_fan_stop_start_freq": [ - "1" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "fan_cooling_layer_time": [ - "30" - ], - "overhang_fan_speed": [ - "90" - ], - "overhang_fan_threshold": [ - "25%" - ], - "fan_max_speed": [ - "90" - ], - "fan_min_speed": [ - "40" - ], - "slow_down_min_speed": [ - "10" - ], - "slow_down_layer_time": [ - "8" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_max_volumetric_speed": [ - "10" - ], - "filament_start_gcode": [ - "; filament start gcode\n" - ], - "compatible_printers": [ - - ] -} \ No newline at end of file diff --git a/resources/profiles/OrcaFilamentLibrary/filament/PLA.json b/resources/profiles/OrcaFilamentLibrary/filament/PLA.json deleted file mode 100644 index db4f22f2cc..0000000000 --- a/resources/profiles/OrcaFilamentLibrary/filament/PLA.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "type": "filament", - "filament_id": "GFL99", - "setting_id": "GFSA04", - "name": "PLA", - "from": "system", - "instantiation": "true", - "inherits": "fdm_filament_pla", - "filament_flow_ratio": [ - "0.98" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "slow_down_layer_time": [ - "8" - ], - "compatible_printers": [ - ] -} \ No newline at end of file diff --git a/resources/profiles/OrcaFilamentLibrary/filament/PVA.json b/resources/profiles/OrcaFilamentLibrary/filament/PVA.json deleted file mode 100644 index cfc400222b..0000000000 --- a/resources/profiles/OrcaFilamentLibrary/filament/PVA.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "type": "filament", - "filament_id": "GFS99", - "setting_id": "GFSA04", - "name": "PVA", - "from": "system", - "instantiation": "true", - "inherits": "fdm_filament_pva", - "filament_flow_ratio": [ - "0.95" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "slow_down_layer_time": [ - "7" - ], - "slow_down_min_speed": [ - "10" - ], - "compatible_printers": [ - - ] -} \ No newline at end of file diff --git a/resources/profiles/OrcaFilamentLibrary/filament/fdm_filament_abs.json b/resources/profiles/OrcaFilamentLibrary/filament/fdm_filament_abs.json index b9d4eeda31..f571c47f6f 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/fdm_filament_abs.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/fdm_filament_abs.json @@ -4,28 +4,28 @@ "from": "system", "instantiation": "false", "inherits": "fdm_filament_common", - "cool_plate_temp" : [ + "cool_plate_temp": [ "105" ], - "eng_plate_temp" : [ + "eng_plate_temp": [ "105" ], - "hot_plate_temp" : [ + "hot_plate_temp": [ "105" ], - "textured_plate_temp" : [ + "textured_plate_temp": [ "105" ], - "cool_plate_temp_initial_layer" : [ + "cool_plate_temp_initial_layer": [ "105" ], - "eng_plate_temp_initial_layer" : [ + "eng_plate_temp_initial_layer": [ "105" ], - "hot_plate_temp_initial_layer" : [ + "hot_plate_temp_initial_layer": [ "105" ], - "textured_plate_temp_initial_layer" : [ + "textured_plate_temp_initial_layer": [ "105" ], "slow_down_for_layer_cooling": [ @@ -37,9 +37,6 @@ "fan_cooling_layer_time": [ "30" ], - "filament_max_volumetric_speed": [ - "28.6" - ], "filament_type": [ "ABS" ], @@ -84,5 +81,11 @@ ], "slow_down_layer_time": [ "3" + ], + "filament_flow_ratio": [ + "0.926" + ], + "filament_max_volumetric_speed": [ + "12" ] -} +} \ No newline at end of file diff --git a/resources/profiles/OrcaFilamentLibrary/filament/fdm_filament_asa.json b/resources/profiles/OrcaFilamentLibrary/filament/fdm_filament_asa.json index 262c561bda..8baa401de1 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/fdm_filament_asa.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/fdm_filament_asa.json @@ -37,9 +37,6 @@ "fan_cooling_layer_time": [ "35" ], - "filament_max_volumetric_speed": [ - "28.6" - ], "filament_type": [ "ASA" ], @@ -84,5 +81,11 @@ ], "slow_down_layer_time": [ "3" + ], + "filament_flow_ratio": [ + "0.93" + ], + "filament_max_volumetric_speed": [ + "12" ] } diff --git a/resources/profiles/OrcaFilamentLibrary/filament/fdm_filament_common.json b/resources/profiles/OrcaFilamentLibrary/filament/fdm_filament_common.json index 6c199d1e5c..9f77975119 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/fdm_filament_common.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/fdm_filament_common.json @@ -103,7 +103,7 @@ "PLA" ], "filament_vendor": [ - "OrcaSlicer" + "Generic" ], "filament_wipe": [ "nil" diff --git a/resources/profiles/OrcaFilamentLibrary/filament/fdm_filament_pa.json b/resources/profiles/OrcaFilamentLibrary/filament/fdm_filament_pa.json index 58f53cd451..8528ef7543 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/fdm_filament_pa.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/fdm_filament_pa.json @@ -37,9 +37,6 @@ "fan_cooling_layer_time": [ "4" ], - "filament_max_volumetric_speed": [ - "8" - ], "filament_type": [ "PA" ], @@ -49,9 +46,6 @@ "filament_cost": [ "20" ], - "nozzle_temperature_initial_layer": [ - "290" - ], "reduce_fan_stop_start_freq": [ "0" ], @@ -64,9 +58,6 @@ "overhang_fan_speed": [ "30" ], - "nozzle_temperature": [ - "290" - ], "temperature_vitrification": [ "108" ], @@ -81,5 +72,14 @@ ], "slow_down_layer_time": [ "2" + ], + "nozzle_temperature_initial_layer": [ + "290" + ], + "nozzle_temperature": [ + "290" + ], + "filament_max_volumetric_speed": [ + "10" ] } diff --git a/resources/profiles/OrcaFilamentLibrary/filament/fdm_filament_pc.json b/resources/profiles/OrcaFilamentLibrary/filament/fdm_filament_pc.json index cec8b89a38..fd855bd484 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/fdm_filament_pc.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/fdm_filament_pc.json @@ -37,9 +37,6 @@ "fan_cooling_layer_time": [ "30" ], - "filament_max_volumetric_speed": [ - "23.2" - ], "filament_type": [ "PC" ], @@ -84,5 +81,11 @@ ], "slow_down_layer_time": [ "2" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "filament_flow_ratio": [ + "0.94" ] } diff --git a/resources/profiles/OrcaFilamentLibrary/filament/fdm_filament_pet.json b/resources/profiles/OrcaFilamentLibrary/filament/fdm_filament_pet.json index bb2323e9c1..212edcc5bf 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/fdm_filament_pet.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/fdm_filament_pet.json @@ -28,18 +28,9 @@ "textured_plate_temp_initial_layer" : [ "80" ], - "slow_down_for_layer_cooling": [ - "1" - ], "close_fan_the_first_x_layers": [ "3" ], - "fan_cooling_layer_time": [ - "20" - ], - "filament_max_volumetric_speed": [ - "25" - ], "filament_type": [ "PETG" ], @@ -52,18 +43,6 @@ "nozzle_temperature_initial_layer": [ "255" ], - "reduce_fan_stop_start_freq": [ - "1" - ], - "fan_max_speed": [ - "100" - ], - "fan_min_speed": [ - "20" - ], - "overhang_fan_speed": [ - "100" - ], "nozzle_temperature": [ "255" ], @@ -78,5 +57,38 @@ ], "filament_start_gcode": [ "; filament start gcode\n" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "fan_cooling_layer_time": [ + "30" + ], + "overhang_fan_speed": [ + "90" + ], + "overhang_fan_threshold": [ + "25%" + ], + "fan_max_speed": [ + "90" + ], + "fan_min_speed": [ + "40" + ], + "slow_down_min_speed": [ + "10" + ], + "slow_down_layer_time": [ + "8" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_max_volumetric_speed": [ + "10" ] } diff --git a/resources/profiles/OrcaFilamentLibrary/filament/fdm_filament_pla.json b/resources/profiles/OrcaFilamentLibrary/filament/fdm_filament_pla.json index 82c6772f35..1c8ee472a9 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/fdm_filament_pla.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/fdm_filament_pla.json @@ -7,9 +7,6 @@ "fan_cooling_layer_time": [ "100" ], - "filament_max_volumetric_speed": [ - "12" - ], "filament_type": [ "PLA" ], @@ -19,28 +16,28 @@ "filament_cost": [ "20" ], - "cool_plate_temp" : [ + "cool_plate_temp": [ "60" ], - "eng_plate_temp" : [ + "eng_plate_temp": [ "60" ], - "hot_plate_temp" : [ + "hot_plate_temp": [ "60" ], - "textured_plate_temp" : [ + "textured_plate_temp": [ "60" ], - "cool_plate_temp_initial_layer" : [ + "cool_plate_temp_initial_layer": [ "60" ], - "eng_plate_temp_initial_layer" : [ + "eng_plate_temp_initial_layer": [ "60" ], - "hot_plate_temp_initial_layer" : [ + "hot_plate_temp_initial_layer": [ "60" ], - "textured_plate_temp_initial_layer" : [ + "textured_plate_temp_initial_layer": [ "60" ], "nozzle_temperature_initial_layer": [ @@ -82,13 +79,19 @@ "slow_down_min_speed": [ "10" ], - "slow_down_layer_time": [ - "4" - ], "additional_cooling_fan_speed": [ "70" ], "filament_start_gcode": [ "; filament start gcode\n" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "slow_down_layer_time": [ + "6" ] -} +} \ No newline at end of file diff --git a/resources/profiles/OrcaFilamentLibrary/filament/fdm_filament_pva.json b/resources/profiles/OrcaFilamentLibrary/filament/fdm_filament_pva.json index ebf25aa3ae..f7a5a010fa 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/fdm_filament_pva.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/fdm_filament_pva.json @@ -4,36 +4,33 @@ "from": "system", "instantiation": "false", "inherits": "fdm_filament_common", - "cool_plate_temp" : [ + "cool_plate_temp": [ "35" ], - "eng_plate_temp" : [ + "eng_plate_temp": [ "0" ], - "hot_plate_temp" : [ + "hot_plate_temp": [ "45" ], - "textured_plate_temp" : [ + "textured_plate_temp": [ "45" ], - "cool_plate_temp_initial_layer" : [ + "cool_plate_temp_initial_layer": [ "35" ], - "eng_plate_temp_initial_layer" : [ + "eng_plate_temp_initial_layer": [ "0" ], - "hot_plate_temp_initial_layer" : [ + "hot_plate_temp_initial_layer": [ "45" ], - "textured_plate_temp_initial_layer" : [ + "textured_plate_temp_initial_layer": [ "45" ], "fan_cooling_layer_time": [ "100" ], - "filament_max_volumetric_speed": [ - "15" - ], "filament_soluble": [ "1" ], @@ -85,16 +82,22 @@ "nozzle_temperature_range_high": [ "250" ], - "slow_down_min_speed": [ - "10" - ], - "slow_down_layer_time": [ - "4" - ], "additional_cooling_fan_speed": [ "70" ], "filament_start_gcode": [ "; filament start gcode\n" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_max_volumetric_speed": [ + "12" + ], + "slow_down_layer_time": [ + "7" + ], + "slow_down_min_speed": [ + "10" ] -} +} \ No newline at end of file diff --git a/resources/profiles/OrcaFilamentLibrary/filament/fdm_filament_tpu.json b/resources/profiles/OrcaFilamentLibrary/filament/fdm_filament_tpu.json index d00b7dbcab..46726ab5e5 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/fdm_filament_tpu.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/fdm_filament_tpu.json @@ -4,36 +4,33 @@ "from": "system", "instantiation": "false", "inherits": "fdm_filament_common", - "cool_plate_temp" : [ + "cool_plate_temp": [ "30" ], - "eng_plate_temp" : [ + "eng_plate_temp": [ "30" ], - "hot_plate_temp" : [ + "hot_plate_temp": [ "35" ], - "textured_plate_temp" : [ + "textured_plate_temp": [ "35" ], - "cool_plate_temp_initial_layer" : [ + "cool_plate_temp_initial_layer": [ "30" ], - "eng_plate_temp_initial_layer" : [ + "eng_plate_temp_initial_layer": [ "30" ], - "hot_plate_temp_initial_layer" : [ + "hot_plate_temp_initial_layer": [ "35" ], - "textured_plate_temp_initial_layer" : [ + "textured_plate_temp_initial_layer": [ "35" ], "fan_cooling_layer_time": [ "100" ], - "filament_max_volumetric_speed": [ - "15" - ], "filament_type": [ "TPU" ], @@ -84,5 +81,8 @@ ], "filament_start_gcode": [ "; filament start gcode\n" + ], + "filament_max_volumetric_speed": [ + "3.2" ] -} +} \ No newline at end of file diff --git a/resources/profiles/Prusa/process/0.20mm Speed @MK3S 0.4.json b/resources/profiles/Prusa/process/0.20mm Speed @MK3S 0.4.json index 73355f53c2..7ae485dfef 100644 --- a/resources/profiles/Prusa/process/0.20mm Speed @MK3S 0.4.json +++ b/resources/profiles/Prusa/process/0.20mm Speed @MK3S 0.4.json @@ -3,7 +3,6 @@ "print_settings_id": "0.20mm Speed @MK3S 0.4", "name": "0.20mm Speed @MK3S 0.4", "from": "system", - "renamed_from":"0.20mm Standard @MK3S", "instantiation": "true", "inherits": "process_common_mk3", "bottom_shell_layers": "4", diff --git a/resources/web/guide/22/22.js b/resources/web/guide/22/22.js index 90f0bcef68..ce75dd59eb 100644 --- a/resources/web/guide/22/22.js +++ b/resources/web/guide/22/22.js @@ -199,7 +199,11 @@ function SortUI() let strModel=pFila.attr("model"); let strFilalist=pFila.attr("filalist"); - pFila.attr("model", strModel+fModel); + if(strModel == '' || fModel == '') + pFila.attr("model", ''); + else + pFila.attr("model", strModel+fModel); + pFila.attr("filalist", strFilalist+fWholeName+';'); } diff --git a/resources/web/guide/23/23.js b/resources/web/guide/23/23.js index ba92265a96..1b9ce0e562 100644 --- a/resources/web/guide/23/23.js +++ b/resources/web/guide/23/23.js @@ -71,30 +71,7 @@ function SortUI() ModelList.push(OneMode); } - //machine -// let HtmlMachine=''; -// -// let nMachine=m_ProfileItem['machine'].length; -// for(let n=0;n'+sName+''; -// } -// } -// -// $('#MachineList .CValues').append(HtmlMachine); -// $('#MachineList .CValues input').prop("checked",true); -// if(nMachine<=1) -// { -// $('#MachineList').hide(); -// } - + //model let HtmlMode=''; nMode=ModelList.length; @@ -131,15 +108,6 @@ function SortUI() let fSelect=OneFila['selected']; let fModel=OneFila['models'] - //alert( fWholeName+' - '+fShortName+' - '+fVendor+' - '+fType+' - '+fSelect+' - '+fModel ); - -// if(OneFila['name'].indexOf("Bambu PA-CF")>=0) -// { -// alert( fShortName+' - '+fVendor+' - '+fType+' - '+fSelect+' - '+fModel ) -// -// let b=1+2; -// } - let bFind=false; //let bCheck=$("#MachineList input:first").prop("checked"); if( fModel=='') @@ -204,7 +172,10 @@ function SortUI() let strModel=pFila.attr("model"); let strFilalist=pFila.attr("filalist"); - pFila.attr("model", strModel+fModel); + if(strModel == '' || fModel == '') + pFila.attr("model", ''); + else + pFila.attr("model", strModel+fModel); pFila.attr("filalist", strFilalist+fWholeName+';'); } diff --git a/src/libslic3r/Preset.cpp b/src/libslic3r/Preset.cpp index a4394f624c..9a5eac6bc2 100644 --- a/src/libslic3r/Preset.cpp +++ b/src/libslic3r/Preset.cpp @@ -608,6 +608,15 @@ bool is_compatible_with_printer(const PresetWithVendorProfile &preset, const Pre // if (preset.vendor != nullptr && preset.vendor != active_printer.vendor) // // The current profile has a vendor assigned and it is different from the active print's vendor. // return false; + + // Orca: check excluded printers + if (preset.vendor != nullptr && preset.preset.type == Preset::TYPE_FILAMENT) { + const auto& excluded_printers = preset.preset.m_excluded_from; + const auto excluded = preset.vendor->name == PresetBundle::ORCA_FILAMENT_LIBRARY && + excluded_printers.find(active_printer.preset.name) != excluded_printers.end(); + if (excluded) + return false; + } auto &condition = preset.preset.compatible_printers_condition(); auto *compatible_printers = dynamic_cast(preset.preset.config.option("compatible_printers")); bool has_compatible_printers = compatible_printers != nullptr && ! compatible_printers->values.empty(); @@ -621,10 +630,9 @@ bool is_compatible_with_printer(const PresetWithVendorProfile &preset, const Pre } } return preset.preset.is_default || active_printer.preset.name.empty() || !has_compatible_printers || - std::find(compatible_printers->values.begin(), compatible_printers->values.end(), active_printer.preset.name) != - compatible_printers->values.end() - //BBS - || (!active_printer.preset.is_system && is_compatible_with_parent_printer(preset, active_printer)); + std::find(compatible_printers->values.begin(), compatible_printers->values.end(), active_printer.preset.name) != + compatible_printers->values.end() || + (!active_printer.preset.is_system && is_compatible_with_parent_printer(preset, active_printer)); } bool is_compatible_with_printer(const PresetWithVendorProfile &preset, const PresetWithVendorProfile &active_printer) @@ -2121,6 +2129,7 @@ bool PresetCollection::clone_presets(std::vector const &presets, auto &preset = new_presets.back(); preset.vendor = nullptr; preset.renamed_from.clear(); + preset.m_excluded_from.clear(); preset.setting_id.clear(); preset.inherits().clear(); preset.is_default = false; @@ -2249,6 +2258,7 @@ void PresetCollection::save_current_preset(const std::string &new_name, bool det preset.inherits().clear(); preset.alias.clear(); preset.renamed_from.clear(); + preset.m_excluded_from.clear(); BOOST_LOG_TRIVIAL(warning) << __FUNCTION__ << boost::format(": save preset %1% , with detach")%new_name; } //BBS: add lock logic for sync preset in background @@ -2276,6 +2286,7 @@ void PresetCollection::save_current_preset(const std::string &new_name, bool det preset.vendor = nullptr; preset.alias.clear(); preset.renamed_from.clear(); + preset.m_excluded_from.clear(); preset.setting_id.clear(); if (detach) { // Clear the link to the parent profile. @@ -2868,6 +2879,38 @@ void PresetCollection::update_map_alias_to_profile_name() //std::sort(m_map_alias_to_profile_name.begin(), m_map_alias_to_profile_name.end(), [](auto &l, auto &r) { return l.first < r.first; }); } +void PresetCollection::update_library_profile_excluded_from() +{ + // Orca: Collect all filament presets that has empty compatible_printers and belongs to the Orca Filament Library. + std::map*> excluded_froms; + for (Preset& preset : m_presets) { + if (preset.vendor != nullptr && preset.vendor->name == PresetBundle::ORCA_FILAMENT_LIBRARY) { + // check if the preset has empty compatible_printers + const auto* compatible_printers = dynamic_cast(preset.config.option("compatible_printers")); + if (compatible_printers == nullptr || compatible_printers->values.empty()) + excluded_froms[preset.alias] = &preset.m_excluded_from; + } + } + + // Check all presets that has the same alias as the filament presets with empty compatible_printers in Orca Filament Library. + for (const Preset& preset : m_presets) { + if (preset.vendor == nullptr || preset.vendor->name == PresetBundle::ORCA_FILAMENT_LIBRARY) + continue; + + const auto* compatible_printers = dynamic_cast(preset.config.option("compatible_printers")); + // All profiles in concrete vendor profile shouldn't have empty compatible_printers, but here we check it for safety. + if (compatible_printers == nullptr || compatible_printers->values.empty()) + continue; + auto itr = excluded_froms.find(preset.alias); + if (itr != excluded_froms.end()) { + // Add the printer models to the excluded_from list. + for (const std::string& printer_name : compatible_printers->values) { + itr->second->insert(printer_name); + } + } + } +} + void PresetCollection::update_map_system_profile_renamed() { m_map_system_profile_renamed.clear(); diff --git a/src/libslic3r/Preset.hpp b/src/libslic3r/Preset.hpp index 359abf6d62..6eae6df160 100644 --- a/src/libslic3r/Preset.hpp +++ b/src/libslic3r/Preset.hpp @@ -3,6 +3,7 @@ #include #include +#include #include #include #include @@ -233,6 +234,11 @@ public: // and to match the "inherits" field of user profiles with updated system profiles. std::vector renamed_from; + // Orca: maintain a list of printer models that are excluded from this preset, designed for filaments without compatible_printer defined + // (hence they are visible to all printer models by default) in Orca Filament Library. However, we might have speciliazed filament for + // certain printer models defined in the vendor profile as well, in this case we want to hide this generic preset for these printer models. + std::set m_excluded_from; + //BBS Semver version; // version of preset std::string ini_str; // ini string of preset @@ -721,6 +727,10 @@ protected: // Update m_map_system_profile_renamed from loaded system profiles. void update_map_system_profile_renamed(); + // Orca: update m_excluded_from loaded system profiles. + void update_library_profile_excluded_from(); + + void set_custom_preset_alias(Preset &preset); private: diff --git a/src/libslic3r/PresetBundle.cpp b/src/libslic3r/PresetBundle.cpp index f8103ff4fe..f40261d6d8 100644 --- a/src/libslic3r/PresetBundle.cpp +++ b/src/libslic3r/PresetBundle.cpp @@ -1164,66 +1164,6 @@ void PresetBundle::remove_users_preset(AppConfig &config, std::map PresetBundle::load_system_presets(ForwardCompatibilitySubstitutionRule compatibility_rule) -{ - //BBS: add config related logs - BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << boost::format(" enter, compatibility_rule %1%")%compatibility_rule; - if (compatibility_rule == ForwardCompatibilitySubstitutionRule::EnableSystemSilent) - // Loading system presets, don't log substitutions. - compatibility_rule = ForwardCompatibilitySubstitutionRule::EnableSilent; - else if (compatibility_rule == ForwardCompatibilitySubstitutionRule::EnableSilentDisableSystem) - // Loading system presets, throw on unknown option value. - compatibility_rule = ForwardCompatibilitySubstitutionRule::Disable; - - // Here the vendor specific read only Config Bundles are stored. - //BBS: change directory by design - boost::filesystem::path dir = (boost::filesystem::path(data_dir()) / PRESET_SYSTEM_DIR).make_preferred(); - PresetsConfigSubstitutions substitutions; - std::string errors_cummulative; - bool first = true; - for (auto &dir_entry : boost::filesystem::directory_iterator(dir)) - if (Slic3r::is_ini_file(dir_entry)) { - std::string name = dir_entry.path().filename().string(); - // Remove the .ini suffix. - name.erase(name.size() - 4); - try { - // Load the config bundle, flatten it. - if (first) { - // Reset this PresetBundle and load the first vendor config. - append(substitutions, this->load_configbundle(dir_entry.path().string(), PresetBundle::LoadSystem, compatibility_rule).first); - first = false; - } else { - // Load the other vendor configs, merge them with this PresetBundle. - // Report duplicate profiles. - PresetBundle other; - append(substitutions, other.load_configbundle(dir_entry.path().string(), PresetBundle::LoadSystem, compatibility_rule).first); - std::vector duplicates = this->merge_presets(std::move(other)); - if (! duplicates.empty()) { - errors_cummulative += "Vendor configuration file " + name + " contains the following presets with names used by other vendors: "; - for (size_t i = 0; i < duplicates.size(); ++ i) { - if (i > 0) - errors_cummulative += ", "; - errors_cummulative += duplicates[i]; - } - } - } - } catch (const std::runtime_error &err) { - errors_cummulative += err.what(); - errors_cummulative += "\n"; - } - } - if (first) { - // No config bundle loaded, reset. - this->reset(false); - } - - this->update_system_maps(); - //BBS: add config related logs - BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << boost::format(" finished, errors_cummulative %1%")%errors_cummulative; - return std::make_pair(std::move(substitutions), errors_cummulative); -}*/ //BBS: add json related logic, load system presets from json std::pair PresetBundle::load_system_presets_from_json(ForwardCompatibilitySubstitutionRule compatibility_rule) @@ -1284,12 +1224,14 @@ std::pair PresetBundle::load_system_pre PresetBundle other; append(substitutions, other.load_vendor_configs_from_json(dir.string(), vendor_name, PresetBundle::LoadSystem, compatibility_rule, this).first); std::vector duplicates = this->merge_presets(std::move(other)); - if (! duplicates.empty()) { + if (!duplicates.empty()) { errors_cummulative += "Found duplicated settings in vendor " + vendor_name + "'s json file lists: "; - for (size_t i = 0; i < duplicates.size(); ++ i) { + for (size_t i = 0; i < duplicates.size(); ++i) { if (i > 0) errors_cummulative += ", "; errors_cummulative += duplicates[i]; + ++m_errors; + BOOST_LOG_TRIVIAL(error) << "Found duplicated preset: " + duplicates[i] + " in vendor: " + vendor_name + ": "; } } } @@ -1459,6 +1401,8 @@ void PresetBundle::update_system_maps() this->sla_prints .update_map_alias_to_profile_name(); this->filaments .update_map_alias_to_profile_name(); this->sla_materials.update_map_alias_to_profile_name(); + + this->filaments.update_library_profile_excluded_from(); } static inline std::string remove_ini_suffix(const std::string &name) @@ -2427,54 +2371,7 @@ ConfigSubstitutions PresetBundle::load_config_file(const std::string &path, Forw //BBS: add config related logs BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << boost::format(" can not load config file %1% not from gcode")%path ; throw Slic3r::RuntimeError(std::string("Unknown configuration file: ") + path); - // 1) Try to load the config file into a boost property tree. - /*boost::property_tree::ptree tree; - try { - boost::nowide::ifstream ifs(path); - boost::property_tree::read_ini(ifs, tree); - } catch (const std::ifstream::failure &err) { - throw Slic3r::RuntimeError(std::string("The Config Bundle cannot be loaded: ") + path + "\n\tReason: " + err.what()); - } catch (const boost::property_tree::file_parser_error &err) { - throw Slic3r::RuntimeError(format("Failed loading the Config Bundle \"%1%\": %2% at line %3%", - err.filename(), err.message(), err.line())); - } catch (const std::runtime_error &err) { - throw Slic3r::RuntimeError(std::string("Failed loading the preset file: ") + path + "\n\tReason: " + err.what()); - } - - // 2) Continue based on the type of the configuration file. - ConfigFileType config_file_type = guess_config_file_type(tree); - ConfigSubstitutions config_substitutions; - try { - switch (config_file_type) { - case CONFIG_FILE_TYPE_UNKNOWN: - throw Slic3r::RuntimeError(std::string("Unknown configuration file type: ") + path); - case CONFIG_FILE_TYPE_APP_CONFIG: - throw Slic3r::RuntimeError(std::string("Invalid configuration file: ") + path + ". This is an application config file."); - case CONFIG_FILE_TYPE_CONFIG: - { - // Initialize a config from full defaults. - DynamicPrintConfig config; - config.apply(FullPrintConfig::defaults()); - config_substitutions = config.load(tree, compatibility_rule); - Preset::normalize(config); - load_config_file_config(path, true, std::move(config)); - //BBS: add config related logs - BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << boost::format(": normal config, finished, got %1% substitutions")%config_substitutions.size(); - return config_substitutions; - } - case CONFIG_FILE_TYPE_CONFIG_BUNDLE: - //BBS: add config related logs - BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << boost::format(": found config bundle"); - return load_config_file_config_bundle(path, tree, compatibility_rule); - } - } catch (const ConfigurationError &e) { - throw Slic3r::RuntimeError(format("Invalid configuration file %1%: %2%", path, e.what())); - } - - //BBS: add config related logs - BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << boost::format(" finished, should not be here"); - // This shall never happen. Suppres compiler warnings. - assert(false);*/ + return ConfigSubstitutions{}; } @@ -2736,569 +2633,6 @@ void PresetBundle::load_config_file_config(const std::string &name_or_path, bool BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << boost::format(": finished"); } -// Load the active configuration of a config bundle from a boost property_tree. This is a private method called from load_config_file. -/*ConfigSubstitutions PresetBundle::load_config_file_config_bundle( - const std::string &path, const boost::property_tree::ptree &tree, ForwardCompatibilitySubstitutionRule compatibility_rule) -{ - // 1) Load the config bundle into a temp data. - PresetBundle tmp_bundle; - // Load the config bundle, but don't save the loaded presets to user profile directory, as only the presets marked as active in the loaded preset bundle - // will be loaded into the master PresetBundle and activated. - auto [presets_substitutions, presets_imported] = tmp_bundle.load_configbundle(path, {}, compatibility_rule); - UNUSED(presets_imported); - - std::string bundle_name = std::string(" - ") + boost::filesystem::path(path).filename().string(); - - //BBS: add config related logs - BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << boost::format(": enter, bundle_name %1%")%bundle_name; - // 2) Extract active configs from the config bundle, copy them and activate them in this bundle. - ConfigSubstitutions config_substitutions; - auto load_one = [&path, &bundle_name, &presets_substitutions = presets_substitutions, &config_substitutions]( - PresetCollection &collection_dst, PresetCollection &collection_src, const std::string &preset_name_src, bool activate) -> std::string { - // If there are substitutions reported for this preset, move them to config_substitutions. - if (auto it = std::find_if(presets_substitutions.begin(), presets_substitutions.end(), [&preset_name_src](const PresetConfigSubstitutions& subs){ return subs.preset_name == preset_name_src; }); - it != presets_substitutions.end() && ! it->substitutions.empty()) - append(config_substitutions, std::move(it->substitutions)); - Preset *preset_src = collection_src.find_preset(preset_name_src, false); - Preset *preset_dst = collection_dst.find_preset(preset_name_src, false); - assert(preset_src != nullptr); - std::string preset_name_dst; - if (preset_dst != nullptr && preset_dst->is_default) { - // No need to copy a default preset, it always exists in collection_dst. - if (activate) - collection_dst.select_preset(0); - return preset_name_src; - } else if (preset_dst != nullptr && preset_src->config == preset_dst->config) { - // Don't save as the config exists in the current bundle and its content is the same. - return preset_name_src; - } else { - // Generate a new unique name. - preset_name_dst = preset_name_src + bundle_name; - Preset *preset_dup = nullptr; - for (size_t i = 1; (preset_dup = collection_dst.find_preset(preset_name_dst, false)) != nullptr; ++ i) { - if (preset_src->config == preset_dup->config) - // The preset has been already copied into collection_dst. - return preset_name_dst; - // Try to generate another name. - char buf[64]; - sprintf(buf, " (%d)", (int)i); - preset_name_dst = preset_name_src + buf + bundle_name; - } - } - assert(! preset_name_dst.empty()); - // Save preset_src->config into collection_dst under preset_name_dst. - // The "compatible_printers" field should not have been exported into a config.ini or a G-code anyway, - // but some of the alpha versions of Slic3r did. - ConfigOption *opt_compatible = preset_src->config.optptr("compatible_printers"); - if (opt_compatible != nullptr) { - assert(opt_compatible->type() == coStrings); - if (opt_compatible->type() == coStrings) - static_cast(opt_compatible)->values.clear(); - } - (collection_dst.type() == Preset::TYPE_FILAMENT ? - collection_dst.load_preset(path, preset_name_dst, preset_src->config, activate) : - // Only move the source config for non filament profiles, as single filament profile may be referenced multiple times. - collection_dst.load_preset(path, preset_name_dst, std::move(preset_src->config), activate)) - .is_external = true; - return preset_name_dst; - }; - load_one(this->prints, tmp_bundle.prints, tmp_bundle.prints .get_selected_preset_name(), true); - load_one(this->sla_prints, tmp_bundle.sla_prints, tmp_bundle.sla_prints .get_selected_preset_name(), true); - load_one(this->filaments, tmp_bundle.filaments, tmp_bundle.filaments .get_selected_preset_name(), true); - load_one(this->sla_materials, tmp_bundle.sla_materials, tmp_bundle.sla_materials.get_selected_preset_name(), true); - load_one(this->printers, tmp_bundle.printers, tmp_bundle.printers .get_selected_preset_name(), true); - this->update_multi_material_filament_presets(); - for (size_t i = 1; i < std::min(tmp_bundle.filament_presets.size(), this->filament_presets.size()); ++ i) - this->filament_presets[i] = load_one(this->filaments, tmp_bundle.filaments, tmp_bundle.filament_presets[i], false); - - this->update_compatible(PresetSelectCompatibleType::Never); - - sort_remove_duplicates(config_substitutions); - - //BBS: add config related logs - BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << boost::format(": finished, got %1% substitutions")%config_substitutions.size(); - return config_substitutions; -}*/ - -// Process the Config Bundle loaded as a Boost property tree. -// For each print, filament and printer preset (group defined by group_name), apply the inherited presets. -// The presets starting with '*' are considered non-terminal and they are -// removed through the flattening process by this function. -// This function will never fail, but it will produce error messages through boost::log. -// system_profiles will not be flattened, and they will be kept inside the "inherits" field -/*static void flatten_configbundle_hierarchy(boost::property_tree::ptree &tree, const std::string &group_name, const std::vector &system_profiles) -{ - namespace pt = boost::property_tree; - - // 1) For the group given by group_name, initialize the presets. - struct Prst { - Prst(const std::string &name, pt::ptree *node) : name(name), node(node) {} - // Name of this preset. If the name starts with '*', it is an intermediate preset, - // which will not make it into the result. - const std::string name; - // Link to the source boost property tree node, owned by tree. - pt::ptree *node; - // Link to the presets, from which this preset inherits. - std::vector inherits; - // Link to the presets, for which this preset is a direct parent. - std::vector parent_of; - // When running the Kahn's Topological sorting algorithm, this counter is decreased from inherits.size() to zero. - // A cycle is indicated, if the number does not drop to zero after the Kahn's algorithm finishes. - size_t num_incoming_edges_left = 0; - // Sorting by the name, to be used when inserted into std::set. - bool operator==(const Prst &rhs) const { return this->name == rhs.name; } - bool operator< (const Prst &rhs) const { return this->name < rhs.name; } - }; - // Find the presets, store them into a std::map, addressed by their names. - std::set presets; - std::string group_name_preset = group_name + ":"; - for (auto §ion : tree) - if (boost::starts_with(section.first, group_name_preset) && section.first.size() > group_name_preset.size()) - presets.emplace(section.first.substr(group_name_preset.size()), §ion.second); - // Fill in the "inherits" and "parent_of" members, report invalid inheritance fields. - for (const Prst &prst : presets) { - // Parse the list of comma separated values, possibly enclosed in quotes. - std::vector inherits_names; - std::vector inherits_system; - if (Slic3r::unescape_strings_cstyle(prst.node->get("inherits", ""), inherits_names)) { - // Resolve the inheritance by name. - std::vector &inherits_nodes = const_cast(prst).inherits; - for (const std::string &node_name : inherits_names) { - auto it_system = std::lower_bound(system_profiles.begin(), system_profiles.end(), node_name); - if (it_system != system_profiles.end() && *it_system == node_name) { - // Loading a user config budnle, this preset is derived from a system profile. - inherits_system.emplace_back(node_name); - } else { - auto it = presets.find(Prst(node_name, nullptr)); - if (it == presets.end()) - BOOST_LOG_TRIVIAL(error) << "flatten_configbundle_hierarchy: The preset " << prst.name << " inherits an unknown preset \"" << node_name << "\""; - else { - inherits_nodes.emplace_back(const_cast(&(*it))); - inherits_nodes.back()->parent_of.emplace_back(const_cast(&prst)); - } - } - } - } else { - BOOST_LOG_TRIVIAL(error) << "flatten_configbundle_hierarchy: The preset " << prst.name << " has an invalid \"inherits\" field"; - } - // Remove the "inherits" key, it has no meaning outside of the config bundle. - const_cast(prst.node)->erase("inherits"); - if (! inherits_system.empty()) { - // Loaded a user config bundle, where a profile inherits a system profile. - // User profile should be derived from a single system profile only. - assert(inherits_system.size() == 1); - if (inherits_system.size() > 1) - BOOST_LOG_TRIVIAL(error) << "flatten_configbundle_hierarchy: The preset " << prst.name << " inherits from more than single system preset"; - prst.node->put("inherits", Slic3r::escape_string_cstyle(inherits_system.front())); - } - } - - // 2) Create a linear ordering for the directed acyclic graph of preset inheritance. - // https://en.wikipedia.org/wiki/Topological_sorting - // Kahn's algorithm. - std::vector sorted; - { - // Initialize S with the set of all nodes with no incoming edge. - std::deque S; - for (const Prst &prst : presets) - if (prst.inherits.empty()) - S.emplace_back(const_cast(&prst)); - else - const_cast(&prst)->num_incoming_edges_left = prst.inherits.size(); - while (! S.empty()) { - Prst *n = S.front(); - S.pop_front(); - sorted.emplace_back(n); - for (Prst *m : n->parent_of) { - assert(m->num_incoming_edges_left > 0); - if (-- m->num_incoming_edges_left == 0) { - // We have visited all parents of m. - S.emplace_back(m); - } - } - } - if (sorted.size() < presets.size()) { - for (const Prst &prst : presets) - if (prst.num_incoming_edges_left) - BOOST_LOG_TRIVIAL(error) << "flatten_configbundle_hierarchy: The preset " << prst.name << " has cyclic dependencies"; - } - } - - // Apply the dependencies in their topological ordering. - for (Prst *prst : sorted) { - // Merge the preset nodes in their order of application. - // Iterate in a reverse order, so the last change will be placed first in merged. - for (auto it_inherits = prst->inherits.rbegin(); it_inherits != prst->inherits.rend(); ++ it_inherits) - for (auto it = (*it_inherits)->node->begin(); it != (*it_inherits)->node->end(); ++ it) - if (it->first == "renamed_from") { - // Don't inherit "renamed_from" flag, it does not make sense. The "renamed_from" flag only makes sense for a concrete preset. - if (boost::starts_with((*it_inherits)->name, "*")) - BOOST_LOG_TRIVIAL(error) << boost::format("Nonpublic intermediate preset %1% contains a \"renamed_from\" field, which is ignored") % (*it_inherits)->name; - } else if (prst->node->find(it->first) == prst->node->not_found()) - prst->node->add_child(it->first, it->second); - } - - // Remove the "internal" presets from the ptree. These presets are marked with '*'. - group_name_preset += '*'; - for (auto it_section = tree.begin(); it_section != tree.end(); ) { - if (boost::starts_with(it_section->first, group_name_preset) && it_section->first.size() > group_name_preset.size()) - // Remove the "internal" preset from the ptree. - it_section = tree.erase(it_section); - else - // Keep the preset. - ++ it_section; - } -}*/ - -// preset_bundle is set when loading user config bundles, which must not overwrite the system profiles. -/*static void flatten_configbundle_hierarchy(boost::property_tree::ptree &tree, const PresetBundle *preset_bundle) -{ - flatten_configbundle_hierarchy(tree, "print", preset_bundle ? preset_bundle->prints.system_preset_names() : std::vector()); - flatten_configbundle_hierarchy(tree, "filament", preset_bundle ? preset_bundle->filaments.system_preset_names() : std::vector()); - flatten_configbundle_hierarchy(tree, "sla_print", preset_bundle ? preset_bundle->sla_prints.system_preset_names() : std::vector()); - flatten_configbundle_hierarchy(tree, "sla_material", preset_bundle ? preset_bundle->sla_materials.system_preset_names() : std::vector()); - flatten_configbundle_hierarchy(tree, "printer", preset_bundle ? preset_bundle->printers.system_preset_names() : std::vector()); -}*/ - -// Load a config bundle file, into presets and store the loaded presets into separate files -// of the local configuration directory. -/*std::pair PresetBundle::load_configbundle( - const std::string &path, LoadConfigBundleAttributes flags, ForwardCompatibilitySubstitutionRule compatibility_rule) -{ - // Enable substitutions for user config bundle, throw an exception when loading a system profile. - ConfigSubstitutionContext substitution_context { compatibility_rule }; - PresetsConfigSubstitutions substitutions; - - //BBS: add config related logs - BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << boost::format(" enter, path %1%, compatibility_rule %2%")%path.c_str()%compatibility_rule; - if (flags.has(LoadConfigBundleAttribute::ResetUserProfile) || flags.has(LoadConfigBundleAttribute::LoadSystem)) - // Reset this bundle, delete user profile files if SaveImported. - this->reset(flags.has(LoadConfigBundleAttribute::SaveImported)); - - // 1) Read the complete config file into a boost::property_tree. - namespace pt = boost::property_tree; - pt::ptree tree; - boost::nowide::ifstream ifs(path); - try { - pt::read_ini(ifs, tree); - } catch (const boost::property_tree::ini_parser::ini_parser_error &err) { - throw Slic3r::RuntimeError(format("Failed loading config bundle \"%1%\"\nError: \"%2%\" at line %3%", path, err.message(), err.line()).c_str()); - } - - const VendorProfile *vendor_profile = nullptr; - if (flags.has(LoadConfigBundleAttribute::LoadSystem) || flags.has(LoadConfigBundleAttribute::LoadVendorOnly)) { - auto vp = VendorProfile::from_ini(tree, path); - if (vp.models.size() == 0) { - BOOST_LOG_TRIVIAL(error) << boost::format("Vendor bundle: `%1%`: No printer model defined.") % path; - return std::make_pair(PresetsConfigSubstitutions{}, 0); - } else if (vp.num_variants() == 0) { - BOOST_LOG_TRIVIAL(error) << boost::format("Vendor bundle: `%1%`: No printer variant defined") % path; - return std::make_pair(PresetsConfigSubstitutions{}, 0); - } - vendor_profile = &this->vendors.insert({vp.id, vp}).first->second; - } - - //BBS: add config related logs - if (vendor_profile) - BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << boost::format(", loaded vendor profile, name %1%, id %2%, version %3%")%vendor_profile->name%vendor_profile->id%vendor_profile->config_version.to_string(); - - if (flags.has(LoadConfigBundleAttribute::LoadVendorOnly)) - return std::make_pair(PresetsConfigSubstitutions{}, 0); - - // 1.5) Flatten the config bundle by applying the inheritance rules. Internal profiles (with names starting with '*') are removed. - // If loading a user config bundle, do not flatten with the system profiles, but keep the "inherits" flag intact. - flatten_configbundle_hierarchy(tree, flags.has(LoadConfigBundleAttribute::LoadSystem) ? nullptr : this); - - // 2) Parse the property_tree, extract the active preset names and the profiles, save them into local config files. - // Parse the obsolete preset names, to be deleted when upgrading from the old configuration structure. - std::vector loaded_prints; - std::vector loaded_filaments; - std::vector loaded_sla_prints; - std::vector loaded_sla_materials; - std::vector loaded_printers; - std::vector loaded_physical_printers; - std::string active_print; - std::vector active_filaments; - std::string active_sla_print; - std::string active_sla_material; - std::string active_printer; - std::string active_physical_printer; - size_t presets_loaded = 0; - size_t ph_printers_loaded = 0; - - for (const auto §ion : tree) { - PresetCollection *presets = nullptr; - std::string preset_name; - PhysicalPrinterCollection *ph_printers = nullptr; - std::string ph_printer_name; - if (boost::starts_with(section.first, "print:")) { - presets = &this->prints; - preset_name = section.first.substr(6); - } else if (boost::starts_with(section.first, "filament:")) { - presets = &this->filaments; - preset_name = section.first.substr(9); - } else if (boost::starts_with(section.first, "sla_print:")) { - presets = &this->sla_prints; - preset_name = section.first.substr(10); - } else if (boost::starts_with(section.first, "sla_material:")) { - presets = &this->sla_materials; - preset_name = section.first.substr(13); - } else if (boost::starts_with(section.first, "printer:")) { - presets = &this->printers; - preset_name = section.first.substr(8); - } else if (boost::starts_with(section.first, "physical_printer:")) { - ph_printers = &this->physical_printers; - ph_printer_name = section.first.substr(17); - } else if (section.first == "presets") { - // Load the names of the active presets. - for (auto &kvp : section.second) { - if (kvp.first == "print") { - active_print = kvp.second.data(); - } else if (boost::starts_with(kvp.first, "filament")) { - int idx = 0; - if (kvp.first == "filament" || sscanf(kvp.first.c_str(), "filament_%d", &idx) == 1) { - if (int(active_filaments.size()) <= idx) - active_filaments.resize(idx + 1, std::string()); - active_filaments[idx] = kvp.second.data(); - } - } else if (kvp.first == "sla_print") { - active_sla_print = kvp.second.data(); - } else if (kvp.first == "sla_material") { - active_sla_material = kvp.second.data(); - } else if (kvp.first == "printer") { - active_printer = kvp.second.data(); - } else if (kvp.first == "physical_printer") { - active_physical_printer = kvp.second.data(); - } - } - } else if (section.first == "obsolete_presets") { - // Parse the names of obsolete presets. These presets will be deleted from user's - // profile directory on installation of this vendor preset. - for (auto &kvp : section.second) { - std::vector *dst = nullptr; - if (kvp.first == "print") - dst = &this->obsolete_presets.prints; - else if (kvp.first == "filament") - dst = &this->obsolete_presets.filaments; - else if (kvp.first == "sla_print") - dst = &this->obsolete_presets.sla_prints; - else if (kvp.first == "sla_material") - dst = &this->obsolete_presets.sla_materials; - else if (kvp.first == "printer") - dst = &this->obsolete_presets.printers; - if (dst) - unescape_strings_cstyle(kvp.second.data(), *dst); - } - } else if (section.first == "settings") { -#ifdef SUPPORT_AUTO_CENTER - // Load the settings. - for (auto &kvp : section.second) { - if (kvp.first == "autocenter") { - } - } -#endif - } else - // Ignore an unknown section. - continue; - if (presets != nullptr) { - // Load the print, filament or printer preset. - const DynamicPrintConfig *default_config = nullptr; - DynamicPrintConfig config; - std::string alias_name; - std::vector renamed_from; - try { - auto parse_config_section = [§ion, &alias_name, &renamed_from, &substitution_context, &path](DynamicPrintConfig &config) { - substitution_context.substitutions.clear(); - for (auto &kvp : section.second) { - if (kvp.first == "alias") - alias_name = kvp.second.data(); - else if (kvp.first == "renamed_from") { - if (! unescape_strings_cstyle(kvp.second.data(), renamed_from)) { - BOOST_LOG_TRIVIAL(error) << "Error in a Vendor Config Bundle \"" << path << "\": The preset \"" << - section.first << "\" contains invalid \"renamed_from\" key, which is being ignored."; - } - } - // Throws on parsing error. For system presets, no substituion is being done, but an exception is thrown. - config.set_deserialize(kvp.first, kvp.second.data(), substitution_context); - } - }; - if (presets == &this->printers) { - // Select the default config based on the printer_technology field extracted from kvp. - DynamicPrintConfig config_src; - parse_config_section(config_src); - default_config = &presets->default_preset_for(config_src).config; - config = *default_config; - config.apply(config_src); - } else { - default_config = &presets->default_preset().config; - config = *default_config; - parse_config_section(config); - } - } catch (const ConfigurationError &e) { - throw ConfigurationError(format("Invalid configuration bundle \"%1%\", section [%2%]: ", path, section.first) + e.what()); - } - Preset::normalize(config); - // Report configuration fields, which are misplaced into a wrong group. - std::string incorrect_keys = Preset::remove_invalid_keys(config, *default_config); - if (! incorrect_keys.empty()) - BOOST_LOG_TRIVIAL(error) << "Error in a Vendor Config Bundle \"" << path << "\": The printer preset \"" << - section.first << "\" contains the following incorrect keys: " << incorrect_keys << ", which were removed"; - if (flags.has(LoadConfigBundleAttribute::LoadSystem) && presets == &printers) { - // Filter out printer presets, which are not mentioned in the vendor profile. - // These presets are considered not installed. - auto printer_model = config.opt_string("printer_model"); - if (printer_model.empty()) { - BOOST_LOG_TRIVIAL(error) << "Error in a Vendor Config Bundle \"" << path << "\": The printer preset \"" << - section.first << "\" defines no printer model, it will be ignored."; - continue; - } - auto printer_variant = config.opt_string("printer_variant"); - if (printer_variant.empty()) { - BOOST_LOG_TRIVIAL(error) << "Error in a Vendor Config Bundle \"" << path << "\": The printer preset \"" << - section.first << "\" defines no printer variant, it will be ignored."; - continue; - } - auto it_model = std::find_if(vendor_profile->models.cbegin(), vendor_profile->models.cend(), - [&](const VendorProfile::PrinterModel &m) { return m.id == printer_model; } - ); - if (it_model == vendor_profile->models.end()) { - BOOST_LOG_TRIVIAL(error) << "Error in a Vendor Config Bundle \"" << path << "\": The printer preset \"" << - section.first << "\" defines invalid printer model \"" << printer_model << "\", it will be ignored."; - continue; - } - auto it_variant = it_model->variant(printer_variant); - if (it_variant == nullptr) { - BOOST_LOG_TRIVIAL(error) << "Error in a Vendor Config Bundle \"" << path << "\": The printer preset \"" << - section.first << "\" defines invalid printer variant \"" << printer_variant << "\", it will be ignored."; - continue; - } - const Preset *preset_existing = presets->find_preset(section.first, false); - if (preset_existing != nullptr) { - BOOST_LOG_TRIVIAL(error) << "Error in a Vendor Config Bundle \"" << path << "\": The printer preset \"" << - section.first << "\" has already been loaded from another Config Bundle."; - continue; - } - } else if (! flags.has(LoadConfigBundleAttribute::LoadSystem)) { - // This is a user config bundle. - const Preset *existing = presets->find_preset(preset_name, false); - if (existing != nullptr) { - if (existing->is_system) { - assert(existing->vendor != nullptr); - BOOST_LOG_TRIVIAL(error) << "Error in a user provided Config Bundle \"" << path << "\": The " << presets->name() << " preset \"" << - existing->name << "\" is a system preset of vendor " << existing->vendor->name << " and it will be ignored."; - continue; - } else { - assert(existing->vendor == nullptr); - BOOST_LOG_TRIVIAL(trace) << "A " << presets->name() << " preset \"" << existing->name << "\" was overwritten with a preset from user Config Bundle \"" << path << "\""; - } - } else { - BOOST_LOG_TRIVIAL(trace) << "A new " << presets->name() << " preset \"" << preset_name << "\" was imported from user Config Bundle \"" << path << "\""; - } - } - // Decide a full path to this .ini file. - auto file_name = boost::algorithm::iends_with(preset_name, ".json") ? preset_name : preset_name + ".json"; - //BBS: change directoties by design - auto file_path = (boost::filesystem::path(data_dir()) /PRESET_SYSTEM_DIR/ presets->section_name() / file_name).make_preferred(); - // Load the preset into the list of presets, save it to disk. - Preset &loaded = presets->load_preset(file_path.string(), preset_name, std::move(config), false); - if (flags.has(LoadConfigBundleAttribute::SaveImported)) - loaded.save(nullptr); - if (flags.has(LoadConfigBundleAttribute::LoadSystem)) { - loaded.is_system = true; - loaded.vendor = vendor_profile; - } - - // Derive the profile logical name aka alias from the preset name if the alias was not stated explicitely. - if (alias_name.empty()) { - size_t end_pos = preset_name.find_first_of("@"); - if (end_pos != std::string::npos) { - alias_name = preset_name.substr(0, end_pos); - if (renamed_from.empty()) - // Add the preset name with the '@' character removed into the "renamed_from" list. - renamed_from.emplace_back(alias_name + preset_name.substr(end_pos + 1)); - boost::trim_right(alias_name); - } - } - if (alias_name.empty()) - loaded.alias = preset_name; - else - loaded.alias = std::move(alias_name); - loaded.renamed_from = std::move(renamed_from); - if (! substitution_context.empty()) - substitutions.push_back({ - preset_name, presets->type(), PresetConfigSubstitutions::Source::ConfigBundle, - std::string(), std::move(substitution_context.substitutions) }); - ++ presets_loaded; - //BBS: add config related logs - BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << boost::format(", got preset %1%, from %2%")%loaded.name %path; - } - - if (ph_printers != nullptr) { - // Load the physical printer - const DynamicPrintConfig& default_config = ph_printers->default_config(); - DynamicPrintConfig config = default_config; - - substitution_context.substitutions.clear(); - try { - for (auto& kvp : section.second) - config.set_deserialize(kvp.first, kvp.second.data(), substitution_context); - } catch (const ConfigurationError &e) { - throw ConfigurationError(format("Invalid configuration bundle \"%1%\", section [%2%]: ", path, section.first) + e.what()); - } - - // Report configuration fields, which are misplaced into a wrong group. - std::string incorrect_keys = Preset::remove_invalid_keys(config, default_config); - if (!incorrect_keys.empty()) - BOOST_LOG_TRIVIAL(error) << "Error in a Vendor Config Bundle \"" << path << "\": The physical printer \"" << - section.first << "\" contains the following incorrect keys: " << incorrect_keys << ", which were removed"; - - const PhysicalPrinter* ph_printer_existing = ph_printers->find_printer(ph_printer_name, false); - if (ph_printer_existing != nullptr) { - BOOST_LOG_TRIVIAL(error) << "Error in a Vendor Config Bundle \"" << path << "\": The physical printer \"" << - section.first << "\" has already been loaded from another Config Bundle."; - continue; - } - - // Decide a full path to this .ini file. - //BBS: change directoties by design - auto file_name = boost::algorithm::iends_with(ph_printer_name, ".json") ? ph_printer_name : ph_printer_name + ".json"; - auto file_path = (boost::filesystem::path(data_dir())/PRESET_SYSTEM_DIR/"physical_printer" / file_name).make_preferred(); - // Load the preset into the list of presets, save it to disk. - ph_printers->load_printer(file_path.string(), ph_printer_name, std::move(config), false, flags.has(LoadConfigBundleAttribute::SaveImported)); - if (! substitution_context.empty()) - substitutions.push_back({ - ph_printer_name, Preset::TYPE_PHYSICAL_PRINTER, PresetConfigSubstitutions::Source::ConfigBundle, - std::string(), std::move(substitution_context.substitutions) }); - ++ ph_printers_loaded; - } - } - - // 3) Activate the presets and physical printer if any exists. - if (! flags.has(LoadConfigBundleAttribute::LoadSystem)) { - if (! active_print.empty()) - prints.select_preset_by_name(active_print, true); - if (! active_sla_print.empty()) - sla_prints.select_preset_by_name(active_sla_print, true); - if (! active_sla_material.empty()) - sla_materials.select_preset_by_name(active_sla_material, true); - if (! active_printer.empty()) - printers.select_preset_by_name(active_printer, true); - if (! active_physical_printer.empty()) - physical_printers.select_printer(active_physical_printer, active_printer); - // Activate the first filament preset. - if (! active_filaments.empty() && ! active_filaments.front().empty()) - filaments.select_preset_by_name(active_filaments.front(), true); - this->update_multi_material_filament_presets(); - for (size_t i = 0; i < std::min(this->filament_presets.size(), active_filaments.size()); ++ i) - this->filament_presets[i] = filaments.find_preset(active_filaments[i], true)->name; - this->update_compatible(PresetSelectCompatibleType::Never); - } - - //BBS: add config related logs - BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << boost::format(", finished, presets_loaded %1%, ph_printers_loaded %2%")%presets_loaded %ph_printers_loaded; - return std::make_pair(std::move(substitutions), presets_loaded + ph_printers_loaded); -}*/ - //BBS: Load a config bundle file from json std::pair PresetBundle::load_vendor_configs_from_json( const std::string &path, const std::string &vendor_name, LoadConfigBundleAttributes flags, ForwardCompatibilitySubstitutionRule compatibility_rule, const PresetBundle* base_bundle) @@ -4002,179 +3336,6 @@ void PresetBundle::update_compatible(PresetSelectCompatibleType select_other_pri BOOST_LOG_TRIVIAL(info) << boost::format("update_compatibility for all presets exit"); } -//BBS: add a API to dump current configbundle as default configbundle -/*void PresetBundle::export_current_configbundle(const std::string &path) -{ - boost::nowide::ofstream c; - c.open(path, std::ios::out | std::ios::trunc); - - c << "# generate the configbundle for BBL" << std::endl; - - const Preset& print_selected_preset = this->prints.get_selected_preset(); - const Preset* system_print = NULL; - const Preset& filament_selected_preset = this->filaments.get_selected_preset(); - const Preset* system_filament = NULL; - const Preset& printer_selected_preset = this->printers.get_selected_preset(); - const Preset* system_printer = NULL; - - // Export the print - std::string print_bbl = "@BBL-3DP"; - size_t pos = print_selected_preset.name.find(print_bbl); - if (std::string::npos != pos) - { - std::string system_print_name = print_selected_preset.name.substr(0, pos + print_bbl.size()); - system_print = this->prints.find_preset(system_print_name); - if (system_print) - { - c << std::endl << "[" << this->prints.section_name() << ":" << system_print->name << "]" << std::endl; - for (const std::string &opt_key : print_selected_preset.config.keys()) - { - if (!opt_key.compare("inherits")) - continue; - const ConfigOption *option1 = system_print->config.option(opt_key); - const ConfigOption *option2 = print_selected_preset.config.option(opt_key); - if (option1 && option2 && (*option1 != *option2)) - c << opt_key << " = " << print_selected_preset.config.opt_serialize(opt_key) << std::endl; - } - c << std::endl; - } - } - - // Export the filament - std::string filament_bbl = "@BBL-3DP"; - pos = filament_selected_preset.name.find(filament_bbl); - if (std::string::npos != pos) - { - std::string system_filamant_name = filament_selected_preset.name.substr(0, pos + filament_bbl.size()); - system_filament = this->filaments.find_preset(system_filamant_name); - if (system_filament) - { - c << std::endl << "[" << this->filaments.section_name() << ":" << system_filament->name << "]" << std::endl; - for (const std::string &opt_key : filament_selected_preset.config.keys()) - { - if (!opt_key.compare("inherits")) - continue; - const ConfigOption *option1 = system_filament->config.option(opt_key); - const ConfigOption *option2 = filament_selected_preset.config.option(opt_key); - if (option1 && option2 && (*option1 != *option2)) - c << opt_key << " = " << filament_selected_preset.config.opt_serialize(opt_key) << std::endl; - } - c << std::endl; - } - } - - // Export the printer - std::string printer_bbl = "BBL-3DP-001"; - pos = printer_selected_preset.name.find(printer_bbl); - if (std::string::npos != pos) - { - std::string system_printer_name = printer_selected_preset.name.substr(0, pos + printer_bbl.size()); - system_printer = this->printers.find_preset(system_printer_name); - if (system_printer) - { - c << std::endl << "[" << this->printers.section_name() << ":" << system_printer->name << "]" << std::endl; - for (const std::string &opt_key : printer_selected_preset.config.keys()) - { - c << opt_key << " = " << printer_selected_preset.config.opt_serialize(opt_key) << std::endl; - } - c << std::endl; - } - } - - c.close(); -}*/ - - -//void PresetBundle::export_configbundle(const std::string &path, bool export_system_settings, bool export_physical_printers/* = false*/) -//{ -// boost::nowide::ofstream c; -// c.open(path, std::ios::out | std::ios::trunc); -// -// // Put a comment at the first line including the time stamp and Slic3r version. -// c << "# " << Slic3r::header_slic3r_generated() << std::endl; -// -// // Export the print, filament and printer profiles. -// -// for (const PresetCollection *presets : { -// (const PresetCollection*)&this->prints, (const PresetCollection*)&this->filaments, -// (const PresetCollection*)&this->sla_prints, (const PresetCollection*)&this->sla_materials, -// (const PresetCollection*)&this->printers }) { -// for (const Preset &preset : (*presets)()) { -// //BBS: add project embedded preset logic and refine is_external -// if (preset.is_default || preset.is_project_embedded || (preset.is_system && ! export_system_settings)) -// //if (preset.is_default || preset.is_external || (preset.is_system && ! export_system_settings)) -// // Only export the common presets, not external files or the default preset. -// continue; -// c << std::endl << "[" << presets->section_name() << ":" << preset.name << "]" << std::endl; -// for (const std::string &opt_key : preset.config.keys()) -// c << opt_key << " = " << preset.config.opt_serialize(opt_key) << std::endl; -// } -// } -// -// if (export_physical_printers) { -// for (const PhysicalPrinter& ph_printer : this->physical_printers) { -// c << std::endl << "[physical_printer:" << ph_printer.name << "]" << std::endl; -// for (const std::string& opt_key : ph_printer.config.keys()) -// c << opt_key << " = " << ph_printer.config.opt_serialize(opt_key) << std::endl; -// } -// } -// -// // Export the names of the active presets. -// c << std::endl << "[presets]" << std::endl; -// c << "print = " << this->prints.get_selected_preset_name() << std::endl; -// c << "sla_print = " << this->sla_prints.get_selected_preset_name() << std::endl; -// c << "sla_material = " << this->sla_materials.get_selected_preset_name() << std::endl; -// c << "printer = " << this->printers.get_selected_preset_name() << std::endl; -// for (size_t i = 0; i < this->filament_presets.size(); ++ i) { -// char suffix[64]; -// if (i > 0) -// sprintf(suffix, "_%d", (int)i); -// else -// suffix[0] = 0; -// c << "filament" << suffix << " = " << this->filament_presets[i] << std::endl; -// } -// -// if (export_physical_printers && this->physical_printers.get_selected_idx() >= 0) -// c << "physical_printer = " << this->physical_printers.get_selected_printer_name() << std::endl; -//#if 0 -// // Export the following setting values from the provided setting repository. -// static const char *settings_keys[] = { "autocenter" }; -// c << "[settings]" << std::endl; -// for (size_t i = 0; i < sizeof(settings_keys) / sizeof(settings_keys[0]); ++ i) -// c << settings_keys[i] << " = " << settings.serialize(settings_keys[i]) << std::endl; -//#endif -// -// c.close(); -//} - -//BBS: add export system preset functions -/*void PresetBundle::export_system_configs(const std::string &path) -{ - // Export the print, filament and printer profiles. - for (const PresetCollection *presets : { - (const PresetCollection*)&this->prints, (const PresetCollection*)&this->filaments, - (const PresetCollection*)&this->sla_prints, (const PresetCollection*)&this->sla_materials, - (const PresetCollection*)&this->printers }) { - for (const Preset &preset : (*presets)()) { - if (preset.is_system) - { - // Only export the system presets - boost::nowide::ofstream c; - std::string file_path = path + std::string("\\") + preset.name; - - c.open(file_path, std::ios::out | std::ios::trunc); - - // Put a comment at the first line including the time stamp and Slic3r version. - c << "# " << Slic3r::header_slic3r_generated() << std::endl; - //c << std::endl << "[" << presets->section_name() << ":" << preset.name << "]" << std::endl; - for (const std::string &opt_key : preset.config.keys()) - c << opt_key << " = " << preset.config.opt_serialize(opt_key) << std::endl; - - c.close(); - } - } - } -}*/ std::vector PresetBundle::export_current_configs(const std::string & path, std::function override_confirm, diff --git a/src/slic3r/GUI/WebGuideDialog.cpp b/src/slic3r/GUI/WebGuideDialog.cpp index db0451c475..479726a9ff 100644 --- a/src/slic3r/GUI/WebGuideDialog.cpp +++ b/src/slic3r/GUI/WebGuideDialog.cpp @@ -580,13 +580,6 @@ void GuideFrame::OnError(wxWebViewEvent &evt) void GuideFrame::OnScriptResponseMessage(wxCommandEvent &WXUNUSED(evt)) { - // if (!m_response_js.empty()) - //{ - // RunScript(m_response_js); - //} - - // RunScript("This is a message to Web!"); - // RunScript("postMessage(\"AABBCCDD\");"); } bool GuideFrame::IsFirstUse() @@ -602,24 +595,6 @@ bool GuideFrame::IsFirstUse() return true; } -/*int GuideFrame::CopyDir(const boost::filesystem::path &from_dir, const boost::filesystem::path &to_dir) -{ - if (!boost::filesystem::is_directory(from_dir)) return -1; - // i assume to_dir.parent surely exists - if (!boost::filesystem::is_directory(to_dir)) boost::filesystem::create_directory(to_dir); - for (auto &dir_entry : boost::filesystem::directory_iterator(from_dir)) { - if (!boost::filesystem::is_directory(dir_entry.path())) { - std::string em; - CopyFileResult cfr = copy_file(dir_entry.path().string(), (to_dir / dir_entry.path().filename()).string(), em, false); - if (cfr != SUCCESS) { BOOST_LOG_TRIVIAL(error) << "Error when copying files from " << from_dir << " to " << to_dir << ": " << em; } - } else { - CopyDir(dir_entry.path(), to_dir / dir_entry.path().filename()); - } - } - - return 0; -}*/ - int GuideFrame::SaveProfile() { // SoftFever: don't collect info @@ -637,77 +612,6 @@ int GuideFrame::SaveProfile() m_MainPtr->app_config->save(); - //Load BBS Conf - /*wxString strConfPath = wxGetApp().app_config->config_path(); - json jCfg; - std::ifstream(w2s(strConfPath)) >> jCfg; - - //model - jCfg["models"] = json::array(); - int nM = m_ProfileJson["model"].size(); - int nModelChoose = 0; - for (int m = 0; m < nM; m++) - { - json amodel = m_ProfileJson["model"][m]; - - amodel["nozzle_diameter"] = amodel["nozzle_selected"]; - amodel.erase("nozzle_selected"); - amodel.erase("preview"); - amodel.erase("sub_path"); - amodel.erase("cover"); - amodel.erase("materials"); - - std::string ss = amodel["nozzle_diameter"]; - if (ss.compare("") != 0) { - nModelChoose++; - jCfg["models"].push_back(amodel); - } - } - if (nModelChoose == 0) - jCfg.erase("models"); - - if (nModelChoose > 0) { - // filament - jCfg["filaments"] = json::array(); - for (auto it = m_ProfileJson["filament"].begin(); it != m_ProfileJson["filament"].end(); ++it) { - if (it.value()["selected"] == 1) { jCfg["filaments"].push_back(it.key()); } - } - - // Preset - jCfg["presets"]["filaments"] = json::array(); - jCfg["presets"]["filaments"].push_back(jCfg["filaments"][0]); - - std::string PresetMachine = m_ProfileJson["machine"][0]["name"]; - jCfg["presets"]["machine"] = PresetMachine; - - int nTotal = m_ProfileJson["process"].size(); - int nSet = nTotal / 2; - if (nSet > 0) nSet--; - - std::string sMode = m_ProfileJson["process"][nSet]["name"]; - jCfg["presets"]["process"] = sMode; - - } else { - jCfg["presets"]["filaments"] = json::array(); - jCfg["presets"]["filaments"].push_back("Default Filament"); - - jCfg["presets"]["machine"] = "Default Printer"; - - jCfg["presets"]["process"] = "Default Setting"; - } - - std::string sOut = jCfg.dump(4, ' ', false); - - std::ofstream output_file(w2s(strConfPath)); - output_file << sOut; - output_file.close(); - - //Copy Profiles - if (bbl_bundle_rsrc) - { - CopyDir(rsrc_vendor_dir,vendor_dir); - }*/ - std::string strAll = m_ProfileJson.dump(-1, ' ', false, json::error_handler_t::ignore); BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << "before save to app_config: "<< std::endl<path().string()); + loaded_vendors.insert(w2s(strVendor)); } } @@ -1228,185 +1137,6 @@ void StringReplace(string &strBase, string strSrc, string strDes) } -//int GuideFrame::LoadProfileFamily(std::string strVendor, std::string strFilePath) -//{ -// //wxString strFolder = strFilePath.BeforeLast(boost::filesystem::path::preferred_separator); -// boost::filesystem::path file_path(strFilePath); -// boost::filesystem::path vendor_dir = boost::filesystem::absolute(file_path.parent_path()/ strVendor).make_preferred(); -// BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(", vendor path %1%.")% vendor_dir.string(); -// try { -// -// //wxLogMessage("GUIDE: json_path1 %s", w2s(strFilePath)); -// -// std::string contents; -// LoadFile(strFilePath, contents); -// //wxLogMessage("GUIDE: json_path1 content: %s", contents); -// json jLocal=json::parse(contents); -// //wxLogMessage("GUIDE: json_path1 Loaded"); -// -// // BBS:models -// json pmodels = jLocal["machine_model_list"]; -// int nsize = pmodels.size(); -// -// BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(", got %1% machine models")%nsize; -// -// for (int n = 0; n < nsize; n++) { -// json OneModel = pmodels.at(n); -// -// OneModel["model"] = OneModel["name"]; -// OneModel.erase("name"); -// -// std::string s1 = OneModel["model"]; -// std::string s2 = OneModel["sub_path"]; -// -// boost::filesystem::path sub_path = boost::filesystem::absolute(vendor_dir / s2).make_preferred(); -// std::string sub_file = sub_path.string(); -// -// //wxLogMessage("GUIDE: json_path2 %s", w2s(ModelFilePath)); -// LoadFile(sub_file, contents); -// //wxLogMessage("GUIDE: json_path2 content: %s", contents); -// json pm=json::parse(contents); -// //wxLogMessage("GUIDE: json_path2 loaded"); -// -// OneModel["vendor"] = strVendor; -// std::string NozzleOpt = pm["nozzle_diameter"]; -// StringReplace(NozzleOpt, " ", ""); -// OneModel["nozzle_diameter"] = NozzleOpt; -// OneModel["materials"] = pm["default_materials"]; -// -// //wxString strCoverPath = wxString::Format("%s\\%s\\%s_cover.png", strFolder, strVendor, std::string(s1.mb_str())); -// std::string cover_file = s1+"_cover.png"; -// boost::filesystem::path cover_path = boost::filesystem::absolute(vendor_dir / cover_file).make_preferred(); -// OneModel["cover"] = cover_path.string(); -// -// OneModel["nozzle_selected"] = ""; -// -// m_ProfileJson["model"].push_back(OneModel); -// } -// -// // BBS:Machine -// json pmachine = jLocal["machine_list"]; -// nsize = pmachine.size(); -// BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(", got %1% machines")%nsize; -// for (int n = 0; n < nsize; n++) { -// json OneMachine = pmachine.at(n); -// -// std::string s1 = OneMachine["name"]; -// std::string s2 = OneMachine["sub_path"]; -// -// //wxString ModelFilePath = wxString::Format("%s\\%s\\%s", strFolder, strVendor, s2); -// boost::filesystem::path sub_path = boost::filesystem::absolute(vendor_dir / s2).make_preferred(); -// std::string sub_file = sub_path.string(); -// LoadFile(sub_file, contents); -// json pm = json::parse(contents); -// -// std::string strInstant = pm["instantiation"]; -// if (strInstant.compare("true") == 0) { -// OneMachine["model"] = pm["printer_model"]; -// -// m_ProfileJson["machine"].push_back(OneMachine); -// } -// } -// -// // BBS:Filament -// json pFilament = jLocal["filament_list"]; -// nsize = pFilament.size(); -// -// int nFalse = 0; -// int nModel = 0; -// int nFinish = 0; -// BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(", got %1% filaments")%nsize; -// for (int n = 0; n < nsize; n++) { -// json OneFF = pFilament.at(n); -// -// std::string s1 = OneFF["name"]; -// std::string s2 = OneFF["sub_path"]; -// -// if (!m_ProfileJson["filament"].contains(s1)) -// { -// //wxString ModelFilePath = wxString::Format("%s\\%s\\%s", strFolder, strVendor, s2); -// boost::filesystem::path sub_path = boost::filesystem::absolute(vendor_dir / s2).make_preferred(); -// std::string sub_file = sub_path.string(); -// LoadFile(sub_file, contents); -// json pm = json::parse(contents); -// -// std::string strInstant = pm["instantiation"]; -// if (strInstant == "true") { -// std::string sV; -// std::string sT; -// -// int nRet = GetFilamentInfo(sub_file, sV, sT); -// if (nRet != 0) continue; -// -// OneFF["vendor"] = sV; -// OneFF["type"] = sT; -// -// OneFF["models"] = ""; -// OneFF["selected"] = 0; -// } -// else -// continue; -// -// } else { -// OneFF = m_ProfileJson["filament"][s1]; -// } -// -// std::string vModel = ""; -// int nm = m_ProfileJson["model"].size(); -// int bFind = 0; -// for (int m = 0; m < nm; m++) { -// std::string strFF = m_ProfileJson["model"][m]["materials"]; -// strFF = (boost::format(";%1%;")%strFF).str(); -// std::string strTT = (boost::format(";%1%;")%s1).str(); -// if (strFF.find(strTT) != std::string::npos) { -// std::string sModel = m_ProfileJson["model"][m]["model"]; -// -// vModel = (boost::format("%1%[%2%]")%vModel %sModel).str(); -// bFind = 1; -// } -// } -// -// OneFF["models"] = vModel; -// -// m_ProfileJson["filament"][s1] = OneFF; -// } -// -// //process -// json pProcess = jLocal["process_list"]; -// nsize = pProcess.size(); -// BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(", got %1% processes")%nsize; -// for (int n = 0; n < nsize; n++) { -// json OneProcess = pProcess.at(n); -// -// std::string s2 = OneProcess["sub_path"]; -// //wxString ModelFilePath = wxString::Format("%s\\%s\\%s", strFolder, strVendor, s2); -// boost::filesystem::path sub_path = boost::filesystem::absolute(vendor_dir / s2).make_preferred(); -// std::string sub_file = sub_path.string(); -// LoadFile(sub_file, contents); -// json pm = json::parse(contents); -// -// std::string bInstall = pm["instantiation"]; -// if (bInstall == "true") -// { -// m_ProfileJson["process"].push_back(OneProcess); -// } -// } -// -// } -// catch(nlohmann::detail::parse_error &err) { -// BOOST_LOG_TRIVIAL(error) << __FUNCTION__<< ": parse "< Date: Wed, 22 Jan 2025 23:59:46 +0800 Subject: [PATCH 07/25] Fix a typo --- .../OrcaFilamentLibrary/filament/Generic ASA @System.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/profiles/OrcaFilamentLibrary/filament/Generic ASA @System.json b/resources/profiles/OrcaFilamentLibrary/filament/Generic ASA @System.json index a1a3b7dff1..a271c38eb0 100644 --- a/resources/profiles/OrcaFilamentLibrary/filament/Generic ASA @System.json +++ b/resources/profiles/OrcaFilamentLibrary/filament/Generic ASA @System.json @@ -5,7 +5,7 @@ "name": "Generic ASA @System", "from": "system", "instantiation": "true", - "renamed_from": "My Generic ADA", + "renamed_from": "My Generic ASA", "inherits": "fdm_filament_asa", "compatible_printers": [] } \ No newline at end of file From 02f5bc0d22349ef2386fca8ae88ea88b9e9e2ec6 Mon Sep 17 00:00:00 2001 From: DeltaMaker Date: Thu, 23 Jan 2025 18:11:44 -0500 Subject: [PATCH 08/25] Add profiles for DeltaMaker 3D printers (#7712) * Initial DM2 Profiles Add profiles for DeltaMaker 3D printers * Made changes to machine/fdm_machine_common.json and process/fdm_process_common.json to validate successfully using the Orca profile validator * Update DeltaMaker 2.json Corrected the capitalization of the file name. --------- Co-authored-by: Noisyfox Co-authored-by: SoftFever Co-authored-by: Christian Coleman --- resources/profiles/DeltaMaker.json | 91 ++++++++++++++ .../DeltaMaker/DeltaMaker 2T_cover.png | Bin 0 -> 67085 bytes .../DeltaMaker/DeltaMaker 2XT_cover.png | Bin 0 -> 99489 bytes .../DeltaMaker/DeltaMaker 2_cover.png | Bin 0 -> 64498 bytes .../deltamaker_2_buildplate_model.stl | Bin 0 -> 1084 bytes .../deltamaker_2_buildplate_texture.png | Bin 0 -> 294264 bytes .../deltamaker_2_buildplate_texture.svg | 99 +++++++++++++++ .../filament/DeltaMaker Brand PLA.json | 22 ++++ .../filament/DeltaMaker Generic PETG.json | 23 ++++ .../filament/DeltaMaker Generic PLA.json | 17 +++ .../filament/DeltaMaker Generic TPU.json | 14 +++ .../filament/fdm_filament_common.json | 50 ++++++++ .../DeltaMaker/filament/fdm_filament_pet.json | 24 ++++ .../DeltaMaker/filament/fdm_filament_pla.json | 27 +++++ .../DeltaMaker/filament/fdm_filament_tpu.json | 26 ++++ .../machine/DeltaMaker 2 0.35 nozzle.json | 25 ++++ .../DeltaMaker/machine/DeltaMaker 2.json | 11 ++ .../machine/DeltaMaker 2T 0.5 nozzle.json | 25 ++++ .../DeltaMaker/machine/DeltaMaker 2T.json | 11 ++ .../machine/DeltaMaker 2XT 0.5 nozzle.json | 25 ++++ .../DeltaMaker/machine/DeltaMaker 2XT.json | 11 ++ .../machine/fdm_klipper_common.json | 60 +++++++++ .../machine/fdm_machine_common.json | 54 +++++++++ .../process/0.12mm Fine @DeltaMaker.json | 20 +++ .../process/0.18mm Standard @DeltaMaker.json | 25 ++++ .../process/0.25mm Draft @DeltaMaker.json | 24 ++++ .../process/fdm_process_common.json | 114 ++++++++++++++++++ .../process/fdm_process_klipper_common.json | 23 ++++ 28 files changed, 821 insertions(+) create mode 100755 resources/profiles/DeltaMaker.json create mode 100755 resources/profiles/DeltaMaker/DeltaMaker 2T_cover.png create mode 100755 resources/profiles/DeltaMaker/DeltaMaker 2XT_cover.png create mode 100755 resources/profiles/DeltaMaker/DeltaMaker 2_cover.png create mode 100755 resources/profiles/DeltaMaker/deltamaker_2_buildplate_model.stl create mode 100755 resources/profiles/DeltaMaker/deltamaker_2_buildplate_texture.png create mode 100755 resources/profiles/DeltaMaker/deltamaker_2_buildplate_texture.svg create mode 100755 resources/profiles/DeltaMaker/filament/DeltaMaker Brand PLA.json create mode 100755 resources/profiles/DeltaMaker/filament/DeltaMaker Generic PETG.json create mode 100755 resources/profiles/DeltaMaker/filament/DeltaMaker Generic PLA.json create mode 100755 resources/profiles/DeltaMaker/filament/DeltaMaker Generic TPU.json create mode 100755 resources/profiles/DeltaMaker/filament/fdm_filament_common.json create mode 100755 resources/profiles/DeltaMaker/filament/fdm_filament_pet.json create mode 100755 resources/profiles/DeltaMaker/filament/fdm_filament_pla.json create mode 100755 resources/profiles/DeltaMaker/filament/fdm_filament_tpu.json create mode 100755 resources/profiles/DeltaMaker/machine/DeltaMaker 2 0.35 nozzle.json create mode 100755 resources/profiles/DeltaMaker/machine/DeltaMaker 2.json create mode 100755 resources/profiles/DeltaMaker/machine/DeltaMaker 2T 0.5 nozzle.json create mode 100755 resources/profiles/DeltaMaker/machine/DeltaMaker 2T.json create mode 100755 resources/profiles/DeltaMaker/machine/DeltaMaker 2XT 0.5 nozzle.json create mode 100755 resources/profiles/DeltaMaker/machine/DeltaMaker 2XT.json create mode 100755 resources/profiles/DeltaMaker/machine/fdm_klipper_common.json create mode 100755 resources/profiles/DeltaMaker/machine/fdm_machine_common.json create mode 100755 resources/profiles/DeltaMaker/process/0.12mm Fine @DeltaMaker.json create mode 100755 resources/profiles/DeltaMaker/process/0.18mm Standard @DeltaMaker.json create mode 100755 resources/profiles/DeltaMaker/process/0.25mm Draft @DeltaMaker.json create mode 100755 resources/profiles/DeltaMaker/process/fdm_process_common.json create mode 100755 resources/profiles/DeltaMaker/process/fdm_process_klipper_common.json diff --git a/resources/profiles/DeltaMaker.json b/resources/profiles/DeltaMaker.json new file mode 100755 index 0000000000..4314c00860 --- /dev/null +++ b/resources/profiles/DeltaMaker.json @@ -0,0 +1,91 @@ +{ + "name": "DeltaMaker", + "url": "", + "version": "02.02.00.04", + "force_update": "0", + "description": "DeltaMaker configurations", + "machine_model_list": [ + { + "name": "DeltaMaker 2", + "sub_path": "machine/DeltaMaker 2.json" + }, + { + "name": "DeltaMaker 2T", + "sub_path": "machine/DeltaMaker 2T.json" + }, + { + "name": "DeltaMaker 2XT", + "sub_path": "machine/DeltaMaker 2XT.json" + } + ], + "process_list": [ + { + "name": "fdm_process_common", + "sub_path": "process/fdm_process_common.json" + }, + { + "name": "0.12mm Fine @DeltaMaker", + "sub_path": "process/0.12mm Fine @DeltaMaker.json" + }, + { + "name": "0.18mm Standard @DeltaMaker", + "sub_path": "process/0.18mm Standard @DeltaMaker.json" + }, + { + "name": "0.25mm Draft @DeltaMaker", + "sub_path": "process/0.25mm Draft @DeltaMaker.json" + } + ], + "filament_list": [ + { + "name": "fdm_filament_common", + "sub_path": "filament/fdm_filament_common.json" + }, + { + "name": "fdm_filament_pet", + "sub_path": "filament/fdm_filament_pet.json" + }, + { + "name": "fdm_filament_pla", + "sub_path": "filament/fdm_filament_pla.json" + }, + { + "name": "fdm_filament_tpu", + "sub_path": "filament/fdm_filament_tpu.json" + }, + { + "name": "DeltaMaker Brand PLA", + "sub_path": "filament/DeltaMaker Brand PLA.json" + }, + { + "name": "DeltaMaker Generic PLA", + "sub_path": "filament/DeltaMaker Generic PLA.json" + }, + { + "name": "DeltaMaker Generic PETG", + "sub_path": "filament/DeltaMaker Generic PETG.json" + }, + { + "name": "DeltaMaker Generic TPU", + "sub_path": "filament/DeltaMaker Generic TPU.json" + } + ], + "machine_list": [ + { + "name": "fdm_machine_common", + "sub_path": "machine/fdm_machine_common.json" + }, + { + "name": "DeltaMaker 2 0.35 nozzle", + "sub_path": "machine/DeltaMaker 2 0.35 nozzle.json" + }, + { + "name": "DeltaMaker 2T 0.5 nozzle", + "sub_path": "machine/DeltaMaker 2T 0.5 nozzle.json" + }, + { + "name": "DeltaMaker 2XT 0.5 nozzle", + "sub_path": "machine/DeltaMaker 2XT 0.5 nozzle.json" + } + ] +} diff --git a/resources/profiles/DeltaMaker/DeltaMaker 2T_cover.png b/resources/profiles/DeltaMaker/DeltaMaker 2T_cover.png new file mode 100755 index 0000000000000000000000000000000000000000..ff5fcd04ccbe1c41bd09788e03afb34e42cf4c88 GIT binary patch literal 67085 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�Wf;ss@y9_gpWye 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 literal 0 HcmV?d00001 diff --git a/resources/profiles/DeltaMaker/deltamaker_2_buildplate_model.stl b/resources/profiles/DeltaMaker/deltamaker_2_buildplate_model.stl new file mode 100755 index 0000000000000000000000000000000000000000..8d67fdb68f6984acdc2a2ad4ae4f2972e8b067b9 GIT binary patch literal 1084 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 z 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

h;Jl~i$hzxXc3!^ zvr5c7q|vWFL3kTZ3~(<7K#7PC*2-&$`w$j2fVX7p68Z&m*z$A91L!scUQ>{4Owot#g`k|Gp2WW zjyq#&ad|{(9=$DZE9X8zHqEeO<37(iY@#OpLbLm0@zv)~P7Z^%C+W8^GnIEv&63uY zlgM2e3UWiM4rA%ScZVoW4)N-n)Jx>@|0gOnpQZ zue@aPD!q!a`(d;k(Mn3pm{PC{Kj*ky+N^GYDp$*c9W#*l5V{`>c1*>qsCRr$Y-??` z(lj`I7M_$9$ks-tr&PEOwt>A$Y$H7q2f!BK^*M~;&kV@MLsG+%$hXWL*FiGynG>;% zu1RS4_4!}2)+2{QO&}n#V6p(-q=-iv?$XFxlVTm%qgM0 zIXTEke+t!HG3sbiZNY}Hq%vt9R#4h+xu3Ezw<4Wn!8Yk|N~$!cjO%#?Rkp&+;)&lE zH2VbXlgn`heoG+bf*h)W;S~?kYf3Yk$~}(Yea3Wq8FN_#6S= z9|kH1rEHYr<&2ftJJ*B{9-LMtM2AL9{D80WmO0JzeeBgN4aI|=mdq<<2rhvRImSO! z#J(Gw#W3gsHI>dc%Qm7pL6U@C1TRKz-vGXRLX5}z+8eG^2BXusqwg|waW=*epaj~o z)R|H=D(h?-f@BYkU%?)t{Nk$3ZU>s--8rF8=g>|)(^Ubc=bTj3=`nA2x|qE-26tp* zJPo(HDlWR40$p3?tEMrk?C5n5lA{ADpP#uAZo70&P^6b7lQ0}~l;i|$Hu=+6Jnc)v zeMkP@`WgwUS=XNihk?O5e^?$}j3rxk`#7B@8oy0vX2v2P$5UvpnZ| zOH>1ZE3f)`ibrS8Ng>Y86^8(tM;Z%M=ui|%iwoyO@#&8SG+A*@&U&Z#Br5W5d!@b~3r_#Ak2L~yrcyKrE#^l8+OhT{Niw{CE3ilL!*289P=t`6AL~L!Phw#4 zCb)}hv~m$>mtC(H#f(AA0p^nzMKkK|?qbp$KNsV8llTeyoA)E{)~ z8P9BV6Z;*fg>o;ZC!R15GkyPy!eM@K@{wb;z>l4sXKZol6*oNvCh3B)hIWK@z9=da zOe8P5o7uU9Uz?$@x~A)hm#l0~a1l^uy+9W6g#Ob>Dt+n?rz4|LrJ<_!BlKn1O8g_B zYYE-s;M$K|x!wl@Hj*28YYeG29(>C=w&KYzPUEMXJ?(iCaGeO54KmH9Wk9(W;9*$@ zKexLn(;flTH+muFPG)^OyjYl0B|+aRPOhkeYSqtfj|4bJ|A64EqW2mRQYO;98AcI&`Ey&5w&T^R^qjbZq374RjQkR< z*tiW(-ps?aT0YG8*lgOPJBc>IYJA(xV;#w)x@@!PF-f!0gJCg5tI^HghrU8Kc&DxiV%W333AV9W`S|BeXX=_=L_~`Idz?KQ9r82Jho> z)-dV*8B&%8dJ_c5k3avueSJopV>1Wb?P2E?dK=9%sAUl$REA55c4|W9f-zYhZr=Ss%H|c1y{%-`F2gej@h9qf%YoN{bQG zoUJRVMXfd^bxRmO-0;XAnr@;ayS6F1bw^WWGw$u22-48_I-z}^!XDt+ ztv7jfCewvsOWC&b?L|sXj1*YpXFtmAe|l=z(w$AL9wEP@VY#0yAE5Q@m)<$_S~1yg zyNkB5U8limTkQ>bx5$lBoe#+E=gKG3LHgdY@?2|0Z(6KOzvE8jv9lxY9()^yH{g30 zmR0j{2^3OfS}7*#(e{jxmP>J3&Q>v9Oexo+gEsYe8ve63%FZx=?O*KqOz1lu>tM+7 zxUIe~#~0p4kXho&wf)Y#zQl0=J{zoBYM0AgV!!G%jAfK6=MeR?bYpix=i{V@|HU}( z^l@p)=$$R1rH$gp9xQKFy0=bcM6^G$)$sqgUs3!4P_o(SbHty+ei(RIvg&EFC^$~H zJDJL&Qj{_Uc3sHD$61c}66G2Ju5hN82@KTRO{=co6wSVU0$}&mz_| zP&($&6a1r8@jzIP)-B3%?d)cPlse1v6MOBcLPMF1I%3na|22Vgm)Ox_2cFGb3tje` zf8cLow1D$yb~$ZzYGdAEp?n zNk98;B26uo=XEIc(YxYW`1PYhsbuq`tD5%Ow(3erN?NM_{7R1xt^rI7)LMkC!ZnYM z^hvj3`YzH(&X6JOxJCHtdB{-C|V=5O>US2t%@^YI#_LhB;XjpfD4rl5WD#gsV7{vp{ zhL!et%lQv0TwfG+R-$m|4bgiU06| z@CY9PH?9u`X49|JWunm&BBY_&sm8?*HB!uLHu{Q}S8p1=_S0^A3$o5!z&05Sk`muJ zYJwh)Fy11&U`U1+Y@|8vOLoQAzrJlt$8qMB)9>~1N1Q2o?DcGR1Pk4Di4YHm*2s~X zn&V6SXEg$UjmdvcmkEyxLaZ*GQPzEKz_sMYT#PrhAMR26?87gH@73qcsf&5|qel}b z^5lX=mv&Hzrt%TkM47ws8g>`->*g&yuS)fIDih*oOP!h#^vVsuMo5tzmW$;hy?$*Ph@8?Nn*AyD2YWoW=4LAy?BbFliyevIR z{#upsn&Q{dj%IO*LAcvjVL19vq6gtNlb+%@imURAx0vJEac8FO_1;#9#(IcUUdcuJ zkit-zANAK#ZPBP;^E`feJ+IwKUg#%*Kdnr9imFQpN-w@*DB?mKgE|XuQ2O4|*=Qz2 zZzp&jgsN{!gyDn-rZud`&TniMa!J?{`em8Uz~0=gSWX%XN-KB#^<|)JeHXJDX5T&7yww+T?{ntwm!$T>gg!eZ z3>eQO`&Hak*BhQkrpB8e=%!d(OLBoUIr*9dXf=_%``dz$wR>?fo7Qq$h^Gr;6u-XE zA7IA|Y`Qn(Kc(|gUPbtH&9vX@st58JE)8pPi5cBa${`tx4Nks+V{_+XI^fb)V_CS_ zdKGe1D!MjGvYy{qX(8e@`*r}p`V1%Kb-9%vEOM$gqk54m^Pk3AcR;7zm^xIwW zDM!OkNgW_rnl;u4(M=}P>YPVl5pW(iRpYGqS~&m2tZ>92P$#f7sNVR_5{#c-&pd>5 zeIFK^6tXENZmP~fZIS;@<)2JJ0DS_c??4ieA}LYv;zbV9MKgB3657uQgc|9GB4qJsWuL(mFn}MC=_CTELY@EZ5{7 z6<}VHy0_^SPMe{ekX-C{SrW!hM|meQ_9~|8NP?}9;XXJ#c&qGnhOD)@P#h-R@;y3` z+OB=P>+IDfZ1x=46ZrTK){PSVJMF1)qLm97_1T zE>V`Vhebq0giVzByTbM_ zVK7HDhMeIMy%Bd#TW?XRAt66mQU8qFt19ggJI9cr*8&p*m+W5<|M>&1g3=8l2|*yC z5TK6aB0#tL-H%!#TFm%Es>H--iGDsBzhnqG#dgq(xO*n_;1=V2_!50SRMsU4SM2}e z>Ma}EYMZX%It7Z9BE^ck6?ZA_?poXl?ox_FaS8734#85~p}4!d6Et~wKHL|a?;qHE zvNOjqYu2opnMSu{Io-*1@wUq7KEz~klR66QEWf*%O>CT<!TKPVn+xbH5G@%KX@~(a zD7W3(xw|TEgVE{IbUfIYWMNh;t&r`nh+cM6Mt7uVyCBL|zVDTaD?JHL3W(1Rnw0Wa zl(AJ&c+LyEE|)i2G^6b22(tHnIn&*VNDGHdEJ>4C4p{=kG@oi6qby4k5`czV1B=-> z$@1Dd3D^%j`mTEVWMlPm>)V#0N?nnpf7gOTfIEa+G2GF%Okp|(cjnZ1ks zQQ^~lE`cqjnxz+}$u32$y6@hdJ~eiB-q}`@4U8{d1B;(H=bT2?oWU2@46ORo9wWW=x(5SyrpE{r8s6?+UzeU_WSVqbm(5)SdCC=U)!Fuqu}xh<%Q zZsAF8J2!y^jP^X(tv5Qa2fclHjD+88^-=^jExW*3fh z*?%}-J6P>HP+k6AK8-PKVN~%~g(gG#PRfq0zcfimjnG@q-XjgU9JgYO{X|`fxQ67Q zC8lA_lB0BzlH2M~-nxagk5k{9N(r$c>;UUykxK!!irc${iOtpbz5b%ZCS;Q%Od7|p z>YhK_=|21+x-W&LcO3F&%>-ObJp%4x{|%geQF6e;L}d>6YjN{s^?AwJg=q3wXZC*4Xed&iybuJ-IHuE--;rLCD75Ebh zejWLkA)EsV^yrUK269#)-qk|$R%tZXy)-6Hdb9wz3YRj%u>9zvtQWe(q$Gj%w=JdM z4(=F8^)h&vZ&+=U;9phRz^^zlexJbt1;uL{0Nd>_Ia{l9+J@45y&8#`)EK32YmOM^ zEmt9&;j|RJcU6;G$DH2(bk96`vH8K~S-7FrJ7y{>9ukxOi*&R4 zplr!vTRtcF4Z5+AY5XgI%6F9ryl2G7@#*!9;vv`2P`W*DE9QfHx4hZp7_*3(+P3p* z52YO?xr)bz7A_KONkUUc(}!V1YvbeC%zK#iZy~vK!`=s}{R@anZen`M@^=*jHG0<{ zZ^p0&538%BKxhDogo&J}>~PbvV>j2GTGIvw@(;DVnT0XbJP;XXQ|RMb|1hdtMe4^* zx%Ynmv*_u8SEAILlyHh_1Y8HJu%{1;ieCmMEr5pmb! zyc4wBZ*<1lm?p|SiqObXJ45KLH91z3vD1vsMhpR4G^u}KS&?OJIs#kUxc$~^xX-mC zCPH64c&*@b6h7L(X@k>z#0QlUHyAlJh2FQ}8wJ{NhJ{M01p-pbap4UUr2-TYm0o*u zo#Qwaao$m_`v&z6X8o9@{ckX(Y%w zO={}j31c>vv>fO@`HWSreX}eSAo=G`z|_aHfby zO8)B>xY?WOl_!JOH16?hU=Jwd3k;e6`Vh2IWv)(xx0CMCr z%e(heP(twE-8J8(YHbkHtS4(2M=5@hPO6}uQhmLqTH?)5gP~JPz z-)m#$1XfXWsnO}GmARFRl@(T;@kdgHy9JNz9MM5-Z5=y1r63|o1TJYm%ev*R->J>LsappRWLvKliP1xCm9Qz{YAb%RbG$+`1@=DCel)GM4)8I7~40<~}P zOSnV%HmeRsZLT%BPcvKTkU0J6w)N6ida%o5)1$VBMa%bX4s><(C6r>X(bZ;t)2Tu~ z%TZNlN0Lpw3AaxNQ=l7kJl-AG|K56Gb=Tg!qG0`_< zEZkxZNyGdZP-BEz^3lA=m*jPgN`C~W|9zpPZ~=;8re$zqq0WWmoJz#wz&LA1wUt2K zZQz%`N9HEzWuX&hf{;>^9LpKXro85-b)HM}k(}3CM)Erh#^a@$fA1JO(`KxeI0Kkl zKP?Csx?)bBgCOB4b9-?my9LvZ*<-I&kw(k-Js`gSEM`ssB?H51JS|_SYWd&=zW!0s zl>Z+G+Q;(_*-LnHZ=&*tO1uysw1(qsoJy|k7v?n`e(d!Ovu%aLc=L1tKAq@m@$f$v zF3qlIwEw2d1B(bZ21-?X0LOvcx}94HJ}7&o=hs2ONLLnlCHLnl+8s3%Cv{l3CJS1#ZG0K^jO0{z#7w640VC>6%=jpbn;6p=@ zZu%J0A?N?`3D2zTa!t?oh+}GM3BulmvraNN0oL_@j47%tYt-EEjMM}zgg&*^q(715 z>92+p@Ka{r-%1#3t9c^wfvRt6Irq-K%Y=tSM1+Jygm`0KtV+s#;-@HpHBCwBhP?bB?yMeczZ}hk#T?WJO)pFRbeYGtS62&$kD1(gVI+3Loeedc~xIM~rW*Ze*(%%q7`3HMJ;nx5K$w=$@j zo>w%sXhGlsaixvE*PlX5D(_xUYx-;ile71U_e3SH(L%$&pfy>lF&)h&&JbQ~PSZ5C z9OvmVzs1V73d(;Pv=z=( z!qaKDW3s%^EEtkH!gzKT0?#v=JwX-P? zLOjZgyi1!sW+g?_hT%SPJ1}Fz-k#lE8wo*W-P-~vz{fv3*Xr)Oh;lBpFT+?xj}NwY zx)zaHf!E6?ImH^o05}eR*og_*7nLOLsL$Jau0rbqRSm)v@yAjf4eO+n6#5dcPn~&j z+%8<*+)M_y*V2cFJC~L^mxh;QN{FC2S?V^sWA&>-quUJ$>>3Q~l#e?7&agbog$aJW zO#c-23bIdBoQlf{rL`OMSog{?{m(bVE8kMl)lEU6E~#iaYOnYaV4LHWcGb42>PXL= za&0MrEASEcc-y3bVx>CfZo=dX6C@jOxgcd|9Vp^)zm8&YZ?fyWEN`xqT3_GaUteE; zc&MletEo}V88fSsl^q$8)$Y7XU5qI(xl|0AFE~3AvKtlZRn!EWo>D5PFU3_){Sh0M zL)JlZ6UPGQNAdwjx5TaQksY&m@`}5qjQd`&45}oyMoG4M4>auB_4G>&j|J`T-!hQ? zi(`H~FELvHjfiHi5L1+eDCi%Glb`CbfHSfwsaK|Y5?y0cDkzp|q!~fm!)YWQ&T=T} z`u*GKbScfZNZ{BdtQ?bb%+37n%RExAnRG;hp5ANaqVcLAlz_XQu)Lk?^Ez)z_krLk^$L3BnErFCX zS_#wcrfg&Jl?oelC7hmg4?yQNj~jX{Ya&&vA_>mGVV`*(J!BVl6n0%$H%z-OknAVV zaL3c`IEuQX(5m1GQh*n$B3r38&yvGMYWU}eQM!^5uBr$hK@OjEZMdxrV#{NK$B<>FATl^VyLl*a|Vxe zev&50E*xnq6=~Lov%abqVDLwS!`Kbhy-||oaeLbDzQ6P*J%BiDduSvgtYb4k7MRZ* z*cI!w_Uqy7vd9(!4Tv`!lAh~xQj)wID9;lT?7Rsc$)FC0(TSucCwcl6O4m&?**_nK zsI8A(;cGL3)T#}B>!YnEcAnL3Acdvtqe-yGI47nkt6@HAH7r}_t|>W>pNuQL5$92- zC_rY27RtCks1PQLBi71>I(`#h$vs2f z2L_%2C5F!7-u#w;Zlbbp`gYc2?%@rpj8k9 zU;EZ*^@CCBCj^B5eISjnzkXoVn)~duo)anOTm>!iG--Ri;)a8jW}S&9R>`K2D;+tx zm7{Z$OhF-!z?J6AoQJKr5k56}V94U}$>*(TF!zt{^5vuU0F<6H6+dJ6Hd1 zOJrHM>;S=;19LDfyp?k<3BtgzR5Vo2$Z?x+9qJG+lUZ_rh0M)Rca|!mT*sXdDUn2o z@_$rCRNY7IeWwt^M4C%h%_abL$BsTpmr=M!`?!h)d$At9%W?-sDAthPY?{HBz3Bw- za$E6F@4{u-Y!V1Am9ho~h^I-C-MRIcZW?4f7uWp={H4epX<2yWan1dfVJD=YGw9xY zfSX)OX$_T_fnXu>mqeXY`QngM17*+N18%BJv`=GLfnL+6p+Z!}o{&$^Sy&6@8?gkP z&oXk$=3;Opye@~#L#?Ejt_3njXmbJP*$yM?thjtg`g*}wVd3ZnpKuCvb%Wfz^P_=P zi-Fa0MO&pR)d$2^Sqp5JG3_eV^|1A`6#`s0pLOUth9>rIf;ncTl7efLe*Sl3b-GKe zJY?pC%zkx0O5niW5&8H?I?tZ1#)!31r7-kNO+^F%_@pI4u7pNb0Du z&}BxBn|u+t>=iT#iJJo{7sh>+r024Sc>+s23oRp-D53Y%*D>eOdf41@_kFYJ5wjTtp>Vs5wc3Fy*`Y*M%yIkV z#I>1m16>h1#*9!TKcsFWH5W^-=XGY)vm;MFndBBi}9oUJ>RsMcUu2zsfkv?ObTzfG>z51JPIJoCb#AotA zErr3$tR3GHsn^Icb)Fa)qvHD-^yvrn9X&ZN7%e<>TZzd5qsoV$JexSuFQnRBlKfUy zl9#)Mmgb%zIS;PjTv)Uq5c`IH$Ft9Y4%)K%G*6Lk_0?C%xMH-DwOoF~+srDa7rn8>Ka4jQc8TayXT?LXA+dVk0Z zVoTtHlFi<+ZV<$dE?JbZ7gf=p^7#anTP3$KcQh6IS$vgq=G--=)_p?e2eg1mohqiB zkKH~YmF?$auC-LMYcwQVg3Xd!3(oY^pR}hV9dw6A1t8PTNkZ7q_cdP7FB2J}wnTb5 zaP?J8;FkA6#2Q(XE=+TK)NahFVsPz&XO3y0cFA5S#Id;|Sydf~jz^2RracP{cT$0y z>g%{*NbWwkK0RJcqcPdl!ma6G9ZM57Q@23acYoBJT%w;-BD>zPcd4l06>BOy03O%u ztTY5Z(*1q&!iL{}14cK{mZ+b&^y#pq?=GLao5;r#M^m);6k7Ckng)=iH;PUAppZ;5cO$9y^mf&@O|xg2Z<}G_pu-kOn@=rM6<``NQn{`y}609P(R{)`EAr-L~%G-MRFpyp`0S zfAlXQ)W(Y$)^P~HX0)yr3rPqYFybPI*D@fRoeU!hbVEy|BTlyu8J9 z7h>WO_Qz8(mF39VJn5v-YUrRpBAhGddL|b(tXzZ#Bt&7MlYn$7KX@hVrqyS(k5FD` zIjI2tQq#nz|G)WPuijt>{8gwrQ19fElxi75sj@;<_}!o`V!{eKw2z3Gzn<{^()|}j zji0nBu_0I@+{qVKzaY$61Q{uUQYiZ zG!x^OwR4D*k-ubSeMqxWWUK%axxe2ER;T7u9{#g5*cOs*3=-S;5^7(4c$Pm4P>{Oz={`!c~SYW76m`}nqTz{!tG8i>1pke=Zif=FXS~+omehnl5fq(qr%lWSsP-L2 z+t1*%F*_c2+a0*0I&ZJ1ks94i*A7H``E=fQU3j5V7yZ|XUmd%V>)FXK$fekFw>#DM z{9_FG24oxjQsawD`>ByAg|K}1TPbPU22Hyyx9P|u&idmgoAT=@NDL=;_O_*f3B1uL zCaU`MhENgY_hiqhe`S!sI@L7&Ln~SA$O1@!?3`Y5RjLz}tHH*^0nv(`q>^agpM=kWF# zRbFiMP9hu6iEhsMQEl?ucZE5cY|S?=NqzC}j%i!CcMK#_9Do^WYUwZ|QJbHMw^!MTEW?HoC zkQaEsk| zd>f3J(4PzNPbN?hPB)-8*rtn?jAjSVgp9qOIO^QKT$bFdD+xzhXm4WS@(EIlqWWZ6 z8=M2$#Hx@tR#B$>Nfd3O6m$YQDvhtsgsrn3^nyHNyOY};#X}(3h8aAeuBWF^6}P9F zRcwokCDwHGG$;{iv~DX}*#cd7P^#Z4A8G4+FOinRlyc|S3*RXuBU}#)lVi7Ba)xha z5Vkqv3TOZ^1pxj{@Q22;Sf(jPf4_+2S3<~7%1qryR%TE>S9QD@LU33}X4{*Mq1^@l zX{=8;*@Kgr*y`caB+bB(u)c&}(rKBM$D1N9lNBxF{voWUxWKmgX>cW?#A7);S@6Xv zuO@t*mgw{OKs!$9f`7!^DL`_mNgOZFAcowhUY}Wq+rkef2yd`L*1g#?p7wsSbrj@X zZE?WNwFF*t>(0klOT1dwvv1Ii`U|Pi;7V1)X?kd`fM|NL)mj!r>NqbICyN9iXybA! zlruGb1_Fcn11O(KnO7fY#aC~1?8&hl1^|D!#JH$e6jPBMDuefEhvzM{?f&Kq{p=bn zFgVvQGJV}meb724M>@}PN9KU;Ph?9YK*E9q0|9I3 z=pbcqK}K%V(E)NNZ*9*5Jf5UNIGo8AH^AW`KeJllPMuF7nwc|Xe(%CyKq~U$dkFl+ zd_&*P-d9lDfIS605D|&A5m^LYBtK3d?0mSJSrBVyx7cKy_(f;1HY?0qC!!=#pqcg- z{p(8YI#r%zZ@e)lEKfKjFHS(EIqxi?=^fOOq$ng*AJ$0vi}1u+IITEh)Nf-`ZRsq>~JwsZXQ(LSB#!uTd+b|4sx5^T`Y~ z5-jxuf_gBl7PCH1Sve4E+r6JlUA_-4w?2ppTq$%2&MHR!%P{l!3h>+6UYQ@4VfM#l zbuujb)-EY=izbF&26A%AwsX**Zr`d3PN~0=3EdqYCQdoR_OU`?n3rzEqmEGuOFU=* zgou*vnNecJn7WbL8@)WnrC(6tDqQa)Rh9AX_r5HTKVgy}Q;Mp)Q=lsMcs} ziLH(|at=_tT@DLIXM?L8*R^+|i@rT#hLm3UIjdgi4K%?b0T%)Xks9ZQS(jdhBT!Pi zD`#&$H!-TB+`esVnLlCb)Xtv>b;Yi0^EtEIRVWj~eQrx|?-@)i zF*IYswAxTv0X3!K1(cr46+S1UNDrzlU87=e##sB|e}lIhX3Hu_+B zi9mP0>&yZ82E9LF$&F3s{A$f-L++S;>7T81C=Bx2HFbLRpMOoBkkCX#yN6Pl2Mc4* zV)i(`kOk~y{aH)~r=b3>NH(Os{USU9^j$TlmpsPk2lhx}TAG9^6HMpi*f||%9^8fi zHZ@6#>%Jzq7~x9-l&NVNEJI)oQ>)}yo(CzG3#H8rffVL;&>NHkUZ2u8z*9+y``F-B z{?Ei!9*+$4UCxd%!BH;=KGe!Efey8SeFGUa==A8p{PnhU-0$rhJ(F5kI6$F*-rQC4+Kbx89)!6yIHYYj zdX&zbzmP_AF#1`iMO;ZUm}03-x$S~_K2gh{=KiC?;4j*3AIWk8jpv9aj{BPNBsvOj z+-fo|xM-AUIy^+V1xlQKiZAhgZfCYXQdK7_Es{cVW!wlyn*;L2r;!riO|vW+&x^aE z8aIg4mMR^cvVsFs!%Y6wuXqBs(E$?dXz2+_PZmiv@P9rIqj~SBPPT$L9tJhlaUmvhKWvj?BbLgunopxr= zMLhTVcAlOb+-5c5nA;n|r;RkC^3T_3D`uPa z&wSQJ>h_;ko`L48H_m9NC++YGp`vOxYKGw-`DG=)ZBW~9JK8JUJvxQaXE*+{diVIa zN?7h=UGR@d#(++F6I%&1jMi%V6EppBVAv!~x?-0!wT(7L8w(#b;v{!~x`I91V-=pQ zY~}t+Po-Xb>9a*MRO2}6?CxU2Jncn9|76L0kl<8XtUlu12)2+ zk^;S7NZcMVTG3{}oST{HfKZuqROpe$f@-M`qb%G9i^dRU8V^bjR7gU_W}Z%``#anP zvUuFlt(;NAVwwf&l&=zl`w?b+1&#MaB%lqFhsLVM}lCWt-H}=sFU(-wX=^~-o z)$iGGS$AwpwmTMYm$2auEqd~#B;2c+X#2?py3XQC0cvkwW*n$dsQlr4QZ=Sxju3-baPrQ@2TAvZ69K-vV3rodfSe z5I0%%<{{|YK?vGjj6-&$RQ1p){+A}7GWFKj3-QeEd--blZKd9jsl+>+zwF;5a;^v!L+?4Jan|Xz?llqeWXqNk-egVEiGa4BilV;;? zRA={N+)IyO*jpKk1slW{W7S^0e*cD%y;n{d)l!|@Sw~W4c%GnD0*o$=A#Oj&ztSAE zJEk{zgTx=gu@0G%$jgF>=bl^fU|l#~#vmTifSft{7sdnMp*I?5=;Tk0a2@nYg4v8w z%!~eTLALg1J}6p8<}P`ynHtYwS1G+OV1ST$EnMymYO3*VMUDoAY9yYsVgG=Ck$4D1 z3v{%JU7Ah3&Er}F`;&`Xq6JQ``H}n0iyKqjM&(P)UDQwvt>9uBCK7U-Lx4ot*x8@0 zV=dzOx(66DBqdqv2hXwem-e)_$*xSAbxfv)m@XLR!Ez3>D(RoMl$VO&4!R>&MryE% zs#U+wS9(CytCsEXSUpt9Z@UmViZ56w!#aA&i1*q5Hj|7<+o`{`u8 z^&;SPYO5ym(P$N{i|HG_;t1$&mS1q13D$H`R`h+rSPT3WeKUu)alBWE2qsR>&3E)2 zi3i>?D07VJBKuOYvh*`BGR-;J3WTiNuxq$)bhYVdO_$B$4BSd0Y1XFnN(~O>6aBy= zm>@0F8gOqcBRhBWh7rvDiJp^X_7G9k;NOP!wt+k=Bnz8LvJS`X_xpZa>?OXrXCe7E z0w^J|wqk);mbyA};eRBirqj_j&*6PuU+@IK72&&_Fc_3W`E7vIgRCw}Dk3AGv>QAZ zc~9!xr2CExxR1H2YY@E6UMBz^=G7Bp27MZ07o@p3F$`O*W`wF*#h-P?L^yGjy5d49y zz6kL@*fWu2bz_h<)B{WIpq&*Z{7`#`eomlv!%LSkKh>FzyUoeRVhRh%`-ZJ9H?g_h z(z94qzO-5_(F0oQXNNxSRP8F`coQe`0Q?>9gHBN}8Gk~ezp#X~v!j*+n4FHeXR-y% zXi1d00Z+%_AZD$73H1f?;1FSUpGIiltm2}(J%d-sF5)orbg7{Z?u)(Muijw7Z?4YU ziXib#re~x5S&kcIF@_m;hyJYLR~b!DE%{x+_avR9Ct7Y5eg)pukmwMhwq6L!>`sup zy{P?%W6giVfXQf_FFBlgx`jinsWml0gh#;Jsy{;F2HTG9jRXepx#;colcDei2&;|k zX`eG31poH&0>)48SP*VgmKEgFn^GmG72TyRmC*>j;2Z`168l#S*@O*R%AjRFF69)Fr{Ed!*S zUuZkO3y#s2PDZ2*#>t!(2KnQ_R4s+I`M=Y(LWrd>7J$=%OunsSrRwBgt3rt^yfsLt zsqS`E^`!>8@(s%psFP%20>YDFo11HUdu!QJ;+yCMxEKYdb3Nh0G7HvhlPNIuIlCY! zo}(r1@;bM)xa0@2m})2$n$gRYa}teG`+x)A9qLU6Ftqne#BIR5V$yAirTKeXxP7zT z2J5d=N#NVv97qu5iy5f5s9wrxA4EP@FwY1Xs`iH|YK)43|NUdLI35frv0|kX?|1y0 z`q;lNypq5w)!ZyB%;$D~c^Fht&?Ew+xrF$yCj=mJ z?(Kd)Ez>h~9S2+Pny>5XsBn}pz+a4M2G4LM(w7;piq>MgTJ5paGX5yIP3^-B(^0N< zd8(XJU*(5v75;KE^}io?8d+12**untDKFn*X#X)$;_yRAOtl=aI5SRMO-9qzE-}bJ zo}_t43o4{Wg7w6F*njC;R%C=D)2>Z+wJ}YJ$($`}?+W{rwyJbo0}Yktmm=;KKx<<{ zn`H%Ala5@tCp_oPjpRYH5nx#2#6!IAOfc61ny!I;iRt+OJUpbKdmV9pqMTNZY}!m^J#SPdt^!4XfGuDN5d9sKWoG zGp~HHME~BRWczorj?g%M&-@N<2~cBt%;HijKR|Je_Hg3O1OMMFfDb{`U+0J{_$9@b z<3HqW7!#9-mM_% zuE%Cl1a193!3Ac2xKXjyo+plh!&_&wK)z(L)~)NxaiJQg1>Mx-1mSQzJcM1Jkbp0g zzJrQG#fVHo5~uHPv`CbIZVl;Z7z9u^jU0r4Y^g18jMQ$-wIy72?XcOOtZu?ebsY#Y z0xyB{sli9m`e5#?EYHUXN)~WRT1i0$&D?M|=ssaIu{$EKi|dff29cJS)IS*W_eN_gb6UalP}GQPHp<@~pkhOa|Pw;N$0b_>4mWi=AnNko(R7x{I2 z$<-jdg2I|Ki_?RO4f61uUa%wow+@$4a6qzFBYAMyz#m|Wca=RNLx87GbBVT9+oog0 z!SdbTmX3?$a-@wAHtm{Xxc4va8(&9~Ol#8Qc{atO_PUiSN4@i;uZl>+tH^ll4tG1` zq0Wjjc@OtT!he3x^qL@#+J=TJVozn%DQ)2tNI5jnv9JnjKNdgZme8${?Y>1A(ceF!O~%cTe=M zjtdMPpPJg)nn~iV^Vz$>>0~z@k1eU#rZQBZidEyfevs;K zE16|>zLy?GUyOi#jz4UY@b>ZWI`hAL{r0>+FF_K{4Wv7K=u3`n^*x$x=t|+#fg!q(M!D+JC}QjR9kt`hShXthHH*zR{&~H`d6J%rFI)|``}~xt=kswQ@AlhZ$684 zcMOeeNZiI51zjuprx6r%LDPmr;cRRqboA1&W9i20M6}GWzr>H4h^tfmZH3H6@8yOsvmVnOqq-kV6W@1S>aX9(VHH`hmNc*LxC}e9Ke~;fX`%@17(Y9P_8=O8}z|Suin-VAE--mC0C#)&7JIxU;phmWhk3V z+N{8F-~JPzX8$RW!4u>rx6{n3t+apG=en{D90~$0-wz_ENayYUyI?Rprf(4kxnrp~ zh_P73ZEOfKO+*HeOy;EHAB$Z6LPdrEhi7shdR=FBcr^~R6KTmU)@53FDK{=imj%EtomVa!pi6Mcv3=0d;c zW=rKJJfU5lKmpGDBD|qF_}|h%i~O50LqSe6x7!NIv``V;Gb3)z2a+0 zv5#)Bz&O*{LKkzaR4dGtH9DE$5#QWX=o9}#{LDQ+4cj7JRlIy!H$HE0KoL91yK)5= z!YCril{86;*z&kY&&!0~ViU;WcF)RXNGV;YQpN#@Pp$M`x%IyxT{=?|leeEzoad;z!^BT6o(0m=$d9HL@%=>dUkfPAU2YQrsR!-sWVikI3 zJ(J6gs9O)WI$1t99zW@BE28qPve;VUVjJt;Pri1_u(f-Dy>jirKoqp4c=uwzdmc{T5emZ-gNyhiAFM0@*|czZOUyl)yq&%7zKS- zOmVoD_rTjd6d>{BW$XkN;2ZPUadH)^H(pc4!ZW`CRWO6(P}U0iZI?f>&a#IpD1NYY z$nlVuXx*S>C5&kS6d666zitVi6P)fpWM%YFY#!?*s%9?_d#X8ch?U4Ix#|yJgh0$L`|1rtn1K2C{)i7q`TEUG%L#xYj^Im%>&}T-YpFjPI?eRXp5I0D?_5Khu`E|) zW`17)v@=sZzrd%eN-;L~;jcE{zsj<#;-4SS=-r&Uo5Nj_*-~!FaKeR}jGbU#dr)M< zY@o%*|7sFO;DxJu8@8~r^L}zCr$A5`P;omKUghR~6PlyipC!-ZxhEL;(3Kw-%M^)n zMm}s^`D^GS;)_h}spGhGWdNW*;aUe)EQXzs5kad074x+7Io+Y@HKGUWhx^-EA)%0s z3&XgHmX(kjl@>FB42e*L6Gw`HqywL}(0En<3rPBA#`0T9&QB8}*#atsut@-{icA z`cH^lFKNWkcW>zN#`hDP;WI_%iu>K$$PyF)A9>x+8LAesuTkEhUOZZsGy1fve0d7P#`Z#@%gY-(Fia7 zCFTWLeg4w=9Dv^1kokm8AwQ|hdzC`Fky)7d^Bfw_ip#NYG^)r;1dJt}Nxw&Fw0=L( z`T&t*D4%6^(z_GU`*auADAwen1ro!VP@;W{*k+YKpUqK@rdBcgU2{r;7*ospDjs` z1WE{}(j{lWEQR}w|3l5Sn7yeJwL_s_0hcU}wp^EWwMl2lqE!U!#iY)&mad7&O68+4 zO)O4oYF8a{GuI__tANIWr}V+<(*tpJPsVuGIb>xIJJjZOd&ZEVY%h73pNvN%NWxZ_J>E_Kw0K2slS6U_*{WTXjs;W^j= zn-XW-Zfo%d$?U~SBIWA*dR407|Bg!5=x)-^#(k_YIv^r`zItc9SFINFBTETo-%6>A z&%b|W)oG)}6}!~4hui^>_AFTx2EUszY7IDlkI;4t5HWF%kl!cYq?CHhMMREd_*5Wy zf)ztW@u{dkHn3gCxZ}hP8em{V{2u{>F3;=8$Sx@#c@Jh@8Lu4pXgKTf#3D5!`l~zc z?vQEEYWLb|JEUdM^_nSG91We+1z07*u|^Q{BAF0QDqSR@(POnaf% zrL<3*5mU8z9v9A|qokRA(XTuW6&TST}^J?d>e z(gcelXT9B!MpNQIezK4PmXpeLDr3teB^Px=^4^1j+~E{Xty!ZF1&IV<;n#H+KgTA} zh5o~+>0+qgTs$~X%LS|ey#Xpyn8;#rycOhCwfu4C#<25p0k#(2emu_mkTx7c)Osm% z1uX;qM-Hs&ooI1dQ--s4u_;Xn&s_#JctCMlkyL!RDN(;!jS+=?_Niflhro-Gj=%nf z5&p};XmFRlBTrnETImne4%6)a?Ra-BlkA(tk3z|MGovNgq#$GK3n0*Ms!*mn+Y;zs zd%$X_m^s?MSK>f|hzmC>rx2O1_Nmg(%I??Oy5LAOlsBFlzS}Y{W62jRy^|l0Cn_lz z^w16upnRF=wAj7@S=wT?!&+^|$D+c6)VJ$0vm|7a-(RVLRes}wif5xTIJ`HSzl1ue z`geD28(zrKqB1lf$65K%jFMtKYRuy47GK$D;%%t6O?r+G@?v(8#m-_B1+tu6f{%Fo z6ji9v+V7F>scwfsjiUNcvct@n>RO5aVwP9F?i;Smvn4e5xU9UT1s|=CS!6hH_R>9@ z>o>mxQ@rAFzOiRA&)_S3as0yH$ZI}A&`($I<(#=`1`PuUA$t?;Ta0SZi8fqJ@?s{I zTRJi;GHbPT7Rb4K5_;8J9_kzOcNcMw6(1vNXr-$x6$%Tnjuw_;|L05|QlKtyvE!C4 z-?a_Zx+tPc1no1KH(}V%tgQ?{hLX!CR}HEnXUhrVo>XAPQ^pfDH0W_rW0X3DWC#;w>bx z%@~gPhwG?PFZ!Tg`2yvB_TVn=>^u39@`4*In1RJ~v<%UCmeVJe0Czll-KycHw{C)F zR2AQ=`Qz!!^Zs%M7{U3?u1J2UvHcFqQ;c>vbgw;(`!IkqvuI%Xg}!30Y1*#S#ftA# ztN){H=zH@tS8_$7Zp@8a;NV0qtL$9u<~mXQv&Q|2$T%JUcvHJto(|>AGnR}LYA)aK zJYWyY7k}z}ZG6KHf*9sGgZJf=y0x~zt~6B11EDR0?bBHFsmB(Y@or?~CwoZ{Mc2*w z3@GvX;E3{*AA2SriZCYe$^&JXJ14Z1S zLI2^|s6WOfQ@SH*W!&F#e)qz}5glWvdp$i}PLf4x`9NI%@w*Iv7{29BP~wvmnB`y9 z$oSv)y3;Dm;em#?47}f9u5sGBYP!Y78@yuiL+zvmLRhX> zvkdV4BDXHIC(QXPG$X)hidg8@)PFT}=_EU`ULuUfOh*p& zGZz4_mw9oJ`JcCvdv0z{-ZJg%KaFP~I>)SHJMJI2`A?R5^$x+QNcUIY5d>2vIM5L- z$YJt8{k$7_P-^IS5&d9Ndg9Lqyk&yPlPdFY6^WysQv0jbAmq#O69J$g%hlfuPrsHM zb19*5Y)>qWhqj|KP)JCtXNG621*3Jlx9%Sk?;l#eExGuac(}3iA78YnJb}enf$|mC z`T)bk1{JHS@qZ_94EAS%jldKH$ zmiF9=l6B)f=&awny~I&0sC~=zP6tL826TgDrh2O`0Ue7s(pzrnd+R$kc6~vQMK!LR z$jgsmj|te59lj61KoE>e>YMU+d~uq02Me{ChqD;REgPCo$E}7!xdKQvY7H4C%6__BUg$Pg^N7LR6h@piyDY#4Xo{*t!=7-L-7Cv zL)g8r=@Yl2bCt?AZWu;tWOY2n^Ps@`T_9=cn0-@+OO>(U=J6@bW_(FZmur^NKfpdQrBqKn&|Qyy2tMs16jnzfG*L< z?fv4C%Hd#gF82OrBcJ`ftQ{vnA?Ccr?i)>Y{1E)9wErC7jCrLHbAfIcc$(r5d zKf5{)L~TNeL@gRhr7|_i+qNGE7DTXbh1DcF676lQ_NAr>Zdle~L*#pGQKn8cg?}el zJ(2$8$fAvwD+Wf^-PqN}Fz#x#KW-K;eAyB|6~X^B{-?+x@piw5Qo?wC(` z=3W0c2~PeU*}K+0&7*novb#76DW>%Ly5&#COH^D%KG*;$M?Xsfr|G( zAmvi^4jONx&&~*-K_bX@st>~C)W2YiT7#;HSJxXBY&Fy#61xX$LYA?&Mu20qtr9J$ia zJTsu|5$I2u!Lc?TvumT+q|W3KQgEnarcI)dSzk7=L0?HGe5X$ybtOaQ@7$rBNXc5~fpN<*wkn|&N;BQfp5Kr8<2 zB_Uh=ji_|A6>(s&68V_@ah3Rm7{s$jy~nCWv6Z*?QJl z?~uc2+#dLmbMhq|e>jqt=*At^Ho%KwbS}xnFZZC{`jF+xRV+)1JXh#~wK;icqdRPh zRZT@+8vDFDRfQe|-nh|Yh)y*=4zJymDsOR>b}OdpXl&y>Dc}E(Ej;TLj0Jdh*dR7l za>gLh#PXfLf)>Fje$p(wV5UtMyvE-?FI1bL7!T>LLEDNSRC$i&J6a-?Gt|dc6WxRZ zc?Rf$Om39FI_D`)#6^WN8xWQ|BfUs%@}!dkuLO)ME#MCn&To0qwczrH-6xJB6n|X$ z+}O*iRjMPa$}j1ura;sfqeK^>z^!_b@Gk+`(Gg(~;+3x$dKphz^0C<*%L9;Wrvx5? zh#jPq23S8T+?BFrxNoln9A1t&Mb@hAY4;@+1km2Su(}w$w$Rn+7>NB^U-?x#SAii? z-Ys=Ng7$Cw&WkrZ96_+SJG9wrr+c(_71b&sHN@EOwWDjArfEPLd}fsir~vTZ4gfid zXEfFag>+jpkI1IMf@SYQ-eC>m%L1g0v|BKKSGPx5vgei-fi^#A`p?&!Dj=ksYmXLq zp%ndL7`%3IjEL^3|M2C3ty|y6h{0zerJid_<5sTM!YvJ)+W#SNNa!*9-sXT{V)q_J zx6zQL${Xp9rJ@$-sp9b1y#y>NtN&y5rq|LdaSvXhVdXpce!_b;HvAttO5aaJgPn&b z5wpjdC}!so6MM2GZ|)NM7=~DGhDFMpFWj5RT#1BJJYu-XIoAPPyXFSKq2soibCMzo zJCk;88JIPX$FeWT6cOZUoE-3F@ObbTXsco#$g!Qd`=5i*HeXd?F5N%8Y&Pm3n4+}u zd0)24(!?i7FMpk&E0@Gp8@E+ho_mHPm2ze-ofZAB$1{(1-IAP%sUZfgk>5*4b4vG6@(ty zOrZ$>EoOHx1mYO@!ZQcXAwmm!b!yG|VHNe?)pcM;xwCM8- z-`9t@&i#JmM4rq}Mn)X~q=^sUyvoK}12WnZHm*;vQQ!y9=?@muZl znj;O;8+QOLLXD20g-Z8N`zuQ3aXcxHeUA+hjyDJaRdG-swKEZxJ20(4jw2Qr55|__ zKmJ3uFcN&ZGyv!peNTR>_j9RIR+nG6qT+Tfvb`&y&&lQ(<#hxZxTdXf2bvPX%+xFh zXbCr;NqkyU>X^5ERlmkN_~IHqlFq%R1K;GZ=G zaHLA}<@hI!pv87<#<_^f%C^xiz-wRQ;4es-WD(P5;pAW|Rei}I->YM{NLlI6cw{79 zSI_Lcd-V`K-L-cB=Fs&X9ytLe*4tOScaAA~Kt|ekjprv_)bSNkCi34@s3-2142Fj0 zx#$+ZjU{>C`4xj78?W^3qh!!~iN9e$tkWBTyBlHFWQ3c8=@j{UPI+3kF8@a=*CN<( zYWN-Ap{Y(NHS+dkVqTWPTuYS~n!b(m?9TN}1&;Y_Wy^G8*>EdzYt5)wYq+W~)MXxc z7pGzB{h-Z_ST8x-aNbm{CjDvuznzdvCA{R#Xyyev(}41XS%s}5GTK>8j7HpNO;9g_ zA|=S|M~R~Ws~WcO;DE3PtFAfu{{UTNwMQExRa>$+Wa&Z>`)_w*+--Oj$rakQWo{9A zNB_CFS=!n~$PqNLv5&Ul4pNZ-5zqi1S6y1PDlMbV;;~8v2ie6qt7Ivq<|d&;h_Bue z_J7l={P`m$4)>obDXPS({n#UF4uQ%v3tfDp$w9&zjnWjYZSVW^3Pv^_fo?vH65G8# z&=fVs+07@nd7vU*;pkTRDbhIDE@8oORcTuR?D-&hKAGZ$+Uh-zk5Js^rv0bJVAQDy z4fXB;(MxkMmHyL!B>dBNP;}#@O2Vi6Z@ppjGpuUT&jE0<4b0H=@!%zV8kYSPJa ze?pe!ppW{$4GT~Q!PJda< zR{6MI(Khg+_rfn2_u77a#LsJXWAh^G&)o5;DpqJkA~pu&Qopm`5PVQJ!>3pcRFdYP zPNf<6zhPNVQkx<_$Q|vW>**#UVNpp-w^U}PkDKd<^L}(@3}F5RE@Djj+jbXaA&;O^ zow1V~vCjUKl&DJ*;m}VhlbLwcs=}Q`X3LjfloCJyi?oM#qq<&|ElUq;N27c->6!C` zO~PJZntA3owD?&ylT-9>6Z&TDbu<--`zKC<-fot~F-s(9<~*ZLke!6TUG(C&df_n5 zNPlG`C!3BlI}y~?<3xub58jCI2-}}WiNV9KNBQsX|d#ium>1FRSDQ>EDPwefT za?5n;2h{HK%wrASpA_d4vC1<@vAhL{!*hp={|&bsn{YnsBqBMG9%X24Em7e zOntQdWi*X<;>|;QOX{MSlNCcd4%+w)D=Xs=k!pu##kAU2rOv!Q{hgVf@am`^ZW)yT zYm>gV<{xcm^&D~H&vz@9_08gXFt%to828-e$D)BhS}bjnxQmM3IV#y9QQe0Mh3BJ(s{X}<^Z zZRdc{H?gNN)sWb6`qSrBU&LXK>vBY)ZB5f~0~e0cG5hev-zsN%vWYIH;=zQW|7;jS zP(g|L`6uevbdgk_spJbdGz;Ux(fv$mr%SYICwPh$o&9Zb&iut*A%&B6O)~8HEKQi5 z-!A94cyq$o7RGtP-j*sPOW{An)O+nt>nsrui+7Vrcb0ZV1EE>mZF^vZ_vatm4=8=|*vq>bfsAnom@FRr6Zr{(6}&zY=!y90R# z^B2*fp|CwGg1n>)x*CnfPA6j5q?aFH+3WEkhYDC-ExE1~h_Og-nOtgzPI4W}EO1-9 zb*J1d7#k;8r&Foc9ImfOcGymg=*WR51Ns4ey!>Qtw@=gNZXBGwg@my$ZMv&!r#Ns< zD}Gt?8O>cadQSAXd0-dr1dIZs9aJVBHbG?qY5UL)Kh^A4&qQTSaS`mhy(mS)p|+fj zJvRrkukk{fZuYId3229uh1)pcMxk~HrPiOzJ7l77b85_JkX*l3-32>%%O@ch+3x41 znkhY+ZO^pk7MKhuhid*%c0WPr9_L(Ft~!T1&XyOa6w}iZ>va%`a@4WyaYg%wx=kq8 z^JHU{XrDXY)~h$-j+iX`lhMlvBe*St74cch=AYGE(lxoxw%#4$P0qHvu%V($EJ0;>%;fc0FxW%doRq|;$kA%Lp7|6 zv-xX|)4f{xLsU|tW8RjMKXZRFTy-T%6CF%1qZydrC%9kSq)AGo%%@K@;HUim6?DXx zvvmhv?bB=hfD|rBV~>*16hwzAA*K622O106$AN>{R1H1c8oObKu-otCn)3P@>e_pp zrlSOUo7WC`I}!0ywP$jrY&lOMvw6j5&eBLe6YiY`)wuA+u%1bY${04)sjJj!n>lW; zIvvz@{>&yUnNle@$xzvd&K+F@So`=C)0XaW>leK*dsfUQkWz2`# zH1)2N0Q>iBb^Zz{E&VpGp50h@#HpW4;sm|L4Ms5yo5maH!x-0a7hi^YeeYZCt7 z4$pbi9HH~6GKxr}m|N+y5N74sPU4RErEOyi-= z-q$^c5xiote}N8>|HxHFE^*^n+S;?XXfk~FDvJA@LhH&lGxuDt?x6U zvn3an7iV+%r_y@u^U(z?Dzy*qhbt&Np2}ZyOZz8*%I(`|vk%`DD!75$?Eh zR)F#emH7&M99zU`qRsj==-6*rC^C+lWTvWH`No*roQC9@w|mt}Sq_AGZdDR91R|Wy z6|nUC8#L&8n7ODRGmN!V4Aj)q6xi;>+p_J;(0o6F6xjvL=eb9ko;s`qMcWqJ1*XgR1I?!&J-&T@xeSqRRTyLL9&(^(z> zdCD4?%YnxN`nmlVNyukE7D37kf5$}hH!D9R%%?rHK%kFv{LtTp;WW{shV)e5(Pha# zQeKSt#4U?MTRm`9Bybb60}E;CwGdS?F(te!vO>_a!~1kPvys2`@C-*YCB<`!aTW1;AC;8FXsJkQX(^<75 zeEJxIS7;yJ{O=$0UN`JxS00hnWOIp0wq zjdcXTouR3f>$@vac`?kkqLt$tJma=!ToH&SBy(W-V`e8mBTX6nA zZSFhM*leuj_dA-W+AvAEorOE8#JA;a0Jz#g88D3#D4=OautdQhmJ)rdTYs)POW+m# zOP>##m`uTGIm0>Ltb9ei>^(kqx#JW?L^`ETgnzMIAi4Gb}#j$R7g>F_^7`%{Tdb+raH7J&oXS3L>bKY-B`hsfDY!DDxjhX`-^!po!KkS z%@*&+zz#RT>O}>;gqL_bNW%_xQg8Ji=c!U?l2_g){Y`nErfewvHap_T_Wp7cr%@4= z`5O=#bFtjjk1laTm{fKVl@X>Y`dE?MJM~p@;C8U}?W83@K5?{-zl&yC%Zg8Df;Z>Z zwCNt?v2=BAZ@W_q7t z*&~VIt5;uHcans0dRO%7S!~w$P`g;!#pd3oD_y@^4#Q8V;O6+<*%Kk-2E}%SqpR-8@#hMXHlu-RUls*I)D zMuSQI8~VpI-JhKAua{Dxq++FZF%-{2H~|^1_i*V z)1}tkw~wl`DKmWXdc5V&FB;p+AmSU6Wgl$S5OuL z)eeR?GL)tPpX!1mSjBDj1(d$KU@Z%@)>`Z9y1XEQsqrrSE;=$O*80vub!KJMQ}vM~ zOyI7{A^82Fpr6#0jYR{ok94GZMMF!(FjV#jy z5xU<`J&4Z)%mM?&u`K=L0EPj#Iir^}oMj=D44TW$H=tX+FY#ByRCe9#TL(M@)zwwy zoOan8%Zex`TnhPCO7xYjKwZ7_@C6K<*S@A}1>U<1_p>^;q&55e4o=_UO_jnz$jA6lr~-4~m$Msjj`o}>06=47j`K=wE2 zTia7uty=20T+Mzlns=8PJ&2b^hoNy3$W50lCdNSeFUM#H$mToJD+cAkFf9J+njv5t z)ZgpaLc!gVbnryz)~$>$&n*H-?H$t!p>QKI6A?e3`1}X3o@ZC&SLlxaNSv!SUNE1d zpy=&>uwS$^Y9!YSF}n-Lp2zw9%!maB0^bPe-%*h6-}pC0Hh*lhvswBAiR=iqTs$pW zUwyyjRZ;8($Sk-G*E|<5kV|JWl=dd6JM&E8AFZdLQ1dhYnh9p`2kQpVONaV>MbVYe zn&b|DWNYFEm{wi?=DhBxKq=u`f-4X{;oR@uxnEnSOcliFwS;}9&J^}u9eyhdq%M?u z9CEWCHF)#uZ<|8UBMJg{GuDlp&12<|34caurH+)X&c$8_;QIt8E$z=rV+OzBbdYAJ zHzy+~;|;Yb8no4S_VilzmVzgrQhf`0=i71t6U_ENVEh6;Q^fX&Y};5dqEE2x>JMvZ zkGavH7>`H}CFYHKpRc+_KPOSmIqawQJ+lHd)#3sbc0V?s7cL1aJ8EJ{HrHx+j?Bmi z2Qh|VZ)|vQ1ARERZbIN{GUp2+bJ}5qpAE)s)f`pNo3RXa`Z#kX6qQvwE1!DmV6*s~^~j6RJ}Kwp`D09d&^jsgi&S{mRyn z4-Q83B%h?NT2(VePGtuN8O&HUIs{FxLk9lIVuM7xF^^_ydmjwk#y?DX5h-$cSG-hbq7_^|l8*Z!Ep5tr zqHuS9KV-`Q&)d`L_yD`ZU(Wruv+CF#3JhDvpPnx(vB%L=E@QI5D)Noe=aD6%JWUz6 zY=&|iQ*dmf)VFp}e%z{@Mc3FdWI#g z>L98eON=YhXnIp~c2Jl?aom3vvF1m04C5cW#j}%FQCg`zecHGJi1AYutxze4jW#MH zF|w8_yxGN?++d{OU3l{2S&*?rI$v_SDhtZW%~X`2&-b3APHJ^irinKeX)TT15>1c4 zg5&!(luG${b?JkyC&1MfM)DY~d0_N^opbQ-H4iW9fD~p_Ge<~gzy^io;;klwY5!@q zdcZlm-Kt|IqUOZ8dYfFv{BAV{&%%%*_)^okCKbJU{%S+wJ zh*<>4C{c6WP32ZoZ&V9_B73;%X@7F^zCisa(f;^SlS#-;6Tb2Kol%SJ?9O5ij8Mf z&BgK zP?O&1!SY(rCRgc;6nE_j|Jko7c;tTOt*7@VV?86f`v(~zdB}k>q&j3b!+M?63T2z# zD4~_lGzBKvy8rvkvzWWMkh2el_}bfux(Tm|Ztyc5X;0{+AxP@os0&5hG09x%>8ME; z<};1c7eS8{2+9>Fb3YmFnCSs$I~f2LtR?#Ty~UyR-odhxIq^#EZ=}Rn$#+I+axS08 z7{cOLgfc?*`YYd|DYkAKhAF4cnWw<=qHNws6F=#ti+5B@)J+)zZF>Fg&b)+kj&wBc zXw(|3`Zjiux7n9Q%mz z-S})A8Pt6~Sy*tnY|XzMbpSZ_uiN)$iP;Pj`aeH+;vkWs?$!fI)OCTwl#V^r;o7Uu zk-L0WaaVW4)H;sNc$Y(mAkIE#Fsp%6>x}@VGBb1cw#ZLI zjHiQBo8ZWud+&L(ut{;o?#Y#U6%*9i41J&K`l9+=d*S(&w$N?n@j0}tV801=#@pwl z1ygT?HAC+3*^0y>L4n#I$u}s)9Olh^W&S0a^-_ECWy_;0_e2N@^MBk-EYhLlc2x)F|TMf`J|8yj0{Fs!X95l)^(15 z$#9GvWa49tn060}M1TAI90Dn@c`D5=)%RZLoD>3ZhoRyHeK@QW?|K*7gD2{zotyxO zv#6;hobYL6q_C|`1!vmDc8$<|D}J)88s>2%V!gs^=MD_b{jZuAE- zyS*AaTv(LsPNxzh3cggW-haAU`U{(HKK*Tte2MvlqRC3n9w+7V)UIC-fgV{Pq>RC5Xu+?$zIh{bUbhP0+}gkVAu59;Hqu01lend`!Ar(d zE#Z|KFl2|@{>D6fY!vqO=ksASDq^c+(Sm9NzGq{Q0Qx=YoJ=UMv+_mZM70}4_7T_V{hsMXU*Q&n4V*a=r=q~eke zhEX2VVuilbUFN64KP|V`Se2M^6kD~=zCKX6`ug&3(iSL^PZR43H?%?%O)nYJs!869 zJ9voYyC@{x%`Yq{J#GDHpiSQ}Y2s)0ZMcPwqbUN?QL{NPk0)`zaxfAGM_*zSfAC-X zn9Ad_?9-AEB|~k&5b5`k%z-(Wj(qiW7um@Q6FW4#ZbqU+`z;<0*}tHl@{_1&nq5QW78}V$Hw-I= zNeqJN)Ep8p8AWcY(orbA@W8}k59(w#5I244@) znpR45&vuMIV`Kg;^E`pjWG{ERbJT38wf8GoIUVMQWc_cmuYZ)-rZQDJ9CTQ-^Am73 zKWX)3ql-8+PJUrr5waa+%3kvKmrCzrXjKMKgu9V4lM?h_SGG-^Zh+o4_AF7w^eC2L zmlM8DYcr1sSvSz>K%2cqizeXQqTN|jK4uZ0{O)afPv|ZcUI~PTL9jdniw;TfS8O7`g9zoeX zjtyYkp(`JtzlJL}@C)YnI|&Rg#oRYR+&s{tbLr4J+pLO}l+PxsRvc@a(_G6nLd8ZFs@6YsTpRYre=YT54NHux=-Lm6hk19SGgl@V!A6TTk8S2$^-SjYrqLfG0!OX5CvaPnw(xq znXQ2|lBJk)R%6s>wjfYsn`||JJAQZXUQN(bzO%!9;s7_3Y|#F6P(+Q(p5IqG@`xQC zTXfbifr~>919jiABwm`YCp2tC3Bh`hdHE-NOYb|gHb9v<51ZB)q#VDlvWG7~^)69q zzMHJuCNeWuG>VsV!dbeNe!iwB^I7uCLiFl0{}=;P1O%^@vlYct59NGR&P%ttweA{E z&u<-?ZfHdBCmWXMSkFt}0KQ72K6EFq5gAUnLCWpt?id;iihZZ@aL2 za`kEOKtKiC$4)i5#TMiy{-TEE>o6dMLh*NIsFg=TiUw#fFf+-GX&mC1;$xnD^VBNCq)5N_A=ZYl zI@}Z3HQOr>*XmZuL@NFM$d*(3++`_<{mdTKVx25t>ed&Gtk1wR{g%ch-=MFiOS6$~ zR^y>;kM7swtawVdFxtPnB{`Z6d!ddqvQbxKrku}>)Jp|k(H?w**(zevw)mJW?` z7g!lm>8xS7IjqmZGIG?)t8<0HcC>@zY^Nnl6YZH3?LZehn*E-?jN9P3fi@Kg64R_s zr)sKmGY#0#w4yNwS2s5s#Ny2J((T_AIfnx*J?}H2BcUf|C%>NJw>I zjBOvzvrgz}?k2XkEUrByA7LT1(T=Cd1T8bW&M`@*FC|mC{$nVEM3#|XOD?TThqeER z-tbKurI6rT+hWxaRy4bq!KrVc)~JftmXjh~=u9PB{4a8$gv>juU4O)~P{n~tT(;Bl zUZyzLe-` zy`RbCaC}COV%GDp*3lP%xm%uEa_n2q+P4OtGKD+Go2gc;czCFGO}T$xerC6BhK1(f zo;B)!ZvJ1`xnlRJ!hokgMO*u+ll2e?D2=g%$s`Nv%gI}kEFJeZ+ z&ZheVwY3Mbl&|Qeo4b&h zlKkdAgLzbFg^y=S)i11k?>^6BD)PGI%{Lq0S>28`#k0Bd;JEX-c@;1kir?LK#<71_ z@(0G+Jp6}R?sbg=c<_+qKUADq9K#h(K6uJYKdJB!oc?t8Yv|0pOM6GIJ<&7bsq4bI z5?!z4yybc|zg*P6cKeTSlVgw}kt5922)LegSeO${v-ms}|)`@`5oMmHDU)qUh?iGg0M_4r@;}ddc`aU0%lQd$&uRp}-=>L7E??ynBw{S(j#! z6CagYkAA}7NPT)bx9>2L%t=}$Y1)lgyF2r9l}K5t!r(d@z~C-ujpSj=HC>pO;oJdT zkt{A8`5XZ-1owP_R2u}}7=2_Z?>w*^7To}$1Eri`*aj<|S)N-gU=L-1B1;b&I?)x_ z;+4?{9EJ}ZgHK}Von#wzWB=?N-^)?@Uf7^j6T#I;oVNN0#kLGzES6(Ex6=5iDxhBP zWr6)A?n|`sT>O|i;Uq|pyjh&b1Gx3c7u*R+U*uZUsdR@QzeB%z9+|_?X|#*jz~a zhBDB*23-K_SAP9mjBg|mJ~l9**W_WCtnPVA@h6jq-Uzcp%Nrax1uO`i_?TyXWv8lq zoCAaic61bvVowM8gL~NXwc!2y2I@y}3cl!F{Shm+0?t+S2ztdiz))o{+F$SSgaP0< z&Q(EA#DV#{3*_Lo1+gMVyN3yXyyDiB+VlB62~B>xoNA>S$ABc}<6h%UEsHM7(dAC)6Fz$<+2rsnR1(RkTrv|VHBvSukLo5VJedKsSyZY^7SRgjGg5n{9`p#|6DWTG?DPOQ3|CHr55cHy_Y+J zAlR?>s+B_RLKOw+>s4x!VHgPa?jJzNK)j>LnMKpvhHryPi*dw$nBIG};?>MjJQc_Z zKL*+BRG%icCmSc$ulDa;)U-E9!lzrsIi&@J^KXwHZv7?SYqo^8}quygXcw_ZTIK+QtULZCFd-rcY=Va33!H7PpkYnstYazjJ4 zG;C|VHwq46H!dzAsga#O$bww9mc45|dCwwsPI%|ur#ag0&Oe2&{u4Hgq&gme87KYG zMnlPSV=7!54F~es;l2%E^J7$QVXp9H2R^$>`!mM;6OgocMEZEH0A%dI2Z=lenm1MG z6{&D@`a3Zv)=L3RwwZTtgxioOzdkh1vvAap$~OlwG=-IPy!2Xlr}AgIq0y(hmwQk7 zx(M&4j2eBK7z$6GoJi0Q6)4~}I(rzzcp6+!o#cU%zL3s-BMT9R8>=xxM?7Ce%Bnr9 z)dUTRiWv4=;EzsG1*`R3ydB8q-V-Rd;PDGoONlNqwP)+vF!T}6GkE0lQ_h%hvDEk^ zu(mqh+mY?J(lfK@i^V+Hd=f|NP@&WoLDXwS-@6d7N5G7oO^@qFEYrl^&*r;q4K!cc z6EO^4zL)hDh2#w1Pfj18Kd(^)c4Ap3AKkr?vz`3;vtn@yZq1zMNeIaQRg$Kq^sf30 zLw2!R%gJd#TJ-L40D*2&Sh;{cPXqZDY>}c8f1qNh$62%e^8E0~Y|HU9qSr#bk;iG8 z?+W2_KTqR+>9$LtT2IpW@n!b|U=Lf$?pc)clmi$b7T4d^4b82Ry-HvfHygRyPqq{( zp@B3hAd4=x7T3x#4VGFMtBjfVSzZM**pN$=c(;xn8-*bNX`&}P&k z;kfkBZo5TT-tR(<=Ie+7zm#h+-1x6B1A-MXA-m4){{Vv$t7mdWvV%YT@wka5Gk^uI_(gWZB)nUUIV{3A8+<*_ZkvrwbU2*(dyyl6uEmV-^zpio&a1e zUsPnpZ;&gkky9a=OB)di+`skcCn!`7i`M90>ybrmw* z^qLz{FSMT@5!p%n@A2^oN#KClS6q@0sg>@5Q?_`Zvp@ms4pMjYC4|2N;6F=UGN z*Ut>#?||^%_X(+D-CyA$NOYxqT=%z4QwVBN-iY&C#6V@yj2-)!6?tl&A(~a0%LL7Z zju0$hA=ms2k+D`*<`hqyrN+TjJ!&msr;w(vf82S+?eKbL&h~L6#eC8UZC zP!-f|`ATDHng0gRHou2o1CH!sO|rcq(%&-8_t@k}r2kGG zY>~01WyiHl&CE(&3%Iq-P5gfLb|i~gS7H#+%=7W}^_@D-M0bA3QQ zNBX?sfTA{6g>0OSKhWFNL1!jo?%hk>jolFwXl4^#YWY#=2U>rEOVi~q*~dV;dYuFB z@~c4c?Wu_`5-3XmOfv?pOZz`ZxZXFtI_=X@%{>`B(`|mT2Ke@s0PV_seM1S#pz^kB#s_b5yq?K`YZ6T_dW&0?8doy5wp~FMFU`{VCf=w+$_tPS~xD-B-+q(GxTtd zNHRR%ZR0v1%A`NM^3%5VgV5Z_2LqRF+ZkqYYX=~~4Z%2s;e6TKZ$xGeUS^yA5p{Fs zliiW%JEWxeN!~(*E`I}Y-daD6zyKGxSfa&Qp-A>RY5r5^#kKd(p z(|XOHL2FYy^JSkk1|?9|^P*tjizWC&poFnwUdIZ3C+qzxW|4UJ54=}wws)O=>vf$M z%D?MV^H>gmOuuhu(6QSJEk5Ac9FTLdvS}_nS~guEkgJ9b(cSpFTHi*4wDa{4sh<&& z$UgHU6x5d|TF-1(j7wT!`_5fol}P?kYxGC*=a>FbTQ`b6+Oh=KU)DuX3!O>Dg^t(z!`q$1 zUo_175`rNatklmGbjUsf5b%Y788-}?^txZdtKx(WGQ4L>%~VvIA-~k@lYk*ik0}I|4GV0<|!RK`lO-E$khr%bs0+({d6t)5nLjhtKRA#qM{lN zSZ=}S@#X&YyqF1N!Pa?ftSO$~@+At$we{ODKS_OkQ%gKO0DS8hOS8$fA51@7*)zGU zU58Di!!HKMCT5B@Y^-yR#ptyiVBW+AKxU@2uhes!uq%#Fo(Xb`tUe|O-u{kW(A_`` zL{DXgsvu@Vi@@4>=t8er@Z4(hDwT(W37e{N+n{Lr(I(LjNTGnmwi_o-)tebGlkZw< zlIdBQ(+#J2Zy%Mn;0J@hhV!ZLjT@wIET31i3q&>n$YKuJuzU?HQo<=z2SXmH= z?G1U{(x((0ot_;53E-?Ip3m=w^v9D;85o@v^UZC!LB6e8t2hV{>&;=cRa9D_deGdP z@P$8uJ0Q0JZ*aI3)Bx9g(7Y+W;E|VJL5%@upo~;doI!Oy3VkT)i!G;#mcO}k=uv{M zbP*{x{L}MQibzs^r9V^Y2>9{c8z`+s)(l5*7>sacT}K`jGu2%i zO7*hrdocuTa^kyIU3W|hE{FLXuHV&K!A(!J^isg9*w2h38O0j`{`bsBKUJzn+GtS# z`I*A46k-azUY@^zgL+Hv?7I{82MTJt^STu^#G9`+t}|kou0BUa6MSgX@UG(oTguqj zly;X3l}Ge7>Ev;o%D0Uk^1VcT?nYKWBifg3f76p#R{Taktin~R%=Lgt;muKO*iZxP z1nsDG2==nrFVqbe#gXiIK@8nb);fQwvj?cw@f_$`xWd_dZ*YuMUd5rA<~CBbgerTU zl7GAs?ecr{C9$@kv9Ng9*<7bI>?*8ry!@Gpma|_gd-X(xKXj_0O;sZSlk++6l$?H#lS~i?dz0Y~vfpt?XV9XVMuKdb|nkh+LqDe>WLrF<>g7F~y z@${ziJmwXOsXD*Y;yR^21fJ!t6~W+EERztQmX;WwmN*m@Kq;#YXQ$(3-bMuu5Co)E zQ8#<{qtUZtc&WlzleF=KjcOa@vqe0%`H`-zA7E&IO*dIAI)Vo|`gge{B)12-x%2x1 z8tw0~Zve$tg=R1tFZlv@-6=7mh1CTiKQ%$d-Nb1%Z3(JY`|%%#Xo4Af$K*?bnj^C zt!6RUpj_+o4NGE~*V!4bTFB~|sQ-X>$``-ugw(Y1vulCuA3oezr>|_PWw$R9>YbK3 zf@NAazjsg#@K-AokBpsv$yj-;`LXkX3>61^j*6-2d~p%FH^IzYY~dtFR3TJXRun+5f+mrwb? z|2;4ktWZdkMU0Me2G(@jy~KD&zJcCj>QvSjq=3|x2nt)IW(;C@<$F`B4FY+Kgx;m* zi^Zi09lF8IGNjByyVe>;hka88bu&}=x&S3*)Nbt;R>b0T-i@E|DCC9VY zEvAQx*Cw$U^LOU!Lni&(Nj{Rwe}DIjAO+dgF&~rped{1j25Y}oJ8xF;ZAKiapsm&e z{2E!V}54FlXdfx5KAsPvR-D-V_I?_cs5LoWRnprRlHhd1y{({^xLu9V!2??HTw*o zu!GVWIp46I9VlU~$7cpmRw!n282B#s2-}LklBh6{Q|i~C=Ao2W*bIEr!XBG{W$XA) zRON#ZW@8>9>I^!ms51UmwbsNDcPM|WS(Fb$9IXc6hmX)ljgE)+NKJ-bj`3_gv*8sNOqO$m zE(N5cmrS;z02|l-hU+$k>%CqSSXCXIK7%E5kdC^wMqOc3ktx=lxO@Upg9Lc1o%8eY zD7xh}Xre{#x5<(cDTkTtIRw(=y!h9DzIX%Ye%nPXv-HQ(@Tq4JJ!EfM>8+u=gwAVs z23^Mf8ZW|#UhUC`9K0$8y!P)w?$tyLx9)d(072Vj^N)+xx@Vo8TP^pK4k`xh%l5wl zTn2vODEmK<$8^01&8`RLnR&*4SO03MwmWx#Xy6X) zfSIc6%yjSmZd&rer?iM7=L*FkMaYaiz3EPLwx*c{^PvvfAr@)hEwT#DJhB0duqeP2WRjNInT@HYcj=owG#Y} zoX(SUR$ok0ZN1K#<7FFfvJaN=6zt_z$cCTXpxNfh2UwaY8@H24S#B<&6pu~bNV;k< zc#b5S6d%8fRnaW{hBTkX`rZ=ONr!vVW}crl^NcnX#PdnpTKCo2ytxVxOqFfReQG(9 zwL2&DO?P($6YhmW(r{L=_ zLfht*6sg)KUs`W|1CQz!>)A?JT|2P#GoI+O{@4f0E0xN;tESVa_)WQR1$AtMf=%TL zE2*?eR$akH+uk<~Rn62a$bj%7f93{`J(&N!e!|BJ!C@nyU)O{q%EBn*8MTc;H`RKR zcNXsy$r|p1OzKa&9L;ql??m+?Io_T2{I!@~?IAkilQsFwySN6rtx5NFbNPL(JeB;b zO6)h&766=(uy4}W<@NZ(@)^Z#Nm+GFPj@(V1T*C4ndk(rbAXZ9{a>72Tokwk#VKAX zxm*Whj70B2@G6!)z80wlyx^}LN`+_hy?)P>|4M|*s$af!@g^+u&En();wID6q9{>% zwKR!-@nIq_AP|@)i^~Zr5O6|ff0A~+owK}2avJY)^w`Sz;WN?W52crmRu!A~OruT! z)GyhuJ5JV>v{k|2(WVZWPCJomYA^MyLF1aJg zmp#7S+7;I%0-cX4hC}GIrhLPcpQV?a({0X=KR14kC4UhHBuBu;iWIG{Bj*`VKYCfP zb0!6TKU|0W@R@eZ+xC?#=Ew5unLCyF1lh_|H`q(how+K5pVgUec5`iVba#A9`btx~ zf&#&S-Bly?&v+Z#cp{o@xF_>manTvKndwYI>C?ZxnaiEe97N&;L|i=a_*zUb_WlNPDDwEAt z_!O!<{;+C6?LFp{IeH$hxhEE_y1{H^R*57|WsWkK-qGSH{0g+YKDt?nlZvjl2OW;V z!419IIneR@8f*>zr6??^VNlwC*mfYZUd1n&qjce}PO2lwMtY{Z-~LeKW#8&PbgF)c zo4YY#kQJBG3dW3q8KR5w+cm_{w+*ul%c##VAZk7>9Wc6pU;c6LTgDO$D5mWM&3uB*FQpD_ne|VNt{MSFj6}*{7)aX0f{u4_m00 zm4r`yI<}muKXa5bAS}AOuhK<6E-U*?aplCQ+CgyEG}RLej7SIX^CSOJ4HcjR9@aM>aEB}QjG&9b)@*B&euP(CRTlQ_|nN*DJQHwBMI$*YPJlPaDd z_eANF14Uv{9LUU7M8(C%ZIrM>y0&ZaKi(KVxofiHc-smc`lo~u`g(wrm&f6gi~ha> zN=Sw*qzk7V_~U!0!j_4W36=3^vv^z`-d{N8Ud#;z+%L&p;DcJEjY%i%B1`F~;pBWF zm=FDqxD<`*dOtHT!0e*oDt0Dxf);q#nr3InS3U5{W;ZxnYjv-scv z1Jka~>@K5&f?Fk=uFWAD3}mTa_ZB@@?6|b+yDBN0C{j4XJzMOVPV;XOOzf=SpkD*Q zqb*&C<_jv264aip@#!4LqOlled-bh-t|)elZ$#1SJA=NQpc!`jfErRyaNeg%%pd+g zF&=hCHyL8yt#rvLh$Y$1LEO-DOSjKZaZY?sOXi#En5cKuXWrLHWT`6@dl~F45 ze2=k48V%k9ZyGksVAcaVXPGp@JV6UK9r{33tvSU6{K7kDTfKqBOU%$)+F@befjw9* z5jlRkQSVc_hw1Pg16t*8t(J;0(^;j8ii1;sowXpX!{v`Q@iR@B18JmTq-7Bz_UxZ* zyjb8pY0@GHZ+Ru7DJ~@RSo1@d^%CwunaCe@FN6wu#z~aJ)iixw zFecWVS@o;GPGE6Ag;lsPrM}q2OzWS^jM+;wdilETvh5aVk#gAy)2|=)@8koJ1@MUR z*l`&o9w(k|YUW7x?2|IHoJ=I8oE*NHzZsE^>TJ196vrbZ7VoQ+8Uodf_<*zR-_!&k zC&1S~Uny7E9lpAJx^+4d?h6XyGx$}%KIX7@$!ritfRxm89ZBo#sW`l(3Z+wyCC|_t z^y&I*RZfGDd3*3<&#*lqjzzCxINKd6RaS~qdY8|EO@Wim0jgu9rIrm0-V4e15z$J} zpc~oZqT3T!G#NEt_E8%b$J`{>cc&hYh1pcMM!uLHl?+vRg9`PZT%29F))nkqJ_Qh+N@D#h z=KiV2Kay64PNU(LZ@;7@h>N|KVCUY5ujnBT(Bl*e9&Ycy6?<#6$u7W{o_VcB;BT&v zT9e;mkrffOhcq+tlmjxqNeSBM*P^ZW?EKLSN2FB79^10T#%HYD<>>pnu^ra%TG6%t z?CvpXxjm1%U48;K%Yz6qDPN=xrhtapL2=aLOv>#Y_ZO5PTrbuCrR)Ap$Ro5v^you% zw}}r|W_o9+r0A&Qm+x$*J-?iosu5(qE0xq>?h{z1as`se zEcGhAM!8@XSn!jC;$+qr;6}?weeF+F!S%80FV?8zOCXSiFJblTU(O=3n^%sY%!v)1 z9LVjRui>X0LR5u*jZ;(?O95&e&kZ1jkHpJa#Fs3EqY0*|M5T>wDXhVfubr0RyCrkJ zE^3_Vvgd78dHUbhI>sKtKK<@^`WUwHO($UyaQJ05B=e?zg*4uOZ;5trl1N?0+hSg& zEtzKdk7*MnIkCTRO3C%BT6Vn**Zp_`EqfTBf=6pW8e#LTqFxL^tok~i@7X!~Z)yL7 z>HYLO^_oG|S@7d7EX+6rh||KNp?$y3%Q{``O65dR(w0b5tVpM$aQ5~Z^lAB}=)(ko zM;whwyy+%lq+1nx+!%rt0Cd;=&XwWw#K17`Vs`>ZN?OQmq5NQBY$?C{dHy6gg~4U(%NkWii_0Ik+?n=W<{P0h3d2%y6R9WMF_<2WUwYT;m(sRp5LAwr zOJJI^N@g&4qhz>T|B2B5_;3~MD2pLRbTrpC!ATtY0jOwhla}l|+bQs}?d&ekAWBE# z1#ono9DHtYXYMgt)JAK#Q&t^I+qzdt*8sao^ltx9nXy}!%3M&ys9K*HBzSXI3|OkG z@-en&_+^V+YdZ?(ZHYp|j6$Qj{UrTl?{&kt0#0+QA^&&VUgFdDc4!Y5avnY1ChXrJ z?(3_@l`S?dxgNQVYA-M38P8Nfko> z6w8MRHkkzz|4_)L)Ox-i$W(RQli2d(!Z)5^mbZ?T+ z6C)S4nNJZc(uf(^9l1J(v^p3x_r$oF&n#nnS-)ap*^Pip2CT*n&`(jWJn#YzS)SRb zrTo(psOlOZ_gL+h+uP9swi!>L-|quoXG96b9LYpO$b*HKdqrkIM}s%Zo$q_VGlxrw z4cph$?R`V4v*!eLR6^1P**N>ot%#;83s44 z2QZb|u#i8#b8FsA(eZcSQs!&&r4h2!0yY~41>RLarl)v3=-bA zf2J+Uu-8<@CH4Cd-gBa=Jmz-T52kW7F)7dd&g_LVfoGyQC6h@F4V?=0M|$_b?7LPT z7;tAFP!)#xnXwsgGtu`6w%QfJqW_X|e(v)db>geOgv?9c4 zsqQK|K1_KZbA9{Iy*ONrRx{58)(!|gjTP-YO)76eziDEFr`o~-6Q!tpKYBA^l8-G& ziWFi;S6|}!Vh3?Q3==4`$BP(0h<{Cxt}+3)8kFj}JGaVj?zcg+mY8LF#c9*&cGYGkZvckn%L6I@Br&*STkmm(N!Dw3$Fgh ze2z+|Q>%Lvg!!|rEwKg07V7{k^9y&k19LbO z_JghXF<`^HEM9h>pGM~41o9D@JvviGyzfoRLiMaCbs6eggC%P;VYw2#ZZ&R zbAd+}HulQqsxNF-Su8;V%Ncch0C6FotmeT8*XRapZIbnqav%J*d*R#774Iqj=jyRe zVwUC^U((HaDtl#JVXYi(4hLY~RVw1igR=M$y7kk>@4@i~WRk~_KtNd5a+>FJtKWie zw^ou^==nVLsV;iG*@F$5)ysrMKlc7C2@TDIk(1>=Q&R`1DPB&kHYm^K1MEXC^L6tX z*YGp50tcur}M^io_Q)AWO_>aoT$+{HQdx_^?9U%>axqgcreLa56;j-Jw?nm?dsqVz?1zl4$>zb?LHS5m0 z-70SEm02yAJx6%uA4yT;r#)4AXo1!E8ot8{0^KH=^TY^318O%3%>Q4u=tq{KMx)|S$=GFlu`Oww@))2NdMudjwIq^@jV zrJMEL6oP}HI48HJZ6DLz?+l*~t~<;ND`y;1({43!vZ%~*#?7g`8;kO1WQp6Z3C3in zc~}}eLQ5l%OPb&$Fz+8cKCud}Ce!^4_RguoS(vZe z`^EH1!FwB!R+oHkZKs`;Z9liOvY*sKtlPPZnii**7BZLIncCD{_w(}D(kvO{E&PI; z&LB*ZBjfw%f$8=+EdH|WrxmqlJIE*d?v%Tjmwao&;p%>+vMcamF7un}afPcIj1Fzf zB4kZNk)=nt4JBqQV%!&{`&MU^@7HMH(b3UnaNOv;Sj^o(rrn91cM>(kLXx7@A9NIU{!lzv@F_(b$Wd7ujh8|bk zr*2Nwkil)sGZHg{*E9(P+#3D6f~;h-GlcVAcha{y%!OS#Rx~u^4i4%m-zq`mzXUFG zKP5momWy&*1Vx491qX!+$8e(Flkia@x_}m0yeHP%kbNR!z72HQKMa`S18SyRi>;o|+*$ z`wU9017HBHsBPc+%~9NnKR{77RTaq_u^!f$6uYtLM}OO@#*rE$xj$Z<$1SX7|=uD68Wa@dVM zLL@D`#tho})m*?5>h0{r7}JGdM+Tk!jt49L+nyCAo^j?!77mk+LBQDqFn znv)LC9n++rAYG0ZSr9m<)2`9={1$g}fvus&0=cG<`9fFY#-uu{W3M<9pNxlCDuE8_ zVMMn(rKg>*yG_3~K+i*KQ&L#+ItX%nRmihW&^_c-*214bHw zJrn`4S3YfGS?deuL4gxZrdvH9kSB@!d!|=e`Q?K|@b+^gs2=)dJold+O^fSD1DEgl z8xu+1@l`^#@kOSF2CiOezh1dyUxF-=A1I ze^tVI;qXu|_N6|Eq%rkJG7{zRC9Ax6Ep_Gvv8QBN;UrqQYo;92c^bAqPz5Rwyh7A~ zW|NQ#3C8=Eh>w}c_Njxx$Ki_Lb_v0Yu@}m2aP z0f3I}j{o49kJL>=#CFSZbeF-%cENk)5)NcVfO)a!*~6y(qrfx#x3Ag-s&rC*ziHMq z@Z5WR%Z;H&)GGC++Qi!iNf#i)%D;D2N0-!)hv%hXb-NQ?Z2<4|Ql;qS^6$(Mz$&hp z`^K{f$8A&L)YO~(XF><2a;61!Ho+^N`{|a4za!wFp82HR<5g44qCkyRdX&cuGj2WV z`FQNwL&(N^la=`JT%%wBn=#64z&;#C6$9G7;kXw4e1y1Q3F%e|^n+9o#Qp%ThrrzG zN!$gCkw_M>R^FtmjVH8+tIh`1EeT_`^h+Hdh%Vai1MHAHk5_>bNv9G3-LJK6!g3hW zr!N0lO~m3_9v~W`Dk>{t8c2pbX z@J$a)y7+%D`%UU+d~vG+{#g=UEDI?rX&%937{K1|Cs8< zTKoXw(Y_3sn(z*0ukwE8QGFMiFu>)f-!RV#wAQ$6_yjDr{J37z>I^#9=*i|NpV^@6 zd!>vS>2<>rep{=#)5gNSLC@=NX*X`@W;vov8Su_W5)`{xYAiAVg#n*p zt*%U3<@=t-KJ_tQcwcoF2X8d{gMUHb^RXqp`+8XBhU=Y2`4%`S@i_rS=GlDyXtCRh zU=t=ku6V&$YGMm#2XShEk-g91De=Ye@v4h+P&ecszT=RRC35%88#b2!-UW}wzl<1- zjnHYN3(D@|%~^rWKoPz)=&x-;B2(QIWX7v;UsUd$KTqjfOXs;@|3PdCnV@Wk5n;&Q zE_E9KW6tF53EPR_uj-Tf8>)}NOM)E~I*Gx%D4?`Xgztm)`~968?!YZg!pr>s#R5prprm4X7uvtm z&Z^D@)7M+x77#W2*;cZ9e?R)DkCG#3_i)lrT&`C?d1>{T$QFVAjvbXF)+f4*LED@p zkaX@G1CS-_R`?~QHZPTv=*<>O?)rPugA0fEEBuZ*9JK>Rj2FA_TR>5Vs!dOR!I(#J z{*SuKe_-HVY+=5C7{^5-mZbJHR`d)gDO5zKHMl&J{S+f^xJ`|x|V>`hbh7j4U}Cw37$d2PdMU}^jglwm3VjES;} z!y$g_eZKjvs*mmyRxtAtr;&(Ufa`fX(M0FSo?fHz=`vtm^ zaL@49>qQflNkeh^WvC(S0J3P|6&wm7S5*LK$}N z%MclzsQ;rKEP>DWMK98a@ZT{d{k++N4_JLK5;*i2dvT0kIteW8`D$CbESJF|hj zo5AM%r99C1Ye-bAUPJ!;?o6}Zq!C2P@hwF+7b?v3X2VD=WKPb2iC_!k%rwM5y+xJL zFw(8IpyY&f|DbUhQz@1YNEAo}w2ceqdZ?rCo|na%5)fq*F3}7&qpoPE!2IZNP`Va=AUywTY}HhM<`iro&chW89P&cCl0^zr^7moE8Bj3*vfQ3zz&<~d+B6+D`gA<1tMnqb<+3~zO zE}%&5BW2ZrgI3+;)A{GEs@Dh!5t#at{(OBJrpUv_@s}?&pSrRD!*s@U#j~uqrsIsF z$BG|^P5r7$!EHWz#z`D_iA3QIPVVMwI&aCX2yqt+JBI~2s}u++WNc>(uxo$R@T-(j zwJT+MeO)Ww#9j}a83%YjKRAm+a0LWpJjXKdjo%rzIj_8K_&m?j+MT2AALdYYze!rS zLQ3#ZPWZn#10{kkal$-dej_if&n=~Mg6&F;6RmDiN6+0UzlGr*zC2mC4ULxLHMq@h zQ!9bZCt001tl7zxe=^pIs5w5u>Rm?ZQ4OH8$ zb*h*lnbMNAnl#Xob}8s`E!e^4k$r9ATivxgo-y*a@gW$%BQy^5HEto(yrk_7<>ENK z?VTc97uKXilAx-K%;{OwQjEn~J`Z%6cGjz8N!k%_)ji9y1rfh;v{OCn@!5FFTzD2N zd!20UP>@oWHC7{zjYDsvyLfq&_KId&zra@0l3uX|-K~eO6>+dG&(F7==yG&U=OeUU ztsD~U`WIiuX#aE|KvCOI^P$h^_l^Xa=3B|KE7^fa0Yl`JgY*@j&uROf$4MGzSTET? zY^bTC>T*t%x<$3u+mw}wbluTfP3Wql$`uU3vWU0{C!>-Em$(ZQnZ37Q z#fmt9>a&>1^?|buNZTn5Wt+Eu87*M?_A(hN&;r)?#^7It{~}3_E6`3aN(1&{zPgJP zsHT=P7T)6$=iKiRR)qiN9D!Y zbR{E`pa|<=VNBU<_nsX|0F*1_T*L(x&YPiD@k9rF1XUBpWpU;BtkA!D->j{ zu+5iDS60A)A*V%-dc2_A!9J0ZiX+txnHtT{)0fh`;!;03)jBWj_+Hc4j4O_AdP(u{ zrqDO*6j<6Se?+UAbcr3suxWUb6ZMwnGRVg_x?$;v8eQt2)}!^%yfD8jdBX?>5kPJb`Y-0KKoA?C%&f5{5wlz>YvPSCxXtM<%O>DdQ-7FS3bW> zJGg&0lpyU{PY#;TuKc-fLc9>?^kg2f(vNjvLe&%NgJJN6U5~bS5NDO~uvsGSJ*d)Q zRJiFQ@dW;+B+JvvYSj6g8Cz(iL5j`zY=cKj|CQuRs)K~(P>qF}?VPmC*AMO|+}F3i z$O3`Nb9I5DN%M4x7KnRzOH69Q?(9)%|BbQ~!QFtD*UfEok+8{t!;_3UJjqu6gbZT^ ze6)nbRNlR4cSu9J>Utto0k=@YdiYw=AaiT?W!s8VrTlcHM_nS1<&=C5jIT-dSyxF2 zzJ(fb)%35Uhr^dg=su7AG7r_p@8+8Cw>v5-@cvlx+(oWNoD5PWD~=K7333!(fOE~>K$-HJA> zP%7BeDdQ1XbvfL&Jv*{e3D|jtb9ett&#nu-?1wR>mTL!R=@i2=vcBNc(?^ynj!ym+ z!OA|lV!Jh0$MWQps6X&-TpyI113eyKm%`3ttJ`CQv!#ot;EUY?lX*Hlz$Tx5+z=7{T?IiQeBHzu%hbhQ!=jHW~~!LE%so zhg46`yn}q@sfbUJSntIcll3!8vFZJex(r`v_23iNZXW?L`$wez{m1`9gSx_RM{R8W zo)_QqDuP_oPQ@!74Skha;|Kjyqa+Y=Wi;^-e5!VhS%yU;Tq<{kH?OI~?0G{5XZak5 zVtuzF0e(VvKA~G|-9UPZSxRp5ZJX&^6Vnj&>Cb%6-#BUux)e6Ahv@TFH!>C~iJPWG zSU&uAhO7?*GKPrY%n2OiQdRYfB~-jTqwavBAW zq?~*XP#0?D{PGuqj&~5E)a(09zufvXpE`j0`s?;-C5NyJj5!+O1FKe2sj_THSM$ux znr{7P{-1A`dql>KwH7>?wD&y!U-rlNp|3`FZM&>~+QA&bT_D}CaSCwZ>Fk5Db{+s@ z0?|*G>jr;iyfuy0l|MIfhN>;Nw7Q9Csr@vcSz7pEkl^C!99<_jahYs8MzYKSI}HL2 zpY(0E{$#xc>Ghsn1%_||_>{^w%oZ~UNJoy13yqP_!-;PBSsnMJ_Zduxtp-hmhb-^%1 zTXTV}&?Jkg3beg4t<4%!t(TL`&SQ@XkD$oT6_Sj1;iQl+qe3pPH&d}KsB(YTa!cn| zBkLy_p||_R(yUZ}@gf3!!`rhf2+-GGJ9acl!t3I)yy!`efKpqNoLPDIC5|@(sy-{$`K7Y&4fmhADA#xR*?eEU*QABAU4O{`H9*K_qH zMdP(|yA37_m^@<$7oJW?>07NoCtVAtei}o=pWP8jE*Jf8lCX%Q3A#X@J$-Z-mdv5O6A{6OuAc6AiYT~Tx=bJ;{bgCfYH(J2yC^^>NjUe2E@b$I z@N>Gq)S0o(A@?zEz}0tjh;cp5k{;8(n2|@ZNo<7dU)quNrB4zSfA?h+W1a*zeK)Pg zh#C%;*p#JeZrpVXf+X73%hjh#$yBkV>v}i7!z3lB3(vc}!DH^$Jv?(y@gp9fBB20k z67k}3Oe^f;51xjBymO{+>o)vOJ|G-9CJ(v5Qs9NndL@O@ZOK=`w7-UyrRuO^(EHLZA7ta2vS_!qgB&5>v#4vH(6>5gY%?tTdEQMa(s;tQx` z*~=G4wKnYx-m=D5$6ICEWOD!GC;!`KKkz(*m54-d7abPzk$$b?sNg4G&&d>N`W34W zx;Xc6pC)q)>h_Ylns)yg$^p>weufj8q*M%cERwYa9?MTi}maM(-#n}!{1c2S}=;;H$5rH1m z2xmHdF=t2Xyfb!*Ts}V6fnp~@${2&WGPx8X8^TPY>o+&ws6@7rve~*Jd#-~hP+PVy z)k}YN#LOxlkBfL$uQWc6-9KROfHfObrt%>l*=rzSA6x$?CqbRKyQK^gt)+n>qqCu2 zj91ZJsxG?bYcKzj1I?dUPp+Lvwet`?lr!u2OlCNjF{WZ3RMn>LTnKCWQe%F#m#f0d zYpzm*HD`)(`B@gDKgsg+`rO7&#Ia(am}Kr+HL<@e(-O#_hKZDgfSTeLh%bnD&^Q+5yzb5y9S|*X+B8h)ecEarx$ltnE#4^GB~Mg8sKz#_grcq250`pr=Z-p+e$gP3 z)FSmU$S+ipn6F-R_+(q!tLQvSR6>J6zS z|G3GdU`6$SI^&Co#c#8fVLnRy7+&4E8z&_L`6HDqh7yVz2ClRt4V=9=Ro;v7z`b-%2yx#%@BhAv;+KEzr3?V^CEG?n&sNcM!Sa7 z5Ii?O4gFFT*ml-SO7%p^vm_t^h%cqd5OAh9%{ctROAv{Z(zFV3bd3xew&iUW_l((U zF*FE&qN^%1{1)U`q3$~o%df*R7=ji&ghJ9v6rIJK@1vlqoj#5L0|BdtiMGFnt zV?%@JA~~T24qQPG__=lY75^pPIUKrw2n%hlLXC3hfUn4@-FU~c?a8BQTn8XpuNThT zG5d_W$FE319Kx188q-u3=1t>=L~83Q?x(V%0rPz}3#Er2W(7_z={U;!c$#FF^Z!JQ zvI7buY0oUmH_M+dZ4BQAy$}}Jttq1#eGujFWAMjFvGMY-Ep=*NS%JGg(&4ZLR~azFwy0H{K4p{JQ)nV!ginkUv}>1EnwBGuw^+_THOsJ-)g%-Oh}=!=^jlNC z)V5=rgvl?zl_-zmSiBuE5Ea(%Squv=NX?y?I10it-~gw2-soSrZ(?~D8}tvln}Syo zjFP}!!T&!4{r{e|`l;86P~p>@6gF`u)AOZjd!x$YkTM7gkrp16t6!e8)@w>VGG+E0r>4EL!D5cH-ZLunG7(` zR_+lpl*>YRlbl&@_Nxa)#V%I2MM=uxX=nF4Gw(60>-NJZBgvW{-|$bzMT&OQ{cd$3baT|| z|47@uq*w>fHu=~02Hquq*c;DS58Zl!dxLOA4u^o|t;j{C@UCh@GZvyMHUq$0d(!cM zC{)ZVHWggsDzRhvjYIVf@b6-+_5H{+JFUGn_-|x5a0vwn9lXE?_$M^AVbcuGpGIhs zjLViv^=`o@z{M%#!)duumN@b7&g|@22lDOiJCNuKNxPEW8oK6bajNlHx zt32Q~V5je^ozXYas@_xnRKiL&><%M~f5!8)lt}A@U zMyqtzFM5KMN{i0(PwaF(DJTGRdAB()j*7kxgVVP zU8GfEp*fJ1aaq4UNd%xiQgVf~@V!TRG|(!i&J5CdH+vAesU zQ5LWZTPAz2ZbvpkLZK=4)p#$i+nWV}D#$mNSr#ohkLW>u$p!$u(2Rs#pIX3`f8GAt zQZuPUFRG%gj5*sICC%?R87A!4l01Z)1Yz^?V7nvDh51g4T!?sw36`Ov(rIY`?Y-&k z+AqPqYUQ}T7yYxJ)(7dE$mW&A9tr;C1=>Dj4sy026%5I!GR0x>xk|Sh&!Tz6Lz<+$ z9fTn_d;}GTw-zePK8XRQOVuH!Nx?R)H~fw+vCZi3jxQ~;0)SvY=uS|yvo+T&+6ojm zeqdVcPMzB)4$Fddn@QtXZF$|eAR}`1#jO;Ujw)j%DN&(6u3Uk$Y#d(f@=^6Tw5M;b z#C$qLG7LRhtD5+m$p6~nf45o;XqqmvZ$7SrXPzz(eAFyb&p_&lw6@1teb)RghFb2W z3;Q)5XNG+lRC zb50pveW8}fQy3=thc*rQea{{3lGLz-r0Lc&IA2>tW;ksQtP` ztip!3z^dZ!O8@fkKC^v$RQOK?HS|p{R{`Ywa+v;VxR7xzr%*OXTybb~rB3KNSyX-* z-r^>0NhBD#5Cvr-Gs#S5L!1@{2I8~~O%kp6YOjt7yNV}>EDbqu2-%{ZwsdXtuab`0%B_!QQ#+LgV=8QvZ$5XRf-*G<9)8UPprk6{70DdKc{I zRaK*KBeBoEt?^ck8aU#&1{b(D&&99AQ5!Y6ri@1ZDXWmkZ|Qm^i5d6!OCnBr9TortW8~s1p~XMPkPg~_Ie2uk z_d?56jCG8SFah{4y>I%GX3%6PjV$>t8sUOt}kv z-f}xg1Rb`GO)v~+J-W0Atg4UG-AkU~_eQ$(I!^S>=y_<=MgpEsy+(a09pTcr1){~Q zjF7~QCWTGd^Yl-}`V5erI73f)7IuE;>>Rpwhn;wI#^C%X;?O(_gb^H7bShTCvlbjg zfnkx1tbE$z?RDa~V%|ej9sPKqMV-Y-8w6qu98P|ZYophg5nw2Ow^6WmL4Z+r5HNn{ zej=iluhJGa&2W4BDc#`6y0k`KgCi>nC9j!RF@y?${2}s(Z}LW3-Q=y<@$0u4;*T#V z0qb*PUOc42oVb5J&qs=Vr{C&Yd^|y|(AAau6Q*<*2%5H)(uDBXK!2yiKM1t5s|n#> z&0;HNU*IXB9L{5Uu`ps=R206MUl$2TT@>j|Oh_Pe5X~ST0oO65HkkR}O-rbh4lu>! zw?b;Dq5)J9C^%D^5ykA#hJZa+&~dmjqq)Sto}8ii1LlEZs>GJVANbCs1?%KBm-{Vy z|LVtYN$vR+Q>9i}Z{A%|yiHpGRoz~Z7dM@&hj~nh1T3@700+vcnw@DP6tJrhZxnm* zi$0MEE9a|twBaeJ&k0VNxbX=&l|8e}Tn}S5e5ePP{LdHX!3t&RbdrJ1W(3y5z#xYw|pWPb4c# zKC@VF^EC};xJt=lj?^y|RwK`cmq@o3P@%;Ktbg-*ilFhL)%v=t(6t90DNVvVoBR{+ ziopcqxSH1{wg$rva z6K%l8YyZ@>J3_B|qgRT0W=$Oz&s6IiavtQHXiu$(=b9bEcc|A~XLic=hhY3T-c!dw z_q>!0@#Gbvs+Lo>)=aA`XtcXGe%`KnJ5UMX+rLn#>G#2B#{&*uI~z@tw`@}p?P~_` z@ItPy1#4}5n7fmp)z4z$O#SL1ggYQlcm zkwh%LTqsGMttn&^<1QiPQbB2MHG0PNvEuQWC3DoEXN&`jpFM-+)GMxx8=-Sfa7ipMdoqn}n3~nDnsBv;lkh$t4J5-WZwCIl%c~tZp=Z_4LM!~r+ z>g#JG*8O?#9Q!lO{|w<~bN=f~?_2+}zuh6hPLAArABIyS7Amqw*zp=;M!YOGI+Axq z-zV@Bud2@CM`j6adukCEWd*Phx6&k7d5P|P&ZMHJpQhlFIXd|B>Fv0@1Ga0WYibWdW(u1d9Qeoc}g=LgqboN zH!*e48@8B1g|&ZCT3gH@YJRxj=WcH>y7 zU2Kbx*i`t8PJez?((Bm8wrHqu_;kW(na5ptbhv;)xjEI243%RPBRLK3VYREW-4I&E zq}LlJdt*~oV6^td4PS|lG46sd1js=5Abirq?4o|O>Pg99SK|$KMen&1oJAs^qtqO*f;h2Zwq=JxP&zGtS^^TwEVE^YXH61 z*3y3M=fP*yl*)k=a^LF{0qXm~qN1+*hkn`JWU5L#6xxyR`hdHn1YHUSh|NuI4?oSc z9KKdRq0TYb%$4dDf-9K5#CYgdrwAL7dkux)bM(Ygk7P)*;OlmDUnwL0PiG72Jf$`J zbuow`Biw-s!g#Fbm1Vm#(eBR-+`dOJS|l}!w)U2L>{R};u2Qp{R1fN4p&%I=-k{(J z{&rDWTqp3xjjA%O>&e4Et7UUK%}O*qlhE|s?h;R*8Ws;pLt!shxWCuTe>C27D(=mC z7}az|inzkkc3O(R&8N_HIm?dnnHR2MtFrrlY`tY%lwH&}svsgDDBU3;%}94B4bq*X zba&T)sC0KrH%K>w(%qfXJ#-BWhx;=b?)x%Y~&U z#Ipxj$e@##4-E?~;kAJA1g;bE#U*zJ8>NM8E045Q&7~x;tk+_mjr|T~gh@vJfOTik z@8B|koM-~BK_6Y1o=z>M8dg(OtR88fo$kB)h^LQUevRd|!5R_kPOr6EbC+!Hh6$YY ztf~wp<7VO=jPvRW-oB;2*-t?GnWi74yK@#1mpm8F*1vI`kYEx~Ys)?`*BDS>PP|k2 z9iP~pswadTRH+xBb-1LhkTLS@1Zg08tmEJt>1CjVmD)mr|2M=yo4roD=Z~MC>f7JY z4(*VC#r6_vg>t`Bv`KVW3q>78PXhsxHl(}3bM4)%Dqgy8I49qBnVdD_V%oR-G1Xw9 z&YQVT(;K`pR^Bcn_R@TBy~C#=w`G`vY!y8e`;nByJC#m{kh^z4Ro08`+$1*T4;AkH zXU|+=`Ka#X>m2Qb(Rc7Sv2`RaZx4}|z}<^oHQQ>hSR;8zC;0TJbJC9H-D^tXK##*=G12oj5G!b7QH=LlRj!6 zo%rDpp|k9Ok1h-}%e)tnGN6+6m)ji}^47mx8(E0|_44N86dvA#8V>{YN%e1X8}-lY zuXh-fD8uhT-gl&Irv#wtfrKDLmWE)(8jZKCjft)4ISFoB(|M~SuHGVP_Udx>Rc zOu%&MrXOKk26GgBhN?jz{^FdIo)87D!(mW6_KCB~WF^nDIVl~k(>CnKq6qgrT%VJ} zX}>FEJ@DOs>y>nPVciHDyXz1Dlo>nvM+HSl``iod(c2no*;7bojRlak^PY^&5}~f0 z_f1D|0_qQ#z;32N$pDNclN+pD5YU-6|6mXE%(rJ4I7o}*!ap*N<^?C!q*uAk@ttw@W^kas~ z6n?53(wL%+k)J)pjnHGcm&!>lW4eMG*zViJfsWz0y1aVLIETxZ3zcR<8Z(tSVx>_6 zr8%de+2!}KJ=Jke9LONp>8GXNwFb&u00Z88WLR~2-zhc==f(ld=D7!<_8a4-kSTbl zN*_6Rw`WSsE zEzbP#?t<#3AOLw;=ti}X7O${1xElcMdPt0N8qR5|e)9188NaZ)mPZtuPIQzP{&`1> z%}_0Yo4(M~RI}yVsIan6;9T*ce!3cfRN?)i@GLj;AWd!=jds9ary(Whw>4dR=P3IU z$QQBmo7TFp@%y1(9fa@|uu}f2KH3~d#nf&MJK~yrA28NNrOa8=aL&fY^s{vaIs3w) zoY29);As0UA~sf4z{h>B9aw%sD=(1~Q#85pQv7ub;F>}C*mewqTdSPvG7p(X-)+i)$}-F^ei|{T=rZQII{yY$2>~9mV7y4ZKXk3=%r^5^moq(3)fi6P{tP`l zcBLtv+|%McE@AeM04?Cc5@3#m$g&5HyfddEt8@nve%OuYvWx7$N}?ig)E6oNCp_BlS+S5o zSQP+OTdQdnt;TOM@c8D3%*yJR_Zy`wu~Q#LY7MX6X|BzOHt%NXG&+ULi&m4*yl5rV z4y@0`FXD=hLIIGthwow3Yd!6(>ngB3d*^+CB_q_C<#elDc`biv()qb;tfi;k57{hT zZ%AruPDW7R)`>0(oL9a$Q>3A@B*8jjRVOC;r(#?os=|Celqfjs1-#!$Wq9plakrZy z;MFUze|NWwF_U#n;{qdK`VMdwB8?U{&u6P)`CKpm{j@70$K=zEdumoaEjregWi(#R zT`U!Qgf1DbS#|uh=WG*BIM4|MNN!g)7n5Fk>NwgIs5?lXWV1co zp1>uS`#kodG0L1w(kpn<@FF$x)!&d8xsUJ^VzqH_u@jPTs02LdO8B$v?HCB%(#ccv zKT#)c8pn4I`b|87eMnVDq{4`(UTqthrogI6GV z9J|H4OClBLVPa5~XJunB@?@&_k}BnVVEP7iu*5W(Vo;3j$Jm~1FSV-icHZgS%KcnI zp>pw2C&9W2rEWaqb2hZ!OuxU|Y;0Jmj*e5#?pHi}Ra-VhoV{6fUM>SLZ}8imV0{zS zH;r<_=)=P|FC+V^W7HQS5W|f!R2C1P4)AHvfE=OqM}EI~ z(eP{SDMjKHT+&{kHJRiaM$a1eo^DLON?4B@_}JUgKPpz5TsApkR6M9#;NbrMVGDMk z?oC1gqaoKlUz1B=$$1*Rcf(hmsR2%H(|CY(!;lc4-AYda7A9C@%bE$ieD{&E-zGZI zeU_lQux1h5c`h>*5w?sqa6U<7ZFu!zLf;B93s}-RI3L_E!ck}z1H_e6ywP}wlFMA>+hKBI5oj^v~%ea4}J$=&}FX?Pa@6gcr+05(RI&5etr z_|9iX(}f2#o2#B(VjC>Icx|#Wnr<`jxln-Ld{SOwbc0rIUyR1l<;8IGx|>4(Z13XM z@(KXaJ96Mo^c?!ZI@2=@mpH_B$7lFlS!RIL_Ye@%>lAp@@&HEK2Qi>bQ$0@*S z2deJ`%tbm$kw3ms@i{Q$pNQ4TN4Q7br6lC7q@g8mqD?ZTtuQ6U;Aye^KID?RM3dHX zZs@HW;7H2ZG*=er*s=%|3glN~>#+IZEHWLYWYnzI)y+rSsjPk{s(P2!Ks4uRi>9F9 zY@3})9sEc_gb4V;nvThPz4L{xcZ3XkP>1mV^93R2Ty|zBN=#=wq1TN#A}KsAJfbTr699vcq7fD?T(F|D-}c4< z%u+M#%UPnl-^5QNq!i9HQ@xG7aY;KYlU;(q5o$oBWg3sl^C5$I^0sOaYzBW`?9|wT zZreA7=Zn?yTcjxUH~D>$Q3#z<^v*1GxU2O@!pvdF&!EErVVW+w>I)q*f z5#G9cuv>wooU%$*!RaAEP>L|6viIC*QD4Z^%dHu7!5maCTkW{&i$>M-G!B5u=)pAd zTxeC357TgWn)`dr3Nk`#^-~7+6wlY+kYM(T(k0>_v%|!;Se(~Ykd-%3uWwMU&n*fr z5_u2z0u0==a&3#wh{E9VLATRLXP(IWcvVj(i7qUz!em0D#%ak{2dQo3__5*oY-ZOH?v`Mp#Xl(kz zXqVy(ci`fcMR{d*Lr0ROMF=lFY*eVMr!HmNf6j84i6v@T&ziME6z)>o_W9|wvkD$9 z3Bi=x3|<^);DV7ImQ#qx+gL}RS4N9I=g>UBSH5Y0_E6-Vrp{Nh>YI}9Q;WN4V0tgR z$g?CNsuf!n-Z$s>N-N!^OFe|m-S8vY1eauw5v}9Nd)60)eCnc%86+DY+C9zbf+!ye zLrUcSQ+u7ILie%$exWCV>d>2y9-fO4(9Zo|zTzRMMF-;M6*K#OXHLU&GO3qh)?s;W z5g%^%CK_dGpObscZ}B(XU-!RFtN5V8pPkCRxVKUpySzn-GjDrwk#7d!aSY+|)e?ubV7YaNbSt&Gn>}%O>zUdCM>8u1;VO ziE#o@IvkCuoQcO=HRJ8A*ZJqM4jgv}9j51RIMvc8KkaI7M-#`E8xP^^ye0DciywX4 zEd4zB^J$qpQOU6?ubqo3Q__88SrRGtFm{TKuRa)f*}EKSM3?4fJ2_GPQAv)z=E7=O z?jLB7gt){-*jMo0pQuCW^LuGpe|otWrv_V3DScYWBQIs!e;aBp%eQ7<_saz_jm*wI zIs8O}E-P~hrIEC(32GLc*nC(Tv5eH5DLW-8P?s^oC8Q$$Q%>0S;IRz)q@ZVox*Xx=#ct#ddG*e-^ zlK8K_2jk~qEg85==T-ou5 zj}yN0bp@vhwOCsIqo*SbuPc4N&4A^;KL>s*Bx(J)ukMgf(5mPKf$+Hn5nF4}94lP0 zwSVO$?9;%QMDK7l)WSfx^WN^y(Lf?NzkFgO-$4uz{)DeyD4?or>OsJRr89 zJ=caydAz@4=DFVWVbLHnZ&2nCl=StWbIk~w*AC|mO2Y=jpXRb3Z{e}V4Cc&i&Gw;%`CD11!Vj+!-im5v>WvbED_eNEDsW(W=eN(~e z(>v##YgV0=NTlq%k$L9iacHJyjP>On2RR{4Co?nWg7Vc?puOQ!bli`;3icBnn_JEt z6Ty#sMI`pf^1{#4KzhgD<=o(?kZ5`G`A?k~D)Jknev>((syQBZ`*{>Q2;WW|8}psg z7bh5Id5yYR8l3I9hR9RwZJsOrN;X!r-ROM^4Q`2&3ND;%7 zjFCUCa6H%c&d*F{4yae`6(Ev%d`IAT(P5o#z%cp4ptS}%5icBh^sRqtLw3W(YA3Pq zGpkPnCgoy)fViz924F`3T3AZyGCq}f% zGiY<4MsAn6%VJB}4rx}p;=HhW4sw^cv_`(Pu2K})qVYip-WpOVKWR>TzyBS;pPaF7 z_+?UmC-7=`Uz<6Z&$zO!+EqA{Tb;BwHE9_6HQE4&9?iUcMfcNXnFy8j=?J;`CO@>B z;C4h+U|7-X1EI1;0{ldJ4sNr#yYgJ#EatuI6PdVKChyjR@*C3h+G#Wt zhA;4{KgV{qpw#NqH@Mr93>u0^GzQ31f{pk2_|h{Q#pElgzXiXa(@>i#EN|WuVNuD< znz@ZY`|F+`N2CMRqtn#jxW5C& z771&M&dz6jqJ0VE7|DdY7y8QhS>A^#%+x}ruR9+44Y1og$zfxbl~`00w_NB{Mn$JM zYxqeGgf!OGIF_mMB#<|_d%FyaW=R7X4`~-!E2B||>u??KU6^-8o6Px!#?|p!;mC?5y7;nw`?tP{NkuGi_$_#&8h! z)!j%m4k2hq?gQIWOa1RS4NP_+i}K?;_vM#riaIZk;iIx5qn(Q?h}DaJ&c+T3u6_lS zdMK~}Za zj}6FSUUI}CTpNF~=EJqsl3t>mV%X*SESnW1T|UQ@V=nmzqKbTL+tBLAhCPf)Z;Lc% z=+pWZjNNXauSsM1@ts`*2BR@*$Z-f270qy7)~a#qM#)|R893+O3JD@os6WZ4Z!a@H z%;Pi|5WF^sKs@nwuJDf-PZdM#qL60CDWJWG9!(yL(+N!&Z$zkBR+$jKG=_qL>PWy0 zc1xNm<}Q3=I-5>l|@_g|escG^+?t_Xxp!|}ZKY~Q|6Uh`YV&S(PBk7nW`Okw>h404RpYHNG z--&VjwdgjG+9%JL&rR1O6_n1)=I06V?G*!y9al6r4er5Imj)iq zRr_*1S9_Lo5&|Y*30dDvLJCf#Mb(5hwv_|ZOX_ngW9gfz?_Z`|YsxBd8q0fikAACp zX$U=TMz7f}$Ybq*1D_%yX(G4Bx%?k#vYHx6(@V-q#Htw~zCq4YHx)eg80Gs~1K|-s zHvE;FOXfSC;*AigFyNV^!qH*O&GNCSDM`J-GW~GK(w8oag4J$m&K+@)N{BBe`dKyE z*evAeE7JRQ37UOm%12o!Z6t#!&^tM+X&Vl6CEqE&f&LvwOmQJL1^X3Pv}WL2PF#bc z@#Eu%vFQV+fGPlUwE*+1sKK3PezC!UdS^05a|B(oG|Bw!FuAtHEOVX@#{Q_Xs(Vt6 z0aotZ#| zW~ohPtcKf(EVLn(v=)L5jz)4)Xfs;haT_wMQGDru^JEGH#v&Hw8X8Qe^7tge*yl>!8eGG8lVY@ZDazZ@+6c2585)X{wE`;0E z8?%r8q9`6I=stF0QT!Oj<0F`k+ZET*t44jih}WPvdp2OOesWr)|F(60^~yPok`6>m-Vofe z(xt+pVtzBik^}PLaMB!eQz#ahxWSBxb_tvV(46rM*&n@^mcsCxZH9cim$#i*Z7bg`BH!n9AWH}g z$~{v@LUY10uTbA1!up_KpNVzQ8cToEz!TKph{!hT(2G=jOlXo2kKUI`-8Sxk8{5BZ z347BwO)VWe6@bzokCm1}eQCf|l%{G*PR?ToZLCWPs9#tV6wnPjhH=Tv3^{Jr zcs7TbP9)cIp-);RRQKuO4oDjtA*ZMxKdSEc<@588W$7FFJTgJE8|>}iz38EW0-^Jt z^a{uexJQF{Tzo1E_&_`T0K~GXj7cp4YW<}$JpLP~ z08hKS+&s;5p0oKnrU;%vanrW^>L%TlhU?U2XgyS;*4uMju0N z+B-p-Q7USqpdu z75*(U_;GQ8b}>>a@zl?ar2#(2l+r3Vf?-$!-=GFpSyE{4;i820vt6z=Wm>cX2EMi} zjpGCcrE}Qo_VeoG^8cL$P-ZIn@s+esEQ=h+wAZ^xYK>#j4lh8sHN9|i@N2aeRo#q- zj)VQw8nbz?Q|Zt%Jm_UU5XPU#hR#T<6Vw>`#eiIhR9S=WO{2C3B@kE@jdAc~^;OvJ z!XN`Swl*T#TWQ6MpBkz6iZ6=0W6j^7{zVHSAtIeby1NS*a&ZZF^=or#lH?Azfg3Fb z4o48EPM2n!jb=d1p%zWC98cvs5-tQ9;>CI#HL$6+af-WjW-ID+o9Iedg+Lg62%=B7 zr832{vJvWF4N(W_15ITseUQpmvPV?-)M4mRH;gr4o>SISm1S?td0Qg6##PnLAt z?*d?d?sq38@L0u`>(+CS)q5GRSH<{8m!DZetl(Evr5ovsz@Pf~IP zJtJE7KF>MOnE9QZ!@ik7-m2((71Qvwc8*zQV`J;|VOF$P3xS-Z^i%|AFcxV1lGH?L zAgbG9vi{6mA8m7mQ`>5Sca5lg#{q>?E{3;Njoz(~v`;HP(jW3=6;8=s|D-yq&}6KJ zm{uhrHy~hZGpDv@bTbonmy?+hwFYJG>AKvuQ@xv@aF3o_wqYTmmMtgX@4eZXndGI z9Art-kO(fWO)fhT%5fmA1{jV{G04E#;O*A4m!+S1(y?P0k0mu*C`imx{u$ zhHqt-kIy#T$bM<+@$!*3NIU(WuIA}w(2)LJ1)e%mRT$I<_aY0gFG9!~^r*ipoERH9 zT0A>>uZzqcL43zRxpOO<78vwvU2fJm#Im>Nyejd+?l#fi>|~_XE0iw%Uct)DVcX(o z4DH%UoI?Qy&ZAOegr|#ULd>BT2VV0gR!vwa8PD9846UlB{l3?AZpM6VNSqE@HR+=T z^o04$rc)~owr6WS)wSIk#-F95hE;&QG`3y>ui9gE=c5r@u(|Dyt~TVxSyaBzMF$Vr zdnHY#@LiWBYueN_0i!w4UuAd*BwQ){sHc2hLJh-T>EZP0@?qmDg-GGj!53aV{f5xK zwARLae-{5LV`Q_%oS(Ppc6(A9CN&rrhg~im3w7`?O~=;sQm2%aR-WnNybNk|O)+7- zLNUd|rbXh}umDVr9`Nx(C$Z>AlOEng8;Pt8MeeN+|DuLjQ zmz<KG|~sT>#~sOplh4N~-qrQ#GBw;zvyGS{OovMrjQ`&?O*(>U7Ss z@q{IZZhqXNs5GMOpz3lj9w#^W+QuId>ZLKZdbli=AFS0c{W?w6_`Ey8;Z`X!Pvau^ z2fn~Sm1+A z)#i7!z?}s5j_xHQ=eFL-JU3^?K%$q7k*kAQ@Bd;Xzxx8;vOw6&mgbd7{?9)Q%HCOQ zAqPP0J`~${%O>a3E1zC&4p<-B|$e6T%ZBz@MeCGk~2>yK|HVFWdpNV^H9?V(SFwm zP`j}FKW^Wsd3tDK?qY-9%~h85f((z7$jot1Xq3B2Ty4?o zK(&COsn-re_)PU>Z%>+TWgsF#VDi?yw_icUI0ouFwd5;Nd~m>U5|;#x&^T*+YHJy%U3ryVB_wr3Z4Bl zu5`oLJwCx$Y$ya2o+-@dgS2)!f%Dnluu;SQ;WU`Y3qK27Q7-0(&|9?BFG1nbN8A z#IzQGSaW8&1xH0$M`o-5QsPPgF}WiRVGm8QnSX0IOybsx`Y`5?g912s`x`VMZzt!W zSL?diNl!#Iw><3r8#M@j1mSPsY6B@z=us{5W{uxmVg%Je8f=d@Xaz8jFKDSMXUBT% zpe24pGUXK6@(N`qpboW_wSGc$(|llQeN`El^I%!XyO%0ds2x5_bn;aUFx%ogc5-w=-}afVvH z6*bDyaF*z}Sj-&UXu$t1&C*E_b7f!dl=0}F z$%}g)DI2m&`ocf53wAT3-JRI7TFr&!u5ydNE#`;@>e^&1xUAf&L@j1QqMtPU>@ULg9jJ;t%;L2fkc9Wz4;u|yL&mixkb{zK$T0rd$pW72cJ3q zmcZr!wTI7$4;DOX8+Cb>mC{_}gP6v5&QRjIhEUE`G0&h8dEX}N<26{$#wv+_co)Ot zt7~Z@KfE^@t$*B=7}#A0xVM%WTqxdMD395c6+X}z*l}MPVoKYSvWR+x{92Dsz(7TG z3>WR~C8Em3vB+UQL->Sw`F>hwG4J|{rl-9*>wWuql^gjO^=0)8_Zi$ffE8g1J6P2= z-MA$lT`Krn)_9O!t^8_L{*v`&OX|>1|CI99cgBsb<*L26OqECH?E3f)^s(8W(P#Pe z1A&|LP=H&SY3qPI%|FeTk4XUglqZxZ%Da|mp?3NTO9h38jUBouYiLQv%|NKb4R zenU>ETwCv7Y-a+i$N4!9>~@FeqUoE`TL~O(W{LR$hpt~!#(XUww$aq9Kg0( zfbjQcB!ouYQ-+0Qp;i_NF33As0IQnIJZ@aTSI}lP2XE+xv+bN`2~Fe0%`woC-RH*n z(9+p>Z2>f>lbH?gXc+t&?Lh>4(~L!4S05TI0F%U1<-+geF9boPq(o4TU3ak#$8ibU zbkoseoL4{((ajRxDwDt-An5y*Oinc8GA&6QI3^!ZhmHGGaWls5eke^LeVYrK_ueb)r_qykLI!NVWDw zwfkQ;6lA7xQk#>8t8&Ft%W}|*gH$HylsVg4N{yG3D2$BEywY*|5iVbU_7eTo(Uxp{ zOMCGTE4?aO)d;VPs~Hc54P2>n9g|@0-SgvyJo+>@R<*?=wDc-g7s~{zcKj?EV|SnJ zBkXBPPNLVj{YlePjJ)*2bxkwP89(dgo#VdiC6N++5EHm>oRyj^b@0nwl@)~9n*a08 zR7%{>iIYt4hoMVdPNGYFH7Gvwr$(!1Se@C9?GzyJrI>AT3c2#MvTkQ_W;H{Lr9y=? z?RXB(tOk&+8$rry00MkLP^9{^IghZd zh~{d6%pbzVi`nj3Zx&gQGS%OBFH^PXI5iaZLTkEh2*G*X5qk2^#ISH77L!3n(ml5I zMNLVf<09(}4cpi**yg*03Fyp6Qld(WHiw7rg#RtvC}djkq&n$r_cxTMwdDRj*bE&b zShiPm7-|i~A1TKZ&dRzr6*^8u&^VuKPFUC0VP?*ybr@AXR3n6m73#R4Zy-mswjbb4 z{FAYboI}_N2nGc%^S;x9+M8^#lY->gX1j5Af@s}zZBLuLq6El$V-*>s$VR){^TT6$ zDr0i8udakcn#_{FunOE*Gb)u36c)C8*`}G?OKE2RYyti1_SY1jzM#YD(fLC#`r8Q` ztV~e;rsUWpJ-cU)yXt$^ZtxWg>^d-90cnbmv50Y7#Oas)X_>Hxlejnf8nJ!SYR+o2 zHikLo=8E;l2PAV|1heg0+39TZzUc$B7u@TKW?1 z1EabD?tSKSGi8+(8h=XTPY1&iy=S>N^Lu#k)R>R__P)7G+f_pLCa-Oh@ zqc_$YKRrHf!{gqEri68~p0$MTwfG_V^dV4liozb}*w4IXAk{Ts>Gkim1l zVr%G)DFGxYmdEFQnnT9Qodk!z$&~VssHrPzRf>fl8{r#+#Kr{?zwLI-W05a&HQ)!A zHYcTlZuI*4PH01RU-SFt$Bh_iQo)Lr-J2QCrWa%^mY~W5XO$veCiY+S?3|12uw;38dVvsT)D*r{?N9AE^9gqw=-PC6V2L{;rvtF04OHMXsj0NT075yGTW;b3DEb2WFAo7;J#?-9+wB-Nc-pUaOaO zNEQh^Gshx*B~LBC(_{%FT5`?reF6(Apo0Qh{E08p1!!%c_vU4QZCmx zvLimcJUO#<+0v?I$e^8VST#Y=I)cc0k9C-N(tk#@jMw@2fvPxk)q4x5OLq=_Q|CRm z#Wy})PPV0qZEtpG-{QuH2Yt_2!dXj@q?HLqew4!XZM(1WmHZa^ZRk|;!{%^4iX2$= zy2yJO%ph}>z^FkP(3drY3U<==x);AMAc`=sgNvaLnDickpvBMu!G~;LT&Z4I93aNF z9(HT>SWlPYQ#SvCB8@XLZ|>K7GX@IVX0gNKSCKP#p>m4k@RFhUAw^-d82pvz-URp5 z)5o}O;0k{jlFskN^u|Wj9Xv7bl?C;{jsTuL_s9<`U$miuD|mVM^9uC3-u}dC{eT$7 zcC0ynM}YNude_xrzPDrHR@{O^x>+G?nLiTt~~1 z0(P=pP{)T*)>=r_60dfAZj7yz`EvoA9zHPk7iBsU&X>F`b zgj^aRhf@4{)ZuXdRb=7r;bZR0&E~a~4Gt!~$;^%(iy`=ctZe<((BNR7pC@uc*ON!X zDdPd$!}+VuM$fnp=Wcl-fDQ-NQ6Bv>%27|`;LCbegy~n3`CZeUG#~;EmUA%*pUby2 znK;julDyfB2KF`Bz{c`2!pr<}>ub3oOUu_N?yb7f+`03Tp75^ESELA4VEH)h?gFaz zkvQL*Ing-BVb-~8UPs;fEz#_p&oJiGN4kG2j8d-~@lH(06YqGvcg+%0T7Q7E?)a@* zaRzO+DOVjeVd44frBodbE~YiZhxZAurEvY+#u-Xxx?hnCV|bEW z9Jz-U7w6|AL$(#RcC5XQnl1J?s`}Tjg|)~r)r$9Im;u)bJPMv`$@xjGxqTo$4pca* z{!4J^45hN!rn`K9F^$)#=oid8wzFgIU$lC*?%z!MxDn!^aj}|q#Up;T&|z30hjuN= z)-nhK=0tPgj4cSC!FkA7h&a~1`%vMrCN+$l$1KmCOE#MHsUH5)^`L4}o(M`IEZFBI zSZonzUIQYx9bIwt5%{+GE#X;`k67IX(qGZU!RBC|e-nQ;d~IVGgpiY63clUad-AuD z|33rH;q|Km+9f#P-XG;fodK>dt_ye9!p?3LrIPpP`JTa@{J}X)BYh$Gv3B|1vPY`S z;O%#hwBWhdQq_w(hbz_hjRZ^NkJ(P+C%7eTTB2E3A2mPS9Vo9$mROY&ZuX~8br&=F z+utP3e<6*6e&u9KUx@3v6ea56C2QWfp%`cwA{go)kz!&f2jS)wlS3_r$}$SN>saq{Oo?CXSN36W28AXIr^TXCXZ!tP0$~#>TfC zVP{y2@DcStIpF+my0ql#t?w{8ru=-5wj7WS+3g31H?_TZbUa@XBFuX4@BGSjo%zks zZ{=pw8m9m;c9&Q_d5#@pWR>SW{|e9AFENvK9Sc}H-S9QM*(pq6f0U-q<)%R_;op{# zhXd}SeifkXo1R{~E!OX7))$sIUMyDKn21~~oPS@9@klHp6z?gRd_nkSbz%<{lDe!x z(93HdNfqHfsbAUTi4I4I|IodQYL(u8fKOj7T!GJeGriXxIMj8g^8IB86l(w2xxSXN z_LDSiK+bTD0H@4go?hc;2^Yov2_=PMIX-S>e4y9@rGuqmP)>tsna2K_ptE@vJj~m~ zj!Ta(hRi-CU5b&V2am8Gm{b1j@Gd(WA=mrv5R4bZ4iuJ%qDr~^Q{rzB|NpTfRh&R! z83_gsr>&GfXq~%j1Ns9jA0CfKT@`yIp4ZIj%&g7**SWYG47dYQQj zX4^ka*;z&30a7c#s=TlUr)aI0Ht@HP{|xJA+x6&hZ@zBf+opl}usRa(LRblX7mKNF zqU4`Ppyh#g!Kk_$3Mx}~3uj1)+y~laNS-9dC@kiY6>*4a5|8ux3gn*7ehT;tO z@zqMj5Az---YxUP#L(oa(L1mo1(qj%IM@VDF$G2y3!c$j1o_;{=!Sj#l^%A8t-SYi z=G5trBKQNzks_aPxX(UkM^MJp;@b-PWCqd5IF7tOHH?qJ`~C0UMmY5XF^m9UUOzdW zwdOOpgZ5{l|^3ZIftXHS=O5RaUYFcLWgc!WrgpMAt4IiN}N3 z9+**yri+!~Q#j#VHd;wjcy5Tpo~268odv1;|5@vRMj%1JsH2Mf{ zk>?EK)xSXDwUm-yiff?LTJX1}8jHzYC?GHJN`0~u55`Vhy839))q{0WXd#i={@D$y zk*%)M7LqtFn=&WyD&8#7{`J|<54Y;AWw#>lV_rW+^E*Hb46dP5rWl}1BhMWo$5!Gt zT=5|%Ad6b4thGSw2X8U1*b+qV80}sb+)9{<#KWGq8l$NkW6(3%IQV>hHXDmtDhqQmzQ$KT2 zSnGHWbEK){=`Dyz7^2|AyVu7=eFdgZh;aJH!iR9}guBnri%Odq^h$4U(FpPDFeM`o z8maZL9u3)fQ0r8tpOjx2OJ)lK2DrRuPrK_U(!YdVF~%3i^EF5oU_3TN-<-A@+hL`2 zyxiS`m;oBLo^tZ+CIw5EO@qtM14X?5+E(rm#fU5RI%u=3c+P z44ydUKTW=b(Ngdl<=j4bceJCt*>va&z~nr0hx3`=IwPJCHWXsVzpShi!U4 zMwwYY=%0U_ZNi@)Rhg9=QIFA#NE0u~=I!lCh;rz0t?^^`x{G>`wGC>iN@nZsybDZW*up8wss;hBMB zRI_d`aLa1?tL{I{CPIoQU-{zROgl$k_6cTuzM?}l7k%j9n^yE_2F1g^A~9`u;?sdb zC9F!Y{y3CL1_E%Ty~rt%QBEMRJIxu7`xREU^Jn@R$_Zn~Xa`(efFWEm(2pGTj(_%5q<&2yPg<-7RT2O7(24oI z?0RXH=zbx$K>OK0ct(-pHRmB^gHrkvW1R!s2q2xCWI#mybtxw5jqjrl_=hLRJp1xc z!(X^8^GXA&*y|o`nyXrw6h>Hclv|mM34h=EAO4E0m|)P&x*1|; zEw?$gF=G$YZ~?dHPgnky@T(UC(G3@?@U4FTBkNX?nVEbN)tYX5XeJ7##U_yM1F)2K zbg}&^FjrZ><1tH45T^afRdPp1f1P0B@fLLfI0_9!SwOo##cABWKE~)jv{#PJ*_10x zLPGmwchx$^F4KZfJ=pKI`no0i_`gU!vZ@s@%{x~Na5=Eozi)Z&hslFy95qFoi}o9$ zw|x@z&jE9uk(I1Y0Fqnk8RO_<@+@HA%sfgfb(KbZlI9}ex`>a2FAn*Iir6eyuB1O; z>+wsWwS0{fd69X!l;Zn>jv?6FS!24kthK4^aJMnOCPXio;>(y?&ZS5}rsxaiv*eMO z0Z$g2_b6}J9U%kE;A?+s_F>0#$JXKft+mD-6uxXea+Q61wuaKTTdsz3sKS#h%r;?O3*s^Mi4*oU*O}rG#Ao*s{desP(o4S^TbXg+Y|QPY_;E{J%fGn`i z&v)w?o~P?UUDK2hR<=!nRdaW~SC1Vpu%B)IFtR(bTlFQ2HUnAXM`Ia`!(z ziwy}1Ne0W-Jhi_Y;)7au65!P|W1v*^!vBbdJ-XvOgUuM+$xffX&k&@{=M z)p6c_gr_g|Z}6iQewAwPdhGeUFjCrlBq|LgjDhh!StsH>v}Y6}r`<*-(5vscM)RjS z2wHKEH&ybB$_TVKl6X!q;@j%|4}o@PF;#KS`ZwMaP6vQ5@UXJ#)HAyg~p!0lCaJqDLEdU3|Af zgl9j6B84A1d5EfPfvz{uPXfq6x3UKmtMpkuwh43P_yK*c8~eic(c$)x^&Hu=JE4BoWTFl*8lTk^5SDsmeQ(4_zNC&qc(Q&__W5Br1i2t zSTKs0Nx^?t`no=&e48J#pv+InJQD3+?*lAvxy}NmiuH`4`;`p|z^m&~xX2&+`RbW; z>zj?|x{mLfL~pXHlUM(5U1mf zHIoe-+Cy@_3z2fT-i?^VB*eUWN>L7Za}H;aE0}(%`KBS&W~%S+(XVh9t_>-XL(VM= zLm&bKcF#YG!S4)s!NeWhob6*G@w)T5`>ptTE>YY$o>4#TvnWIr%)bs#r0pDGXW1<1 zVF<}9l-o^1B8q|sQ@gFhUV}7hb9wbWC71^Np?m#TFZ?K;#ScY9PF;$-lH!YnQb2@F zN>YU^f7ss*Dro)6`K1fbX1kiUzA%r|ioCo0+t<2r?-xP)w__QqyT!uG`dGST1CN-2 zkLJY-%*yd7Tt?P1__-Akv@bXUbCIJ=OyNP+LL7fY^b*33EL-lnBj=$Isc!OnAh`UM zUqiW}x17OR-7n+cR*#4%ZaaijSGK41hojfF6^mv;t; zPF2%K?X6Y#(u(hkf{Td&f4Y6@pLX>oD!IS;P1bR4PZ`6Qybz1;vRg^Cx5AWXI)eq>C2N36L$@`*dK6uD5Ipr+$uPBQPGU@O4VI4adzqFt zS)=Z#Fp}el?H?^2MPOtblA5n8RwuAl$Bi;U8skxz*fSGLi8eR*_~8v4DDYK5ir?)7 zM31=7V2q=_s{*-mZ{{6>F$rsXtM^}gh3D-MZX%bQBLHZSXpWoceizbHh9c@=VNv|C ziN4C*8S4f7sXj1A!u-pwl&c_e&A&T3_JAC9f2_lFB56P*76enG@Xn+OW&f(Dr@(o& zWs}C_@ECs{HI=t6Em2%{=Ry(r{O1dRmQCT>+5GXGd%rA~>CWn1J@Fmp|Du?gX7HCAqTqlAPVa zllr)2ESj0|<6z9EN9IW3XO&G}4}r06)&eL^fcKP@w)(}5$$Mf%1jybkQn+x`vLgkD z&OCs<3ELaLr1zZhNZr8oD8@AdaT9wKaIdF051da(rL(sx=KyPG^4l$dSSj#?z-s zuv5YpOkIld9tJFWeMuP-RMEl6wSUsJe?UnF#|8P<@5<&N{xn_Cv0$M{jBX+>s5 z{o#oj0L(|5ZX)z^nSB{dt`#!%NS`7BMIjw?a!f|Fz7qr@Jc7l8NEiZ*`oU6znR&qG za%UaKTbebax_r*7Ie)GM8bP?zzka9lDJ?b5gFGS8(nXglo%1fFT;bq`$P0pV8bP4t zC-U*pV%bmUUSXUII*o?9kxn${`$y+WM@UJq&{sIWU9@K$tJ=QtmUA{z{sQB-j>Xl&#)gyY zvwixXm!&bunqxoyOy!tP9^*^*7cQw#Ti54c{}yTA-?!P(fmn`QpRziED~{3Cs5{ z$-0`VOj9lNf7K*!ODQtmSQ`cV{O(Dug`F6-*QLMC^Vb+SIAb2~OJN6qBMxq@LE z?%GNj99pz<)i2V2nC7vEHrMRWKXQ>NVfM`m2qAa^ys8#Xf{QFf9(b3vZ&Tmna$+>@ z8JN(sN!pH?Bg9zfk)J9zAX>V08yCw0`s0^F{z;1}?s(bprEi}|p2J0+qQa_d&o0t7 z<6#Dnao^`Lrrg&1cECp}zbwxshBgs0tHfK{%EL)-r|%_^0ohioW%BDuaglKc1&)FK z_t*h27tz_ngeei5K%Z3#Yb$b0U>*f=#ChtezWn#=edvbQ;1FBUF323dth$DvsX%tR z#f`nZk;!0Z`5*LtQ^(gSwy?W0-8cgIjd|BvsKDPXxsN@Q!&y=-2VP(r*~I=QqHpJIm8L8_-_i&o zXcKjKpHf%2d|5feDKiYg0{Vt|Q;1#2sp57F$!^2>qsqDaGDupe&79uRERsEbKe@>l zHO}JSbyHtsOj+9C<=D@}+WWGMp~6PK(4f*kA?QrBohB^O34wk#VK)mNoCf#mZe#_9@pLvz{8j`&g%8hOeo&m{XoHGPv#&csJ_;G_9a@DZ{6m>)V3Rc zt|AhKXb&~P3MCv`;#_QCudiS{9UH>1=y-8s_k78b&Xr5St_ngh_GDiNG3`%yNKyJ6 zIH;ta`ghM?*A4|B;cGZWMvjv9KIQg#+ppsYHf0xU*psY08)S*`-bED!02#=LYn%A} zHmjS_&&lQ53)GWNq;sZ*Yw}RV!pzJ?UR&OcOSFN+K9VV@sYjF#GLoZ=VKfw)_0>GY zDet{8aNYcC$WkHS!ES1r5XsQBZ-$TG%0TQx8!c5Z`Gto3mN^&jXfNJSpMebc^i7Mo z7~9$8e?(G&qk35zP6+j&{;VcA6%wHUuED}FlA&tx*3i;F5=_6l0-C{5@f0;WE+wz6pM%Ooao+gHyeq=*k)8kt)y=N=b3F_IP7DDr*;q-y?>&#^urws7ibE^|3D zn%oaBa9W+O8MZb~IX5=vcCZ<^ZEolYGY0F*H+nH1yF}(+*SJJ+2$?T4u z4MsY78cHIsGIfj&x}Gf6Q{BAcr;wZ@-tpZq&;z;lg*s${wy*@VEE0Yg=1AO^1QZ5> zAF$lOELZE9sg|Sk!?!5&hq06&G zQ;Uj5;Qo#Mk-mZ(yZXbPEO8wlum@gXB-pfkb3EbX&Qg_GdS>nru#{`VSbHOHR>Nr& z)9c{?`Kcy+#Wz6GigX|l_UvA69}-wB^?<^-uVeCQ)?0b@eN4>4o^(um;07vdJ*DDT z{`OoC9;*;ba3iy1BbBGh!u`z`UdKAV7{Eay?t=oN_IkP5OTY0^rPOQMH%0*2TTL`^ zm?d9~LRQJiN{U)0pq+P4s00h$IB|4#if%-U2<)f2`B_u5{P25V#zbNMf_)*4rHe<~ z(i^8DW5K-zuP4*>LS+EP1hS8P&Aj58F@5iE)%_{HZJp0Y=OLoWGx;?w4*2-ug*U=> z2@LWsxs?LB!fEnm%kSqcf1xQmLj_S@#VgOc5k5AL0i;OkVyX^|zjIjEG_}>$Mtc4! zJLRlc8P#_#X7fCje~hJjBNoGh+;AFe!w*zOOu4#5!8yQp2fpl8Tj{ZA5&VNA{q6$L@=I0StwFwD@&g+5ZDq#_^NRiHm>7C*ConarQ4 zPx9-=YE4Kd!;_L;4HwdcC!>2NZ^gmN^mX!-%=8U&V%zSU%E0jPf22_6v+^l>h-hxD zG^u**rQ0qqZ-EZ~2nzkQb)UU|$N`KACnQa(jGN}F>=*Xa#2ATAQCP|Kw!dOMRmj`@` zhhn!_fzm07z_{1(1Yab$*vI8ujjFN@1(TYUmX2zek5Wutv>q@6NWlJVXabKAQb(3o z{0Wh2K5WC4{rf$TsO#zA;Rm{!jcUQv9a9FN(}h)HY_QV5+MMO`OQ*!N9eNQO61?$@ z;c$^iBq8z!!gQ@;vi$f!VW%J+c^2k~FpWXT;F0e9HKMEz82(rV%n|0tF#^L1N2rQD zS$4*$KCd`59CIEz$9rJuatW~EumKS6TNs`=DX3U=ru=36w5SB$NpkfDNL)eDT3vos z+-y22>_!+pA!RcA!uPo66BkLeT~xT(Zn{s}qRFU;!w86fq9uSHD8!Ojs(V9V{ZkI- z3C1VYLI~PAhcT|p_+SHDTB#>Mv-yHX<{`_t=NJdkn*iIR-q?{f+5!6r`3B)G4*q2T zBIw_Ng@?3HH~f>QgiNB&S-4u0lzK^~rZm7S06>ByH9dyJ zV>!~K6AuRZ5E5HL3L|Lg{k^)A!PBg0FW*Cm2t z2MgHVC!BfieTfrH+C3n5?$3AGZUk;nQeAh+xs8d<&$AzU#ZiArDh|KP+#5ftv;mFD zo9YNs2C!s54VFJJT(zzkYu{I;wG&_)8^%~!tlOcHuK0J#$Syu{CcE<<`f6@(VUDp8 zsTOs0;5UFDz`IK2{JM>vvF@q6Gg5)D3UQD^H23y2$CX1PZE2DlE!@_cW%D zjADF$YV%zyLZ*3>I7`+g_b<*@bKucJC0Chbs>b3}0w+pLMNT=r@fqES^{%U$c3n*x zis^vXjg4qxe}^y_T;?M&Md??*fT~+HL+*>Y(eam7zZbv;_`O>g7uYE?&+DQG&HlPy zgx(*P`yh&-wGo$pA!xitgm~f0s!RHhU$9{ex=ovxF=jP@U^pwmJ0YOz)*K*y{vucva!et-Mdy7q-f?6kv1S9mD|j6GjM+|Zd z@yT!DKY_HS!g|SRXYT&SE8Ec1=NCuN#+0sW>Ot|DPeq+q>K$0H0IEp6CBX9PQ`}iv zRbhbd09DNNFRqnuJ7Ie})^fnOwpNLH?Vyc_Ay!ST#!inP1?WVujCu@U zsXdXd%XaoRZ}#$d6{-r_#Yz_>?b)c^kGU_Q!2#39sozNfr?O=!bIWDa&O131u}w

F$$D@UiG(N_9qMPG?f%(c(5Av) z3G~{H=TV-mVMNmv8TnXI_+nV1x!Fr~KpF%i!C;!5&UfSe@%`T0?W+n;WHfo~ zpo004^%X`mIp93I1QR?=QU!A^8V<>*6v)y%`3&X7dPT`{%zhVj&_$c1Rx%oUk}_|;1h zAv!Bnq;RAJVCe@^!E%L4@9fr(d>>SYR?pP<*L~7?3o|6t$0nzuwt*L4A(=s*%m@Ec zpXZvt84~cpnh< z%u7Rrw)nOh{)*dNP5Y{@gO)=umuOzhHNTlSO}nw<5vI08iI9M@?S3;{!(AE~{h{%% zgG_(_3eMvza7HJ()C=>(Xy9AHgNN+6Nv?*kgPa@aU3u9o)1CaEGXuZO2C3>nl~Gi| zF0aM{QX;eIb&UMh1oRFq%6G%%?!?r;>W=Um(QeJa*vjhQJS znhtQ2ctrAi&c21SZsGEiH1LpXp^RK<`AuTE@6q&tRpEpaVk#P8Dn+$JgybSQU~=sm z>tv#e&9JQS*9-~(?Mb06TNi0M&vB_UNO3BN(YPd=tUCU~dcs=vyoGu0&LJR^huy{y zseT`AbT1-d+ux8+rsJ5CyHOjr@2p3!-;qHHu<28p{We8rwsN5X5n4T_6Hco)VfDe= zx=RGQLpS#$pWFL3bf&!?wdHRZMx2T&ah!$k+VL%f;Xb8R0w%f>#`EV7RJbz)~XFOmcXa%Sid9cq9^>tpgPPwG0 zr*X1$GwWy0h7Rc}UTH&4@ z)%RDUbh9}l1njQH7T3Q<#HN0I3$im{ z+36NMTEFqgMU1b{sj`4{t!o(AOEBT-gNs)bq~G%uC%^EBAfyo;S6Th5owjo0?H@%9ENeF07upw0&Nfyv-De~~nQ?P(F zkcNC-s|K7dM9RVBQ+cmM0uUxu zOFtDJ1H@4TTR9<5PcsNHjaPRb|LM^cSt5_M301IQ^dcxf^hQI7l*wFe6Kw>OY_?ED zYZN@BaWp66+#Jrk<{85UumcOEf`a{>-@RMY@EWPj_a)e?Y1BZHNA}TLgVyPh)c*D;jvIvM!ZejRgFWV0NDsB+1n~4yr zCf^)HtZdt`f6ZUeF>G;2b|4By18{=U^G75}?``wJRm&zu>!Y7|`AUXt3nG1O~3e;GCkSZ|_;UK+4H*Ib5mV|D4RG ztJ%E7-)W32+!n18EiA9ici%?6bT6KJGRB5sJiRu7kgzfIj_!{4=WIOMJ#r z_VU-u(n?FJ-8azC`3el?;Q_^K2Z~d1m&vHpr}Gn65#%XS6avHG2q<_ct@=jL*oV0q zG5ndu&10#y?~uhq7&V$*nZ8h~&fAQ^OkMw1&pV)hct)yQFP-gHxYW+x`SjA+8A*%V zarTuYy+~~Bwa*Yh(x|^-B&)ksg+Kf&bWTnmz6)9|zHFB=5vL&UR4`LeyV%AyUPkpgs0w=Alcz+>Ib;yKXv$aj2~^+O>b-WQ1&Jjp95OVu zaqCJUc^iiJ27L@Z9>c7&Wl;@QV6{)lUxf z-05!wZ0}}>qQZBZrH7ar9V?f={!u)<0eLCmY?EhEiOsduz@zC>_93ki&>){l;g_jo zYK|EELI77nzyXnJ4cQ!G-#qDjsB<^B$e{Dv^S2Kw1hP!wInh29HI-*Hp&!}MY34i@ zWaklWwpS}f=9yrFZU+_k;Gw-wjs43_Zp*zplK^Ei$$=%tUe5piQWNpPU93;7>0~qrUBHFz1zCzf R$8=&_ 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 literal 0 HcmV?d00001 diff --git a/resources/profiles/DeltaMaker/deltamaker_2_buildplate_texture.svg b/resources/profiles/DeltaMaker/deltamaker_2_buildplate_texture.svg new file mode 100755 index 0000000000..c27a94302d --- /dev/null +++ b/resources/profiles/DeltaMaker/deltamaker_2_buildplate_texture.svg @@ -0,0 +1,99 @@ + + + + + DM1-Build-Area + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/resources/profiles/DeltaMaker/filament/DeltaMaker Brand PLA.json b/resources/profiles/DeltaMaker/filament/DeltaMaker Brand PLA.json new file mode 100755 index 0000000000..b368ac417c --- /dev/null +++ b/resources/profiles/DeltaMaker/filament/DeltaMaker Brand PLA.json @@ -0,0 +1,22 @@ +{ + "type": "filament", + "filament_id": "GFL99", + "setting_id": "GFSL99", + "name": "DeltaMaker Brand PLA", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_pla", + "filament_flow_ratio": ["0.987"], + "filament_max_volumetric_speed": ["12"], + "slow_down_layer_time": ["8"], + "filament_vendor": ["DeltaMaker"], + "nozzle_temperature_range_low": ["210"], + "nozzle_temperature_range_high": ["235"], + "nozzle_temperature": ["230"], + "nozzle_temperature_initial_layer": ["235"], + "compatible_printers": [ + "DeltaMaker 2 0.35 nozzle", + "DeltaMaker 2T 0.5 nozzle", + "DeltaMaker 2XT 0.5 nozzle" + ] +} diff --git a/resources/profiles/DeltaMaker/filament/DeltaMaker Generic PETG.json b/resources/profiles/DeltaMaker/filament/DeltaMaker Generic PETG.json new file mode 100755 index 0000000000..5064d61bca --- /dev/null +++ b/resources/profiles/DeltaMaker/filament/DeltaMaker Generic PETG.json @@ -0,0 +1,23 @@ +{ + "type": "filament", + "filament_id": "GFG99", + "setting_id": "GFSG99", + "name": "DeltaMaker Generic PETG", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_pet", + "reduce_fan_stop_start_freq": ["1"], + "slow_down_for_layer_cooling": ["1"], + "fan_cooling_layer_time": ["30"], + "overhang_fan_speed": ["90"], + "fan_max_speed": ["40"], + "fan_min_speed": ["20"], + "slow_down_min_speed": ["10"], + "slow_down_layer_time": ["8"], + "filament_flow_ratio": ["0.95"], + "filament_max_volumetric_speed": ["2"], + "filament_start_gcode": ["; filament start gcode\n"], + "compatible_printers": [ + "DeltaMaker Pro 0.5 nozzle" + ] +} diff --git a/resources/profiles/DeltaMaker/filament/DeltaMaker Generic PLA.json b/resources/profiles/DeltaMaker/filament/DeltaMaker Generic PLA.json new file mode 100755 index 0000000000..14797b6984 --- /dev/null +++ b/resources/profiles/DeltaMaker/filament/DeltaMaker Generic PLA.json @@ -0,0 +1,17 @@ +{ + "type": "filament", + "filament_id": "GFL99", + "setting_id": "GFSA04", + "name": "DeltaMaker Generic PLA", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_pla", + "filament_flow_ratio": ["0.987"], + "filament_max_volumetric_speed": ["10"], + "slow_down_layer_time": ["8"], + "compatible_printers": [ + "DeltaMaker 2 0.35 nozzle", + "DeltaMaker 2T 0.5 nozzle", + "DeltaMaker 2XT 0.5 nozzle" + ] +} diff --git a/resources/profiles/DeltaMaker/filament/DeltaMaker Generic TPU.json b/resources/profiles/DeltaMaker/filament/DeltaMaker Generic TPU.json new file mode 100755 index 0000000000..78bdc3273a --- /dev/null +++ b/resources/profiles/DeltaMaker/filament/DeltaMaker Generic TPU.json @@ -0,0 +1,14 @@ +{ + "type": "filament", + "filament_id": "GFB99", + "setting_id": "GFSA04", + "name": "DeltaMaker Generic TPU", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_tpu", + "filament_flow_ratio": ["0.94"], + "filament_max_volumetric_speed": ["4.5"], + "compatible_printers": [ + "DeltaMaker Pro 0.5 nozzle" + ] +} diff --git a/resources/profiles/DeltaMaker/filament/fdm_filament_common.json b/resources/profiles/DeltaMaker/filament/fdm_filament_common.json new file mode 100755 index 0000000000..d2ba9bc380 --- /dev/null +++ b/resources/profiles/DeltaMaker/filament/fdm_filament_common.json @@ -0,0 +1,50 @@ +{ + "type": "filament", + "name": "fdm_filament_common", + "from": "system", + "instantiation": "false", + "cool_plate_temp" : ["0"], + "eng_plate_temp" : ["0"], + "hot_plate_temp" : ["0"], + "textured_plate_temp" : ["0"], + "cool_plate_temp_initial_layer" : ["0"], + "eng_plate_temp_initial_layer" : ["0"], + "hot_plate_temp_initial_layer" : ["0"], + "textured_plate_temp_initial_layer" : ["0"], + "overhang_fan_threshold": ["50%"], + "overhang_fan_speed": ["100"], + "slow_down_for_layer_cooling": ["1"], + "close_fan_the_first_x_layers": ["1"], + "filament_end_gcode": ["; filament end gcode \n"], + "filament_flow_ratio": ["1.0"], + "reduce_fan_stop_start_freq": ["1"], + "fan_cooling_layer_time": ["100"], + "filament_cost": ["38"], + "filament_density": ["1.25"], + "filament_deretraction_speed": ["150"], + "filament_diameter": ["1.75"], + "filament_max_volumetric_speed": ["15"], + "filament_minimal_purge_on_wipe_tower": ["15"], + "filament_retraction_minimum_travel": ["3.0"], + "filament_retract_before_wipe": ["1"], + "filament_retract_when_changing_layer": ["0"], + "filament_retraction_length": ["8.0"], + "filament_z_hop": ["0.8"], + "filament_z_hop_types": ["nil"], + "filament_retract_restart_extra": ["0.0"], + "filament_retraction_speed": ["150"], + "filament_settings_id": [""], + "filament_soluble": ["0"], + "filament_type": ["PLA"], + "filament_vendor": ["Generic"], + "filament_wipe": ["1"], + "filament_wipe_distance": ["8.0"], + "bed_type": ["Cool Plate"], + "full_fan_speed_layer": ["0"], + "fan_max_speed": ["100"], + "fan_min_speed": ["100"], + "slow_down_min_speed": ["10"], + "slow_down_layer_time": ["8"], + "filament_start_gcode": ["; filament start gcode\n"], + "temperature_vitrification": ["60"] +} diff --git a/resources/profiles/DeltaMaker/filament/fdm_filament_pet.json b/resources/profiles/DeltaMaker/filament/fdm_filament_pet.json new file mode 100755 index 0000000000..f71c7e00b4 --- /dev/null +++ b/resources/profiles/DeltaMaker/filament/fdm_filament_pet.json @@ -0,0 +1,24 @@ +{ + "type": "filament", + "name": "fdm_filament_pet", + "from": "system", + "instantiation": "false", + "inherits": "fdm_filament_common", + "slow_down_for_layer_cooling": ["1"], + "close_fan_the_first_x_layers": ["3"], + "fan_cooling_layer_time": ["15"], + "filament_max_volumetric_speed": ["0"], + "filament_type": ["PETG"], + "filament_density": ["1.27"], + "filament_cost": ["30"], + "nozzle_temperature_initial_layer": ["240"], + "reduce_fan_stop_start_freq": ["1"], + "fan_max_speed": ["40"], + "fan_min_speed": ["20"], + "overhang_fan_speed": ["50"], + "nozzle_temperature": ["250"], + "temperature_vitrification": ["80"], + "nozzle_temperature_range_low": ["235"], + "nozzle_temperature_range_high": ["255"], + "filament_start_gcode": ["; filament start gcode\n"] +} diff --git a/resources/profiles/DeltaMaker/filament/fdm_filament_pla.json b/resources/profiles/DeltaMaker/filament/fdm_filament_pla.json new file mode 100755 index 0000000000..20ab632a4c --- /dev/null +++ b/resources/profiles/DeltaMaker/filament/fdm_filament_pla.json @@ -0,0 +1,27 @@ +{ + "type": "filament", + "name": "fdm_filament_pla", + "from": "system", + "instantiation": "false", + "inherits": "fdm_filament_common", + "fan_cooling_layer_time": "100", + "filament_max_volumetric_speed": ["0"], + "filament_type": ["PLA"], + "filament_density": ["1.24"], + "filament_cost": ["29"], + "nozzle_temperature_initial_layer": ["205"], + "reduce_fan_stop_start_freq": ["1"], + "slow_down_for_layer_cooling": ["1"], + "fan_max_speed": ["100"], + "fan_min_speed": ["100"], + "overhang_fan_speed": ["100"], + "overhang_fan_threshold": ["50%"], + "close_fan_the_first_x_layers": ["1"], + "nozzle_temperature": ["210"], + "temperature_vitrification": ["60"], + "nozzle_temperature_range_low": ["190"], + "nozzle_temperature_range_high": ["210"], + "slow_down_min_speed": ["10"], + "slow_down_layer_time": ["4"], + "filament_start_gcode": ["; filament start gcode\n"] +} diff --git a/resources/profiles/DeltaMaker/filament/fdm_filament_tpu.json b/resources/profiles/DeltaMaker/filament/fdm_filament_tpu.json new file mode 100755 index 0000000000..92ed40afc9 --- /dev/null +++ b/resources/profiles/DeltaMaker/filament/fdm_filament_tpu.json @@ -0,0 +1,26 @@ +{ + "type": "filament", + "name": "fdm_filament_tpu", + "from": "system", + "instantiation": "false", + "inherits": "fdm_filament_common", + "slow_down_for_layer_cooling": ["1"], + "close_fan_the_first_x_layers": ["3"], + "fan_cooling_layer_time": ["30"], + "filament_max_volumetric_speed": ["0"], + "filament_type": ["ABS"], + "filament_density": ["1.10"], + "filament_cost": ["20"], + "nozzle_temperature_initial_layer": ["240"], + "reduce_fan_stop_start_freq": ["1"], + "fan_max_speed": ["5"], + "fan_min_speed": ["5"], + "overhang_fan_threshold": ["25%"], + "overhang_fan_speed": ["80"], + "nozzle_temperature": ["235"], + "temperature_vitrification": ["110"], + "nozzle_temperature_range_low": ["235"], + "nozzle_temperature_range_high": ["240"], + "slow_down_min_speed": ["10"], + "slow_down_layer_time": ["15"] +} diff --git a/resources/profiles/DeltaMaker/machine/DeltaMaker 2 0.35 nozzle.json b/resources/profiles/DeltaMaker/machine/DeltaMaker 2 0.35 nozzle.json new file mode 100755 index 0000000000..f14cb56feb --- /dev/null +++ b/resources/profiles/DeltaMaker/machine/DeltaMaker 2 0.35 nozzle.json @@ -0,0 +1,25 @@ +{ + "type": "machine", + "setting_id": "GM001", + "name": "DeltaMaker 2 0.35 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_machine_common", + "printer_model": "DeltaMaker 2", + "default_print_profile": "0.18mm Standard @DeltaMaker", + "nozzle_diameter": ["0.35"], + "printer_variant": "0.35", + "printable_height": "260", + "printable_area": [ + "-69x-120", + "-138x0", + "-69x120", + "69x120", + "138x0", + "69x-120" + ], + "default_filament_profile": [ + "DeltaMaker Brand PLA", + "DeltaMaker Generic PLA" + ] +} diff --git a/resources/profiles/DeltaMaker/machine/DeltaMaker 2.json b/resources/profiles/DeltaMaker/machine/DeltaMaker 2.json new file mode 100755 index 0000000000..31349d707f --- /dev/null +++ b/resources/profiles/DeltaMaker/machine/DeltaMaker 2.json @@ -0,0 +1,11 @@ +{ + "type": "machine_model", + "name": "DeltaMaker 2", + "model_id": "deltamaker-2", + "nozzle_diameter": "0.35", + "machine_tech": "FFF", + "family": "DeltaMaker", + "bed_model": "deltamaker_2_buildplate_model.stl", + "bed_texture": "deltamaker_2_buildplate_texture.png", + "default_materials": "DeltaMaker Brand PLA;DeltaMaker Generic PLA" +} diff --git a/resources/profiles/DeltaMaker/machine/DeltaMaker 2T 0.5 nozzle.json b/resources/profiles/DeltaMaker/machine/DeltaMaker 2T 0.5 nozzle.json new file mode 100755 index 0000000000..5d26bcc52d --- /dev/null +++ b/resources/profiles/DeltaMaker/machine/DeltaMaker 2T 0.5 nozzle.json @@ -0,0 +1,25 @@ +{ + "type": "machine", + "setting_id": "GM002", + "name": "DeltaMaker 2T 0.5 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_machine_common", + "printer_model": "DeltaMaker 2T", + "default_print_profile": "0.18mm Standard @DeltaMaker", + "nozzle_diameter": ["0.5"], + "printer_variant": "0.5", + "printable_height": "460", + "printable_area": [ + "-69x-120", + "-138x0", + "-69x120", + "69x120", + "138x0", + "69x-120" + ], + "default_filament_profile": [ + "DeltaMaker Brand PLA", + "DeltaMaker Generic PLA" + ] +} diff --git a/resources/profiles/DeltaMaker/machine/DeltaMaker 2T.json b/resources/profiles/DeltaMaker/machine/DeltaMaker 2T.json new file mode 100755 index 0000000000..f4909fd6a7 --- /dev/null +++ b/resources/profiles/DeltaMaker/machine/DeltaMaker 2T.json @@ -0,0 +1,11 @@ +{ + "type": "machine_model", + "name": "DeltaMaker 2T", + "model_id": "deltamaker-2t", + "nozzle_diameter": "0.5", + "machine_tech": "FFF", + "family": "DeltaMaker", + "bed_model": "deltamaker_2_buildplate_model.stl", + "bed_texture": "deltamaker_2_buildplate_texture.png", + "default_materials": "DeltaMaker Brand PLA;DeltaMaker Generic PLA" +} diff --git a/resources/profiles/DeltaMaker/machine/DeltaMaker 2XT 0.5 nozzle.json b/resources/profiles/DeltaMaker/machine/DeltaMaker 2XT 0.5 nozzle.json new file mode 100755 index 0000000000..a6f1ac18f4 --- /dev/null +++ b/resources/profiles/DeltaMaker/machine/DeltaMaker 2XT 0.5 nozzle.json @@ -0,0 +1,25 @@ +{ + "type": "machine", + "setting_id": "GM003", + "name": "DeltaMaker 2XT 0.5 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_machine_common", + "printer_model": "DeltaMaker 2XT", + "default_print_profile": "0.25mm Draft @DeltaMaker", + "nozzle_diameter": ["0.5"], + "printer_variant": "0.5", + "printable_height": "565", + "printable_area": [ + "-69x-120", + "-138x0", + "-69x120", + "69x120", + "138x0", + "69x-120" + ], + "default_filament_profile": [ + "DeltaMaker Brand PLA", + "DeltaMaker Generic PLA" + ] +} diff --git a/resources/profiles/DeltaMaker/machine/DeltaMaker 2XT.json b/resources/profiles/DeltaMaker/machine/DeltaMaker 2XT.json new file mode 100755 index 0000000000..8ea63e79ab --- /dev/null +++ b/resources/profiles/DeltaMaker/machine/DeltaMaker 2XT.json @@ -0,0 +1,11 @@ +{ + "type": "machine_model", + "name": "DeltaMaker 2XT", + "model_id": "deltamaker-2xt", + "nozzle_diameter": "0.5", + "machine_tech": "FFF", + "family": "DeltaMaker", + "bed_model": "deltamaker_2_buildplate_model.stl", + "bed_texture": "deltamaker_2_buildplate_texture.png", + "default_materials": "DeltaMaker Brand PLA;DeltaMaker Generic PLA" +} diff --git a/resources/profiles/DeltaMaker/machine/fdm_klipper_common.json b/resources/profiles/DeltaMaker/machine/fdm_klipper_common.json new file mode 100755 index 0000000000..fcfe4d6f72 --- /dev/null +++ b/resources/profiles/DeltaMaker/machine/fdm_klipper_common.json @@ -0,0 +1,60 @@ +{ + "type": "machine", + "name": "fdm_klipper_common", + "from": "system", + "instantiation": "false", + "inherits": "fdm_machine_common", + "gcode_flavor": "klipper", + "machine_max_acceleration_e": ["5000", "5000"], + "machine_max_acceleration_extruding": ["5000", "5000"], + "machine_max_acceleration_retracting": ["5000", "5000"], + "machine_max_acceleration_travel": ["5000", "5000"], + "machine_max_acceleration_x": ["5000", "5000"], + "machine_max_acceleration_y": ["5000", "5000"], + "machine_max_acceleration_z": ["1000", "1000"], + "machine_max_speed_e": ["25", "25"], + "machine_max_speed_x": ["500", "200"], + "machine_max_speed_y": ["500", "200"], + "machine_max_speed_z": ["120", "120"], + "machine_max_jerk_e": ["2.5", "2.5"], + "machine_max_jerk_x": ["9", "9"], + "machine_max_jerk_y": ["9", "9"], + "machine_max_jerk_z": ["2", "2"], + "machine_min_extruding_rate": ["0", "0"], + "machine_min_travel_rate": ["0", "0"], + "max_layer_height": ["0.32"], + "min_layer_height": ["0.08"], + "printable_height": "250", + "extruder_clearance_radius": "65", + "extruder_clearance_height_to_rod": "36", + "extruder_clearance_height_to_lid": "140", + "printer_settings_id": "", + "printer_technology": "FFF", + "printer_variant": "0.5", + "retraction_minimum_travel": ["1"], + "retract_before_wipe": ["70%"], + "retract_when_changing_layer": ["1"], + "retraction_length": ["8"], + "retract_length_toolchange": ["2"], + "z_hop": ["0.8"], + "retract_restart_extra": ["0"], + "retract_restart_extra_toolchange": ["0"], + "retraction_speed": ["60"], + "deretraction_speed": ["30"], + "z_hop_types": "Normal Lift", + "silent_mode": "1", + "single_extruder_multi_material": "1", + "change_filament_gcode": "", + "wipe": ["1"], + "default_filament_profile": ["DeltaMaker PLA"], + "default_print_profile": "0.20mm Standard @DeltaMaker 2 0.35 nozzle", + "bed_exclude_area": ["0x0"], + "machine_start_gcode": "M190 S[bed_temperature_initial_layer_single]\nM109 S[nozzle_temperature_initial_layer]\nSTART_PRINT EXTRUDER=[nozzle_temperature_initial_layer] BED=[bed_temperature_initial_layer_single]\n", + "machine_end_gcode": "END_PRINT", + "layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]", + "before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\n;[layer_z]\nG92 E0\n", + "machine_pause_gcode": "PAUSE", + "scan_first_layer": "0", + "nozzle_type": "undefined", + "auxiliary_fan": "0" +} diff --git a/resources/profiles/DeltaMaker/machine/fdm_machine_common.json b/resources/profiles/DeltaMaker/machine/fdm_machine_common.json new file mode 100755 index 0000000000..ae0fda9a5d --- /dev/null +++ b/resources/profiles/DeltaMaker/machine/fdm_machine_common.json @@ -0,0 +1,54 @@ +{ + "type": "machine", + "name": "fdm_machine_common", + "from": "system", + "instantiation": "false", + "printer_technology": "FFF", + "extruder_colour": ["#FCE94F"], + "extruder_offset": ["0x0"], + "gcode_flavor": "klipper", + "silent_mode": "1", + "machine_max_acceleration_e": ["5000"], + "machine_max_acceleration_extruding": ["5000"], + "machine_max_acceleration_retracting": ["5000"], + "machine_max_acceleration_x": ["3500"], + "machine_max_acceleration_y": ["3500"], + "machine_max_acceleration_z": ["500"], + "machine_max_speed_e": ["120"], + "machine_max_speed_x": ["500"], + "machine_max_speed_y": ["500"], + "machine_max_speed_z": ["150"], + "machine_max_jerk_e": ["2.5"], + "machine_max_jerk_x": ["10"], + "machine_max_jerk_y": ["10"], + "machine_max_jerk_z": ["2"], + "machine_min_extruding_rate": ["0"], + "machine_min_travel_rate": ["0"], + "max_layer_height": ["0.3"], + "min_layer_height": ["0.1"], + "extruder_clearance_radius": "65", + "extruder_clearance_height_to_rod": "36", + "extruder_clearance_height_to_lid": "140", + "printer_settings_id": "", + "retraction_minimum_travel": ["2"], + "retract_before_wipe": ["0%"], + "retract_when_changing_layer": ["1"], + "retraction_length": ["7"], + "retract_length_toolchange": ["2"], + "z_hop": ["0.8"], + "retract_restart_extra": ["0"], + "retract_restart_extra_toolchange": ["0"], + "retraction_speed": ["80"], + "deretraction_speed": ["40"], + "single_extruder_multi_material": "0", + "change_filament_gcode": "", + "z_lift_type": "NormalLift", + "default_print_profile": "", + "nozzle_type": "undefine", + "auxiliary_fan": "0", + "before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\n;[layer_z]\nG92 E0\n", + "layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]", + "machine_pause_gcode": "", + "machine_start_gcode": "M104 S[nozzle_temperature_initial_layer] ; set temp\nG28\nM109 S[nozzle_temperature_initial_layer] ; wait for temp\nG28\nG91 ; relative positioning\nG1 Z-40 F4000\nG90 ; absolute positioning\n", + "machine_end_gcode": "G28\nM104 S0\nM84 ; disable motors" +} diff --git a/resources/profiles/DeltaMaker/process/0.12mm Fine @DeltaMaker.json b/resources/profiles/DeltaMaker/process/0.12mm Fine @DeltaMaker.json new file mode 100755 index 0000000000..0c2f9c0d22 --- /dev/null +++ b/resources/profiles/DeltaMaker/process/0.12mm Fine @DeltaMaker.json @@ -0,0 +1,20 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.12mm Fine @DeltaMaker", + "from": "system", + "inherits": "fdm_process_common", + "instantiation": "true", + "layer_height": "0.12", + "bottom_shell_layers": "6", + "sparse_infill_density": "15%", + "infill_wall_overlap": "35%", + "ironing_flow": "15%", + "ironing_spacing": "0.1", + "skirt_distance": "3", + "skirt_height": "1", + "tree_support_branch_angle": "40", + "detect_thin_wall": "1", + "top_shell_layers": "8", + "travel_speed": "150" +} diff --git a/resources/profiles/DeltaMaker/process/0.18mm Standard @DeltaMaker.json b/resources/profiles/DeltaMaker/process/0.18mm Standard @DeltaMaker.json new file mode 100755 index 0000000000..97e2e11d25 --- /dev/null +++ b/resources/profiles/DeltaMaker/process/0.18mm Standard @DeltaMaker.json @@ -0,0 +1,25 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.18mm Standard @DeltaMaker", + "from": "system", + "inherits": "fdm_process_common", + "instantiation": "true", + "layer_height": "0.18", + "sparse_infill_density": "15%", + "initial_layer_print_height": "0.25", + "infill_wall_overlap": "35%", + "ironing_flow": "15%", + "ironing_spacing": "0.1", + "ironing_speed": "15", + "overhang_2_4_speed": "20", + "overhang_3_4_speed": "15", + "wall_loops": "3", + "skirt_distance": "3", + "skirt_height": "1", + "skirt_loops": "2", + "detect_thin_wall": "1", + "inner_wall_speed": "40", + "top_surface_speed": "15", + "sparse_infill_speed": "40" +} diff --git a/resources/profiles/DeltaMaker/process/0.25mm Draft @DeltaMaker.json b/resources/profiles/DeltaMaker/process/0.25mm Draft @DeltaMaker.json new file mode 100755 index 0000000000..89d4261bfd --- /dev/null +++ b/resources/profiles/DeltaMaker/process/0.25mm Draft @DeltaMaker.json @@ -0,0 +1,24 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.25mm Draft @DeltaMaker", + "from": "system", + "inherits": "fdm_process_common", + "instantiation": "true", + "adaptive_layer_height": "1", + "layer_height": "0.25", + "bottom_shell_layers": "3", + "bridge_speed": "60", + "wall_infill_order": "inner wall/outer wall/infill", + "sparse_infill_density": "15%", + "sparse_infill_line_width": "0.40", + "infill_wall_overlap": "35%", + "ironing_flow": "15%", + "overhang_2_4_speed": "20", + "overhang_3_4_speed": "15", + "wall_loops": "2", + "print_settings_id": "", + "standby_temperature_delta": "-5", + "detect_thin_wall": "1", + "top_shell_layers": "4" +} diff --git a/resources/profiles/DeltaMaker/process/fdm_process_common.json b/resources/profiles/DeltaMaker/process/fdm_process_common.json new file mode 100755 index 0000000000..2253394cc7 --- /dev/null +++ b/resources/profiles/DeltaMaker/process/fdm_process_common.json @@ -0,0 +1,114 @@ +{ + "type": "process", + "name": "fdm_process_common", + "from": "system", + "instantiation": "false", + "adaptive_layer_height": "0", + "reduce_crossing_wall": "0", + "max_travel_detour_distance": "20.0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_thickness": "0.8", + "bridge_speed": "100", + "brim_type": "no_brim", + "brim_width": "4", + "brim_object_gap": "0.1", + "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": "50%", + "sparse_infill_pattern": "gyroid", + "initial_layer_print_height": "0.25", + "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]}_{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": "120%", + "inner_wall_line_width": "110%", + "outer_wall_line_width": "100%", + "top_surface_line_width": "100%", + "sparse_infill_line_width": "100%", + "initial_layer_line_width": "120%", + "internal_solid_infill_line_width": "120%", + "support_line_width": "110%", + "wall_loops": "2", + "print_settings_id": "", + "raft_layers": "0", + "seam_position": "aligned", + "skirt_distance": "3.0", + "skirt_height": "2", + "min_skirt_length": "4", + "skirt_loops": "3", + "minimum_sparse_infill_area": "15", + "spiral_mode": "0", + "standby_temperature_delta": "-5", + "enable_support": "0", + "resolution": "0.012", + "support_type": "tree(auto)", + "support_on_build_plate_only": "0", + "support_top_z_distance": "0.25", + "support_bottom_z_distance": "0.25", + "support_filament": "0", + "support_interface_loop_pattern": "0", + "support_interface_filament": "0", + "support_interface_top_layers": "1", + "support_interface_bottom_layers": "0", + "support_interface_spacing": "0.25", + "support_interface_speed": "80", + "support_base_pattern": "default", + "support_base_pattern_spacing": "2.5", + "support_speed": "75", + "support_threshold_angle": "25", + "support_object_xy_distance": "0.8", + "tree_support_branch_angle": "45", + "tree_support_wall_count": "0", + "tree_support_with_infill": "0", + "detect_thin_wall": "0", + "top_surface_pattern": "monotonicline", + "top_shell_thickness": "0.8", + "enable_prime_tower": "0", + "wipe_tower_no_sparse_layers": "0", + "prime_tower_width": "12.0", + "xy_hole_compensation": "0", + "xy_contour_compensation": "0", + "layer_height": "0.2", + "bottom_shell_layers": "4", + "top_shell_layers": "4", + "bridge_flow": "0.98", + "initial_layer_speed": "20", + "initial_layer_infill_speed": "20", + "initial_layer_travel_speed": "50%", + "slow_down_layers": "2", + "outer_wall_speed": "50", + "inner_wall_speed": "80", + "sparse_infill_speed": "80", + "internal_solid_infill_speed": "75", + "top_surface_speed": "50", + "gap_infill_speed": "30", + "travel_speed": "150", + "compatible_printers": [ + "DeltaMaker 2 0.35 nozzle", + "DeltaMaker 2T 0.5 nozzle", + "DeltaMaker 2XT 0.5 nozzle" + ] +} diff --git a/resources/profiles/DeltaMaker/process/fdm_process_klipper_common.json b/resources/profiles/DeltaMaker/process/fdm_process_klipper_common.json new file mode 100755 index 0000000000..1fe8e43149 --- /dev/null +++ b/resources/profiles/DeltaMaker/process/fdm_process_klipper_common.json @@ -0,0 +1,23 @@ +{ + "type": "process", + "name": "fdm_process_klipper_common", + "from": "system", + "instantiation": "false", + "inherits": "fdm_process_common", + "default_acceleration": "5000", + "top_surface_acceleration": "3000", + "travel_acceleration": "6000", + "inner_wall_acceleration": "5000", + "outer_wall_acceleration": "3000", + "initial_layer_acceleration": "500", + "initial_layer_speed": "50", + "initial_layer_infill_speed": "105", + "outer_wall_speed": "120", + "inner_wall_speed": "120", + "internal_solid_infill_speed": "120", + "top_surface_speed": "100", + "gap_infill_speed": "100", + "sparse_infill_speed": "120", + "travel_speed": "250", + "exclude_object": "1" +} From cac455e696c7c5ae15a6def8e8e3a1cacd71ee96 Mon Sep 17 00:00:00 2001 From: Shuwn Hsu <20023822+shuwn@users.noreply.github.com> Date: Fri, 24 Jan 2025 14:01:28 +0800 Subject: [PATCH 09/25] Update OrcaSlicer.pot & Update Traditional Chinese (#8163) * Comprehensive Update in Traditional Chinese * Update OrcaSlicer.pot & Update Traditional Chinese * Update OrcaSlicer_zh_TW.po * Fix Space --- localization/i18n/OrcaSlicer.pot | 78 +++++++++++ localization/i18n/ca/OrcaSlicer_ca.po | 79 +++++++++++ localization/i18n/cs/OrcaSlicer_cs.po | 79 +++++++++++ localization/i18n/de/OrcaSlicer_de.po | 79 +++++++++++ localization/i18n/en/OrcaSlicer_en.po | 79 +++++++++++ localization/i18n/es/OrcaSlicer_es.po | 79 +++++++++++ localization/i18n/fr/OrcaSlicer_fr.po | 79 +++++++++++ localization/i18n/hu/OrcaSlicer_hu.po | 79 +++++++++++ localization/i18n/it/OrcaSlicer_it.po | 79 +++++++++++ localization/i18n/ja/OrcaSlicer_ja.po | 79 +++++++++++ localization/i18n/ko/OrcaSlicer_ko.po | 79 +++++++++++ localization/i18n/nl/OrcaSlicer_nl.po | 79 +++++++++++ localization/i18n/pl/OrcaSlicer_pl.po | 79 +++++++++++ localization/i18n/pt_BR/OrcaSlicer_pt_BR.po | 79 +++++++++++ localization/i18n/ru/OrcaSlicer_ru.po | 79 +++++++++++ localization/i18n/sv/OrcaSlicer_sv.po | 79 +++++++++++ localization/i18n/tr/OrcaSlicer_tr.po | 79 +++++++++++ localization/i18n/uk/OrcaSlicer_uk.po | 79 +++++++++++ localization/i18n/zh_CN/OrcaSlicer_zh_CN.po | 79 +++++++++++ localization/i18n/zh_TW/OrcaSlicer_zh_TW.po | 140 ++++++++++++++++---- 20 files changed, 1612 insertions(+), 28 deletions(-) diff --git a/localization/i18n/OrcaSlicer.pot b/localization/i18n/OrcaSlicer.pot index be45f8d755..58d02ffe60 100644 --- a/localization/i18n/OrcaSlicer.pot +++ b/localization/i18n/OrcaSlicer.pot @@ -14938,3 +14938,81 @@ msgstr "" #: resources/data/hints.ini: [hint:Avoid warping] msgid "Avoid warping\nDid you know that when printing materials that are prone to warping such as ABS, appropriately increasing the heatbed temperature can reduce the probability of warping." msgstr "" + +#: src/slic3r/GUI/Tab.cpp: +msgid "Dependencies" +msgstr "" + +msgid "Profile dependencies" +msgstr "" + +msgid "This is a default preset." +msgstr "" + +msgid "This is a system preset." +msgstr "" + +msgid "Current preset is inherited from the default preset." +msgstr "" + +msgid "Current preset is inherited from" +msgstr "" + +msgid "It can't be deleted or modified." +msgstr "" + +msgid "Any modifications should be saved as a new preset inherited from this one." +msgstr "" + +msgid "To do that please specify a new name for the preset." +msgstr "" + +msgid "Additional information:" +msgstr "" + +msgid "vendor" +msgstr "" + +msgid ", ver: " +msgstr "" + +msgid "printer model" +msgstr "" + +msgid "default print profile" +msgstr "" + +msgid "default filament profile" +msgstr "" + +msgid "default SLA material profile" +msgstr "" + +msgid "default SLA print profile" +msgstr "" + +msgid "full profile name" +msgstr "" + +msgid "symbolic profile name" +msgstr "" + +msgid "" +"A copy of the current system preset will be created, which will be detached from the system preset." +msgstr "" + +msgid "" +"The current custom preset will be detached from the parent system preset." +msgstr "" + +msgid "" +"Modifications to the current profile will be saved." +msgstr "" + +msgid "" +"This action is not revertible.\nDo you want to proceed?" +msgstr "" + +msgid "" +"Detach preset" +msgstr "" \ No newline at end of file diff --git a/localization/i18n/ca/OrcaSlicer_ca.po b/localization/i18n/ca/OrcaSlicer_ca.po index 7be3f31cc7..33ca51bc49 100644 --- a/localization/i18n/ca/OrcaSlicer_ca.po +++ b/localization/i18n/ca/OrcaSlicer_ca.po @@ -17414,6 +17414,85 @@ msgstr "" "augmentar adequadament la temperatura del llit pot reduir la probabilitat de " "deformació." +#: src/slic3r/GUI/Tab.cpp: +msgid "Dependencies" +msgstr "" + +msgid "Profile dependencies" +msgstr "" + +msgid "This is a default preset." +msgstr "" + +msgid "This is a system preset." +msgstr "" + +msgid "Current preset is inherited from the default preset." +msgstr "" + +msgid "Current preset is inherited from" +msgstr "" + +msgid "It can't be deleted or modified." +msgstr "" + +msgid "Any modifications should be saved as a new preset inherited from this one." +msgstr "" + +msgid "To do that please specify a new name for the preset." +msgstr "" + +msgid "Additional information:" +msgstr "" + +msgid "vendor" +msgstr "" + +msgid ", ver: " +msgstr "" + +msgid "printer model" +msgstr "" + +msgid "default print profile" +msgstr "" + +msgid "default filament profile" +msgstr "" + +msgid "default SLA material profile" +msgstr "" + +msgid "default SLA print profile" +msgstr "" + +msgid "full profile name" +msgstr "" + +msgid "symbolic profile name" +msgstr "" + +msgid "" +"A copy of the current system preset will be created, which will be detached from the system preset." +msgstr "" + +msgid "" +"The current custom preset will be detached from the parent system preset." +msgstr "" + +msgid "" +"Modifications to the current profile will be saved." +msgstr "" + +msgid "" +"This action is not revertible.\nDo you want to proceed?" +msgstr "" + +msgid "" +"Detach preset" +msgstr "" + + #~ msgid "ShiftLeft mouse button" #~ msgstr "Màj+Botó esquerre del ratolí" diff --git a/localization/i18n/cs/OrcaSlicer_cs.po b/localization/i18n/cs/OrcaSlicer_cs.po index 8087ede4a3..694d030fcb 100644 --- a/localization/i18n/cs/OrcaSlicer_cs.po +++ b/localization/i18n/cs/OrcaSlicer_cs.po @@ -16400,6 +16400,85 @@ msgid "" "probability of warping." msgstr "" +#: src/slic3r/GUI/Tab.cpp: +msgid "Dependencies" +msgstr "" + +msgid "Profile dependencies" +msgstr "" + +msgid "This is a default preset." +msgstr "" + +msgid "This is a system preset." +msgstr "" + +msgid "Current preset is inherited from the default preset." +msgstr "" + +msgid "Current preset is inherited from" +msgstr "" + +msgid "It can't be deleted or modified." +msgstr "" + +msgid "Any modifications should be saved as a new preset inherited from this one." +msgstr "" + +msgid "To do that please specify a new name for the preset." +msgstr "" + +msgid "Additional information:" +msgstr "" + +msgid "vendor" +msgstr "" + +msgid ", ver: " +msgstr "" + +msgid "printer model" +msgstr "" + +msgid "default print profile" +msgstr "" + +msgid "default filament profile" +msgstr "" + +msgid "default SLA material profile" +msgstr "" + +msgid "default SLA print profile" +msgstr "" + +msgid "full profile name" +msgstr "" + +msgid "symbolic profile name" +msgstr "" + +msgid "" +"A copy of the current system preset will be created, which will be detached from the system preset." +msgstr "" + +msgid "" +"The current custom preset will be detached from the parent system preset." +msgstr "" + +msgid "" +"Modifications to the current profile will be saved." +msgstr "" + +msgid "" +"This action is not revertible.\nDo you want to proceed?" +msgstr "" + +msgid "" +"Detach preset" +msgstr "" + + #~ msgid "Unselect" #~ msgstr "Zrušení výběru" diff --git a/localization/i18n/de/OrcaSlicer_de.po b/localization/i18n/de/OrcaSlicer_de.po index a4a7cdfa5d..5eb9abfbba 100644 --- a/localization/i18n/de/OrcaSlicer_de.po +++ b/localization/i18n/de/OrcaSlicer_de.po @@ -17868,6 +17868,85 @@ msgstr "" "wie z.B. ABS, durch eine entsprechende Erhöhung der Heizbetttemperatur die " "Wahrscheinlichkeit von Verwerfungen verringert werden kann." +#: src/slic3r/GUI/Tab.cpp: +msgid "Dependencies" +msgstr "" + +msgid "Profile dependencies" +msgstr "" + +msgid "This is a default preset." +msgstr "" + +msgid "This is a system preset." +msgstr "" + +msgid "Current preset is inherited from the default preset." +msgstr "" + +msgid "Current preset is inherited from" +msgstr "" + +msgid "It can't be deleted or modified." +msgstr "" + +msgid "Any modifications should be saved as a new preset inherited from this one." +msgstr "" + +msgid "To do that please specify a new name for the preset." +msgstr "" + +msgid "Additional information:" +msgstr "" + +msgid "vendor" +msgstr "" + +msgid ", ver: " +msgstr "" + +msgid "printer model" +msgstr "" + +msgid "default print profile" +msgstr "" + +msgid "default filament profile" +msgstr "" + +msgid "default SLA material profile" +msgstr "" + +msgid "default SLA print profile" +msgstr "" + +msgid "full profile name" +msgstr "" + +msgid "symbolic profile name" +msgstr "" + +msgid "" +"A copy of the current system preset will be created, which will be detached from the system preset." +msgstr "" + +msgid "" +"The current custom preset will be detached from the parent system preset." +msgstr "" + +msgid "" +"Modifications to the current profile will be saved." +msgstr "" + +msgid "" +"This action is not revertible.\nDo you want to proceed?" +msgstr "" + +msgid "" +"Detach preset" +msgstr "" + + #~ msgid "ShiftLeft mouse button" #~ msgstr "Umschalttaste + Linksklick" diff --git a/localization/i18n/en/OrcaSlicer_en.po b/localization/i18n/en/OrcaSlicer_en.po index 6b70c07fd6..ca4ec0ae02 100644 --- a/localization/i18n/en/OrcaSlicer_en.po +++ b/localization/i18n/en/OrcaSlicer_en.po @@ -16238,6 +16238,85 @@ msgstr "" "ABS, appropriately increasing the heatbed temperature can reduce the " "probability of warping?" +#: src/slic3r/GUI/Tab.cpp: +msgid "Dependencies" +msgstr "" + +msgid "Profile dependencies" +msgstr "" + +msgid "This is a default preset." +msgstr "" + +msgid "This is a system preset." +msgstr "" + +msgid "Current preset is inherited from the default preset." +msgstr "" + +msgid "Current preset is inherited from" +msgstr "" + +msgid "It can't be deleted or modified." +msgstr "" + +msgid "Any modifications should be saved as a new preset inherited from this one." +msgstr "" + +msgid "To do that please specify a new name for the preset." +msgstr "" + +msgid "Additional information:" +msgstr "" + +msgid "vendor" +msgstr "" + +msgid ", ver: " +msgstr "" + +msgid "printer model" +msgstr "" + +msgid "default print profile" +msgstr "" + +msgid "default filament profile" +msgstr "" + +msgid "default SLA material profile" +msgstr "" + +msgid "default SLA print profile" +msgstr "" + +msgid "full profile name" +msgstr "" + +msgid "symbolic profile name" +msgstr "" + +msgid "" +"A copy of the current system preset will be created, which will be detached from the system preset." +msgstr "" + +msgid "" +"The current custom preset will be detached from the parent system preset." +msgstr "" + +msgid "" +"Modifications to the current profile will be saved." +msgstr "" + +msgid "" +"This action is not revertible.\nDo you want to proceed?" +msgstr "" + +msgid "" +"Detach preset" +msgstr "" + + #~ msgctxt "Verb" #~ msgid "Scale" #~ msgstr "Scale" diff --git a/localization/i18n/es/OrcaSlicer_es.po b/localization/i18n/es/OrcaSlicer_es.po index 4959cf9cd3..576d095919 100644 --- a/localization/i18n/es/OrcaSlicer_es.po +++ b/localization/i18n/es/OrcaSlicer_es.po @@ -17853,6 +17853,85 @@ msgstr "" "aumentar adecuadamente la temperatura de la cama térmica puede reducir la " "probabilidad de deformaciones." +#: src/slic3r/GUI/Tab.cpp: +msgid "Dependencies" +msgstr "" + +msgid "Profile dependencies" +msgstr "" + +msgid "This is a default preset." +msgstr "" + +msgid "This is a system preset." +msgstr "" + +msgid "Current preset is inherited from the default preset." +msgstr "" + +msgid "Current preset is inherited from" +msgstr "" + +msgid "It can't be deleted or modified." +msgstr "" + +msgid "Any modifications should be saved as a new preset inherited from this one." +msgstr "" + +msgid "To do that please specify a new name for the preset." +msgstr "" + +msgid "Additional information:" +msgstr "" + +msgid "vendor" +msgstr "" + +msgid ", ver: " +msgstr "" + +msgid "printer model" +msgstr "" + +msgid "default print profile" +msgstr "" + +msgid "default filament profile" +msgstr "" + +msgid "default SLA material profile" +msgstr "" + +msgid "default SLA print profile" +msgstr "" + +msgid "full profile name" +msgstr "" + +msgid "symbolic profile name" +msgstr "" + +msgid "" +"A copy of the current system preset will be created, which will be detached from the system preset." +msgstr "" + +msgid "" +"The current custom preset will be detached from the parent system preset." +msgstr "" + +msgid "" +"Modifications to the current profile will be saved." +msgstr "" + +msgid "" +"This action is not revertible.\nDo you want to proceed?" +msgstr "" + +msgid "" +"Detach preset" +msgstr "" + + #~ msgid "ShiftLeft mouse button" #~ msgstr "Mayúsculas + Botón izquierdo del ratón" diff --git a/localization/i18n/fr/OrcaSlicer_fr.po b/localization/i18n/fr/OrcaSlicer_fr.po index 537142692c..2521fd4c4a 100644 --- a/localization/i18n/fr/OrcaSlicer_fr.po +++ b/localization/i18n/fr/OrcaSlicer_fr.po @@ -18004,6 +18004,85 @@ msgstr "" "déformer, tels que l’ABS, une augmentation appropriée de la température du " "plateau chauffant peut réduire la probabilité de déformation." +#: src/slic3r/GUI/Tab.cpp: +msgid "Dependencies" +msgstr "" + +msgid "Profile dependencies" +msgstr "" + +msgid "This is a default preset." +msgstr "" + +msgid "This is a system preset." +msgstr "" + +msgid "Current preset is inherited from the default preset." +msgstr "" + +msgid "Current preset is inherited from" +msgstr "" + +msgid "It can't be deleted or modified." +msgstr "" + +msgid "Any modifications should be saved as a new preset inherited from this one." +msgstr "" + +msgid "To do that please specify a new name for the preset." +msgstr "" + +msgid "Additional information:" +msgstr "" + +msgid "vendor" +msgstr "" + +msgid ", ver: " +msgstr "" + +msgid "printer model" +msgstr "" + +msgid "default print profile" +msgstr "" + +msgid "default filament profile" +msgstr "" + +msgid "default SLA material profile" +msgstr "" + +msgid "default SLA print profile" +msgstr "" + +msgid "full profile name" +msgstr "" + +msgid "symbolic profile name" +msgstr "" + +msgid "" +"A copy of the current system preset will be created, which will be detached from the system preset." +msgstr "" + +msgid "" +"The current custom preset will be detached from the parent system preset." +msgstr "" + +msgid "" +"Modifications to the current profile will be saved." +msgstr "" + +msgid "" +"This action is not revertible.\nDo you want to proceed?" +msgstr "" + +msgid "" +"Detach preset" +msgstr "" + + #~ msgid "ShiftLeft mouse button" #~ msgstr "ShiftLeft mouse button" diff --git a/localization/i18n/hu/OrcaSlicer_hu.po b/localization/i18n/hu/OrcaSlicer_hu.po index 3bf96206c6..e968dc9df8 100644 --- a/localization/i18n/hu/OrcaSlicer_hu.po +++ b/localization/i18n/hu/OrcaSlicer_hu.po @@ -16426,6 +16426,85 @@ msgstr "" "Tudtad, hogy a vetemedésre hajlamos anyagok (például ABS) nyomtatásakor a " "tárgyasztal hőmérsékletének növelése csökkentheti a vetemedés valószínűségét?" +#: src/slic3r/GUI/Tab.cpp: +msgid "Dependencies" +msgstr "" + +msgid "Profile dependencies" +msgstr "" + +msgid "This is a default preset." +msgstr "" + +msgid "This is a system preset." +msgstr "" + +msgid "Current preset is inherited from the default preset." +msgstr "" + +msgid "Current preset is inherited from" +msgstr "" + +msgid "It can't be deleted or modified." +msgstr "" + +msgid "Any modifications should be saved as a new preset inherited from this one." +msgstr "" + +msgid "To do that please specify a new name for the preset." +msgstr "" + +msgid "Additional information:" +msgstr "" + +msgid "vendor" +msgstr "" + +msgid ", ver: " +msgstr "" + +msgid "printer model" +msgstr "" + +msgid "default print profile" +msgstr "" + +msgid "default filament profile" +msgstr "" + +msgid "default SLA material profile" +msgstr "" + +msgid "default SLA print profile" +msgstr "" + +msgid "full profile name" +msgstr "" + +msgid "symbolic profile name" +msgstr "" + +msgid "" +"A copy of the current system preset will be created, which will be detached from the system preset." +msgstr "" + +msgid "" +"The current custom preset will be detached from the parent system preset." +msgstr "" + +msgid "" +"Modifications to the current profile will be saved." +msgstr "" + +msgid "" +"This action is not revertible.\nDo you want to proceed?" +msgstr "" + +msgid "" +"Detach preset" +msgstr "" + + #~ msgctxt "Verb" #~ msgid "Scale" #~ msgstr "Átméretezés" diff --git a/localization/i18n/it/OrcaSlicer_it.po b/localization/i18n/it/OrcaSlicer_it.po index ad04e3acca..9a8f0538d0 100644 --- a/localization/i18n/it/OrcaSlicer_it.po +++ b/localization/i18n/it/OrcaSlicer_it.po @@ -17271,6 +17271,85 @@ msgstr "" "aumentare in modo appropriato la temperatura del piano riscaldato può " "ridurre la probabilità di deformazione." +#: src/slic3r/GUI/Tab.cpp: +msgid "Dependencies" +msgstr "" + +msgid "Profile dependencies" +msgstr "" + +msgid "This is a default preset." +msgstr "" + +msgid "This is a system preset." +msgstr "" + +msgid "Current preset is inherited from the default preset." +msgstr "" + +msgid "Current preset is inherited from" +msgstr "" + +msgid "It can't be deleted or modified." +msgstr "" + +msgid "Any modifications should be saved as a new preset inherited from this one." +msgstr "" + +msgid "To do that please specify a new name for the preset." +msgstr "" + +msgid "Additional information:" +msgstr "" + +msgid "vendor" +msgstr "" + +msgid ", ver: " +msgstr "" + +msgid "printer model" +msgstr "" + +msgid "default print profile" +msgstr "" + +msgid "default filament profile" +msgstr "" + +msgid "default SLA material profile" +msgstr "" + +msgid "default SLA print profile" +msgstr "" + +msgid "full profile name" +msgstr "" + +msgid "symbolic profile name" +msgstr "" + +msgid "" +"A copy of the current system preset will be created, which will be detached from the system preset." +msgstr "" + +msgid "" +"The current custom preset will be detached from the parent system preset." +msgstr "" + +msgid "" +"Modifications to the current profile will be saved." +msgstr "" + +msgid "" +"This action is not revertible.\nDo you want to proceed?" +msgstr "" + +msgid "" +"Detach preset" +msgstr "" + + #~ msgid "ShiftLeft mouse button" #~ msgstr "MaiuscTasto sinistro del mouse" diff --git a/localization/i18n/ja/OrcaSlicer_ja.po b/localization/i18n/ja/OrcaSlicer_ja.po index d981372f8c..eea6b1e457 100644 --- a/localization/i18n/ja/OrcaSlicer_ja.po +++ b/localization/i18n/ja/OrcaSlicer_ja.po @@ -16111,6 +16111,85 @@ msgstr "" "ABS, appropriately increasing the heatbed temperature can reduce the " "probability of warping?" +#: src/slic3r/GUI/Tab.cpp: +msgid "Dependencies" +msgstr "" + +msgid "Profile dependencies" +msgstr "" + +msgid "This is a default preset." +msgstr "" + +msgid "This is a system preset." +msgstr "" + +msgid "Current preset is inherited from the default preset." +msgstr "" + +msgid "Current preset is inherited from" +msgstr "" + +msgid "It can't be deleted or modified." +msgstr "" + +msgid "Any modifications should be saved as a new preset inherited from this one." +msgstr "" + +msgid "To do that please specify a new name for the preset." +msgstr "" + +msgid "Additional information:" +msgstr "" + +msgid "vendor" +msgstr "" + +msgid ", ver: " +msgstr "" + +msgid "printer model" +msgstr "" + +msgid "default print profile" +msgstr "" + +msgid "default filament profile" +msgstr "" + +msgid "default SLA material profile" +msgstr "" + +msgid "default SLA print profile" +msgstr "" + +msgid "full profile name" +msgstr "" + +msgid "symbolic profile name" +msgstr "" + +msgid "" +"A copy of the current system preset will be created, which will be detached from the system preset." +msgstr "" + +msgid "" +"The current custom preset will be detached from the parent system preset." +msgstr "" + +msgid "" +"Modifications to the current profile will be saved." +msgstr "" + +msgid "" +"This action is not revertible.\nDo you want to proceed?" +msgstr "" + +msgid "" +"Detach preset" +msgstr "" + + #~ msgid "Unselect" #~ msgstr "選択解除" diff --git a/localization/i18n/ko/OrcaSlicer_ko.po b/localization/i18n/ko/OrcaSlicer_ko.po index 058f9d3e9b..98f10a5e47 100644 --- a/localization/i18n/ko/OrcaSlicer_ko.po +++ b/localization/i18n/ko/OrcaSlicer_ko.po @@ -16921,6 +16921,85 @@ msgstr "" "ABS와 같이 뒤틀림이 발생하기 쉬운 소재를 출력할 때, 히트베드 온도를 적절하게 " "높이면 뒤틀림 가능성을 줄일 수 있다는 사실을 알고 계셨나요?" +#: src/slic3r/GUI/Tab.cpp: +msgid "Dependencies" +msgstr "" + +msgid "Profile dependencies" +msgstr "" + +msgid "This is a default preset." +msgstr "" + +msgid "This is a system preset." +msgstr "" + +msgid "Current preset is inherited from the default preset." +msgstr "" + +msgid "Current preset is inherited from" +msgstr "" + +msgid "It can't be deleted or modified." +msgstr "" + +msgid "Any modifications should be saved as a new preset inherited from this one." +msgstr "" + +msgid "To do that please specify a new name for the preset." +msgstr "" + +msgid "Additional information:" +msgstr "" + +msgid "vendor" +msgstr "" + +msgid ", ver: " +msgstr "" + +msgid "printer model" +msgstr "" + +msgid "default print profile" +msgstr "" + +msgid "default filament profile" +msgstr "" + +msgid "default SLA material profile" +msgstr "" + +msgid "default SLA print profile" +msgstr "" + +msgid "full profile name" +msgstr "" + +msgid "symbolic profile name" +msgstr "" + +msgid "" +"A copy of the current system preset will be created, which will be detached from the system preset." +msgstr "" + +msgid "" +"The current custom preset will be detached from the parent system preset." +msgstr "" + +msgid "" +"Modifications to the current profile will be saved." +msgstr "" + +msgid "" +"This action is not revertible.\nDo you want to proceed?" +msgstr "" + +msgid "" +"Detach preset" +msgstr "" + + #~ msgid "ShiftLeft mouse button" #~ msgstr "Shift + 왼쪽 마우스 버튼" diff --git a/localization/i18n/nl/OrcaSlicer_nl.po b/localization/i18n/nl/OrcaSlicer_nl.po index ac6e5934c0..b925ee20b1 100644 --- a/localization/i18n/nl/OrcaSlicer_nl.po +++ b/localization/i18n/nl/OrcaSlicer_nl.po @@ -16677,6 +16677,85 @@ msgstr "" "kromtrekken, zoals ABS, een juiste verhoging van de temperatuur van het " "warmtebed de kans op kromtrekken kan verkleinen?" +#: src/slic3r/GUI/Tab.cpp: +msgid "Dependencies" +msgstr "" + +msgid "Profile dependencies" +msgstr "" + +msgid "This is a default preset." +msgstr "" + +msgid "This is a system preset." +msgstr "" + +msgid "Current preset is inherited from the default preset." +msgstr "" + +msgid "Current preset is inherited from" +msgstr "" + +msgid "It can't be deleted or modified." +msgstr "" + +msgid "Any modifications should be saved as a new preset inherited from this one." +msgstr "" + +msgid "To do that please specify a new name for the preset." +msgstr "" + +msgid "Additional information:" +msgstr "" + +msgid "vendor" +msgstr "" + +msgid ", ver: " +msgstr "" + +msgid "printer model" +msgstr "" + +msgid "default print profile" +msgstr "" + +msgid "default filament profile" +msgstr "" + +msgid "default SLA material profile" +msgstr "" + +msgid "default SLA print profile" +msgstr "" + +msgid "full profile name" +msgstr "" + +msgid "symbolic profile name" +msgstr "" + +msgid "" +"A copy of the current system preset will be created, which will be detached from the system preset." +msgstr "" + +msgid "" +"The current custom preset will be detached from the parent system preset." +msgstr "" + +msgid "" +"Modifications to the current profile will be saved." +msgstr "" + +msgid "" +"This action is not revertible.\nDo you want to proceed?" +msgstr "" + +msgid "" +"Detach preset" +msgstr "" + + #~ msgctxt "Verb" #~ msgid "Scale" #~ msgstr "Schalen" diff --git a/localization/i18n/pl/OrcaSlicer_pl.po b/localization/i18n/pl/OrcaSlicer_pl.po index 7576fc583c..e9a1b2131c 100644 --- a/localization/i18n/pl/OrcaSlicer_pl.po +++ b/localization/i18n/pl/OrcaSlicer_pl.po @@ -17658,6 +17658,85 @@ msgstr "" "takimi jak ABS, odpowiednie zwiększenie temperatury podgrzewanej płyty może " "zmniejszyć prawdopodobieństwo odkształceń." +#: src/slic3r/GUI/Tab.cpp: +msgid "Dependencies" +msgstr "" + +msgid "Profile dependencies" +msgstr "" + +msgid "This is a default preset." +msgstr "" + +msgid "This is a system preset." +msgstr "" + +msgid "Current preset is inherited from the default preset." +msgstr "" + +msgid "Current preset is inherited from" +msgstr "" + +msgid "It can't be deleted or modified." +msgstr "" + +msgid "Any modifications should be saved as a new preset inherited from this one." +msgstr "" + +msgid "To do that please specify a new name for the preset." +msgstr "" + +msgid "Additional information:" +msgstr "" + +msgid "vendor" +msgstr "" + +msgid ", ver: " +msgstr "" + +msgid "printer model" +msgstr "" + +msgid "default print profile" +msgstr "" + +msgid "default filament profile" +msgstr "" + +msgid "default SLA material profile" +msgstr "" + +msgid "default SLA print profile" +msgstr "" + +msgid "full profile name" +msgstr "" + +msgid "symbolic profile name" +msgstr "" + +msgid "" +"A copy of the current system preset will be created, which will be detached from the system preset." +msgstr "" + +msgid "" +"The current custom preset will be detached from the parent system preset." +msgstr "" + +msgid "" +"Modifications to the current profile will be saved." +msgstr "" + +msgid "" +"This action is not revertible.\nDo you want to proceed?" +msgstr "" + +msgid "" +"Detach preset" +msgstr "" + + #~ msgid "ShiftLeft mouse button" #~ msgstr "Shift + Lewy przycisk myszy" diff --git a/localization/i18n/pt_BR/OrcaSlicer_pt_BR.po b/localization/i18n/pt_BR/OrcaSlicer_pt_BR.po index 85867bb031..1d19826f60 100644 --- a/localization/i18n/pt_BR/OrcaSlicer_pt_BR.po +++ b/localization/i18n/pt_BR/OrcaSlicer_pt_BR.po @@ -17237,6 +17237,85 @@ msgstr "" "aumentar adequadamente a temperatura da mesa aquecida pode reduzir a " "probabilidade de empenamento?" +#: src/slic3r/GUI/Tab.cpp: +msgid "Dependencies" +msgstr "" + +msgid "Profile dependencies" +msgstr "" + +msgid "This is a default preset." +msgstr "" + +msgid "This is a system preset." +msgstr "" + +msgid "Current preset is inherited from the default preset." +msgstr "" + +msgid "Current preset is inherited from" +msgstr "" + +msgid "It can't be deleted or modified." +msgstr "" + +msgid "Any modifications should be saved as a new preset inherited from this one." +msgstr "" + +msgid "To do that please specify a new name for the preset." +msgstr "" + +msgid "Additional information:" +msgstr "" + +msgid "vendor" +msgstr "" + +msgid ", ver: " +msgstr "" + +msgid "printer model" +msgstr "" + +msgid "default print profile" +msgstr "" + +msgid "default filament profile" +msgstr "" + +msgid "default SLA material profile" +msgstr "" + +msgid "default SLA print profile" +msgstr "" + +msgid "full profile name" +msgstr "" + +msgid "symbolic profile name" +msgstr "" + +msgid "" +"A copy of the current system preset will be created, which will be detached from the system preset." +msgstr "" + +msgid "" +"The current custom preset will be detached from the parent system preset." +msgstr "" + +msgid "" +"Modifications to the current profile will be saved." +msgstr "" + +msgid "" +"This action is not revertible.\nDo you want to proceed?" +msgstr "" + +msgid "" +"Detach preset" +msgstr "" + + #~ msgid "ShiftLeft mouse button" #~ msgstr "Botão do mouse ShiftLeft" diff --git a/localization/i18n/ru/OrcaSlicer_ru.po b/localization/i18n/ru/OrcaSlicer_ru.po index 368635fff3..6ab78684c2 100644 --- a/localization/i18n/ru/OrcaSlicer_ru.po +++ b/localization/i18n/ru/OrcaSlicer_ru.po @@ -17883,6 +17883,85 @@ msgstr "" "ABS, повышение температуры подогреваемого стола может снизить эту " "вероятность?" +#: src/slic3r/GUI/Tab.cpp: +msgid "Dependencies" +msgstr "" + +msgid "Profile dependencies" +msgstr "" + +msgid "This is a default preset." +msgstr "" + +msgid "This is a system preset." +msgstr "" + +msgid "Current preset is inherited from the default preset." +msgstr "" + +msgid "Current preset is inherited from" +msgstr "" + +msgid "It can't be deleted or modified." +msgstr "" + +msgid "Any modifications should be saved as a new preset inherited from this one." +msgstr "" + +msgid "To do that please specify a new name for the preset." +msgstr "" + +msgid "Additional information:" +msgstr "" + +msgid "vendor" +msgstr "" + +msgid ", ver: " +msgstr "" + +msgid "printer model" +msgstr "" + +msgid "default print profile" +msgstr "" + +msgid "default filament profile" +msgstr "" + +msgid "default SLA material profile" +msgstr "" + +msgid "default SLA print profile" +msgstr "" + +msgid "full profile name" +msgstr "" + +msgid "symbolic profile name" +msgstr "" + +msgid "" +"A copy of the current system preset will be created, which will be detached from the system preset." +msgstr "" + +msgid "" +"The current custom preset will be detached from the parent system preset." +msgstr "" + +msgid "" +"Modifications to the current profile will be saved." +msgstr "" + +msgid "" +"This action is not revertible.\nDo you want to proceed?" +msgstr "" + +msgid "" +"Detach preset" +msgstr "" + + #~ msgid "ShiftLeft mouse button" #~ msgstr "Левая кнопка мыши" diff --git a/localization/i18n/sv/OrcaSlicer_sv.po b/localization/i18n/sv/OrcaSlicer_sv.po index e46d2a89ac..db438ac87b 100644 --- a/localization/i18n/sv/OrcaSlicer_sv.po +++ b/localization/i18n/sv/OrcaSlicer_sv.po @@ -16268,6 +16268,85 @@ msgstr "" "ABS, kan en lämplig ökning av värmebäddens temperatur minska sannolikheten " "för vridning." +#: src/slic3r/GUI/Tab.cpp: +msgid "Dependencies" +msgstr "" + +msgid "Profile dependencies" +msgstr "" + +msgid "This is a default preset." +msgstr "" + +msgid "This is a system preset." +msgstr "" + +msgid "Current preset is inherited from the default preset." +msgstr "" + +msgid "Current preset is inherited from" +msgstr "" + +msgid "It can't be deleted or modified." +msgstr "" + +msgid "Any modifications should be saved as a new preset inherited from this one." +msgstr "" + +msgid "To do that please specify a new name for the preset." +msgstr "" + +msgid "Additional information:" +msgstr "" + +msgid "vendor" +msgstr "" + +msgid ", ver: " +msgstr "" + +msgid "printer model" +msgstr "" + +msgid "default print profile" +msgstr "" + +msgid "default filament profile" +msgstr "" + +msgid "default SLA material profile" +msgstr "" + +msgid "default SLA print profile" +msgstr "" + +msgid "full profile name" +msgstr "" + +msgid "symbolic profile name" +msgstr "" + +msgid "" +"A copy of the current system preset will be created, which will be detached from the system preset." +msgstr "" + +msgid "" +"The current custom preset will be detached from the parent system preset." +msgstr "" + +msgid "" +"Modifications to the current profile will be saved." +msgstr "" + +msgid "" +"This action is not revertible.\nDo you want to proceed?" +msgstr "" + +msgid "" +"Detach preset" +msgstr "" + + #~ msgctxt "Verb" #~ msgid "Scale" #~ msgstr "Skala" diff --git a/localization/i18n/tr/OrcaSlicer_tr.po b/localization/i18n/tr/OrcaSlicer_tr.po index beb9bf7111..f39c76321e 100644 --- a/localization/i18n/tr/OrcaSlicer_tr.po +++ b/localization/i18n/tr/OrcaSlicer_tr.po @@ -17345,6 +17345,85 @@ msgstr "" "sıcaklığının uygun şekilde arttırılmasının bükülme olasılığını " "azaltabileceğini biliyor muydunuz?" +#: src/slic3r/GUI/Tab.cpp: +msgid "Dependencies" +msgstr "" + +msgid "Profile dependencies" +msgstr "" + +msgid "This is a default preset." +msgstr "" + +msgid "This is a system preset." +msgstr "" + +msgid "Current preset is inherited from the default preset." +msgstr "" + +msgid "Current preset is inherited from" +msgstr "" + +msgid "It can't be deleted or modified." +msgstr "" + +msgid "Any modifications should be saved as a new preset inherited from this one." +msgstr "" + +msgid "To do that please specify a new name for the preset." +msgstr "" + +msgid "Additional information:" +msgstr "" + +msgid "vendor" +msgstr "" + +msgid ", ver: " +msgstr "" + +msgid "printer model" +msgstr "" + +msgid "default print profile" +msgstr "" + +msgid "default filament profile" +msgstr "" + +msgid "default SLA material profile" +msgstr "" + +msgid "default SLA print profile" +msgstr "" + +msgid "full profile name" +msgstr "" + +msgid "symbolic profile name" +msgstr "" + +msgid "" +"A copy of the current system preset will be created, which will be detached from the system preset." +msgstr "" + +msgid "" +"The current custom preset will be detached from the parent system preset." +msgstr "" + +msgid "" +"Modifications to the current profile will be saved." +msgstr "" + +msgid "" +"This action is not revertible.\nDo you want to proceed?" +msgstr "" + +msgid "" +"Detach preset" +msgstr "" + + #~ msgid "ShiftLeft mouse button" #~ msgstr "Shift + Sol fare düğmesi" diff --git a/localization/i18n/uk/OrcaSlicer_uk.po b/localization/i18n/uk/OrcaSlicer_uk.po index 9ad2539bdc..3b7746d84f 100644 --- a/localization/i18n/uk/OrcaSlicer_uk.po +++ b/localization/i18n/uk/OrcaSlicer_uk.po @@ -17186,6 +17186,85 @@ msgstr "" "ABS, відповідне підвищення температури гарячого ліжка може зменшити " "ймовірність деформації." +#: src/slic3r/GUI/Tab.cpp: +msgid "Dependencies" +msgstr "" + +msgid "Profile dependencies" +msgstr "" + +msgid "This is a default preset." +msgstr "" + +msgid "This is a system preset." +msgstr "" + +msgid "Current preset is inherited from the default preset." +msgstr "" + +msgid "Current preset is inherited from" +msgstr "" + +msgid "It can't be deleted or modified." +msgstr "" + +msgid "Any modifications should be saved as a new preset inherited from this one." +msgstr "" + +msgid "To do that please specify a new name for the preset." +msgstr "" + +msgid "Additional information:" +msgstr "" + +msgid "vendor" +msgstr "" + +msgid ", ver: " +msgstr "" + +msgid "printer model" +msgstr "" + +msgid "default print profile" +msgstr "" + +msgid "default filament profile" +msgstr "" + +msgid "default SLA material profile" +msgstr "" + +msgid "default SLA print profile" +msgstr "" + +msgid "full profile name" +msgstr "" + +msgid "symbolic profile name" +msgstr "" + +msgid "" +"A copy of the current system preset will be created, which will be detached from the system preset." +msgstr "" + +msgid "" +"The current custom preset will be detached from the parent system preset." +msgstr "" + +msgid "" +"Modifications to the current profile will be saved." +msgstr "" + +msgid "" +"This action is not revertible.\nDo you want to proceed?" +msgstr "" + +msgid "" +"Detach preset" +msgstr "" + + #~ msgid "ShiftLeft mouse button" #~ msgstr "ShiftЛіва кнопка миші" diff --git a/localization/i18n/zh_CN/OrcaSlicer_zh_CN.po b/localization/i18n/zh_CN/OrcaSlicer_zh_CN.po index f9bb50944f..2e2d49487e 100644 --- a/localization/i18n/zh_CN/OrcaSlicer_zh_CN.po +++ b/localization/i18n/zh_CN/OrcaSlicer_zh_CN.po @@ -15986,6 +15986,85 @@ msgstr "" "避免翘曲\n" "您知道吗?打印ABS这类易翘曲材料时,适当提高热床温度可以降低翘曲的概率。" +#: src/slic3r/GUI/Tab.cpp: +msgid "Dependencies" +msgstr "" + +msgid "Profile dependencies" +msgstr "" + +msgid "This is a default preset." +msgstr "" + +msgid "This is a system preset." +msgstr "" + +msgid "Current preset is inherited from the default preset." +msgstr "" + +msgid "Current preset is inherited from" +msgstr "" + +msgid "It can't be deleted or modified." +msgstr "" + +msgid "Any modifications should be saved as a new preset inherited from this one." +msgstr "" + +msgid "To do that please specify a new name for the preset." +msgstr "" + +msgid "Additional information:" +msgstr "" + +msgid "vendor" +msgstr "" + +msgid ", ver: " +msgstr "" + +msgid "printer model" +msgstr "" + +msgid "default print profile" +msgstr "" + +msgid "default filament profile" +msgstr "" + +msgid "default SLA material profile" +msgstr "" + +msgid "default SLA print profile" +msgstr "" + +msgid "full profile name" +msgstr "" + +msgid "symbolic profile name" +msgstr "" + +msgid "" +"A copy of the current system preset will be created, which will be detached from the system preset." +msgstr "" + +msgid "" +"The current custom preset will be detached from the parent system preset." +msgstr "" + +msgid "" +"Modifications to the current profile will be saved." +msgstr "" + +msgid "" +"This action is not revertible.\nDo you want to proceed?" +msgstr "" + +msgid "" +"Detach preset" +msgstr "" + + #~ msgid "ShiftLeft mouse button" #~ msgstr "Shift + 鼠标左键" diff --git a/localization/i18n/zh_TW/OrcaSlicer_zh_TW.po b/localization/i18n/zh_TW/OrcaSlicer_zh_TW.po index 0540cb89e9..e596bb54a7 100644 --- a/localization/i18n/zh_TW/OrcaSlicer_zh_TW.po +++ b/localization/i18n/zh_TW/OrcaSlicer_zh_TW.po @@ -10567,7 +10567,8 @@ msgstr "" "2. 避免因外牆速度變化而產生類似 Z 條紋的瑕疵。\n" "3. 防止外牆因列印速度過快而出現 VFAs(細微表面瑕疵)。\n" "\n" -"譯者補充:最小層時間(Minimum Layer Time)是指列印每一層所需的最短時間。如果列印機以較快的速度完成一層的列印時間短於這個設定值,為了確保每層有足夠的時間冷卻和固化,列印機會自動減慢速度,以延長該層的列印時間," +"譯者補充:最小層時間(Minimum Layer Time)是指列印每一層所需的最短時間。如果列印機以較快的速度完成一層的列印時間短於這個設定值," +"為了確保每層有足夠的時間冷卻和固化,列印機會自動減慢速度,以延長該層的列印時間," "達到最小層時間的要求。這樣可以避免因冷卻不足而導致的列印缺陷,如層間附著不良或變形。\n" "\n" @@ -14691,7 +14692,7 @@ msgstr "" "結束 > 開始 + 步距)" msgid "VFA test" -msgstr "VFA震紋測試" +msgstr "VFA 震紋測試" msgid "Start speed: " msgstr "起始速度:" @@ -15795,7 +15796,7 @@ msgid "" "Did you know that you can use sandwich mode (inner-outer-inner) to improve precision and layer consistency if your model doesn't have very steep overhangs?" msgstr "" "三明治模式\n" -"你知道嗎?如果模型中沒有太陡峭的懸空區域,可以使用三明治模式(內層-外層-內層)來提升精度並增強層的一致性。" +"你知道嗎?如果模型中沒有太陡峭的懸空區域,可以使用三明治模式\n""(內層-外層-內層)來提升精度並增強層的一致性。" #: resources/data/hints.ini: [hint:Chamber temperature] msgid "" @@ -15811,7 +15812,7 @@ msgid "" "Did you know that calibrating your printer can do wonders? Check out our beloved calibration solution in OrcaSlicer." msgstr "" "校準\n" -"你知道校準列印設備可以帶來奇效嗎?快來看看我們在 OrcaSlicer 中的校準解決方案。" +"你知道校準列印設備可以帶來奇效嗎?快來看看我們在 OrcaSlicer 中的\n""校準解決方案。" #: resources/data/hints.ini: [hint:Auxiliary fan] msgid "" @@ -15859,7 +15860,7 @@ msgid "" "Did you know that Reverse on odd feature can significantly improve the surface quality of your overhangs?" msgstr "" "奇數反向\n" -"你知道 奇數反向 功能可以顯著改善懸垂部分的表面品質嗎?" +"你知道嗎?奇數反向 功能能大幅提升懸空結構的表面品質 " #: resources/data/hints.ini: [hint:Cut Tool] msgid "" @@ -15875,7 +15876,7 @@ msgid "" "Did you know that you can fix a corrupted 3D model to avoid a lot of slicing problems on the Windows system?" msgstr "" "修復模型\n" -"你知道可以修復損壞的 3D 模型,以避免在 Windows 系統上出現大量切片問題嗎?" +"你知道嗎?在 Windows 系統上修復損壞的 3D 模型,\n""可以有效避免許多切片時的問題。" #: resources/data/hints.ini: [hint:Timelapse] msgid "" @@ -15899,7 +15900,7 @@ msgid "" "Did you know that you can rotate objects to an optimal orientation for printing by a simple click?" msgstr "" "自動定向\n" -"你知道嗎,你只需單擊滑鼠,即可將物件旋轉到適合的列印方向。" +"你知道嗎?你只需單擊滑鼠,即可將物件旋轉到適合的列印方向。" #: resources/data/hints.ini: [hint:Lay on Face] msgid "" @@ -15907,7 +15908,7 @@ msgid "" "Did you know that you can quickly orient a model so that one of its faces sits on the print bed? Select the \"Place on face\" function or press the F key." msgstr "" "指定列印物件底部\n" -"你知道嗎,你可以快速指定模型的底面,使其位於列印板上。選擇 \"選擇底面\" 功能或按F鍵。" +"你知道嗎?你可以快速指定模型的底面,使其位於列印板上。\n""選擇「選擇底面」或按 F 鍵。" #: resources/data/hints.ini: [hint:Object List] msgid "" @@ -15915,7 +15916,7 @@ msgid "" "Did you know that you can view all objects/parts in a list and change settings for each object/part?" msgstr "" "物件清單\n" -"你知道嗎?你可以在清單中檢視所有物件/部件,並為每個物件/部件調整設定。" +"你知道嗎?你可以在清單中檢視所有物件/部件,並為每個物件/部件\n""調整設定。" #: resources/data/hints.ini: [hint:Search Functionality] msgid "" @@ -15923,7 +15924,7 @@ msgid "" "Did you know that you use the Search tool to quickly find a specific Orca Slicer setting?" msgstr "" "搜尋功能\n" -"你知道可以使用搜尋工具快速找到特定的設定嗎?" +"你知道嗎?使用「搜尋工具」可以快速定位特定的 Orca Slicer 設定。" #: resources/data/hints.ini: [hint:Simplify Model] msgid "" @@ -15931,7 +15932,7 @@ msgid "" "Did you know that you can reduce the number of triangles in a mesh using the Simplify mesh feature? Right-click the model and select Simplify model." msgstr "" "簡化模型\n" -"你知道可以使用簡化網格功能來減少網格中的三角形數量嗎?右鍵點擊模型並選擇簡化模型。" +"你知道嗎?透過「簡化網格」功能,你可以減少模型中的三角形數量。\n""只需右鍵點擊模型,然後選擇「簡化模型」。" #: resources/data/hints.ini: [hint:Slicing Parameter Table] msgid "" @@ -15939,7 +15940,7 @@ msgid "" "Did you know that you can view all objects/parts on a table and change settings for each object/part?" msgstr "" "參數表格\n" -"你知道嗎?你可以看參數表格上的所有物件/零件,並更改每個物件/零件的設定。" +"你知道嗎?你可以看參數表格上的所有物件/零件,並更改每個物件/零\n""件的設定。" #: resources/data/hints.ini: [hint:Split to Objects/Parts] msgid "" @@ -15947,7 +15948,7 @@ msgid "" "Did you know that you can split a big object into small ones for easy colorizing or printing?" msgstr "" "分割成物件/零件\n" -"你知道嗎?你可以把一個大物件分割成多個小物件/零件以便著色或列印。" +"你知道嗎?你可以把一個大物件分割成多個小物件/零件以便著色或\n""列印。" #: resources/data/hints.ini: [hint:Subtract a Part] msgid "" @@ -15955,7 +15956,7 @@ msgid "" "Did you know that you can subtract one mesh from another using the Negative part modifier? That way you can, for example, create easily resizable holes directly in Orca Slicer." msgstr "" "減去零件\n" -"你知道可以使用負零件修飾器從一個網格中減去另一個網格嗎?這樣,你可以在 Orca Slicer 中輕鬆創建可調整大小的孔洞。" +"你知道嗎?你可以使用「負零件修飾器」將一個網格從另一個網格中減\n""去。這樣,就能直接在 Orca Slicer 裡輕鬆創建尺寸可調的孔洞。" #: resources/data/hints.ini: [hint:STEP] msgid "" @@ -15964,8 +15965,9 @@ msgid "" "Orca Slicer supports slicing STEP files, providing smoother results than a lower resolution STL. Give it a try!" msgstr "" "STEP檔案\n" -"你知道嗎,通過切片 STEP 檔案而不是 STL 檔案可以提高列印品質。\n" -" Orca Slicer 支援切片 STEP 檔案,提供比低解析度 STL 更平滑的結果。試試看!" +"你知道嗎?通過切片 STEP 檔案而不是 STL 檔案可以提高列印品質。\n" +"Orca Slicer 支援切片 STEP 檔案,提供比低解析度 STL 更平滑的結果。\n" +"試試看!" #: resources/data/hints.ini: [hint:Z seam location] msgid "" @@ -15973,7 +15975,7 @@ msgid "" "Did you know that you can customize the location of the Z seam, and even paint it on your print, to have it in a less visible location? This improves the overall look of your model. Check it out!" msgstr "" "Z接縫位置\n" -"你知道嗎,你可以自訂Z接縫的位置,甚至可以將其繪製在列印上,使其位於不太可見的位置。這樣可以改善模型的整體外觀。試試看!" +"你知道嗎?你可以自訂Z接縫的位置,甚至可以將其繪製在列印上,使\n""其位於不太可見的位置。這樣可以改善模型的整體外觀。試試看!" #: resources/data/hints.ini: [hint:Fine-tuning for flow rate] msgid "" @@ -15981,7 +15983,7 @@ msgid "" "Did you know that flow rate can be fine-tuned for even better-looking prints? Depending on the material, you can improve the overall finish of the printed model by doing some fine-tuning." msgstr "" "流量微調\n" -"你知道嗎,你可以微調流量,以獲得更好看的列印效果。根據線材的不同,可以通過進行一些微調來提高列印模型的整體光潔度。" +"你知道嗎?你可以微調流量,以獲得更好看的列印效果。根據線材的不\n""同,可以通過進行一些微調來提高列印模型的整體光潔度。" #: resources/data/hints.ini: [hint:Split your prints into plates] msgid "" @@ -15989,7 +15991,7 @@ msgid "" "Did you know that you can split a model that has a lot of parts into individual plates ready to print? This will simplify the process of keeping track of all the parts." msgstr "" "分類列印\n" -"你知道嗎,你可以把一個有很多零件的模型安排到多個獨立的列印板,然後列印出來,這將簡化對所有零件的管理。" +"你知道嗎?你可以把一個有很多零件的模型安排到多個獨立的列印板,\n""然後列印出來,這將簡化對所有零件的管理。" #: resources/data/hints.ini: [hint:Speed up your print with Adaptive Layer Height] msgid "" @@ -15997,7 +15999,7 @@ msgid "" "Did you know that you can print a model even faster, by using the Adaptive Layer Height option? Check it out!" msgstr "" "自適應層高度加速列印\n" -"你知道嗎,你可以使用\"自適應層高度\"選項可以更快地列印模型。試試看!" +"你知道嗎?你可以使用\"自適應層高度\"選項可以更快地列印模型。\n""試試看!" #: resources/data/hints.ini: [hint:Support painting] msgid "" @@ -16005,7 +16007,7 @@ msgid "" "Did you know that you can paint the location of your supports? This feature makes it easy to place the support material only on the sections of the model that actually need it." msgstr "" "自訂支撐\n" -"你知道嗎,你可以手動繪製增加/隱藏支撐的位置,此功能使僅將支撐材料放置在實際需要的模型截面上變得容易。" +"你知道嗎?你可以手動繪製增加/隱藏支撐的位置,此功能使僅將支撐\n""材料放置在實際需要的模型截面上變得容易。" #: resources/data/hints.ini: [hint:Different types of supports] msgid "" @@ -16013,7 +16015,7 @@ msgid "" "Did you know that you can choose from multiple types of supports? Tree supports work great for organic models, while saving filament and improving print speed. Check them out!" msgstr "" "支撐類型\n" -"你知道嗎,有多種可選的支撐類型,樹狀支撐非常適合人物/動物模型,同時可以節線材並提高列印速度。試試看!" +"你知道嗎?有多種可選的支撐類型,樹狀支撐非常適合人物/動物模型,\n""同時可以節線材並提高列印速度。試試看!" #: resources/data/hints.ini: [hint:Printing Silk Filament] msgid "" @@ -16021,7 +16023,7 @@ msgid "" "Did you know that Silk filament needs special consideration to print it successfully? Higher temperature and lower speed are always recommended for the best results." msgstr "" "列印絲綢線材\n" -"你知道嗎,絲綢線材需要特別考慮才能成功列印。為了獲得最佳效果,通常建議使用較高的溫度和較低的速度。" +"你知道嗎?絲綢線材需要特別考慮才能成功列印。為了獲得最佳效果,\n""通常建議使用較高的溫度和較低的速度。" #: resources/data/hints.ini: [hint:Brim for better adhesion] msgid "" @@ -16029,7 +16031,7 @@ msgid "" "Did you know that when printing models have a small contact interface with the printing surface, it's recommended to use a brim?" msgstr "" "使用 Brim\n" -"你知道嗎?當模型與熱床表面的接觸面積較小時,建議使用 Brim 以提高列印成功率。" +"你知道嗎?當模型與熱床表面的接觸面積較小時,建議使用 Brim 以提\n""高列印成功率。" #: resources/data/hints.ini: [hint:Set parameters for multiple objects] msgid "" @@ -16053,7 +16055,7 @@ msgid "" "Did you know that you can save the wasted filament by flushing them into support/objects/infill during filament change?" msgstr "" "廢料運用到支撐/物件/填充中\n" -"你知道嗎?你可以在換料時將廢料運用到支撐/物件/填充,以節省浪費的線材。" +"你知道嗎?你可以在換料時將廢料運用到支撐/物件/填充,以節省浪費\n""的線材。" #: resources/data/hints.ini: [hint:Improve strength] msgid "" @@ -16061,15 +16063,16 @@ msgid "" "Did you know that you can use more wall loops and higher sparse infill density to improve the strength of the model?" msgstr "" "提高強度\n" -"你知道嗎?你可以使用更多的牆層數和更高的疏散填充密度來提高模型的強度。" +"你知道嗎?你可以使用更多的牆層數和更高的疏散填充密度來提高模型\n""強度。" #: resources/data/hints.ini: [hint:When need to print with the printer door opened] msgid "" "When need to print with the printer door opened\n" "Did you know that opening the printer door can reduce the probability of extruder/hotend clogging when printing lower temperature filament with a higher enclosure temperature. More info about this in the Wiki." msgstr "" -"需要在開啟列印設備門的情況下列印\n" -"你知道當列印低溫耗材且機身溫度較高時,開啟列印設備門可以減少擠出機/熱端堵塞的機率嗎?更多資訊請參閱Wiki。" +"當列印時需要打開機門時\n" +"你知道嗎?在列印低溫耗材且機箱內溫度較高的情況下,打開列印\n""設備機門可以有效降低擠出機或噴嘴堵塞的機率。\n" +"詳情可在Wiki上查看。" #: resources/data/hints.ini: [hint:Avoid warping] msgid "" @@ -16077,4 +16080,85 @@ msgid "" "Did you know that when printing materials that are prone to warping such as ABS, appropriately increasing the heatbed temperature can reduce the probability of warping." msgstr "" "避免翹曲\n" +"你知道嗎?當列印容易翹曲的材料(如 ABS)時,適當提高熱床溫度\n""可以降低翹曲的機率。" + +#: src/slic3r/GUI/Tab.cpp: +msgid "Dependencies" +msgstr "相依項目" + +msgid "Profile dependencies" +msgstr "設定檔相依項目" + +msgid "This is a default preset." +msgstr "預設配置。" + +msgid "This is a system preset." +msgstr "這是系統預設配置" + +msgid "Current preset is inherited from the default preset." +msgstr "目前的配置繼承自預設配置。" + +msgid "Current preset is inherited from" +msgstr "目前的配置繼承自" + +msgid "It can't be deleted or modified." +msgstr "它無法被刪除或修改。" + +msgid "Any modifications should be saved as a new preset inherited from this one." +msgstr "若要進行任何修改,請另存為一個新的預設配置,並繼承自此預設配置。" + +msgid "To do that please specify a new name for the preset." +msgstr "為此,請為新的預設配置指定一個名稱。" + +msgid "Additional information:" +msgstr "其他資訊:" + +msgid "vendor" +msgstr "供應商" + +msgid ", ver: " +msgstr ",版本" + +msgid "printer model" +msgstr "列印設備型號" + +msgid "default print profile" +msgstr "預設列印設定檔" + +msgid "default filament profile" +msgstr "預設線材設定檔" + +msgid "default SLA material profile" +msgstr "預設 SLA 材料設定檔" + +msgid "default SLA print profile" +msgstr "預設 SLA 列印設定檔" + +msgid "full profile name" +msgstr "完整設定檔名稱" + +msgid "symbolic profile name" +msgstr "簡易設定檔名稱" + +msgid "" +"A copy of the current system preset will be created, which will be detached from the system preset." +msgstr "將建立目前系統配置的副本,且該副本將與系統配置分離不相關聯。" + +msgid "" +"The current custom preset will be detached from the parent system preset." +msgstr "當前的自訂配置將與父系統配置分離不相關聯。" + +msgid "" +"Modifications to the current profile will be saved." +msgstr "" +"目前設定檔的修改將會保存下來。" + +msgid "" +"This action is not revertible.\nDo you want to proceed?" +msgstr "" +"此操作無法還原。\n您確定要繼續嗎?" + +msgid "" +"Detach preset" +msgstr "解除預設關聯" "你知道嗎?當列印容易翹曲的材料(如 ABS)時,適當提高熱床溫度可以降低翹曲的機率。" From ecb0e7ea682eb2f224ef5a8665aacced7d770a0b Mon Sep 17 00:00:00 2001 From: SoftFever Date: Fri, 24 Jan 2025 21:58:52 +0800 Subject: [PATCH 10/25] Update WIKI --- doc/Home.md | 1 + doc/How-to-create-profiles.md | 180 ++++++++++++++++++ .../filament/Generic ABS @MyToolChanger.json | 7 - .../filament/Generic ASA @MyToolChanger.json | 7 - .../filament/Generic PA @MyToolChanger.json | 10 - .../Generic PA-CF @MyToolChanger.json | 13 -- .../filament/Generic PC @MyToolChanger.json | 6 - .../filament/Generic PETG @MyToolChanger.json | 36 ---- .../filament/Generic PLA @MyToolChanger.json | 9 - .../Generic PLA-CF @MyToolChanger.json | 12 -- .../filament/Generic PVA @MyToolChanger.json | 42 +++- 11 files changed, 214 insertions(+), 109 deletions(-) create mode 100644 doc/How-to-create-profiles.md diff --git a/doc/Home.md b/doc/Home.md index 998edbe409..0abdd8fc01 100644 --- a/doc/Home.md +++ b/doc/Home.md @@ -36,3 +36,4 @@ The guide below takes you through the key calibration tests in Orca - flow rate, - [How to build Orca Slicer](./How-to-build) - [Localization and translation guide](Localization_guide) - [Developer Reference](https://github.com/SoftFever/OrcaSlicer/blob/main/doc/developer-reference/Home.md) +- [How to create profiles](./How-to-create-profiles) \ No newline at end of file diff --git a/doc/How-to-create-profiles.md b/doc/How-to-create-profiles.md new file mode 100644 index 0000000000..3161a71633 --- /dev/null +++ b/doc/How-to-create-profiles.md @@ -0,0 +1,180 @@ +# Guide: Develop Profiles for OrcaSlicer + +## Introduction +This guide will help you develop profiles for OrcaSlicer. + +## High-level Overview +OrcaSlicer uses JSON files to store profiles. There are four types of profiles: +1. Printer model (type `machine_model`). Example: `Orca 3D Fuse1.json` +2. Printer variant (type `machine`). Example: `Orca 3D Fuse1 0.2 nozzle.json` +3. Filament (type `filament`). Example: `Generic PLA @Orca 3D Fuse1@.json` +4. Process (type `process`). Example: `0.10mm Standard @Orca 3D Fuse1 0.2.json` + +Additionally, there is an overall meta file for each vendor (`Orca 3D.json`). + +For easier understanding, let's consider a scenario with a printer manufacturer called `Orca 3D`. The manufacturer offers one printer model called `Fuse 1`, which supports 0.2/0.4/0.6/0.8mm nozzles and common market filaments. + +In this case: +- Vendor profile: `Orca 3D` +- Printer profile: `Orca 3D Fuse1` +- Printer variant profile: `Orca 3D Fuse1 0.4 nozzle` +- Filament profile: `Generic PLA @Orca 3D Fuse1@` +- Process profile: `0.20mm Standard @Orca 3D Fuse1 0.4` + +The profile name should be same as the filename without the `.json` extension in principal. +Naming conventions: +1. Vendor profile: `vendor_name.json` +2. Printer profile: `vendor_name` + `printer_name` + `.json` +3. Printer variant profile: `vendor_name` + `printer_variant_name` + `.json` (where `printer_variant_name` typically includes `printer_name` + `nozzle_diameter`) +4. Filament profile: `filament_vendor_name` + `filament_name` + " @" + `vendor_name` + `printer_name`/`printer_variant_name` + `.json` +5. Process profile: `layer_height` + `preset_name` + " @" + `vendor_name` + `printer_name`/`printer_variant_name` + `.json` (`preset_name` typically includes "standard," "fine," "fast," "draft," etc.) + + +A typical file structure for a vendor: +``` +resources\profiles\ + - Orca 3D.json + - Orca 3D\ + - machine\ + - Orca 3D Fuse1.json + - Orca 3D Fuse1 0.2 nozzle.json + - Orca 3D Fuse1 0.4 nozzle.json + - process\ + - 0.10mm Standard @Orca 3D Fuse1 0.2.json + - 0.20mm Standard @Orca 3D Fuse1 0.4.json + - filament\ + - Generic PLA @Orca 3D Fuse1@.json +``` + + +**NOTE 1**: Use short vendor names in filenames to avoid excessive length. +**NOTE 2**: Filament profiles are **optional**. Create them only if the vendor has specifically tuned profiles for the given printer. See [Filament profiles](#filament-profiles) for details. + +## Filament Profiles +OrcaSlicer features a global filament library called `OrcaFilamentLibrary`, which is automatically available for all printers. It includes generic filaments like `Generic PLA @System` and `Generic ABS @System` etc. + +Printer vendors can override specific filaments in the global library for certain printer models by creating new filament profiles. + +Relationship diagram: +```mermaid +graph TD; + OrcaFilamentLibrary-->Orca_3D_filament; + OrcaFilamentLibrary-->Vendor_A_filament; + OrcaFilamentLibrary-->Vendor_B_filament; +``` + +**NOTE**: Create new filament profiles only if you have truly specifically tuned the filament for the given printer. Otherwise, use the global library. The global library has a better chance to receive optimizations and updates from OrcaSlicer contributors, which will benefit users of all printers. + +### Adding Filament Profiles to the Global Library +In this section, we will discuss how to add a new filament profile into the global library. +If you want to add a new generic profile into the global library, you need to create a new file in the `resources\profiles\OrcaFilamentLibrary\filament` folder. If a base type already exists in the global library, you can use this file as a base profile by inheriting it. +The following sample JSON file shows how to create a new generic filament profile `Generic PLA-GF @System` in the global library. + +1. The first step is to create a new file in the `resources\profiles\OrcaFilamentLibrary\filament` folder. The file name should be `Generic PLA-GF @System.json`. Please note that we leave the `compatible_printers` field empty so that it is available for all printers. + +```json +{ + "type": "filament", + "filament_id": "GFL99", + "setting_id": "GFSA05", + "name": "Generic PLA-GF @System", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_pla", + "filament_type": ["PLA-GF"], + "filament_flow_ratio": [ + "0.96" + ], + "compatible_printers": [] +} +``` + +2. Register the profile in `resources\profiles\OrcaFilamentLibrary.json`: + +```json +{ + "name": "OrcaFilamentLibrary", + "version": "02.02.00.04", + "force_update": "0", + "description": "Orca Filament Library", + "filament_list": [ + // ... + { + "name": "Generic PLA-GF @System", + "sub_path": "filament/Generic PLA-GF @System.json" + } + ] +} +``` + +3. The last step is to validate the newly added filament profiles. You can run OrcaSlicer to verify if the filament you just added is available and usable. You can also use the [Orca profile validator](https://github.com/SoftFever/Orca_tools/releases/tag/1) tool to help debug any errors. **NOTE**: You need to delete the `%appdata%/OrcaSlicer/system` folder to force OrcaSlicer to reload your lastest changes. + +The process is the same if you want to add a new brand filament profile into the global library. You need to create a new file in the `resources\profiles\OrcaFilamentLibrary\filament\brand_name` folder. The only difference is that you should put the file into the brand's own subfolder.`resources\profiles\OrcaFilamentLibrary\filament\brand_name`. + +### Adding Filament Profiles to Printer Vendor Library +In this section, we will discuss how to add a new filament profile for a certain vendor. +If you want to add a new filament profile, whether it's a brand new profile or a specialized version of a global filament profile for a given printer, you need to create a new file in the `resources\profiles\vendor_name\filament` folder. If a base type already exists in the global library, you can use this file as a base profile by inheriting it. +Below is a sample JSON file showing how to create a specialized `Generic ABS` filament profile for the ToolChanger printer. +Please note that here we must leave the compatible_printers field non-empty, unlike in the global library. + +```json +{ + "type": "filament", + "setting_id": "GFB99_MTC_0", + "name": "Generic ABS @MyToolChanger", + "from": "system", + "instantiation": "true", + "inherits": "Generic ABS @System", + "filament_cooling_final_speed": [ + "3.5" + ], + "filament_cooling_initial_speed": [ + "10" + ], + "filament_cooling_moves": [ + "2" + ], + "filament_load_time": [ + "10.5" + ], + "filament_loading_speed": [ + "10" + ], + "filament_loading_speed_start": [ + "50" + ], + "filament_multitool_ramming": [ + "1" + ], + "filament_multitool_ramming_flow": [ + "40" + ], + "filament_stamping_distance": [ + "45" + ], + "filament_stamping_loading_speed": [ + "29" + ], + "filament_unload_time": [ + "8.5" + ], + "filament_unloading_speed": [ + "100" + ], + "compatible_printers": [ + "MyToolChanger 0.4 nozzle", + "MyToolChanger 0.2 nozzle", + "MyToolChanger 0.6 nozzle", + "MyToolChanger 0.8 nozzle" + ] +} +``` + +## Process Profiles +WIP... + +## Printer Profiles +WIP... + +## Printer Variant Profiles +WIP... \ No newline at end of file diff --git a/resources/profiles/Custom/filament/Generic ABS @MyToolChanger.json b/resources/profiles/Custom/filament/Generic ABS @MyToolChanger.json index d1eb791459..23238a1ea2 100644 --- a/resources/profiles/Custom/filament/Generic ABS @MyToolChanger.json +++ b/resources/profiles/Custom/filament/Generic ABS @MyToolChanger.json @@ -1,18 +1,11 @@ { "type": "filament", - "filament_id": "GFB99", "setting_id": "GFB99_MTC_0", "name": "Generic ABS @MyToolChanger", "renamed_from": "My Generic ABS @MyToolChanger", "from": "system", "instantiation": "true", "inherits": "Generic ABS @System", - "filament_flow_ratio": [ - "0.926" - ], - "filament_max_volumetric_speed": [ - "12" - ], "filament_cooling_final_speed": [ "3.5" ], diff --git a/resources/profiles/Custom/filament/Generic ASA @MyToolChanger.json b/resources/profiles/Custom/filament/Generic ASA @MyToolChanger.json index fa45cde5db..28f13fc7c2 100644 --- a/resources/profiles/Custom/filament/Generic ASA @MyToolChanger.json +++ b/resources/profiles/Custom/filament/Generic ASA @MyToolChanger.json @@ -1,18 +1,11 @@ { "type": "filament", - "filament_id": "GFB98", "setting_id": "GFB98_MTC_0", "name": "Generic ASA @MyToolChanger", "renamed_from": "My Generic ASA @MyToolChanger", "from": "system", "instantiation": "true", "inherits": "Generic ASA @System", - "filament_flow_ratio": [ - "0.93" - ], - "filament_max_volumetric_speed": [ - "12" - ], "filament_cooling_final_speed": [ "3.5" ], diff --git a/resources/profiles/Custom/filament/Generic PA @MyToolChanger.json b/resources/profiles/Custom/filament/Generic PA @MyToolChanger.json index 66ac2ff73c..76ab962feb 100644 --- a/resources/profiles/Custom/filament/Generic PA @MyToolChanger.json +++ b/resources/profiles/Custom/filament/Generic PA @MyToolChanger.json @@ -1,21 +1,11 @@ { "type": "filament", - "filament_id": "GFN99", "setting_id": "GFN99_MTC_0", "name": "Generic PA @MyToolChanger", "renamed_from": "My Generic PA @MyToolChanger", "from": "system", "instantiation": "true", "inherits": "Generic PA @System", - "nozzle_temperature_initial_layer": [ - "280" - ], - "nozzle_temperature": [ - "280" - ], - "filament_max_volumetric_speed": [ - "12" - ], "filament_cooling_final_speed": [ "3.5" ], diff --git a/resources/profiles/Custom/filament/Generic PA-CF @MyToolChanger.json b/resources/profiles/Custom/filament/Generic PA-CF @MyToolChanger.json index 78f2ae0202..a0dfaa0829 100644 --- a/resources/profiles/Custom/filament/Generic PA-CF @MyToolChanger.json +++ b/resources/profiles/Custom/filament/Generic PA-CF @MyToolChanger.json @@ -1,24 +1,11 @@ { "type": "filament", - "filament_id": "GFN98", "setting_id": "GFN98_MTC_0", "name": "Generic PA-CF @MyToolChanger", "renamed_from": "My Generic PA-CF @MyToolChanger", "from": "system", "instantiation": "true", "inherits": "Generic PA-CF @System", - "filament_type": [ - "PA-CF" - ], - "nozzle_temperature_initial_layer": [ - "280" - ], - "nozzle_temperature": [ - "280" - ], - "filament_max_volumetric_speed": [ - "8" - ], "filament_cooling_final_speed": [ "3.5" ], diff --git a/resources/profiles/Custom/filament/Generic PC @MyToolChanger.json b/resources/profiles/Custom/filament/Generic PC @MyToolChanger.json index b3fa761a1e..0ff6bee88f 100644 --- a/resources/profiles/Custom/filament/Generic PC @MyToolChanger.json +++ b/resources/profiles/Custom/filament/Generic PC @MyToolChanger.json @@ -7,12 +7,6 @@ "from": "system", "instantiation": "true", "inherits": "Generic PC @System", - "filament_max_volumetric_speed": [ - "12" - ], - "filament_flow_ratio": [ - "0.94" - ], "filament_cooling_final_speed": [ "3.5" ], diff --git a/resources/profiles/Custom/filament/Generic PETG @MyToolChanger.json b/resources/profiles/Custom/filament/Generic PETG @MyToolChanger.json index 1b4e8de6b0..27f0c96efc 100644 --- a/resources/profiles/Custom/filament/Generic PETG @MyToolChanger.json +++ b/resources/profiles/Custom/filament/Generic PETG @MyToolChanger.json @@ -7,42 +7,6 @@ "from": "system", "instantiation": "true", "inherits": "Generic PETG @System", - "reduce_fan_stop_start_freq": [ - "1" - ], - "slow_down_for_layer_cooling": [ - "1" - ], - "fan_cooling_layer_time": [ - "30" - ], - "overhang_fan_speed": [ - "90" - ], - "overhang_fan_threshold": [ - "25%" - ], - "fan_max_speed": [ - "90" - ], - "fan_min_speed": [ - "40" - ], - "slow_down_min_speed": [ - "10" - ], - "slow_down_layer_time": [ - "8" - ], - "filament_flow_ratio": [ - "0.95" - ], - "filament_max_volumetric_speed": [ - "10" - ], - "filament_start_gcode": [ - "; filament start gcode\n" - ], "filament_cooling_final_speed": [ "3.5" ], diff --git a/resources/profiles/Custom/filament/Generic PLA @MyToolChanger.json b/resources/profiles/Custom/filament/Generic PLA @MyToolChanger.json index 91e1ac329a..ef24ac2afb 100644 --- a/resources/profiles/Custom/filament/Generic PLA @MyToolChanger.json +++ b/resources/profiles/Custom/filament/Generic PLA @MyToolChanger.json @@ -7,15 +7,6 @@ "from": "system", "instantiation": "true", "inherits": "Generic PLA @System", - "filament_flow_ratio": [ - "0.98" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "slow_down_layer_time": [ - "8" - ], "filament_cooling_final_speed": [ "3.5" ], diff --git a/resources/profiles/Custom/filament/Generic PLA-CF @MyToolChanger.json b/resources/profiles/Custom/filament/Generic PLA-CF @MyToolChanger.json index 5600c63fa1..8be0250760 100644 --- a/resources/profiles/Custom/filament/Generic PLA-CF @MyToolChanger.json +++ b/resources/profiles/Custom/filament/Generic PLA-CF @MyToolChanger.json @@ -7,18 +7,6 @@ "from": "system", "instantiation": "true", "inherits": "Generic PLA-CF @System", - "filament_flow_ratio": [ - "0.95" - ], - "filament_type": [ - "PLA-CF" - ], - "filament_max_volumetric_speed": [ - "12" - ], - "slow_down_layer_time": [ - "7" - ], "filament_cooling_final_speed": [ "3.5" ], diff --git a/resources/profiles/Custom/filament/Generic PVA @MyToolChanger.json b/resources/profiles/Custom/filament/Generic PVA @MyToolChanger.json index fd1f0bec80..acb5e848af 100644 --- a/resources/profiles/Custom/filament/Generic PVA @MyToolChanger.json +++ b/resources/profiles/Custom/filament/Generic PVA @MyToolChanger.json @@ -7,18 +7,42 @@ "from": "system", "instantiation": "true", "inherits": "Generic PVA @System", - "filament_flow_ratio": [ - "0.95" + "filament_cooling_final_speed": [ + "3.5" ], - "filament_max_volumetric_speed": [ - "12" - ], - "slow_down_layer_time": [ - "7" - ], - "slow_down_min_speed": [ + "filament_cooling_initial_speed": [ "10" ], + "filament_cooling_moves": [ + "2" + ], + "filament_load_time": [ + "10.5" + ], + "filament_loading_speed": [ + "10" + ], + "filament_loading_speed_start": [ + "50" + ], + "filament_multitool_ramming": [ + "1" + ], + "filament_multitool_ramming_flow": [ + "40" + ], + "filament_stamping_distance": [ + "45" + ], + "filament_stamping_loading_speed": [ + "29" + ], + "filament_unload_time": [ + "8.5" + ], + "filament_unloading_speed": [ + "100" + ], "compatible_printers": [ "MyToolChanger 0.4 nozzle", "MyToolChanger 0.2 nozzle", From da2a1b1ff8a3b5185719a778ff156e0ce9b2c072 Mon Sep 17 00:00:00 2001 From: discip <53649486+discip@users.noreply.github.com> Date: Fri, 24 Jan 2025 15:03:54 +0100 Subject: [PATCH 11/25] updated fake 'orcaslicer - websites' (#8160) * updated fake 'orcaslicer - websites' --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 47d8bc51cf..22f8d26f32 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ Join our Discord community here:

🚨🚨🚨Important Security Alert🚨🚨🚨

-Please be aware that "**orcaslicer.net**" or "**orcaslicer.info**" are NOT an official website for OrcaSlicer and may be potentially malicious. These sites appear to use AI-generated content, lacking genuine context and seems to exist solely to profit from advertisements. Worse, it may redirect download links to harmful sources. For your safety, avoid downloading OrcaSlicer from this site as the links may be compromised. +Please be aware that "**orcaslicer.net**", "**orcaslicer.co**" or "**orca-slicer.com**" are NOT an official website for OrcaSlicer and may be potentially malicious. These sites appear to use AI-generated content, lacking genuine context and seems to exist solely to profit from advertisements. Worse, it may redirect download links to harmful sources. For your safety, avoid downloading OrcaSlicer from this site as the links may be compromised. If you see the above sites in your searches, report them as spam or unsafe to the search engine. This small action will assist everyone. From 0cf7efc46ccf7d905001435079c698642c1b3ef0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcin=20Czekaj=C5=82o?= Date: Fri, 24 Jan 2025 15:28:19 +0100 Subject: [PATCH 12/25] Rotate RatRig V-Minion bed model (#8065) Rotate RatRig V-Minion bed plate model --- .../profiles/Ratrig/ratrig-vminion-bed.stl | Bin 45784 -> 45784 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/resources/profiles/Ratrig/ratrig-vminion-bed.stl b/resources/profiles/Ratrig/ratrig-vminion-bed.stl index 1bfbd6a41c438007eb855da5a74fa203f4e78eef..83f5e829310308b59a70e2f482b82ed138a2857f 100644 GIT binary patch literal 45784 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 From 3c3ac1a1cb1cb68982655d7b6aecfd85d779a55f Mon Sep 17 00:00:00 2001 From: Vasily Khoruzhick Date: Fri, 24 Jan 2025 06:32:53 -0800 Subject: [PATCH 13/25] flatpak: install translations in flatpak (#8066) * flatpak: install translations in flatpak Note: you also need to update flatpak config to add desired locales to flatpak environment via `flatpak config --set languages='en;ru'; flatpak update` or `flatpak --user config --set languages='en;ru'; flatpak --user update` * flatpak: mesa-20.x tarball has been moved, fix the url It's now under older-versions/20.x directory --- flatpak/io.github.softfever.OrcaSlicer.yml | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/flatpak/io.github.softfever.OrcaSlicer.yml b/flatpak/io.github.softfever.OrcaSlicer.yml index 0eb8b86c14..c613acf425 100755 --- a/flatpak/io.github.softfever.OrcaSlicer.yml +++ b/flatpak/io.github.softfever.OrcaSlicer.yml @@ -56,7 +56,7 @@ modules: - "*.a" sources: - type: archive - url: https://archive.mesa3d.org/mesa-20.2.6.tar.xz + url: https://archive.mesa3d.org/older-versions/20.x/mesa-20.2.6.tar.xz sha256: f12ca3c6c622f11cd79ad66b4220f04514fa96f795062fe92a37339ab19885db - name: glu @@ -265,8 +265,8 @@ modules: buildsystem: simple build-commands: - | - mkdir -p build && cd build - CXXFLAGS=-std=gnu++20 cmake ../ \ + mkdir -p build + CXXFLAGS=-std=gnu++20 cmake . -B build \ -DSLIC3R_PCH=OFF \ -DSLIC3R_FHS=ON \ -DSLIC3R_GTK=3 \ @@ -278,7 +278,9 @@ modules: -DBBL_RELEASE_TO_PUBLIC=1 \ -DCMAKE_PREFIX_PATH=/app \ -DCMAKE_INSTALL_PREFIX=/app - CXXFLAGS=-std=gnu++20 cmake --build . --target install -j$FLATPAK_BUILDER_N_JOBS + CXXFLAGS=-std=gnu++20 cmake --build build --target OrcaSlicer -j$FLATPAK_BUILDER_N_JOBS + ./run_gettext.sh + CXXFLAGS=-std=gnu++20 cmake --build build --target install -j$FLATPAK_BUILDER_N_JOBS cleanup: - /include From 4a4f27e5994987a97dfb515c44136de9d97248d2 Mon Sep 17 00:00:00 2001 From: Noisyfox Date: Sat, 25 Jan 2025 11:50:30 +0800 Subject: [PATCH 14/25] Fix wrong plate y possition after switching profiles with different bed size (#7923) * FIX:update custom_texture when new_shape=false Jira: STUDIO-5287 Change-Id: I3add95f9f9345c14a48cc7467513d1b3ce95f4c9 (cherry picked from commit 9ce7de10f4a5f1723439fbefea98595fcf678d69) * FIX: correct the bed model to the print area origin point Change-Id: Ieb856dff421d39694966e3c13c519f4ffa3da5c2 (cherry picked from commit 32892514ff57cd87a9aa77b26ae9247f79c6cfc1) * Avoid unnecessary copy of `position` parameter * Merge branch 'main' into bugfox/plater-y --- src/slic3r/GUI/3DBed.cpp | 4 ++-- src/slic3r/GUI/3DBed.hpp | 2 +- src/slic3r/GUI/PartPlate.hpp | 5 ----- src/slic3r/GUI/Plater.cpp | 7 ++++--- 4 files changed, 7 insertions(+), 11 deletions(-) diff --git a/src/slic3r/GUI/3DBed.cpp b/src/slic3r/GUI/3DBed.cpp index 9d73383096..5c843f4cbe 100644 --- a/src/slic3r/GUI/3DBed.cpp +++ b/src/slic3r/GUI/3DBed.cpp @@ -246,7 +246,7 @@ void Bed3D::Axes::render() //BBS: add part plate logic bool Bed3D::set_shape(const Pointfs& printable_area, const double printable_height, const std::string& custom_model, bool force_as_custom, - const Vec2d position, bool with_reset) + const Vec2d& position, bool with_reset) { /*auto check_texture = [](const std::string& texture) { boost::system::error_code ec; // so the exists call does not throw (e.g. after a permission problem) @@ -612,7 +612,7 @@ void Bed3D::render_system(GLCanvas3D& canvas, const Transform3d& view_matrix, co void Bed3D::update_model_offset() { // move the model so that its origin (0.0, 0.0, 0.0) goes into the bed shape center and a bit down to avoid z-fighting with the texture quad - Vec3d shift = m_extended_bounding_box.center(); + Vec3d shift = m_build_volume.bounding_volume().center(); shift(2) = -0.03; Vec3d* model_offset_ptr = const_cast(&m_model_offset); *model_offset_ptr = shift; diff --git a/src/slic3r/GUI/3DBed.hpp b/src/slic3r/GUI/3DBed.hpp index ed19e24b53..1f3d3aab8a 100644 --- a/src/slic3r/GUI/3DBed.hpp +++ b/src/slic3r/GUI/3DBed.hpp @@ -121,7 +121,7 @@ public: // as this class does not use it, thus there is no need to update the UI. // BBS bool set_shape(const Pointfs& printable_area, const double printable_height, const std::string& custom_model, bool force_as_custom = false, - const Vec2d position = Vec2d::Zero(), bool with_reset = true); + const Vec2d& position = Vec2d::Zero(), bool with_reset = true); void set_position(Vec2d& position); void set_axes_mode(bool origin); diff --git a/src/slic3r/GUI/PartPlate.hpp b/src/slic3r/GUI/PartPlate.hpp index fdc0fc18e3..675f004c93 100644 --- a/src/slic3r/GUI/PartPlate.hpp +++ b/src/slic3r/GUI/PartPlate.hpp @@ -692,11 +692,6 @@ public: m_height_limit_mode = mode; } - // SoftFever - const std::string& get_logo_texture_filename() const { - return m_logo_texture_filename; - } - int get_curr_plate_index() const { return m_current_plate; } PartPlate* get_curr_plate() { return m_plate_list[m_current_plate]; } const PartPlate* get_curr_plate() const { return m_plate_list[m_current_plate]; } diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index 589a18aaa7..007b4943b3 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -8162,13 +8162,14 @@ void Plater::priv::set_bed_shape(const Pointfs& shape, const Pointfs& exclude_ar float prev_height_lid, prev_height_rod; partplate_list.get_height_limits(prev_height_lid, prev_height_rod); - auto prev_logo = partplate_list.get_logo_texture_filename(); double height_to_lid = config->opt_float("extruder_clearance_height_to_lid"); double height_to_rod = config->opt_float("extruder_clearance_height_to_rod"); - auto custom_bed_texture = config->opt_string("bed_custom_texture"); Pointfs prev_exclude_areas = partplate_list.get_exclude_area(); - new_shape |= (height_to_lid != prev_height_lid) || (height_to_rod != prev_height_rod) || (prev_exclude_areas != exclude_areas) || (prev_logo != custom_bed_texture); + new_shape |= (height_to_lid != prev_height_lid) || (height_to_rod != prev_height_rod) || (prev_exclude_areas != exclude_areas); + if (!new_shape && partplate_list.get_logo_texture_filename() != custom_texture) { + partplate_list.update_logo_texture_filename(custom_texture); + } if (new_shape) { if (view3D) view3D->bed_shape_changed(); if (preview) preview->bed_shape_changed(); From 3d4ca06423c80572581b9aa4ac8dd3ad6f8550a6 Mon Sep 17 00:00:00 2001 From: liberodark Date: Sat, 25 Jan 2025 10:32:30 +0100 Subject: [PATCH 15/25] Sovol SV06 ACE Enable Multi Bed (#8182) --- resources/profiles/Sovol/machine/Sovol SV06 ACE 0.2 nozzle.json | 1 + resources/profiles/Sovol/machine/Sovol SV06 ACE 0.4 nozzle.json | 1 + resources/profiles/Sovol/machine/Sovol SV06 ACE 0.6 nozzle.json | 1 + resources/profiles/Sovol/machine/Sovol SV06 ACE 0.8 nozzle.json | 1 + 4 files changed, 4 insertions(+) diff --git a/resources/profiles/Sovol/machine/Sovol SV06 ACE 0.2 nozzle.json b/resources/profiles/Sovol/machine/Sovol SV06 ACE 0.2 nozzle.json index 51f2fe45b3..27a7e04f7a 100644 --- a/resources/profiles/Sovol/machine/Sovol SV06 ACE 0.2 nozzle.json +++ b/resources/profiles/Sovol/machine/Sovol SV06 ACE 0.2 nozzle.json @@ -29,6 +29,7 @@ "retraction_minimum_travel": [ "0.5" ], + "support_multi_bed_types": "1", "machine_max_acceleration_e": [ "5000", "5000" diff --git a/resources/profiles/Sovol/machine/Sovol SV06 ACE 0.4 nozzle.json b/resources/profiles/Sovol/machine/Sovol SV06 ACE 0.4 nozzle.json index eef703056e..377a8a4f95 100644 --- a/resources/profiles/Sovol/machine/Sovol SV06 ACE 0.4 nozzle.json +++ b/resources/profiles/Sovol/machine/Sovol SV06 ACE 0.4 nozzle.json @@ -29,6 +29,7 @@ "retraction_minimum_travel": [ "1" ], + "support_multi_bed_types": "1", "machine_max_acceleration_e": [ "5000", "5000" diff --git a/resources/profiles/Sovol/machine/Sovol SV06 ACE 0.6 nozzle.json b/resources/profiles/Sovol/machine/Sovol SV06 ACE 0.6 nozzle.json index 015f9871e6..def97c08c2 100644 --- a/resources/profiles/Sovol/machine/Sovol SV06 ACE 0.6 nozzle.json +++ b/resources/profiles/Sovol/machine/Sovol SV06 ACE 0.6 nozzle.json @@ -29,6 +29,7 @@ "retraction_minimum_travel": [ "1.5" ], + "support_multi_bed_types": "1", "machine_max_acceleration_e": [ "5000", "5000" diff --git a/resources/profiles/Sovol/machine/Sovol SV06 ACE 0.8 nozzle.json b/resources/profiles/Sovol/machine/Sovol SV06 ACE 0.8 nozzle.json index ddfc77be1c..bb2075a477 100644 --- a/resources/profiles/Sovol/machine/Sovol SV06 ACE 0.8 nozzle.json +++ b/resources/profiles/Sovol/machine/Sovol SV06 ACE 0.8 nozzle.json @@ -29,6 +29,7 @@ "retraction_minimum_travel": [ "2" ], + "support_multi_bed_types": "1", "machine_max_acceleration_e": [ "5000", "5000" From 23a31bcad94d8805dc90d11854c5091595467211 Mon Sep 17 00:00:00 2001 From: Christian Kunis Date: Sat, 25 Jan 2025 10:39:12 -0500 Subject: [PATCH 16/25] Update Anycubic Kobra Machine Profile(s) (#8170) * Update Anycubic Kobra 0.4 nozzle.json Fix incorrect parameters for M204 in start gcode * Update Anycubic Kobra end_gcode and travel speeds * Update Anycubic i3 Mega S start and end gcode --- .../Anycubic/machine/Anycubic Kobra 0.4 nozzle.json | 6 +++--- .../Anycubic/machine/Anycubic i3 Mega S 0.4 nozzle.json | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/resources/profiles/Anycubic/machine/Anycubic Kobra 0.4 nozzle.json b/resources/profiles/Anycubic/machine/Anycubic Kobra 0.4 nozzle.json index 46e01ed821..91a96361d3 100644 --- a/resources/profiles/Anycubic/machine/Anycubic Kobra 0.4 nozzle.json +++ b/resources/profiles/Anycubic/machine/Anycubic Kobra 0.4 nozzle.json @@ -106,9 +106,9 @@ "default_filament_profile": [ "Anycubic Generic PLA" ], - "machine_start_gcode": "G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM204 S[machine_max_acceleration_extruding] T[machine_max_acceleration_retracting]\nM104 S[nozzle_temperature_initial_layer] ; set extruder temp\nM140 S[bed_temperature_initial_layer_single] ; set bed temp\nG28 ; home all\nG1 Y1.0 Z0.3 F1000 ; move print head up\nM190 S[bed_temperature_initial_layer_single] ; wait for bed temp\nM109 S[nozzle_temperature_initial_layer] ; wait for extruder temp\nG92 E0.0\n; initial load\nG1 X205.0 E19 F1000\nG1 Y1.6\nG1 X5.0 E19 F1000\nG92 E0.0\n; intro line\nG1 Y2.0 Z0.2 F1000\nG1 X65.0 E9.0 F1000\nG1 X105.0 E12.5 F1000\nG92 E0.0", - "machine_end_gcode": "G1 E-1.0 F2100 ; retract\nG92 E0.0\nG1{if max_layer_z < printable_height} Z{z_offset+min(max_layer_z+30, printable_height)}{endif} E-34.0 F720 ; move print head up & retract filament\nG4 ; wait\nM104 S0 ; turn off temperature\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\nG1 X0 Y105 F3000 ; park print head\nM84 ; disable motors", + "machine_start_gcode": "G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM204 P[machine_max_acceleration_extruding] R[machine_max_acceleration_retracting] T[machine_max_acceleration_travel]\nM104 S[nozzle_temperature_initial_layer] ; set extruder temp\nM140 S[bed_temperature_initial_layer_single] ; set bed temp\nG28 ; home all\nG1 Y1.0 Z0.3 F{travel_speed*60} ; move print head up\nM190 S[bed_temperature_initial_layer_single] ; wait for bed temp\nM109 S[nozzle_temperature_initial_layer] ; wait for extruder temp\nG92 E0.0\n; initial load\nG1 X205.0 E19 F1000\nG1 Y1.6\nG1 X5.0 E19 F1000\nG92 E0.0\n; intro line\nG1 Y2.0 Z0.2 F1000\nG1 X65.0 E9.0 F1000\nG1 X105.0 E12.5 F1000\nG92 E0.0", + "machine_end_gcode": "G1 E-1.0 F2100 ; retract\nG92 E0.0\nG1 X0{if max_layer_z < printable_height} Z{z_offset+min(max_layer_z+30, printable_height)}{endif} E-34.0 F{travel_speed*60} ; move print head up & retract filament\nG4 ; wait\nM104 S0 ; turn off temperature\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\nG1 X0 Y105 F{travel_speed*60} ; park print head\nM84 ; disable motors", "before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\nG92 E0.0\n;[layer_z]\n\n", "layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]", "scan_first_layer": "0" -} \ No newline at end of file +} diff --git a/resources/profiles/Anycubic/machine/Anycubic i3 Mega S 0.4 nozzle.json b/resources/profiles/Anycubic/machine/Anycubic i3 Mega S 0.4 nozzle.json index 709dcf918f..a28efca93a 100644 --- a/resources/profiles/Anycubic/machine/Anycubic i3 Mega S 0.4 nozzle.json +++ b/resources/profiles/Anycubic/machine/Anycubic i3 Mega S 0.4 nozzle.json @@ -110,8 +110,8 @@ "default_filament_profile": [ "Anycubic Generic PLA" ], - "machine_start_gcode": "G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM204 S[machine_max_acceleration_extruding] T[machine_max_acceleration_retracting]\nM104 S[nozzle_temperature_initial_layer] ; set extruder temp\nM140 S[bed_temperature_initial_layer_single] ; set bed temp\nG28 ; home all\nG1 Y1.0 Z0.3 F1000 ; move print head up\nM190 S[bed_temperature_initial_layer_single] ; wait for bed temp\nM109 S[nozzle_temperature_initial_layer] ; wait for extruder temp\nG92 E0.0\n; initial load\nG1 X205.0 E19 F1000\nG1 Y1.6\nG1 X5.0 E19 F1000\nG92 E0.0\n; intro line\nG1 Y2.0 Z0.2 F1000\nG1 X65.0 E9.0 F1000\nG1 X105.0 E12.5 F1000\nG92 E0.0", - "machine_end_gcode": "G1 E-1.0 F2100 ; retract\nG92 E0.0\nG1{if max_layer_z < printable_height} Z{z_offset+min(max_layer_z+30, printable_height)}{endif} E-34.0 F720 ; move print head up & retract filament\nG4 ; wait\nM104 S0 ; turn off temperature\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\nG1 X0 Y105 F3000 ; park print head\nM84 ; disable motors", + "machine_start_gcode": "G90 ; use absolute coordinates\nM83 ; extruder relative mode\nM204 P[machine_max_acceleration_extruding] R[machine_max_acceleration_retracting] T[machine_max_acceleration_travel]\nM104 S[nozzle_temperature_initial_layer] ; set extruder temp\nM140 S[bed_temperature_initial_layer_single] ; set bed temp\nG28 ; home all\nG1 Y1.0 Z0.3 F{travel_speed*60} ; move print head up\nM190 S[bed_temperature_initial_layer_single] ; wait for bed temp\nM109 S[nozzle_temperature_initial_layer] ; wait for extruder temp\nG92 E0.0\n; initial load\nG1 X205.0 E19 F1000\nG1 Y1.6\nG1 X5.0 E19 F1000\nG92 E0.0\n; intro line\nG1 Y2.0 Z0.2 F1000\nG1 X65.0 E9.0 F1000\nG1 X105.0 E12.5 F1000\nG92 E0.0", + "machine_end_gcode": "G1 E-1.0 F2100 ; retract\nG92 E0.0\nG1 X0{if max_layer_z < printable_height} Z{z_offset+min(max_layer_z+30, printable_height)}{endif} E-34.0 F{travel_speed*60} ; move print head up & retract filament\nG4 ; wait\nM104 S0 ; turn off temperature\nM140 S0 ; turn off heatbed\nM107 ; turn off fan\nG1 X0 Y105 F{travel_speed*60} ; park print head\nM84 ; disable motors", "before_layer_change_gcode": ";BEFORE_LAYER_CHANGE\nG92 E0.0\n;[layer_z]\n\n", "layer_change_gcode": ";AFTER_LAYER_CHANGE\n;[layer_z]", "scan_first_layer": "0" From 592402ea463784428d87e3d2effda1cb66e1431c Mon Sep 17 00:00:00 2001 From: Noisyfox Date: Sat, 25 Jan 2025 23:50:16 +0800 Subject: [PATCH 17/25] Fix custom profiles added/removed each other run (#8179) * Avoid updating same vendor multiple times and unnecessary version checks * Fix custom profiles added/removed each other run (SoftFever/OrcaSlicer#8094) Co-authored-by: Dima Buzdyk <46728448+buzzhuzz@users.noreply.github.com> --------- Co-authored-by: Dima Buzdyk <46728448+buzzhuzz@users.noreply.github.com> --- src/slic3r/Utils/PresetUpdater.cpp | 29 +++++++++++++++++------------ 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/src/slic3r/Utils/PresetUpdater.cpp b/src/slic3r/Utils/PresetUpdater.cpp index 41cd23acdd..89a7b58f90 100644 --- a/src/slic3r/Utils/PresetUpdater.cpp +++ b/src/slic3r/Utils/PresetUpdater.cpp @@ -226,7 +226,7 @@ struct PresetUpdater::priv bool get_cached_plugins_version(std::string &cached_version, bool& force); //BBS: refine preset update logic - bool install_bundles_rsrc(std::vector bundles, bool snapshot) const; + bool install_bundles_rsrc(const std::vector& bundles, bool snapshot) const; void check_installed_vendor_profiles() const; Updates get_printer_config_updates(bool update = false) const; Updates get_config_updates(const Semver& old_slic3r_version) const; @@ -1042,7 +1042,7 @@ void PresetUpdater::priv::sync_printer_config(std::string http_url) } } -bool PresetUpdater::priv::install_bundles_rsrc(std::vector bundles, bool snapshot) const +bool PresetUpdater::priv::install_bundles_rsrc(const std::vector& bundles, bool snapshot) const { Updates updates; @@ -1079,9 +1079,9 @@ void PresetUpdater::priv::check_installed_vendor_profiles() const AppConfig *app_config = GUI::wxGetApp().app_config; const auto enabled_vendors = app_config->vendors(); - std::vector bundles; + std::set bundles; // Orca: always install filament library - bundles.push_back(PresetBundle::ORCA_FILAMENT_LIBRARY); + bundles.insert(PresetBundle::ORCA_FILAMENT_LIBRARY); for (auto &dir_entry : boost::filesystem::directory_iterator(rsrc_path)) { const auto &path = dir_entry.path(); std::string file_path = path.string(); @@ -1090,9 +1090,13 @@ void PresetUpdater::priv::check_installed_vendor_profiles() const std::string vendor_name = path.filename().string(); // Remove the .json suffix. vendor_name.erase(vendor_name.size() - 5); + if (bundles.find(vendor_name) != bundles.end())continue; + + const auto is_vendor_enabled = (vendor_name == PresetBundle::ORCA_DEFAULT_BUNDLE) // always update configs from resource to vendor for ORCA_DEFAULT_BUNDLE + || (enabled_vendors.find(vendor_name) != enabled_vendors.end()); if (enabled_config_update) { if ( fs::exists(path_in_vendor)) { - if (enabled_vendors.find(vendor_name) != enabled_vendors.end()) { + if (is_vendor_enabled) { Semver resource_ver = get_version_from_json(file_path); Semver vendor_ver = get_version_from_json(path_in_vendor.string()); @@ -1100,7 +1104,7 @@ void PresetUpdater::priv::check_installed_vendor_profiles() const if (!version_match || (vendor_ver < resource_ver)) { BOOST_LOG_TRIVIAL(info) << "[Orca Updater]:found vendor "< 0) - install_bundles_rsrc(bundles, false); + if (bundles.size() > 0) { + install_bundles_rsrc(std::vector(bundles.begin(), bundles.end()), false); + } } Updates PresetUpdater::priv::get_printer_config_updates(bool update) const From b342cc6e20c0a97840d4e7a30d5bb447cada9f95 Mon Sep 17 00:00:00 2001 From: yw4z Date: Sun, 26 Jan 2025 03:53:28 +0300 Subject: [PATCH 18/25] Update logo usages on splash screen and about page (#8189) * Splash Logo * Update about page * remove comment --- resources/images/OrcaSlicer_about.svg | 538 +-------------------- resources/images/OrcaSlicer_about_dark.svg | 1 + resources/images/splash_logo.svg | 2 +- resources/images/splash_logo_dark.svg | 2 +- src/slic3r/GUI/AboutDialog.cpp | 36 +- 5 files changed, 22 insertions(+), 557 deletions(-) create mode 100644 resources/images/OrcaSlicer_about_dark.svg diff --git a/resources/images/OrcaSlicer_about.svg b/resources/images/OrcaSlicer_about.svg index 43d9bd4729..5b675c07f8 100644 --- a/resources/images/OrcaSlicer_about.svg +++ b/resources/images/OrcaSlicer_about.svg @@ -1,537 +1 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/resources/images/OrcaSlicer_about_dark.svg b/resources/images/OrcaSlicer_about_dark.svg new file mode 100644 index 0000000000..efff0dc6fc --- /dev/null +++ b/resources/images/OrcaSlicer_about_dark.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/images/splash_logo.svg b/resources/images/splash_logo.svg index 45a5b3be25..3bcd34637d 100644 --- a/resources/images/splash_logo.svg +++ b/resources/images/splash_logo.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/resources/images/splash_logo_dark.svg b/resources/images/splash_logo_dark.svg index 5ea2bebcbd..5caad657ed 100644 --- a/resources/images/splash_logo_dark.svg +++ b/resources/images/splash_logo_dark.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/src/slic3r/GUI/AboutDialog.cpp b/src/slic3r/GUI/AboutDialog.cpp index 435cc62bb4..05ffc67326 100644 --- a/src/slic3r/GUI/AboutDialog.cpp +++ b/src/slic3r/GUI/AboutDialog.cpp @@ -219,7 +219,7 @@ AboutDialog::AboutDialog() std::string icon_path = (boost::format("%1%/images/OrcaSlicerTitle.ico") % resources_dir()).str(); SetIcon(wxIcon(encode_path(icon_path.c_str()), wxBITMAP_TYPE_ICO)); - wxPanel *m_panel = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxSize(FromDIP(560), FromDIP(237)), wxTAB_TRAVERSAL); + wxPanel* m_panel = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxSize(FromDIP(560), FromDIP(125)), wxTAB_TRAVERSAL); wxBoxSizer *panel_versizer = new wxBoxSizer(wxVERTICAL); wxBoxSizer *vesizer = new wxBoxSizer(wxVERTICAL); @@ -232,8 +232,10 @@ AboutDialog::AboutDialog() main_sizer->Add(m_panel, 1, wxEXPAND | wxALL, 0); main_sizer->Add(ver_sizer, 0, wxEXPAND | wxALL, 0); + bool is_dark = wxGetApp().app_config->get("dark_color_mode") == "1"; + // logo - m_logo_bitmap = ScalableBitmap(this, "OrcaSlicer_about", 250); + m_logo_bitmap = ScalableBitmap(this, is_dark ? "OrcaSlicer_about" : "OrcaSlicer_about_dark", FromDIP(125)); m_logo = new wxStaticBitmap(this, wxID_ANY, m_logo_bitmap.bmp(), wxDefaultPosition,wxDefaultSize, 0); m_logo->SetSizer(vesizer); @@ -242,33 +244,31 @@ AboutDialog::AboutDialog() // version { - auto _build_string_font = Label::Body_10; + auto _build_string_font = Label::Body_12; // _build_string_font.SetStyle(wxFONTSTYLE_ITALIC); - vesizer->Add(0, FromDIP(165), 1, wxEXPAND, FromDIP(5)); - auto version_string = _L("Orca Slicer") + " " + std::string(SoftFever_VERSION); + vesizer->Add(0, 0, 1, wxEXPAND, FromDIP(5)); + auto version_string = std::string(SoftFever_VERSION); // _L("Orca Slicer ") + " " + std::string(SoftFever_VERSION); wxStaticText* version = new wxStaticText(this, wxID_ANY, version_string.c_str(), wxDefaultPosition, wxDefaultSize); - wxStaticText* credits_string = new wxStaticText(this, wxID_ANY, - wxString::Format("Build %s.\nOrcaSlicer is based on PrusaSlicer and BambuStudio", - std::string(GIT_COMMIT_HASH)), - wxDefaultPosition, wxDefaultSize); + wxStaticText* credits_string = new wxStaticText(this, wxID_ANY, wxString::Format("Build %s", std::string(GIT_COMMIT_HASH)), wxDefaultPosition, wxDefaultSize); credits_string->SetFont(_build_string_font); wxFont version_font = GetFont(); #ifdef __WXMSW__ - version_font.SetPointSize(version_font.GetPointSize()-1); + version_font.SetPointSize(version_font.GetPointSize()-1); #else version_font.SetPointSize(11); #endif - version_font.SetPointSize(FromDIP(16)); + version_font.SetPointSize(FromDIP(20)); version->SetFont(version_font); - version->SetForegroundColour(wxColour("#FFFFFD")); - credits_string->SetForegroundColour(wxColour("#FFFFFD")); - version->SetBackgroundColour(wxColour("#4d4d4d")); - credits_string->SetBackgroundColour(wxColour("#4d4d4d")); + version->SetForegroundColour(wxColour("#949494")); + credits_string->SetForegroundColour(wxColour("#949494")); + version->SetBackgroundColour(wxColour("#FFFFFF")); + credits_string->SetBackgroundColour(wxColour("#FFFFFF")); - vesizer->Add(version, 0, wxALL | wxALIGN_CENTER_HORIZONTAL, FromDIP(5)); - vesizer->Add(credits_string, 0, wxALL | wxALIGN_CENTER_HORIZONTAL, FromDIP(5)); -// #if BBL_INTERNAL_TESTING + vesizer->Add(version, 0, wxRIGHT | wxALIGN_RIGHT, FromDIP(20)); + vesizer->AddSpacer(FromDIP(5)); + vesizer->Add(credits_string, 0, wxRIGHT | wxALIGN_RIGHT, FromDIP(20)); + // #if BBL_INTERNAL_TESTING // wxString build_time = wxString::Format("Build Time: %s", std::string(SLIC3R_BUILD_TIME)); // wxStaticText* build_time_text = new wxStaticText(this, wxID_ANY, build_time, wxDefaultPosition, wxDefaultSize); // build_time_text->SetForegroundColour(wxColour("#FFFFFE")); From 1ebbb3958cc6b2b282256ce4c0e8f8783ad3a496 Mon Sep 17 00:00:00 2001 From: liberodark Date: Sun, 26 Jan 2025 01:55:59 +0100 Subject: [PATCH 19/25] Sovol SV06 ACE Reset wall_sequence (#8190) --- .../process/0.08mm High Quality @Sovol SV06 ACE 0.4 nozzle.json | 2 +- .../process/0.12mm Quality @Sovol SV06 ACE 0.4 nozzle.json | 2 +- .../process/0.12mm Standard @Sovol SV06 ACE 0.2 nozzle.json | 2 +- .../profiles/Sovol/process/0.20mm Standard @Sovol SV06 ACE.json | 2 +- .../Sovol/process/0.20mm Standard @Sovol SV06 Plus ACE.json | 2 +- .../Sovol/process/0.28mm Fast @Sovol SV06 ACE 0.4 nozzle.json | 2 +- .../process/0.30mm Standard @Sovol SV06 ACE 0.6 nozzle.json | 2 +- .../process/0.40mm Standard @Sovol SV06 ACE 0.8 nozzle.json | 2 +- 8 files changed, 8 insertions(+), 8 deletions(-) diff --git a/resources/profiles/Sovol/process/0.08mm High Quality @Sovol SV06 ACE 0.4 nozzle.json b/resources/profiles/Sovol/process/0.08mm High Quality @Sovol SV06 ACE 0.4 nozzle.json index ceccf574ed..d3afff8cf3 100644 --- a/resources/profiles/Sovol/process/0.08mm High Quality @Sovol SV06 ACE 0.4 nozzle.json +++ b/resources/profiles/Sovol/process/0.08mm High Quality @Sovol SV06 ACE 0.4 nozzle.json @@ -30,7 +30,7 @@ "precise_outer_wall": "1", "outer_wall_line_width": "0.4", "wall_infill_order": "inner wall/outer wall/infill", - "wall_sequence": "inner-outer-inner wall", + "wall_sequence": "inner wall/outer wall", "line_width": "0.4", "infill_direction": "45", "sparse_infill_density": "10%", diff --git a/resources/profiles/Sovol/process/0.12mm Quality @Sovol SV06 ACE 0.4 nozzle.json b/resources/profiles/Sovol/process/0.12mm Quality @Sovol SV06 ACE 0.4 nozzle.json index f67d1d699c..dcfff90f5b 100644 --- a/resources/profiles/Sovol/process/0.12mm Quality @Sovol SV06 ACE 0.4 nozzle.json +++ b/resources/profiles/Sovol/process/0.12mm Quality @Sovol SV06 ACE 0.4 nozzle.json @@ -30,7 +30,7 @@ "precise_outer_wall": "1", "outer_wall_line_width": "0.4", "wall_infill_order": "inner wall/outer wall/infill", - "wall_sequence": "inner-outer-inner wall", + "wall_sequence": "inner wall/outer wall", "line_width": "0.4", "infill_direction": "45", "sparse_infill_density": "10%", diff --git a/resources/profiles/Sovol/process/0.12mm Standard @Sovol SV06 ACE 0.2 nozzle.json b/resources/profiles/Sovol/process/0.12mm Standard @Sovol SV06 ACE 0.2 nozzle.json index 5a69751f77..999e183e97 100644 --- a/resources/profiles/Sovol/process/0.12mm Standard @Sovol SV06 ACE 0.2 nozzle.json +++ b/resources/profiles/Sovol/process/0.12mm Standard @Sovol SV06 ACE 0.2 nozzle.json @@ -30,7 +30,7 @@ "precise_outer_wall": "1", "outer_wall_line_width": "0.2", "wall_infill_order": "inner wall/outer wall/infill", - "wall_sequence": "inner-outer-inner wall", + "wall_sequence": "inner wall/outer wall", "line_width": "0.2", "infill_direction": "45", "sparse_infill_density": "10%", diff --git a/resources/profiles/Sovol/process/0.20mm Standard @Sovol SV06 ACE.json b/resources/profiles/Sovol/process/0.20mm Standard @Sovol SV06 ACE.json index 22dccda48e..bcf4911d39 100644 --- a/resources/profiles/Sovol/process/0.20mm Standard @Sovol SV06 ACE.json +++ b/resources/profiles/Sovol/process/0.20mm Standard @Sovol SV06 ACE.json @@ -30,7 +30,7 @@ "precise_outer_wall": "1", "outer_wall_line_width": "0.4", "wall_infill_order": "inner wall/outer wall/infill", - "wall_sequence": "inner-outer-inner wall", + "wall_sequence": "inner wall/outer wall", "line_width": "0.4", "infill_direction": "45", "sparse_infill_density": "10%", diff --git a/resources/profiles/Sovol/process/0.20mm Standard @Sovol SV06 Plus ACE.json b/resources/profiles/Sovol/process/0.20mm Standard @Sovol SV06 Plus ACE.json index 30a5e8cc66..98f8337726 100644 --- a/resources/profiles/Sovol/process/0.20mm Standard @Sovol SV06 Plus ACE.json +++ b/resources/profiles/Sovol/process/0.20mm Standard @Sovol SV06 Plus ACE.json @@ -30,7 +30,7 @@ "precise_outer_wall": "1", "outer_wall_line_width": "0.4", "wall_infill_order": "inner wall/outer wall/infill", - "wall_sequence": "inner-outer-inner wall", + "wall_sequence": "inner wall/outer wall", "line_width": "0.4", "infill_direction": "45", "sparse_infill_density": "10%", diff --git a/resources/profiles/Sovol/process/0.28mm Fast @Sovol SV06 ACE 0.4 nozzle.json b/resources/profiles/Sovol/process/0.28mm Fast @Sovol SV06 ACE 0.4 nozzle.json index 8880df809a..93d3f5810b 100644 --- a/resources/profiles/Sovol/process/0.28mm Fast @Sovol SV06 ACE 0.4 nozzle.json +++ b/resources/profiles/Sovol/process/0.28mm Fast @Sovol SV06 ACE 0.4 nozzle.json @@ -30,7 +30,7 @@ "precise_outer_wall": "1", "outer_wall_line_width": "0.4", "wall_infill_order": "inner wall/outer wall/infill", - "wall_sequence": "inner-outer-inner wall", + "wall_sequence": "inner wall/outer wall", "line_width": "0.4", "infill_direction": "45", "sparse_infill_density": "10%", diff --git a/resources/profiles/Sovol/process/0.30mm Standard @Sovol SV06 ACE 0.6 nozzle.json b/resources/profiles/Sovol/process/0.30mm Standard @Sovol SV06 ACE 0.6 nozzle.json index 4cf3aae54b..6ee3bf467d 100644 --- a/resources/profiles/Sovol/process/0.30mm Standard @Sovol SV06 ACE 0.6 nozzle.json +++ b/resources/profiles/Sovol/process/0.30mm Standard @Sovol SV06 ACE 0.6 nozzle.json @@ -30,7 +30,7 @@ "precise_outer_wall": "1", "outer_wall_line_width": "0.6", "wall_infill_order": "inner wall/outer wall/infill", - "wall_sequence": "inner-outer-inner wall", + "wall_sequence": "inner wall/outer wall", "line_width": "0.6", "infill_direction": "45", "sparse_infill_density": "10%", diff --git a/resources/profiles/Sovol/process/0.40mm Standard @Sovol SV06 ACE 0.8 nozzle.json b/resources/profiles/Sovol/process/0.40mm Standard @Sovol SV06 ACE 0.8 nozzle.json index 4893698c15..9703776c7f 100644 --- a/resources/profiles/Sovol/process/0.40mm Standard @Sovol SV06 ACE 0.8 nozzle.json +++ b/resources/profiles/Sovol/process/0.40mm Standard @Sovol SV06 ACE 0.8 nozzle.json @@ -30,7 +30,7 @@ "precise_outer_wall": "1", "outer_wall_line_width": "0.8", "wall_infill_order": "inner wall/outer wall/infill", - "wall_sequence": "inner-outer-inner wall", + "wall_sequence": "inner wall/outer wall", "line_width": "0.8", "infill_direction": "45", "sparse_infill_density": "10%", From 118e14d788b8c34700f5f6cef2bb66189329dca2 Mon Sep 17 00:00:00 2001 From: andrewleek Date: Sun, 26 Jan 2025 01:58:38 +0100 Subject: [PATCH 20/25] Gcode Statistics Panel Fixes (#8172) * Gcode Statistics Panel - Persist open/close state Bug: On slicing a model, the Statistics Panel would be reset to being open (regardless of if the user had shut it earlier) Fix: Now on app open the Statistics Panel will be open, but if the user closes it, its state will persist (regardless of slicing again) https://github.com/SoftFever/OrcaSlicer/discussions/6021 * Gcode Statistics Panel - fold/unfold button width fix Issue: The fold/unfold button width is too wide (It seems CalcTextSize is making the button wider than necessary) Fix: Set the width to a correct fixed value --- src/slic3r/GUI/GCodeViewer.cpp | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/slic3r/GUI/GCodeViewer.cpp b/src/slic3r/GUI/GCodeViewer.cpp index 0190594182..31eb38b728 100644 --- a/src/slic3r/GUI/GCodeViewer.cpp +++ b/src/slic3r/GUI/GCodeViewer.cpp @@ -1056,8 +1056,6 @@ void GCodeViewer::load(const GCodeProcessorResult& gcode_result, const Print& pr set_view_type(EViewType::ColorPrint); } - m_fold = false; - bool only_gcode_3mf = false; PartPlate* current_plate = wxGetApp().plater()->get_partplate_list().get_curr_plate(); bool current_has_print_instances = current_plate->has_printable_instances(); @@ -4644,15 +4642,15 @@ void GCodeViewer::render_legend(float &legend_height, int canvas_width, int canv ImGui::SameLine(); std::wstring btn_name; if (m_fold) - btn_name = ImGui::UnfoldButtonIcon + boost::nowide::widen(std::string("")); + btn_name = ImGui::UnfoldButtonIcon; else - btn_name = ImGui::FoldButtonIcon + boost::nowide::widen(std::string("")); + btn_name = ImGui::FoldButtonIcon; ImGui::PushStyleColor(ImGuiCol_Button, ImVec4(0, 0, 0, 0)); ImGui::PushStyleColor(ImGuiCol_ButtonHovered, ImVec4(0.0f, 0.59f, 0.53f, 1.00f)); ImGui::PushStyleColor(ImGuiCol_ButtonActive, ImVec4(0.0f, 0.59f, 0.53f, 0.78f)); ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, ImVec2(0.0f, 0.0f)); //ImGui::PushItemWidth( - float button_width = ImGui::CalcTextSize(into_u8(btn_name).c_str()).x; + float button_width = 34.0f; if (ImGui::Button(into_u8(btn_name).c_str(), ImVec2(button_width, 0))) { m_fold = !m_fold; } From fd0b2547f2ba74cc1ffef13ec99ac840911c2967 Mon Sep 17 00:00:00 2001 From: Nick Johnson Date: Mon, 27 Jan 2025 14:45:16 +0000 Subject: [PATCH 21/25] Add support for structured noise (perlin) fuzzy skin (#7678) * Add support for perlin noise fuzzy skin * Support multiple types of coherent noise * Updated tooltips for more clarity. * Reorder options as suggested by @discip * Fix accidental removal of & * Move libnoise to deps --------- Co-authored-by: SoftFever --- cmake/modules/Findlibnoise.cmake | 15 +++++ deps/CMakeLists.txt | 1 + deps/libnoise/libnoise.cmake | 4 ++ src/libslic3r/CMakeLists.txt | 3 +- src/libslic3r/LayerRegion.cpp | 1 + src/libslic3r/PerimeterGenerator.cpp | 86 +++++++++++++++++++++------ src/libslic3r/PerimeterGenerator.hpp | 21 ++++++- src/libslic3r/Preset.cpp | 2 +- src/libslic3r/PrintConfig.cpp | 60 +++++++++++++++++++ src/libslic3r/PrintConfig.hpp | 13 ++++ src/libslic3r/PrintObject.cpp | 4 ++ src/slic3r/CMakeLists.txt | 3 +- src/slic3r/GUI/ConfigManipulation.cpp | 7 ++- src/slic3r/GUI/Tab.cpp | 4 ++ 14 files changed, 200 insertions(+), 24 deletions(-) create mode 100644 cmake/modules/Findlibnoise.cmake create mode 100644 deps/libnoise/libnoise.cmake diff --git a/cmake/modules/Findlibnoise.cmake b/cmake/modules/Findlibnoise.cmake new file mode 100644 index 0000000000..70a5da951d --- /dev/null +++ b/cmake/modules/Findlibnoise.cmake @@ -0,0 +1,15 @@ +find_path(LIBNOISE_INCLUDE_DIR libnoise/noise.h) +find_library(LIBNOISE_LIBRARY NAMES libnoise libnoise_static) +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(libnoise DEFAULT_MSG + LIBNOISE_LIBRARY + LIBNOISE_INCLUDE_DIR +) + +if(libnoise_FOUND) + add_library(noise::noise STATIC IMPORTED) + set_target_properties(noise::noise PROPERTIES + IMPORTED_LOCATION "${LIBNOISE_LIBRARY}" + INTERFACE_INCLUDE_DIRECTORIES "${LIBNOISE_INCLUDE_DIR}" + ) +endif() \ No newline at end of file diff --git a/deps/CMakeLists.txt b/deps/CMakeLists.txt index 88915369f7..8b7dbe09e8 100644 --- a/deps/CMakeLists.txt +++ b/deps/CMakeLists.txt @@ -293,6 +293,7 @@ include(MPFR/MPFR.cmake) include(CGAL/CGAL.cmake) include(NLopt/NLopt.cmake) +include(libnoise/libnoise.cmake) # I *think* 1.1 is used for *just* md5 hashing? diff --git a/deps/libnoise/libnoise.cmake b/deps/libnoise/libnoise.cmake new file mode 100644 index 0000000000..0e19f26926 --- /dev/null +++ b/deps/libnoise/libnoise.cmake @@ -0,0 +1,4 @@ +orcaslicer_add_cmake_project(libnoise + URL https://github.com/SoftFever/Orca-deps-libnoise/archive/refs/tags/1.0.zip + URL_HASH SHA256=96ffd6cc47898dd8147aab53d7d1b1911b507d9dbaecd5613ca2649468afd8b6 +) \ No newline at end of file diff --git a/src/libslic3r/CMakeLists.txt b/src/libslic3r/CMakeLists.txt index ea08f39cfb..7c673231e0 100644 --- a/src/libslic3r/CMakeLists.txt +++ b/src/libslic3r/CMakeLists.txt @@ -550,7 +550,7 @@ set(OCCT_LIBS TKernel ) - +find_package(libnoise REQUIRED) target_link_libraries(libslic3r libnest2d admesh @@ -576,6 +576,7 @@ target_link_libraries(libslic3r JPEG::JPEG qoi opencv_world + noise::noise ) if(NOT WIN32) diff --git a/src/libslic3r/LayerRegion.cpp b/src/libslic3r/LayerRegion.cpp index ef5d325f56..60ba2721e3 100644 --- a/src/libslic3r/LayerRegion.cpp +++ b/src/libslic3r/LayerRegion.cpp @@ -87,6 +87,7 @@ void LayerRegion::make_perimeters(const SurfaceCollection &slices, const LayerRe &slices, &compatible_regions, this->layer()->height, + this->layer()->slice_z, this->flow(frPerimeter), ®ion_config, &this->layer()->object()->config(), diff --git a/src/libslic3r/PerimeterGenerator.cpp b/src/libslic3r/PerimeterGenerator.cpp index 624a710902..1ad1e5b909 100644 --- a/src/libslic3r/PerimeterGenerator.cpp +++ b/src/libslic3r/PerimeterGenerator.cpp @@ -22,6 +22,7 @@ #include "libslic3r/AABBTreeLines.hpp" #include "Print.hpp" #include "Algorithm/LineSplit.hpp" +#include "libnoise/noise.h" static const int overhang_sampling_number = 6; static const double narrow_loop_length_threshold = 10; static const double min_degree_gap = 0.1; @@ -44,6 +45,14 @@ static double random_value() { return dist(gen); } +class UniformNoise: public noise::module::Module { + public: + UniformNoise(): Module (GetSourceModuleCount ()) {}; + + virtual int GetSourceModuleCount() const { return 0; } + virtual double GetValue(double x, double y, double z) const { return random_value() * 2 - 1; } +}; + // Hierarchy of perimeters. class PerimeterGeneratorLoop { public: @@ -66,9 +75,39 @@ public: bool is_internal_contour() const; }; +static std::unique_ptr get_noise_module(const FuzzySkinConfig& cfg) { + if (cfg.noise_type == NoiseType::Perlin) { + auto perlin_noise = noise::module::Perlin(); + perlin_noise.SetFrequency(1 / cfg.noise_scale); + perlin_noise.SetOctaveCount(cfg.noise_octaves); + perlin_noise.SetPersistence(cfg.noise_persistence); + return std::make_unique(perlin_noise); + } else if (cfg.noise_type == NoiseType::Billow) { + auto billow_noise = noise::module::Billow(); + billow_noise.SetFrequency(1 / cfg.noise_scale); + billow_noise.SetOctaveCount(cfg.noise_octaves); + billow_noise.SetPersistence(cfg.noise_persistence); + return std::make_unique(billow_noise); + } else if (cfg.noise_type == NoiseType::RidgedMulti) { + auto ridged_multi_noise = noise::module::RidgedMulti(); + ridged_multi_noise.SetFrequency(1 / cfg.noise_scale); + ridged_multi_noise.SetOctaveCount(cfg.noise_octaves); + return std::make_unique(ridged_multi_noise); + } else if (cfg.noise_type == NoiseType::Voronoi) { + auto voronoi_noise = noise::module::Voronoi(); + voronoi_noise.SetFrequency(1 / cfg.noise_scale); + voronoi_noise.SetDisplacement(1.0); + return std::make_unique(voronoi_noise); + } else { + return std::make_unique(); + } +} + // Thanks Cura developers for this function. -static void fuzzy_polyline(Points& poly, bool closed, const FuzzySkinConfig& cfg) +static void fuzzy_polyline(Points& poly, bool closed, coordf_t slice_z, const FuzzySkinConfig& cfg) { + std::unique_ptr noise = get_noise_module(cfg); + const double min_dist_between_points = cfg.point_distance * 3. / 4.; // hardcoded: the point distance may vary between 3/4 and 5/4 the supplied value const double range_random_point_dist = cfg.point_distance / 2.; double dist_left_over = random_value() * (min_dist_between_points / 2.); // the distance to be traversed on the line before making the first new point @@ -90,8 +129,9 @@ static void fuzzy_polyline(Points& poly, bool closed, const FuzzySkinConfig& cfg for (; p0pa_dist < p0p1_size; p0pa_dist += min_dist_between_points + random_value() * range_random_point_dist) { - double r = random_value() * (cfg.thickness * 2.) - cfg.thickness; - out.emplace_back(*p0 + (p0p1 * (p0pa_dist / p0p1_size) + perp(p0p1).cast().normalized() * r).cast()); + Point pa = *p0 + (p0p1 * (p0pa_dist / p0p1_size)).cast(); + double r = noise->GetValue(unscale_(pa.x()), unscale_(pa.y()), slice_z) * cfg.thickness; + out.emplace_back(pa + (perp(p0p1).cast().normalized() * r).cast()); } dist_left_over = p0pa_dist - p0p1_size; p0 = &p1; @@ -108,8 +148,10 @@ static void fuzzy_polyline(Points& poly, bool closed, const FuzzySkinConfig& cfg } // Thanks Cura developers for this function. -static void fuzzy_extrusion_line(std::vector& ext_lines, const FuzzySkinConfig& cfg) +static void fuzzy_extrusion_line(std::vector& ext_lines, coordf_t slice_z, const FuzzySkinConfig& cfg) { + std::unique_ptr noise = get_noise_module(cfg); + const double min_dist_between_points = cfg.point_distance * 3. / 4.; // hardcoded: the point distance may vary between 3/4 and 5/4 the supplied value const double range_random_point_dist = cfg.point_distance / 2.; double dist_left_over = random_value() * (min_dist_between_points / 2.); // the distance to be traversed on the line before making the first new point @@ -128,8 +170,9 @@ static void fuzzy_extrusion_line(std::vector& ext_li double p0p1_size = p0p1.norm(); double p0pa_dist = dist_left_over; for (; p0pa_dist < p0p1_size; p0pa_dist += min_dist_between_points + random_value() * range_random_point_dist) { - double r = random_value() * (cfg.thickness * 2.) - cfg.thickness; - out.emplace_back(p0->p + (p0p1 * (p0pa_dist / p0p1_size) + perp(p0p1).cast().normalized() * r).cast(), p1.w, p1.perimeter_index); + Point pa = p0->p + (p0p1 * (p0pa_dist / p0p1_size)).cast(); + double r = noise->GetValue(unscale_(pa.x()), unscale_(pa.y()), slice_z) * cfg.thickness; + out.emplace_back(pa + (perp(p0p1).cast().normalized() * r).cast(), p1.w, p1.perimeter_index); } dist_left_over = p0pa_dist - p0p1_size; p0 = &p1; @@ -544,7 +587,7 @@ static ExtrusionEntityCollection traverse_loops(const PerimeterGenerator &perime } fuzzified = loop.polygon; - fuzzy_polyline(fuzzified.points, true, config); + fuzzy_polyline(fuzzified.points, true, perimeter_generator.slice_z, config); return &fuzzified; } @@ -589,16 +632,17 @@ static ExtrusionEntityCollection traverse_loops(const PerimeterGenerator &perime // Fuzzy splitted polygon if (std::all_of(splitted.begin(), splitted.end(), [](const Algorithm::SplitLineJunction& j) { return j.clipped; })) { // The entire polygon is fuzzified - fuzzy_polyline(fuzzified.points, true, r.first); + fuzzy_polyline(fuzzified.points, true, perimeter_generator.slice_z, r.first); } else { Points segment; segment.reserve(splitted.size()); fuzzified.points.clear(); - const auto fuzzy_current_segment = [&segment, &fuzzified, &r]() { + const auto slice_z = perimeter_generator.slice_z; + const auto fuzzy_current_segment = [&segment, &fuzzified, &r, slice_z]() { fuzzified.points.push_back(segment.front()); const auto back = segment.back(); - fuzzy_polyline(segment, false, r.first); + fuzzy_polyline(segment, false, slice_z, r.first); fuzzified.points.insert(fuzzified.points.end(), segment.begin(), segment.end()); fuzzified.points.push_back(back); segment.clear(); @@ -970,6 +1014,8 @@ static void smooth_overhang_level(ExtrusionPaths &paths) static ExtrusionEntityCollection traverse_extrusions(const PerimeterGenerator& perimeter_generator, std::vector& pg_extrusions, bool &steep_overhang_contour, bool &steep_overhang_hole) { + const auto slice_z = perimeter_generator.slice_z; + // Detect steep overhangs bool overhangs_reverse = perimeter_generator.config->overhang_reverse && perimeter_generator.layer_id % 2 == 1; // Only calculate overhang degree on even (from GUI POV) layers @@ -989,7 +1035,7 @@ static ExtrusionEntityCollection traverse_extrusions(const PerimeterGenerator& p const auto& config = regions.begin()->first; const bool fuzzify = should_fuzzify(config, perimeter_generator.layer_id, extrusion->inset_idx, is_contour); if (fuzzify) - fuzzy_extrusion_line(extrusion->junctions, config); + fuzzy_extrusion_line(extrusion.junctions, slice_z, config); } else { // Find all affective regions std::vector> fuzzified_regions; @@ -1011,19 +1057,19 @@ static ExtrusionEntityCollection traverse_extrusions(const PerimeterGenerator& p // Fuzzy splitted extrusion if (std::all_of(splitted.begin(), splitted.end(), [](const Algorithm::SplitLineJunction& j) { return j.clipped; })) { // The entire polygon is fuzzified - fuzzy_extrusion_line(extrusion->junctions, r.first); + fuzzy_extrusion_line(extrusion.junctions, slice_z, r.first); } else { const auto current_ext = extrusion->junctions; std::vector segment; segment.reserve(current_ext.size()); extrusion->junctions.clear(); - const auto fuzzy_current_segment = [&segment, extrusion, &r]() { - extrusion->junctions.push_back(segment.front()); + const auto fuzzy_current_segment = [&segment, &extrusion, &r, slice_z]() { + extrusion.junctions.push_back(segment.front()); const auto back = segment.back(); - fuzzy_extrusion_line(segment, r.first); - extrusion->junctions.insert(extrusion->junctions.end(), segment.begin(), segment.end()); - extrusion->junctions.push_back(back); + fuzzy_extrusion_line(segment, slice_z, r.first); + extrusion.junctions.insert(extrusion.junctions.end(), segment.begin(), segment.end()); + extrusion.junctions.push_back(back); segment.clear(); }; @@ -1858,7 +1904,11 @@ static void group_region_by_fuzzify(PerimeterGenerator& g) region_config.fuzzy_skin, scaled(region_config.fuzzy_skin_thickness.value), scaled(region_config.fuzzy_skin_point_distance.value), - region_config.fuzzy_skin_first_layer + region_config.fuzzy_skin_first_layer, + region_config.fuzzy_skin_noise_type, + region_config.fuzzy_skin_scale, + region_config.fuzzy_skin_octaves, + region_config.fuzzy_skin_persistence }; auto& surfaces = regions[cfg]; for (const auto& surface : region->slices.surfaces) { diff --git a/src/libslic3r/PerimeterGenerator.hpp b/src/libslic3r/PerimeterGenerator.hpp index 733920e310..0b79cc40c2 100644 --- a/src/libslic3r/PerimeterGenerator.hpp +++ b/src/libslic3r/PerimeterGenerator.hpp @@ -16,10 +16,21 @@ struct FuzzySkinConfig coord_t thickness; coord_t point_distance; bool fuzzy_first_layer; + NoiseType noise_type; + double noise_scale; + int noise_octaves; + double noise_persistence; bool operator==(const FuzzySkinConfig& r) const { - return type == r.type && thickness == r.thickness && point_distance == r.point_distance && fuzzy_first_layer == r.fuzzy_first_layer; + return type == r.type + && thickness == r.thickness + && point_distance == r.point_distance + && fuzzy_first_layer == r.fuzzy_first_layer + && noise_type == r.noise_type + && noise_scale == r.noise_scale + && noise_octaves == r.noise_octaves + && noise_persistence == r.noise_persistence; } bool operator!=(const FuzzySkinConfig& r) const { return !(*this == r); } @@ -35,6 +46,10 @@ template<> struct hash boost::hash_combine(seed, std::hash{}(c.thickness)); boost::hash_combine(seed, std::hash{}(c.point_distance)); boost::hash_combine(seed, std::hash{}(c.fuzzy_first_layer)); + boost::hash_combine(seed, std::hash{}(c.noise_type)); + boost::hash_combine(seed, std::hash{}(c.noise_scale)); + boost::hash_combine(seed, std::hash{}(c.noise_octaves)); + boost::hash_combine(seed, std::hash{}(c.noise_persistence)); return seed; } }; @@ -51,6 +66,7 @@ public: const ExPolygons *lower_slices; double layer_height; int layer_id; + coordf_t slice_z; Flow perimeter_flow; Flow ext_perimeter_flow; Flow overhang_flow; @@ -83,6 +99,7 @@ public: const SurfaceCollection* slices, const LayerRegionPtrs *compatible_regions, double layer_height, + coordf_t slice_z, Flow flow, const PrintRegionConfig* config, const PrintObjectConfig* object_config, @@ -98,7 +115,7 @@ public: //BBS ExPolygons* fill_no_overlap) : slices(slices), compatible_regions(compatible_regions), upper_slices(nullptr), lower_slices(nullptr), layer_height(layer_height), - layer_id(-1), perimeter_flow(flow), ext_perimeter_flow(flow), + slice_z(slice_z), layer_id(-1), perimeter_flow(flow), ext_perimeter_flow(flow), overhang_flow(flow), solid_infill_flow(flow), config(config), object_config(object_config), print_config(print_config), m_spiral_vase(spiral_mode), diff --git a/src/libslic3r/Preset.cpp b/src/libslic3r/Preset.cpp index ce108b8b2d..7ddb0884ed 100644 --- a/src/libslic3r/Preset.cpp +++ b/src/libslic3r/Preset.cpp @@ -789,7 +789,7 @@ static std::vector s_Preset_print_options { "minimum_sparse_infill_area", "reduce_infill_retraction","internal_solid_infill_pattern","gap_fill_target", "ironing_type", "ironing_pattern", "ironing_flow", "ironing_speed", "ironing_spacing", "ironing_angle", "ironing_inset", "max_travel_detour_distance", - "fuzzy_skin", "fuzzy_skin_thickness", "fuzzy_skin_point_distance", "fuzzy_skin_first_layer", + "fuzzy_skin", "fuzzy_skin_thickness", "fuzzy_skin_point_distance", "fuzzy_skin_first_layer", "fuzzy_skin_noise_type", "fuzzy_skin_scale", "fuzzy_skin_octaves", "fuzzy_skin_persistence", "max_volumetric_extrusion_rate_slope", "max_volumetric_extrusion_rate_slope_segment_length","extrusion_rate_smoothing_external_perimeter_only", "inner_wall_speed", "outer_wall_speed", "sparse_infill_speed", "internal_solid_infill_speed", "top_surface_speed", "support_speed", "support_object_xy_distance", "support_interface_speed", diff --git a/src/libslic3r/PrintConfig.cpp b/src/libslic3r/PrintConfig.cpp index b992fb237b..03573d08bd 100644 --- a/src/libslic3r/PrintConfig.cpp +++ b/src/libslic3r/PrintConfig.cpp @@ -123,6 +123,15 @@ static t_config_enum_values s_keys_map_FuzzySkinType { }; CONFIG_OPTION_ENUM_DEFINE_STATIC_MAPS(FuzzySkinType) +static t_config_enum_values s_keys_map_NoiseType { + { "classic", int(NoiseType::Classic) }, + { "perlin", int(NoiseType::Perlin) }, + { "billow", int(NoiseType::Billow) }, + { "ridgedmulti", int(NoiseType::RidgedMulti) }, + { "voronoi", int(NoiseType::Voronoi) } +}; +CONFIG_OPTION_ENUM_DEFINE_STATIC_MAPS(NoiseType) + static t_config_enum_values s_keys_map_InfillPattern { { "concentric", ipConcentric }, { "zig-zag", ipRectilinear }, @@ -2632,6 +2641,57 @@ void PrintConfigDef::init_fff_params() def->mode = comSimple; def->set_default_value(new ConfigOptionBool(0)); + def = this->add("fuzzy_skin_noise_type", coEnum); + def->label = L("Fuzzy skin noise type"); + def->category = L("Others"); + def->tooltip = L("Noise type to use for fuzzy skin generation.\n" + "Classic: Classic uniform random noise.\n" + "Perlin: Perlin noise, which gives a more consistent texture.\n" + "Billow: Similar to perlin noise, but clumpier.\n" + "Ridged Multifractal: Ridged noise with sharp, jagged features. Creates marble-like textures.\n" + "Voronoi: Divides the surface into voronoi cells, and displaces each one by a random amount. Creates a patchwork texture."); + def->enum_keys_map = &ConfigOptionEnum::get_enum_values(); + def->enum_values.push_back("classic"); + def->enum_values.push_back("perlin"); + def->enum_values.push_back("billow"); + def->enum_values.push_back("ridgedmulti"); + def->enum_values.push_back("voronoi"); + def->enum_labels.push_back(L("Classic")); + def->enum_labels.push_back(L("Perlin")); + def->enum_labels.push_back(L("Billow")); + def->enum_labels.push_back(L("Ridged Multifractal")); + def->enum_labels.push_back(L("Voronoi")); + def->mode = comSimple; + def->set_default_value(new ConfigOptionEnum(NoiseType::Classic)); + + def = this->add("fuzzy_skin_scale", coFloat); + def->label = L("Fuzzy skin feature size"); + def->category = L("Others"); + def->tooltip = L("The base size of the coherent noise features, in mm. Higher values will result in larger features."); + def->sidetext = L("mm"); + def->min = 0.1; + def->max = 500; + def->mode = comAdvanced; + def->set_default_value(new ConfigOptionFloat(1.0)); + + def = this->add("fuzzy_skin_octaves", coInt); + def->label = L("Fuzzy Skin Noise Octaves"); + def->category = L("Others"); + def->tooltip = L("The number of octaves of coherent noise to use. Higher values increase the detail of the noise, but also increase computation time."); + def->min = 1; + def->max = 10; + def->mode = comAdvanced; + def->set_default_value(new ConfigOptionInt(4)); + + def = this->add("fuzzy_skin_persistence", coFloat); + def->label = L("Fuzzy skin noise persistence"); + def->category = L("Others"); + def->tooltip = L("The decay rate for higher octaves of the coherent noise. Lower values will result in smoother noise."); + def->min = 0.01; + def->max = 1; + def->mode = comAdvanced; + def->set_default_value(new ConfigOptionFloat(0.5)); + def = this->add("filter_out_gap_fill", coFloat); def->label = L("Filter out tiny gaps"); def->category = L("Layers and Perimeters"); diff --git a/src/libslic3r/PrintConfig.hpp b/src/libslic3r/PrintConfig.hpp index 88cc8438bf..33a0e7eabf 100644 --- a/src/libslic3r/PrintConfig.hpp +++ b/src/libslic3r/PrintConfig.hpp @@ -41,6 +41,14 @@ enum class FuzzySkinType { AllWalls, }; +enum class NoiseType { + Classic, + Perlin, + Billow, + RidgedMulti, + Voronoi, +}; + enum PrintHostType { htPrusaLink, htPrusaConnect, htOctoPrint, htDuet, htFlashAir, htAstroBox, htRepetier, htMKS, htESP3D, htCrealityPrint, htObico, htFlashforge, htSimplyPrint }; @@ -402,6 +410,7 @@ static std::string get_bed_temp_1st_layer_key(const BedType type) CONFIG_OPTION_ENUM_DECLARE_STATIC_MAPS(PrinterTechnology) CONFIG_OPTION_ENUM_DECLARE_STATIC_MAPS(GCodeFlavor) CONFIG_OPTION_ENUM_DECLARE_STATIC_MAPS(FuzzySkinType) +CONFIG_OPTION_ENUM_DECLARE_STATIC_MAPS(NoiseType) CONFIG_OPTION_ENUM_DECLARE_STATIC_MAPS(InfillPattern) CONFIG_OPTION_ENUM_DECLARE_STATIC_MAPS(IroningType) CONFIG_OPTION_ENUM_DECLARE_STATIC_MAPS(SlicingMode) @@ -917,6 +926,10 @@ PRINT_CONFIG_CLASS_DEFINE( ((ConfigOptionFloat, fuzzy_skin_thickness)) ((ConfigOptionFloat, fuzzy_skin_point_distance)) ((ConfigOptionBool, fuzzy_skin_first_layer)) + ((ConfigOptionEnum, fuzzy_skin_noise_type)) + ((ConfigOptionFloat, fuzzy_skin_scale)) + ((ConfigOptionInt, fuzzy_skin_octaves)) + ((ConfigOptionFloat, fuzzy_skin_persistence)) ((ConfigOptionFloat, gap_infill_speed)) ((ConfigOptionInt, sparse_infill_filament)) ((ConfigOptionFloatOrPercent, sparse_infill_line_width)) diff --git a/src/libslic3r/PrintObject.cpp b/src/libslic3r/PrintObject.cpp index 0c5d78de77..b76eaa4574 100644 --- a/src/libslic3r/PrintObject.cpp +++ b/src/libslic3r/PrintObject.cpp @@ -1117,6 +1117,10 @@ bool PrintObject::invalidate_state_by_config_options( || opt_key == "fuzzy_skin_thickness" || opt_key == "fuzzy_skin_point_distance" || opt_key == "fuzzy_skin_first_layer" + || opt_key == "fuzzy_skin_noise_type" + || opt_key == "fuzzy_skin_scale" + || opt_key == "fuzzy_skin_octaves" + || opt_key == "fuzzy_skin_persistence" || opt_key == "detect_overhang_wall" || opt_key == "overhang_reverse" || opt_key == "overhang_reverse_internal_only" diff --git a/src/slic3r/CMakeLists.txt b/src/slic3r/CMakeLists.txt index 10d3f37648..3de396c9d0 100644 --- a/src/slic3r/CMakeLists.txt +++ b/src/slic3r/CMakeLists.txt @@ -616,7 +616,8 @@ source_group(TREE ${CMAKE_CURRENT_SOURCE_DIR} FILES ${SLIC3R_GUI_SOURCES}) encoding_check(libslic3r_gui) -target_link_libraries(libslic3r_gui libslic3r cereal::cereal imgui imguizmo minilzo GLEW::GLEW OpenGL::GL hidapi ${wxWidgets_LIBRARIES} glfw libcurl OpenSSL::SSL OpenSSL::Crypto) +find_package(libnoise REQUIRED) +target_link_libraries(libslic3r_gui libslic3r cereal::cereal imgui imguizmo minilzo GLEW::GLEW OpenGL::GL hidapi ${wxWidgets_LIBRARIES} glfw libcurl OpenSSL::SSL OpenSSL::Crypto noise::noise) if (MSVC) target_link_libraries(libslic3r_gui Setupapi.lib) diff --git a/src/slic3r/GUI/ConfigManipulation.cpp b/src/slic3r/GUI/ConfigManipulation.cpp index 44ed3da012..a376aa7f1f 100644 --- a/src/slic3r/GUI/ConfigManipulation.cpp +++ b/src/slic3r/GUI/ConfigManipulation.cpp @@ -708,9 +708,14 @@ void ConfigManipulation::toggle_print_fff_options(DynamicPrintConfig *config, co toggle_line("support_interface_not_for_body",config->opt_int("support_interface_filament")&&!config->opt_int("support_filament")); bool has_fuzzy_skin = (config->opt_enum("fuzzy_skin") != FuzzySkinType::None); - for (auto el : { "fuzzy_skin_thickness", "fuzzy_skin_point_distance", "fuzzy_skin_first_layer"}) + for (auto el : { "fuzzy_skin_thickness", "fuzzy_skin_point_distance", "fuzzy_skin_first_layer", "fuzzy_skin_noise_type"}) toggle_line(el, has_fuzzy_skin); + NoiseType fuzzy_skin_noise_type = config->opt_enum("fuzzy_skin_noise_type"); + toggle_line("fuzzy_skin_scale", has_fuzzy_skin && fuzzy_skin_noise_type != NoiseType::Classic); + toggle_line("fuzzy_skin_octaves", has_fuzzy_skin && fuzzy_skin_noise_type != NoiseType::Classic && fuzzy_skin_noise_type != NoiseType::Voronoi); + toggle_line("fuzzy_skin_persistence", has_fuzzy_skin && (fuzzy_skin_noise_type == NoiseType::Perlin || fuzzy_skin_noise_type == NoiseType::Billow)); + bool have_arachne = config->opt_enum("wall_generator") == PerimeterGeneratorType::Arachne; for (auto el : { "wall_transition_length", "wall_transition_filter_deviation", "wall_transition_angle", "min_feature_size", "min_length_factor", "min_bead_width", "wall_distribution_count", "initial_layer_min_bead_width"}) diff --git a/src/slic3r/GUI/Tab.cpp b/src/slic3r/GUI/Tab.cpp index 78162dfb6d..fea8908d75 100644 --- a/src/slic3r/GUI/Tab.cpp +++ b/src/slic3r/GUI/Tab.cpp @@ -2352,8 +2352,12 @@ page = add_options_page(L("Others"), "custom-gcode_other"); // ORCA: icon only v optgroup->append_single_option_line("timelapse_type", "Timelapse"); optgroup->append_single_option_line("fuzzy_skin"); + optgroup->append_single_option_line("fuzzy_skin_noise_type"); optgroup->append_single_option_line("fuzzy_skin_point_distance"); optgroup->append_single_option_line("fuzzy_skin_thickness"); + optgroup->append_single_option_line("fuzzy_skin_scale"); + optgroup->append_single_option_line("fuzzy_skin_octaves"); + optgroup->append_single_option_line("fuzzy_skin_persistence"); optgroup->append_single_option_line("fuzzy_skin_first_layer"); optgroup = page->new_optgroup(L("G-code output"), L"param_gcode"); From 6ed68342e05b9b597be25efe94abd780ac783591 Mon Sep 17 00:00:00 2001 From: SoftFever Date: Tue, 28 Jan 2025 01:07:27 +0800 Subject: [PATCH 22/25] fix build errors (#8210) * fix build errors * fix windows * fix flatpak --- .github/workflows/build_deps.yml | 5 ----- cmake/modules/Findlibnoise.cmake | 2 +- deps/CMakeLists.txt | 1 + flatpak/io.github.softfever.OrcaSlicer.yml | 5 +++++ src/libslic3r/PerimeterGenerator.cpp | 10 +++++----- 5 files changed, 12 insertions(+), 11 deletions(-) diff --git a/.github/workflows/build_deps.yml b/.github/workflows/build_deps.yml index e9ce9a8563..163cbca23c 100644 --- a/.github/workflows/build_deps.yml +++ b/.github/workflows/build_deps.yml @@ -66,11 +66,6 @@ jobs: working-directory: ${{ github.workspace }} run: | choco install strawberryperl - $Folder = ${{ github.workspace }}/deps/build - if (!(Test-Path -Path $Folder)) { - mkdir ${{ github.workspace }}/deps/build - mkdir ${{ github.workspace }}/deps/build/OrcaSlicer_dep - } .\build_release_vs2022.bat deps .\build_release_vs2022.bat pack cd ${{ github.workspace }}/deps/build diff --git a/cmake/modules/Findlibnoise.cmake b/cmake/modules/Findlibnoise.cmake index 70a5da951d..f40ce0fabd 100644 --- a/cmake/modules/Findlibnoise.cmake +++ b/cmake/modules/Findlibnoise.cmake @@ -1,5 +1,5 @@ find_path(LIBNOISE_INCLUDE_DIR libnoise/noise.h) -find_library(LIBNOISE_LIBRARY NAMES libnoise libnoise_static) +find_library(LIBNOISE_LIBRARY NAMES libnoise libnoise_static liblibnoise_static) include(FindPackageHandleStandardArgs) find_package_handle_standard_args(libnoise DEFAULT_MSG LIBNOISE_LIBRARY diff --git a/deps/CMakeLists.txt b/deps/CMakeLists.txt index 8b7dbe09e8..77cae3382b 100644 --- a/deps/CMakeLists.txt +++ b/deps/CMakeLists.txt @@ -361,6 +361,7 @@ set(_dep_list ${PNG_PKG} ${ZLIB_PKG} ${EXPAT_PKG} + dep_libnoise ) if (MSVC) diff --git a/flatpak/io.github.softfever.OrcaSlicer.yml b/flatpak/io.github.softfever.OrcaSlicer.yml index c613acf425..73ab58b17d 100755 --- a/flatpak/io.github.softfever.OrcaSlicer.yml +++ b/flatpak/io.github.softfever.OrcaSlicer.yml @@ -260,6 +260,11 @@ modules: url: https://github.com/glfw/glfw/archive/refs/tags/3.3.7.zip dest: external-packages/GLFW sha256: e02d956935e5b9fb4abf90e2c2e07c9a0526d7eacae8ee5353484c69a2a76cd0 + # libnoise + - type: file + url: https://github.com/SoftFever/Orca-deps-libnoise/archive/refs/tags/1.0.zip + dest: external-packages/libnoise + sha256: 96ffd6cc47898dd8147aab53d7d1b1911b507d9dbaecd5613ca2649468afd8b6 - name: OrcaSlicer buildsystem: simple diff --git a/src/libslic3r/PerimeterGenerator.cpp b/src/libslic3r/PerimeterGenerator.cpp index 1ad1e5b909..99ab5a6e0a 100644 --- a/src/libslic3r/PerimeterGenerator.cpp +++ b/src/libslic3r/PerimeterGenerator.cpp @@ -1035,7 +1035,7 @@ static ExtrusionEntityCollection traverse_extrusions(const PerimeterGenerator& p const auto& config = regions.begin()->first; const bool fuzzify = should_fuzzify(config, perimeter_generator.layer_id, extrusion->inset_idx, is_contour); if (fuzzify) - fuzzy_extrusion_line(extrusion.junctions, slice_z, config); + fuzzy_extrusion_line(extrusion->junctions, slice_z, config); } else { // Find all affective regions std::vector> fuzzified_regions; @@ -1057,7 +1057,7 @@ static ExtrusionEntityCollection traverse_extrusions(const PerimeterGenerator& p // Fuzzy splitted extrusion if (std::all_of(splitted.begin(), splitted.end(), [](const Algorithm::SplitLineJunction& j) { return j.clipped; })) { // The entire polygon is fuzzified - fuzzy_extrusion_line(extrusion.junctions, slice_z, r.first); + fuzzy_extrusion_line(extrusion->junctions, slice_z, r.first); } else { const auto current_ext = extrusion->junctions; std::vector segment; @@ -1065,11 +1065,11 @@ static ExtrusionEntityCollection traverse_extrusions(const PerimeterGenerator& p extrusion->junctions.clear(); const auto fuzzy_current_segment = [&segment, &extrusion, &r, slice_z]() { - extrusion.junctions.push_back(segment.front()); + extrusion->junctions.push_back(segment.front()); const auto back = segment.back(); fuzzy_extrusion_line(segment, slice_z, r.first); - extrusion.junctions.insert(extrusion.junctions.end(), segment.begin(), segment.end()); - extrusion.junctions.push_back(back); + extrusion->junctions.insert(extrusion->junctions.end(), segment.begin(), segment.end()); + extrusion->junctions.push_back(back); segment.clear(); }; From f620879eb5104b8198fbc1ee2a9a04a6e2912382 Mon Sep 17 00:00:00 2001 From: Toure Dunnon Date: Tue, 28 Jan 2025 02:34:29 -0500 Subject: [PATCH 23/25] Fix: URL-encode password in Duet::get_connect_url (#8215) Signed-off-by: Toure Dunnon --- src/slic3r/Utils/Duet.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/slic3r/Utils/Duet.cpp b/src/slic3r/Utils/Duet.cpp index 92c8b1911c..1a4974a957 100644 --- a/src/slic3r/Utils/Duet.cpp +++ b/src/slic3r/Utils/Duet.cpp @@ -205,7 +205,7 @@ std::string Duet::get_connect_url(const bool dsfUrl) const } else { return (boost::format("%1%rr_connect?password=%2%&%3%") % get_base_url() - % (password.empty() ? "reprap" : password) + % Http::url_encode(password.empty() ? "reprap" : password) // url_encode is needed because password can contain special characters like `&`, "#", etc. % timestamp_str()).str(); } } From 1fc64c55a8e605b313b1b62462659c0b6d5d3c6a Mon Sep 17 00:00:00 2001 From: Thomas Date: Tue, 28 Jan 2025 08:38:44 +0100 Subject: [PATCH 24/25] QOL fix : Removed filament_density: 0 from Kobra 3 profiles (fixes #7367) (#8209) Removed filament_density: 0 from Kobra 3 profiles (fixes #7367) --- .../filament/Anycubic PETG @Anycubic Kobra 3 0.4 nozzle.json | 3 --- .../filament/Generic ABS @Anycubic Kobra 3 0.4 nozzle.json | 3 --- .../filament/Generic TPU @Anycubic Kobra 3 0.4 nozzle.json | 3 --- 3 files changed, 9 deletions(-) diff --git a/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra 3 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra 3 0.4 nozzle.json index 045909f8a0..bf4ec872a1 100644 --- a/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra 3 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Anycubic PETG @Anycubic Kobra 3 0.4 nozzle.json @@ -91,9 +91,6 @@ "filament_cost": [ "0" ], - "filament_density": [ - "0" - ], "filament_deretraction_speed": [ "80" ], diff --git a/resources/profiles/Anycubic/filament/Generic ABS @Anycubic Kobra 3 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Generic ABS @Anycubic Kobra 3 0.4 nozzle.json index f750630fb6..4ff125b1e9 100644 --- a/resources/profiles/Anycubic/filament/Generic ABS @Anycubic Kobra 3 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Generic ABS @Anycubic Kobra 3 0.4 nozzle.json @@ -91,9 +91,6 @@ "filament_cost": [ "0" ], - "filament_density": [ - "0" - ], "filament_deretraction_speed": [ "80" ], diff --git a/resources/profiles/Anycubic/filament/Generic TPU @Anycubic Kobra 3 0.4 nozzle.json b/resources/profiles/Anycubic/filament/Generic TPU @Anycubic Kobra 3 0.4 nozzle.json index 989e5d9fff..b3dfccd36f 100644 --- a/resources/profiles/Anycubic/filament/Generic TPU @Anycubic Kobra 3 0.4 nozzle.json +++ b/resources/profiles/Anycubic/filament/Generic TPU @Anycubic Kobra 3 0.4 nozzle.json @@ -91,9 +91,6 @@ "filament_cost": [ "0" ], - "filament_density": [ - "0" - ], "filament_deretraction_speed": [ "25" ], From 4d762c4e91f33a33442b3725ef17d5d323db62d5 Mon Sep 17 00:00:00 2001 From: Thomas Date: Tue, 28 Jan 2025 08:39:22 +0100 Subject: [PATCH 25/25] Added missing filament_start_gcode to Creality Hi (#8203) --- .../profiles/Creality/filament/Creality Generic ABS @Hi-all.json | 1 + .../profiles/Creality/filament/Creality Generic ASA @Hi-all.json | 1 + .../Creality/filament/Creality Generic PETG @Hi-all.json | 1 + .../profiles/Creality/filament/Creality Generic PLA @Hi-all.json | 1 + .../profiles/Creality/filament/Creality Generic TPU @Hi-all.json | 1 + 5 files changed, 5 insertions(+) diff --git a/resources/profiles/Creality/filament/Creality Generic ABS @Hi-all.json b/resources/profiles/Creality/filament/Creality Generic ABS @Hi-all.json index 13fbd8c737..4f30a0525a 100644 --- a/resources/profiles/Creality/filament/Creality Generic ABS @Hi-all.json +++ b/resources/profiles/Creality/filament/Creality Generic ABS @Hi-all.json @@ -7,6 +7,7 @@ "inherits": "Creality Generic ABS", "filament_max_volumetric_speed": ["9"], "slow_down_layer_time": ["5"], + "filament_start_gcode": ["; filament start gcode\n{if (position[2] > first_layer_height) }\nM104 S[nozzle_temperature]\n{else}\nM104 S[first_layer_temperature]\n{endif}\n"], "compatible_printers": [ "Creality Hi 0.4 nozzle", "Creality Hi 0.6 nozzle" diff --git a/resources/profiles/Creality/filament/Creality Generic ASA @Hi-all.json b/resources/profiles/Creality/filament/Creality Generic ASA @Hi-all.json index 7e229dc729..d73dc9a05b 100644 --- a/resources/profiles/Creality/filament/Creality Generic ASA @Hi-all.json +++ b/resources/profiles/Creality/filament/Creality Generic ASA @Hi-all.json @@ -7,6 +7,7 @@ "inherits": "Creality Generic ASA", "filament_max_volumetric_speed": ["9"], "slow_down_layer_time": ["5"], + "filament_start_gcode": ["; filament start gcode\n{if (position[2] > first_layer_height) }\nM104 S[nozzle_temperature]\n{else}\nM104 S[first_layer_temperature]\n{endif}\n"], "compatible_printers": [ "Creality Hi 0.4 nozzle", "Creality Hi 0.6 nozzle" diff --git a/resources/profiles/Creality/filament/Creality Generic PETG @Hi-all.json b/resources/profiles/Creality/filament/Creality Generic PETG @Hi-all.json index 11a699ef25..a5d13fd022 100644 --- a/resources/profiles/Creality/filament/Creality Generic PETG @Hi-all.json +++ b/resources/profiles/Creality/filament/Creality Generic PETG @Hi-all.json @@ -17,6 +17,7 @@ "textured_plate_temp_initial_layer" : ["70"], "nozzle_temperature_initial_layer": ["250"], "nozzle_temperature": ["250"], + "filament_start_gcode": ["; filament start gcode\n{if (position[2] > first_layer_height) }\nM104 S[nozzle_temperature]\n{else}\nM104 S[first_layer_temperature]\n{endif}\n"], "compatible_printers": [ "Creality Hi 0.4 nozzle", "Creality Hi 0.6 nozzle" diff --git a/resources/profiles/Creality/filament/Creality Generic PLA @Hi-all.json b/resources/profiles/Creality/filament/Creality Generic PLA @Hi-all.json index dd1da0b595..39ff7bf9c8 100644 --- a/resources/profiles/Creality/filament/Creality Generic PLA @Hi-all.json +++ b/resources/profiles/Creality/filament/Creality Generic PLA @Hi-all.json @@ -86,6 +86,7 @@ "filament_ramming_parameters": [ "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0| 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6" ], + "filament_start_gcode": ["; filament start gcode\n{if (position[2] > first_layer_height) }\nM104 S[nozzle_temperature]\n{else}\nM104 S[first_layer_temperature]\n{endif}\n"], "compatible_printers": [ "Creality Hi 0.4 nozzle", "Creality Hi 0.6 nozzle" diff --git a/resources/profiles/Creality/filament/Creality Generic TPU @Hi-all.json b/resources/profiles/Creality/filament/Creality Generic TPU @Hi-all.json index f34d8600c3..f98b6f6571 100644 --- a/resources/profiles/Creality/filament/Creality Generic TPU @Hi-all.json +++ b/resources/profiles/Creality/filament/Creality Generic TPU @Hi-all.json @@ -29,6 +29,7 @@ "slow_down_layer_time": [ "5" ], + "filament_start_gcode": ["; filament start gcode\n{if (position[2] > first_layer_height) }\nM104 S[nozzle_temperature]\n{else}\nM104 S[first_layer_temperature]\n{endif}\n"], "compatible_printers": [ "Creality Hi 0.4 nozzle", "Creality Hi 0.6 nozzle"