$fn=64; // --- Parameters --- tray_outer_diameter = 240; // Overall width of the tray tray_inner_diameter = 230; // Width of the water collection area tray_height = 35; // Total height of the tray base_thickness = 8; // Thickness of the bottom floor footing_height = 3; // Height of the raised bottom gap (feet) footing_width = 12; // Width of the outer stable foot ring center_foot_diameter = 40; // Diameter of the central support foot groove_depth = 3; // Depth of the drainage grooves groove_width = 8; // Width of the drainage grooves num_radial_grooves = 16; // Number of grooves radiating from center num_concentric_grooves = 4; // Number of circular grooves // --- Module Definition --- module collection_tray() { difference() { // Main solid body cylinder(d=tray_outer_diameter, h=tray_height); // Main inner basin (water collection area) translate([0, 0, base_thickness]) cylinder(d=tray_inner_diameter, h=tray_height); // Hollow underneath to create stable outer ring and center foot translate([0, 0, -1]) difference() { cylinder(d=tray_outer_diameter - 2*footing_width, h=footing_height + 1); // Keep a solid center foot for stability translate([0, 0, -1]) cylinder(d=center_foot_diameter, h=footing_height + 3); } // Radial drainage grooves for(i = [0 : num_radial_grooves-1]) { rotate([0, 0, i * (360 / num_radial_grooves)]) translate([0, -groove_width/2, base_thickness - groove_depth]) cube([tray_inner_diameter/2, groove_width, groove_depth + 1]); } // Concentric drainage grooves for(j = [1 : num_concentric_grooves]) { // Calculate radius for each concentric ring ring_radius = j * (tray_inner_diameter / 2 / (num_concentric_grooves + 1)); translate([0, 0, base_thickness - groove_depth]) difference() { cylinder(r=ring_radius + groove_width/2, h=groove_depth + 1); translate([0, 0, -1]) cylinder(r=ring_radius - groove_width/2, h=groove_depth + 3); } } } } // --- Render --- collection_tray();