module dial(radius,length,amount,h=6,w=6){ deg = 360/amount; for(i = [0:1:amount]){ stx = radius*sin(deg*i); sty = radius*cos(deg*i); stx2 = radius*sin(deg*i+w); sty2 = radius*cos(deg*i+w); endx = (radius-length)*sin(deg*i); endy = (radius-length)*cos(deg*i); endx2 = (radius-length)*sin(deg*i+w); endy2 = (radius-length)*cos(deg*i+w); //polygon([[stx,sty],[stx2,sty2],[endx2,endy2],[endx,endy]]); polygon([[stx*2,sty*2],[stx2*2,sty2*2],[endx2*2,endy2*2],[endx*2,endy*2]]); } } module cyl(w1,w2,d,z){ difference(){ cylinder(z,w1,w2); linear_extrude(z) circle(w1-d); } } module dylinder(r,l,a,z){ translate([0,0,z]) linear_extrude(0.2) dial(r,l,a); } module shole(x,y){ translate([x,y,1]) cylinder(1.41,2,3.5); translate([x,y,0]) cylinder(1,2,2); } render(){ difference(){ cyl(25*(1+sin(0+50)),25*(1+sin(2.4+50)),12.5,2.4); shole(0,36); shole(0,-36); } } for(i = [0:0.2:179.8]){ if(i>2.4 && i<100 ){ rotate([0,0,i]) dylinder(12.5*(1+sin(i+50)),2,16,i); rotate([0,0,0-i]) dylinder(12.5*(1+sin(i+50)),2,16,i); } if(i>=100){ rz = 42.65-15*sin((i)+280); rotate([0,0,i]) dylinder(rz/2,2,16,i); rotate([0,0,0-i]) dylinder(rz/2,2,16,i); } }