我正在尝试为使用 Ruby 的语言编写流程图生成器。
我想知道是否有任何库可用于为各种流程图元素绘制各种形状并将文本写入这些形状。
如果可以的话,我真的更希望不必编写代码来绘制基本形状。
有人可以向我指出一些参考文档以及使用该库的示例吗?
在Graphviz中将您的流程图写成有向图或无向图。Graphviz 有一种语言dot可以很容易地生成图形。只需生成点文件,通过 Graphiviz 运行它,即可获得图像。
graph {
A -- B -- C;
B -- D;
C -- D [constraint=false];
}
digraph {
A [label="start"];
B [label="eat"];
C [label="drink"];
D [label="be merry"];
A -> B -> C;
C -> D [constraint=false];
B -> D [ arrowhead=none, arrowtail=normal]; // reverse this edge
}
您可以在 Graphviz 中控制节点形状等等。
听起来您将主要受到您正在构建的任何用户代理的功能的限制;如果这是一个 Web 项目,绘图功能将取决于浏览器。由于 Ruby 在服务器端运行,您至少需要一些 JavaScript 来允许拖动/缩放等。有很多 JavaScript 用于矢量绘图的示例(只是谷歌“javascript 图形库”),但都需要编码,并且我还没有看到任何优雅地抽象这个的库。
ImageMagick 有一个名为 RMagick 的 Ruby 绑定(有时也有其他名称,具体取决于存储库)。(链接)我自己没有使用过它,但我相信它会满足您的需求。你需要做一些编码,但它是沿着
draw.rectangle(x1, y1, x2, y2)
draw.polygon(x1, y1,...,xN, yN)
简单的答案是(在撰写本文时)您想要的几乎肯定不存在。对不起!
如果您是基于 Windows 的,那么我会在 .NET 空间中寻找产品,我希望您会在其中找到一些东西。不过,您可能需要支付真金白银。我想,如果你够勇敢,你也许可以使用 IronRuby 与它交谈。
在非 MS 环境中,我希望有一个基于 Java 的解决方案。如前所述,在 Web 世界中,您将希望一些基于 JavaScript 的东西,或者更有可能的是来自 Flash(或者甚至是 Silverlight?)世界的东西。
实际上,如果您想留在 Ruby 中并且不介意一些风险,Silverlight 可能是一种可行的方法 - 假设 DLR 的东西确实有效(这里没有经验)。Ruby——尽管我很喜欢它——几乎没有围绕它的最成熟的 GUI 结构。
更新:自从写这篇文章(接近 5 年前)以来,情况有所改善 - 一点点。虽然我仍然不知道任何特定的 Ruby 图形绘制库,但这里 (Github ) 或. 我发现对于简单的图表,直接从 Ruby 编写脚本是完全可能的。gem install ruby-graphviz
我完全确定,但请查看 cairo bindings for ruby。用于文本的 Pango。我目前正在调查并遇到此页面。