$fn=64; // --- Parameters --- cup_diameter = 65; // Inner diameter for the washing cups cup_depth = 20; // Depth of the cup holders wall_thickness = 4; // Thickness of the outer walls base_thickness = 3; // Thickness of the bottom floor brush_stand_height = 45; // Height of the back block holding the brushes brush_stand_depth = 20; // Depth of the back block brush_hole_spacing = 14; // Spacing between brush holes brush_holes = [6, 8, 10, 10, 8, 6]; // Diameters of the individual brush holes // --- Calculated Variables --- cup_outer = cup_diameter + (wall_thickness * 2); cup_offset = cup_outer / 2 + 2; total_height = cup_depth + base_thickness; // --- Geometry --- difference() { union() { // Main Cup Holder Base hull() { translate([-cup_offset, 0, 0]) cylinder(d=cup_outer, h=total_height); translate([cup_offset, 0, 0]) cylinder(d=cup_outer, h=total_height); } // Raised Brush Stand (Back Edge) hull() { translate([-cup_offset, cup_outer/2 - brush_stand_depth/2, 0]) cylinder(d=brush_stand_depth, h=brush_stand_height); translate([cup_offset, cup_outer/2 - brush_stand_depth/2, 0]) cylinder(d=brush_stand_depth, h=brush_stand_height); } } // Left Cup Cutout translate([-cup_offset, 0, base_thickness]) cylinder(d=cup_diameter, h=total_height + 1); // Right Cup Cutout translate([cup_offset, 0, base_thickness]) cylinder(d=cup_diameter, h=total_height + 1); // Brush Holes Cutouts for (i = [0 : len(brush_holes) - 1]) { translate([ (i - (len(brush_holes)-1)/2) * brush_hole_spacing, cup_outer/2 - brush_stand_depth/2, base_thickness ]) cylinder(d=brush_holes[i], h=brush_stand_height + 1); } }