Graphviz在项目中的应用

Graphviz是一个强大的图形可视化工具,它可以帮助以图形化的方式展示复杂的数据结构,如状态机或流程。本文将介绍如何在项目中集成Graphviz,以生成描述状态机或流程的图形。

Graphviz的输入是一个称为dot文件的简单文本文件,它使用自己的语法以文本方式描述图形布局。可以通过以下链接了解有关DOT语言的更多信息:。

使用方法

将Graphviz功能集成到项目中主要有两种方式:调用Graphviz提供的外部程序dot.exe,并通过文件系统进行数据传输;或者封装Graphviz的库,并在内存中进行数据传输。本文将基于Graphviz 2.38版本展示这两种方法。

首先,需要下载并解压Graphviz的Windows版本。可以从以下链接下载:[下载链接]。下载的文件包含了库和dot.exe命令行程序,用于从dot图形文件生成图像文件。

下载并解压后,需要从/release/bin文件夹中提取以下文件,这些文件是运行dot.exe并从dot图形生成图像所必需的。

接下来,将测试Graphviz是否正常工作。首先,在文件夹中打开命令窗口,并运行以下命令: dot.exe –c 这将更新config6文件,该文件包含了Graphviz可以使用的库的配置信息。如果该文件不存在或不是最新的,Graphviz(gvc.dll)可能会出现异常。

现在,可以通过在记事本中创建一个包含以下内容的dot文件来测试dot.exe: digraph g{ A-> B label = "Graph"; labelloc = top; labeljust = left; } 将其保存为testgraph.dt(使用.dt而不是.dot,因为Windows会将其识别为Office模板)。

然后,在命令行中运行: dot.exe –Tjpg –O testgraph.dt 如果一切正常,将创建一个jpg文件:testgraph.dt.jpg(所以.dt实际上并不需要)。

在这两种情况下,都需要将所需的外部(Graphviz文件)添加到Visual Studio项目中。按照以下步骤操作:

在Visual Studio项目中创建一个名为“external”的映射,然后通过文件资源管理器复制上述所有文件,包括dot.exe和config6。

接下来,在Visual Studio中,右键点击映射,选择“添加现有项”,转到外部文件夹,并将文件类型从“Visual C#文件”更改为所有文件(*.*)。现在文件将显示出来,选择所有文件(包括dot.exe和config6),然后选择添加。

现在,所需的外部文件已经添加到项目中,可以继续研究这两种方法。

Visual Studio已经将所需的外部文件添加到项目中,但它们在构建过程中不会被复制。因此,选择所有文件(包括dot.exe),并将属性设置为“始终复制”。

现在,每次构建时,包括dot.exe在内的支持文件都会被复制到输出文件夹下的/external目录中(dot.exe可以从命令行运行)。

基本上,有一个输入: String graphVizString = @" digraph g{ label=""Graph""; labelloc=top;labeljust=left;}" ; 想要的是一个位图。因此,需要创建一个名为“FileDotEngine”的类,如下所示: public static class FileDotEngine { public static Bitmap Run(string dot) { string executable = @".\external\dot.exe"; string output = @".\external\tempgraph"; File.WriteAllText(output, dot); System.Diagnostics.Process process = new System.Diagnostics.Process(); process.StartInfo.RedirectStandardOutput = true; process.StartInfo.UseShellExecute = false; process.StartInfo.CreateNoWindow = true; process.StartInfo.FileName = executable; process.StartInfo.Arguments = string.Format("{0} -Tjpg -O", output); process.Start(); process.WaitForExit(); Bitmap bitmap = null; using (Stream bmpStream = System.IO.File.Open(output + ".jpg", System.IO.FileMode.Open)) { Image image = Image.FromStream(bmpStream); bitmap = new Bitmap(image); } File.Delete(output); File.Delete(output + ".jpg"); return bitmap; } }

在调用方,只需要以下代码就可以将其作为位图使用: Bitmap bm = FileDotEngine.Run(graphVizString); 当调用FileDotEngine.Run时,应用程序将启动一个外部进程(dot.exe),将字符串作为输入文件传递给它。然后dot.exe会在磁盘上创建图像,之后应用程序再次读取图像,并将其导入为位图。

Visual Studio已经将所需的外部文件添加到项目中,但它们在构建过程中不会被复制。因此,选择所有文件,除了dot.exe,并将属性设置为“始终复制”。

现在,每次构建时,除了dot.exe之外的支持文件都会被复制到输出文件夹下的/external目录中(dot.exe不能从命令行运行)。

现在,创建一个名为“Graphviz”的新类,内容如下: public static class Graphviz { public const string LIB_GVC = @".\external\gvc.dll"; public const string LIB_GRAPH = @".\external\cgraph.dll"; public const int SUCCESS = 0; // 省略其他代码... }

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485