$fn=64; // --- Parameters --- rack_width = 220; rack_depth = 70; backplate_height = 45; wall_thickness = 5; mount_hole_d = 5; module grooming_rack() { difference() { union() { // Wall mount backplate cube([rack_width, wall_thickness, backplate_height]); // Main shelf with rounded front corners hull() { cube([rack_width, 1, wall_thickness]); translate([5, rack_depth - 5, 0]) cylinder(h=wall_thickness, r=5); translate([rack_width - 5, rack_depth - 5, 0]) cylinder(h=wall_thickness, r=5); } // Triangular support gussets for structural integrity translate([wall_thickness, wall_thickness, wall_thickness]) support_gusset(); translate([rack_width / 2 - wall_thickness / 2, wall_thickness, wall_thickness]) support_gusset(); translate([rack_width - wall_thickness * 2, wall_thickness, wall_thickness]) support_gusset(); } // --- Mounting Holes with Countersinks --- translate([25, wall_thickness + 1, backplate_height - 15]) { rotate([90, 0, 0]) cylinder(h=wall_thickness + 2, d=mount_hole_d); rotate([90, 0, 0]) cylinder(h=3, d1=mount_hole_d * 2, d2=mount_hole_d); } translate([rack_width - 25, wall_thickness + 1, backplate_height - 15]) { rotate([90, 0, 0]) cylinder(h=wall_thickness + 2, d=mount_hole_d); rotate([90, 0, 0]) cylinder(h=3, d1=mount_hole_d * 2, d2=mount_hole_d); } // --- Tool Cutouts --- // 1. Clipper / Heavy Tool U-slot (Left) translate([35, rack_depth - 20, -1]) { cylinder(h=wall_thickness + 2, d=35); translate([-17.5, 0, 0]) cube([35, 25, wall_thickness + 2]); } // 2. Brush Handle Holes (Middle-Left) translate([85, rack_depth / 2 + 5, -1]) cylinder(h=wall_thickness + 2, d=28); translate([120, rack_depth / 2 + 5, -1]) cylinder(h=wall_thickness + 2, d=28); // 3. Comb Slots (Middle-Right) translate([150, 15, -1]) hull() { cylinder(h=wall_thickness + 2, d=6); translate([0, 35, 0]) cylinder(h=wall_thickness + 2, d=6); } translate([165, 15, -1]) hull() { cylinder(h=wall_thickness + 2, d=6); translate([0, 35, 0]) cylinder(h=wall_thickness + 2, d=6); } // 4. Scissors / Tweezers Holes (Right) translate([190, 25, -1]) cylinder(h=wall_thickness + 2, d=14); translate([190, 45, -1]) cylinder(h=wall_thickness + 2, d=14); translate([205, 35, -1]) cylinder(h=wall_thickness + 2, d=14); } } module support_gusset() { // Simple 3D-printable 45-degree triangular prism hull() { cube([wall_thickness, 0.1, backplate_height - wall_thickness - 5]); cube([wall_thickness, rack_depth - wall_thickness - 10, 0.1]); cube([wall_thickness, 0.1, 0.1]); } } // Render the rack grooming_rack();