\section{Jouons avec TikZ\label{tikzz}}
%=======================================
\subsection{TikZ dans le diagramme FAST}\label{tikzpartout}
%------------------------------------------------
L'environnement FAST est un environnement \emph{TikZ}.
Il est donc possible d'y ajouter n'importe quelle fonction de dessin de \emph{TikZ}.
Il en est de m�me pour les descendances des fonctions.
%##########################################
\begin{code}
\begin{fast}{Fonction de Service}
\FT{FT1}{\draw [shift={(4,-1)},rotate=45,scale=0.5,ball color=blue]
(0,0) .. controls +(0,2) and +(0,3) .. (3,0)
.. controls +(0,-2) and +(0,2) .. (0,-4)
.. controls +(0,2) and +(0,-2) .. (-3,0)
.. controls +(0,2) and +(0,2) .. (0,0);
} %Exemple pris dans ``TikZ pour l'impatient''
\FT{FT2}{}
\end{fast}
\end{code}
%##########################################
\cqd
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{exemple}
\begin{fast}{Fonction de Service}
\FT{FT1}{\draw [shift={(4,-1)},rotate=45,scale=0.5,ball color=blue]
(0,0) .. controls +(0,2) and +(0,3) .. (3,0)
.. controls +(0,-2) and +(0,2) .. (0,-4)
.. controls +(0,2) and +(0,-2) .. (-3,0)
.. controls +(0,2) and +(0,2) .. (0,0);}
%Exemple pris dans ``TikZ pour l'impatient''
\FT{FT2}{}
\end{fast}
\end{exemple}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Il est � noter que dans l'exemple pr�c�dent, la seconde ligne du diagramme ne tient pas compte de la ``place'' que prend notre dessin.
Pour que ce soit le cas, il faut que la descendance (c'est � dire le dessin) ``marque'' sa place en cr�ant une coordonn�e correspondant au point le plus bas du dessin.
C'est sur ce point que la seconde ligne va se baser.
Ce point doit �tre enregistr� dans la variable {\color{blue}\verb'BoiteMinimums'} de la mani�re suivante :
%##########################################
\begin{code}
\coordinate (BoiteMinimums) at (X,Y);
\end{code}
%##########################################
o� le couple $(X, Y)$ est la coordonn�es du minimum.
Par exemple :
%##########################################
\begin{code}
\begin{fast}{Fonction de Service}
\FT{FT1}{\draw [shift={(4,-1)},rotate=45,scale=0.5,ball color=blue]
(0,0) .. controls +(0,2) and +(0,3) .. (3,0)
.. controls +(0,-2) and +(0,2) .. (0,-4)
.. controls +(0,2) and +(0,-2) .. (-3,0)
.. controls +(0,2) and +(0,2) .. (0,0);
\coordinate (BoiteMinimums) at (0,-2.5);
} %Exemple pris dans ``TikZ pour l'impatient''
\FT{FT2}{}
\end{fast}
\end{code}
%##########################################
\cqd
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{exemple}
\begin{fast}{Fonction de Service}
\FT{FT1}{\draw [shift={(4,-1)},rotate=45,scale=0.5,ball color=blue]
(0,0) .. controls +(0,2) and +(0,3) .. (3,0)
.. controls +(0,-2) and +(0,2) .. (0,-4)
.. controls +(0,2) and +(0,-2) .. (-3,0)
.. controls +(0,2) and +(0,2) .. (0,0);
\coordinate (BoiteMinimums) at (0,-2.5);}
%Exemple pris dans ``TikZ pour l'impatient''
\FT{FT2}{}
\end{fast}
\end{exemple}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsection{Gestion des bo�tes}\label{boites}
%-----------------------------------------
Les boites cr��es dans le diagramme FAST sont r�alis�es par la fonction {\color{blue}\verb'\node'} de \emph{TikZ}.
Ces bo�tes sont nomm�es sous la forme suivante : {\color{blue}\verb'\fastBoiteX'} o� {\color{blue}\verb'X'} est remplac� par le num�ro de la boite.
Ce num�ro est d�fini par ordre de cr�ation des boites : de gauche � droite, de haut en bas.
Voici un exemple faisant appara�tre le nom des boites :
\begin{center}
\begin{fast}{fastBoite0}
\FT{fastBoite1}{\FT{fastBoite2}{}
\FT{fastBoite3}{\FT{fastBoite4}{}}}
\FT{fastBoite5}{\FT{fastBoite6}{}
\FT{fastBoite7}{}}
\end{fast}
\end{center}
Partant de l�, il est alors possible de r�aliser des modifications manuelles sur le diagramme.
Par exemple, pour avoir une solution technique commune � deux fonctions techniques :
%##########################################
\begin{code}
\begin{fast}{Fonction de service}
\fastFT{FT1}{\fastST{ST}}
\fastFT{FT2}{}
\draw[line width=\fastEpaisseurTraits]
(fastBoite3.east) -| ($0.5*(fastBoite2.north west)
+0.5*(fastBoite1.north east)+(0,\fastDecalageTrait)$);
\end{fast}
\end{code}
%##########################################
\cqd
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{exemple}
\begin{fast}{Fonction de service}
\fastFT{FT1}{\fastST{ST}}
\fastFT{FT2}{}
\draw[line width=\fastEpaisseurTraits](fastBoite3.east) -| ($0.5*(fastBoite2.north west)+0.5*(fastBoite1.north east)+(0,\fastDecalageTrait)$);
\end{fast}
\end{exemple}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsection{Cr�er sa propre boite}\label{perso}
%--------------------------------------
Les boites sont � peu pr�s toutes cr��es sur le m�me mod�le et il est possible d'en cr�er d'autres :
%##########################################
\begin{code}
\newcommand*{\maBoite}[2]{
\fastAvanceColonne %On avance d'une colonne
\addtocounter{cptBoite}{1} %On incremente le numero de la boite
%%%%%%%%%%%%%%%%%%%%%%%
%Cr�er votre boite ici :
\node [anchor=north west] (noeud \thecptAbscisse) at
($(\posX,0)+(BoiteMinimums)$) {#1};
%%%%%%%%%%%%%%%%%%%%%%
\node[inner sep=0,fit=(noeud \thecptAbscisse.north west)
(noeud \thecptAbscisse.south east)]
(fastBoite\thecptBoite) {};%Boite de nommage
\fastTraceConnecteurs
%%%%%%%%%%%%%%%%%%%%%%%%%
%Votre descendance :
#2
%%%%%%%%%%%%%%%%%%%%%%%%%
\fastEnregistreMinimum %Enregistre le minimum de la boite
\fastReculeColonne %Recule d'une colonne
}
\end{code}
%##########################################
Le n\oe ud cr�� sous la ligne ``{\color{blue}\verb'Cr�er votre boite ici'}'' est la boite que vous allez afficher.
C'est elle que vous allez pouvoir modifier pour l'adapter � vos besoins.
Ce n\oe ud doit obligatoirement porter le nom {\color{blue}\verb'(noeud \thecptAbscisse)'}.
Les autres commandes ne doivent pas �tre chang�es.
Voici un exemple :
%##########################################
\begin{code}
\newcommand*{\maBoite}[2]{
\fastAvanceColonne %On avance d'une colonne
\addtocounter{cptBoite}{1} %On incremente le numero de la boite
%%%%%%%%%%%%%%%%%%%%%%%
%Cr�er votre boite ici
\node [anchor=north west,draw,rounded corners=3pt,
aspect=2.5,text=red](noeud \thecptAbscisse)
at ($(\posX,0)+(BoiteMinimums)$) {#1};
%%%%%%%%%%%%%%%%%%%%%%
\node[inner sep=0,fit=(noeud \thecptAbscisse.north west)
(noeud \thecptAbscisse.south east)]
(fastBoite\thecptBoite) {};
\fastTraceConnecteurs
%%%%%%%%%%%%%%%%%%%%%%%%%
%Votre descendance
#2
%%%%%%%%%%%%%%%%%%%%%%%%%
\fastEnregistreMinimum %Enregistre le minimum de la boite
\fastReculeColonne %Recule d'une colonne
}
\begin{fast}{Fonction de Service}
\maBoite{Ma boite}
{\fastST{Solution}}
\FT{Fonction}{\maBoite{Ma boite bis}{}
\fastFT{Fonction}{}}
\end{fast}
\end{code}
%##########################################
\cqd
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{exemple}
\newcommand*{\maBoite}[2]{
\fastAvanceColonne %On avance d'une colonne
\addtocounter{cptBoite}{1} %On incremente le numero de la boite
%%%%%%%%%%%%%%%%%%%%%%%
%Cr�er votre boite ici
\node [anchor=north west,draw,rounded corners=3pt,aspect=2.5,text=red](noeud \thecptAbscisse) at ($(\posX,0)+(BoiteMinimums)$) {#1};
%%%%%%%%%%%%%%%%%%%%%%
\node[inner sep=0,fit=(noeud \thecptAbscisse.north west)
(noeud \thecptAbscisse.south east)]
(fastBoite\thecptBoite) {};%Boite vide par dessus, aux bonne dimension, afin de lui donner un nom
\fastTraceConnecteurs
%%%%%%%%%%%%%%%%%%%%%%%%%
%Votre descendance
#2
%%%%%%%%%%%%%%%%%%%%%%%%%
\fastEnregistreMinimum %Enregistre le minimum de la boite
\fastReculeColonne %Recule d'une colonne
}