Ver Mensaje Individual
  #10 (permalink)  
Antiguo 23/05/2010, 01:13
joseluisbz
 
Fecha de Ingreso: febrero-2007
Ubicación: Barranquilla, Colombia
Mensajes: 181
Antigüedad: 17 años, 10 meses
Puntos: 3
De acuerdo Solucionado: setXORMode, setPaintMode, Borrar una gráfica de muchas

SOLUCIONADO

Primero describiré las clases:

Código Java:
Ver original
  1. class GTrama extends Frame {
  2.   private Vector<Color> cVector = new Vector<Color>();
  3.   private Vector<Boolean> vVector = new Vector<Boolean>();
  4.   private Vector<String> nVector = new Vector<String>();
  5.   private Vector<Double []> xVector = new Vector<Double []>();
  6.   private Vector<Double []> yVector = new Vector<Double []>();
  7.   private Vector<Double> xMin = new Vector<Double>();
  8.   private Vector<Double> yMin = new Vector<Double>();
  9.   private Vector<Double> xMax = new Vector<Double>();
  10.   private Vector<Double> yMax = new Vector<Double>();
  11.   private Vector<Float> dVector = new Vector<Float>();
  12.   private double MaxX, MinX, MaxY, MinY;
  13.  
  14.   GTrama(){
  15.   }
  16.   ...
  17. }

Métodos de conversión de tipo de datos de Double a double y viceversa de la clase GTrama
Código Java:
Ver original
  1. Double [] double_Double (double[] ddata){
  2.   //Convierte los datos de double a Double para operar con Vectores
  3.     Double[] Ddata = new Double[ddata.length];
  4.     for (int i=0;i<ddata.length;i++){
  5.       Ddata[i] = ddata[i];
  6.     }
  7.     return Ddata;
  8.   }
  9.  
  10.   double [] Double_double (Double[] Ddata){
  11.   //Restaura los datos de Double a double para operar con arreglos
  12.     double[] ddata = new double[Ddata.length];
  13.     for (int i=0;i<Ddata.length;i++){
  14.       ddata[i] = Ddata[i];
  15.     }
  16.     return ddata;
  17.   }

Métodos para hallar máximos y mínimos de la clase GTrama
Código Java:
Ver original
  1. double getMax(double[] data){
  2.   //Obtener el valor MAYOR del Arreglo
  3.     if (data.length <1) throw new RuntimeException("Arreglo de datos vacío");
  4.     double Max = data[0];
  5.     for (int i=0;i<data.length;i++){
  6.       if (Max < data[i])
  7.         Max = data[i];
  8.     }
  9.     return Max;
  10.   }
  11.   double getMin(double[] data){
  12.   //Obtener el valor MENOR del Arreglo
  13.     if (data.length <1) throw new RuntimeException("Arreglo de datos vacío");
  14.     double Min = data[0];
  15.     for (int i=0;i<data.length;i++){
  16.       if (Min > data[i])
  17.         Min = data[i];
  18.     }
  19.     return Min;
  20.   }
  21.   double getMax(Vector<Double> data){
  22.   //Obtener el valor MAYOR del Vector
  23.     if (data.size() <1) throw new RuntimeException("Arreglo de datos vacío");
  24.     double Max = data.elementAt(0);
  25.     for (int i=0;i<data.size();i++){
  26.       if (Max < data.elementAt(i))
  27.         Max = data.elementAt(i);
  28.     }
  29.     return Max;
  30.   }
  31.   double getMin(Vector<Double> data){
  32.   //Obtener el valor MENOR del Vector
  33.     if (data.size() <1) throw new RuntimeException("Arreglo de datos vacío");
  34.     double Min = data.elementAt(0);
  35.     for (int i=0;i<data.size();i++){
  36.       if (Min > data.elementAt(i))
  37.         Min = data.elementAt(i);
  38.     }
  39.     return Min;
  40.   }

Métodos de visualización y ocultamiento de las variables en los vectores en la clase GTrama
Código Java:
Ver original
  1. void ViewAll(){
  2.   //Muestra todas las graficas almacenadas en los vectores
  3.     for (int Indice = 0; Indice<nVector.size();Indice++){
  4.       vVector.set(Indice, true);
  5.     }
  6.   }
  7.   void HideAll(){
  8.   //Oculta todas las graficas almacenadas en los vectores
  9.     for (int Indice = 0; Indice<nVector.size();Indice++){
  10.       vVector.set(Indice, false);
  11.     }
  12.   }
  13.   void ViewVble(String nVble){
  14.   //Muestra la grafica de la Variable llamada nVble
  15.     if (!nVector.contains(nVble)) throw new RuntimeException("La Variable no existe");
  16.     int Indice = nVector.indexOf(nVble);
  17.     vVector.set(Indice, true);
  18.   }
  19.   void HideVble(String nVble){
  20.   //Oculta la grafica de la Variable llamada nVble
  21.     if (!nVector.contains(nVble)) throw new RuntimeException("La Variable no existe");
  22.     int Indice = nVector.indexOf(nVble);
  23.     vVector.set(Indice, false);
  24.   }

El método addVble ya no hace referencia ningún objeto Graphics, ni se almacena (no se necesita)
Código Java:
Ver original
  1. int addVble(String nVble, double[] aX, double[] aY, Color VbleColor, float zDepth, boolean bVisible){
  2.   //Agrega una variable a Graficar, llamada nVble, de Color VbleColor y Grosor zDepth
  3.     if (nVector.contains(nVble)) throw new RuntimeException("La Variable ya existe");
  4.     if(aX.length != aY.length) throw new RuntimeException("Tallas diferentes");
  5.     if(aX.length == 0||aY.length == 0) throw new RuntimeException("Arreglos de datos vacíos");
  6.     xMin.add(getMin(aX));
  7.     xMax.add(getMax(aX));
  8.     yMin.add(getMin(aY));
  9.     yMax.add(getMax(aY));
  10.     nVector.add(nVble);
  11.     Double[] vX = double_Double(aX);
  12.     Double[] vY = double_Double(aY);
  13.     xVector.add(vX);
  14.     yVector.add(vY);
  15.     cVector.add(VbleColor);
  16.     dVector.add(zDepth);
  17.     vVector.add(bVisible);
  18.  
  19.     MinX = getMin(xMin);
  20.     MaxX = getMax(xMax);
  21.     MinY = getMin(yMin);
  22.     MaxY = getMax(yMax);
  23.     return nVector.size();
  24.   }


El método delVble ya no hace referencia ningún objeto Graphics, ni se elimina (no existe)
Código Java:
Ver original
  1. int delVble(String nVble){
  2.   //Elimina una variable a Graficar llamada nVble
  3.     if (!nVector.contains(nVble)) throw new RuntimeException("La Variable no existe");
  4.     int Indice = nVector.indexOf(nVble);
  5.     xMin.remove(Indice);
  6.     xMax.remove(Indice);
  7.     yMin.remove(Indice);
  8.     yMax.remove(Indice);
  9.     nVector.remove(Indice);
  10.     xVector.remove(Indice);
  11.     yVector.remove(Indice);
  12.     cVector.remove(Indice);
  13.     dVector.remove(Indice);
  14.     vVector.remove(Indice);
  15.  
  16.     MinX = getMin(xMin);
  17.     MaxX = getMax(xMax);
  18.     MinY = getMin(yMin);
  19.     MaxY = getMax(yMax);
  20.     return nVector.size();
  21.   }


El nuevo objeto referente gráfico es de tipo BufferedImage
Código Java:
Ver original
  1. void PlotAll(BufferedImage bi){
  2.   //Grafica todas las variables Visibles almacenadas en los vectores
  3.     if (!nVector.isEmpty()){
  4.       for (int Indice = 0; Indice<nVector.size();Indice++){
  5.         if (vVector.elementAt(Indice)){
  6.           PlotVble(bi, Indice);
  7.         }
  8.       }
  9.     }
  10.   }

El nuevo objeto referente gráfico es de tipo BufferedImage
Código Java:
Ver original
  1. void PlotVble(BufferedImage bi, int Indice){
  2.   //Recarga una gráfica para mostrarla
  3.     Graphics2D g2d = bi.createGraphics();
  4.     float zDepth = dVector.elementAt(Indice);
  5.     Color color = cVector.elementAt(Indice);
  6.     double[] aX = Double_double(xVector.elementAt(Indice));
  7.     double[] aY = Double_double(yVector.elementAt(Indice));
  8.     g2d.setColor(color);
  9.     g2d.setStroke(new BasicStroke(zDepth));
  10.     g2d.setPaintMode();
  11.     if (aX.length == 1){
  12.       g2d.drawLine ((int)aX[0], (int)aX[0], (int)aY[0], (int)aY[0]);
  13.     } else {
  14.       for (int j = 0;j<aY.length-1;j++){
  15.         g2d.drawLine ((int)aX[j], (int)aY[j], (int)aX[j+1], (int)aY[j+1]);
  16.       }
  17.     }
  18.     g2d.dispose();
  19.   }

Forma de Uso
Código Java:
Ver original
  1. public class Graficador extends javax.swing.JFrame {
  2.     /** Creates new form Graficador */
  3.   GTrama MisGraficos;
  4.   public Graficador() {
  5.     super( "Dibujo de figuras en 2D" );
  6.     setVisible(true);
  7.     initComponents();
  8.     bImage = new  BufferedImage(super.getWidth(),super.getHeight(),BufferedImage.TYPE_INT_RGB);  
  9.   }
  10.  
  11.   public void paint(Graphics g) {
  12.     super.paint(g);
  13.     if (MisGraficos!=null){
  14.       MisGraficos.PlotAll(bImage);
  15.     }
  16.     g.drawImage(bImage, 0, 0, this);
  17.   }
  18.  
  19.    private void jbDibujarActionPerformed(java.awt.event.ActionEvent evt) {
  20.     dibujar();
  21.     repaint();
  22.    }

El método dibujar agrega las variables a los vectores y manipula su presentación
Código Java:
Ver original
  1. public void dibujar(){
  2.     // super.paint( Grafica );
  3.     double misT[] = {100,120,140,160,180,200,220,240};
  4.     double misX[] = {120,120,160,160,160,140,140,140};
  5.     double misY[] = {140,140,120,120,120,160,160,160};
  6.     double misZ[] = {160,160,140,140,140,120,120,120};
  7.     double misP[] = {200,200,220,220,240,240,260,260};
  8.     double misQ[] = {260,260,240,240,220,220,200,200};
  9.     MisGraficos = new GTrama(10,10,400,400);
  10.     MisGraficos.addVble("a", misT, misX, Color.RED, (float)1, false);
  11.     MisGraficos.addVble("b", misT, misY, Color.GREEN, (float)1,false);
  12.     MisGraficos.addVble("c", misT, misZ, Color.BLUE, (float)1, false);
  13.     MisGraficos.addVble("d", misT, misP, Color.LIGHT_GRAY, (float)2, false);
  14.     MisGraficos.addVble("e", misT, misQ, Color.DARK_GRAY, (float)2,false);
  15.     MisGraficos.ViewAll();
  16.     MisGraficos.ViewVble("e");
  17.     MisGraficos.ViewVble("d");
  18.   }

El botón jbDibujar llama al método dibujar que inicializa los vectores, luego del repaint, se pinta la información contenida en los vectores.

Gracias por su ayuda...
__________________
Jose Luis Bernal Zambrano
Please response to:
[email protected]