Beispiel #1
0
 private void pnlMap_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
 {
     if (e.Source is VertexVisual)
     {
         VertexVisual vv = e.Source as VertexVisual;
         _isDown           = true;
         SourceElement     = vv;
         _startPoint       = e.GetPosition(pnlMap);//new Point(e.GetPosition(pnlMap).X / Zoom, e.GetPosition(pnlMap).Y / Zoom);
         _positionOnSource = new Point(_startPoint.X - vv.Node.LocationPoint.X * Zoom, _startPoint.Y - vv.Node.LocationPoint.Y * Zoom);
         pnlMap.CaptureMouse();
         e.Handled = true;
     }
     else if (e.Source is EdgeVisual)
     {
         EdgeVisual ev = e.Source as EdgeVisual;
         _isDown       = true;
         SourceElement = ev;
         e.Handled     = true;
     }
     else if (e.Source is Ellipse)
     {
         _isDown       = true;
         SourceElement = e.Source;
         e.Handled     = true;
     }
 }
        public VehicleWayPointsConfigWindow(Graph<WayPoint, PathFigure> roadGraph)
        {
            VertexVisualsList = new List<VertexVisual>();
            EdgeVisualsList = new List<EdgeVisual>();
            RoadGraph = roadGraph;
            InitializeComponent();

            scena = (Application.Current.MainWindow as MainWindow).Scena;
            Zoom = 4.0;
            PaintMap();
            lblMapSize.Content = string.Format("{0} x {1}", Math.Round(pnlMap.Width / Zoom), Math.Round(pnlMap.Height / Zoom));

            foreach (var edge in RoadGraph.Edges)
            {
                EdgeVisual ev = new EdgeVisual(edge.Data)
                {
                    NodeFrom = edge.Start,
                    NodeTo = edge.End,
                    Zoom = Zoom
                };
                EdgeVisualsList.Add(ev);
                pnlMap.Children.Add(ev);
            }

            foreach (var node in RoadGraph.Nodes)
            {
                int in_count = 0, out_count = 0;
                foreach (var edge in RoadGraph.GetEdgesTo(node))
                {
                    in_count++;
                }
                foreach (var edge in RoadGraph.GetEdgesFrom(node))
                {
                    out_count++;
                }

                VertexVisual vv = new VertexVisual(node)
                {
                    Number = (VertexVisualsList.Count + 1).ToString(),
                    InCount = in_count,
                    OutCount = out_count,
                    Zoom = Zoom
                };
                vv.Node.Number = int.Parse(vv.Number);
                if (in_count != 0)
                {
                    cbTo.Items.Add(vv.Node);
                }
                if (out_count != 0)
                {
                    cbFrom.Items.Add(vv.Node);
                }
                VertexVisualsList.Add(vv);
                pnlMap.Children.Add(vv);
            }
        }
Beispiel #3
0
        public VehicleWayPointsConfigWindow(Graph <WayPoint, PathFigure> roadGraph)
        {
            VertexVisualsList = new List <VertexVisual>();
            EdgeVisualsList   = new List <EdgeVisual>();
            RoadGraph         = roadGraph;
            InitializeComponent();

            scena = (Application.Current.MainWindow as MainWindow).Scena;
            Zoom  = 4.0;
            PaintMap();
            lblMapSize.Content = string.Format("{0} x {1}", Math.Round(pnlMap.Width / Zoom), Math.Round(pnlMap.Height / Zoom));

            foreach (var edge in RoadGraph.Edges)
            {
                EdgeVisual ev = new EdgeVisual(edge.Data)
                {
                    NodeFrom = edge.Start,
                    NodeTo   = edge.End,
                    Zoom     = Zoom
                };
                EdgeVisualsList.Add(ev);
                pnlMap.Children.Add(ev);
            }

            foreach (var node in RoadGraph.Nodes)
            {
                int in_count = 0, out_count = 0;
                foreach (var edge in RoadGraph.GetEdgesTo(node))
                {
                    in_count++;
                }
                foreach (var edge in RoadGraph.GetEdgesFrom(node))
                {
                    out_count++;
                }

                VertexVisual vv = new VertexVisual(node)
                {
                    Number   = (VertexVisualsList.Count + 1).ToString(),
                    InCount  = in_count,
                    OutCount = out_count,
                    Zoom     = Zoom
                };
                vv.Node.Number = int.Parse(vv.Number);
                if (in_count != 0)
                {
                    cbTo.Items.Add(vv.Node);
                }
                if (out_count != 0)
                {
                    cbFrom.Items.Add(vv.Node);
                }
                VertexVisualsList.Add(vv);
                pnlMap.Children.Add(vv);
            }
        }
Beispiel #4
0
        private void btnAddEdge_Click(object sender, RoutedEventArgs e)
        {
            int from, to;

            if (!int.TryParse(tbStart.Text, out from) || !int.TryParse(tbFinish.Text, out to))
            {
                lblErrorInfo.Content = "Укажите номер вершины";
                return;
            }
            try
            {
                WayPoint NodeFrom, NodeTo;
                NodeFrom = VertexVisualsList[VertexVisualsList.FindIndex(delegate(VertexVisual vv){ return(int.Parse(vv.Number) == from); })].Node;
                NodeTo   = VertexVisualsList[VertexVisualsList.FindIndex(delegate(VertexVisual vv){ return(int.Parse(vv.Number) == to); })].Node;
                if (EdgeVisualsList.FindIndex(delegate(EdgeVisual obj) { return(obj.NodeFrom == NodeFrom && obj.NodeTo == NodeTo); }) == -1)
                {
                    EdgeVisual ev = new EdgeVisual(new PathFigure(NodeFrom.LocationPoint, new List <PathSegment>()
                    {
                        new LineSegment(NodeTo.LocationPoint, true)
                    }, false))
                    {
                        NodeFrom = NodeFrom,
                        NodeTo   = NodeTo,
                        Zoom     = Zoom
                    };
                    EdgeVisualsList.Add(ev);
                    pnlMap.Children.Insert(0, ev);
                    foreach (var vertex in VertexVisualsList.FindAll(delegate(VertexVisual vv) { return(vv.Node == NodeFrom); }))
                    {
                        vertex.OutCount++;
                    }
                    foreach (var vertex in VertexVisualsList.FindAll(delegate(VertexVisual vv) { return(vv.Node == NodeTo); }))
                    {
                        vertex.InCount++;
                    }
                }
                else
                {
                    lblErrorInfo.Content = "Такое ребро уже существует";
                    return;
                }
            }
            catch (IndexOutOfRangeException ee)
            {
                lblErrorInfo.Content = "Одна из вершин не найдена";
                return;
            }
            catch (ArgumentOutOfRangeException ee)
            {
                lblErrorInfo.Content = "Одна из вершин не найдена";
                return;
            }
            lblErrorInfo.Content = "Ребро добавлено";
        }
        public wndRoadGraphConfig(Graph<WayPoint, PathFigure> roadGraph)
        {
            VertexVisualsList = new List<VertexVisual>();
            EdgeVisualsList = new List<EdgeVisual>();
            RoadGraph = roadGraph;
            InitializeComponent();

            scena = (Application.Current.MainWindow as MainWindow).Scena;
            for (int i = 0; i < scena.ServicesList.Count; i++)
            {
                cbSevice.Items.Add(scena.ServicesList[i]);
            }
            Zoom = 4.0;
            PaintMap();

            foreach (var edge in RoadGraph.Edges)
            {
                EdgeVisual ev = new EdgeVisual(edge.Data)
                {
                    NodeFrom = edge.Start,
                    NodeTo = edge.End,
                    Zoom = Zoom
                };
                EdgeVisualsList.Add(ev);
                pnlMap.Children.Add(ev);
            }

            foreach (var node in RoadGraph.Nodes)
            {
                int in_count = 0, out_count = 0;
                foreach (var edge in RoadGraph.GetEdgesTo(node))
                {
                    in_count++;
                }
                foreach (var edge in RoadGraph.GetEdgesFrom(node))
                {
                    out_count++;
                }

                VertexVisual vv = new VertexVisual(node)
                {
                    Number = (VertexVisualsList.Count + 1).ToString(),
                    InCount = in_count,
                    OutCount = out_count,
                    Zoom = Zoom
                };
                VertexVisualsList.Add(vv);
                pnlMap.Children.Add(vv);
            }
        }
Beispiel #6
0
        public wndRoadGraphConfig(Graph <WayPoint, PathFigure> roadGraph)
        {
            VertexVisualsList = new List <VertexVisual>();
            EdgeVisualsList   = new List <EdgeVisual>();
            RoadGraph         = roadGraph;
            InitializeComponent();

            scena = (Application.Current.MainWindow as MainWindow).Scena;
            for (int i = 0; i < scena.ServicesList.Count; i++)
            {
                cbSevice.Items.Add(scena.ServicesList[i]);
            }
            Zoom = 4.0;
            PaintMap();

            foreach (var edge in RoadGraph.Edges)
            {
                EdgeVisual ev = new EdgeVisual(edge.Data)
                {
                    NodeFrom = edge.Start,
                    NodeTo   = edge.End,
                    Zoom     = Zoom
                };
                EdgeVisualsList.Add(ev);
                pnlMap.Children.Add(ev);
            }

            foreach (var node in RoadGraph.Nodes)
            {
                int in_count = 0, out_count = 0;
                foreach (var edge in RoadGraph.GetEdgesTo(node))
                {
                    in_count++;
                }
                foreach (var edge in RoadGraph.GetEdgesFrom(node))
                {
                    out_count++;
                }

                VertexVisual vv = new VertexVisual(node)
                {
                    Number   = (VertexVisualsList.Count + 1).ToString(),
                    InCount  = in_count,
                    OutCount = out_count,
                    Zoom     = Zoom
                };
                VertexVisualsList.Add(vv);
                pnlMap.Children.Add(vv);
            }
        }
 private void btnAddEdge_Click(object sender, RoutedEventArgs e)
 {
     int from, to;
     if (!int.TryParse(tbStart.Text, out from) || !int.TryParse(tbFinish.Text, out to))
     {
         lblErrorInfo.Content = "Укажите номер вершины";
         return;
     }
     try
     {
         WayPoint NodeFrom, NodeTo;
         NodeFrom = VertexVisualsList[VertexVisualsList.FindIndex(delegate (VertexVisual vv){return int.Parse(vv.Number) == from;})].Node;
         NodeTo = VertexVisualsList[VertexVisualsList.FindIndex(delegate (VertexVisual vv){return int.Parse(vv.Number) == to;})].Node;
         if (EdgeVisualsList.FindIndex(delegate(EdgeVisual obj) { return obj.NodeFrom == NodeFrom && obj.NodeTo == NodeTo; }) == -1)
         {
             EdgeVisual ev = new EdgeVisual(new PathFigure(NodeFrom.LocationPoint, new List<PathSegment>() { new LineSegment(NodeTo.LocationPoint, true) }, false))
             {
                 NodeFrom = NodeFrom,
                 NodeTo = NodeTo,
                 Zoom = Zoom
             };
             EdgeVisualsList.Add(ev);
             pnlMap.Children.Insert(0, ev);
             foreach (var vertex in VertexVisualsList.FindAll(delegate(VertexVisual vv) { return vv.Node == NodeFrom; }))
             {
                 vertex.OutCount++;
             }
             foreach (var vertex in VertexVisualsList.FindAll(delegate(VertexVisual vv) { return vv.Node == NodeTo; }))
             {
                 vertex.InCount++;
             }
         }
         else
         {
             lblErrorInfo.Content = "Такое ребро уже существует";
             return;
         }
     }
     catch (IndexOutOfRangeException ee)
     {
         lblErrorInfo.Content = "Одна из вершин не найдена";
         return;
     }
     catch (ArgumentOutOfRangeException ee)
     {
         lblErrorInfo.Content = "Одна из вершин не найдена";
         return;
     }
     lblErrorInfo.Content = "Ребро добавлено";
 }