public SchemePlanPage(Room room) : this() // открытие схемы с фокусом на помещение
        {
            FloorPicker.ItemsSource  = FloorData.Floors;
            FloorData.CurrentFloor   = room.Floor;
            FloorPicker.SelectedItem = FloorData.CurrentFloor;

            // переместить матрицу на координаты помещения
            PointM point  = PointData.Find(room);
            float  height = (float)DeviceDisplay.MainDisplayInfo.Height / 4;
            float  width  = (float)DeviceDisplay.MainDisplayInfo.Width / 2;

            bitmap.Matrix = SKMatrix.MakeTranslation((float)(-point.X + width),
                                                     (float)(-point.Y + height));
        }
        private void Button_Clicked(object sender, EventArgs e)
        {
            taped = true;
            if (RoomData.Rooms.Count == 0)
            {
                DependencyService.Get <IToast>().Show("Помещения не загружены"); return;
            }

            if (searchBar1.Text == null || searchBar1.Text == "")
            {
                DependencyService.Get <IToast>().Show("Начало маршрута не задано"); return;
            }
            if (Way.Begin == null)
            {
                DependencyService.Get <IToast>().Show("Начало маршрута неоднозначно"); return;
            }

            if (searchBar2.Text == null || searchBar2.Text == "")
            {
                DependencyService.Get <IToast>().Show("Конец маршрута не задан");   return;
            }
            if (Way.End == null)
            {
                DependencyService.Get <IToast>().Show("Конец маршрута неоднозначен");  return;
            }

            if (Way.End.Equals(Way.Begin))
            {
                DependencyService.Get <IToast>().Show("Вы находитесь в месте назначения"); return;
            }

            // если все окей - производить поиск
            List <PointM> path;

            try
            {
                path = new Dijkstra().FindShortestPath(PointData.Find(Way.Begin),
                                                       PointData.Find(Way.End));
            }
            catch (NullReferenceException ex)
            {
                DependencyService.Get <IToast>().Show("Помещения не связаны");
                return;
            }

            // преобразовать список точек в список ребер маршрута
            EdgeData.ConvertPathToWay(path);

            // установить длину маршрута
            double way = 0;

            foreach (var w in EdgeData.Ways)
            {
                way += w.Weight;
            }
            WayLarge.Text          = "Длина пути " + way + " метов";
            EndWayButton.IsVisible = true;

            taped = false;
            DependencyService.Get <IToast>().Show("Маршрут установлен");
        }
Exemple #3
0
 // Поиск кратчайшего пути по названиям вершин
 public List <PointM> FindShortestPath(int startName, int finishName)
 {
     return(FindShortestPath(PointData.Find(startName), PointData.Find(finishName)));
 }