.NET中有哪些选项可用于有向或无向图的布局?

32

这里所说的图形指的是以下图片相似的东西:

理想解决方案应该满足以下条件:

  • 只使用托管代码
  • 可以输出为位图图像
  • 可以输出到WPF元素
  • 包括某种交互式表面,用于显示支持缩放、平移和节点重新组织的图形

如果有可能用作此类工作的起点,请告知我相关项目。如果需要进行一些开发来实现我想要的结果,我准备着手处理。这个目标中最复杂的部分似乎是在合理的时间框架内获取图形布局。


作为对自己的提醒,这里有一个看起来不错的Clojure库:http://lisperati.com/vijual/ - Drew Noakes
14个回答

12

Graph# 是另一个选择。我个人没有使用过它,但一直想去了解一下。


经过简短的了解,Graph# 看起来非常有趣。谢谢提供链接。 - Drew Noakes
我还没有尝试过,但不幸的是他们声称Sugiyama布局有bug。在我的经验中,这是最有用的布局,希望它能在某个时候修复。 - Drew Noakes
自从我上次评论以来,这个项目似乎真的有所进展(包括杉山布局)。虽然我还没有尝试过,但下次我需要类似的东西时,它将是我尝试的第一个库。 - Drew Noakes
是的,在最初使用GraphViz之后,我们转向了Graph#,一旦他们的算法选择得到改进。到目前为止,我对它感到非常满意,尽管我需要着手制作一个补丁来消除其中某些布局的随机因素。 - Jamie Penney

8

我之前使用过GLEE v1。它是免费的,但相当粗糙。最新版本(1.2)售价150英镑(220美元)。我想了解一些免费的解决方案。 - Drew Noakes
顺便提一下,该项目的主页在这里:http://research.microsoft.com/en-us/projects/msagl/default.aspx - Drew Noakes
NDepend使用它,因此我认为许可证允许商业利用。 http://codebetter.com/blogs/patricksmacchia/archive/2008/09/09/interactive-code-dependencies-graph.aspx - Julien Hoarau
@madgnome - 有趣。我上次看 NDepend 的时候,他们似乎在使用 GraphViz。我预计一旦你购买了许可证,就可以将它与你的应用程序一起分发,但这对我来说似乎是应该在某个地方免费提供的东西,如果可以的话,也许是我要研究的东西。 - Drew Noakes
我有更多时间研究了MSAGL,但感到失望。它在使用10K个节点和50K条边时就会出现内存不足的异常而崩溃。对于MDS布局,看起来他们为CPU使用率进行了优化,却牺牲了内存。 - Mike Post

8
我在NDepend团队工作,我确认:我们在2008年9月从GraphViz切换到MsAgl,并且MsAgl许可确实允许商业使用。这里是一些在NDepend中集成了MsAgl图形的示例图片(所有内容都是交互式的,节点可移动/选择/删除/点击,边缘可编辑/选择/删除/点击,布局可缩放,而且尽管它可能更干净,但MsAgl API足够干净以便使用):

3

我认为,Graphviz至今仍是最好的图形库之一。然而,将其整合到.Net中很麻烦。

可以调用命令行工具根据您的图形输入生成形状输出,然后读取输出并在自定义控件上布置元素,以显示graphviz计算出的任何形状。这非常笨拙,但这是我们团队几年前将graphviz与.Net集成的最佳方法。

也许今天存在更好的解决方案;当时GLEE仍处于非常初期阶段,我还没有看到微软自那时以来取得的进展。


GraphViz可以通过WinGraphViz调用COM,但输出必须写入文件,然后从磁盘读取,这很不幸。它还需要一个额外的DLL在COM中注册才能正常工作(据我所知)。DOT语法也很简单易用。 - Drew Noakes
我不知道WinGraphViz,很好。这基本上就是我们所做的,我们生成了一个dot文件,编译它并解析输出到我们的图形模型。 - Coincoin
WinGraphViz的最后一个发布版本是在2004年。不幸的是,它只有COM接口。也许有人能够想出如何在COM之间传输图像数据以避免使用文件系统。我想知道能否解析SVG输出以获取位置信息,然后将其转换为对象并进行WPF渲染... - Drew Noakes
有一个选项可以让dot(和neato及其它相关工具)输出包含布局坐标的.dot格式文件。重新解析该文件以进行绘制并不太困难。 - RBerteig
也可以编写一个 Graphviz 的包装器,以便您可以使用“在线”重新布局和拖放。 我们曾经作为“概念验证”这样做过一次,但仍然存在许多错误。 - Scoregraphic
Graphviz可以在不输出到文件的情况下工作。请参见https://dev59.com/RFPTa4cB1Zd3GeqPnvCi - Jason Kleban

2
只是为了让选项列表完整:Graphviz4Net 是Coincoin在他的回答中建议的内容的开源实现。

看起来非常不错,但是遗憾的是并不完全受控。不过WPF支持看起来很棒。 - Drew Noakes
为什么你要寻找100%托管代码?有何优势? - ChrisW

2
我使用了NodeXLhttp://www.codeplex.com/NodeXL,它是一个.Net 3.5库(也是Excel的插件)。NodeXL由微软研究开发,非常不错:它有可视化算法和一些指标,但仍处于早期开发阶段。如果你是一位经验丰富的.Net开发人员,那么我肯定会建议你看看它。
然而,如果你懂Python,那么我肯定会推荐Networkx及其兄弟pygraphviz,它是Graphviz的接口。我都用过,使用Python / Networkx时我的生产率比使用NodeXL时要高得多。
GLEE是微软的封闭源库,只能在非商业软件中免费使用,而NodeXL是微软的开源方式,您可以在您开发的产品中自由使用它。

非常感谢这个。我一定会去看看的。 - Drew Noakes

1

1
使用QuickGraph输出GraphViz的Dot文件。我在最近的一个项目中尝试了这个方法,效果非常好。点击这里查看解析.plain文件的示例代码,或者使用我的项目这里作为输出.png图像的参考。

1

Mindscape的小伙子们拥有这样一个工具

它有一个富有想象力的名字WPF Flow Diagrams

此外,还可以查看Vertigo的Family.Show演示项目,它有一个简单的形式


WPF流程图的价格为500美元,不支持自动布局。但它似乎具有良好的WPF集成。 - Drew Noakes
Family.Show 应用程序绘制家谱树,这些树通常是所有可能图形的简单子集。例如,它们是无环的。我有兴趣看到能够布置各种图形的算法,如 Sugiyama 方法。 - Drew Noakes
实际上,他们的Star Diagrams产品似乎具有某种自动布局功能。每个座位149美元,提供树形和力导向图。我没有使用过它,也不知道它如何处理一般情况,但这更符合您所寻找的内容,而不是他们的Flow Diagrams产品。 - Mike Post

1

我已经使用过MsAgl了,它非常不错。它还拥有WinForms和WPF的查看器,这对您可能很重要,也可能不重要。您不必使用查看器,因为它们与图形布局引擎相当松散耦合。

它不支持Graphviz所支持的所有东西(尤其是某些形状类型)。此外,文档可能需要改进,但如果不是最精益求精的微软产品,它就非常稳定。

它确实符合您提出的所有要求,尽管“在查看器上”重新组织仅支持拖动节点,重新路由边缘和重新定位标签。图形不会响应这些元素的移动而重新定位任何其他项目。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接