Makeschematic.py
From OpenWetWare
import sys, pygame, re from pygame.draw import line #globals unitlength = 20 def getcolend(acol, arrow): if arrow%2 == 0: return 62 + acol*4*unitlength+unitlength/2 else: return 62 + acol*4*unitlength+unitlength*7/2 def getrowloc(arow): if arow%2 == 0: return 75+2*unitlength*arow+unitlength/2 else: return 75+2*unitlength*arow-unitlength/2 def drawat(x,y,z, screener, cola1): #draw from (x,y) to (x,z) yc = getrowloc(x) if y < z: xca = 62+4*unitlength*y+unitlength/2 xcb = 62+4*unitlength*z+7*unitlength/2 line(screener, cola1, (xca, yc), (xcb, yc),1) else: xca = 62+4*unitlength*z+unitlength/2 xcb = 62+4*unitlength*y+7*unitlength/2 line(screener, cola1, (xca, yc), (xcb, yc),1) def drawup(col, row1, row2, screener, oliga, cola2,fonz): #draw from (y,x) to (z,x) yc1 = getrowloc(row1) yc2 = getrowloc(row2) xc = getcolend(col, row1) line(screener, cola2, (xc, yc1), (xc, yc2),1) if col%2 == 0: xc = xc-10 screener.blit(fonz.render(str(oliga),1,cola2),(xc,yc1)) screener.blit(fonz.render(str(oliga),1,cola2),(xc,yc2)) drawat(row1, col, col, screener, cola2) #possibly draws over previously drawn segments drawat(row2, col, col, screener, cola2) def maked(inf, outf): pygame.init() font18=pygame.font.Font("arial.TTF",18) font12=pygame.font.Font("arial.TTF",12) black = 0, 0, 0 white = 250, 250, 250 size = width, height = 1100, 3000 screen = pygame.display.set_mode(size) screen.fill(white) #numrows should be even for now numrows = 72 for x in range(11): line(screen, (175,175,175), (62+4*unitlength*(x+1), 0), (62+4*unitlength*(x+1), 3000), 1) for x in range(12): screen.blit(font18.render(str(x),1,black),(62+unitlength*(4*x+2)-5,32)) #rects for making arcs arcthelad = pygame.Rect(0, 0, 2*unitlength, 2*unitlength) arcthelad2= pygame.Rect(0, 0, 2*unitlength, 2*unitlength) for x in range(numrows/2): arcthelad.left = 62+(12*4-1)*unitlength arcthelad.top = 75+4*unitlength*x screen.blit(font18.render(str(2*x),1,black),(31,75+unitlength*4*x-9)) line(screen, (0,0,0), (62, 75+unitlength*4*x), (62+12*4*unitlength, 75+4*unitlength*x),1) pygame.draw.arc(screen, (250,0,0), arcthelad, -1.57, 1.57, 1) screen.blit(font18.render(str(2*x+1),1,black),(31,75+(4*x+2)*unitlength-9)) arcthelad2.left = 62-unitlength arcthelad2.top = 75+(4*x+2)*unitlength line(screen, (0,0,0), (62+12*4*unitlength, 75+(4*x+2)*unitlength), (62, 75+(4*x+2)*unitlength),1) pygame.draw.arc(screen, (250,0,0), arcthelad2, 1.57, 4.71, 1) num = re.compile('\d+') oligo = -1 row = 0 col = 0 xc = 0 yc = 0 oligocolor = 0,0,0 for lin in open(inf, 'r'): haha = num.findall(lin) haha[0] = int(haha[0]) haha[1] = int(haha[1]) haha[2] = int(haha[2]) oligocolor = (haha[0])%100, (haha[0] * 2)%100, (haha[0] * 3)%100 # darker colors if haha[0] != oligo: #arrows if (oligo != -1): yc = getrowloc(row) xc = getcolend(col, row) if row%2 == 0: pygame.draw.polygon(screen, oligocolor, ((xc,yc+unitlength/5),(xc,yc-unitlength/5),(xc-unitlength/2,yc)), 0) screen.blit(font18.render(str(oligo),1,oligocolor),(xc,yc)) elif row%2 == 1: pygame.draw.polygon(screen, oligocolor, ((xc,yc+unitlength/5),(xc,yc-unitlength/5),(xc+unitlength/2,yc)), 0) screen.blit(font18.render(str(oligo),1,oligocolor),(xc,yc)) oligo = haha[0] row = haha[1] col = haha[2] pygame.draw.circle(screen, oligocolor, (getcolend(col, row+1), getrowloc(row)), 2, 0) else: if haha[1] == row: drawat(row, col, haha[2], screen, oligocolor) else: drawup(col, row, haha[1], screen, oligo, oligocolor, font12) row = haha[1] col = haha[2] #didn't take care of last oligo in above yc = getrowloc(row) xc = getcolend(col, row) if row%2 == 0: pygame.draw.polygon(screen, oligocolor, ((xc,yc+unitlength/5),(xc,yc-unitlength/5),(xc-unitlength/2,yc)), 0) screen.blit(font18.render(str(oligo),1,oligocolor),(xc,yc)) elif row%2 == 1: pygame.draw.polygon(screen, oligocolor, ((xc,yc+unitlength/5),(xc,yc-unitlength/5),(xc+unitlength/2,yc)), 0) screen.blit(font18.render(str(oligo),1,oligocolor),(xc,yc)) ### pygame.image.save(screen, outf) pygame.quit() #screen = pygame.image.load(blah.bmp)