我正在尝试使用PlantUML制作活动图(新的beta语法)。
到目前为止,我提出了(简化):
@startuml
start
:A;
if (Q1) then (yes)
:B;
if (Q2) then (yes)
:D;
else (no)
:E;
endif
else (no)
:C;
endif
stop
@enduml
这意味着,做A,如果是第一个问题做B否则C. 在B问问题2之后,如果是,则做D,如果没有做E。
当问题2的答案为否时,我不想指向E,而是我想参加活动C,但我不知道如何引用它。如果我把:C;在那里(而不是:E;它只是被解释为一个新的活动(但它的流程应该从C那里继续)。我认为有一种方法可以用PlantUML绘制这样的流程,但我不会这样做。看到了。
引用已定义的活动的最佳方式是什么?
答案 0 :(得分:2)
出于这个原因,我搬到了graphviz。 Plantuml为某些类型的图表提供了一些简单的语法,但是为了在多个方向上移动它会变得具有挑战性。
我尝试将plantuml用于流程图,但当我接近状态机时,我转向graphviz。因此,针对您的问题的graphviz解决方案将如下所示。
原图:
digraph drawing1 {
A -> B [label="yes"]
A -> C [label="no"]
B -> D [label="yes"]
B -> E [label="no"]
}
当没有时,让B转到C.
digraph drawing1 {
A -> B [label="yes"]
A -> C [label="no"]
B -> D [label="yes"]
B -> C [label="no"]
}
在Windows中,一旦安装了graphviz并想要生成png输出,就可以使用包含有向图代码的文件转到目录;让我们调用文件test.gv
。
然后运行以下命令以生成输出test.png
。
dot test.gv -Tpng -o test.png
如果要使节点B和C彼此对齐,可以使用以下代码更改。
digraph drawing1 {
A -> B [label="yes"]
A -> C [label="no"]
B -> D [label="yes"]
B -> C [label="no"]
{rank=same B C}
}
我放弃了用植物解决类似的问题。
答案 1 :(得分:0)
这是我发现的工作......
|Main|
start
:SomeClass constructor called;
:buildTreeListOpts called;
if (hasOptions()) then (yes)
else (no)
:require DataLoader;
:call getData;
|#Cyan|DataLoader|
:getData;
if (hasDataInLocalStorage()) then (yes)
else (no)
|DataLoader|
:XHR fetch options;
:callback;
endif
|Main|
endif
:finalize;
stop
继续练习他们的现场演示,直到找到有用的东西。 http://plantuml.com/
祝你好运。答案 2 :(得分:0)
一月份的PlantUML论坛上有a similar question,但是基本上解决方案是复制这种情况下的常见活动。因此,在您的情况下,它将给出:
@startuml
start
:A;
if (Q1) then (yes)
:B;
if (Q2) then (yes)
:D;
else (no)
:E;
:C;
endif
else (no)
:C;
endif
stop
@enduml
目前看来,只能对此使用一种解决方法。
答案 3 :(得分:0)
我当前的解决方案(使用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