如何在.Net中可视化复杂图形?

时间:2010-05-17 09:39:47

标签: c# .net graphics graph

我需要可视化图表。我不知道如何命名(顺便说一句,如果你知道 - 如果你告诉我,我会很感激)。图形元素可以被点击是理想的(这样当用户点击一个块时,我可以处理一个指定了元素id的事件),但即使没有任何交互性,我也能活下来。我可能希望能够专注于特定节点并将所有其他节点布局为从其角度进行查看。是否有适合此任务的组件?如果不是,我应该寻找什么来帮助我开发一种算法来绘制这种具有视觉舒适布局的图形?

此图的实际特性非常常见:每个块表示来自2个操作数的派生。橙色圆圈表示2个操作数,绿色圆圈表示消费者的连接点。区分操作数位置(左或右)可能很重要,例如,如果推导表示差异或除法的数学运算(在此特定情况下,块可以是三角形,但在其他情况下,操作数本身可以使用知道哪些块是左操作数,哪些块是右边的)。另一个常见的应用是交叉集与复杂的关系。

10 个答案:

答案 0 :(得分:6)

您可以查看Graph#,但我不确定它将如何处理这样的复合节点。这可能是一个很好的起点。

答案 1 :(得分:2)

嗯,首先需要在内存中以某种方式表示它,有很多方法,比如adjacency list。然后你需要绘制它。虽然通常绘制图表很简单,但如果需要layout it则不是那么简单。看起来在你的情况下,这正是你需要做的才能达到那个漂亮的表现形式。这并不容易。

编辑:有趣的是,微软研究院似乎有library

答案 2 :(得分:2)

我不知道在这种特定情况下会有多大用处,但你可能想看看http://quickgraph.codeplex.com/

答案 3 :(得分:2)

我还想指出graphviz。它不是.NET解决方案,但您可以提供易于编写的文件以获取图形。我不认为布局是一件非常简单的事情,特别是随着节点数量的增加,所以找到一些工具应该是件好事。

答案 4 :(得分:1)

我找不到这个组件,我决定写我自己的控件,线和头,并使用它们来显示我的图形 如果需要你的我可以给它的组件和程序来证明他/ 我在visual studio 2008语言C#

中编写了组件和程序

答案 5 :(得分:1)

一个非常好看的是来自Nevron的图表工具。但它是not for free

我目前正在使用他们的图表和用户界面,他们的工作非常好。

答案 6 :(得分:1)

Graphviz4Net为图表可视化提供WPF组件。它取决于GraphViz(开源命令行图可视化工具)。

答案 7 :(得分:0)

成功使用此商业产品:GoDiagram

它支持节点上的多个端口,如您所示。

答案 8 :(得分:0)

似乎Microsoft本身在称为automatic-graph-layout的图形可视化方面做得非常好。

这是链接https://github.com/microsoft/automatic-graph-layout

答案 9 :(得分:0)

这是针对Graphviz的相当新的维护的.NET包装器:https://github.com/Rubjerg/Graphviz.NetWrapper

(免责声明:我是作者)

此包装器的工作方式与其他包装器不同,因为它直接调用了本机Graphviz代码。这意味着您不仅可以用C#代码以编程方式构造图形,而且还可以从C#代码中读取布局属性并以您想要的任何方式呈现它。后者听起来特别像您会感兴趣的东西。