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(); }
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(); }