/// <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."); } } } }
/// <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); //} }