# # bearing.cad # # Amy Sun, Neil Gershenfeld # 12/23/06 # # # define shapes and transformation # # color(color,part) # circle(x0, y0, r) # cylinder(x0, y0, z0, z1, r) # cone(x0, y0, z0, z1, r0) # sphere(x0, y0, z0, r) # torus(x0, y0, z0, r0, r1) # rectangle(x0, x1, y0, y1) # cube(x0, x1, y0, y1, z0, z1) # triangle(x0, y0, x1, y1, x2, y2) (points in clockwise order) # pyramid(x0, x1, y0, y1, z0, z1) # function(Z_of_XY) # functions(upper_Z_of_XY,lower_Z_of_XY) # add(part1, part2) # subtract(part1, part2) # intersect(part1, part2) # move(part,dx,dy) # translate(part,dx,dy,dz) # rotate(part, angle) # rotate_x(part, angle) # rotate_y(part, angle) # rotate_z(part, angle) # rotate_90(part) # rotate_180(part) # rotate_270(part) # reflect_x(part) # reflect_y(part) # reflect_z(part) # reflect_xy(part) # reflect_xz(part) # reflect_yz(part) # scale_x(part, x0, sx) # scale_y(part, y0, sy) # scale_z(part, z0, sz) # scale_xy(part, x0, y0, sxy) # scale_xyz(part, x0, y0, z0, sxyz) # coscale_x_y(part, x0, y0, y1, angle0, angle1, amplitude, offset) # coscale_x_z(part, x0, z0, z1, angle0, angle1, amplitude, offset) # coscale_xy_z(part, x0, y0, z0, z1, angle0, angle1, amplitude, offset) # taper_x_y(part, x0, y0, y1, s0, s1) # taper_x_z(part, x0, z0, z1, s0, s1) # taper_xy_z(part, x0, y0, z0, z1, s0, s1) # shear_x_y(part, y0, y1, dx0, dx1) # shear_x_z(part, z0, z1, dx0, dx1) True = "1" False = "0" def color(color, part): part = '('+str(color)+'*(('+part+')!=0))' return part Red = (255 << 0) Green = (255 << 8) Blue = (255 << 16) Gray = (128 << 16) + (128 << 8) + (128 << 0) White = (255 << 16) + (255 << 8) + (255 << 0) Teal = (255 << 16) + (255 << 8) Pink = (255 << 16) + (255 << 0) Yellow = (255 << 8) + (255 << 0) Brown = (45 << 16) + (82 << 8) + (145 << 0) Navy = (128 << 16) + (0 << 8) + (0 << 0) Tan = (50 << 16) + (75 << 8) + (100 << 0) def circle(x0, y0, r): part = "(((X-(x0))*(X-(x0)) + (Y-(y0))*(Y-(y0))) <= (r*r))" part = replace(part,'x0',str(x0)) part = replace(part,'y0',str(y0)) part = replace(part,'r',str(r)) return part def cylinder(x0, y0, z0, z1, r): part = "(((X-(x0))*(X-(x0)) + (Y-(y0))*(Y-(y0)) <= (r*r)) & (Z >= (z0)) & (Z <= (z1)))" part = replace(part,'x0',str(x0)) part = replace(part,'y0',str(y0)) part = replace(part,'z0',str(z0)) part = replace(part,'z1',str(z1)) part = replace(part,'r',str(r)) return part def cone(x0, y0, z0, z1, r0): part = cylinder(x0, y0, z0, z1, r0) part = taper_xy_z(part, x0, y0, z0, z1, 1.0, 0.0) return part def sphere(x0, y0, z0, r): part = "(((X-(x0))*(X-(x0)) + (Y-(y0))*(Y-(y0)) + (Z-(z0))*(Z-(z0))) <= (r*r))" part = replace(part,'x0',str(x0)) part = replace(part,'y0',str(y0)) part = replace(part,'z0',str(z0)) part = replace(part,'r',str(r)) return part def torus(x0, y0, z0, r0, r1): part = "(((r0 - sqrt((X-(x0))*(X-(x0)) + (Y-(y0))*(Y-(y0))))*(r0 - sqrt((X-(x0))*(X-(x0)) + (Y-(y0))*(Y-(y0))) + (Z-(z0))*(Z-(z0))) <= (r1*r1))" part = replace(part,'x0',str(x0)) part = replace(part,'y0',str(y0)) part = replace(part,'z0',str(z0)) part = replace(part,'r0',str(r0)) part = replace(part,'r1',str(r1)) return part def rectangle(x0, x1, y0, y1): part = "((X >= (x0)) & (X <= (x1)) & (Y >= (y0)) & (Y <= (y1)))" part = replace(part,'x0',str(x0)) part = replace(part,'x1',str(x1)) part = replace(part,'y0',str(y0)) part = replace(part,'y1',str(y1)) return part def cube(x0, x1, y0, y1, z0, z1): part = "((X >= (x0)) & (X <= (x1)) & (Y >= (y0)) & (Y <= (y1)) & (Z >= (z0)) & (Z <= (z1)))" part = replace(part,'x0',str(x0)) part = replace(part,'x1',str(x1)) part = replace(part,'y0',str(y0)) part = replace(part,'y1',str(y1)) part = replace(part,'z0',str(z0)) part = replace(part,'z1',str(z1)) return part def triangle(x0, y0, x1, y1, x2, y2): # points in clockwise order part = "(((((y1)-(y0))*(X-(x0))-((x1)-(x0))*(Y-(y0))) >= 0) & ((((y2)-(y1))*(X-(x1))-((x2)-(x1))*(Y-(y1))) >= 0) & ((((y0)-(y2))*(X-(x2))-((x0)-(x2))*(Y-(y2))) >= 0))" part = replace(part,'x0',str(x0)) part = replace(part,'y0',str(y0)) part = replace(part,'x1',str(x1)) part = replace(part,'y1',str(y1)) part = replace(part,'x2',str(x2)) part = replace(part,'y2',str(y2)) return part def pyramid(x0, x1, y0, y1, z0, z1): part = cube(x0, x1, y0, y1, z0, z1) part = taper_xy_z(part, (x0+x1)/2., (y0+y1)/2., z0, z1, 1.0, 0.0) return part def function(Z_of_XY): part = '(Z <= '+Z_of_XY+')' return part def functions(upper_Z_of_XY,lower_Z_of_XY): part = '(Z <= '+upper_Z_of_XY+') & (Z >= '+lower_Z_of_XY+')' return part def add(part1, part2): part = "part1 | part2" part = replace(part,'part1',part1) part = replace(part,'part2',part2) return part def subtract(part1, part2): part = "(part1) & ~(part2)" part = replace(part,'part1',part1) part = replace(part,'part2',part2) return part def intersect(part1, part2): part = "(part1) & (part2)" part = replace(part,'part1',part1) part = replace(part,'part2',part2) return part def move(part,dx,dy): part = replace(part,'X','(X-('+str(dx)+'))') part = replace(part,'Y','(Y-('+str(dy)+'))') return part def translate(part,dx,dy,dz): part = replace(part,'X','(X-('+str(dx)+'))') part = replace(part,'Y','(Y-('+str(dy)+'))') part = replace(part,'Z','(Z-('+str(dz)+'))') return part def rotate(part, angle): angle = angle*pi/180 part = replace(part,'X','(cos(angle)*X+sin(angle)*y)') part = replace(part,'Y','(-sin(angle)*X+cos(angle)*y)') part = replace(part,'y','Y') part = replace(part,'angle',str(angle)) return part def rotate_x(part, angle): angle = angle*pi/180 part = replace(part,'Y','(cos(angle)*Y+sin(angle)*z)') part = replace(part,'Z','(-sin(angle)*Y+cos(angle)*z)') part = replace(part,'z','Z') part = replace(part,'angle',str(angle)) return part def rotate_y(part, angle): angle = angle*pi/180 part = replace(part,'X','(cos(angle)*X+sin(angle)*z)') part = replace(part,'Z','(-sin(angle)*X+cos(angle)*z)') part = replace(part,'z','Z') part = replace(part,'angle',str(angle)) return part def rotate_z(part, angle): angle = angle*pi/180 part = replace(part,'X','(cos(angle)*X+sin(angle)*y)') part = replace(part,'Y','(-sin(angle)*X+cos(angle)*y)') part = replace(part,'y','Y') part = replace(part,'angle',str(angle)) return part def rotate_90(part): part = reflect_xy(part) part = reflect_y(part) return part def rotate_180(part): part = reflect_xy(part) part = reflect_y(part) part = reflect_xy(part) part = reflect_y(part) return part def rotate_270(part): part = reflect_xy(part) part = reflect_y(part) part = reflect_xy(part) part = reflect_y(part) part = reflect_xy(part) part = reflect_y(part) return part def reflect_x(part): part = replace(part,'X','(-X)') return part def reflect_y(part): part = replace(part,'Y','(-Y)') return part def reflect_z(part): part = replace(part,'Z','(-Z)') return part def reflect_xy(part): part = replace(part,'X','temp') part = replace(part,'Y','X') part = replace(part,'temp','Y') return part def reflect_xz(part): part = replace(part,'X','temp') part = replace(part,'Z','X') part = replace(part,'temp','Z') return part def reflect_yz(part): part = replace(part,'Y','temp') part = replace(part,'Z','Y') part = replace(part,'temp','Z') return part def scale_x(part, x0, sx): part = replace(part,'X','((x0) + (X-(x0))/(sx))') part = replace(part,'x0',str(x0)) part = replace(part,'sx',str(sx)) return part def scale_y(part, y0, sy): part = replace(part,'Y','((y0) + (Y-(y0))/(sy))') part = replace(part,'y0',str(y0)) part = replace(part,'sy',str(sy)) return part def scale_z(part, z0, sz): part = replace(part,'Z','((z0) + (Z-(z0))/(sz))') part = replace(part,'z0',str(z0)) part = replace(part,'sz',str(sz)) return part def scale_xy(part, x0, y0, sxy): part = replace(part,'X','((x0) + (X-(x0))/(sxy))') part = replace(part,'Y','((y0) + (Y-(y0))/(sxy))') part = replace(part,'x0',str(x0)) part = replace(part,'y0',str(y0)) part = replace(part,'sxy',str(sxy)) return part def scale_xyz(part, x0, y0, z0, sxyz): part = replace(part,'X','((x0) + (X-(x0))/(sxyz))') part = replace(part,'Y','((y0) + (Y-(y0))/(sxyz))') part = replace(part,'Z','((z0) + (Z-(z0))/(sxyz))') part = replace(part,'x0',str(x0)) part = replace(part,'y0',str(y0)) part = replace(part,'z0',str(z0)) part = replace(part,'sxyz',str(sxyz)) return part def coscale_x_y(part, x0, y0, y1, angle0, angle1, amplitude, offset): phase0 = pi*angle0/180. phase1 = pi*angle1/180. part = replace(part,'X','((x0) + (X-(x0))/((offset) + (amplitude)*cos((phase0) + ((phase1)-(phase0))*(Y-(y0))/((y1)-(y0)))))') part = replace(part,'x0',str(x0)) part = replace(part,'y0',str(y0)) part = replace(part,'y1',str(y1)) part = replace(part,'phase0',str(phase0)) part = replace(part,'phase1',str(phase1)) part = replace(part,'amplitude',str(amplitude)) part = replace(part,'offset',str(offset)) return part def coscale_x_z(part, x0, z0, z1, angle0, angle1, amplitude, offset): phase0 = pi*angle0/180. phase1 = pi*angle1/180. part = replace(part,'X','((x0) + (X-(x0))/((offset) + (amplitude)*cos((phase0) + ((phase1)-(phase0))*(Z-(z0))/((z1)-(z0)))))') part = replace(part,'x0',str(x0)) part = replace(part,'z0',str(z0)) part = replace(part,'z1',str(z1)) part = replace(part,'phase0',str(phase0)) part = replace(part,'phase1',str(phase1)) part = replace(part,'amplitude',str(amplitude)) part = replace(part,'offset',str(offset)) return part def coscale_xy_z(part, x0, y0, z0, z1, angle0, angle1, amplitude, offset): phase0 = pi*angle0/180. phase1 = pi*angle1/180. part = replace(part,'X','((x0) + (X-(x0))/((offset) + (amplitude)*cos((phase0) + ((phase1)-(phase0))*(Z-(z0))/((z1)-(z0)))))') part = replace(part,'Y','((y0) + (Y-(y0))/((offset) + (amplitude)*cos((phase0) + ((phase1)-(phase0))*(Z-(z0))/((z1)-(z0)))))') part = replace(part,'x0',str(x0)) part = replace(part,'y0',str(y0)) part = replace(part,'z0',str(z0)) part = replace(part,'z1',str(z1)) part = replace(part,'phase0',str(phase0)) part = replace(part,'phase1',str(phase1)) part = replace(part,'amplitude',str(amplitude)) part = replace(part,'offset',str(offset)) return part def taper_x_y(part, x0, y0, y1, s0, s1): part = replace(part,'X','((x0) + (X-(x0))*((y1)-(y0))/((s1)*(Y-(y0)) + (s0)*((y1)-Y)))') part = replace(part,'x0',str(x0)) part = replace(part,'y0',str(y0)) part = replace(part,'y1',str(y1)) part = replace(part,'s0',str(s0)) part = replace(part,'s1',str(s1)) return part def taper_x_z(part, x0, z0, z1, s0, s1): part = replace(part,'X','((x0) + (X-(x0))*((z1)-(z0))/((s1)*(Z-(z0)) + (s0)*((z1)-Z)))') part = replace(part,'x0',str(x0)) part = replace(part,'z0',str(z0)) part = replace(part,'z1',str(z1)) part = replace(part,'s0',str(s0)) part = replace(part,'s1',str(s1)) return part def taper_xy_z(part, x0, y0, z0, z1, s0, s1): part = replace(part,'X','((x0) + (X-(x0))*((z1)-(z0))/((s1)*(Z-(z0)) + (s0)*((z1)-Z)))') part = replace(part,'Y','((y0) + (Y-(y0))*((z1)-(z0))/((s1)*(Z-(z0)) + (s0)*((z1)-Z)))') part = replace(part,'x0',str(x0)) part = replace(part,'y0',str(y0)) part = replace(part,'z0',str(z0)) part = replace(part,'z1',str(z1)) part = replace(part,'s0',str(s0)) part = replace(part,'s1',str(s1)) return part def shear_x_y(part, y0, y1, dx0, dx1): part = replace(part,'X','(X - (dx0) - ((dx1)-(dx0))*(Y-(y0))/((y1)-(y0)))') part = replace(part,'y0',str(y0)) part = replace(part,'y1',str(y1)) part = replace(part,'dx0',str(dx0)) part = replace(part,'dx1',str(dx1)) return part def shear_x_z(part, z0, z1, dx0, dx1): part = replace(part,'X','(X - (dx0) - ((dx1)-(dx0))*(Z-(z0))/((z1)-(z0)))') part = replace(part,'z0',str(z0)) part = replace(part,'z1',str(z1)) part = replace(part,'dx0',str(dx0)) part = replace(part,'dx1',str(dx1)) return part def coshear_x_z(part, z0, z1, angle0, angle1, amplitude, offset): phase0 = pi*angle0/180. phase1 = pi*angle1/180. part = replace(part,'X','(X - (offset) - (amplitude)*cos((phase0) + ((phase1)-(phase0))*(Z-(z0))/((z1)-(z0))))') part = replace(part,'z0',str(z0)) part = replace(part,'z1',str(z1)) part = replace(part,'phase0',str(phase0)) part = replace(part,'phase1',str(phase1)) part = replace(part,'amplitude',str(amplitude)) part = replace(part,'offset',str(offset)) return part # # text classes and definitions # class text: # # text class # def __init__(self,text,x,y,z,line='',height='',width='',space='',align='CC',color=White,angle=0): # # parameters # if (line == ''): line = 1 if (height == ''): height = 6*line if (width == ''): width = 4*line if (space == ''): space = line/2.0 self.width = 0 self.height = 0 self.text = text # # construct shape dictionary # shapes = {} shape = triangle(0,0,width/2.0,height,width,0) cutout = triangle(0,-2.5*line,width/2.0,height-2.5*line,width,-2.5*line) cutout = subtract(cutout,rectangle(0,width,height/4-line/2,height/4+line/2)) shape = subtract(shape,cutout) shapes['A'] = shape shape = circle(width/2,width/2,width/2) shape = subtract(shape,circle(width/2,width/2,width/4)) shape = add(shape,rectangle(width-line,width,0,height/3)) shapes['a'] = shape shape = rectangle(0,width-height/4,0,height) shape = add(shape,circle(width-height/4,height/4,height/4)) shape = add(shape,circle(width-height/4,3*height/4,height/4)) w = height/2-1.5*line shape = subtract(shape,rectangle(line,line+w/1.5,height/2+line/2,height-line)) shape = subtract(shape,circle(line+w/1.5,height/2+line/2+w/2,w/2)) shape = subtract(shape,rectangle(line,line+w/1.5,line,height/2-line/2)) shape = subtract(shape,circle(line+w/1.5,height/2-line/2-w/2,w/2)) shapes['B'] = shape shape = circle(width/2,width/2,width/2) shape = subtract(shape,circle(width/2,width/2,width/4)) shape = add(shape,rectangle(0,line,0,height)) shapes['b'] = shape shape = circle(width/2,width/2,width/2) shape = add(shape,circle(width/2,height-width/2,width/2)) shape = add(shape,rectangle(0,width,line+w/2,height-line-w/2)) w = width-2*line shape = subtract(shape,circle(width/2,line+w/2,w/2)) shape = subtract(shape,circle(width/2,height-line-w/2,w/2)) shape = subtract(shape,rectangle(line,width,line+w/2,height-line-w/2)) shapes['C'] = shape shape = circle(width/2,width/2,width/2) shape = subtract(shape,circle(width/2,width/2,width/4)) shape = subtract(shape,rectangle(width/2,width,width/2-line/1.5,width/2+line/1.5)) shapes['c'] = shape shape = circle(line,width-line,width-line) shape = subtract(shape,circle(line,width-line,width-2*line)) shape = subtract(shape,rectangle(-width,line,0,height)) shape = scale_y(shape,0,height/(2*(width-line))) shape = add(shape,rectangle(0,line,0,height)) shapes['D'] = shape shape = rectangle(width-line,width,0,height) shape = add(shape,circle(width/2,width/2,width/2)) shape = subtract(shape,circle(width/2,width/2,width/2-line)) shapes['d'] = shape shape = rectangle(0,line,0,height) shape = add(shape,rectangle(0,width,height-line,height)) shape = add(shape,rectangle(0,2*width/3,height/2-line/2,height/2+line/2)) shapes['F'] = shape shape = circle(width/2,width/2,width/2) shape = add(shape,circle(width/2,height-width/2,width/2)) shape = add(shape,rectangle(0,width,line+w/2,height-line-w/2)) w = width-2*line shape = subtract(shape,circle(width/2,line+w/2,w/2)) shape = subtract(shape,circle(width/2,height-line-w/2,w/2)) shape = subtract(shape,rectangle(line,width,line+w/2,height-line-w/2)) shape = add(shape,rectangle(width/2,width,line+w/2,2*line+w/2)) shapes['G'] = shape shape = rectangle(width/2-line/2,width/2+line/2,0,height) shape = add(shape,rectangle(width/5,4*width/5,0,line)) shape = add(shape,rectangle(width/5,4*width/5,height-line,height)) shapes['I'] = shape shape = circle(width/2,width/2,width/2) shape = subtract(shape,circle(width/2,width/2,width/2-line)) shape = subtract(shape,rectangle(0,width,width/2,height)) shape = add(shape,rectangle(width-line,width,width/2,height)) shapes['J'] = shape shape = rectangle(0,width,0,height) shape = subtract(shape,triangle(line,height,width-1.1*line,height,line,height/2+.5*line)) shape = subtract(shape,triangle(width,0,line+0.8*line,height/2,width,height)) shape = subtract(shape,triangle(line,0,line,height/2-.5*line,width-1.1*line,0)) shapes['K'] = shape shape = rectangle(0,width,0,height) shape = subtract(shape,rectangle(line,width,2*height/3,height)) shape = subtract(shape,triangle(line,2*height/3,width-1.3*line,2*height/3,line,height/3+.5*line)) shape = subtract(shape,triangle(width,0,line+0.8*line,height/3,width,2*height/3)) shape = subtract(shape,triangle(line,0,line,height/3-0.5*line,width-1.3*line,0)) shapes['k'] = shape shape = rectangle(0,line,0,height) shape = add(shape,rectangle(0,width,0,line)) shapes['L'] = shape shape = rectangle(0,width,0,height) shape = subtract(shape,triangle(line,height+1.5*line,width-line,height+1.5*line,width-line,1.5*line)) shape = subtract(shape,triangle(line,-1.5*line,line,height-1.5*line,width-line,-1.5*line)) shapes['N'] = shape shape = circle(width/2,width/2,width/2) shape = add(shape,circle(width/2,height-width/2,width/2)) shape = add(shape,rectangle(0,width,line+w/2,height-line-w/2)) w = width-2*line shape = subtract(shape,circle(width/2,line+w/2,w/2)) shape = subtract(shape,circle(width/2,height-line-w/2,w/2)) shape = subtract(shape,rectangle(line,width-line,line+w/2,height-line-w/2)) shapes['O'] = shape shape = rectangle(0,line,0,height) w = 2*height/3 shape = add(shape,circle(width-w/2,height-w/2,w/2)) shape = add(shape,rectangle(0,width-w/2,height-w,height)) shape = subtract(shape,circle(width-w/2,height-w/2,w/2-line)) shape = subtract(shape,rectangle(line,width-w/2,height-w+line,height-line)) shapes['P'] = shape shape = circle(width/2,width/2,width/2) shape = subtract(shape,circle(width/2,width/2,width/4)) shape = add(shape,rectangle(0,line,-height/3,width)) shapes['p'] = shape shape = rectangle(0,line,0,height) w = 2*height/3 shape = add(shape,circle(width-w/2,height-w/2,w/2)) shape = add(shape,rectangle(0,width-w/2,height-w,height)) shape = subtract(shape,circle(width-w/2,height-w/2,w/2-line)) shape = subtract(shape,rectangle(line,width-w/2,height-w+line,height-line)) leg = triangle(line,0,line,height,width,0) leg = subtract(leg,triangle(line,-2.0*line,line,height-2.0*line,width,-2.0*line)) leg = subtract(leg,rectangle(0,width,height/3,height)) shape = add(shape,leg) shapes['R'] = shape shape = circle(width,0,width) shape = subtract(shape,circle(width,0,width-line)) shape = subtract(shape,rectangle(.8*width,2*width,-height,height)) shape = subtract(shape,rectangle(0,2*width,-height,0)) shape = add(shape,rectangle(0,line,0,width)) shapes['r'] = shape shape = rectangle(width/2-line/2,width/2+line/2,0,height) shape = add(shape,rectangle(0,width,height-line,height)) shapes['T'] = shape shape = circle(0,3*width/8,3*width/8) shape = subtract(shape,circle(0,3*width/8,3*width/8-line)) shape = subtract(shape,rectangle(-width,width,3*width/8,height)) shape = subtract(shape,rectangle(0,width,-height,height)) shape = move(shape,width/2-line/2+3*width/8,0) shape = add(shape,rectangle(width/2-line/2,width/2+line/2,width/4,3*height/4)) shape = add(shape,rectangle(width/5,4*width/5,height/2-line/2,height/2+line/2)) shapes['t'] = shape shape = circle(width/2,width/2,width/2) shape = subtract(shape,circle(width/2,width/2,width/2-line)) shape = subtract(shape,rectangle(0,width,width/2,height)) shape = add(shape,rectangle(0,line,width/2,2*height/3)) shape = add(shape,rectangle(width-line,width,0,2*height/3)) shapes['u'] = shape shape = triangle(0,height,width,height,width/2,0) shape = subtract(shape,triangle(0,height+3*line,width,height+3*line,width/2,3*line)) shapes['V'] = shape shape = rectangle(0,width,0,height) shape = subtract(shape,triangle(0,0,0,height,width/2-.7*line,height/2)) shape = subtract(shape,triangle(width,0,width/2+.7*line,height/2,width,height)) shape = subtract(shape,triangle(line,height,width-line,height,width/2,height/2+.7*line)) shape = subtract(shape,triangle(line,0,width/2,height/2-.7*line,width-line,0)) shapes['X'] = shape shape = circle(width/2,width/2,width/2) shape = subtract(shape,circle(width/2,width/2,width/2-line)) shape = scale_y(shape,0,height/width) shapes['0'] = shape shape = rectangle(width/2-line/2,width/2+line/2,0,height) w = width/2-line/2 cutout = circle(0,height,w) shape = add(shape,rectangle(0,width/2,height-w-line,height)) shape = subtract(shape,cutout) shape = move(shape,(width/2+line/2)/4,0) shapes['1'] = shape shape = circle(width/2,height-width/2,width/2) shape = subtract(shape,circle(width/2,height-width/2,width/2-line)) shape = subtract(shape,rectangle(0,width/2,0,height-width/2)) shape = add(shape,rectangle(0,width,0,height-width/2)) shape = subtract(shape,triangle(0,line,0,height-width/2,width-line,height-width/2)) shape = subtract(shape,triangle(1.5*line,line,width,height-width/2-.5*line,width,line)) shapes['2'] = shape shape = circle(width/2,width/2,width/2) shape = subtract(shape,circle(width/2,width/2,width/2-line)) shape = scale_y(shape,0,(height/2+line/2)/width) shape = add(shape,move(shape,0,height/2-line/2)) shape = subtract(shape,rectangle(0,width/2,height/4,3*height/4)) shapes['3'] = shape shape = rectangle(width-line,width,0,height) shape = add(shape,triangle(0,height/3,width-line,height,width-line,height/3)) shape = subtract(shape,triangle(1.75*line,height/3+line,width-line,height-1.5*line,width-line,height/3+line)) shapes['4'] = shape shape = circle(width/2,width/2,width/2) shape = subtract(shape,circle(width/2,width/2,width/2-line)) shape = subtract(shape,rectangle(0,width/2,width/2,width)) shape = add(shape,rectangle(0,width/2,width-line,width)) shape = add(shape,rectangle(0,line,width-line,height)) shape = add(shape,rectangle(0,width,height-line,height)) shapes['5'] = shape shape = circle(width/2,height-width/2,width/2) shape = subtract(shape,circle(width/2,height-width/2,width/2-line)) shape = subtract(shape,rectangle(0,width,0,height-width/2)) shape = subtract(shape,triangle(width,height,width,height/2,width/2,height/2)) shape = add(shape,circle(width/2,width/2,width/2)) shape = subtract(shape,circle(width/2,width/2,width/2-line)) shape = add(shape,rectangle(0,line,width/2,height-width/2)) shapes['6'] = shape shape = rectangle(0,width,0,height) shape = subtract(shape,triangle(0,0,0,height-line,width-line,height-line)) shape = subtract(shape,triangle(line,0,width,height-line,width,0)) shapes['7'] = shape shape = circle(width/2,width/2,width/2) shape = subtract(shape,circle(width/2,width/2,width/2-line)) shape = scale_y(shape,0,(height/2+line/2)/width) shape = add(shape,move(shape,0,height/2-line/2)) shapes['8'] = shape shape = circle(width/2,width/2,width/2) shape = subtract(shape,circle(width/2,width/2,width/2-line)) shape = subtract(shape,rectangle(0,width,width/2,height)) shape = subtract(shape,triangle(0,0,0,height/2,width/2,height/2)) shape = add(shape,circle(width/2,height-width/2,width/2)) shape = subtract(shape,circle(width/2,height-width/2,width/2-line)) shape = add(shape,rectangle(width-line,width,width/2,height-width/2)) shapes['9'] = shape shapes[' '] = False shape = circle(width/2,line,line) shapes['.'] = shape # # to be done # shape = rectangle(0,width,0,height) shapes['E'] = shape shapes['e'] = shape shapes['f'] = shape shapes['g'] = shape shapes['H'] = shape shapes['h'] = shape shapes['i'] = shape shapes['j'] = shape shapes['l'] = shape shapes['M'] = shape shapes['m'] = shape shapes['n'] = shape shapes['o'] = shape shapes['Q'] = shape shapes['q'] = shape shapes['S'] = shape shapes['s'] = shape shapes['U'] = shape shapes['v'] = shape shapes['W'] = shape shapes['w'] = shape shapes['x'] = shape shapes['Y'] = shape shapes['y'] = shape shapes['Z'] = shape shapes['z'] = shape shapes['~'] = shape shapes['!'] = shape shapes['@'] = shape shapes['#'] = shape shapes['$'] = shape shapes['%'] = shape shapes['^'] = shape shapes['&'] = shape shapes['&'] = shape shapes['('] = shape shapes[')'] = shape shapes['-'] = shape shapes['_'] = shape shapes['='] = shape shapes['+'] = shape shapes['['] = shape shapes['{'] = shape shapes[']'] = shape shapes['}'] = shape shapes[';'] = shape shapes[':'] = shape shapes["'"] = shape shapes['"'] = shape shapes[','] = shape shapes['<'] = shape shapes['>'] = shape shapes['/'] = shape shapes['?'] = shape shapes['\n'] = shape # # add a line to text shape # def addline(lineshape): # # LR align # if (align[0] == 'C'): lineshape = move(lineshape,-self.width/2.0,0) elif (align[0] == 'R'): lineshape = move(lineshape,-self.width,0) # # add # self.shape = add(self.shape,lineshape) # # loop over chars # dx = 0 dy = -height self.width = -space self.height = height lineshape = False self.shape = False for chr in text: if (chr == '\n'): addline(lineshape) dx = 0 dy -= 1.5*self.height self.width = -space self.height += 1.5*self.height lineshape = False else: lineshape = add(lineshape,move(shapes[chr],dx,dy)) self.width += space + width dx += width + space addline(lineshape) # # UD align # if (align[1] == 'C'): self.shape = move(self.shape,0,self.height/2.0) elif (align[1] == 'B'): self.shape = move(self.shape,0,self.height) # # rotate # if (angle != 0): self.shape = rotate(self.shape,angle) # # translate # self.shape = move(self.shape,x,y) # # color # self.shape = '('+str(color)+'*(('+self.shape+')!=0))' # # define part # origin_x = 0 origin_y = 0 height = 0.25 wall = 0.10 OD = 1.0 O_r = OD / 2 OD_O = cylinder(origin_x, origin_y, -height/2, height/2, O_r + wall/2) OD_I = cylinder(origin_x, origin_y, -height/2, height/2, O_r - wall/2) OD = subtract(OD_O,OD_I) ID = 0.5 I_r = ID / 2 ID_O = cylinder(origin_x, origin_y, -height/2, height/2, I_r + wall/2) ID_I = cylinder(origin_x, origin_y, -height/2, height/2, I_r - wall/2) ID = subtract(ID_O,ID_I) cage = add(OD,ID) # race radius R_r = ((O_r - I_r) / 2) + I_r # bearing radius bearing_diameter = .40 #b_r = bearing_diameter/2 b_r = bearing_diameter/4. race_O = cylinder(origin_x, origin_y, -(height/2.)/3., (height/2.)/3., R_r+b_r) race_I = cylinder(origin_x, origin_y, -(height/2.)/3., (height/2.)/3., R_r-b_r) race = subtract(race_O,race_I) frame = add(OD,ID) outer_part = subtract(frame,race) # bearings # num balls Nb = 6. ball1 = sphere(cos(2*pi/Nb)*R_r, sin(2*pi/Nb)*R_r, 0, b_r) ball2 = sphere(cos(2*2*pi/Nb)*R_r, sin(2*2*pi/Nb)*R_r, 0, b_r) ball3 = sphere(cos(3*2*pi/Nb)*R_r, sin(3*2*pi/Nb)*R_r, 0, b_r) ball4 = sphere(cos(4*2*pi/Nb)*R_r, sin(4*2*pi/Nb)*R_r, 0, b_r) ball5 = sphere(cos(5*2*pi/Nb)*R_r, sin(5*2*pi/Nb)*R_r, 0, b_r) ball6 = sphere(cos(6*2*pi/Nb)*R_r, sin(6*2*pi/Nb)*R_r, 0, b_r) balls = add(ball1,ball2) balls = add(balls,ball3) balls = add(balls,ball4) balls = add(balls,ball5) balls = add(balls,ball6) bearing = add(outer_part,balls) # view cutout bearing = subtract(bearing,cube(0,2,-2,0,-2,2)) # # define limits and parameters # d = .7 cad.xmin = -d cad.xmax = d cad.ymin = -d cad.ymax = d cad.zmin = -d/3. cad.zmax = d/3. cad.rx = 30 cad.rz = 45 cad.mm_per_unit = 25.4 # use inch units # # assign part to cad.function # cad.function = bearing