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