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("Маршрут установлен"); }
// Поиск кратчайшего пути по названиям вершин public List <PointM> FindShortestPath(int startName, int finishName) { return(FindShortestPath(PointData.Find(startName), PointData.Find(finishName))); }