Пример #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.");
                    }
                }
            }
        }
Пример #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);
            //}
        }