如何“;分散”;使用Graphsharp和WPF从图中提取节点

本文关键字:提取 节点 WPF Graphsharp 分散 使用 如何 | 更新日期: 2023-09-27 18:07:40

每个人。我使用GraphSharp和WPF来构建一个包含许多节点的图。

问题是:节点通常被一个接一个地布置,看起来像一个"粗体"命名的节点(见图,红色框http://postimg.org/image/tl6gt3cfz/)。

我想通过窗口分散节点,避免节点一个接一个。有办法做到这一点吗?

这是Xaml:

<Window x:Class="WpfApplication1.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:graphsharp="clr-namespace:GraphSharp.Controls;assembly=GraphSharp.Controls"
    xmlns:zoom="clr-namespace:WPFExtensions.Controls;assembly=WPFExtensions"
    Title="MainWindow"
    Height="350" 
    Width="525"
    x:Name="root">
<Grid>
    <zoom:ZoomControl>
    <graphsharp:GraphLayout x:Name="graphLayout"
                           Graph="{Binding ElementName=root,Path=GraphToVisualize}"
                            LayoutAlgorithmType="FR"
                            OverlapRemovalAlgorithmType="FSA"
                            HighlightAlgorithmType="Simple"/>
    </zoom:ZoomControl>
</Grid>

这是.cs

public partial class MainWindow : Window
{
    public IBidirectionalGraph<object, IEdge<object>> _graphToVisualize;
    public IBidirectionalGraph<object, IEdge<object>> GraphToVisualize
    {
        get { return _graphToVisualize; }
    }
    public MainWindow(int[,] matrix, string[] names)
    {
        CreateGraphToVisualize(matrix, names);
        InitializeComponent();
    }
    public void CreateGraphToVisualize(int[,] matrix, string[] names)
    {
        var g = new BidirectionalGraph<object, IEdge<object>>();
        //add the vertices do the graph
        string[] vertices = new string[matrix.GetLength(0)];
        for (int i = 0; i < matrix.GetLength(0); i++)
        {
            vertices[i] = names[i];
            g.AddVertex(vertices[i]);
        }
        for (int i = 0; i < matrix.GetLength(0); i++)
        {
            for (int j = 0; j < matrix.GetLength(1); j++)
            {
                if (i == j) break;
                if(matrix[i,j]==1) g.AddEdge(new Edge<object>(vertices[i], vertices[j]));
            }
        }
        _graphToVisualize = g;
    }
}

非常感谢。

如何“;分散”;使用Graphsharp和WPF从图中提取节点

图形使用力导向算法(您指定LayoutAlgorithmType="FR"(布局算法采用FRLayoutParametersBase类型的参数,该参数具有吸引乘数和排斥乘数。调整这些数字将导致节点的空间不同。我不熟悉GraphSharp,以前也从未使用过它,所以不确定什么是最合适的方法。