Merge branch 'main' into dev/cut-keep-paint

This commit is contained in:
Noisyfox
2026-05-07 08:49:57 +08:00
committed by GitHub
64 changed files with 5425 additions and 566 deletions

View File

@@ -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"

159
resources/profiles/LH.json Normal file
View File

@@ -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"
}
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 64 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

View File

@@ -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": [
""
]
}

View File

@@ -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": [
""
]
}

View File

@@ -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"
]
}

View File

@@ -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": [
""
]
}

View File

@@ -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": [
""
]
}

View File

@@ -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": [
""
]
}

View File

@@ -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": [
""
]
}

View File

@@ -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": [
""
]
}

View File

@@ -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"
]
}

View File

@@ -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"
]
}

View File

@@ -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"
]
}

View File

@@ -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"
]
}

View File

@@ -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"
]
}

View File

@@ -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"
]
}

View File

@@ -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"
]
}

View File

@@ -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"
}

View File

@@ -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"
}

View File

@@ -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;"
}

View File

@@ -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;"
}

View File

@@ -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"
}

View File

@@ -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"
]
}

View File

@@ -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"
}

View File

@@ -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"
}

View File

@@ -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"
}

View File

@@ -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"
}

View File

@@ -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"
]
}

View File

@@ -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"
}

View File

@@ -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"
}

View File

@@ -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"
}

View File

@@ -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"
}

View File

@@ -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"
}

View File

@@ -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"
}

View File

@@ -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"
}

View File

@@ -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"
}

View File

@@ -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"
}

View File

@@ -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"
]
}

View File

@@ -6,7 +6,9 @@
"from": "system",
"instantiation": "true",
"inherits": "fdm_filament_pet",
"filament_type": "PP",
"filament_type": [
"PP"
],
"nozzle_temperature_initial_layer": [
"185"
],

View File

@@ -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

View File

@@ -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:

View File

@@ -66,9 +66,240 @@ static std::unique_ptr<noise::module::Module> 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<double>::max(), std::numeric_limits<double>::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<double>::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<double>::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<double>(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<double>().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<size_t>(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<double>();
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<coord_t>();
out.emplace_back(pt + (seg_perp * scale_(disp)).cast<coord_t>());
}
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<double>(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<double>().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<size_t>(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<double>();
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<coord_t>();
out.emplace_back(pt + (seg_perp * scale_(disp)).cast<coord_t>(), 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::module::Module> 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::module::Module> 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);

View File

@@ -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<Slic3r::FuzzySkinConfig>
boost::hash_combine(seed, std::hash<double>{}(c.noise_scale));
boost::hash_combine(seed, std::hash<int>{}(c.noise_octaves));
boost::hash_combine(seed, std::hash<double>{}(c.noise_persistence));
boost::hash_combine(seed, std::hash<Slic3r::FuzzySkinMode>{}(c.mode));
boost::hash_combine(seed, std::hash<int>{}(c.ripples_per_layer));
boost::hash_combine(seed, std::hash<double>{}(c.ripple_offset));
boost::hash_combine(seed, std::hash<int>{}(c.layers_between_ripple_offset));
return seed;
}
};

View File

@@ -1043,7 +1043,7 @@ static std::vector<std::string> 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",

View File

@@ -4549,6 +4549,7 @@ std::pair<PresetsConfigSubstitutions, size_t> 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 {

View File

@@ -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<NoiseType>::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>(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));

View File

@@ -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))

View File

@@ -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<NoiseType>("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<PerimeterGeneratorType>("wall_generator") == PerimeterGeneratorType::Arachne;
for (auto el : {"wall_transition_length", "wall_transition_filter_deviation", "wall_transition_angle", "min_feature_size", "min_length_factor",

View File

@@ -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);

View File

@@ -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<wxWindow*>(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...";

View File

@@ -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<wxString, 4> 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];

View File

@@ -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<wxString, 4> 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];

View File

@@ -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<wxString, wxString> paint_shortcut = {_L("Left mouse button"), m_desc["paint"]};
std::pair<wxString, wxString> 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<wxString, 6> 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()

View File

@@ -114,7 +114,6 @@ protected:
bool m_detect_geometry_edge = true;
// Filament remap feature
bool m_show_remap_panel = false;
std::vector<size_t> m_extruder_remap; // index → target extruder index
// ORCA: Cache used filaments to filter UI
std::set<size_t> 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();

View File

@@ -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<wxString, 2> 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) {

View File

@@ -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);

View File

@@ -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");

View File

@@ -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<wxString, wxBitmap *>::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;

View File

@@ -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");