$fn=64; // --- Parameters --- rack_width = 180; rack_depth = 60; rack_height = 45; wall_thickness = 4; base_thickness = 4; corner_radius = 3; tray_width = 40; tray_depth = 15; comb_slot_width = 8; brush_hole_dia = 32; // --- Derived Variables --- inner_h = rack_height - base_thickness + 1; // --- Modules --- module rounded_cube(w, d, h, r) { hull() { translate([r, r, 0]) cylinder(r=r, h=h); translate([w-r, r, 0]) cylinder(r=r, h=h); translate([w-r, d-r, 0]) cylinder(r=r, h=h); translate([r, d-r, 0]) cylinder(r=r, h=h); } } // --- Main Geometry --- difference() { // Main Body rounded_cube(rack_width, rack_depth, rack_height, corner_radius); // 1. Accessory Tray (Left) translate([wall_thickness, wall_thickness, rack_height - tray_depth]) cube([tray_width, rack_depth - 2*wall_thickness, tray_depth + 1]); // 2. Comb Slot 1 translate([wall_thickness*2 + tray_width, wall_thickness, base_thickness]) cube([comb_slot_width, rack_depth - 2*wall_thickness, inner_h]); // 3. Comb Slot 2 translate([wall_thickness*3 + tray_width + comb_slot_width, wall_thickness, base_thickness]) cube([comb_slot_width, rack_depth - 2*wall_thickness, inner_h]); // 4. Brush Hole 1 translate([wall_thickness*4 + tray_width + comb_slot_width*2 + brush_hole_dia/2, rack_depth/2, base_thickness]) cylinder(d=brush_hole_dia, h=inner_h); // 5. Brush Hole 2 translate([wall_thickness*5 + tray_width + comb_slot_width*2 + brush_hole_dia*1.5, rack_depth/2, base_thickness]) cylinder(d=brush_hole_dia, h=inner_h); // 6. Brush Hole 3 translate([wall_thickness*6 + tray_width + comb_slot_width*2 + brush_hole_dia*2.5, rack_depth/2, base_thickness]) cylinder(d=brush_hole_dia, h=inner_h); }