Fix hybrid tree first-layer support base behavior and expose density setting (#13454)

Fix hybrid tree first-layer support base flow and UI consistency

Fix incorrect first-layer generation for hybrid tree supports.

The support base on the first layer used brim flow instead of support material flow,
which could lead to incorrect extrusion behavior and wrong material usage in
multi-material prints.

Additionally, spacing and density for the regular support part were not consistently
derived from the actual first-layer support flow when first-layer and regular
line widths differed.

Hybrid-specific behavior is clarified:
- first-layer expansion applies only to the regular support part
- tree-only regions keep their existing behavior

The first-layer support pattern is aligned with normal and organic tree supports
to ensure consistent and meaningful density behavior.

Also make first-layer support expansion and density settings visible whenever
supports are enabled, as density was already affecting hybrid supports but was
hidden in the UI.
This commit is contained in:
Kiss Lorand
2026-05-14 19:44:40 +03:00
committed by GitHub
parent dd8cb89f6d
commit d2ca5d3a1e
2 changed files with 42 additions and 7 deletions

View File

@@ -788,9 +788,12 @@ void ConfigManipulation::toggle_print_fff_options(DynamicPrintConfig *config, co
toggle_line("raft_contact_distance", have_raft && !have_support_soluble);
// Orca: Raft, grid, snug and organic supports use these two parameters to control the size & density of the "brim"/flange
for (auto el : { "raft_first_layer_expansion", "raft_first_layer_density"})
toggle_field(el, have_support_material && !(support_is_normal_tree && !have_raft));
// Orca: First-layer density is available for supports broadly.
toggle_field("raft_first_layer_density", have_support_material);
// Orca: For regular tree (Slim/Strong) without raft, hide first-layer expansion.
// Keep it enabled for non-tree supports, organic tree, hybrid tree, and any raft case.
toggle_field("raft_first_layer_expansion",
have_support_material && ((!support_is_normal_tree || support_style == smsTreeHybrid) || have_raft));
bool has_ironing = (config->opt_enum<IroningType>("ironing_type") != IroningType::NoIroning);
for (auto el : { "ironing_pattern", "ironing_flow", "ironing_spacing", "ironing_angle", "ironing_inset", "ironing_angle_fixed" })