include g_th = 4.5; t = 2; g_len = 70; $fn = 5; hinge_num = 5; hinge_d = 5; hinge_h = 2; // do not edit // clip-on glasses diff("r") { bez = bezpath_curve([[0,0], [6.5,g_len/2], [0,g_len]], N=2); path_extrude2d(bezpath_curve(bez, N=2)) { diff("R") { square([g_th+2*t, g_th+t], anchor=TOP); tag("R") square([g_th, g_th], anchor=TOP); } } cuboid([g_th+2*t,t,(g_th+t)*2]); tag("r") cuboid([g_th+2*t,g_th+2*t,g_th*2], anchor=FWD+RIGHT); tag("r")back(g_len) cuboid([20,20,20], anchor=BACK+RIGHT); } // hinge back(g_len - 2) right(g_th/2 + t/2) zrot(11) xrot(7) diff("R") { right(4) for(i=[0 : hinge_num-1]) { up(hinge_h/2 + i * hinge_h*5 / (hinge_num-1)) if(i%2==0) { fwd(t/2) cuboid([hinge_d,hinge_d+t,hinge_h], rounding=1, edges="Z"); } else { left(t/2) cuboid([hinge_d+t,hinge_d,hinge_h], rounding=1, edges="Z"); } } up(2) cuboid([t,t*2,15]); tag("R") right(4) cyl(h=100, d=1); } // blind back(g_len) right(g_th/2 + t/2 + 4) zrot(11) union() { xrot(7) fwd(4.5) down(2) right(1.15) cuboid([t,10,20], anchor=BOT+BACK, rounding=3, edges="X"); fwd(6) down(3) cuboid([t,60,50], anchor=BOT+BACK, rounding=3, edges="X"); }