summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/doc/generic/pst-uml/pst-uml-doc.tex
blob: 5403df5d0589c9702ec37a325f2d1be49ccc3fe3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
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}