include $fn=300; module cylindrical_socket(outer_r, t, h) { inner_r = outer_r-2*t; difference() { cylinder(h=h, r=outer_r, center=true); cylinder(h=h+0.01, r=outer_r-t, center=true); } difference() { cylinder(h=h, r=inner_r, center=true); cylinder(h=h+0.01, r=inner_r-t, center=true); } } outer_r=d/2 + t; difference() { // Without bore holes difference() { union() { translate([0, 0, h_socket/2+t/2]) cylindrical_socket(d/2 + t, t, h_socket); // Base plate cylinder(h=t, r=(d+d_screw_head1+10+3*t)/2, center=true); } cylinder(h=h, r=d/2-2*t, center=true); } //for (rot=[0:1:1]) for (y=[-1:1:1]) for (x=[-1:1:1]) { //rotate([0, 0, rot*45]) translate([x*(outer_r+2*t+1), y*(outer_r+2*t+1), 0]) cylinder(r1=d_screw_head0/2, r2=d_screw_head1/2, h=t+0.01, center=true); } }