infty = 100; eps = 0.01; diameter = 25; thick = 2.5; base_thick = 1.5; d_minus = thick; // cca 45 deg center_hole_d = 3.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); 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([diameter/3 - 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]); } }