Plantuml - pay attention to the activity diagram

I found a good activity diagram on here , but the source code for code.it looks like this: enter image description here

I am trying to draw it using plantuml, below is my code:

@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

      

Output: enter image description here

Obviously still not like the original diagram:

  • Notes above / below don't work, not sure how to do it (e.g. note E below)
  • The center does not flow in a straight line.
  • "Submit" for "update local repository" changed 2 times.

How can I improve it in the same way as the original output?

+4


source to share


2 answers


plantuml will automatically place the node, if you want to place the node at the exact position, tikz is better.

\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}

      



Output:

enter image description here

+7


source


Is this what you really need? enter image description here

There is nothing magical about creating such pictures, other than carefully adjusting the length of the arrow. You can fill in "" to expand the arrows.



source:

@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

      

0


source







All Articles