35

我需要绘制表示有限状态机的图形。我尝试使用Graph#。这很酷,但它缺少一些东西。没有文档,这使得它很难使用,我无法使用其自定义 WPF 控件绘制循环(从顶点到自身的边缘),并且标签边缘也没有实现。在 WPF 中是否有任何其他库或建议的绘图方式?

我需要的功能:

  • 边缘标记
  • 循环(循环)边缘
  • 顶点标注
  • 围绕顶点绘制单/双圆 - 顶点应表示为带有标签的圆(或双圆)

有任何想法吗?


编辑:

我得到了一些建议,对此我很感激。但是,我想我还没有把我的想法说清楚。我需要这种图表:

http://static.max99x.com/school/automata-editor1.png。

到目前为止建议的所有工具都不适合这种情况,或者我可能不知道如何在这种情况下应用它们。

4

6 回答 6

76

选项 1:Microsoft 自动图形布局

自由的

http://research.microsoft.com/en-us/projects/msagl/

GitHub

https://github.com/Microsoft/automatic-graph-layout.git

Winforms >> WPF

它是 WinForms,但只需几行代码即可将其导入 WPF。

使用 Microsoft 自动图形布局可视化节点和边

http://www.codeguru.com/csharp/.net/net_wpf/article.php/c16963/Visualizing-Nodes-and-Edges-with-Microsoft-Automatic-Graph-Layout.htm

例子

http://research.microsoft.com/en-us/projects/msagl/#Layouts

常问问题

http://research.microsoft.com/en-us/projects/msagl/faq.aspx

选项 2:QuickGraph - 支持 Graphviz 的 100% C# 图形库

自由的

http://quickgraph.codeplex.com/

这个库是 100% C#。不要被“Graphviz Support”这一行误导,这意味着它使用 C# 代码从 Graphviz 导入输出。看不到 C++ 代码。

http://www.codeproject.com/Articles/5603/QuickGraph-AC-graph-library-with-Graphviz-Sup

有一个 NuGet 包。

从 2003 年到 2011 年(8 年!!)正在开发中。

选项 3:GraphSharp

自由的

http://graphsharp.codeplex.com/

  • 取决于 QuickGraph(100% C#)。
  • 支持异步/等待(很好!)。

演示

https://sachabarbs.wordpress.com/2010/08/31/pretty-cool-graphs-in-wpf/

笔记

这个工作非常好,在几个小时内启动并运行。它还支持DataTemplates,因此每个节点都可以具有您想要的任何外观。

选项 4:Graphviz4net

自由的

http://graphviz4net.codeplex.com/

选项 5:GoDiagram

$$$

http://www.nwoods.com/products/godiagram/index.html

选项 6:WPF 的图形树绘制控件

自由的

http://www.codeproject.com/Articles/29518/A-Graph-Tree-Drawing-Control-for-WPF

没有合适的。这是一个树形布局。

选项 7:使用 WPF 可视化具有循环依赖关系的图形

自由的

http://www.codeproject.com/Articles/43776/Using-WPF-to-Visualize-a-Graph-with-Circular-Depen

选项 8:GraphViz

自由的

http://www.graphviz.org/Download..php

这不是 C#,并且使用非托管代码。但是,它有 C# 包装器。

由 AT&T 开源,请参阅“AT&T 研究人员 — 发明服务背后的科学”和“研究主页 > 产品组合 > 软件工具”: http ://www.research.att.com/software_tools?fbid=NEk8_gxLLEc

资源

http://www.graphviz.org/Download_source.php

他们还开源了 Rserve!

选项 9:Shields.GraphViz

自由的

GraphViz 的包装器。

https://github.com/timothy-shields/graphviz

选项 10:NetworkView:用于可视化和编辑网络、图形和流程图的 WPF 自定义控件

自由的

http://www.codeproject.com/Articles/182683/NetworkView-A-WPF-custom-control-for-visualizing-a

这个库允许用户在节点之间创建连接,这可能有点矫枉过正。

例子

https://channel9.msdn.com/coding4fun/blog/Noodling-Network-Nodes-Digraming-with-the-NetworkView-custom-WPF-control

这都是MVVM。

选项 11:Gephi - 开放图可视化平台

自由的

http://gephi.github.io/

不是 WPF 图形库,但提供了很好的图形外观的很好的例子。教程很棒。

选项 12:Telerik

$$$

http://www.telerik.com/products/wpf/diagrams.aspx

选项 13:基础设施

$$$

http://www.infragistics.com/samples/wpf/network-node/overview http://www.infragistics.com/samples/wpf/network-node/relationship-between-nodes http://www.infragistics。 com/samples/wpf/network-node/custom-node-style

选项 14:WPF 图表设计器

自由的

与其说是绘图工具,但它确实向您展示了如何在画布上移动、调整大小和旋转任何类型的对象。

http://www.codeproject.com/Articles/22952/WPF-Diagram-Designer-Part-1

选项 15:MVVM 图表设计器

自由的

而且,有人在 MVVM 中重新实现了这一点:与其说是图形工具,但它确实向您展示了如何在画布上移动、调整大小和旋转任何类型的对象。

http://www.codeproject.com/Articles/484616/MVVM-Diagram-Designer

选项 16:yWorks - 绘图公司

$$$

https://www.yworks.com/en/products_yfiles_practicalinfo_gallery.html https://www.yworks.com/en/products_yfileswpf_about.html

选项 17:MindFusion

$$$

http://www.mindfusion.eu/features-wpfdiagram.html http://www.mindfusion.eu/

选项 18:Dot2WPF

自由的

用于查看 DOT 图的 WPF 控件。

http://www.codeproject.com/Articles/18870/Dot-WPF-a-WPF-control-for-viewing-Dot-graphs

选项 19:同步融合

$$$

https://www.syncfusion.com/products/wpf/diagram

选项 20:添加流

$$$

https://www.componentsource.com/product/addflow-wpf-standard

选项 21:拉萨尔

$$$

http://www.lassalle.com/

选项 22:动态数据显示

http://dynamicdatadisplay.codeplex.com/

选项 23:Nevron

$$$

https://www.nevron.com/

仅适用于 WinForms,但可以导入 WPF。但是,不能对每个单独的项目进行模板化,这是 WPF 解决方案的一大优势。

谷歌搜索词

  • “工作流程 wpf 绘图”
  • “wpf 图形库”
  • “wpf 状态机库”
于 2015-07-21T11:31:00.013 回答
9

Graphviz + GraphViz C# Wrapper正是我想要的。

于 2013-06-18T14:18:47.753 回答
5

我认为您可以使用适用于 WPF 的 GraphX 库轻松实现您的所有要求。它基于 Graph# 并有详细的文档。 http://panthernet.ru/en/projects-en/graphx-en

它支持边缘标记和自循环边缘以及边缘和顶点模板。如果您有任何问题,可以在网站的讨论部分提出。

于 2013-06-18T10:11:50.697 回答
4

如果这是在商业场景中,您还应该看看yWorks 的 yFiles

它具有您正在寻找的所有功能,其最突出的功能是自动排列图表的能力。如果您有更大的状态机,或者甚至在代码中创建状态机,这将帮助您清楚地自动排列甚至大图。同样对于标签,还有自动标签放置算法,它会找到标签的位置,以便它们不会相互重叠或与其他不相关的元素重叠。

您可以在此 Youtube 视频中看到库的实时运行,但您也可以立即在线玩 Silverlight 现场演示,或者只是评估库并使用示例源。

免责声明:我在 yWorks 工作,但我不代表我的雇主。

于 2013-06-18T11:59:16.107 回答
4

在你可以在这里阅读的关于二分图的类似问题中, 我得到了关于NetworkView的建议

它具有循环、顶点标签、自定义顶点可视化,您可以轻松地将其编辑为圆形。不过,认为它没有边缘标签。试一试。

如果你决定自己做,至少这是一个很好的开始。

您可能想看看Codeproject 文章“Visualize a graph with circular dependencies”

于 2013-05-15T19:43:34.143 回答
2

以下是一些选项:

我希望你能找到你需要的东西。那些花钱的人也有免费的足迹。使用telerik 或visifire 可以获得一些非常好的结果!

于 2013-05-10T14:47:37.267 回答