Ejemplo n.º 1
0
        /// <summary>
        /// Obsluhuje udalost kliku na bod v mape (zastavka, odpocivadlo nebo krizovatka).
        /// Vyuziva se na urceni pocatecniho a koncoveho vrcholu pro vyhledavani nejkratsi trasy v mape
        /// nebo pro pridani nove cesty do mapy.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        void OnEllipseMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            var    dot         = (Ellipse)sender;
            string klicVrcholu = dot.Name.Replace("_", " ");

            DataVrcholu hledanyVrcholvMape = mapa.NajdiVrcholSemA(klicVrcholu);

            if (hledanyVrcholvMape != null)
            {
                if (urcenPocatecniBod)
                {
                    pocatek           = hledanyVrcholvMape;
                    urcenPocatecniBod = false;
                    urcenKonecnyBod   = true;
                    //sdelim ye obsah v Label1 je typu textblock a tim dosahnu zalamovani textu  vLabel1
                    NastavTextLabelu("Pocateční bod je " + pocatek.ToString() + ".\n Vyber cíl.");
                }
                else if (urcenKonecnyBod)
                {
                    konec           = hledanyVrcholvMape;
                    urcenKonecnyBod = false;
                    NastavTextLabelu("Pocatecni bod je: " + pocatek.ToString() + ".\n"
                                     + "Konečný bod je: " + konec.ToString() + ". Hledám nejkratší cestu...");

                    Cesta cesta = mapa.NajdiCestu(pocatek.NazevVrcholu, konec.NazevVrcholu);
                    if (cesta == null)
                    {
                        NastavTextLabelu("Cestu se nepodařilo nalézt.");
                        return;
                    }
                    string vypisCesty = "Počáteční bod je " + pocatek.ToString() + ". \n"
                                        + "Konecny bod je " + konec.ToString() + ". \n";
                    foreach (DataHran h in cesta.NavstiveneHrany)
                    {
                        h.OznaceniHrany = true;
                        vypisCesty     += "(" + h.PocatekHrany + ", " + h.KonecHrany + "), ";
                    }
                    VykresliMapu();
                    NastavTextLabelu(vypisCesty);
                }
                //  pro ulozeni pocatecniho vrcholu cesty, vytvoreni a vykresleni hrany
                else if (stisknutoVytvorCestu)
                {
                    if (pocatek == null)
                    {
                        pocatek = hledanyVrcholvMape;
                        NastavTextLabelu("Vyberte konečný bod.");
                    }
                    else
                    {
                        konec = hledanyVrcholvMape;
                        DataHran novaHrana = mapa.VytvorHranu(pocatek.NazevVrcholu, konec.NazevVrcholu, (short)SpocitejDelkuHrany(pocatek, konec));
                        KresliSilnici(novaHrana);
                        stisknutoVytvorCestu = false;
                        NastavTextLabelu("Cesta byla vytvořena.");
                    }
                }
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Vykresluje 1 cestu na mapě.
        /// </summary>
        /// <param name="lesniStezka">nese <c>DataHran<c> potřebné k vytvoření hrany</param>
        private void KresliSilnici(DataHran lesniStezka)
        {
            //default je hyr
            Brush barvaStezky = Brushes.Beige;

            if (lesniStezka.OznaceniHrany)
            {
                barvaStezky = Brushes.Black;
            }
            else if (!lesniStezka.JeFunkcniCesta)
            {
                barvaStezky = Brushes.DarkGray;
            }

            DataVrcholu pocatekHrany = mapa.NajdiVrcholSemA(lesniStezka.PocatekHrany);
            DataVrcholu konecHrany   = mapa.NajdiVrcholSemA(lesniStezka.KonecHrany);

            Line myline = new Line
            {
                // Name = String.Format("{0}__{1}", lesniStezka.PocatekHrany, lesniStezka.KonecHrany),
                Stroke          = barvaStezky,
                StrokeThickness = 10,
                X1 = pocatekHrany.XSouradniceVrcholu + 4,
                Y1 = pocatekHrany.YSouradniceVrcholu + 4,
                X2 = konecHrany.XSouradniceVrcholu + 4,
                Y2 = konecHrany.YSouradniceVrcholu + 4
            };

            myline.Opacity              = 0.9;
            myline.MouseLeftButtonDown += OnLineMouseLeftButtonDown;
            canvasElem.Children.Add(myline);

            float     xLabel = pocatekHrany.XSouradniceVrcholu + (konecHrany.XSouradniceVrcholu - pocatekHrany.XSouradniceVrcholu) * 1 / 2;
            float     yLabel = pocatekHrany.YSouradniceVrcholu + (konecHrany.YSouradniceVrcholu - pocatekHrany.YSouradniceVrcholu) * 1 / 2;
            TextBlock TB     = new TextBlock();

            TB.Text = $"{lesniStezka.DelkaHrany} min";
            BitmapCacheBrush bcb = new BitmapCacheBrush(TB);

            TB.Margin   = new Thickness(xLabel - 10, yLabel + 5, 0, 0);
            TB.FontSize = 10;
            Canvas.SetZIndex(TB, 20);
            canvasElem.Children.Add(TB);

            //if (lesniStezka.JeFunkcniCesta == false)
            //{
            //    Ellipse currentDot = new Ellipse();
            //    currentDot.Stroke = new SolidColorBrush(Colors.Red);
            //    currentDot.StrokeThickness = 1;
            //    Canvas.SetZIndex(currentDot, 10);
            //    currentDot.Height = 10;
            //    currentDot.Width = 10;
            //    currentDot.Fill = new SolidColorBrush(Colors.Red);
            //    currentDot.Margin = new Thickness(xLabel, yLabel, 0, 0);
            //    canvasElem.Children.Add(currentDot);
            //}
        }
Ejemplo n.º 3
0
 /// <summary>
 /// Zahajuje přidávání nové cesty
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 private void PridejCestuButton_Click(object sender, RoutedEventArgs e)
 {
     ResetujAkce();
     // nastaveni pomocne promene na true v if else v metode OnEllipseMouseLeftButtonDow
     stisknutoVytvorCestu = true;
     pocatek = null;
     konec   = null;
     NastavTextLabelu("Vyberte počáteční bod.");
     // ((TextBlock)label1.Content).Text = "Vyberte počáteční bod.";
 }
Ejemplo n.º 4
0
 /// <summary>
 /// Vyresetuje uzivatelske rozhrani do zakladniho stavu.
 /// </summary>
 private void ResetujAkce()
 {
     SmazNalezenouCestu();
     SkrytPrvkyVytvorBod();
     urcenPocatecniBod     = false;
     urcenKonecnyBod       = false;
     stisknutoVytvorVrchol = false;
     stisknutoVytvorCestu  = false;
     pocatek = null;
     konec   = null;
 }
Ejemplo n.º 5
0
        /// <summary>
        /// Vypočítá vzdálenost bodů dvou vrcholů.
        /// </summary>
        /// <param name="zacatekHrany">Počátecní bod hrany</param>
        /// <param name="konecHrany">Konečný bod hrany</param>
        /// <returns>Délku hrany ve formátu double.</returns>
        private double SpocitejDelkuHrany(DataVrcholu zacatekHrany, DataVrcholu konecHrany)
        {
            double delkaHrany = 0;
            double xa         = zacatekHrany.XSouradniceVrcholu;
            double ya         = zacatekHrany.YSouradniceVrcholu;
            double xb         = konecHrany.XSouradniceVrcholu;
            double yb         = konecHrany.YSouradniceVrcholu;

            //(int)Math.Round(Sqrt)
            delkaHrany = Math.Abs(Math.Sqrt(((xb - xa) * (xb - xa)) + ((yb - ya) * (yb - ya))));
            return(delkaHrany);
        }
Ejemplo n.º 6
0
        private void OdeberKlicButton_Click(object sender, RoutedEventArgs e)
        {
            string klic = NazevKliceTextBox.Text;

            try
            {
                DataVrcholu odebiranyVrchol = mapa.OdeberVrcholSemC(klic);
                NastavTextLabelu("Byl odebrán klíč: " + odebiranyVrchol.NazevVrcholu);
            }
            catch (Exception ex)
            {
                NastavTextLabelu(ex.Message);
            }
        }
Ejemplo n.º 7
0
        private void ZobrazVysledekHledanidoLabelu1(DataVrcholu dv)
        {
            int        pocetBloku  = mapa.VratPocetBlokuVSouboru();
            List <int> prosleBloky = mapa.VratPocetProjitychBloku();
            string     zprava      = "Počet navštívených bloků: " + prosleBloky.Count + "\n Počet bloků v souboru:" + pocetBloku;

            zprava += "\n Navštívené bloky: ";
            foreach (int b in prosleBloky)
            {
                zprava += b + ", ";
            }
            zprava += "\n Nalezen klíč: " + dv.NazevVrcholu;
            NastavTextLabelu(zprava);
        }
Ejemplo n.º 8
0
        private void HledejKlicInterpolacne_Click(object sender, RoutedEventArgs e)
        {
            string klic = NazevKliceTextBox.Text;

            try
            {
                DataVrcholu hledanyVrchol = mapa.NajdiVrcholSemC(klic, ZpusobVyhledvani.Interpolacni);
                ZobrazVysledekHledanidoLabelu1(hledanyVrchol);
            }
            catch (Exception ex)
            {
                NastavTextLabelu(ex.Message);
            }
        }
Ejemplo n.º 9
0
 /// <summary>
 /// Obsluhuje tlačítko ANO. V případě zadání všech potřebných parametrů vykreslí daný bod a oznámí hototvo.
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 private void ANO_Button_Click(object sender, RoutedEventArgs e)
 {
     try
     {
         TypyVrcholu typVrcholu    = (TypyVrcholu)TypVrcholu_comboBox.SelectedIndex;
         string      nazevVrcholu  = nazevVrcholuTextBox.Text;
         DataVrcholu pridanyVrchol = mapa.VlozVrchol((int)gBod.X, (int)gBod.Y, typVrcholu, nazevVrcholu);
         VykresliObec(pridanyVrchol);
         SkrytPrvkyVytvorBod();
         NastavTextLabelu("Hotovo, vypadá to, že máme nový bod.");
     }
     catch (Exception ex)
     {
         NastavTextLabelu("Nastala chyba: " + ex.Message);
     }
 }
Ejemplo n.º 10
0
        /// <summary>
        /// Vykresluje vrcholy/body/mista na mapě.
        /// </summary>
        /// <param name="vrchol"></param>
        private void VykresliObec(DataVrcholu vrchol)
        {
            Ellipse teckaNaVrcholu = new Ellipse();

            teckaNaVrcholu.Name = vrchol.NazevVrcholu.Replace(" ", "_");
            if (vrchol.TypVrcholu == TypyVrcholu.odpocivadlo)
            {
                teckaNaVrcholu.Stroke          = new SolidColorBrush(Colors.DarkBlue);
                teckaNaVrcholu.StrokeThickness = 10;
                teckaNaVrcholu.Height          = 15;
                teckaNaVrcholu.Width           = 20;
            }
            else if (vrchol.TypVrcholu == TypyVrcholu.zastavka)
            {
                teckaNaVrcholu.Stroke          = new SolidColorBrush(Colors.Cyan);
                teckaNaVrcholu.StrokeThickness = 10;
                teckaNaVrcholu.Height          = 12;
                teckaNaVrcholu.Width           = 12;
            }
            else if (vrchol.TypVrcholu == TypyVrcholu.None)
            {
                teckaNaVrcholu.Stroke          = new SolidColorBrush(Colors.Brown);
                teckaNaVrcholu.StrokeThickness = 8;
                teckaNaVrcholu.Height          = 10;
                teckaNaVrcholu.Width           = 10;
            }
            Canvas.SetZIndex(teckaNaVrcholu, 3);

            teckaNaVrcholu.Margin = new Thickness(vrchol.XSouradniceVrcholu, vrchol.YSouradniceVrcholu, 0, 0);

            //DELEGAT tu se zaregistruje funkce OnElipse.. na jako event handler na akci MouseLeft.. - DELEGAT
            teckaNaVrcholu.MouseLeftButtonDown += OnEllipseMouseLeftButtonDown;

            TextBlock TB = new TextBlock();

            TB.Text = vrchol.NazevVrcholu;
            BitmapCacheBrush bcb = new BitmapCacheBrush(TB);

            TB.Margin   = new Thickness(vrchol.XSouradniceVrcholu - 15, vrchol.YSouradniceVrcholu + 10, 0, 0);
            TB.FontSize = 10;
            Canvas.SetZIndex(TB, 20);

            canvasElem.Children.Add(TB);
            canvasElem.Children.Add(teckaNaVrcholu);
        }
Ejemplo n.º 11
0
        void OnLineMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            var line = (Line)sender;

            string[] kliceVrcholu = line.Name.Split("|");
            float    xZ           = (float)((line.X1 - 4));
            float    yZ           = (float)((line.Y1 - 4));
            float    xDo          = (float)((line.X2 - 4));
            float    yDo          = (float)((line.Y2 - 4));

            // vrchol Z jako zacatek
            DataVrcholu vrhcholZ = mapa.NajdiVrcholSemA(kliceVrcholu[0]);

            if (vrhcholZ != null)
            {
                // DataHran silnice = (DataHran)(from item in vrhcholZ.ListHran where item.KonecHrany.XSouradniceVrcholu.Equals(xDo) && item.KonecHrany.YSouradniceVrcholu.Equals(yDo) select item).First();
            }
        }