GraphVizProxy 1.0.0
dotnet add package GraphVizProxy --version 1.0.0
NuGet\Install-Package GraphVizProxy -Version 1.0.0
<PackageReference Include="GraphVizProxy" Version="1.0.0" />
<PackageVersion Include="GraphVizProxy" Version="1.0.0" />
<PackageReference Include="GraphVizProxy" />
paket add GraphVizProxy --version 1.0.0
#r "nuget: GraphVizProxy, 1.0.0"
#:package GraphVizProxy@1.0.0
#addin nuget:?package=GraphVizProxy&version=1.0.0
#tool nuget:?package=GraphVizProxy&version=1.0.0
GraphVizProxy
.Net library to generate GraphViz output from DOT language.
Supported platforms
- Windows - you need to have GraphViz binaries on your system.
- Linux - you need to have
libgraphviz-devpackage installed (becauselibcgraph.soandlibgvc.soare used by this library).
Features
- Generate various outputs like
PNG,SVG,JSON. - Generate rendering information like node positions, edge splines, drawing commands, etc.
How it works
The library uses GraphViz binaries directly via P/Invoke. To generate the rendering information, the library uses the JSON output and deserializes it into a convenient to use C# object.
Examples
Generate svg, png or other format from DOT language
// Assume you have a graph description in the DOT language
var graphDescription = "digraph G { a -> b }";
// First you need to specify the location of the GraphViz binaries.
// This location needs to contain dlls like "gvc.dll" and "cgraph.dll".
// This step is not needed on Linux if you have the binaries installed via a package manager.
GraphViz.SetGraphVizBinariesLocation($"{Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location)}/GraphViz_Binaries");
// You can generate various outputs using GraphViz binaries
var pngBinaryArray = GraphViz.Generate(graphDescription, LayoutEngine.Dot, OutputType.Png);
// For text outputs you need to use `Encoding.UTF8.GetString` to get the string
var svgBinaryArray = GraphViz.Generate(graphDescription, LayoutEngine.Dot, OutputType.Svg);
var svg = Encoding.UTF8.GetString(svgBinaryArray);
var jsonBinaryArray = GraphViz.Generate(graphDescription, LayoutEngine.Dot, OutputType.Json);
var json = Encoding.UTF8.GetString(jsonBinaryArray);
Generate rendering graph information
This example shows how you can get the rendering information about the graph. It can be useful if you want to draw a graph yourself or if you want to use GraphViz to calculate the positions of UI elements.
// Assume that you have a graph description in the DOT language
// and you want to get all information about how the graph should be rendered.
// For example, node positions, edge splines, drawing commands, etc.
var graphDescription = "digraph G { a -> b }";
// First you need to specify the location of the GraphViz binaries.
// This location needs to contain dlls like "gvc.dll" and "cgraph.dll".
// This step is not needed on Linux if you have the binaries installed via a package manager.
GraphViz.SetGraphVizBinariesLocation($"{Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location)}/GraphViz_Binaries");
// You can generate the `Graph` object. It uses information from the GraphViz JSON output.
var graph = GraphViz.Generate(graphDescription, LayoutEngine.Dot);
// Then you can access the Graph object to get access to the rendering information.
foreach(var node in graph.Nodes)
{
Console.WriteLine($"Node {node.Name} {node.Label}");
foreach (var drawCommand in node.DrawCommands)
{
Console.WriteLine($"Command {drawCommand.GetType()}");
}
}
foreach (var edge in graph.Edges)
{
Console.WriteLine($"Node {edge.Name} {edge.Label}");
}
Prebuild event to download GraphViz binaries
If you have a Windows project, instead of downloading GraphViz binaries manually, you can use the following prebuild event.
It will download the required binaries to the GraphViz_Binaries folder next to the executable.
<Target Name="DownloadGraphviz" BeforeTargets="BeforeBuild" Condition="!Exists('$(BuildFolder)/Graphviz.zip')">
<DownloadFile SourceUrl="https://gitlab.com/api/v4/projects/4207231/packages/generic/graphviz-releases/12.2.1/windows_10_cmake_Release_Graphviz-12.2.1-win64.zip" DestinationFolder="$(BuildFolder)" DestinationFileName="Graphviz.zip" />
<Unzip SourceFiles="$(BuildFolder)Graphviz.zip" DestinationFolder="$(BuildFolder)" />
</Target>
<Target Name="CopyGraphvizBinariesToOutputFolder" AfterTargets="DownloadGraphviz" BeforeTargets="BeforeBuild" Condition="!Exists('$(OutputPath)GraphViz_Binaries')">
<ItemGroup>
<GraphVizBinaries Include="$(BuildFolder)/Graphviz-*/bin/*.dll;$(BuildFolder)/Graphviz-*/bin/config6" />
</ItemGroup>
<MakeDir Directories="$(OutputPath)GraphViz_Binaries" />
<Copy SourceFiles="@(GraphVizBinaries)" DestinationFolder="$(OutputPath)GraphViz_Binaries" />
</Target>
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
| .NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
| .NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
| .NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
| MonoAndroid | monoandroid was computed. |
| MonoMac | monomac was computed. |
| MonoTouch | monotouch was computed. |
| Tizen | tizen40 was computed. tizen60 was computed. |
| Xamarin.iOS | xamarinios was computed. |
| Xamarin.Mac | xamarinmac was computed. |
| Xamarin.TVOS | xamarintvos was computed. |
| Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.0
- No dependencies.
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|