【问题标题】:C# Drawing a graph using QuickGraph and GraphVizC# 使用 QuickGraph 和 GraphViz 绘制图形
【发布时间】:2015-08-31 16:25:02
【问题描述】:

我希望我不会显得懒惰,但我真的很难使用 QuickGraph 和 GraphViz 绘制图形,因为我似乎无法在网上找到太多文档。我对 C# 接口很陌生,所以我发现它们也很混乱。谁能给我一个简单的工作示例,或者指导我一些好的示例和文档?

谢谢。

【问题讨论】:

    标签: c# graphviz quickgraph


    【解决方案1】:

    Quickgraph-to-Graphviz-export 不能写入文件,所以需要实现 IDotEngine 来处理文件写入。

    public class FileDotEngine : IDotEngine
    {    
        public string Run(GraphvizImageType imageType, string dot, string outputFileName)
        {
            using (StreamWriter writer = new StreamWriter(outputFileName))
            {
                writer.Write(dot);    
            }
    
            return System.IO.Path.GetFileName(outputFileName);
        }
    }
    

    然后你可以这样调用Graphviz算法:

    GraphvizAlgorithm<TNode, TEdge> graphviz = new GraphvizAlgorithm<TNode, TEdge>(this.Graph);
    graphviz.FormatVertex += (sender, args) => args.VertexFormatter.Comment = args.Vertex.Label;
    graphviz.FormatEdge += (sender, args) => { args.EdgeFormatter.Label.Value = args.Edge.Label; };
    
    graphviz.Generate(new FileDotEngine(), filePath);
    

    创建的点文件可以传递给graphviz。 See Graphviz Dot usage here in the dotguide

    【讨论】:

    • 谢谢 clx。该程序现在生成一个图,但顶点没有正确标记。我想这与“FormatVertex”和“FormatEdge”事件处理行有关。但是,我的 IDE 不喜欢 args.Vertex.Labelargs.Edge.Label 中的“标签”。知道为什么不?
    • @LordCat TNodeTEdge 中没有 Label 属性。从this example on GitHub 开始,也许你不应该为.FormatEdge 事件做任何事;对于.FormatVertex,只需执行args.VertexFormatter.Label = args.Vertex.ToString();
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-27
    • 1970-01-01
    • 2019-10-27
    • 1970-01-01
    相关资源
    最近更新 更多