epsilon = 0.01; infty = 100; diam = 25; wall = 1.5; height = 18; angle=75; dist = -4; module pin() { translate([0, dist, 0]) rotate([-10, 0, 0]) rotate([0, 0, angle/2]) { difference() { cylinder(r=diam/2, h=height); translate([0, 0, -epsilon]) cylinder(r=diam/2-wall, h=height+2*epsilon); translate([-infty, -infty/2, -infty/2]) cube(infty); rotate([0, 0, 180-angle]) translate([-infty, -infty/2, -infty/2]) cube(infty); }; translate([0, diam/2-wall, 0]) cylinder(r=wall, h=height); }; } module pins() { difference() { union() { pin(); scale([1, -1, 1]) pin(); }; translate([-infty/2, -infty/2, -infty]) cube(infty); }; }; module rear() { difference() { hull() intersection() { pins(); translate([4, -infty/2, -infty/2]) cube([3*wall, infty, infty]); }; translate([0, 0, height/2]) rotate([0, 90, 0]) cylinder(r=2, h = infty, $fn=6); translate([0, 0, height/2]) rotate([0, 90, 0]) cylinder(r=4.5, h = 5.5); }; }; module main() { pins(); rear(); }; main($fn=128); // color("red") translate([-1, 0, 0]) cylinder(r=4.25, h=1);