Comportamento inesperado ao desenhar polígono

1 resposta
J

Segue meu método paintComponent de uma classe que fiz estendendo um JPanel

protected void paintComponent(Graphics g)
    {
        super.paintComponent(g);

        Graphics2D g2 = (Graphics2D) g;
        
        g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
            RenderingHints.VALUE_ANTIALIAS_ON);

        int x = 50;
        int y = 70;
        int offset = 100;

        // draw GeneralPath (polygon)
        int xPoints[] = { x, x, x+offset,x+offset };
        int yPoints[] = { y, y+offset, y+offset, y };

        //---Define o quadrado
        GeneralPath polygon = new GeneralPath(GeneralPath.WIND_EVEN_ODD,xPoints.length);

        polygon.moveTo(xPoints[0], yPoints[0]);

        polygon.moveTo(xPoints[0], yPoints[0]);
        for (int index = 1; index < xPoints.length; index++)
        {
          polygon.lineTo(xPoints[index], yPoints[index]);
        }
        polygon.closePath();
        //---Fim da definição do quadrado

        //----Descreve a curva que quero adicionar ao polígono
        QuadCurve2D.Double curva = new QuadCurve2D.Double();
        curva.setCurve(xPoints[3], yPoints[3],
                       (x+(1.5*offset)), y+(offset/2),
                       xPoints[2], xPoints[2]);


        polygon.append(curva, true);
        //polygon.closePath();
        //---Fim da descrição da curva
        
        g2.setPaint(Color.black);
        g2.draw(polygon);
        //g2.fill(polygon);

        g2.setPaint(Color.red);
        g2.fillOval(xPoints[2],yPoints[2], 10, 10);
        g2.fillOval(xPoints[3],yPoints[3],10, 10);
        g2.setPaint(Color.blue);
        g2.fillOval((int)(x+(1.5*offset)), y+(offset/2), 10, 10);
    }

Neste método, eu começo definindo 4 pontos que descrevem um quadrado. Uso um GeneralPath e, através de sucessivas chamadas ao método lineTo, passando cada um dos pontos, eu faço o quadrado. Se eu terminasse o método aqui, o resultado seria um quadrado.

Mas logo abaixo eu descrevo uma curva, em função dos dois pontos mais è direita (que definem a aresta direita do quadrado) e um terceiro ponto que define a curvatura da curva (?). Em seguida eu adiciono esta curva ao meu polígono.

Eu estava esperando como resultado um polígono que é uma espécie de quadrado com uma curvatura na aresta da direita, no entanto, não é isso que ocorre. Duas coisas me intrigam:
1-Não sei se esta é a maneira correta de fazer este polígono composto que eu queria.
2-A curva não está passando pelos dois pontos do extremo direito do quadrado (em vermelho, para queme executar).

Alguém pode me dar uma mão nisso?

1 Resposta

J

Ninguém sabe nada a respeito?

Criado 22 de julho de 2010
Ultima resposta 29 de jul. de 2010
Respostas 1
Participantes 1