使用Python或Perl生成UML序列图

6
我有一些文本,将处理生成一个UML序列图像。我可以使用Python或Perl处理文本,将其转换为现有的“文本到UML”工具的格式,但我试图消除这个额外的步骤,并直接从Python / Perl脚本中输出图像。
是否有任何可以使用的Python或Perl软件包/模块?
2个回答

9

有许多Python的替代品。

如果你想从头开始生成图像,你可以考虑使用PIL(Python Imaging Library),这是Python的“事实上”的图像库。

然而,特别是对于序列图,blockdiag图像生成库(也使用PIL)包括一个名为seqdiag的序列图生成器。例如,以下是如何定义和生成一个简单但完整的序列图,包括图表定义:

from seqdiag import parser, builder, drawer

diagram_definition = u"""
   seqdiag {
      browser  -> webserver [label = "GET /index.html"];
      browser <- webserver;
   }
"""
tree = parser.parse_string(diagram_definition)
diagram = builder.ScreenNodeBuilder.build(tree)
draw = drawer.DiagramDraw('PNG', diagram, filename="diagram.png")
draw.draw()
draw.save()

请查看http://blockdiag.com/en/seqdiag/examples.html以获取更多示例(序列)图定义和样式选项。


看起来正是我需要的。由于我比较熟悉Python,所以我会先尝试这个,谢谢。 - none
我尝试从命令行运行它,效果很好,但是如何在脚本中使用它呢?我尝试导入模块,但似乎没有任何函数或类。我想我可以创建一个子进程,但首先需要给出一个文件输出,这将排除做这件事的整个意义。 - none
Blockdiag的Google小组似乎有一些指示:例如,可以参考https://groups.google.com/forum/?fromgroups=#!topic/blockdiag-discuss/rXHXM9AoELQ。 - Petri
这似乎只适用于 blockdiag。我已经向讨论组询问了 seqdiag。让我们看看他们会说什么,谢谢。 - none
啊,抱歉,我简单地忘记更改import了。现在已经修复了。同时请注意,如果您使用标签(如示例中所示),则图表定义必须为Unicode(在示例中也已修复)。 - Petri
显示剩余3条评论

2

有几个Perl模块可以实现这个功能,请参见UML::State

从概述中看:

use UML::State;

my $diagram = UML::State->new(
  $node_array,
  $start_list,
  $accept_list,
  $edges
);

# You may change these defaults (doing so may even work):
$UML::State::ROW_SPACING = 75;  # all numbers are in pixels
$UML::State::LEFT_MARGIN = 20;
$UML::State::WIDTH       = 800;
$UML::State::HEIGHT      = 800;

print $diagram->draw(); 

CPAN是你的好朋友。:)


我认为这个是用于状态图的,但我也在同一页上发现了UML::Sequence,用于序列图,谢谢。 - none
@gokcehan 不好意思搞错了,但是是的,如果你需要的话,很有可能有一个CPAN模块可以实现。 - daniel gratzer
由于某些原因,我无法安装这些。可能只是因为我对CPAN不熟悉。有人可以确认一下吗? - none
我已经成功安装它们了,如果在Linux上,请尝试使用“sudo cpanm UML::State”。 - daniel gratzer
@jozefg - 那你为什么不相应地改变你的答案呢? - Petri
显示剩余5条评论

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