Ver Mensaje Individual
  #4 (permalink)  
Antiguo 15/05/2010, 22:21
joseluisbz
 
Fecha de Ingreso: febrero-2007
Ubicación: Barranquilla, Colombia
Mensajes: 181
Antigüedad: 17 años, 9 meses
Puntos: 3
Respuesta: setXORMode, setPaintMode, Borrar una gráfica de muchas

El mensaje no tuvo respuesta... será porque el código es muy largo?
Voy a tratar de poner algo más entendible...

Le cambié el nombre a la clase... de Graficar a GTrama... para indicar que hereda de Frame

Código Java:
Ver original
  1. class GTrama extends Frame {
  2.   private Vector<Color> cVector = new Vector<Color>();    //Vector de Color de la Variable
  3.   private Vector<Boolean> vVector = new Vector<Boolean>();    //Vector de Visibilidad de la Variable
  4.   private Vector<String> nVector = new Vector<String>();  //Vector de Nombre de la Variable
  5.   private Vector<Graphics2D> gVector = new Vector<Graphics2D>();//Vector de Graphic de la Variable
  6.   private Vector<Double []> xVector = new Vector<Double []>();//Vector de Arreglo de X de la Variable
  7.   private Vector<Double []> yVector = new Vector<Double []>();//Vector de Arreglo de Y de la Variable
  8.   private Vector<Double> xMin = new Vector<Double>();//Vector de Valor Mínimo del Arreglo de X de la Variable
  9.   private Vector<Double> yMin = new Vector<Double>();//Vector de Valor Mínimo del Arreglo de Y de la Variable
  10.   private Vector<Double> xMax = new Vector<Double>();//Vector de Valor Máximo del Arreglo de X de la Variable
  11.   private Vector<Double> yMax = new Vector<Double>();//Vector de Valor Máximo del Arreglo de Y de la Variable
  12.   private Vector<Float> dVector = new Vector<Float>();//Vector de Espesor de la Variable
  13.   private int PosX, PosY, Largo, Ancho;
  14.   String VbleX, VbleY; //Agragar Nombre de Variables X y Y
  15.   String TitleV, TitleH; //Agrega Título Vertical(Izquierda) y Título Horizontal(Debajo)
  16.   String TitleM, TitleS; //Título Principal y Título Secundario
  17.   private double MaxX, MinX, MaxY, MinY; //Almacena Máximos y Mínimos de Coordenadas X y Y
  18.  
  19.   GTrama(int xPos, int yPos, int xWidth, int yLarge){
  20.   }
  21.  
  22.   void ViewAll(Graphics g){
  23.   //Muestra todas las graficas almacenadas en los vectores
  24.     for (int Indice = 0; Indice<nVector.size();Indice++){
  25.       grafica(g, Indice, "View");
  26.     }
  27.   }
  28.   void HideAll(Graphics g){
  29.   //Oculta todas las graficas almacenadas en los vectores
  30.     for (int Indice = 0; Indice<nVector.size();Indice++){
  31.       grafica(g, Indice, "Hide");
  32.     }
  33.   }
  34.   void ViewVble(Graphics g, String nVble){
  35.   //Muestra la grafica de la Variable llamada nVble
  36.     if (!nVector.contains(nVble)) throw new RuntimeException("La Variable no existe");
  37.     int Indice = nVector.indexOf(nVble);
  38.     grafica(g, Indice, "View");
  39.   }
  40.   void HideVble(Graphics g, String nVble){
  41.   //Oculta la grafica de la Variable llamada nVble
  42.     if (!nVector.contains(nVble)) throw new RuntimeException("La Variable no existe");
  43.     int Indice = nVector.indexOf(nVble);
  44.     grafica(g, Indice, "Hide");
  45.   }
  46. }


Como NO pude implementar un arreglo de tipo double:
Código Java:
Ver original
  1. private Vector<double []> xVector = new Vector<double []>();
  2. private Vector<double []> yVector = new Vector<double []>();

Me tocó hacer un Vector de tipo arreglo de Objeto tipo Double:
Código Java:
Ver original
  1. private Vector<Double []> xVector = new Vector<Double []>();
  2. private Vector<Double []> yVector = new Vector<Double []>();

HE EXTRAIDO LOS MÉTODOS DE LA CLASE PARA EXPLICARLOS POR FUERA, PERO REALMENTE SON MÉTODOS DE GTrama

Y por supuesto no pude hacer uso de System.ArrayCopy más bien hacer la copia o conversión manual...

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.   double [] Double_double (Double[] Ddata){
  10.   //Restaura los datos de Double a double para operar con arreglos
  11.     double[] ddata = new double[Ddata.length];
  12.     for (int i=0;i<Ddata.length;i++){
  13.       ddata[i] = Ddata[i];
  14.     }
  15.     return ddata;
  16.   }

Es por ello que me tocó implementar dos métodos para hallar los mínimos y dos métodos para hallar los máximos...
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.     return Max;
  9.   }
  10.   double getMin(double[] data){
  11.   //Obtener el valor MENOR del Arreglo
  12.     if (data.length <1) throw new RuntimeException("Arreglo de datos vacío");
  13.     double Min = data[0];
  14.     for (int i=0;i<data.length;i++)
  15.       if (Min > data[i])
  16.         Min = data[i];
  17.     return Min;
  18.   }
  19.   double getMax(Vector<Double> data){
  20.     if (data.size() <1) throw new RuntimeException("Arreglo de datos vacío");
  21.     double Max = data.elementAt(0);
  22.     for (int i=0;i<data.size();i++)
  23.       if (Max < data.elementAt(i))
  24.         Max = data.elementAt(i);
  25.     return Max;
  26.   }
  27.   double getMin(Vector<Double> data){
  28.     if (data.size() <1) throw new RuntimeException("Arreglo de datos vacío");
  29.     double Min = data.elementAt(0);
  30.     for (int i=0;i<data.size();i++)
  31.       if (Min > data.elementAt(i))
  32.         Min = data.elementAt(i);
  33.     return Min;
  34.   }


Agregar una Variable a los vectores de la clase...
Código Java:
Ver original
  1. int addVble(Graphics g, 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.     Graphics2D g2 = (Graphics2D)g;
  7.  
  8.     //Agrega el Mínimo y el Máximo valor de los Arreglos aX y aY a los Vectores xMin, XMax, yMin y yMax
  9.     xMin.add(getMin(aX));
  10.     xMax.add(getMax(aX));
  11.     yMin.add(getMin(aY));
  12.     yMax.add(getMax(aY));
  13.     gVector.add(g2);
  14.     nVector.add(nVble);
  15.     Double[] vX = double_Double(aX); //Convierte el Arreglo double vX a Vector Double vX
  16.     Double[] vY = double_Double(aY); //Convierte el Arreglo double vY a Vector Double vY
  17.     xVector.add(vX);
  18.     yVector.add(vY);
  19.     cVector.add(VbleColor);
  20.     dVector.add(zDepth);
  21.     vVector.add(bVisible);
  22.  
  23.     //Halla el Mínimo Valor xMin y yMin y el Máximo valor de xMax y yMax
  24.     MinX = getMin(xMin);
  25.     MaxX = getMax(xMax);
  26.     MinY = getMin(yMin);
  27.     MaxY = getMax(yMax);
  28.     return nVector.size();
  29.   }

Borrar una variable de los vectores...
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.     gVector.remove(Indice);
  10.     nVector.remove(Indice);
  11.     xVector.remove(Indice);
  12.     yVector.remove(Indice);
  13.     cVector.remove(Indice);
  14.     dVector.remove(Indice);
  15.     vVector.remove(Indice);
  16.  
  17.     //Halla el Mínimo Valor xMin y yMin y el Máximo valor de xMax y yMax
  18.     MinX = getMin(xMin);  
  19.     MaxX = getMax(xMax);
  20.     MinY = getMin(yMin);
  21.     MaxY = getMax(yMax);
  22.     return nVector.size();
  23.   }


ACA ESTA La DUDA FUERTE
Método grafica..lo que hace es graficar u ocultar las lineas de alguna variable indicada en la variable Indice... g2.setXORMode(getBackground()); Por ejemplo al tratar de borrar una línea me deja unos punticos, es decir, no la borra toda...
Código Java:
Ver original
  1. void grafica(Graphics g, int Indice, String Oper){
  2.   //Recarga una gráfica para mostrarla u ocultarla
  3.     Graphics2D g2 = gVector.elementAt(Indice);
  4.     Color color = cVector.elementAt(Indice);
  5.     double[] aX = Double_double(xVector.elementAt(Indice));
  6.     double[] aY = Double_double(yVector.elementAt(Indice));
  7.     g2.setColor(color);
  8.     g2.setStroke(new BasicStroke(zDepth));
  9.     if (Oper.equals("Hide")){
  10.       g2.setXORMode(getBackground());
  11.     }
  12.     if (Oper.equals("View")){
  13.       g2.setPaintMode();
  14.     }
  15.     if (aX.length == 1){
  16.       g2.drawLine ((int)aX[0], (int)aX[0], (int)aY[0], (int)aY[0]);
  17.     } else {
  18.       for (int j = 0;j<aY.length-1;j++){
  19.         g2.drawLine ((int)aX[j], (int)aY[j], (int)aX[j+1], (int)aY[j+1]);
  20.       }
  21.     }
  22.     g.drawImage(GrafImagen, PosX, PosX, this);
  23.     //repaint();
  24.   }

Aca está la manera en que uso la clase...
Código Java:
Ver original
  1. public void paint( Graphics g ) {
  2.     GTrama MisGraficos = new GTrama(10,10,400,400);
  3.     double misT[] = {100,120,140,160,180,200,220,240};
  4.     double misX[] = {110,120,230,140,150,160,270,180};
  5.     double misY[] = {140,55,90,200,140,124,210,60};
  6.     double misZ[] = {125,300,170,150,110,110,200,100};
  7.     MisGraficos.addVble(g ,"a", misT, misX, Color.RED, (float)1, true);
  8.     MisGraficos.addVble(g ,"b", misT, misY, Color.GREEN, (float)1.1,true);
  9.     MisGraficos.addVble(g ,"c", misT, misZ, Color.BLUE, (float)1.2, true);
  10.     MisGraficos.ViewAll(g );
  11.   }

Por favor si aún no se entiende mi código por favor me avisan
__________________
Jose Luis Bernal Zambrano
Please response to:
[email protected]

Última edición por joseluisbz; 15/05/2010 a las 22:48