예제 #1
0
 void graphArea_VertexSelected(object sender, VertexSelectedEventArgs args)
 {
      if(args.MouseArgs.LeftButton == MouseButtonState.Pressed)            
      {
          if (_opMode == EditorOperationMode.Edit)
             CreateEdgeControl(args.VertexControl);
          else if(_opMode == EditorOperationMode.Delete)
              SafeRemoveVertex(args.VertexControl);
          else if (_opMode == EditorOperationMode.Select && args.Modifiers == ModifierKeys.Control)
              SelectVertex(args.VertexControl);
      }
 }
예제 #2
0
        private void GgAreaVertexSelected(object sender, VertexSelectedEventArgs args)
        {
            if (args.MouseArgs.LeftButton != MouseButtonState.Pressed)
            {
                return;
            }

            switch (viewModel.SenteceGraphOperationMode)
            {
                case SenteceGraphOperationMode.Edit:
                    CreateEdgeControl(args.VertexControl);
                    break;
                case SenteceGraphOperationMode.Delete:
                    SafeRemoveVertex(args.VertexControl);
                    break;
                case SenteceGraphOperationMode.Select:
                    SelectVertex(args.VertexControl);
                    break;
            }
        }
예제 #3
0
        void dg_Area_VertexSelectedForED(object sender, VertexSelectedEventArgs args)
        {
            if (!_isInEdMode) return;
            if (_edVertex == null) //select starting vertex
            {
                _edVertex = args.VertexControl;
                _edFakeDv = new DataVertex { ID = -666 };
                _edGeo = new PathGeometry(new PathFigureCollection { new PathFigure { IsClosed = false, StartPoint = _edVertex.GetPosition(), Segments = new PathSegmentCollection { new PolyLineSegment(new List<Point> { new Point() }, true) } } });
                var dedge = new DataEdge(_edVertex.Vertex as DataVertex, _edFakeDv);
                _edEdge = new EdgeControl(_edVertex, null, dedge) { ManualDrawing = true };
                dg_Area.AddEdge(dedge, _edEdge);
                dg_Area.LogicCore.Graph.AddVertex(_edFakeDv);
                dg_Area.LogicCore.Graph.AddEdge(dedge);
                _edEdge.SetEdgePathManually(_edGeo);
            }
            else if (!Equals(_edVertex, args.VertexControl)) //finish draw
            {
                _edEdge.Target = args.VertexControl;
                var dedge = _edEdge.Edge as DataEdge;
                if (dedge != null) dedge.Target = args.VertexControl.Vertex as DataVertex;
                var fig = _edGeo.Figures[0];
                var seg = fig.Segments[_edGeo.Figures[0].Segments.Count - 1] as PolyLineSegment;

                if (seg != null && seg.Points.Count > 0)
                {
                    var targetPos = _edEdge.Target.GetPosition();
                    var sourcePos = _edEdge.Source.GetPosition();
                    //get the size of the source
                    var sourceSize = new Size
                    {
                        Width = _edEdge.Source.ActualWidth,
                        Height = _edEdge.Source.ActualHeight
                    };
                    var targetSize = new Size
                    {
                        Width = _edEdge.Target.ActualWidth,
                        Height = _edEdge.Target.ActualHeight
                    };

                    var srcStart = seg.Points.Count == 0 ? fig.StartPoint : seg.Points[0];
                    var srcEnd = seg.Points.Count > 1 ? (seg.Points[seg.Points.Count - 1] == targetPos ? seg.Points[seg.Points.Count - 2] : seg.Points[seg.Points.Count - 1]) : fig.StartPoint;
                    var p1 = GeometryHelper.GetEdgeEndpoint(sourcePos, new Rect(sourceSize), srcStart, _edEdge.Source.VertexShape);
                    var p2 = GeometryHelper.GetEdgeEndpoint(targetPos, new Rect(targetSize), srcEnd, _edEdge.Target.VertexShape);


                    fig.StartPoint = p1;
                    if (seg.Points.Count > 1)
                        seg.Points[seg.Points.Count - 1] = p2;
                }
                GeometryHelper.TryFreeze(_edGeo);
                _edEdge.SetEdgePathManually(new PathGeometry(_edGeo.Figures));
                _isInEdMode = false;
                ClearEdgeDrawing();
            }
        }
예제 #4
0
 void dg_Area_VertexSelected(object sender, VertexSelectedEventArgs args)
 {
     if (args.MouseArgs.LeftButton == MouseButtonState.Pressed)
     {
         if (Keyboard.IsKeyDown(Key.LeftCtrl))
             SelectVertex(args.VertexControl);
     }
     else if (args.MouseArgs.RightButton == MouseButtonState.Pressed)
     {
         args.VertexControl.ContextMenu = new ContextMenu();
         var mi = new MenuItem { Header = "Delete item", Tag = args.VertexControl };
         mi.Click += mi_Click;
         args.VertexControl.ContextMenu.Items.Add(mi);
     }
 }
예제 #5
0
        public MainWindow()
        {
            InitializeComponent();
            //Customize Zoombox a bit
            //Set minimap (overview) window to be visible by default
            ZoomControl.SetViewFinderVisibility(zoomctrl, Visibility.Visible);
            //Set Fill zooming strategy so whole graph will be always visible
            zoomctrl.ZoomToFill();

            var modes = new List<string>() { "By hopes", "By speed" };
            protocols = new List<string>() { "TCP", "UDP" };
            routingModeBox.ItemsSource = modes;
            routingModeBox.SelectedItem = modes[0];
            protocolBox.ItemsSource = protocols;
            protocolBox.SelectedItem = protocols[0];

            //Lets setup GraphArea settings
            GraphAreaExample_Setup();

            zoomctrl.MouseRightButtonUp += ((o, s) => { VertexInputBox.Visibility = Visibility.Visible; });

            //Vertex settings
            Area.VertexSelected += ((h, j) => {
                _selectedVertexEvent = j;
                _selectedVertex = (DataVertex)j.VertexControl.Vertex;
                VertexBox.Visibility = Visibility.Visible; });

            Area.EdgeSelected += ((h, j) => {
                _selectedEdgeEvent = j;
                _selectedEdge = (DataEdge)j.EdgeControl .Edge;
                EdgeBox.Visibility = Visibility.Visible;
            });

            Area.EdgeMouseEnter += ((h,j) =>
            {

                foreach (var item in logicCore.Graph.Edges)
                {
                    if (item.Equals(j.EdgeControl.Edge))
                    {
                        j.EdgeControl.ToolTip = item.GetEdgeType();
                    }
                }

            });

            //Vertex tooltip
            Area.VertexMouseEnter += ((h,j) =>
            {
                foreach(var item in logicCore.Graph.Vertices)
                {
                    if(item.Text == j.VertexControl.Vertex.ToString())
                    {
                        if (item.IsEnabled)
                        {
                            j.VertexControl.ToolTip = item.Text + "\n\n" + item.Routing;
                            StatsText.Text = "";
                            StatsText.Text += "  " + item.Text + Environment.NewLine;
                            StatsText.Text += "  Recieved TCP" + Environment.NewLine + "  control packets: " + item.RecievedTCPControlPackets + Environment.NewLine;
                            StatsText.Text += "  Recieved TCP" + Environment.NewLine + "  data packets: " + item.RecievedTCPDataPackets + Environment.NewLine;
                            StatsText.Text += "  Sended TCP" + Environment.NewLine + "  control packets: " + item.SendedTCPControlPackets + Environment.NewLine;
                            StatsText.Text += "  Sended TCP" + Environment.NewLine + "  data packets: " + item.SendedTCPDataPackets + Environment.NewLine;
                            StatsText.Text += "  Recieved UDP" + Environment.NewLine + "  data packets: " + item.RecivedUDPPackets + Environment.NewLine;
                            StatsText.Text += "  Sended UDP" + Environment.NewLine + "  data packets: " + item.SendedUDPPackets + Environment.NewLine;
                            CurrentIterBox.Text = "  Current iteration: " + Environment.NewLine + "  " + _iterationNumber;
                        }
                        else
                            j.VertexControl.ToolTip = item.Text;
                    }
                }
            });

            Area.VertexMouseLeave += ((h,j) => { StatsText.Text = "";
                CurrentIterBox.Text = "";
            });

            gg_but_randomgraph.Click += gg_but_randomgraph_Click;

            gg_but_relayout.Click += gg_but_relayout_Click;

            Loaded += MainWindow_Loaded;

            Graph = NetworkGraph.GetDefaultGraph();

            SearchShortestWay(true);
        }
예제 #6
0
 void tg_Area_VertexSelected(object sender, VertexSelectedEventArgs args)
 {
     if (args.MouseArgs.LeftButton == MouseButtonState.Pressed && tg_edgeMode.SelectedIndex == 1)
     {
         tg_Area.GenerateEdgesForVertex(args.VertexControl, (EdgesType)tg_edgeType.SelectedItem);
     }
     if (args.MouseArgs.RightButton != MouseButtonState.Pressed) return;
     args.VertexControl.ContextMenu = new ContextMenu();
     var menuitem = new MenuItem { Header = "Delete item", Tag = args.VertexControl };
     menuitem.Click += tg_deleteitem_Click;
     args.VertexControl.ContextMenu.Items.Add(menuitem);
     args.VertexControl.ContextMenu.IsOpen = true;
 }