2.6.5. TikZ-UML¶
- Homepage
- Documentation
TikZ-UML is a TikZ extension to manage common UML diagrams. The primary goal was to propose an alternative to the pst-uml package, as TikZ is an alternative itself to PSTricks.
tikzuml/usecasediag.tex, in Figure 2.41.
![\begin{tikzpicture}
\begin{umlsystem}[x=4, fill=red!10]{The system}
\umlusecase{use case 1} % usecase-1
\umlusecase[y=-2]{use case 2} % usecase-2
\umlusecase[y=-4]{use case 3} % usecase-3
\umlusecase[x=4, y=-2, width=1.5cm]{ % usecase-4
\shortstack{use case 4\\\footnotesize{on 2 lines}}
}
\umlusecase[x=6, fill=green!20]{use case 5} % usecase-5
\umlusecase[x=6, y=-4]{use case 6} % usecase-6
\end{umlsystem}
\umlactor{user}
\umlactor[y=-3]{subuser}
\umlactor[x=14, y=-1.5]{admin}
\umlinherit{subuser}{user}
\umlassoc{user}{usecase-1}
\umlassoc{subuser}{usecase-2}
\umlassoc{subuser}{usecase-3}
\umlassoc{admin}{usecase-5}
\umlassoc{admin}{usecase-6}
\umlinherit{usecase-2}{usecase-1}
\umlVHextend{usecase-5}{usecase-4}
\umlinclude[name=incl]{usecase-3}{usecase-4}
\umlnote[x=7, y=-7]{incl-1}{
\footnotesize{note on include dependency}
}
\end{tikzpicture}
%Local variables:
% coding: utf-8
% mode: text
% mode: rst
% End:
% vim: fileencoding=utf-8 filetype=tex :](../../_images/tikz-ab91b63687a054ce681006b2a25ccc05cd84149a.png)
Figure 2.41 Use case diagram example
tikzuml/classdiag.tex, in Figure 2.42.
![\begin{tikzpicture}
\begin{umlpackage}{p} % package-p
\begin{umlpackage}{sp1} % package-sp1
\umlclass[template=T]{A}{ % class-A
n : uint \\
t : float
}{}
\umlclass[y=-3]{B}{ % class-B
d : double
}{
\umlvirt{setB(b : B) : void} \\
getB() : B
}
\end{umlpackage}
\begin{umlpackage}[x=10,y=-6]{sp2} % package-sp2
\umlinterface{C}{ % class-C
n : uint \\
s : string
}{}
\end{umlpackage}
\umlclass[x=2,y=-10]{D}{ % class-D
n : uint
}{}
\end{umlpackage}
\umlassoc[geometry=-|-, arg1=tata, mult1=*, pos1=0.3, arg2=toto, mult2=1, pos2=2.9, align2=left]{C}{B}
\umlunicompo[geometry=-|, arg=titi, mult=*, pos=1.7, stereo=vector]{D}{C}
\umlimport[geometry=|-, anchors=90 and 50, name=import]{sp2}{sp1}
\umlaggreg[arg=tutu, mult=1, pos=0.8, angle1=30, angle2=60, loopsize=2cm]{D}{D}
\umlinherit[geometry=-|]{D}{B}
\umlnote[x=2.5,y=-6, width=3.5cm]{B}{
\footnotesize{I am a note that belongs to class B.}
}
\umlnote[x=7.5,y=-1.5]{import-2}{
\footnotesize{I am a note that concerns the import relationship.}
}
\end{tikzpicture}
%Local variables:
% coding: utf-8
% mode: text
% mode: rst
% End:
% vim: fileencoding=utf-8 filetype=tex :](../../_images/tikz-77ab902700cee80e88d7821b008eade03591eb7e.png)
Figure 2.42 Class diagram example
tikzuml/statediag.tex, in Figure 2.43.
![\begin{tikzpicture}
\begin{umlstate}[name=Amain]{Overall state of the object A} % Amain
\begin{umlstate}[name=Bgraph, fill=red!20]{graph B} % Bgraph
\umlstateinitial[name=Binit] % state-Binit
\umlbasicstate[y=-4, name=test1, fill=white]{test1} % state-test1
\umltrans{Binit}{test1}
\umltrans[recursive=20|60|2.5cm, recursive direction=right to top, arg={op1}, pos=1.5]{test1}{test1}
\umltrans[recursive=160|120|2.5cm, recursive direction=left to top, arg={op2}, pos=1.5]{test1}{test1}
\umltrans[recursive=-160|-120|2.5cm, recursive direction=left to bottom, arg={op3}, pos=1.5]{test1}{test1}
\umltrans[recursive=-20|-60|2.5cm, recursive direction=right to bottom, arg={op4}, pos=1.5]{test1}{test1}
\umlbasicstate[y=-8, name=test2, fill=white]{test2} % state-test2
\umltrans[recursive=-160|-120|2.5cm, recursive direction=left to bottom, arg={op5}, pos=1.5]{test2}{test2}
\umltrans{test1}{test2}
\umlstatefinal[x=3, y=-7.75, name=Bfinal] % state-Bfinal
\umltrans{test2}{Bfinal}
\end{umlstate}
\umlstateinitial[x=6, y=1, name=Ainit] % state-Ainit
\umlVHtrans[anchor2=40]{Ainit}{Bgraph}
\umlstatefinal[x=6, y=-3.5, name=Afinal] % state-Afinal
\umlHVtrans[anchor1=30]{Bgraph}{Afinal}
\umlbasicstate[x=6, y=-6, name=visu, fill=green!20]{Visualisation} % state-visu
\umlHVtrans{Bfinal}{visu}
\umltrans{visu}{Afinal}
\umltrans[recursive=-20|-60|2.5cm, recursive direction=right to bottom, arg=a, pos=1.5]{visu}{visu}
\end{umlstate}
\end{tikzpicture}
%Local variables:
% coding: utf-8
% mode: text
% mode: rst
% End:
% vim: fileencoding=utf-8 filetype=tex :](../../_images/tikz-4bf19947cfcd5675bd4ac1db3a8d0b381e9f59e6.png)
Figure 2.43 State-machine diagram example
tikzuml/seqdiag.tex, in Figure 2.44.
![\begin{tikzpicture}[scale=.85]
\begin{umlseqdiag}
\umlactor[class=A]{a}
\umldatabase[class=B, fill=blue!20]{b}
\umlmulti[class=C]{c}
\umlobject[class=D]{d}
\begin{umlcall}[op=opa(), type=synchron, return=0]{a}{b}
\begin{umlfragment}
\begin{umlcall}[op=opb(), type=synchron, return=1]{b}{c}
\begin{umlfragment}[type=alt, label=condition, inner xsep=8, fill=green!10]
\begin{umlcall}[op=opc(), type=asynchron, fill=red!10]{c}{d}
\end{umlcall}
\begin{umlcall}[type=return]{c}{b}
\end{umlcall}
\umlfpart[default]
\begin{umlcall}[op=opd(), type=synchron, return=3]{c}{d}
\end{umlcall}
\end{umlfragment}
\end{umlcall}
\end{umlfragment}
\begin{umlfragment}
\begin{umlcallself}[op=ope(), type=synchron, return=4]{b}
\begin{umlfragment}[type=assert]
\begin{umlcall}[op=opf(), type=synchron, return=5]{b}{c}
\end{umlcall}
\end{umlfragment}
\end{umlcallself}
\end{umlfragment}
\end{umlcall}
\umlcreatecall[class=E,x=8]{a}{e}
\begin{umlfragment}
\begin{umlcall}[op=opg(), name=test, type=synchron, return=6, dt=7, fill=red!10]{a}{e}
\umlcreatecall[class=F, stereo=boundary, x=12]{e}{f}
\end{umlcall}
\begin{umlcall}[op=oph(), type=synchron, return=7]{a}{e}
\end{umlcall}
\end{umlfragment}
\end{umlseqdiag}
\end{tikzpicture}
%Local variables:
% coding: utf-8
% mode: text
% mode: rst
% End:
% vim: fileencoding=utf-8 filetype=tex :](../../_images/tikz-b29d18749efb2902923373c0b4714778ee7d4afa.png)
Figure 2.44 Sequence diagram example
tikzuml/componentdiag.tex, in Figure 2.45.
![\begin{tikzpicture}
\begin{umlcomponent}{A} % component-A
\umlbasiccomponent{B} % component-B
\umlbasiccomponent[y=-2]{C} % component-C
\umlrequiredinterface[interface=C-interface]{C} % interface-C
\umlprovidedinterface[interface=B-interface, with port, distance=3cm, padding=2.5cm]{B} % interface-B
\end{umlcomponent}
\umlbasiccomponent[x=-9,y=1]{D} % component-D
\umlbasiccomponent[x=3.5,y=-7.5]{E} % component-E
\umlbasiccomponent[x=-2, y=-9]{F} % component-F
\umlbasiccomponent[x=-8,y=-8]{G} % component-G
\umlbasiccomponent[x=-8,y=-11]{H} % component-H
\umlassemblyconnector[interface=DA, with port, name=toto]{D}{A} % interface-DA
\umldelegateconnector{A-west-port}{B-west-interface}
\umlVHVassemblyconnector[interface=AE, with port]{A}{E} % interface-AE
\umlHVHassemblyconnector[interface=EF, with port, first arm]{E}{F} % interface-EF
\umlHVHassemblyconnector[interface=GHF, with port, arm2=-2cm, last arm]{G}{F} % interface-GHF
\umlHVHassemblyconnector[with port, arm2=-2cm, last arm]{H}{F}
\umlnote[x=-4, y=4, width=3.5cm]{B-west-interface}{
\footnotesize{I am the node named B-west-interface}
}
\umlnote[x=2, y=4, width=3.5cm]{C-east-interface}{
\footnotesize{I am the node named C-east-interface}
}
\umlnote[x=-9, y=-2, width=3.0cm]{toto-interface}{
\footnotesize{I am the node named toto-interface}
}
\umlnote[x=-6, y=-4.5, width=3.5cm]{A-south-port}{
\footnotesize{I am the node named A-south-port}
}
\umlnote[x=-1.5, y=-6, width=3.5cm]{AE-interface}{
\footnotesize{I am the node named AE-interface}
}
\umlnote[x=2, y=-11, width=3.5cm]{F-east-port}{
\footnotesize{I am the node named F-east-port}
}
\end{tikzpicture}
%Local variables:
% coding: utf-8
% mode: text
% mode: rst
% End:
% vim: fileencoding=utf-8 filetype=tex :](../../_images/tikz-24a0f7750db78bdd7b781a9b8a8eab554655f98c.png)
Figure 2.45 Component diagram example