private void UpdateCanDrag(GraphArea area, bool canDrag)
 {
     foreach (var item in area.VertexList)
     {
         DragBehaviour.SetIsDragEnabled(item.Value, canDrag);
     }
 }
예제 #2
0
 private void EnableDrag()
 {
     foreach (var item in gg_Area.VertexList)
     {
         DragBehaviour.SetIsDragEnabled(item.Value, true);
         item.Value.EventOptions.PositionChangeNotification = true;
         item.Value.PositionChanged += Value_PositionChanged;
     }
 }
예제 #3
0
        void tst_but_gen_Click(object sender, RoutedEventArgs e)
        {
            var _graph = new GraphExample();

            /*var v1 = new DataVertex("Start");
             * _graph.AddVertex(v1);
             * var v2 = new DataVertex("End");
             * _graph.AddVertex(v2);
             * var e1 = new DataEdge(v1, v2);
             * _graph.AddEdge(e1);
             *
             * _graph.AddVertex(new DataVertex("Block 1"));
             * _graph.AddVertex(new DataVertex("Block 2"));
             */
            for (int i = 0; i < 10; i++)
            {
                _graph.AddVertex(new DataVertex(i.ToString() + "bldsddd\ndssdsds"));
            }

            _graph.AddEdge(new DataEdge(_graph.Vertices.First(), _graph.Vertices.Last()));
            _graph.AddEdge(new DataEdge(_graph.Vertices.Last(), _graph.Vertices.First()));
            _graph.AddEdge(new DataEdge(_graph.Vertices.First(), _graph.Vertices.Last()));

            // Resets external algorithms to null to start new fresh graph given that starting algo is a default algo
            tst_Area.DefaultEdgeRoutingAlgorithm = EdgeRoutingAlgorithmTypeEnum.None;
            //tst_Area.DefaultEdgeRoutingAlgorithmParams = tst_Area.AlgorithmFactory.CreateEdgeRoutingParameters(EdgeRoutingAlgorithmTypeEnum.SimpleER);
            //((SimpleERParameters)tst_Area.DefaultEdgeRoutingAlgorithmParams).BackStep = 10;

            tst_Area.DefaultOverlapRemovalAlgorithm = OverlapRemovalAlgorithmTypeEnum.FSA;

            tst_Area.GenerateGraph(_graph, true);

            /*var vlist = tst_Area.VertexList.Values.ToList();
             * vlist[0].SetPosition(new Point(100, 100)); vlist[0].MathShape = VertexShape.Circle;
             * vlist[1].SetPosition(new Point(600, 100));
             *
             * vlist[2].SetPosition(new Point(400, 100));
             * vlist[3].SetPosition(new Point(440, 150));
             */
            foreach (var item in tst_Area.VertexList)
            {
                item.Value.MathShape = VertexShape.Rectangle;
                DragBehaviour.SetIsDragEnabled(item.Value, true);
                DragBehaviour.SetUpdateEdgesOnMove(item.Value, true);
                HighlightBehaviour.SetIsHighlightEnabled(item.Value, true);
                HighlightBehaviour.SetHighlightControl(item.Value, GraphControlType.VertexAndEdge);
                HighlightBehaviour.SetHighlightEdges(item.Value, EdgesType.All);
            }

            foreach (var item in tst_Area.EdgesList.Values)
            {
                HighlightBehaviour.SetHighlightControl(item, GraphControlType.VertexAndEdge);
                HighlightBehaviour.SetHighlightEdges(item, EdgesType.All);
                HighlightBehaviour.SetHighlightControl(item, GraphControlType.VertexAndEdge);
            }
        }
예제 #4
0
        protected override void CreateVertexControl(DisplayNode vertex)
        {
            base.CreateVertexControl(vertex);
            var newControl = VertexControls[vertex];

            var isDrag = DragBehaviour.GetIsDragEnabled(newControl);

            DragBehaviour.SetIsDragEnabled(newControl, false);             //
            newControl.MouseLeftButtonUp += OnVertexControlMouseLeftButtonUp;
            DragBehaviour.SetIsDragEnabled(newControl, isDrag);
        }
예제 #5
0
 void GraphArea_RelayoutFinished(object sender, EventArgs e)
 {
     ZoomBox.ZoomToFill();
     ZoomBox.Mode = GraphX.Controls.ZoomControlModes.Custom;
     foreach (var item in GraphArea.VertexList)
     {
         DragBehaviour.SetIsDragEnabled(item.Value, true);
         item.Value.EventOptions.PositionChangeNotification = true;
     }
     GraphArea.ShowAllEdgesLabels();
     GraphArea.InvalidateVisual();
 }
예제 #6
0
        private void tg_dragEnabled_Checked(object sender, RoutedEventArgs e)
        {
            if (tg_dragEnabled.IsChecked == null)
            {
                return;
            }
            tg_dragMoveEdges.IsEnabled = (bool)tg_dragEnabled.IsChecked;

            foreach (var item in tg_Area.VertexList)
            {
                DragBehaviour.SetIsDragEnabled(item.Value, tg_dragEnabled.IsChecked != null && tg_dragEnabled.IsChecked.Value);
                DragBehaviour.SetUpdateEdgesOnMove(item.Value, true);
            }
        }
        private void UpdateCanDrag(bool value)
        {
            if (View == null)
            {
                return;
            }

            var area = View.Area;

            foreach (var item in area.VertexList)
            {
                DragBehaviour.SetIsDragEnabled(item.Value, value);
            }
            //throw new NotImplementedException();
        }
예제 #8
0
        private void tg_dragEnabled_Checked(object sender, RoutedEventArgs e)
        {
            if (tg_dragEnabled.IsChecked == true)
            {
                tg_dragMoveEdges.Visibility = System.Windows.Visibility.Visible;
            }
            else
            {
                tg_dragMoveEdges.Visibility = System.Windows.Visibility.Collapsed;
            }

            foreach (var item in tg_Area.VertexList)
            {
                DragBehaviour.SetIsDragEnabled(item.Value, (bool)tg_dragEnabled.IsChecked);
                DragBehaviour.SetUpdateEdgesOnMove(item.Value, true);
            }
        }
        private void CreateVertex(GraphArea area, ZoomControl zoom, DataVertex data = null, double x = double.MinValue, double y = double.MinValue)
        {
            _viewmodel.Do(new CreateVertexOperation(Area, data, x, y,
                                                    (v, vc) =>
            {
                _selectedVertices.Add(v.Id);

                //area.RelayoutGraph(true);

                UpdateHighlightBehaviour(false);

                foreach (var selectedV in _selectedVertices)
                {
                    var localvc = area.VertexList.Where(pair => pair.Key.Id == selectedV).Select(pair => pair.Value).FirstOrDefault();
                    HighlightBehaviour.SetHighlighted(localvc, true);
                }

                if (tbtnCanDrag.IsChecked.Value)
                {
                    DragBehaviour.SetIsDragEnabled(vc, true);
                }
                else
                {
                    DragBehaviour.SetIsDragEnabled(vc, false);
                }

                v.IsEditing          = true;
                v.OnPositionChanged -= v_OnPositionChanged;
                v.OnPositionChanged += v_OnPositionChanged;
            },
                                                    (v) =>
            {
                _selectedVertices.Remove(v.Id);
                //on vertex recreated
            }));
            //FitToBounds(area.Dispatcher, zoom);
        }
예제 #10
0
 public void EnableDrag()
 {
     DragBehaviour.SetIsDragEnabled(this, true);
 }
예제 #11
0
 public void DisableDrag()
 {
     DragBehaviour.SetIsDragEnabled(this, false);
 }
예제 #12
0
        void erg_but_randomgraph_Click(object sender, System.Windows.RoutedEventArgs e)
        {
            if ((EdgeRoutingAlgorithmTypeEnum)erg_eralgo.SelectedItem != EdgeRoutingAlgorithmTypeEnum.Bundling)
            {
                var gr = GenerateDataGraph(30);

                if (erg_Area.LogicCore.EnableParallelEdges)
                {
                    if (erg_Area.VertexList.Count() < 2)
                    {
                        var v1 = new DataVertex(); gr.AddVertex(v1);
                        var v2 = new DataVertex(); gr.AddVertex(v2);
                        gr.AddEdge(new DataEdge(v1, v2)
                        {
                            Text = string.Format("{0} -> {1}", v1.Text, v2.Text)
                        });
                        gr.AddEdge(new DataEdge(v2, v1)
                        {
                            Text = string.Format("{0} -> {1}", v2.Text, v1.Text)
                        });
                    }
                    else
                    {
                        var v1 = gr.Vertices.ToList()[0];
                        var v2 = gr.Vertices.ToList()[1];
                        gr.AddEdge(new DataEdge(v1, v2)
                        {
                            Text = string.Format("{0} -> {1}", v1.Text, v2.Text)
                        });
                        gr.AddEdge(new DataEdge(v2, v1)
                        {
                            Text = string.Format("{0} -> {1}", v2.Text, v1.Text)
                        });
                    }
                }

                erg_Area.GetLogicCore <LogicCoreExample>().DefaultEdgeRoutingAlgorithm = (EdgeRoutingAlgorithmTypeEnum)erg_eralgo.SelectedItem;
                switch ((EdgeRoutingAlgorithmTypeEnum)erg_eralgo.SelectedItem)
                {
                case EdgeRoutingAlgorithmTypeEnum.SimpleER:
                    erg_Area.GetLogicCore <LogicCoreExample>().DefaultEdgeRoutingAlgorithmParams = erg_SimpleERParameters;
                    break;

                case EdgeRoutingAlgorithmTypeEnum.PathFinder:
                    erg_Area.GetLogicCore <LogicCoreExample>().DefaultEdgeRoutingAlgorithmParams = erg_PFERParameters;
                    // erg_Area.SideExpansionSize = new Size(erg_PFERParameters.SideGridOffset, erg_PFERParameters.SideGridOffset);
                    break;
                }

                erg_Area.GetLogicCore <LogicCoreExample>().DefaultLayoutAlgorithm               = LayoutAlgorithmTypeEnum.SimpleRandom;
                erg_Area.GetLogicCore <LogicCoreExample>().DefaultOverlapRemovalAlgorithm       = OverlapRemovalAlgorithmTypeEnum.FSA;
                erg_Area.GetLogicCore <LogicCoreExample>().DefaultOverlapRemovalAlgorithmParams = erg_Area.LogicCore.AlgorithmFactory.CreateOverlapRemovalParameters(OverlapRemovalAlgorithmTypeEnum.FSA);
                var oprm = erg_Area.GetLogicCore <LogicCoreExample>().DefaultOverlapRemovalAlgorithmParams as OverlapRemovalParameters;
                //oprm.HorizontalGap = 100;
                //oprm.VerticalGap = 100;
                //erg_Area.ExternalEdgeRoutingAlgorithm = new SimpleEdgeRouting<DataVertex, DataEdge,  GraphExample>(gr as GraphExample, erg_Area.GetVertexPositions(), erg_Area.GetVertexSizeRectangles());

                erg_Area.GenerateGraph(gr);
                erg_zoomctrl.ZoomToFill();//.ZoomToFill();
                erg_Area.GenerateAllEdges();
                foreach (var item in erg_Area.GetAllVertexControls())
                {
                    DragBehaviour.SetIsDragEnabled(item, true);
                }
                erg_recalculate_Checked(null, null);
                erg_showEdgeArrows_Checked(null, null);
                erg_showEdgeLabels_Checked(null, null);
                erg_alignEdgeLabels_Checked(null, null);
                return;
            }

            erg_Area.RemoveAllEdges();
            erg_Area.RemoveAllVertices();
            //generate graph
            var graph = new GraphExample();

            foreach (var item in DataSource.Take(120))
            {
                graph.AddVertex(new DataVertex(item.Text)
                {
                    ID = item.ID
                });
            }

            var vlist = graph.Vertices.ToList();

            foreach (var item in vlist)
            {
                if (Rand.Next(0, 50) > 25)
                {
                    continue;
                }
                var vertex2 = vlist[Rand.Next(0, graph.VertexCount - 1)];
                graph.AddEdge(new DataEdge(item, vertex2, Rand.Next(1, 50))
                {
                    ToolTipText = string.Format("{0} -> {1}", item, vertex2)
                });
            }

            /* graph.AddEdge(new DataEdge(vlist[0], vlist[3], 1));
             * graph.AddEdge(new DataEdge(vlist[1], vlist[4], 1));
             * graph.AddEdge(new DataEdge(vlist[2], vlist[5], 1));
             *
             * graph.AddEdge(new DataEdge(vlist[0], vlist[6], 1));
             * graph.AddEdge(new DataEdge(vlist[1], vlist[7], 1));
             * graph.AddEdge(new DataEdge(vlist[2], vlist[8], 1));
             * //generate vertex positions
             * var VertexPositions = new Dictionary<DataVertex, Point>();
             *
             * VertexPositions.Add(vlist[6], new Point(5000, 1000));
             * VertexPositions.Add(vlist[7], new Point(5000, 1100));
             * VertexPositions.Add(vlist[8], new Point(5000, 1300));
             *
             * VertexPositions.Add(vlist[0], new Point(100, 100));
             * VertexPositions.Add(vlist[1], new Point(300, 100));
             * VertexPositions.Add(vlist[2], new Point(200, 300));
             *
             * VertexPositions.Add(vlist[3], new Point(10000, 1000));
             * VertexPositions.Add(vlist[4], new Point(10300, 1000));
             * VertexPositions.Add(vlist[5], new Point(10200, 1300));*/
            //generate vertices

            var VertexPositions = new Dictionary <DataVertex, Point>();

            foreach (var item in GenerateRandomVertices(graph, 0, 40, 0, 2000, 0, 2000))
            {
                VertexPositions.Add(item.Key, item.Value);
            }
            foreach (var item in GenerateRandomVertices(graph, 40, 40, 5000, 7000, 3000, 4000))
            {
                VertexPositions.Add(item.Key, item.Value);
            }
            foreach (var item in GenerateRandomVertices(graph, 80, 40, 500, 2500, 6000, 9000))
            {
                VertexPositions.Add(item.Key, item.Value);
            }
            erg_Area.LogicCore.Graph = graph;
            UpdateLayout();


            CalcBundling();



            //generate edges
            erg_Area.GenerateAllEdges(Visibility.Visible);
            foreach (var item in erg_Area.GetAllVertexControls())
            {
                DragBehaviour.SetIsDragEnabled(item, true);
            }
            erg_recalculate_Checked(null, null);
            erg_showEdgeArrows_Checked(null, null);
            erg_showEdgeLabels_Checked(null, null);
            erg_zoomctrl.ZoomToFill();
        }