///<inheritdoc/> protected override void PerformPreLayout() { String selGroupPolicy = (String)Handler.GetValue(GROUPING, GROUP_LAYOUT_POLICY); String edgeLabelingName = (String)Handler.GetValue(LABELING, EDGE_LABELING); MultiStageLayout multiStageLayout = LayoutAlgorithm as MultiStageLayout; IDataProvider upwardDP = null; if ((upwardDP = CurrentLayoutGraph.GetDataProvider(OrthogonalLayout.DirectedEdgeDpKey)) == null) { //determine upward edges if not already marked. if ((bool)Handler.GetValue(EDGES, DRAW_SELECTED_EDGES_UPWARDS)) { CurrentLayoutGraph.AddDataProvider(OrthogonalLayout.DirectedEdgeDpKey, upwardDP = new UpwardEdgeDP(this)); } } // if ((bool)Handler.GetValue(EDGES, UPWARD_EDGE_BUS_ROUTING) && upwardDP != null) { // sgDPOrig = CurrentLayoutGraph.GetDataProvider(PortConstraintKeys.SourceGroupIdDpKey); // tgDPOrig = CurrentLayoutGraph.GetDataProvider(PortConstraintKeys.TargetGroupIdDpKey); // sourceGroupMap = CurrentLayoutGraph.CreateEdgeMap(); // tgMap = CurrentLayoutGraph.CreateEdgeMap(); // CurrentLayoutGraph.AddDataProvider(PortConstraintKeys.SourceGroupIdDpKey, sourceGroupMap); // CurrentLayoutGraph.AddDataProvider(PortConstraintKeys.TargetGroupIdDpKey, tgMap); // AutoGroupEdges(CurrentLayoutGraph, sourceGroupMap, tgMap, upwardDP); // } if ((selGroupPolicy != IGNORE_GROUPS) && ContainsGroupNodes()) { multiStageLayout.HideGroupsStageEnabled = false; if (FIX_GROUPS == selGroupPolicy) { var fgl = new FixGroupLayoutStage(); fgl.InterEdgeRoutingStyle = InterEdgeRoutingStyle.Orthogonal; if (multiStageLayout != null) { multiStageLayout.PrependStage(fgl); preStage = fgl; } } } else { multiStageLayout.HideGroupsStageEnabled = true; } if (edgeLabelingName == GENERIC && multiStageLayout != null) { var la = new GenericLabeling(); la.MaximumDuration = 0; la.PlaceNodeLabels = false; la.PlaceEdgeLabels = true; la.AutoFlipping = true; la.ProfitModel = new SimpleProfitModel(); multiStageLayout.Labeling = la; } }
protected override LayoutData CreateConfiguredLayoutData(GraphControl graphControl, ILayoutAlgorithm layout) { var layoutData = new OrganicLayoutData(); switch (GroupLayoutPolicyItem) { case EnumGroupLayoutPolicy.IgnoreGroups: preStage = new HideGroupsStage(); ((MultiStageLayout)layout).PrependStage(preStage); break; case EnumGroupLayoutPolicy.LayoutGroups: //do nothing... break; case EnumGroupLayoutPolicy.FixGroupBounds: layoutData.GroupNodeModes.Delegate = node => graphControl.Graph.IsGroupNode(node) ? GroupNodeMode.FixBounds : GroupNodeMode.Normal; break; case EnumGroupLayoutPolicy.FixGroupContents: layoutData.GroupNodeModes.Delegate = node => graphControl.Graph.IsGroupNode(node) ? GroupNodeMode.FixContents : GroupNodeMode.Normal; break; default: preStage = new HideGroupsStage(); ((MultiStageLayout)layout).PrependStage(preStage); break; } layoutData.AffectedNodes.Source = graphControl.Selection.SelectedNodes; if (EdgeDirectednessItem) { layoutData.EdgeDirectedness.Delegate = edge => { if (edge.Style is IArrowOwner && !Equals(((IArrowOwner)edge.Style).TargetArrow, Arrows.None)) { return(1); } return(0); }; } return(layoutData); }
///<inheritdoc/> protected override void PerformPostLayout() { CurrentLayoutGraph.RemoveDataProvider(OrganicLayout.AffectedNodesDpKey); if (preStage != null) { organic.RemoveStage(preStage); preStage = null; } if (groupNodeContentDP != null) { CurrentLayoutGraph.RemoveDataProvider(OrganicLayout.GroupNodeModeDpKey); groupNodeContentDP = null; } base.PerformPostLayout(); }
private void ConfigureGrouping() { IOptionItem groupingItem = Handler.GetItemByName("GROUPING.GROUP_LAYOUT_POLICY"); switch ((string)groupingItem.Value) { case IGNORE_GROUPS: preStage = new HideGroupsStage(); organic.PrependStage(preStage); break; case LAYOUT_GROUPS: //do nothing... break; case FIX_GROUP_BOUNDS: IDataProvider groupDP = CurrentLayoutGraph.GetDataProvider(GroupingKeys.GroupDpKey); if (groupDP != null) { groupNodeContentDP = Maps.CreateHashedNodeMap(); foreach (Node node in CurrentLayoutGraph.Nodes) { if (groupDP.GetBool(node)) { groupNodeContentDP.Set(node, GroupNodeMode.FixBounds); } } CurrentLayoutGraph.AddDataProvider(OrganicLayout.GroupNodeModeDpKey, groupNodeContentDP); } break; case FIX_GROUP_CONTENTS: groupDP = CurrentLayoutGraph.GetDataProvider(GroupingKeys.GroupDpKey); if (groupDP != null) { groupNodeContentDP = Maps.CreateHashedNodeMap(); foreach (Node node in CurrentLayoutGraph.Nodes) { if (groupDP.GetBool(node)) { groupNodeContentDP.Set(node, GroupNodeMode.FixContents); } } CurrentLayoutGraph.AddDataProvider(OrganicLayout.GroupNodeModeDpKey, groupNodeContentDP); } break; } }