Skip to content

vfrz/DotNetGraph

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

59 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

DotNetGraph

Logo

Create GraphViz DOT graph with dotnet (compatible with .NET Standard 2.0 and higher).

Current stable version: #

Latest version: #

Usage

Create a graph (DotGraph)

var graph = new DotGraph().WithIdentifier("MyGraph");

var directedGraph = new DotGraph().WithIdentifier("MyDirectedGraph").Directed();

Create and add a node (DotNode)

var myNode = new DotNode()
    .WithIdentifier("MyNode")
    .WithShape(DotNodeShape.Ellipse)
    .WithLabel("My node!")
    .WithFillColor(DotColor.Coral)
    .WithFontColor(DotColor.Black)
    .WithStyle(DotNodeStyle.Dotted)
    .WithWidth(0.5)
    .WithHeight(0.5)
    .WithPenWidth(1.5);

// Add the node to the graph
graph.Add(myNode);

Create and add an edge (DotEdge)

// Create an edge with identifiers
var myEdge = new DotEdge().From("Node1").To("Node2");

// Or with nodes and attributes
var myEdge = new DotEdge()
    .From(node1)
    .To(node2)
    .WithArrowHead(DotEdgeArrowType.Box)
    .WithArrowTail(DotEdgeArrowType.Diamond)
    .WithColor(DotColor.Red)
    .WithFontColor(DotColor.Black)
    .WithLabel("My edge!")
    .WithStyle(DotEdgeStyle.Dashed)
    .WithPenWidth(1.5);

// Add the edge to the graph
graph.Add(myEdge);

Create a subgraph / cluster

// Subgraph identifier need to start with "cluster" to be identified as a cluster
var mySubgraph = new DotSubgraph().WithIdentifier("cluster_0");

// Create a subgraph with attributes (only used for cluster)
var mySubgraph2 = new DotSubgraph()
    .WithIdentifier("cluster_1")
    .WithColor(DotColor.Red)
    .WithStyle(DotSubGraphStyle.Dashed)
    .WithLabel("My subgraph!");

// Add node, edge, subgraph
subGraph.Add(myNode);
subGraph.Add(myEdge);
subGraph.Add(mySubgraph2);

// Add subgraph to main graph
graph.Add(mySubgraph);

Compile to DOT format

await using var writer = new StringWriter();
var context = new CompilationContext(writer, new CompilationOptions());
await graph.CompileAsync(context);

var result = writer.GetStringBuilder().ToString();

// Save it to a file
File.WriteAllText("graph.dot", result);

Credits

Logo: https://www.flaticon.com/free-icon/flow-chart_4411911