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
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


0