$fn=64; // --- Parameters --- inner_dia = 155; // Fits 6-inch container (152.4mm) with clearance wall_thickness = 8; // Heavy duty wall thickness height = 45; // Total height of the ring stack_depth = 10; // Depth of the stacking joint tolerance = 0.6; // Radial clearance for stacking rib_count = 32; // Number of aesthetic outer ribs channel_count = 4; // Number of cross-cuts for water channels (8 total openings) channel_width = 12; // Width of water management channels // --- Derived Dimensions --- inner_r = inner_dia / 2; outer_r = inner_r + wall_thickness; mid_r = inner_r + (wall_thickness / 2); // --- Main Model --- difference() { union() { // Main ring body cylinder(h=height, r=outer_r); // Aesthetic reinforcing ribs for(i = [0 : rib_count - 1]) { rotate([0, 0, i * (360 / rib_count)]) translate([outer_r - 1, 0, height / 2]) cylinder(h=height - (stack_depth * 2), r=2.5, center=true); } } // Main inner container cutout translate([0, 0, -1]) cylinder(h=height + 2, r=inner_r); // Top stacking recess (cuts into the inside of the wall) translate([0, 0, height - stack_depth]) cylinder(h=stack_depth + 1, r=mid_r + tolerance); // Bottom stacking recess (cuts into the outside of the wall) translate([0, 0, -1]) difference() { cylinder(h=stack_depth + 1, r=outer_r + 2); translate([0, 0, -1]) cylinder(h=stack_depth + 3, r=mid_r - tolerance); } // Integrated water management channels (bottom cutouts) for(i = [0 : channel_count - 1]) { rotate([0, 0, i * (180 / channel_count)]) translate([0, 0, stack_depth / 2 - 1]) cube([outer_r * 2.5, channel_width, stack_depth + 2], center=true); } }