$fn = 360; h= 30; t = 30; r = 100; module tube(h,r,t) { //t for thickness difference(){ cylinder(h,r+t,r+t,center = true); cylinder(h+2,r,r, center = true); } } // bolt opening module boltnut(){ br = 1; // bolt radius nh = 1; // nut height nr = 2; // nut radius cylinder(h+1,br,br,center = true); translate([0,0,h/2-nh+1]) cylinder(nh+1,nr,nr,center = true); z = h/2-nh+1; translate([0,0,z]) cylinder(nh+1,nr,nr,center = true); translate([0,0,-z]) cylinder(nh+1,nr,nr,center = true); } difference(){ rotate([90,0,0]) difference(){ tube(h,r,t); h2 = 10; t2 = 10; tube(h2,r+t-t2,t2+1); } // remove bottom s=r+t; translate([-s,-s,-2*s]) cube(2*(r+t)); x = r+t/2; num_bolts = 10; for (i = [1 : num_bolts ]) { rotate([90,i*180/(num_bolts+1),0]) translate([-x,0,0]) boltnut(); } } bh=20; // box height x = r+t/2; translate([x,0,-bh/2]) cube([40,60,bh],center=true); translate([-x,0,-bh/2]) cube([40,60,bh],center=true);