use; $fn = 100; /* measurements total_z = 7.6 upper_x = 59.6 upper_y = 59.6 upper_z = 4 upper_r = 2 // ? maybe lower_x = 52.6 lower_y = 52.6 lower_z = 3.6 lower_r = 13 // ? maybe screw_hole_d = 4.8 screw_hole_bevel_d = 8.2 screw_hole_bevel_h = 1.8 screw_hole_padding_lower = 1.8 */ lower(); module alpha_adaptor() { difference(){ union(){ lower(); translate([0, 0, 3.6]) upper(); } cylinder(h = 10, r = 35 / 2); translate([0,0,7.6 - 2.8]) base(b = 0); } } module upper(h = 4, size = 59.6, r = 3.5){ difference() { rounded_rect(h = h, size = size, r = r); screw_holes(); center_hole(); translate([0,0,h - 2.8]) base(b = 0); guide_posts(); } } module lower(h = 3.6, size = 52.6, r = 15){ difference() { union(){ rounded_rect(h = h, size = size, r = r); guide_posts(); } screw_holes(); center_hole(); } } module center_hole() { cylinder(h = 10, r = 35 / 2); } module guide_posts(h = 7.6, r = 4.8 / 2) { rotate([0,0,45]) screw_holes(h = 7.6, r1 = r, r2 = r); } module screw_holes(h = 10, r1 = 4.8 / 2, r2 = 5.6 / 2, pos = 52.6 / 2 - 1.8){ offset = pos - r1; chamfer_height = r2 - r1; translate([offset, 0, 0]){ cylinder(h = h, r = r1); translate([0, 0 , 7.6 - chamfer_height]) cylinder(h = chamfer_height, r1 = r1, r2 = r2); } translate([-offset, 0, 0]){ cylinder(h = h, r = r1); translate([0, 0 ,7.6 - chamfer_height]) cylinder(h = chamfer_height, r1 = r1, r2 = r2); } translate([0, offset, 0]){ cylinder(h = h, r = r1); translate([0, 0 ,7.6 - chamfer_height]) cylinder(h = chamfer_height, r1 = r1, r2 = r2); } translate([0, -offset, 0]){ cylinder(h = h, r = r1); translate([0, 0 ,7.6 - chamfer_height]) cylinder(h = chamfer_height, r1 = r1, r2 = r2); } } module rounded_rect(h, size, r) { corner_offset = size / 2 - r; hull(){ translate([corner_offset, corner_offset, 0]) cylinder(h = h, r = r); translate([corner_offset, -corner_offset, 0]) cylinder(h = h, r = r); translate([-corner_offset, corner_offset, 0]) cylinder(h = h, r = r); translate([-corner_offset, -corner_offset, 0]) cylinder(h = h, r = r); } }