package pckDesenho;

import pckInterface.*;
import java.util.*;
import pckPlano.*;
import pckMapa.*;

/**
 * Titulo: Desenhador
 * Descricao: A classe Desenhador eh a classe principal que chama todas as
 *            funcoes publicas de Desenho. Ela eh composta por um
 *            conjunto de vertices e as arestas que os ligam contem
 *            metodos para desenho de mapa e rotas.
 * @author GRUPO-A
 * @version 0.2
 */

public abstract class Desenhador{
    /**
     * Membros responsaveis pelo modulo:
     * Cleber Valgas Mira: 980866
     * Claus Aranha: 980863
     **/
    
    //Metodos
    /**
     * Define o construtor de um mapa. Ele cria um mapa vazio.
     * Entrada: Nada
     * Saida: Nada
     */    
    
    // public abstract Desenhador();

    /**
     * Cria um mapa retirando informacoes da representacao de mapa.
     * Entrada: Requer uma representacao de mapa com arestas acessiveis
     *          com pontos iniciais e finais tambem acessiveis.
     * Saida: Nada
     */
    // public abstract Desenhador(Mapa mapa);

    /**
     * Remove todas as informacoes de um mapa
     * Entrada: Nada
     * Saida: Nada
     */
    public abstract void limparMapa();


    /**
     * Carrega um mapa com as informacoes da representacao
     * Entrada: uma representacao de mapa com arestas acessiveis
     * Saida: Nada
     */
    
    public abstract void carregarMapa(Mapa mapa);

    /**
     * Desenha o mapa na tela com as informacoes contidas
     * Entrada: Um objeto do tipo gravura
     * Saida: Nada
     */
    public abstract void desenharMapa(Gravura g);
    
    /**
     * Apaga o mapa da tela, de forma a deixa-la limpa.
     * Entrada: Um objeto do tipo gravura
     * Saida: Nada
     */
    public abstract void apagarMapa(Gravura g);
   
    /**
     * Altera os atributos de desenho do mapa de forma que, da proxima vez 
     * que ele for desenhado, ele esteja maior ou menor, em proporcao ao
     * fator utilizado. Ou seja, para aproximar o mapa, e' necessario 
     * executar esta funcao, apagar e redesenhar o mapa.
     * Entrada: fator - um float que diz a proporcao do novo mapa em relacao
     *          ao atual.
     * Saida: nada.
     */
    public abstract void aproximarMapa(float fator);

    /**
     * Altera os atributos de desenho do mapa de forma que, da proxima vez 
     * que ele for desenhado, ele esteja transposto em proporcao ao
     * fator utilizado. Ou seja, para girar o mapa, e' necessario 
     * executar esta funcao, apagar e redesenhar o mapa.
     * Entrada: viradas. A funcao gira o mapa 90 graus no sentido horario,
     *          e a entrada diz quantas vezes deve-se girar o mapa.
     * Saida: nada.
     */
    public abstract void girarMapa(int viradas);
    /** 
     * Marca uma rota no mapa, mudando a cor das arestas pertencentes
     * aquela rota, de acordo com uma funcao do numero de rotas que 
     * passa por um dado trecho.
     * Entrada: rota - um objeto que contenha a informacao de todas 
     *          as arestas pertecentes aquela rota.
     *          cor - a cor que deve setar uma rota:
     *          preto, azul claro, azul, azul escuro, verde claro, verde, verde escuro,
     *          amarelo claro, amarelo, amarelo escuro, laranja claro, laranja, laranja escuro,
     *          vermelho claro, vermelho, vermelho escuro sao as cores validas.
     * Saida: nada.
     */
    public abstract void pintarRota(Rota rota, String cor);
    
    /** 
     * Marca uma aresta no mapa, mudando sua cor.
     * Entrada: um trecho ou passo a ser colorido. 
     *          cor - a cor que deve setar uma rota:
     *          preto, azul claro, azul, azul escuro, verde claro, verde, verde escuro,
     *          amarelo claro, amarelo, amarelo escuro, laranja claro, laranja, laranja escuro,
     *          vermelho claro, vermelho, vermelho escuro sao as cores validas.
     * Saida: nada.
     */
    
    public abstract void pintarAresta(Trecho trecho, String cor);
    
    public abstract void pintarAresta(Passo passo, String cor);
    
    public abstract Vector trecho2Aresta(Trecho[] trechos);
}// Fim de Desenhador








