我正在尝试使用Ruby为一种语言编写流程图生成器。
我想知道是否有任何库可用于为各种流程图元素绘制各种形状并将文本写入这些形状。
如果我能提供帮助,我真的不想编写用于绘制基本形状的代码。
是否有人可以通过使用该库的示例向我指出一些参考文档?
答案 0 :(得分:17)
在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中控制节点形状等等。
答案 1 :(得分:3)
听起来你主要受限于你正在构建的任何用户代理的能力;如果这是一个Web项目,绘图功能将取决于浏览器。由于Ruby在服务器端运行,你至少需要一些JavaScript来允许拖动/缩放等。有很多JavaScript用于矢量绘图的例子(只是谷歌“javascript图形库”),但都需要编码,我还没有看到任何优雅抽象的图书馆。
ImageMagick有一个名为RMagick的Ruby绑定(有时以其他名称知道,具体取决于存储库)。 (Link) 我自己没有使用它,但我相信它会做你想要的。您将需要进行一些编码,但它符合
的要求draw.rectangle(x1, y1, x2, y2)
draw.polygon(x1, y1,...,xN, yN)
答案 2 :(得分:2)
简单的答案是(在撰写本文时)您想要的几乎肯定不存在。遗憾!
如果您是基于Windows的,那么我会在.NET空间中寻找一个产品,我期待您找到一些东西。你可能不得不支付真钱。我想,如果你很勇敢,你可以使用IronRuby与它交谈。
在非MS环境中,我希望有一个基于Java的解决方案。正如已经提到的,在Web世界中,你会希望一些基于JavaScript的东西,或者更可能的东西来自Flash(或者甚至可能是Silverlight?)世界。
实际上,如果你想留在Ruby中并且不介意一些风险,那么Silverlight可能是一种方法 - 假设DLR实际上有效(没有经验)。 Ruby - 就像我喜欢它一样 - 几乎没有最成熟的GUI结构。
更新:自写这篇文章(接近5年前)以来,情况有所改善 - 一点点。虽然我还没有发现任何特定的Ruby图形绘制库,但是对Graphviz here (Github)或gem install ruby-graphviz
的支持得到了改进。我发现对于简单的图形,很可能直接从Ruby编写脚本。
答案 3 :(得分:0)
我完全确定,但请查看ruby的cairo绑定。 Pango的文字。我正在调查当前并且遇到了这个页面。