예제 #1
0
        void butGroupedGraph_Click(object sender, RoutedEventArgs e)
        {
            CreateNewArea();
            dg_Area.LogicCore.Graph = ShowcaseHelper.GenerateDataGraph(10, true);
            dg_Area.LogicCore.Graph.Vertices.Take(5).ForEach(a => a.GroupId = 1);
            dg_Area.LogicCore.Graph.Vertices.Where(a => a.GroupId == 0).ForEach(a => a.GroupId = 2);
            dg_Area.LogicCore.DefaultOverlapRemovalAlgorithm = OverlapRemovalAlgorithmTypeEnum.None;
            //generate group params
            var prms = new List <AlgorithmGroupParameters <DataVertex, DataEdge> >
            {
                new AlgorithmGroupParameters <DataVertex, DataEdge>
                {
                    GroupId         = 1,
                    LayoutAlgorithm =
                        new RandomLayoutAlgorithm <DataVertex, DataEdge, GraphExample>(
                            new RandomLayoutAlgorithmParams {
                        Bounds = new Rect(0, 0, 500, 500)
                    }),

                    // ZoneRectangle = new Rect(0, 0, 500, 500)
                },
                new AlgorithmGroupParameters <DataVertex, DataEdge>
                {
                    GroupId         = 2,
                    LayoutAlgorithm =
                        new RandomLayoutAlgorithm <DataVertex, DataEdge, GraphExample>(
                            new RandomLayoutAlgorithmParams {
                        Bounds = new Rect(0, 0, 500, 500)
                    }),

                    // ZoneRectangle = new Rect(1000, 0, 500, 500)
                }
            };

            var gParams = new GroupingLayoutAlgorithmParameters <DataVertex, DataEdge>(prms, true);

            //generate grouping algo
            dg_Area.LogicCore.ExternalLayoutAlgorithm =
                new GroupingLayoutAlgorithm <DataVertex, DataEdge, BidirectionalGraph <DataVertex, DataEdge> >(dg_Area.LogicCore.Graph, null, gParams);

            //generate graphs
            dg_Area.GenerateGraph();

            //generate group visuals
            foreach (var item in prms)
            {
                if (!item.ZoneRectangle.HasValue)
                {
                    continue;
                }
                var rect = new Rectangle
                {
                    Width   = item.ZoneRectangle.Value.Width,
                    Height  = item.ZoneRectangle.Value.Height,
                    Fill    = item.GroupId == 1 ? Brushes.Blue : Brushes.Black,
                    Opacity = .5
                };
                dg_Area.InsertCustomChildControl(0, rect);
                GraphAreaBase.SetX(rect, item.ZoneRectangle.Value.X);
                GraphAreaBase.SetY(rect, item.ZoneRectangle.Value.Y);
            }
            dg_zoomctrl.ZoomToFill();
        }
예제 #2
0
        private void GenerateGraph()
        {
            graphArea.ClearLayout();
            var logicCore = new LogicCoreExample()
            {
                Graph = ShowcaseHelper.GenerateDataGraph(10)
            };

            logicCore.Graph.Vertices.Take(5).ForEach(a => a.GroupId = 1);
            logicCore.Graph.Vertices.Where(a => a.GroupId == 0).ForEach(a => a.GroupId = 2);
            logicCore.DefaultOverlapRemovalAlgorithm = OverlapRemovalAlgorithmTypeEnum.None;
            //generate group params
            var prms = new List <AlgorithmGroupParameters <DataVertex, DataEdge> >
            {
                new AlgorithmGroupParameters <DataVertex, DataEdge>
                {
                    GroupId         = 1,
                    LayoutAlgorithm =
                        new RandomLayoutAlgorithm <DataVertex, DataEdge, GraphExample>(
                            new RandomLayoutAlgorithmParams {
                        Bounds = new Rect(10, 10, 490, 490)
                    }),
                },
                new AlgorithmGroupParameters <DataVertex, DataEdge>
                {
                    GroupId         = 2,
                    LayoutAlgorithm =
                        new RandomLayoutAlgorithm <DataVertex, DataEdge, GraphExample>(
                            new RandomLayoutAlgorithmParams {
                        Bounds = new Rect(10, 10, 490, 490)
                    }),
                }
            };

            var gParams = new GroupingLayoutAlgorithmParameters <DataVertex, DataEdge>(prms, true)
            {
                OverlapRemovalAlgorithm = logicCore.AlgorithmFactory.CreateFSAA <object>(100, 100),
                ArrangeGroups           = cbArrangeGroups.IsChecked ?? false,
            };

            //generate grouping algo
            logicCore.ExternalLayoutAlgorithm =
                new GroupingLayoutAlgorithm <DataVertex, DataEdge, BidirectionalGraph <DataVertex, DataEdge> >(logicCore.Graph, null, gParams);

            graphArea.LogicCore = logicCore;
            //generate graphs
            graphArea.GenerateGraph();

            //generate group visuals
            foreach (var item in prms)
            {
                if (!item.ZoneRectangle.HasValue)
                {
                    continue;
                }
                var rect = GenerateGroupBorder(item);
                graphArea.InsertCustomChildControl(0, rect);
                GraphAreaBase.SetX(rect, item.ZoneRectangle.Value.X - _groupInnerPadding * .5);
                GraphAreaBase.SetY(rect, item.ZoneRectangle.Value.Y - _groupInnerPadding * .5 - _headerHeight);
            }
            zoomControl.ZoomToFill();
        }