Exemple #1
0
        //штуки для разрабов
        /// <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);
//                    }
//                }
//            }
        }
Exemple #2
0
        /// <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);
        }