eps = 0.01; infty = 200; hole_d = 38.5; hole_overhang = 50; tube_d = 6.0 + 1.0; hole_h = 12.5; hole_split = 22; wall = 2.0; lock_w = 3; lock_l = 1.2; module body() { cylinder(r = hole_overhang/2, h = wall, $fn = 128); cylinder(r = hole_d/2, h = hole_h + 2*wall, $fn = 128); for (x = [-1, 1]) translate([x*hole_split/2, 0, hole_h+2*wall-eps]) cylinder(r1 = (hole_d-hole_split)/2, r2 = tube_d/2+wall, h = hole_h, $fn = 128); for (angle = [0:120:360]) rotate([0, 0, 90+angle]) translate([hole_d/2-wall, -lock_w/2, hole_h-wall]) hull() { cube([wall, lock_w, eps]); translate([0, 0, 2.5*wall]) cube([lock_l+wall, lock_w, wall/2]); } } difference() { body(); for (x = [-1, 1]) translate([x*hole_split/2, 0, -eps]) cylinder(r = tube_d/2, h = infty, $fn = 128); } tube_d_fest = 5.7; pin_d1 = 12; pin_d2 = 18; pin_h = 15; module pin() { difference() { cylinder (r1 = pin_d2/2, r2 = pin_d1/2, h = pin_h, $fn = 128); translate([-tube_d_fest/2, -tube_d_fest/2, wall]) cube([tube_d_fest, tube_d_fest, infty]); } } for (y = [-1, 1]) translate([hole_overhang/2 + pin_d2/2 + wall, y*(pin_d2/2 + wall), 0]) pin();