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 :

Polygon et 2 trous


Sujet :

2D Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 42
    Par défaut Polygon et 2 trous
    Bonjour a tous,
    Je pose beaucoup de questions en ce moment mais à chaque fois que je crois avoir progressé, un probleme arrive.
    Cette fois si c'est sur l'affichage de mes polygons que j'ai un probleme.
    Je vous explique mon programme en 3 mots:
    Je recupère des données Geometry d'une base de données donc du type:

    MULTIPOLYGON (((640 93, 809 214, 589 314, 640 93),
    (657 152, 747 199, 629 246, 657 152),
    (672 130, 711 151, 707 171, 672 130)))
    et je les affiches, mon programme permet aussi de les modifier, bouger, créer etc...

    Jusqu'à maintenant j'arrive a afficher un MultiPolygon avec 1 trou comme dans la premiere piece jointe. j'arrive aussi à la créer editer etc...
    Mais dès que je met un deuxieme trou (piece jointe 2) un troisieme trou se crée entre le premier point du polygon mere, le premier point du premier trou et le premier point du troisieme trou

    Je vous copie/colle mon code permettant d'afficher le polygone:
    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
    public void paint(Graphics g,int rendu) {
            Graphics2D g2 = (Graphics2D)g;
            if(rendu==JCanvas.ANTIALIASING) g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
     
            g.setColor(color);
            try {
                PGgeometry geom = new PGgeometry(polygon);
                org.postgis.MultiPolygon pl = (org.postgis.MultiPolygon)geom.getGeometry();
                int numPolygons = pl.numPolygons();
                for(int r=0;r<numPolygons;r++) {
                    org.postgis.Polygon plg = pl.getPolygon(r);
                    int numRings = plg.numRings();
                    int totalPoints = 0;
                    for(int p=0;p<numRings;p++) {
                        org.postgis.LinearRing rng = plg.getRing(p);
                        totalPoints = totalPoints + rng.numPoints();
                    }
                    int[] x = new int[totalPoints];
                    int[] y = new int[totalPoints];
                    int compteurPoints=0;
                    for(int p=0;p<numRings;p++) {
                        org.postgis.LinearRing rng = plg.getRing(p);
                        int numPoints = rng.numPoints();
                        for(int q=0;q<numPoints;q++) {
                            org.postgis.Point pt = rng.getPoint(q);
                            x[compteurPoints]=(int)pt.x;
                            y[compteurPoints]=(int)pt.y;
                            compteurPoints++;
                        }
                    }
                    g.fillPolygon(x,y,x.length);
                }
    }
    Voila, je precise que j'utilise PostGIS pour lire les données GEOMETRY et recupérer les points.
    J'appelle aussi g.fillPolygon() avec tous les points precedents à la fin de la boucle des polygones vu que mes données sont "MULTIPOLYGON(...)".

    Voila, j'espere avoir été clair, merci beaucoup de m'aider.
    Images attachées Images attachées   

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 42
    Par défaut
    En y reflechissant un peu plus, je me rend compte que le probleme ne viens pas a partir du moment que j'ai 2 trous dans mon polygone mais dès le premier, seulement le polygon formé entre tous les premiers points d'anneaux du polygon ne fait qu'une simple ligne et est donc invisible.

    Je precise aussi que les String (MULTIPOLYGON(...)) générées par mon appli fonctionnent bien sur d'autre applis affichant ce genre de données.

  3. #3
    Rédacteur
    Avatar de eclesia
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    2 111
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 111
    Par défaut
    Je crois qu'on pourrais tres bien s'entendre tout les deux.

    Si tu utilise postGIS, tu dois etre un geomaticien je suppose.

    Je ne peux pas t'aider sur le 2D (car je travail avec OpenGL en 3D), par contre il y a la librairie GeoTools qui te permet de gerer les cartes et PostGIS aussi, geotools utilise aussi JTS (Java Topologic Suite) pour faire les tests d'intersections.

    Sinon tu peux t'aider des sources des logiciels Udig ou OpenJump qui sont libre.

Discussions similaires

  1. [GD] Polygone à trous
    Par minours dans le forum Bibliothèques et frameworks
    Réponses: 11
    Dernier message: 10/09/2006, 14h47
  2. Comment detecter un polygon sous le curseur
    Par FreshVic dans le forum OpenGL
    Réponses: 2
    Dernier message: 04/07/2003, 10h48
  3. Triangulation de Polygones
    Par seb_lisha dans le forum DirectX
    Réponses: 1
    Dernier message: 01/07/2003, 12h40
  4. [Algo] Point à l'intérieur d'un polygone ?
    Par kebby dans le forum C++Builder
    Réponses: 5
    Dernier message: 23/05/2003, 13h22
  5. une ligne et un polygone convexe
    Par rekam dans le forum Algorithmes et structures de données
    Réponses: 10
    Dernier message: 20/12/2002, 10h39

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