(dp1 S'shapes' p2 (lp3 sS'text' p4 V#\u000a# hello.stepper.bipolar.44.cad\u000a# \u000a# bipolar stepper hello-world\u000a#\u000a# Neil Gershenfeld\u000a# 11/17/12\u000a#\u000a# (c) Massachusetts Institute of Technology 2012\u000a# Permission granted for experimental and personal use;\u000a# license for commercial sale available from MIT.\u000a#\u000a\u000a#\u000a# uncomment for desired output:\u000a#\u000a\u000aoutput = "traces, labels, and exterior"\u000a#output = "traces and exterior"\u000a#output = "interior"\u000a#output = "exterior"\u000a#output = "traces"\u000a#output = "holes"\u000a#output = "solder mask"\u000a\u000a#\u000a# define shapes and transformations\u000a#\u000a\u000a# color(color,part)\u000a# circle(x0, y0, r)\u000a# cylinder(x0, y0, z0, z1, r)\u000a# cone(x0, y0, z0, z1, r0)\u000a# sphere(x0, y0, z0, r)\u000a# torus(x0, y0, z0, r0, r1)\u000a# rectangle(x0, x1, y0, y1)\u000a# cube(x0, x1, y0, y1, z0, z1)\u000a# right_triangle(x0, y0, h)\u000a# triangle(x0, y0, x1, y1, x2, y2) (points in clockwise order)\u000a# pyramid(x0, x1, y0, y1, z0, z1)\u000a# function(Z_of_XY)\u000a# functions(upper_Z_of_XY,lower_Z_of_XY)\u000a# add(part1, part2)\u000a# subtract(part1, part2)\u000a# intersect(part1, part2)\u000a# move(part,dx,dy)\u000a# translate(part,dx,dy,dz)\u000a# rotate(part, angle)\u000a# rotate_x(part, angle)\u000a# rotate_y(part, angle)\u000a# rotate_z(part, angle)\u000a# rotate_90(part)\u000a# rotate_180(part)\u000a# rotate_270(part)\u000a# reflect_x(part,x0)\u000a# reflect_y(part,y0)\u000a# reflect_z(part,z0)\u000a# reflect_xy(part)\u000a# reflect_xz(part)\u000a# reflect_yz(part)\u000a# scale_x(part, x0, sx)\u000a# scale_y(part, y0, sy)\u000a# scale_z(part, z0, sz)\u000a# scale_xy(part, x0, y0, sxy)\u000a# scale_xyz(part, x0, y0, z0, sxyz)\u000a# coscale_x_y(part, x0, y0, y1, angle0, angle1, amplitude, offset)\u000a# coscale_x_z(part, x0, z0, z1, angle0, angle1, amplitude, offset)\u000a# coscale_xy_z(part, x0, y0, z0, z1, angle0, angle1, amplitude, offset)\u000a# taper_x_y(part, x0, y0, y1, s0, s1)\u000a# taper_x_z(part, x0, z0, z1, s0, s1)\u000a# taper_xy_z(part, x0, y0, z0, z1, s0, s1)\u000a# shear_x_y(part, y0, y1, dx0, dx1)\u000a# shear_x_z(part, z0, z1, dx0, dx1)\u000a\u000aTrue = "1"\u000aFalse = "0"\u000a\u000adef color(color, part):\u000a part = '('+str(color)+'*(('+part+')!=0))'\u000a return part\u000a\u000aRed = (225 << 0)\u000aGreen = (225 << 8)\u000aBlue = (225 << 16)\u000aGray = (128 << 16) + (128 << 8) + (128 << 0)\u000aWhite = (255 << 16) + (255 << 8) + (255 << 0)\u000aTeal = (255 << 16) + (255 << 8)\u000aPink = (255 << 16) + (255 << 0)\u000aYellow = (255 << 8) + (255 << 0)\u000aBrown = (45 << 16) + (82 << 8) + (145 << 0)\u000aNavy = (128 << 16) + (0 << 8) + (0 << 0)\u000aTan = (60 << 16) + (90 << 8) + (125 << 0)\u000a\u000adef circle(x0, y0, r):\u000a part = "(((X-(x0))*(X-(x0)) + (Y-(y0))*(Y-(y0))) <= (r*r))"\u000a part = replace(part,'x0',str(x0))\u000a part = replace(part,'y0',str(y0))\u000a part = replace(part,'r',str(r))\u000a return part\u000a\u000adef cylinder(x0, y0, z0, z1, r):\u000a part = "(((X-(x0))*(X-(x0)) + (Y-(y0))*(Y-(y0)) <= (r*r)) & (Z >= (z0)) & (Z <= (z1)))"\u000a part = replace(part,'x0',str(x0))\u000a part = replace(part,'y0',str(y0))\u000a part = replace(part,'z0',str(z0))\u000a part = replace(part,'z1',str(z1))\u000a part = replace(part,'r',str(r))\u000a return part\u000a\u000adef cone(x0, y0, z0, z1, r0):\u000a part = cylinder(x0, y0, z0, z1, r0)\u000a part = taper_xy_z(part, x0, y0, z0, z1, 1.0, 0.0)\u000a return part\u000a\u000adef sphere(x0, y0, z0, r):\u000a part = "(((X-(x0))*(X-(x0)) + (Y-(y0))*(Y-(y0)) + (Z-(z0))*(Z-(z0))) <= (r*r))"\u000a part = replace(part,'x0',str(x0))\u000a part = replace(part,'y0',str(y0))\u000a part = replace(part,'z0',str(z0))\u000a part = replace(part,'r',str(r))\u000a return part\u000a\u000adef torus(x0, y0, z0, r0, r1):\u000a 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))"\u000a part = replace(part,'x0',str(x0))\u000a part = replace(part,'y0',str(y0))\u000a part = replace(part,'z0',str(z0))\u000a part = replace(part,'r0',str(r0))\u000a part = replace(part,'r1',str(r1))\u000a return part\u000a\u000adef rectangle(x0, x1, y0, y1):\u000a part = "((X >= (x0)) & (X <= (x1)) & (Y >= (y0)) & (Y <= (y1)))"\u000a part = replace(part,'x0',str(x0))\u000a part = replace(part,'x1',str(x1))\u000a part = replace(part,'y0',str(y0))\u000a part = replace(part,'y1',str(y1))\u000a return part\u000a\u000adef cube(x0, x1, y0, y1, z0, z1):\u000a part = "((X >= (x0)) & (X <= (x1)) & (Y >= (y0)) & (Y <= (y1)) & (Z >= (z0)) & (Z <= (z1)))"\u000a part = replace(part,'x0',str(x0))\u000a part = replace(part,'x1',str(x1))\u000a part = replace(part,'y0',str(y0))\u000a part = replace(part,'y1',str(y1))\u000a part = replace(part,'z0',str(z0))\u000a part = replace(part,'z1',str(z1))\u000a return part\u000a\u000adef right_triangle(x0, y0, l):\u000a part = "((X > x0) & (X < x0 + l - (Y-y0)) & (Y > y0))"\u000a part = replace(part,'x0',str(x0))\u000a part = replace(part,'y0',str(y0))\u000a part = replace(part,'l',str(l))\u000a return part\u000a\u000adef triangle(x0, y0, x1, y1, x2, y2): # points in clockwise order\u000a 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))"\u000a part = replace(part,'x0',str(x0))\u000a part = replace(part,'y0',str(y0))\u000a part = replace(part,'x1',str(x1))\u000a part = replace(part,'y1',str(y1))\u000a part = replace(part,'x2',str(x2))\u000a part = replace(part,'y2',str(y2))\u000a return part\u000a\u000adef pyramid(x0, x1, y0, y1, z0, z1):\u000a part = cube(x0, x1, y0, y1, z0, z1)\u000a part = taper_xy_z(part, (x0+x1)/2., (y0+y1)/2., z0, z1, 1.0, 0.0)\u000a return part\u000a\u000adef function(Z_of_XY):\u000a part = '(Z <= '+Z_of_XY+')'\u000a return part\u000a\u000adef functions(upper_Z_of_XY,lower_Z_of_XY):\u000a part = '(Z <= '+upper_Z_of_XY+') & (Z >= '+lower_Z_of_XY+')'\u000a return part\u000a\u000adef add(part1, part2):\u000a part = "part1 | part2"\u000a part = replace(part,'part1',part1)\u000a part = replace(part,'part2',part2)\u000a return part\u000a\u000adef subtract(part1, part2):\u000a part = "(part1) & ~(part2)"\u000a part = replace(part,'part1',part1)\u000a part = replace(part,'part2',part2)\u000a return part\u000a\u000adef intersect(part1, part2):\u000a part = "(part1) & (part2)"\u000a part = replace(part,'part1',part1)\u000a part = replace(part,'part2',part2)\u000a return part\u000a\u000adef move(part,dx,dy):\u000a part = replace(part,'X','(X-('+str(dx)+'))')\u000a part = replace(part,'Y','(Y-('+str(dy)+'))')\u000a return part \u000a\u000adef translate(part,dx,dy,dz):\u000a part = replace(part,'X','(X-('+str(dx)+'))')\u000a part = replace(part,'Y','(Y-('+str(dy)+'))')\u000a part = replace(part,'Z','(Z-('+str(dz)+'))')\u000a return part \u000a\u000adef rotate(part, angle):\u000a angle = angle*pi/180\u000a part = replace(part,'X','(cos(angle)*X+sin(angle)*y)')\u000a part = replace(part,'Y','(-sin(angle)*X+cos(angle)*y)')\u000a part = replace(part,'y','Y')\u000a part = replace(part,'angle',str(angle))\u000a return part\u000a\u000adef rotate_x(part, angle):\u000a angle = angle*pi/180\u000a part = replace(part,'Y','(cos(angle)*Y+sin(angle)*z)')\u000a part = replace(part,'Z','(-sin(angle)*Y+cos(angle)*z)')\u000a part = replace(part,'z','Z')\u000a part = replace(part,'angle',str(angle))\u000a return part\u000a\u000adef rotate_y(part, angle):\u000a angle = angle*pi/180\u000a part = replace(part,'X','(cos(angle)*X+sin(angle)*z)')\u000a part = replace(part,'Z','(-sin(angle)*X+cos(angle)*z)')\u000a part = replace(part,'z','Z')\u000a part = replace(part,'angle',str(angle))\u000a return part\u000a\u000adef rotate_z(part, angle):\u000a angle = angle*pi/180\u000a part = replace(part,'X','(cos(angle)*X+sin(angle)*y)')\u000a part = replace(part,'Y','(-sin(angle)*X+cos(angle)*y)')\u000a part = replace(part,'y','Y')\u000a part = replace(part,'angle',str(angle))\u000a return part\u000a\u000adef rotate_90(part):\u000a part = reflect_y(part,0)\u000a part = reflect_xy(part)\u000a return part\u000a\u000adef rotate_180(part):\u000a part = rotate_90(part)\u000a part = rotate_90(part)\u000a return part\u000a\u000adef rotate_270(part):\u000a part = rotate_90(part)\u000a part = rotate_90(part)\u000a part = rotate_90(part)\u000a return part\u000a\u000adef reflect_x(part,x0):\u000a part = replace(part,'X','(x0-X)')\u000a part = replace(part,'x0',str(x0))\u000a return part\u000a\u000adef reflect_y(part,y0):\u000a part = replace(part,'Y','(y0-Y)')\u000a part = replace(part,'y0',str(y0))\u000a return part\u000a\u000adef reflect_z(part,z0):\u000a part = replace(part,'Z','(z0-Z)')\u000a part = replace(part,'z0',str(z0))\u000a return part\u000a\u000adef reflect_xy(part):\u000a part = replace(part,'X','temp')\u000a part = replace(part,'Y','X')\u000a part = replace(part,'temp','Y')\u000a return part\u000a\u000adef reflect_xz(part):\u000a part = replace(part,'X','temp')\u000a part = replace(part,'Z','X')\u000a part = replace(part,'temp','Z')\u000a return part\u000a\u000adef reflect_yz(part):\u000a part = replace(part,'Y','temp')\u000a part = replace(part,'Z','Y')\u000a part = replace(part,'temp','Z')\u000a return part\u000a\u000adef scale_x(part, x0, sx):\u000a part = replace(part,'X','((x0) + (X-(x0))/(sx))')\u000a part = replace(part,'x0',str(x0))\u000a part = replace(part,'sx',str(sx))\u000a return part\u000a\u000adef scale_y(part, y0, sy):\u000a part = replace(part,'Y','((y0) + (Y-(y0))/(sy))')\u000a part = replace(part,'y0',str(y0))\u000a part = replace(part,'sy',str(sy))\u000a return part\u000a\u000adef scale_z(part, z0, sz):\u000a part = replace(part,'Z','((z0) + (Z-(z0))/(sz))')\u000a part = replace(part,'z0',str(z0))\u000a part = replace(part,'sz',str(sz))\u000a return part\u000a\u000adef scale_xy(part, x0, y0, sxy):\u000a part = replace(part,'X','((x0) + (X-(x0))/(sxy))')\u000a part = replace(part,'Y','((y0) + (Y-(y0))/(sxy))')\u000a part = replace(part,'x0',str(x0))\u000a part = replace(part,'y0',str(y0))\u000a part = replace(part,'sxy',str(sxy))\u000a return part\u000a\u000adef scale_xyz(part, x0, y0, z0, sxyz):\u000a part = replace(part,'X','((x0) + (X-(x0))/(sxyz))')\u000a part = replace(part,'Y','((y0) + (Y-(y0))/(sxyz))')\u000a part = replace(part,'Z','((z0) + (Z-(z0))/(sxyz))')\u000a part = replace(part,'x0',str(x0))\u000a part = replace(part,'y0',str(y0))\u000a part = replace(part,'z0',str(z0))\u000a part = replace(part,'sxyz',str(sxyz))\u000a return part\u000a\u000adef coscale_x_y(part, x0, y0, y1, angle0, angle1, amplitude, offset):\u000a phase0 = pi*angle0/180.\u000a phase1 = pi*angle1/180.\u000a part = replace(part,'X','((x0) + (X-(x0))/((offset) + (amplitude)*cos((phase0) + ((phase1)-(phase0))*(Y-(y0))/((y1)-(y0)))))')\u000a part = replace(part,'x0',str(x0))\u000a part = replace(part,'y0',str(y0))\u000a part = replace(part,'y1',str(y1))\u000a part = replace(part,'phase0',str(phase0))\u000a part = replace(part,'phase1',str(phase1))\u000a part = replace(part,'amplitude',str(amplitude))\u000a part = replace(part,'offset',str(offset))\u000a return part\u000a\u000adef coscale_x_z(part, x0, z0, z1, angle0, angle1, amplitude, offset):\u000a phase0 = pi*angle0/180.\u000a phase1 = pi*angle1/180.\u000a part = replace(part,'X','((x0) + (X-(x0))/((offset) + (amplitude)*cos((phase0) + ((phase1)-(phase0))*(Z-(z0))/((z1)-(z0)))))')\u000a part = replace(part,'x0',str(x0))\u000a part = replace(part,'z0',str(z0))\u000a part = replace(part,'z1',str(z1))\u000a part = replace(part,'phase0',str(phase0))\u000a part = replace(part,'phase1',str(phase1))\u000a part = replace(part,'amplitude',str(amplitude))\u000a part = replace(part,'offset',str(offset))\u000a return part\u000a\u000adef coscale_xy_z(part, x0, y0, z0, z1, angle0, angle1, amplitude, offset):\u000a phase0 = pi*angle0/180.\u000a phase1 = pi*angle1/180.\u000a part = replace(part,'X','((x0) + (X-(x0))/((offset) + (amplitude)*cos((phase0) + ((phase1)-(phase0))*(Z-(z0))/((z1)-(z0)))))')\u000a part = replace(part,'Y','((y0) + (Y-(y0))/((offset) + (amplitude)*cos((phase0) + ((phase1)-(phase0))*(Z-(z0))/((z1)-(z0)))))')\u000a part = replace(part,'x0',str(x0))\u000a part = replace(part,'y0',str(y0))\u000a part = replace(part,'z0',str(z0))\u000a part = replace(part,'z1',str(z1))\u000a part = replace(part,'phase0',str(phase0))\u000a part = replace(part,'phase1',str(phase1))\u000a part = replace(part,'amplitude',str(amplitude))\u000a part = replace(part,'offset',str(offset))\u000a return part\u000a\u000adef taper_x_y(part, x0, y0, y1, s0, s1):\u000a part = replace(part,'X','((x0) + (X-(x0))*((y1)-(y0))/((s1)*(Y-(y0)) + (s0)*((y1)-Y)))')\u000a part = replace(part,'x0',str(x0))\u000a part = replace(part,'y0',str(y0))\u000a part = replace(part,'y1',str(y1))\u000a part = replace(part,'s0',str(s0))\u000a part = replace(part,'s1',str(s1))\u000a return part\u000a\u000adef taper_x_z(part, x0, z0, z1, s0, s1):\u000a part = replace(part,'X','((x0) + (X-(x0))*((z1)-(z0))/((s1)*(Z-(z0)) + (s0)*((z1)-Z)))')\u000a part = replace(part,'x0',str(x0))\u000a part = replace(part,'z0',str(z0))\u000a part = replace(part,'z1',str(z1))\u000a part = replace(part,'s0',str(s0))\u000a part = replace(part,'s1',str(s1))\u000a return part\u000a\u000adef taper_xy_z(part, x0, y0, z0, z1, s0, s1):\u000a part = replace(part,'X','((x0) + (X-(x0))*((z1)-(z0))/((s1)*(Z-(z0)) + (s0)*((z1)-Z)))')\u000a part = replace(part,'Y','((y0) + (Y-(y0))*((z1)-(z0))/((s1)*(Z-(z0)) + (s0)*((z1)-Z)))')\u000a part = replace(part,'x0',str(x0))\u000a part = replace(part,'y0',str(y0))\u000a part = replace(part,'z0',str(z0))\u000a part = replace(part,'z1',str(z1))\u000a part = replace(part,'s0',str(s0))\u000a part = replace(part,'s1',str(s1))\u000a return part\u000a\u000adef shear_x_y(part, y0, y1, dx0, dx1):\u000a part = replace(part,'X','(X - (dx0) - ((dx1)-(dx0))*(Y-(y0))/((y1)-(y0)))')\u000a part = replace(part,'y0',str(y0))\u000a part = replace(part,'y1',str(y1))\u000a part = replace(part,'dx0',str(dx0))\u000a part = replace(part,'dx1',str(dx1))\u000a return part\u000a\u000adef shear_x_z(part, z0, z1, dx0, dx1):\u000a part = replace(part,'X','(X - (dx0) - ((dx1)-(dx0))*(Z-(z0))/((z1)-(z0)))')\u000a part = replace(part,'z0',str(z0))\u000a part = replace(part,'z1',str(z1))\u000a part = replace(part,'dx0',str(dx0))\u000a part = replace(part,'dx1',str(dx1))\u000a return part\u000a\u000adef coshear_x_z(part, z0, z1, angle0, angle1, amplitude, offset):\u000a phase0 = pi*angle0/180.\u000a phase1 = pi*angle1/180.\u000a part = replace(part,'X','(X - (offset) - (amplitude)*cos((phase0) + ((phase1)-(phase0))*(Z-(z0))/((z1)-(z0))))')\u000a part = replace(part,'z0',str(z0))\u000a part = replace(part,'z1',str(z1))\u000a part = replace(part,'phase0',str(phase0))\u000a part = replace(part,'phase1',str(phase1))\u000a part = replace(part,'amplitude',str(amplitude))\u000a part = replace(part,'offset',str(offset))\u000a return part\u000a\u000a#\u000a# text classes and definitions\u000a#\u000a\u000aclass text:\u000a #\u000a # text class\u000a #\u000a def __init__(self,text,x,y,z,line='',height='',width='',space='',align='CC',color=White,angle=0):\u000a #\u000a # parameters\u000a #\u000a if (line == ''):\u000a line = 1\u000a if (height == ''):\u000a height = 6*line\u000a if (width == ''):\u000a width = 4*line\u000a if (space == ''):\u000a space = line/2.0\u000a self.width = 0\u000a self.height = 0\u000a self.text = text\u000a #\u000a # construct shape dictionary\u000a #\u000a shapes = {}\u000a shape = triangle(0,0,width/2.0,height,width,0)\u000a cutout = triangle(0,-2.5*line,width/2.0,height-2.5*line,width,-2.5*line)\u000a cutout = subtract(cutout,rectangle(0,width,height/4-line/2,height/4+line/2))\u000a shape = subtract(shape,cutout)\u000a shapes['A'] = shape\u000a shape = circle(width/2,width/2,width/2)\u000a shape = subtract(shape,circle(width/2,width/2,width/4))\u000a shape = add(shape,rectangle(width-line,width,0,height/3))\u000a shapes['a'] = shape\u000a shape = rectangle(0,width-height/4,0,height)\u000a shape = add(shape,circle(width-height/4,height/4,height/4))\u000a shape = add(shape,circle(width-height/4,3*height/4,height/4))\u000a w = height/2-1.5*line\u000a shape = subtract(shape,rectangle(line,line+w/1.5,height/2+line/2,height-line))\u000a shape = subtract(shape,circle(line+w/1.5,height/2+line/2+w/2,w/2))\u000a shape = subtract(shape,rectangle(line,line+w/1.5,line,height/2-line/2))\u000a shape = subtract(shape,circle(line+w/1.5,height/2-line/2-w/2,w/2))\u000a shapes['B'] = shape\u000a shape = circle(width/2,width/2,width/2)\u000a shape = subtract(shape,circle(width/2,width/2,width/4))\u000a shape = add(shape,rectangle(0,line,0,height))\u000a shapes['b'] = shape\u000a shape = circle(width/2,width/2,width/2)\u000a shape = add(shape,circle(width/2,height-width/2,width/2))\u000a shape = add(shape,rectangle(0,width,line+w/2,height-line-w/2))\u000a w = width-2*line\u000a shape = subtract(shape,circle(width/2,line+w/2,w/2))\u000a shape = subtract(shape,circle(width/2,height-line-w/2,w/2))\u000a shape = subtract(shape,rectangle(line,width,line+w/2,height-line-w/2))\u000a shapes['C'] = shape\u000a shape = circle(width/2,width/2,width/2)\u000a shape = subtract(shape,circle(width/2,width/2,width/4))\u000a shape = subtract(shape,rectangle(width/2,width,width/2-line/1.5,width/2+line/1.5))\u000a shapes['c'] = shape\u000a shape = circle(line,width-line,width-line)\u000a shape = subtract(shape,circle(line,width-line,width-2*line))\u000a shape = subtract(shape,rectangle(-width,line,0,height))\u000a shape = scale_y(shape,0,height/(2*(width-line)))\u000a shape = add(shape,rectangle(0,line,0,height))\u000a shapes['D'] = shape\u000a shape = rectangle(width-line,width,0,height)\u000a shape = add(shape,circle(width/2,width/2,width/2))\u000a shape = subtract(shape,circle(width/2,width/2,width/2-line))\u000a shapes['d'] = shape\u000a shape = rectangle(0,line,0,height)\u000a shape = add(shape,rectangle(0,width,height-line,height))\u000a shape = add(shape,rectangle(0,2*width/3,height/2-line/2,height/2+line/2))\u000a shape = add(shape,rectangle(0,width,0,line)) \u000a shapes['E'] = shape\u000a shape = circle(width/2,width/2,width/2)\u000a shape = subtract(shape,circle(width/2,width/2,width/2-line))\u000a shape = subtract(shape,triangle(width,0,width/2,width/2-line/2,width,width/2-line/2))\u000a shape = add(shape,rectangle(0,width,width/2-line/2,width/2+line/2))\u000a shapes['e'] = shape\u000a shape = rectangle(0,line,0,height)\u000a shape = add(shape,rectangle(0,width,height-line,height))\u000a shape = add(shape,rectangle(0,2*width/3,height/2-line/2,height/2+line/2))\u000a shapes['F'] = shape\u000a shape = circle(width-line/2,height-width/2,width/2)\u000a shape = subtract(shape,circle(width-line/2,height-width/2,width/2-line))\u000a shape = subtract(shape,rectangle(0,width-line/2,0,height-width/2))\u000a shape = subtract(shape,rectangle(width-line/2,2*width,0,height))\u000a shape = add(shape,rectangle(width/2-line/2,width/2+line/2,0,height-width/2))\u000a shape = add(shape,rectangle(width/5,4*width/5,height/2-line/2,height/2+line/2))\u000a shapes['f'] = shape\u000a shape = circle(width/2,width/2,width/2)\u000a shape = add(shape,circle(width/2,height-width/2,width/2))\u000a shape = add(shape,rectangle(0,width,line+w/2,height-line-w/2))\u000a w = width-2*line\u000a shape = subtract(shape,circle(width/2,line+w/2,w/2))\u000a shape = subtract(shape,circle(width/2,height-line-w/2,w/2))\u000a shape = subtract(shape,rectangle(line,width,line+w/2,height-line-w/2))\u000a shape = add(shape,rectangle(width/2,width,line+w/2,2*line+w/2))\u000a shapes['G'] = shape\u000a shape = circle(width/2,width/2,width/2)\u000a shape = subtract(shape,circle(width/2,width/2,width/2-line))\u000a w = height/3-width/2\u000a shape = add(shape,rectangle(width-line,width,w,width))\u000a shape = add(shape,subtract(subtract(circle(width/2,w,width/2),circle(width/2,w,width/2-line)),rectangle(0,width,w,height)))\u000a shapes['g'] = shape\u000a shape = rectangle(0,line,0,height)\u000a shape = add(shape,rectangle(width-line,width,0,height))\u000a shape = add(shape,rectangle(0,width,height/2-line/2,height/2+line/2))\u000a shapes['H'] = shape\u000a w = width/2\u000a shape = circle(width/2,w,width/2)\u000a shape = subtract(shape,circle(width/2,w,width/2-line))\u000a shape = subtract(shape,rectangle(0,width,0,w))\u000a shape = add(shape,rectangle(0,line,0,height))\u000a shape = add(shape,rectangle(width-line,width,0,w))\u000a shapes['h'] = shape\u000a shape = rectangle(width/2-line/2,width/2+line/2,0,height)\u000a shape = add(shape,rectangle(width/5,4*width/5,0,line))\u000a shape = add(shape,rectangle(width/5,4*width/5,height-line,height))\u000a shapes['I'] = shape\u000a shape = rectangle(width/2-line/2,width/2+line/2,0,height/2)\u000a shape = add(shape,circle(width/2,3*height/4,.6*line))\u000a shapes['i'] = shape\u000a shape = circle(width/2,width/2,width/2)\u000a shape = subtract(shape,circle(width/2,width/2,width/2-line))\u000a shape = subtract(shape,rectangle(0,width,width/2,height))\u000a shape = add(shape,rectangle(width-line,width,width/2,height))\u000a shapes['J'] = shape\u000a w = height/3-width/2\u000a shape = rectangle(width/2-line/2,width/2+line/2,w,height/2)\u000a shape = add(shape,subtract(subtract(subtract(circle(width/4-line/2,w,width/2),circle(width/4-line/2,w,width/2-line)),rectangle(0,width,w,height)),rectangle(-width,width/4-line/2,-height/3,height)))\u000a shape = add(shape,circle(width/2,3*height/4,.6*line))\u000a shapes['j'] = shape\u000a shape = rectangle(0,width,0,height)\u000a shape = subtract(shape,triangle(line,height,width-1.1*line,height,line,height/2+.5*line))\u000a shape = subtract(shape,triangle(width,0,line+0.8*line,height/2,width,height))\u000a shape = subtract(shape,triangle(line,0,line,height/2-.5*line,width-1.1*line,0))\u000a shapes['K'] = shape\u000a shape = rectangle(0,width,0,height)\u000a shape = subtract(shape,rectangle(line,width,2*height/3,height))\u000a shape = subtract(shape,triangle(line,2*height/3,width-1.3*line,2*height/3,line,height/3+.5*line))\u000a shape = subtract(shape,triangle(width,0,line+0.8*line,height/3,width,2*height/3))\u000a shape = subtract(shape,triangle(line,0,line,height/3-0.5*line,width-1.3*line,0))\u000a shapes['k'] = shape\u000a shape = rectangle(0,line,0,height)\u000a shape = add(shape,rectangle(0,width,0,line))\u000a shapes['L'] = shape\u000a shape = rectangle(width/2-line/2,width/2+line/2,0,height)\u000a shapes['l'] = shape\u000a shape = rectangle(0,width,0,height)\u000a shape = subtract(shape,triangle(line,0,line,height-3*line,width/2-line/3,0))\u000a shape = subtract(shape,triangle(line,height,width-line,height,width/2,1.5*line))\u000a shape = subtract(shape,triangle(width/2+line/3,0,width-line,height-3*line,width-line,0))\u000a shapes['M'] = shape\u000a w = width/2\u000a l = 1.3*line\u000a shape = circle(width/2,w,width/2)\u000a shape = subtract(shape,circle(width/2,w,width/2-l))\u000a shape = subtract(shape,rectangle(0,width,0,w))\u000a shape = add(shape,rectangle(width-l,width,0,w))\u000a shape = add(shape,move(shape,width-l,0))\u000a shape = add(shape,rectangle(0,l,0,width))\u000a shape = scale_x(shape,0,width/(2*width-l))\u000a shapes['m'] = shape\u000a shape = rectangle(0,width,0,height)\u000a shape = subtract(shape,triangle(line,height+1.5*line,width-line,height+1.5*line,width-line,1.5*line))\u000a shape = subtract(shape,triangle(line,-1.5*line,line,height-1.5*line,width-line,-1.5*line))\u000a shapes['N'] = shape\u000a w = width/2\u000a shape = circle(width/2,w,width/2)\u000a shape = subtract(shape,circle(width/2,w,width/2-line))\u000a shape = subtract(shape,rectangle(0,width,0,w))\u000a shape = add(shape,rectangle(0,line,0,width))\u000a shape = add(shape,rectangle(width-line,width,0,w))\u000a shapes['n'] = shape\u000a shape = circle(width/2,width/2,width/2)\u000a shape = add(shape,circle(width/2,height-width/2,width/2))\u000a shape = add(shape,rectangle(0,width,line+w/2,height-line-w/2))\u000a w = width-2*line\u000a shape = subtract(shape,circle(width/2,line+w/2,w/2))\u000a shape = subtract(shape,circle(width/2,height-line-w/2,w/2))\u000a shape = subtract(shape,rectangle(line,width-line,line+w/2,height-line-w/2))\u000a shapes['O'] = shape\u000a shape = circle(width/2,width/2,width/2)\u000a shape = subtract(shape,circle(width/2,width/2,width/2-line))\u000a shapes['o'] = shape\u000a shape = rectangle(0,line,0,height)\u000a w = 2*height/3\u000a shape = add(shape,circle(width-w/2,height-w/2,w/2))\u000a shape = add(shape,rectangle(0,width-w/2,height-w,height))\u000a shape = subtract(shape,circle(width-w/2,height-w/2,w/2-line))\u000a shape = subtract(shape,rectangle(line,width-w/2,height-w+line,height-line))\u000a shapes['P'] = shape\u000a shape = circle(width/2,width/2,width/2)\u000a shape = subtract(shape,circle(width/2,width/2,width/4))\u000a shape = add(shape,rectangle(0,line,-height/3,width))\u000a shapes['p'] = shape\u000a shape = subtract(circle(width/2,width/2,width/2),circle(width/2,width/2,width/2-.9*line))\u000a shape = scale_y(shape,0,height/width)\u000a shape = add(shape,move(rotate(rectangle(-line/2,line/2,-width/4,width/4),30),3*width/4,width/4))\u000a shapes['Q'] = shape\u000a shape = circle(width/2,width/2,width/2)\u000a shape = subtract(shape,circle(width/2,width/2,width/2-line))\u000a shape = add(shape,rectangle(width-line,width,-height/3,width))\u000a shapes['q'] = shape\u000a shape = rectangle(0,line,0,height)\u000a w = 2*height/3\u000a shape = add(shape,circle(width-w/2,height-w/2,w/2))\u000a shape = add(shape,rectangle(0,width-w/2,height-w,height))\u000a shape = subtract(shape,circle(width-w/2,height-w/2,w/2-line))\u000a shape = subtract(shape,rectangle(line,width-w/2,height-w+line,height-line))\u000a leg = triangle(line,0,line,height,width,0)\u000a leg = subtract(leg,triangle(line,-2.0*line,line,height-2.0*line,width,-2.0*line))\u000a leg = subtract(leg,rectangle(0,width,height/3,height))\u000a shape = add(shape,leg)\u000a shapes['R'] = shape\u000a shape = circle(width,0,width)\u000a shape = subtract(shape,circle(width,0,width-line))\u000a shape = subtract(shape,rectangle(.8*width,2*width,-height,height))\u000a shape = subtract(shape,rectangle(0,2*width,-height,0))\u000a shape = add(shape,rectangle(0,line,0,width))\u000a shapes['r'] = shape\u000a shape = circle(width/2,width/2,width/2)\u000a shape = subtract(shape,circle(width/2,width/2,width/2-line))\u000a shape = subtract(shape,rectangle(0,width/2,width/2,width))\u000a shape = add(shape,move(reflect_y(reflect_x(shape,width),width),0,width-line))\u000a shape = scale_y(shape,0,height/(2*width-line))\u000a shapes['S'] = shape\u000a w = width/3\u000a shape = circle(w,w,w)\u000a shape = subtract(shape,circle(w,w,w-.9*line))\u000a shape = subtract(shape,rectangle(0,w,w,2*w))\u000a shape = add(shape,move(reflect_y(reflect_x(shape,2*w),2*w),0,2*w-.9*line))\u000a shape = scale_y(shape,0,(2*height/3)/(4*w-.9*line))\u000a shape = move(shape,(width/2)-w,0)\u000a shapes['s'] = shape\u000a shape = rectangle(width/2-line/2,width/2+line/2,0,height)\u000a shape = add(shape,rectangle(0,width,height-line,height))\u000a shapes['T'] = shape\u000a shape = circle(0,3*width/8,3*width/8)\u000a shape = subtract(shape,circle(0,3*width/8,3*width/8-line))\u000a shape = subtract(shape,rectangle(-width,width,3*width/8,height))\u000a shape = subtract(shape,rectangle(0,width,-height,height))\u000a shape = move(shape,width/2-line/2+3*width/8,0)\u000a shape = add(shape,rectangle(width/2-line/2,width/2+line/2,width/4,3*height/4))\u000a shape = add(shape,rectangle(width/5,4*width/5,height/2-line/2,height/2+line/2))\u000a shapes['t'] = shape\u000a shape = circle(width/2,width/2,width/2)\u000a shape = subtract(shape,circle(width/2,width/2,width/2-line))\u000a shape = subtract(shape,rectangle(0,width,width/2,height))\u000a shape = add(shape,rectangle(0,line,width/2,height))\u000a shape = add(shape,rectangle(width-line,width,width/2,height))\u000a shapes['U'] = shape\u000a shape = circle(width/2,width/2,width/2)\u000a shape = subtract(shape,circle(width/2,width/2,width/2-line))\u000a shape = subtract(shape,rectangle(0,width,width/2,height))\u000a shape = add(shape,rectangle(0,line,width/2,2*height/3))\u000a shape = add(shape,rectangle(width-line,width,0,2*height/3))\u000a shapes['u'] = shape\u000a shape = triangle(0,height,width,height,width/2,0)\u000a shape = subtract(shape,triangle(0,height+3*line,width,height+3*line,width/2,3*line))\u000a shapes['V'] = shape\u000a w = 2*height/3.0\u000a shape = triangle(0,w,width,w,width/2,0)\u000a shape = subtract(shape,triangle(0,w+2*line,width,w+2*line,width/2,2*line))\u000a shapes['v'] = shape\u000a shape = triangle(0,height,width,height,width/2,0)\u000a shape = add(shape,move(shape,.6*width,0))\u000a cutout = triangle(0,height+4*line,width,height+4*line,width/2,4*line)\u000a cutout = add(cutout,move(cutout,.6*width,0))\u000a shape = subtract(shape,cutout)\u000a shape = scale_x(shape,0,1/1.6)\u000a shapes['W'] = shape\u000a shape = scale_y(shapes['W'],0,width/height)\u000a shapes['w'] = shape\u000a shape = rectangle(0,width,0,height)\u000a shape = subtract(shape,triangle(0,0,0,height,width/2-.7*line,height/2))\u000a shape = subtract(shape,triangle(width,0,width/2+.7*line,height/2,width,height))\u000a shape = subtract(shape,triangle(1.1*line,height,width-1.1*line,height,width/2,height/2+line))\u000a shape = subtract(shape,triangle(1.1*line,0,width/2,height/2-line,width-1.1*line,0))\u000a shapes['X'] = shape\u000a w = 2*height/3.0\u000a shape = rectangle(0,width,0,w)\u000a shape = subtract(shape,triangle(0,0,0,w,width/2-.75*line,w/2))\u000a shape = subtract(shape,triangle(width,0,width/2+.75*line,w/2,width,w))\u000a shape = subtract(shape,triangle(1.25*line,0,width/2,w/2-.75*line,width-1.25*line,0))\u000a shape = subtract(shape,triangle(1.25*line,w,width-1.25*line,w,width/2,w/2+.75*line))\u000a shapes['x'] = shape\u000a w = height/2\u000a shape = rectangle(0,width,w,height)\u000a shape = subtract(shape,triangle(0,w,0,height,width/2-line/2,w))\u000a shape = subtract(shape,triangle(width/2+line/2,w,width,height,width,w))\u000a shape = subtract(shape,triangle(1.1*line,height,width-1.1*line,height,width/2,w+1.1*line))\u000a shape = add(shape,rectangle(width/2-line/2,width/2+line/2,0,w))\u000a shapes['Y'] = shape\u000a shape = rectangle(0,width,-height/3,width)\u000a shape = subtract(shape,triangle(0,-height/3,0,width,width/2-.9*line,0))\u000a shape = subtract(shape,triangle(1.1*line,width,width-1.1*line,width,width/2-.2*line,1.6*line))\u000a shape = subtract(shape,triangle(1.2*line,-height/3,width,width,width,-height/3))\u000a shapes['y'] = shape\u000a shape = rectangle(0,width,0,height)\u000a shape = subtract(shape,triangle(0,line,0,height-line,width-1.4*line,height-line))\u000a shape = subtract(shape,triangle(1.4*line,line,width,height-line,width,line))\u000a shapes['Z'] = shape\u000a w = 2*height/3\u000a shape = rectangle(0,width,0,w)\u000a shape = subtract(shape,triangle(0,line,0,w-line,width-1.6*line,w-line))\u000a shape = subtract(shape,triangle(width,line,1.6*line,line,width,w-line))\u000a shapes['z'] = shape\u000a shape = circle(width/2,width/2,width/2)\u000a shape = subtract(shape,circle(width/2,width/2,width/2-.9*line))\u000a shape = scale_y(shape,0,height/width)\u000a shapes['0'] = shape\u000a shape = rectangle(width/2-line/2,width/2+line/2,0,height)\u000a w = width/2-line/2\u000a cutout = circle(0,height,w)\u000a shape = add(shape,rectangle(0,width/2,height-w-line,height))\u000a shape = subtract(shape,cutout)\u000a shape = move(shape,(width/2+line/2)/4,0)\u000a shapes['1'] = shape\u000a shape = circle(width/2,height-width/2,width/2)\u000a shape = subtract(shape,circle(width/2,height-width/2,width/2-line))\u000a shape = subtract(shape,rectangle(0,width/2,0,height-width/2))\u000a shape = add(shape,rectangle(0,width,0,height-width/2))\u000a shape = subtract(shape,triangle(0,line,0,height-width/2,width-line,height-width/2))\u000a shape = subtract(shape,triangle(1.5*line,line,width,height-width/2-.5*line,width,line))\u000a shapes['2'] = shape\u000a shape = circle(width/2,width/2,width/2)\u000a shape = subtract(shape,circle(width/2,width/2,width/2-line))\u000a shape = scale_y(shape,0,(height/2+line/2)/width)\u000a shape = add(shape,move(shape,0,height/2-line/2))\u000a shape = subtract(shape,rectangle(0,width/2,height/4,3*height/4))\u000a shapes['3'] = shape\u000a shape = rectangle(width-line,width,0,height)\u000a shape = add(shape,triangle(0,height/3,width-line,height,width-line,height/3))\u000a shape = subtract(shape,triangle(1.75*line,height/3+line,width-line,height-1.5*line,width-line,height/3+line))\u000a shapes['4'] = shape\u000a shape = circle(width/2,width/2,width/2)\u000a shape = subtract(shape,circle(width/2,width/2,width/2-line))\u000a shape = subtract(shape,rectangle(0,width/2,width/2,width))\u000a shape = add(shape,rectangle(0,width/2,width-line,width))\u000a shape = add(shape,rectangle(0,line,width-line,height))\u000a shape = add(shape,rectangle(0,width,height-line,height))\u000a shapes['5'] = shape\u000a shape = circle(width/2,height-width/2,width/2)\u000a shape = subtract(shape,circle(width/2,height-width/2,width/2-line))\u000a shape = subtract(shape,rectangle(0,width,0,height-width/2))\u000a shape = subtract(shape,triangle(width,height,width,height/2,width/2,height/2))\u000a shape = add(shape,circle(width/2,width/2,width/2))\u000a shape = subtract(shape,circle(width/2,width/2,width/2-line))\u000a shape = add(shape,rectangle(0,line,width/2,height-width/2))\u000a shapes['6'] = shape\u000a shape = rectangle(0,width,0,height)\u000a shape = subtract(shape,triangle(0,0,0,height-line,width-line,height-line))\u000a shape = subtract(shape,triangle(line,0,width,height-line,width,0))\u000a shapes['7'] = shape\u000a shape = circle(width/2,width/2,width/2)\u000a shape = subtract(shape,circle(width/2,width/2,width/2-line))\u000a shape = scale_y(shape,0,(height/2+line/2)/width)\u000a shape = add(shape,move(shape,0,height/2-line/2))\u000a shapes['8'] = shape\u000a shape = circle(width/2,width/2,width/2)\u000a shape = subtract(shape,circle(width/2,width/2,width/2-line))\u000a shape = subtract(shape,rectangle(0,width,width/2,height))\u000a shape = subtract(shape,triangle(0,0,0,height/2,width/2,height/2))\u000a shape = add(shape,circle(width/2,height-width/2,width/2))\u000a shape = subtract(shape,circle(width/2,height-width/2,width/2-line))\u000a shape = add(shape,rectangle(width-line,width,width/2,height-width/2))\u000a shapes['9'] = shape\u000a w = width/2\u000a shape = circle(w,w,w)\u000a shape = subtract(shape,circle(w,w,w-line))\u000a shape = subtract(shape,rectangle(w,width,0,height))\u000a shape = scale_y(shape,0,height/width)\u000a shape = move(shape,w/2,0)\u000a shapes['('] = shape\u000a shape = reflect_x(shape,width)\u000a shapes[')'] = shape\u000a shapes[' '] = False\u000a shape = rectangle(width/2-width/3,width/2+width/3,height/2-line/2,height/2+line/2)\u000a shape = add(shape,rectangle(width/2-line/2,width/2+line/2,height/2-width/3,height/2+width/3))\u000a shapes['+'] = shape\u000a shape = rectangle(width/2-width/3,width/2+width/3,height/2-line/2,height/2+line/2)\u000a shapes['-'] = shape\u000a shape = circle(width/2,line,.75*line)\u000a shapes['.'] = shape\u000a shape = rectangle(0,width,0,height)\u000a d = .8*line\u000a shape = subtract(shape,triangle(d,0,width,height-d,width,0))\u000a shape = subtract(shape,triangle(0,d,0,height,width-d,height))\u000a shapes['/'] = shape\u000a #\u000a # to be done\u000a #\u000a shapes['~'] = shape\u000a shapes['!'] = shape\u000a shapes['@'] = shape\u000a shapes['#'] = shape\u000a shapes['$'] = shape\u000a shapes['%'] = shape\u000a shapes['^'] = shape\u000a shapes['&'] = shape\u000a shapes['&'] = shape\u000a shapes['_'] = shape\u000a shapes['='] = shape\u000a shapes['['] = shape\u000a shapes['{'] = shape\u000a shapes[']'] = shape\u000a shapes['}'] = shape\u000a shapes[';'] = shape\u000a shapes[':'] = shape\u000a shapes["'"] = shape\u000a shapes['"'] = shape\u000a shapes[','] = shape\u000a shapes['<'] = shape\u000a shapes['>'] = shape\u000a shapes['?'] = shape\u000a #\u000a # add a line to text shape\u000a #\u000a def addline(lineshape):\u000a #\u000a # LR align\u000a #\u000a if (align[0] == 'C'):\u000a lineshape = move(lineshape,-self.width/2.0,0)\u000a elif (align[0] == 'R'):\u000a lineshape = move(lineshape,-self.width,0)\u000a #\u000a # add\u000a #\u000a self.shape = add(self.shape,lineshape)\u000a #\u000a # loop over chars\u000a #\u000a dx = 0\u000a dy = -height\u000a self.width = -space\u000a self.height = height\u000a lineshape = False\u000a self.shape = False\u000a for chr in text:\u000a if (chr == '\u005cn'):\u000a addline(lineshape)\u000a dx = 0\u000a dy -= 1.5*self.height\u000a self.width = -space\u000a self.height += 1.5*self.height\u000a lineshape = False\u000a else:\u000a lineshape = add(lineshape,move(shapes[chr],dx,dy))\u000a self.width += space + width\u000a dx += width + space\u000a addline(lineshape)\u000a #\u000a # UD align\u000a #\u000a if (align[1] == 'C'):\u000a self.shape = move(self.shape,0,self.height/2.0)\u000a elif (align[1] == 'B'):\u000a self.shape = move(self.shape,0,self.height)\u000a #\u000a # rotate\u000a #\u000a if (angle == 90):\u000a self.shape = rotate_90(self.shape)\u000a elif (angle == 180):\u000a self.shape = rotate_180(self.shape)\u000a elif ((angle == 270) | (angle == -90)):\u000a self.shape = rotate_270(self.shape)\u000a elif (angle != 0):\u000a self.shape = rotate(self.shape,angle)\u000a #\u000a # translate\u000a #\u000a self.shape = move(self.shape,x,y)\u000a #\u000a # color\u000a #\u000a self.shape = '('+str(color)+'*(('+self.shape+')!=0))'\u000a\u000a#\u000a# PCB classes and definitions\u000a#\u000a\u000aclass PCB:\u000a def __init__(self,x0,y0,width,height,mask):\u000a self.board = False\u000a self.labels = False\u000a self.interior = rectangle(x0,x0+width,y0,y0+height)\u000a self.exterior = subtract(True,rectangle(x0,x0+width,y0,y0+height))\u000a self.mask = False\u000a def add(self,part):\u000a self.board = add(self.board,part)\u000a self.mask = add(self.mask,move(part,-mask,mask))\u000a self.mask = add(self.mask,move(part,-mask,-mask))\u000a self.mask = add(self.mask,move(part,mask,mask))\u000a self.mask = add(self.mask,move(part,mask,-mask))\u000a return self\u000a\u000aclass point:\u000a def __init__(self,x,y,z=0):\u000a self.x = x\u000a self.y = y\u000a self.z = z\u000a\u000aclass part:\u000a class text:\u000a def __init__(self,x,y,z=0,text='',line=0.006,angle=0):\u000a self.x = x\u000a self.y = y\u000a self.z = z\u000a self.text = text\u000a self.line = line \u000a self.angle = angle\u000a def add(self,pcb,x,y,z=0,angle=0,line=0.007):\u000a self.x = x\u000a self.y = y\u000a self.z = z\u000a self.angle = angle\u000a if (angle == 90):\u000a self.shape = rotate_90(self.shape)\u000a elif (angle == 180):\u000a self.shape = rotate_180(self.shape)\u000a elif ((angle == 270) | (angle == -90)):\u000a self.shape = rotate_270(self.shape)\u000a elif (angle != 0):\u000a self.shape = rotate(self.shape,angle)\u000a deg_angle = angle\u000a angle = pi*angle/180\u000a self.shape = translate(self.shape,x,y,z)\u000a for i in range(len(self.pad)):\u000a xnew = cos(angle)*self.pad[i].x - sin(angle)*self.pad[i].y\u000a ynew = sin(angle)*self.pad[i].x + cos(angle)*self.pad[i].y\u000a self.pad[i].x = x + xnew\u000a self.pad[i].y = y + ynew\u000a self.pad[i].z += z\u000a pcb.labels = add(pcb.labels,text(self.value,x,y,z,line=line,color=Green).shape)\u000a for i in range(len(self.labels)):\u000a xnew = cos(angle)*self.labels[i].x - sin(angle)*self.labels[i].y\u000a ynew = sin(angle)*self.labels[i].x + cos(angle)*self.labels[i].y\u000a self.labels[i].x = x + xnew\u000a self.labels[i].y = y + ynew\u000a self.labels[i].z += z\u000a if ((-90 < deg_angle) & (deg_angle <= 90)):\u000a pcb.labels = add(pcb.labels,text(self.labels[i].text,self.labels[i].x,self.labels[i].y,self.labels[i].z,self.labels[i].line,color=Red,angle=deg_angle-self.labels[i].angle).shape)\u000a else:\u000a pcb.labels = add(pcb.labels,text(self.labels[i].text,self.labels[i].x,self.labels[i].y,self.labels[i].z,self.labels[i].line,color=Red,angle=(deg_angle-self.labels[i].angle-180)).shape)\u000a pcb = pcb.add(self.shape)\u000a return pcb\u000a def layer(self,pcb,z):\u000a pcb = pcb.add(translate(self.shape,0,0,z))\u000a return pcb\u000a\u000adef wire(pcb,width,*points):\u000a for i in range(1,len(points)):\u000a x0 = points[i-1].x\u000a y0 = points[i-1].y\u000a z0 = points[i-1].z\u000a x1 = points[i].x\u000a y1 = points[i].y\u000a z1 = points[i].z\u000a if (x0 < x1):\u000a pcb.board = add(pcb.board,cube(x0-width/2,x1+width/2,y0-width/2,y0+width/2,z0,z0))\u000a elif (x1 < x0):\u000a pcb.board = add(pcb.board,cube(x1-width/2,x0+width/2,y0-width/2,y0+width/2,z0,z0))\u000a if (y0 < y1):\u000a pcb.board = add(pcb.board,cube(x1-width/2,x1+width/2,y0-width/2,y1+width/2,z0,z0))\u000a elif (y1 < y0):\u000a pcb.board = add(pcb.board,cube(x1-width/2,x1+width/2,y1-width/2,y0+width/2,z0,z0))\u000a return pcb\u000a\u000a#\u000a# PCB library\u000a#\u000a\u000a#\u000a# discretes\u000a#\u000a\u000apad_0402 = cube(-.0175,.0175,-.014,.014,0,0)\u000a\u000aclass R_0402(part):\u000a #\u000a # 0402 resistor\u000a #\u000a def __init__(self,value=''):\u000a self.value = value\u000a self.labels = []\u000a self.pad = [point(0,0,0)]\u000a self.shape = translate(pad_0402,-.0265,0,0)\u000a self.pad.append(point(-.0265,0,0))\u000a self.shape = add(self.shape,translate(pad_0402,.0265,0,0))\u000a self.pad.append(point(.0265,0,0))\u000a\u000apad_SJ = cube(-.02,.02,-.03,.03,0,0)\u000a\u000aclass SJ(part):\u000a #\u000a # solder jumper\u000a #\u000a def __init__(self,value=''):\u000a self.value = value\u000a self.labels = []\u000a self.pad = [point(0,0,0)]\u000a self.shape = translate(pad_SJ,-.029,0,0)\u000a self.pad.append(point(-.029,0,0))\u000a self.shape = add(self.shape,translate(pad_SJ,.029,0,0))\u000a self.pad.append(point(.029,0,0))\u000a\u000apad_1206 = cube(-.022,.022,-.034,.034,0,0)\u000a\u000aclass R_1206(part):\u000a #\u000a # 1206 resistor\u000a #\u000a def __init__(self,value=''):\u000a self.value = value\u000a self.labels = []\u000a self.pad = [point(0,0,0)]\u000a self.shape = translate(pad_1206,-.06,0,0)\u000a self.pad.append(point(-.05,0,0))\u000a self.shape = add(self.shape,translate(pad_1206,.06,0,0))\u000a self.pad.append(point(.06,0,0))\u000a\u000aclass C_1206(part):\u000a #\u000a # 1206 capacitor\u000a #\u000a def __init__(self,value=''):\u000a self.value = value\u000a self.labels = []\u000a self.pad = [point(0,0,0)]\u000a self.shape = translate(pad_1206,-.06,0,0)\u000a self.pad.append(point(-.06,0,0))\u000a self.shape = add(self.shape,translate(pad_1206,.06,0,0))\u000a self.pad.append(point(.06,0,0))\u000a\u000apad_1210 = cube(-.032,.032,-.048,.048,0,0)\u000a\u000aclass L_1210(part):\u000a #\u000a # 1210 inductor\u000a #\u000a def __init__(self,value=''):\u000a self.value = value\u000a self.labels = []\u000a self.pad = [point(0,0,0)]\u000a self.shape = translate(pad_1210,-.06,0,0)\u000a self.pad.append(point(-.06,0,0))\u000a self.shape = add(self.shape,translate(pad_1210,.06,0,0))\u000a self.pad.append(point(.06,0,0))\u000a\u000apad_choke = cube(-.06,.06,-.06,.06,0,0)\u000a\u000aclass choke(part):\u000a #\u000a # Panasonic ELLCTV\u000a #\u000a def __init__(self,value=''):\u000a self.value = value\u000a self.labels = []\u000a self.pad = [point(0,0,0)]\u000a self.shape = translate(pad_choke,-.177,-.177,0)\u000a self.pad.append(point(-.177,-.177,0))\u000a self.shape = add(self.shape,translate(pad_choke,.177,.177,0))\u000a self.pad.append(point(.177,.177,0))\u000a\u000a#\u000a# connectors\u000a#\u000a\u000apad_USB_trace = cube(-.0075,.0075,-.04,.04,0,0)\u000apad_USB_feet = cube(-.049,.049,-.043,.043,0,0)\u000a\u000aclass USB_mini_B(part):\u000a #\u000a # USB mini B\u000a # Hirose UX60-MB-5ST\u000a #\u000a def __init__(self,value=''):\u000a self.value = value\u000a self.pad = [point(0,0,0)]\u000a self.labels = []\u000a #\u000a # pin 1\u000a #\u000a self.shape = translate(pad_USB_trace,.063,.36,0)\u000a self.pad.append(point(.063,.36,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'G'))\u000a #\u000a # pin 2\u000a #\u000a self.shape = add(self.shape,translate(pad_USB_trace,.0315,.36,0))\u000a self.pad.append(point(.0315,.36,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,''))\u000a #\u000a # pin 3\u000a #\u000a self.shape = add(self.shape,translate(pad_USB_trace,0,.36,0))\u000a self.pad.append(point(0,.36,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'+'))\u000a #\u000a # pin 4\u000a #\u000a self.shape = add(self.shape,translate(pad_USB_trace,-.0315,.36,0))\u000a self.pad.append(point(-.0315,.36,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'-'))\u000a #\u000a # pin 5\u000a #\u000a self.shape = add(self.shape,translate(pad_USB_trace,-.063,.36,0))\u000a self.pad.append(point(-.063,.36,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'V'))\u000a #\u000a # feet\u000a #\u000a self.shape = add(self.shape,translate(pad_USB_feet,.165,.33,0))\u000a self.shape = add(self.shape,translate(pad_USB_feet,-.165,.33,0))\u000a self.shape = add(self.shape,translate(pad_USB_feet,.165,.12,0))\u000a self.shape = add(self.shape,translate(pad_USB_feet,-.165,.12,0))\u000a\u000a\u000a#pad_header = cube(-.05,.05,-.025,.025,0,0)\u000apad_header = rectangle(-0.05,0.05,-0.025,0.025)\u000a\u000a\u000aclass header_4(part):\u000a #\u000a # 4-pin header\u000a # fci 95278-101a04lf bergstik 2x2x0.1"\u000a #\u000a def __init__(self,value=''):\u000a self.value = value\u000a self.pad = [point(0,0,0)]\u000a self.labels = []\u000a #\u000a # pin 1\u000a #\u000a self.shape = translate(pad_header,-.107,.05,0)\u000a self.shape = add(self.shape,cylinder(-.157,.05,0,0,.025))\u000a self.pad.append(point(-.107,.05,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'1'))\u000a #\u000a # pin 2\u000a #\u000a self.shape = add(self.shape,translate(pad_header,.107,.05,0))\u000a self.pad.append(point(.107,.05,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'2'))\u000a #\u000a # pin 3\u000a #\u000a self.shape = add(self.shape,translate(pad_header,-.107,-.05,0))\u000a self.pad.append(point(-.107,-.05,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'3'))\u000a #\u000a # pin 4\u000a #\u000a self.shape = add(self.shape,translate(pad_header,.107,-.05,0))\u000a self.pad.append(point(.107,-.05,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'4'))\u000a\u000aclass header_signal(part):\u000a #\u000a # signal header\u000a # FCI 95278-101A04LF Bergstik 2x2x0.1"\u000a #\u000a def __init__(self,value=''):\u000a self.value = value\u000a self.pad = [point(0,0,0)]\u000a self.labels = []\u000a #\u000a # pin 1: Gnd\u000a #\u000a self.shape = translate(pad_header,.107,-.05,0)\u000a self.shape = add(self.shape,cylinder(.157,-.05,0,0,.025))\u000a self.pad.append(point(.107,-.05,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'GND'))\u000a #\u000a # pin 2\u000a #\u000a self.shape = add(self.shape,translate(pad_header,-.107,-.05,0))\u000a self.pad.append(point(-.107,-.05,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,''))\u000a #\u000a # pin 3: signal\u000a #\u000a self.shape = add(self.shape,translate(pad_header,.107,.05,0))\u000a self.pad.append(point(.107,.05,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'signal'))\u000a #\u000a # pin 4:\u000a #\u000a self.shape = add(self.shape,translate(pad_header,-.107,.05,0))\u000a self.pad.append(point(-.107,.05,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,''))\u000a\u000a\u000aclass header_power(part):\u000a #\u000a # power header\u000a # FCI 95278-101A04LF Bergstik 2x2x0.1"\u000a #\u000a def __init__(self,value=''):\u000a self.value = value\u000a self.pad = [point(0,0,0)]\u000a self.labels = []\u000a #\u000a # pin 1: Gnd\u000a #\u000a self.shape = translate(pad_header,.107,-.05,0)\u000a self.shape = add(self.shape,cylinder(.157,-.05,0,0,.025))\u000a self.pad.append(point(.107,-.05,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'GND'))\u000a #\u000a # pin 2\u000a #\u000a self.shape = add(self.shape,translate(pad_header,-.107,-.05,0))\u000a self.pad.append(point(-.107,-.05,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,''))\u000a #\u000a # pin 3: V\u000a #\u000a self.shape = add(self.shape,translate(pad_header,.107,.05,0))\u000a self.pad.append(point(.107,.05,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'V'))\u000a #\u000a # pin 4:\u000a #\u000a self.shape = add(self.shape,translate(pad_header,-.107,.05,0))\u000a self.pad.append(point(-.107,.05,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,''))\u000a\u000aclass header_i0(part):\u000a #\u000a # i0 header\u000a # FCI 95278-101A04LF Bergstik 2x2x0.1"\u000a #\u000a def __init__(self,value=''):\u000a self.value = value\u000a self.pad = [point(0,0,0)]\u000a self.labels = []\u000a #\u000a # pin 1: Gnd\u000a #\u000a self.shape = translate(pad_header,.107,-.05,0)\u000a self.shape = add(self.shape,cylinder(.157,-.05,0,0,.025))\u000a self.pad.append(point(.107,-.05,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'GND'))\u000a #\u000a # pin 2: data\u000a #\u000a self.shape = add(self.shape,translate(pad_header,-.107,-.05,0))\u000a self.pad.append(point(-.107,-.05,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'data'))\u000a #\u000a # pin 3: V\u000a #\u000a self.shape = add(self.shape,translate(pad_header,.107,.05,0))\u000a self.pad.append(point(.107,.05,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'V'))\u000a #\u000a # pin 4:\u000a #\u000a self.shape = add(self.shape,translate(pad_header,-.107,.05,0))\u000a self.pad.append(point(-.107,.05,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,''))\u000a\u000aclass header_serial(part):\u000a #\u000a # serial comm header\u000a # FCI 95278-101A04LF Bergstik 2x2x0.1"\u000a #\u000a def __init__(self,value=''):\u000a self.value = value\u000a self.pad = [point(0,0,0)]\u000a self.labels = []\u000a #\u000a # pin 1: Gnd\u000a #\u000a self.shape = translate(pad_header,.107,-.05,0)\u000a self.shape = add(self.shape,cylinder(.157,-.05,0,0,.025))\u000a self.pad.append(point(.107,-.05,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'GND'))\u000a #\u000a # pin 2:DTR\u000a #\u000a self.shape = add(self.shape,translate(pad_header,-.107,-.05,0))\u000a self.pad.append(point(-.107,-.05,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'DTR'))\u000a #\u000a # pin 3: Tx\u000a #\u000a self.shape = add(self.shape,translate(pad_header,.107,.05,0))\u000a self.pad.append(point(.107,.05,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'Tx'))\u000a #\u000a # pin 4: Rx\u000a #\u000a self.shape = add(self.shape,translate(pad_header,-.107,.05,0))\u000a self.pad.append(point(-.107,.05,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'Rx'))\u000a\u000aclass header_bus(part):\u000a #\u000a # bus header\u000a # FCI 95278-101A04LF Bergstik 2x2x0.1"\u000a #\u000a def __init__(self,value=''):\u000a self.value = value\u000a self.pad = [point(0,0,0)]\u000a self.labels = []\u000a #\u000a # pin 1: Gnd\u000a #\u000a self.shape = translate(pad_header,.107,-.05,0)\u000a self.shape = add(self.shape,cylinder(.157,-.05,0,0,.025))\u000a self.pad.append(point(.107,-.05,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'GND'))\u000a #\u000a # pin 2: Tx\u000a #\u000a self.shape = add(self.shape,translate(pad_header,-.107,-.05,0))\u000a self.pad.append(point(-.107,-.05,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'Tx'))\u000a #\u000a # pin 3: V\u000a #\u000a self.shape = add(self.shape,translate(pad_header,.107,.05,0))\u000a self.pad.append(point(.107,.05,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'V'))\u000a #\u000a # pin 4: Rx\u000a #\u000a self.shape = add(self.shape,translate(pad_header,-.107,.05,0))\u000a self.pad.append(point(-.107,.05,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'Rx'))\u000a\u000aclass header_APA(part):\u000a #\u000a # APA header\u000a # FCI 95278-101A04LF Bergstik 2x2x0.1"\u000a #\u000a def __init__(self,value=''):\u000a self.value = value\u000a self.pad = [point(0,0,0)]\u000a self.labels = []\u000a #\u000a # pin 1: Gnd\u000a #\u000a self.shape = translate(pad_header,.107,-.05,0)\u000a self.shape = add(self.shape,cylinder(.157,-.05,0,0,.025))\u000a self.pad.append(point(.107,-.05,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'GND'))\u000a #\u000a # pin 2: in\u000a #\u000a self.shape = add(self.shape,translate(pad_header,-.107,-.05,0))\u000a self.pad.append(point(-.107,-.05,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'in'))\u000a #\u000a # pin 3: V\u000a #\u000a self.shape = add(self.shape,translate(pad_header,.107,.05,0))\u000a self.pad.append(point(.107,.05,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'V'))\u000a #\u000a # pin 4: out\u000a #\u000a self.shape = add(self.shape,translate(pad_header,-.107,.05,0))\u000a self.pad.append(point(-.107,.05,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'out'))\u000a\u000aclass header_6(part):\u000a #\u000a # 6-pin header\u000a # FCI 95278-101A06LF Bergstik 2x3x0.1"\u000a #\u000a def __init__(self,value=''):\u000a self.value = value\u000a self.pad = [point(0,0,0)]\u000a self.labels = []\u000a #\u000a # pin 1\u000a #\u000a self.shape = translate(pad_header,.107,-.1,0)\u000a self.shape = add(self.shape,cylinder(.157,-.1,0,0,.025))\u000a self.pad.append(point(.107,-.1,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,''))\u000a #\u000a # pin 2\u000a #\u000a self.shape = add(self.shape,translate(pad_header,-.107,-.1,0))\u000a self.pad.append(point(-.107,-.1,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,''))\u000a #\u000a # pin 3\u000a #\u000a self.shape = add(self.shape,translate(pad_header,.107,0,0))\u000a self.pad.append(point(.107,0,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,''))\u000a #\u000a # pin 4\u000a #\u000a self.shape = add(self.shape,translate(pad_header,-.107,0,0))\u000a self.pad.append(point(-.107,0,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,''))\u000a #\u000a # pin 5\u000a #\u000a self.shape = add(self.shape,translate(pad_header,.107,.1,0))\u000a self.pad.append(point(.107,.1,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,''))\u000a #\u000a # pin 6\u000a #\u000a self.shape = add(self.shape,translate(pad_header,-.107,.1,0))\u000a self.pad.append(point(-.107,.1,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,''))\u000a\u000aclass header_ISP(part):\u000a #\u000a # in-circuit programming header\u000a # FCI 95278-101A06LF Bergstik 2x3x0.1"\u000a #\u000a def __init__(self,value=''):\u000a self.value = value\u000a self.pad = [point(0,0,0)]\u000a self.labels = []\u000a #\u000a # pin 1: MISO\u000a #\u000a self.shape = translate(pad_header,.107,-.1,0)\u000a self.shape = add(self.shape,cylinder(.157,-.1,0,0,.025))\u000a self.pad.append(point(.107,-.1,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'MISO'))\u000a #\u000a # pin 2: V\u000a #\u000a self.shape = add(self.shape,translate(pad_header,-.107,-.1,0))\u000a self.pad.append(point(-.107,-.1,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'V'))\u000a #\u000a # pin 3: SCK\u000a #\u000a self.shape = add(self.shape,translate(pad_header,.107,0,0))\u000a self.pad.append(point(.107,0,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'SCK'))\u000a #\u000a # pin 4: MOSI\u000a #\u000a self.shape = add(self.shape,translate(pad_header,-.107,0,0))\u000a self.pad.append(point(-.107,0,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'MOSI'))\u000a #\u000a # pin 5: RST\u000a #\u000a self.shape = add(self.shape,translate(pad_header,.107,.1,0))\u000a self.pad.append(point(.107,.1,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'RST'))\u000a #\u000a # pin 6: GND\u000a #\u000a self.shape = add(self.shape,translate(pad_header,-.107,.1,0))\u000a self.pad.append(point(-.107,.1,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'GND'))\u000a\u000aclass header_servo(part):\u000a #\u000a # servo motor header\u000a # FCI 95278-101A06LF Bergstik 2x3x0.1"\u000a #\u000a def __init__(self,value=''):\u000a self.value = value\u000a self.pad = [point(0,0,0)]\u000a self.labels = []\u000a #\u000a # pin 1: ground\u000a #\u000a self.shape = translate(pad_header,.107,-.1,0)\u000a self.shape = add(self.shape,cylinder(.157,-.1,0,0,.025))\u000a self.pad.append(point(.107,-.1,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'G/blk'))\u000a #\u000a # pin 2: ground\u000a #\u000a self.shape = add(self.shape,translate(pad_header,-.107,-.1,0))\u000a self.pad.append(point(-.107,-.1,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'G/blk'))\u000a #\u000a # pin 3: power\u000a #\u000a self.shape = add(self.shape,translate(pad_header,.107,0,0))\u000a self.pad.append(point(.107,0,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'V/red'))\u000a #\u000a # pin 4: power\u000a #\u000a self.shape = add(self.shape,translate(pad_header,-.107,0,0))\u000a self.pad.append(point(-.107,0,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'V/red'))\u000a #\u000a # pin 5: signal 0\u000a #\u000a self.shape = add(self.shape,translate(pad_header,.107,.1,0))\u000a self.pad.append(point(.107,.1,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'S0/wht'))\u000a #\u000a # pin 6: signal 1\u000a #\u000a self.shape = add(self.shape,translate(pad_header,-.107,.1,0))\u000a self.pad.append(point(-.107,.1,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'S1/wht'))\u000a\u000aclass header_unipolar_stepper(part):\u000a #\u000a # unipolar stepper header\u000a # FCI 95278-101A06LF Bergstik 2x3x0.1"\u000a #\u000a def __init__(self,value=''):\u000a self.value = value\u000a self.pad = [point(0,0,0)]\u000a self.labels = []\u000a #\u000a # pin 1\u000a #\u000a self.shape = translate(pad_header,.107,-.1,0)\u000a self.shape = add(self.shape,cylinder(.157,-.1,0,0,.025))\u000a self.pad.append(point(.107,-.1,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'red'))\u000a #\u000a # pin 2\u000a #\u000a self.shape = add(self.shape,translate(pad_header,-.107,-.1,0))\u000a self.pad.append(point(-.107,-.1,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'green'))\u000a #\u000a # pin 3\u000a #\u000a self.shape = add(self.shape,translate(pad_header,.107,0,0))\u000a self.pad.append(point(.107,0,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'black'))\u000a #\u000a # pin 4\u000a #\u000a self.shape = add(self.shape,translate(pad_header,-.107,0,0))\u000a self.pad.append(point(-.107,0,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'brown'))\u000a #\u000a # pin 5\u000a #\u000a self.shape = add(self.shape,translate(pad_header,.107,.1,0))\u000a self.pad.append(point(.107,.1,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'orange'))\u000a #\u000a # pin 6\u000a #\u000a self.shape = add(self.shape,translate(pad_header,-.107,.1,0))\u000a self.pad.append(point(-.107,.1,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'yellow'))\u000a\u000aclass header_LCD(part):\u000a #\u000a # LCD interface header\u000a # FCI 95278-101A10LF Bergstik 2x3x0.1"\u000a #\u000a def __init__(self,value=''):\u000a self.value = value\u000a self.pad = [point(0,0,0)]\u000a self.labels = []\u000a #\u000a # pin 1:\u000a #\u000a self.shape = translate(pad_header,.107,-.2,0)\u000a self.shape = add(self.shape,cylinder(.157,-.2,0,0,.025))\u000a self.pad.append(point(.107,-.2,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'DB7\u005cn14'))\u000a #\u000a # pin 2:\u000a #\u000a self.shape = add(self.shape,translate(pad_header,-.107,-.2,0))\u000a self.pad.append(point(-.107,-.2,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'DB6\u005cn13'))\u000a #\u000a # pin 3:\u000a #\u000a self.shape = add(self.shape,translate(pad_header,.107,-.1,0))\u000a self.pad.append(point(.107,-.1,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'DB5\u005cn12'))\u000a #\u000a # pin 4:\u000a #\u000a self.shape = add(self.shape,translate(pad_header,-.107,-.1,0))\u000a self.pad.append(point(-.107,-.1,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'DB4\u005cn11'))\u000a #\u000a # pin 5:\u000a #\u000a self.shape = add(self.shape,translate(pad_header,.107,0,0))\u000a self.pad.append(point(.107,0,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'E\u005cn6'))\u000a #\u000a # pin 6:\u000a #\u000a self.shape = add(self.shape,translate(pad_header,-.107,0,0))\u000a self.pad.append(point(-.107,0,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'R/W\u005cn5'))\u000a #\u000a # pin 7:\u000a #\u000a self.shape = add(self.shape,translate(pad_header,.107,.1,0))\u000a self.pad.append(point(.107,.1,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'RS\u005cn4'))\u000a #\u000a # pin 8:\u000a #\u000a self.shape = add(self.shape,translate(pad_header,-.107,.1,0))\u000a self.pad.append(point(-.107,.1,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'Vee\u005cn3'))\u000a #\u000a # pin 9:\u000a #\u000a self.shape = add(self.shape,translate(pad_header,.107,.2,0))\u000a self.pad.append(point(.107,.2,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'Vcc\u005cn2'))\u000a #\u000a # pin 10:\u000a #\u000a self.shape = add(self.shape,translate(pad_header,-.107,.2,0))\u000a self.pad.append(point(-.107,.2,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'GND\u005cn1'))\u000a\u000aclass header_FTDI(part):\u000a #\u000a # FTDI cable header\u000a #\u000a def __init__(self,value=''):\u000a self.value = value\u000a self.pad = [point(0,0,0)]\u000a self.labels = []\u000a #\u000a # pin 1: GND (black)\u000a #\u000a self.shape = translate(pad_header,0,.25,0)\u000a #self.shape = add(self.shape,cylinder(-.05,.25,0,0,.025))\u000a self.pad.append(point(0,.25,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'G (blk)'))\u000a #\u000a # pin 2: CTS (brown)\u000a #\u000a self.shape = add(self.shape,translate(pad_header,0,.15,0))\u000a self.pad.append(point(0,.15,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'CTS'))\u000a #\u000a # pin 3: VCC (red)\u000a #\u000a self.shape = add(self.shape,translate(pad_header,0,.05,0))\u000a self.pad.append(point(0,.05,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'VCC'))\u000a #\u000a # pin 4: Tx (orange)\u000a #\u000a self.shape = add(self.shape,translate(pad_header,0,-0.05,0))\u000a self.pad.append(point(0,-.05,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'Tx'))\u000a #\u000a # pin 5: Rx (yellow)\u000a #\u000a self.shape = add(self.shape,translate(pad_header,0,-.15,0))\u000a self.pad.append(point(0,-.15,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'Rx'))\u000a #\u000a # pin 6: RTS (green)\u000a #\u000a self.shape = add(self.shape,translate(pad_header,0,-.25,0))\u000a self.pad.append(point(0,-.25,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'RTS'))\u000a\u000apad_MTA = cube(-.021,.021,-.041,.041,0,0)\u000apad_MTA_solder = cube(-.071,.071,-.041,.041,0,0)\u000a\u000aclass MTA_2(part):\u000a #\u000a # AMP 1445121-2\u000a # MTA .050 SMT 2-pin vertical\u000a #\u000a def __init__(self,value=''):\u000a self.value = value\u000a self.pad = [point(0,0,0)]\u000a self.labels = []\u000a #\u000a # pin 1\u000a #\u000a self.shape = translate(pad_MTA,-.025,-.1,0)\u000a self.pad.append(point(-.025,-.1,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'1'))\u000a #\u000a # pin 2\u000a #\u000a self.shape = add(self.shape,translate(pad_MTA,.025,.1,0))\u000a self.pad.append(point(.025,.1,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'2'))\u000a #\u000a # solder pads\u000a #\u000a self.shape = add(self.shape,translate(pad_MTA_solder,-.187,0,0))\u000a self.shape = add(self.shape,translate(pad_MTA_solder,.187,0,0))\u000a\u000aclass MTA_power(part):\u000a #\u000a # AMP 1445121-2\u000a # MTA .050 SMT 2-pin vertical\u000a #\u000a def __init__(self,value=''):\u000a self.value = value\u000a self.pad = [point(0,0,0)]\u000a self.labels = []\u000a #\u000a # pin 1: Gnd\u000a #\u000a self.shape = translate(pad_MTA,-.025,-.1,0)\u000a self.pad.append(point(-.025,-.1,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'1\u005cnGND'))\u000a #\u000a # pin 2: Vcc\u000a #\u000a self.shape = add(self.shape,translate(pad_MTA,.025,.1,0))\u000a self.pad.append(point(.025,.1,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'Vcc'))\u000a #\u000a # solder pads\u000a #\u000a self.shape = add(self.shape,translate(pad_MTA_solder,-.187,0,0))\u000a self.shape = add(self.shape,translate(pad_MTA_solder,.187,0,0))\u000a\u000aclass MTA_3(part):\u000a #\u000a # AMP 1445121-3\u000a # MTA .050 SMT 3-pin vertical\u000a #\u000a def __init__(self,value=''):\u000a self.value = value\u000a self.pad = [point(0,0,0)]\u000a self.labels = []\u000a #\u000a # pin 1: GND\u000a #\u000a self.shape = translate(pad_MTA,.05,.1,0)\u000a self.pad.append(point(.05,.1,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'1'))\u000a #\u000a # pin 2: power \u000a #\u000a self.shape = add(self.shape,translate(pad_MTA,-.05,.1,0))\u000a self.pad.append(point(-.05,.1,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'2'))\u000a #\u000a # pin 3: data\u000a #\u000a self.shape = add(self.shape,translate(pad_MTA,0,-.1,0))\u000a self.pad.append(point(0,-.1,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'3'))\u000a #\u000a # solder pads\u000a #\u000a self.shape = add(self.shape,translate(pad_MTA_solder,-.212,0,0))\u000a self.shape = add(self.shape,translate(pad_MTA_solder,.212,0,0))\u000a\u000aclass MTA_i0(part):\u000a #\u000a # AMP 1445121-3\u000a # MTA .050 SMT 3-pin vertical\u000a #\u000a def __init__(self,value=''):\u000a self.value = value\u000a self.pad = [point(0,0,0)]\u000a self.labels = []\u000a #\u000a # pin 1: GND\u000a #\u000a self.shape = translate(pad_MTA,.05,.1,0)\u000a self.pad.append(point(.05,.1,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'1\u005cnGND'))\u000a #\u000a # pin 2: power \u000a #\u000a self.shape = add(self.shape,translate(pad_MTA,-.05,.1,0))\u000a self.pad.append(point(-.05,.1,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'V'))\u000a #\u000a # pin 3: data\u000a #\u000a self.shape = add(self.shape,translate(pad_MTA,0,-.1,0))\u000a self.pad.append(point(0,-.1,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'data'))\u000a #\u000a # solder pads\u000a #\u000a self.shape = add(self.shape,translate(pad_MTA_solder,-.212,0,0))\u000a self.shape = add(self.shape,translate(pad_MTA_solder,.212,0,0))\u000a\u000aclass MTA_4(part):\u000a #\u000a # AMP 1445121-4\u000a # MTA .050 SMT 4-pin vertical\u000a #\u000a def __init__(self,value=''):\u000a self.value = value\u000a self.pad = [point(0,0,0)]\u000a self.labels = []\u000a #\u000a # pin 1\u000a #\u000a self.shape = translate(pad_MTA,-.075,-.1,0)\u000a self.pad.append(point(-.075,-.1,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'1'))\u000a #\u000a # pin 2\u000a #\u000a self.shape = add(self.shape,translate(pad_MTA,.025,-.1,0))\u000a self.pad.append(point(.025,-.1,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'2'))\u000a #\u000a # pin 3\u000a #\u000a self.shape = add(self.shape,translate(pad_MTA,.075,.1,0))\u000a self.pad.append(point(.075,.1,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'3'))\u000a #\u000a # pin 4\u000a #\u000a self.shape = add(self.shape,translate(pad_MTA,-.025,.1,0))\u000a self.pad.append(point(-.025,.1,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'4'))\u000a #\u000a # solder pads\u000a #\u000a self.shape = add(self.shape,translate(pad_MTA_solder,-.237,0,0))\u000a self.shape = add(self.shape,translate(pad_MTA_solder,.237,0,0))\u000a\u000aclass MTA_serial(part):\u000a #\u000a # AMP 1445121-4\u000a # MTA .050 SMT 4-pin vertical\u000a #\u000a def __init__(self,value=''):\u000a self.value = value\u000a self.pad = [point(0,0,0)]\u000a self.labels = []\u000a #\u000a # pin 1: Gnd\u000a #\u000a self.shape = translate(pad_MTA,-.075,-.1,0)\u000a self.pad.append(point(-.075,-.1,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'1'))\u000a #\u000a # pin 2: Tx\u000a #\u000a self.shape = add(self.shape,translate(pad_MTA,.025,-.1,0))\u000a self.pad.append(point(.025,-.1,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'Tx'))\u000a #\u000a # pin 3: Rx\u000a #\u000a self.shape = add(self.shape,translate(pad_MTA,.075,.1,0))\u000a self.pad.append(point(.075,.1,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'Rx'))\u000a #\u000a # pin 4: DTR\u000a #\u000a self.shape = add(self.shape,translate(pad_MTA,-.025,.1,0))\u000a self.pad.append(point(-.025,.1,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'DTR'))\u000a #\u000a # solder pads\u000a #\u000a self.shape = add(self.shape,translate(pad_MTA_solder,-.237,0,0))\u000a self.shape = add(self.shape,translate(pad_MTA_solder,.237,0,0))\u000a\u000aclass MTA_PS2(part):\u000a #\u000a # AMP 1445121-4\u000a # MTA .050 SMT 4-pin vertical\u000a #\u000a def __init__(self,value=''):\u000a self.value = value\u000a self.pad = [point(0,0,0)]\u000a self.labels = []\u000a #\u000a # pin 1: GND\u000a #\u000a self.shape = translate(pad_MTA,-.075,-.1,0)\u000a self.pad.append(point(-.075,-.1,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'1\u005cnGND'))\u000a #\u000a # pin 2: data\u000a #\u000a self.shape = add(self.shape,translate(pad_MTA,.025,-.1,0))\u000a self.pad.append(point(.025,-.1,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'data'))\u000a #\u000a # pin 3: clock\u000a #\u000a self.shape = add(self.shape,translate(pad_MTA,.075,.1,0))\u000a self.pad.append(point(.075,.1,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'clock'))\u000a #\u000a # pin 4: 5V\u000a #\u000a self.shape = add(self.shape,translate(pad_MTA,-.025,.1,0))\u000a self.pad.append(point(-.025,.1,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'5V'))\u000a #\u000a # solder pads\u000a #\u000a self.shape = add(self.shape,translate(pad_MTA_solder,-.237,0,0))\u000a self.shape = add(self.shape,translate(pad_MTA_solder,.237,0,0))\u000a\u000aclass MTA_5(part):\u000a #\u000a # AMP 1445121-5\u000a # MTA .050 SMT 5-pin vertical\u000a #\u000a def __init__(self,value=''):\u000a self.value = value\u000a self.pad = [point(0,0,0)]\u000a self.labels = []\u000a #\u000a # pin 1\u000a #\u000a self.shape = translate(pad_MTA,-.1,-.1,0)\u000a self.pad.append(point(-.1,-.1,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'1'))\u000a #\u000a # pin 2\u000a #\u000a self.shape = add(self.shape,translate(pad_MTA,0,-.1,0))\u000a self.pad.append(point(0,-.1,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'2'))\u000a #\u000a # pin 3\u000a #\u000a self.shape = add(self.shape,translate(pad_MTA,.1,-.1,0))\u000a self.pad.append(point(.1,-.1,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'3'))\u000a #\u000a # pin 4\u000a #\u000a self.shape = add(self.shape,translate(pad_MTA,.05,.1,0))\u000a self.pad.append(point(.05,.1,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'4'))\u000a #\u000a # pin 5\u000a #\u000a self.shape = add(self.shape,translate(pad_MTA,-.05,.1,0))\u000a self.pad.append(point(-.05,.1,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'5'))\u000a #\u000a # solder pads\u000a #\u000a self.shape = add(self.shape,translate(pad_MTA_solder,-.262,0,0))\u000a self.shape = add(self.shape,translate(pad_MTA_solder,.262,0,0))\u000a\u000aclass MTA_ICP(part):\u000a #\u000a # AMP 1445121-5\u000a # MTA .050 SMT 5-pin vertical\u000a #\u000a def __init__(self,value=''):\u000a self.value = value\u000a self.pad = [point(0,0,0)]\u000a self.labels = []\u000a #\u000a # pin 1: MISO\u000a #\u000a self.shape = translate(pad_MTA,-.1,-.1,0)\u000a self.pad.append(point(-.1,-.1,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'MISO'))\u000a #\u000a # pin 2: GND\u000a #\u000a self.shape = add(self.shape,translate(pad_MTA,0,-.1,0))\u000a self.pad.append(point(0,-.1,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'GND'))\u000a #\u000a # pin 3: MOSI\u000a #\u000a self.shape = add(self.shape,translate(pad_MTA,.1,-.1,0))\u000a self.pad.append(point(.1,-.1,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'MOSI'))\u000a #\u000a # pin 4: -RESET\u000a #\u000a self.shape = add(self.shape,translate(pad_MTA,.05,.1,0))\u000a self.pad.append(point(.05,.1,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'-RESET'))\u000a #\u000a # pin 5: SCK\u000a #\u000a self.shape = add(self.shape,translate(pad_MTA,-.05,.1,0))\u000a self.pad.append(point(-.05,.1,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'SCK'))\u000a #\u000a # solder pads\u000a #\u000a self.shape = add(self.shape,translate(pad_MTA_solder,-.262,0,0))\u000a self.shape = add(self.shape,translate(pad_MTA_solder,.262,0,0))\u000a\u000apad_screw_terminal = cylinder(0,0,0,0,.047)\u000ahole_screw_terminal = circle(0,0,.025)\u000a\u000aclass screw_terminal_2(part):\u000a #\u000a # On Shore ED555/2DS\u000a # two position screw terminal\u000a #\u000a def __init__(self,value=''):\u000a self.value = value\u000a self.pad = [point(0,0,0)]\u000a self.labels = []\u000a #\u000a # pin 1\u000a #\u000a self.shape = translate(pad_screw_terminal,-.069,0,0)\u000a self.pad.append(point(-.069,0,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'1'))\u000a #\u000a # pin 2\u000a #\u000a self.shape = add(self.shape,translate(pad_screw_terminal,.069,0,0))\u000a self.pad.append(point(.069,0,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'2'))\u000a #\u000a # holes\u000a #\u000a self.shape = add(self.shape,translate(hole_screw_terminal,-.069,0,0))\u000a self.shape = add(self.shape,translate(hole_screw_terminal,.069,0,0))\u000a\u000aclass screw_terminal_power(part):\u000a #\u000a # On Shore ED555/2DS\u000a # power screw terminal\u000a #\u000a def __init__(self,value=''):\u000a self.value = value\u000a self.pad = [point(0,0,0)]\u000a self.labels = []\u000a #\u000a # pin 1\u000a #\u000a self.shape = translate(pad_screw_terminal,-.069,0,0)\u000a self.pad.append(point(-.069,0,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'G'))\u000a #\u000a # pin 2\u000a #\u000a self.shape = add(self.shape,translate(pad_screw_terminal,.069,0,0))\u000a self.pad.append(point(.069,0,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'V'))\u000a #\u000a # holes\u000a #\u000a self.shape = add(self.shape,translate(hole_screw_terminal,-.069,0,0))\u000a self.shape = add(self.shape,translate(hole_screw_terminal,.069,0,0))\u000a\u000aclass screw_terminal_i0(part):\u000a #\u000a # On Shore ED555/3DS\u000a # i0 screw terminal\u000a #\u000a def __init__(self,value=''):\u000a self.value = value\u000a self.pad = [point(0,0,0)]\u000a self.labels = []\u000a #\u000a # pin 1: Gnd\u000a #\u000a self.shape = translate(pad_screw_terminal,-.138,0,0)\u000a self.pad.append(point(-.138,0,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'Gnd\u005cn1'))\u000a #\u000a # pin 2: data\u000a #\u000a self.shape = add(self.shape,pad_screw_terminal)\u000a self.pad.append(point(0,0,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'data'))\u000a #\u000a # pin 3: V\u000a #\u000a self.shape = add(self.shape,translate(pad_screw_terminal,.138,0,0))\u000a self.pad.append(point(.138,0,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'V'))\u000a #\u000a # holes\u000a #\u000a self.shape = add(self.shape,translate(hole_screw_terminal,-.138,0,0))\u000a self.shape = add(self.shape,hole_screw_terminal)\u000a self.shape = add(self.shape,translate(hole_screw_terminal,.138,0,0))\u000a\u000aclass power_65mm(part):\u000a #\u000a # CUI PJ1-023-SMT\u000a #\u000a def __init__(self,value=''):\u000a self.value = value\u000a self.pad = [point(0,0,0)]\u000a self.labels = []\u000a #\u000a # pin 1: power\u000a #\u000a self.shape = cube(.433,.512,-.047,.047,0,0)\u000a self.pad.append(point(.467,0,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'P'))\u000a #\u000a # pin 2: ground\u000a #\u000a self.shape = add(self.shape,cube(.285,.423,-.189,-.098,0,0))\u000a self.pad.append(point(.354,-.144,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'G'))\u000a #\u000a # pin 3: contact\u000a #\u000a self.shape = add(self.shape,cube(.325,.463,.098,.189,0,0))\u000a self.pad.append(point(.394,.144,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'C'))\u000a #\u000a # solder pads\u000a #\u000a self.shape = add(self.shape,cube(.108,.246,-.169,-.110,0,0))\u000a self.shape = add(self.shape,cube(.069,.207,.110,.169,0,0))\u000a\u000apad_stereo_2_5mm = cube(-.03,.03,-.05,.05,0,0)\u000a\u000aclass stereo_2_5mm(part):\u000a #\u000a # CUI SJ1-2533-SMT\u000a #\u000a def __init__(self,value=''):\u000a self.value = value\u000a self.pad = [point(0,0,0)]\u000a self.labels = []\u000a #\u000a # pin 1: base\u000a #\u000a self.shape = translate(pad_stereo_2_5mm,-.130,-.16,0)\u000a self.pad.append(point(-.130,-.149,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'base'))\u000a #\u000a # pin 2: tip\u000a #\u000a self.shape = add(self.shape,translate(pad_stereo_2_5mm,.197,.15,0))\u000a self.pad.append(point(.197,.141,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'tip'))\u000a #\u000a # pin 3: middle\u000a #\u000a self.shape = add(self.shape,translate(pad_stereo_2_5mm,-.012,-.16,0))\u000a self.pad.append(point(-.012,-.149,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'middle'))\u000a\u000apad_Molex = cube(-.0155,.0155,-.0265,.0265,0,0)\u000apad_Molex_solder = cube(-.055,.055,-.065,.065,0,0)\u000a\u000aclass Molex_serial(part):\u000a #\u000a # Molex 53261-0471\u000a #\u000a def __init__(self,value=''):\u000a self.value = value\u000a self.pad = [point(0,0,0)]\u000a self.labels = []\u000a #\u000a # pin 1: Rx\u000a #\u000a self.shape = translate(pad_Molex,-.075,.064,0)\u000a self.pad.append(point(-.075,.064,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'Rx'))\u000a #\u000a # pin 2: Tx\u000a #\u000a self.shape = add(self.shape,translate(pad_Molex,-.025,.064,0))\u000a self.pad.append(point(-.025,.064,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'Tx'))\u000a #\u000a # pin 3: DTR\u000a #\u000a self.shape = add(self.shape,translate(pad_Molex,.025,.064,0))\u000a self.pad.append(point(.025,.064,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'DTR'))\u000a #\u000a # pin 4: GND\u000a #\u000a self.shape = add(self.shape,translate(pad_Molex,.075,.064,0))\u000a self.pad.append(point(.075,.064,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'GND'))\u000a #\u000a # solder pads\u000a #\u000a self.shape = add(self.shape,translate(pad_Molex_solder,-.16,-.065,0))\u000a self.shape = add(self.shape,translate(pad_Molex_solder,.16,-.065,0))\u000a\u000a#\u000a# switches\u000a#\u000a\u000apad_button_6mm = cube(-.04,.04,-.03,.03,0,0)\u000a\u000aclass button_6mm(part):\u000a # \u000a # Omron 6mm pushbutton\u000a # B3SN-3112P\u000a #\u000a def __init__(self,value=''):\u000a self.value = value\u000a self.pad = [point(0,0,0)]\u000a self.labels = []\u000a #\u000a # left 1\u000a #\u000a self.shape = translate(pad_button_6mm,-.125,.08,0)\u000a self.pad.append(point(-.125,.08,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'L1'))\u000a #\u000a # right 1\u000a #\u000a self.shape = add(self.shape,translate(pad_button_6mm,-.125,-.08,0))\u000a self.pad.append(point(-.125,-.08,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'R1'))\u000a #\u000a # right 2\u000a #\u000a self.shape = add(self.shape,translate(pad_button_6mm,.125,-.08,0))\u000a self.pad.append(point(.125,-.08,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'R2'))\u000a #\u000a # left 2\u000a #\u000a self.shape = add(self.shape,translate(pad_button_6mm,.125,.08,0))\u000a self.pad.append(point(.125,.08,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'L2'))\u000a\u000a#\u000a# crystals and resonators\u000a#\u000a\u000apad_XTAL_EFOBM = cube(-.016,.016,-.085,.085,0,0)\u000a\u000aclass XTAL_EFOBM(part):\u000a #\u000a # Panasonic EFOBM series\u000a #\u000a def __init__(self,value=''):\u000a self.value = value\u000a self.pad = [point(0,0,0)]\u000a self.labels = []\u000a #\u000a # left\u000a #\u000a self.shape = translate(pad_XTAL_EFOBM,-.053,0,0)\u000a self.pad.append(point(-.053,0,0))\u000a #\u000a # ground\u000a #\u000a self.shape = add(self.shape,translate(pad_XTAL_EFOBM,0,0,0))\u000a self.pad.append(point(0,0,0))\u000a #\u000a # right\u000a #\u000a self.shape = add(self.shape,translate(pad_XTAL_EFOBM,.053,0,0))\u000a self.pad.append(point(.053,0,0))\u000a\u000apad_XTAL_NX5032GA = cube(-.039,.039,-.047,.047,0,0)\u000a.079\u000a\u000aclass XTAL_NX5032GA(part):\u000a #\u000a # NDK NX5032GA\u000a #\u000a def __init__(self,value=''):\u000a self.value = value\u000a self.pad = [point(0,0,0)]\u000a self.labels = []\u000a #\u000a # left\u000a #\u000a self.shape = translate(pad_XTAL_NX5032GA,-.079,0,0)\u000a self.pad.append(point(-.079,0,0))\u000a #\u000a # right\u000a #\u000a self.shape = add(self.shape,translate(pad_XTAL_NX5032GA,.079,0,0))\u000a self.pad.append(point(.079,0,0))\u000a\u000apad_XTAL_CSM_7 = cube(-.108,.108,-.039,.039,0,0)\u000a\u000aclass XTAL_CSM_7(part):\u000a #\u000a # ECS CSM-7 series\u000a #\u000a def __init__(self,value=''):\u000a self.value = value\u000a self.pad = [point(0,0,0)]\u000a self.labels = []\u000a #\u000a # left\u000a #\u000a self.shape = translate(pad_XTAL_CSM_7,-.187,0,0)\u000a self.pad.append(point(-.187,0,0))\u000a #\u000a # right\u000a #\u000a self.shape = add(self.shape,translate(pad_XTAL_CSM_7,.187,0,0))\u000a self.pad.append(point(.187,0,0))\u000a\u000a#\u000a# diodes, transistors, regulators\u000a#\u000a\u000aclass D_1206(part):\u000a #\u000a # 1206 diode\u000a #\u000a def __init__(self,value=''):\u000a self.value = value\u000a self.pad = [point(0,0,0)]\u000a self.labels = []\u000a #\u000a # anode\u000a #\u000a self.shape = translate(pad_1206,-.06,0,0)\u000a self.pad.append(point(-.055,0,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'A'))\u000a #\u000a # cathode\u000a #\u000a self.shape = add(self.shape,translate(pad_1206,.06,0,0))\u000a self.pad.append(point(.055,0,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'C'))\u000a\u000aclass LED_1206(part):\u000a #\u000a # 1206 LED\u000a #\u000a def __init__(self,value=''):\u000a self.value = value\u000a self.pad = [point(0,0,0)]\u000a self.labels = []\u000a #\u000a # anode\u000a #\u000a self.shape = translate(pad_1206,-.06,0,0)\u000a self.pad.append(point(-.055,0,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'A'))\u000a #\u000a # cathode\u000a #\u000a self.shape = add(self.shape,translate(pad_1206,.06,0,0))\u000a self.pad.append(point(.055,0,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'C'))\u000a\u000apad_RGB = cube(-.02,.02,-.029,.029,0,0)\u000a\u000aclass LED_RGB(part):\u000a #\u000a # CREE CLV1A-FKB\u000a #\u000a def __init__(self,value=''):\u000a self.value = value\u000a self.x = 0\u000a self.y = 0\u000a self.z = 0\u000a self.pad = [point(0,0,0)]\u000a self.labels = []\u000a dx = .029\u000a dy = .059\u000a #\u000a # pin 1: red\u000a #\u000a self.shape = translate(pad_RGB,-dx,-dy,0)\u000a self.shape = add(self.shape,cylinder(-dx,-dy-.029,0,0,.02))\u000a self.pad.append(point(-dx,-dy,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'R'))\u000a #\u000a # pin 2: anode\u000a #\u000a self.shape = add(self.shape,translate(pad_RGB,dx,-dy,0))\u000a self.pad.append(point(dx,-dy,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'A'))\u000a #\u000a # pin 3: blue\u000a #\u000a self.shape = add(self.shape,translate(pad_RGB,dx,dy,0))\u000a self.pad.append(point(dx,dy,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'B'))\u000a #\u000a # pin 4: green\u000a #\u000a self.shape = add(self.shape,translate(pad_RGB,-dx,dy,0))\u000a self.pad.append(point(-dx,dy,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'G'))\u000a\u000aclass phototransistor_1206(part):\u000a #\u000a # 1206 phototransistor\u000a # OPTEK 520,521\u000a #\u000a def __init__(self,value=''):\u000a self.value = value\u000a self.pad = [point(0,0,0)]\u000a self.labels = []\u000a #\u000a # collector\u000a #\u000a self.shape = translate(pad_1206,-.06,0,0)\u000a self.pad.append(point(-.055,0,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'C'))\u000a #\u000a # emitter\u000a #\u000a self.shape = add(self.shape,translate(pad_1206,.06,0,0))\u000a self.pad.append(point(.055,0,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'E'))\u000a\u000apad_PLCC2 = cube(-.029,.029,-.059,.059,0,0)\u000a\u000aclass phototransistor_PLCC2(part):\u000a #\u000a # PLCC2 phototransistor\u000a # Optek OP580\u000a #\u000a def __init__(self,value=''):\u000a self.value = value\u000a self.pad = [point(0,0,0)]\u000a self.labels = []\u000a #\u000a # collector\u000a #\u000a self.shape = translate(pad_PLCC2,-.065,0,0)\u000a self.pad.append(point(-.065,0,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'C'))\u000a #\u000a # emitter\u000a #\u000a self.shape = add(self.shape,translate(pad_PLCC2,.065,0,0))\u000a self.pad.append(point(.065,0,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'E'))\u000a\u000apad_SOD_123 = cube(-.02,.02,-.024,.024,0,0)\u000a\u000aclass D_SOD_123(part):\u000a #\u000a # SOD-123 diode\u000a #\u000a def __init__(self,value=''):\u000a self.value = value\u000a self.pad = [point(0,0,0)]\u000a self.labels = []\u000a #\u000a # anode\u000a #\u000a self.shape = translate(pad_SOD_123,-.07,0,0)\u000a self.pad.append(point(-.07,0,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'A'))\u000a #\u000a # cathode\u000a #\u000a self.shape = add(self.shape,translate(pad_SOD_123,.07,0,0))\u000a self.pad.append(point(.07,0,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'C'))\u000a\u000apad_SOT23 = cube(-.02,.02,-.012,.012,0,0)\u000a\u000aclass NMOSFET_SOT23(part):\u000a #\u000a # Fairchild NDS355AN\u000a #\u000a def __init__(self,value=''):\u000a self.value = value\u000a self.x = 0\u000a self.y = 0\u000a self.z = 0\u000a self.pad = [point(0,0,0)]\u000a self.labels = []\u000a #\u000a # pin 1: gate\u000a #\u000a self.shape = translate(pad_SOT23,.045,-.0375,0)\u000a self.pad.append(point(.045,-.0375,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'G'))\u000a #\u000a # pin 2: source\u000a #\u000a self.shape = add(self.shape,translate(pad_SOT23,.045,.0375,0))\u000a self.pad.append(point(.045,.0375,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'S'))\u000a #\u000a # pin 3: drain\u000a #\u000a self.shape = add(self.shape,translate(pad_SOT23,-.045,0,0))\u000a self.pad.append(point(-.045,0,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'D'))\u000a\u000aclass PMOSFET_SOT23(part):\u000a #\u000a # Fairchild NDS356AP\u000a #\u000a def __init__(self,value=''):\u000a self.value = value\u000a self.x = 0\u000a self.y = 0\u000a self.z = 0\u000a self.pad = [point(0,0,0)]\u000a self.labels = []\u000a #\u000a # pin 1: gate\u000a #\u000a self.shape = translate(pad_SOT23,-.045,-.0375,0)\u000a self.pad.append(point(-.045,-.0375,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'G'))\u000a #\u000a # pin 2: source\u000a #\u000a self.shape = add(self.shape,translate(pad_SOT23,-.045,.0375,0))\u000a self.pad.append(point(-.045,.0375,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'S'))\u000a #\u000a # pin 3: drain\u000a #\u000a self.shape = add(self.shape,translate(pad_SOT23,.045,0,0))\u000a self.pad.append(point(.045,0,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'D'))\u000a\u000aclass NMOSFET_TO252AA(part):\u000a #\u000a # Fairchild RFD16N05LSM\u000a #\u000a def __init__(self,value=''):\u000a self.value = value\u000a self.x = 0\u000a self.y = 0\u000a self.z = 0\u000a self.pad = [point(0,0,0)]\u000a self.labels = []\u000a #\u000a # pin 1: gate\u000a #\u000a self.shape = translate(cube(-.031,.031,-.059,.059,0,0),-.090,0,0)\u000a self.pad.append(point(-.090,0,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'G 1'))\u000a #\u000a # pin 2: source\u000a #\u000a self.shape = add(self.shape,translate(cube(-.031,.031,-.059,.059,0,0),.090,0,0))\u000a self.pad.append(point(.090,0,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'S'))\u000a #\u000a # pin 3: drain\u000a #\u000a self.shape = add(self.shape,translate(cube(-.132,.132,-.132,.132,0,0),0,.261,0))\u000a self.pad.append(point(0,.261,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'D'))\u000a\u000aclass regulator_SOT23(part):\u000a def __init__(self,value=''):\u000a self.value = value\u000a self.x = 0\u000a self.y = 0\u000a self.z = 0\u000a self.pad = [point(0,0,0)]\u000a self.labels = []\u000a #\u000a # pin 1: output\u000a #\u000a self.shape = translate(pad_SOT23,-.045,.0375,0)\u000a self.pad.append(point(-.045,.0375,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'out'))\u000a #\u000a # pin 2: input\u000a #\u000a self.shape = add(self.shape,translate(pad_SOT23,-.045,-.0375,0))\u000a self.pad.append(point(-.045,-.0375,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'in'))\u000a #\u000a # pin 3: ground\u000a #\u000a self.shape = add(self.shape,translate(pad_SOT23,.045,0,0))\u000a self.pad.append(point(.045,0,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'gnd'))\u000a\u000apad_SOT223 = cube(-.02,.02,-.03,.03,0,0)\u000apad_SOT223_ground = cube(-.065,.065,-.03,.03,0,0)\u000a\u000aclass regulator_SOT223(part):\u000a def __init__(self,value=''):\u000a self.value = value\u000a self.x = 0\u000a self.y = 0\u000a self.z = 0\u000a self.pad = [point(0,0,0)]\u000a self.labels = []\u000a #\u000a # pin 1: input\u000a #\u000a self.shape = translate(pad_SOT223,-.09,-.12,0)\u000a self.pad.append(point(-.09,-.12,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'1I'))\u000a #\u000a # pin 2: ground\u000a #\u000a self.shape = add(self.shape,translate(pad_SOT223,0,-.12,0))\u000a self.pad.append(point(0,-.12,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'G'))\u000a #\u000a # pin 3: output\u000a #\u000a self.shape = add(self.shape,translate(pad_SOT223,.09,-.12,0))\u000a self.pad.append(point(.09,-.12,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'O'))\u000a #\u000a # pin 4: ground\u000a #\u000a self.shape = add(self.shape,translate(pad_SOT223_ground,0,.12,0))\u000a self.pad.append(point(0,.12,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'G'))\u000a\u000apad_SM8 = cube(-.035,.035,-.016,.016,0,0)\u000a\u000aclass H_bridge_SM8(part):\u000a #\u000a # Zetex ZXMHC3A01T8\u000a #\u000a def __init__(self,value=''):\u000a self.value = value\u000a self.x = 0\u000a self.y = 0\u000a self.z = 0\u000a self.pad = [point(0,0,0)]\u000a self.labels = []\u000a d = .13\u000a #\u000a # pin 1: G3 (right N gate)\u000a #\u000a self.shape = translate(pad_SM8,-d,.09,0)\u000a self.shape = add(self.shape,cylinder(-d-.035,.09,0,0,.016))\u000a self.pad.append(point(-d,.09,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'GRN'))\u000a #\u000a # pin 2: S2 S3 (N source)\u000a #\u000a self.shape = add(self.shape,translate(pad_SM8,-d,.03,0))\u000a self.pad.append(point(-d,.03,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'SN'))\u000a #\u000a # pin 3: G2 (left N gate)\u000a #\u000a self.shape = add(self.shape,translate(pad_SM8,-d,-.03,0))\u000a self.pad.append(point(-d,-.03,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'GLN'))\u000a #\u000a # pin 4: G1 (left P gate)\u000a #\u000a self.shape = add(self.shape,translate(pad_SM8,-d,-.09,0))\u000a self.pad.append(point(-d,-.09,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'GLP'))\u000a #\u000a # pin 5: D1 D2 (left drain)\u000a #\u000a self.shape = add(self.shape,translate(pad_SM8,d,-.09,0))\u000a self.pad.append(point(d,-.09,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'DL'))\u000a #\u000a # pin 6: S1 S4 (P source)\u000a #\u000a self.shape = add(self.shape,translate(pad_SM8,d,-.03,0))\u000a self.pad.append(point(d,-.03,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'SP'))\u000a #\u000a # pin 7: D3 D4 (right drain)\u000a #\u000a self.shape = add(self.shape,translate(pad_SM8,d,.03,0))\u000a self.pad.append(point(d,.03,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'DR'))\u000a #\u000a # pin 8: G4 (right N gate)\u000a #\u000a self.shape = add(self.shape,translate(pad_SM8,d,.09,0))\u000a self.pad.append(point(d,.09,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'GRP'))\u000a\u000a#\u000a# ICs\u000a#\u000a\u000apad_SOT23_5 = cube(-.01,.01,-.02,.02,0,0)\u000a\u000aclass op_amp_SOT23_5(part):\u000a def __init__(self,value=''):\u000a self.value = value\u000a self.x = 0\u000a self.y = 0\u000a self.z = 0\u000a self.pad = [point(0,0,0)]\u000a self.labels = []\u000a #\u000a # pin 1: output\u000a #\u000a self.shape = translate(pad_SOT23_5,-.0375,-.045,0)\u000a self.pad.append(point(-.0375,-.045,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'O'))\u000a #\u000a # pin 2: V-\u000a #\u000a self.shape = add(self.shape,translate(pad_SOT23_5,0,-.045,0))\u000a self.pad.append(point(0,-.045,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'V-'))\u000a #\u000a # pin 3: I+\u000a #\u000a self.shape = add(self.shape,translate(pad_SOT23_5,.0375,-.045,0))\u000a self.pad.append(point(.0375,-.045,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'I+'))\u000a #\u000a # pin 4: I-\u000a #\u000a self.shape = add(self.shape,translate(pad_SOT23_5,.0375,.045,0))\u000a self.pad.append(point(.0375,.045,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'I-'))\u000a #\u000a # pin 5: V+\u000a #\u000a self.shape = add(self.shape,translate(pad_SOT23_5,-.0375,.045,0))\u000a self.pad.append(point(-.0375,.045,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'V+'))\u000a\u000apad_SOICN = cube(-.035,.035,-.015,.015,0,0)\u000a\u000aclass op_amp_SOICN(part):\u000a def __init__(self,value=''):\u000a self.value = value\u000a self.pad = [point(0,0,0)]\u000a self.labels = []\u000a #\u000a # pin 1: A out\u000a #\u000a self.shape = translate(pad_SOICN,-.12,.075,0)\u000a self.pad.append(point(-.12,.075,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'1 Ao'))\u000a #\u000a # pin 2: A-\u000a #\u000a self.shape = add(self.shape,translate(pad_SOICN,-.12,.025,0))\u000a self.pad.append(point(-.12,.025,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'A-'))\u000a #\u000a # pin 3: A+\u000a #\u000a self.shape = add(self.shape,translate(pad_SOICN,-.12,-.025,0))\u000a self.pad.append(point(-.12,-.025,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'A+'))\u000a #\u000a # pin 4: V-\u000a #\u000a self.shape = add(self.shape,translate(pad_SOICN,-.12,-.075,0))\u000a self.pad.append(point(-.12,-.075,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'V-'))\u000a #\u000a # pin 5: B+\u000a #\u000a self.shape = add(self.shape,translate(pad_SOICN,.12,-.075,0))\u000a self.pad.append(point(.12,-.075,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'B+'))\u000a #\u000a # pin 6: B-\u000a #\u000a self.shape = add(self.shape,translate(pad_SOICN,.12,-.025,0))\u000a self.pad.append(point(.12,-.025,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'B-'))\u000a #\u000a # pin 7: B out\u000a #\u000a self.shape = add(self.shape,translate(pad_SOICN,.12,.025,0))\u000a self.pad.append(point(.12,.025,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'Bo'))\u000a #\u000a # pin 8: V+\u000a #\u000a self.shape = add(self.shape,translate(pad_SOICN,.12,.075,0))\u000a self.pad.append(point(.12,.075,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'V+'))\u000a\u000aTSSOP_pad_width = 0.040\u000aTSSOP_pad_height = 0.011\u000aTSSOP_pad_dy = 0.026\u000aTSSOP_pad_dx = 0.120\u000apad_TSSOP = cube(-TSSOP_pad_width/2.0,TSSOP_pad_width/2.0,-TSSOP_pad_height/2.0,TSSOP_pad_height/2.0,0,0)\u000a\u000aclass TRC102(part):\u000a #\u000a # RFM TRC102 ISM transceiver\u000a #\u000a def __init__(self,value=''):\u000a self.value = value\u000a self.pad = [point(0,0,0)]\u000a self.labels = []\u000a #\u000a # pin 1: SDI\u000a #\u000a self.shape = translate(pad_TSSOP,-TSSOP_pad_dx,3.5*TSSOP_pad_dy,0)\u000a self.pad.append(point(-TSSOP_pad_dx,3.5*TSSOP_pad_dy,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'1 SDI'))\u000a #\u000a # pin 2: SCK\u000a #\u000a self.shape = add(self.shape,translate(pad_TSSOP,-TSSOP_pad_dx,2.5*TSSOP_pad_dy,0))\u000a self.pad.append(point(-TSSOP_pad_dx,2.5*TSSOP_pad_dy,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'SCK'))\u000a #\u000a # pin 3: nCS\u000a #\u000a self.shape = add(self.shape,translate(pad_TSSOP,-TSSOP_pad_dx,1.5*TSSOP_pad_dy,0))\u000a self.pad.append(point(-TSSOP_pad_dx,1.5*TSSOP_pad_dy,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'nCS'))\u000a #\u000a # pin 4: SDO\u000a #\u000a self.shape = add(self.shape,translate(pad_TSSOP,-TSSOP_pad_dx,0.5*TSSOP_pad_dy,0))\u000a self.pad.append(point(-TSSOP_pad_dx,0.5*TSSOP_pad_dy,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'SDO'))\u000a #\u000a # pin 5: IRQ\u000a #\u000a self.shape = add(self.shape,translate(pad_TSSOP,-TSSOP_pad_dx,-0.5*TSSOP_pad_dy,0))\u000a self.pad.append(point(-TSSOP_pad_dx,-0.5*TSSOP_pad_dy,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'IRQ'))\u000a #\u000a # pin 6: DATA/nFSEL\u000a #\u000a self.shape = add(self.shape,translate(pad_TSSOP,-TSSOP_pad_dx,-1.5*TSSOP_pad_dy,0))\u000a self.pad.append(point(-TSSOP_pad_dx,-1.5*TSSOP_pad_dy,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'DATA'))\u000a #\u000a # pin 7: CR\u000a #\u000a self.shape = add(self.shape,translate(pad_TSSOP,-TSSOP_pad_dx,-2.5*TSSOP_pad_dy,0))\u000a self.pad.append(point(-TSSOP_pad_dx,-2.5*TSSOP_pad_dy,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'CR'))\u000a #\u000a # pin 8: CLKOUT\u000a #\u000a self.shape = add(self.shape,translate(pad_TSSOP,-TSSOP_pad_dx,-3.5*TSSOP_pad_dy,0))\u000a self.pad.append(point(-TSSOP_pad_dx,-3.5*TSSOP_pad_dy,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'CLKOUT'))\u000a #\u000a # pin 9: Xtal/Ref\u000a #\u000a self.shape = add(self.shape,translate(pad_TSSOP,TSSOP_pad_dx,-3.5*TSSOP_pad_dy,0))\u000a self.pad.append(point(TSSOP_pad_dx,-3.5*TSSOP_pad_dy,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'Xtal'))\u000a #\u000a # pin 10: RESET\u000a #\u000a self.shape = add(self.shape,translate(pad_TSSOP,TSSOP_pad_dx,-2.5*TSSOP_pad_dy,0))\u000a self.pad.append(point(TSSOP_pad_dx,-2.5*TSSOP_pad_dy,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'RESET'))\u000a #\u000a # pin 11: GND\u000a #\u000a self.shape = add(self.shape,translate(pad_TSSOP,TSSOP_pad_dx,-1.5*TSSOP_pad_dy,0))\u000a self.pad.append(point(TSSOP_pad_dx,-1.5*TSSOP_pad_dy,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'GND'))\u000a #\u000a # pin 12: RF_P\u000a #\u000a self.shape = add(self.shape,translate(pad_TSSOP,TSSOP_pad_dx,-0.5*TSSOP_pad_dy,0))\u000a self.pad.append(point(TSSOP_pad_dx,-0.5*TSSOP_pad_dy,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'RF_P'))\u000a #\u000a # pin 13: RF_N\u000a #\u000a self.shape = add(self.shape,translate(pad_TSSOP,TSSOP_pad_dx,0.5*TSSOP_pad_dy,0))\u000a self.pad.append(point(TSSOP_pad_dx,0.5*TSSOP_pad_dy,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'RF_N'))\u000a #\u000a # pin 14: VDD\u000a #\u000a self.shape = add(self.shape,translate(pad_TSSOP,TSSOP_pad_dx,1.5*TSSOP_pad_dy,0))\u000a self.pad.append(point(TSSOP_pad_dx,1.5*TSSOP_pad_dy,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'VDD'))\u000a #\u000a # pin 15: RSSIA\u000a #\u000a self.shape = add(self.shape,translate(pad_TSSOP,TSSOP_pad_dx,2.5*TSSOP_pad_dy,0))\u000a self.pad.append(point(TSSOP_pad_dx,2.5*TSSOP_pad_dy,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'RSSIA'))\u000a #\u000a # pin 16: nINT/DDET\u000a #\u000a self.shape = add(self.shape,translate(pad_TSSOP,TSSOP_pad_dx,3.5*TSSOP_pad_dy,0))\u000a self.pad.append(point(TSSOP_pad_dx,3.5*TSSOP_pad_dy,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'nINT'))\u000a\u000apad_SOIC = cube(-.041,.041,-.015,.015,0,0)\u000a\u000aclass ATtiny45_SOIC(part):\u000a def __init__(self,value=''):\u000a self.value = value\u000a self.pad = [point(0,0,0)]\u000a self.labels = []\u000a #\u000a # pin 1: PB5/dW/ADC0/-RESET/PCINT5\u000a #\u000a self.shape = translate(pad_SOIC,-.14,.075,0)\u000a self.shape = add(self.shape,cylinder(-.183,.075,0,0,.015))\u000a self.pad.append(point(-.14,.075,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'RST'))\u000a #\u000a # pin 2: PB3/ADC3/-OC1B/CLKI/XTAL1/PCINT3\u000a #\u000a self.shape = add(self.shape,translate(pad_SOIC,-.14,.025,0))\u000a self.pad.append(point(-.14,.025,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'PB3'))\u000a #\u000a # pin 3: PB4/ADC2/OC1B/CLKO/XTAL2/PCINT4\u000a #\u000a self.shape = add(self.shape,translate(pad_SOIC,-.14,-.025,0))\u000a self.pad.append(point(-.14,-.025,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'PB4'))\u000a #\u000a # pin 4: GND\u000a #\u000a self.shape = add(self.shape,translate(pad_SOIC,-.14,-.075,0))\u000a self.pad.append(point(-.14,-.075,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'GND'))\u000a #\u000a # pin 5: PB0/MOSI/DI/SDA/AIN0/OC0A/-OC1A/AREF/PCINT0\u000a #\u000a self.shape = add(self.shape,translate(pad_SOIC,.14,-.075,0))\u000a self.pad.append(point(.14,-.075,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'PB0'))\u000a #\u000a # pin 6: PB1/MISO/DO/AIN1/OC0B/OC1A/PCINT1\u000a #\u000a self.shape = add(self.shape,translate(pad_SOIC,.14,-.025,0))\u000a self.pad.append(point(.14,-.025,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'PB1'))\u000a #\u000a # pin 7: PB2/SCK/USCK/SCL/ADC1/T0/INT0/PCINT2\u000a #\u000a self.shape = add(self.shape,translate(pad_SOIC,.14,.025,0))\u000a self.pad.append(point(.14,.025,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'PB2'))\u000a #\u000a # pin 8: VCC\u000a #\u000a self.shape = add(self.shape,translate(pad_SOIC,.14,.075,0))\u000a self.pad.append(point(.14,.075,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'VCC'))\u000a\u000aclass ATtiny44_SOICN(part):\u000a def __init__(self,value=''):\u000a self.value = value\u000a self.pad = [point(0,0,0)]\u000a self.labels = []\u000a #\u000a # pin 1: VCC\u000a #\u000a self.shape = translate(pad_SOICN,-.12,.15,0)\u000a self.shape = add(self.shape,cylinder(-.155,.15,0,0,.015))\u000a self.pad.append(point(-.12,.15,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'VCC'))\u000a #\u000a # pin 2: PB0/XTAL1/PCINT8\u000a #\u000a self.shape = add(self.shape,translate(pad_SOICN,-.12,.1,0))\u000a self.pad.append(point(-.12,.1,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'PB0'))\u000a #\u000a # pin 3: PB1/XTAL2/PCINT9\u000a #\u000a self.shape = add(self.shape,translate(pad_SOICN,-.12,.050,0))\u000a self.pad.append(point(-.12,.05,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'PB1'))\u000a #\u000a # pin 4: PB3/dW/-RESET/PCINT11\u000a #\u000a self.shape = add(self.shape,translate(pad_SOICN,-.12,0,0))\u000a self.pad.append(point(-.12,0,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'PB3'))\u000a #\u000a # pin 5: PB2/CKOUT/OC0A/INT0/PCINT10\u000a #\u000a self.shape = add(self.shape,translate(pad_SOICN,-.12,-.05,0))\u000a self.pad.append(point(-.12,-.05,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'PB2'))\u000a #\u000a # pin 6: PA7/ADC7/OC0B/ICP/PCINT7\u000a #\u000a self.shape = add(self.shape,translate(pad_SOICN,-.12,-.1,0))\u000a self.pad.append(point(-.12,-.1,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'PA7'))\u000a #\u000a # pin 7: PA6/ADC6/MOSI/SDA/OC1A/PCINT6\u000a #\u000a self.shape = add(self.shape,translate(pad_SOICN,-.12,-.15,0))\u000a self.pad.append(point(-.12,-.15,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'PA6'))\u000a #\u000a # pin 8: PA5/ADC5/DO/MISO/OC1B/PCINT5\u000a #\u000a self.shape = add(self.shape,translate(pad_SOICN,.12,-.15,0))\u000a self.pad.append(point(.12,-.15,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'PA5'))\u000a #\u000a # pin 9: PA4/ADC4/USCK/SCL/T1/PCINT4\u000a #\u000a self.shape = add(self.shape,translate(pad_SOICN,.12,-.1,0))\u000a self.pad.append(point(.12,-.1,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'PA4'))\u000a #\u000a # pin 10: PA3/ADC3/T0/PCINT3\u000a #\u000a self.shape = add(self.shape,translate(pad_SOICN,.12,-.05,0))\u000a self.pad.append(point(.12,-.05,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'PA3'))\u000a #\u000a # pin 11: PA2/ADC2/AIN1/PCINT2\u000a #\u000a self.shape = add(self.shape,translate(pad_SOICN,.12,0,0))\u000a self.pad.append(point(.12,0,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'PA2'))\u000a #\u000a # pin 12: PA1/ADC1/AIN0/PCINT1\u000a #\u000a self.shape = add(self.shape,translate(pad_SOICN,.12,.050,0))\u000a self.pad.append(point(.12,.05,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'PA1'))\u000a #\u000a # pin 13: PA0/ADC0/AREF/PCINT0\u000a #\u000a self.shape = add(self.shape,translate(pad_SOICN,.12,.1,0))\u000a self.pad.append(point(.12,.1,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'PA0'))\u000a #\u000a # pin 14: GND\u000a #\u000a self.shape = add(self.shape,translate(pad_SOICN,.12,.15,0))\u000a self.pad.append(point(.12,.15,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'GND'))\u000a\u000apad_TQFP_h = cube(-.025,.025,-.008,.008,0,0)\u000apad_TQFP_v = cube(-.008,.008,-.025,.025,0,0)\u000a\u000aclass ATmega88_TQFP(part):\u000a def __init__(self,value=''):\u000a c = .18\u000a d = .031\u000a s = 0.004\u000a self.value = value\u000a self.pad = [point(0,0,0)]\u000a self.labels = []\u000a #\u000a # pin 1: PD3/PCINT19/OC2B/INT1\u000a #\u000a self.shape = translate(pad_TQFP_h,-c,3.5*d,0)\u000a self.pad.append(point(-c,3.5*d,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'1 PD3',line=s))\u000a #\u000a # pin 2: PD4/PCINT20/XCK/T0\u000a #\u000a self.shape = add(self.shape,translate(pad_TQFP_h,-c,2.5*d,0))\u000a self.pad.append(point(-c,2.5*d,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'PD4',line=s))\u000a #\u000a # pin 3: GND\u000a #\u000a self.shape = add(self.shape,translate(pad_TQFP_h,-c,1.5*d,0))\u000a self.pad.append(point(-c,1.5*d,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'GND',line=s))\u000a #\u000a # pin 4: VCC\u000a #\u000a self.shape = add(self.shape,translate(pad_TQFP_h,-c,.5*d,0))\u000a self.pad.append(point(-c,.5*d,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'VCC',line=s))\u000a #\u000a # pin 5: GND\u000a #\u000a self.shape = add(self.shape,translate(pad_TQFP_h,-c,-.5*d,0))\u000a self.pad.append(point(-c,-.5*d,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'GND',line=s))\u000a #\u000a # pin 6: VCC\u000a #\u000a self.shape = add(self.shape,translate(pad_TQFP_h,-c,-1.5*d,0))\u000a self.pad.append(point(-c,-1.5*d,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'VCC',line=s))\u000a #\u000a # pin 7: PB6/PCINT6/XTAL1/TOSC1\u000a #\u000a self.shape = add(self.shape,translate(pad_TQFP_h,-c,-2.5*d,0))\u000a self.pad.append(point(-c,-2.5*d,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'PB6',line=s))\u000a #\u000a # pin 8: PB7/PCINT7/XTAL2/TOSC2\u000a #\u000a self.shape = add(self.shape,translate(pad_TQFP_h,-c,-3.5*d,0))\u000a self.pad.append(point(-c,-3.5*d,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'PB7',line=s))\u000a #\u000a # pin 9: PD5/PCINT21/OC0B/T1\u000a #\u000a self.shape = add(self.shape,translate(pad_TQFP_v,-3.5*d,-c,0))\u000a self.pad.append(point(-3.5*d,-c,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'PD5',angle=90,line=s))\u000a #\u000a # pin 10: PD6/PCINT22/OC0A/AIN0\u000a #\u000a self.shape = add(self.shape,translate(pad_TQFP_v,-2.5*d,-c,0))\u000a self.pad.append(point(-2.5*d,-c,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'PD6',angle=90,line=s))\u000a #\u000a # pin 11: PD7/PCINT23/AIN1\u000a #\u000a self.shape = add(self.shape,translate(pad_TQFP_v,-1.5*d,-c,0))\u000a self.pad.append(point(-1.5*d,-c,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'PD7',angle=90,line=s))\u000a #\u000a # pin 12: PB0/PCINT0/CLKO/ICP1\u000a #\u000a self.shape = add(self.shape,translate(pad_TQFP_v,-.5*d,-c,0))\u000a self.pad.append(point(-.5*d,-c,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'PB0',angle=90,line=s))\u000a #\u000a # pin 13: PB1/PCINT1/OC1A\u000a #\u000a self.shape = add(self.shape,translate(pad_TQFP_v,.5*d,-c,0))\u000a self.pad.append(point(.5*d,-c,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'PB1',angle=90,line=s))\u000a #\u000a # pin 14: PB2/PCINT2/-SS/OC1B\u000a #\u000a self.shape = add(self.shape,translate(pad_TQFP_v,1.5*d,-c,0))\u000a self.pad.append(point(1.5*d,-c,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'PB2',angle=90,line=s))\u000a #\u000a # pin 15: PB3/PCINT3/OC2A/MOSI\u000a #\u000a self.shape = add(self.shape,translate(pad_TQFP_v,2.5*d,-c,0))\u000a self.pad.append(point(2.5*d,-c,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'PB3',angle=90,line=s))\u000a #\u000a # pin 16: PB4/PCINT4/MISO\u000a #\u000a self.shape = add(self.shape,translate(pad_TQFP_v,3.5*d,-c,0))\u000a self.pad.append(point(3.5*d,-c,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'PB4',angle=90,line=s))\u000a #\u000a # pin 17: PB5/SCK/PCINT5\u000a #\u000a self.shape = add(self.shape,translate(pad_TQFP_h,c,-3.5*d,0))\u000a self.pad.append(point(c,-3.5*d,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'PB5',line=s))\u000a #\u000a # pin 18: AVCC\u000a #\u000a self.shape = add(self.shape,translate(pad_TQFP_h,c,-2.5*d,0))\u000a self.pad.append(point(c,-2.5*d,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'AVCC',line=s))\u000a #\u000a # pin 19: ADC6\u000a #\u000a self.shape = add(self.shape,translate(pad_TQFP_h,c,-1.5*d,0))\u000a self.pad.append(point(c,-1.5*d,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'ADC6',line=s))\u000a #\u000a # pin 20: AREF\u000a #\u000a self.shape = add(self.shape,translate(pad_TQFP_h,c,-.5*d,0))\u000a self.pad.append(point(c,-.5*d,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'AREF',line=s))\u000a #\u000a # pin 21: GND\u000a #\u000a self.shape = add(self.shape,translate(pad_TQFP_h,c,.5*d,0))\u000a self.pad.append(point(c,.5*d,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'GND',line=s))\u000a #\u000a # pin 22: ADC7\u000a #\u000a self.shape = add(self.shape,translate(pad_TQFP_h,c,1.5*d,0))\u000a self.pad.append(point(c,1.5*d,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'ADC7',line=s))\u000a #\u000a # pin 23: PC0/ADC0/PCINT8\u000a #\u000a self.shape = add(self.shape,translate(pad_TQFP_h,c,2.5*d,0))\u000a self.pad.append(point(c,2.5*d,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'PC0',line=s))\u000a #\u000a # pin 24: PC1/ADC1/PCINT9\u000a #\u000a self.shape = add(self.shape,translate(pad_TQFP_h,c,3.5*d,0))\u000a self.pad.append(point(c,3.5*d,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'PC1',line=s))\u000a #\u000a # pin 25: PC2/ADC2/PCINT10\u000a #\u000a self.shape = add(self.shape,translate(pad_TQFP_v,3.5*d,c,0))\u000a self.pad.append(point(3.5*d,c,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'PC2',angle=90,line=s))\u000a #\u000a # pin 26: PC3/ADC3/PCINT11\u000a #\u000a self.shape = add(self.shape,translate(pad_TQFP_v,2.5*d,c,0))\u000a self.pad.append(point(2.5*d,c,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'PC3',angle=90,line=s))\u000a #\u000a # pin 27: PC4/ADC4/SDA/PCINT12\u000a #\u000a self.shape = add(self.shape,translate(pad_TQFP_v,1.5*d,c,0))\u000a self.pad.append(point(1.5*d,c,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'PC4',angle=90,line=s))\u000a #\u000a # pin 28: PC5/ADC5/SCL/PCINT13\u000a #\u000a self.shape = add(self.shape,translate(pad_TQFP_v,.5*d,c,0))\u000a self.pad.append(point(.5*d,c,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'PC5',angle=90,line=s))\u000a #\u000a # pin 29: PC6/-RESET/PCINT14\u000a #\u000a self.shape = add(self.shape,translate(pad_TQFP_v,-.5*d,c,0))\u000a self.pad.append(point(-.5*d,c,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'PC6',angle=90,line=s))\u000a #\u000a # pin 30: PD0/RXD/PCINT16\u000a #\u000a self.shape = add(self.shape,translate(pad_TQFP_v,-1.5*d,c,0))\u000a self.pad.append(point(-1.5*d,c,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'PD0',angle=90,line=s))\u000a #\u000a # pin 31: PD1/TXD/PCINT17\u000a #\u000a self.shape = add(self.shape,translate(pad_TQFP_v,-2.5*d,c,0))\u000a self.pad.append(point(-2.5*d,c,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'PD1',angle=90,line=s))\u000a #\u000a # pin 32: PD2/INT0/PCINT18\u000a #\u000a self.shape = add(self.shape,translate(pad_TQFP_v,-3.5*d,c,0))\u000a self.pad.append(point(-3.5*d,c,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'PD2',angle=90,line=s))\u000a\u000aclass ATmega644_TQFP(part):\u000a def __init__(self,value=''):\u000a c = .235\u000a d = .031\u000a self.value = value\u000a self.pad = [point(0,0,0)]\u000a self.labels = []\u000a #\u000a # pin 1: PB5/PCINT13/MOSI\u000a #\u000a self.shape = translate(pad_TQFP_h,-c,5*d,0)\u000a self.pad.append(point(-c,5*d,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'*MOSI (1)'))\u000a #\u000a # pin 2: PB6/PCINT14/MISO\u000a #\u000a self.shape = add(self.shape,translate(pad_TQFP_h,-c,4*d,0))\u000a self.pad.append(point(-c,4*d,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'MISO'))\u000a #\u000a # pin 3: PB7/PCINT15/SCK\u000a #\u000a self.shape = add(self.shape,translate(pad_TQFP_h,-c,3*d,0))\u000a self.pad.append(point(-c,3*d,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'SCK'))\u000a #\u000a # pin 4: -RESET\u000a #\u000a self.shape = add(self.shape,translate(pad_TQFP_h,-c,2*d,0))\u000a self.pad.append(point(-c,2*d,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'-RESET'))\u000a #\u000a # pin 5: VCC\u000a #\u000a self.shape = add(self.shape,translate(pad_TQFP_h,-c,d,0))\u000a self.pad.append(point(-c,d,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'VCC'))\u000a #\u000a # pin 6: GND\u000a #\u000a self.shape = add(self.shape,translate(pad_TQFP_h,-c,0,0))\u000a self.pad.append(point(-c,0,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'GND'))\u000a #\u000a # pin 7: XTAL2\u000a #\u000a self.shape = add(self.shape,translate(pad_TQFP_h,-c,-d,0))\u000a self.pad.append(point(-c,-d,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'XTAL2'))\u000a #\u000a # pin 8: XTAL1\u000a #\u000a self.shape = add(self.shape,translate(pad_TQFP_h,-c,-2*d,0))\u000a self.pad.append(point(-c,-2*d,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'XTAL1'))\u000a #\u000a # pin 9: PD0/PCINT24/RXD0\u000a #\u000a self.shape = add(self.shape,translate(pad_TQFP_h,-c,-3*d,0))\u000a self.pad.append(point(-c,-3*d,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'RXD0'))\u000a #\u000a # pin 10: PD1/PCINT25/TXD0\u000a #\u000a self.shape = add(self.shape,translate(pad_TQFP_h,-c,-4*d,0))\u000a self.pad.append(point(-c,-4*d,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'TXD0'))\u000a #\u000a # pin 11: PD2/PCINT26/INT0\u000a #\u000a self.shape = add(self.shape,translate(pad_TQFP_h,-c,-5*d,0))\u000a self.pad.append(point(-c,-5*d,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'PD2'))\u000a #\u000a # pin 12: PD3/PCINT27/INT1\u000a #\u000a self.shape = add(self.shape,translate(pad_TQFP_v,-5*d,-c,0))\u000a self.pad.append(point(-5*d,-c,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'PD3'))\u000a #\u000a # pin 13: PD4/PCINT28/OC1B\u000a #\u000a self.shape = add(self.shape,translate(pad_TQFP_v,-4*d,-c,0))\u000a self.pad.append(point(-4*d,-c,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'PD4'))\u000a #\u000a # pin 14: PD5/PCINT28/OC1A\u000a #\u000a self.shape = add(self.shape,translate(pad_TQFP_v,-3*d,-c,0))\u000a self.pad.append(point(-3*d,-c,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'PD5'))\u000a #\u000a # pin 15: PD6/PCINT30/OC2B/ICP\u000a #\u000a self.shape = add(self.shape,translate(pad_TQFP_v,-2*d,-c,0))\u000a self.pad.append(point(-2*d,-c,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'PD6'))\u000a #\u000a # pin 16: PD7/PCINT31/OC2A\u000a #\u000a self.shape = add(self.shape,translate(pad_TQFP_v,-d,-c,0))\u000a self.pad.append(point(-d,-c,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'PD7'))\u000a #\u000a # pin 17: VCC\u000a #\u000a self.shape = add(self.shape,translate(pad_TQFP_v,0,-c,0))\u000a self.pad.append(point(0,-c,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'VCC'))\u000a #\u000a # pin 18: GND\u000a #\u000a self.shape = add(self.shape,translate(pad_TQFP_v,d,-c,0))\u000a self.pad.append(point(d,-c,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'GND'))\u000a #\u000a # pin 19: PC0/PCINT16/SCL\u000a #\u000a self.shape = add(self.shape,translate(pad_TQFP_v,2*d,-c,0))\u000a self.pad.append(point(2*d,-c,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'PC0'))\u000a #\u000a # pin 20: PC1/PCINT17/SDA\u000a #\u000a self.shape = add(self.shape,translate(pad_TQFP_v,3*d,-c,0))\u000a self.pad.append(point(3*d,-c,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'PC1'))\u000a #\u000a # pin 21: PC2/PCINT18/TCK\u000a #\u000a self.shape = add(self.shape,translate(pad_TQFP_v,4*d,-c,0))\u000a self.pad.append(point(4*d,-c,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'PC2'))\u000a #\u000a # pin 22: PC3/PCINT19/TMS\u000a #\u000a self.shape = add(self.shape,translate(pad_TQFP_v,5*d,-c,0))\u000a self.pad.append(point(5*d,-c,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'PC3'))\u000a #\u000a # pin 23: PC4/TDO/PCINT20\u000a #\u000a self.shape = add(self.shape,translate(pad_TQFP_h,c,-5*d,0))\u000a self.pad.append(point(c,-5*d,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'PC4'))\u000a #\u000a # pin 24: PC5/TDI/PCINT21\u000a #\u000a self.shape = add(self.shape,translate(pad_TQFP_h,c,-4*d,0))\u000a self.pad.append(point(c,-4*d,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'PC5'))\u000a #\u000a # pin 25: PC6/TOSC1/PCINT22\u000a #\u000a self.shape = add(self.shape,translate(pad_TQFP_h,c,-3*d,0))\u000a self.pad.append(point(c,-3*d,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'PC6'))\u000a #\u000a # pin 26: PC7/TOSC2/PCINT23\u000a #\u000a self.shape = add(self.shape,translate(pad_TQFP_h,c,-2*d,0))\u000a self.pad.append(point(c,-2*d,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'PC7'))\u000a #\u000a # pin 27: AVCC\u000a #\u000a self.shape = add(self.shape,translate(pad_TQFP_h,c,-d,0))\u000a self.pad.append(point(c,-d,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'AVCC'))\u000a #\u000a # pin 28: GND\u000a #\u000a self.shape = add(self.shape,translate(pad_TQFP_h,c,0,0))\u000a self.pad.append(point(c,0,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'GND'))\u000a #\u000a # pin 29: AREF\u000a #\u000a self.shape = add(self.shape,translate(pad_TQFP_h,c,d,0))\u000a self.pad.append(point(c,d,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'AREF'))\u000a #\u000a # pin 30: PA7/ADC7/PCINT7\u000a #\u000a self.shape = add(self.shape,translate(pad_TQFP_h,c,2*d,0))\u000a self.pad.append(point(c,2*d,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'PA7'))\u000a #\u000a # pin 31: PA6/ADC6/PCINT6\u000a #\u000a self.shape = add(self.shape,translate(pad_TQFP_h,c,3*d,0))\u000a self.pad.append(point(c,3*d,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'PA6'))\u000a #\u000a # pin 32: PA5/ADC5/PCINT5\u000a #\u000a self.shape = add(self.shape,translate(pad_TQFP_h,c,4*d,0))\u000a self.pad.append(point(c,4*d,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'PA5'))\u000a #\u000a # pin 33: PA4/ADC4/PCINT4\u000a #\u000a self.shape = add(self.shape,translate(pad_TQFP_h,c,5*d,0))\u000a self.pad.append(point(c,5*d,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'PA4'))\u000a #\u000a # pin 34: PA3/ADC3/PCINT3\u000a #\u000a self.shape = add(self.shape,translate(pad_TQFP_v,5*d,c,0))\u000a self.pad.append(point(5*d,c,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'PA3'))\u000a #\u000a # pin 35: PA2/ADC2/PCINT2\u000a #\u000a self.shape = add(self.shape,translate(pad_TQFP_v,4*d,c,0))\u000a self.pad.append(point(4*d,c,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'PA2'))\u000a #\u000a # pin 36: PA1/ADC1/PCINT1\u000a #\u000a self.shape = add(self.shape,translate(pad_TQFP_v,3*d,c,0))\u000a self.pad.append(point(3*d,c,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'PA1'))\u000a #\u000a # pin 37: PA0/ADC0/PCINT0\u000a #\u000a self.shape = add(self.shape,translate(pad_TQFP_v,2*d,c,0))\u000a self.pad.append(point(2*d,c,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'PA0'))\u000a #\u000a # pin 38: VCC\u000a #\u000a self.shape = add(self.shape,translate(pad_TQFP_v,d,c,0))\u000a self.pad.append(point(d,c,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'VCC'))\u000a #\u000a # pin 39: GND\u000a #\u000a self.shape = add(self.shape,translate(pad_TQFP_v,0,c,0))\u000a self.pad.append(point(0,c,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'GND'))\u000a #\u000a # pin 40: PB0/XCK0/T0/PCINT8\u000a #\u000a self.shape = add(self.shape,translate(pad_TQFP_v,-d,c,0))\u000a self.pad.append(point(-d,c,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'PB0'))\u000a #\u000a # pin 41: PB1/T1/CLKO/PCINT9\u000a #\u000a self.shape = add(self.shape,translate(pad_TQFP_v,-2*d,c,0))\u000a self.pad.append(point(-2*d,c,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'PB1'))\u000a #\u000a # pin 42: PB2/AIN0/INT2/PCINT10\u000a #\u000a self.shape = add(self.shape,translate(pad_TQFP_v,-3*d,c,0))\u000a self.pad.append(point(-3*d,c,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'PB2'))\u000a #\u000a # pin 43: PB3/AIN1/OC0A/PCINT11\u000a #\u000a self.shape = add(self.shape,translate(pad_TQFP_v,-4*d,c,0))\u000a self.pad.append(point(-4*d,c,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'PB2'))\u000a #\u000a # pin 44: PB4/-SS/OC0B/PCINT12\u000a #\u000a self.shape = add(self.shape,translate(pad_TQFP_v,-5*d,c,0))\u000a self.pad.append(point(-5*d,c,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'PB4'))\u000a\u000aTSSOP_pad_width = 0.040\u000aTSSOP_pad_height = 0.011\u000aTSSOP_pad_dy = 0.026\u000aTSSOP_pad_dx = 0.120\u000apad_TSSOP = cube(-TSSOP_pad_width/2.0,TSSOP_pad_width/2.0,-TSSOP_pad_height/2.0,TSSOP_pad_height/2.0,0,0)\u000a\u000aclass TRC102(part):\u000a #\u000a # RFM TRC102 ISM transceiver\u000a #\u000a def __init__(self,value=''):\u000a self.value = value\u000a self.pad = [point(0,0,0)]\u000a self.labels = []\u000a #\u000a # pin 1: SDI\u000a #\u000a self.shape = translate(pad_TSSOP,-TSSOP_pad_dx,3.5*TSSOP_pad_dy,0)\u000a self.pad.append(point(-TSSOP_pad_dx,3.5*TSSOP_pad_dy,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'1 SDI'))\u000a #\u000a # pin 2: SCK\u000a #\u000a self.shape = add(self.shape,translate(pad_TSSOP,-TSSOP_pad_dx,2.5*TSSOP_pad_dy,0))\u000a self.pad.append(point(-TSSOP_pad_dx,2.5*TSSOP_pad_dy,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'SCK'))\u000a #\u000a # pin 3: nCS\u000a #\u000a self.shape = add(self.shape,translate(pad_TSSOP,-TSSOP_pad_dx,1.5*TSSOP_pad_dy,0))\u000a self.pad.append(point(-TSSOP_pad_dx,1.5*TSSOP_pad_dy,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'nCS'))\u000a #\u000a # pin 4: SDO\u000a #\u000a self.shape = add(self.shape,translate(pad_TSSOP,-TSSOP_pad_dx,0.5*TSSOP_pad_dy,0))\u000a self.pad.append(point(-TSSOP_pad_dx,0.5*TSSOP_pad_dy,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'SDO'))\u000a #\u000a # pin 5: IRQ\u000a #\u000a self.shape = add(self.shape,translate(pad_TSSOP,-TSSOP_pad_dx,-0.5*TSSOP_pad_dy,0))\u000a self.pad.append(point(-TSSOP_pad_dx,-0.5*TSSOP_pad_dy,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'IRQ'))\u000a #\u000a # pin 6: DATA/nFSEL\u000a #\u000a self.shape = add(self.shape,translate(pad_TSSOP,-TSSOP_pad_dx,-1.5*TSSOP_pad_dy,0))\u000a self.pad.append(point(-TSSOP_pad_dx,-1.5*TSSOP_pad_dy,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'DATA'))\u000a #\u000a # pin 7: CR\u000a #\u000a self.shape = add(self.shape,translate(pad_TSSOP,-TSSOP_pad_dx,-2.5*TSSOP_pad_dy,0))\u000a self.pad.append(point(-TSSOP_pad_dx,-2.5*TSSOP_pad_dy,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'CR'))\u000a #\u000a # pin 8: CLKOUT\u000a #\u000a self.shape = add(self.shape,translate(pad_TSSOP,-TSSOP_pad_dx,-3.5*TSSOP_pad_dy,0))\u000a self.pad.append(point(-TSSOP_pad_dx,-3.5*TSSOP_pad_dy,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'CLKOUT'))\u000a #\u000a # pin 9: Xtal/Ref\u000a #\u000a self.shape = add(self.shape,translate(pad_TSSOP,TSSOP_pad_dx,-3.5*TSSOP_pad_dy,0))\u000a self.pad.append(point(TSSOP_pad_dx,-3.5*TSSOP_pad_dy,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'Xtal'))\u000a #\u000a # pin 10: RESET\u000a #\u000a self.shape = add(self.shape,translate(pad_TSSOP,TSSOP_pad_dx,-2.5*TSSOP_pad_dy,0))\u000a self.pad.append(point(TSSOP_pad_dx,-2.5*TSSOP_pad_dy,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'RESET'))\u000a #\u000a # pin 11: GND\u000a #\u000a self.shape = add(self.shape,translate(pad_TSSOP,TSSOP_pad_dx,-1.5*TSSOP_pad_dy,0))\u000a self.pad.append(point(TSSOP_pad_dx,-1.5*TSSOP_pad_dy,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'GND'))\u000a #\u000a # pin 12: RF_P\u000a #\u000a self.shape = add(self.shape,translate(pad_TSSOP,TSSOP_pad_dx,-0.5*TSSOP_pad_dy,0))\u000a self.pad.append(point(TSSOP_pad_dx,-0.5*TSSOP_pad_dy,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'RF_P'))\u000a #\u000a # pin 13: RF_N\u000a #\u000a self.shape = add(self.shape,translate(pad_TSSOP,TSSOP_pad_dx,0.5*TSSOP_pad_dy,0))\u000a self.pad.append(point(TSSOP_pad_dx,0.5*TSSOP_pad_dy,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'RF_N'))\u000a #\u000a # pin 14: VDD\u000a #\u000a self.shape = add(self.shape,translate(pad_TSSOP,TSSOP_pad_dx,1.5*TSSOP_pad_dy,0))\u000a self.pad.append(point(TSSOP_pad_dx,1.5*TSSOP_pad_dy,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'VDD'))\u000a #\u000a # pin 15: RSSIA\u000a #\u000a self.shape = add(self.shape,translate(pad_TSSOP,TSSOP_pad_dx,2.5*TSSOP_pad_dy,0))\u000a self.pad.append(point(TSSOP_pad_dx,2.5*TSSOP_pad_dy,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'RSSIA'))\u000a #\u000a # pin 16: nINT/DDET\u000a #\u000a self.shape = add(self.shape,translate(pad_TSSOP,TSSOP_pad_dx,3.5*TSSOP_pad_dy,0))\u000a self.pad.append(point(TSSOP_pad_dx,3.5*TSSOP_pad_dy,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'nINT'))\u000a\u000a\u000a#\u000a# graphics\u000a#\u000a\u000aclass CBA(part):\u000a #\u000a # CBA logo\u000a #\u000a def __init__(self,r=.02):\u000a self.value = ''\u000a self.pad = [point(0,0,0)]\u000a self.labels = []\u000a d = 3*r\u000a self.shape = cylinder(0,0,0,0,r)\u000a self.shape = add(self.shape,translate(cylinder(0,0,0,0,r),-d,d,0))\u000a self.shape = add(self.shape,translate(cube(-r,r,-r,r,0,0),-d,0,0))\u000a self.shape = add(self.shape,translate(cube(-r,r,-r,r,0,0),-d,-d,0))\u000a self.shape = add(self.shape,translate(cube(-r,r,-r,r,0,0),0,-d,0))\u000a self.shape = add(self.shape,translate(cube(-r,r,-r,r,0,0),d,-d,0))\u000a self.shape = add(self.shape,translate(cube(-r,r,-r,r,0,0),d,0,0))\u000a self.shape = add(self.shape,translate(cube(-r,r,-r,r,0,0),d,d,0))\u000a self.shape = add(self.shape,translate(cube(-r,r,-r,r,0,0),0,d,0))\u000a\u000aclass fab(part):\u000a def __init__(self,r=.05):\u000a self.value = ''\u000a self.pad = [point(0,0,0)]\u000a self.labels = []\u000a d = 1.8*r\u000a l = 3.5*r\u000a h = r/2.\u000a self.shape = rectangle(-d,d,-d,d)\u000a self.shape = subtract(self.shape,circle(0,0,r))\u000a self.shape = subtract(self.shape,rectangle(-l,0,-h,h))\u000a self.shape = add(self.shape,rectangle(d,l,-h,h))\u000a self.shape = add(self.shape,circle(l,0,r))\u000a self.shape = add(self.shape,circle(-l,0,r))\u000a\u000a#\u000a# define board\u000a#\u000a\u000aclass A4953_SOICN(part):\u000a def __init__(self,value=''):\u000a self.value = value\u000a self.pad = [point(0,0,0)]\u000a self.labels = []\u000a #\u000a # pin 1: GND\u000a #\u000a self.shape = translate(pad_SOIC,-.11,.075,0)\u000a self.shape = add(self.shape,cylinder(-.153,.075,0,0,.015))\u000a self.pad.append(point(-.11,.075,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'GND'))\u000a #\u000a # pin 2: IN2\u000a #\u000a self.shape = add(self.shape,translate(pad_SOIC,-.11,.025,0))\u000a self.pad.append(point(-.11,.025,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'IN2'))\u000a #\u000a # pin 3: IN1\u000a #\u000a self.shape = add(self.shape,translate(pad_SOIC,-.11,-.025,0))\u000a self.pad.append(point(-.11,-.025,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'IN1'))\u000a #\u000a # pin 4: VREF\u000a #\u000a self.shape = add(self.shape,translate(pad_SOIC,-.11,-.075,0))\u000a self.pad.append(point(-.11,-.075,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'VREF'))\u000a #\u000a # pin 5: VBB\u000a #\u000a self.shape = add(self.shape,translate(pad_SOIC,.11,-.075,0))\u000a self.pad.append(point(.11,-.075,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'VBB'))\u000a #\u000a # pin 6: OUT1\u000a #\u000a self.shape = add(self.shape,translate(pad_SOIC,.11,-.025,0))\u000a self.pad.append(point(.11,-.025,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'OUT1'))\u000a #\u000a # pin 7: LSS\u000a #\u000a self.shape = add(self.shape,translate(pad_SOIC,.11,.025,0))\u000a self.pad.append(point(.11,.025,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'LSS'))\u000a #\u000a # pin 8: OUT2\u000a #\u000a self.shape = add(self.shape,translate(pad_SOIC,.11,.075,0))\u000a self.pad.append(point(.11,.075,0))\u000a self.labels.append(self.text(self.pad[-1].x,self.pad[-1].y,self.pad[-1].z,'OUT2'))\u000a #\u000a # thermal pad\u000a #\u000a self.shape = add(self.shape,rectangle(-.04,.04,-.075,.075))\u000a\u000awidth = 2.5\u000aheight = 1.2\u000ax = 1\u000ay = 1\u000az = -.005\u000aw = .016\u000aw1 = .03\u000amask = .004\u000a\u000apcb = PCB(x,y,width,height,mask)\u000a\u000aIC1 = ATtiny44_SOICN('IC1\u005cnt44')\u000apcb = IC1.add(pcb,x+1.5,y+.69,z)\u000a\u000aJ1 = header_ISP('J1\u005cnISP')\u000apcb = J1.add(pcb,IC1.x+.05,IC1.pad[7].y-.23,z,angle=90)\u000a\u000apcb = wire(pcb,w,\u000a IC1.pad[8],\u000a J1.pad[1])\u000a\u000apcb = wire(pcb,w,\u000a IC1.pad[9],\u000a J1.pad[3])\u000a \u000apcb = wire(pcb,w,\u000a IC1.pad[7],\u000a point(IC1.pad[7].x,J1.y,z),\u000a J1.pad[4])\u000a \u000apcb = wire(pcb,w,\u000a IC1.pad[4],\u000a J1.pad[5])\u000a\u000apcb = wire(pcb,w1,\u000a J1.pad[6],\u000a point(J1.pad[6].x,J1.pad[6].y-0.1,z))\u000a\u000aJ2 = header_power('J2\u005cnpower')\u000apcb = J2.add(pcb,IC1.x-1.38,IC1.y-.25,z,angle=90)\u000a\u000aIC2 = regulator_SOT23('IC2\u005cn5V')\u000apcb = IC2.add(pcb,J2.x,J2.y+.28,z,angle=0)\u000a\u000apcb = wire(pcb,w,\u000a J2.pad[3],\u000a IC2.pad[2])\u000a\u000apcb = wire(pcb,w,\u000a J2.pad[1],\u000a IC2.pad[3])\u000a\u000aC1 = C_1206('C1\u005cn1uF')\u000apcb = C1.add(pcb,IC2.x+.045,IC1.y+0.4,z,angle=270)\u000a\u000apcb = wire(pcb,w, \u000a C1.pad[1],\u000a IC2.pad[1]\u000a )\u000a\u000apcb = wire(pcb,w,\u000a C1.pad[1],\u000a point(C1.pad[1].x,C1.y+.07,z),\u000a IC1.pad[1])\u000a\u000apcb = wire(pcb,w,\u000a C1.pad[2],\u000a IC2.pad[3])\u000a\u000aR1 = R_1206('R1\u005cn10k')\u000apcb = R1.add(pcb,IC1.x,IC1.y+0.4,z)\u000a\u000apcb = wire(pcb,w,\u000a IC1.pad[4],\u000a point(J1.pad[5].x,R1.y,z))\u000a\u000apcb = wire(pcb,w,\u000a C1.pad[1],\u000a point(C1.pad[1].x,C1.y+.07,z),\u000a R1.pad[2])\u000a\u000apcb = wire(pcb,w,\u000a J1.pad[2],\u000a point(J1.pad[2].x,J1.y+.035,z),\u000a point(J1.pad[4].x-.05,IC1.pad[1].y+.25,z),\u000a R1.pad[2])\u000a\u000aIC3 = A4953_SOICN('IC3\u005cnA4953')\u000apcb = IC3.add(pcb,IC1.x+.42+0.1,IC1.y-.32,z)\u000a\u000apcb = wire(pcb,w,\u000a IC3.pad[1],\u000a point(IC3.x,IC3.y,z))\u000a\u000apcb = wire(pcb,w,\u000a IC3.pad[2],\u000a point(IC1.pad[10].x+.20,IC1.pad[10].y,z),\u000a IC1.pad[10])\u000a\u000apcb = wire(pcb,w,\u000a IC3.pad[3],\u000a point(IC1.pad[9].x+.16,IC1.pad[9].y,z),\u000a IC1.pad[9])\u000a\u000apcb = wire(pcb,w,\u000a J1.pad[2],\u000a IC3.pad[4])\u000a\u000apcb = wire(pcb,w,\u000a J2.pad[1],\u000a point(J2.pad[1].x,J1.pad[6].y-.11,z),\u000a point(IC3.x-.025,IC3.y,z))\u000a\u000apcb = wire(pcb,w,\u000a J2.pad[3],\u000a point(J2.pad[3].x,J1.pad[6].y-.15,z),\u000a point(IC3.pad[5].x+.12,IC3.pad[5].y,z),\u000a IC3.pad[5])\u000a\u000apcb = wire(pcb,w,\u000a IC3.pad[7],\u000a point(IC3.x,IC3.y,z))\u000a\u000aC2 = C_1206('C2 .1uF')\u000apcb = C2.add(pcb,IC3.pad[5].x-.005,IC3.pad[5].y-.075,z)\u000a\u000apcb = wire(pcb,w,\u000a C2.pad[1],\u000a point(C2.pad[1].x-.06,C2.y,z))\u000a\u000apcb = wire(pcb,w,\u000a C2.pad[2],\u000a point(C2.pad[2].x+.05,C2.y,z))\u000a\u000aC3 = C_1206('C3 10uF')\u000apcb = C3.add(pcb,C2.x,C2.y-.095,z)\u000a\u000apcb = wire(pcb,w,\u000a C3.pad[1],\u000a point(C3.pad[1].x-.06,C3.y,z))\u000a\u000apcb = wire(pcb,w,\u000a C3.pad[2],\u000a point(C3.pad[2].x+.05,C3.y,z))\u000a\u000aIC4 = A4953_SOICN('IC4\u005cnA4953')\u000apcb = IC4.add(pcb,IC3.x,IC3.y+.57,z)\u000a\u000apcb = wire(pcb,w,\u000a IC4.pad[1],\u000a point(IC4.x,IC4.y,z))\u000a\u000apcb = wire(pcb,w,\u000a IC4.pad[1],\u000a point(IC1.pad[14].x+.02,IC1.pad[14].y,z))\u000a\u000apcb = wire(pcb,w,\u000a IC4.pad[2],\u000a point(IC1.pad[13].x+.07,IC1.pad[13].y,z),\u000a IC1.pad[13])\u000a\u000apcb = wire(pcb,w,\u000a IC4.pad[3],\u000a point(IC1.pad[12].x+.1,IC1.pad[12].y,z),\u000a IC1.pad[12])\u000a\u000apcb = wire(pcb,w,\u000a IC1.pad[11],\u000a IC4.pad[4])\u000a\u000apcb = wire(pcb,w,\u000a IC1.pad[11],\u000a point(IC1.x,IC1.y,z))\u000a\u000apcb = wire(pcb,w,\u000a IC4.pad[7],\u000a point(IC4.x,IC4.y,z))\u000a\u000apcb = wire(pcb,w1,\u000a point(IC3.x-.025,IC3.y,z),\u000a point(IC3.x-.025,IC4.y,z))\u000a\u000aJ3 = header_4('J3 \u005cn stepper')\u000apcb = J3.add(pcb,IC3.x+.27,IC3.y+.19,z,angle=0)\u000a\u000apcb = wire(pcb,w1,\u000a IC3.pad[8],\u000a point(J3.pad[1].x-.09,J3.pad[1].y,z),\u000a J3.pad[1])\u000a\u000apcb = wire(pcb,w1,\u000a J3.pad[3],\u000a point(J3.pad[3].x+.03,IC3.pad[6].y,z),\u000a IC3.pad[6])\u000a\u000apcb = wire(pcb,w1,\u000a IC3.pad[5],\u000a point(J3.x-.025,IC4.pad[5].y,z),\u000a IC4.pad[5])\u000a\u000apcb = wire(pcb,w1,\u000a J3.pad[4],\u000a point(J3.x+.025,IC4.pad[6].y,z),\u000a IC4.pad[6])\u000a\u000apcb = wire(pcb,w1,\u000a IC4.pad[8],\u000a J3.pad[2])\u000a\u000aC4 = C_1206('C4 .1uF')\u000apcb = C4.add(pcb,IC4.pad[5].x-.005,IC4.pad[5].y-.075,z)\u000a\u000apcb = wire(pcb,w,\u000a C4.pad[1],\u000a point(C4.pad[1].x-.05,C4.y,z))\u000a\u000apcb = wire(pcb,w,\u000a C4.pad[2],\u000a point(J3.x-.025,C4.y,z))\u000a\u000aC5 = C_1206('C5 10uF')\u000apcb = C5.add(pcb,C4.x,C4.y-.095,z)\u000a\u000apcb = wire(pcb,w,\u000a C5.pad[1],\u000a point(C5.pad[1].x-.05,C5.y,z))\u000a\u000apcb = wire(pcb,w,\u000a C5.pad[2],\u000a point(J3.x-.025,C5.y,z))\u000a\u000a#fhead = header_FTDI('ftdi')\u000a#pcb = fhead.add(pcb, J2.x-.27, J2.y)\u000a#pcb = wire(pcb, w, fhead.pad[2], J2.pad[1])\u000a\u000a#XTAL1 = XTAL_EFOBM('XTAL1\u005cn20MHz')\u000a#pcb = XTAL1.add(pcb,IC1.pad[2].x-0.2,IC1.pad[2].y,z,angle=-90)\u000a\u000a#pcb = wire(pcb,w, IC1.pad[2], point(XTAL1.x+.11,XTAL1.pad[1].y,z), XTAL1.pad[1])\u000a\u000a#pcb = wire(pcb,w, XTAL1.pad[3], IC1.pad[3])\u000a\u000a#pcb = wire(pcb, w, XTAL1.pad[2], J2.pad[1])\u000a\u000a#J4 = header_servo('J4\u005cnservo')\u000a#pcb = J4.add(pcb,J2.x+0.35,J1.y-0.02,z)\u000a\u000a#pcb = wire(pcb,w, J1.pad[6], J4.pad[1])\u000a\u000a#pcb = wire(pcb,w, J4.pad[1], J4.pad[2])\u000a\u000a#pcb = wire(pcb,w, J4.pad[2], J2.pad[1])\u000a\u000a#pcb = wire(pcb,w, J1.pad[2], point(J1.pad[2].x,J1.pad[2].y-.075,z), point(J1.pad[4].x-.05,J1.y-.035,z),point(IC1.pad[7].x,J4.pad[3].y-.015,z), J4.pad[3])\u000a\u000a\u000a#pcb = wire(pcb,w, IC1.pad[7], J4.pad[5])\u000a\u000a#R3 = R_1206('R3\u005cn 0')\u000a#pcb = R3.add(pcb,J2.pad[1].x-0.11,J2.pad[1].y-0.52,z,angle=0)\u000a\u000a#R4 = R_1206(' R4\u005cn 0')\u000a#pcb = R4.add(pcb,J2.pad[1].x+0.01,J2.pad[1].y-0.4,z,angle=0)\u000a\u000a#R5 = R_1206(' R5\u005cn 0')\u000a#pcb = R5.add(pcb,J2.pad[1].x+0.01,J2.pad[1].y-0.11,z,angle=0)\u000a\u000a#R6 = R_1206('R6\u005cn 0')\u000a#pcb = R6.add(pcb,J2.pad[1].x-0.11,J2.pad[1].y-0.315,z,angle=0)\u000a\u000a#p1 = point(IC1.pad[5].x-0.46, IC1.pad[5].y,z)\u000a#pcb = wire(pcb, w, R5.pad[2],p1, IC1.pad[5])\u000a#pcb = wire(pcb, w, R5.pad[1], R6.pad[2])\u000a\u000a#pcb = wire(pcb, w, R4.pad[1], R3.pad[2])\u000a\u000a#p2 = point(IC1.pad[6].x-0.25, IC1.pad[6].y,z)\u000a#p3 = point(R4.pad[2].x + 0.01,R4.pad[2].y-0.0075,z) \u000a#pcb = wire(pcb, w, R4.pad[2],p3, p2, IC1.pad[6])\u000a\u000a#pcb = wire(pcb,w, point(fhead.pad[1].x, fhead.pad[1].y,z), point(fhead.pad[1].x, fhead.pad[1].y+0.3,z),IC4.pad[1])\u000a\u000a#pcb = wire(pcb, w, point(fhead.pad[3].x,fhead.pad[3].y,z), J2.pad[3])\u000a\u000a#pcb = wire(pcb, w, point(fhead.pad[5].x,fhead.pad[5].y,z),point(fhead.pad[5].x+0.1,fhead.pad[5].y-0.23,z),R3.pad[1])\u000a\u000a#pcb = wire(pcb, w, point(fhead.pad[4].x,fhead.pad[4].y,z),R6.pad[1])\u000a\u000aIC5 = A4953_SOICN('IC5\u005cnA4953')\u000apcb = IC5.add(pcb,IC1.x-.59,IC1.y+.22,z,angle=180)\u000a\u000apcb = wire(pcb,w,\u000a IC5.pad[1],\u000a point(IC5.x,IC5.y,z))\u000a\u000apcb = wire(pcb,w,\u000a point(IC5.pad[2].x,IC5.pad[2].y+.01,z),\u000a point(IC1.pad[3].x-.12,IC1.pad[3].y,z),\u000a IC1.pad[3])\u000a\u000apcb = wire(pcb,w,\u000a point(IC5.pad[3].x,IC5.pad[3].y-.01,z),\u000a point(IC1.pad[2].x-.08,IC1.pad[2].y,z),\u000a IC1.pad[2])\u000a\u000apcb = wire(pcb,w,\u000a IC5.pad[4],\u000a point(IC5.pad[4].x,C1.pad[1].y,z))\u000a\u000apcb = wire(pcb,w,\u000a IC5.pad[7],\u000a point(IC5.x,IC5.y,z))\u000a\u000a#pcb = wire(pcb,w,\u000a# C1.pad[2],\u000a# point(IC5.x,IC5.y,z))\u000a\u000aJ4 = header_4('J4 \u005cn stepper')\u000apcb = J4.add(pcb,IC5.x-.31,IC5.y-.2,z,angle=180)\u000a\u000apcb = wire(pcb,w1,\u000a IC5.pad[6],\u000a J4.pad[3])\u000a\u000apcb = wire(pcb,w1,\u000a J4.pad[1],\u000a IC5.pad[8])\u000a\u000aIC6 = A4953_SOICN('IC6\u005cnA4953')\u000apcb = IC6.add(pcb,IC5.x,IC5.y-0.62,z,angle=180)\u000a\u000apcb = wire(pcb,w,\u000a IC6.pad[1],\u000a point(IC6.x,IC6.y,z))\u000a\u000apcb = wire(pcb,w,\u000a IC1.pad[6],\u000a point(IC6.pad[2].x+.13,IC6.pad[2].y,z),\u000a IC6.pad[2])\u000a\u000apcb = wire(pcb,w,\u000a IC1.pad[5],\u000a point(IC6.pad[3].x+.08,IC6.pad[3].y,z),\u000a IC6.pad[3])\u000a\u000apcb = wire(pcb,w,\u000a IC6.pad[7],\u000a point(IC6.x,IC6.y,z))\u000a\u000apcb = wire(pcb,w1,\u000a IC6.pad[6],\u000a point(J4.pad[4].x+.08,J4.pad[4].y,z),\u000a J4.pad[4])\u000a\u000apcb = wire(pcb,w1,\u000a IC6.pad[8],\u000a J4.pad[2])\u000a\u000apcb = wire(pcb,w1,\u000a IC6.pad[5],\u000a point(IC5.pad[5].x-0.18,IC5.pad[5].y,z),\u000a IC5.pad[5])\u000a\u000apcb = wire(pcb,w1,\u000a point(IC6.x,IC6.y,z),\u000a point(IC5.x,IC5.y,z))\u000a\u000aR2 = R_1206('R2\u005cn 0')\u000apcb = R2.add(pcb,IC5.pad[2].x+0.14,IC5.pad[2].y+.026,z,angle=90)\u000a\u000apcb = wire(pcb,w,\u000a R2.pad[2],\u000a point(R2.pad[2].x,C1.pad[1].y,z))\u000a\u000apcb = wire(pcb,w,\u000a IC6.pad[4],\u000a point(IC6.pad[4].x,IC1.pad[4].y,z),\u000a R2.pad[1])\u000a\u000aC6 = C_1206('C6\u005cn 10uF')\u000apcb = C6.add(pcb,J2.x+.2,J2.y,z)\u000a\u000aR3 = R_1206('R3\u005cn 0')\u000apcb = R3.add(pcb,C6.pad[2].x,J2.y-.34,z, angle=90)\u000a\u000apcb = wire(pcb,w,\u000a R3.pad[2],\u000a C6.pad[2])\u000a\u000apcb = wire(pcb,w,\u000a point(C6.pad[1].x,R3.y,z),\u000a C6.pad[1])\u000a\u000aC7 = C_1206('C7\u005cn .1uF')\u000apcb = C7.add(pcb,J2.x+.2,J2.y+.6,z)\u000a\u000apcb = wire(pcb,w,\u000a C7.pad[1],\u000a C6.pad[1])\u000a\u000apcb = wire(pcb,w,\u000a C7.pad[2],\u000a C6.pad[2])\u000a\u000apcb = wire(pcb,w,\u000a C7.pad[2],\u000a IC5.pad[5])\u000a\u000apcb = wire(pcb,w,\u000a point(IC5.x, IC5.y, z),\u000a point(IC5.x, C7.y+0.08, z),\u000a C7.pad[1])\u000a\u000a\u000aC8 = C_1206('C8\u005cn 10uF')\u000apcb = C8.add(pcb,J4.x+.17,J4.y-.15,z)\u000a\u000aC9 = C_1206('C9\u005cn .1uF')\u000apcb = C9.add(pcb,C8.x,C8.y-.1,z)\u000a\u000apcb = wire(pcb,w,\u000a C8.pad[1],\u000a C9.pad[1])\u000a\u000apcb = wire(pcb,w,\u000a C8.pad[2],\u000a C9.pad[2])\u000a\u000apcb = wire(pcb,w,\u000a C8.pad[2],\u000a point(IC5.x,C8.y,z))\u000a\u000apcb = wire(pcb,w,\u000a C9.pad[2],\u000a point(IC5.x,C9.y,z))\u000a\u000apcb = wire(pcb,w,\u000a C8.pad[1],\u000a point(C8.x-.15,C8.y,z))\u000a\u000apcb = wire(pcb,w,\u000a C9.pad[1],\u000a point(C9.x-.15,C9.y,z))\u000a\u000a#\u000a# select output\u000a#\u000a\u000aif (output == "traces, labels, and exterior"):\u000a cad.function = add(add(color(Tan,pcb.board),pcb.labels),color(White,pcb.exterior))\u000aelif (output == "traces and exterior"):\u000a cad.function = color(White,add(pcb.board,pcb.exterior))\u000aelif (output == "interior"):\u000a cad.function = color(White,pcb.interior)\u000aelif (output == "exterior"):\u000a cad.function = color(White,pcb.exterior)\u000aelif(output == "traces"):\u000a cad.function = color(White,pcb.board)\u000aelif (output == "holes"):\u000a z = z-z\u000a cad.function = color(White,add(pcb.exterior,subtract(pcb.interior,pcb.board)))\u000aelif (output == "solder mask"):\u000a cad.function = color(White,pcb.mask)\u000aelse:\u000a print "oops -- don't recognize output"\u000a\u000a#\u000a# set limits and parameters\u000a#\u000a\u000ad = 0.05\u000acad.xmin = x-d # min x to render\u000acad.xmax = x+width+d # max x to render\u000acad.ymin = y-d # min y to render\u000acad.ymax = y+height+d # max y to render\u000acad.zmin = cad.zmax = z # z to zender\u000acad.mm_per_unit = 25.4 # use inch units\u000acad.type = "RGB" # use RGB color\u000a p5 s.