温馨提示:本文翻译自stackoverflow.com,查看原文请点击:uml - How to realize direct arrows with PlantUML?
plantuml uml

uml - 如何用PlantUML实现直接箭头?

发布于 2020-05-27 10:55:04

我正在尝试使用PlantUML创建一个活动图,该活动图的确包含可返回到现有节点的箭头。

我要寻找的是一个在下图中包含两个箭头“箭头1”和“箭头2”的图: 带有所需箭头的plantuml图

我尝试使用针对活动图PlantUML beta语法创建此文件

我实现了下图:

没有所需箭头的植物图

通过编写以下PlantUML代码:

@startuml

start

:new - please check;

while (check sucessful?) is (is an error)
  :to solve;
  :in progress;
  :solved;
endwhile (not an error)

:erledigt;
note left
    reason:
     * done
     * not an error
     * not fixable
end note
stop

@enduml

是否有人暗示如何实现这一目标?对我而言,是否通过使用beta语法或较旧的语法实现结果都没有关系

查看更多

提问者
Kaadzia
被浏览
3
bruno 2020-03-11 01:18

您不能有从一个动作开始的多个流程,也不能有一个动作进行的多个流程

对于UML的观点,因此您需要添加:

  1. “解决”操作后的决策节点具有两个流程,每个流程都有一个守卫

  2. 动作“ erledigt”之后的决策节点具有两个流,每个流都有一个警卫

  3. 在“解决”操作之前的合并节点,以从决策节点“检查成功”和操作“ erledigt”接收流。

对于(1),在PlantUML中使用“ if-else”或“ split”

start

:new - please check;

while (check sucessful?) is (is an error)
  :to solve;
  if (duration) then (long)
    :in progress;
  else (immediat)
  endif
  :solved;
endwhile (not an error)

:erledigt;
note left
    reason:
     * done
     * not an error
     * not fixable
end note
stop

@enduml

在此处输入图片说明

对于(3),您可以使用“重复执行”同时管理(2),但不确定在PlantUML中可以不重复三个操作(解决-进行中-解决)或在您调用的其他活动中进行操作。在PlantUML中,代码是从控件结构(“ goto”除外)中提取的,该代码不允许交叉线,但是您需要“ goto”交叉线。请注意,决定“ check sucessfull”而不是动作“解决”没有问题