plantuml - 绘制注释上面的活动图

时间:2017-07-12 03:52:38

标签: plantuml

我在here找到了一个很好的活动图,但没有源代码。如下所示: enter image description here

我尝试用plantuml绘制它,下面是我的代码:

@startuml
skinparam linetype ortho

(*) -down-> "clone repository"
note right
A:git clone url/to/repository
scp -p url/to/hooks/commit_msg repository/.git/hooks
end note
-down->[get an assignment] "coding"
-down-> "commit locally"
note right
B:git add xxx
git commit
end note
-down-> "review"
note right
C:git push origin refs/for/<branch>
end note
if "" then
  -left->[rejected] "rework"
  -up-> "recommit"
'note left
'D:git add xxx
'git commit --amend
'end note
  -right-> "review"
else
  --right-->[approved] "submit"
note right: E:click "submit" on on corresponding gerrit page
  -up-> "update local repository"
note right
F:git pull --rebase
end note
  -left->[get another task(a new cycle)] "coding"
@enduml

输出是: enter image description here

显然,仍然没有原始图表:

  1. 上面/下面的注释不起作用,不知道怎么做(例如下面的E注释)
  2. 中心流不是直线。
  3. &#34;提交&#34;到&#34;更新本地存储库&#34;已经改变了2次。
  4. 如何改进它与原始输出相同?

2 个答案:

答案 0 :(得分:7)

plantuml将自动放置节点,如果要将节点放在精确位置,tikz会更好。

\documentclass[convert={outfile=\jobname.png}]{standalone}
\usepackage{tikz}
\usetikzlibrary{arrows,chains,positioning,shapes,scopes,quotes,decorations.markings,shapes.multipart,shapes.callouts}
\begin{document}

\newcommand{\ann}[3][]
{
  \node[align=center, draw=noteBorderColor,fill=noteBackgroundColor,
        rectangle callout, anchor=pointer,
        callout relative pointer={(#2)},#1] {#3};
}
 \begin{tikzpicture}[>=latex,node distance =8mm,
    every text node part/.style={align=left},
    start chain = going below,
    base/.style = {draw, rounded corners,
                   minimum width=20mm, minimum height=4mm,
                   align=center,
                   inner sep=1mm, outer sep=0mm,
                   },
     box/.style = {base, on chain, join=by {->}},
   start/.style = {box,minimum size=2mm,circle,fill=black},
     end/.style = {box,circle, on chain},
decision/.style = {box, diamond, aspect=1,
                   rounded corners=0pt, minimum size=2mm}
   ]
\definecolor{noteBackgroundColor}{RGB}{251,251,119}
\definecolor{noteBorderColor}{RGB}{168,0,54}

\node[start] (A) {};
\node[box] (B) {clone repository};
\ann[right=9mm of B]{182:8mm}{git clone url/to/repository \\scp -p url/to/hooks/commit\_msg repository/.git/hooks};
\node[box] (C) {coding};
\node[box] (D) {commit locally};
\ann[right=9mm of D]{182:8mm}{git add xxx \\ git commit};
\node[box] (E) {review};
\ann[right=9mm of E]{182:8mm}{git push origin refs/for/branch};
\node[decision] (F) {};
{[start branch]
  \node[box,left=2cm of F] (G) {rework};
  \node[box,on chain=going above] (H) {recommit};
  \ann[above=5mm of H]{270:4mm}{git add xxx \\ git commit --amend};
}
{[start branch]
  \node[box,right=6cm of F] (I) {submit};
  \ann[below=5mm of I]{90:4mm}{click "submit" on corresponding gerrit page};

  \node[base]  (J)  at (I |- C) {update local repository};
  \ann[right=9mm of J]{182:8mm}{git pull --rebase};
}
\draw[->] (H) -- (E);
\draw[->] (F) -- (I);
\draw[->] (J) --node [above] {get another task(new cycle)} (C);
\draw[red,->] (I) edge (J) (J) to (C);
\end{tikzpicture}
\end{document}

输出:

enter image description here

答案 1 :(得分:2)

这是您需要的吗? enter image description here

创建这种图片没有魔术,而是要仔细调整箭头的长度。您可以完全填充“”以扩展箭头。

源代码:

@startuml
skinparam linetype ortho

(*) -down-> "clone repository"
note right
A:git clone url/to/repository
scp -p url/to/hooks/commit_msg repository/.git/hooks
end note
-down->[get an assignment] "coding"
-down-> "commit locally"
note right
B:git add xxx
git commit
end note
-down-> "review"
note right
C:git push origin refs/for/<branch>
end note
if "" then
  -left->[ rejected] "rework"
  -up-> "recommit"
'note left
'D:git add xxx
'git commit --amend
'end note
  -right-> [       ]"review"
else
  --right-->[                              approved                              ] "submit"
note right: E:click "submit" on on corresponding gerrit page
  -up-> "update local repository"
note right
F:git pull --rebase
end note
  -left->[              get another task(a new cycle)] "coding"
@enduml