from koko.lib.shapes import * # Render boundaries w_thick = .15 w_x = 3.5 w_y = .75 w_z = w_x/2+w_thick cad.xmin = 0 cad.xmax = w_x cad.ymin = 0 cad.ymax = w_z cad.zmin = -w_thick cad.zmax = w_y+.01 cad.mm_per_unit = 25.4 # inch units s = sphere(0,0,0,1) s = attract(s,1,0,2,0) side_pull = 1.5 hole_d = .4 s = attract(s,1,side_pull,0,0) s = attract(s,1,-side_pull,0,0) s = attract(s,1,0,0,side_pull) s = attract(s,1,0,0,-side_pull) s = subtract(s,sphere(0,-1,0,1)) #s = add(s, rotate_x(cylinder(0,0,.3,.5, 1.5),-90)) d = rotate_x(cylinder(0,0,0,.5,.325),-90) c = rotate_x(cylinder(0,0,0,5,.2),-90) s = intersect(s, sphere(0,-1,0,1.5)) sfac = 1.1/1.7 s = scale_x(s, 0, sfac) s = scale_z(s, 0,sfac) s = add(s, move(d,hole_d,0,0)) s = subtract(s, move(c,hole_d,0,0)) s = add(s, move(d,-hole_d,0,0)) s = subtract(s,move(c,-hole_d,0,0)) s = add(s, move(d,0,0,-hole_d)) s = subtract(s, move(c,0,0,-hole_d)) s = add(s, move(d,0,0,hole_d)) s = subtract(s,move(c,0,0,hole_d)) s = rotate_y(s, 45) top = s - cube(-5, 5, -5, 0, -5, 5) bottom = rotate_x(s - cube(-5, 5, 0,5, -5, 5),180) wax = cube(0,w_x, 0,w_y, 0, w_z) wax = wax-cube(w_thick, w_x/2-w_thick/2, w_thick,w_y, w_thick, w_x/2-w_thick/2) wax = wax-cube(w_x/2+w_thick/2, w_x-w_thick, w_thick,w_y, w_thick, w_x/2-w_thick/2) parts = move(top, w_x/4, w_thick,w_x/4) + move(bottom, 3*w_x/4, w_thick,w_x/4) al = cube(w_thick, 2*w_thick, w_thick, 2*w_thick, w_thick, 2*w_thick) al = al + move(al, w_x/2-2.5*w_thick,0,0) al = al + move(al, 0, 0, w_x/2-2.5*w_thick) wax = wax+al wax = wax- move(al, w_x/2-w_thick/2,-w_thick,0) spew = cube(w_x/4+.5, 3*w_x/4-.5, w_thick, 1.5*w_thick, w_x/4-w_thick/4-.2, w_x/4+w_thick/4-.2) spew = spew + cube(w_x/4+.5, 3*w_x/4-.5, w_thick, 1.5*w_thick, w_x/4-w_thick/4+.2, w_x/4+w_thick/4+.2) wax = wax+parts+spew+cube(0, w_x, -w_thick, 0, 0, w_z) wax = move(rotate_x(wax,90), 0,w_z, 0) cad.function = wax