Exemple #1
0
 public MainWindow(MyPersonalMapData m)
 {
     mP = new MyPersonalMapData(m.Nom, m.Prenom, m.Email);
     foreach (ICartoObj obj in m.CartoCollection)
     {
         if (obj is POI)
         {
             mP.AddCartObj(new POI((POI)obj));
         }
         if (obj is ProjectLibraryClass.Polygon)
         {
             mP.AddCartObj(new ProjectLibraryClass.Polygon((ProjectLibraryClass.Polygon)obj));
         }
         if (obj is ProjectLibraryClass.Polyline)
         {
             mP.AddCartObj(new ProjectLibraryClass.Polyline((ProjectLibraryClass.Polyline)obj));
         }
     }
     coordTmp           = new List <ICoord>();
     _lbBackgroundColor = new SolidColorBrush(System.Windows.Media.Colors.White);
     _lbForegroundColor = new SolidColorBrush(Colors.Black);
     status             = null;
     InitializeComponent();
     ListBoxMyPersonalData.ItemsSource = mP.CartoCollection;
     UpdateStatusBar("Zoom level = " + myMap.ZoomLevel.ToString());
     ListBoxMyPersonalData.Background = BackgroundColor;
     ListBoxMyPersonalData.Foreground = ForegroundColor;
     BgColorChanged += BackgroundColorHasChanged;
     FgColorChanged += ForegrounddColorHasChanged;
     if (mP.CartoCollection.Count > 0)
     {
         RefreshMap();
     }
 }
Exemple #2
0
 private void connectButton_Click(object sender, RoutedEventArgs e)
 {
     if (string.IsNullOrEmpty(tbEmail.Text) || string.IsNullOrEmpty(tbNom.Text) || string.IsNullOrEmpty(tbPrenom.Text))
     {
         tbBadSaisie.Text = "Veuillez saisir tous les champs !";
     }
     else
     {
         ///On va vérifier le format d'email
         if (!IsValidEmail(tbEmail.Text))
         {
             tbBadSaisie.Text = "Mauvais format d'adresse mail";
         }
         else
         {
             ///Tout est bon
             MyPersonalMapData mp = new MyPersonalMapData(tbNom.Text, tbPrenom.Text, tbEmail.Text);
             /// On regarde si un fichier existe
             if (File.Exists(tbPrenom.Text + tbNom.Text + ".txt"))
             {
                 Console.WriteLine("FICHIER EXISTE");
                 ///Le fichier existe, on va importer
                 Stream     s         = new FileStream(tbPrenom.Text + tbNom.Text + ".txt", FileMode.Open, FileAccess.Read);
                 IFormatter formatter = new BinaryFormatter();
                 ObservableCollection <ICartoObj> iCartoObjRead = (ObservableCollection <ICartoObj>)formatter.Deserialize(s);
                 foreach (ICartoObj carto in iCartoObjRead)
                 {
                     mp.AddCartObj(carto);
                 }
                 s.Close();
             }
             Console.WriteLine("ON CREE MAINWINDOW");
             MainWindow mw = new MainWindow(mp);
             mw.Show();
             Close();
         }
     }
 }
Exemple #3
0
        /// Va gérer les clicks sur la map en fonction du mode dans lequel on se trouve
        private void myMap_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            UpdateStatusBar("MouseLeftButtonDown");
            if (status != null)
            {
                System.Windows.Point mousePosition = e.GetPosition(myMap);
                ICoord     obj;
                bool       trouve = false;
                List <int> index = new List <int>();
                double     distancemin, distanceTmp;

                Location loc = new Location();
                loc = myMap.ViewportPointToLocation(mousePosition);

                int i = 0, distPos = 0;
                ///ISPointClose
                ///On cherche les CartoObj proche
                foreach (ICartoObj cartoObj in mP.CartoCollection)
                {
                    Console.WriteLine("Test : cartoObj = " + cartoObj);
                    Console.WriteLine("location = " + loc.Latitude + " / " + loc.Longitude);
                    if (cartoObj.IsPointClose(loc.Latitude, loc.Longitude, mP.Precision) == true)
                    {
                        Console.WriteLine("IS POINT CLOSE TRUE");
                        trouve = true;
                        index.Add(i);
                        //obj = cartoObj.WhichPointIsClose(e.GetPosition(myMap).X,e.GetPosition(myMap).Y);
                    }
                    i++;
                }

                if (trouve)
                {
                    Console.WriteLine("ON A TROUVE UN POINT PROCHE");
                    ///On va devoir trouver quel CartoObj est le plus proche
                    ICoord[] objtmp = new ICoord[index.Count];

                    i = 0;
                    for (int j = 0; j < index.Count; j++)
                    {
                        objtmp[i] = mP.CartoCollection[index[j]].WhichPointIsClose(loc.Latitude, loc.Longitude);
                        i        += 1;
                    }
                    ///Comparer la distance entre chaque
                    i           = 0;
                    distancemin = -1;

                    foreach (ICoord coord in objtmp)
                    {
                        Console.WriteLine("Comparaison avec le point : " + coord.X + "/" + coord.Y);
                        Console.WriteLine("Point click : " + loc.Latitude + "/" + loc.Longitude);
                        distanceTmp = MathUtil.DistanceDeuxPoints(coord.X, coord.Y, loc.Latitude, loc.Longitude);
                        if (distancemin == -1)
                        {
                            distancemin = distanceTmp;
                            distPos     = i;
                        }
                        if (distancemin > distanceTmp)
                        {
                            distancemin = distanceTmp;
                            distPos     = i;
                        }
                        i += 1;
                    }
                    Console.WriteLine("Point le plus proche : " + objtmp[distPos].X + "/" + objtmp[distPos].Y);
                    ///Arriver ici, nous avons les coordonnées du point le plus proche
                    if (objtmp[distPos] is POI)
                    {
                        if (RBPoi.IsChecked == true)
                        {
                            ///Pas de superposition de pushpin
                            loc = new Location();
                            loc = myMap.ViewportPointToLocation(mousePosition);
                            obj = new POI(loc.Latitude, loc.Longitude);
                        }
                        else
                        {
                            obj = objtmp[distPos];
                            loc = new Location(obj.X, obj.Y);
                        }
                    }
                    else
                    {
                        if (RBPoi.IsChecked == true)
                        {
                            obj = new POI(objtmp[distPos].X, objtmp[distPos].Y);
                        }
                        else
                        {
                            obj = objtmp[distPos];
                        }

                        loc = new Location(obj.X, obj.Y);
                    }
                }
                else
                {
                    Console.WriteLine("ON A PAS TROUVE DE POINT PROCHE");
                    loc = new Location();
                    loc = myMap.ViewportPointToLocation(mousePosition);
                    Console.WriteLine("Loc = " + loc.Latitude + "/ " + loc.Longitude);
                    if (status == "Créer")
                    {
                        if (RBPoi.IsChecked == true)
                        {
                            obj = new POI(loc.Latitude, loc.Longitude);
                        }
                        else
                        {
                            obj = new Coordonnees(loc.Latitude, loc.Longitude);
                        }
                    }
                    else
                    {
                        obj = null; ///Ne plus avoir l'erreur ligne 262 (utilisation d'une variable non assigné)
                    }
                }
                index.Clear();

                Console.WriteLine("Location = ", loc.Longitude + " / " + loc.Latitude);
                switch (status)
                {
                case "Créer":
                {
                    UpdateStatusBar("MouseLeftButtonDownCréer");

                    if (RBPoi.IsChecked == true)
                    {
                        Pushpin pin = new Pushpin();
                        pin.Location = loc;
                        myMap.Children.Add(pin);
                        mP.AddCartObj(obj as POI);
                        Console.WriteLine("Test après add : " + mP.CartoCollection.Last().lCoord.Last());

                        UpdateStatusBar(mP.CartoCollection.Last().ToString());
                        //ListBoxMyPersonalData.Items.Add(new POI(loc.Latitude,loc.Longitude));
                    }
                    if (RBPolyline.IsChecked == true)
                    {
                        if (coordTmp.Count == 0)
                        {
                            maPolyline = new MapPolyline();
                            myMap.Children.Add(maPolyline);
                            locCol = new LocationCollection();
                            maPolyline.Locations       = locCol;
                            maPolyline.StrokeThickness = mP.lineEp;
                            maPolyline.Stroke          = ToBrush(mP.Contour);
                            maPolyline.Opacity         = mP.Opacity;
                        }


                        if (coordTmp.Count > 2)
                        {
                            if ((coordTmp[0].X <= obj.X + mP.Precision && coordTmp[0].X >= obj.X - mP.Precision) && (coordTmp[0].Y <= obj.Y + mP.Precision && coordTmp[0].Y >= obj.Y - mP.Precision))
                            {
                                ///Notre polyline est revenu a son point de départ -> Polygon ?
                                MessageBoxResult res = MessageBox.Show("Voulez-vous en faire un polygon ? ", "Polygon", MessageBoxButton.YesNo);
                                if (res == MessageBoxResult.Yes)
                                {
                                    ///On va enfaire un polygon

                                    maPolygon = new MapPolygon();
                                    myMap.Children.Add(maPolygon);
                                    maPolygon.Locations       = locCol;
                                    maPolygon.StrokeThickness = mP.lineEp;
                                    maPolygon.Stroke          = ToBrush(mP.Contour);
                                    maPolygon.Fill            = ToBrush(mP.Remplissage);
                                    maPolygon.Opacity         = mP.Opacity;
                                    maPolygon.Locations       = maPolyline.Locations;
                                    RBPolygon.IsChecked       = true;
                                    RBPolyline.IsChecked      = false;
                                    ButtonFinirTrace_Click(null, null);

                                    return;
                                }
                            }
                        }
                        maPolyline.Locations.Add(loc);

                        coordTmp.Add(obj);
                    }
                    if (RBPolygon.IsChecked == true)
                    {
                        if (coordTmp.Count == 0)
                        {
                            maPolygon = new MapPolygon();
                            myMap.Children.Add(maPolygon);
                            locCol = new LocationCollection();
                            maPolygon.Locations       = locCol;
                            maPolygon.StrokeThickness = mP.lineEp;
                            maPolygon.Stroke          = ToBrush(mP.Contour);
                            maPolygon.Fill            = ToBrush(mP.Remplissage);
                            maPolygon.Opacity         = mP.Opacity;
                        }
                        coordTmp.Add(obj);

                        maPolygon.Locations.Add(loc);
                    }
                    break;
                }

                case "Supprimer":
                {
                    Console.WriteLine("Supprimer");
                    if (trouve)
                    {
                        bool find = false;
                        int  j = 0, a = 0;

                        ///On sait sur quel point/figure on clique, on doit retrouver la position de chaque
                        while (j < mP.CartoCollection.Count && find == false)
                        {
                            a = 0;
                            while (a < mP.CartoCollection[j].lCoord.Count && find == false)
                            {
                                if (mP.CartoCollection[j].lCoord[a].X == loc.Latitude && mP.CartoCollection[j].lCoord[a].Y == loc.Longitude)
                                {
                                    find = true;
                                }
                                else
                                {
                                    a++;
                                }
                            }
                            if (!find)
                            {
                                j++;
                            }
                        }
                        if (find)
                        {
                            Console.WriteLine("TROUVE");
                            // J contient l'index de la figure contenant le point sélectionné
                            myMap.Children.Remove(myMap.Children[j]);
                            mP.CartoCollection.Remove(mP.CartoCollection[j]);
                            //ListBoxMyPersonalData.Items.Refresh();
                        }
                    }

                    break;
                }

                case "Modifier":
                {
                    ///On va récupérer l'index
                    if (trouve)
                    {
                        bool find = false;
                        int  j = 0, a = 0;
                        while (j < mP.CartoCollection.Count && find == false)
                        {
                            a = 0;
                            while (a < mP.CartoCollection[j].lCoord.Count && find == false)
                            {
                                if (mP.CartoCollection[j].lCoord[a].X == loc.Latitude && mP.CartoCollection[j].lCoord[a].Y == loc.Longitude)
                                {
                                    find = true;
                                }
                                else
                                {
                                    a++;
                                }
                            }
                            if (!find)
                            {
                                j++;
                            }
                        }
                        if (find)
                        {
                            WindowItemProperty wItem = new WindowItemProperty(j);
                            wItem.ShowDialog();

                            ListBoxMyPersonalData.Items.Refresh();
                            RefreshMap();
                        }
                    }


                    break;
                }
                }
            }
        }
Exemple #4
0
        static void Main(string[] args)
        {
            int  choix;
            bool fin = false;

            while (!fin)
            {
                choix = Choix("Classe Coordonnee", "Classe POI", "Classe Polyline", "Classe Polygon", "Interface IIsPointClose",
                              "Interface IPointy", "Liste générique CartoObj", "Liste générique Polyline", "Classer liste d'objet CartObj",
                              "Sauvegarder", "Charger", "Quitter");
                switch (choix)
                {
                case 1:
                {
                    Console.WriteLine("Test de la classe Coordonnee");
                    Coordonnees coord = new Coordonnees();
                    Console.WriteLine("Test du constructeur par défault et de la surcharge ToString()");
                    Console.WriteLine(coord.ToString());
                    double      x1 = 2, y1 = 4;
                    Coordonnees coord2 = new Coordonnees(x1, y1);
                    Console.WriteLine("Test du constructeur d'initialisation (et de l'operateur ToString()");
                    Console.WriteLine(coord2.ToString());
                    break;
                }

                case 2:
                {
                    Console.WriteLine("Test de la classe POI");
                    POI poi = new POI();
                    Console.WriteLine("Test du constructeur par défault et de la surcharge de l'opérateur ToString()");
                    Console.WriteLine(poi.ToString());
                    double x1 = 25.63987, y1 = 56.2235;
                    string tmp = "Classe de laboratoire";
                    Console.WriteLine("Test du constructeur d'initialisation et de la surcharge de l'opérateur ToString()");
                    POI poi2 = new POI(tmp, x1, y1);
                    Console.WriteLine(poi2.ToString());
                    break;
                }

                case 3:
                {
                    Console.WriteLine("Test de la classe Polyline");
                    Polyline poly1 = new Polyline();
                    Console.WriteLine("Test du constructeur par défault et de la surcharge de l'opérateur ToString()");
                    Console.WriteLine(poly1.ToString());
                    Console.WriteLine("Test de la fonction Draw()");
                    poly1.Draw();
                    Color         cou       = Color.Aqua;
                    int           epaisseur = 5;
                    Coordonnees   coord1    = new Coordonnees(2.55, 2.669);
                    Coordonnees   coord2    = new Coordonnees(4.569578, 97.59);
                    Coordonnees   coord3    = new Coordonnees(588.2243, 6.20135);
                    Coordonnees[] tab       = new Coordonnees[3];
                    tab[0] = coord1;
                    tab[1] = coord2;
                    tab[2] = coord3;
                    Polyline poly2 = new Polyline(epaisseur, cou, tab);
                    Console.WriteLine("Test du constructeur d'initialisation et de la surcharge de l'opérateur ToString()");
                    Console.WriteLine(poly2.ToString());
                    Console.WriteLine("Test de la fonction Draw()");
                    poly2.Draw();
                    break;
                }

                case 4:
                {
                    Console.WriteLine("Test de la classe Polygon");
                    Polygon poly1 = new Polygon();
                    Console.WriteLine("Test du constructeur par défault et de la surcharge de l'opérateur ToString()");
                    Console.WriteLine(poly1.ToString());
                    Console.WriteLine("Test de la fonction Draw()");
                    poly1.Draw();
                    Color         rempl  = Color.Cyan;
                    Color         cont   = Color.Orange;
                    double        opa    = 0.233;
                    Coordonnees   coord1 = new Coordonnees(2.55, 2.669);
                    Coordonnees   coord2 = new Coordonnees(4.569578, 97.59);
                    Coordonnees   coord3 = new Coordonnees(588.2243, 6.20135);
                    Coordonnees[] tab    = new Coordonnees[3];
                    tab[0] = coord1;
                    tab[1] = coord2;
                    tab[2] = coord3;
                    Polygon poly2 = new Polygon(tab, rempl, cont, opa);
                    Console.WriteLine("Test du constructeur d'initialisation et de la surcharge de l'opérateur ToString()");
                    Console.WriteLine(poly2.ToString());
                    Console.WriteLine("Test de la fonction Draw()");
                    poly2.Draw();
                    break;
                }

                case 5:
                {
                    ///Test de l'interface IIsPointClose
                    ///Il faut le test avec POI, Polyline et Polygone
                    double precision, x, y;
                    bool   isClose;
                    Console.WriteLine("Test de l'interface IIsPointClose");
                    int choix2 = Choix("POI", "Polyline", "Polygon");
                    switch (choix2)
                    {
                    case 1:
                    {
                        Console.WriteLine("POI");
                        POI poi = new POI(2.035, 5.310);
                        Console.WriteLine(poi.ToString());
                        Console.WriteLine("Veuillez saisir des coordonnées : ");
                        Console.WriteLine("X = "); x = Convert.ToDouble(Console.ReadLine());
                        Console.WriteLine("Y = "); y = Convert.ToDouble(Console.ReadLine());
                        Coordonnees coordPerso = new Coordonnees(x, y);
                        Console.WriteLine(coordPerso.ToString());
                        Console.WriteLine("Veuillez saisir le taux de précision : "); precision = Convert.ToDouble(Console.ReadLine());
                        isClose = poi.IsPointClose(coordPerso.X, coordPerso.Y, precision);
                        Console.WriteLine("isClose = " + isClose);
                        break;
                    }

                    case 2:
                    {
                        Console.WriteLine("Polyline");
                        Coordonnees[] tab = new Coordonnees[3];
                        tab[0] = new Coordonnees(2.500, 2.500);
                        tab[1] = new Coordonnees(5.000, 5.000);
                        tab[2] = new Coordonnees(1.540, 1.540);
                        Color    white = Color.White;
                        Polyline poly  = new Polyline(5, white, tab);
                        Console.WriteLine(poly.ToString());
                        Console.WriteLine("Veuillez saisir des coordonnées : ");
                        Console.WriteLine("X = "); x = Convert.ToDouble(Console.ReadLine());
                        Console.WriteLine("Y = "); y = Convert.ToDouble(Console.ReadLine());
                        Coordonnees coordPerso = new Coordonnees(x, y);
                        Console.WriteLine(coordPerso.ToString());
                        Console.WriteLine("Veuillez saisir le taux de précision : "); precision = Convert.ToDouble(Console.ReadLine());
                        isClose = poly.IsPointClose(coordPerso.X, coordPerso.Y, precision);
                        Console.WriteLine("isClose = " + isClose);
                        break;
                    }

                    case 3:
                    {
                        Console.WriteLine("Polygone");

                        /*///Triangle Harcodé
                         * Coordonnees[] tab = new Coordonnees[3];
                         * tab[0] = new Coordonnees(1, 1);
                         * tab[1] = new Coordonnees(2, 3);
                         * tab[2] = new Coordonnees(3, 1);*/
                        /*///Carré négatif hardcodé*/
                        Coordonnees[] tab = new Coordonnees[4];
                        tab[0] = new Coordonnees(1, -1);
                        tab[1] = new Coordonnees(3, -1);
                        tab[2] = new Coordonnees(3, -3);
                        tab[3] = new Coordonnees(1, -3);
                        Color   inte = Color.White;
                        Color   cont = Color.Red;
                        Polygon poly = new Polygon(tab, inte, cont, 0.5);
                        Console.WriteLine(poly.ToString());
                        Console.WriteLine("Veuillez saisir des coordonnées : ");
                        Console.WriteLine("X = "); x = Convert.ToDouble(Console.ReadLine());
                        Console.WriteLine("Y = "); y = Convert.ToDouble(Console.ReadLine());
                        Coordonnees coordPerso = new Coordonnees(x, y);
                        Console.WriteLine(coordPerso.ToString());
                        isClose = poly.IsPointClose(coordPerso.X, coordPerso.Y, 0);
                        Console.WriteLine("isClose = " + isClose);
                        break;
                    }
                    }


                    break;
                }

                case 6:
                {
                    Console.WriteLine("Test de l'interface IIPointy");
                    int choix2 = Choix("Polyline", "Polygon", "Quitter");
                    switch (choix2)
                    {
                    case 1:
                    {
                        double x, y;
                        Console.WriteLine("---Polyline---");
                        Coordonnees[] tab = new Coordonnees[3];
                        tab[0] = new Coordonnees(0.5, 2.3597);
                        tab[1] = new Coordonnees(5.6, 2.3597);
                        tab[2] = new Coordonnees(3.5, 5);
                        Color    col  = Color.White;
                        Polyline poly = new Polyline(2, col, tab);
                        Console.WriteLine(poly);
                        Console.WriteLine("Nombre de points = " + poly.nbPoint);
                        Console.WriteLine("Veuillez saisir les coordonnées d'un nouveau points :");
                        Console.Write("X = "); x = Convert.ToInt32(Console.ReadLine()); Console.WriteLine();
                        Console.Write("Y = "); y = Convert.ToInt32(Console.ReadLine()); Console.WriteLine();
                        poly.AddCoord(new Coordonnees(x, y));
                        Console.WriteLine(poly);
                        Console.WriteLine("Nombre de points = " + poly.nbPoint);
                        break;
                    }

                    case 2:
                    {
                        Console.WriteLine("---Polygon---");
                        Coordonnees[] tab = new Coordonnees[3];
                        tab[0] = new Coordonnees(0.5, 2.3597);
                        tab[1] = new Coordonnees(5.6, 2.3597);
                        tab[2] = new Coordonnees(3.5, 5);
                        Color   col  = Color.White;
                        Color   col2 = Color.Red;
                        Polygon poly = new Polygon(tab, col, col2, 0.5);
                        Console.WriteLine("---Coordonnees---");
                        Console.WriteLine(poly);
                        Console.WriteLine("Nombre de points = " + poly.nbPoint);

                        break;
                    }
                    }
                    break;
                }

                case 7:
                {
                    Console.WriteLine("---Test de la liste générique CartoObj---");
                    Coordonnees[] cTab = new Coordonnees[4];
                    cTab[0] = new Coordonnees(1, 1);
                    cTab[1] = new Coordonnees(3, 1);
                    cTab[2] = new Coordonnees(3, 3);
                    cTab[3] = new Coordonnees(3, 1);

                    Coordonnees[] cTab2 = new Coordonnees[3];
                    cTab2[0] = new Coordonnees(1, 1);
                    cTab2[1] = new Coordonnees(4, 4);
                    cTab2[2] = new Coordonnees(7, 1);
                    ///J'implémente directement un objet de chaque sorte (hardcodé)
                    List <CartoObj> lCarto = new List <CartoObj>()
                    {
                        new Coordonnees(2.5013, 5.6978), new POI("POIDansListeGénérique",
                                                                 5.697236, 60.348), new Polygon(cTab, Color.Red, Color.Green, 0.5), new Polyline(2, Color.DarkGray, cTab2)
                    };
                    int choix2 = Choix("Afficher la liste complete", "Afficher les objets implémentant IPointy", "Afficher les objets n'implémentant pas IPointy", "Quitter");
                    switch (choix2)
                    {
                    case 1:
                    {
                        Console.WriteLine("---Liste complete---");
                        foreach (CartoObj co in lCarto)
                        {
                            Console.WriteLine(co);
                        }
                        break;
                    }

                    case 2:
                    {
                        Console.WriteLine("---Liste des objets implémentant IPointy---");
                        foreach (CartoObj co in lCarto)
                        {
                            if (co is IPointy)
                            {
                                Console.WriteLine(co);
                            }
                        }
                        break;
                    }

                    case 3:
                    {
                        Console.WriteLine("---Liste des objets n'implémentant pas IPointy---");
                        foreach (CartoObj co in lCarto)
                        {
                            if (!(co is IPointy))
                            {
                                Console.WriteLine(co);
                            }
                        }
                        break;
                    }

                    default:
                        break;
                    }
                    break;
                }

                case 8:
                {
                    Console.WriteLine("---Test de la liste générique Polyline---");
                    List <Polyline> lPoly = new List <Polyline>()
                    {
                        new Polyline(2, Color.White, new Coordonnees[3] {
                                new Coordonnees(2, 3), new Coordonnees(4, 5),
                                new Coordonnees(6, 7)
                            }),
                        new Polyline(1, Color.Red, new Coordonnees[3] {
                                new Coordonnees(0, 0), new Coordonnees(2, 10),
                                new Coordonnees(9, 4)
                            }),
                        new Polyline(3, Color.DarkBlue, new Coordonnees[3] {
                                new Coordonnees(0, 5), new Coordonnees(3, 10),
                                new Coordonnees(3, 5)
                            }),
                        new Polyline(5, Color.Cyan, new Coordonnees[3] {
                                new Coordonnees(5, 1), new Coordonnees(10, 5),
                                new Coordonnees(15, 8)
                            }),
                        new Polyline(9, Color.GreenYellow, new Coordonnees[3] {
                                new Coordonnees(10, 3), new Coordonnees(7, 9),
                                new Coordonnees(5, 1)
                            })
                    };
                    Console.WriteLine("---Affichage de la liste générique de polyline---");
                    foreach (Polyline pol in lPoly)
                    {
                        Console.WriteLine(pol);
                    }
                    ///Tri
                    lPoly.Sort();
                    Console.WriteLine("---Affichage de la liste générique de polyline trié sur leur longueur---");
                    foreach (Polyline pol in lPoly)
                    {
                        Console.WriteLine("Longueur : " + pol.LongueurPolyline().ToString());
                        Console.WriteLine(pol);
                    }
                    lPoly.Sort(new MyPolylineBoundingBoxComparer());
                    Console.WriteLine("---Affichage de la liste générique du polyline trié sur leur surface---");
                    foreach (Polyline po1 in lPoly)
                    {
                        Console.WriteLine("Surface : " + po1.CalculSurface());         ///Temporaire, juste pour vérifier la valeur des surfaces
                        Console.WriteLine(po1);
                    }
                    ConsoleKeyInfo cki;
                    do
                    {
                        Console.WriteLine("Souhaitez-vous tester la fonctionnalité de recherche de polyline ayant la même" +
                                          "surface qu'un polyline de référence (que vous saisirez-vous même) ? [y/n]");
                        cki = Console.ReadKey();
                    } while (cki.Key != ConsoleKey.Y && cki.Key != ConsoleKey.N);
                    if (cki.Key == ConsoleKey.Y)
                    {
                        Console.WriteLine();
                        ///Je ne fais saisir que 3 coordonnées
                        Coordonnees[] lCoordU = new Coordonnees[3];
                        for (int i = 0; i < 3; i++)
                        {
                            lCoordU[i] = new Coordonnees();
                            Console.WriteLine("Veuillez saisir la " + (i + 1) + "e coordonnées ");
                            Console.Write("X = "); lCoordU[i].X = Convert.ToDouble(Console.ReadLine());
                            Console.Write("Y = "); lCoordU[i].Y = Convert.ToDouble(Console.ReadLine());
                        }

                        Polyline        polyU       = new Polyline(10, Color.White, lCoordU);
                        List <Polyline> lPolyResult = lPoly.FindAll(polyU.SurfaceSame);
                        if (lPolyResult.Count > 0)
                        {
                            Console.WriteLine("Polyline possédant la même surface");
                            foreach (Polyline pol in lPolyResult)
                            {
                                Console.WriteLine(polyU.CalculSurface());
                                Console.WriteLine(pol);
                            }
                            Console.WriteLine("Rappel du polyline de référence");
                            Console.WriteLine(polyU.CalculSurface());
                            Console.WriteLine(polyU);
                        }
                        else
                        {
                            Console.WriteLine("Aucun polyline dans la liste ne possède la même surface que le polyline de référence");
                        }
                    }
                    do
                    {
                        Console.WriteLine("Souhaitez-vous tester la fonctionnalité de recherche de polyline " +
                                          "proche d'un point dont vous passez les paramètres ? [y/n]");
                        cki = Console.ReadKey();
                    } while (cki.Key != ConsoleKey.Y && cki.Key != ConsoleKey.N);
                    if (cki.Key == ConsoleKey.Y)
                    {
                        double prec;
                        ///Saisie des coordonnées par l'utilisateur
                        double x, y;
                        Console.Write("X = "); x            = Convert.ToDouble(Console.ReadLine()); Console.WriteLine();
                        Console.Write("Y = "); y            = Convert.ToDouble(Console.ReadLine()); Console.WriteLine();
                        Console.Write("Precision = "); prec = Convert.ToDouble(Console.ReadLine()); Console.WriteLine();
                        ///Recherche d'une certaines proximités avec un des polylines composant la liste
                        List <Polyline> lPolyProche = new List <Polyline>();
                        foreach (Polyline pol in lPoly)
                        {
                            if (pol.IsPointClose(x, y, prec))
                            {
                                lPolyProche.Add(pol);
                            }
                        }
                        if (lPolyProche.Count > 0)
                        {
                            foreach (Polyline pol in lPolyProche)
                            {
                                Console.WriteLine(pol);
                            }
                        }
                        else
                        {
                            Console.WriteLine("Aucun polyline présent dans la liste n'est proche du point rentrée en paramètre");
                        }

                        Console.WriteLine("Rappel des coordonnées : (" + x + "," + y + ")");
                    }


                    break;
                }

                case 9:
                {
                    ///Trier liste d'objet CartObj
                    Console.WriteLine("---Trier une liste d'objet CartObj---");
                    ///Ici les polyline sont un peu hardcodé n'importe comment, je cherche juste a créer plusieurs polyline/polygone
                    ///ayant un nombre de coordonnées différentes afin de tester le tri via la fonction Compare
                    List <CartoObj> lCarto = new List <CartoObj>()
                    {
                        new Polyline(2, Color.White, new Coordonnees[4] {
                                new Coordonnees(2, 3), new Coordonnees(4, 5),
                                new Coordonnees(6, 7), new Coordonnees(0, 5)
                            }),
                        new Polyline(1, Color.Red, new Coordonnees[3] {
                                new Coordonnees(0, 0), new Coordonnees(2, 10),
                                new Coordonnees(9, 4)
                            }),
                        new Polyline(3, Color.DarkBlue, new Coordonnees[6] {
                                new Coordonnees(0, 5), new Coordonnees(3, 10),
                                new Coordonnees(3, 5), new Coordonnees(5, 10), new Coordonnees(15, 20), new Coordonnees(0, 0)
                            }),
                        new Polyline(5, Color.Cyan, new Coordonnees[3] {
                                new Coordonnees(5, 1), new Coordonnees(10, 5),
                                new Coordonnees(15, 8)
                            }),
                        new Polyline(9, Color.GreenYellow, new Coordonnees[3] {
                                new Coordonnees(10, 3), new Coordonnees(7, 9),
                                new Coordonnees(5, 1)
                            }),
                        new Polygon(new Coordonnees[5] {
                                new Coordonnees(0, 0), new Coordonnees(0, 3), new Coordonnees(3, 3), new Coordonnees(2, 5), new Coordonnees(3, 0)
                            }, Color.Red, Color.Black, 1),
                        new Polygon(new Coordonnees[3] {
                                new Coordonnees(0, 0), new Coordonnees(0, 3), new Coordonnees(3, 3)
                            }, Color.Red, Color.Black, 1),
                        new Polygon(new Coordonnees[4] {
                                new Coordonnees(0, 0), new Coordonnees(0, 3), new Coordonnees(3, 3), new Coordonnees(3, 0)
                            }, Color.Red, Color.Black, 1),
                    };
                    Console.WriteLine("Affichage de la liste non trié");
                    foreach (CartoObj co in lCarto)
                    {
                        Console.WriteLine(co.ToString());
                    }
                    Console.WriteLine("Trie de la liste CartoObj");
                    lCarto.Sort(new CartoObjComparer());
                    Console.WriteLine("Affichage de la liste trié");
                    foreach (CartoObj co in lCarto)
                    {
                        Console.WriteLine(co.ToString());
                    }

                    break;
                }

                case 10:
                {
                    Console.WriteLine("Sauvegarde des objets implémentant l'interface ICartoObj");
                    ObservableCollection <ICartoObj> cartoColl = new ObservableCollection <ICartoObj>()
                    {
                        new Polyline(2, Color.White, new Coordonnees[4] {
                                new Coordonnees(2, 3), new Coordonnees(4, 5),
                                new Coordonnees(6, 7), new Coordonnees(0, 5)
                            }),
                        new Polyline(1, Color.Red, new Coordonnees[3] {
                                new Coordonnees(0, 0), new Coordonnees(2, 10),
                                new Coordonnees(9, 4)
                            }),
                        new Polyline(3, Color.DarkBlue, new Coordonnees[6] {
                                new Coordonnees(0, 5), new Coordonnees(3, 10),
                                new Coordonnees(3, 5), new Coordonnees(5, 10), new Coordonnees(15, 20), new Coordonnees(0, 0)
                            }),
                        new Polyline(5, Color.Cyan, new Coordonnees[3] {
                                new Coordonnees(5, 1), new Coordonnees(10, 5),
                                new Coordonnees(15, 8)
                            }),
                        new Polyline(9, Color.GreenYellow, new Coordonnees[3] {
                                new Coordonnees(10, 3), new Coordonnees(7, 9),
                                new Coordonnees(5, 1)
                            }),
                        new Polygon(new Coordonnees[5] {
                                new Coordonnees(0, 0), new Coordonnees(0, 3), new Coordonnees(3, 3), new Coordonnees(2, 5), new Coordonnees(3, 0)
                            }, Color.Red, Color.Black, 1),
                        new Polygon(new Coordonnees[3] {
                                new Coordonnees(0, 0), new Coordonnees(0, 3), new Coordonnees(3, 3)
                            }, Color.Red, Color.Black, 1),
                        new Polygon(new Coordonnees[4] {
                                new Coordonnees(0, 0), new Coordonnees(0, 3), new Coordonnees(3, 3), new Coordonnees(3, 0)
                            }, Color.Red, Color.Black, 1),
                        new POI("TestPOI", 1.2345, 50.2),
                        new POI("POI2", 50.34, -20.3)
                    };
                    MyPersonalMapData mP        = new MyPersonalMapData("Test", "TestP", "TestEm", cartoColl);
                    IFormatter        formatter = new BinaryFormatter();
                    Stream            fStream   = new FileStream("C:/Users/Eric/Desktop/Bloc 2 offline/C#/Ecole/Projet2/LaboC#2.1/fichierTest.csv", FileMode.Create, FileAccess.Write);

                    /*                           foreach (ICartoObj icarto in lCarto)
                     *                         {
                     *                             formatter.Serialize(fStream,icarto);
                     *                         }*/
                    formatter.Serialize(fStream, cartoColl);
                    fStream.Close();
                    Console.WriteLine("Fichier sauvegardé");
                    Console.WriteLine("-------------------Deserialization---------------------");
                    Stream stream = new FileStream("C:/Users/Eric/Desktop/Bloc 2 offline/C#/Ecole/Projet2/LaboC#2.1/fichierTest.csv", FileMode.Open, FileAccess.Read);

                    /* List<ICartoObj> iCartoObjRead = new List<ICartoObj>();
                     * while (stream.CanRead)
                     * {
                     *   iCartoObjRead.Add((ICartoObj)formatter.Deserialize(stream));
                     * }*/
                    MyPersonalMapData readMyPersonalMapData        = new MyPersonalMapData();
                    ObservableCollection <ICartoObj> iCartoObjRead = (ObservableCollection <ICartoObj>)formatter.Deserialize(stream);
                    stream.Close();
                    Console.WriteLine("------------Ajout dans la liste----------");
                    foreach (ICartoObj iCarto in iCartoObjRead)
                    {
                        readMyPersonalMapData.AddCartObj(iCarto);
                    }
                    Console.WriteLine("--------------Lecture----------");

                    foreach (ICartoObj iCarto in readMyPersonalMapData.CartoCollection)
                    {
                        Console.WriteLine(iCarto);
                    }
                    break;
                }

                case 11:
                {
                    Stream            stream                       = new FileStream("C:/Users/Eric/Desktop/Bloc 2 offline/C#/Ecole/Projet2/LaboC#2.1/fichierTest.csv", FileMode.Open, FileAccess.Read);
                    IFormatter        formatter                    = new BinaryFormatter();
                    MyPersonalMapData readMyPersonalMapData        = new MyPersonalMapData();
                    ObservableCollection <ICartoObj> iCartoObjRead = (ObservableCollection <ICartoObj>)formatter.Deserialize(stream);
                    stream.Close();
                    Console.WriteLine("------------Ajout dans la liste----------");
                    foreach (ICartoObj iCarto in iCartoObjRead)
                    {
                        readMyPersonalMapData.AddCartObj(iCarto);
                    }
                    Console.WriteLine("--------------Lecture----------");

                    foreach (ICartoObj iCarto in readMyPersonalMapData.CartoCollection)
                    {
                        Console.WriteLine(iCarto);
                    }
                    break;
                }

                default:
                    fin = true;
                    break;
                }
            }
        }