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