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

C++ Discussion :

Tracé d'un trajet d'une ligne de bus


Sujet :

C++

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 38
    Points : 19
    Points
    19
    Par défaut Tracé d'un trajet d'une ligne de bus
    Bonjour à tous.

    Voici ma situation, je suis actuellement en deuxième année de BTS informatique et réseaux. Je suis responsable de la réalisation d'une IHM sur laquelle je dois représenter le tracé d'une ligne de bus (sous forme de points j'imagine donc...) et je ne sais vraiment pas comment m'y prendre, ni par quoi commencer...

    Si quelqu'un sait comment faire des points sous visual, puis les relier entre eux, je suis preneur.

    Merci d'avance.

  2. #2
    Membre expert
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 415
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 415
    Points : 3 156
    Points
    3 156
    Par défaut
    Salut !

    Avant toute chose, il faut que tu choisisses un toolkit pour faire de l'IHM, car il y en a pas mal.
    Find me on github

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 38
    Points : 19
    Points
    19
    Par défaut
    Je travaille sous Windows Form. Y'a t'il un outil spécial pour ce genre de chose?

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 38
    Points : 19
    Points
    19
    Par défaut
    Je viens de voir ton lien. Je n'ai pas pour autorisation d'importer des Toolkit, je dois faire ça avec les outils déjà présents sous Visual...

  5. #5
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 614
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 614
    Points : 30 626
    Points
    30 626
    Par défaut
    Salut,

    J'aimerais savoir ce que tu devra faire une fois que tu aura représenté le tracé des différentes lignes...

    Si tu ne dois que les afficher, il est possible de, tout simplement, envisager la création d'une image du format qui te semble le plus adapté.

    Si, par contre, tu dois interagir avec la représentation (ie: faire ressortir une ligne particulière par rapport aux autre, un "clique" sur / à proximité immédiate d'un arret permet de disposer d'informations / d'interfaces propres à l'arret sélectionné, un "clique" entre deux arrêts provoque une chose similaire sur le tronçon concerné,...), il faudra sans doute également maintenir un système dans lequel les coordonnées de tous les arrêts seront conservés afin de pouvoir sélectionner l'arrêt (ou le tronçon) concerné.

    Selon ce dont tu dispose et ce dont tu as besoin, une "de taille fixe" (JMG, PNG ou similaire) peut suffire, ou , au contraire, il peut être nécessaire de recourir à une image vectorielle (SVG inside ) afin de pouvoir zoomer ou te "balader" plus facilement sur ta représentation
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 38
    Points : 19
    Points
    19
    Par défaut
    En fait, il faut que le programme lise dans un fichier qui contient un ensemble de points (latitude et longitude pour faire un point).

    Et qu'il représente l'ensemble des points afin de pouvoir observer le trajet dans un cadre prévu à cet effet dans mon IHM.

    Aucune interaction ne sera possible avec la représentation du trajet une fois celui ci affiché cela étant.

  7. #7
    Membre expert
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 415
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 415
    Points : 3 156
    Points
    3 156
    Par défaut
    Dans un cas aussi simple, tu peux utiliser CImg qui te permettra de facilement dessiner dans une image et de l'afficher. En plus c'est multiplateforme et sans aucune dépendance supplémentaire (juste un template à inclure).
    Find me on github

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 38
    Points : 19
    Points
    19
    Par défaut
    Merci pour ton idée jblecanard. Mais je veux d'abord essayer quelque chose.

    Je commence à trouver une solution mais je ne vois vraiment pas comment tout mettre en place:

    Pour dessiner une courbe, il me faut créer un objet Graphics et passez l'adresse d'un tableau de points à la méthode DrawCurve.

    Msdn rajoute que pour la compilation, on a besoin de PaintEventArgs e, qui est un paramètre du gestionnaire d'événements Paint.

    Donc je pense avoir l'ensemble des éléments, il me manque plus qu'à tout assembler. Qu'en pensez vous?

  9. #9
    Membre expert
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 415
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 415
    Points : 3 156
    Points
    3 156
    Par défaut
    Si c'est juste pour dessiner un trajet de bus sans interaction, t'es en train de te briser la tête avec Windows Form. C'est prendre une masse pour casser une noisette.

    En tout cas, coilà ce que ça peut donner avec CImg :

    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
     
    #include "CImg.h"
    #include <cstdlib>
    #include <vector>
     
    struct station {
    	int x;
    	int y;
    };
     
    typedef struct station Station;
     
    int main(int argc, char* argv[])
    {
    	// Liste des arrêts
    	std::vector<Station> listeArrets(5);
     
    	listeArrets[0].x = 10;
    	listeArrets[0].y = 10;
    	listeArrets[1].x = 200;
    	listeArrets[1].y = 10;
    	listeArrets[2].x = 300;
    	listeArrets[2].y = 200;
    	listeArrets[3].x = 250;
    	listeArrets[3].y = 350;
    	listeArrets[4].x = 450;
    	listeArrets[4].y = 300;
     
    	// On dessine
    	cimg_library::CImg<unsigned char> image(500,500,1,3,0);
    	image.fill(255);
    	const unsigned char red[] = { 255,0,0 }, green[] = { 0,255,0 }, blue[] = { 0,0,255 };
     
    	for(unsigned int i=0;i<listeArrets.size()-1;i++)
    		image.draw_line(listeArrets[i].x,listeArrets[i].y,listeArrets[i+1].x,listeArrets[i+1].y,blue,1);
     
    	for(unsigned int i=0;i<listeArrets.size();i++)
    		image.draw_circle(listeArrets[i].x,listeArrets[i].y,10,green);
     
    	// Sauvegarde du résultat
    	image.save_bmp("test.bmp");
     
    	// On affiche
    	cimg_library::CImgDisplay main_disp(image,"Trajet du bus");
    	while (!main_disp.is_closed()) {
    		main_disp.wait();
    	}
     
    	return 0;
    }
    Comme tu le peux le voir, la partie affichage est torchée en très peu de code.

    Edit : Peut être que utiliser Windows Form fait partie de votre exercice. Est-ce le cas ?
    Find me on github

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 38
    Points : 19
    Points
    19
    Par défaut
    Bonjour!
    Je commence à avoir un résultat plutôt satisfaisant, seul le dimensionnement de ma courbe en fonction de la taille de mon cadre, reste un problème.

    Quelqu'un sait-il que faut il utiliser pour que la courbe s'adapte automatiquement à mon cadre?

    Voici mon code

    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
    void DrawCurvePointF( PaintEventArgs^ e )
       {
          // Create pens.
          Pen^ redPen = gcnew Pen( Color::Blue,3.0f );
          Pen^ greenPen = gcnew Pen( Color::Green,3.0f );
     
          // Create points that define curve.
          PointF point1 = PointF(0.0F,0.0F);
          PointF point2 = PointF(60.0F,60.0F);
          PointF point3 = PointF(120.0F,100.0F);
          PointF point4 = PointF(150.0F,150.0F);
          PointF point5 = PointF(189.0F,130.0F);
          PointF point6 = PointF(200.0F,100.0F);
          PointF point7 = PointF(250.0F,110.0F);
    	  PointF point8 = PointF(230.0F,170.0F);
          PointF point9 = PointF(150.0F,190.0F);
          PointF point10 = PointF(100.0F,211.0F);
     
          array<PointF>^ curvePoints = {point1,point2,point3,point4,point5,point6,point7,point8,point9,point10};
     
          // Draw lines between original points to screen.
          e->Graphics->DrawLines( redPen, curvePoints );
       }
     
     
     System::Void pictureBox2_Paint(System::Object^  sender, System::Windows::Forms::PaintEventArgs^  e) {
    		 	DrawCurvePointF(e);
    		 }
    Merci beaucoup

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 38
    Points : 19
    Points
    19
    Par défaut
    Je rencontre une nouvelle difficulté désormais.

    Je dois lire dans un fichier les points de coordonnée.
    Le fichier.txt contient un ensemble de colonnes comme le présente l'encadré suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    1;43.61012320;1.454953550;I
    2;43.60992120;1.454835530;I
    3;43.60964550;1.454422470;I
    4;43.60952120;1.454245440;I
    5;43.60928810;1.453902120;I
    Sachant que le fichier ne commence pas à cette ligne, comment puis je récupérer la valeur de la deuxième colonne dans un tableau (de float j'imagine), et faire la même chose avec la troisième colonne? Et ce tant qu'il y a des lignes dans le fichier.

    Une idée? merci beaucoup

  12. #12
    Membre expert
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 415
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 415
    Points : 3 156
    Points
    3 156
    Par défaut
    Salut

    Je pense que te tourner vers les expressions rationelles est le moyen le plus indiqué dans ton cas.

    Boost sait faire ça en C++, sinon tu peux aussi le faire en C.

    Tu peux aussi le faire par découpage de chaîne de caractère à la bourrin mais ce n'est pas très propre. L'avantage des expressions rationelles est qu'elle te permettront facilement d'identifier si une ligne du fichier décrit ou non une station et, le cas échéant, de lire les informations dedans. On peut t'aider à écrire les patterns si tu n'y arrives pas.
    Find me on github

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 38
    Points : 19
    Points
    19
    Par défaut
    Super merci bien


    Maintenant j'ai encore une fois un nouveau problème (décidément...)
    Il me faut convertir ces données GPS en points de type X & Y.

    Quelqu'un connait les formules a appliquer pour effectuer ces conversions?
    J'en vois plusieurs mais jamais les mêmes...

    Merci encore une fois

  14. #14
    Membre expert
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 415
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 415
    Points : 3 156
    Points
    3 156
    Par défaut
    Salut

    Visiblement, les coordonnées sont déjà au format décimal, ce que simplifie la tâche. Après ça dépend de la précision dont tu as besoin. Si c'est juste pour représenter grossièrement le trajet, tu prend y=Latitude, x=Longitude, tu mets à l'échelle, tu centres et basta .

    Sinon, le GPS utilise le modèle WGS 84, sur lequel tu dois te baser si tu veux faire une conversion précise (en mètres par exemple).
    Find me on github

  15. #15
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 38
    Points : 19
    Points
    19
    Par défaut
    Je pense utiliser WGS 84 mais il me faudrait un exemple d'application juste avec un point pour voir comment procéder.

    Merci

  16. #16
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 38
    Points : 19
    Points
    19
    Par défaut
    Sans ce problème, un autre survient déjà, ça a l'air simple comme ça le: "tu mets à l'échelle, tu centres et basta" mais bizarrement ça me semble pas facile...

  17. #17
    Membre expert
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 415
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 415
    Points : 3 156
    Points
    3 156
    Par défaut
    Allons allons tu vas voir, c'est très simple.

    J'ai la flemme de te décrire en français, mais en gros, il faut convertir tes coordonnées en coordonnées "écran". Je te fais ça bien avec un zoom et tout. Explications en commentaires.

    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
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    #include <cstdlib>
    #include <vector>
    #include <cmath>
    #include <iostream>
     
    struct station {
    	int x;
    	int y;
    	float GPS_x;
    	float GPS_y;
    };
     
    typedef struct station Station;
     
    int main(int argc, char* argv[])
    {
    	// Liste des arrêts
    	std::vector<Station> listeArrets(5);
     
    	listeArrets[0].GPS_x = 1.454953550f;
    	listeArrets[0].GPS_y = 43.61012320f;
    	listeArrets[1].GPS_x = 1.454835530f;
    	listeArrets[1].GPS_y = 43.60992120f;
    	listeArrets[2].GPS_x = 1.454422470f;
    	listeArrets[2].GPS_y = 43.60964550f;
    	listeArrets[3].GPS_x = 1.454245440f;
    	listeArrets[3].GPS_y = 43.60952120f;
    	listeArrets[4].GPS_x = 1.453902120f;
    	listeArrets[4].GPS_y = 43.60928810f;
     
    	// Configuration
    	int largeurEcran = 800;
    	int hauteurEcran = 600;
     
    	// recherche de l'intervalle de valeurs des x et y
    	float xmin, xmax, ymin, ymax;
    	xmin = xmax = listeArrets[0].GPS_x;
    	ymin = ymax = listeArrets[0].GPS_y;
     
     
    	for(unsigned int i=1;i<listeArrets.size();i++)
    	{
    		if(listeArrets[i].GPS_x < xmin) xmin = listeArrets[i].GPS_x;
    		if(listeArrets[i].GPS_x > xmax) xmax = listeArrets[i].GPS_x;
    		if(listeArrets[i].GPS_y < ymin) ymin = listeArrets[i].GPS_y;
    		if(listeArrets[i].GPS_y > ymax) ymax = listeArrets[i].GPS_y;
    	}
     
    	// On calcule l'échelle adaptée
    	float echelleX = static_cast<float>(largeurEcran)/(xmax - xmin);
    	float echelleY = static_cast<float>(hauteurEcran)/(ymax - ymin);
     
    	// On prend l'échelle qui réduit le plus pour conserver la proportion
    	float echelle = (echelleX > echelleY) ? echelleY : echelleX ;
     
    	// On dézoome un peu pour la marge sur les bords, ainsi les 
    	// extrêmes ne seront pas collés au bord de l'écran car c'est moche
    	float zoom = 0.9f;
     
            // On calcule l'offset pour centrer
    	float offset_x = ( xmax + xmin ) / 2.f;
    	float offset_y = ( ymax + ymin ) / 2.f;
     
    	for(unsigned int i=0;i<listeArrets.size();i++)
    	{
                    // La technique du +0.5f sert à arrondir au lieu d'arrondir par défaut
    		// La soustraction sert à centrer les points autour du point (0,0) du plan
    		// Le reliquat à la fin rajoute la marge écran (coordonnées 0,0 en haut à gauche)
    		listeArrets[i].x = static_cast<int>(floor(echelle * zoom * (listeArrets[i].GPS_x - offset_x) + 0.5f)) + largeurEcran/2;
    		listeArrets[i].y = static_cast<int>(floor(echelle * zoom * (listeArrets[i].GPS_y - offset_y) + 0.5f)) + hauteurEcran/2;
    		std::cout << listeArrets[i].x << " " << listeArrets[i].y << std::endl;
    	}	
     
    	return 0;
    }
    Ce qui donne :

    Find me on github

  18. #18
    Expert confirmé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 895
    Points : 4 551
    Points
    4 551
    Par défaut
    Citation Envoyé par jblecanard Voir le message
    Salut

    Visiblement, les coordonnées sont déjà au format décimal, ce que simplifie la tâche. Après ça dépend de la précision dont tu as besoin. Si c'est juste pour représenter grossièrement le trajet, tu prend y=Latitude, x=Longitude, tu mets à l'échelle, tu centres et basta .

    Sinon, le GPS utilise le modèle WGS 84, sur lequel tu dois te baser si tu veux faire une conversion précise (en mètres par exemple).
    WGS84 et "mise à l'échelle" ne vont pas très bien ensemble. WGS84 propose un modèle de géodésique qui n'a rien d'une sphère parfaite. En conséquence, le calcul permettant la projection de (x=long, y=lat) sur le pseudo-globe terrestre défini pas WGS84 est tout sauf trivial. Reste que suite à cette première projection, le PO doit en faire une autre - dans un plan tangent à cette géodésique. Vu les distances considérées, cette projection aura un résultat très similaire quelle que soit le modèle de datum utilisé (globe parfait ou WGS84). Par conséquent, au final, on peut certainement oublier WGS84 dans ce cas précis.

    Reste que les coordonnées sont exprimées non pas sur un plan mais sur une géodésique (parfaite, pour nous simplifier le travail). Encore une fois, c'est la taille des trajets de bus qui nous sauve : à cette échelle, la terre peut aisément être considérée comme étant plate. Le passage du repère géographique au repère utilisé pour le dessin sera donc relativement simple : on va passer d'un trapèze dont les dimensions dépendent uniquement de la latitude vers un rectangle. Encore une fois, les distances et la latitude considérées nous facilite le travail ; si la latitude était plus proche de 90, il faudrait certainement revoir un peu notre copie pour trouver une projection plus correcte, mais entre (disons) 0 et 60° de latitude et vu les distances considérées, on peu probablement considérer que les déformations liées à la projection sont trop faibles pour être perceptibles.

    On a donc des coordonnées long/lat qu'il faut transformer en coordonnées x/y grâce à une translation de repère et un zoom.

    Et là, on retombe sur le code de jblecanard.

    Voilà, comme ça, l'explication en français est disponible aussi
    [FAQ des forums][FAQ Développement 2D, 3D et Jeux][Si vous ne savez pas ou vous en êtes...]
    Essayez d'écrire clairement (c'est à dire avec des mots français complets). SMS est votre ennemi.
    Evitez les arguments inutiles - DirectMachin vs. OpenTruc ou G++ vs. Café. C'est dépassé tout ça.
    Et si vous êtes sages, vous aurez peut être vous aussi la chance de passer à la télé. Ou pas.

    Ce site contient un forum d'entraide gratuit. Il ne s'use que si l'on ne s'en sert pas.

  19. #19
    Membre expert
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 415
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 415
    Points : 3 156
    Points
    3 156
    Par défaut
    En effet, lorsque je parlais de "mise à l'échelle", je considérais la "projection" sur un plan effectuée (de la manière triviale que je propose), et je parlais de la mise à l'échelle et du centrage par rapport au plan image d'un écran.

    Merci Emmanuel pour ce complément !
    Find me on github

Discussions similaires

  1. Réponses: 2
    Dernier message: 01/10/2013, 19h48
  2. [OpenGL 1.x] Transformation et tracé d'une ligne
    Par zikee dans le forum OpenGL
    Réponses: 6
    Dernier message: 10/05/2013, 16h08
  3. Tracé d'une ligne sur un QWidget
    Par hichemnho dans le forum Débuter
    Réponses: 2
    Dernier message: 20/01/2012, 15h40
  4. tracé une ligne dans un picturebox
    Par kakrocq dans le forum VC++ .NET
    Réponses: 2
    Dernier message: 21/05/2007, 13h30
  5. String Grid et choix d'une couleur pour une ligne
    Par Gigottine dans le forum C++Builder
    Réponses: 12
    Dernier message: 17/05/2002, 15h23

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