Union de polygones

umafaid Messages postés 6 Date d'inscription jeudi 1 février 2007 Statut Membre Dernière intervention 30 juillet 2007 - 25 juil. 2007 à 17:55
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 - 27 juil. 2007 à 12:22
Bonjour,

je dessines des polygones sur un panel et j'aimerais faire une union de deux polygones. Quelqu'un aurait-il des idées à me donner pour faire cela?

Merci d'avance.

1 réponse

Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
27 juil. 2007 à 12:22
Salut,

passe par la classe java.awt.geom.Area qui permet de faire ce que tu veux

Voici un exemple assez simple de ce que tu peux faire (Je l'ai trouvé sur le web) :
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.Shape;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.geom.Area;
import java.awt.geom.Ellipse2D;
import java.awt.geom.Rectangle2D;

import javax.swing.JComboBox;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class CombiningShapes extends JComponent {
  private Shape mShapeOne, mShapeTwo;

  private JComboBox mOptions;

  public CombiningShapes() {
    mShapeOne = new Ellipse2D.Double(40, 20, 80, 80);
    mShapeTwo = new Rectangle2D.Double(60, 40, 80, 80);
    setBackground(Color.white);
    setLayout(new BorderLayout());

    JPanel controls = new JPanel();

    mOptions = new JComboBox(new String[] { "outline", "add",
        "intersection", "subtract", "exclusive or" });

    mOptions.addItemListener(new ItemListener() {
      public void itemStateChanged(ItemEvent ie) {
        repaint();
      }
    });
    controls.add(mOptions);
    add(controls, BorderLayout.SOUTH);
  }

  public void paintComponent(Graphics g) {
    Graphics2D g2 = (Graphics2D) g;
    g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
        RenderingHints.VALUE_ANTIALIAS_ON);

    String option = (String) mOptions.getSelectedItem();
    if (option.equals("outline")) {
      // draw the outlines and return.
      g2.draw(mShapeOne);
      g2.draw(mShapeTwo);
      return;
    }

    // Create Areas from the shapes.
    Area areaOne = new Area(mShapeOne);
    Area areaTwo = new Area(mShapeTwo);
    // Combine the Areas according to the selected option.
    if (option.equals("add"))
      areaOne.add(areaTwo);
    else if (option.equals("intersection"))
      areaOne.intersect(areaTwo);
    else if (option.equals("subtract"))
      areaOne.subtract(areaTwo);
    else if (option.equals("exclusive or"))
      areaOne.exclusiveOr(areaTwo);

    // Fill the resulting Area.
    g2.setPaint(Color.orange);
    g2.fill(areaOne);
    // Draw the outline of the resulting Area.
    g2.setPaint(Color.black);
    g2.draw(areaOne);
  }
 
  public static void main(String[] args) {
      JFrame.setDefaultLookAndFeelDecorated(true);
    JFrame f = new JFrame();
    f.setTitle("Test");
    f.setDefaultCloseOperation(3);
    f.add(new CombiningShapes());
    f.setSize(220, 220);
    f.setLocationRelativeTo(null);
    f.setVisible(true);
  }
 
}

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

OoWORAoO
0
Rejoignez-nous