2015-08-28 1167 views
0

我希望我不會顯得懶惰,但我真的很努力使用QuickGraph和GraphViz繪製圖形,因爲我無法在網上找到很多文檔。我對C#接口很陌生,所以我也發現它們很混亂。任何人都可以給我一個簡單的工作例子,或指導我一些很好的例子和文檔?C#使用QuickGraph和GraphViz繪製圖形

謝謝。

回答

0

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); 

創建的dotfile可以傳遞給graphviz的。 See Graphviz Dot usage here in the dotguide

+0

謝謝你clx。該程序現在生成一個圖形,但頂點沒有正確標記。我想這與'FormatVertex'和'FormatEdge'事件處理線有關。但是,我的IDE不喜歡'args.Vertex.Label'或'args.Edge.Label'中的'標籤'。任何想法爲什麼不呢? –

+0

@LordCat'TNode'和'TEdge'中沒有'Label'屬性。從[GitHub上的這個示例]開始(https://github.com/serra/QuickgraphExamples/blob/master/src/examples/Support/Visualizer.cs#L55),也許你應該對'.FormatEdge'事件不做任何事情;和'.FormatVertex',只要'args.VertexFormatter.Label = args.Vertex.ToString();' –