Java - Ayuda urgente con Relleno de Poligonos

 
Vista:

Ayuda urgente con Relleno de Poligonos

Publicado por Player01 (11 intervenciones) el 26/07/2006 12:23:02
Saludos!

He estado tratando de hacer un relleno de poligonos por selección, es decir con el mouse haces click sobre el poligono y este se rellena, pero no logro que funcione y no dispongo de mucho tiempo, si alguien sabe cual es el error o que podria hacer por favor conteste al post. T _T

Aquí dejo el código, creo que si algo sale mal debe tener que ver con Polygon, nunca antes lo había usado talvez hay que corregirlo.

Gracias.


import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class PanelAutoConten extends JPanel{
public final static int POLIGONO=1,SELECCIONAR=2,RELLENAR=3;

private int x1,y1,x2,y2,operacion,rectx,recty,rectx2,recty2;
private int cuentapuntos=0,i=0,bandera=0,bandselec=0,px,py,bandf=0,p=0;


private int puntosx[]=new int[100];
private int puntosy[]=new int[100];
private int polix[]=new int[100];
private int poliy[]=new int[100];
Polygon poli=new Polygon(polix,poliy,p);


//establecer manejo de eventos de raton para PanelAutoContenido
public PanelAutoConten()
{
//establecer eventos de escucha del raton
addMouseListener(
new MouseAdapter(){ //clase interna anonima

//manejar evento de oprimir boton
public void mousePressed(MouseEvent evento)
{
if(operacion==1){
if (cuentapuntos<puntosx.length){

x1=evento.getX();
y1=evento.getY();
bandera=1;

}

}
if(operacion==2){
rectx=evento.getX();
recty=evento.getY();
bandselec=1;
}
if(operacion==3){

px=evento.getX();
py=evento.getY();
repaint();
}
}
//manejar evento de soltar boton del raton
public void mouseReleased(MouseEvent evento)
{
if (cuentapuntos<puntosx.length){

puntosx[cuentapuntos]=x1;
puntosy[cuentapuntos]=y1;
puntosx[cuentapuntos+1]=x2;
puntosy[cuentapuntos+1]=y2;
cuentapuntos=cuentapuntos+2;

bandera=0;

}

}
}//fin de la clase interna anonima
);//Fin de la llamada a addMouseListener


//establecer componentes de escucha de movimientos del raton
addMouseMotionListener(
new MouseMotionAdapter(){//clase interna anónima

//manejar evento de arrastrar el raton
public void mouseDragged(MouseEvent evento)
{
if(bandera==1){
x2=evento.getX();
y2=evento.getY();

repaint();
}
if(operacion==2){

rectx2=evento.getX();
recty2=evento.getY();

repaint();
}


}

}//fin de la clase interna anínima


);//fin de la llamada a addMouseMotionListener


}//fin del constructor PanelAutoContenido

//devolver altura y anchura predefinidas de PanelAutoContenido

public Dimension getPreferredSize()
{
return new Dimension(400,300);
}


//dibujar una figuras
public void paintComponent(Graphics g){
super.paintComponent(g);

g.drawLine(x1,y1,x2,y2);

for (i=0;i<=cuentapuntos;i=i+2){
g.drawLine(puntosx[i],puntosy[i],puntosx[i+1],puntosy[i+1]);

g.fillRect(puntosx[i]-4,puntosy[i]-4,4,4);
g.fillRect(puntosx[i+1]-4,puntosy[i+1]-4,4,4);
}
g.fillRect(x1-4,y1-4,4,4);
g.fillRect(x2-4,y2-4,4,4);





if(operacion==2){

g.setColor(new Color(222,231,246));
g.fillRect(Math.min(rectx,rectx2),Math.min(recty,recty2),Math.abs(rectx-rectx2),Math.abs(recty-recty2));

g.setColor(new Color(0,0,0));
for (i=0;i<=cuentapuntos;i=i+2)
g.drawLine(puntosx[i],puntosy[i],puntosx[i+1],puntosy[i+1]);

}
if(operacion==3){
g.setColor(new Color(215,110,60));





for(i=0;i<=cuentapuntos;i=i+3){
if( (puntosx[i+2]>puntosx[i+1]-6) && (puntosx[i+2]<puntosx[i+1]+6)&&
(puntosy[i+2]>puntosy[i+1]-6)&&(puntosy[i+2]<puntosy[i+1]+6) ){
polix[p]=puntosx[i+1];
poliy[p]=puntosy[i+1];
p=p+1;


}

}
if(poli.contains(px,py)==true)
g.fillPolygon(poli);

if((polix[p]>polix[0]-6)&&(polix[p]<polix[0]+6)&&(poliy[p]>poliy[0]-6)&&
(puntosy[p]<puntosy[0]+6))
bandf=1;
if(bandf==1){
poli.reset();
p=0;
}


}



}








//establecer valor de figura y repintar
public void dibujar(int operacionArealizar){
operacion=operacionArealizar;

}


}//Fin de la clase PanelAutoContenido
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:AUXILIO : Distinguir cuales ptos son de un poli

Publicado por Player01 (11 intervenciones) el 27/07/2006 08:10:41
Bueno, explicaré mi problema.

Si trazo diferetes lineas por ejemplo primero una linea, luego otra separada y despues regreso y termino de enlazar más lineas a la primera hasta que se cierra un poligono, después en otro sitio de la pantalla formo otro polígono cerrado. Entonces ¿cómo distingo el primer polígono del segundo cuando almacene los puntos ? Al principio guardo todos los puntos que se dibujan en un arreglo, entre todos esos puntos se debe escoger cuales forman parte de un polígono así que pienso, Para cada punto si sus coordenadas se repiten en algun momento en el arreglo guardarlo como parte del poligono , pero ¿cómo saber si es un poligono cerrado o solo un monton de lineas puestas una tras la otra siendo el punto final de una el inicial de la otra? Cuando no existe orden pues si se traza una linea pueden trazarse otras que no tienen ningun enlace y después volver y formar poligonos. Eso no es todo por que no tengo ni la menor idea de como distinguir entre un poligono (el primero que se formó) y otro formado después que no tiene nada que ver con el primero. AUXILIO!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:AUXILIO : Distinguir cuales ptos son de un poli

Publicado por Manuel C. (11 intervenciones) el 27/07/2006 08:40:25
mmmm. creo que no te entiendo. yo tengo un pequeño programita en mi pagína que creo te pueda servir...

visita, www.manuelcsolis.com.mx

para saber como funciona, solo depuralo y ve anotando los valoes que van tomando las coordenadas de los poligonos, alomejor a si puedes solucionar tu problema...

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar