Beispiel #1
0
        public void DoLayout(int spacingHorizontal, int spacingVertical)
        {
            var layout = new GoLayoutLayeredDigraph()
            {
                Document        = Doc,
                DirectionOption = GoLayoutDirection.Right,
                LayerSpacing    = spacingHorizontal,
                ColumnSpacing   = spacingVertical,
                Iterations      = 5
            };

            // NOTE: this piece of code does not perform the right layout inside the group.
            //if (Selection.Count == 1 && Selection.Primary is GraphGroup group)
            //{
            //    layout.Network = new GoLayoutLayeredDigraphNetwork();
            //    layout.Network.AddNodesAndLinksFromCollection(group, true);
            //    layout.PerformLayout();
            //    group.RefreshBorder();

            //    var globalLayout = new GoLayoutLayeredDigraph()
            //    {
            //        Document = Doc,
            //        DirectionOption = GoLayoutDirection.Right,
            //        LayerSpacing = spacingHorizontal,
            //        ColumnSpacing = spacingVertical,
            //        Iterations = 5
            //    };
            //    globalLayout.PerformLayout();
            //}
            //else
            layout.PerformLayout();
        }
Beispiel #2
0
        public void DoLayout([NotNull] GraphGroup group, int spacingHorizontal, int spacingVertical)
        {
            var layout = new GoLayoutLayeredDigraph()
            {
                Document        = Doc,
                DirectionOption = GoLayoutDirection.Right,
                LayerSpacing    = spacingHorizontal,
                ColumnSpacing   = spacingVertical,
                Iterations      = 5,
                Network         = new GoLayoutLayeredDigraphNetwork(),
            };

            layout.Network.AddNodesAndLinksFromCollection(group, true);
            layout.PerformLayout();
        }
Beispiel #3
0
        private static List <WorkflowComponent> DefaultSccScheduleProvider(List <WorkflowComponent> components)
        {
            var allData = components.GetAllData();


            // Nodes
            var    dataNodes = new Dictionary <string, GoBasicNode>();
            GoView tempView  = new GoView();

            foreach (Data data in allData)
            {
                var node = new GoBasicNode {
                    Text = data.Id
                };

                tempView.Document.Add(node);
                dataNodes[data.Id] = node;
            }

            foreach (Model model in components)
            {
                var node = new GoBasicNode {
                    Text = model.Id
                };

                tempView.Document.Add(node);

                // Links
                foreach (Data data in model.ModelDataInputs)
                {
                    tempView.Document.Add(new GoLink
                    {
                        ToArrow  = true,
                        FromPort = dataNodes[data.Id].Port,
                        ToPort   = node.Port
                    });
                }
                foreach (Data data in model.ModelDataOutputs)
                {
                    tempView.Document.Add(new GoLink
                    {
                        ToArrow  = true,
                        FromPort = node.Port,
                        ToPort   = dataNodes[data.Id].Port
                    });
                }
            }

            // automatically layout the graph
            GoLayoutLayeredDigraph layout = new GoLayoutLayeredDigraph
            {
                Document        = tempView.Document,
                DirectionOption = GoLayoutDirection.Down,
                SetsPortSpots   = false,                // for nicer looking links near single-Port nodes when not Orthogonal
                ColumnSpacing   = 15,
                LayerSpacing    = 10
            };

            layout.PerformLayout();

            var modelLayersDictionary = new Dictionary <WorkflowComponent, int>();

            foreach (GoLayoutLayeredDigraphNode node in layout.Network.Nodes)
            {
                if (node.GoObject is GoBasicNode n && components.FirstOrDefault(c => c.Id == n.Text) is WorkflowComponent wc)
                {
                    modelLayersDictionary.Add(wc, node.Layer);
                }
            }

            var scheduledComponents = modelLayersDictionary.OrderBy(kvp => kvp.Value).Select(kvp => kvp.Key).ToList();

            return(scheduledComponents);
        }