// Last edited on 2000-08-31 02:16:00 by stolfi // Ferramentas para desenhar mapas (na tela ou em papel) //Classe e metodo planta: criados e desenvolvidos por Alex (970149) //Metodo destacaCaminho: criado e desenvolvido por Marcelo (971161) //Dono: Alex(970149) import java.awt.*; import Planta; import Escala; import EscalaImpl; import Ponto; import LocalizadorImpl; import Trecho; import Servico; import Localizador; import Esquina; import Nodo; public class DesenhadorImpl extends Desenhador { public DesenhadorImpl() { } public final void desenhaPlanta(Graphics g, Escala e, Rectangle mR, Planta pl) { Servico[] S = L.todosServicosDentro(mR); Trecho[] T = L.todosTrechosDentro(mR); Esquina[] Q = L.todasEsquinasDentro(mR); g.setColor(Color.black); for(int i=0; i < T.length; i++) { T[i].desenha(g, e); } for(int i=0; i < Q.length; i++) { Q[i].desenha(g, e); } for(int i=0; i < S.length; i++) { S[i].desenha(g, e); } }; public final void destacaTrechos(Graphics g, Escala e, Trecho[] t) { Esquina eOrig = null; Ponto mOrig = null; Point tOrig = new Point(); Esquina eDest = null; Ponto mDest = null; Point tDest = new Point(); g.setColor(Color.red); for (int i= 0; i< t.length; i++) { eOrig = t[i].orig(); mOrig = t[i].origPos(); e.mapaParaTela(mOrig, tOrig); if ((mDest != null) && (eDest == eOrig)) { g.drawLine(tDest.x, tDest.y, tOrig.x, tOrig.y); } eDest = t[i].dest(); mDest = t[i].destPos(); e.mapaParaTela(mDest, tDest); g.drawLine(tOrig.x, tOrig.y, tDest.x, tDest.y); } } public final void destacaNodo(Graphics g, Escala e, Nodo u) { bola(g, e, u.posicao()); } public final void destacaCaminho(Graphics g, Escala e, Nodo fin) { Nodo v = this.prev; if (v == null) { this.destacaNodo(g, e); } else { v.destacaCaminho(g, e); Desenhador.linha(g, e, v.posicao(), this.posicao()); } } private Point pTela = new Point(); private Point qTela = new Point(); private Ponto pTmp = new Ponto(); private Ponto qTmp = new Ponto(); public abstract void bola(Graphics g, Escala e, Ponto p, int raio) { e.mapaParaTela(p, pTela); g.drawOval(pTela.x - raio, pTela.y - raio, 2*raio+1, 2*raio+1) } public abstract void linha(Graphics g, Escala e, Ponto p, Ponto q) { e.mapaParaTela(p, pTela); e.mapaParaTela(q, qTela); g.drawLine(pTela.x, pTela.y, qTela.x, qTela.y); } public static final void poligono(Graphics g, Escala e, Ponto[] p, boolean enche) { int np = p.length; int[] x = new int[np]; int[] y = new int[np]; for (int i = 0; i < np; i++) { e.mapaParaTela(p[i], pTela); x[i] = pTela.x; y[i] = pTela.y; } g.fillPolygon(x, y, np); } public abstract void retangulo(Graphics g, Escala e, Rectangle r, boolean enche) { g.drawRect(r.x, r.y, r.width, r.height); g.drawRect(r.x+1, r.y+1, r.width-2, r.height-2); } }