$fn = 64; // --- Parameters --- hole_dia = 30; // Diameter of the main holding hole slot_width = 22; // Width of the front opening wall = 5; // Wall thickness depth = 40; // Distance from wall to hole center bracket_h = 20; // Height of the holding bracket back_w = 90; // Backplate width back_h = 35; // Backplate height screw_dia = 4.5; // Screw hole diameter screw_dist = 70; // Distance between screw holes corner_radius = 4; // Radius for backplate corners module rounded_backplate() { // Centered on X and Y, sitting flat on Z=0 hull() { for (x = [-back_w/2 + corner_radius, back_w/2 - corner_radius]) { for (y = [-back_h/2 + corner_radius, back_h/2 - corner_radius]) { translate([x, y, 0]) cylinder(r=corner_radius, h=wall); } } } } module scoop_holder() { difference() { // --- Main Solid Body --- union() { rounded_backplate(); // Bracket arm hull() { // Outer cylinder around the scoop handle translate([0, 0, depth]) rotate([90, 0, 0]) cylinder(r=hole_dia/2 + wall, h=bracket_h, center=true); // Wide base connecting to the backplate translate([0, 0, wall/2]) cube([hole_dia + wall*4, bracket_h, wall], center=true); } } // --- Cutouts --- // Main handle hole translate([0, 0, depth]) rotate([90, 0, 0]) cylinder(r=hole_dia/2, h=bracket_h + 2, center=true); // Front slot for sliding the handle in // Centered to cut from the middle of the hole straight out the front translate([0, 0, depth + (hole_dia/2 + wall)/2 + 0.5]) cube([slot_width, bracket_h + 2, hole_dia/2 + wall + 1], center=true); // Left screw hole & countersink translate([-screw_dist/2, 0, -1]) cylinder(r=screw_dia/2, h=wall + 2); translate([-screw_dist/2, 0, wall - 2]) cylinder(r1=screw_dia/2, r2=screw_dia, h=2.1); // Right screw hole & countersink translate([screw_dist/2, 0, -1]) cylinder(r=screw_dia/2, h=wall + 2); translate([screw_dist/2, 0, wall - 2]) cylinder(r1=screw_dia/2, r2=screw_dia, h=2.1); } } // Render the final part scoop_holder();