summaryrefslogtreecommitdiff
path: root/graphics/pstricks/contrib/pst-uml
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /graphics/pstricks/contrib/pst-uml
Initial commit
Diffstat (limited to 'graphics/pstricks/contrib/pst-uml')
-rw-r--r--graphics/pstricks/contrib/pst-uml/Changes12
-rw-r--r--graphics/pstricks/contrib/pst-uml/Makefile295
-rw-r--r--graphics/pstricks/contrib/pst-uml/README106
-rw-r--r--graphics/pstricks/contrib/pst-uml/diagCase.tex56
-rw-r--r--graphics/pstricks/contrib/pst-uml/diagClass.tex130
-rw-r--r--graphics/pstricks/contrib/pst-uml/diagClass1.tex143
-rw-r--r--graphics/pstricks/contrib/pst-uml/diagSeq.tex109
-rw-r--r--graphics/pstricks/contrib/pst-uml/diagState.tex149
-rw-r--r--graphics/pstricks/contrib/pst-uml/pst-uml-doc.pdfbin0 -> 345403 bytes
-rw-r--r--graphics/pstricks/contrib/pst-uml/pst-uml-doc.tex1400
-rw-r--r--graphics/pstricks/contrib/pst-uml/pst-uml-encapsuled-pdf-fig.pdfbin0 -> 1779 bytes
-rw-r--r--graphics/pstricks/contrib/pst-uml/pst-uml-encapsuled-pdf-fig.tex40
-rw-r--r--graphics/pstricks/contrib/pst-uml/pst-uml-exemples.pdfbin0 -> 129639 bytes
-rw-r--r--graphics/pstricks/contrib/pst-uml/pst-uml-exemples.tex160
-rw-r--r--graphics/pstricks/contrib/pst-uml/pst-uml.sty860
15 files changed, 3460 insertions, 0 deletions
diff --git a/graphics/pstricks/contrib/pst-uml/Changes b/graphics/pstricks/contrib/pst-uml/Changes
new file mode 100644
index 0000000000..dd33a441f8
--- /dev/null
+++ b/graphics/pstricks/contrib/pst-uml/Changes
@@ -0,0 +1,12 @@
+----- pst-uml.tex
+0.83 2007-01-04 use \umlCasePut instead of \umlPutCase (hv)
+0.82 2006-12-19 adapted for use with array package (JHf)
+ fix bug with keyset for debug (hv)
+0.81 2005-05-10 using pst-xkey and pstricks (hv)
+...
+0.10 1998-03-01 utilsation des cl\'e pour les option de \umlClass
+0.01 1998-02-22 creation
+
+
+hv Herbert Voss
+JHf Jobst Hoffmann \ No newline at end of file
diff --git a/graphics/pstricks/contrib/pst-uml/Makefile b/graphics/pstricks/contrib/pst-uml/Makefile
new file mode 100644
index 0000000000..e0b021749b
--- /dev/null
+++ b/graphics/pstricks/contrib/pst-uml/Makefile
@@ -0,0 +1,295 @@
+#
+# Makefile bestial pour un projet Latex
+#
+# Attention : le cible dite "standard" sont en réalité dépendante de ce projet
+# (e.g. clean, distclean, ...)
+#
+# Modif par Maurice Diamantini le 29/08/2006
+
+
+########################################################################
+
+FILE = "pst-uml-doc"
+EXEMPLES = "pst-uml-exemples"
+FIG = "pst-uml-encapsuled-pdf-fig"
+
+########################################################################
+all: docpdf expdf fig clean
+
+doc:
+ $(MAKE) tex && \
+ $(MAKE) tex && \
+ $(MAKE) ps
+
+ex:
+ latex $(EXEMPLES).tex && \
+ latex $(EXEMPLES).tex && \
+ dvips $(EXEMPLES).dvi -o $(EXEMPLES).ps
+
+docpdf:
+ $(MAKE) doc && \
+ ps2pdf $(FILE).ps $(FILE).pdf
+
+expdf:
+ $(MAKE) ex && \
+ ps2pdf $(EXEMPLES).ps $(EXEMPLES).pdf
+
+fig:
+ latex $(FIG).tex && \
+ dvips -E $(FIG).dvi -o $(FIG).eps && \
+ epstopdf $(FIG).eps
+
+
+# full : la totale ! peut servir de réservoir pour l'étiquette par défaut
+full:
+ $(MAKE) tex && \
+ $(MAKE) pdftex && \
+ $(MAKE) dvipdf && \
+ $(MAKE) bib && \
+ $(MAKE) dvi && \
+ $(MAKE) psoffset && \
+ $(MAKE) ps && \
+ $(MAKE) vps && \
+ $(MAKE) pdf && \
+ $(MAKE) epdf && \
+ $(MAKE) vpdf
+
+
+########################################################################
+# C'est pour construire le dvi correcte qu'il faudra rendre ce Makefile
+# plus intelligent !
+#
+
+dvi :
+ $(MAKE) tex && \
+ $(MAKE) tex && \
+ $(MAKE) dvipdf
+
+########################################################################
+#
+# Quelques étiquettes symboliques standards (pour moi :-)
+#
+
+tex:
+ @echo
+ @echo "=> lancement d'UN latex"
+ @echo
+ latex $(FILE).tex
+
+dvipdf:
+ @echo
+ @echo "=> lancement d'UN dvipdf"
+ @echo
+ dvipdf $(FILE).dvi
+
+pdftex:
+ @echo
+ @echo "=> lancement d'UN pdflatex"
+ @echo
+ pdflatex $(FILE).tex
+
+bib:
+ @echo
+ @echo "=> lancement d'UN bibtex"
+ @echo
+ bibtex $(FILE)
+
+ps :
+ @echo
+ @echo "=> création de $(FILE).ps :"
+ @echo "=> Un fichier récent $(FILE).dvi **DOIT** exister"
+ @echo
+ dvips $(FILE).dvi -t a4 -o $(FILE).ps
+
+
+txt:
+ @echo
+ @echo "=> création d'une version texte pur par hevea :"
+ @echo
+ hevea -francais -text -o $(FILE).txt $(FILE).tex
+
+html:
+ @echo
+ @echo "=> création d'une version html par hevea :"
+ @echo
+ hevea -francais -o $(FILE).html $(FILE).tex
+
+########################################################################
+# psresize
+psoffset :
+ @echo
+ @echo "=> modif offset du fichier postscript :"
+ @echo
+ mv -f $(FILE).ps $(FILE).ori.ps && \
+ pstops "0(0cm,-1.5cm)" $(FILE).ori.ps $(FILE).ps && \
+ rm $(FILE).ori.ps
+
+
+
+2upps :
+ @echo
+ @echo "=> conversion postscript vers 2up "
+ @echo
+ psnup -2 -pa4 -m1.5cm $(FILE).ps $(FILE).2up.ps
+
+2up : 2uppdf
+2uppdf : 2upps
+ @echo
+ @echo "=> conversion 2up postscript vers 2up pdf"
+ @echo
+ ps2pdf $(FILE).2up.ps $(FILE).2up.pdf && \
+ rm $(FILE).2up.ps
+# # pdf:
+# # @echo
+# # @echo "=> création de $(FILE).pdf :"
+# # @echo "=> Un fichier récent $(FILE).ps **DOIT** exister"
+# # @echo
+# # ps2pdf $(FILE).ps $(FILE).pdf
+# Les options "-Pwww -G0" de dvips sont en vue de générer du PDF
+pdf:
+ @echo
+ @echo "=> création de $(FILE).pdf :"
+ @echo "=> Un fichier récent $(FILE).dvi **DOIT** exister"
+ @echo
+ dvips -Pwww -G0 $(FILE).dvi -o $(FILE).ps4pdf && \
+ ps2pdf $(FILE).ps4pdf $(FILE).pdf && \
+ rm $(FILE).ps4pdf
+pdfold:
+ @echo
+ @echo "=> création de $(FILE).pdf :"
+ @echo "=> Un fichier récent $(FILE).dvi **DOIT** exister"
+ @echo
+ ps2pdf $(FILE).ps $(FILE).pdf
+
+# Pour créer une figure encapsulée pdf en utilisant pstricks
+#
+# \documentclass[a4paper]{article}
+# \usepackage{times}% xxxxxxxxxx IMPORTANT
+# \usepackage{pst-eps}% xxxxxxxxxx IMPORTANT
+# \thispagestyle{empty}% xxxxxxxxxx IMPORTANT
+# \usepackage{pst-uml}
+# \begin{document}
+# \TeXtoEPS%
+# % put your own figure stuff here
+# \umlActor[umlActorLineWidth=1mm]{Client}
+# \endTeXtoEPS%
+# \end{document}
+#
+epdf:
+ latex $(FILE).tex && \
+ dvips -E $(FILE).dvi -o $(FILE).eps && \
+ epstopdf $(FILE).eps
+
+
+########################################################################
+#
+# étiquettes auxiliaires
+#
+
+
+vdvi:
+ xdvi ${XDVI_ARGS} $(FILE).dvi &
+
+vps:
+ gv ${GV_ARGS} $(FILE).ps &
+
+# xpdf:
+# vpdf:
+# xpdf ${XPDF_ARGS} $(FILE).pdf &
+xpdf:
+vpdf:
+ # echo `which xpdf`
+ # echo "LD_LIBRARY_PATH=$$LD_LIBRARY_PATH"
+ xpdf ${XPDF_ARGS} $(FILE).pdf &
+
+ar: acroread
+acroread:
+ open -a acroread $(FILE).pdf &
+
+pv: preview
+preview:
+ open -a Preview $(FILE).pdf &
+
+
+########################################################################
+##
+
+# pour mes essais
+try:
+ latex try.tex
+ dvips try.dvi -o try.ps
+ gv -pixmap -scale 2 -geo 1000x900+0+0 -watch try.ps &
+
+
+# editeur stead pour latex URL : <http://www.ensta.fr/~diam/stead>
+e: edit
+ed: edit
+edit:
+ stead $(FILE).tex &
+
+
+clean:
+ rm -f *.aux *.bbl *.blg *.log *.lof *.lot *.tmp *.toc *.ps4pdf *.idx
+ rm -f *.out *.nav *.snm $(FILE)*.dvi $(EXEMPLES).dvi
+ rm -f $(FILE).ps $(EXEMPLES).ps $(FIG).dvi $(FIG).eps
+
+dc: distclean
+distclean: clean
+ rm -f $(FILE)*.dvi $(FILE)*.ps $(FILE)*.pdf
+ rm -f $($(EXEMPLES))*.dvi $($(EXEMPLES))*.ps $($(EXEMPLES))*.pdf
+ rm -f $(FIG).pdf
+
+########################################################################
+# Archivage du répertoire courant dans le répertoire parent
+# avec la date dans le nom du .zip créé
+#
+# Description des options de zip utilisées :
+# -r recurse into directories
+# -y store symbolic links as the link instead of the referenced file
+# -9 compress better (-1 compress faster)
+# -v verbose operation/print version info
+# -q quiet operation
+# -o make zipfile as old as latest entry
+# Decompression par :
+# unzip leFichier.zip
+# le répertoire "projet" d'origine est alors recréer (ATTENTION
+# s'il existe déja)
+arc: zip
+zip:
+ $(MAKE) clean
+ date=`date +%Y%m%d-%Hh%Mmn` && \
+ lpath=`pwd` && \
+ bname=`basename $$lpath` && \
+ datename=$$bname-$$date && \
+ cd .. && \
+ cp -a $$bname $$datename && \
+ zip -r -y -o -q -9 $$datename.zip $$datename && \
+ \rm -rf $$datename && \
+ cd $$lpath
+
+tgz:
+ $(MAKE) clean
+ date=`date +%Y%m%d-%Hh%Mmn` && \
+ lpath=`pwd` && \
+ bname=`basename $$lpath` && \
+ datename=$$bname-$$date && \
+ cd .. && \
+ cp -a $$bname $$datename && \
+ tar cf - $$datename | gzip > $$datename.tgz && \
+ \rm -rf $$datename && \
+ cd $$lpath
+
+tbz:
+ $(MAKE) clean
+ date=`date +%Y%m%d-%Hh%Mmn` && \
+ lpath=`pwd` && \
+ bname=`basename $$lpath` && \
+ datename=$$bname-$$date && \
+ cd .. && \
+ cp -a $$bname $$datename && \
+ tar cf - $$datename | bzip2 > $$datename.tbz && \
+ \rm -rf $$datename && \
+ cd $$lpath
+
+
+#./
diff --git a/graphics/pstricks/contrib/pst-uml/README b/graphics/pstricks/contrib/pst-uml/README
new file mode 100644
index 0000000000..d177d925e0
--- /dev/null
+++ b/graphics/pstricks/contrib/pst-uml/README
@@ -0,0 +1,106 @@
+Readme.txt file for the latex package "pst-uml"
+-----------------------------------------------
+
+When-Who-Where?
+--------------
+
+who: Maurice Diamantini <Maurice.Diamantini at ensta in fr>
+Maintained by: Herbert Voss <Herbert.Voss at alumni.TU-Berlin in DE>
+
+where: http://www.ensta.fr/~diam/latex/contrib/
+ (and CTAN)
+
+when: Package "pst-uml": 27/04/98
+ FRENCH doc "pst-uml": 27/04/98
+ this readme: 18/12/98 :-)
+ see "Modifications" for more recent changes
+
+pst-uml is in Alpha version, and not yet cleanly packaged.
+I hope to be able to continue it before juny 1999.
+(27 oct 99 : sorry, pst-uml is unchanged!)
+
+********** (But any remarks are welcome :-) ****************
+
+
+
+What is pst-uml
+---------------
+
+pst-uml.sty is a latex package written for my need to draw some
+UML diagramms using pstricks package.
+
+"pst-uml" rely on pstricks (pst-xkey.sty) and some other standard
+packages. In particular the following files :
+
+ - pst-xkey.sty : use by pst-uml.sty
+ but include in recent standard latex distribution.
+
+ - fancyvrb.sty : NOT USE by pst-uml.sty, but requested for compiling
+ the documentations.
+
+ - fvrb-ex.sty : idem above
+
+
+How to use pst-uml?
+-------------------
+
+Copy the file pst-uml.sty in your working directory (latex project)
+or in the PATH of TEX input file.
+Normaly, this is the only thing to do...
+
+
+Documentation
+-------------
+All documentation is IN FRENCH. It is based on the two top files:
+
+ - pst-uml-doc.tex:
+ reference doc for pst-uml.sty
+ (description of the differents commands provide by pst-keys.sty)
+
+ - pst-uml-exemples.tex:
+ some examples of UML diagramms using "pst-uml"
+ This file use secondary files such as :
+ - diagCase.tex
+ - diagClass.tex
+ - diagState.tex
+ - diagSeq.tex
+
+ - pst-uml-encapsuled-pdf-fig.tex:
+ A seldocumented exemple for creating encasulated pdf file for using with
+ psdlatex. This feature make use of:
+ - "-E" flag for dvips tool
+ - epstopdf unix filter
+ - \usepackage{pst-eps} from pstricks
+ - \TeXtoEPS and \endTeXtoEPS commands from pstricks
+
+Compiling the documentation files require the packages fancyvrb.sty and
+fvrb-ex.sty in addition to the pst-uml.sty package.
+There is postscript version of the two documentation files above with
+the "pst-uml" distribution.
+
+Makefile
+--------
+With unix (or macosX), you can use Makefile for compiling documentations to pdf
+(require ps2pdf utility):
+ make
+ => compile the two documentation files to pdf format
+ make distcleen
+ => remove all generated files
+ make tgz (ou tbz or zip for other format)
+ => make a snapshot with date and time of the directory, and put it in the
+ parent directory
+The Makefile can be used to see he various needed unix commands (in particular
+for making encapsulated pdf figure).
+
+Modifications
+-------------
+28/08/06 : - using pst-xkey for the key handling,
+ - add exemple for creating encapsulated pdf figure
+ - exemple file renamed, and cleanup Makefile and README
+14/05/03 : apply licence lppl before putting pst-uml
+ on CTAM (by Herbert Voss)
+18/12/98 : modif Makefile and remove out-dated packages from pst-uml
+ distribution.
+27/04/98 : last update of pst-uml and its documentation
+./
+
diff --git a/graphics/pstricks/contrib/pst-uml/diagCase.tex b/graphics/pstricks/contrib/pst-uml/diagCase.tex
new file mode 100644
index 0000000000..d203a99fd5
--- /dev/null
+++ b/graphics/pstricks/contrib/pst-uml/diagCase.tex
@@ -0,0 +1,56 @@
+% \documentclass[11pt,a4paper,twoside]{article}
+% \usepackage[T1]{fontenc}
+% \usepackage[applemac]{inputenc}
+% % \usepackage[latin1]{inputenc}
+% \usepackage{pst-uml}
+% \begin{document}
+
+\begin{center}
+ % \scalebox{0.5}{%} Fonctionne egalement
+ \resizebox{0.9\linewidth}{!}{%
+ \begin{pspicture}(0,0.5)(15,13.5)%\psgrid
+ \psset{framesep=0}
+ %
+ \psframe[linewidth=0.5pt, linestyle=dashed](3,14)(12,0.5)
+ \rput(7.5,1){\Large Système à développer}
+ %
+ \rput(1,12){\rnode{acCL}{\umlActor{Client}}}
+ \rput(1,6){\rnode{acSC}{\umlActor{Service\\Clientèle}}}
+ \rput(14,4){\rnode{acST}{\umlActor{Service\\Technique}}}
+ \rput(14,11.5){\rnode{acSU}{\umlActor{Superviseur}}}
+ %
+ %
+ % \umlPutCase{5,13}{VISU}{\\[0mm]Visualiser\\[0mm]}
+ \umlPutCase{5,13}{VISU}{Visualiser}
+ \umlPutCase{5,5}{SR}{Saisir\\Risques}
+ \umlPutCase{5,3}{SD}{Saisir\\Demandes}
+ \umlPutCase{5,8}{RD}{Routage\\demandes}
+ \umlPutCase{10,10}{ICB}{%
+ Identifier\\
+ contraintes\\
+ bloquantes}
+ \umlPutCase{10,3}{MR}{Modifie\\ Réseau }
+ \umlPutCase{5,11}{VAD}{Vérifier\\ acceptation\\demande }
+ \umlPutCase{10,5}{IR}{Indiquer\\risques }
+ \umlPutCase{10,13}{PM}{Préparer\\modif .}
+ %
+ \ncline{acCL}{VAD}
+ \ncline{acCL}{VISU}
+ \ncline{acSC}{SR}
+ \ncline{acSC}{SD}
+ \ncline{acSC}{RD}
+ \ncline{acSU}{ICB}
+ \ncline{acSU}{PM}
+ \ncline{acST}{IR}
+ \ncline{acST}{MR}
+ %
+ \ncline{RD}{ICB}\naput[nrot=:U]{\umlStereoType{uses}}
+ \ncputicon{umlHerit}
+ \ncline{IR}{SR}\nbput[nrot=:D,npos=0.65]{\umlStereoType{uses}}
+ \ncputicon{umlHerit}
+ \end{pspicture}
+ }%end resizeORscalebox
+\end{center}
+
+
+% \end{document}
diff --git a/graphics/pstricks/contrib/pst-uml/diagClass.tex b/graphics/pstricks/contrib/pst-uml/diagClass.tex
new file mode 100644
index 0000000000..0048b5cb19
--- /dev/null
+++ b/graphics/pstricks/contrib/pst-uml/diagClass.tex
@@ -0,0 +1,130 @@
+% \documentclass[11pt,a4paper,twoside]{article}
+% \usepackage[T1]{fontenc}
+% \usepackage[applemac]{inputenc}
+% % \usepackage[latin1]{inputenc}
+% \usepackage{pst-uml}
+% \begin{document}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Placement des objet}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\newcommand{\drawClassi}{%
+ \umlClass{Classe1}{%
+ umlClassWidth = 0 \\
+ (par défaut) \\\hline
+ Attribut2 Tres tres longue ligne \\ \hline
+ Attribut3 \\ \hline %
+ Méthode1%
+}}
+
+\newcommand{\drawClassii}{%
+ \umlClass[umlClassWidth=4cm,umlParameter={\ T\ }]{Classe2}{%
+ largeur = 4cm \\ \hline
+ Attribut2 \\ \hline %
+ Methode1\\
+ Methode2%
+}}
+
+\newcommand{\drawClassiii}{%
+ \umlClass[umlClassWidth=2.7]{Classe3}{%
+ attribut 1 \\
+ attribut 1\\ \hline
+ Methode1 \\
+ Methode2%
+}}
+
+\newcommand{\drawClassiv}{%
+ \umlClass{Classe4}{%
+ MonAttribut 1 \\
+ MonAttribut 2 \\ \hline
+ Methode1%
+}}
+
+% Classe5 : largeur automatique et titre seul
+\newcommand{\drawClassv}{%
+ \umlClass[umlClassWidth=0]{Classe5}{}}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Placement des objets
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\begin{pspicture}(18,15)\psgrid
+ \rput(3,13){\rnode{Class1}{\drawClassi}}
+ \pnode(17.5,13){pnode1}
+ \rput(9,10){\rnode{Class2}{\drawClassii}}
+ \rput(2,5){\rnode{Class3}{\drawClassiii}}
+ \rput(12,5){\rnode{Class4}{\drawClassiv}}
+ \rput(5.5,5.5){\rnode{Class5}{\drawClassv}}
+ %
+ \rput(16,11){\rnode{Actor1}{\umlActor{Acteur(é) 1}}}
+\end{pspicture}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Dessin des liens et labels
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% La grande boucle en deux étapes :
+\ncline{Class1}{pnode1}
+\ncputicon[npos=0.7,nrot=:U]{umlV}
+\naput{ncline}\naput[npos=1,ref=r]{Node "P1"}
+\ncSXE[armA=11.5]{pnode1}{Class3}
+\nbput{SXE (armA=11.5)}
+\ncputicon{umlV}% debut
+\ncputicon[npos=1.9999,nrot=:U]{umlV}
+\ncputicon[npos=2,nrot=:U]{umlV}
+\ncputicon[npos=5,nrot=:U]{umlV}% fin ERREUR si nrot=4 ok pour 5!!!!
+%
+\ncSE{Class1}{Class2}
+\naput[npos=1.5]{\{ncSE npos=1.5\}}
+\ncSE[offset=-1]{Class1}{Class2}
+\ncputicon{umlAgreg} % debut
+\ncputicon[npos=2,nrot=:U]{umlCompos}% fin
+\nbput[npos=0.3]{0..*}
+\naput[npos=1.8]{0..2}
+\naput[npos=1.4]{ncSE,offset=-1}
+%
+\ncSHS[armA=1.5]{Class2}{Class4}\naput{ncSHS}
+\ncSHS[armA=1.5]{Class2}{Class3}\nbput{ncSHS}
+\ncputicon{umlHerit}% héritage au debut
+\ncputicon[npos=3,nrot=:U]{umlV}% V en fin
+%
+\ncSHN[arm=.7]{Class3}{Class4}
+\naput{ncSHN (3 vers 4)}
+\ncputicon[npos=1.8,nrot=:U]{umlV}% fleche au milieu vers destination !
+%
+% \ncE[npos=0.4]{Class5}{Class4}\naput{ncE,npos=0.4}
+\ncE{Class5}{Class4}\naput[npos=0.4]{ncE,npos=0.4}
+\ncputicon{umlCompos}
+%
+% Essai de définition d'un style personnalisé
+\newpsstyle{umlDependance}{%
+ linestyle=dashed,
+ arrows=->,
+ arrowscale=3,
+ arrowinset=0.6
+}
+\ncline[style=umlDependance,offset=-0.5]{Class3}{Class4}
+\naput{ncline}
+\ncputicon{umlV}% fleche au debut
+\nbput[npos=0.15]{1..*}
+%
+% % % On peut coller n'importe quoi par rapport à un node :
+% % % Essai pour mettre un template sur une classe : prévoir
+% % % une option du style [umlTemplate=myString]
+% % \nput*[labelsep=-0.8,offset=1.4]%
+% % {0}{Class2}{\psframebox%
+% % [fillstyle=solid,fillcolor=white,linestyle=dashed]%
+% % {\LARGE\textbf{\ T\ }}}
+% % %
+% Lien de Class2 et Class4 vers l'acteur :
+\ncline[linestyle=dashed]{Class2}{Actor1}
+\naput{ncline}
+\ncputicon{umlAgreg}
+\ncputicon[npos=0.7,nrot=:U]{umlAgreg}
+\ncputicon[npos=1,nrot=:U]{umlCompos} % en fin
+%
+\nccurve[linestyle=dashed, angleA=75,offsetA=-1,angleB=-45]{Class4}{Actor1}
+\ncputicon{umlHerit} % debut
+\ncputicon[npos=0.7,nrot=:U]{umlHerit}
+\ncputicon[npos=1,nrot=:U]{umlHerit}% en fin
+
+% \end{document}
diff --git a/graphics/pstricks/contrib/pst-uml/diagClass1.tex b/graphics/pstricks/contrib/pst-uml/diagClass1.tex
new file mode 100644
index 0000000000..4ab7410b7a
--- /dev/null
+++ b/graphics/pstricks/contrib/pst-uml/diagClass1.tex
@@ -0,0 +1,143 @@
+% \documentclass[11pt,a4paper,twoside]{article}
+% \usepackage[T1]{fontenc}
+% \usepackage[applemac]{inputenc}
+% % \usepackage[latin1]{inputenc}
+% \usepackage{pst-uml}
+% \begin{document}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Placement des objets}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\newcommand{\drawCommand}{%
+ \umlClass{Command}{%
+ -dateReceived \\
+ -isPrepaid \\
+ -number : String \\
+ -price : Money \\
+ \hline
+ +dispatch() \\%
+ +close()%
+ }
+}
+
+\newcommand{\drawCustomer}{%
+ \umlClass[{Customer}{%
+ name\\
+ address\\
+ \hline
+ creditRating() : String
+ }
+}
+
+\newcommand{\drawCorpCust}{%
+ \umlClass{Corporate \\ Customer}{%
+ contactName\\
+ creditRating\\
+ creditLimit\\
+ \hline
+ +remind() \\
+ billForMonth(Integer)
+ }
+}
+
+\newcommand{\drawPersCust}{%
+ \umlClass{Personal \\ Customer}{%
+ creditCard#\\
+ \hline
+ }
+}
+
+\newcommand{\drawOrderLine}{%
+ \umlClass{Order Line}{%
+ quantuty : Integer \\
+ price : Money \\
+ isSatisfied : Boolean \\
+ \hline
+}}
+% les deux clases "Employee" et "Product" étant simple : elle sera
+% définies à l'utilisation.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Placement des objets
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\begin{pspicture}(0,0)(18,15)\psgrid
+ \rput(3,13){\rnode{Class1}{\drawClassi}}
+ \pnode(17.5,13){pnode1}
+ \rput(9,10){\rnode{Class2}{\drawClassii}}
+ \rput(2,5){\rnode{Class3}{\drawClassiii}}
+ \rput(12,5){\rnode{Class4}{\drawClassiv}}
+ \rput(5.5,5.5){\rnode{Class5}{\drawClassv}}
+ %
+ \rput(16,11){\rnode{Actor1}{\umlActor{Acteur(é) 1}}}
+\end{pspicture}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Dessin des liens et labels
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% La grande boucle en deux étapes :
+\ncline{Class1}{pnode1}
+\ncputicon[npos=0.7,nrot=:U]{umlV}
+\naput{ncline}\naput[npos=1,ref=r]{Node "P1"}
+\ncSXE[armA=11.5]{pnode1}{Class3}
+\nbput{SXE (armA=11.5)}
+\ncputicon{umlV}% debut
+\ncputicon[npos=1.9999,nrot=:U]{umlV}
+\ncputicon[npos=2,nrot=:U]{umlV}
+\ncputicon[npos=5,nrot=:U]{umlV}% fin ERREUR si nrot=4 ok pour 5!!!!
+%
+\ncSE{Class1}{Class2}
+\naput[npos=1.5]{\{ncSE npos=1.5\}}
+\ncSE[offset=-1]{Class1}{Class2}
+\ncputicon{umlAgreg} % debut
+\ncputicon[npos=2,nrot=:U]{umlCompos}% fin
+\nbput[npos=0.3]{0..*}
+\naput[npos=1.8]{0..2}
+\naput[npos=1.4]{ncSE,offset=-1}
+%
+\ncSHS[armA=1.5]{Class2}{Class4}\naput{ncSHS}
+\ncSHS[armA=1.5]{Class2}{Class3}\nbput{ncSHS}
+\ncputicon{umlHerit}% héritage au debut
+\ncputicon[npos=3,nrot=:U]{umlV}% V en fin
+%
+\ncSHN[arm=.7]{Class3}{Class4}
+\naput{ncSHN (3 vers 4)}
+\ncputicon[npos=1.8,nrot=:U]{umlV}% fleche au milieu vers destination !
+%
+% \ncE[npos=0.4]{Class5}{Class4}\naput{ncE,npos=0.4}
+\ncE{Class5}{Class4}\naput[npos=0.4]{ncE,npos=0.4}
+\ncputicon{umlCompos}
+%
+% Essai de définition d'un style personnalisé
+\newpsstyle{umlDependance}{%
+ linestyle=dashed,
+ arrows=->,
+ arrowscale=3,
+ arrowinset=0.6
+}
+\ncline[style=umlDependance,offset=-0.5]{Class3}{Class4}
+\naput{ncline}
+\ncputicon{umlV}% fleche au debut
+\nbput[npos=0.15]{1..*}
+%
+% % % On peut coller n'importe quoi par rapport à un node :
+% % % Essai pour mettre un template sur une classe : prévoir
+% % % une option du style [umlTemplate=myString]
+% % \nput*[labelsep=-0.8,offset=1.4]%
+% % {0}{Class2}{\psframebox%
+% % [fillstyle=solid,fillcolor=white,linestyle=dashed]%
+% % {\LARGE\textbf{\ T\ }}}
+% % %
+% Lien de Class2 et Class4 vers l'acteur :
+\ncline[linestyle=dashed]{Class2}{Actor1}
+\naput{ncline}
+\ncputicon{umlAgreg}
+\ncputicon[npos=0.7,nrot=:U]{umlAgreg}
+\ncputicon[npos=1,nrot=:U]{umlCompos} % en fin
+%
+\nccurve[linestyle=dashed, angleA=75,offsetA=-1,angleB=-45]{Class4}{Actor1}
+\ncputicon{umlHerit} % debut
+\ncputicon[npos=0.7,nrot=:U]{umlHerit}
+\ncputicon[npos=1,nrot=:U]{umlHerit}% en fin
+
+% \end{document}
diff --git a/graphics/pstricks/contrib/pst-uml/diagSeq.tex b/graphics/pstricks/contrib/pst-uml/diagSeq.tex
new file mode 100644
index 0000000000..433d5ecbb3
--- /dev/null
+++ b/graphics/pstricks/contrib/pst-uml/diagSeq.tex
@@ -0,0 +1,109 @@
+% \documentclass[11pt,a4paper,twoside]{article}
+% \usepackage[T1]{fontenc}
+% \usepackage[applemac]{inputenc}
+% % \usepackage[latin1]{inputenc}
+% \usepackage{pst-uml}
+% \begin{document}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Placement des objet}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\begin{center}
+\resizebox{\linewidth}{!}{%
+ \begin{psmatrix}[colsep=0.2,rowsep=0.5]
+ %
+ % la ligne 1 contient le nom des objets
+ [name=client]\umlClass{\underline{:Client}}{}
+ & [name=reseau]\umlClass{\underline{:R\'eseau}}{}
+ & [name=demande]\umlClass{\underline{:Demande}}{}
+ & [name=route]\umlClass{\underline{:Route}}{}
+ & [name=arete]\umlClass{\underline{:Ar\^ete}}{}
+ & [name=noeud]\umlClass{\underline{:Noeud}}{}
+ & [name=fenetre]\umlClass{\underline{:Fen\^etre}}{}
+ \\[+0.5cm] %1
+ % ATTENTION les lignes vides telle que :
+ % & & & & & & \\
+ % sont inaccessible par (3,2)
+ %
+ {} & {} & {} & {} & {} & {} & {} \\
+ {} & {} & {} & {} & {} & {} & {} \\
+ {} & {} & {} & {} & {} & {} & {} \\
+ {} & {} & {} & {} & {} & {} & {} \\ % 5
+ %
+ {} & {} & {} & {} & {} & {} & {} \\
+ {} & {} & {} & {} & {} & {} & {} \\
+ {} & {} & {} & {} & {} & {} & {} \\
+ {} & {} & {} & {} & {} & {} & {} \\[-0.5cm]
+ {} & {} & {} & {} & {} & {} & {} \\[-0.5cm] % 10
+ %
+ {} & {} & {} & {} & {} & {} & {} \\[-0.5cm]
+ {} & {} & {} & {} & {} & {} & {} \\[-0.5cm]
+ {} & {} & {} & {} & {} & {} & {} \\[+0.5cm]
+ {} & {} & {} & {} & {} & {} & {} \\
+ {} & {} & {} & {} & {} & {} & {} \\[+0.5cm] % 15
+ %
+ {} & {} & {} & {} & {} & {} & {} \\
+ {} & {} & {} & {} & {} & {} & {} \\
+ {} & {} & {} & {} & {} & {} & {} \\[-0.5cm]
+ {} & {} & {} & {} & {} & {} & {} \\
+ {} & {} & {} & {} & {} & {} & {} \\ % 20
+ %
+ {} & {} & {} & {} & {} & {} & {} \\[0cm] % 21 ([0cm] nécessaire : bug ?)
+ %
+ % Les noms pour les fins d'objets (invariant si nouvelles lignes)
+ [name=clientEnd]{}
+ & [name=reseauEnd]{}
+ & [name=demandeEnd]{}
+ & [name=routeEnd]{}
+ & [name=areteEnd]{}
+ & [name=noeudEnd]{}
+ & [name=fenetreEnd]{}
+ & \\[-0.5cm] % Saut de ligne sans vertic pour corrigé problème
+ %
+ % Le trait d'axe pour l'échelle des temps :
+ \ncline[linewidth=0.5pt,linestyle=solid,offset=-1.7,nodesep=0.0]%
+ {->}{client}{clientEnd}
+ \naput[npos=1]{\emph{t}}
+ %
+ % Les pointillés verticaux
+ \ncline[linestyle=dashed]{client}{clientEnd}
+ \ncline[linestyle=dashed]{reseau}{reseauEnd}
+ \ncline[linestyle=dashed]{demande}{demandeEnd}
+ \ncline[linestyle=dashed]{route}{routeEnd}
+ \ncline[linestyle=dashed]{arete}{areteEnd}
+ \ncline[linestyle=dashed]{noeud}{noeudEnd}
+ \ncline[linestyle=dashed]{fenetre}{fenetreEnd}
+ %
+ % Les connexions horisontales ave leur commentaires associés
+ \small\ttfamily% Fonctionne
+ \psset{labelsep=1.5mm}
+ \ncline{->}{2,1}{2,3}\naput*{listerDemandes()}
+ \ncline{->}{3,3}{3,1}\nbput*{demandes}
+ \ncline{->}{4,1}{4,2}\naput*{* visualiser(demande)}
+ \ncline{->}{5,2}{5,1}\nbput*{[déjàRouté(réseau) = false]}
+ \ncline{->}{6,2}{6,1}\nbput*{[acceptée(demande) = false]}
+ \ncline{->}{7,2}{7,4}\naput*{[acceptée(demande) = true] parcourir()}
+ \ncline{->}{8,4}{8,5}\naput*{lister()}
+ \ncline{->}{9,5}{9,6}\naput*{listerExtrémités()}
+ \ncline{->}{10,6}{10,5}
+ \ncline{->}{11,5}{11,4}
+ \ncline{->}{12,4}{12,2}
+ \ncline{->}{13,2}{13,1}
+ \ncline{->}{14,1}{14,7}\naput*{[acceptée(demande) = true] %
+ afficher(demande)}
+ \ncline{->}{15,7}{15,1}\nbput*{dessinerSurTerminal()}
+ \ncline{->}{16,1}{16,7}\naput*{* zoomer(zone)}
+ \ncline{->}{17,7}{17,5}\nbput*{arêtesInZone}
+ \ncline{->}{18,5}{18,3}\nbput*{estConcernée(demande)}
+ \ncline{->}{19,3}{19,5}
+ \ncline{->}{20,5}{20,7}\naput*{arêtesConcernées}
+ \ncline{->}{21,7}{21,1}\nbput*{rafraichirEcran()}
+ % \ncEVW[armA=2]{->}{4,3}{10,3} % Est Vertical West
+ %
+ \end{psmatrix}
+}%end resizeORscalebox
+\end{center}
+
+
+% \end{document}
diff --git a/graphics/pstricks/contrib/pst-uml/diagState.tex b/graphics/pstricks/contrib/pst-uml/diagState.tex
new file mode 100644
index 0000000000..a315288e0c
--- /dev/null
+++ b/graphics/pstricks/contrib/pst-uml/diagState.tex
@@ -0,0 +1,149 @@
+% \documentclass[11pt,a4paper,twoside]{article}
+% \usepackage[T1]{fontenc}
+% \usepackage[applemac]{inputenc}
+% % \usepackage[latin1]{inputenc}
+% \usepackage{pst-uml}
+% \begin{document}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% définition des objets
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\newcommand{\StateGlobal}{%
+ \umlState{état global de l'objet \texttt{Graphe}}{\umlEmptyBox{13cm}{16cm}}%
+}
+\newcommand{\StateNRSA}{%
+ \umlState{non routé \\ sans arêtes}{\space}%
+}
+\newcommand{\StateNRI}{%
+ \umlState{non routé \\ incomplet}{\space}%
+}
+\newcommand{\StateNRC}{%
+ \umlState{non routé \\ complet}{\space}%
+}
+\newcommand{\StateROU}{%
+ \umlState{routé \\ \mbox{}}{\space}%
+}
+\newcommand{\StateVisu}{%
+ \umlState{Visualisable \\ \mbox{}}{do/superviser()}%
+}
+\newcommand{\StateAnu}{%
+ \umlState{GrapheAnnulable}{%
+ \hspace*{2.25cm}
+ \rmfamily% car normalement un corps d'état est en ttfamily
+ \begin{psmatrix}[colsep=1,rowsep=1.5,mnode=r]
+ \\[-1.4cm]
+ [name=StateInAnu] \umlStateIn \\[-0.5cm]
+ [name=StateNRSA] \StateNRSA \\[0cm]
+ [name=StateNRI] \StateNRI \\[1cm]
+ [name=StateNRC] \StateNRC \\[0.5cm]
+ [name=StateROU] \StateROU
+ & \umlPutStateOut{0,0}{StateOutAnu} \\[-1.5cm]
+ {} % boite vide NECESSAIRE sur la dernière ligne si vide !
+ \end{psmatrix}%
+ \hspace*{1.5cm}
+ %
+ % Connection propre à chaque node
+ %
+ {\ttfamily\small
+ %
+ % \nput{75}{StateInAnu}{EntréeAnnulable}
+ % \nput{-75}{StateOutAnu}{SortieAnnulable}
+ %
+ \ncEXS[offsetA=0.25,offsetB=0.5]{StateNRSA}{StateNRSA}%
+ \ncput*[npos=1.7]{ajouterSommet}
+ \ncWXS[offsetA=-0.25,offsetB=-0.5]{StateNRSA}{StateNRSA}%
+ \ncput*[npos=1.7]{retirerSommet}
+ %
+ \ncEXS[offsetA=0.25,offsetB=0.5]{StateNRI}{StateNRI}%
+ \ncput*[npos=1.7]{ajouterArête}
+ \ncWXS[offsetA=-0.25,offsetB=-0.5]{StateNRI}{StateNRI}%
+ \ncput*[npos=1.7]{retirerArête}
+ \ncEXN[offsetA=-0.0,offsetB=-0.5]{StateNRI}{StateNRI}%
+ \ncput*[npos=1.7]{ajouterSommet}
+ \ncWXN[offsetA=0.0,offsetB=0.5]{StateNRI}{StateNRI}%
+ \ncput*[npos=1.7]{retirerSommet}
+ %
+ \ncEXS[offsetA=0.25,offsetB=0.5]{StateNRC}{StateNRC}%
+ \ncput*[npos=1.7]{ajouterRoute}
+ \ncWXS[offsetA=-0.25,offsetB=-0.5]{StateNRC}{StateNRC}%
+ \ncput*[npos=1.7]{retirerRoute}
+ %
+ \ncWXS[offsetA=-0.25,offsetB=-0.5]{StateROU}{StateROU}%
+ \ncput*[npos=1.7]{réoptimiser}
+ %
+ % Connections INTERNODE interne au macro-état
+ %
+ \ncline{->}{StateInAnu}{StateNRSA}%
+ \naput[npos=0.3]{}%
+ %
+ \ncline{->}{StateNRSA}{StateNRI}%
+ \naput[npos=0.3]{ajouterArête}%
+ %
+ \ncline{->}{StateNRI}{StateNRC}%
+ % \naput[npos=0.3]{graphComplet}%
+ \naput{graphComplet}%
+ %
+ \ncline{->}{StateNRC}{StateROU}%
+ \ncput*[npos=0.3]{\umlStack{[ClientPrioritaireSatisfait] DemandeFin}}
+ %
+ \ncline{->}{StateROU}{StateOutAnu}%
+ %
+ }%
+ }%
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Placement des objets
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\begin{center}
+ % \scalebox{0.5}{%} Fonctionne egalement
+ % \resizebox{0.9\linewidth}{!}{%}
+ \resizebox{!}{13cm}{%
+ \begin{pspicture}(-5,-9.5)(9.5,8)%\psgrid
+ %
+ \psset{%
+ linearc=0.3,%
+ % arm=1.2,%
+ armA=1.2,%
+ armB=0.8,%
+ arrows=->,%
+ arrowscale=2,%
+ ncurv=2,% instead of 0.67
+ }%
+ \rput(2.4,-0.75){\rnode{StateGlobal}{\StateGlobal}}%
+ %
+ \umlPutStateIn{6,5}{StateIn}%
+ %
+ \rput(0,-1){\rnode{StateAnu}{\StateAnu}}%
+ %
+ \rput(6,-3){\rnode{StateVisu}{\StateVisu}}%
+ %
+ \rput(6,0){\rnode{StateOut}{\umlStateOut}}%
+ %
+ % LES CONNECTIONS INTERNODE
+ %
+ {\ttfamily\small
+ %
+ \ncEXN[offsetA=-0.25,offsetB=-0.5,armA=0.5]{StateVisu}{StateVisu}%
+ \ncput*[npos=1.7]{zoomer}
+ %
+ \ncSW[offsetB=-5]{->}{StateIn}{StateAnu}%
+ \naput[npos=1.3]{NewGraphAsked}
+ %
+ \ncEN{->}{StateOutAnu}{StateVisu}%
+ \nbput[npos=0.9]{/Sauvegarder}
+ \ncline{->}{StateVisu}{StateOut}%
+ %
+ \ncES[offsetA=3]{->}{StateAnu}{StateOut}%
+ % \naput[npos=0.6]{Annuler}
+ % on ajoute un espace en début de chaque ligne " Annuler"..
+ \naput[npos=0.99]{\umlStack[umlAlign=l]%
+ {\ Annuler\\\ /DemanderConfirmation}}
+ }
+ \end{pspicture}%
+ }%end resizeORscalebox
+\end{center}
+
+
+% \end{document}
diff --git a/graphics/pstricks/contrib/pst-uml/pst-uml-doc.pdf b/graphics/pstricks/contrib/pst-uml/pst-uml-doc.pdf
new file mode 100644
index 0000000000..88f12edba5
--- /dev/null
+++ b/graphics/pstricks/contrib/pst-uml/pst-uml-doc.pdf
Binary files differ
diff --git a/graphics/pstricks/contrib/pst-uml/pst-uml-doc.tex b/graphics/pstricks/contrib/pst-uml/pst-uml-doc.tex
new file mode 100644
index 0000000000..5403df5d05
--- /dev/null
+++ b/graphics/pstricks/contrib/pst-uml/pst-uml-doc.tex
@@ -0,0 +1,1400 @@
+\documentclass[11pt,a4paper,twoside]{article}
+\usepackage[T1]{fontenc}
+ % \usepackage[applemac]{inputenc}
+\usepackage[latin9]{inputenc}
+\usepackage[dvips,lmargin=2cm,rmargin=2cm,bmargin=2cm,tmargin=2.5cm]{geometry}
+\raggedbottom
+\usepackage{pst-uml}
+
+% LA SUITE NE MARCHE PAS CAR "fvrb-ex" cherche "fancyvrb", meme
+% si celui-ci est deja chargé !
+%
+\usepackage{fancyvrb}
+% pour les environnement CenterExample...
+\usepackage[pstricks]{fvrb-ex}
+\fvset{frame=single,numbers=left,fontsize=\footnotesize}
+ %
+\providecommand{\showgrid}{\psgrid[subgriddiv=0, griddots=10]}
+\psset{subgriddiv=0, griddots=10}
+
+\DefineShortVerb{\|}
+% \UndefineShortVerb{\|} % pour annuler
+
+\pagestyle{headings}
+
+\usepackage{calc}
+\usepackage{ifthen}
+\newcounter{hours}\newcounter{minutes}
+\newcommand{\printtime}{%
+ \setcounter{hours}{\time/60}%
+ \setcounter{minutes}{\time-\value{hours}*60}%
+ \thehours h%
+ % on veut obtenir 15h03mn et non 15h3mn...
+ \ifthenelse{\theminutes<10}{0}{}\theminutes mn}
+
+\newcommand{\Stabilo}[1]{\colorbox[rgb]{1,1,0.2}{#1}}
+\newcommand{\fStabilo}[1]{\fcolorbox[rgb]{1,0,0}{1,1,0.2}{#1}}
+
+% Quelques abbreviations
+
+% Conventions g\'{e}n\'{e}rales pour les formats de pr\'{e}sentation
+ \newcommand{\strong}[1]{\textbf{\emph{#1}}} % plus fort que \emph
+ \newcommand{\tech}[1]{\textsf{#1}} % terme technique
+ \newcommand{\file}[1]{\texttt{#1}} % noms de fichiers et de r\'{e}pertoires
+ \newcommand{\menu}[1]{\fbox{#1}} % nom d'un menu/sous-menu
+ \newcommand{\key}[1]{\fbox{\textbf{#1}}} % touche du clavier
+
+ % abreviations locales a ce document :
+ \newcommand{\uml}{\textsc{uml}}
+ \newcommand{\pstricks}{\texttt{PSTricks}}
+ \newcommand{\postscript}{\texttt{PostScript}}
+ \newcommand{\pstuml}{\texttt{pst-uml}}
+ % \newcommand{\bs}{\backslash}
+
+ % Pour les noms de commande TeX
+ % Exemple : \cs{fbox} => \fbox
+ \DeclareRobustCommand\cs[1]{\texttt{\char`\\#1}}
+
+\usepackage[colorlinks,linktocpage]{hyperref}
+% \usepackage{french}
+\usepackage[francais]{babel} % idem frenchb mais PAS french !
+% La suite evite que Babel impose un espace devant ":" mais n'est
+% pas disponible sur les vielles versions de Babel (comme à l'ENSTA).
+\NoAutoSpaceBeforeFDP
+
+\begin{document}
+
+\title{Interface utilisateur du package \pstuml}
+\author{%
+ Maurice \textsc{Diamantini}%
+ \thanks{avec l'aide précieuse de Denis \textsc{Girou}} %
+ (email : \texttt{diam@ensta.fr})
+}
+\date{%
+ modif package : 27/08/06 \\
+ modif doc\ \ \ : 27/08/06\\
+ \pageref{verylast}~pages compilées le \today{} à \printtime{}.
+}
+
+\maketitle
+\tableofcontents
+
+\section{Introduction}
+\subsection{Présentation}
+
+Ce document présente l'utilisation d'un certain nombre de macro
+destinées à faciliter le dessin de diagramme de type \uml{} (Unified
+Modeling Langage) en utilisant le package \pstricks{} de
+Van Zandt \textsc{Timothy}, dont l'usage est supposé connu.
+
+Ce package est en cours de développement et n'est diffusé pour
+l'instant que à titre d'information. En particulier, la
+\strong{stabilité} des noms de commandes proposées, leurs paramètres
+ainsi que leur comportement même \strong{ne sont pas garantis}. Il en
+est de même que le nom et la fonction des options.
+
+
+Dans le cas de diagrammes \uml{} complexes, on peut augmenter la
+lisibilité du source, et donc faciliter les modifications du diagrammes
+en cours d'élaboration en divisant le travail en trois phases
+séparées~:
+
+\begin{enumerate}
+ \item définir graphiquement le dessin des différents éléments du
+ schémas, en particulier pour les objets complexes (nombreux
+ paramètres ou text important, ...) ;
+
+ \item placer%
+ \footnotemark{} %
+ ces boites grâce à \texttt{psmatrix} ou à des
+ \cs{rput} dans un environnement \texttt{pspicture}
+ Les objets positionnés sont alors associé à un nom de node (au
+ sens \pstricks). On peut également dans cette phase placer les labels
+ ou autres dessins complémentaires liés aux graphismes des objets
+ eux-mêmes (et non des connecteurs entre objets) ;
+
+ \item router%
+ \addtocounter{footnote}{-1}\footnotemark{} %
+ ces boites à l'aide des différentes commandes de connexion et
+ coller les labels ou autres fleches \uml{}.
+\end{enumerate}
+% \footnotetext[1]{désolé : déformation professionnelle !}
+\footnotetext{désolé : déformation professionnelle !}
+% \stepcounter{footnote}
+
+
+Les macro proposées tendent à suivre les conventions \pstricks{} et
+\texttt{graphicx} pour le passage des options : à savoir l'utilisation
+de couple de la forme \texttt{Key=value}. Cette fonctionnalité
+nécessite l'utilisation du package \texttt{pst-key} qui est proposée
+dans la distribution de \pstuml{} (en attendant une diffusion plus
+générale). Un des intérêts du package \texttt{pst-key} est de pouvoir
+rajouter des options sans changer la syntaxe de la commande de base.
+D'une manière générales, le nombre d'options de toutes les commandes
+complexes est appelé à croitre.
+
+
+\noindent Voici la syntaxe générale des commandes proposées :
+
+\begin{verbatim}
+ \umlCommand[option1=value1,option2=value2,...]{param1}{param2}...
+\end{verbatim}
+
+La valeur par défaut de chacune de ces options peut être redéfinie par
+la commande |\psset{...}| (comme toutes toutes les options de \pstricks).
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\subsection{Dépendances }
+
+Les packages suivants sont appelés par \pstuml{} (par la
+commande \cs{RequirePackage}):
+\begin{itemize}
+ \item \texttt{pstricks}
+
+ \item \texttt{pst-node}
+
+ \item \texttt{pst-tree}
+
+ \item \texttt{multido}
+
+ \item \texttt{calc}
+
+ \item \texttt{ifthenelse}
+
+ \item \texttt{pst-xkey.tex} (par \cs{input} car en \TeX{})
+\end{itemize}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\section{Les macros de création d'objet}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\subsection{\cs{umlClass}}
+
+
+
+\begin{description}
+
+\item[Syntaxe] \mbox{}
+
+ \begin{verbatim}
+ \umlClass[keyOptions]{title}{body}
+ \end{verbatim}
+
+ Permet de dessiner une classe.
+
+\item[Paramètres] \mbox{}
+
+% % \subsubsection*{Paramètres}
+
+ \begin{description}
+
+ \item[\texttt{title} :] nom de la classe, celui-ci sera centré
+ et écrit en gras. Il peut tenir sur plusieurs lignes.
+
+ \item[\texttt{body} :] corps de la classe propremment dit. En
+ particulier contient les attributs et méthodes justifiées à gauche.
+ Les différentes lignes sont séparées par |\\| et éventuellement
+ des |\hline|.
+ \end{description}
+
+\item[Options] \mbox{}
+
+
+ \begin{description}
+
+ \item[\texttt{umlDoubleRuleSep} (dim : 2mm)] : distance%
+ \footnote{% protect car dans \item[xxx]
+ Comme pour toutes les dimensions passées à \pstricks{}, la
+ spécification de l'unité utilisée est facultative et vaut
+ \texttt{cm} par défaut, contrairement à \LaTeX{} ou il est
+ nécessaire de préciser une unité (même pour 0pt !).
+ } %
+ entre deux |\hline| (dans la zone |title| ou |body|).
+
+ \item[\texttt{umlShadow} (boolean : true)] :
+ si vrai, un cadre ombré de fond gris entoure la classe \\
+ sinon, un cadre simple sur fond blanc est utilisé.
+
+ \item[\texttt{umlParameter} (string : "")] :
+ si non vide, dessine un rectangle en pointillé
+ contenant la valeur sur le coin supérieur droit de la classe
+ (utilisé pour les classes paramétriques ou "Templates" en C++).
+
+ \end{description}
+
+\item[Exemples 1] \mbox{}
+
+ Les illustations suivantes présente une utilisation directe (i.e.
+ sans utilisation dans une boite ou par une commande) de la
+ commande de création d'une classe. Ces classes sont entourées par
+ un tiret pour montrer le positionnement vertical par rapport à la
+ ligne de base.
+
+ \bigskip\noindent
+ Exemples de classes standards
+ \begin{SideBySideExample}[xrightmargin=6cm]
+ --\umlClass{standard 1}{%
+ attrib 1 \\
+ attrib 2 \\
+ attrib 3 \\
+ \hline
+ meth 1 \\
+ meth 2
+ }--
+ \end{SideBySideExample}
+
+ \bigskip\noindent
+ \begin{SideBySideExample}[xrightmargin=6cm]
+ --\umlClass{standard 2}{%
+ attrib 1 \\
+ attrib 2 \\
+ attrib 3 \\
+ \hline
+ \hline
+ }--
+ \end{SideBySideExample}
+
+ \bigskip\noindent
+ \begin{SideBySideExample}[xrightmargin=6cm]
+ --%
+ \umlClass[umlShadow=false,umlParameter=\ T\ ]{%
+ standard 3%
+ }{%
+ \hline
+ meth 1 \\
+ meth 2
+ }--
+ \end{SideBySideExample}
+
+ \bigskip\noindent
+ \begin{SideBySideExample}[xrightmargin=6cm]
+ --\umlClass{standard 4}{}--
+ \end{SideBySideExample}
+
+ \bigskip\noindent
+ \begin{SideBySideExample}[xrightmargin=6cm]
+ --\umlClass{standard 5}{%
+ \hline
+ \hline
+ }--
+ \end{SideBySideExample}
+
+
+\item[Exemples 2] \mbox{}
+
+ \bigskip\noindent On peut mettre plusieurs sauts de ligne dans
+ chaque paramètre de la commande. Pour le premier paramètre :
+ toutes les lignes sont centrées et en gras~:
+ \begin{SideBySideExample}[xrightmargin=7.5cm]
+ --%
+ \umlClass{Exemple 1 \\ avec \\
+ plusieurs lignes}{%
+ Champs r\'eserv\'e aux attributs\\
+ \hline
+ Champs r\'eserv\'e\\ aux m\'ethodes\\
+ \hline\hline
+ Champs bidon%
+ }--
+ \end{SideBySideExample}
+
+\item[Exemples 3] \mbox{}
+
+ \bigskip\noindent On peut souhaiter imposer une largeur minimale à
+ une classe, par exemple pour donner à plusieurs classes une
+ apparance identique. On met alors le titre dans une \cs{makebox}
+ (s'il n'y a qu'une seule ligne).
+
+ \begin{SideBySideExample}[xrightmargin=6cm]
+ --%
+ \umlClass{\makebox[3.5cm]{Voici la classe 1}}{%
+ Largeur mini 3.5cm \\ \hline
+ M\'ethode1\\
+ M\'ethode2%
+ }--
+
+ \vspace{10mm}
+ --%
+ \umlClass{\makebox[3.5cm]{Classe 2}}{%
+ Les attributs \\ \hline
+ M\'ethode1\\
+ M\'ethode2%
+ }--
+
+ \vspace{10mm}
+ --%
+ \umlClass{\makebox[3.5cm]{Classe 3}}{%
+ \hline \hline
+ }--
+
+ \vspace{10mm}
+ --%
+ \umlClass{\makebox[3.5cm]{Classe 4}}{%
+ Cela peut m\^eme d\'epasser ! \\ \hline
+ M\'ethode1\\
+ M\'ethode2%
+ }--
+
+ \end{SideBySideExample}
+
+
+ \item[Bug] \mbox{} --
+
+ \item[\`A faire] \mbox{} --
+\end{description}
+
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% \subsection{\cs{umlSaveClass} et \cs{umlUseBox}}
+%
+% \begin{description}
+%
+% \item[\`A faire] \mbox{}
+%
+% Utilisation des commandes de classes complémentaires :
+% \cs{umlSaveClass} s'utilise comme \cs{umlClass}, mais au lieu de
+% dessiner une classe, celle-ci est sauvée dans une boite (au sens
+% \LaTeX{}) et doit être utilisé ultérieurement. Le titre de la
+% classe sert pour nommer la boite. Ce titre pouvant contenir des
+% espaces, il n'est pas possible d'utiliser simplement un \cs{usebox}
+% pour utiliser cette boite : d'où l'existance de la commande
+% \cs{umlUseBox}. Les caractéristiques de l'objet créé sont fixées
+% lors de la \emph{création} de la boîte par \cs{umlSaveClass}. Ceci
+% est trés important pour savoir quels sont les paramètres par défaut
+% qui seront pris en compte.
+%
+% \strong{Attention :} Ce nom contenant des espaces, il ne peut pas être
+% utilisé comme nom de node (sous peine d'erreurs \postscript).
+%
+% \item[Exemples 1] \mbox{}
+%
+%
+% \bigskip\noindent A vérifier : Les blocs ainsi définis en \LaTeX{}
+% sont globales même si elle sont définie à l'intérieur d'un
+% environnement ou d'un bloc |{}|.
+%
+% \begin{SideBySideExample}[xrightmargin=7cm]
+% % On cree et m\'emorise la classe
+% \umlSaveClass{Classe 1 bis}{%
+% mes attributs \\\hline
+% M\'ethode 2 \\
+% M\'ethode 2%
+% }
+% % On utilise la classe (en instanciant la boite
+% \rnode{Classe1bis}{\umlUseBox{Classe 1 bis}}
+% \end{SideBySideExample}
+%
+%
+% \item[Bug] \mbox{}
+%
+%
+% La boîte porte toujours le nom |#| et non pas le contenu de |#2| ou
+% |#1| suivant le cas. D'où l'écriture des caractères |2|  et |21|
+% entourant les boites placées.
+%
+% Pour les volontaires, voici le code de la commande
+% \cs{umlSaveClass}:
+%
+% \begin{Verbatim}
+% % CECI FONCTIONNE MAL (la boite cree s'appelle "#" )
+% % Je n'ai pas reussi en jonglant aves les \csname et autre \@nameuse
+% \newcommand{\umlSaveClass}[3][]{%
+% \newsavebox{\#2}%
+% \savebox{\#2}{%
+% \umlClass[#1]{#2}{#3}%
+% }%
+% }
+% % Pas de \umlUseClass car sera aussi utilisée pour les acteurs, ...
+% \newcommand{\umlUseBox}[1]{\usebox{\#1}}
+% \end{Verbatim}
+%
+% \end{description}
+%
+%
+%
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% \subsection{\cs{umlDefClass} et \cs{umlRunCmd}}
+%
+% \begin{description}
+%
+% \item[\`A faire] \mbox{}
+%
+% Une autre façon de prédéfinir les classes est de créer des
+% commandes dont le nom correspond au titre de la classe (malgré les
+% espaces et sauts de ligne). Contrairement à l'utilisation de la
+% commande \cs{umlSaveClass}, Les caractéristiques de l'objet créé
+% sont fixées au moment de l'utilisation de la commande par
+% \cs{umlRunCmd}.
+%
+% \bigskip\noindent A vérifier : de plus, la commande définie est
+% local à son environnement ou à son bloc |{}|.
+%
+% \item[Bug] \mbox{}
+%
+% A FAIRE (j'appréhende les mêmes problèmes que précédement)
+%
+% \end{description}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\subsection{\cs{umlActor}}
+
+\begin{description}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\item[Syntaxe] \mbox{}
+
+ \begin{verbatim}
+ \umlClass[keyOptions]{title}
+ \end{verbatim}
+ Permet de dessiner un acteur représenté par un bonhomme avec un
+ nom. Le titre du bonhomme est vu comme une boîte vide par
+ \LaTeX{}, cela rend les liens dans les diagrammes des cas
+ d'utilisation (qui sont la principale utilisation des Acteurs) plus
+ agréable (les flèches sont positionnées par rapport au bonhomme et
+ non pas au texte qui peut occuper plusieurs lignes.
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\item[Paramètres (un seul)] \mbox{}
+
+ \begin{description}
+
+ \item[\texttt{title} :] nom de l'acteur. Il peut contenir
+ plusieurs lignes séparées par |\\| et éventuellement des
+ \cs{hline}
+
+ \end{description}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\item[Options] \mbox{}
+
+ \begin{description}
+
+ \item[\texttt{umlActorLineWidth} (dimension : 0.6mm )] :
+ Epaisseur de ligne pour le dessin de l'acteur.
+
+ \item[\texttt{unit} (dimension : 1 ou 1cm )] : option standard
+ de \pstricks{} permet de modifier la taille de l'Acteur. Les
+ options \texttt{xunit}, \texttt{yunit} sont également
+ utilisable mais déconseillés.
+
+ \end{description}
+
+ D'autres option standard à \pstricks{} telle que \texttt{unit}
+ (ainsi que xunit et yunit) peuvent être utilisées.
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\item[Bug] \mbox{}
+
+
+ Un agrandissement par un \texttt{yunit} $> 1$, a pour effet de
+ décaler la tête vers le haut : il faut donc utiliser la commande
+ \cs{resizebox} pour assurer un agrandissement correct.
+
+ L'utilisation de \texttt{unit} pour le changement de taille semble
+ ne pas modifier pas la taille de la boite crée : d'ou l'encombre
+ pour les petites taille (on compense par un |\resizebox{}[][]{}|
+ approprié).
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\item[\`A faire] \mbox{}
+
+ Option : pour concerver la taille de la boîte correspondant au
+ Titre de l'acteur.
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\item[Exemples 1] \mbox{}
+
+ Ces commandes étant courtes, on peut les créer au moment même de
+ placement qui se fait ici dans le corps du texte dans cet exemple
+ (en mode LR au sens \LaTeX{}).
+
+ \begin{CenterExample}
+ \umlActor{Client}--%
+ \umlActor[unit=0.5,umlActorLineWidth=1mm]{Minus 1}--%
+ \umlActor[unit=0.5,umlActorLineWidth=1mm]{Minus 2}--%
+ \umlActor[xunit=0.6,yunit=1.5, umlActorLineWidth=1pt]{Le Chef}--%
+ \umlActor{}--%
+ \psframebox{\umlActor{sur\\trois\\ligne}}--%
+ \end{CenterExample}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\item[Exemples 2] \mbox{}
+
+ On peut séparer la création et le dessin du placement. Le
+ placement se fait également dans le texte même.
+
+ \begin{CenterExample}
+ % Actor2 :
+ \newcommand{\drawActorii}{%
+ \umlActor[umlActorLineWidth=1pt]{Act2 (1pt)}}
+ % Actor3 :
+ \newcommand{\drawActoriii}{%
+ \umlActor{Act3 \\ (par defaut)}}
+ % Actor4 :
+ \newcommand{\drawActoriv}{%
+ \umlActor[umlActorLineWidth=1mm,unit=0.5]{Act4 (1mm)\\unit=0.5}}
+ % Actor5 : (changement local d'une valeur par defaut)
+ \newcommand{\drawActorv}{%
+ \umlActor[umlActorLineWidth=2mm]{%
+ N'importe quoi\\sur trois lignes\\Act5 (2mm)}}
+ %
+ % utilisation des acteurs precedements definis :
+ --\drawActorii%
+ --\drawActoriii%
+ --\drawActoriv%
+ --\drawActorv%
+ \end{CenterExample}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\item[Exemples 3] \mbox{}
+
+
+ On peut composer les objets Class et Actor (illustation du
+ stéréotype de l'acteur).
+
+ \begin{SideBySideExample}[xrightmargin=5cm]
+ +%
+ \umlClass{\umlStereoType{Actor} %
+ \umlActor[unit=0.5]{}}{%
+ }+%
+ \end{SideBySideExample}
+
+ \begin{SideBySideExample}[xrightmargin=5cm]
+ +%
+ \umlClass{<<Actor>> %
+ %\raisebox{<raisedlift>}[<height>][<depth>]{<text>}
+ \raisebox{-0.3\height}[3ex][2ex]{%
+ \umlActor[unit=0.5]{}%
+ }%
+ }{%
+ }+%
+ \end{SideBySideExample}
+
+
+\end{description}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\subsection{\cs{umlState}, \cs{umlPutStateIn} et \cs{umlPutStateOut} }
+
+\begin{description}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\item[Syntaxe] \mbox{}
+
+ Les commandes suivantes permettent de dessiner à l'emplacement
+ courant respectivement un état, ou les pseudo-états d'entrée et de
+ sortie :
+
+ \begin{verbatim}
+ \umlState[keyOptions]{title}{body}
+ \umlStateIn
+ \umlStateOut
+ \end{verbatim}
+
+ \`A l'usage, les commandes de dessin de pseudo-état décrites
+ ci-dessus sont avantageusement remplacée par les deux commandes
+ suivantes :
+
+ \begin{verbatim}
+ \umlPutStateIn{coord}{nodeName}
+ \umlPutStateOut{coord}{nodeName}
+ \end{verbatim}
+
+ Elles permettent de dessiner et surtout de placer et connecter les
+ pseudo-états d'entrée et de sortie. Ces pseudo-état sont mis dans
+ un \cs{cnode} au moment de leur création, ce qui permet aux
+ connexions de toucher ces états même si le connecteur arrive à 45
+ degrés ; ce qui n'est pas le cas si on met la boite (donc de forme
+ carrée) créée par \cs{umlStateIn} à \emph{posteriori} dans un
+ \cs{cnode} !
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\item[Paramètres] \mbox{}
+
+ \begin{description}
+
+ \item[\texttt{title} :] nom de l'état, peut-être vide.
+ Celui-ci sera centré et écrit en gras. Il peut tenir sur
+ plusieurs lignes (toutes seront en gras.
+
+ \item[\texttt{body} :] corps de l'état, peut-être vide.
+ Il peut contenir plusieurs lignes séparées par |\\| et
+ éventuellement des \cs{hline}. Il peut également contenir des
+ environnements |pspicture| ou d'autres \cs{umlState}.
+
+ \end{description}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\item[options] \mbox{}
+
+ \begin{description}
+
+ \item[\texttt{umlStateWidth} (dimension: 0 )]~: (NON
+ IMPL\'EMENT\'E) largeur de l'état. La valeur 0 représente la
+ dimension naturelle de cette boite.
+
+ \item[\texttt{umlStateHeight} (dimension: 0 )]~: (NON
+ IMPL\'EMENT\'E) hauteur du corps de l'état l'état. La valeur 0
+ représente la dimension naturelle de cette boite.
+
+ \end{description}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\item[Bug] \mbox{}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\item[\`A faire] \mbox{}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\item[Exemples 1] \mbox{}
+
+
+
+ Les états d'entrée et de sortie
+
+ \bigskip
+ \begin{SideBySideExample}[xrightmargin=6cm]
+ +\umlStateIn+ : Input State
+
+ +\umlStateOut+ : Output State
+ \end{SideBySideExample}
+
+ \bigskip
+ Exemples simples avec champs vides ou non
+
+ \bigskip
+ \begin{SideBySideExample}[xrightmargin=6cm]
+ +%
+ \umlState{}{Body only}+%
+ \umlState{}{}+% Vide
+ \umlState{Title only}{}+
+ \end{SideBySideExample}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\item[Exemples 2] \mbox{}
+
+ On peut mettre titre ou corps sur plusieurs lignes. Toutes les
+ lignes du titre sont en gras :
+
+ \begin{SideBySideExample}[xrightmargin=6cm]
+ +%
+ \umlState{Title A\\Title B}{}+%
+ \umlState{}{Body A \\ Body B}+%
+ \end{SideBySideExample}
+
+ \begin{SideBySideExample}[xrightmargin=6cm]
+ +\umlState{Title A\\ Title B}{%
+ Voici le corps de l'état \\
+ avec les diff\'erentes\\
+ lignes\\
+ et d'autres...%
+ }+%
+ \end{SideBySideExample}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\item[Exemples 3] \mbox{}
+
+ Il y a différents moyens pour réserver une place blanche de taille
+ arbitraire (en attendant l'implantation d'options spécialisées pour
+ ce besoin).
+
+ \bigskip\noindent On peut rajouter un \texttt{strut} (règle
+ invisible) pour agrandir un des champs, ainsi que pour créer un
+ champ vide. La \cs{fbox} n'est là que pour indiquer la place
+ qu'occupe les \texttt{struts}, de même l'épaisseur du \cs{strut} de
+ 1 cm (au lieu de 0 cm normalement) permet de le visualiser :
+
+ \begin{SideBySideExample}[xrightmargin=6cm]
+ +%
+ \umlState{%
+ Utilis. de \cs{strut}\rule[-2ex]{1mm}{6ex}%
+ }{%
+ \fbox{\rule{0cm}{2cm}\rule{4cm}{0cm}}%
+ }+
+ \end{SideBySideExample}
+
+ \noindent Une commande \cs{umlEmptyBox} est proposée pour créer
+ une boite vide (mais est-elle bien utiles ??)
+
+ \begin{SideBySideExample}[xrightmargin=6cm]
+ +%
+ \umlState{Utilis. de \cs{umlEmptyBox}}{%
+ \fbox{\umlEmptyBox{4cm}{2cm}}%
+ }+
+ \end{SideBySideExample}
+
+
+ \bigskip\noindent
+ On peut spécifier une boite "paragraphe" de largeur 4 cm et
+ optionnellement de hauteur 2 cm dans le corps. Il faut mettre
+ un espace forcé pour que le paragraphe ne soit pas vide.
+
+ \begin{SideBySideExample}[xrightmargin=6cm]
+ +%
+ \umlState{%
+ etat vide par \cs{parbox}%
+ }{%
+ \parbox[c][2cm]{4cm}{\ }%
+ }+
+ \end{SideBySideExample}
+
+ \bigskip\noindent
+ On peut utiliser \cs{hspace*} et \cs{vspace*}, c'est la solution la
+ plus précise.
+
+ \begin{SideBySideExample}[xrightmargin=6cm]
+ +%
+ \umlState{\cs{hspace*} et \cs{vspace*}}{%
+ \hspace*{4cm}\vspace*{2cm}%
+ }%
+ +
+ \end{SideBySideExample}
+
+ On pourrait encore utiliser le saut de ligne paramétré |\\[2cm]|
+ (moins précis, mais pratique dans les tableaux.
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\iffalse
+\item[Exemples 4] \mbox{}
+
+ Un état dans une pspicture. L'option |[shidt=0.5\psyunit]| de pspicture permet de
+ positionner la ligne de base de la boîte \texttt{pspicture} à 50\%
+ de la hauteur total (si on met |[]|, la ligne de base passera par
+ l'origine (0,0)).
+
+ \bigskip\noindent
+ \begin{CenterExample}
+ \begin{pspicture}[shift=6.5](-7,-5)(6,5)\psgrid
+ \rput(0,3.5){\textbf{pspicture 1}}
+ \rput(0,-0.5){\umlState{Etat interne vide}{%
+ \rule{0cm}{5cm}\rule{6cm}{0cm}%
+ }}%
+ \rput(-1,-1){\umlState{Etat 1}{%
+ Contenu 1\\contenu 2%
+ }}%
+ \rput(-1,1){\umlStateIn}%
+ \rput(1,1){\umlStateOut}%
+ \end{pspicture}+%
+ \end{CenterExample}
+\fi
+
+\end{description}
+
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\subsection{\cs{umlCase} et \cs{umlCasePut}}
+
+\begin{description}
+ \item[Syntaxe] \mbox{}
+
+ \begin{verbatim}
+ \umlCase[keyOptions]{body}
+ \end{verbatim}
+
+ Permet un bloc de texte dans un oval. Cependant la boite \LaTeX{}
+ résultante est forcément rectangulaire (comme toute boite \LaTeX{}
+ : il n'est plus possible alors de créer simplement un ovalnode par
+ la suite, d'où la quasi-inutilité de cette commande.
+
+ \begin{verbatim}
+ \umlCasePut[keyOptions]{coord}{nodeName}{body}
+ \end{verbatim}
+
+ Permet un bloc de texte dans un ovalnode. Personnellement je n'ai
+ utilisé que cette commande pour créer (et surtout connecté) des
+ \textsf{use-case)}.
+
+ \item[Paramètres] \mbox{}
+
+ \begin{description}
+
+ \item[\texttt{coord} :] coordonnées du centre de la boite à
+ positionner.
+
+ \item[\texttt{nodeName} :] nom du node (au sens \pstricks{}).
+ Celui-ci sera utilsaé pour les connexions ultérieures.
+
+ \item[\texttt{body} :] texte éventuellement sur plusieurs
+ lignes séparées par des |\\| (utilisation en interne de la
+ commande \cs{umlStack}).
+
+ \end{description}
+
+ \item[Options] \mbox{} : pas d'option spécifique pour l'instant
+
+
+ \item[Bug] \mbox{}
+
+ \item[\`A faire] \mbox{}
+
+ \item[Exemples 1] \mbox{}
+
+ Voir fichier séparé
+
+\end{description}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\subsection{\cs{umlNote}}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\begin{description}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\item[Syntaxe] \mbox{}
+
+ \begin{verbatim}
+ \umlNote[keyOptions]{noteBody}
+ \end{verbatim}
+ Permet de dessiner une note dans un ardre au coin corné.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\item[Paramètres] \mbox{}
+
+ \begin{description}
+
+ \item[\texttt{noteBody} :] corps de la note. Il
+ peut contenir plusieurs lignes séparées par |\\|.
+
+ \end{description}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\item[Options] \mbox{}
+
+ \begin{description}
+
+ \item[\texttt{umlNoteCoin} (dimension: 1.5ex )]~: (NON
+ IMPL\'EMENT\'E) coin du petit carré replié.
+
+ \end{description}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\item[Bug] \mbox{}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\item[\`A faire] \mbox{}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\item[Exemples 1] \mbox{}
+
+ \begin{SideBySideExample}[xrightmargin=6cm]
+ +%
+ \umlNote{Ceci est \\ un \\ exemple de note}%
+ +
+ \end{SideBySideExample}
+
+ \begin{SideBySideExample}[xrightmargin=6cm]
+ +%
+ \umlNote[linewidth=2pt,umlAlign=c]{%
+ Ceci est \\ autre exemple \\ de note%
+ }%
+ +
+ \end{SideBySideExample}
+
+
+\end{description}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\section{Les commandes auxiliaires de \pstuml{}}
+
+Ces commandes ne permettent pas de créer des boites
+au sens \uml{}, mais simplifient la vie lors du dessin des différents
+type de diagrammes.
+
+\subsection{\cs{umlStack}}
+
+\begin{description}
+\item[Syntaxe] \mbox{}
+
+ \begin{verbatim}
+ \umlStack[keyOptions]{stackBody}
+ \end{verbatim}
+
+ permet de mettre du texte sur plusieurs lignes dans un boite sans
+ avoir d'espace supplémentaire en utilisant un environnememt
+ \texttt{tabular}. Par rapport à la commande \LaTeX{} \cs{shortstack},
+ l'espacement entre ligne n'est pas nul et est régulier.
+
+\item[Paramètres (un seul)] \mbox{}
+
+ \begin{description}
+
+ \item[\texttt{stackBody} :] corps de la boite. Il
+ peut contenir plusieurs lignes séparées par |\\|.
+
+ \end{description}
+
+\item[Options] \mbox{}
+
+ \begin{description}
+
+ \item[\texttt{umlStackSep} (dim : 0)] : distance de séparation
+ entre le contenu de la boite et le bord (pour une frame
+ éventuelle).
+
+ Cette option utilise d'une part l'option \texttt{tabcolsep} de
+ \texttt{tabular} pour régler l'espacement sur les bords
+ verticaux, et d'autre part des \texttt{strut} pour rajouter
+ des espacements horizontaux avant la première ligne et après la
+ dernière ligne.
+
+ \item[\texttt{umlStackWidth} (dim : 0)] : largeur de la boite.
+ La valeur 0 indique une largeur automatique en fonction du contenu.
+
+ \item[\texttt{umlStackLinesStretch} (réel : 0.85)] : écart
+ relatif de l'espace interligne par rapport à un tableau normal.
+ La valeur par défaut de 0.85 permet de tasser suffisamment tout en
+ permettant une marge pour absorber les différences de profondeur ou
+ de hauteur des différentes
+ lettres (x, g, j, h, t, ...)
+
+ \item[\texttt{umlAlign} (l, c, r : c)] : alignement horizontal
+ du texte à l'intérieur de la boite.
+
+ \item[\texttt{umlPos} (t, c, b : c)] : alignement vertical
+ de la boite par rapport à la ligne de base.
+
+ \end{description}
+
+\item[Bug] \mbox{}
+
+\item[\`A faire] \mbox{}
+
+
+\item[Exemples 1 : comparaison de \cs{umlStack}, \cs{shortstack}
+ et \texttt{tabular}] \mbox{}
+
+ Dans les exemples suivants, les \cs{umlStack} utilsée sont
+ entourée d'une \cs{fbox} ayant une \cs{fboxsep} nulle de façon à
+ bien visualiser les limites réelles de la boite produite.
+
+ \begin{SideBySideExample}[xrightmargin=6cm]
+ +%
+ \setlength{\fboxsep}{0pt}\fbox{%
+ \umlStack{Ceci est \\ un \\ exemple \\
+ de stack}%
+ }+%
+ \end{SideBySideExample}
+
+ \begin{SideBySideExample}[xrightmargin=6cm]
+ +%
+ \setlength{\fboxsep}{0pt}\fbox{%
+ \shortstack{Ceci est \\ un \\ exemple \\
+ de stack}%
+ }+%
+ \end{SideBySideExample}
+
+ \begin{SideBySideExample}[xrightmargin=6cm]
+ +%
+ \setlength{\fboxsep}{0pt}\fbox{%
+ \begin{tabular}{c}
+ Ceci est \\ un \\ exemple \\
+ de stack
+ \end{tabular}%
+ }+%
+
+ \end{SideBySideExample}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\item[Exemples 2 : utilisation des options] \mbox{}
+
+ \begin{SideBySideExample}[xrightmargin=6cm]
+ +\setlength{\fboxsep}{0pt}\fbox{%
+ \umlStack[
+ umlStackSep=1.5ex,
+ umlAlign=r,
+ umlPos=t,
+ umlStackLinesStretch=.9,
+ ]%
+ {Ceci est \\ un \\ autre \\
+ exemple \\ de stack}%
+ }+
+ \end{SideBySideExample}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\item[Exemples 3 : bug avec alignement à droite et
+ largeur imposée] \mbox{}
+
+ \begin{SideBySideExample}[xrightmargin=6cm]
+ +\setlength{\fboxsep}{0pt}\fbox{%
+ \umlStack[
+ umlStackWidth=4,
+ umlStackSep=1.5ex,
+ umlAlign=r,
+ ]%
+ {Ceci est \\ un \\ autre \\
+ exemple \\ de stack}%
+ }+
+ \end{SideBySideExample}
+
+\end{description}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\section{Positionnement des objets}
+
+
+Le placement des différents objets peut se faire selon quatre méthodes :
+\begin{itemize}
+
+\item soit en utilisant les positions absolues dans un environnememnt
+|psgraphics| à l'aide de la commande \cs{rput} pour placer les objets et
+\cs{rnode} pour leur affecter un nom de noeud (en vue d'une future
+référence pour les connexions) ;
+
+\item soit à l'aide des commandes de haut niveau fournie par \pstricks{}
+à savoir l'environnement |psmatrix| et la commande \cs{pstree} ;
+
+\item soit à l'aide de commandes de placement relatif fournies par
+\pstuml{} (Merci à Denis \textsc{Girou}) ;
+
+
+\item soit tout simplement dans le texte comme dans certains exemples
+montrés précédement (en mode LR au sens \LaTeX{}).
+
+\end{itemize}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\subsection{Utilisation de \texttt{psgraphics} et \cs{rput}}
+
+
+Il consiste à plasser les boîtes (précédemment créés ou non) dans un
+environnement \texttt{pspicture} à l'aide des commandes \cs{rput}. La
+macro \cs{psgrid} (compte tenu des options prédéfinies par le package
+\pstuml{}) permet de visualiser une grille de 1cm de coté. Cette grille
+pourra être commentée une fois la mise au point de la figure terminée.
+Dans cet exemple, les objets sont créés au moment du placement car il
+sont simples. On remarque la création (par \cs{psdot})d'un noeud
+ponctuel "pnode1" invisible sur le graphique, mais qui pourra être
+utilisé comme point de connexion intermédiaire (le petit cercle n'est
+là que pour sa visualisation).
+
+\begin{CenterExample}
+ % positionnement des classes
+ \begin{pspicture}(17,5)\psgrid
+ \rput(3,3){\rnode{Objet1}{\umlClass{Objet 1}{}}}
+ \pnode(16.5,4.5){pnode1}\psdot(pnode1)% pour visu
+ \rput(9,4){\rnode{Objet2}{\umlClass{Objet 2}{}}}
+ \rput(2,1){\rnode{Objet3}{\umlClass{Objet 3}{}}}
+ \rput(12,1){\rnode{Objet4}{\umlClass{Objet 4}{}}}
+ \rput(5.5,1.5){\rnode{Objet5}{\umlClass{Objet 5}{}}}
+ %
+ \rput(15,2.5){\rnode{Objet6}{\umlActor{Objet6}}}
+ \end{pspicture}
+ %
+\end{CenterExample}
+
+% \clearpage
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\subsection{Utilisation de \texttt{psmatrix}}
+
+% % Ceci est un paragraphe avant psmatrix.
+% %
+Les boites précédemment définies peuvent être positionnées à l'aide
+des macros de haut niveau de \pstricks{} telles que les environnements
+\texttt{psmatrix} ou \texttt{psTree}.
+
+Ces macro sont plus simples à utiliser, mais sont moins souple au
+niveau du placement. Voici un exemple de placement utilisant
+l'environnement \texttt{psmatrix}. On peut remarquer l'utilisation
+d'une longueur négative pour la séparation des colonnes, ainsi que le
+changement possible de la longueur d'une seule colonne. De même, un
+changement d'espacement pour une ligne particulière peut se faire par
+\verb:\\[2cm]: ou même \verb:\\[-1cm]:.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\begin{CenterExample}
+ \psshadowbox[framesep=0]{
+ \begin{psmatrix}[rowsep=0.3,colsep=-0.5,mnode=r]
+ % Dessin de classes predefinies
+ [name=Chose1] Chose 1 & & & [colsep=2,name=P1] \\
+ & [name=Chose2] \pscirclebox{Chose 2} \\[2cm]
+ [name=Chose3] \umlClass{Chose 3}{} & & [name=Chose4] Chose 4
+ \end{psmatrix}
+ % Visualisation d'un moeud ponctuel invisible par un X :
+ \ncput{pnode1}{$\times$}
+ }
+\end{CenterExample}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\section{Utilisation des commandes de placement relatif}
+
+
+Les lettre E, N, W et S sont utilisés à la place de Right, Left, ...
+pour des raisons de cohérence avec les commandes de connexion du style
+\cs{ncNE} vues plus loin. Les commandes de gestion du placement
+relatif sont les suivantes :
+
+\begin{itemize}
+ \item affectation en absolu du point courant par rapport à l'origine
+ (fixée à (0,0) pour l'instant) : \cs{ResetXY}, \cs{SetX},
+ \cs{SetY}, \cs{SetXY} en cours) ;
+
+ \item accés au point courant par \cs{X} et \cs{Y} ;
+
+ \item les commandes de base : \cs{incrX}, \cs{incrY}
+ (sont utilisées par les quatre suivantes) ;
+
+ \item les déplacements relatifs \cs{moveE},
+ \cs{moveN}, \cs{moveW}, \cs{moveS} ;
+
+ \item positionnement d'un objet au point courant \cs{rputXY}.
+
+ \item A FAIRE \cs{SetXY} pour l'affectation absolue du
+ point courant à partir d'une cordonnée d'un nom de node mémorisé.
+ Je n'ai pas trouvé la commande interne à \pstricks{} permettant de
+ convertir les coordonnées à partir d'un nom d'un node en
+ coordonnées X ou Y pour le point courant : (help) ;
+
+ \item A FAIRE \cs{setOri} pour changer la position de l'origine. Cela
+ affecte donc les commandes de positionnement absolues telles que
+ \cs{resetXY}. Le but est d'affecter l'origine à un noeud précédement
+ créé par un \cs{pnode} ou autre \cs{rnode} ;
+
+ Note : vérifier si l'option \texttt{origin=\{coor\}} de \pstricks{}
+ ne conviendrait pas !
+
+
+ \item A FAIRE \cs{move} (vers une direction incrémentale
+ arbitraire pouvant utiliser les coordonnées polaires ;
+\end{itemize}
+
+\begin{SideBySideExample}[xrightmargin=7cm]
+ \begin{pspicture}(-3,-3)(3,3)\psgrid
+ \ResetXY % X and Y are rest at startup
+ \rputXY{\pscirclebox{1}}
+ \moveE{2} \rputXY{\pscirclebox{2}}
+ \moveN{2} \rputXY{\pscirclebox{3}}
+ \moveW{2} \rputXY{\pscirclebox{4}}
+ \moveW{2} \rputXY{\pscirclebox{5}}
+ \moveS{2} \rputXY{\pscirclebox{6}}
+ \moveS{2} \rputXY{\pscirclebox{7}}
+ \moveE{2} \rputXY{\pscirclebox{8}}
+ \moveE{2} \rputXY{\pscirclebox{9}}
+ \end{pspicture}
+\end{SideBySideExample}
+
+\begin{SideBySideExample}[xrightmargin=7cm]
+ \begin{pspicture}(-3,-5)(3,5)\psgrid
+ %
+ \ResetXY % Don't forget !
+ %
+ \rputXY{\psovalbox{1: start}}
+ %
+ % mixing absolute and relative coords
+ \SetX{2}\SetY{2}\moveN{2}
+ \rputXY{\psframebox[linewidth=2pt]{Pos2}}
+ %
+ % use of negative coord, and coord with
+ % explicit units (10mm)
+ \moveW{4}\moveS{4}\moveE{-10mm}\moveE{1}
+ \rputXY{\Large 3}
+ % use of current coord X and Y as params
+ % for not using "\rputXY"
+ % (or for calcul : to be tested) :
+ \pscircle(\X,\Y){0.5}
+ %
+ % memorisation par un node
+ \moveE{4}\moveN{2}
+ \rputXY{\pnode{P4}}
+ \rputXY{P4}
+ \rputXY{\pscircle{0.5}}
+ %
+ % mixing absolute (SetX) and relative (moveN)
+ \SetX{-1.5}\moveN{1.5}
+ \rputXY{\pscirclebox{UN CERCLE}}
+ %
+ % use of current coord X and Y in calcul
+ % (doesn't work yet) :
+ \SetX{-2}\SetY{-2.5}
+ % \pssetlength allows \X+2 insteed of \X+2cm
+ \newlength{\tmpX}\setlength{\tmpX}{\X}
+ \newlength{\tmpY}\setlength{\tmpY}{\Y}
+ \psaddtolength{\tmpX}{5}
+ \psaddtolength{\tmpY}{1}
+ \rputXY{\pscircle{0.1}} % at curent point
+ \rputXY{%
+ \psframe(0,0)(\tmpX,\tmpY)%
+ }
+ %
+ % acces direct to a memorised point
+ % NOT YET DONE
+ % \SetXY{P4}
+ % \rputXY{\pscirclebox{UN CERCLE}}
+ %
+ \end{pspicture}
+\end{SideBySideExample}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\section{Les connecteurs orthogonaux}
+
+
+En plus des divers connecteurs proposés par \pstricks{} tels que
+\cs{ncline}, \cs{ncbar}, \cs{ncdiag}, \cs{ncdiagg}, \cs{ncangle},
+\cs{ncangles} et \cs{nccurve} ; \pstuml{} propose un certain nombre de
+connecteurs basés sur les précédents (par \cs{newpsobject}).
+
+Le but est de simplifier le tracé des liens en se restreingnant aux
+directions horizontales et verticales. Le principe est d'indiquer
+dans le nom même de la commande le nombre de segments à tracer et
+leur direction.\\
+Par exemple, la première lettre (\texttt{E} dans \cs{ncEVW}) indique
+que le segment part vers l'Est, tourne verticalement (\texttt{V} : vers
+le haut ou vers le bas) puis tourne vers l'Ouest \texttt{W} pour se
+connecter.
+
+\begin{itemize}
+
+\item E, W, N, S pour Est, West, North, Sud,
+\item H, V pour Horizontal et Vertical,
+\item D pour diagonal,
+\item X pour indifférent.
+
+\end{itemize}
+
+\bigskip\noindent
+Les commandes suivantes sont proposées :
+
+\begin{itemize}
+
+\item un seul segment : \cs{ncE} \cs{ncW} \cs{ncN} \cs{ncS}
+
+\item deux segments : \cs{ncEN} \cs{ncES} \cs{ncWN} \cs{ncWS} \cs{ncNE}
+ \cs{ncNW} \cs{ncSE} \cs{ncSW}
+
+\item trois segment en U : \cs{ncEVW} \cs{ncWVE} \cs{ncSHN} \cs{ncNHS}
+
+\item trois segments en Z : \cs{ncEVE} \cs{ncWVW} \cs{ncNHN} \cs{ncSHS}
+
+\item trois segments en diagonale : \cs{ncEDE} \cs{ncWDW} \cs{ncNDN}
+ \cs{ncSDS}
+
+\item quatre segments (voir trois) : \cs{ncSXE} \cs{ncSXW} \cs{ncEXS}
+ \cs{ncEXN} \cs{ncWXS} \cs{ncWXN} \cs{ncNXE} \cs{ncNXW}
+
+\end{itemize}
+
+\subsubsection*{Bug}
+
+La position par défaut des labels (utilisée par des \cs{naput}...)
+peut être affectée : dans ce cas imposer le positionnement explicitement
+par :
+
+ |\ncE{nodeA}{nodeB}\naput[npos=0.5]{myLabel}|
+
+
+De même, dans les commandes à trois segments, quatre segments sont
+réellement dessinés : en cas de problème de positionnement des labels,
+il peut être utile d'imposer |armB=0| (en attendant un raffinement de
+ces commandes orthogonales).
+
+\subsection*{Exemples 1}
+
+A FAIRE (voir listing de dessin de classe ci-aprés)
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\section{Essais d'icones "flèches" sur des courbes}
+
+Après des tentatives infructueuses (pour l'instant) de définir de
+nouvelle vraie flèche au sens \pstricks{} (sans passer par postscript :
+en n'utilisant que des commande \TeX{}), je propose une commande
+\cs{ncputicon} basée sur la command \cs{ncput}. Par défaut, l'icone est
+positionnée en début de connecteur (cf. Bug ci-dessous)
+
+\subsection*{Bug}
+
+\subsection*{\`A faire}
+
+Je souhairais que par défaut l'icone soit positionnée en fin de
+connecteur en mettant par exemple |\psset{npos=5}|. Cela ne marche pas
+pour tous les connecteurs (les \cs{ncline} et les \cs{nccurve}). C'est
+pour cette raison que la position par défaut est en début de connecteur
+(peut-être existe-t-il une variable \pstricks\ qui indique le nombre
+total de segments présents dans le dernier connecteur utilisé ??).
+
+\subsection*{Exemples 1}
+
+\begin{SideBySideExample}[xrightmargin=6cm]
+ \begin{pspicture}(0,0)(5,5)\psgrid
+ \rput[bl]{30}(0.5,0){\rnode{Node1}{%
+ \psframebox{\Large Node1}}}
+ \rput[tr]{45}(4.5,4){\rnode{Node2}{%
+ \psframebox{\Large Node2}}}
+
+ \nccurve[angleA=-45,angleB=135]{Node1}{Node2}
+ \ncput[nrot=:U,npos=0.8]{mylabel}
+ \ncputicon{umlHerit}
+
+ \nccurve[angleA=-30,angleB=-90]{Node2}{Node1}
+ \ncputicon{umlAgreg}
+
+ \nccurve[angleA=135,angleB=-135]{Node1}{Node2}
+ \ncputicon{umlCompos}
+ \ncputicon[nrot=:U,npos=0.7]{umlV}
+
+ \end{pspicture}
+\end{SideBySideExample}
+
+% \subsection*{Exemples 2}
+% A FAIRE (voir listing de dessin de classe ci-aprés)
+%
+%
+
+\section{Principales commandes \pstricks{} utilisées (A FAIRE)}
+
+\appendix
+\section{Exemple de diagramme de classe}
+
+\input{diagClass.tex}
+\VerbatimInput[gobble=0]{diagClass.tex}
+
+% % % % % % % % % \end{document}
+\section{Exemple de diagramme des cas d'utilisation}
+
+
+\input{diagCase.tex}
+\VerbatimInput[gobble=0]{diagCase.tex}
+
+\section{Exemple de diagramme de séquences}
+
+
+\input{diagSeq.tex}
+\VerbatimInput[gobble=0]{diagSeq.tex}
+
+\section{Exemple de diagramme d'états}
+
+
+\input{diagState.tex}
+\VerbatimInput[gobble=0]{diagState.tex}
+
+\section{Listing du package \texttt{pst-uml.sty}}
+
+\VerbatimInput[baselinestretch=0.9,fontsize=\small,
+ gobble=0]{pst-uml.sty}\label{verylast}
+%\small
+%\VerbatimInput{test.sty}\label{verylast}
+\mbox{}
+
+\end{document}
+
diff --git a/graphics/pstricks/contrib/pst-uml/pst-uml-encapsuled-pdf-fig.pdf b/graphics/pstricks/contrib/pst-uml/pst-uml-encapsuled-pdf-fig.pdf
new file mode 100644
index 0000000000..a18cc17a2d
--- /dev/null
+++ b/graphics/pstricks/contrib/pst-uml/pst-uml-encapsuled-pdf-fig.pdf
Binary files differ
diff --git a/graphics/pstricks/contrib/pst-uml/pst-uml-encapsuled-pdf-fig.tex b/graphics/pstricks/contrib/pst-uml/pst-uml-encapsuled-pdf-fig.tex
new file mode 100644
index 0000000000..b45f53ff17
--- /dev/null
+++ b/graphics/pstricks/contrib/pst-uml/pst-uml-encapsuled-pdf-fig.tex
@@ -0,0 +1,40 @@
+% the big problem with pdflatex is that pst-uml make use of pstricks
+% package which use special TeX command to output directly postscript code.
+% So pst-uml doesn't work with pdftex :-(
+% sorry about that.
+%
+% However, as I'm switching from LaTeX to ConTeXt
+% (another more modern macro set TeX package)
+% I also have the problem to port old pstricks figures
+% of mine to be used with ConTeXt (which use pdfetex)
+% So instead of using inline pstrick command in LaTeX,
+% I make each figure independant in a separate LaTeX file.
+% Then I make eps, then pdf file that I include
+% in my main xTeX document.
+%
+% This "figure only" latex file can be compile by :
+%
+% latex fig.tex
+% dvips -E fig.dvi -o fig.eps
+% epstopdf fig.eps
+% rm fig.log fig.aux fig.dvi fig.eps
+% rm fig.pdf
+
+\documentclass[a4paper]{article}
+
+ \usepackage{times}% xxxxxxxxxx IMPORTANT
+
+ \usepackage{pst-eps}% xxxxxxxxxx IMPORTANT
+ \thispagestyle{empty}% xxxxxxxxxx IMPORTANT
+
+ \usepackage{pst-uml}
+
+\begin{document}
+\TeXtoEPS%
+
+% put your own figure stuff here
+\umlActor[umlActorLineWidth=1mm]{Client}
+
+\endTeXtoEPS%
+\end{document}
+%./
diff --git a/graphics/pstricks/contrib/pst-uml/pst-uml-exemples.pdf b/graphics/pstricks/contrib/pst-uml/pst-uml-exemples.pdf
new file mode 100644
index 0000000000..cce0129cd4
--- /dev/null
+++ b/graphics/pstricks/contrib/pst-uml/pst-uml-exemples.pdf
Binary files differ
diff --git a/graphics/pstricks/contrib/pst-uml/pst-uml-exemples.tex b/graphics/pstricks/contrib/pst-uml/pst-uml-exemples.tex
new file mode 100644
index 0000000000..e53b64a522
--- /dev/null
+++ b/graphics/pstricks/contrib/pst-uml/pst-uml-exemples.tex
@@ -0,0 +1,160 @@
+\documentclass[11pt,a4paper,twoside]{article}
+ \usepackage[T1]{fontenc}
+ % \usepackage[applemac]{inputenc}
+ \usepackage[latin1]{inputenc}
+
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ % Format de la mise en page
+ \setlength{\hoffset}{-1in}
+ \setlength{\voffset}{-1in}
+ \setlength{\oddsidemargin}{2cm}
+ \setlength{\evensidemargin}{2cm}
+ \setlength{\topmargin}{1.8cm}
+ % \setlength{\headheight}{0cm}
+ % \setlength{\headsep}{0cm}
+ \setlength{\textwidth}{16.5cm}
+ \setlength{\textheight}{24.0cm}
+
+
+ \usepackage{pst-uml}
+
+
+ % pour les environnement d'exemple Latex...
+ \usepackage{fancyvrb}
+ \usepackage[pstricks]{fvrb-ex}
+ % option pour le package fancyverb (pour \VerbatimInput)
+ \fvset{%
+ frame=single,%
+ numbers=left,%
+ baselinestretch=0.9,%
+ gobble=0,% nbr de caratere de debut a ignorer
+ fontsize=\footnotesize%
+ }
+
+ % \providecommand{\showgrid}{\psgrid[subgriddiv=0, griddots=10]}
+
+ \DefineShortVerb{\|}
+ % \UndefineShortVerb{\|} % pour annuler
+
+ \pagestyle{headings}
+
+
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ % Quelques commandes locales
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ % \printtime
+ %
+ % commande d'impression de l'heure courante
+ %
+ % Exemple : "Fichier compil\'{e} le \today{} \`{a} \printtime."
+ \usepackage{calc}
+ \usepackage{ifthen}
+ \newcounter{hours}\newcounter{minutes}
+ \newcommand{\printtime}{%
+ \setcounter{hours}{\time/60}%
+ \setcounter{minutes}{\time-\value{hours}*60}%
+ \thehours h%
+ % on veut obtenir 15h03mn et non 15h3mn...
+ \ifthenelse{\theminutes<10}{0}{}\theminutes mn%
+ }
+
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ % Quelques abbreviations
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+ % Conventions g\'{e}n\'{e}rales pour les formats de pr\'{e}sentation
+ \newcommand{\strong}[1]{\textbf{\emph{#1}}} % plus fort que \emph
+ \newcommand{\tech}[1]{\textsf{#1}} % terme technique
+ \newcommand{\file}[1]{\texttt{#1}} % noms de fichiers et de r\'{e}pertoires
+ \newcommand{\menu}[1]{\fbox{#1}} % nom d'un menu/sous-menu
+ \newcommand{\key}[1]{\fbox{\textbf{#1}}} % touche du clavier
+
+ % abreviations locales a ce document :
+ \newcommand{\uml}{\textsc{uml}}
+ \newcommand{\pstricks}{\texttt{PSTricks}}
+ \newcommand{\postscript}{\texttt{PostScript}}
+ \newcommand{\pstuml}{\texttt{pst-uml}}
+ % \newcommand{\bs}{\backslash}
+ % \newcommand{\bs}{\backslash}
+
+ % Pour les noms de commande TeX
+ % Exemple : \cs{fbox} => \fbox
+ \DeclareRobustCommand\cs[1]{\texttt{\char`\\#1}}
+
+\usepackage[colorlinks,linktocpage]{hyperref}
+%\usepackage{french}
+\usepackage[francais]{babel} % idem frenchb mais PAS french !
+ % La suite evite que Babel impose un espace devant ":" mais n'est
+ % pas disponible sur les vielles versions de Babel (comme à l'ENSTA).
+\NoAutoSpaceBeforeFDP
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\begin{document}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\title{Exemple de diagrammes utilisant \pstuml}
+\author{%
+ Maurice \textsc{Diamantini}%
+ \thanks{avec l'aide précieuse de Denis \textsc{Girou}} %
+ (email : \texttt{diam@ensta.fr})
+}
+\date{%
+ Compilé le \today{} à \printtime{}.%
+}
+\maketitle
+
+\tableofcontents
+\clearpage
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\clearpage
+\section{Exemple de diagramme de classe}
+
+\input{diagClass.tex}
+\VerbatimInput{diagClass.tex}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\clearpage
+\section{Exemple de diagramme des cas d'utilisation}
+
+
+\input{diagCase.tex}
+\VerbatimInput{diagCase.tex}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\clearpage
+\section{Exemple de diagramme de séquences}
+
+
+\input{diagSeq.tex}
+\VerbatimInput{diagSeq.tex}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\clearpage
+\section{Exemple de diagramme d'états}
+
+
+\input{diagState.tex}
+\VerbatimInput{diagState.tex}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% pour connaitre le numero de la derniere page
+\label{verylast}\mbox{}
+
+\end{document}
+
+
diff --git a/graphics/pstricks/contrib/pst-uml/pst-uml.sty b/graphics/pstricks/contrib/pst-uml/pst-uml.sty
new file mode 100644
index 0000000000..a9d4ed92d4
--- /dev/null
+++ b/graphics/pstricks/contrib/pst-uml/pst-uml.sty
@@ -0,0 +1,860 @@
+%%
+%% This is file `pst-uml.sty',
+%%
+%% IMPORTANT NOTICE:
+%%
+%% Package `pst-uml.sty'
+%%
+%% Maurice Diamantini <diam@ensta.fr>
+%%
+%% Jan 01, 2007
+%%
+%% This program can be redistributed and/or modified under the terms
+%% of the LaTeX Project Public License Distributed from CTAN archives
+%% in directory macros/latex/base/lppl.txt.
+%%
+%% DESCRIPTION:
+%% `pst-uml' is a PSTricks package to draw UML diagrams
+%%
+% Inspir\'e des exemples de Denis GIROU
+%
+%
+\def\filename{pst-uml}
+\def\fileBut{Quelques macros pstricks pour diagrammes UML}
+\def\fileversion{0.83}
+\def\filedate{2007/01/03}
+\def\fileMailAutor{diam@ensta.fr}
+%
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{\filename}%
+ [\filedate\space v\fileversion\space-\space\fileMailAutor]
+\typeout{\space\space\space But\space:\space\fileBut.}
+%
+\RequirePackage{pstricks}
+\RequirePackage{pst-node}
+\RequirePackage{pst-tree}
+\RequirePackage{multido}
+
+\RequirePackage{calc}
+\RequirePackage{ifthen}
+
+\RequirePackage{graphicx} % a charger APRES pstricks
+\RequirePackage{pst-xkey}
+%
+\pst@addfams{pst-uml}
+%
+% D\'efinition de quelques couleur par d\'efaut utilis\'ees pour UML
+%
+\definecolor{UMLgreyLight}{gray}{0.9}
+\definecolor{UMLgrey80} {gray}{0.8}
+%
+% Quelques variable ou boite temporaires :
+%
+% compteur (i.e. entiers) pour les calculs temporaires
+\newcounter{umlint@a}
+\newcounter{umlint@b}
+\newcounter{umlint@c}
+\newcounter{umlint@d}
+% longueurs pour les calculs temporaires
+\newlength{\umldim@a}
+\newlength{\umldim@b}
+\newlength{\umldim@c}
+\newlength{\umldim@d}
+\newlength{\umldim@D}% Depth
+\newlength{\umldim@H}% Height
+\newlength{\umldim@W}% Width
+% boite temporaire de memoristion des parametres
+\newsavebox{\umlbox@a}
+\newsavebox{\umlbox@b}
+\newsavebox{\umlbox@c}
+\newsavebox{\umlbox@d}
+\newsavebox{\umlbox@out}
+% boolean temporaires
+\newboolean{umlbool@a}
+\newboolean{umlbool@b}
+\newboolean{umlbool@c}
+\newboolean{umlbool@d}
+
+% Affectation des valeurs par defaut standard de pstricks :
+
+\psset{
+ % labelsep=0.5mm, % au lieu de plus/minus 2mm
+ labelsep=1mm, % au lieu de plus/minus 2mm
+ subgriddiv=1, % pour une grille de 1cm en pointilles
+ griddots=10,
+ gridlabels=6pt,
+ arrowscale=2,
+}
+\SpecialCoor
+
+% Definition des parametres par d\'efaut (nouvelles longueurs, ...)
+
+% % For debug : ShowPosition
+% %
+% % usage :
+% % \ifthenelse{\value{umlDebug} > 0}{\ShowPosition}{}%
+% %
+% \newboolean{umlDebug}\setboolean{umlDebug}{false}
+
+% Un entier pour Degoguer
+% ATTENTION : si pb de port\'ee de variable (si besoin compteur global) :
+% passer par \edef
+%
+\newcounter{umlDebug}
+\define@key[psset]{pst-uml}{umlDebug}{%
+ \setcounter{umlDebug}{#1}%
+ %
+ % \setcounter{umlint@a}{#1}
+ % \setcounter{umlDebug}{\the\umlint@a}%
+ %
+ % \pst@cntg=#1\relax%
+ % \edef\psk@Integer{\the\pst@cntg}%
+}
+%
+% Alignement du texte dans la boite umlstack (l, c, r)
+\newcommand{\umlstr@Align}{}
+\define@key[psset]{pst-uml}{umlAlign}{\renewcommand{\umlstr@Align}{#1}%
+ \@ifundefined{newcolumntype}{}{% set alignment for array package
+ \newcolumntype{U}{#1}}}
+
+% Positionnement vertical de la boite umlstack (t, b, c)
+\newcommand{\umlstr@Pos}{}
+\define@key[psset]{pst-uml}{umlPos}{\renewcommand{\umlstr@Pos}{#1}}
+
+% Distance de s\'eparation du texte à la boite umlstack
+% Influe sur colsep pour l'espace horizontal et sur des strut pour
+% l'espace vertical
+\newlength\umldim@StackSep
+\define@key[psset]{pst-uml}{umlStackSep}{\pssetlength\umldim@StackSep{#1}}
+
+% coo\'eficient de modif de l'interligne de umlstack
+\newcommand{\umlreal@StackLinesStretch}{}
+\define@key[psset]{pst-uml}{umlStackLinesStretch}{%
+ \renewcommand{\umlreal@StackLinesStretch}{#1}}
+
+% Largeur de la boite "umlStack"
+\newlength\umldim@StackWidth
+\define@key[psset]{pst-uml}{umlStackWidth}{\pssetlength\umldim@StackWidth{#1}}
+
+% Largeur de la boite "classe"
+\newlength\umldim@ClassWidth
+\define@key[psset]{pst-uml}{umlClassWidth}{\pssetlength\umldim@ClassWidth{#1}}
+
+% distance entre deux \hline dans la boite "classe"
+\newlength\umldim@umlDoubleRuleSep
+\define@key[psset]{pst-uml}{umlDoubleRuleSep}{\pssetlength\umldim@umlDoubleRuleSep{#1}}
+
+% Chaine "Template"
+% umlParameter
+\newcommand{\umlstr@umlParameter}{}
+\define@key[psset]{pst-uml}{umlParameter}{\renewcommand{\umlstr@umlParameter}{#1}}
+
+
+% % un parametre boolean
+% \newif\ifuml@Shadow
+% \define@key[psset]{pst-uml}{umlShadow}[true]{\@nameuse{uml@Shadow#1}}
+% un parametre boolean
+\newboolean{umlbool@Shadow}
+\define@key[psset]{pst-uml}{umlShadow}[true]{\setboolean{umlbool@Shadow}{#1}}
+
+
+% Epaisseur de ligne pour le dessin d'un acteur
+\newlength\umldim@ActorLineWidth
+\define@key[psset]{pst-uml}{umlActorLineWidth}{\pssetlength\umldim@ActorLineWidth{#1}}
+
+% Nom d'un objet (umlState, ...) N'EST PAS UTILISE !
+\newcommand{\umlname@umlTitle}{}
+\define@key[psset]{pst-uml}{umlTitle}{\renewcommand{\umlname@umlTitle}{#1}}
+
+% Affectation des valeurs par defaut sprecifique a pst-uml:
+\psset{
+ umlClassWidth=0,
+ umlShadow=true,
+ umlActorLineWidth=0.6mm,
+ umlParameter=,
+ umlTitle=,
+ umlDoubleRuleSep=2mm,
+ umlStackLinesStretch=0.85,
+ umlStackSep=0,
+ umlStackWidth=0,
+ umlAlign=c,
+ umlPos=c,
+}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Quelques commandes utilitaires generales :
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% pour passer plusieurs lignes (par \\) dans un parametre simple
+%
+% La difficult\'e \'etait de g\'erer l'option "StackSep" pour le
+% haut et le bas du texte.
+% ATTENTION il faut s'assurer que cette commande fonctionne même
+% si le texte pass\'e en parametre commence ou finit par \hline !
+%
+%
+\newcommand{\umlStack}[2][]{{%
+ \psset{#1}%
+ \setlength{\tabcolsep}{\umldim@StackSep}%
+ \renewcommand{\arraystretch}{\umlreal@StackLinesStretch}%
+ \ifthenelse{\lengthtest{\umldim@StackWidth=0pt}}{%
+ % dimensionnement automatique
+ \@ifundefined{newcolumntype}{% standard
+ \begin{tabular}[\umlstr@Pos]{\umlstr@Align}%
+ }{% for array package, columntype U was defined previous
+ \begin{tabular}[\umlstr@Pos]{U}%
+ }%
+ }{% else
+ % dimensionnement fixe
+ \@ifundefined{newcolumntype}{% see above
+ \begin{tabular*}{\umldim@StackWidth}[\umlstr@Pos]{\umlstr@Align}%
+ }{%
+ \begin{tabular*}{\umldim@StackWidth}[\umlstr@Pos]{U}%
+ }%
+ }% endif
+ % \begin{tabular}[\umlstr@Pos]{\umlstr@Align}%
+ \setlength{\umldim@a}{1.5ex+\umldim@StackSep}%
+ \rule{0pt}{\umldim@a}%
+ \\[-2.5ex]%
+ #2%
+ \\[-2.5ex]%
+ \setlength{\umldim@a}{-\umldim@StackSep}%
+ \rule[-\umldim@StackSep]{0pt}{0pt}%
+ % \end{tabular}%
+ \ifthenelse{\lengthtest{\umldim@StackWidth=0pt}}{%
+ % dimensionnement automatique
+ \end{tabular}%
+ }{% else
+ % dimensionnement fixe
+ \end{tabular*}%
+ }% endif
+}}
+
+% FONCTIONNE MAIS LE PREMIER \rule gene si #2 commence par \hline
+% \newcommand{\umlStack}[2][]{{%
+% \psset{#1}%
+% \setlength{\tabcolsep}{\umldim@StackSep}%
+% \renewcommand{\arraystretch}{\umlreal@StackLinesStretch}%
+% \begin{tabular}{\umlstr@Align}%
+% \setlength{\umldim@a}{1.5ex+\umldim@StackSep}%
+% \rule{0pt}{\umldim@a}%
+% #2%
+% \setlength{\umldim@a}{-\umldim@StackSep}%
+% \rule[-\umldim@StackSep]{0pt}{0pt}
+% \end{tabular}%
+% }}
+
+% Pour creer une boite vide width, height
+% Exemple \umlEmptyBox{7cm}{10cm}
+\newcommand{\umlEmptyBox}[2]{%
+ \rule{#1}{0cm}%
+ \rule{0cm}{#2}%
+}
+
+% permet d'afficher <<MonStereoType>> sans serif.
+\newcommand{\umlStereoType}[1]{%
+ {\footnotesize\ensuremath{\ll}}\textsf{#1}{\footnotesize\ensuremath{\gg}}%
+}
+
+% permet d'afficher un triangle plein vers la droite.
+% Pas d'option pour l'instant
+\newcommand{\umlTriRight}[1][]{{%
+ \psset{#1}%
+ \space
+ \begin{pspicture}(0,0)(1.1ex,1.1ex)%
+ \pstriangle[linewidth=0,fillstyle=solid,fillcolor=black,gangle=-90]%
+ (0.55ex,0.55ex)(1.1ex,1.1ex)%
+ \end{pspicture}%
+ \space
+}}
+% permet d'afficher un triangle plein vers la gauche.
+% Pas d'option pour l'instant
+\newcommand{\umlTriLeft}[1][]{{%
+ \psset{#1}%
+ \space
+ \begin{pspicture}(0,0)(1.1ex,1.1ex)%
+ \pstriangle[linewidth=0,fillstyle=solid,fillcolor=black,gangle=90]%
+ (0.55ex,0.55ex)(1.1ex,1.1ex)%
+ \end{pspicture}%
+ \space
+}}
+
+% For drawing a grid of 1cm in pointed line
+% but \showgrid could be already define by another package
+% PLANTE SI \showgrid EST REDEFINIE DANS fvrbext.sty
+% \providecommand{\showgrid}{%
+% \psset{subgriddiv=1,griddots=10,gridlabels=6pt,}
+% \psgrid
+% }
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% La macro principal pour dessiner une classe :
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% Le corps de la commande est entre {{ }} pour assurer des changements
+% LOCAUX des valeurs de parametres (tels que \psset{...})
+\newcommand{\umlClass}[3][]{{%
+ \psset{#1}% Reading keyOptions
+ \setlength{\doublerulesep}{\umldim@umlDoubleRuleSep}%
+ \def\next{#2}%
+ \ifx\next\empty%
+ % Title IS EMPTY (JAMAIS UTILISE ! : A VIRER ??)
+ \sbox{\umlbox@out}{\texttt{\umlStack[umlStackSep=1ex]{#3}}}%
+ \else%
+ % Title is NOT EMPTY
+ \def\next{#3}%
+ \ifx\next\empty%
+ % Body IS EMPTY
+ \sbox{\umlbox@out}{\textbf{\umlStack[umlStackSep=1ex]{#2}}}%
+ \else%
+ % Body is NOT EMPTY
+ \sbox{\umlbox@out}{\ttfamily%
+ \begin{tabular}{l}%
+ \hfil\normalfont\textbf{%
+ \setlength{\tabcolsep}{0pt}
+ \begin{tabular}{c}
+ #2
+ \end{tabular}
+ }%
+ \\ \hline%
+ #3%
+ \end{tabular}%
+ }%
+ \fi%
+ \fi%
+ % Output box is now define
+ %
+ % On dessine la boite finale :
+ \ifthenelse{\boolean{umlbool@Shadow}}{%
+ \psshadowbox[fillstyle=solid,framesep=0,fillcolor=UMLgrey80]%
+ {\usebox{\umlbox@out}}%
+ }{%
+ {\setlength{\fboxsep}{0pt}\fbox{\usebox{\umlbox@out}}}%
+ }%
+ %
+ % On superpose \'eventuellement le template (rectangle pointill\'e)
+ %
+ \settowidth{\umldim@a}{\umlstr@umlParameter}%
+ \ifthenelse{\lengthtest{\umldim@a=0pt}}{%
+ }{%
+ \settoheight{\umldim@H}{\usebox{\umlbox@out}}% Height
+ \setlength{\umldim@a}{1.5ex}% dx
+ \setlength{\umldim@b}{\umldim@H - 0.3ex}% Height - dy
+ %
+ \rput[br](\umldim@a,\umldim@b){%
+ \psframebox[fillstyle=solid,fillcolor=white,linestyle=dashed]%
+ {\Large\textbf{\umlstr@umlParameter}}%
+ }%
+ }%
+ %
+}}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Memorisation d'une classe dans une boite
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% Surcourche à la commande de dessin de classe :
+% CECI FONCTIONNE MAL (la boite cree s'appel "#" )
+% Je n'ai pas reussi en jonglant aves les \csname et autre \@nameuse
+\newcommand{\umlSaveClass}[3][]{%
+ \newsavebox{\#2}%
+ \savebox{\#2}{%
+ \umlClass[#1]{#2}{#3}%
+ }%
+}
+% Pas de \umlUseClass car sera egalement utilis\'ee pour les acteurs, ...
+\newcommand{\umlUseBox}[1]{\usebox{\#1}}
+
+
+% % Surcourche à la commande de dessin de classe :
+% %
+% % CECI FONCTIONNE PAS :
+% % \newsavebox{\csname#2\endcsname} PLANTE :
+% % idem avec :
+% % \expandafter\newsavebox{\csname#2\endcsname}
+% % ! LaTeX Error: Command \csnameClasse 1 bis\endcsname already defined.
+% %
+% \newcommand{\umlSaveClass}[3][]{%
+% \typeout{**************avant newsavebox }
+% \expandafter\newsavebox{\csname#2\endcsname}%
+% \typeout{**************apres newsavebox }
+% \savebox{\csname#2\endcsname}{%
+% \typeout{**************apres savebox }
+% \umlClass[#1]{#2}{#3}%
+% }%
+% }
+% % Pas de \umlUseClass car sera aussi utilis\'ee pour les acteurs, ...
+% \newcommand{\umlUseBox}[1]{%
+% \typeout{***************avant use box }
+% \usebox{\csname#1\endcsname}%
+% }
+
+
+% % Surcourche à la commande de dessin de classe :
+% % CECICOMPILE MAIS FONCTIONNE PAS
+% % affiche "Classe 1bisClasse 1bis" (nom double) sous la classe
+% \newcommand{\umlSaveClass}[3][]{%
+% \newsavebox{\@nameuse{#2}}%
+% \savebox{\@nameuse{#2}}{%
+% \umlClass[#1]{#2}{#3}%
+% }%
+% }
+% % Pas de \umlUseClass car sera aussi utilis\'ee pour les acteurs, ...
+% \newcommand{\umlUseBox}[1]{%
+% \usebox{\@nameuse{#1}}%
+% }
+
+% % Surcourche à la commande de dessin de classe :
+% % CECI FONCTIONNE PAS :
+% % ! Illegal parameter number in definition of \@tempa.
+% % Je n'ai pas reussi en jonglant aves les \csname et autre \@nameuse
+% \newcommand{\umlSaveClass}[3][]{%
+% \@namedef{boxname}{#2}
+% \newsavebox{\expandafter\boxname}%
+% \savebox{\expandafter\boxname}}{%
+% \umlClass[#1]{#2}{#3}%
+% }%
+% }
+% % Pas de \umlUseClass car sera aussi utilis\'ee pour les acteurs, ...
+% \newcommand{\umlUseBox}[1]{%
+% \@namedef{boxname}{#1}
+% \usebox{\expandafter\boxname}%
+% }
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Memorisation d'une classe dans une commande
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% A faire (utiliser gdef par exemple ?)
+% s'assurer que la commande cree est GLOGALE !!
+
+
+% \newcommand{\umlDefClass}[3][]{%
+% \@ifundefined{\csname#2\endcsname}{%
+% % NOT DEFINE
+% \typeout{^^Jcommande NON definie : "#2"^^J}%
+% \newcommand{\csname#2\endcsname}{%
+% \umlClass[#1]{#2}{#3
+% }
+% }{%
+% % IS DEFINE
+% \typeout{^^Jcommande DEJA definie : "#2"^^J}%
+% \renewcommand{\csname#2\endcsname}{%
+% \umlClass[#1]{#2}{#3
+% }
+% }
+% }
+% % Pas de \umlRunClass car sera aussi utilis\'ee pour les acteurs, ...
+% \newcommand{\umlRun}[1]{\@usename{#1}}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% La macro pour dessiner un acteur :
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\newcommand{\umlActor}[2][]{{%
+ \psset{unit=0.8,arrows=-}%
+ \psset{#1}%
+ \begin{tabular}[t]{c}%
+ \begin{pspicture}(-0.5,0)(0.5,1.9)%
+ \psset{linewidth=\umldim@ActorLineWidth}%
+ \pscircle(0,1.6){0.3\psyunit}% la tete
+ \psline(0cm,.65)(0cm,1.3)% le tronc
+ \psline(-0.25,0cm)(0cm,0.65)% jambe gauche
+ \psline(0.25,0cm)(0cm,0.65)% jambe droite
+ \psline(-0.5,1)(0.5,1)% les bras
+ \end{pspicture}\\
+ \begin{pspicture}(0,0)%
+ \setlength{\tabcolsep}{0pt}%
+ \begin{tabular}[t]{c}%
+ #2%
+ \end{tabular}%
+ \end{pspicture}\\
+ \end{tabular}%
+}}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% La macro pour dessiner les useCase :
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% \umlCase[keyOptions]{Title}{Body} : #2 = Title
+% Option : idem que psovalbox
+% Remarque : utiliser ovalnode et non pas rnode pour les placements
+%
+% BUG : \psovalbox creer une boite RECTANGULAIRE dans la quelle il y a
+% un oval => difficile de s\'eparer la CREATION du dessin et le PLACEMENT
+% de celui-ci avec la cr\'eation d'un node CONCLUSION : inutilis\'e !
+% (Utiliser plutot la commande suivante \umlCasePut)
+%
+\newcommand{\umlCase}[2][]{{%
+ \psset{#1}% Reading keyOptions
+ \sbox{\umlbox@out}{\umlStack{#2}}%
+ \psovalbox{\usebox{\umlbox@out}}
+}}
+
+% Pour placer directement dans un ovalnode
+% UTILISATION :
+% \umlCasePut[keyOptions{10,2}{C6}{Identifier\\contraintes bloquantes}%
+%
+\newcommand{\umlCasePut}[4][]{{%
+ \psset{#1}% Reading keyOptions
+ \rput(#2){\ovalnode[framesep=0]{#3}{\umlStack{#4}}}%
+}}
+\let\umlPutCase\umlCasePut % for compatibility
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% La macro pour dessiner les etats :
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% \umlState[keyOptions]{Title}{Body} : #2 = Title ; #3 = Body
+%
+\newcommand{\umlState}[3][]{{%
+ \psset{#1}% Reading keyOptions
+ % \typeout{***** DEBUT umlState : Titre=:#2:, Body=:#3:}%
+ \def\next{#2}%
+ \ifx\next\empty
+ % \typeout{**Title IS EMPTY : #2}
+ \sbox{\umlbox@out}{\texttt{\umlStack[umlStackSep=0.35em]{#3}}}%
+ \else
+ % \typeout{**Title is NOT EMPTY : #2}%
+ \def\next{#3}%
+ \ifx\next\empty
+ % \typeout{**Body IS EMPTY : #3}%
+ \sbox{\umlbox@out}{\textbf{\umlStack[umlStackSep=.35em]{#2}}}%
+ \else
+ % \typeout{**Body is NOT EMPTY : #3}%
+ \sbox{\umlbox@out}{\umlStack{%
+ \textbf{%
+ \umlStack[umlStackSep=.35em]{#2}%
+ }\\
+ \hline%
+ \texttt{%
+ \umlStack[umlStackSep=.35em,umlAlign=l]{#3}%
+ }%\\%
+ }}%
+ \fi
+ \fi
+ \psframebox[framesep=0,cornersize=absolute,linearc=0.2]%
+ {\usebox{\umlbox@out}}%
+}}
+
+
+\newcommand{\umlStateIn}[1][]{{%
+ \psset{#1}% Reading keyOptions
+ \begin{pspicture}[](-0.25,-0.25)(0.25,0.25)
+ \pscircle[fillstyle=solid,fillcolor=black]{0.25}%
+ \end{pspicture}%
+}}
+
+\newcommand{\umlStateOut}[1][]{{%
+ \psset{#1}% Reading keyOptions
+ \begin{pspicture}[](-0.40,-0.40)(0.40,0.40)
+ \pscircle[fillstyle=solid,fillcolor=black]{0.25}%
+ \pscircle[fillstyle=none,linewidth=0.06]{0.40}%
+ \end{pspicture}%
+}}
+
+% Pour placer directement dans un cnode
+% UTILISATION :
+% \umlPutStateIn[keyOptions]{10,2}{stateInA}%
+%
+\newcommand{\umlPutStateIn}[3][]{{%
+ \psset{#1}% Reading keyOptions
+ \rput(#2){\cnode[linestyle=none]{0.25}{#3}{%
+ \pscircle[fillstyle=solid,fillcolor=black]{0.25}%
+ }}%
+}}
+
+\newcommand{\umlPutStateOut}[3][]{{%
+ \psset{#1}% Reading keyOptions
+ \rput(#2){\cnode[linestyle=none]{0.40}{#3}{%
+ \pscircle[fillstyle=solid,fillcolor=black]{0.25}%
+ \pscircle[fillstyle=none,linewidth=0.06]{0.40}%
+ }}%
+}}
+
+% A FAIRE : pour le pseudo-\'etat 'History"
+% \newcommand{\umlStateH}[1][]{{%
+% \psset{#1}% Reading keyOptions
+% }}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% La macro pour dessiner les notes :
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% \umlNote[keyOptions]{Body} :
+%
+\newcommand{\umlNote}[2][]{{%
+ \psset{umlAlign=l}%
+ \psset{#1}% Reading keyOptions
+ \sbox{\umlbox@a}{\texttt{\umlStack[umlStackSep=1.5ex]{#2}}}%
+ \settowidth{\umldim@W}{\usebox{\umlbox@a}}% Width
+ \settoheight{\umldim@H}{\usebox{\umlbox@a}}% Height
+ \settodepth{\umldim@D}{\usebox{\umlbox@a}}% Depth
+ \setlength{\umldim@a}{\umldim@W - 2.0ex}% Width - coin
+ \setlength{\umldim@b}{\umldim@H - 2.0ex}% Height - coin
+ \setlength{\umldim@c}{\umldim@H + \umldim@D}% hauteur totale
+ \psframe(0,-\umldim@D)(\umldim@W,\umldim@H)%
+ \psframe[linecolor=white](\umldim@a,\umldim@b)(\umldim@W,\umldim@H)%
+ % On d\'ecalle le triangle vers l'int\'erieur pour qu'il ne d\'eborde pas :
+ \setlength{\umldim@W}{\umldim@W-1.0\pslinewidth}%
+ \setlength{\umldim@H}{\umldim@H-1.0\pslinewidth}%
+ % \setlength{\umldim@D}{\umldim@D-1.0\pslinewidth}%
+ \pspolygon(\umldim@W,\umldim@b)%
+ (\umldim@a,\umldim@H)%
+ (\umldim@a,\umldim@b)%
+ (\umldim@W,\umldim@b)%
+ \usebox{\umlbox@a}%
+}}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Commandes de placement relatif de type "LOGO"
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% A partir d'une version TEX de Denis GIROU
+% Inspired by an idea of Sebastian Rahtz <s.rahtz@elsevier.co.uk>
+% (LGC, example 4-10-10)
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% For debug : ShowPosition
+%
+% usage :
+% \ifthenelse{\value{umlDebug} > 0}{\ShowPosition}{}%
+%
+\newboolean{umlDebug}\setboolean{umlDebug}{false}
+\newcommand{\ShowPosition}[1][]{%
+ \typeout{%
+ **** umlCpt@Direction=\the\value{umlCpt@Direction} - %
+ X=\the\X\space - Y=\the\Y^^J%
+ \space\space\space\space#1^^J%
+ }%
+}%
+
+
+% Direction (non utilis\'ee pour l'instant) cod\'e en nombre de quart de cercle
+% (i x 90) => 0 right, 1 up, 2 left, 3 down
+%
+\newcounter{umlCpt@Direction}\setcounter{umlCpt@Direction}{-1}
+
+% New length for recording current postion :
+\newlength{\umldim@PosX}%\setlength\umldim@PosX{0pt}
+\newlength{\umldim@PosY}%\setlength\umldim@PosY{0pt}
+% ALIAS for user ?
+\newlength{\X}%\setlength\X{\umldim@PosX}
+\newlength{\Y}%\setlength\Y{\umldim@PosY}
+
+% Reset position
+\newcommand{\ResetXY}{%
+ \pssetlength{\umldim@PosX}{0}%
+ \pssetlength{\umldim@PosY}{0}%
+ \pssetlength{\X}{0}%
+ \pssetlength{\Y}{0}%
+ \ifthenelse{\value{umlDebug} > 0}{\ShowPosition}{}%
+}
+\ResetXY
+% % For Getting X or Y position by the user.
+% \newcommand{\X}{\the\umldim@PosX}
+% \newcommand{\Y}{\the\umldim@PosY}
+
+% Set position
+\newcommand{\SetX}[1]{%
+ \pssetlength{\umldim@PosX}{#1}%
+ \pssetlength{\X}{#1}%
+ \ifthenelse{\value{umlDebug} > 0}{\ShowPosition}{}%
+}
+\newcommand{\SetY}[1]{%
+ \pssetlength{\umldim@PosY}{#1}%
+ \pssetlength{\Y}{#1}%
+ \ifthenelse{\value{umlDebug} > 0}{\ShowPosition}{}%
+}
+% IMPORTANT : essayer d'utiliser les nodes ou autre
+% coordonnees speciales de pstricks pour \SetXY :
+% Utilisation de \pst@getcoor et \pssetxlength
+\newcommand{\SetXY}[1]{%
+ \pssetxlength{\umldim@PosX}{#1}%
+ \pssetylength{\umldim@PosY}{#1}%
+ \pssetxlength{\X}{#1}%
+ \pssetylength{\Y}{#1}%
+ \ifthenelse{\value{umlDebug} > 0}{\ShowPosition}{}%
+}
+
+\newcommand{\incrX}[1]{%
+ % record the direction for later (NOT DONE)
+ % \setcounter{umlCpt@Direction}{0} % if #1 is positive
+ % \setcounter{umlCpt@Direction}{3} % if #1 is negative
+ % increment X position
+ \psaddtolength{\umldim@PosX}{#1}
+ \psaddtolength{\X}{#1}
+}
+\newcommand{\incrY}[1]{%
+ % record the direction for later (NOT DONE)
+ % \setcounter{umlCpt@Direction}{1} % if #1 is positive
+ % \setcounter{umlCpt@Direction}{4} % if #1 is negative
+ % increment Y position
+ \psaddtolength{\umldim@PosY}{#1}
+ \psaddtolength{\Y}{#1}
+}
+% For moving Est, West, North or Sud
+\newcommand{\moveE}[1]{\incrX{#1}}
+\newcommand{\moveW}[1]{\incrX{-#1}}
+\newcommand{\moveN}[1]{\incrY{#1}}
+\newcommand{\moveS}[1]{\incrY{-#1}}
+
+
+% % % \newcommand{\Right}[1]{%
+% % % % record the direction for later
+% % % \setcounter{umlCpt@Direction}{0}
+% % % % increment X position
+% % % \psaddtolength{\umldim@PosX}{#1}
+% % % }
+% % % \newcommand{\Up}[1]{%
+% % % % record the direction for later
+% % % \setcounter{umlCpt@Direction}{1}
+% % % % increment Y position
+% % % \psaddtolength{\umldim@PosY}{#1}
+% % % }
+% % %
+% % % \newcommand{\Left}[1]{%
+% % % % record the direction for later
+% % % \setcounter{umlCpt@Direction}{2}
+% % % % decrement X position
+% % % \psaddtolength{\umldim@PosX}{-#1}
+% % % }
+% % %
+% % % \newcommand{\Down}[1]{%
+% % % % record the direction for later
+% % % \setcounter{umlCpt@Direction}{3}
+% % % % decrement Y position
+% % % \psaddtolength{\umldim@PosY}{-#1}
+% % % }
+
+% % Put an object at current coordinates
+% \newcommand{\rputXY}[2][]{%
+% \psset{#1}%
+% \rput(\umldim@PosX,\umldim@PosY){#2}
+% }
+%
+% Put an object at current coordinates
+\newcommand{\rputXY}[2][]{%
+ \psset{#1}%
+ \rput(\umldim@PosX,\umldim@PosY){#2}%
+}
+
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% D\'efinition des "fleches" de UML (sous forme de labels)
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\newcommand{\ncputicon}[2][]{{%
+ \psset{npos=0,nrot=:D}% defaut : au debut et vers la gauche
+ \psset{#1}%
+ \@ifundefined{umlicon@#2}%
+ {\typeout{^^JERREUR : FLECHE NON definie "#2"^^J}}%
+ {}% FLECHE BIEN definie
+ \ncput{\@nameuse{umlicon@#2}}
+}}
+% Definition des fleches de base (vers la droite)
+% Utiliser nrot=:U pour une orientation vers la droite (Up)
+% Utiliser nrot=:D pour une orientation vers la gauche (Down)
+\newcommand{\umlicon@umlV}{%
+ \psline(-0.4,0.2)(0,0)(-0.4,-0.2)
+}
+\newcommand{\umlicon@umlHerit}{%
+ \pstriangle[gangle=-90,
+ linestyle=solid,
+ fillstyle=solid,
+ fillcolor=white,
+ ](-0.6,0)(0.4,0.6)% (centre)(Width,Length)
+}
+\newcommand{\umlicon@umlAgreg}{%
+ \psdiamond[linestyle=solid,
+ fillstyle=solid,
+ fillcolor=white,
+ ](-0.25,0)(-0.25,0.15)
+}
+\newcommand{\umlicon@umlCompos}{%
+ \psdiamond[linestyle=solid,
+ fillstyle=solid,
+ fillcolor=black,
+ ](-0.25,0)(-0.25,0.15)
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Nouvelles d\'efinition pour les interconnexions
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% Ces connecteurs sont une surcouche aux diff\'erents connecteurs
+% propos\'es par pstricks.
+% Leur but est de simplifier le trac\'e des liens en se restreingnant aux
+% directions horizontales et verticales.
+%
+% Le principe est d'indiquer dans le nom même de la commande le nombre
+% de segments à tracer et leur direction :
+% - E, W, N, S pour Est, West, North, Sud
+% - H, V pour Horizontal; Vertical
+% - D pour diagonal
+% - X pour indiff\'erent
+
+% Un seul segments
+% Effet de bord : en fait, un deuxieme segment est dessin\'e. Mais celui
+% n'apparait g\'en\'eralement pas car il longe la frontière de boite
+\newpsobject{ncE}{ncangle}{angleA=0,angleB=180,armB=0,npos=0.5,nodesepB=-0.5pt}
+% \newpsobject{ncE}{ncangle}{angleA=0,angleB=180,armB=0,npos=0.5}
+\newpsobject{ncW}{ncangle}{angleA=180,angleB=0,armB=0,npos=0.5}
+\newpsobject{ncN}{ncangle}{angleA=90,angleB=-90,armB=0,npos=0.5}
+\newpsobject{ncS}{ncangle}{angleA=-90,angleB=90,armB=0,npos=0.5}
+
+% Deux segments
+\newpsobject{ncEN}{ncangle}{angleA=0,angleB=-90,armB=0}
+\newpsobject{ncES}{ncangle}{angleA=0,angleB=90,armB=0}
+\newpsobject{ncWN}{ncangle}{angleA=180,angleB=-90,armB=0}
+\newpsobject{ncWS}{ncangle}{angleA=180,angleB=90,armB=0}
+\newpsobject{ncNE}{ncangle}{angleA=90,angleB=180,armB=0}
+\newpsobject{ncNW}{ncangle}{angleA=90,angleB=0,armB=0}
+\newpsobject{ncSE}{ncangle}{angleA=-90,angleB=180,armB=0}
+\newpsobject{ncSW}{ncangle}{angleA=-90,angleB=0,armB=0}
+
+% Trois segments
+% On peut utiliser armA ou armB pour imposer la longueur des extr\'emit\'es
+%
+% remplace \ncbar (connecteurs en forme de U)
+\newpsobject{ncEVW}{ncangles}{angleA=0,angleB=0}
+\newpsobject{ncWVE}{ncangles}{angleA=180,angleB=180}
+\newpsobject{ncSHN}{ncangles}{angleA=-90,angleB=-90}
+\newpsobject{ncNHS}{ncangles}{angleA=90,angleB=90}
+
+% connecteurs en forme de Z (mais \`a angles droits)
+\newpsobject{ncEVE}{ncangles}{angleA=0,angleB=180}
+\newpsobject{ncWVW}{ncangles}{angleA=180,angleB=0}
+\newpsobject{ncNHN}{ncangles}{angleA=90,angleB=-90}
+\newpsobject{ncSHS}{ncangles}{angleA=-90,angleB=90}
+
+
+% connecteurs 3 segments dont segment median en diagonale (incomplet)
+\newpsobject{ncEDE}{ncdiag}{angleA=0,angleB=180}
+\newpsobject{ncWDW}{ncdiag}{angleA=180,angleB=0}
+\newpsobject{ncNDN}{ncdiag}{angleA=90,angleB=-90}
+\newpsobject{ncSDS}{ncdiag}{angleA=-90,angleB=90}
+
+
+% quatre (voire trois) segments :
+\newpsobject{ncSXE}{ncangles}{angleA=-90,angleB=180}
+\newpsobject{ncSXW}{ncangles}{angleA=-90,angleB=0}
+\newpsobject{ncEXS}{ncangles}{angleA=0,angleB=90}
+\newpsobject{ncEXN}{ncangles}{angleA=0,angleB=-90}
+\newpsobject{ncWXS}{ncangles}{angleA=180,angleB=90}
+\newpsobject{ncWXN}{ncangles}{angleA=180,angleB=-90}
+\newpsobject{ncNXE}{ncangles}{angleA=90,angleB=180}
+\newpsobject{ncNXW}{ncangles}{angleA=90,angleB=0}
+
+
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% FIN
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\typeout{Package \filename.sty is loaded.}
+\endinput \ No newline at end of file