def _extraer_datos(handler): """Recibe: archivo, Devuelve: 2 grafos Extrae los datos del archivo y los devuelve""" #variables fila = [] nodos_cant = 0 calles_cant = 0 i = 0 #indice generico info_nodo = {} #donde guardo la informacion de los nodos grafo_nodos = Grafo() grafo_calles = Grafo() #Cargo el manejador de csv contenido_csv = csv.reader(handler, delimiter=",") #obtengo la primer linea, que me dice cuantos -NODOS- son fila = contenido_csv.next() nodos_cant = int(fila[0]) #avanzo para obtener la primer fila de -NODOS- fila = contenido_csv.next() #obtengo los datos de los -NODOS- for i in range(nodos_cant - 1): #guardo la info del nodo info_nodo[int(fila[0])] = { 'x': float(fila[1]), 'y': float(fila[2]), 'lon': float(fila[4]), 'lat': float(fila[3]) } #avanzo una posicion si no estoy en el ultimo -NODO- if i != nodos_cant: fila = contenido_csv.next() #obtengo la cantidad de -CALLES- fila = contenido_csv.next() calles_cant = int(fila[0]) #avanzo para obtener la primer fila de -CALLES- fila = contenido_csv.next() #obtengo los datos de las -CALLES- for i in range(calles_cant - 1): if int(int(fila[4])) not in grafo_nodos: grafo_nodos.agregar_vertice(int(fila[4])) if texto(fila[1]) not in grafo_calles: grafo_calles.agregar_vertice(texto(fila[1])) #Agrego las aristas grafo_nodos.agregar_arista(int(fila[4]), int(fila[5]), int(fila[2])) grafo_calles.agregar_arista(texto(fila[1]), int(fila[4]), int(fila[5])) #Cuando son mano unica if int(fila[3]) == 0: if int(fila[5]) not in grafo_nodos: grafo_nodos.agregar_vertice(int(fila[5])) grafo_nodos.agregar_arista(int(fila[5]), int(fila[4]), int(fila[2])) #devuelvo los grafos e info_nodo if i != calles_cant: fila = contenido_csv.next() return grafo_nodos, grafo_calles, info_nodo
def _extraer_datos(handler): """Recibe: archivo, Devuelve: 2 grafos Extrae los datos del archivo y los devuelve""" #variables fila = [] nodos_cant = 0 calles_cant = 0 i = 0 #indice generico info_nodo = {} #donde guardo la informacion de los nodos grafo_nodos = Grafo() grafo_calles = Grafo() #Cargo el manejador de csv contenido_csv = csv.reader(handler, delimiter=",") #obtengo la primer linea, que me dice cuantos -NODOS- son fila = contenido_csv.next() nodos_cant = int(fila[0]) #avanzo para obtener la primer fila de -NODOS- fila = contenido_csv.next() #obtengo los datos de los -NODOS- for i in range(nodos_cant-1): #guardo la info del nodo info_nodo[ int(fila[0]) ] = {'x': float(fila[1]), 'y': float(fila[2]), 'lon': float(fila[4]),'lat': float(fila[3])} #avanzo una posicion si no estoy en el ultimo -NODO- if i != nodos_cant: fila = contenido_csv.next() #obtengo la cantidad de -CALLES- fila = contenido_csv.next() calles_cant = int(fila[0]) #avanzo para obtener la primer fila de -CALLES- fila = contenido_csv.next() #obtengo los datos de las -CALLES- for i in range(calles_cant-1): if int(int(fila[4])) not in grafo_nodos: grafo_nodos.agregar_vertice(int(fila[4])) if texto(fila[1]) not in grafo_calles: grafo_calles.agregar_vertice(texto(fila[1])) #Agrego las aristas grafo_nodos.agregar_arista(int(fila[4]),int(fila[5]),int(fila[2])) grafo_calles.agregar_arista(texto(fila[1]),int(fila[4]),int(fila[5])) #Cuando son mano unica if int(fila[3]) == 0: if int(fila[5]) not in grafo_nodos: grafo_nodos.agregar_vertice(int(fila[5])) grafo_nodos.agregar_arista(int(fila[5]),int(fila[4]),int(fila[2])) #devuelvo los grafos e info_nodo if i != calles_cant: fila = contenido_csv.next() return grafo_nodos, grafo_calles ,info_nodo
def __init__(self, identificador, parent, text, fondo = 0, ancho = 500): """ Método inicializador de la clase. @param identificador: Variable usada para identificar al botón. @type identificador: str @param parent: Instancia del gestor de pantallas. @type parent: Manejador @param text: Variable que indica el texto que tendrá el botón. @type text: str @param fondo: Indica si el fondo del botón sera con imagen o sin imagen (en desarrollo). @type fondo: bool @param ancho: Indica el ancho del botón. Es usado para cuadrar el texto centrado. @type ancho: int """ pygame.sprite.Sprite.__init__(self) self.ancho = ancho self.parent =parent tipografia = pygame.font.match_font("FreeSans", False, False) font = pygame.font.Font(tipografia, parent.config.t_fuente) self.identificador = identificador varios = "../imagenes/png/varios/" if fondo == 0: texto1 = font.render(text, 1, TEXT_COLOR) textorect = texto1.get_rect() texto2 = font.render(text, 1, COLOR_RED) self.img_fondo = pygame.image.load(varios + "img-boton.png") self.img_fondo2 = pygame.image.load(varios + "img-boton.png") imgrect = self.img_fondo.get_rect() textorect.center = imgrect.center[0],imgrect.center[1]+imgrect.center[1]/3 self.img_fondo.blit (texto1, textorect) self.img_fondo2.blit (texto2,textorect) self.rect = self.img_fondo.get_rect() self.image= self.img_fondo if fondo == 1: txt = texto(0,0,text,parent.config.t_fuente,"texto_act",self.ancho) self.rect = pygame.Rect(0,0,self.ancho,txt.ancho_final) image_texto = pygame.Surface((self.ancho,txt.ancho_final)) image_texto.fill((255,255,255)) image_texto.set_colorkey((255,255,255)) for i in txt.img_palabras: image_texto.blit(i.image, i.rect) self.image = image_texto self.img_fondo = image_texto self.img_fondo2 = image_texto
def __init__(self, parent , texto1, palabra_boton , imagenes , grupo, tipo = 0 ,px=512,py=281,tam =0): """ Método inicializador de la clase. @param parent: Instancia del gestor de pantallas. @type parent: Manejador @param texto1: Indica el texto que será mostrado en la ventana emergente. @type texto1: str @param palabra_boton: Indica la palabra que tendrá el botón. Solo es usado en caso de ser tipo = 0, de ser distinto de 0 toma el valor de una cadena y no será asignado. @type palabra_boton: str @param imagenes: Indica la(s) imagen(es) que mostrará la ventana emergente. En caso de tipo = 2 no es un campo necesario, en caso de tipo = 1 debe ser una superficie y en caso de tipo = 0 el parámetro debe ser una tupla con dos imágenes, la posición 0 sera la imagen que estará al lado del texto, mientras que la posición 1 sera la imagen que estará debajo del texto. @type imagenes: pygame.Surface, tuple @param grupo: Representa un grupo de Sprites donde será agregado el sprite con la imagen y su rectángulo. @type grupo: pygame.sprite.Group @param tipo: Determina el tipo de ventana emergente, si toma el valor de 2 la ventana emergente solo tomara el parámetro texto1 (los demás parámetros deben ser introducidos), en caso de tomar el valor 1 la ventana emergente tomara los parámetros texto1, imagenes y palabra_boton, mostrando una ventana ordenada con texto justificado, un espacio a derecha donde sera ubicada la imagen (dicha imagen debe tener máximo 1/3 del tamaño de la ventana emergente) y un botón centrado debajo del texto. En caso de tomar valor 0 la ventana emergente sera similar a la anterior, con la diferencia que tendrá una imagen más ubicada en la parte izquierda del botón y debajo del texto. @type tipo: int """ pygame.sprite.Sprite.__init__(self) self.parent = parent self.sprite = pygame.sprite.Sprite() varios = "../imagenes/png/varios/" self.texto = pygame.Surface self.tipo = tipo self.arreglo_botones=[] self.grupo = grupo self.click = -1 self.activo = 0 self.tam = 0 if tipo == 0: self.img_fondo = pygame.image.load(varios + "cuadropop-up.png").convert_alpha() self.sprite.image = pygame.image.load(varios + "cuadropop-up.png").convert_alpha() self.sprite.rect = self.sprite.image.get_rect() x=30 y=30 self.texto = texto(x, y,texto1[0], parent.config.t_fuente , "texto_act" ,(self.sprite.rect.width*2/3 )) self.area_texto = pygame.Rect(x,y,self.sprite.rect.w*2/3,self.texto.ancho_final) self.area_imagenes = pygame.Rect((self.sprite.rect.w*2/3)+80, y, self.sprite.rect.w/3, self.texto.ancho_final) self.parent = parent self.boton = Button(0,self.parent,palabra_boton) self.boton.mover_boton( self.sprite.rect.width/2, self.area_texto.h + x*2 + self.boton.rect.h / 2 ) self.boton_rect = pygame.Rect(self.boton.rect.x , self.boton.rect.y , self.boton.rect.width , self.boton.rect.height) self.sprite.image = fondo(self.sprite.rect.w, self.boton.rect.y+self.boton.rect.h+x,5 ).return_imagen() self.imagen = pygame.sprite.Sprite() if type (imagenes)!= pygame.Surface : self.imagen2 = pygame.sprite.Sprite() self.imagen.image = imagenes[0] self.imagen.rect =self.imagen.image.get_rect() self.imagen.rect.center =(self.sprite.rect.w*2/3 +(self.sprite.rect.w/3)/2 , self.area_imagenes.h/2 + self.boton_rect.h/2 ) self.imagen2.image = imagenes[1] self.imagen2.rect = self.imagen.image.get_rect() self.imagen2.rect.left = x self.imagen2.rect.y = self.area_texto.h+40 self.sprite.image.blit(self.imagen2.image , self.imagen2.rect) else: self.imagen.image = imagenes self.imagen.rect =self.imagen.image.get_rect() self.imagen.rect.center =(self.sprite.rect.w*2/3 +(self.sprite.rect.w/3)/2 , self.area_imagenes.h/2 + self.boton_rect.h/2 ) if self.imagen.rect.y < 5: self.imagen.rect.y = 6 for i in self.texto.img_palabras: self.sprite.image.blit(i.image, i.rect) self.sprite.image.blit(self.boton.image , self.boton.rect) self.sprite.image.blit(self.imagen.image , self.imagen.rect) self.sprite.rect.center = (px, py) self.boton_rect.center = (self.sprite.rect.x + self.sprite.rect.width/2, self.sprite.rect.y + self.area_texto.h + x*2 + self.boton.rect.h / 2) if tipo == 1: self.img_fondo = pygame.image.load(varios + "cuadropop-up.png").convert_alpha() self.sprite.image = pygame.image.load(varios + "cuadropop-up.png").convert_alpha() self.sprite.rect = self.sprite.image.get_rect() x = 15 y = 15 o = 0 separacion = 30 tabulacion = 30 self.sprite.rect.w += tam for i in texto1: if o ==0: self.texto = texto(x, y,i, parent.config.t_fuente , "texto_act" ,(self.sprite.rect.width )-x) if o>0: self.arreglo_botones.append(Button(o-1,self.parent,i,1,self.sprite.rect.w - x*2 -tabulacion)) o+=1 self.texto.rect = pygame.Rect(x,y,self.sprite.rect.w - 80, self.texto.ancho_final) y+= self.texto.ancho_final + separacion for i in self.arreglo_botones: i.rect.x = x+tabulacion/2 i.rect.y = y y+=i.rect.h + separacion/2 self.img_fondo = fondo(self.sprite.rect.w, y).return_imagen() self.sprite.image = fondo(self.sprite.rect.w, y).return_imagen() for i in self.texto.img_palabras: self.sprite.image.blit(i.image,i.rect) self.img_fondo.blit(i.image,i.rect) self.sprite.rect.center = (px, py) for i in self.arreglo_botones: self.sprite.image.blit(i.image,i.rect) self.img_fondo.blit(i.image,i.rect) i.rect.x = self.sprite.rect.x + i.rect.x i.rect.y = self.sprite.rect.y + i.rect.y if tipo == 2: self.sprite.image = pygame.image.load(varios + "cuadropop-up.png").convert_alpha() self.sprite.rect = self.sprite.image.get_rect() self.sprite.rect.w += tam self.texto = texto2(15,15, texto1,parent.config.t_fuente, "intercalado", self.sprite.rect.w -15, imagenes) self.sprite.image = fondo(self.sprite.rect.w, self.texto.ancho_final+30).return_imagen() self.sprite.rect.h = self.texto.ancho_final+30 self.tam = self.texto.ancho_final+60 for i in self.texto.img_palabras: self.sprite.image.blit(i.image, i.rect) self.sprite.rect.center=(px,py)