Skip to content

Commit

Permalink
labelling
Browse files Browse the repository at this point in the history
  • Loading branch information
ASLeonard committed Oct 6, 2017
1 parent 3cd5571 commit 4cdfa82
Showing 1 changed file with 31 additions and 8 deletions.
39 changes: 31 additions & 8 deletions polyominomodel/polyomino_animator.py
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ def InteractionMatrix(input_face):
return (1-input_face%2)*(input_face-1)+(input_face%2)*(input_face+1) if input_face>0 else input_face

def PolyominoBuilder(genotype):
SIZE_LIMIT=2*(len(genotype)/2)**2
SIZE_LIMIT=len(genotype)**2
POLYOMINO_GRID=defaultdict(tuple)
POSSIBLE_GRID=defaultdict(list)
IMPOSSIBLE_GRID=set()
Expand Down Expand Up @@ -83,19 +83,35 @@ def identifyValidNeighbour(position,centerType,centerOrientation,checkPosition,i
## ANIMATION SECTION ##
ERROR_CODES={0:'Steric Mismatch',-1:'Disjointed Genotype',-2:'Double Branching Point',-3:'Invalid SIFE',-4:'Disjointed Branching Point',-5:'Infinite Internal Loop',-6:'Internal Branching Point',-7:'Multiple Internal Loops',-8:'Single Tile Branching Point',-9:'External Infinite Loop',-10:'Uncuttable Infinite Loop',-11:'Irreducible Loops',-12:'No Loops',-13:'Unbounded Loop Growth'}

def GrowPoly(genotype,write_it=False,fps_par=1.25):
def LabelTile(ax,tile,position,rotation):
ax.text(.475+position[0],.85+position[1],str(tile[rotation]), verticalalignment='center', horizontalalignment='center',rotation=rotation*90)
ax.text(.475+position[0],.1+position[1],str(tile[(2+rotation)%4]), verticalalignment='center', horizontalalignment='center',rotation=rotation*-90)
ax.text(.85+position[0],.475+position[1],str(tile[(3+rotation)%4]), verticalalignment='center', horizontalalignment='center',rotation=rotation*-90)
ax.text(.1+position[0],.475+position[1],str(tile[(1+rotation)%4]), verticalalignment='center', horizontalalignment='center',rotation=rotation*-90)

def SetTightBounds(ax,data):
plt.axis([min([i[0][0][0] for i in data])-0.25,max([i[0][0][0] for i in data])+1.25,min([i[0][0][1] for i in data])-0.25,max([i[0][0][1] for i in data])+1.25])


def GrowPoly(genotype,tile_labels=True,write_it=False,fps_par=1.25):
assert(len(genotype)%4==0), "Genotype length is invalid, each tile must have 4 faces"
assert(len(genotype)<=40), "Very long genotype, currently not allowed"

## c++ ##
if Poly_Lib!='Failed':
assembly_outcome=GraphAssemblyOutcome(genotype);
if assembly_outcome<=0:
print '**Bad phenotype**\nRejection due to: {}'.format(ERROR_CODES[assembly_outcome])
else:
print "No outcome information available"
print "No outcome information available"

## end c++ ##

fig = plt.figure(figsize=(10,10))
plt.axis('off')
ax = plt.gca()
ax.set_aspect(1)
COLORS=['royalblue','darkgreen','firebrick','chocolate','orchid','goldenrod','navy','olive','lime','teal','cornsilk']
COLORS=['royalblue','darkgreen','firebrick','chocolate','orchid','goldenrod','navy','olive','lime','teal']
HATCHES=['//','\\','+','O', '.']

def init():
Expand All @@ -106,9 +122,13 @@ def init():
def AnimateBuild(i):
## FIRST FRAME ##
if i==0:
ax.add_patch(Rectangle((0,0),0.95,0.95,fill=True,alpha=1,facecolor=COLORS[0],edgecolor='k',lw=2,hatch='*'))
ax.add_patch(Rectangle((0,0),0.95,0.95,fill=True,alpha=1,facecolor=COLORS[0],edgecolor='k',lw=2))

temporary_tiles.append(Rectangle((0,0),0.95,0.95,fill=False,alpha=1,edgecolor='r',lw=2))
ax.add_patch(temporary_tiles[0])
ax.text(.475,.475,'SEED',verticalalignment='center',horizontalalignment='center',fontsize=10)
if tile_labels:
LabelTile(ax,genotype[:4],(0,0),0)

## SECOND FRAME ##
elif i==1:
Expand All @@ -133,6 +153,8 @@ def AnimateBuild(i):
ax.add_patch(Rectangle(current_tile[0],0.95,0.95,fill=True,alpha=1,facecolor=COLORS[current_tile[1][0]],edgecolor='k',lw=2))
temporary_tiles.append(Rectangle(current_tile[0],0.95,0.95,fill=False,alpha=1,edgecolor='r',lw=2))
ax.add_patch(temporary_tiles[-1])
if tile_labels:
LabelTile(ax,genotype[current_tile[1][0]*4:current_tile[1][0]*4+4],current_tile[0],current_tile[1][1])

elif i%2==0:
while temporary_tiles:
Expand All @@ -143,14 +165,15 @@ def AnimateBuild(i):
temporary_tiles.append(Rectangle(key,0.95,0.95,fill=True,alpha=0.25,facecolor=COLORS[pt],edgecolor='k',lw=2,hatch=HATCHES[j%5]))
ax.add_patch(temporary_tiles[-1])

plt.axis([min([i[0][0][0] for i in data])-0.25,max([i[0][0][0] for i in data])+1.25,min([i[0][0][1] for i in data])-0.25,max([i[0][0][1] for i in data])+1.25])

SetTightBounds(ax,data)
anim = FuncAnimation(fig, AnimateBuild,init_func=init,frames=len(data)*2+5, interval=200, blit=False,repeat=False)
plt.tight_layout()

if write_it:
if type(write_it)==str:
writer = ImageMagickWriter(fps=fps_par)
anim.save('PolyominoAnimation.gif', writer=writer)
print "Writing {}.gif to current directory\nfps set as {}".format(write_it,fps_par)
anim.save('{}.gif'.format(write_it), writer=writer)
else:
plt.show(block=False)

Expand Down

0 comments on commit 4cdfa82

Please sign in to comment.