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

