MSAGL (WinForms) バージョン 1.1.3 で、接続されていないノード間の最小距離を強制しようとしています。ユーザーはゼロからグラフを作成します。これには、ノードを作成し、ノード間をドラッグしてエッジを作成することが含まれます。しかし、エッジのないすべてのノードは、ポリスチレン ボールからウールのジャンパーのように他のノードにくっつきます。
エッジの有無にかかわらず、すべてのノードの間隔を最小にしたいと考えています。これにはおそらく簡単な答えがありますが、これまでのところ私にはわかりません。GitHub、ここ、および Google で関連資料を検索した後、成功しませんでした。
LayoutAlgorithmSettings.NodeSeparation = 200; //works well between nodes that have edges between
LayoutAlgorithmSettings.ClusterMargin = 200;
LayoutAlgorithmSettings.PackingMethod = Microsoft.Msagl.Core.Layout.PackingMethod.Columns;
LayoutAlgorithmSettings.PackingAspectRatio = 2;
LayoutAlgorithmSettings.EdgeRoutingSettings.Padding = 100;
グラフ生成コードは次のとおりです (一部の宣言とその他の詳細は省略されています)。私はMDSレイアウトを使用しています:
Graph graph = new Microsoft.Msagl.Drawing.Graph("graph");
graph.LayoutAlgorithmSettings = new Microsoft.Msagl.Layout.MDS.MdsLayoutSettings();
//add steps
foreach (Step step in config.Steps)
{
Node node = new Node(step.Name);
node.UserData = step;
UpdateNodeColour(node);
graph.AddNode(node);
}
//add transitions (edges)
foreach(Transition t in config.Transitions)
graph.AddEdge(t.FromStep.Name, t.Name, t.ToStep.Name);
gViewer.Graph = graph;
ところで-MSAGLは素晴らしいです!ステート マシンを視覚化および編集するための優れたツールです。