//штуки для разрабов /// <summary> /// Рисует все магазины на карте этажа /// </summary> /// <param name="graph"></param> /// <param name="DataOfBot"></param> /// <param name="bitmap"></param> public void DrawAllShops(MapHelper.Graph graph, CachedDataModel DataOfBot) { //TODO Что это! Почему vyborka = null //var vyborka = DataOfBot.Organizations.Where(x => x.Floor != null && x.Floor.Number == graph.Layers[0].LayerID).ToList(); //Закоментил потому что Null // List<Organization> vyborka = null; // using (var gr = Graphics.FromImage(Bmp)) // { // gr.SmoothingMode = SmoothingMode.HighQuality; // gr.CompositingQuality = CompositingQuality.HighQuality; // gr.InterpolationMode = InterpolationMode.HighQualityBicubic; // gr.PixelOffsetMode = PixelOffsetMode.HighQuality; // int i = 0; // foreach (var org in vyborka) // { // if (org.Longitude != null && org.Latitude != null) // { // var temp = new System.Windows.Point((double)org.Longitude, (double)org.Latitude); // // var vertex = graph.Layers[0].GetVertex(temp); // if (vertex == null) // { // int numofsegments = graph.Layers[0].Segments.Count; // graph.Layers[0].AddVertexWithShortestSegment(temp); // if (numofsegments + 1 == graph.Layers[0].Segments.Count) // { // var Addedsegment = graph.Layers[0].Segments[graph.Layers[0].Segments.Count - 1]; // gr.DrawLine(new Pen(Color.Green, 10 / ZoomOfPicture), // (float)(Addedsegment.Vertex0.Point.X) / ZoomOfPicture + I, // (float)(Addedsegment.Vertex0.Point.Y) / ZoomOfPicture + J, // (float)(Addedsegment.Vertex1.Point.X) / ZoomOfPicture + I, // (float)(Addedsegment.Vertex1.Point.Y) / ZoomOfPicture + J); // // graph.Layers[0].Segments.RemoveAt(graph.Layers[0].Segments.Count - 1); // } // else // { // var Addedsegment = graph.Layers[0].Segments[graph.Layers[0].Segments.Count - 3]; // // gr.DrawLine(new Pen(Color.Green, 10 / ZoomOfPicture), // (float)(Addedsegment.Vertex0.Point.X) / ZoomOfPicture + I, // (float)(Addedsegment.Vertex0.Point.Y) / ZoomOfPicture + J, // (float)(Addedsegment.Vertex1.Point.X) / ZoomOfPicture + I, // (float)(Addedsegment.Vertex1.Point.Y) / ZoomOfPicture + J); // // graph.Layers[0].Segments.RemoveAt(graph.Layers[0].Segments.Count - 3); // } // i++; // } // DrawLocation((float)org.Longitude, (float)org.Latitude, "", Properties.Resources.Shop); // } // } // } }
/// <summary> /// Возвражает граф со всеми вершинами на карте этажа /// </summary> /// <param name="DestOfFirstSector"></param> /// <param name="DestOfSecondSector"></param> /// <param name="A"></param> /// <param name="B"></param> /// <returns></returns> public MapHelper.Graph GetGraph(CachedDataModel DataOfBot) { var graph = new MapHelper.Graph(); #region Строит Layers foreach (Floor f in DataOfBot.Floors.OrderBy(x => x.Number)) { PathPoint[][] Lines = null; if (f.Paths[0] == '<') // xml быть не должно, поэтому я решил сильно не запариваться по этому поводу { if (f.Number != 2) { var pathHelper = new PathParserHelper(); Lines = pathHelper.Do(f.Paths); } else { break; // супер костыль. Дело в том, что в базе Mall_new у Уфы 2 этажа с разными xml-ками. (причем 2ой этаж пуст) //Я понимаю, что мне не надо писать лишний парсер, тем более, что 1 лишний я уже написал)) А удалить этаж из базы я не рискнул, мало ли он кому нужен //поэтому этот код работает только для Уфы. Надо будет обсудить этот момент и возможно убрать 2ой этаж из базы. А пока ((((временно)))) так } } else { Lines = f.PathsFixed; } var layer = new MapHelper.Layer(f.Number); for (int i = 0; i < Lines.Length; i++) { var v1 = layer.AddVertex(new System.Windows.Point(Lines[i][0].X, Lines[i][0].Y)); var v2 = layer.AddVertex(new System.Windows.Point(Lines[i][1].X, Lines[i][1].Y)); layer.AddSegment(v1, v2); } graph.AddLayer(layer); } #endregion // Поиск переходов между этажами и добавление их в граф var FloorIDs = DataOfBot.Floors.Select(x => x.FloorID).ToList(); foreach (var link in DataOfBot.MapObjectLinks) { if (link.MapObjectFrom != null && link.MapObjectTo != null && link.MapObjectFrom.FloorID != null && link.MapObjectTo.FloorID != null && FloorIDs.Contains(link.MapObjectFrom.FloorID) && FloorIDs.Contains(link.MapObjectTo.FloorID)) { var layerTo = graph.Layers.FirstOrDefault(e => e.LayerID == DataOfBot.Floors.FirstOrDefault(y => y.FloorID == link.MapObjectTo.FloorID).Number); var layerFrom = graph.Layers.FirstOrDefault(e => e.LayerID == DataOfBot.Floors.FirstOrDefault(y => y.FloorID == link.MapObjectFrom.FloorID).Number); var temp = new System.Windows.Point(link.MapObjectFrom.LongitudeFixed, link.MapObjectFrom.LatitudeFixed); var vertexFrom = layerFrom.GetVertex(temp) ?? layerFrom.AddVertexWithShortestSegment(temp); temp = new System.Windows.Point(link.MapObjectTo.LongitudeFixed, link.MapObjectTo.LatitudeFixed); var vertexTo = layerTo.GetVertex(temp) ?? layerTo.AddVertexWithShortestSegment(temp); if (vertexFrom == null || vertexTo == null) { Logging.Logger.Warn("Change Floor Vertex has no beed added!"); } else { if (DataOfBot.GetOrganization(link.MapObjectFrom)?.Name == "Лифт" && DataOfBot.GetOrganization(link.MapObjectTo)?.Name == "Лифт") { vertexTo.IsLift = true; vertexFrom.IsLift = true; } layerFrom.AddSegment(vertexFrom, vertexTo); } } } return(graph); }