$fn=64; // --- Parameters --- tray_outer_diameter = 120; tray_inner_diameter = 114; tray_height = 18; base_thickness = 2.5; pot_ring_diameter = 60; channel_count = 8; channel_width = 4; channel_height = 3; module plant_stack_tray() { union() { // Main tray body with raised edges difference() { // Outer shell cylinder(d=tray_outer_diameter, h=tray_height); // Hollow inside for water collection translate([0, 0, base_thickness]) cylinder(d=tray_inner_diameter, h=tray_height); } // Raised radial ridges (creates drainage channels between them) // Keeps the pot elevated above the collected water for(i = [0 : channel_count - 1]) { rotate([0, 0, i * (360 / channel_count)]) translate([0, -channel_width/2, base_thickness - 0.1]) cube([(tray_inner_diameter/2) - 0.5, channel_width, channel_height + 0.1]); } // Central locating ring for small pot rings translate([0, 0, base_thickness - 0.1]) difference() { cylinder(d=pot_ring_diameter + channel_width*2, h=channel_height + 0.1); translate([0, 0, -0.1]) cylinder(d=pot_ring_diameter, h=channel_height + 0.3); } // Center support pad translate([0, 0, base_thickness - 0.1]) cylinder(d=pot_ring_diameter - 15, h=channel_height + 0.1); } } // Render the model plant_stack_tray();