Commit 93b59bca authored by Falucho's avatar Falucho

Se trabaja sobre la renderizacion del mapa

parent 8373d2d5
......@@ -2,7 +2,6 @@ package uy.edu.fing.lrt.controlador;
import uy.edu.fing.lrt.modelo.Arista;
import uy.edu.fing.lrt.modelo.Nodo;
import uy.edu.fing.lrt.test.LectorSIG;
import uy.edu.fing.lrt.test.Parada;
import uy.edu.fing.lrt.util.matrix.Matrix;
......
......@@ -3,6 +3,7 @@ package uy.edu.fing.lrt.controlador;
import uy.edu.fing.lrt.util.Logger;
import uy.edu.fing.lrt.util.PropiedadesEnum;
import java.awt.*;
import java.io.*;
import java.util.Arrays;
import java.util.Properties;
......@@ -10,6 +11,7 @@ import java.util.Properties;
public final class PropiedadesControlador {
private static Properties p = new Properties();
private static final String SPLIT_SEPARATOR = ";";
private PropiedadesControlador() {
}
......@@ -31,6 +33,30 @@ public final class PropiedadesControlador {
return value == null ? prop.getValorDefecto() : value;
}
public static String[] getProperties(PropiedadesEnum prop) {
String propArr = getProperty(prop);
if (propArr == null || "".equals(propArr)) {
return null;
}
return propArr.split(SPLIT_SEPARATOR);
}
public static Color[] getColorsProperties(PropiedadesEnum prop) {
String[] propArr = getProperties(prop);
if (propArr == null) {
return null;
}
return Arrays.stream(propArr).map(s -> {
int r = Integer.parseInt(s.substring(0, 2), 16);
int g = Integer.parseInt(s.substring(2, 4), 16);
int b = Integer.parseInt(s.substring(4, 6), 16);
return new Color(r, g, b);
}).toArray(Color[]::new);
}
public static Boolean getBoolProperty(PropiedadesEnum prop) {
getProps();
String propI = getProperty(prop);
......
package uy.edu.fing.lrt.gui;
import uy.edu.fing.lrt.controlador.AEControlador;
import uy.edu.fing.lrt.controlador.ProblemaControlador;
import uy.edu.fing.lrt.controlador.PropiedadesControlador;
import uy.edu.fing.lrt.modelo.*;
import uy.edu.fing.lrt.util.PropiedadesEnum;
import javax.swing.*;
import java.awt.*;
import java.awt.geom.Line2D;
import java.util.ArrayList;
import java.util.List;
public final class GuiHelper {
private static javax.swing.JLabel lblEstado;
private static javax.swing.JPanel mapa;
private GuiHelper() {
}
public static void setLblEstado(JLabel lblEstado) {
GuiHelper.lblEstado = lblEstado;
}
public static void setMapa(JPanel mapa) {
GuiHelper.mapa = mapa;
}
public static void dibujarNodos() {
Graphics g = mapa.getGraphics();
resetStroke(g);
mapa.paintComponents(dibujarNodos(g));
}
public static void dibujarAristas(List<Arista> aristas, Color color, int px) {
Graphics g = mapa.getGraphics();
clearAristas(g);
dibujarAristas(g);
dibujarAristas(g, aristas, color, px);
dibujarNodos(g);
mapa.paintComponents(g);
}
public static void dibujarLinas(java.util.List<Linea> lineas) {
Graphics g = mapa.getGraphics();
//Graphics g = new DebugGraphics();
clearAristas(g);
dibujarAristas(g);
Color[] colors = PropiedadesControlador.getColorsProperties(PropiedadesEnum.COLORES);
for (int i = 0; i < lineas.size(); i++) {
dibujarAristas(g, lineas.get(i).getTramos(), colors[i], 2);
}
dibujarNodos(g);
mapa.paintComponents(g);
}
public static void dibujarLinas(Individuo i, Boolean[] consentradoresActivos) {
Concentrador[] concentradores = i.getConcentradores();
java.util.List<Linea> lineas = new ArrayList<>();
for (int j = 0; j < concentradores.length; j++) {
if (consentradoresActivos[j]) {
lineas.addAll(concentradores[j].getLineas());
}
}
dibujarLinas(lineas);
}
public static void clearAristas() {
Graphics g = mapa.getGraphics();
clearAristas(g);
mapa.paintComponents(g);
}
public static void dibujarAristas() {
Graphics g = mapa.getGraphics();
clearAristas(g);
dibujarAristas(g);
dibujarNodos(g);
mapa.paintComponents(g);
}
public static void dibujarBest(Boolean[] consentradoresActivos) {
lblEstado.setText("");
Individuo best = AEControlador.getInstance().getBest();
if (best != null) {
String tiempo = AEControlador.getInstance().getTime();
int gen = AEControlador.getInstance().getGeneracion();
lblEstado.setText("Generacion: " + gen + " | Costo Individuo: " + best.getCosto() + " | Tiempo: " + tiempo);
dibujarLinas(best, consentradoresActivos);
}
}
/////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////
private static Graphics resetStroke(Graphics g) {
Graphics2D g2 = (Graphics2D) g;
g2.setStroke(new BasicStroke(1));
return g;
}
private static Graphics dibujarNodos(Graphics g) {
resetStroke(g);
Boolean debug = PropiedadesControlador.getBoolProperty(PropiedadesEnum.DEBUG);
ProblemaControlador controlador = ProblemaControlador.getInstance();
double propY = ((double) mapa.getSize().getHeight() - 20) / controlador.getHeight();
double propX = ((double) mapa.getSize().getWidth() - 20) / controlador.getWidth();
final Integer cantFuente = PropiedadesControlador.getIntProperty(PropiedadesEnum.CANT_FUENTES);
final Integer cantSum = PropiedadesControlador.getIntProperty(PropiedadesEnum.CANT_SUMIDEROS);
java.util.List<Nodo> nodos = ProblemaControlador.getInstance().getNodos();
nodos.forEach((nodo) -> {
if (nodo.getNombre() <= cantSum) {
g.setColor(Color.BLUE);
} else {
if (nodo.getNombre() <= (cantSum + cantFuente)) {
g.setColor(Color.RED);
} else {
g.setColor(Color.YELLOW);
}
}
final int x = ((int) (nodo.getCoordX() * propX)) + 10;
final int y = (int) mapa.getSize().getHeight() - (((int) (nodo.getCoordY() * propY))) - 10;
g.drawOval(x - 3, y - 3, 7, 7);
g.fillOval(x - 3, y - 3, 7, 7);
if (debug) {
g.drawString(nodo.getNombre() + "", x, y);
}
});
return g;
}
private static Graphics dibujarAristas(Graphics g, List<Arista> aristas, Color color, int px) {
Boolean debug = PropiedadesControlador.getBoolProperty(PropiedadesEnum.DEBUG);
ProblemaControlador controlador = ProblemaControlador.getInstance();
Graphics2D g2 = (Graphics2D) g;
g2.setStroke(new BasicStroke(px));
double propY = ((double) mapa.getSize().getHeight() - 20) / controlador.getHeight();
double propX = ((double) mapa.getSize().getWidth() - 20) / controlador.getWidth();
g.setColor(color);
aristas.forEach((a) -> {
final int x1 = ((int) (a.getNodoA().getCoordX() * propX)) + 10;
final int y1 = (int) mapa.getSize().getHeight() - (((int) (a.getNodoA().getCoordY() * propY))) - 10;
final int x2 = ((int) (a.getNodoB().getCoordX() * propX)) + 10;
final int y2 = (int) mapa.getSize().getHeight() - (((int) (a.getNodoB().getCoordY() * propY))) - 10;
g2.draw(new Line2D.Float(x1, y1, x2, y2));
if (debug) {
g.drawString(a.getId() + "", (x1 + x2) / 2, (y1 + y2) / 2);
}
});
return g;
}
private static Graphics dibujarAristas(Graphics g) {
java.util.List<Arista> aristas = ProblemaControlador.getInstance().getAristas();
dibujarAristas(g, aristas, Color.DARK_GRAY, 1);
return g;
}
private static Graphics clearAristas(Graphics g) {
java.util.List<Arista> aristas = ProblemaControlador.getInstance().getAristas();
dibujarAristas(g, aristas, mapa.getBackground(), 10);
return g;
}
}
......@@ -144,24 +144,6 @@
<Property name="text" type="java.lang.String" value="Cotas"/>
<Property name="enabled" type="boolean" value="false"/>
</Properties>
<SubComponents>
<MenuItem class="javax.swing.JMenuItem" name="menuCotaCalcular">
<Properties>
<Property name="text" type="java.lang.String" value="Calcular"/>
</Properties>
<Events>
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="menuCotaCalcularActionPerformed"/>
</Events>
</MenuItem>
<MenuItem class="javax.swing.JMenuItem" name="menuCotaParar">
<Properties>
<Property name="text" type="java.lang.String" value="Detener"/>
</Properties>
<Events>
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="menuCotaPararActionPerformed"/>
</Events>
</MenuItem>
</SubComponents>
</Menu>
<Menu class="javax.swing.JMenu" name="menuHelp">
<Properties>
......@@ -196,6 +178,49 @@
</MenuItem>
</SubComponents>
</Menu>
<Menu class="javax.swing.JMenu" name="menuConcentrador">
<Properties>
<Property name="text" type="java.lang.String" value="Concentradores"/>
</Properties>
<SubComponents>
<MenuItem class="javax.swing.JCheckBoxMenuItem" name="c1Check">
<Properties>
<Property name="selected" type="boolean" value="true"/>
<Property name="text" type="java.lang.String" value="C1 (Pocitos)"/>
</Properties>
<Events>
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="c1CheckActionPerformed"/>
</Events>
</MenuItem>
<MenuItem class="javax.swing.JCheckBoxMenuItem" name="c2Check">
<Properties>
<Property name="selected" type="boolean" value="true"/>
<Property name="text" type="java.lang.String" value="C2 (Cerro)"/>
</Properties>
<Events>
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="c2CheckActionPerformed"/>
</Events>
</MenuItem>
<MenuItem class="javax.swing.JCheckBoxMenuItem" name="c3Check">
<Properties>
<Property name="selected" type="boolean" value="true"/>
<Property name="text" type="java.lang.String" value="C3 (Carrasco)"/>
</Properties>
<Events>
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="c3CheckActionPerformed"/>
</Events>
</MenuItem>
<MenuItem class="javax.swing.JCheckBoxMenuItem" name="c4Check">
<Properties>
<Property name="selected" type="boolean" value="true"/>
<Property name="text" type="java.lang.String" value="C4 (Colon)"/>
</Properties>
<Events>
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="c4CheckActionPerformed"/>
</Events>
</MenuItem>
</SubComponents>
</Menu>
</SubComponents>
</Menu>
</NonVisualComponents>
......
......@@ -25,7 +25,9 @@ public enum PropiedadesEnum {
CANT_SUMIDEROS("cantSumideros", "3"),
CANT_FUENTES("cantFuentes", "4"),
ESPECIALES("especiales", "0;0;0;2;2;3;2"),
DELAYS("delays", "0;0;0;1263;1234;946;1107"),;
DELAYS("delays", "0;0;0;1263;1234;946;1107"),
COLORES("colores", "FF00CC;CC33FF;33CCFF;33FFFF;33FF66;FFCC33;FF9933;990099;009900;660099"),
;
private String nombre;
private String valorDefecto;
......
......@@ -32,3 +32,5 @@ cantSumideros=3
cantFuentes=4
especiales=0;0;0;2;2;3;2
delays=0;0;0;1263;1234;946;1187
colores=FF00CC;CC33FF;33CCFF;33FFFF;33FF66;FFCC33;FF9933;990099;009900;660099
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment