Exemple #1
0
        ///<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;
            }
        }