コード例 #1
0
ファイル: tp3extra.py プロジェクト: Santiago-Czop/Algo1TP3
def analizar_secuencia(instrucciones, codificaciones):
    """ Recibe un string con instrucciones y un diccionario que contiene la codificación para algunas instrucciones variables. 
    Devuelve un set de trazos correspondientes al análisis del string, la distancia máxima y la distancia mínima con la que ha de crearse
    el svg.
    """
    coordenada_min = Vector()
    coordenada_max = Vector()

    pila_de_tortugas = Pila()
    pila_de_tortugas.apilar(Tortuga())

    tortuga_tope = pila_de_tortugas.ver_tope()
    profundidad = len(pila_de_tortugas)

    trazos = set()

    for c in instrucciones:
        if c == "[":
            nueva_tortuga = tortuga_tope.clonar()
            pila_de_tortugas.apilar(nueva_tortuga)

            tortuga_tope = pila_de_tortugas.ver_tope()
            profundidad = len(pila_de_tortugas)
        elif c == "]":
            pila_de_tortugas.desapilar()

            tortuga_tope = pila_de_tortugas.ver_tope()
            profundidad = len(pila_de_tortugas)
        elif c == "F":
            ultima_posicion = tortuga_tope.conseguir_posicion()

            tortuga_tope.avanzar(DISTANCIA_BASE *
                                 (FACTOR_EXPANSION**profundidad))

            nueva_posicion = tortuga_tope.conseguir_posicion()

            coordenada_min = calcular_min(coordenada_min, nueva_posicion)
            coordenada_max = calcular_max(coordenada_max, nueva_posicion)

            nuevo_trazo = Trazo(ultima_posicion, nueva_posicion,
                                tortuga_tope.conseguir_grosor(),
                                tortuga_tope.conseguir_color())

            trazos.add(nuevo_trazo)
        elif c == "f":
            tortuga_tope.levantar_pluma()
            tortuga_tope.avanzar(DISTANCIA_BASE *
                                 (FACTOR_EXPANSION**profundidad))
            tortuga_tope.bajar_pluma()
        elif c in "+-|":
            tortuga_tope.girar(codificaciones[c])
        elif c in COLORS:
            tortuga_tope.cambiar_color_pluma(COLORS[c])
        elif c in "0123456789":
            print(c)
            tortuga_tope.cambiar_grosor_pluma(c)

    return trazos, coordenada_min + Vector(-50, -50), coordenada_max + Vector(
        50, 50)