infty = 100; eps = 0.01; diameter = 25; thick = 2.5; base_thick = 1.5; d_minus = thick; // cca 45 deg center_hole_d = 4.8+0.5; center_hole_d2 = 2.5; side_holes = 5; side_hole_d = 5; cut_hole_d = 2; cut_slot = 1; module body() { cylinder(r1 = diameter/2, r2 = diameter/2-d_minus/2, h = thick/2 + eps); translate([0, 0, thick/2-eps]) cylinder(r2 = diameter/2, r1 = diameter/2-d_minus/2, h = thick/2 + eps); } difference() { body($fn = 128); if (center_hole_d2 > 0) { translate([0, 0, 0.5]) cylinder(r1 = center_hole_d/2, r2 = center_hole_d/2+0.2, h = thick + 2*eps, $fn = 8); translate([0, 0, -eps]) cylinder(r = center_hole_d2/2, h = thick + 2*eps, $fn = 128); } else { translate([0, 0, -eps]) cylinder(r = center_hole_d/2, h = thick + 2*eps, $fn = 128); } if (side_holes > 0) for (angle = [0:360/side_holes:360]) rotate([0, 0, angle+180/side_holes]) translate([2*diameter/7 - d_minus + center_hole_d/2, 0, -eps]) cylinder(r = side_hole_d/2, h = thick + 2*eps, $fn=128); if (base_thick) difference() { translate([0, 0, base_thick]) cylinder( r1 = center_hole_d/2 + base_thick, r2 = diameter/2-d_minus/2, h = thick-base_thick+eps, $fn = 128); translate([0, 0, base_thick-eps]) cylinder(r1 = center_hole_d/2 + base_thick, r2 = center_hole_d/2 + base_thick/2, h = thick - base_thick + eps, $fn = 128); } if (cut_hole_d) { translate([diameter/3-cut_hole_d/2, 0, -eps]) cylinder(r = cut_hole_d/2, h = thick + 2*eps, $fn =128); translate([diameter/2-d_minus/2, -cut_slot/2, -eps]) cube([diameter/2, cut_slot, thick + 2*eps]); } }