32

这里的图表是指类似于这些图像的东西:

理想的解决方案是:

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

我也有兴趣了解可能用作此类工作起点的项目。如果它需要一些发展来实现我想要的,那么我准备好解决它。这个目标中最复杂的部分似乎是在合理的时间范围内获得图形布局。

4

14 回答 14

12

Graph#也是另一种选择。我没有亲自使用它,但我一直想四处看看它。

于 2009-04-27T03:19:05.627 回答
8

Microsoft Research 为 .NET 提供了一个名为 MSAGL(Automatic Graph Layout,以前称为 GLEE)的工具。

MSAGL 可在此处获得:http ://research.microsoft.com/en-us/downloads/f1303e46-965f-401a-87c3-34e1331d32c5/default.aspx

免责声明:我没有使用该工具,所以我不知道它是否适合您(我也不知道许可条件,似乎仅适用于非商业应用程序)。但至少它看起来很有趣。

于 2009-02-26T10:09:58.277 回答
8

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

在此处输入图像描述 在此处输入图像描述 在此处输入图像描述

于 2009-05-19T07:50:06.103 回答
3

在我看来,Graphviz 今天仍然是最好的图形库之一。但是,将其集成到 .Net 是一件痛苦的事情。

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

今天可能存在更好的解决方案;那时的 GLEE 还很成熟,从那时起我还没有看到微软取得的进展。

于 2009-02-26T17:02:41.000 回答
2

我使用了 NodeXL,http://www.codeplex.com/NodeXL,它是一个 .Net 3.5 库(也是一个 Excel 插件)。NodeXl 由 Microsoft Research 开发,非常简洁:它具有可视化算法和一些指标,但仍处于早期开发阶段。如果您是一位经验丰富的 .Net 开发人员,那么我肯定会看看它。

但是,如果您了解 Python,那么我肯定会推荐 Networkx 及其表亲 pygraphviz,它是 Graphviz 的接口。我已经使用了这两种方法,并且我使用 Python / Networkx 的效率比使用 NodeXL 时要高得多。

GLEE 是 Microsoft 的封闭源代码库,您只能在非商业软件中免费使用,而 NodeXL 是 Microsoft 的开源方式,但您可以在您开发的产品中免费使用它。

于 2009-06-02T02:56:01.023 回答
2

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

于 2011-08-31T11:08:58.950 回答
1

Mindscape的男孩们有这样的工具

具有想象力的名称WPF Flow Diagrams

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

于 2009-02-26T12:19:56.470 回答
1

使用QuickGraphGraphViz输出点文件。我在最近的一个项目中这样做了,它似乎工作得很好。在此处查找用于解析 .plain 文件的示例代码,或使用我的项目在此处作为仅输出 .png 图像的参考。

于 2009-04-27T02:43:22.203 回答
1

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

它不支持 Graphviz 所做的一切(特别是在某些形状类型方面)。此外,文档可能会更好,但如果不是有史以来最完善的 MS 产品,它也相当可靠。

它确实勾选了您作为要求提到的所有项目,尽管“查看器上”的重新组织仅支持拖动移动节点、重新路由边缘和重新定位标签。该图不会通过重新定位任何其他项目来响应这些元素的移动。

于 2009-05-18T05:46:28.143 回答
1

我已经使用了这个http://www.codeproject.com/Articles/484616/MVVM-Diagram-Designer它是一个开源的,非常易于使用。代码解释得很好。

于 2013-10-19T17:41:09.220 回答
0

它不是 .NET,但一个经常被引用的用于渲染图形的工具包是 AT&T Graphviz。我自己只使用过独立的应用程序,但源代码可以在类似于开源许可证的情况下获得。

Graphviz 被流行的代码文档工具doxygen用于自动为其生成的文档绘制各种图表。

于 2009-02-26T10:13:49.830 回答
0

我一直在玩 GLEE/MSAGL,实际布局本身足以满足我的需要,但是我希望能够更好地控制节点内部的实际内容,而不仅仅是像现在这样的单个值。

例如,我希望在单击节点中的扩展器之前隐藏“详细信息”,或者双击节点或用鼠标悬停。

假设 GLEE 无法做到这一点,现在是否有任何可用的纯 .NET 解决方案可以做到这一点?

于 2009-04-27T02:32:01.840 回答
0

去年夏天,当我做一些涉及图表的工作时,我发现不太昂贵的最佳选择是在 SVG 中手动完成,即从一堆字符串中写出一个 SVG 文件,然后使用 Inkscape 将其渲染为图像。

这不是一个快速简单的解决方案,但它确实允许近乎无限的定制,因此如果您必须组织图表或基于连接等进行空间组织,这可能会很好。

于 2009-02-26T15:31:22.997 回答
0

Northwoods在其GoLayout产品中提供了纯 .NET 解决方案。它们提供树、力导向和分层有向图(这不是 Sujiyama 效应,但对于许多数据集(如果不是大多数数据集)来说并不算太远)。1790 美元/座,价格昂贵。还有一些限制:最重要的是,它们的实现是为“人类可读”图设计的。我已经给它提供了超过 5,000 个节点的数据集并且没有任何问题,但我也可以生成少于 500 个节点的数据集,这会导致它出现堆栈溢出(递归太深)。根据您的域,它可能(或可能不)非常适合。如果您需要处理任何数据集的通用布局包,我建议使用 GraphViz 而不是 Northwoods。

我还没有使用过他们的任何 WPF 功能,但我知道他们拥有这些功能。我在 WinForms 领域使用他们的东西已经有一段时间了。

于 2009-05-18T05:32:31.713 回答