You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
I am trying to use the MSAGL library to generate node positions. I have gone through the samples and have not found a simple example that helps.
I have my own custom Graph object with a list of custom edges and custom nodes. I am iterating through them, adding them to the GeometryGraph, creating a layered layout, running the graph, iterating back through the nodes, and retrieving the node positions. The resulting nodes positions are incorrect, they are just about all overlapping. I tried scaling the positions by 100x but they still overlap. What am I doing wrong?
(Here's my code)
I create nodes and edges. I make a dictionary for the nodes so I can reuse them in my edges.
Dictionary<string, Microsoft.Msagl.Core.Layout.Node> nMap = new Dictionary<string, Microsoft.Msagl.Core.Layout.Node>();
int radius = 12;
foreach (var myNode in myGraph.nodes)
{
var curve = CurveFactory.CreateCircle(radius, new Point());
// var node = new Microsoft.Msagl.Core.Layout.Node(curve, id);
var node = new Microsoft.Msagl.Core.Layout.Node(curve, myNode.id.ToString());
graph.Nodes.Add(node);
nMap.Add(myNode.id.ToString(), mNode);
}
foreach (var activity in myGraph.activities)
{
var source = nMap[activity.chartInfo.source_id.ToString()];
var target = nMap[activity.chartInfo.target_id.ToString()];
graph.GeometryGraph.Edges.Add(new Microsoft.Msagl.Core.Layout.Edge(source, target));
}
Then I create my layout settings. I've tried changing properties on the settings to see if they produce different positions
var settings = new SugiyamaLayoutSettings
{
Transformation = PlaneTransformation.Rotation(Math.PI / 2),
EdgeRoutingSettings = { EdgeRoutingMode = Microsoft.Msagl.Core.Routing.EdgeRoutingMode.Spline }
};
// Tested these out but they didn't work
settings.MinimalHeight = 700;
settings.MinimalWidth = 1300;
settings.NodeSeparation = 200;
var llayout = new LayeredLayout(graph.GeometryGraph, settings);
llayout.Run();
Then I get my custom nodes (from a dictionary lookup) and set the positions from the GeometryGraph nodes:
Sorry, it is difficult to see what is happening without additional information. A full example would help. Maybe you can print out the msagl node positions as well.
I am trying to use the MSAGL library to generate node positions. I have gone through the samples and have not found a simple example that helps.
I have my own custom Graph object with a list of custom edges and custom nodes. I am iterating through them, adding them to the GeometryGraph, creating a layered layout, running the graph, iterating back through the nodes, and retrieving the node positions. The resulting nodes positions are incorrect, they are just about all overlapping. I tried scaling the positions by 100x but they still overlap. What am I doing wrong?
(Here's my code)
Can someone point me in the right direction? What am I doing wrong?
As an aside, how would you create edges that curve around a node?
The text was updated successfully, but these errors were encountered: