IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

2D Java Discussion :

Fusion Rectangle2D / Line2D


Sujet :

2D Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Avatar de seiryujay
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 950
    Par défaut Fusion Rectangle2D / Line2D
    Bonjour,

    Je cherche à créer un objet de type Shape qui représente la "fusion" (concaténation) entre 1 objet de type Rectangle2D et un autre de type Line2D.

    Voici le code que j'utilise:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Rectangle2D r2d = new Rectangle2D.double(x,y,width,height);
    Line2D l2d = new Line2D.double(x1,y1,x2,y2);
    Area a = new Area(r2d);
    a.add(new Area(l2d));
    Shape shape = a;
    ...
    Visiblement ce code ne fonctionne pas pour les objets de type Line2D!

    De même, si je cherche à fusionner 2 Rectangle2d ensemble et que la hauteur ou la largeur d'un des 2 rectangles est ègale à 1 (géométriquement c'est l'équivalent d'un trait), le code ci-dessus ne fonctionne pas non plus!

    Quelqu'un peut-il m'aider?
    Merci

    [ Sujet déplacé depuis le forum java par Viena ]
    Les Règles du Forum

  2. #2
    Gfx
    Gfx est déconnecté
    Expert confirmé
    Avatar de Gfx
    Inscrit en
    Mai 2005
    Messages
    1 770
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Par défaut
    Que se passe-t-il exactement ?

  3. #3
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 904
    Billets dans le blog
    54
    Par défaut
    la "fusion" (concaténation)
    L'union.

    Effectivement la ligne n'apparait pas quand on utilise une Area (Windows XP, JDK 1.5.0_05) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
     
    package test;
     
    import java.awt.*;
    import java.awt.geom.*;
    import javax.swing.*;
    import java.util.*;
     
    /**
     * <p>Title: </p>
     * <p>Description: </p>
     * <p>Copyright: Copyright (c) 2005</p>
     * <p>Company: </p>
     * @author not attributable
     * @version 1.0
     */
    public final class RenderPanel
        extends JPanel {
      public RenderPanel() {
        super();
        setPreferredSize(new Dimension(1000, 1000));
      }
     
      /** {@inheritDoc}
       */
      @Override protected void paintComponent(Graphics graphics) {
        super.paintComponent(graphics);
        Graphics2D g2d = (Graphics2D) graphics;
        g2d.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
        g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
        g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
     
        Rectangle2D r2d = new Rectangle2D.Double(100,100,200,100); 
        Line2D l2d = new Line2D.Double(50,50,400,400); 
     
        Area a = new Area(r2d); 
        a.add(new Area(l2d)); 
        g2d.setColor(Color.BLACK);
        g2d.draw(a);
     
     
        GeneralPath path = new GeneralPath();
        path.append(r2d, false);
        path.append(l2d, false);
        g2d.translate(300, 0);
        g2d.setColor(Color.RED);
        g2d.draw(path);
        g2d.translate(-300, 0);
      }
     
      public static void main(String[] args) {
        JFrame frame = new JFrame("Test");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLayout(new BorderLayout());
        frame.add(new JScrollPane(new RenderPanel()));
        frame.pack();
        frame.setVisible(true);
      }
    }
    Ou c'est une subtilite de Area ou c'est un bug.
    Dans le 2nd cas essaie de remplir un bug report chez Sun (a moins que Gfx ne se charge de le transmettre directement dans la Bug Data Base)
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  4. #4
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 904
    Billets dans le blog
    54
    Par défaut
    Idem sous Linux (CentOS 3.3, JDK 1.5.0_05).
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  5. #5
    Membre éclairé
    Avatar de seiryujay
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 950
    Par défaut
    Citation Envoyé par Gfx
    Que se passe-t-il exactement ?
    La ligne n'est pas prise en compte dans l'union dobjet...

  6. #6
    Membre éclairé
    Avatar de seiryujay
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 950
    Par défaut
    Citation Envoyé par bouye
    Ou c'est une subtilite de Area ou c'est un bug.
    Dans le 2nd cas essaie de remplir un bug report chez Sun (a moins que Gfx ne se charge de le transmettre directement dans la Bug Data Base)
    Ben en fait dans la Javadoc, il y a marqué ceci :
    The Area object is defined as an object that performs certain binary CAG (Constructive Area Geometry) operations on other area-enclosing geometries, such as rectangles, ellipses, and polygons
    Ca parle d'"area-enclosing geometries". Donc je comprendrai que ça ne marche pas pour les Line2D si "area-enclosing geometries" signifie "forme fermée". Mais je ne comprends pas pourquoi ça ne marche pas avec les rectangle ultra-fins... Donc sûrement un bug...
    A voir.

  7. #7
    Gfx
    Gfx est déconnecté
    Expert confirmé
    Avatar de Gfx
    Inscrit en
    Mai 2005
    Messages
    1 770
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 770
    Par défaut
    Cherche dans la Bug Parade s'il y a un bug a ce sujet deja ouvert. Sinon ouvre un bug a ce sujet ou envoie un mail a Jim Graham.

  8. #8
    Membre éclairé
    Avatar de seiryujay
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 950
    Par défaut
    Bug report posté...

  9. #9
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 904
    Billets dans le blog
    54
    Par défaut
    marche pas pour les Line2D si "area-enclosing geometries" signifie "forme fermée". Mais je ne comprends pas pourquoi ça ne marche pas avec les rectangle ultra-fins...
    Dans ce cas Ok ce serait plus clair.
    Mais j'avoue que je ne comprend pas bien comment cette aire fermée est détectée. Pour être précis je ne comprend pas CA :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
        Rectangle2D r2d = new Rectangle2D.Double(100,100,200,100);
        Line2D l2d = new Line2D.Double(50,50,400,400);
        GeneralPath path = new GeneralPath();
        path.append(r2d, false);
        path.append(l2d, false);
        path.moveTo(200, 100);
        path.lineTo(500, 600);
        path.lineTo(500, 800);
        g2d.setColor(Color.RED);
        g2d.draw(path);
        g2d.translate(0, 300);
        g2d.setColor(Color.GREEN);
        g2d.draw(new Area(path));
        g2d.translate(0, -300);
    Parce qu'au niveau aire fermée ça me parait quand même assez loin du comportement escompté...

    M'enfin sinon j'utilise très rarement les aires, unquement quand j'ai besoin de soutraire une forme à une autre, ce qui arrive rarement. Vive GeneralPath

    Mieux vaut peut-être faire comme Gfx l'a suggéré.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  10. #10
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 904
    Billets dans le blog
    54
    Par défaut
    Ok le pb vient du fait que la Line2D n'a pas été connectée au reste du chemin. Ca se voit bien quand on fait un fill.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    GeneralPath path = new GeneralPath();
        path.append(r2d, false);
        path.append(l2d, false);
        path.moveTo(200, 100);
        path.lineTo(500, 600);
        path.lineTo(500, 800);
        g2d.setColor(Color.DARK_GRAY);
        g2d.fill(path);
        g2d.setColor(Color.RED);
        g2d.draw(path);
        g2d.setColor(Color.GREEN);
        g2d.draw(new Area(path));
    Une classe à manipuler avec précaution donc....
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

Discussions similaires

  1. Soustraire un Rectangle2D à une Line2D
    Par ludomacho dans le forum 2D
    Réponses: 0
    Dernier message: 04/09/2012, 22h07
  2. Fusion de lignes de tables en éliminant les redondances
    Par MinsK dans le forum Algorithmes et structures de données
    Réponses: 12
    Dernier message: 22/04/2004, 09h21
  3. [MFC]Info sur da la fusion sous Word
    Par kor dans le forum MFC
    Réponses: 6
    Dernier message: 22/08/2003, 11h14
  4. Fusion directe dans word
    Par wozzy dans le forum Access
    Réponses: 10
    Dernier message: 03/06/2003, 21h02
  5. Tri par fusion d'un tableau
    Par Mailgifson dans le forum C
    Réponses: 5
    Dernier message: 12/12/2002, 14h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo