SOLUCIONADO
Primero describiré las clases:
Código Java:
Ver originalclass GTrama
extends Frame { private Vector<Color> cVector = new Vector<Color>();
private Vector<Boolean> vVector = new Vector<Boolean>();
private Vector<String> nVector = new Vector<String>();
private Vector
<Double []> xVector
= new Vector
<Double []>(); private Vector
<Double []> yVector
= new Vector
<Double []>(); private Vector<Double> xMin = new Vector<Double>();
private Vector<Double> yMin = new Vector<Double>();
private Vector<Double> xMax = new Vector<Double>();
private Vector<Double> yMax = new Vector<Double>();
private Vector<Float> dVector = new Vector<Float>();
private double MaxX, MinX, MaxY, MinY;
GTrama(){
}
...
}
Métodos de conversión de tipo de datos de Double a double y viceversa de la clase GTrama
Código Java:
Ver originalDouble [] double_Double
(double[] ddata
){ //Convierte los datos de double a Double para operar con Vectores
for (int i=0;i<ddata.length;i++){
Ddata[i] = ddata[i];
}
return Ddata;
}
double [] Double_double
(Double[] Ddata
){ //Restaura los datos de Double a double para operar con arreglos
double[] ddata = new double[Ddata.length];
for (int i=0;i<Ddata.length;i++){
ddata[i] = Ddata[i];
}
return ddata;
}
Métodos para hallar máximos y mínimos de la clase GTrama
Código Java:
Ver originaldouble getMax(double[] data){
//Obtener el valor MAYOR del Arreglo
double Max = data[0];
for (int i=0;i<data.length;i++){
if (Max < data[i])
Max = data[i];
}
return Max;
}
double getMin(double[] data){
//Obtener el valor MENOR del Arreglo
double Min = data[0];
for (int i=0;i<data.length;i++){
if (Min > data[i])
Min = data[i];
}
return Min;
}
double getMax(Vector<Double> data){
//Obtener el valor MAYOR del Vector
double Max = data.elementAt(0);
for (int i=0;i<data.size();i++){
if (Max < data.elementAt(i))
Max = data.elementAt(i);
}
return Max;
}
double getMin(Vector<Double> data){
//Obtener el valor MENOR del Vector
double Min = data.elementAt(0);
for (int i=0;i<data.size();i++){
if (Min > data.elementAt(i))
Min = data.elementAt(i);
}
return Min;
}
Métodos de visualización y ocultamiento de las variables en los vectores en la clase GTrama
Código Java:
Ver originalvoid ViewAll(){
//Muestra todas las graficas almacenadas en los vectores
for (int Indice = 0; Indice<nVector.size();Indice++){
vVector.set(Indice, true);
}
}
void HideAll(){
//Oculta todas las graficas almacenadas en los vectores
for (int Indice = 0; Indice<nVector.size();Indice++){
vVector.set(Indice, false);
}
}
//Muestra la grafica de la Variable llamada nVble
if (!nVector.
contains(nVble
)) throw new RuntimeException("La Variable no existe"); int Indice = nVector.indexOf(nVble);
vVector.set(Indice, true);
}
//Oculta la grafica de la Variable llamada nVble
if (!nVector.
contains(nVble
)) throw new RuntimeException("La Variable no existe"); int Indice = nVector.indexOf(nVble);
vVector.set(Indice, false);
}
El método addVble ya no hace referencia ningún objeto Graphics, ni se almacena (no se necesita)
Código Java:
Ver originalint addVble
(String nVble,
double[] aX,
double[] aY,
Color VbleColor,
float zDepth,
boolean bVisible
){ //Agrega una variable a Graficar, llamada nVble, de Color VbleColor y Grosor zDepth
if (nVector.
contains(nVble
)) throw new RuntimeException("La Variable ya existe"); if(aX.
length == 0||aY.
length == 0) throw new RuntimeException("Arreglos de datos vacíos"); xMin.add(getMin(aX));
xMax.add(getMax(aX));
yMin.add(getMin(aY));
yMax.add(getMax(aY));
nVector.add(nVble);
Double[] vX
= double_Double
(aX
); Double[] vY
= double_Double
(aY
); xVector.add(vX);
yVector.add(vY);
cVector.add(VbleColor);
dVector.add(zDepth);
vVector.add(bVisible);
MinX = getMin(xMin);
MaxX = getMax(xMax);
MinY = getMin(yMin);
MaxY = getMax(yMax);
return nVector.size();
}
El método delVble ya no hace referencia ningún objeto Graphics, ni se elimina (no existe)
Código Java:
Ver original //Elimina una variable a Graficar llamada nVble
if (!nVector.
contains(nVble
)) throw new RuntimeException("La Variable no existe"); int Indice = nVector.indexOf(nVble);
xMin.remove(Indice);
xMax.remove(Indice);
yMin.remove(Indice);
yMax.remove(Indice);
nVector.remove(Indice);
xVector.remove(Indice);
yVector.remove(Indice);
cVector.remove(Indice);
dVector.remove(Indice);
vVector.remove(Indice);
MinX = getMin(xMin);
MaxX = getMax(xMax);
MinY = getMin(yMin);
MaxY = getMax(yMax);
return nVector.size();
}
El nuevo objeto referente gráfico es de tipo
BufferedImage
Código Java:
Ver original //Grafica todas las variables Visibles almacenadas en los vectores
if (!nVector.isEmpty()){
for (int Indice = 0; Indice<nVector.size();Indice++){
if (vVector.elementAt(Indice)){
PlotVble(bi, Indice);
}
}
}
}
El nuevo objeto referente gráfico es de tipo
BufferedImage
Código Java:
Ver original //Recarga una gráfica para mostrarla
float zDepth = dVector.elementAt(Indice);
Color color
= cVector.
elementAt(Indice
); double[] aX = Double_double(xVector.elementAt(Indice));
double[] aY = Double_double(yVector.elementAt(Indice));
g2d.setColor(color);
g2d.setPaintMode();
if (aX.length == 1){
g2d.drawLine ((int)aX[0], (int)aX[0], (int)aY[0], (int)aY[0]);
} else {
for (int j = 0;j<aY.length-1;j++){
g2d.drawLine ((int)aX[j], (int)aY[j], (int)aX[j+1], (int)aY[j+1]);
}
}
g2d.dispose();
}
Forma de Uso
Código Java:
Ver originalpublic class Graficador
extends javax.
swing.
JFrame { /** Creates new form Graficador */
GTrama MisGraficos;
public Graficador() {
super( "Dibujo de figuras en 2D" );
setVisible(true);
initComponents();
}
super.paint(g);
if (MisGraficos!=null){
MisGraficos.PlotAll(bImage);
}
g.drawImage(bImage, 0, 0, this);
}
private void jbDibujarActionPerformed
(java.
awt.
event.
ActionEvent evt
) { dibujar();
repaint();
}
El método dibujar agrega las variables a los vectores y manipula su presentación
Código Java:
Ver originalpublic void dibujar(){
// super.paint( Grafica );
double misT[] = {100,120,140,160,180,200,220,240};
double misX[] = {120,120,160,160,160,140,140,140};
double misY[] = {140,140,120,120,120,160,160,160};
double misZ[] = {160,160,140,140,140,120,120,120};
double misP[] = {200,200,220,220,240,240,260,260};
double misQ[] = {260,260,240,240,220,220,200,200};
MisGraficos = new GTrama(10,10,400,400);
MisGraficos.
addVble("a", misT, misX,
Color.
RED,
(float)1,
false); MisGraficos.
addVble("b", misT, misY,
Color.
GREEN,
(float)1,
false); MisGraficos.
addVble("c", misT, misZ,
Color.
BLUE,
(float)1,
false); MisGraficos.
addVble("d", misT, misP,
Color.
LIGHT_GRAY,
(float)2,
false); MisGraficos.
addVble("e", misT, misQ,
Color.
DARK_GRAY,
(float)2,
false); MisGraficos.ViewAll();
MisGraficos.ViewVble("e");
MisGraficos.ViewVble("d");
}
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...