comparison visualclient/visclient.py @ 22:858fc44a17c1

added s option to stop blobs from fading
author gyorgyf
date Fri, 22 Jun 2012 16:52:57 +0100
parents 92903c908539
children c97feb7ef9e9
comparison
equal deleted inserted replaced
21:92903c908539 22:858fc44a17c1
29 ecol = (0,0,0,255) 29 ecol = (0,0,0,255)
30 30
31 # X,Y=1140,900 31 # X,Y=1140,900
32 X,Y = 600,400 32 X,Y = 600,400
33 NBLOBS = 15 33 NBLOBS = 15
34 BLOBSIZE = 20 34 BLOBSIZE = 25
35 G=110 35 G=110
36 FADE = 40 36 FADE = 15
37 37
38 class Blob(object): 38 class Blob(object):
39 39
40 def __init__(self,bg,x,y,color=(255,255,255),mood=None): 40 def __init__(self,bg,x,y,color=(255,255,255),mood=None,fade=FADE):
41 self.x = x 41 self.x = x
42 self.y = y 42 self.y = y
43 self.xs = x * X 43 self.xs = x * X
44 self.ys = Y - (y * Y) 44 self.ys = Y - (y * Y)
45 self.bg = bg 45 self.bg = bg
47 self.time = time.time() 47 self.time = time.time()
48 self.alpha = 255 48 self.alpha = 255
49 self.c = color 49 self.c = color
50 self.count = 1 50 self.count = 1
51 self.visible = True 51 self.visible = True
52 self.FADE = fade
52 if mood and mood.color : 53 if mood and mood.color :
53 self.c = mood.color 54 self.c = mood.color
54 55
55 def __cmp__(self,other): 56 def __cmp__(self,other):
56 d = math.sqrt( math.pow((self.x-other.x),2) + math.pow((self.y-other.y),2) ) 57 d = math.sqrt( math.pow((self.x-other.x),2) + math.pow((self.y-other.y),2) )
60 return -1 61 return -1
61 62
62 def draw(self): 63 def draw(self):
63 d=int(self.size) 64 d=int(self.size)
64 self.bg.blit(gradients.radial(self.size, (self.c[0],self.c[1],self.c[2],self.alpha), (0,0,0,self.alpha)), (self.xs-d,self.ys-d)) 65 self.bg.blit(gradients.radial(self.size, (self.c[0],self.c[1],self.c[2],self.alpha), (0,0,0,self.alpha)), (self.xs-d,self.ys-d))
65 self.alpha = 255 - int(self.age()*FADE) 66 self.alpha = 255 - int(self.age()*self.FADE)
66 if self.alpha < 5 : 67 if self.alpha < 5 :
67 self.alpha = 1 68 self.alpha = 1
68 self.visible = False 69 self.visible = False
69 70
70 def age(self): 71 def age(self):
75 self.count = count 76 self.count = count
76 self.size = int(BLOBSIZE * int(self.count/1.5)) 77 self.size = int(BLOBSIZE * int(self.count/1.5))
77 78
78 def get_distance(self,x,y): 79 def get_distance(self,x,y):
79 return math.sqrt( math.pow((self.x-x),2) + math.pow((self.y-y),2) ) 80 return math.sqrt( math.pow((self.x-x),2) + math.pow((self.y-y),2) )
81
82 def fade(self,fade):
83 if not fade : self.alpha = 255
84 self.FADE = fade
85
86 def reset_time(self):
87 self.time = time.time()
80 88
81 89
82 90
83 91
84 class Mood(): 92 class Mood():
121 self.moods = [] 129 self.moods = []
122 self.read_mood_data() 130 self.read_mood_data()
123 # pg.quit() 131 # pg.quit()
124 # sys.exit(-1) 132 # sys.exit(-1)
125 133
134 self.FADE = FADE
135
126 pass 136 pass
127 137
128 def read_mood_data(self): 138 def read_mood_data(self):
129 139
130 with open('moods.csv') as mf: 140 with open('moods.csv') as mf:
131 data = mf.readlines()[1:] 141 data = mf.readlines()[1:]
132 for line in data : 142 for line in data :
133 l = line.split(',') 143 l = line.split(',')
134 mood = Mood(l[0],l[1],l[2]) 144 mood = Mood(l[0],l[1],l[2])
135 self.moods.append(mood) 145 self.moods.append(mood)
136 with open('feelings.txt') as ff: 146 # with open('feelings.txt') as ff:
137 data = ff.readlines() 147 # data = ff.readlines()
138 data = map(lambda x: x.split('\t'),data) 148 # data = map(lambda x: x.split('\t'),data)
149 # for mood in self.moods :
150 # for colors in data :
151 # if mood.word == colors[0] :
152 # mood.color = colors[2]
153 with open('colors.txt') as ff:
154 data = ff.readlines()[1:]
155 data = map(lambda x: x.split(','),data)
139 for mood in self.moods : 156 for mood in self.moods :
157 d = cd = sys.float_info.max
140 for colors in data : 158 for colors in data :
141 if mood.word == colors[0] : 159 d = mood.get_distance(float(colors[0]),float(colors[1]))
142 mood.color = colors[2] 160 if d < cd :
143 pass 161 cd = d
144 for mood in self.moods: 162 mood.color = tuple(map(lambda x: int(pow(math.atan((float(x)/7.0)),12.5)),(colors[2],colors[3],colors[4])))
145 if mood.color : 163
146 mood.color = map(lambda x: '0x'+str(x).strip(),[mood.color[0:2],mood.color[2:4],mood.color[4:]]) 164 # for mood in self.moods:
147 mood.color = tuple(map(lambda x: int(eval(x)),mood.color)) 165 # if mood.color :
148 # print mood.color 166 # # mood.color = map(lambda x: '0x'+str(x).strip(),[mood.color[0:2],mood.color[2:4],mood.color[4:]])
167 # mood.color = tuple(map(lambda x: int(x),mood.color))
168 # print mood.color
149 169
150 170
151 def update(self): 171 def update(self):
152 172
153 # delete invisibles 173 # delete invisibles
175 d = mood.get_distance(x,y) 195 d = mood.get_distance(x,y)
176 if d < cd : 196 if d < cd :
177 cd = d 197 cd = d
178 cmood = mood 198 cmood = mood
179 199
180 new = Blob(self.bg,x,y,mood=cmood) 200 new = Blob(self.bg,x,y,mood=cmood,fade=self.FADE)
181 if not new in self.blobs : 201 if not new in self.blobs :
182 self.blobs.insert(0,new) 202 self.blobs.insert(0,new)
183 elif c > self.blobs[self.blobs.index(new)].count: 203 elif c > self.blobs[self.blobs.index(new)].count:
184 self.blobs[self.blobs.index(new)].increment(c) 204 self.blobs[self.blobs.index(new)].increment(c)
185 205
220 pg.quit() 240 pg.quit()
221 sys.exit() 241 sys.exit()
222 elif event.type == KEYDOWN : 242 elif event.type == KEYDOWN :
223 if event.key == K_ESCAPE : 243 if event.key == K_ESCAPE :
224 pg.event.post(pg.event.Event(QUIT)) 244 pg.event.post(pg.event.Event(QUIT))
245 elif event.key == K_SPACE :
246 self.blobs = []
247 elif event.key == K_s :
248 if self.FADE :
249 print "fade off"
250 self.FADE = 0
251 for blob in self.blobs :
252 blob.fade(0)
253 else:
254 print "fade on"
255 self.FADE = 15
256 for blob in self.blobs :
257 blob.fade(15)
258 blob.reset_time()
259
260
225 261
226 262
227 # Draw 263 # Draw
228 self.draw() 264 self.draw()
229 265