diff --git a/src/PrintConfigs/filament.proto b/src/PrintConfigs/filament.proto index b77fbb4d1a..8cdf4ce118 100644 --- a/src/PrintConfigs/filament.proto +++ b/src/PrintConfigs/filament.proto @@ -240,6 +240,23 @@ message FilamentSettings { ]; + repeated int32 initial_layer_fan_speed = 120 [ + (label) = "First layer fan speed", + (tooltip) = "Sets an exact fan speed for the first layer, overriding all other cooling settings. Useful for protecting 3D-printed toolhead parts (e.g. Voron-style ABS/ASA ducts) from a hot bed. A small amount of airflow cools the ducts down, without using full cooling that may in certain conditions hurt first-layer adhesion.\\nFrom the second layer onwards, normal cooling resumes.\\nIf \\\"Full fan speed at layer\\\" is also set, the fan ramps smoothly from this value on the first layer up to your target by the chosen layer.\\nOnly available when \\\"No cooling for the first\\\" is 0.\\nSet to -1 to disable it.", + (category) = "Filament/Cooling", + (sidetext) = "%", + (tab_type) = "Filament", + (tab_page) = "Cooling", + (tab_optgroup) = "Cooling for specific layer", + (min_value) = -1, + (max_value) = 100, + (preset) = PRESET_FILAMENT, + (has_default) = true, + (default_value) = "-1", + (invalidates) = STEP_GCODE_EXPORT + ]; + + repeated bool reduce_fan_stop_start_freq = 14 [ (label) = "Keep fan always on", (tooltip) = "Enabling this setting means that the part cooling fan will never stop completely and will run at least at minimum speed to reduce the frequency of starting and stopping.", diff --git a/src/PrintConfigs/layout.yaml b/src/PrintConfigs/layout.yaml index b193a06e0e..55444ef196 100644 --- a/src/PrintConfigs/layout.yaml +++ b/src/PrintConfigs/layout.yaml @@ -17,6 +17,7 @@ tabs: - top_surface_line_width - sparse_infill_line_width - internal_solid_infill_line_width + - bridge_line_width: quality_settings_line_width#bridge - support_line_width - name: "Seam" fields: @@ -169,12 +170,16 @@ tabs: - gap_fill_target - filter_out_gap_fill - infill_wall_overlap + - lightning_overhang_angle: strength_settings_patterns#lightning + - lightning_prune_angle: strength_settings_patterns#lightning + - lightning_straightening_angle: strength_settings_patterns#lightning - name: "Advanced" fields: - align_infill_direction_to_model - extra_solid_infills - bridge_angle - internal_bridge_angle + - relative_bridge_angle: strength_settings_advanced#relative-bridge-angle - minimum_sparse_infill_area - infill_combination - infill_combination_max_layer_height @@ -483,6 +488,7 @@ tabs: fields: - close_fan_the_first_x_layers - full_fan_speed_layer + - initial_layer_fan_speed: material_cooling#first-layer-fan-speed - name: "Part cooling fan" fields: - [fan_min_speed, fan_cooling_layer_time] diff --git a/src/PrintConfigs/print.proto b/src/PrintConfigs/print.proto index b14abf7fa7..1bcccafe0d 100644 --- a/src/PrintConfigs/print.proto +++ b/src/PrintConfigs/print.proto @@ -1375,6 +1375,85 @@ message PrintSettings { ]; + // Granular per-region filament (extruder) assignment. These are the canonical, + // struct-backed keys the slicing engine reads (LayerRegion, PerimeterGenerator, + // ToolOrdering, …) and that PrintApply/handle_legacy resolve into. The coarse + // "Filament for Features" UI settings above (wall_filament, sparse_infill_filament, + // solid_infill_filament) map onto these. Registered (so they serialize and don't + // throw UnknownOptionException) but intentionally not given tab_* UI to avoid + // duplicating the coarse settings' UI. + int32 outer_wall_filament_id = 488 [ + (label) = "Outer walls", + (tooltip) = "Filament to print outer walls.\n\\\"Default\\\" uses the active object/part filament.", + (category) = "Print/Multimaterial", + (gui_type) = i_enum_open, + (min_value) = 0, + (mode) = MODE_ADVANCED, + (has_default) = true, + (default_value) = "0" + ]; + + + int32 inner_wall_filament_id = 489 [ + (label) = "Inner walls", + (tooltip) = "Filament to print inner walls.\n\\\"Default\\\" uses the active object/part filament.", + (category) = "Print/Multimaterial", + (gui_type) = i_enum_open, + (min_value) = 0, + (mode) = MODE_ADVANCED, + (has_default) = true, + (default_value) = "0" + ]; + + + int32 internal_solid_filament_id = 490 [ + (label) = "Internal solid infill", + (tooltip) = "Filament to print internal solid infill.\n\\\"Default\\\" uses the active object/part filament.", + (category) = "Print/Multimaterial", + (gui_type) = i_enum_open, + (min_value) = 0, + (mode) = MODE_ADVANCED, + (has_default) = true, + (default_value) = "0" + ]; + + + int32 sparse_infill_filament_id = 491 [ + (label) = "Infill", + (tooltip) = "Filament to print internal sparse infill.\n\\\"Default\\\" uses the active object/part filament.", + (category) = "Print/Multimaterial", + (gui_type) = i_enum_open, + (min_value) = 0, + (mode) = MODE_ADVANCED, + (has_default) = true, + (default_value) = "0" + ]; + + + int32 top_surface_filament_id = 492 [ + (label) = "Top surface", + (tooltip) = "Filament to print top surface.\n\\\"Default\\\" uses the active object/part filament.", + (category) = "Print/Multimaterial", + (gui_type) = i_enum_open, + (min_value) = 0, + (mode) = MODE_ADVANCED, + (has_default) = true, + (default_value) = "0" + ]; + + + int32 bottom_surface_filament_id = 493 [ + (label) = "Bottom surface", + (tooltip) = "Filament to print bottom surface.\n\\\"Default\\\" uses the active object/part filament.", + (category) = "Print/Multimaterial", + (gui_type) = i_enum_open, + (min_value) = 0, + (mode) = MODE_ADVANCED, + (has_default) = true, + (default_value) = "0" + ]; + + int32 standby_temperature_delta = 92 [ (label) = "Temperature variation", (tooltip) = "Temperature difference to be applied when an extruder is not active. The value is not used when 'idle_temperature' in filament settings is set to non-zero value.", @@ -3092,6 +3171,24 @@ message PrintSettings { ]; + FloatOrPercent bridge_line_width = 483 [ + (label) = "Bridge", + (tooltip) = "Line width of the Bridge. If expressed as a %, it will be computed over the nozzle diameter.\\nRecommended to use with a higher Bridge density or Bridge flow ratio.\\n\\nThe maximum value is 100% or the nozzle diameter.\\nIf set to 0, the line width will match the Internal solid infill width.", + (category) = "Print/Quality", + (sidetext) = "mm or %", + (ratio_over) = "nozzle_diameter", + (tab_type) = "Print", + (tab_page) = "Quality", + (tab_optgroup) = "Line width", + (min_value) = 0, + (max_value) = 100, + (max_literal) = 10, + (mode) = MODE_ADVANCED, + (has_default) = true, + (default_value) = "100., true" + ]; + + float slice_closing_radius = 200 [ (label) = "Slice gap closing radius", (tooltip) = "Cracks smaller than 2x gap closing radius are being filled during the triangle mesh slicing. The gap closing operation may reduce the final print resolution, therefore it is advisable to keep the value reasonably low.", @@ -5134,6 +5231,19 @@ message PrintSettings { ]; + bool relative_bridge_angle = 484 [ + (label) = "Relative bridge angle", + (tooltip) = "When enabled, the bridge angle values are added to the automatically calculated bridge direction instead of overriding it.", + (category) = "Print/Strength", + (tab_type) = "Print", + (tab_page) = "Strength", + (tab_optgroup) = "Advanced", + (mode) = MODE_ADVANCED, + (has_default) = true, + (default_value) = "false" + ]; + + int32 ensure_vertical_shell_thickness = 323 [ (label) = "Ensure vertical shell thickness", (tooltip) = "Add solid infill near sloping surfaces to guarantee the vertical shell thickness (top+bottom solid layers)\\nNone: No solid infill will be added anywhere. Caution: Use this option carefully if your model has sloped surfaces\\nCritical Only: Avoid adding solid infill for walls\\nModerate: Add solid infill for heavily sloping surfaces only\\nAll: Add solid infill for all suitable sloping surfaces\\nDefault value is All.", @@ -5327,6 +5437,54 @@ message PrintSettings { ]; + float lightning_overhang_angle = 485 [ + (label) = "Lightning overhang angle", + (tooltip) = "Maximum overhang angle for Lightning infill support propagation.", + (category) = "Print/Strength", + (sidetext) = "°", + (tab_type) = "Print", + (tab_page) = "Strength", + (tab_optgroup) = "Infill", + (min_value) = 5, + (max_value) = 85, + (mode) = MODE_EXPERT, + (has_default) = true, + (default_value) = "45" + ]; + + + float lightning_prune_angle = 486 [ + (label) = "Prune angle", + (tooltip) = "Controls how aggressively short or unsupported Lightning branches are pruned.\\nThis angle is converted internally to a per-layer distance.", + (category) = "Print/Strength", + (sidetext) = "°", + (tab_type) = "Print", + (tab_page) = "Strength", + (tab_optgroup) = "Infill", + (min_value) = 5, + (max_value) = 85, + (mode) = MODE_EXPERT, + (has_default) = true, + (default_value) = "45" + ]; + + + float lightning_straightening_angle = 487 [ + (label) = "Straightening angle", + (tooltip) = "Maximum straightening angle used to simplify Lightning branches.", + (category) = "Print/Strength", + (sidetext) = "°", + (tab_type) = "Print", + (tab_page) = "Strength", + (tab_optgroup) = "Infill", + (min_value) = 5, + (max_value) = 85, + (mode) = MODE_EXPERT, + (has_default) = true, + (default_value) = "45" + ]; + + bool align_infill_direction_to_model = 330 [ (label) = "Align infill direction to model", (tooltip) = "Aligns infill and surface fill directions to follow the model's orientation on the build plate. When enabled, fill directions rotate with the model to maintain optimal strength characteristics.", @@ -6332,9 +6490,6 @@ message PrintSettings { bool adaptive_layer_height = 406; - bool spaghetti_detector = 407; - - int32 wrapping_detection_layers = 408 [ (label) = "Clumping detection layers", (tooltip) = "Clumping detection layers.", @@ -6887,15 +7042,6 @@ message PrintSettings { ]; - repeated int32 filament_extruder_id = 453 [ - (label) = "Filament extruder id", - (tooltip) = "Filament extruder id.", - (no_cli) = true, - (has_default) = true, - (default_value) = "1" - ]; - - repeated int32 filament_self_index = 454 [ (label) = "Filament self index", (tooltip) = "Filament self index.", diff --git a/src/PrintConfigs/printer.proto b/src/PrintConfigs/printer.proto index 7a2ca7a8bb..e5c9e931a4 100644 --- a/src/PrintConfigs/printer.proto +++ b/src/PrintConfigs/printer.proto @@ -79,6 +79,13 @@ message PrinterSettings { option (virtual_preset_keys) = "wrapping_detection_layers"; option (virtual_preset_keys) = "wrapping_exclude_area"; option (virtual_preset_keys) = "z_hop_types"; + // Printer keys with hand-written defs in init_common_params (not proto fields); + // declared here so they land in s_Preset_printer_options and vendor machine + // profiles that set them are not stripped on load. + option (virtual_preset_keys) = "use_3mf"; + option (virtual_preset_keys) = "support_parallel_printheads"; + option (virtual_preset_keys) = "parallel_printheads_count"; + option (virtual_preset_keys) = "parallel_printheads_bed_exclude_areas"; float extruder_clearance_height_to_rod = 1 [ (label) = "Height to rod",