Rod*_*rik 5 uml activity-diagram plantuml
我正在尝试使用 PlantUML(新测试语法)制作活动图。
到目前为止,我想出了(简化的):
@startuml
start
:A;
if (Q1) then (yes)
:B;
if (Q2) then (yes)
:D;
else (no)
:E;
endif
else (no)
:C;
endif
stop
@enduml
Run Code Online (Sandbox Code Playgroud)
这意味着,如果第一个问题是,则执行A,否则执行B,否则执行C。在B问问题2之后,如果是,则执行D,如果否,则执行E。
当问题 2 的答案为“否”时,我不想指向 E,而是转到活动 C,但我不知道如何引用它。如果我输入 :C; 那里(而不是:E;它只是被解释为一个新活动(但是它的流程应该从那里的 C 继续)。我假设有一种方法可以使用 PlantUML 绘制这样的流程,但我还没有看到它。
引用已定义的活动的最佳方式是什么?
小智 7
正是出于这个原因,我转向了graphviz 。Plantuml 为某些类型的图表提供了一些简单的语法,但对于在多个方向上移动就变得具有挑战性。
我尝试使用 plantuml 绘制流程图,但当我接近状态机时,我转向 graphviz。因此,您的问题的 graphviz 解决方案如下所示。
原图:
digraph drawing1 {
A -> B [label="yes"]
A -> C [label="no"]
B -> D [label="yes"]
B -> E [label="no"]
}
Run Code Online (Sandbox Code Playgroud)
当没有时让 B 转到 C。
digraph drawing1 {
A -> B [label="yes"]
A -> C [label="no"]
B -> D [label="yes"]
B -> C [label="no"]
}
Run Code Online (Sandbox Code Playgroud)
如果您想让节点 B 和 C 彼此对齐,可以使用以下代码更改。
digraph drawing1 {
A -> B [label="yes"]
A -> C [label="no"]
B -> D [label="yes"]
B -> C [label="no"]
{rank=same B C}
}
Run Code Online (Sandbox Code Playgroud)
我放弃了用 plantuml 解决与你类似的问题。
在 Windows 中,一旦安装了 graphviz 并想要生成 png 输出,您就可以进入包含有向图代码的文件的目录;我们将该文件称为test.gv.
然后运行以下命令来生成输出test.png。
dot test.gv -Tpng -o test.png
Run Code Online (Sandbox Code Playgroud)
我当前的解决方案(使用 plantUML 一周左右)是这样的:
@startuml
start
:A;
if (Q1) then (yes)
:B;
if (Q2) then (yes)
:D;
else (no)
:E;
:call C>
endif
else (no)
:call C>
endif
stop
partition C {
:do 1st C thing;
:do 2nd C thing;
}
@enduml
Run Code Online (Sandbox Code Playgroud)