diff --git a/localization/i18n/cs/OrcaSlicer_cs.po b/localization/i18n/cs/OrcaSlicer_cs.po index 2ce84a0cde1..719189a6fd9 100644 --- a/localization/i18n/cs/OrcaSlicer_cs.po +++ b/localization/i18n/cs/OrcaSlicer_cs.po @@ -11072,7 +11072,7 @@ msgid "Gizmo assemble" msgstr "Gizmo sestavit" msgid "Gizmo brim ears" -msgstr "Gizmo přídavky okraje (uši)" +msgstr "Gizmo ouška lemu" msgid "Zoom in" msgstr "Přiblížit" @@ -12583,13 +12583,13 @@ msgstr "" "průtokovým poměrem filamentu a případně průtokovým poměrem objektu." msgid "Set other flow ratios" -msgstr "Set other flow ratios" +msgstr "Nastavit další poměry průtoku" msgid "Change flow ratios for other extrusion path types." -msgstr "Change flow ratios for other extrusion path types." +msgstr "Změnit poměry průtoku pro další typy extruzních drah." msgid "First layer flow ratio" -msgstr "First layer flow ratio" +msgstr "Poměr průtoku první vrstvy" msgid "" "This factor affects the amount of material on the first layer for the " @@ -12598,14 +12598,14 @@ msgid "" "For the first layer, the actual flow ratio for each path role (does not " "affect brims and skirts) will be multiplied by this value." msgstr "" -"This factor affects the amount of material on the first layer for the " -"extrusion path roles listed in this section.\n" +"Tento faktor ovlivňuje množství materiálu na první vrstvě pro role extruzních " +"drah uvedené v této sekci.\n" "\n" -"For the first layer, the actual flow ratio for each path role (does not " -"affect brims and skirts) will be multiplied by this value." +"Pro první vrstvu bude skutečný poměr průtoku pro každou roli dráhy (neovlivňuje " +"lem a sukni) vynásoben touto hodnotou." msgid "Outer wall flow ratio" -msgstr "Outer wall flow ratio" +msgstr "Poměr průtoku vnější stěny" msgid "" "This factor affects the amount of material for outer walls.\n" @@ -12613,13 +12613,13 @@ msgid "" "The actual outer wall flow used is calculated by multiplying this value by " "the filament flow ratio, and if set, the object's flow ratio." msgstr "" -"This factor affects the amount of material for outer walls.\n" +"Tento faktor ovlivňuje množství materiálu pro vnější stěny.\n" "\n" -"The actual outer wall flow used is calculated by multiplying this value by " -"the filament flow ratio, and if set, the object's flow ratio." +"Skutečný průtok pro vnější stěny se vypočítá vynásobením této hodnoty " +"poměrem průtoku filamentu a případně také poměrem průtoku objektu." msgid "Inner wall flow ratio" -msgstr "Inner wall flow ratio" +msgstr "Poměr průtoku vnitřní stěny" msgid "" "This factor affects the amount of material for inner walls.\n" @@ -12627,13 +12627,13 @@ msgid "" "The actual inner wall flow used is calculated by multiplying this value by " "the filament flow ratio, and if set, the object's flow ratio." msgstr "" -"This factor affects the amount of material for inner walls.\n" +"Tento faktor ovlivňuje množství materiálu pro vnitřní stěny.\n" "\n" -"The actual inner wall flow used is calculated by multiplying this value by " -"the filament flow ratio, and if set, the object's flow ratio." +"Skutečný průtok pro vnitřní stěny se vypočítá vynásobením této hodnoty " +"poměrem průtoku filamentu a případně také poměrem průtoku objektu." msgid "Overhang flow ratio" -msgstr "Overhang flow ratio" +msgstr "Poměr průtoku převisů" msgid "" "This factor affects the amount of material for overhangs.\n" @@ -12641,13 +12641,13 @@ msgid "" "The actual overhang flow used is calculated by multiplying this value by the " "filament flow ratio, and if set, the object's flow ratio." msgstr "" -"This factor affects the amount of material for overhangs.\n" +"Tento faktor ovlivňuje množství materiálu pro převisy.\n" "\n" -"The actual overhang flow used is calculated by multiplying this value by the " -"filament flow ratio, and if set, the object's flow ratio." +"Skutečný průtok pro převisy se vypočítá vynásobením této hodnoty " +"poměrem průtoku filamentu a případně také poměrem průtoku objektu." msgid "Sparse infill flow ratio" -msgstr "Sparse infill flow ratio" +msgstr "Poměr průtoku řídké výplně" msgid "" "This factor affects the amount of material for sparse infill.\n" @@ -12655,13 +12655,13 @@ msgid "" "The actual sparse infill flow used is calculated by multiplying this value " "by the filament flow ratio, and if set, the object's flow ratio." msgstr "" -"This factor affects the amount of material for sparse infill.\n" +"Tento faktor ovlivňuje množství materiálu pro řídkou výplň.\n" "\n" -"The actual sparse infill flow used is calculated by multiplying this value " -"by the filament flow ratio, and if set, the object's flow ratio." +"Skutečný průtok pro řídkou výplň se vypočítá vynásobením této hodnoty " +"poměrem průtoku filamentu a případně také poměrem průtoku objektu." msgid "Internal solid infill flow ratio" -msgstr "Internal solid infill flow ratio" +msgstr "Poměr průtoku vnitřní plné výplně" msgid "" "This factor affects the amount of material for internal solid infill.\n" @@ -12669,13 +12669,13 @@ msgid "" "The actual internal solid infill flow used is calculated by multiplying this " "value by the filament flow ratio, and if set, the object's flow ratio." msgstr "" -"This factor affects the amount of material for internal solid infill.\n" +"Tento faktor ovlivňuje množství materiálu pro vnitřní plnou výplň.\n" "\n" -"The actual internal solid infill flow used is calculated by multiplying this " -"value by the filament flow ratio, and if set, the object's flow ratio." +"Skutečný průtok pro vnitřní plnou výplň se vypočítá vynásobením této hodnoty " +"poměrem průtoku filamentu a případně také poměrem průtoku objektu." msgid "Gap fill flow ratio" -msgstr "Gap fill flow ratio" +msgstr "Poměr průtoku vyplnění mezer" msgid "" "This factor affects the amount of material for filling the gaps.\n" @@ -12683,13 +12683,13 @@ msgid "" "The actual gap filling flow used is calculated by multiplying this value by " "the filament flow ratio, and if set, the object's flow ratio." msgstr "" -"This factor affects the amount of material for filling the gaps.\n" +"Tento faktor ovlivňuje množství materiálu pro vyplnění mezer.\n" "\n" -"The actual gap filling flow used is calculated by multiplying this value by " -"the filament flow ratio, and if set, the object's flow ratio." +"Skutečný průtok pro vyplnění mezer se vypočítá vynásobením této hodnoty " +"poměrem průtoku filamentu a případně také poměrem průtoku objektu." msgid "Support flow ratio" -msgstr "Support flow ratio" +msgstr "Poměr průtoku podpěr" msgid "" "This factor affects the amount of material for support.\n" @@ -12697,13 +12697,13 @@ msgid "" "The actual support flow used is calculated by multiplying this value by the " "filament flow ratio, and if set, the object's flow ratio." msgstr "" -"This factor affects the amount of material for support.\n" +"Tento faktor ovlivňuje množství materiálu pro podpěry.\n" "\n" -"The actual support flow used is calculated by multiplying this value by the " -"filament flow ratio, and if set, the object's flow ratio." +"Skutečný průtok pro podpěry se vypočítá vynásobením této hodnoty " +"poměrem průtoku filamentu a případně také poměrem průtoku objektu." msgid "Support interface flow ratio" -msgstr "Support interface flow ratio" +msgstr "Poměr průtoku rozhraní podpěr" msgid "" "This factor affects the amount of material for the support interface.\n" @@ -12711,10 +12711,10 @@ msgid "" "The actual support interface flow used is calculated by multiplying this " "value by the filament flow ratio, and if set, the object's flow ratio." msgstr "" -"This factor affects the amount of material for the support interface.\n" +"Tento faktor ovlivňuje množství materiálu pro rozhraní podpěr.\n" "\n" -"The actual support interface flow used is calculated by multiplying this " -"value by the filament flow ratio, and if set, the object's flow ratio." +"Skutečný průtok pro rozhraní podpěr se vypočítá vynásobením této hodnoty " +"poměrem průtoku filamentu a případně také poměrem průtoku objektu." msgid "Precise wall" msgstr "Přesná stěna" diff --git a/resources/profiles/LH.json b/resources/profiles/LH.json new file mode 100644 index 00000000000..32df35a0cf6 --- /dev/null +++ b/resources/profiles/LH.json @@ -0,0 +1,159 @@ +{ + "name": "LH", + "url": "https://github.com/lhndo/LH-Stinger", + "version": "01.00.00.00", + "force_update": "0", + "description": "LH 3D Printer Configuration", + "machine_model_list": [ + { + "name": "LH Stinger", + "sub_path": "machine/LH Stinger.json" + }, + { + "name": "LH Stinger MMU", + "sub_path": "machine/LH Stinger MMU.json" + } + ], + "process_list": [ + { + "name": "fdm_process_common", + "sub_path": "process/fdm_process_common.json" + }, + { + "name": "fdm_process_lh_common", + "sub_path": "process/fdm_process_lh_common.json" + }, + { + "name": "0.20mm Daily @LH Stinger", + "sub_path": "process/0.20mm Daily @LH Stinger.json" + }, + { + "name": "0.25mm Vase Mode @LH Stinger", + "sub_path": "process/0.25mm Vase Mode @LH Stinger.json" + }, + { + "name": "0.20mm TPU @LH Stinger", + "sub_path": "process/0.20mm TPU @LH Stinger.json" + }, + { + "name": "0.20mm Strength @LH Stinger", + "sub_path": "process/0.20mm Strength @LH Stinger.json" + }, + { + "name": "0.20mm Speed @LH Stinger", + "sub_path": "process/0.20mm Speed @LH Stinger.json" + }, + { + "name": "0.20mm Solid @LH Stinger", + "sub_path": "process/0.20mm Solid @LH Stinger.json" + }, + { + "name": "0.20mm Quiet @LH Stinger", + "sub_path": "process/0.20mm Quiet @LH Stinger.json" + }, + { + "name": "0.20mm PETG @LH Stinger", + "sub_path": "process/0.20mm PETG @LH Stinger.json" + }, + { + "name": "0.20mm MMU @LH Stinger", + "sub_path": "process/0.20mm MMU @LH Stinger.json" + }, + { + "name": "0.10mm HueForge @LH Stinger", + "sub_path": "process/0.10mm HueForge @LH Stinger.json" + }, + { + "name": "0.14mm Detail Strength @LH Stinger", + "sub_path": "process/0.14mm Detail Strength @LH Stinger.json" + }, + { + "name": "0.14mm Detail @LH Stinger", + "sub_path": "process/0.14mm Detail @LH Stinger.json" + } + ], + "filament_list": [ + { + "name": "fdm_filament_common", + "sub_path": "filament/fdm_filament_common.json" + }, + { + "name": "fdm_filament_abs", + "sub_path": "filament/fdm_filament_abs.json" + }, + { + "name": "fdm_filament_asa", + "sub_path": "filament/fdm_filament_asa.json" + }, + { + "name": "fdm_filament_pc", + "sub_path": "filament/fdm_filament_pc.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": "LHS ASA", + "sub_path": "filament/LHS ASA.json" + }, + { + "name": "LHS ABS", + "sub_path": "filament/LHS ABS.json" + }, + { + "name": "LHS TPU", + "sub_path": "filament/LHS TPU.json" + }, + { + "name": "LHS PLA", + "sub_path": "filament/LHS PLA.json" + }, + { + "name": "LHS TPU Foamy 78A", + "sub_path": "filament/LHS TPU Foamy 78A.json" + }, + { + "name": "LHS PETG", + "sub_path": "filament/LHS PETG.json" + }, + { + "name": "LHS PCTG", + "sub_path": "filament/LHS PCTG.json" + }, + { + "name": "LHS PC CF", + "sub_path": "filament/LHS PC CF.json" + } + ], + "machine_list": [ + { + "name": "fdm_machine_common", + "sub_path": "machine/fdm_machine_common.json" + }, + { + "name": "fdm_lh_common", + "sub_path": "machine/fdm_lh_common.json" + }, + { + "name": "fdm_lh_mmu_common", + "sub_path": "machine/fdm_lh_mmu_common.json" + }, + { + "name": "LH Stinger 0.4 nozzle", + "sub_path": "machine/LH Stinger 0.4 nozzle.json" + }, + { + "name": "LH Stinger MMU 0.4 nozzle", + "sub_path": "machine/LH Stinger MMU 0.4 nozzle.json" + } + ] +} \ No newline at end of file diff --git a/resources/profiles/LH/LH Stinger MMU_cover.png b/resources/profiles/LH/LH Stinger MMU_cover.png new file mode 100644 index 00000000000..ef0ed9c9e4a Binary files /dev/null and b/resources/profiles/LH/LH Stinger MMU_cover.png differ diff --git a/resources/profiles/LH/LH Stinger_cover.png b/resources/profiles/LH/LH Stinger_cover.png new file mode 100644 index 00000000000..09070257b97 Binary files /dev/null and b/resources/profiles/LH/LH Stinger_cover.png differ diff --git a/resources/profiles/LH/LH_Stinger_MMU_buildplate_texture.png b/resources/profiles/LH/LH_Stinger_MMU_buildplate_texture.png new file mode 100644 index 00000000000..d21afe069ee Binary files /dev/null and b/resources/profiles/LH/LH_Stinger_MMU_buildplate_texture.png differ diff --git a/resources/profiles/LH/LH_Stinger_buildplate_model.stl b/resources/profiles/LH/LH_Stinger_buildplate_model.stl new file mode 100644 index 00000000000..37fd5140144 Binary files /dev/null and b/resources/profiles/LH/LH_Stinger_buildplate_model.stl differ diff --git a/resources/profiles/LH/LH_Stinger_buildplate_texture.png b/resources/profiles/LH/LH_Stinger_buildplate_texture.png new file mode 100644 index 00000000000..e03843bd239 Binary files /dev/null and b/resources/profiles/LH/LH_Stinger_buildplate_texture.png differ diff --git a/resources/profiles/LH/filament/LHS ABS.json b/resources/profiles/LH/filament/LHS ABS.json new file mode 100644 index 00000000000..95cd7ccd73c --- /dev/null +++ b/resources/profiles/LH/filament/LHS ABS.json @@ -0,0 +1,355 @@ +{ + "name": "LHS ABS", + "type": "filament", + "filament_id": "LHF_abs", + "setting_id": "LHF_S_abs", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_asa", + "compatible_printers": [ + "LH Stinger 0.4 nozzle", + "LH Stinger MMU 0.4 nozzle" + ], + "activate_air_filtration": [ + "0" + ], + "activate_chamber_temp_control": [ + "0" + ], + "adaptive_pressure_advance": [ + "0" + ], + "adaptive_pressure_advance_bridges": [ + "0" + ], + "adaptive_pressure_advance_model": [ + "0,0,0\n0,0,0" + ], + "adaptive_pressure_advance_overhangs": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "chamber_temperature": [ + "0" + ], + "close_fan_the_first_x_layers": [ + "2" + ], + "complete_print_exhaust_fan_speed": [ + "70" + ], + "cool_plate_temp": [ + "0" + ], + "cool_plate_temp_initial_layer": [ + "0" + ], + "default_filament_colour": [ + "" + ], + "dont_slow_down_outer_wall": [ + "0" + ], + "during_print_exhaust_fan_speed": [ + "70" + ], + "enable_overhang_bridge_fan": [ + "1" + ], + "enable_pressure_advance": [ + "1" + ], + "eng_plate_temp": [ + "100" + ], + "eng_plate_temp_initial_layer": [ + "105" + ], + "fan_cooling_layer_time": [ + "25" + ], + "fan_max_speed": [ + "25" + ], + "fan_min_speed": [ + "25" + ], + "filament_adaptive_volumetric_speed": [ + "0" + ], + "filament_adhesiveness_category": [ + "0" + ], + "filament_change_length": [ + "10" + ], + "filament_cooling_final_speed": [ + "0" + ], + "filament_cooling_initial_speed": [ + "0" + ], + "filament_cooling_moves": [ + "0" + ], + "filament_cost": [ + "20" + ], + "filament_density": [ + "1.04" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_end_gcode": [ + "; filament end gcode\n" + ], + "filament_extruder_variant": [ + "Direct Drive Standard" + ], + "filament_flow_ratio": [ + "0.926" + ], + "filament_flush_temp": [ + "0" + ], + "filament_flush_volumetric_speed": [ + "0" + ], + "filament_ironing_flow": [ + "nil" + ], + "filament_ironing_inset": [ + "nil" + ], + "filament_ironing_spacing": [ + "nil" + ], + "filament_ironing_speed": [ + "nil" + ], + "filament_is_support": [ + "0" + ], + "filament_loading_speed": [ + "0" + ], + "filament_loading_speed_start": [ + "0" + ], + "filament_long_retractions_when_cut": [ + "nil" + ], + "filament_max_volumetric_speed": [ + "45" + ], + "filament_minimal_purge_on_wipe_tower": [ + "0" + ], + "filament_multitool_ramming": [ + "0" + ], + "filament_multitool_ramming_flow": [ + "0" + ], + "filament_multitool_ramming_volume": [ + "0" + ], + "filament_notes": [ + "" + ], + "filament_printable": [ + "3" + ], + "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_retract_before_wipe": [ + "nil" + ], + "filament_retract_lift_above": [ + "nil" + ], + "filament_retract_lift_below": [ + "nil" + ], + "filament_retract_lift_enforce": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_distances_when_cut": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_settings_id": [ + "LHS - ASA" + ], + "filament_shrink": [ + "100%" + ], + "filament_shrinkage_compensation_z": [ + "100%" + ], + "filament_soluble": [ + "0" + ], + "filament_stamping_distance": [ + "0" + ], + "filament_stamping_loading_speed": [ + "0" + ], + "filament_start_gcode": [ + "; filament start gcode\n; MPC_SET HEATER=extruder FILAMENT_DENSITY=1.07 FILAMENT_HEAT_CAPACITY=2.1\nMAX_FAN LINK_AUX=0" + ], + "filament_toolchange_delay": [ + "0" + ], + "filament_tower_interface_pre_extrusion_dist": [ + "10" + ], + "filament_tower_interface_pre_extrusion_length": [ + "0" + ], + "filament_tower_interface_print_temp": [ + "-1" + ], + "filament_tower_interface_purge_volume": [ + "20" + ], + "filament_tower_ironing_area": [ + "4" + ], + "filament_type": [ + "ASA" + ], + "filament_unloading_speed": [ + "0" + ], + "filament_unloading_speed_start": [ + "0" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "4" + ], + "hot_plate_temp": [ + "105" + ], + "hot_plate_temp_initial_layer": [ + "105" + ], + "idle_temperature": [ + "0" + ], + "internal_bridge_fan_speed": [ + "-1" + ], + "ironing_fan_speed": [ + "-1" + ], + "long_retractions_when_ec": [ + "0" + ], + "nozzle_temperature": [ + "260" + ], + "nozzle_temperature_initial_layer": [ + "260" + ], + "nozzle_temperature_range_high": [ + "300" + ], + "nozzle_temperature_range_low": [ + "240" + ], + "overhang_fan_speed": [ + "50" + ], + "overhang_fan_threshold": [ + "50%" + ], + "pellet_flow_coefficient": [ + "0.4157" + ], + "pressure_advance": [ + "0.019" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "3" + ], + "retraction_distances_when_ec": [ + "10" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "slow_down_layer_time": [ + "15" + ], + "slow_down_min_speed": [ + "10" + ], + "supertack_plate_temp": [ + "0" + ], + "supertack_plate_temp_initial_layer": [ + "0" + ], + "support_material_interface_fan_speed": [ + "-1" + ], + "temperature_vitrification": [ + "110" + ], + "textured_cool_plate_temp": [ + "40" + ], + "textured_cool_plate_temp_initial_layer": [ + "40" + ], + "textured_plate_temp": [ + "100" + ], + "textured_plate_temp_initial_layer": [ + "105" + ], + "filament_vendor": [ + "LH Stinger" + ], + "volumetric_speed_coefficients": [ + "" + ] +} \ No newline at end of file diff --git a/resources/profiles/LH/filament/LHS ASA.json b/resources/profiles/LH/filament/LHS ASA.json new file mode 100644 index 00000000000..9c8ed46093f --- /dev/null +++ b/resources/profiles/LH/filament/LHS ASA.json @@ -0,0 +1,352 @@ +{ + "name": "LHS ASA", + "filament_id": "LHF_asa", + "setting_id": "LHF_S_asa", + "type": "filament", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_asa", + "compatible_printers": [ + "LH Stinger 0.4 nozzle", + "LH Stinger MMU 0.4 nozzle" + ], + "activate_air_filtration": [ + "0" + ], + "activate_chamber_temp_control": [ + "0" + ], + "adaptive_pressure_advance": [ + "0" + ], + "adaptive_pressure_advance_bridges": [ + "0" + ], + "adaptive_pressure_advance_model": [ + "0,0,0\n0,0,0" + ], + "adaptive_pressure_advance_overhangs": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "chamber_temperature": [ + "0" + ], + "close_fan_the_first_x_layers": [ + "2" + ], + "complete_print_exhaust_fan_speed": [ + "70" + ], + "cool_plate_temp": [ + "0" + ], + "cool_plate_temp_initial_layer": [ + "0" + ], + "default_filament_colour": [ + "" + ], + "dont_slow_down_outer_wall": [ + "0" + ], + "during_print_exhaust_fan_speed": [ + "70" + ], + "enable_overhang_bridge_fan": [ + "1" + ], + "enable_pressure_advance": [ + "1" + ], + "eng_plate_temp": [ + "100" + ], + "eng_plate_temp_initial_layer": [ + "105" + ], + "fan_cooling_layer_time": [ + "25" + ], + "fan_max_speed": [ + "25" + ], + "fan_min_speed": [ + "25" + ], + "filament_adaptive_volumetric_speed": [ + "0" + ], + "filament_adhesiveness_category": [ + "0" + ], + "filament_change_length": [ + "10" + ], + "filament_cooling_final_speed": [ + "0" + ], + "filament_cooling_initial_speed": [ + "0" + ], + "filament_cooling_moves": [ + "0" + ], + "filament_cost": [ + "20" + ], + "filament_density": [ + "1.04" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_end_gcode": [ + "; filament end gcode\n" + ], + "filament_extruder_variant": [ + "Direct Drive Standard" + ], + "filament_flow_ratio": [ + "0.926" + ], + "filament_flush_temp": [ + "0" + ], + "filament_flush_volumetric_speed": [ + "0" + ], + "filament_ironing_flow": [ + "nil" + ], + "filament_ironing_inset": [ + "nil" + ], + "filament_ironing_spacing": [ + "nil" + ], + "filament_ironing_speed": [ + "nil" + ], + "filament_is_support": [ + "0" + ], + "filament_loading_speed": [ + "0" + ], + "filament_loading_speed_start": [ + "0" + ], + "filament_long_retractions_when_cut": [ + "nil" + ], + "filament_max_volumetric_speed": [ + "45" + ], + "filament_minimal_purge_on_wipe_tower": [ + "0" + ], + "filament_multitool_ramming": [ + "0" + ], + "filament_multitool_ramming_flow": [ + "0" + ], + "filament_multitool_ramming_volume": [ + "0" + ], + "filament_notes": [ + "" + ], + "filament_printable": [ + "3" + ], + "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_retract_before_wipe": [ + "nil" + ], + "filament_retract_lift_above": [ + "nil" + ], + "filament_retract_lift_below": [ + "nil" + ], + "filament_retract_lift_enforce": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_distances_when_cut": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_shrink": [ + "100%" + ], + "filament_shrinkage_compensation_z": [ + "100%" + ], + "filament_soluble": [ + "0" + ], + "filament_stamping_distance": [ + "0" + ], + "filament_stamping_loading_speed": [ + "0" + ], + "filament_start_gcode": [ + "; filament start gcode\n; MPC_SET HEATER=extruder FILAMENT_DENSITY=1.07 FILAMENT_HEAT_CAPACITY=2.1\nMAX_FAN LINK_AUX=0" + ], + "filament_toolchange_delay": [ + "0" + ], + "filament_tower_interface_pre_extrusion_dist": [ + "10" + ], + "filament_tower_interface_pre_extrusion_length": [ + "0" + ], + "filament_tower_interface_print_temp": [ + "-1" + ], + "filament_tower_interface_purge_volume": [ + "20" + ], + "filament_tower_ironing_area": [ + "4" + ], + "filament_type": [ + "ASA" + ], + "filament_unloading_speed": [ + "0" + ], + "filament_unloading_speed_start": [ + "0" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "4" + ], + "hot_plate_temp": [ + "105" + ], + "hot_plate_temp_initial_layer": [ + "105" + ], + "idle_temperature": [ + "0" + ], + "internal_bridge_fan_speed": [ + "-1" + ], + "ironing_fan_speed": [ + "-1" + ], + "long_retractions_when_ec": [ + "0" + ], + "nozzle_temperature": [ + "260" + ], + "nozzle_temperature_initial_layer": [ + "260" + ], + "nozzle_temperature_range_high": [ + "300" + ], + "nozzle_temperature_range_low": [ + "240" + ], + "overhang_fan_speed": [ + "50" + ], + "overhang_fan_threshold": [ + "50%" + ], + "pellet_flow_coefficient": [ + "0.4157" + ], + "pressure_advance": [ + "0.019" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "3" + ], + "retraction_distances_when_ec": [ + "10" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "slow_down_layer_time": [ + "15" + ], + "slow_down_min_speed": [ + "10" + ], + "supertack_plate_temp": [ + "0" + ], + "supertack_plate_temp_initial_layer": [ + "0" + ], + "support_material_interface_fan_speed": [ + "-1" + ], + "temperature_vitrification": [ + "110" + ], + "textured_cool_plate_temp": [ + "40" + ], + "textured_cool_plate_temp_initial_layer": [ + "40" + ], + "textured_plate_temp": [ + "100" + ], + "textured_plate_temp_initial_layer": [ + "105" + ], + "filament_vendor": [ + "LH Stinger" + ], + "volumetric_speed_coefficients": [ + "" + ] +} \ No newline at end of file diff --git a/resources/profiles/LH/filament/LHS PC CF.json b/resources/profiles/LH/filament/LHS PC CF.json new file mode 100644 index 00000000000..ec749abf64d --- /dev/null +++ b/resources/profiles/LH/filament/LHS PC CF.json @@ -0,0 +1,122 @@ +{ + "name": "LHS PC CF", + "type": "filament", + "filament_id": "LHF_pccf", + "setting_id": "LHF_S_pccf", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_pla", + "compatible_printers": [ + "LH Stinger 0.4 nozzle", + "LH Stinger MMU 0.4 nozzle" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "close_fan_the_first_x_layers": [ + "4" + ], + "enable_pressure_advance": [ + "1" + ], + "fan_cooling_layer_time": [ + "11" + ], + "fan_max_speed": [ + "5" + ], + "fan_min_speed": [ + "5" + ], + "filament_cooling_final_speed": [ + "0" + ], + "filament_cooling_initial_speed": [ + "0" + ], + "filament_cooling_moves": [ + "0" + ], + "filament_density": [ + "1.18" + ], + "filament_flow_ratio": [ + "0.945" + ], + "filament_loading_speed": [ + "0" + ], + "filament_loading_speed_start": [ + "0" + ], + "filament_max_volumetric_speed": [ + "35" + ], + "filament_minimal_purge_on_wipe_tower": [ + "0" + ], + "filament_multitool_ramming_flow": [ + "0" + ], + "filament_multitool_ramming_volume": [ + "0" + ], + "filament_notes": [ + "Extrusion Override set to a higher value\nAux disabled\nZ-Offset increased to 0.025 due to nozzle expansion at 300C" + ], + "filament_retraction_length": [ + "0.4" + ], + "filament_shrink": [ + "99.8%" + ], + "filament_start_gcode": [ + "; filament start gcode\n; MPC_SET HEATER=extruder FILAMENT_DENSITY=1.36 FILAMENT_HEAT_CAPACITY=2.6\nMAX_FAN LINK_AUX=0" + ], + "filament_type": [ + "PC" + ], + "filament_unloading_speed": [ + "0" + ], + "filament_unloading_speed_start": [ + "0" + ], + "hot_plate_temp": [ + "105" + ], + "hot_plate_temp_initial_layer": [ + "105" + ], + "is_custom_defined": "0", + "nozzle_temperature": [ + "300" + ], + "nozzle_temperature_initial_layer": [ + "300" + ], + "nozzle_temperature_range_high": [ + "300" + ], + "nozzle_temperature_range_low": [ + "270" + ], + "overhang_fan_speed": [ + "35" + ], + "pressure_advance": [ + "0.025" + ], + "slow_down_layer_time": [ + "7" + ], + "slow_down_min_speed": [ + "12" + ], + "filament_vendor": [ + "LH Stinger" + ], + "temperature_vitrification": [ + "140" + ] +} \ No newline at end of file diff --git a/resources/profiles/LH/filament/LHS PCTG.json b/resources/profiles/LH/filament/LHS PCTG.json new file mode 100644 index 00000000000..7508a1fbd3b --- /dev/null +++ b/resources/profiles/LH/filament/LHS PCTG.json @@ -0,0 +1,352 @@ +{ + "name": "LHS PCTG", + "type": "filament", + "filament_id": "LHF_pctg", + "setting_id": "LHF_S_pctg", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_pla", + "compatible_printers": [ + "LH Stinger 0.4 nozzle", + "LH Stinger MMU 0.4 nozzle" + ], + "activate_air_filtration": [ + "0" + ], + "activate_chamber_temp_control": [ + "0" + ], + "adaptive_pressure_advance": [ + "0" + ], + "adaptive_pressure_advance_bridges": [ + "0" + ], + "adaptive_pressure_advance_model": [ + "0,0,0\n0,0,0" + ], + "adaptive_pressure_advance_overhangs": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "chamber_temperature": [ + "0" + ], + "close_fan_the_first_x_layers": [ + "1" + ], + "complete_print_exhaust_fan_speed": [ + "70" + ], + "cool_plate_temp": [ + "35" + ], + "cool_plate_temp_initial_layer": [ + "35" + ], + "default_filament_colour": [ + "" + ], + "dont_slow_down_outer_wall": [ + "0" + ], + "during_print_exhaust_fan_speed": [ + "70" + ], + "enable_overhang_bridge_fan": [ + "1" + ], + "enable_pressure_advance": [ + "1" + ], + "eng_plate_temp": [ + "0" + ], + "eng_plate_temp_initial_layer": [ + "0" + ], + "fan_cooling_layer_time": [ + "13" + ], + "fan_max_speed": [ + "50" + ], + "fan_min_speed": [ + "20" + ], + "filament_adaptive_volumetric_speed": [ + "0" + ], + "filament_adhesiveness_category": [ + "0" + ], + "filament_change_length": [ + "10" + ], + "filament_cooling_final_speed": [ + "0" + ], + "filament_cooling_initial_speed": [ + "0" + ], + "filament_cooling_moves": [ + "0" + ], + "filament_cost": [ + "20" + ], + "filament_density": [ + "1.24" + ], + "filament_deretraction_speed": [ + "25" + ], + "filament_diameter": [ + "1.75" + ], + "filament_end_gcode": [ + "; filament end gcode\n" + ], + "filament_extruder_variant": [ + "Direct Drive Standard" + ], + "filament_flow_ratio": [ + "0.953" + ], + "filament_flush_temp": [ + "0" + ], + "filament_flush_volumetric_speed": [ + "0" + ], + "filament_ironing_flow": [ + "nil" + ], + "filament_ironing_inset": [ + "nil" + ], + "filament_ironing_spacing": [ + "nil" + ], + "filament_ironing_speed": [ + "nil" + ], + "filament_is_support": [ + "0" + ], + "filament_loading_speed": [ + "0" + ], + "filament_loading_speed_start": [ + "0" + ], + "filament_long_retractions_when_cut": [ + "nil" + ], + "filament_max_volumetric_speed": [ + "25" + ], + "filament_minimal_purge_on_wipe_tower": [ + "0" + ], + "filament_multitool_ramming": [ + "0" + ], + "filament_multitool_ramming_flow": [ + "10" + ], + "filament_multitool_ramming_volume": [ + "10" + ], + "filament_notes": [ + "" + ], + "filament_printable": [ + "3" + ], + "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_retract_before_wipe": [ + "nil" + ], + "filament_retract_lift_above": [ + "nil" + ], + "filament_retract_lift_below": [ + "nil" + ], + "filament_retract_lift_enforce": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_distances_when_cut": [ + "nil" + ], + "filament_retraction_length": [ + "0.6" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "30" + ], + "filament_shrink": [ + "100%" + ], + "filament_shrinkage_compensation_z": [ + "100%" + ], + "filament_soluble": [ + "0" + ], + "filament_stamping_distance": [ + "0" + ], + "filament_stamping_loading_speed": [ + "0" + ], + "filament_start_gcode": [ + "; filament start gcode\n; MPC_SET HEATER=extruder FILAMENT_DENSITY=1.25 FILAMENT_HEAT_CAPACITY=5.5\nMAX_FAN LINK_AUX=0" + ], + "filament_toolchange_delay": [ + "0" + ], + "filament_tower_interface_pre_extrusion_dist": [ + "10" + ], + "filament_tower_interface_pre_extrusion_length": [ + "0" + ], + "filament_tower_interface_print_temp": [ + "-1" + ], + "filament_tower_interface_purge_volume": [ + "20" + ], + "filament_tower_ironing_area": [ + "4" + ], + "filament_type": [ + "PCTG" + ], + "filament_unloading_speed": [ + "0" + ], + "filament_unloading_speed_start": [ + "0" + ], + "filament_wipe": [ + "0" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "3" + ], + "hot_plate_temp": [ + "90" + ], + "hot_plate_temp_initial_layer": [ + "85" + ], + "idle_temperature": [ + "0" + ], + "internal_bridge_fan_speed": [ + "30" + ], + "ironing_fan_speed": [ + "-1" + ], + "long_retractions_when_ec": [ + "0" + ], + "nozzle_temperature": [ + "280" + ], + "nozzle_temperature_initial_layer": [ + "270" + ], + "nozzle_temperature_range_high": [ + "300" + ], + "nozzle_temperature_range_low": [ + "230" + ], + "overhang_fan_speed": [ + "50" + ], + "overhang_fan_threshold": [ + "50%" + ], + "pellet_flow_coefficient": [ + "0.4157" + ], + "pressure_advance": [ + "0.038" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "3" + ], + "retraction_distances_when_ec": [ + "10" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "15" + ], + "supertack_plate_temp": [ + "45" + ], + "supertack_plate_temp_initial_layer": [ + "45" + ], + "support_material_interface_fan_speed": [ + "50" + ], + "temperature_vitrification": [ + "80" + ], + "textured_cool_plate_temp": [ + "40" + ], + "textured_cool_plate_temp_initial_layer": [ + "40" + ], + "textured_plate_temp": [ + "55" + ], + "textured_plate_temp_initial_layer": [ + "55" + ], + "filament_vendor": [ + "LH Stinger" + ], + "volumetric_speed_coefficients": [ + "" + ] +} \ No newline at end of file diff --git a/resources/profiles/LH/filament/LHS PETG.json b/resources/profiles/LH/filament/LHS PETG.json new file mode 100644 index 00000000000..4c50c13b4c2 --- /dev/null +++ b/resources/profiles/LH/filament/LHS PETG.json @@ -0,0 +1,352 @@ +{ + "name": "LHS PETG", + "type": "filament", + "filament_id": "LHF_petg", + "setting_id": "LHF_S_petg", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_pla", + "compatible_printers": [ + "LH Stinger 0.4 nozzle", + "LH Stinger MMU 0.4 nozzle" + ], + "activate_air_filtration": [ + "0" + ], + "activate_chamber_temp_control": [ + "0" + ], + "adaptive_pressure_advance": [ + "0" + ], + "adaptive_pressure_advance_bridges": [ + "0" + ], + "adaptive_pressure_advance_model": [ + "0,0,0\n0,0,0" + ], + "adaptive_pressure_advance_overhangs": [ + "0" + ], + "additional_cooling_fan_speed": [ + "0" + ], + "chamber_temperature": [ + "0" + ], + "close_fan_the_first_x_layers": [ + "1" + ], + "complete_print_exhaust_fan_speed": [ + "70" + ], + "cool_plate_temp": [ + "35" + ], + "cool_plate_temp_initial_layer": [ + "35" + ], + "default_filament_colour": [ + "" + ], + "dont_slow_down_outer_wall": [ + "0" + ], + "during_print_exhaust_fan_speed": [ + "70" + ], + "enable_overhang_bridge_fan": [ + "1" + ], + "enable_pressure_advance": [ + "1" + ], + "eng_plate_temp": [ + "0" + ], + "eng_plate_temp_initial_layer": [ + "0" + ], + "fan_cooling_layer_time": [ + "15" + ], + "fan_max_speed": [ + "65" + ], + "fan_min_speed": [ + "35" + ], + "filament_adaptive_volumetric_speed": [ + "0" + ], + "filament_adhesiveness_category": [ + "0" + ], + "filament_change_length": [ + "10" + ], + "filament_cooling_final_speed": [ + "0" + ], + "filament_cooling_initial_speed": [ + "0" + ], + "filament_cooling_moves": [ + "0" + ], + "filament_cost": [ + "20" + ], + "filament_density": [ + "1.24" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_end_gcode": [ + "; filament end gcode\n" + ], + "filament_extruder_variant": [ + "Direct Drive Standard" + ], + "filament_flow_ratio": [ + "0.923" + ], + "filament_flush_temp": [ + "0" + ], + "filament_flush_volumetric_speed": [ + "0" + ], + "filament_ironing_flow": [ + "nil" + ], + "filament_ironing_inset": [ + "nil" + ], + "filament_ironing_spacing": [ + "nil" + ], + "filament_ironing_speed": [ + "nil" + ], + "filament_is_support": [ + "0" + ], + "filament_loading_speed": [ + "0" + ], + "filament_loading_speed_start": [ + "0" + ], + "filament_long_retractions_when_cut": [ + "nil" + ], + "filament_max_volumetric_speed": [ + "27" + ], + "filament_minimal_purge_on_wipe_tower": [ + "0" + ], + "filament_multitool_ramming": [ + "0" + ], + "filament_multitool_ramming_flow": [ + "0" + ], + "filament_multitool_ramming_volume": [ + "0" + ], + "filament_notes": [ + "" + ], + "filament_printable": [ + "3" + ], + "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_retract_before_wipe": [ + "nil" + ], + "filament_retract_lift_above": [ + "nil" + ], + "filament_retract_lift_below": [ + "nil" + ], + "filament_retract_lift_enforce": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_distances_when_cut": [ + "nil" + ], + "filament_retraction_length": [ + "0.6" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_shrink": [ + "100%" + ], + "filament_shrinkage_compensation_z": [ + "100%" + ], + "filament_soluble": [ + "0" + ], + "filament_stamping_distance": [ + "0" + ], + "filament_stamping_loading_speed": [ + "0" + ], + "filament_start_gcode": [ + "; filament start gcode\n; MPC_SET HEATER=extruder FILAMENT_DENSITY=1.27 FILAMENT_HEAT_CAPACITY=5.5\nMAX_FAN LINK_AUX=0" + ], + "filament_toolchange_delay": [ + "0" + ], + "filament_tower_interface_pre_extrusion_dist": [ + "10" + ], + "filament_tower_interface_pre_extrusion_length": [ + "0" + ], + "filament_tower_interface_print_temp": [ + "-1" + ], + "filament_tower_interface_purge_volume": [ + "20" + ], + "filament_tower_ironing_area": [ + "4" + ], + "filament_type": [ + "PETG" + ], + "filament_unloading_speed": [ + "0" + ], + "filament_unloading_speed_start": [ + "0" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "3" + ], + "hot_plate_temp": [ + "80" + ], + "hot_plate_temp_initial_layer": [ + "80" + ], + "idle_temperature": [ + "0" + ], + "internal_bridge_fan_speed": [ + "50" + ], + "ironing_fan_speed": [ + "-1" + ], + "long_retractions_when_ec": [ + "0" + ], + "nozzle_temperature": [ + "260" + ], + "nozzle_temperature_initial_layer": [ + "260" + ], + "nozzle_temperature_range_high": [ + "300" + ], + "nozzle_temperature_range_low": [ + "230" + ], + "overhang_fan_speed": [ + "90" + ], + "overhang_fan_threshold": [ + "50%" + ], + "pellet_flow_coefficient": [ + "0.4157" + ], + "pressure_advance": [ + "0.047" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "3" + ], + "retraction_distances_when_ec": [ + "10" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "slow_down_layer_time": [ + "14" + ], + "slow_down_min_speed": [ + "15" + ], + "supertack_plate_temp": [ + "45" + ], + "supertack_plate_temp_initial_layer": [ + "45" + ], + "support_material_interface_fan_speed": [ + "80" + ], + "temperature_vitrification": [ + "80" + ], + "textured_cool_plate_temp": [ + "40" + ], + "textured_cool_plate_temp_initial_layer": [ + "40" + ], + "textured_plate_temp": [ + "55" + ], + "textured_plate_temp_initial_layer": [ + "55" + ], + "filament_vendor": [ + "LH Stinger" + ], + "volumetric_speed_coefficients": [ + "" + ] +} \ No newline at end of file diff --git a/resources/profiles/LH/filament/LHS PLA.json b/resources/profiles/LH/filament/LHS PLA.json new file mode 100644 index 00000000000..6e927484a8e --- /dev/null +++ b/resources/profiles/LH/filament/LHS PLA.json @@ -0,0 +1,352 @@ +{ + "name": "LHS PLA", + "type": "filament", + "filament_id": "LHF_pla", + "setting_id": "LHF_S_pla", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_pla", + "compatible_printers": [ + "LH Stinger 0.4 nozzle", + "LH Stinger MMU 0.4 nozzle" + ], + "activate_air_filtration": [ + "0" + ], + "activate_chamber_temp_control": [ + "0" + ], + "adaptive_pressure_advance": [ + "0" + ], + "adaptive_pressure_advance_bridges": [ + "0" + ], + "adaptive_pressure_advance_model": [ + "0,0,0\n0,0,0" + ], + "adaptive_pressure_advance_overhangs": [ + "0" + ], + "additional_cooling_fan_speed": [ + "70" + ], + "chamber_temperature": [ + "0" + ], + "close_fan_the_first_x_layers": [ + "1" + ], + "complete_print_exhaust_fan_speed": [ + "70" + ], + "cool_plate_temp": [ + "35" + ], + "cool_plate_temp_initial_layer": [ + "35" + ], + "default_filament_colour": [ + "" + ], + "dont_slow_down_outer_wall": [ + "0" + ], + "during_print_exhaust_fan_speed": [ + "70" + ], + "enable_overhang_bridge_fan": [ + "1" + ], + "enable_pressure_advance": [ + "1" + ], + "eng_plate_temp": [ + "0" + ], + "eng_plate_temp_initial_layer": [ + "0" + ], + "fan_cooling_layer_time": [ + "20" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "65" + ], + "filament_adaptive_volumetric_speed": [ + "0" + ], + "filament_adhesiveness_category": [ + "0" + ], + "filament_change_length": [ + "10" + ], + "filament_cooling_final_speed": [ + "0" + ], + "filament_cooling_initial_speed": [ + "0" + ], + "filament_cooling_moves": [ + "0" + ], + "filament_cost": [ + "20" + ], + "filament_density": [ + "1.24" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_end_gcode": [ + "; filament end gcode\n" + ], + "filament_extruder_variant": [ + "Direct Drive Standard" + ], + "filament_flow_ratio": [ + "0.95" + ], + "filament_flush_temp": [ + "0" + ], + "filament_flush_volumetric_speed": [ + "0" + ], + "filament_ironing_flow": [ + "nil" + ], + "filament_ironing_inset": [ + "nil" + ], + "filament_ironing_spacing": [ + "nil" + ], + "filament_ironing_speed": [ + "nil" + ], + "filament_is_support": [ + "0" + ], + "filament_loading_speed": [ + "0" + ], + "filament_loading_speed_start": [ + "0" + ], + "filament_long_retractions_when_cut": [ + "nil" + ], + "filament_max_volumetric_speed": [ + "45" + ], + "filament_minimal_purge_on_wipe_tower": [ + "0" + ], + "filament_multitool_ramming": [ + "0" + ], + "filament_multitool_ramming_flow": [ + "0" + ], + "filament_multitool_ramming_volume": [ + "0" + ], + "filament_notes": [ + "" + ], + "filament_printable": [ + "3" + ], + "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_retract_before_wipe": [ + "nil" + ], + "filament_retract_lift_above": [ + "nil" + ], + "filament_retract_lift_below": [ + "nil" + ], + "filament_retract_lift_enforce": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_distances_when_cut": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_shrink": [ + "100%" + ], + "filament_shrinkage_compensation_z": [ + "100%" + ], + "filament_soluble": [ + "0" + ], + "filament_stamping_distance": [ + "0" + ], + "filament_stamping_loading_speed": [ + "0" + ], + "filament_start_gcode": [ + "; filament start gcode\n; MPC_SET HEATER=extruder FILAMENT_DENSITY=1.24 FILAMENT_HEAT_CAPACITY=3.2\n; MAX_FAN LINK_AUX=0" + ], + "filament_toolchange_delay": [ + "0" + ], + "filament_tower_interface_pre_extrusion_dist": [ + "10" + ], + "filament_tower_interface_pre_extrusion_length": [ + "0" + ], + "filament_tower_interface_print_temp": [ + "-1" + ], + "filament_tower_interface_purge_volume": [ + "20" + ], + "filament_tower_ironing_area": [ + "4" + ], + "filament_type": [ + "PLA" + ], + "filament_unloading_speed": [ + "0" + ], + "filament_unloading_speed_start": [ + "0" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "60" + ], + "hot_plate_temp_initial_layer": [ + "60" + ], + "idle_temperature": [ + "0" + ], + "internal_bridge_fan_speed": [ + "-1" + ], + "ironing_fan_speed": [ + "-1" + ], + "long_retractions_when_ec": [ + "0" + ], + "nozzle_temperature": [ + "235" + ], + "nozzle_temperature_initial_layer": [ + "230" + ], + "nozzle_temperature_range_high": [ + "280" + ], + "nozzle_temperature_range_low": [ + "190" + ], + "overhang_fan_speed": [ + "100" + ], + "overhang_fan_threshold": [ + "25%" + ], + "pellet_flow_coefficient": [ + "0.4157" + ], + "pressure_advance": [ + "0.02" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "3" + ], + "retraction_distances_when_ec": [ + "10" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "slow_down_layer_time": [ + "8" + ], + "slow_down_min_speed": [ + "15" + ], + "supertack_plate_temp": [ + "45" + ], + "supertack_plate_temp_initial_layer": [ + "45" + ], + "support_material_interface_fan_speed": [ + "100" + ], + "temperature_vitrification": [ + "45" + ], + "textured_cool_plate_temp": [ + "40" + ], + "textured_cool_plate_temp_initial_layer": [ + "40" + ], + "textured_plate_temp": [ + "55" + ], + "textured_plate_temp_initial_layer": [ + "60" + ], + "filament_vendor": [ + "LH Stinger" + ], + "volumetric_speed_coefficients": [ + "" + ] +} \ No newline at end of file diff --git a/resources/profiles/LH/filament/LHS TPU Foamy 78A.json b/resources/profiles/LH/filament/LHS TPU Foamy 78A.json new file mode 100644 index 00000000000..cb706c46de8 --- /dev/null +++ b/resources/profiles/LH/filament/LHS TPU Foamy 78A.json @@ -0,0 +1,352 @@ +{ + "name": "LHS TPU Foamy 78A", + "type": "filament", + "filament_id": "LHF_ftpuf", + "setting_id": "LHF_S_ftpuf", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_tpu", + "compatible_printers": [ + "LH Stinger 0.4 nozzle", + "LH Stinger MMU 0.4 nozzle" + ], + "activate_air_filtration": [ + "0" + ], + "activate_chamber_temp_control": [ + "0" + ], + "adaptive_pressure_advance": [ + "0" + ], + "adaptive_pressure_advance_bridges": [ + "0" + ], + "adaptive_pressure_advance_model": [ + "0,0,0\n0,0,0" + ], + "adaptive_pressure_advance_overhangs": [ + "0" + ], + "additional_cooling_fan_speed": [ + "55" + ], + "chamber_temperature": [ + "0" + ], + "close_fan_the_first_x_layers": [ + "1" + ], + "complete_print_exhaust_fan_speed": [ + "70" + ], + "cool_plate_temp": [ + "30" + ], + "cool_plate_temp_initial_layer": [ + "30" + ], + "default_filament_colour": [ + "" + ], + "dont_slow_down_outer_wall": [ + "0" + ], + "during_print_exhaust_fan_speed": [ + "70" + ], + "enable_overhang_bridge_fan": [ + "1" + ], + "enable_pressure_advance": [ + "1" + ], + "eng_plate_temp": [ + "30" + ], + "eng_plate_temp_initial_layer": [ + "30" + ], + "fan_cooling_layer_time": [ + "30" + ], + "fan_max_speed": [ + "60" + ], + "fan_min_speed": [ + "60" + ], + "filament_adaptive_volumetric_speed": [ + "0" + ], + "filament_adhesiveness_category": [ + "0" + ], + "filament_change_length": [ + "10" + ], + "filament_cooling_final_speed": [ + "0" + ], + "filament_cooling_initial_speed": [ + "0" + ], + "filament_cooling_moves": [ + "0" + ], + "filament_cost": [ + "20" + ], + "filament_density": [ + "1.02" + ], + "filament_deretraction_speed": [ + "20" + ], + "filament_diameter": [ + "1.75" + ], + "filament_end_gcode": [ + "; filament end gcode\n" + ], + "filament_extruder_variant": [ + "Direct Drive Standard" + ], + "filament_flow_ratio": [ + "0.85" + ], + "filament_flush_temp": [ + "0" + ], + "filament_flush_volumetric_speed": [ + "0" + ], + "filament_ironing_flow": [ + "nil" + ], + "filament_ironing_inset": [ + "nil" + ], + "filament_ironing_spacing": [ + "nil" + ], + "filament_ironing_speed": [ + "nil" + ], + "filament_is_support": [ + "0" + ], + "filament_loading_speed": [ + "0" + ], + "filament_loading_speed_start": [ + "0" + ], + "filament_long_retractions_when_cut": [ + "nil" + ], + "filament_max_volumetric_speed": [ + "4" + ], + "filament_minimal_purge_on_wipe_tower": [ + "0" + ], + "filament_multitool_ramming": [ + "0" + ], + "filament_multitool_ramming_flow": [ + "0" + ], + "filament_multitool_ramming_volume": [ + "0" + ], + "filament_notes": [ + "" + ], + "filament_printable": [ + "3" + ], + "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_retract_before_wipe": [ + "nil" + ], + "filament_retract_lift_above": [ + "nil" + ], + "filament_retract_lift_below": [ + "nil" + ], + "filament_retract_lift_enforce": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_distances_when_cut": [ + "nil" + ], + "filament_retraction_length": [ + "1.2" + ], + "filament_retraction_minimum_travel": [ + "1" + ], + "filament_retraction_speed": [ + "30" + ], + "filament_shrink": [ + "100%" + ], + "filament_shrinkage_compensation_z": [ + "100%" + ], + "filament_soluble": [ + "0" + ], + "filament_stamping_distance": [ + "0" + ], + "filament_stamping_loading_speed": [ + "0" + ], + "filament_start_gcode": [ + "; filament start gcode\n; MPC_SET HEATER=extruder FILAMENT_DENSITY=1.02 FILAMENT_HEAT_CAPACITY=2\n; MAX_FAN LINK_AUX=0 \nSET_PRESSURE_ADVANCE EXTRUDER=extruder SMOOTH_TIME=0.04" + ], + "filament_toolchange_delay": [ + "0" + ], + "filament_tower_interface_pre_extrusion_dist": [ + "10" + ], + "filament_tower_interface_pre_extrusion_length": [ + "0" + ], + "filament_tower_interface_print_temp": [ + "-1" + ], + "filament_tower_interface_purge_volume": [ + "20" + ], + "filament_tower_ironing_area": [ + "4" + ], + "filament_type": [ + "TPU" + ], + "filament_unloading_speed": [ + "0" + ], + "filament_unloading_speed_start": [ + "0" + ], + "filament_wipe": [ + "0" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "0" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "25" + ], + "hot_plate_temp_initial_layer": [ + "25" + ], + "idle_temperature": [ + "0" + ], + "internal_bridge_fan_speed": [ + "-1" + ], + "ironing_fan_speed": [ + "-1" + ], + "long_retractions_when_ec": [ + "0" + ], + "nozzle_temperature": [ + "265" + ], + "nozzle_temperature_initial_layer": [ + "260" + ], + "nozzle_temperature_range_high": [ + "280" + ], + "nozzle_temperature_range_low": [ + "240" + ], + "overhang_fan_speed": [ + "70" + ], + "overhang_fan_threshold": [ + "25%" + ], + "pellet_flow_coefficient": [ + "0.4157" + ], + "pressure_advance": [ + "0.06" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "3" + ], + "retraction_distances_when_ec": [ + "10" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "slow_down_layer_time": [ + "5" + ], + "slow_down_min_speed": [ + "20" + ], + "supertack_plate_temp": [ + "0" + ], + "supertack_plate_temp_initial_layer": [ + "0" + ], + "support_material_interface_fan_speed": [ + "100" + ], + "temperature_vitrification": [ + "30" + ], + "textured_cool_plate_temp": [ + "40" + ], + "textured_cool_plate_temp_initial_layer": [ + "40" + ], + "textured_plate_temp": [ + "35" + ], + "textured_plate_temp_initial_layer": [ + "35" + ], + "filament_vendor": [ + "LH Stinger" + ], + "volumetric_speed_coefficients": [ + "" + ] +} \ No newline at end of file diff --git a/resources/profiles/LH/filament/LHS TPU.json b/resources/profiles/LH/filament/LHS TPU.json new file mode 100644 index 00000000000..463cd29b2b3 --- /dev/null +++ b/resources/profiles/LH/filament/LHS TPU.json @@ -0,0 +1,352 @@ +{ + "name": "LHS TPU", + "type": "filament", + "filament_id": "LHF_ptpu_pl", + "setting_id": "LHF_S_ptpu_pl", + "from": "system", + "instantiation": "true", + "inherits": "fdm_filament_tpu", + "compatible_printers": [ + "LH Stinger 0.4 nozzle", + "LH Stinger MMU 0.4 nozzle" + ], + "activate_air_filtration": [ + "0" + ], + "activate_chamber_temp_control": [ + "0" + ], + "adaptive_pressure_advance": [ + "0" + ], + "adaptive_pressure_advance_bridges": [ + "0" + ], + "adaptive_pressure_advance_model": [ + "0,0,0\n0,0,0" + ], + "adaptive_pressure_advance_overhangs": [ + "0" + ], + "additional_cooling_fan_speed": [ + "55" + ], + "chamber_temperature": [ + "0" + ], + "close_fan_the_first_x_layers": [ + "1" + ], + "complete_print_exhaust_fan_speed": [ + "70" + ], + "cool_plate_temp": [ + "30" + ], + "cool_plate_temp_initial_layer": [ + "30" + ], + "default_filament_colour": [ + "" + ], + "dont_slow_down_outer_wall": [ + "0" + ], + "during_print_exhaust_fan_speed": [ + "70" + ], + "enable_overhang_bridge_fan": [ + "1" + ], + "enable_pressure_advance": [ + "1" + ], + "eng_plate_temp": [ + "30" + ], + "eng_plate_temp_initial_layer": [ + "30" + ], + "fan_cooling_layer_time": [ + "20" + ], + "fan_max_speed": [ + "100" + ], + "fan_min_speed": [ + "60" + ], + "filament_adaptive_volumetric_speed": [ + "0" + ], + "filament_adhesiveness_category": [ + "0" + ], + "filament_change_length": [ + "10" + ], + "filament_cooling_final_speed": [ + "0" + ], + "filament_cooling_initial_speed": [ + "0" + ], + "filament_cooling_moves": [ + "0" + ], + "filament_cost": [ + "20" + ], + "filament_density": [ + "1.22" + ], + "filament_deretraction_speed": [ + "20" + ], + "filament_diameter": [ + "1.75" + ], + "filament_end_gcode": [ + "; filament end gcode\n" + ], + "filament_extruder_variant": [ + "Direct Drive Standard" + ], + "filament_flow_ratio": [ + "0.965" + ], + "filament_flush_temp": [ + "0" + ], + "filament_flush_volumetric_speed": [ + "0" + ], + "filament_ironing_flow": [ + "nil" + ], + "filament_ironing_inset": [ + "nil" + ], + "filament_ironing_spacing": [ + "nil" + ], + "filament_ironing_speed": [ + "nil" + ], + "filament_is_support": [ + "0" + ], + "filament_loading_speed": [ + "0" + ], + "filament_loading_speed_start": [ + "0" + ], + "filament_long_retractions_when_cut": [ + "nil" + ], + "filament_max_volumetric_speed": [ + "20" + ], + "filament_minimal_purge_on_wipe_tower": [ + "0" + ], + "filament_multitool_ramming": [ + "0" + ], + "filament_multitool_ramming_flow": [ + "0" + ], + "filament_multitool_ramming_volume": [ + "0" + ], + "filament_notes": [ + "" + ], + "filament_printable": [ + "3" + ], + "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_retract_before_wipe": [ + "nil" + ], + "filament_retract_lift_above": [ + "nil" + ], + "filament_retract_lift_below": [ + "nil" + ], + "filament_retract_lift_enforce": [ + "Bottom Only" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_distances_when_cut": [ + "nil" + ], + "filament_retraction_length": [ + "0.9" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "35" + ], + "filament_shrink": [ + "100%" + ], + "filament_shrinkage_compensation_z": [ + "100%" + ], + "filament_soluble": [ + "0" + ], + "filament_stamping_distance": [ + "0" + ], + "filament_stamping_loading_speed": [ + "0" + ], + "filament_start_gcode": [ + "; filament start gcode\n; MPC_SET HEATER=extruder FILAMENT_DENSITY=1.22 FILAMENT_HEAT_CAPACITY=2\n; MAX_FAN LINK_AUX=0\nSET_PRESSURE_ADVANCE EXTRUDER=extruder SMOOTH_TIME=0.04" + ], + "filament_toolchange_delay": [ + "0" + ], + "filament_tower_interface_pre_extrusion_dist": [ + "10" + ], + "filament_tower_interface_pre_extrusion_length": [ + "0" + ], + "filament_tower_interface_print_temp": [ + "-1" + ], + "filament_tower_interface_purge_volume": [ + "20" + ], + "filament_tower_ironing_area": [ + "4" + ], + "filament_type": [ + "TPU" + ], + "filament_unloading_speed": [ + "0" + ], + "filament_unloading_speed_start": [ + "0" + ], + "filament_wipe": [ + "0" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "30" + ], + "hot_plate_temp_initial_layer": [ + "30" + ], + "idle_temperature": [ + "0" + ], + "internal_bridge_fan_speed": [ + "-1" + ], + "ironing_fan_speed": [ + "-1" + ], + "long_retractions_when_ec": [ + "0" + ], + "nozzle_temperature": [ + "245" + ], + "nozzle_temperature_initial_layer": [ + "230" + ], + "nozzle_temperature_range_high": [ + "300" + ], + "nozzle_temperature_range_low": [ + "200" + ], + "overhang_fan_speed": [ + "100" + ], + "overhang_fan_threshold": [ + "25%" + ], + "pellet_flow_coefficient": [ + "0.4157" + ], + "pressure_advance": [ + "0.08" + ], + "reduce_fan_stop_start_freq": [ + "1" + ], + "required_nozzle_HRC": [ + "3" + ], + "retraction_distances_when_ec": [ + "10" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "slow_down_layer_time": [ + "12" + ], + "slow_down_min_speed": [ + "12" + ], + "supertack_plate_temp": [ + "0" + ], + "supertack_plate_temp_initial_layer": [ + "0" + ], + "support_material_interface_fan_speed": [ + "100" + ], + "temperature_vitrification": [ + "30" + ], + "textured_cool_plate_temp": [ + "40" + ], + "textured_cool_plate_temp_initial_layer": [ + "40" + ], + "textured_plate_temp": [ + "35" + ], + "textured_plate_temp_initial_layer": [ + "35" + ], + "filament_vendor": [ + "LH Stinger" + ], + "volumetric_speed_coefficients": [ + "" + ] +} \ No newline at end of file diff --git a/resources/profiles/LH/filament/fdm_filament_abs.json b/resources/profiles/LH/filament/fdm_filament_abs.json new file mode 100644 index 00000000000..8be5c8c2f27 --- /dev/null +++ b/resources/profiles/LH/filament/fdm_filament_abs.json @@ -0,0 +1,88 @@ +{ + "type": "filament", + "name": "fdm_filament_abs", + "inherits": "fdm_filament_common", + "from": "system", + "instantiation": "false", + "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" + ] +} \ No newline at end of file diff --git a/resources/profiles/LH/filament/fdm_filament_asa.json b/resources/profiles/LH/filament/fdm_filament_asa.json new file mode 100644 index 00000000000..19cfa6b5208 --- /dev/null +++ b/resources/profiles/LH/filament/fdm_filament_asa.json @@ -0,0 +1,88 @@ +{ + "type": "filament", + "name": "fdm_filament_asa", + "inherits": "fdm_filament_common", + "from": "system", + "instantiation": "false", + "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" + ] +} \ No newline at end of file diff --git a/resources/profiles/LH/filament/fdm_filament_common.json b/resources/profiles/LH/filament/fdm_filament_common.json new file mode 100644 index 00000000000..788382bc9e3 --- /dev/null +++ b/resources/profiles/LH/filament/fdm_filament_common.json @@ -0,0 +1,141 @@ +{ + "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_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" + ] +} \ No newline at end of file diff --git a/resources/profiles/LH/filament/fdm_filament_pc.json b/resources/profiles/LH/filament/fdm_filament_pc.json new file mode 100644 index 00000000000..25d83913f7d --- /dev/null +++ b/resources/profiles/LH/filament/fdm_filament_pc.json @@ -0,0 +1,88 @@ +{ + "type": "filament", + "name": "fdm_filament_pc", + "inherits": "fdm_filament_common", + "from": "system", + "instantiation": "false", + "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" + ] +} \ No newline at end of file diff --git a/resources/profiles/LH/filament/fdm_filament_pet.json b/resources/profiles/LH/filament/fdm_filament_pet.json new file mode 100644 index 00000000000..75210fc454a --- /dev/null +++ b/resources/profiles/LH/filament/fdm_filament_pet.json @@ -0,0 +1,82 @@ +{ + "type": "filament", + "name": "fdm_filament_pet", + "inherits": "fdm_filament_common", + "from": "system", + "instantiation": "false", + "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" + ] +} \ No newline at end of file diff --git a/resources/profiles/LH/filament/fdm_filament_pla.json b/resources/profiles/LH/filament/fdm_filament_pla.json new file mode 100644 index 00000000000..562adb381ac --- /dev/null +++ b/resources/profiles/LH/filament/fdm_filament_pla.json @@ -0,0 +1,94 @@ +{ + "type": "filament", + "name": "fdm_filament_pla", + "inherits": "fdm_filament_common", + "from": "system", + "instantiation": "false", + "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" + ] +} \ No newline at end of file diff --git a/resources/profiles/LH/filament/fdm_filament_tpu.json b/resources/profiles/LH/filament/fdm_filament_tpu.json new file mode 100644 index 00000000000..fdd29ca2a04 --- /dev/null +++ b/resources/profiles/LH/filament/fdm_filament_tpu.json @@ -0,0 +1,88 @@ +{ + "type": "filament", + "name": "fdm_filament_tpu", + "inherits": "fdm_filament_common", + "from": "system", + "instantiation": "false", + "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" + ] +} \ No newline at end of file diff --git a/resources/profiles/LH/machine/LH Stinger 0.4 nozzle.json b/resources/profiles/LH/machine/LH Stinger 0.4 nozzle.json new file mode 100644 index 00000000000..974b81d5fe6 --- /dev/null +++ b/resources/profiles/LH/machine/LH Stinger 0.4 nozzle.json @@ -0,0 +1,16 @@ +{ + "type": "machine", + "name": "LH Stinger 0.4 nozzle", + "inherits": "fdm_lh_common", + "from": "system", + "setting_id": "LHS_m01_04", + "instantiation": "true", + "printer_model": "LH Stinger", + "nozzle_diameter": [ + "0.4" + ], + "default_filament_profile": [ + "LHS PLA" + ], + "printer_variant": "0.4" +} \ No newline at end of file diff --git a/resources/profiles/LH/machine/LH Stinger MMU 0.4 nozzle.json b/resources/profiles/LH/machine/LH Stinger MMU 0.4 nozzle.json new file mode 100644 index 00000000000..3c8b400b87f --- /dev/null +++ b/resources/profiles/LH/machine/LH Stinger MMU 0.4 nozzle.json @@ -0,0 +1,16 @@ +{ + "type": "machine", + "name": "LH Stinger MMU 0.4 nozzle", + "inherits": "fdm_lh_mmu_common", + "from": "system", + "setting_id": "LHS_m01_mmu_04", + "instantiation": "true", + "printer_model": "LH Stinger MMU", + "nozzle_diameter": [ + "0.4" + ], + "default_filament_profile": [ + "LHS PLA" + ], + "printer_variant": "0.4" +} \ No newline at end of file diff --git a/resources/profiles/LH/machine/LH Stinger MMU.json b/resources/profiles/LH/machine/LH Stinger MMU.json new file mode 100644 index 00000000000..dd0a1201c67 --- /dev/null +++ b/resources/profiles/LH/machine/LH Stinger MMU.json @@ -0,0 +1,12 @@ +{ + "type": "machine_model", + "name": "LH Stinger MMU", + "model_id": "LHS_M_mmu", + "nozzle_diameter": "0.4", + "machine_tech": "FFF", + "family": "LH", + "bed_model": "LH_Stinger_buildplate_model.STL", + "bed_texture": "LH_Stinger_MMU_buildplate_texture.png", + "hotend_model": "", + "default_materials": "LHS PLA;LHS PETG;LHS PCTG;LHS ASA;LHS ABS;LHS PC CF;LHS TPU Foamy 78A;LHS TPU;" +} \ No newline at end of file diff --git a/resources/profiles/LH/machine/LH Stinger.json b/resources/profiles/LH/machine/LH Stinger.json new file mode 100644 index 00000000000..1e294932106 --- /dev/null +++ b/resources/profiles/LH/machine/LH Stinger.json @@ -0,0 +1,12 @@ +{ + "type": "machine_model", + "name": "LH Stinger", + "model_id": "LHS_M_base", + "nozzle_diameter": "0.4", + "machine_tech": "FFF", + "family": "LH", + "bed_model": "LH_Stinger_buildplate_model.STL", + "bed_texture": "LH_Stinger_buildplate_texture.png", + "hotend_model": "", + "default_materials": "LHS PLA;LHS PETG;LHS PCTG;LHS ASA;LHS ABS;LHS PC CF;LHS TPU Foamy 78A;LHS TPU;" +} \ No newline at end of file diff --git a/resources/profiles/LH/machine/fdm_lh_common.json b/resources/profiles/LH/machine/fdm_lh_common.json new file mode 100644 index 00000000000..277e0762eb0 --- /dev/null +++ b/resources/profiles/LH/machine/fdm_lh_common.json @@ -0,0 +1,157 @@ +{ + "type": "machine", + "name": "fdm_lh_common", + "inherits": "fdm_machine_common", + "from": "system", + "instantiation": "false", + "gcode_flavor": "klipper", + "machine_max_acceleration_e": [ + "5000", + "5000" + ], + "machine_max_acceleration_extruding": [ + "200000", + "20000" + ], + "machine_max_acceleration_retracting": [ + "200000", + "5000" + ], + "machine_max_acceleration_travel": [ + "20000", + "20000" + ], + "machine_max_acceleration_x": [ + "200000", + "20000" + ], + "machine_max_acceleration_y": [ + "200000", + "20000" + ], + "machine_max_acceleration_z": [ + "2000", + "200" + ], + "machine_max_speed_e": [ + "200", + "25" + ], + "machine_max_speed_x": [ + "1000", + "200" + ], + "machine_max_speed_y": [ + "1000", + "200" + ], + "machine_max_speed_z": [ + "100", + "12" + ], + "machine_max_jerk_e": [ + "15", + "2.5" + ], + "machine_max_jerk_x": [ + "15", + "9" + ], + "machine_max_jerk_y": [ + "15", + "9" + ], + "machine_max_jerk_z": [ + "15", + "0.4" + ], + "machine_min_extruding_rate": [ + "0", + "0" + ], + "machine_min_travel_rate": [ + "0", + "0" + ], + "max_layer_height": [ + "0.32" + ], + "min_layer_height": [ + "0.08" + ], + "printable_area": [ + "18x38", + "218x38", + "218x238", + "18x238" + ], + "printable_height": "180", + "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.4", + "retraction_minimum_travel": [ + "1" + ], + "retract_before_wipe": [ + "70%" + ], + "retract_when_changing_layer": [ + "1" + ], + "retraction_length": [ + "0.3" + ], + "retract_length_toolchange": [ + "0" + ], + "z_hop": [ + "0.2" + ], + "retract_restart_extra": [ + "0" + ], + "retract_restart_extra_toolchange": [ + "0" + ], + "retraction_speed": [ + "40" + ], + "deretraction_speed": [ + "30" + ], + "retract_lift_enforce": [ + "Top and Bottom" + ], + "z_hop_types": [ + "Auto Lift" + ], + "silent_mode": "0", + "single_extruder_multi_material": "1", + "change_filament_gcode": "", + "manual_filament_change": "1", + "wipe": [ + "1" + ], + "default_filament_profile": [ + "LH Generic PLA" + ], + "enable_filament_ramming": "0", + "default_print_profile": "0.20mm Daily @LH Stinger", + "bed_exclude_area": [ + "0x0" + ], + "machine_start_gcode": "PRINT_START_LHS BED=[bed_temperature_initial_layer_single] HOTEND=[nozzle_temperature_initial_layer] AUTOMESH=1 AUTOPURGE=1 QUIETMODE={if print_preset =~ /.*Quiet.*/ }1{else}0{endif}\n", + "machine_end_gcode": "PRINT_END", + "layer_change_gcode": ";AFTER_LAYER_CHANGES\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": [ + "brass" + ], + "bed_temperature_formula": "by_first_filament", + "auxiliary_fan": "1" +} \ No newline at end of file diff --git a/resources/profiles/LH/machine/fdm_lh_mmu_common.json b/resources/profiles/LH/machine/fdm_lh_mmu_common.json new file mode 100644 index 00000000000..4390b0d3fd7 --- /dev/null +++ b/resources/profiles/LH/machine/fdm_lh_mmu_common.json @@ -0,0 +1,21 @@ +{ + "type": "machine", + "name": "fdm_lh_mmu_common", + "inherits": "fdm_lh_common", + "from": "system", + "instantiation": "false", + "cooling_tube_length": "0", + "cooling_tube_retraction": "0", + "enable_filament_ramming": "0", + "extra_loading_move": "0", + "machine_start_gcode": " _SP_PRINT_START LANE=[initial_tool] TEMP=[nozzle_temperature_initial_layer]\n\nPRINT_START_LHS BED=[bed_temperature_initial_layer_single] HOTEND=[nozzle_temperature_initial_layer] AUTOMESH=1 AUTOPURGE=1 QUIETMODE={if print_preset =~ /.*Quiet.*/ }1{else}0{endif}\n\n", + "change_filament_gcode": " _SP_SET_PURGE PURGE=[first_flush_volume] ", + "layer_change_gcode": ";AFTER_LAYER_CHANGES\n;[layer_z]", + "machine_end_gcode": "PRINT_END\n\n_SP_PRINT_END", + "machine_tool_change_time": "20", + "parking_pos_retraction": "0", + "manual_filament_change": "0", + "retract_length_toolchange": [ + "0" + ] +} \ No newline at end of file diff --git a/resources/profiles/LH/machine/fdm_machine_common.json b/resources/profiles/LH/machine/fdm_machine_common.json new file mode 100644 index 00000000000..a46315dc8cb --- /dev/null +++ b/resources/profiles/LH/machine/fdm_machine_common.json @@ -0,0 +1,119 @@ +{ + "type": "machine", + "name": "fdm_machine_common", + "from": "system", + "instantiation": "false", + "printer_technology": "FFF", + "deretraction_speed": [ + "40" + ], + "extruder_colour": [ + "#FCE94F" + ], + "extruder_offset": [ + "0x0" + ], + "gcode_flavor": "marlin", + "silent_mode": "0", + "machine_max_acceleration_e": [ + "5000" + ], + "machine_max_acceleration_extruding": [ + "10000" + ], + "machine_max_acceleration_retracting": [ + "1000" + ], + "machine_max_acceleration_x": [ + "10000" + ], + "machine_max_acceleration_y": [ + "10000" + ], + "machine_max_acceleration_z": [ + "500" + ], + "machine_max_speed_e": [ + "60" + ], + "machine_max_speed_x": [ + "500" + ], + "machine_max_speed_y": [ + "500" + ], + "machine_max_speed_z": [ + "10" + ], + "machine_max_jerk_e": [ + "5" + ], + "machine_max_jerk_x": [ + "8" + ], + "machine_max_jerk_y": [ + "8" + ], + "machine_max_jerk_z": [ + "0.4" + ], + "machine_min_extruding_rate": [ + "0" + ], + "machine_min_travel_rate": [ + "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", + "nozzle_diameter": [ + "0.4" + ], + "printer_settings_id": "", + "printer_variant": "0.4", + "retraction_minimum_travel": [ + "2" + ], + "retract_before_wipe": [ + "70%" + ], + "retract_when_changing_layer": [ + "1" + ], + "retraction_length": [ + "1" + ], + "retract_length_toolchange": [ + "1" + ], + "z_hop": [ + "0" + ], + "retract_restart_extra": [ + "0" + ], + "retract_restart_extra_toolchange": [ + "0" + ], + "retraction_speed": [ + "60" + ], + "single_extruder_multi_material": "1", + "change_filament_gcode": "", + "wipe": [ + "1" + ], + "default_print_profile": "", + "machine_start_gcode": "G0 Z20 F9000\nG92 E0; G1 E-10 F1200\nG28\nM970 Q1 A10 B10 C130 K0\nM970 Q1 A10 B131 C250 K1\nM974 Q1 S1 P0\nM970 Q0 A10 B10 C130 H20 K0\nM970 Q0 A10 B131 C250 K1\nM974 Q0 S1 P0\nM220 S100 ;Reset Feedrate\nM221 S100 ;Reset Flowrate\nG29 ;Home\nG90;\nG92 E0 ;Reset Extruder \nG1 Z2.0 F3000 ;Move Z Axis up \nG1 X10.1 Y20 Z0.28 F5000.0 ;Move to start position\nM109 S205;\nG1 X10.1 Y200.0 Z0.28 F1500.0 E15 ;Draw the first line\nG1 X10.4 Y200.0 Z0.28 F5000.0 ;Move to side a little\nG1 X10.4 Y20 Z0.28 F1500.0 E30 ;Draw the second line\nG92 E0 ;Reset Extruder \nG1 X110 Y110 Z2.0 F3000 ;Move Z Axis up", + "machine_end_gcode": "M400 ; wait for buffer to clear\nG92 E0 ; zero the extruder\nG1 E-4.0 F3600; retract \nG91\nG1 Z3;\nM104 S0 ; turn off hotend\nM140 S0 ; turn off bed\nM106 S0 ; turn off fan\nG90 \nG0 X110 Y200 F3600 \nprint_end", + "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": "M601" +} \ No newline at end of file diff --git a/resources/profiles/LH/process/0.10mm HueForge @LH Stinger.json b/resources/profiles/LH/process/0.10mm HueForge @LH Stinger.json new file mode 100644 index 00000000000..c3a7924bff1 --- /dev/null +++ b/resources/profiles/LH/process/0.10mm HueForge @LH Stinger.json @@ -0,0 +1,42 @@ +{ + "type": "process", + "name": "0.10mm HueForge @LH Stinger", + "inherits": "fdm_process_lh_common", + "from": "system", + "setting_id": "LHS_P_hueforge", + "instantiation": "true", + "compatible_printers": [ + "LH Stinger 0.4 nozzle", + "LH Stinger MMU 0.4 nozzle" + ], + "bottom_shell_layers": "999", + "bottom_solid_infill_flow_ratio": "0.98", + "detect_narrow_internal_solid_infill": "0", + "ensure_vertical_shell_thickness": "none", + "initial_layer_acceleration": "1000", + "initial_layer_infill_speed": "150", + "initial_layer_print_height": "0.16", + "initial_layer_speed": "80", + "layer_height": "0.1", + "max_travel_detour_distance": "60", + "print_extruder_id": [ + "1" + ], + "print_extruder_variant": [ + "Direct Drive Standard" + ], + "reduce_crossing_wall": "1", + "skirt_loops": "1", + "slice_closing_radius": "0.042", + "sparse_infill_density": "0%", + "top_bottom_infill_wall_overlap": "15%", + "top_shell_layers": "0", + "top_solid_infill_flow_ratio": "0.98", + "brim_type": "no_brim", + "wall_generator": "arachne", + "wall_sequence": "inner wall/outer wall", + "reduce_infill_retraction": "1", + "gap_fill_target": "nowhere", + "filter_out_gap_fill": "0.5", + "wall_loops": "1" +} \ No newline at end of file diff --git a/resources/profiles/LH/process/0.14mm Detail @LH Stinger.json b/resources/profiles/LH/process/0.14mm Detail @LH Stinger.json new file mode 100644 index 00000000000..cad9a16e51e --- /dev/null +++ b/resources/profiles/LH/process/0.14mm Detail @LH Stinger.json @@ -0,0 +1,54 @@ +{ + "type": "process", + "name": "0.14mm Detail @LH Stinger", + "inherits": "fdm_process_lh_common", + "from": "system", + "setting_id": "LHS_P_detail", + "instantiation": "true", + "compatible_printers": [ + "LH Stinger 0.4 nozzle", + "LH Stinger MMU 0.4 nozzle" + ], + "bottom_shell_layers": "5", + "bridge_flow": "1.2", + "default_jerk": "10", + "enable_support": "1", + "ensure_vertical_shell_thickness": "ensure_moderate", + "filter_out_gap_fill": "10", + "infill_jerk": "10", + "infill_wall_overlap": "10%", + "initial_layer_infill_speed": "90", + "initial_layer_jerk": "10", + "initial_layer_travel_speed": "250", + "inner_wall_jerk": "10", + "internal_bridge_flow": "1.2", + "layer_height": "0.14", + "max_travel_detour_distance": "50", + "outer_wall_jerk": "10", + "print_extruder_id": [ + "1" + ], + "print_extruder_variant": [ + "Direct Drive Standard" + ], + "reduce_crossing_wall": "1", + "skirt_loops": "2", + "slow_down_layers": "2", + "small_perimeter_speed": "75%", + "small_perimeter_threshold": "3", + "sparse_infill_pattern": "rectilinear", + "sparse_infill_density": "15%", + "support_angle": "45", + "support_base_pattern": "rectilinear", + "support_base_pattern_spacing": "1.5", + "support_bottom_z_distance": "0.15", + "support_style": "organic", + "support_type": "tree(auto)", + "top_shell_layers": "6", + "top_surface_jerk": "10", + "wall_generator": "arachne", + "min_length_factor": "0.5", + "gap_fill_target": "nowhere", + "wall_loops": "3", + "travel_jerk": "10" +} \ No newline at end of file diff --git a/resources/profiles/LH/process/0.14mm Detail Strength @LH Stinger.json b/resources/profiles/LH/process/0.14mm Detail Strength @LH Stinger.json new file mode 100644 index 00000000000..e473db77077 --- /dev/null +++ b/resources/profiles/LH/process/0.14mm Detail Strength @LH Stinger.json @@ -0,0 +1,67 @@ +{ + "type": "process", + "name": "0.14mm Detail Strength @LH Stinger", + "inherits": "fdm_process_lh_common", + "from": "system", + "setting_id": "LHS_P_detail_strength", + "instantiation": "true", + "compatible_printers": [ + "LH Stinger 0.4 nozzle", + "LH Stinger MMU 0.4 nozzle" + ], + "bottom_shell_layers": "6", + "bottom_shell_thickness": "0.8", + "bridge_acceleration": "7500", + "bridge_flow": "1.2", + "brim_width": "3", + "default_acceleration": "15000", + "default_jerk": "10", + "gap_infill_speed": "200", + "infill_anchor": "1000", + "infill_anchor_max": "1000", + "infill_jerk": "10", + "initial_layer_infill_speed": "90", + "initial_layer_jerk": "10", + "initial_layer_travel_speed": "250", + "inner_wall_acceleration": "10000", + "inner_wall_speed": "200", + "inner_wall_jerk": "10", + "internal_solid_infill_acceleration": "15000", + "internal_solid_infill_speed": "200", + "layer_height": "0.14", + "max_travel_detour_distance": "50", + "outer_wall_acceleration": "7500", + "outer_wall_jerk": "10", + "outer_wall_speed": "200", + "print_extruder_id": [ + "1" + ], + "print_extruder_variant": [ + "Direct Drive Standard" + ], + "reduce_crossing_wall": "1", + "skirt_loops": "2", + "slow_down_layers": "2", + "small_perimeter_speed": "75%", + "small_perimeter_threshold": "3", + "sparse_infill_acceleration": "15000", + "sparse_infill_speed": "200", + "sparse_infill_density": "40%", + "sparse_infill_pattern": "gyroid", + "support_base_pattern_spacing": "1.5", + "support_bottom_interface_spacing": "0.3", + "support_bottom_z_distance": "0.15", + "support_interface_speed": "300", + "support_speed": "200", + "support_type": "normal(manual)", + "top_shell_layers": "7", + "top_shell_thickness": "1", + "top_surface_acceleration": "7500", + "top_surface_jerk": "10", + "top_surface_speed": "200", + "travel_jerk": "10", + "wall_generator": "arachne", + "wall_sequence": "inner wall/outer wall", + "top_bottom_infill_wall_overlap": "25%", + "wall_loops": "4" +} \ No newline at end of file diff --git a/resources/profiles/LH/process/0.20mm Daily @LH Stinger.json b/resources/profiles/LH/process/0.20mm Daily @LH Stinger.json new file mode 100644 index 00000000000..78f152a487f --- /dev/null +++ b/resources/profiles/LH/process/0.20mm Daily @LH Stinger.json @@ -0,0 +1,12 @@ +{ + "type": "process", + "name": "0.20mm Daily @LH Stinger", + "inherits": "fdm_process_lh_common", + "from": "system", + "setting_id": "LHS_P_daily", + "instantiation": "true", + "compatible_printers": [ + "LH Stinger 0.4 nozzle", + "LH Stinger MMU 0.4 nozzle" + ] +} \ No newline at end of file diff --git a/resources/profiles/LH/process/0.20mm MMU @LH Stinger.json b/resources/profiles/LH/process/0.20mm MMU @LH Stinger.json new file mode 100644 index 00000000000..e4a2616d100 --- /dev/null +++ b/resources/profiles/LH/process/0.20mm MMU @LH Stinger.json @@ -0,0 +1,48 @@ +{ + "type": "process", + "name": "0.20mm MMU @LH Stinger", + "inherits": "fdm_process_lh_common", + "from": "system", + "setting_id": "LHS_P_mmu", + "instantiation": "true", + "compatible_printers": [ + "LH Stinger MMU 0.4 nozzle" + ], + "bottom_surface_pattern": "monotonicline", + "bridge_acceleration": "7000", + "default_jerk": "10", + "detect_narrow_internal_solid_infill": "0", + "filter_out_gap_fill": "1", + "gap_infill_speed": "220", + "infill_jerk": "10", + "infill_wall_overlap": "8%", + "initial_layer_infill_speed": "120", + "initial_layer_jerk": "10", + "initial_layer_line_width": "0.4", + "inner_wall_acceleration": "15000", + "inner_wall_jerk": "10", + "inner_wall_speed": "220", + "internal_solid_infill_acceleration": "15000", + "internal_solid_infill_speed": "220", + "only_one_wall_first_layer": "1", + "outer_wall_jerk": "10", + "outer_wall_speed": "220", + "prime_tower_width": "80", + "print_extruder_id": [ + "1" + ], + "print_extruder_variant": [ + "Direct Drive Standard" + ], + "raft_first_layer_density": "50%", + "small_perimeter_threshold": "2", + "sparse_infill_acceleration": "15000", + "sparse_infill_pattern": "rectilinear", + "sparse_infill_speed": "220", + "top_bottom_infill_wall_overlap": "8%", + "top_surface_jerk": "10", + "top_surface_speed": "150", + "wall_generator": "arachne", + "sparse_infill_density": "15%", + "travel_jerk": "10" +} \ No newline at end of file diff --git a/resources/profiles/LH/process/0.20mm PETG @LH Stinger.json b/resources/profiles/LH/process/0.20mm PETG @LH Stinger.json new file mode 100644 index 00000000000..8582a7f0ac1 --- /dev/null +++ b/resources/profiles/LH/process/0.20mm PETG @LH Stinger.json @@ -0,0 +1,74 @@ +{ + "type": "process", + "name": "0.20mm PETG @LH Stinger", + "inherits": "fdm_process_lh_common", + "from": "system", + "setting_id": "LHS_P_petg", + "instantiation": "true", + "compatible_printers": [ + "LH Stinger 0.4 nozzle", + "LH Stinger MMU 0.4 nozzle" + ], + "accel_to_decel_factor": "90%", + "bottom_shell_layers": "5", + "bridge_acceleration": "3000", + "bridge_density": "95%", + "bridge_flow": "1.1", + "bridge_speed": "30", + "brim_ears_max_angle": "180", + "brim_object_gap": "0.04", + "default_acceleration": "15000", + "default_jerk": "10", + "filter_out_gap_fill": "1", + "gap_infill_speed": "200", + "infill_jerk": "10", + "infill_wall_overlap": "10%", + "initial_layer_infill_speed": "100", + "initial_layer_jerk": "10", + "initial_layer_print_height": "0.25", + "initial_layer_travel_speed": "250", + "inner_wall_acceleration": "15000", + "inner_wall_speed": "200", + "inner_wall_jerk": "10", + "inner_wall_line_width": "0.44", + "internal_bridge_speed": "50", + "internal_solid_infill_acceleration": "15000", + "internal_solid_infill_speed": "200", + "internal_solid_infill_line_width": "0.44", + "line_width": "0.44", + "max_travel_detour_distance": "50", + "outer_wall_jerk": "10", + "outer_wall_line_width": "0.44", + "outer_wall_speed": "200", + "overhang_1_4_speed": "60%", + "overhang_2_4_speed": "40", + "overhang_3_4_speed": "20", + "overhang_reverse_internal_only": "1", + "overhang_reverse_threshold": "0%", + "print_extruder_id": [ + "1" + ], + "print_extruder_variant": [ + "Direct Drive Standard" + ], + "raft_first_layer_density": "60%", + "reduce_crossing_wall": "1", + "skirt_loops": "2", + "slow_down_layers": "2", + "small_perimeter_threshold": "10", + "sparse_infill_acceleration": "15000", + "sparse_infill_speed": "200", + "sparse_infill_line_width": "0.44", + "support_interface_speed": "200", + "support_line_width": "0.42", + "support_speed": "200", + "top_bottom_infill_wall_overlap": "18%", + "top_shell_layers": "6", + "top_surface_acceleration": "5000", + "top_surface_jerk": "10", + "top_surface_speed": "130", + "travel_jerk": "10", + "wall_loops": "3", + "gap_fill_target": "nowhere", + "wipe_tower_max_purge_speed": "150" +} \ No newline at end of file diff --git a/resources/profiles/LH/process/0.20mm Quiet @LH Stinger.json b/resources/profiles/LH/process/0.20mm Quiet @LH Stinger.json new file mode 100644 index 00000000000..d26b9efef81 --- /dev/null +++ b/resources/profiles/LH/process/0.20mm Quiet @LH Stinger.json @@ -0,0 +1,53 @@ +{ + "type": "process", + "name": "0.20mm Quiet @LH Stinger", + "inherits": "fdm_process_lh_common", + "from": "system", + "setting_id": "LHS_P_quiet", + "instantiation": "true", + "compatible_printers": [ + "LH Stinger 0.4 nozzle", + "LH Stinger MMU 0.4 nozzle" + ], + "accel_to_decel_factor": "75%", + "bridge_acceleration": "5000", + "bridge_speed": "40", + "default_acceleration": "10000", + "default_jerk": "5", + "filter_out_gap_fill": "10", + "gap_infill_speed": "200", + "infill_jerk": "5", + "infill_wall_overlap": "10%", + "initial_layer_infill_speed": "100", + "initial_layer_jerk": "5", + "initial_layer_travel_speed": "180", + "inner_wall_acceleration": "10000", + "inner_wall_jerk": "5", + "internal_bridge_speed": "60", + "internal_solid_infill_acceleration": "10000", + "outer_wall_acceleration": "5000", + "outer_wall_jerk": "5", + "outer_wall_speed": "200", + "print_extruder_id": [ + "1" + ], + "print_extruder_variant": [ + "Direct Drive Standard" + ], + "raft_first_layer_density": "60%", + "sparse_infill_acceleration": "10000", + "sparse_infill_pattern": "rectilinear", + "support_interface_speed": "170", + "support_speed": "170", + "top_surface_jerk": "5", + "top_surface_speed": "200", + "inner_wall_speed": "200", + "sparse_infill_speed": "200", + "internal_solid_infill_speed": "200", + "travel_acceleration": "10000", + "travel_jerk": "5", + "sparse_infill_density": "15%", + "accel_to_decel_enable": "1", + "gap_fill_target": "nowhere", + "travel_speed": "200" +} \ No newline at end of file diff --git a/resources/profiles/LH/process/0.20mm Solid @LH Stinger.json b/resources/profiles/LH/process/0.20mm Solid @LH Stinger.json new file mode 100644 index 00000000000..4d1218db8b2 --- /dev/null +++ b/resources/profiles/LH/process/0.20mm Solid @LH Stinger.json @@ -0,0 +1,64 @@ +{ + "type": "process", + "name": "0.20mm Solid @LH Stinger", + "inherits": "fdm_process_lh_common", + "from": "system", + "setting_id": "LHS_P_solid", + "instantiation": "true", + "compatible_printers": [ + "LH Stinger 0.4 nozzle", + "LH Stinger MMU 0.4 nozzle" + ], + "accel_to_decel_factor": "90%", + "bottom_shell_layers": "2", + "bridge_acceleration": "5000", + "bridge_density": "97%", + "brim_object_gap": "0.04", + "default_acceleration": "15000", + "default_jerk": "10", + "detect_narrow_internal_solid_infill": "0", + "enable_support": "1", + "ensure_vertical_shell_thickness": "none", + "filter_out_gap_fill": "2", + "gap_infill_speed": "200", + "infill_jerk": "10", + "infill_wall_overlap": "18%", + "initial_layer_jerk": "10", + "initial_layer_line_width": "0.45", + "initial_layer_print_height": "0.25", + "inner_wall_acceleration": "15000", + "inner_wall_jerk": "10", + "internal_solid_infill_acceleration": "15000", + "outer_wall_jerk": "10", + "outer_wall_speed": "200", + "overhang_1_4_speed": "60%", + "overhang_2_4_speed": "40", + "overhang_3_4_speed": "20", + "print_extruder_id": [ + "1" + ], + "print_extruder_variant": [ + "Direct Drive Standard" + ], + "raft_first_layer_density": "60%", + "small_perimeter_threshold": "7", + "sparse_infill_acceleration": "15000", + "sparse_infill_density": "98%", + "sparse_infill_pattern": "rectilinear", + "support_interface_speed": "200", + "support_speed": "200", + "top_shell_layers": "2", + "top_shell_thickness": "0.6", + "top_solid_infill_flow_ratio": "0.96", + "top_surface_acceleration": "5000", + "top_surface_jerk": "10", + "top_surface_speed": "150", + "inner_wall_speed": "200", + "sparse_infill_speed": "200", + "internal_solid_infill_speed": "200", + "internal_bridge_density": "95%", + "internal_bridge_speed": "150", + "gap_fill_target": "nowhere", + "wall_loops": "3", + "travel_jerk": "10" +} \ No newline at end of file diff --git a/resources/profiles/LH/process/0.20mm Speed @LH Stinger.json b/resources/profiles/LH/process/0.20mm Speed @LH Stinger.json new file mode 100644 index 00000000000..a56bf33a87c --- /dev/null +++ b/resources/profiles/LH/process/0.20mm Speed @LH Stinger.json @@ -0,0 +1,43 @@ +{ + "type": "process", + "name": "0.20mm Speed @LH Stinger", + "inherits": "fdm_process_lh_common", + "from": "system", + "setting_id": "LHS_P_speed", + "instantiation": "true", + "compatible_printers": [ + "LH Stinger 0.4 nozzle", + "LH Stinger MMU 0.4 nozzle" + ], + "bridge_acceleration": "15000", + "default_acceleration": "30000", + "filter_out_gap_fill": "10", + "infill_wall_overlap": "10%", + "initial_layer_speed": "90", + "inner_wall_acceleration": "30000", + "inner_wall_speed": "600", + "internal_solid_infill_acceleration": "30000", + "internal_solid_infill_speed": "600", + "outer_wall_acceleration": "15000", + "outer_wall_speed": "600", + "print_extruder_id": [ + "1" + ], + "print_extruder_variant": [ + "Direct Drive Standard" + ], + "raft_first_layer_density": "80%", + "sparse_infill_acceleration": "30000", + "sparse_infill_pattern": "rectilinear", + "sparse_infill_speed": "600", + "support_bottom_z_distance": "0.15", + "support_expansion": "2", + "support_interface_top_layers": "3", + "support_object_xy_distance": "0.25", + "top_surface_acceleration": "15000", + "top_surface_speed": "300", + "travel_acceleration": "30000", + "sparse_infill_density": "15%", + "gap_fill_target": "nowhere", + "travel_speed": "600" +} \ No newline at end of file diff --git a/resources/profiles/LH/process/0.20mm Strength @LH Stinger.json b/resources/profiles/LH/process/0.20mm Strength @LH Stinger.json new file mode 100644 index 00000000000..8d1929bb607 --- /dev/null +++ b/resources/profiles/LH/process/0.20mm Strength @LH Stinger.json @@ -0,0 +1,66 @@ +{ + "type": "process", + "name": "0.20mm Strength @LH Stinger", + "inherits": "fdm_process_lh_common", + "from": "system", + "setting_id": "LHS_P_strength", + "instantiation": "true", + "compatible_printers": [ + "LH Stinger 0.4 nozzle", + "LH Stinger MMU 0.4 nozzle" + ], + "accel_to_decel_factor": "90%", + "bottom_shell_layers": "5", + "bridge_acceleration": "5000", + "bridge_flow": "1.4", + "brim_object_gap": "0.04", + "default_acceleration": "15000", + "default_jerk": "10", + "filter_out_gap_fill": "1", + "gap_infill_speed": "200", + "infill_anchor": "1000", + "infill_anchor_max": "1000", + "infill_jerk": "10", + "initial_layer_infill_speed": "120", + "initial_layer_jerk": "10", + "initial_layer_speed": "90", + "initial_layer_travel_speed": "250", + "inner_wall_acceleration": "15000", + "inner_wall_jerk": "10", + "inner_wall_line_width": "0.46", + "internal_solid_infill_acceleration": "15000", + "internal_solid_infill_line_width": "0.46", + "line_width": "0.46", + "outer_wall_jerk": "10", + "outer_wall_line_width": "0.46", + "outer_wall_speed": "200", + "overhang_1_4_speed": "60%", + "overhang_2_4_speed": "40", + "overhang_3_4_speed": "20", + "precise_outer_wall": "0", + "print_extruder_id": [ + "1" + ], + "print_extruder_variant": [ + "Direct Drive Standard" + ], + "sparse_infill_acceleration": "15000", + "sparse_infill_density": "40%", + "sparse_infill_line_width": "0.46", + "sparse_infill_pattern": "gyroid", + "support_bottom_z_distance": "0.15", + "support_interface_speed": "200", + "support_line_width": "0.42", + "support_speed": "200", + "top_shell_layers": "6", + "top_shell_thickness": "1", + "top_surface_acceleration": "5000", + "top_surface_jerk": "10", + "top_surface_speed": "200", + "inner_wall_speed": "200", + "sparse_infill_speed": "200", + "internal_solid_infill_speed": "200", + "travel_jerk": "10", + "wall_sequence": "inner wall/outer wall", + "wall_loops": "4" +} \ No newline at end of file diff --git a/resources/profiles/LH/process/0.20mm TPU @LH Stinger.json b/resources/profiles/LH/process/0.20mm TPU @LH Stinger.json new file mode 100644 index 00000000000..6893ec1e056 --- /dev/null +++ b/resources/profiles/LH/process/0.20mm TPU @LH Stinger.json @@ -0,0 +1,82 @@ +{ + "type": "process", + "name": "0.20mm TPU @LH Stinger", + "inherits": "fdm_process_lh_common", + "from": "system", + "setting_id": "LHS_P_tpu", + "instantiation": "true", + "compatible_printers": [ + "LH Stinger 0.4 nozzle", + "LH Stinger MMU 0.4 nozzle" + ], + "accel_to_decel_factor": "90%", + "bridge_acceleration": "5000", + "bridge_density": "95%", + "bridge_flow": "1.4", + "bridge_speed": "40", + "brim_ears_max_angle": "180", + "brim_object_gap": "0.02", + "default_acceleration": "15000", + "default_jerk": "5", + "elefant_foot_compensation": "0.15", + "filter_out_gap_fill": "40", + "gap_infill_speed": "200", + "infill_jerk": "5", + "initial_layer_infill_speed": "70", + "initial_layer_jerk": "5", + "initial_layer_print_height": "0.25", + "initial_layer_speed": "40", + "initial_layer_travel_speed": "200", + "inner_wall_acceleration": "15000", + "inner_wall_jerk": "5", + "inner_wall_line_width": "0.46", + "internal_bridge_flow": "1.2", + "internal_bridge_speed": "50", + "internal_solid_infill_acceleration": "15000", + "internal_solid_infill_line_width": "0.46", + "internal_solid_infill_speed": "180", + "line_width": "0.46", + "max_travel_detour_distance": "50", + "outer_wall_jerk": "5", + "outer_wall_line_width": "0.46", + "outer_wall_speed": "150", + "overhang_1_4_speed": "60%", + "overhang_2_4_speed": "40", + "overhang_3_4_speed": "20", + "print_extruder_id": [ + "1" + ], + "print_extruder_variant": [ + "Direct Drive Standard" + ], + "raft_first_layer_density": "80%", + "reduce_crossing_wall": "1", + "skirt_loops": "2", + "slow_down_layers": "2", + "small_perimeter_speed": "60%", + "small_perimeter_threshold": "10", + "sparse_infill_acceleration": "15000", + "sparse_infill_line_width": "0.46", + "sparse_infill_speed": "150", + "sparse_infill_density": "15%", + "staggered_inner_seams": "1", + "support_expansion": "2", + "support_interface_speed": "200", + "support_line_width": "0.42", + "support_speed": "200", + "top_bottom_infill_wall_overlap": "18%", + "top_surface_acceleration": "5000", + "top_surface_jerk": "5", + "top_surface_line_width": "0.42", + "top_surface_speed": "150", + "travel_jerk": "10", + "wipe_speed": "80", + "inner_wall_speed": "200", + "ensure_vertical_shell_thickness": "ensure_moderate", + "wall_sequence": "inner wall/outer wall", + "wall_loops": "3", + "gap_fill_target": "nowhere", + "reduce_infill_retraction": "1", + "infill_wall_overlap": "22%", + "wipe_tower_max_purge_speed": "80" +} \ No newline at end of file diff --git a/resources/profiles/LH/process/0.25mm Vase Mode @LH Stinger.json b/resources/profiles/LH/process/0.25mm Vase Mode @LH Stinger.json new file mode 100644 index 00000000000..bc612fc5e95 --- /dev/null +++ b/resources/profiles/LH/process/0.25mm Vase Mode @LH Stinger.json @@ -0,0 +1,70 @@ +{ + "type": "process", + "name": "0.25mm Vase Mode @LH Stinger", + "inherits": "fdm_process_lh_common", + "from": "system", + "setting_id": "LHS_P_vase_mode", + "instantiation": "true", + "compatible_printers": [ + "LH Stinger 0.4 nozzle", + "LH Stinger MMU 0.4 nozzle" + ], + "accel_to_decel_factor": "90%", + "bottom_shell_layers": "5", + "bridge_acceleration": "5000", + "bridge_flow": "1.4", + "brim_object_gap": "0.04", + "default_acceleration": "15000", + "default_jerk": "10", + "filter_out_gap_fill": "1", + "gap_infill_speed": "200", + "infill_jerk": "10", + "infill_wall_overlap": "10%", + "initial_layer_jerk": "10", + "initial_layer_line_width": "0.65", + "initial_layer_print_height": "0.25", + "initial_layer_speed": "80", + "initial_layer_travel_speed": "250", + "inner_wall_acceleration": "15000", + "inner_wall_jerk": "10", + "inner_wall_line_width": "0.46", + "internal_solid_infill_acceleration": "15000", + "internal_solid_infill_line_width": "0.46", + "layer_height": "0.25", + "line_width": "0.46", + "notes": "Decrease your Filament - Minimum layer time to ~2 seconds and set your fan speeds to be constant", + "outer_wall_jerk": "10", + "outer_wall_line_width": "0.65", + "outer_wall_speed": "200", + "overhang_1_4_speed": "60%", + "overhang_2_4_speed": "40", + "overhang_3_4_speed": "20", + "print_extruder_id": [ + "1" + ], + "print_extruder_variant": [ + "Direct Drive Standard" + ], + "sparse_infill_acceleration": "15000", + "sparse_infill_density": "0%", + "sparse_infill_line_width": "0.46", + "sparse_infill_pattern": "3dhoneycomb", + "spiral_mode": "1", + "spiral_mode_smooth": "1", + "support_interface_speed": "200", + "support_line_width": "0.42", + "support_speed": "200", + "top_bottom_infill_wall_overlap": "10%", + "top_shell_layers": "0", + "top_shell_thickness": "1", + "top_surface_acceleration": "5000", + "top_surface_jerk": "10", + "top_surface_speed": "200", + "inner_wall_speed": "200", + "sparse_infill_speed": "200", + "internal_solid_infill_speed": "200", + "wall_sequence": "inner wall/outer wall", + "travel_jerk": "10", + "skirt_loops": "1", + "wall_loops": "1" +} \ No newline at end of file diff --git a/resources/profiles/LH/process/fdm_process_common.json b/resources/profiles/LH/process/fdm_process_common.json new file mode 100644 index 00000000000..df8283904af --- /dev/null +++ b/resources/profiles/LH/process/fdm_process_common.json @@ -0,0 +1,108 @@ +{ + "type": "process", + "name": "fdm_process_common", + "from": "system", + "instantiation": "false", + "adaptive_layer_height": "0", + "reduce_crossing_wall": "0", + "max_travel_detour_distance": "0", + "bottom_surface_pattern": "monotonic", + "bottom_shell_thickness": "0", + "bridge_speed": "50", + "brim_width": "5", + "brim_object_gap": "0.1", + "compatible_printers": [], + "compatible_printers_condition": "", + "print_sequence": "by layer", + "default_acceleration": "1000", + "initial_layer_acceleration": "500", + "top_surface_acceleration": "1000", + "travel_acceleration": "1000", + "inner_wall_acceleration": "1000", + "outer_wall_acceleration": "700", + "bridge_no_support": "0", + "draft_shield": "disabled", + "elefant_foot_compensation": "0", + "enable_arc_fitting": "0", + "wall_infill_order": "inner wall/outer wall/infill", + "infill_direction": "45", + "sparse_infill_density": "15%", + "sparse_infill_pattern": "crosshatch", + "initial_layer_print_height": "0.2", + "infill_combination": "0", + "infill_wall_overlap": "25%", + "interface_shells": "0", + "ironing_flow": "10%", + "ironing_spacing": "0.15", + "ironing_speed": "30", + "ironing_type": "no ironing", + "reduce_infill_retraction": "1", + "filename_format": "{input_filename_base}_{layer_height}mm_{filament_type[initial_tool]}_{printer_model}_{print_time}.gcode", + "detect_overhang_wall": "1", + "slowdown_for_curled_perimeters": "1", + "overhang_1_4_speed": "0", + "overhang_2_4_speed": "50", + "overhang_3_4_speed": "30", + "overhang_4_4_speed": "10", + "line_width": "110%", + "inner_wall_line_width": "110%", + "outer_wall_line_width": "100%", + "top_surface_line_width": "93.75%", + "sparse_infill_line_width": "110%", + "initial_layer_line_width": "120%", + "internal_solid_infill_line_width": "120%", + "support_line_width": "96%", + "wall_loops": "3", + "print_settings_id": "", + "raft_layers": "0", + "seam_position": "aligned", + "skirt_distance": "2", + "skirt_height": "3", + "min_skirt_length": "4", + "skirt_loops": "0", + "minimum_sparse_infill_area": "15", + "spiral_mode": "0", + "standby_temperature_delta": "-5", + "enable_support": "0", + "resolution": "0.012", + "support_type": "normal(auto)", + "support_on_build_plate_only": "0", + "support_top_z_distance": "0.2", + "support_bottom_z_distance": "0.2", + "support_filament": "0", + "support_interface_loop_pattern": "0", + "support_interface_filament": "0", + "support_interface_top_layers": "2", + "support_interface_bottom_layers": "2", + "support_interface_spacing": "0.5", + "support_interface_speed": "80", + "support_base_pattern": "default", + "support_base_pattern_spacing": "2.5", + "support_speed": "150", + "support_threshold_angle": "30", + "support_object_xy_distance": "0.35", + "tree_support_branch_angle": "30", + "tree_support_wall_count": "0", + "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": "60", + "xy_hole_compensation": "0", + "xy_contour_compensation": "0", + "layer_height": "0.2", + "bottom_shell_layers": "3", + "top_shell_layers": "4", + "bridge_flow": "1", + "initial_layer_speed": "45", + "initial_layer_infill_speed": "45", + "outer_wall_speed": "45", + "inner_wall_speed": "80", + "sparse_infill_speed": "150", + "internal_solid_infill_speed": "150", + "top_surface_speed": "50", + "gap_infill_speed": "30", + "travel_speed": "200" +} \ No newline at end of file diff --git a/resources/profiles/LH/process/fdm_process_lh_common.json b/resources/profiles/LH/process/fdm_process_lh_common.json new file mode 100644 index 00000000000..49ea02fee81 --- /dev/null +++ b/resources/profiles/LH/process/fdm_process_lh_common.json @@ -0,0 +1,109 @@ +{ + "type": "process", + "name": "fdm_process_lh_common", + "inherits": "fdm_process_common", + "from": "system", + "instantiation": "false", + "exclude_object": "1", + "accel_to_decel_enable": "0", + "bottom_shell_layers": "4", + "bridge_acceleration": "10000", + "bridge_density": "100%", + "brim_object_gap": "0.05", + "brim_width": "4", + "default_acceleration": "20000", + "dont_filter_internal_bridges": "limited", + "elefant_foot_compensation": "0.05", + "ensure_vertical_shell_thickness": "ensure_critical_only", + "filter_out_gap_fill": "1", + "gap_fill_target": "everywhere", + "gap_infill_speed": "400", + "independent_support_layer_height": "0", + "infill_jerk": "15", + "infill_wall_overlap": "15%", + "top_bottom_infill_wall_overlap": "22%", + "initial_layer_acceleration": "600", + "initial_layer_infill_speed": "140", + "initial_layer_jerk": "15", + "initial_layer_line_width": "0.5", + "initial_layer_speed": "60", + "initial_layer_travel_speed": "300", + "inner_wall_acceleration": "20000", + "inner_wall_jerk": "15", + "inner_wall_line_width": "0.4", + "inner_wall_speed": "400", + "internal_bridge_speed": "70", + "internal_solid_infill_acceleration": "20000", + "internal_solid_infill_line_width": "0.4", + "internal_solid_infill_speed": "400", + "ironing_flow": "19%", + "ironing_inset": "0.3", + "ironing_speed": "50", + "line_width": "0.4", + "min_bead_width": "75%", + "min_feature_size": "20%", + "min_length_factor": "1.5", + "min_width_top_surface": "200%", + "only_one_wall_top": "1", + "outer_wall_acceleration": "10000", + "outer_wall_jerk": "15", + "outer_wall_line_width": "0.4", + "outer_wall_speed": "400", + "overhang_1_4_speed": "70%", + "overhang_4_4_speed": "15", + "prime_tower_brim_width": "2", + "prime_tower_width": "80", + "prime_volume": "75", + "raft_first_layer_density": "70%", + "reduce_infill_retraction": "0", + "resolution": "0.01", + "role_based_wipe_speed": "0", + "seam_gap": "0", + "skirt_distance": "8", + "skirt_height": "1", + "skirt_speed": "100", + "skirt_start_angle": "-25", + "slice_closing_radius": "0.04", + "slowdown_for_curled_perimeters": "0", + "sparse_infill_acceleration": "20000", + "sparse_infill_density": "20%", + "sparse_infill_line_width": "0.4", + "sparse_infill_pattern": "3dhoneycomb", + "sparse_infill_speed": "400", + "support_angle": "135", + "support_base_pattern_spacing": "2", + "support_expansion": "1", + "support_interface_spacing": "0.3", + "support_interface_speed": "400", + "support_line_width": "0.4", + "support_object_xy_distance": "0.2", + "support_on_build_plate_only": "1", + "support_speed": "400", + "support_style": "snug", + "support_top_z_distance": "0.15", + "thick_internal_bridges": "0", + "top_shell_layers": "5", + "top_surface_acceleration": "10000", + "top_surface_jerk": "15", + "top_surface_line_width": "0.4", + "top_surface_speed": "250", + "travel_acceleration": "20000", + "travel_jerk": "15", + "travel_speed": "400", + "wall_generator": "classic", + "wall_loops": "2", + "wall_sequence": "outer wall/inner wall", + "wipe_speed": "150", + "wipe_tower_bridging": "15", + "wipe_tower_extra_flow": "120%", + "wipe_tower_max_purge_speed": "200", + "enable_prime_tower": "1", + "precise_outer_wall": "0", + "print_extruder_id": [ + "1" + ], + "brim_type": "auto_brim", + "print_extruder_variant": [ + "Direct Drive Standard" + ] +} \ No newline at end of file diff --git a/resources/profiles/re3D/filament/re3D rPP.json b/resources/profiles/re3D/filament/re3D rPP.json index 673dd9fffe9..420b795366e 100644 --- a/resources/profiles/re3D/filament/re3D rPP.json +++ b/resources/profiles/re3D/filament/re3D rPP.json @@ -6,7 +6,9 @@ "from": "system", "instantiation": "true", "inherits": "fdm_filament_pet", - "filament_type": "PP", + "filament_type": [ + "PP" + ], "nozzle_temperature_initial_layer": [ "185" ], diff --git a/scripts/orca_extra_profile_check.py b/scripts/orca_extra_profile_check.py index 00664d309d9..7ccc5a1a7f9 100644 --- a/scripts/orca_extra_profile_check.py +++ b/scripts/orca_extra_profile_check.py @@ -360,6 +360,50 @@ CONFLICT_KEYS = [ ['extruder_clearance_radius', 'extruder_clearance_max_radius'], ] +VECTOR_KEYS = { + "filament_type", +} + +def check_vector_type_keys(profiles_dir, vendor_name): + """ + Check that properties expected to be vectors (JSON arrays) are not stored as scalars. + For example, `filament_type` must be a list like ["PA-CF"], not a string "PA-CF". + + Parameters: + profiles_dir (Path): Base profiles directory + vendor_name (str): Vendor name + + Returns: + int: Number of errors found + """ + error_count = 0 + vendor_path = profiles_dir / vendor_name + + if not vendor_path.exists(): + return 0 + + for file_path in vendor_path.rglob("*.json"): + try: + with open(file_path, "r", encoding="UTF-8") as fp: + data = json.load(fp) + except Exception as e: + print_error(f"Error processing {file_path.relative_to(profiles_dir)}: {e}") + error_count += 1 + continue + + if not isinstance(data, dict): + continue + + for key in VECTOR_KEYS: + if key in data and not isinstance(data[key], list): + print_error( + f"'{key}' must be an array in {file_path.relative_to(profiles_dir)}, " + f"got {type(data[key]).__name__}: {data[key]!r}" + ) + error_count += 1 + + return error_count + def check_conflict_keys(profiles_dir, vendor_name): """ Check for keys that could not be specified at the same time, @@ -448,6 +492,8 @@ def main(): errors_found += new_errors warnings_found += new_warnings + errors_found += check_vector_type_keys(profiles_dir, vendor_name) + errors_found += check_filament_id(vendor_name, vendor_path / "filament") checked_vendor_count += 1 diff --git a/scripts/orca_filament_lib.py b/scripts/orca_filament_lib.py index 92f6d1dc555..65f037e3f3f 100644 --- a/scripts/orca_filament_lib.py +++ b/scripts/orca_filament_lib.py @@ -132,6 +132,7 @@ def update_profile_library(vendor="",profile_type="filament"): library[profile_section] = sorted_profiles f.seek(0) json.dump(library, f, indent="\t", ensure_ascii=False) + f.write('\n') f.truncate() print(f"Profile library for {vendor} updated successfully!") @@ -230,6 +231,7 @@ def clean_up_profile(vendor="", profile_type="", force=False): f.seek(0) ordered_profile = create_ordered_profile(_profile, ['type', 'name', 'renamed_from', 'inherits', 'from', 'setting_id', 'filament_id', 'instantiation']) json.dump(ordered_profile, f, indent="\t", ensure_ascii=False) + f.write('\n') f.truncate() print(f"Updated profile: {full_path}") except Exception as e: @@ -274,6 +276,7 @@ def rename_filament_system(vendor="OrcaFilamentLibrary"): if modified: with open(full_path, 'w', encoding='utf-8') as f: json.dump(data, f, indent="\t", ensure_ascii=False) + f.write('\n') print(f"Updated {full_path}") except Exception as e: diff --git a/src/libslic3r/Feature/FuzzySkin/FuzzySkin.cpp b/src/libslic3r/Feature/FuzzySkin/FuzzySkin.cpp index 812f9f9d14c..e246476dcc8 100644 --- a/src/libslic3r/Feature/FuzzySkin/FuzzySkin.cpp +++ b/src/libslic3r/Feature/FuzzySkin/FuzzySkin.cpp @@ -66,9 +66,240 @@ static std::unique_ptr get_noise_module(const FuzzySkinCo } } +// --------------------------------------------------------------------------- +// Ripple noise — deterministic sine-wave displacement along the path arc length. +// +// Unlike the other noise types, the ripple pattern is driven by cumulative arc +// length along the print path rather than world-space (x, y, z) coordinates. +// This gives a uniform wave period regardless of the polygon's geometry. +// +// A consistent visual anchor is established by finding the leftmost Y=0 crossing +// of the polygon (the point where the sine wave always peaks when phase shift is +// zero), ensuring the pattern aligns across layers. +// +// Per-layer-group phase shifting works as follows: +// period_index = floor(layer_id / layers_between_ripple_offset) +// phase_shift = period_index * ripple_offset * 2π [radians] +// +// Setting layers_between_ripple_offset = 1 shifts the phase on every layer; +// setting it to N makes N consecutive layers share the same pattern. +// --------------------------------------------------------------------------- + +// Compute the per-layer-group phase shift in radians. +static double ripple_phase_shift_rad(const FuzzySkinConfig& cfg) +{ + if (cfg.ripple_offset == 0.0 || cfg.layers_between_ripple_offset <= 0) + return 0.0; + + const int effective_layer = std::max(cfg.layer_id, 0); + const int period_index = effective_layer / std::max(cfg.layers_between_ripple_offset, 1); + const double raw_shift = period_index * cfg.ripple_offset * (2.0 * M_PI); + return fmod(raw_shift, 2.0 * M_PI); +} + +// Find the arc-length (in mm) of the visual anchor point along the polygon perimeter. +// The anchor is the leftmost Y=0 crossing, falling back to the vertex with the +// smallest |y| if no crossing exists. The anchor is where sin(phase) = 1 (a peak) +// when the phase shift is zero, giving a stable reference across layers. +static double ripple_anchor_arc_mm(const Points& poly) +{ + const size_t np = poly.size(); + + // Find anchor world position: leftmost Y=0 crossing. + Vec2d anchor_world(std::numeric_limits::max(), std::numeric_limits::max()); + bool found_crossing = false; + for (size_t i = 0; i < np; ++i) { + const double ya = unscale_(poly[i].y()); + const double yb = unscale_(poly[(i + 1) % np].y()); + if ((ya <= 0.0 && yb >= 0.0) || (ya >= 0.0 && yb <= 0.0)) { + const double t = (std::abs(yb - ya) < 1e-9) ? 0.0 : ya / (ya - yb); + const double x_cross = unscale_(poly[i].x()) + + std::max(0.0, std::min(1.0, t)) * (unscale_(poly[(i + 1) % np].x()) - unscale_(poly[i].x())); + if (!found_crossing || x_cross < anchor_world.x()) { + anchor_world = Vec2d(x_cross, 0.0); + found_crossing = true; + } + } + } + if (!found_crossing) { + double best_abs_y = std::numeric_limits::max(); + for (const Point& p : poly) { + const double ay = std::abs(unscale_(p.y())); + if (ay < best_abs_y) { + best_abs_y = ay; + anchor_world = Vec2d(unscale_(p.x()), unscale_(p.y())); + } + } + } + + // Find the arc-length of the closest point on the polyline to anchor_world. + double anchor_arc_mm = 0.0; + double best_dist_sq = std::numeric_limits::max(); + double accum_mm = 0.0; + for (size_t i = 0; i < np; ++i) { + const Vec2d pa_mm(unscale_(poly[i].x()), unscale_(poly[i].y())); + const Vec2d pb_mm(unscale_(poly[(i + 1) % np].x()), unscale_(poly[(i + 1) % np].y())); + const Vec2d seg = pb_mm - pa_mm; + const double seg_len = seg.norm(); + if (seg_len > 1e-9) { + const double t = std::max(0.0, std::min(1.0, (anchor_world - pa_mm).dot(seg) / (seg_len * seg_len))); + const double dist_sq = (pa_mm + seg * t - anchor_world).squaredNorm(); + if (dist_sq < best_dist_sq) { + best_dist_sq = dist_sq; + anchor_arc_mm = accum_mm + t * seg_len; + } + } + accum_mm += seg_len; + } + return anchor_arc_mm; +} + +// Apply a sine-wave ripple displacement to a closed polygon. +// Points are resampled at cfg.point_distance intervals along the perimeter. +static void fuzzy_polyline_ripple(Points& poly, const FuzzySkinConfig& cfg) +{ + const double amplitude = unscale_(cfg.thickness); + const double N = static_cast(cfg.ripples_per_layer); + const double fill_step_mm = unscale_(cfg.point_distance); + + if (N <= 0.0 || fill_step_mm < 1e-6) + return; + + // Compute total perimeter length in mm. + const size_t np = poly.size(); + double perimeter_mm = 0.0; + for (size_t i = 0; i < np; ++i) + perimeter_mm += unscale_((poly[(i + 1) % np] - poly[i]).cast().norm()); + + if (perimeter_mm < 1e-6) + return; + + const double anchor_arc_mm = ripple_anchor_arc_mm(poly); + const double phase_shift_rad = ripple_phase_shift_rad(cfg); + + // Phase function: φ(s) = N·2π·(s - anchor_arc) / perimeter + π/2 + phase_shift + // Adding π/2 ensures sin(φ) = 1 at the anchor when phase_shift = 0 (a peak). + const double phase_at_anchor = M_PI * 2.0 + phase_shift_rad; + auto arc_phase = [&](double arc_mm) -> double { return N * (2.0 * M_PI) * (arc_mm - anchor_arc_mm) / perimeter_mm + phase_at_anchor; }; + + Points out; + out.reserve(static_cast(perimeter_mm / fill_step_mm) + np * 2); + + double accum_mm = 0.0; + for (size_t i = 0; i < np; ++i) { + const Point& p0 = poly[i]; + const Point& p1 = poly[(i + 1) % np]; + const Vec2d seg = (p1 - p0).cast(); + const double seg_len = seg.norm(); + if (seg_len < EPSILON) + continue; + + const double seg_len_mm = unscale_(seg_len); + const Vec2d seg_unit = seg / seg_len; + const Vec2d seg_perp = perp(seg_unit); + const double seg_end_mm = accum_mm + seg_len_mm; + const double first_s = std::ceil(accum_mm / fill_step_mm) * fill_step_mm; + + for (double s = first_s; s < seg_end_mm; s += fill_step_mm) { + const double t = (s - accum_mm) / seg_len_mm; + const double disp = std::sin(arc_phase(s)) * amplitude; + const Point pt = p0 + (seg * t).cast(); + out.emplace_back(pt + (seg_perp * scale_(disp)).cast()); + } + + accum_mm = seg_end_mm; + } + + while (out.size() < 3) + out.emplace_back(poly[poly.size() - 2]); + + if (out.size() >= 3) + poly = std::move(out); +} + +// Apply a sine-wave ripple displacement to an Arachne extrusion line. +// Mirrors fuzzy_polyline_ripple but operates on ExtrusionJunction vectors so +// that per-point line width (j.w) is preserved correctly. +static void fuzzy_extrusion_line_ripple(Arachne::ExtrusionJunctions& ext_lines, const FuzzySkinConfig& cfg) +{ + const double amplitude = unscale_(cfg.thickness); + const double N = static_cast(cfg.ripples_per_layer); + const double fill_step_mm = unscale_(cfg.point_distance); + + if (N <= 0.0 || fill_step_mm < 1e-6) + return; + + // Build a Points vector for perimeter/anchor calculations. + Points poly; + poly.reserve(ext_lines.size()); + for (const auto& j : ext_lines) + poly.push_back(j.p); + + // Compute total length in mm. + const size_t np = poly.size(); + double perimeter_mm = 0.0; + for (size_t i = 0; i + 1 < np; ++i) + perimeter_mm += unscale_((poly[i + 1] - poly[i]).cast().norm()); + + if (perimeter_mm < 1e-6) + return; + + const double anchor_arc_mm = ripple_anchor_arc_mm(poly); + const double phase_shift_rad = ripple_phase_shift_rad(cfg); + const double phase_at_anchor = M_PI * 2.0 + phase_shift_rad; + + auto arc_phase = [&](double arc_mm) -> double { return N * (2.0 * M_PI) * (arc_mm - anchor_arc_mm) / perimeter_mm + phase_at_anchor; }; + + Arachne::ExtrusionJunctions out; + out.reserve(static_cast(perimeter_mm / fill_step_mm) + np * 2); + + double accum_mm = 0.0; + for (size_t i = 0; i + 1 < np; ++i) { + const Arachne::ExtrusionJunction& j0 = ext_lines[i]; + const Arachne::ExtrusionJunction& j1 = ext_lines[i + 1]; + const Vec2d seg = (j1.p - j0.p).cast(); + const double seg_len = seg.norm(); + if (seg_len < EPSILON) + continue; + + const double seg_len_mm = unscale_(seg_len); + const Vec2d seg_unit = seg / seg_len; + const Vec2d seg_perp = perp(seg_unit); + const double seg_end_mm = accum_mm + seg_len_mm; + const double first_s = std::ceil(accum_mm / fill_step_mm) * fill_step_mm; + + for (double s = first_s; s < seg_end_mm; s += fill_step_mm) { + const double t = (s - accum_mm) / seg_len_mm; + const double disp = std::sin(arc_phase(s)) * amplitude; + const Point pt = j0.p + (seg * t).cast(); + out.emplace_back(pt + (seg_perp * scale_(disp)).cast(), j1.w, j1.perimeter_index); + } + + accum_mm = seg_end_mm; + } + + while (out.size() < 3) { + size_t point_idx = ext_lines.size() - 2; + out.emplace_back(ext_lines[point_idx].p, ext_lines[point_idx].w, ext_lines[point_idx].perimeter_index); + if (point_idx == 0) + break; + --point_idx; + } + + if (out.size() >= 3) + ext_lines = std::move(out); +} + // Thanks Cura developers for this function. void fuzzy_polyline(Points& poly, bool closed, coordf_t slice_z, const FuzzySkinConfig& cfg) { + if (cfg.noise_type == NoiseType::Ripple) { + if (poly.size() < 3) + return; + fuzzy_polyline_ripple(poly, cfg); + return; + } + 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 @@ -113,6 +344,14 @@ void fuzzy_polyline(Points& poly, bool closed, coordf_t slice_z, const FuzzySkin // Thanks Cura developers for this function. void fuzzy_extrusion_line(Arachne::ExtrusionJunctions& ext_lines, coordf_t slice_z, const FuzzySkinConfig& cfg, bool closed) { + + if (cfg.noise_type == NoiseType::Ripple) { + if (ext_lines.size() < 3) + return; + fuzzy_extrusion_line_ripple(ext_lines, cfg); + return; + } + 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 @@ -190,7 +429,11 @@ void group_region_by_fuzzify(PerimeterGenerator& g) region_config.fuzzy_skin_scale, region_config.fuzzy_skin_octaves, region_config.fuzzy_skin_persistence, - region_config.fuzzy_skin_mode}; + region_config.fuzzy_skin_mode, + region_config.fuzzy_skin_ripples_per_layer, + region_config.fuzzy_skin_ripple_offset, + region_config.fuzzy_skin_layers_between_ripple_offset, + g.layer_id}; auto& surfaces = regions[cfg]; for (const auto& surface : region->slices.surfaces) { surfaces.push_back(&surface); diff --git a/src/libslic3r/PerimeterGenerator.hpp b/src/libslic3r/PerimeterGenerator.hpp index 74be04294eb..08ba854d06a 100644 --- a/src/libslic3r/PerimeterGenerator.hpp +++ b/src/libslic3r/PerimeterGenerator.hpp @@ -21,6 +21,10 @@ struct FuzzySkinConfig int noise_octaves; double noise_persistence; FuzzySkinMode mode; + int ripples_per_layer; + double ripple_offset; + int layers_between_ripple_offset; + int layer_id; bool operator==(const FuzzySkinConfig& r) const { @@ -32,7 +36,10 @@ struct FuzzySkinConfig && noise_scale == r.noise_scale && noise_octaves == r.noise_octaves && noise_persistence == r.noise_persistence - && mode == r.mode; + && mode == r.mode + && ripples_per_layer == r.ripples_per_layer + && ripple_offset == r.ripple_offset + && layers_between_ripple_offset == r.layers_between_ripple_offset; } bool operator!=(const FuzzySkinConfig& r) const { return !(*this == r); } @@ -52,6 +59,10 @@ template<> struct hash 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)); + boost::hash_combine(seed, std::hash{}(c.mode)); + boost::hash_combine(seed, std::hash{}(c.ripples_per_layer)); + boost::hash_combine(seed, std::hash{}(c.ripple_offset)); + boost::hash_combine(seed, std::hash{}(c.layers_between_ripple_offset)); return seed; } }; diff --git a/src/libslic3r/Preset.cpp b/src/libslic3r/Preset.cpp index 35d780d99be..b5b5dba7344 100644 --- a/src/libslic3r/Preset.cpp +++ b/src/libslic3r/Preset.cpp @@ -1043,7 +1043,7 @@ static std::vector s_Preset_print_options{ "support_ironing_flow", "support_ironing_spacing", "max_travel_detour_distance", - "fuzzy_skin", "fuzzy_skin_thickness", "fuzzy_skin_point_distance", "fuzzy_skin_first_layer", "fuzzy_skin_noise_type", "fuzzy_skin_mode", "fuzzy_skin_scale", "fuzzy_skin_octaves", "fuzzy_skin_persistence", + "fuzzy_skin", "fuzzy_skin_thickness", "fuzzy_skin_point_distance", "fuzzy_skin_first_layer", "fuzzy_skin_noise_type", "fuzzy_skin_mode", "fuzzy_skin_scale", "fuzzy_skin_octaves", "fuzzy_skin_persistence", "fuzzy_skin_ripples_per_layer", "fuzzy_skin_ripple_offset", "fuzzy_skin_layers_between_ripple_offset", "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_object_first_layer_gap", "support_interface_speed", diff --git a/src/libslic3r/PresetBundle.cpp b/src/libslic3r/PresetBundle.cpp index 79a942693de..088125def28 100644 --- a/src/libslic3r/PresetBundle.cpp +++ b/src/libslic3r/PresetBundle.cpp @@ -4549,6 +4549,7 @@ std::pair PresetBundle::load_vendor_configs_ std::string version_str = it.value(); auto config_version = Semver::parse(version_str); if (! config_version) { + ++m_errors; throw ConfigurationError((boost::format("vendor %1%'s config version: %2% invalid\nSuggest cleaning the directory %3% firstly") % vendor_name % version_str % path).str()); } else { diff --git a/src/libslic3r/PrintConfig.cpp b/src/libslic3r/PrintConfig.cpp index 926439535c9..919021cbe52 100644 --- a/src/libslic3r/PrintConfig.cpp +++ b/src/libslic3r/PrintConfig.cpp @@ -183,7 +183,8 @@ static t_config_enum_values s_keys_map_NoiseType { { "perlin", int(NoiseType::Perlin) }, { "billow", int(NoiseType::Billow) }, { "ridgedmulti", int(NoiseType::RidgedMulti) }, - { "voronoi", int(NoiseType::Voronoi) } + { "voronoi", int(NoiseType::Voronoi) }, + { "ripple", int(NoiseType::Ripple) } }; CONFIG_OPTION_ENUM_DEFINE_STATIC_MAPS(NoiseType) @@ -696,11 +697,11 @@ void PrintConfigDef::init_common_params() def->set_default_value(new ConfigOptionInt(1)); def = this->add("elefant_foot_layers_density", coPercent); - def->label = L("Elefant foot layers density"); + def->label = L("Elephant foot layers density"); def->category = L("Quality"); - def->tooltip = L("Density of internal solid infill for elefant foot layers compensation. " - "The initial value for the second layer is set. " - "Subsequent layers become linearly denser by the height specified in elefant_foot_compensation_layers. "); + def->tooltip = L("Density of internal solid infill for Elephant foot layers compensation.\n" + "The initial value for the second layer is set.\n" + "Subsequent layers become linearly denser by the height specified in elefant_foot_compensation_layers."); def->sidetext = "%"; def->min = 50; def->max = 100; @@ -2191,6 +2192,7 @@ void PrintConfigDef::init_fff_params() "This setting changes all extrusion flow of this filament in G-code proportionally. " "The recommended value range is between 0.95 and 1.05. " "You may be able to tune this value to get a nice flat surface if there is slight overflow or underflow."); + def->min = 0; def->max = 2; def->mode = comAdvanced; def->nullable = true; @@ -3369,7 +3371,7 @@ void PrintConfigDef::init_fff_params() def->tooltip = L("The width within which to jitter. It's advised to be below outer wall line width."); def->sidetext = L("mm"); // millimeters, CIS languages need translation def->min = 0; - def->max = 1; + def->max = 2; def->mode = comSimple; def->set_default_value(new ConfigOptionFloat(0.2)); @@ -3421,18 +3423,21 @@ void PrintConfigDef::init_fff_params() "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."); + "Voronoi: Divides the surface into voronoi cells, and displaces each one by a random amount. Creates a patchwork texture.\n" + "Ripple: Uniform ripple pattern that ripples left and right of the original path. Repeating pattern, woven appearance."); 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_values.push_back("ripple"); 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->enum_labels.push_back(L("Ripple")); def->mode = comSimple; def->set_default_value(new ConfigOptionEnum(NoiseType::Classic)); @@ -3464,6 +3469,38 @@ void PrintConfigDef::init_fff_params() def->mode = comAdvanced; def->set_default_value(new ConfigOptionFloat(0.5)); + def = this->add("fuzzy_skin_ripples_per_layer", coInt); + def->label = L("Number of ripples per layer"); + def->category = L("Others"); + def->tooltip = L("When using the Ripple noise type, this controls how many full cycles of ripples will be added per layer."); + def->min = 1; + def->mode = comAdvanced; + def->set_default_value(new ConfigOptionInt(15)); + + def = this->add("fuzzy_skin_ripple_offset", coFloat); + def->label = L("Ripple offset"); + def->category = L("Others"); + def->tooltip = L("When using the Ripple noise type, shifts the ripple pattern forward along the print path by this amount each " + "layer-period. A value of 0 keeps every layer identical. A value equal to 0.5 shifts by a full " + "half-wavelength, inverting the pattern. The shift is applied once per 'Layers between Ripple offset' layers, " + "so consecutive layers within a period are printed identically on top of each other."); + def->min = 0; + def->max = 1; + def->mode = comAdvanced; + def->set_default_value(new ConfigOptionFloat(0.5)); + + def = this->add("fuzzy_skin_layers_between_ripple_offset", coInt); + def->label = L("Layers between ripple offset"); + def->category = L("Others"); + def->tooltip = L("When using the Ripple noise type with a non-zero layer offset, this controls how " + "many consecutive layers share the same ripple phase before the offset is applied. " + "For example, a period of 3 means layers 0, 1 and 2 are identical, then layers 3, 4 " + "and 5 are shifted by one full 'Ripple layer offset', and so on. " + "Set to 1 to shift on every layer."); + def->min = 1; + def->mode = comAdvanced; + def->set_default_value(new ConfigOptionInt(1)); + def = this->add("filter_out_gap_fill", coFloat); def->label = L("Filter out tiny gaps"); def->category = L("Layers and Perimeters"); @@ -5239,7 +5276,8 @@ void PrintConfigDef::init_fff_params() def->label = L("Scarf joint flow ratio"); def->category = L("Quality"); def->tooltip = L("This factor affects the amount of material for scarf joints."); - def->mode = comDevelop; + def->mode = comExpert; + def->min = 0; def->max = 2; def->set_default_value(new ConfigOptionFloat(1)); diff --git a/src/libslic3r/PrintConfig.hpp b/src/libslic3r/PrintConfig.hpp index 55586a8adb6..da5abe595ea 100644 --- a/src/libslic3r/PrintConfig.hpp +++ b/src/libslic3r/PrintConfig.hpp @@ -56,6 +56,7 @@ enum class NoiseType { Billow, RidgedMulti, Voronoi, + Ripple, }; enum class WipeTowerType { @@ -1084,6 +1085,9 @@ PRINT_CONFIG_CLASS_DEFINE( ((ConfigOptionFloat, fuzzy_skin_scale)) ((ConfigOptionInt, fuzzy_skin_octaves)) ((ConfigOptionFloat, fuzzy_skin_persistence)) + ((ConfigOptionInt, fuzzy_skin_ripples_per_layer)) + ((ConfigOptionFloat, fuzzy_skin_ripple_offset)) + ((ConfigOptionInt, fuzzy_skin_layers_between_ripple_offset)) ((ConfigOptionFloat, gap_infill_speed)) ((ConfigOptionInt, sparse_infill_filament)) ((ConfigOptionFloatOrPercent, sparse_infill_line_width)) diff --git a/src/slic3r/GUI/ConfigManipulation.cpp b/src/slic3r/GUI/ConfigManipulation.cpp index 238b6ac6902..f3a359f5602 100644 --- a/src/slic3r/GUI/ConfigManipulation.cpp +++ b/src/slic3r/GUI/ConfigManipulation.cpp @@ -881,9 +881,13 @@ void ConfigManipulation::toggle_print_fff_options(DynamicPrintConfig *config, co // Show noise type specific options with the same logic NoiseType fuzzy_skin_noise_type = config->opt_enum("fuzzy_skin_noise_type"); - toggle_line("fuzzy_skin_scale", fuzzy_skin_noise_type != NoiseType::Classic && has_fuzzy_skin); - toggle_line("fuzzy_skin_octaves", fuzzy_skin_noise_type != NoiseType::Classic && fuzzy_skin_noise_type != NoiseType::Voronoi && has_fuzzy_skin); - toggle_line("fuzzy_skin_persistence", (fuzzy_skin_noise_type == NoiseType::Perlin || fuzzy_skin_noise_type == NoiseType::Billow) && has_fuzzy_skin); + const bool is_ripple = fuzzy_skin_noise_type == NoiseType::Ripple; + toggle_line("fuzzy_skin_scale", fuzzy_skin_noise_type != NoiseType::Classic && has_fuzzy_skin && !is_ripple); + toggle_line("fuzzy_skin_octaves", fuzzy_skin_noise_type != NoiseType::Classic && fuzzy_skin_noise_type != NoiseType::Voronoi && has_fuzzy_skin && !is_ripple); + toggle_line("fuzzy_skin_persistence", (fuzzy_skin_noise_type == NoiseType::Perlin || fuzzy_skin_noise_type == NoiseType::Billow) && has_fuzzy_skin && !is_ripple); + toggle_line("fuzzy_skin_ripples_per_layer", is_ripple && has_fuzzy_skin); + toggle_line("fuzzy_skin_ripple_offset", is_ripple && has_fuzzy_skin); + toggle_line("fuzzy_skin_layers_between_ripple_offset", is_ripple && has_fuzzy_skin); 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", diff --git a/src/slic3r/GUI/GCodeViewer.cpp b/src/slic3r/GUI/GCodeViewer.cpp index 678a99deb58..b1792c6966b 100644 --- a/src/slic3r/GUI/GCodeViewer.cpp +++ b/src/slic3r/GUI/GCodeViewer.cpp @@ -516,13 +516,15 @@ void GCodeViewer::SequentialView::Marker::render_position_window(const libvgcode } ImGui::PushStyleVar(ImGuiStyleVar_FrameRounding , 3.f * m_scale); - ImGui::PushStyleVar(ImGuiStyleVar_ButtonTextAlign, ImVec2(.5f, .5f)); + ImGui::PushStyleVar(ImGuiStyleVar_FramePadding , ImVec2(2.f, 2.f) * m_scale); ImGui::PushStyleColor(ImGuiCol_Button , ImVec4(0, 0, 0, 0)); ImGui::PushStyleColor(ImGuiCol_ButtonHovered , ImVec4(84 / 255.f, 84 / 255.f, 90 / 255.f, 1.f)); ImGui::PushStyleColor(ImGuiCol_ButtonActive , ImVec4(84 / 255.f, 84 / 255.f, 90 / 255.f, 1.f)); const float main_wnd_height = ImGui::GetWindowHeight(); - if (ImGui::Button(into_u8(properties_shown ? ImGui::UnfoldButtonIcon : ImGui::FoldButtonIcon).c_str(), ImVec2(24.f, 24.f) * m_scale)) { + // ORCA use glyph based button for fixing button sizes changing depends on used font size on platform + const wchar_t foldIcon = properties_shown ? ImGui::UnfoldButtonIcon : ImGui::FoldButtonIcon; + if (imgui.glyph_button(foldIcon, ImVec2(16.f, 16.f) * m_scale)) { properties_shown = !properties_shown; static float main_wnd_height_temp = ImGui::GetWindowHeight(); static float first_click = true; @@ -537,7 +539,8 @@ void GCodeViewer::SequentialView::Marker::render_position_window(const libvgcode ImGui::SameLine(); - ImGui::SetCursorPosY(ImGui::GetCursorPosY() - ImGui::GetStyle().FramePadding.y); // aligns button with next group + if(!properties_shown) + ImGui::SetCursorPosY(ImGui::GetCursorPosY() - ImGui::GetStyle().FramePadding.y); // aligns button with next group ImGui::BeginGroup(); // group contents to make information area more compact @@ -3327,29 +3330,26 @@ void GCodeViewer::render_legend(float &legend_height, int canvas_width, int canv ImGui::Dummy({ window_padding, window_padding }); ImGui::Dummy({ window_padding, window_padding }); ImGui::SameLine(window_padding * 2); // ORCA Ignores item spacing to get perfect window margins since since this part uses dummies for window padding - std::wstring btn_name; - if (m_fold) - btn_name = ImGui::UnfoldButtonIcon; - else - btn_name = ImGui::FoldButtonIcon; + ImGui::PushStyleColor(ImGuiCol_Button, ImVec4(0, 0, 0, 0)); ImGui::PushStyleColor(ImGuiCol_ButtonHovered, ImVec4(84 / 255.f, 84 / 255.f, 90 / 255.f, 1.f)); ImGui::PushStyleColor(ImGuiCol_ButtonActive, ImVec4(84 / 255.f, 84 / 255.f, 90 / 255.f, 1.f)); - float calc_padding = (ImGui::GetFrameHeight() - 16 * m_scale) / 2; // ORCA calculated padding for 16x16 icon - ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, ImVec2(calc_padding, calc_padding)); // ORCA Center icon with frame padding - ImGui::PushStyleVar(ImGuiStyleVar_FrameRounding, 3.0f * m_scale); // ORCA Match button style with combo box + ImGui::PushStyleVar(ImGuiStyleVar_FramePadding , ImVec2(2.f, 2.f) * m_scale); + ImGui::PushStyleVar(ImGuiStyleVar_FrameRounding, 3.0f * m_scale); // ORCA Match button style with combo box - float button_width = 16 * m_scale + calc_padding * 2; // ORCA match buttons height with combo box - if (ImGui::Button(into_u8(btn_name).c_str(), ImVec2(button_width, button_width))) { + // ORCA use glyph based button for fixing button sizes changing depends on used font size on platform + const wchar_t foldIcon = m_fold ? ImGui::UnfoldButtonIcon : ImGui::FoldButtonIcon; + if (imgui.glyph_button(foldIcon, ImVec2(16.f, 16.f) * m_scale)) { m_fold = !m_fold; } ImGui::SameLine(); const wchar_t gCodeToggle = ImGui::gCodeButtonIcon; - if (ImGui::Button(into_u8(gCodeToggle).c_str(), ImVec2(button_width, button_width))) { + if (imgui.glyph_button(gCodeToggle, ImVec2(16.f, 16.f) * m_scale)) { wxGetApp().toggle_show_gcode_window(); wxGetApp().plater()->get_current_canvas3D()->post_event(SimpleEvent(wxEVT_PAINT)); } + ImGui::PopStyleColor(3); ImGui::PopStyleVar(2); diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp index a3cdb0f0691..24271d51fae 100644 --- a/src/slic3r/GUI/GUI_App.cpp +++ b/src/slic3r/GUI/GUI_App.cpp @@ -276,8 +276,8 @@ bool is_associate_files(std::wstring extend) class SplashScreen : public wxSplashScreen { public: - SplashScreen(const wxBitmap& bitmap, long splashStyle, int milliseconds, wxPoint pos = wxDefaultPosition) - : wxSplashScreen(bitmap, splashStyle, milliseconds, static_cast(wxGetApp().mainframe), wxID_ANY, wxDefaultPosition, wxDefaultSize, + SplashScreen(wxPoint pos = wxDefaultPosition) + : wxSplashScreen(wxBitmap(FromDIP(wxSize(480,480),nullptr)), wxSPLASH_CENTRE_ON_SCREEN | wxSPLASH_TIMEOUT, 1500, nullptr, wxID_ANY, wxDefaultPosition, wxDefaultSize, #ifdef __APPLE__ wxBORDER_NONE | wxFRAME_NO_TASKBAR | wxSTAY_ON_TOP #else @@ -285,51 +285,53 @@ public: #endif // !__APPLE__ ) { - int init_dpi = get_dpi_for_window(this); this->SetPosition(pos); this->CenterOnScreen(); - int new_dpi = get_dpi_for_window(this); - m_scale = (float)(new_dpi) / (float)(init_dpi); + scale_font(m_font_version, 1.65f); // only scale this one since it hasnt a preloaded font like Label::Body_24; - m_main_bitmap = bitmap; + m_bg_color = StateColor::darkModeColorFor(wxColour("#FFFFFF")); + m_fg_color = StateColor::darkModeColorFor(wxColour("#6B6A6A")); + bool dark_mode = m_fg_color != wxColour("#6B6A6A"); + wxSize sz = m_window->GetClientSize(); + BitmapCache bmp_cache; + m_logo_bmp = *bmp_cache.load_svg(dark_mode ? "splash_logo_dark" : "splash_logo", sz.GetWidth(), sz.GetHeight()); - scale_bitmap(m_main_bitmap, m_scale); + m_window->Bind(wxEVT_PAINT, &SplashScreen::OnPaint, this); + m_window->Refresh(); + m_window->Update(); + } - // init constant texts and scale fonts - m_constant_text.init(Label::Body_16); + void OnPaint(wxPaintEvent& evt) + { + wxPaintDC dc(m_window); + wxSize c_sz = m_window->GetClientSize(); - // ORCA scale all fonts with monitor scale - scale_font(m_constant_text.version_font, m_scale * 2); - scale_font(m_constant_text.based_on_font, m_scale * 1.5f); - scale_font(m_constant_text.credits_font, m_scale * 2); + dc.SetBackground(wxBrush(m_bg_color)); + dc.Clear(); + if (m_logo_bmp.IsOk()) + dc.DrawBitmap(m_logo_bmp, 0, 0, true); - // this font will be used for the action string - m_action_font = m_constant_text.credits_font; + wxRect rc = wxRect(0, 0, c_sz.GetWidth(), 0); + dc.SetTextForeground(m_fg_color); - // draw logo and constant info text - Decorate(m_main_bitmap); - wxGetApp().UpdateFrameDarkUI(this); + dc.SetFont(m_font_version); + rc.y = c_sz.GetHeight() * 0.72; + rc.height = dc.GetTextExtent(m_text_version).GetHeight(); + dc.DrawLabel(m_text_version, rc, wxALIGN_CENTER); + + dc.SetFont(m_font_action); + rc.y = c_sz.GetHeight() * 0.88; + rc.height = dc.GetTextExtent(m_text_action).GetHeight(); + dc.DrawLabel(m_text_action, rc, wxALIGN_CENTER); } void SetText(const wxString& text) { - set_bitmap(m_main_bitmap); if (!text.empty()) { - wxBitmap bitmap(m_main_bitmap); - - wxMemoryDC memDC; - memDC.SelectObject(bitmap); - memDC.SetFont(m_action_font); - memDC.SetTextForeground(StateColor::darkModeColorFor(wxColour(144, 144, 144))); - int width = bitmap.GetWidth(); - int text_height = memDC.GetTextExtent(text).GetHeight(); - int text_width = memDC.GetTextExtent(text).GetWidth(); - wxRect text_rect(wxPoint(0, m_action_line_y_position), wxPoint(width, m_action_line_y_position + text_height)); - memDC.DrawLabel(text, text_rect, wxALIGN_CENTER); - - memDC.SelectObject(wxNullBitmap); - set_bitmap(bitmap); + m_text_action = text; + m_window->Refresh(); + m_window->Update(); #ifdef __WXOSX__ // without this code splash screen wouldn't be updated under OSX wxYield(); @@ -337,77 +339,6 @@ public: } } - void Decorate(wxBitmap& bmp) - { - if (!bmp.IsOk()) - return; - - bool is_dark = wxGetApp().app_config->get("dark_color_mode") == "1"; - - // use a memory DC to draw directly onto the bitmap - wxMemoryDC memDc(bmp); - - int width = bmp.GetWidth(); - int height = bmp.GetHeight(); - - // Logo - BitmapCache bmp_cache; - wxBitmap logo_bmp = *bmp_cache.load_svg(is_dark ? "splash_logo_dark" : "splash_logo", width, height); // use with full width & height - memDc.DrawBitmap(logo_bmp, 0, 0, true); - - // Version - memDc.SetFont(m_constant_text.version_font); - memDc.SetTextForeground(StateColor::darkModeColorFor(wxColor(134, 134, 134))); - wxSize version_ext = memDc.GetTextExtent(m_constant_text.version); - wxRect version_rect( - wxPoint(0, int(height * 0.70)), - wxPoint(width, int(height * 0.70) + version_ext.GetHeight()) - ); - memDc.DrawLabel(m_constant_text.version, version_rect, wxALIGN_CENTER); - - // Dynamic Text - m_action_line_y_position = int(height * 0.83); - } - - static wxBitmap MakeBitmap() - { - int width = FromDIP(480, nullptr); - int height = FromDIP(480, nullptr); - - wxImage image(width, height); - wxBitmap new_bmp(image); - - wxMemoryDC memDC; - memDC.SelectObject(new_bmp); - memDC.SetBrush(StateColor::darkModeColorFor(*wxWHITE)); - memDC.DrawRectangle(-1, -1, width + 2, height + 2); - memDC.DrawBitmap(new_bmp, 0, 0, true); - return new_bmp; - } - - void set_bitmap(wxBitmap& bmp) - { - m_window->SetBitmap(bmp); - m_window->Refresh(); - m_window->Update(); - } - - void scale_bitmap(wxBitmap& bmp, float scale) - { - if (scale == 1.0) - return; - - wxImage image = bmp.ConvertToImage(); - if (!image.IsOk() || image.GetWidth() == 0 || image.GetHeight() == 0) - return; - - int width = int(scale * image.GetWidth()); - int height = int(scale * image.GetHeight()); - image.Rescale(width, height, wxIMAGE_QUALITY_BILINEAR); - - bmp = wxBitmap(std::move(image)); - } - void scale_font(wxFont& font, float scale) { #ifdef __WXMSW__ @@ -425,47 +356,16 @@ public: #endif //__WXMSW__ } - private: - wxStaticText* m_staticText_slicer_name; - wxStaticText* m_staticText_slicer_version; - wxStaticBitmap* m_bitmap; - wxStaticText* m_staticText_loading; + wxBitmap m_logo_bmp; + wxColour m_fg_color; + wxColour m_bg_color; - wxBitmap m_main_bitmap; - wxFont m_action_font; - int m_action_line_y_position; - float m_scale {1.0}; + wxString m_text_version = GUI_App::format_display_version(); + wxString m_text_action = _L("Loading configuration") + dots; - struct ConstantText - { - wxString title; - wxString version; - wxString credits; - - wxFont title_font; - wxFont version_font; - wxFont credits_font; - wxFont based_on_font; - - void init(wxFont init_font) - { - // title - //title = wxGetApp().is_editor() ? SLIC3R_APP_FULL_NAME : GCODEVIEWER_APP_NAME; - - // dynamically get the version to display - version = GUI_App::format_display_version(); - - // credits infornation - credits = ""; - - //title_font = Label::Head_16; - version_font = Label::Body_13; - based_on_font = Label::Body_8; - credits_font = Label::Body_8; - } - } - m_constant_text; + wxFont m_font_version = Label::Body_16; + wxFont m_font_action = Label::Body_16; }; #ifdef __linux__ @@ -2844,9 +2744,6 @@ bool GUI_App::on_init_inner() SplashScreen * scrn = nullptr; if (app_config->get("show_splash_screen") == "true") { - // make a bitmap with dark grey banner on the left side - //BBS make BBL splash screen bitmap - wxBitmap bmp = SplashScreen::MakeBitmap(); // Detect position (display) to show the splash screen // Now this position is equal to the mainframe position wxPoint splashscreen_pos = wxDefaultPosition; @@ -2858,9 +2755,9 @@ bool GUI_App::on_init_inner() BOOST_LOG_TRIVIAL(info) << "begin to show the splash screen..."; //BBS use BBL splashScreen - scrn = new SplashScreen(bmp, wxSPLASH_CENTRE_ON_SCREEN | wxSPLASH_TIMEOUT, 1500, splashscreen_pos); + scrn = new SplashScreen(splashscreen_pos); wxYield(); - scrn->SetText(_L("Loading configuration")+ dots); + //scrn->SetText(_L("Loading configuration")+ dots); } BOOST_LOG_TRIVIAL(info) << "loading systen presets..."; diff --git a/src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp b/src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp index 7aa347b9c2b..7af55915d57 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp @@ -191,6 +191,12 @@ void GLGizmoFdmSupports::on_render_input_window(float x, float y, float bottom_l if (! m_c->selection_info()->model_object()) return; + float scale = m_parent.get_scale(); + #ifdef WIN32 + int dpi = get_dpi_for_window(wxGetApp().GetTopWindow()); + scale *= (float) dpi / (float) DPI_DEFAULT; + #endif // WIN32 + // BBS wchar_t old_tool = m_current_tool; @@ -258,30 +264,24 @@ void GLGizmoFdmSupports::on_render_input_window(float x, float y, float bottom_l std::array tool_tips = { _L("Circle"), _L("Sphere"), _L("Fill"), _L("Gap Fill") }; for (int i = 0; i < tool_ids.size(); i++) { - std::string str_label = std::string("##"); - std::wstring btn_name = icons[i] + boost::nowide::widen(str_label); + //std::string str_label = std::string("##"); + //std::wstring btn_name = icons[i] + boost::nowide::widen(str_label); if (i != 0) ImGui::SameLine((empty_button_width + m_imgui->scaled(1.75f)) * i + m_imgui->scaled(1.3f)); - ImGui::PushStyleVar(ImGuiStyleVar_FrameBorderSize, 0.0); - ImGui::PushStyleColor(ImGuiCol_Button, ImVec4(0.f, 0.f, 0.f, 0.f)); // ORCA Removes button background on dark mode - ImGui::PushStyleColor(ImGuiCol_Text, ImVec4(1.f, 1.f, 1.f, 1.f)); // ORCA: Fixes icon rendered without colors while using Light theme - if (m_current_tool == tool_ids[i]) { - ImGui::PushStyleColor(ImGuiCol_Button, ImVec4(0.f, 0.59f, 0.53f, 0.25f)); // ORCA use orca color for selected tool / brush - ImGui::PushStyleColor(ImGuiCol_ButtonHovered, ImVec4(0.f, 0.59f, 0.53f, 0.25f)); // ORCA use orca color for selected tool / brush - ImGui::PushStyleColor(ImGuiCol_ButtonActive, ImVec4(0.f, 0.59f, 0.53f, 0.30f)); // ORCA use orca color for selected tool / brush - ImGui::PushStyleColor(ImGuiCol_Border, ImGuiWrapper::COL_ORCA); // ORCA use orca color for border on selected tool / brush - ImGui::PushStyleVar(ImGuiStyleVar_FrameBorderSize, 1.0); - ImGui::PushStyleVar(ImGuiStyleVar_FrameRounding, 1.0); - } - bool btn_clicked = ImGui::Button(into_u8(btn_name).c_str()); - if (m_current_tool == tool_ids[i]) - { - ImGui::PopStyleColor(4); - ImGui::PopStyleVar(2); - } - ImGui::PopStyleColor(2); - ImGui::PopStyleVar(1); + bool is_active = m_current_tool == tool_ids[i]; + ImGui::PushStyleVar(ImGuiStyleVar_FrameBorderSize, 1.f); + ImGui::PushStyleVar(ImGuiStyleVar_FrameRounding , 3.f * scale); + ImGui::PushStyleVar(ImGuiStyleVar_FramePadding , ImVec2(4.f * scale, 4.f * scale)); + ImGui::PushStyleColor(ImGuiCol_Text , ImVec4(1,1,1,1)); // ORCA Fixes icon rendered without colors while using Light theme + ImGui::PushStyleColor(ImGuiCol_Button , is_active ? ImVec4(0.f, .59f, .53f, .25f) : ImVec4(0,0,0,0)); // ORCA + ImGui::PushStyleColor(ImGuiCol_ButtonHovered, is_active ? ImVec4(0.f, .59f, .53f, .25f) : ImVec4(.6f,.6f,.6f,.2f)); // ORCA + ImGui::PushStyleColor(ImGuiCol_ButtonActive , is_active ? ImVec4(0.f, .59f, .53f, .30f) : ImVec4(0,0,0,0)); // ORCA + ImGui::PushStyleColor(ImGuiCol_Border , is_active ? ImGuiWrapper::COL_ORCA : ImVec4(0,0,0,0)); // ORCA + ImGui::PushStyleColor(ImGuiCol_BorderActive , is_active ? ImGuiWrapper::COL_ORCA : ImVec4(0,0,0,0)); // ORCA matched color for fixing flicker on click + bool btn_clicked = m_imgui->glyph_button(icons[i], ImVec2(16.f * scale, 16.f * scale)); // ORCA glyph_button for fixing unequal paddings + ImGui::PopStyleColor(6); + ImGui::PopStyleVar(3); if (btn_clicked && m_current_tool != tool_ids[i]) { m_current_tool = tool_ids[i]; diff --git a/src/slic3r/GUI/Gizmos/GLGizmoFuzzySkin.cpp b/src/slic3r/GUI/Gizmos/GLGizmoFuzzySkin.cpp index 80470de7adf..d80687544ee 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoFuzzySkin.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoFuzzySkin.cpp @@ -117,6 +117,12 @@ void GLGizmoFuzzySkin::on_render_input_window(float x, float y, float bottom_lim if (!mo) return; + float scale = m_parent.get_scale(); + #ifdef WIN32 + int dpi = get_dpi_for_window(wxGetApp().GetTopWindow()); + scale *= (float) dpi / (float) DPI_DEFAULT; + #endif // WIN32 + const DynamicPrintConfig &obj_cfg = mo->config.get(); const float approx_height = m_imgui->scaled(22.f); @@ -192,29 +198,24 @@ void GLGizmoFuzzySkin::on_render_input_window(float x, float y, float bottom_lim icons = { ImGui::CircleButtonIcon, ImGui::SphereButtonIcon, ImGui::TriangleButtonIcon, ImGui::FillButtonIcon }; std::array tool_tips = { _L("Circle"), _L("Sphere"), _L("Triangle"), _L("Fill") }; for (int i = 0; i < tool_ids.size(); i++) { - std::string str_label = std::string(""); - std::wstring btn_name = icons[i] + boost::nowide::widen(str_label); + //std::string str_label = std::string(""); + //std::wstring btn_name = icons[i] + boost::nowide::widen(str_label); if (i != 0) ImGui::SameLine((empty_button_width + m_imgui->scaled(1.75f)) * i + m_imgui->scaled(1.5f)); - ImGui::PushStyleVar(ImGuiStyleVar_FrameBorderSize, 0.0); - ImGui::PushStyleColor(ImGuiCol_Button, ImVec4(0.f, 0.f, 0.f, 0.f)); // ORCA Removes button background on dark mode - ImGui::PushStyleColor(ImGuiCol_Text, ImVec4(1.f, 1.f, 1.f, 1.f)); // ORCA Fixes icon rendered without colors while using Light theme - if (m_current_tool == tool_ids[i]) { - ImGui::PushStyleColor(ImGuiCol_Button, ImVec4(0.f, 0.59f, 0.53f, 0.25f)); // ORCA use orca color for selected tool / brush - ImGui::PushStyleColor(ImGuiCol_ButtonHovered, ImVec4(0.f, 0.59f, 0.53f, 0.25f)); // ORCA use orca color for selected tool / brush - ImGui::PushStyleColor(ImGuiCol_ButtonActive, ImVec4(0.f, 0.59f, 0.53f, 0.30f)); // ORCA use orca color for selected tool / brush - ImGui::PushStyleColor(ImGuiCol_Border, ImGuiWrapper::COL_ORCA); // ORCA use orca color for border on selected tool / brush - ImGui::PushStyleVar(ImGuiStyleVar_FrameBorderSize, 1.0); - ImGui::PushStyleVar(ImGuiStyleVar_FrameRounding, 1.0); - } - bool btn_clicked = ImGui::Button(into_u8(btn_name).c_str()); - if (m_current_tool == tool_ids[i]) - { - ImGui::PopStyleColor(4); - ImGui::PopStyleVar(2); - } - ImGui::PopStyleColor(2); - ImGui::PopStyleVar(1); + + bool is_active = m_current_tool == tool_ids[i]; + ImGui::PushStyleVar(ImGuiStyleVar_FrameBorderSize, 1.f); + ImGui::PushStyleVar(ImGuiStyleVar_FrameRounding , 3.f * scale); + ImGui::PushStyleVar(ImGuiStyleVar_FramePadding , ImVec2(4.f * scale, 4.f * scale)); + ImGui::PushStyleColor(ImGuiCol_Text , ImVec4(1,1,1,1)); // ORCA Fixes icon rendered without colors while using Light theme + ImGui::PushStyleColor(ImGuiCol_Button , is_active ? ImVec4(0.f, .59f, .53f, .25f) : ImVec4(0,0,0,0)); // ORCA + ImGui::PushStyleColor(ImGuiCol_ButtonHovered, is_active ? ImVec4(0.f, .59f, .53f, .25f) : ImVec4(.6f,.6f,.6f,.2f)); // ORCA + ImGui::PushStyleColor(ImGuiCol_ButtonActive , is_active ? ImVec4(0.f, .59f, .53f, .30f) : ImVec4(0,0,0,0)); // ORCA + ImGui::PushStyleColor(ImGuiCol_Border , is_active ? ImGuiWrapper::COL_ORCA : ImVec4(0,0,0,0)); // ORCA + ImGui::PushStyleColor(ImGuiCol_BorderActive , is_active ? ImGuiWrapper::COL_ORCA : ImVec4(0,0,0,0)); // ORCA matched color for fixing flicker on click + bool btn_clicked = m_imgui->glyph_button(icons[i], ImVec2(16.f * scale, 16.f * scale)); // ORCA glyph_button for fixing unequal paddings + ImGui::PopStyleColor(6); + ImGui::PopStyleVar(3); if (btn_clicked && m_current_tool != tool_ids[i]) { m_current_tool = tool_ids[i]; diff --git a/src/slic3r/GUI/Gizmos/GLGizmoMmuSegmentation.cpp b/src/slic3r/GUI/Gizmos/GLGizmoMmuSegmentation.cpp index e3fbfe07263..72e880f85d3 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoMmuSegmentation.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoMmuSegmentation.cpp @@ -115,9 +115,9 @@ bool GLGizmoMmuSegmentation::on_init() m_desc["smart_fill_angle"] = _L("Smart fill angle"); m_desc["height_range"] = _L("Height range"); m_desc["toggle_wireframe"] = _L("Toggle Wireframe"); - m_desc["perform_remap"] = _L("Remap filaments"); + m_desc["perform_remap"] = _u8L("Remap filaments"); m_desc["remap"] = _L("Remap"); - m_desc["cancel_remap"] = _L("Cancel"); + m_desc["remap_reset"] = _L("Reset"); std::pair paint_shortcut = {_L("Left mouse button"), m_desc["paint"]}; std::pair erase_shortcut = {shift + _L("Left mouse button"), m_desc["erase"]}; @@ -304,10 +304,56 @@ void GLGizmoMmuSegmentation::render_tooltip_button(float x, float y) GLGizmoUtils::render_tooltip_button(m_imgui, m_parent, get_shortcuts(), x, y); } +// ORCA +bool GLGizmoMmuSegmentation::draw_color_button(int idx, std::string id_str, const ColorRGBA& color, ColorRGBA& map_color, bool active, float scale) +{ + ImDrawList* draw_list = ImGui::GetWindowDrawList(); + std::string label_id = std::to_string(idx) + id_str + std::to_string(idx); + ImVec2 pos = ImGui::GetCursorScreenPos(); + ImVec2 size = ImVec2(27.f * scale, 27.f * scale); + ImVec4 color_vec = ImGuiWrapper::to_ImVec4(color); + ImU32 br_color = ImGui::ColorConvertFloat4ToU32(active ? ImGuiWrapper::COL_ORCA : m_is_dark_mode ? ImVec4(.35f, .35f, .35f, 1) : ImVec4(.85f, .85f, .85f, 1)); + bool dark_tone = (0.299f * color.r() + 0.587f * color.g() + 0.114f * color.b()) < 0.51f; // matching values used by wxWidgets with clr.GetLuminance() < 0.51 + + ImGui::PushStyleVar(ImGuiStyleVar_FrameBorderSize, 0); + ImGui::PushStyleVar(ImGuiStyleVar_FrameRounding , 7.f * scale); + ImGui::PushStyleVar(ImGuiStyleVar_FramePadding , ImVec2(0, 0)); + ImGui::PushStyleColor(ImGuiCol_Text , dark_tone ? ImVec4(1,1,1,1) : ImVec4(0,0,0,1)); + ImGui::PushStyleColor(ImGuiCol_Button , color_vec); + ImGui::PushStyleColor(ImGuiCol_ButtonHovered, color_vec); + ImGui::PushStyleColor(ImGuiCol_ButtonActive , color_vec); + bool clicked = ImGui::Button(label_id.c_str(), size); + ImGui::PopStyleVar(3); + ImGui::PopStyleColor(4); + + auto drawBorder = [&](float d, float r, float t, ImU32 col) { + draw_list->AddRect({pos.x + d * scale, pos.y + d * scale}, {pos.x + size.x - d * scale , pos.y + size.y - d * scale}, col, r * scale, 0, t * scale); + }; + drawBorder(1.5f, 3.f, 4.f, ImGui::ColorConvertFloat4ToU32(ImGui::GetStyleColorVec4(ImGuiCol_WindowBg))); + if(active) + drawBorder(.5f, 4.f , 2.f, br_color); + else + drawBorder(3.f, 2.5f, 1.f, br_color); + + if (color != map_color){ // show mapped color as bubble if mapped + ImVec2 center = {pos.x + size.x - 3.f * scale, pos.y + 3.f * scale}; + draw_list->AddCircleFilled(center, 6.f * scale, br_color, 16); // outer border for better visibility + draw_list->AddCircleFilled(center, 5.f * scale, ImGuiWrapper::to_ImU32(map_color), 16); + } + + return clicked; +}; + void GLGizmoMmuSegmentation::on_render_input_window(float x, float y, float bottom_limit) { if (!m_c->selection_info()->model_object()) return; + float scale = m_parent.get_scale(); + #ifdef WIN32 + int dpi = get_dpi_for_window(wxGetApp().GetTopWindow()); + scale *= (float) dpi / (float) DPI_DEFAULT; + #endif // WIN32 + const float approx_height = m_imgui->scaled(22.0f); y = std::min(y, bottom_limit - approx_height); GizmoImguiSetNextWIndowPos(x, y, ImGuiCond_Always); @@ -363,69 +409,67 @@ void GLGizmoMmuSegmentation::on_render_input_window(float x, float y, float bott const float drag_left_width = ImGui::GetStyle().WindowPadding.x + sliders_width - space_size; const float max_tooltip_width = ImGui::GetFontSize() * 20.0f; - ImDrawList * draw_list = ImGui::GetWindowDrawList(); - ImVec2 pos = ImGui::GetCursorScreenPos(); - static float color_button_high = 25.0; - draw_list->AddRectFilled({pos.x - 10.0f, pos.y - 7.0f}, {pos.x + window_width + ImGui::GetFrameHeight(), pos.y + color_button_high}, ImGui::GetColorU32(ImGuiCol_FrameBgActive, 1.0f), 5.0f); - - float color_button = ImGui::GetCursorPos().y; m_imgui->text(m_desc.at("filaments")); - float start_pos_x = ImGui::GetCursorPos().x; - const ImVec2 max_label_size = ImGui::CalcTextSize("99", NULL, true); - const float item_spacing = m_imgui->scaled(0.8f); size_t n_extruder_colors = std::min((size_t)EnforcerBlockerType::ExtruderMax, m_extruders_colors.size()); + ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(7.f * scale, 7.f * scale)); + ImGui::PushStyleVar(ImGuiStyleVar_IndentSpacing, 0); // removes extra space on tree node indentation for (int extruder_idx = 0; extruder_idx < n_extruder_colors; extruder_idx++) { - const ColorRGBA &extruder_color = m_extruders_colors[extruder_idx]; - ImVec4 color_vec = ImGuiWrapper::to_ImVec4(extruder_color); - std::string color_label = std::string("##extruder color ") + std::to_string(extruder_idx); - std::string item_text = std::to_string(extruder_idx + 1); - const ImVec2 label_size = ImGui::CalcTextSize(item_text.c_str(), NULL, true); - const ImVec2 button_size(max_label_size.x + m_imgui->scaled(0.5f),0.f); + if (extruder_idx % max_filament_items_per_line != 0) + ImGui::SameLine(); - float button_offset = start_pos_x; - if (extruder_idx % max_filament_items_per_line != 0) { - button_offset += filament_item_width * (extruder_idx % max_filament_items_per_line); - ImGui::SameLine(button_offset); + if (draw_color_button( + extruder_idx + 1, // idx + "###extruder_color_", // button_id + m_extruders_colors[extruder_idx], // color + m_extruders_colors[extruder_idx], // mapped_color (not used in here) + m_selected_extruder_idx == extruder_idx, // is_active + scale + )){ + m_selected_extruder_idx = extruder_idx; } - // draw filament background - ImGuiColorEditFlags flags = ImGuiColorEditFlags_NoAlpha | ImGuiColorEditFlags_NoInputs | ImGuiColorEditFlags_NoLabel | ImGuiColorEditFlags_NoPicker | ImGuiColorEditFlags_NoTooltip; - if (m_selected_extruder_idx != extruder_idx) flags |= ImGuiColorEditFlags_NoBorder; - #ifdef __APPLE__ - ImGui::PushStyleColor(ImGuiCol_FrameBg, ImGuiWrapper::COL_ORCA); // ORCA use orca color for selected filament border - ImGui::PushStyleVar(ImGuiStyleVar_FrameBorderSize, 0.0f); - ImGui::PushStyleVar(ImGuiStyleVar_FrameRounding, 3.0); - bool color_picked = ImGui::ColorButton(color_label.c_str(), color_vec, flags, button_size); - ImGui::PopStyleVar(2); - ImGui::PopStyleColor(1); - #else - ImGui::PushStyleColor(ImGuiCol_FrameBg, ImGuiWrapper::COL_ORCA); // ORCA use orca color for selected filament border - ImGui::PushStyleVar(ImGuiStyleVar_FrameBorderSize, 0.0); - ImGui::PushStyleVar(ImGuiStyleVar_FrameRounding, 2.0); - bool color_picked = ImGui::ColorButton(color_label.c_str(), color_vec, flags, button_size); - ImGui::PopStyleVar(2); - ImGui::PopStyleColor(1); - #endif - color_button_high = ImGui::GetCursorPos().y - color_button - 2.0; - if (color_picked) { m_selected_extruder_idx = extruder_idx; } - if (extruder_idx < 16 && ImGui::IsItemHovered()) m_imgui->tooltip(_L("Shortcut Key ") + std::to_string(extruder_idx + 1), max_tooltip_width); - - // draw filament id - float gray = 0.299 * extruder_color.r() + 0.587 * extruder_color.g() + 0.114 * extruder_color.b(); - ImGui::SameLine(button_offset + (button_size.x - label_size.x) / 2.f); - ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, {10.0,15.0}); - if (gray * 255.f < 80.f) - ImGui::TextColored(ImVec4(1.0f, 1.0f, 1.0f, 1.0f), "%s", item_text.c_str()); - else - ImGui::TextColored(ImVec4(0.0f, 0.0f, 0.0f, 1.0f), "%s", item_text.c_str()); - - ImGui::PopStyleVar(); } - //ImGui::NewLine(); + // ORCA: Remap filaments section (Border only, Title in border). + // Styled as a panel for visual grouping. + if (ImGui::TreeNodeEx(m_desc.at("perform_remap").c_str(), ImGuiTreeNodeFlags_SpanAvailWidth | ImGuiTreeNodeFlags_FramePadding)){ + render_filament_remap_ui(window_width, max_tooltip_width, scale); + + bool has_mapping = false; + for (size_t i = 0; i < m_extruder_remap.size(); ++i){ + if(m_extruder_remap[i] != i){ + has_mapping = true; + break; + } + } + + ImGui::Dummy(ImVec2(0,0)); + + // ORCA: Add Remap and Cancel buttons (outside the panel) + m_imgui->disabled_begin(!has_mapping); // disable when no mapping + if (m_imgui->button(m_desc.at("remap"))) { + this->remap_filament_assignments(); + // Reset mapping to identity after apply + for (size_t i = 0; i < m_extruder_remap.size(); ++i) m_extruder_remap[i] = i; + } + m_imgui->disabled_end(/*m_is_unknown_font*/); + + if (has_mapping){ // show only when it has mapping + ImGui::SameLine(); + if (m_imgui->button(m_desc.at("remap_reset"))) { + // Reset mapping to identity + for (size_t i = 0; i < m_extruder_remap.size(); ++i) m_extruder_remap[i] = i; + } + } + + //ImGui::Dummy(ImVec2(0.0f, 3.f * scale)); + ImGui::TreePop(); + } + ImGui::PopStyleVar(2); // IndentSpacing ItemSpacing + ImGui::Dummy(ImVec2(0.0f, ImGui::GetFontSize() * 0.1)); m_imgui->text(m_desc.at("tool_type")); @@ -439,29 +483,24 @@ void GLGizmoMmuSegmentation::on_render_input_window(float x, float y, float bott icons = { ImGui::CircleButtonIcon, ImGui::SphereButtonIcon, ImGui::TriangleButtonIcon, ImGui::HeightRangeIcon, ImGui::FillButtonIcon, ImGui::GapFillIcon }; std::array tool_tips = { _L("Circle"), _L("Sphere"), _L("Triangle"), _L("Height Range"), _L("Fill"), _L("Gap Fill") }; for (int i = 0; i < tool_ids.size(); i++) { - std::string str_label = std::string(""); - std::wstring btn_name = icons[i] + boost::nowide::widen(str_label); + //std::string str_label = std::string(""); + //std::wstring btn_name = icons[i] + boost::nowide::widen(str_label); if (i != 0) ImGui::SameLine((empty_button_width + m_imgui->scaled(1.75f)) * i + m_imgui->scaled(1.5f)); - ImGui::PushStyleVar(ImGuiStyleVar_FrameBorderSize, 0.0); - ImGui::PushStyleColor(ImGuiCol_Button, ImVec4(0.f, 0.f, 0.f, 0.f)); // ORCA Removes button background on dark mode - ImGui::PushStyleColor(ImGuiCol_Text, ImVec4(1.f, 1.f, 1.f, 1.f)); // ORCA Fixes icon rendered without colors while using Light theme - if (m_current_tool == tool_ids[i]) { - ImGui::PushStyleColor(ImGuiCol_Button, ImVec4(0.f, 0.59f, 0.53f, 0.25f)); // ORCA use orca color for selected tool / brush - ImGui::PushStyleColor(ImGuiCol_ButtonHovered, ImVec4(0.f, 0.59f, 0.53f, 0.25f)); // ORCA use orca color for selected tool / brush - ImGui::PushStyleColor(ImGuiCol_ButtonActive, ImVec4(0.f, 0.59f, 0.53f, 0.30f)); // ORCA use orca color for selected tool / brush - ImGui::PushStyleColor(ImGuiCol_Border, ImGuiWrapper::COL_ORCA); // ORCA use orca color for border on selected tool / brush - ImGui::PushStyleVar(ImGuiStyleVar_FrameBorderSize, 1.0); - ImGui::PushStyleVar(ImGuiStyleVar_FrameRounding, 1.0); - } - bool btn_clicked = ImGui::Button(into_u8(btn_name).c_str()); - if (m_current_tool == tool_ids[i]) - { - ImGui::PopStyleColor(4); - ImGui::PopStyleVar(2); - } - ImGui::PopStyleColor(2); - ImGui::PopStyleVar(1); + + bool is_active = m_current_tool == tool_ids[i]; + ImGui::PushStyleVar(ImGuiStyleVar_FrameBorderSize, 1.f); + ImGui::PushStyleVar(ImGuiStyleVar_FrameRounding , 3.f * scale); + ImGui::PushStyleVar(ImGuiStyleVar_FramePadding , ImVec2(4.f * scale, 4.f * scale)); + ImGui::PushStyleColor(ImGuiCol_Text , ImVec4(1,1,1,1)); // ORCA Fixes icon rendered without colors while using Light theme + ImGui::PushStyleColor(ImGuiCol_Button , is_active ? ImVec4(0.f, .59f, .53f, .25f) : ImVec4(0,0,0,0)); // ORCA + ImGui::PushStyleColor(ImGuiCol_ButtonHovered, is_active ? ImVec4(0.f, .59f, .53f, .25f) : ImVec4(.6f,.6f,.6f,.2f)); // ORCA + ImGui::PushStyleColor(ImGuiCol_ButtonActive , is_active ? ImVec4(0.f, .59f, .53f, .30f) : ImVec4(0,0,0,0)); // ORCA + ImGui::PushStyleColor(ImGuiCol_Border , is_active ? ImGuiWrapper::COL_ORCA : ImVec4(0,0,0,0)); // ORCA + ImGui::PushStyleColor(ImGuiCol_BorderActive , is_active ? ImGuiWrapper::COL_ORCA : ImVec4(0,0,0,0)); // ORCA matched color for fixing flicker on click + bool btn_clicked = m_imgui->glyph_button(icons[i], ImVec2(16.f * scale, 16.f * scale)); // ORCA glyph_button for fixing unequal paddings + ImGui::PopStyleColor(6); + ImGui::PopStyleVar(3); if (btn_clicked && m_current_tool != tool_ids[i]) { m_current_tool = tool_ids[i]; @@ -598,60 +637,6 @@ void GLGizmoMmuSegmentation::on_render_input_window(float x, float y, float bott m_c->object_clipper()->set_position_by_ratio(clp_dist, true); } - ImGui::Separator(); - // ORCA: Remap filaments section (Border only, Title in border). - // Styled as a panel for visual grouping. - if (m_imgui->button(m_desc.at("perform_remap"))) { - m_show_remap_panel = !m_show_remap_panel; - } - - if (m_show_remap_panel) - { - ImGui::Spacing(); - - ImDrawList* draw_list = ImGui::GetWindowDrawList(); - std::string title = into_u8(m_desc.at("perform_remap")); - float available_width = ImGui::GetContentRegionAvail().x; - - // ORCA: Draw Background filled (consistent with Filaments section) - // Use static to remember height from previous frame so we can draw it behind. - static float remap_panel_high = 40.0f; - ImVec2 p_bg_min = ImGui::GetCursorScreenPos(); - // Adjust background position: slight negative offset to align with padding, width fills available - // height from static variable. - draw_list->AddRectFilled({p_bg_min.x - 10.0f, p_bg_min.y - 7.0f}, {p_bg_min.x + available_width + ImGui::GetFrameHeight(), p_bg_min.y + remap_panel_high}, ImGui::GetColorU32(ImGuiCol_FrameBgActive, 1.0f), 5.0f); - - float start_y = ImGui::GetCursorPos().y; - - // ORCA: Title as simple text - Removed as per request (redundant with button) - // m_imgui->text(title); - - ImGui::BeginGroup(); - // ORCA: Reduce vertical spacing within this group - ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(m_imgui->scaled(0.4f), m_imgui->scaled(0.2f))); - - render_filament_remap_ui(window_width, max_tooltip_width); - - ImGui::PopStyleVar(); - ImGui::EndGroup(); - - // ORCA: Update height for next frame fill - remap_panel_high = ImGui::GetCursorPos().y - start_y; - - // ORCA: Add Remap and Cancel buttons (outside the panel) - ImGui::Spacing(); - if (m_imgui->button(m_desc.at("remap"))) { - this->remap_filament_assignments(); - // Reset mapping to identity after apply - for (size_t i = 0; i < m_extruder_remap.size(); ++i) m_extruder_remap[i] = i; - } - ImGui::SameLine(); - if (m_imgui->button(m_desc.at("cancel_remap"))) { - // Reset mapping to identity - for (size_t i = 0; i < m_extruder_remap.size(); ++i) m_extruder_remap[i] = i; - } - } - ImGui::Separator(); ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(6.0f, 10.0f)); @@ -1000,180 +985,85 @@ void GLGizmoMmuSegmentation::update_used_filaments() } } -void GLGizmoMmuSegmentation::render_filament_remap_ui(float window_width, float max_tooltip_width) +void GLGizmoMmuSegmentation::render_filament_remap_ui(float window_width, float max_tooltip_width, float scale) { size_t n_extr = std::min((size_t)EnforcerBlockerType::ExtruderMax, m_extruders_colors.size()); - const ImVec2 max_label_size = ImGui::CalcTextSize("99", NULL, true); - const ImVec2 button_size(max_label_size.x + m_imgui->scaled(0.5f), 0.f); - int displayed_count = 0; const int max_per_line = 8; // ORCA: Use m_used_filaments to show only relevant source filaments + ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(7.f * scale, 7.f * scale)); for (size_t src : m_used_filaments) { if (src >= n_extr) continue; - const ColorRGBA &src_col = m_extruders_colors[src]; // keep for text contrast - const ColorRGBA &dst_col = m_extruders_colors[m_extruder_remap[src]]; - - // ORCA: Button now shows the SOURCE color (per maintainer request) - // This keeps the UI stable until "Remap" is clicked. - ImVec4 col_vec = ImGuiWrapper::to_ImVec4(src_col); - if (displayed_count > 0 && (displayed_count % max_per_line != 0)) ImGui::SameLine(); - std::string btn_id = "##remap_src_" + std::to_string(src); std::string pop_id = "popup_" + std::to_string(src); - - ImGuiColorEditFlags flags = ImGuiColorEditFlags_NoAlpha | ImGuiColorEditFlags_NoInputs | - ImGuiColorEditFlags_NoLabel | ImGuiColorEditFlags_NoPicker | - ImGuiColorEditFlags_NoTooltip; - - // ORCA: Show border ONLY if the popup is open (visual feedback for active selection) - // Decoupled from m_selected_extruder_idx to prevent unwanted selection highlights. - if (!ImGui::IsPopupOpen(pop_id.c_str())) - flags |= ImGuiColorEditFlags_NoBorder; - - #ifdef __APPLE__ - ImGui::PushStyleColor(ImGuiCol_FrameBg, ImGuiWrapper::COL_ORCA); - ImGui::PushStyleVar(ImGuiStyleVar_FrameBorderSize, 0.0f); - ImGui::PushStyleVar(ImGuiStyleVar_FrameRounding, 3.0); - bool clicked = ImGui::ColorButton(btn_id.c_str(), col_vec, flags, button_size); - ImGui::PopStyleVar(2); - ImGui::PopStyleColor(1); - #else - ImGui::PushStyleColor(ImGuiCol_FrameBg, ImGuiWrapper::COL_ORCA); - ImGui::PushStyleVar(ImGuiStyleVar_FrameBorderSize, 0.0); - ImGui::PushStyleVar(ImGuiStyleVar_FrameRounding, 2.0); - bool clicked = ImGui::ColorButton(btn_id.c_str(), col_vec, flags, button_size); - ImGui::PopStyleVar(2); - ImGui::PopStyleColor(1); - #endif - // overlay destination number with proper contrast calculation - // ORCA: Text still shows DESTINATION index, but contrast is against SOURCE color now. - std::string dst_txt = std::to_string(m_extruder_remap[src] + 1); - float gray = 0.299f * src_col.r() + 0.587f * src_col.g() + 0.114f * src_col.b(); - ImVec2 txt_sz = ImGui::CalcTextSize(dst_txt.c_str()); - ImVec2 pos = ImGui::GetItemRectMin(); - ImVec2 size = ImGui::GetItemRectSize(); - - if (gray * 255.f < 80.f) - ImGui::GetWindowDrawList()->AddText( - ImVec2(pos.x + (size.x - txt_sz.x) * 0.5f, pos.y + (size.y - txt_sz.y) * 0.5f), - IM_COL32(255,255,255,255), dst_txt.c_str()); - else - ImGui::GetWindowDrawList()->AddText( - ImVec2(pos.x + (size.x - txt_sz.x) * 0.5f, pos.y + (size.y - txt_sz.y) * 0.5f), - IM_COL32(0,0,0,255), dst_txt.c_str()); + bool src_clicked = draw_color_button( + (int)src + 1, // idx + "###remap_src_", // button_id + m_extruders_colors[src], // color + m_extruders_colors[m_extruder_remap[src]], // mapped_color (shows bubble if not matches with Color) + ImGui::IsPopupOpen(pop_id.c_str()), // is_active + scale + ); - // ORCA: Show NEW color as a small triangle in the corner if remapped - if (src != m_extruder_remap[src]) { - float s = m_imgui->scaled(0.55f); - float offset = m_imgui->scaled(0.15f); // Inset to avoid rounded corner clipping - ImVec2 p = ImVec2(pos.x + offset, pos.y + offset); - - // Contrast outline: White for dark backgrounds, Black for light backgrounds - // Use dst_col (new color) for outline contrast check? Or src_col? - // Usually outline is around the triangle (dst_col). - float dst_gray = 0.299f * dst_col.r() + 0.587f * dst_col.g() + 0.114f * dst_col.b(); - ImU32 outline_col = (dst_gray * 255.f < 80.f) ? IM_COL32(255, 255, 255, 180) : IM_COL32(0, 0, 0, 180); - - ImDrawList* draw_list = ImGui::GetWindowDrawList(); - draw_list->AddTriangleFilled( - p, - ImVec2(p.x + s, p.y), - ImVec2(p.x, p.y + s), - ImGuiWrapper::to_ImU32(dst_col)); - - // ORCA: Add a thin outline for better contrast when colors are similar - draw_list->AddTriangle( - p, - ImVec2(p.x + s, p.y), - ImVec2(p.x, p.y + s), - outline_col, - 0.5f); - } - - // popup with possible destinations - if (clicked) { + if (src_clicked) { // Calculate popup position centered below the current button ImVec2 button_pos = ImGui::GetItemRectMin(); ImVec2 button_size = ImGui::GetItemRectSize(); - ImVec2 popup_pos(button_pos.x + button_size.x * 0.5f, button_pos.y + button_size.y); - - // Set popup styling BEFORE opening popup + + // Ensure popup is within the main viewport bounds + int dst_count = (int)std::min(n_extr, (size_t)max_per_line); + float est_popup_w = button_size.x * dst_count + + ImGui::GetStyle().ItemSpacing.x * (dst_count - 1) + + ImGui::GetStyle().WindowPadding.x * 2.f; + + ImGuiViewport* vp = ImGui::GetMainViewport(); + float right_limit = vp->WorkPos.x + vp->WorkSize.x - est_popup_w * 0.5f; // pivot is 0.5 so subtract half + float centered_x = button_pos.x + button_size.x * 0.5f; // pivot 0.5 just needs center x + + ImVec2 popup_pos(std::min(centered_x, right_limit), button_pos.y + button_size.y); + ImGui::SetNextWindowPos(popup_pos, ImGuiCond_Appearing, ImVec2(0.5f, -0.1f)); ImGui::SetNextWindowBgAlpha(1.0f); // Ensure full opacity ImGui::OpenPopup(pop_id.c_str()); } + + if (ImGui::IsItemHovered() && src != m_extruder_remap[src]) // show tooltip if it has mapping info + m_imgui->tooltip(std::to_string(src + 1) + " >> " + std::to_string(m_extruder_remap[src] + 1), max_tooltip_width); // Apply popup styling before BeginPopup using standard Orca colors - ImGui::PushStyleVar(ImGuiStyleVar_PopupRounding, 4.0f); - ImGui::PushStyleVar(ImGuiStyleVar_PopupBorderSize, 1.0f); - // ORCA: Use FrameBgActive for consistency and to ensure visibility of white filaments - ImGui::PushStyleColor(ImGuiCol_PopupBg, ImGui::GetStyleColorVec4(ImGuiCol_FrameBgActive)); - ImGui::PushStyleColor(ImGuiCol_Border, m_is_dark_mode ? ImVec4(0.5f, 0.5f, 0.5f, 1.0f) : ImVec4(0.6f, 0.6f, 0.6f, 1.0f)); + ImGui::PushStyleVar(ImGuiStyleVar_PopupRounding , 8.0f * scale); + ImGui::PushStyleVar(ImGuiStyleVar_PopupBorderSize, 2.0f * scale); // thicker & colored border to prevent mixing with main window. Current ImGui version not supports shadows + ImGui::PushStyleColor(ImGuiCol_PopupBg, ImGui::GetStyleColorVec4(ImGuiCol_WindowBg)); + ImGui::PushStyleColor(ImGuiCol_Border , ImGui::ColorConvertFloat4ToU32(ImGuiWrapper::COL_ORCA)); if (ImGui::BeginPopup(pop_id.c_str())) { m_imgui->text(_L("To:")); for (int dst = 0; dst < (int)n_extr; ++dst) { - const ColorRGBA &dst_col_popup = m_extruders_colors[dst]; - ImVec4 dst_vec = ImGuiWrapper::to_ImVec4(dst_col_popup); if (dst > 0 && (dst % max_per_line != 0)) ImGui::SameLine(); - std::string dst_btn = "##dst_" + std::to_string(src) + "_" + std::to_string(dst); - - // Apply same styling to destination buttons - ImGuiColorEditFlags dst_flags = ImGuiColorEditFlags_NoAlpha | ImGuiColorEditFlags_NoInputs | - ImGuiColorEditFlags_NoLabel | ImGuiColorEditFlags_NoPicker | - ImGuiColorEditFlags_NoTooltip; - // Show border for currently selected destination filament - if (m_extruder_remap[src] != dst) dst_flags |= ImGuiColorEditFlags_NoBorder; - - #ifdef __APPLE__ - ImGui::PushStyleColor(ImGuiCol_FrameBg, ImGuiWrapper::COL_ORCA); - ImGui::PushStyleVar(ImGuiStyleVar_FrameBorderSize, 0.0f); - ImGui::PushStyleVar(ImGuiStyleVar_FrameRounding, 3.0); - bool dst_clicked = ImGui::ColorButton(dst_btn.c_str(), dst_vec, dst_flags, button_size); - ImGui::PopStyleVar(2); - ImGui::PopStyleColor(1); - #else - ImGui::PushStyleColor(ImGuiCol_FrameBg, ImGuiWrapper::COL_ORCA); - ImGui::PushStyleVar(ImGuiStyleVar_FrameBorderSize, 0.0); - ImGui::PushStyleVar(ImGuiStyleVar_FrameRounding, 2.0); - bool dst_clicked = ImGui::ColorButton(dst_btn.c_str(), dst_vec, dst_flags, button_size); - ImGui::PopStyleVar(2); - ImGui::PopStyleColor(1); - #endif - - // overlay destination number on popup buttons - std::string dst_num_txt = std::to_string(dst + 1); - float dst_gray = 0.299f * dst_col_popup.r() + 0.587f * dst_col_popup.g() + 0.114f * dst_col_popup.b(); - ImVec2 dst_txt_sz = ImGui::CalcTextSize(dst_num_txt.c_str()); - ImVec2 dst_pos = ImGui::GetItemRectMin(); - ImVec2 dst_size = ImGui::GetItemRectSize(); - - if (dst_gray * 255.f < 80.f) - ImGui::GetWindowDrawList()->AddText( - ImVec2(dst_pos.x + (dst_size.x - dst_txt_sz.x) * 0.5f, dst_pos.y + (dst_size.y - dst_txt_sz.y) * 0.5f), - IM_COL32(255,255,255,255), dst_num_txt.c_str()); - else - ImGui::GetWindowDrawList()->AddText( - ImVec2(dst_pos.x + (dst_size.x - dst_txt_sz.x) * 0.5f, dst_pos.y + (dst_size.y - dst_txt_sz.y) * 0.5f), - IM_COL32(0,0,0,255), dst_num_txt.c_str()); - - if (dst_clicked) - { + bool dst_clicked = draw_color_button( + dst + 1, // idx + "###remap_dst_", // button_id + m_extruders_colors[dst], // color + m_extruders_colors[dst], // mapped_color (non fuctional in here) + m_extruder_remap[src] == dst, // is_active + scale + ); + if (dst_clicked) { m_extruder_remap[src] = dst; // update the source button color immediately ImGui::CloseCurrentPopup(); } } + ImGui::Dummy(ImVec2(0.0f, 2.f * scale)); ImGui::EndPopup(); } @@ -1183,6 +1073,7 @@ void GLGizmoMmuSegmentation::render_filament_remap_ui(float window_width, float displayed_count++; } + ImGui::PopStyleVar(1); // ItemSpacing } void GLGizmoMmuSegmentation::remap_filament_assignments() diff --git a/src/slic3r/GUI/Gizmos/GLGizmoMmuSegmentation.hpp b/src/slic3r/GUI/Gizmos/GLGizmoMmuSegmentation.hpp index 756ada76703..eb8473aea66 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoMmuSegmentation.hpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoMmuSegmentation.hpp @@ -114,7 +114,6 @@ protected: bool m_detect_geometry_edge = true; // Filament remap feature - bool m_show_remap_panel = false; std::vector m_extruder_remap; // index → target extruder index // ORCA: Cache used filaments to filter UI std::set m_used_filaments; // Set of used filament indices (cached) @@ -136,13 +135,16 @@ private: void init_model_triangle_selectors(); + // ORCA + bool draw_color_button(int idx, std::string id_str, const ColorRGBA& color, ColorRGBA& map_color, bool active, float scale); + // BBS void update_triangle_selectors_colors(); void init_extruders_data(); // Filament remapping methods void remap_filament_assignments(); - void render_filament_remap_ui(float window_width, float max_tooltip_width); + void render_filament_remap_ui(float window_width, float max_tooltip_width, float scale); // ORCA: Helper to update the cache of used filaments void update_used_filaments(); diff --git a/src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp b/src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp index 8790fd430da..1051c5ab3ce 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoSeam.cpp @@ -121,6 +121,12 @@ void GLGizmoSeam::on_render_input_window(float x, float y, float bottom_limit) if (! m_c->selection_info()->model_object()) return; + float scale = m_parent.get_scale(); + #ifdef WIN32 + int dpi = get_dpi_for_window(wxGetApp().GetTopWindow()); + scale *= (float) dpi / (float) DPI_DEFAULT; + #endif // WIN32 + const float approx_height = m_imgui->scaled(12.5f); y = std::min(y, bottom_limit - approx_height); //BBS: GUI refactor: move gizmo to the right @@ -170,29 +176,25 @@ void GLGizmoSeam::on_render_input_window(float x, float y, float bottom_limit) icons = { ImGui::CircleButtonIcon, ImGui::SphereButtonIcon }; std::array tool_tips = { _L("Circle"), _L("Sphere")}; for (int i = 0; i < tool_ids.size(); i++) { - std::string str_label = std::string("##"); - std::wstring btn_name = icons[i] + boost::nowide::widen(str_label); + //std::string str_label = std::string("##"); + //std::wstring btn_name = icons[i] + boost::nowide::widen(str_label); if (i != 0) ImGui::SameLine((empty_button_width + m_imgui->scaled(1.75f)) * i + m_imgui->scaled(1.3f)); - ImGui::PushStyleVar(ImGuiStyleVar_FrameBorderSize, 0.0); - ImGui::PushStyleColor(ImGuiCol_Button, ImVec4(0.f, 0.f, 0.f, 0.f)); // ORCA Removes button background on dark mode - ImGui::PushStyleColor(ImGuiCol_Text, ImVec4(1.f, 1.f, 1.f, 1.f)); // ORCA: Fixes icon rendered without colors while using Light theme - if (m_current_tool == tool_ids[i]) { - ImGui::PushStyleColor(ImGuiCol_Button, ImVec4(0.f, 0.59f, 0.53f, 0.25f)); // ORCA use orca color for selected tool / brush - ImGui::PushStyleColor(ImGuiCol_ButtonHovered, ImVec4(0.f, 0.59f, 0.53f, 0.25f)); // ORCA use orca color for selected tool / brush - ImGui::PushStyleColor(ImGuiCol_ButtonActive, ImVec4(0.f, 0.59f, 0.53f, 0.30f)); // ORCA use orca color for selected tool / brush - ImGui::PushStyleColor(ImGuiCol_Border, ImGuiWrapper::COL_ORCA); // ORCA use orca color for border on selected tool / brush - ImGui::PushStyleVar(ImGuiStyleVar_FrameBorderSize, 1.0); - ImGui::PushStyleVar(ImGuiStyleVar_FrameRounding, 1.0); - } - bool btn_clicked = ImGui::Button(into_u8(btn_name).c_str()); - if (m_current_tool == tool_ids[i]) - { - ImGui::PopStyleColor(4); - ImGui::PopStyleVar(2); - } - ImGui::PopStyleColor(2); - ImGui::PopStyleVar(1); + + bool is_active = m_current_tool == tool_ids[i]; + ImGui::PushStyleVar(ImGuiStyleVar_FrameBorderSize, 1.f); + ImGui::PushStyleVar(ImGuiStyleVar_FrameRounding , 3.f * scale); + ImGui::PushStyleVar(ImGuiStyleVar_FramePadding , ImVec2(4.f * scale, 4.f * scale)); + ImGui::PushStyleColor(ImGuiCol_Text , ImVec4(1,1,1,1)); // ORCA Fixes icon rendered without colors while using Light theme + ImGui::PushStyleColor(ImGuiCol_Button , is_active ? ImVec4(0.f, .59f, .53f, .25f) : ImVec4(0,0,0,0)); // ORCA + ImGui::PushStyleColor(ImGuiCol_ButtonHovered, is_active ? ImVec4(0.f, .59f, .53f, .25f) : ImVec4(.6f,.6f,.6f,.2f)); // ORCA + ImGui::PushStyleColor(ImGuiCol_ButtonActive , is_active ? ImVec4(0.f, .59f, .53f, .30f) : ImVec4(0,0,0,0)); // ORCA + ImGui::PushStyleColor(ImGuiCol_Border , is_active ? ImGuiWrapper::COL_ORCA : ImVec4(0,0,0,0)); // ORCA + ImGui::PushStyleColor(ImGuiCol_BorderActive , is_active ? ImGuiWrapper::COL_ORCA : ImVec4(0,0,0,0)); // ORCA matched color for fixing flicker on click + bool btn_clicked = m_imgui->glyph_button(icons[i], ImVec2(16.f * scale, 16.f * scale)); // ORCA glyph_button for fixing unequal paddings + ImGui::PopStyleColor(6); + ImGui::PopStyleVar(3); + if (btn_clicked && m_current_tool != tool_ids[i]) { m_current_tool = tool_ids[i]; for (auto& triangle_selector : m_triangle_selectors) { diff --git a/src/slic3r/GUI/ImGuiWrapper.cpp b/src/slic3r/GUI/ImGuiWrapper.cpp index 67f33ce851d..85f59d31e5d 100644 --- a/src/slic3r/GUI/ImGuiWrapper.cpp +++ b/src/slic3r/GUI/ImGuiWrapper.cpp @@ -908,6 +908,54 @@ bool ImGuiWrapper::button(const wxString& label, const ImVec2 &size, bool enable return (enable) ? res : false; } +// ORCA Glyph based button for correctly rendering icon size based Glyph +// excludes spacings after Glyph and centers icon properly +// compared to image_button this supports styling +bool ImGuiWrapper::glyph_button(wchar_t icon_char, ImVec2 icon_size) +{ + ImDrawList* draw_list = ImGui::GetWindowDrawList(); + ImFont* font = ImGui::GetFont(); + ImGuiStyle& style = ImGui::GetStyle(); + ImVec2 padding = style.FramePadding; + float border_w = style.FrameBorderSize; + float rounding = style.FrameRounding; + std::string icon_str = into_u8(icon_char); + const char* icon = icon_str.c_str(); + + float width = icon_size.x + (padding.x + border_w) * 2.f; + float height = icon_size.y + (padding.y + border_w) * 2.f; + ImVec2 rc_min = ImGui::GetCursorScreenPos(); + ImVec2 rc_max = ImVec2(rc_min.x + width, rc_min.y + height); + + ImGui::Dummy(ImVec2(width, height)); + + ImGuiCol bg_color = ImGuiCol_Button; + ImGuiCol border_color = ImGuiCol_Border; + bool clicked = false; + + if (ImGui::IsMouseHoveringRect(rc_min, rc_max)) { + bg_color = ImGuiCol_ButtonHovered; + if (ImGui::IsMouseClicked(ImGuiMouseButton_Left)) { + bg_color = ImGuiCol_ButtonActive; + border_color = ImGuiCol_BorderShadow; + clicked = true; + } + } + + draw_list->AddRectFilled(rc_min, rc_max, ImGui::GetColorU32(bg_color), rounding); + + if (border_w > 0.f) + draw_list->AddRect(rc_min, rc_max, ImGui::GetColorU32(border_color), rounding, 0, border_w); + + ImVec2 text_pos = ImVec2( + rc_min.x + (width - font->FontSize) * .5f, + rc_min.y + (height - font->FontSize) * .5f + ); + draw_list->AddText(font, font->FontSize, text_pos, ImGui::GetColorU32(ImGuiCol_Text), icon); + + return clicked; +} + bool ImGuiWrapper::radio_button(const wxString &label, bool active) { auto label_utf8 = into_u8(label); diff --git a/src/slic3r/GUI/ImGuiWrapper.hpp b/src/slic3r/GUI/ImGuiWrapper.hpp index 21ca91013be..a2b8476c716 100644 --- a/src/slic3r/GUI/ImGuiWrapper.hpp +++ b/src/slic3r/GUI/ImGuiWrapper.hpp @@ -133,6 +133,7 @@ public: bool bbl_button(const wxString &label, const wxString& tooltip = {}); bool button(const wxString& label, float width, float height); bool button(const wxString& label, const ImVec2 &size, bool enable); // default size = ImVec2(0.f, 0.f) + bool glyph_button(wchar_t icon_char, ImVec2 icon_size); // ORCA bool radio_button(const wxString &label, bool active); static ImVec4 to_ImVec4(const ColorRGB &color); bool input_double(const std::string &label, const double &value, const std::string &format = "%.3f"); diff --git a/src/slic3r/GUI/PresetComboBoxes.cpp b/src/slic3r/GUI/PresetComboBoxes.cpp index 93a67601a75..b95f74b2486 100644 --- a/src/slic3r/GUI/PresetComboBoxes.cpp +++ b/src/slic3r/GUI/PresetComboBoxes.cpp @@ -1355,16 +1355,16 @@ void PlaterPresetComboBox::update() bool unsupported = group == "Unsupported presets"; for (auto it : list) { // ORCA add sorting support for vendor / type for user presets - auto groupName2 = groupName == "by_bundle" ? (preset_bundle_names[it->first].empty() ? _L("Unspecified") : preset_bundle_names[it->first]) - : groupName == "by_type" ? (preset_filament_types[it->first].empty() ? _L("Unspecified") : preset_filament_types[it->first]) - : groupName == "by_vendor" ? (preset_filament_vendors[it->first].empty() ? _L("Unspecified") : preset_filament_vendors[it->first]) + auto groupName2 = groupName == "by_bundle" ? (preset_bundle_names[it->first].empty() ? _L("Unspecified") : from_u8(preset_bundle_names[it->first])) + : groupName == "by_type" ? (preset_filament_types[it->first].empty() ? _L("Unspecified") : from_u8(preset_filament_types[it->first])) + : groupName == "by_vendor" ? (preset_filament_vendors[it->first].empty() ? _L("Unspecified") : from_u8(preset_filament_vendors[it->first])) : groupByGroup ? groupName - : preset_filament_vendors[it->first]; + : from_u8(preset_filament_vendors[it->first]); int index = groupName == "by_bundle" - ? Append(preset_aliases[it->first], *it->second, + ? Append(from_u8(preset_aliases[it->first]), *it->second, from_u8(preset_bundle_ids[it->first]), groupName2, nullptr, unsupported ? DD_ITEM_STYLE_DISABLED : 0) - : Append(preset_aliases[it->first], *it->second, groupName2, nullptr, + : Append(from_u8(preset_aliases[it->first]), *it->second, groupName2, nullptr, unsupported ? DD_ITEM_STYLE_DISABLED : 0); SetItemAlias(index, it->first); if (unsupported) @@ -1380,7 +1380,7 @@ void PlaterPresetComboBox::update() } } else { for (std::map::const_iterator it = presets.begin(); it != presets.end(); ++it) { - int index = Append(preset_aliases[it->first], *it->second); + int index = Append(from_u8(preset_aliases[it->first]), *it->second); SetItemAlias(index, it->first); SetItemTooltip(index, preset_descriptions[it->first]); if (group == "System presets") @@ -1767,10 +1767,10 @@ void TabPresetComboBox::update() // Get bundle name for grouping wxString bundle_name = _L("Unspecified"); if (preset_bundle_names.count(it->first) > 0 && !preset_bundle_names[it->first].empty()) { - bundle_name = preset_bundle_names[it->first]; + bundle_name = from_u8(preset_bundle_names[it->first]); } // Use Append with group parameter for sub-dropdown grouping - int item_id = Append(preset_aliases[it->first], *it->second.first, from_u8(preset_bundle_ids[it->first]), bundle_name); + int item_id = Append(from_u8(preset_aliases[it->first]), *it->second.first, from_u8(preset_bundle_ids[it->first]), bundle_name); SetItemAlias(item_id, it->first); SetItemTooltip(item_id, preset_descriptions[it->first]); bool is_enabled = it->second.second; diff --git a/src/slic3r/GUI/Tab.cpp b/src/slic3r/GUI/Tab.cpp index 2b7ef7ce0f1..707414c5006 100644 --- a/src/slic3r/GUI/Tab.cpp +++ b/src/slic3r/GUI/Tab.cpp @@ -2303,7 +2303,7 @@ void TabPrint::build() optgroup->append_single_option_line("xy_hole_compensation", "quality_settings_precision#x-y-compensation"); optgroup->append_single_option_line("xy_contour_compensation", "quality_settings_precision#x-y-compensation"); optgroup->append_single_option_line("elefant_foot_compensation", "quality_settings_precision#elephant-foot-compensation"); - optgroup->append_single_option_line("elefant_foot_layers_density", "quality_settings_precision#elephant-foot-compensation"); + optgroup->append_single_option_line("elefant_foot_layers_density", "quality_settings_precision#elephant-foot-compensation-density"); optgroup->append_single_option_line("elefant_foot_compensation_layers", "quality_settings_precision#elephant-foot-compensation"); optgroup->append_single_option_line("precise_outer_wall", "quality_settings_precision#precise-wall"); optgroup->append_single_option_line("precise_z_height", "quality_settings_precision#precise-z-height"); @@ -2330,16 +2330,16 @@ void TabPrint::build() optgroup = page->new_optgroup(L("Wall generator"), L"param_wall_generator"); optgroup->append_single_option_line("wall_generator", "quality_settings_wall_generator"); - optgroup->append_single_option_line("wall_transition_angle", "quality_settings_wall_generator#arachne"); - optgroup->append_single_option_line("wall_transition_filter_deviation", "quality_settings_wall_generator#arachne"); - optgroup->append_single_option_line("wall_transition_length", "quality_settings_wall_generator#arachne"); - optgroup->append_single_option_line("wall_distribution_count", "quality_settings_wall_generator#arachne"); - optgroup->append_single_option_line("initial_layer_min_bead_width", "quality_settings_wall_generator#arachne"); - optgroup->append_single_option_line("min_bead_width", "quality_settings_wall_generator#arachne"); - optgroup->append_single_option_line("min_feature_size", "quality_settings_wall_generator#arachne"); - optgroup->append_single_option_line("min_length_factor", "quality_settings_wall_generator#arachne"); - optgroup->append_single_option_line("wall_maximum_resolution", "quality_settings_wall_generator#arachne"); - optgroup->append_single_option_line("wall_maximum_deviation", "quality_settings_wall_generator#arachne"); + optgroup->append_single_option_line("wall_transition_angle", "quality_settings_wall_generator#wall-transitioning-threshhold-angle"); + optgroup->append_single_option_line("wall_transition_filter_deviation", "quality_settings_wall_generator#wall-transitioning-filter-margin"); + optgroup->append_single_option_line("wall_transition_length", "quality_settings_wall_generator#wall-transitioning-length"); + optgroup->append_single_option_line("wall_distribution_count", "quality_settings_wall_generator#wall-distribution-count"); + optgroup->append_single_option_line("initial_layer_min_bead_width", "quality_settings_wall_generator#first-layer-minimum-wall-width"); + optgroup->append_single_option_line("min_bead_width", "quality_settings_wall_generator#minimum-wall-width"); + optgroup->append_single_option_line("min_feature_size", "quality_settings_wall_generator#minimum-feature-size"); + optgroup->append_single_option_line("min_length_factor", "quality_settings_wall_generator#minimum-wall-length"); + optgroup->append_single_option_line("wall_maximum_resolution", "quality_settings_wall_generator#maximum-wall-resolution"); + optgroup->append_single_option_line("wall_maximum_deviation", "quality_settings_wall_generator#maximum-wall-deviation"); optgroup = page->new_optgroup(L("Walls and surfaces"), L"param_wall_surface"); optgroup->append_single_option_line("wall_sequence", "quality_settings_wall_and_surfaces#walls-printing-order"); @@ -2677,6 +2677,9 @@ void TabPrint::build() optgroup->append_single_option_line("fuzzy_skin_scale", "others_settings_fuzzy_skin#skin-feature-size"); optgroup->append_single_option_line("fuzzy_skin_octaves", "others_settings_fuzzy_skin#skin-noise-octaves"); optgroup->append_single_option_line("fuzzy_skin_persistence", "others_settings_fuzzy_skin#skin-noise-persistence"); + optgroup->append_single_option_line("fuzzy_skin_ripples_per_layer", "others_settings_fuzzy_skin#ripples-per-layer"); + optgroup->append_single_option_line("fuzzy_skin_ripple_offset", "others_settings_fuzzy_skin#ripple-offset"); + optgroup->append_single_option_line("fuzzy_skin_layers_between_ripple_offset", "others_settings_fuzzy_skin#layers-between-ripple-offset"); optgroup->append_single_option_line("fuzzy_skin_first_layer", "others_settings_fuzzy_skin#apply-fuzzy-skin-to-first-layer"); optgroup = page->new_optgroup(L("G-code output"), L"param_gcode");