Module capturar
[hide private]
[frames] | no frames]

Source Code for Module capturar

  1  #!/usr/bin/env python 
  2  #-*- coding: iso-8859-15 -*- 
  3   
  4  """ 
  5  [capturar.py] 
  6  Modulo para capturar los colores del cubo. 
  7  """ 
  8  __author__ = "Victor Ramirez de la Corte" 
  9  __date__ = "23/04/2009" 
 10  __version__ = "PyRubik v0.6.5" 
 11   
 12  import random 
 13  import sys, os 
 14  import pygame 
 15  import copy 
 16  from language import * 
 17  import colorsys 
 18   
19 -class Capturar:
20 """Clase que contiene funciones distintas para capturar los colores de cubo"""
21 - def __init__(self):
22 #OTROS POSIBLES COLORES 23 #(0, 0, 0, 255), (130, 0, 130, 255), (130, 130, 130, 255)] 24 self.colores = lll.colores 25 self.capas = [ [],[],[],[],[],[] ] 26 self.resolucion = [ [],[],[],[],[],[] ]
27
28 - def capturarCaras(self):
29 """Capturar los colores del cubo manualmente""" 30 cont = 0 31 for capas in self.capas: 32 sys.stdout.write(os.popen('clear').read()) 33 for cara in range(6): 34 print self.colores[cara][0], self.colores[cara][1] 35 36 apto = False 37 comprobarColores = True 38 while not apto: #TODO TODO no se puede comprobar los colores sin 39 #antes modificar, pero modificando la liamos 40 string = "cara %d --> " %(cont) 41 #cadena = raw_input(string) 42 cadena = 9*str(cont) #PRUEBAS TODO 43 44 for contColor in range(5): #comprobando 9 colores/color 45 if self.colores[contColor][1] < 0: 46 comprobarColores = False 47 print lll.error3 48 49 if cadena.isdigit() and len(cadena) == 9 and comprobarColores: 50 for color in range(9): #contando y añadiendo colores 51 self.colores[int(cadena[color])][1] -=1 52 cadenaColor = self.colores[int(cadena[color])][0] 53 capas.append( int(cadenaColor[0]) ) 54 55 apto = True 56 cont += 1
57 58
59 - def getCapas(self):
60 """Devuelve los colores que tiene cada capa del cubo""" 61 return self.capas
62 63 ############
64 - def mov(self, *mov):
65 """recibe como entrada movimientos para mover el cubo. Ej: 'L', 'R2' 66 Ejemplos de movimientos estando el cubo hecho: 67 #anaconda = ("L","U","B'","U'","R","L'","B","R'","F","B'","D","R","D'","F'") 68 #cubodentrotro = ("F","L","F","U'","R","U","F2","L2","U'","L'","B","D'","B'","L2","U") 69 #cruces = ("F","F","B","B","D","D","U","U","R","R","L","L") 70 """ 71 change = (2, 5, 8, 1, 4, 7, 0, 3, 6) 72 73 for gen in mov: 74 if gen[0] == lll.movs[0]: part1 = 0 75 elif gen[0] == lll.movs[12]: part1 = 1 76 elif gen[0] == lll.movs[3]: part1 = 2 77 elif gen[0] == lll.movs[9]: 78 part1 = 3 79 change = (6, 3, 0, 7, 4, 1, 8, 5, 2) 80 elif gen[0] == lll.movs[15]: part1 = 4 81 elif gen[0] == lll.movs[6]: 82 part1 = 5 83 change = (6, 3, 0, 7, 4, 1, 8, 5, 2) 84 else: print lll.error2 85 86 part2 = 1 87 if len(gen) == 2: 88 if gen[1].isdigit(): 89 part2 = 2 90 else: 91 part2 = 3 92 93 cont = 0 94 while part2 > 0: 95 self.antCapas = copy.deepcopy(self.capas) 96 97 for c in range(9): 98 self.capas[part1][c] = self.antCapas[part1][change[c]] 99 100 if part1 == 0: #U 101 ar1 = (1,1,1,3,3,3,4,4,4,5,5,5) 102 ar2 = (0,1,2,0,1,2,0,1,2,0,1,2) 103 elif part1 == 1: #F 104 ar1 = (2,2,2,3,3,3,0,0,0,5,5,5) 105 ar2 = (0,1,2,6,3,0,8,7,6,2,5,8) 106 elif part1 == 2: #D 107 ar1 = (4,4,4,3,3,3,1,1,1,5,5,5) 108 ar2 = (6,7,8,6,7,8,6,7,8,6,7,8) 109 elif part1 == 3: #R 110 ar1 = (2,2,2,4,4,4,0,0,0,1,1,1) 111 ar2 = (2,5,8,6,3,0,2,5,8,2,5,8) 112 elif part1 == 4: #B 113 ar1 = (2,2,2,5,5,5,0,0,0,3,3,3) 114 ar2 = (8,7,6,6,3,0,0,1,2,2,5,8) 115 elif part1 == 5: #L 116 ar1 = (0,0,0,4,4,4,2,2,2,1,1,1) 117 ar2 = (6,3,0,2,5,8,6,3,0,6,3,0) 118 119 for a in range(len(ar1)): 120 b = (a+3) % len(ar1) 121 self.capas[ar1[a]][ar2[a]] = self.antCapas[ar1[b]][ar2[b]] 122 123 part2 -= 1
124 125 126 #######
127 - def resolver(self):
128 pass
129 130
131 - def sacarColoresDeImagen(self):
132 """obtenemos los colores de dos imagenes hechas con la malla1.png""" 133 pygame.init() 134 135 imagen = pygame.image.load("capa0.png") 136 imagen2 = pygame.image.load("capa1.png") 137 138 X = imagen.get_width() 139 Y = imagen.get_height() 140 centerx = X/2 141 centery = Y/2 142 143 X2 = imagen2.get_width() 144 Y2 = imagen2.get_height() 145 centerx2 = X2/2 146 centery2 = Y2/2 147 148 #cogemos los colores de las distintas capas #TODO sacar 4 colores de cada capa 149 self.capas[0].append(imagen.get_at((int(1.0/6*X), int(3.0/12*Y)))) 150 self.capas[0].append(imagen.get_at((int(2.0/6*X), int(2.0/12*Y)))) 151 self.capas[0].append(imagen.get_at((centerx, int(1.0/12*Y)))) 152 self.capas[0].append(imagen.get_at((int(2.0/6*X), int(4.0/12*Y)))) 153 self.capas[0].append(imagen.get_at((centerx, int(3.0/12*Y)))) 154 self.capas[0].append(imagen.get_at((int(4.0/6*X), int(2.0/12*Y)))) 155 self.capas[0].append(imagen.get_at((centerx, int(5.0/12*Y)))) 156 self.capas[0].append(imagen.get_at((int(4.0/6*X), int(4.0/12*Y)))) 157 self.capas[0].append(imagen.get_at((int(5.0/6*X), int(3.0/12*Y)))) 158 159 self.capas[1].append(imagen.get_at((centerx + int(1.0/12*X), centery + int(1.0/24*Y)))) 160 self.capas[1].append(imagen.get_at((centerx + int(3.0/12*X), centery - int(1.0/24*Y)))) 161 self.capas[1].append(imagen.get_at((centerx + int(5.0/12*X), centery - int(3.0/24*Y)))) 162 self.capas[1].append(imagen.get_at((centerx + int(1.0/12*X), centery + int(5.0/24*Y)))) 163 self.capas[1].append(imagen.get_at((centerx + int(3.0/12*X), centery + int(3.0/24*Y)))) 164 self.capas[1].append(imagen.get_at((centerx + int(5.0/12*X), centery + int(1.0/24*Y)))) 165 self.capas[1].append(imagen.get_at((centerx + int(1.0/12*X), centery + int(9.0/24*Y)))) 166 self.capas[1].append(imagen.get_at((centerx + int(3.0/12*X), centery + int(7.0/24*Y)))) 167 self.capas[1].append(imagen.get_at((centerx + int(5.0/12*X), centery + int(5.0/24*Y)))) 168 169 self.capas[2].append(imagen2.get_at((centerx2, int(1.0/12*Y2)))) 170 self.capas[2].append(imagen2.get_at((int(4.0/6*X2), int(2.0/12*Y2)))) 171 self.capas[2].append(imagen2.get_at((int(5.0/6*X2), int(3.0/12*Y2)))) 172 self.capas[2].append(imagen2.get_at((int(2.0/6*X2), int(2.0/12*Y2)))) 173 self.capas[2].append(imagen2.get_at((centerx2, int(3.0/12*Y2)))) 174 self.capas[2].append(imagen2.get_at((int(4.0/6*X2), int(4.0/12*Y2)))) 175 self.capas[2].append(imagen2.get_at((int(1.0/6*X2), int(3.0/12*Y2)))) 176 self.capas[2].append(imagen2.get_at((int(2.0/6*X2), int(4.0/12*Y2)))) 177 self.capas[2].append(imagen2.get_at((centerx2, int(5.0/12*Y2)))) 178 179 self.capas[3].append(imagen2.get_at((centerx2 + int(5.0/12*X2), centery2 + int(5.0/24*Y2)))) 180 self.capas[3].append(imagen2.get_at((centerx2 + int(3.0/12*X2), centery2 + int(7.0/24*Y2)))) 181 self.capas[3].append(imagen2.get_at((centerx2 + int(1.0/12*X2), centery2 + int(9.0/24*Y2)))) 182 self.capas[3].append(imagen2.get_at((centerx2 + int(5.0/12*X2), centery2 + int(1.0/24*Y2)))) 183 self.capas[3].append(imagen2.get_at((centerx2 + int(3.0/12*X2), centery2 + int(3.0/24*Y2)))) 184 self.capas[3].append(imagen2.get_at((centerx2 + int(1.0/12*X2), centery2 + int(5.0/24*Y2)))) 185 self.capas[3].append(imagen2.get_at((centerx2 + int(5.0/12*X2), centery2 - int(3.0/24*Y2)))) 186 self.capas[3].append(imagen2.get_at((centerx2 + int(3.0/12*X2), centery2 - int(1.0/24*Y2)))) 187 self.capas[3].append(imagen2.get_at((centerx2 + int(1.0/12*X2), centery2 + int(1.0/24*Y2)))) 188 189 self.capas[4].append(imagen2.get_at((centerx2 - int(1.0/12*X2), centery2 + int(9.0/24*Y2)))) 190 self.capas[4].append(imagen2.get_at((centerx2 - int(3.0/12*X2), centery2 + int(7.0/24*Y2)))) 191 self.capas[4].append(imagen2.get_at((centerx2 - int(5.0/12*X2), centery2 + int(5.0/24*Y2)))) 192 self.capas[4].append(imagen2.get_at((centerx2 - int(1.0/12*X2), centery2 + int(5.0/24*Y2)))) 193 self.capas[4].append(imagen2.get_at((centerx2 - int(3.0/12*X2), centery2 + int(3.0/24*Y2)))) 194 self.capas[4].append(imagen2.get_at((centerx2 - int(5.0/12*X2), centery2 + int(1.0/24*Y2)))) 195 self.capas[4].append(imagen2.get_at((centerx2 - int(1.0/12*X2), centery2 + int(1.0/24*Y2)))) 196 self.capas[4].append(imagen2.get_at((centerx2 - int(3.0/12*X2), centery2 - int(1.0/24*Y2)))) 197 self.capas[4].append(imagen2.get_at((centerx2 - int(5.0/12*X2), centery2 - int(3.0/24*Y2)))) 198 199 self.capas[5].append(imagen.get_at((centerx - int(5.0/12*X), centery - int(3.0/24*Y)))) 200 self.capas[5].append(imagen.get_at((centerx - int(3.0/12*X), centery - int(1.0/24*Y)))) 201 self.capas[5].append(imagen.get_at((centerx - int(1.0/12*X), centery + int(1.0/24*Y)))) 202 self.capas[5].append(imagen.get_at((centerx - int(5.0/12*X), centery + int(1.0/24*Y)))) 203 self.capas[5].append(imagen.get_at((centerx - int(3.0/12*X), centery + int(3.0/24*Y)))) 204 self.capas[5].append(imagen.get_at((centerx - int(1.0/12*X), centery + int(5.0/24*Y)))) 205 self.capas[5].append(imagen.get_at((centerx - int(5.0/12*X), centery + int(5.0/24*Y)))) 206 self.capas[5].append(imagen.get_at((centerx - int(3.0/12*X), centery + int(7.0/24*Y)))) 207 self.capas[5].append(imagen.get_at((centerx - int(1.0/12*X), centery + int(9.0/24*Y))))
208
209 - def capturarColores6Capas(self):
210 """Captura los colores de 6 imagenes hechas con malla2.""" 211 212 self.capas = [ [],[],[],[],[],[] ] 213 #tick#pos = ((0,0),(0,160),(480,320),(480,160),(320, 160),(160,160)) 214 pos = ((0,0),(0,160),(160,160),(320, 160),(480,160),(480,320)) 215 xxx = (1, 3, 5) 216 217 for capa in range(len(self.capas)): 218 cont = 0 219 pix = [] 220 while cont < 9: 221 pix.append((27*xxx[cont/3-1]+pos[capa][0],27*xxx[cont%3-1]+pos[capa][1])) 222 cont +=1 223 imagen = pygame.image.load("capa%d.png" % capa) 224 for pixel in pix: 225 rgb = imagen.get_at(pixel) 226 rgb = pygame.Color(rgb[0], rgb[1], rgb[2]) 227 self.capas[capa].append(rgb) 228 return self.capas
229 230
231 - def rgbToHls(self):
232 """Pasar de RGB a HSL""" 233 for capas in range(6): 234 for cap in range(9): 235 hsl = self.capas[capas][cap].hsla 236 self.capas[capas][cap] = hsl
237
238 - def encontrarBlancos(self):
239 """Funcion para encontrar los colores que sean blancos en una lista de lista""" 240 blancoHSL = pygame.Color(255,255,255).hsla 241 for capas in range(6): 242 for cap in range(9): 243 if self.capas[capas][cap][1] <= 2500/255: 244 self.capas[capas][cap] = blancoHSL
245
246 - def coloresDelMedio(self):
247 """Devuelve los colores de los centros del cubo, que son fijos""" 248 colores = [] 249 for centros in range(6): 250 colores.append(self.capas[centros][4]) 251 colores.sort() 252 colores.remove(colores[0]) 253 print type(colores[1]), "JIIIIII" 254 return colores
255
256 - def coloresMedios(self):
257 """Capturamos los 6 colores medios""" 258 colores = [] 259 for cap in range(6): 260 for c in range(9): 261 colores.append(self.capas[cap][c]) #S --> 1 , L--> 0.36 262 colores.sort() 263 colores = (colores[4], colores[13], colores[22], colores[31], colores[40], colores[49]) 264 colores.remove(colores[0]) 265 return colores
266 267 268
269 - def setColores(self, colores):
270 """Editamos los colores para pintarlos con su color exacto ;)""" 271 dist = [] 272 dist.append((colores[0][0])) 273 dist.append((colores[1][0]-colores[0][0])/2.0) 274 dist.append((colores[2][0]-colores[1][0])/2.0) 275 dist.append((colores[3][0]-colores[2][0])/2.0) 276 dist.append((colores[4][0]-colores[3][0])/2.0) 277 dist.append((360-colores[4][0])) 278 #contad = [] 279 for cap in range(6): 280 for c in range(9): 281 contador = 0 282 color = self.capas[cap][c][0] 283 for num in range(len(colores)): 284 if color < (colores[num][0] + dist[num+1]) and\ 285 color >= (colores[num][0] - dist[num]) and color != 0: 286 self.capas[cap][c] = colores[num] 287 contador +=1 288 #contad.append(num) 289 if contador != 1 and color != 0: 290 print "ERROR", contador, color 291 #contad.sort() 292 #print contad, "TAMAÑO",len(contad) 293 294 return self.capas
295
296 - def tupleToRgb(self, capas):
297 self.capas = [ [],[],[],[],[],[] ] 298 for capa in range(6): 299 for ca in range(9): 300 rgb = capas[capa][ca][:3] 301 #rg0 = rgb[0] 302 #rg1 = rgb[1] 303 #rg2 = rgb[2] 304 rgb[0] 305 rgb[0] = int(rgb[0]) * 360 306 rgb[1] = int(rgb[1]) * 100 307 rgb[2] = int(rgb[2]) * 100 308 rgb = colorsys.hls_to_rgb(*map(lambda x: x/255.0, rgb)) #RGB to HLS 309 print rgb 310 rgb = pygame.Color(int(rgb[0]), int(rgb[1]), int(rgb[2])) 311 self.capas[capa].append(rgb) 312 print self.capas
313