From 2a0cfdb3560388ffaedffabe80e34fb606c325e7 Mon Sep 17 00:00:00 2001 From: Ioannis Giannakas <59056762+igiannakas@users.noreply.github.com> Date: Wed, 24 Dec 2025 12:26:50 +0200 Subject: [PATCH] Fill Adaptive disconnecting from walls at low density. Disable rotation as infill type does not support it (#11728) Fix adaptive fill issues - Disconnecting from walls at low density - Not supporting rotation Co-authored-by: Rodrigo Faselli <162915171+RF47@users.noreply.github.com> --- src/libslic3r/Fill/FillAdaptive.cpp | 11 +++++++++++ src/slic3r/GUI/ConfigManipulation.cpp | 11 +++++++---- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/src/libslic3r/Fill/FillAdaptive.cpp b/src/libslic3r/Fill/FillAdaptive.cpp index 69748ae9c6..344bb529f0 100644 --- a/src/libslic3r/Fill/FillAdaptive.cpp +++ b/src/libslic3r/Fill/FillAdaptive.cpp @@ -1448,6 +1448,17 @@ static std::vector make_cubes_properties(double max_cube_edge_le if (edge_length > max_cube_edge_length) break; } + // Orca: Ensure at least 2 levels so build_octree() will insert triangles. + // Fixes scenario where adaptive fill is disconnected from walls on low densities + if (cubes_properties.size() == 1) { + CubeProperties p = cubes_properties.back(); + p.edge_length *= 2.0; + p.height = p.edge_length * sqrt(3); + p.diagonal_length = p.edge_length * sqrt(2); + p.line_z_distance = p.edge_length / sqrt(3); + p.line_xy_distance = p.edge_length / sqrt(6); + cubes_properties.push_back(p); + } return cubes_properties; } diff --git a/src/slic3r/GUI/ConfigManipulation.cpp b/src/slic3r/GUI/ConfigManipulation.cpp index 38bc2cb7c9..6c5fa69534 100644 --- a/src/slic3r/GUI/ConfigManipulation.cpp +++ b/src/slic3r/GUI/ConfigManipulation.cpp @@ -935,12 +935,15 @@ void ConfigManipulation::toggle_print_fff_options(DynamicPrintConfig *config, co bool lattice_options = config->opt_enum("sparse_infill_pattern") == InfillPattern::ipLateralLattice; for (auto el : { "lateral_lattice_angle_1", "lateral_lattice_angle_2"}) toggle_line(el, lattice_options); + + // Adaptative Cubic and support cubic infill patterns do not support infill rotation. + bool FillAdaptive = (pattern == InfillPattern::ipAdaptiveCubic || pattern == InfillPattern::ipSupportCubic); - //Orca: disable infill_direction/solid_infill_direction if sparse_infill_rotate_template/solid_infill_rotate_template is not empty value - toggle_field("infill_direction", config->opt_string("sparse_infill_rotate_template") == ""); + //Orca: disable infill_direction/solid_infill_direction if sparse_infill_rotate_template/solid_infill_rotate_template is not empty value and adaptive cubic/support cubic infill pattern is not selected + toggle_field("sparse_infill_rotate_template", !FillAdaptive); + toggle_field("infill_direction", config->opt_string("sparse_infill_rotate_template") == "" && !FillAdaptive); toggle_field("solid_infill_direction", config->opt_string("solid_infill_rotate_template") == ""); - - + toggle_line("infill_overhang_angle", config->opt_enum("sparse_infill_pattern") == InfillPattern::ipLateralHoneycomb); std::string printer_type = wxGetApp().preset_bundle->printers.get_edited_preset().get_printer_type(wxGetApp().preset_bundle);