0

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は素晴らしいです!ステート マシンを視覚化および編集するための優れたツールです。

4

1 に答える 1