def Run(self):
     nombreCiudadOrigen = self.Model.CiudadOrigen.get()
     recorrido = None
     if nombreCiudadOrigen != '':
         recorrido = Heuristica.CalcularRecorridoIniciandoEn(
             list(
                 filter(lambda capital: capital.Nombre == nombreCiudadOrigen, DistanciaHelper.Capitales))[
                 0], self)
     else:
         recorrido = Heuristica.CalcularMejorRecorrido(self)
     self.Model.DistanciaTotal.set(DistanciaHelper.GetDistanciaTotal(recorrido))
     MapHelper.DibujarMapa(recorrido)
     self.progress['value'] = 0
     self.update_idletasks()
示例#2
0
 def CalcularMejorRecorrido(ventana=None) -> []:
     mejorRecorrido = None
     minimaDistancia = None
     for capital in DistanciaHelper.Capitales:
         if ventana is not None:
             ventana.progress['value'] += (100 /
                                           len(DistanciaHelper.Capitales))
             ventana.update_idletasks()
         recorrido = Heuristica.CalcularRecorridoIniciandoEn(capital)
         distancia = DistanciaHelper.GetDistanciaTotal(recorrido)
         if minimaDistancia is None or distancia < minimaDistancia:
             mejorRecorrido = recorrido
             minimaDistancia = distancia
     return mejorRecorrido
 def Distancia(self):
     return DistanciaHelper.GetDistanciaTotal(self.GetAllCiudades())
示例#4
0
    def DibujarMapa(recorrido: []):
        """Método que dibuja el recorrido recibido como parámetro en un mapa"""
        pg.init()
        NEGRO = (0, 0, 0)
        GRIS = (200, 200, 200)
        BLANCO = (255, 255, 255)
        ROJO = (255, 0, 0)
        CELESTE = (0, 255, 100)
        Dimensiones = (500, 892)
        pg.display.set_caption(
            'Mejor recorrido - ' +
            repr(DistanciaHelper.GetDistanciaTotal(recorrido)) + ' Km')
        mapa = pg.display.set_mode(Dimensiones)
        mapa.fill(GRIS)
        mapa.blit(pg.image.load('map.png'), (0, 0))
        posicionRefenciasX = 370
        posicionReferenciaY = 470
        font = pg.font.SysFont('calibri', 14)
        font.set_italic(True)
        rectReferencias = pg.Rect(295, 460, 150, 330)
        pg.draw.rect(mapa, BLANCO, rectReferencias)
        pg.draw.line(mapa, NEGRO, (295, 460), (295 + 150, 460), 2)
        pg.draw.line(mapa, NEGRO, (295 + 150, 460), (295 + 150, 460 + 330), 2)
        pg.draw.line(mapa, NEGRO, (295 + 150, 460 + 330), (295, 460 + 330), 2)
        pg.draw.line(mapa, NEGRO, (295, 460 + 330), (295, 460), 2)
        font.set_underline(True)
        text = font.render('Referencias:', True, NEGRO)
        textRect = text.get_rect()
        textRect.center = (posicionRefenciasX, posicionReferenciaY)
        mapa.blit(text, textRect)
        font.set_underline(False)
        pg.display.update()
        font.set_italic(False)
        for indice in range(len(recorrido) - 1):
            pg.draw.circle(mapa, ROJO,
                           (recorrido[indice].Lat, recorrido[indice].Long), 4)
            text = font.render(
                repr(indice + 1) + ". " + recorrido[indice].Nombre, True,
                NEGRO)
            textRect = text.get_rect()
            textRect.center = (posicionRefenciasX,
                               posicionReferenciaY + (13 * (indice + 1)))
            mapa.blit(text, textRect)

        pg.display.update()
        font.set_bold(True)
        for indice in range(len(recorrido) - 1):
            pg.draw.aaline(
                mapa, CELESTE, (recorrido[indice].Lat, recorrido[indice].Long),
                (recorrido[indice + 1].Lat, recorrido[indice + 1].Long), 1)
            pg.display.update()
            time.sleep(0.1)

        font.set_bold(True)
        for indice in range(len(recorrido) - 1):
            text = font.render(repr(indice + 1), True, NEGRO)
            textRect = text.get_rect()
            textRect.center = (recorrido[indice].Lat + 8,
                               recorrido[indice].Long - 8)
            mapa.blit(text, textRect)
        pg.display.update()

        EXIT = False
        while not EXIT:
            for event in pg.event.get():
                if event.type == pg.QUIT:
                    EXIT = True
        pg.quit()