BBM : installer
authorbastiena
Tue, 24 Jul 2012 16:35:10 +0200
changeset 54 eb52a12370a3
parent 53 5df462180423
child 55 afd60399a7b5
BBM : installer
.hgignore
front_idill/doc/Documentation - Front IDILL.html
front_idill/src/player/index.html
front_idill/src/player/markers/contact.png
front_idill/src/player/markers/screw.png
front_js/doc/tutorial - TraKERS Front JS et Wamp.html
front_js/doc/tutorial front js et wamp.html
front_processing/doc/tutorial - TraKERS Front Processing.html
front_processing/doc/tutorial front processing.html
middleware/Communication/Communication.csproj
middleware/Communication/WSClient.cs
middleware/Debug/DebugWindow.xaml
middleware/Debug/DebugWindow.xaml.cs
middleware/Debug/Properties/Resources.Designer.cs
middleware/Debug/Properties/Resources.resx
middleware/dist/BBM.iss
middleware/dist/TraKERS.iss
middleware/src/bin/Release/BBM - config.txt
middleware/src/bin/Release/TraKERS - config.txt
middleware/src/bin/Release/config.txt
readme - BBM Middleware.txt
readme - Front Processing.txt
readme - Front Web.txt
readme - Middleware.txt
readme - TraKERS Front Processing.txt
readme - TraKERS Front Web.txt
readme - TraKERS Middleware.txt
--- a/.hgignore	Tue Jul 24 11:14:52 2012 +0200
+++ b/.hgignore	Tue Jul 24 16:35:10 2012 +0200
@@ -80,6 +80,9 @@
 middleware/src/bin/Release/Front Processing.lnk
 middleware/src/bin/Release/Front JS.lnk
 middleware/src/bin/Release/ErrorFile.txt
+middleware/src/bin/Documentation - Front IDILL.html
+middleware/src/bin/*.txt
+middleware/src/bin/*.html
 syntax: regexp
 middleware/extern/.*/(bin|obj)
 middleware/src/bin/Debug/*
--- a/front_idill/doc/Documentation - Front IDILL.html	Tue Jul 24 11:14:52 2012 +0200
+++ b/front_idill/doc/Documentation - Front IDILL.html	Tue Jul 24 16:35:10 2012 +0200
@@ -30,7 +30,7 @@
 			<ul>
 				<li>Google Chrome 20 ou supérieur est nécessaire pour lancer ce prototype.</li>
 				<li>WampServer 2 doit être installé.</li>
-				<li>Le dossier Front IDILL doit être copié à la racine du dossier www de Wamp (par défaut dans C:\wamp\www).</li>
+				<li>Les dossiers Front IDILL et lib doivent être copiés à la racine du dossier www de Wamp (par défaut dans C:\wamp\www).</li>
 			</ul>
 		</p>
 
--- a/front_idill/src/player/index.html	Tue Jul 24 11:14:52 2012 +0200
+++ b/front_idill/src/player/index.html	Tue Jul 24 16:35:10 2012 +0200
@@ -2,7 +2,7 @@
 <html dir="ltr" xml:lang="fr" xmlns="http://www.w3.org/1999/xhtml" lang="fr">
 
 <head>
-	<title>Metadataplayer - Polemic tweet integration test</title>
+	<title>Metadataplayer - test</title>
 	<meta http-equiv='cache-control' content='no-cache'>
 	<meta http-equiv='expires' content='0'>
 	<meta http-equiv='pragma' content='no-cache'>
Binary file front_idill/src/player/markers/contact.png has changed
Binary file front_idill/src/player/markers/screw.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/front_js/doc/tutorial - TraKERS Front JS et Wamp.html	Tue Jul 24 16:35:10 2012 +0200
@@ -0,0 +1,36 @@
+<html>
+    <head>
+        <title>TraKERS v3.5 - How To : Intégrer le Front JS à Wamp pour pouvoir le tester</title>
+        <meta charset="UTF-8" />
+    </head>
+    
+    <body>
+        <p>Bienvenue dans ce tutorial visant à intégrer le Front JS à Wamp.</p>
+        <h2>Sommaire</h2>
+        
+        <ul>
+            <li>Installation et configuration de WampServer 2.</li>
+            <li>Copie des fichiers pour pouvoir les lancer dans Wamp.</li>
+            <li>Tester les modules du Front dans Wamp.</li>
+        </ul>
+        
+        <h3>Installation et configuration de WampServer 2.</h3>
+        
+        <p>Comme vous l'aurez certainement remarqué dans le readme associé à ce Front, il est nécessaire d'acquérir WampServer 2.</p>
+        <p>Normalement, l'installeur intègre un installeur. Néanmoins, vous pouvez aussi le trouver <a href="http://www.wampserver.com/en/">ici</a>.</p>
+        <p>Durant l'installation (par défaut sur le disque C:\), sélectionnez les paramètres par défaut, excepté pour le navigateur par défaut dans Wamp. Choisissez Google Chrome. Si vous ne le possédez pas, il est disponible <a href="https://www.google.com/chrome/index.html?hl=fr">ici</a>.</p>
+        <p>Une fois Wamp installé (on supposera qu'il est par défaut à C:\wamp), lancez-le. Une icone W devrait apparaître dans la barre des notifications. Clic gauche sur cette icone > Put Online.</p>
+        
+        <h3>Copie des fichiers pour pouvoir les lancer dans Wamp.</h3>
+        
+        <p>Afin de pouvoir tester le Front JS, il est nécessaire de copier le Front dans Wamp. Allez sur l'icone de wamp dans la barre des notifications, puis, clic gauche > www directory.</p>
+        <p>C'est le dossier des projets dans wamp.</p>
+        <p>Prenez les dossiers gestures, pointers et lib de Front JS pour les mettre dans www.</p>
+        
+        <h3>Tester les modules du Front dans Wamp.</h3>
+        
+        <p>A présent, vous pouvez lancer le Middleware via l'éxecutable MainModule.exe. Une fois allumé, il ne vous reste qu'à tester les Fronts JS en cliquant gauche sur l'icone de wamp > localhost. La fenêtre d'accueil de wamp s'affiche. Sur le menu de gauche, sélectionnez les projets gestures et pointers (l'un ou l'autre, ou les deux). Une fois la ou les fenêtres ouvertes dans chrome, vous pourrez bouger les pointeurs dans le projet pointers, ou bien voir les notifications de gestures envoyées par le Middleware dans le projet gestures.</p>
+        
+        <p>Si vous expérimentez des difficultés ou souhaitez nous soumettre une requête, veuillez consulter le fichier contact.txt à la racine du projet.</p>
+    </body>
+</html>
\ No newline at end of file
--- a/front_js/doc/tutorial front js et wamp.html	Tue Jul 24 11:14:52 2012 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,36 +0,0 @@
-<html>
-    <head>
-        <title>TraKERS v3.5 - How To : Intégrer le Front JS à Wamp pour pouvoir le tester</title>
-        <meta charset="UTF-8" />
-    </head>
-    
-    <body>
-        <p>Bienvenue dans ce tutorial visant à intégrer le Front JS à Wamp.</p>
-        <h2>Sommaire</h2>
-        
-        <ul>
-            <li>Installation et configuration de WampServer 2.</li>
-            <li>Copie des fichiers pour pouvoir les lancer dans Wamp.</li>
-            <li>Tester les modules du Front dans Wamp.</li>
-        </ul>
-        
-        <h3>Installation et configuration de WampServer 2.</h3>
-        
-        <p>Comme vous l'aurez certainement remarqué dans le readme associé à ce Front, il est nécessaire d'acquérir WampServer 2.</p>
-        <p>Normalement, l'installeur intègre un installeur. Néanmoins, vous pouvez aussi le trouver <a href="http://www.wampserver.com/en/">ici</a>.</p>
-        <p>Durant l'installation (par défaut sur le disque C:\), sélectionnez les paramètres par défaut, excepté pour le navigateur par défaut dans Wamp. Choisissez Google Chrome. Si vous ne le possédez pas, il est disponible <a href="https://www.google.com/chrome/index.html?hl=fr">ici</a>.</p>
-        <p>Une fois Wamp installé (on supposera qu'il est par défaut à C:\wamp), lancez-le. Une icone W devrait apparaître dans la barre des notifications. Clic gauche sur cette icone > Put Online.</p>
-        
-        <h3>Copie des fichiers pour pouvoir les lancer dans Wamp.</h3>
-        
-        <p>Afin de pouvoir tester le Front JS, il est nécessaire de copier le Front dans Wamp. Allez sur l'icone de wamp dans la barre des notifications, puis, clic gauche > www directory.</p>
-        <p>C'est le dossier des projets dans wamp.</p>
-        <p>Prenez les dossiers gestures, pointers et lib de Front JS pour les mettre dans www.</p>
-        
-        <h3>Tester les modules du Front dans Wamp.</h3>
-        
-        <p>A présent, vous pouvez lancer le Middleware via l'éxecutable MainModule.exe. Une fois allumé, il ne vous reste qu'à tester les Fronts JS en cliquant gauche sur l'icone de wamp > localhost. La fenêtre d'accueil de wamp s'affiche. Sur le menu de gauche, sélectionnez les projets gestures et pointers (l'un ou l'autre, ou les deux). Une fois la ou les fenêtres ouvertes dans chrome, vous pourrez bouger les pointeurs dans le projet pointers, ou bien voir les notifications de gestures envoyées par le Middleware dans le projet gestures.</p>
-        
-        <p>Si vous expérimentez des difficultés ou souhaitez nous soumettre une requête, veuillez consulter le fichier contact.txt à la racine du projet.</p>
-    </body>
-</html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/front_processing/doc/tutorial - TraKERS Front Processing.html	Tue Jul 24 16:35:10 2012 +0200
@@ -0,0 +1,266 @@
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" class="has_sidebar fixed-header earthrise">
+    <head>
+        <meta content="text/html; charset=UTF-8" http-equiv="content-type" />
+        <meta name="description" content="Tutoriel sur le développement et l'utilisation de code Processing utilisant le Middleware TraKERS."/>
+        <meta name="keywords" content="TraKERS, TraKERS Processing, TraKERS Front Processing, TraKERS Front, Kinect Processing"/>
+        <title>TraKERS v3.5 - Tutorial Processing</title>
+    </head>
+    
+    <body>
+        <p>TraKERS (Tracking using Kinect and Extracting Robust Skeletons) est une interface basée sur la détection de gestures / positions du squelette envoyé par le SDK Microsoft (1.5) de Kinect. Il est composé d'un Middleware assurant l'interaction avec Kinect, un rendu visuel et l'envoi de notifications sous forme de messages OSC.
+        Le deuxième module de ce projet est un Front en Processing doté d'un client TUIO et récupérant les messages OSC (sous forme d'objets tels que des Curseurs ou des Strings).</p>
+        
+        <p>Ce tutoriel concerne ce second module et a pour but d'expliquer le fonctionnement général d'un sketch Processing et la récupération des notifications du Middleware. Il sera agrémenté d'exemples fonctionnels créés pour les besoins de ce tutoriel ou inspirés d'exemples réels disponibles sur le site processing.org.</p>
+		
+		<h2>Sommaire</h2>
+        
+        <ol type="I">
+            <a href="#I"><li>Installation de Processing</li></a>
+            <a href="#II"><li>Structure d'un sketch</li></a>
+            <a href="#III"><li>Fonctions principales de Processing</li></a>
+            <a href="#IV"><li>Récupérer les objets envoyés par le Middleware TraKERS via un Client TUIO</li></a>
+            <a href="#V"><li>Interactions entre les objets TUIO récupérés et des fonctions de dessin basiques</li></a>
+            <a href="#VI"><li>Quelques exemples d'implémentation</li></a>
+            <a href="#VII"><li>Références</li></a>
+        </ol>
+        
+        <hr />
+        
+        <ol type="I" start="1">
+            <h3><a name="I"><li>Installation de Processing</li></a></h3>
+        </ol>
+        
+        <p>Avant de pouvoir modifier les sketches Processing fournis dans l'installateur, il est nécessaire d'installer Processing.<br />
+        Vous trouverez l'archive ici :</p>
+        
+        <a href="http://processing.googlecode.com/files/processing-1.5.1-windows.zip">Processing pour Windows avec Java</a><br />
+        <a href="http://processing.googlecode.com/files/processing-1.5.1-windows-expert.zip">Processing pour Windows sans Java</a>
+        
+        <p>Une fois téléchargé, il vous suffit de le dézipper, et d'affecter tous les types de fichiers .pde à l'exécutable Processing fourni dans l'archive.</p>
+        
+        <p>Si ce n'est pas déjà fait, il peut être utile de spécifier dans le path Windows l'emplacement du répertoire où vous avez extrait l'archive.</p>
+        
+        <hr />
+        
+        <ol type="I" start="2">
+            <h3><a name="#II"><li>Structure d'un sketch</li></a></h3>
+        </ol>
+        
+        <p>Un sketch est représenté par un dossier, contenant plusieurs choses :
+            <ul>
+                <li>Un ou plusieurs fichiers d'extension .pde (Qui contiennent le code Processing). Le .pde principal doit avoir le même nom que le dossier qui les contient.</li>
+                <li>Un dossier code, contenant les libraries appelées dans les fichiers .pde.</li>
+            </ul>
+            Si le sketch a été exporté en application, le dossier principal contient également jusqu'à trois dossiers, qui sont :
+            <ul>
+                <li>application.linux (si l'option Linux a été cochée durant l'export).</li>
+                <li>application.macosx (si l'option Mac OS X a été cochée durant l'export).</li>
+                <li>application.windows (si l'option Windows a été cochée durant l'export).</li>
+            </ul>
+            Ceux-ci contiennent les applications compilées du code source des fichiers .pde.<br />
+            Il est également possible d'exporter un applet. On obtiendra donc :
+            <ul>
+                <li>applet (si l'option Linux a été cochée durant l'export).</li>
+            </ul>
+        </p>
+        
+        <p>Concernant le projet TraKERS, les sketches fournis peuvent contenir différents fichiers .pde (un pour chaque classe), un fichier TuioFunctions.pde permettant de récupérer les objets TUIO envoyés par le Middleware et un fichier principal du même nom que le sketch.</p>
+        
+        <hr />
+        
+        <ol type="I" start="3">
+            <h3><a name="#III"><li>Fonctions principales de Processing</li></a></h3>
+        </ol>
+        
+        <p>En Processing, les variables déclarées absolues (en dehors d'une fonction ou d'une classe) sont visibles dans tous les autres fichiers .pde du sketch. Il en va de même pour les classes et fonctions (et non méthodes de classe, qui est une fonction appartenant à la classe et donc ne pouvant être appelée qu'en créant un objet de cette classe).</p>
+        <p>Il existe deux fonctions principales, qui sont :
+            <ul>
+                <li>void setup() : Initialise les différentes variables du sketch.</li>
+                <li>void draw() : Fonction rappelée automatiquement, destinée à contenir des instructions de dessin ou des appels de fonctions.</li>
+            </ul>
+            La gestion des événements souris est naturelle, comme l'indique l'exemple ci-dessous:<br /><br />
+        
+            <code>
+                public void setup()<br />
+                {<br />
+                &nbsp;&nbsp;size(200,200);<br />
+                &nbsp;&nbsp;background(0);<br />
+                }<br />
+                <br />
+                public void draw()<br />
+                {<br />
+                &nbsp;&nbsp;stroke(255);<br />
+                &nbsp;&nbsp;if(mousePressed)<br />
+                &nbsp;&nbsp;{<br />
+                &nbsp;&nbsp;&nbsp;&nbsp;line(mouseX,mouseY,pmouseX,pmouseY);<br />
+                &nbsp;&nbsp;}<br />
+                }<br />
+            </code>
+            <br />
+        </p>
+        
+        <hr />
+        
+        <ol type="I" start="4">
+            <h3><a name="#IV"><li>Récupérer les objets envoyés par le Middleware TraKERS via un Client TUIO</li></a></h3>
+        </ol>
+        
+        <p>Les objets TUIO exploités dans le cadre de TraKERS sont de deux types :
+        <ul>
+            <li>TuioCursor : Les curseurs sont utilisés pour transmettre des points au Front Processing. On récupère leurs coordonnées sous forme de TuioPoint, qui possèdent comme attributs les valeurs du point en X, Y et Z.</li>
+            <li>TuioString : Elles comportent une String ayant pour valeur la notification du Middleware en cas de détection de gesture par exemple.</li>
+        </ul>
+        </p>
+        
+        <p>Voici les différentes implémentations permettant d'accéder à ces objets via le client.
+        On appelle dans cet exemple plusieurs fonctions si des curseurs on été reçus par le client.<br />
+        Un curseur représente une main dans la zone de recherche des mains présente dans le Middleware.<br /><br />
+            <code>
+                void tuioInput()<br />
+                {<br />
+                &nbsp;&nbsp;Vector tuioCursorList = tuioClient.getTuioCursors();<br />
+                    <br />
+                &nbsp;&nbsp;if(tuioCursorList.size() <= 0)<br />
+                &nbsp;&nbsp;{<br />
+                &nbsp;&nbsp;&nbsp;&nbsp;//Code si on ne reçoit pas de curseurs <=> que aucune main n'est dans la zone de recherche des mains.<br />
+                &nbsp;&nbsp;}<br />
+                    <br />
+                &nbsp;&nbsp;if(tuioCursorList.size() == 1)<br />
+                &nbsp;&nbsp;{<br />
+                &nbsp;&nbsp;&nbsp;&nbsp;//Code si une main est détectée.<br />
+                &nbsp;&nbsp;&nbsp;&nbsp;//Par exemple, on peut faire appel à une fonction qu'on nommera arbitrairement handleOneHand et qui prendra en paramètre le curseur.<br />
+                &nbsp;&nbsp;&nbsp;&nbsp;handleOneHand(tuioCursorList.elementAt(0));<br />
+                &nbsp;&nbsp;}<br />
+                &nbsp;&nbsp;else if(tuioCursorList.size() == 2)<br />
+                &nbsp;&nbsp;{<br />
+                &nbsp;&nbsp;&nbsp;&nbsp;//Code si les deux mains sont détectées.<br />
+                &nbsp;&nbsp;&nbsp;&nbsp;//Par exemple, on peut faire appel à une fonction qu'on nommera arbitrairement handleBothHands et qui prendra en paramètre la liste des curseurs récupérés par le client.<br />
+                &nbsp;&nbsp;&nbsp;&nbsp;handleBothHands(tuioCursorList);<br />
+                &nbsp;&nbsp;}<br />
+                }<br />
+            </code>
+            Le code suivant montre comment on peut extraire le point contenu dans le curseur.<br />
+            <code>
+                void handleOneHand(TuioCursor handCursor)<br />
+                {<br />
+                &nbsp;&nbsp;TuioPoint pt = handCursor.getPosition();//(TuioPoint)pointList.get(j);<br />
+                &nbsp;&nbsp;//Code manipulant le point.<br />
+                &nbsp;&nbsp;//Par exemple un affichage de texte.<br />
+                &nbsp;&nbsp;text(pt.getX() + " " + pt.getY() + " " + pt.getZ());<br />
+                }<br />
+            </code>
+            Le code suivant montre comment on peut extraire les points contenus dans une liste de deux curseurs.<br />
+            <code>
+                void handleBothHands(Vector tuioCursorList)<br />
+                {<br />
+                &nbsp;&nbsp;TuioCursor handLeftCursor = (TuioCursor)tuioCursorList.elementAt(0);<br />
+                &nbsp;&nbsp;TuioCursor handRightCursor = (TuioCursor)tuioCursorList.elementAt(1);<br />
+                &nbsp;&nbsp;TuioPoint pt;<br />
+                    <br />
+                &nbsp;&nbsp;pt = (TuioPoint)handLeftCursor.getPosition();<br />
+                &nbsp;&nbsp;//Code pour traiter la position de la première main.<br />
+                &nbsp;&nbsp;//Par exemple un affichage de texte.<br />
+                &nbsp;&nbsp;text(pt.getX() + " " + pt.getY() + " " + pt.getZ());<br />
+                &nbsp;&nbsp;pt = (TuioPoint)handRightCursor.getPosition();<br />
+                &nbsp;&nbsp;//Code pour traiter la position de la seconde main.<br />
+                &nbsp;&nbsp;//Par exemple un affichage de texte.<br />
+                &nbsp;&nbsp;text(pt.getX() + " " + pt.getY() + " " + pt.getZ());<br />
+                }<br />
+            </code>
+        </p>
+        
+        <p>On appelle dans cet exemple une fonction si un message a été reçu par le client.<br />
+        Un message représente un événement notifié par le Middleware.<br /><br />
+        <code>
+            void tuioInput()<br />
+            {<br />
+            &nbsp;&nbsp;Vector tuioStringList = tuioClient.getTuioStrings();<br />
+            &nbsp;&nbsp;if(tuioStringList.size() <= 0)<br />
+            &nbsp;&nbsp;{<br />
+            &nbsp;&nbsp;&nbsp;&nbsp;text("Gesture non détectée.");<br />
+            &nbsp;&nbsp;}<br />
+            &nbsp;&nbsp;else<br />
+            &nbsp;&nbsp;{<br />
+            &nbsp;&nbsp;&nbsp;&nbsp;TuioString message = (TuioString)tuioStringList.elementAt(0);<br />
+            &nbsp;&nbsp;&nbsp;&nbsp;text(message.getMessage());<br />
+            &nbsp;&nbsp;}<br />
+            }<br />
+            </code>
+        </p>
+        
+        <hr />
+        
+        <ol type="I" start="5">
+            <h3><a name="#V"><li>Interactions entre les objets TUIO récupérés et des fonctions de dessin basiques</li></a></h3>
+        </ol>
+        
+        <p>Dans les exemples de code vu précédemment, nous aurions pu remplacer la fonction text() par une fonction de votre cru, comme celle-ci :<br /><br />
+        <code>
+            //Cette fonction dessine une ellipse à la position (x;y;z) et prend en paramètre la fait qu'il s'agisse de la main droite ou gauche.<br />
+            void drawEllipse(float x, float y, float z, boolean leftHand)<br />
+            {<br />
+            &nbsp;&nbsp;//On met la couleur de ce qui va venir en bleu.<br />
+            &nbsp;&nbsp;fill(0, 0, 255);<br />
+            &nbsp;&nbsp;//On ne met pas de bordure à ce qu'on va afficher.<br />
+            &nbsp;&nbsp;stroke(0,0,0);<br />
+            &nbsp;&nbsp;//On créer un point, une épaisseur de forme.<br />
+            &nbsp;&nbsp;//Z est la distance de la main par rapport à Kinect. La zone de recherche des mains est toujours comprise entre minDistHands et maxDistHands<br />
+            &nbsp;&nbsp;float weight = map(z, minDistHands, maxDistHands, 50, 1);<br />
+            &nbsp;&nbsp;float redColor = map(z, minDistHands, maxDistHands, 255, 80);<br />
+            &nbsp;&nbsp;<br />
+            &nbsp;&nbsp;//S'il s'agit de la main gauche, on colore en tons de rouge.<br />
+            &nbsp;&nbsp;if(leftHand)<br />
+            &nbsp;&nbsp;&nbsp;&nbsp;fill(redColor,0,0);<br />
+            &nbsp;&nbsp;//Sinon en tons de vert.<br />
+            &nbsp;&nbsp;else<br />
+            &nbsp;&nbsp;&nbsp;&nbsp;fill(0,redColor,0);<br />
+            &nbsp;&nbsp;<br />
+            &nbsp;&nbsp;//Si le trait est assez gros, on color en tons de bleu.<br />
+            &nbsp;&nbsp;if(weight >= 30)<br />
+            &nbsp;&nbsp;{<br />
+            &nbsp;&nbsp;&nbsp;&nbsp;fill(0, 0, redColor);<br />
+            &nbsp;&nbsp;}<br />
+            &nbsp;&nbsp;<br />
+            &nbsp;&nbsp;//On dessine une ellipse.<br />
+            &nbsp;&nbsp;ellipse(x+20, y+100, weight, weight);<br />
+            }<br />
+        </code>
+        </p>
+        
+        <hr />
+        
+        <ol type="I" start="6">
+            <h3><a name="#VI"><li>Quelques exemples d'implémentation</li></a></h3>
+        </ol>
+        
+        <p>Les exemples fournis dans l'installeur sont répartis dans 4 dossiers principaux :
+            <ul>
+                <li>Trakers : Permet d'afficher des ellipses sur le passage d'une ou deux mains se situant à une certaine distance de Kinect.</li>
+                <li>Trakers_gestures : Permet d'afficher le code des gestures détectées par Kinect et notifiées depuis le Middleware.</li>
+                <li>Fluid_manipulation (code importé de processing.org) : Simule l'action des mains sur un fluide.</li>
+                <li>Smoke_manipulation (code importé de processing.org) : Simule l'action des mains sur de la fumée.</li>
+                <li>Interaction examples (code importé de processing.org) : Quelques petits exemples utilisant des formes basiques et réagissant à la position de la main la plus proche de Kinect.</li>
+            </ul>
+        </p>
+        
+        <hr />
+        
+        <ol type="I" start="7">
+            <h3><a name="#VII"><li>Références</li></a></h3>
+        </ol>
+        
+        <p>Voici quelques liens utiles où se trouvent les dépendances trop lourdes pour être incluses dans cet installeur. Ils vont permettront également d'approfondissant vos connaissances sur Processing ou TUIO.
+        Il vous est possible d'utiliser eclipse pour compiler du Processing.
+            <ul>
+                <li><a href="http://www.microsoft.com/en-us/kinectforwindows/develop/developer-downloads.aspx">SDK Kinect 1.5 de Microsoft</a></li>
+                <li><a href="http://www.tuio.org/">TUIO</a></li>
+                <li><a href="http://processing.org/">Processing.org</a></li>
+                <li><a href="http://bodytag.org/">Autres exemples en Processing</a></li>
+                <li><a href="http://processing.org/learning/eclipse/">Processing sous eclipse</a></li>
+            </ul>
+        </p>
+        
+        <p>Si vous expérimentez des difficultés ou souhaitez nous soumettre une requête, veuillez consulter le fichier contact.txt à la racine du projet.</p>
+    </body>
+</html>
\ No newline at end of file
--- a/front_processing/doc/tutorial front processing.html	Tue Jul 24 11:14:52 2012 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,266 +0,0 @@
-<!DOCTYPE html>
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" class="has_sidebar fixed-header earthrise">
-    <head>
-        <meta content="text/html; charset=UTF-8" http-equiv="content-type" />
-        <meta name="description" content="Tutoriel sur le développement et l'utilisation de code Processing utilisant le Middleware TraKERS."/>
-        <meta name="keywords" content="TraKERS, TraKERS Processing, TraKERS Front Processing, TraKERS Front, Kinect Processing"/>
-        <title>TraKERS v3.5 - Tutorial Processing</title>
-    </head>
-    
-    <body>
-        <p>TraKERS (Tracking using Kinect and Extracting Robust Skeletons) est une interface basée sur la détection de gestures / positions du squelette envoyé par le SDK Microsoft (1.5) de Kinect. Il est composé d'un Middleware assurant l'interaction avec Kinect, un rendu visuel et l'envoi de notifications sous forme de messages OSC.
-        Le deuxième module de ce projet est un Front en Processing doté d'un client TUIO et récupérant les messages OSC (sous forme d'objets tels que des Curseurs ou des Strings).</p>
-        
-        <p>Ce tutoriel concerne ce second module et a pour but d'expliquer le fonctionnement général d'un sketch Processing et la récupération des notifications du Middleware. Il sera agrémenté d'exemples fonctionnels créés pour les besoins de ce tutoriel ou inspirés d'exemples réels disponibles sur le site processing.org.</p>
-		
-		<h2>Sommaire</h2>
-        
-        <ol type="I">
-            <a href="#I"><li>Installation de Processing</li></a>
-            <a href="#II"><li>Structure d'un sketch</li></a>
-            <a href="#III"><li>Fonctions principales de Processing</li></a>
-            <a href="#IV"><li>Récupérer les objets envoyés par le Middleware TraKERS via un Client TUIO</li></a>
-            <a href="#V"><li>Interactions entre les objets TUIO récupérés et des fonctions de dessin basiques</li></a>
-            <a href="#VI"><li>Quelques exemples d'implémentation</li></a>
-            <a href="#VII"><li>Références</li></a>
-        </ol>
-        
-        <hr />
-        
-        <ol type="I" start="1">
-            <h3><a name="I"><li>Installation de Processing</li></a></h3>
-        </ol>
-        
-        <p>Avant de pouvoir modifier les sketches Processing fournis dans l'installateur, il est nécessaire d'installer Processing.<br />
-        Vous trouverez l'archive ici :</p>
-        
-        <a href="http://processing.googlecode.com/files/processing-1.5.1-windows.zip">Processing pour Windows avec Java</a><br />
-        <a href="http://processing.googlecode.com/files/processing-1.5.1-windows-expert.zip">Processing pour Windows sans Java</a>
-        
-        <p>Une fois téléchargé, il vous suffit de le dézipper, et d'affecter tous les types de fichiers .pde à l'exécutable Processing fourni dans l'archive.</p>
-        
-        <p>Si ce n'est pas déjà fait, il peut être utile de spécifier dans le path Windows l'emplacement du répertoire où vous avez extrait l'archive.</p>
-        
-        <hr />
-        
-        <ol type="I" start="2">
-            <h3><a name="#II"><li>Structure d'un sketch</li></a></h3>
-        </ol>
-        
-        <p>Un sketch est représenté par un dossier, contenant plusieurs choses :
-            <ul>
-                <li>Un ou plusieurs fichiers d'extension .pde (Qui contiennent le code Processing). Le .pde principal doit avoir le même nom que le dossier qui les contient.</li>
-                <li>Un dossier code, contenant les libraries appelées dans les fichiers .pde.</li>
-            </ul>
-            Si le sketch a été exporté en application, le dossier principal contient également jusqu'à trois dossiers, qui sont :
-            <ul>
-                <li>application.linux (si l'option Linux a été cochée durant l'export).</li>
-                <li>application.macosx (si l'option Mac OS X a été cochée durant l'export).</li>
-                <li>application.windows (si l'option Windows a été cochée durant l'export).</li>
-            </ul>
-            Ceux-ci contiennent les applications compilées du code source des fichiers .pde.<br />
-            Il est également possible d'exporter un applet. On obtiendra donc :
-            <ul>
-                <li>applet (si l'option Linux a été cochée durant l'export).</li>
-            </ul>
-        </p>
-        
-        <p>Concernant le projet TraKERS, les sketches fournis peuvent contenir différents fichiers .pde (un pour chaque classe), un fichier TuioFunctions.pde permettant de récupérer les objets TUIO envoyés par le Middleware et un fichier principal du même nom que le sketch.</p>
-        
-        <hr />
-        
-        <ol type="I" start="3">
-            <h3><a name="#III"><li>Fonctions principales de Processing</li></a></h3>
-        </ol>
-        
-        <p>En Processing, les variables déclarées absolues (en dehors d'une fonction ou d'une classe) sont visibles dans tous les autres fichiers .pde du sketch. Il en va de même pour les classes et fonctions (et non méthodes de classe, qui est une fonction appartenant à la classe et donc ne pouvant être appelée qu'en créant un objet de cette classe).</p>
-        <p>Il existe deux fonctions principales, qui sont :
-            <ul>
-                <li>void setup() : Initialise les différentes variables du sketch.</li>
-                <li>void draw() : Fonction rappelée automatiquement, destinée à contenir des instructions de dessin ou des appels de fonctions.</li>
-            </ul>
-            La gestion des événements souris est naturelle, comme l'indique l'exemple ci-dessous:<br /><br />
-        
-            <code>
-                public void setup()<br />
-                {<br />
-                &nbsp;&nbsp;size(200,200);<br />
-                &nbsp;&nbsp;background(0);<br />
-                }<br />
-                <br />
-                public void draw()<br />
-                {<br />
-                &nbsp;&nbsp;stroke(255);<br />
-                &nbsp;&nbsp;if(mousePressed)<br />
-                &nbsp;&nbsp;{<br />
-                &nbsp;&nbsp;&nbsp;&nbsp;line(mouseX,mouseY,pmouseX,pmouseY);<br />
-                &nbsp;&nbsp;}<br />
-                }<br />
-            </code>
-            <br />
-        </p>
-        
-        <hr />
-        
-        <ol type="I" start="4">
-            <h3><a name="#IV"><li>Récupérer les objets envoyés par le Middleware TraKERS via un Client TUIO</li></a></h3>
-        </ol>
-        
-        <p>Les objets TUIO exploités dans le cadre de TraKERS sont de deux types :
-        <ul>
-            <li>TuioCursor : Les curseurs sont utilisés pour transmettre des points au Front Processing. On récupère leurs coordonnées sous forme de TuioPoint, qui possèdent comme attributs les valeurs du point en X, Y et Z.</li>
-            <li>TuioString : Elles comportent une String ayant pour valeur la notification du Middleware en cas de détection de gesture par exemple.</li>
-        </ul>
-        </p>
-        
-        <p>Voici les différentes implémentations permettant d'accéder à ces objets via le client.
-        On appelle dans cet exemple plusieurs fonctions si des curseurs on été reçus par le client.<br />
-        Un curseur représente une main dans la zone de recherche des mains présente dans le Middleware.<br /><br />
-            <code>
-                void tuioInput()<br />
-                {<br />
-                &nbsp;&nbsp;Vector tuioCursorList = tuioClient.getTuioCursors();<br />
-                    <br />
-                &nbsp;&nbsp;if(tuioCursorList.size() <= 0)<br />
-                &nbsp;&nbsp;{<br />
-                &nbsp;&nbsp;&nbsp;&nbsp;//Code si on ne reçoit pas de curseurs <=> que aucune main n'est dans la zone de recherche des mains.<br />
-                &nbsp;&nbsp;}<br />
-                    <br />
-                &nbsp;&nbsp;if(tuioCursorList.size() == 1)<br />
-                &nbsp;&nbsp;{<br />
-                &nbsp;&nbsp;&nbsp;&nbsp;//Code si une main est détectée.<br />
-                &nbsp;&nbsp;&nbsp;&nbsp;//Par exemple, on peut faire appel à une fonction qu'on nommera arbitrairement handleOneHand et qui prendra en paramètre le curseur.<br />
-                &nbsp;&nbsp;&nbsp;&nbsp;handleOneHand(tuioCursorList.elementAt(0));<br />
-                &nbsp;&nbsp;}<br />
-                &nbsp;&nbsp;else if(tuioCursorList.size() == 2)<br />
-                &nbsp;&nbsp;{<br />
-                &nbsp;&nbsp;&nbsp;&nbsp;//Code si les deux mains sont détectées.<br />
-                &nbsp;&nbsp;&nbsp;&nbsp;//Par exemple, on peut faire appel à une fonction qu'on nommera arbitrairement handleBothHands et qui prendra en paramètre la liste des curseurs récupérés par le client.<br />
-                &nbsp;&nbsp;&nbsp;&nbsp;handleBothHands(tuioCursorList);<br />
-                &nbsp;&nbsp;}<br />
-                }<br />
-            </code>
-            Le code suivant montre comment on peut extraire le point contenu dans le curseur.<br />
-            <code>
-                void handleOneHand(TuioCursor handCursor)<br />
-                {<br />
-                &nbsp;&nbsp;TuioPoint pt = handCursor.getPosition();//(TuioPoint)pointList.get(j);<br />
-                &nbsp;&nbsp;//Code manipulant le point.<br />
-                &nbsp;&nbsp;//Par exemple un affichage de texte.<br />
-                &nbsp;&nbsp;text(pt.getX() + " " + pt.getY() + " " + pt.getZ());<br />
-                }<br />
-            </code>
-            Le code suivant montre comment on peut extraire les points contenus dans une liste de deux curseurs.<br />
-            <code>
-                void handleBothHands(Vector tuioCursorList)<br />
-                {<br />
-                &nbsp;&nbsp;TuioCursor handLeftCursor = (TuioCursor)tuioCursorList.elementAt(0);<br />
-                &nbsp;&nbsp;TuioCursor handRightCursor = (TuioCursor)tuioCursorList.elementAt(1);<br />
-                &nbsp;&nbsp;TuioPoint pt;<br />
-                    <br />
-                &nbsp;&nbsp;pt = (TuioPoint)handLeftCursor.getPosition();<br />
-                &nbsp;&nbsp;//Code pour traiter la position de la première main.<br />
-                &nbsp;&nbsp;//Par exemple un affichage de texte.<br />
-                &nbsp;&nbsp;text(pt.getX() + " " + pt.getY() + " " + pt.getZ());<br />
-                &nbsp;&nbsp;pt = (TuioPoint)handRightCursor.getPosition();<br />
-                &nbsp;&nbsp;//Code pour traiter la position de la seconde main.<br />
-                &nbsp;&nbsp;//Par exemple un affichage de texte.<br />
-                &nbsp;&nbsp;text(pt.getX() + " " + pt.getY() + " " + pt.getZ());<br />
-                }<br />
-            </code>
-        </p>
-        
-        <p>On appelle dans cet exemple une fonction si un message a été reçu par le client.<br />
-        Un message représente un événement notifié par le Middleware.<br /><br />
-        <code>
-            void tuioInput()<br />
-            {<br />
-            &nbsp;&nbsp;Vector tuioStringList = tuioClient.getTuioStrings();<br />
-            &nbsp;&nbsp;if(tuioStringList.size() <= 0)<br />
-            &nbsp;&nbsp;{<br />
-            &nbsp;&nbsp;&nbsp;&nbsp;text("Gesture non détectée.");<br />
-            &nbsp;&nbsp;}<br />
-            &nbsp;&nbsp;else<br />
-            &nbsp;&nbsp;{<br />
-            &nbsp;&nbsp;&nbsp;&nbsp;TuioString message = (TuioString)tuioStringList.elementAt(0);<br />
-            &nbsp;&nbsp;&nbsp;&nbsp;text(message.getMessage());<br />
-            &nbsp;&nbsp;}<br />
-            }<br />
-            </code>
-        </p>
-        
-        <hr />
-        
-        <ol type="I" start="5">
-            <h3><a name="#V"><li>Interactions entre les objets TUIO récupérés et des fonctions de dessin basiques</li></a></h3>
-        </ol>
-        
-        <p>Dans les exemples de code vu précédemment, nous aurions pu remplacer la fonction text() par une fonction de votre cru, comme celle-ci :<br /><br />
-        <code>
-            //Cette fonction dessine une ellipse à la position (x;y;z) et prend en paramètre la fait qu'il s'agisse de la main droite ou gauche.<br />
-            void drawEllipse(float x, float y, float z, boolean leftHand)<br />
-            {<br />
-            &nbsp;&nbsp;//On met la couleur de ce qui va venir en bleu.<br />
-            &nbsp;&nbsp;fill(0, 0, 255);<br />
-            &nbsp;&nbsp;//On ne met pas de bordure à ce qu'on va afficher.<br />
-            &nbsp;&nbsp;stroke(0,0,0);<br />
-            &nbsp;&nbsp;//On créer un point, une épaisseur de forme.<br />
-            &nbsp;&nbsp;//Z est la distance de la main par rapport à Kinect. La zone de recherche des mains est toujours comprise entre minDistHands et maxDistHands<br />
-            &nbsp;&nbsp;float weight = map(z, minDistHands, maxDistHands, 50, 1);<br />
-            &nbsp;&nbsp;float redColor = map(z, minDistHands, maxDistHands, 255, 80);<br />
-            &nbsp;&nbsp;<br />
-            &nbsp;&nbsp;//S'il s'agit de la main gauche, on colore en tons de rouge.<br />
-            &nbsp;&nbsp;if(leftHand)<br />
-            &nbsp;&nbsp;&nbsp;&nbsp;fill(redColor,0,0);<br />
-            &nbsp;&nbsp;//Sinon en tons de vert.<br />
-            &nbsp;&nbsp;else<br />
-            &nbsp;&nbsp;&nbsp;&nbsp;fill(0,redColor,0);<br />
-            &nbsp;&nbsp;<br />
-            &nbsp;&nbsp;//Si le trait est assez gros, on color en tons de bleu.<br />
-            &nbsp;&nbsp;if(weight >= 30)<br />
-            &nbsp;&nbsp;{<br />
-            &nbsp;&nbsp;&nbsp;&nbsp;fill(0, 0, redColor);<br />
-            &nbsp;&nbsp;}<br />
-            &nbsp;&nbsp;<br />
-            &nbsp;&nbsp;//On dessine une ellipse.<br />
-            &nbsp;&nbsp;ellipse(x+20, y+100, weight, weight);<br />
-            }<br />
-        </code>
-        </p>
-        
-        <hr />
-        
-        <ol type="I" start="6">
-            <h3><a name="#VI"><li>Quelques exemples d'implémentation</li></a></h3>
-        </ol>
-        
-        <p>Les exemples fournis dans l'installeur sont répartis dans 4 dossiers principaux :
-            <ul>
-                <li>Trakers : Permet d'afficher des ellipses sur le passage d'une ou deux mains se situant à une certaine distance de Kinect.</li>
-                <li>Trakers_gestures : Permet d'afficher le code des gestures détectées par Kinect et notifiées depuis le Middleware.</li>
-                <li>Fluid_manipulation (code importé de processing.org) : Simule l'action des mains sur un fluide.</li>
-                <li>Smoke_manipulation (code importé de processing.org) : Simule l'action des mains sur de la fumée.</li>
-                <li>Interaction examples (code importé de processing.org) : Quelques petits exemples utilisant des formes basiques et réagissant à la position de la main la plus proche de Kinect.</li>
-            </ul>
-        </p>
-        
-        <hr />
-        
-        <ol type="I" start="7">
-            <h3><a name="#VII"><li>Références</li></a></h3>
-        </ol>
-        
-        <p>Voici quelques liens utiles où se trouvent les dépendances trop lourdes pour être incluses dans cet installeur. Ils vont permettront également d'approfondissant vos connaissances sur Processing ou TUIO.
-        Il vous est possible d'utiliser eclipse pour compiler du Processing.
-            <ul>
-                <li><a href="http://www.microsoft.com/en-us/kinectforwindows/develop/developer-downloads.aspx">SDK Kinect 1.5 de Microsoft</a></li>
-                <li><a href="http://www.tuio.org/">TUIO</a></li>
-                <li><a href="http://processing.org/">Processing.org</a></li>
-                <li><a href="http://bodytag.org/">Autres exemples en Processing</a></li>
-                <li><a href="http://processing.org/learning/eclipse/">Processing sous eclipse</a></li>
-            </ul>
-        </p>
-        
-        <p>Si vous expérimentez des difficultés ou souhaitez nous soumettre une requête, veuillez consulter le fichier contact.txt à la racine du projet.</p>
-    </body>
-</html>
\ No newline at end of file
--- a/middleware/Communication/Communication.csproj	Tue Jul 24 11:14:52 2012 +0200
+++ b/middleware/Communication/Communication.csproj	Tue Jul 24 16:35:10 2012 +0200
@@ -53,7 +53,6 @@
   <ItemGroup>
     <Compile Include="Server.cs" />
     <Compile Include="TUIOServer.cs" />
-    <Compile Include="WSClient.cs" />
     <Compile Include="WSServer.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
   </ItemGroup>
--- a/middleware/Communication/WSClient.cs	Tue Jul 24 11:14:52 2012 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,349 +0,0 @@
-/*
-* This file is part of the TraKERS\Middleware package.
-*
-* (c) IRI <http://www.iri.centrepompidou.fr/>
-*
-* For the full copyright and license information, please view the LICENSE
-* file that was distributed with this source code.
-*/
-
-/*
- * Projet : TraKERS
- * Module : MIDDLEWARE
- * Sous-Module : Communication
- * Classe : WSClient
- * 
- * Auteur : alexandre.bastien@iri.centrepompidou.fr
- * 
- * Fonctionnalités : Reçoit des notifications du Front IDILL.
- * Interprète les positions des curseurs dans le temps à partir du top du front.
- * 
- * STATUS : EN DEVELOPPEMENT.
- * 
- */
-
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using Fleck;
-using System.Threading;
-using System.Timers;
-using System.Windows.Media.Media3D;
-
-namespace Communication
-{
-    public class WSClient
-    {
-        //Server WebSocket.
-        WebSocketServer server;
-        List<IWebSocketConnection> allSockets;
-
-        //Permet de savoir si un curseur pour la main gauche/droite a été créé.
-        private bool leftHandCursorCreated;
-        private bool rightHandCursorCreated;
-        private bool gesturesMessageCreated, modeMessageCreated;
-        private bool gestureLocked, modLocked;
-        //Intervalle minimum entre les gestures.
-        private int timerElapsing;
-        //Timers.
-        private System.Timers.Timer _gesturesTimer;
-        private System.Timers.Timer _userPositionTimer;
-        //Dernier code envoyé.
-        private String lastCode;
-        //Messages envoyés en WS.
-        private String rightHandMessage, leftHandMessage, gesturesMessage, modeMessage;
-        //Messages précédents
-        private String prevRightHandMessage, prevLeftHandMessage, prevGestureMessage, prevModeMessage;
-
-        /*
-        * Constructeur : On initialise le serveur avec une adresse et un port, au début les curseurs
-        * ne sont pas créés et on indique au ThreadPool une fonction de callback de manière à vérifier
-        * s'il reçoit des notifications.
-        */
-        public WSClient(String host, int port, int _timerElapsing)
-        {
-            FleckLog.Level = LogLevel.Debug;
-            allSockets = new List<IWebSocketConnection>();
-            server = new WebSocketServer(port, "ws://" + host + ":" + port);
-
-            //Au départ, aucune main n'est dans le champ de recherche et aucune gesture n'est détectée.
-            leftHandCursorCreated = false;
-            rightHandCursorCreated = false;
-            gesturesMessageCreated = false;
-            modeMessageCreated = false;
-            gestureLocked = false;
-            modLocked = false;
-            lastCode = "";
-
-            timerElapsing = 500;// _timerElapsing;
-
-            rightHandMessage = leftHandMessage = gesturesMessage = modeMessage = "";
-
-            //On démarre le serveur WebSocket.
-            server.Start(socket =>
-            {
-                socket.OnOpen = () =>
-                {
-                    Console.WriteLine("Open!");
-                    allSockets.Add(socket);
-                };
-                socket.OnClose = () =>
-                {
-                    Console.WriteLine("Close!");
-                    allSockets.Remove(socket);
-                };
-                /*socket.OnMessage = message =>
-                {
-                    Console.WriteLine(message);
-                    allSockets.ToList().ForEach(s => s.Send("Echo: " + message));
-                };*/
-            });
-
-            //On initialise le threadPool (appelé toutes les N ms).
-            ThreadPool.QueueUserWorkItem(ThreadPoolCallback);
-
-            //On instancie le timer à N ms.
-            _gesturesTimer = new System.Timers.Timer(timerElapsing);
-            _userPositionTimer = new System.Timers.Timer(timerElapsing/5);
-            //Dès que le timer est expiré, on appelle _timer_Elapsed.
-            _gesturesTimer.Elapsed += new ElapsedEventHandler(_gesturesTimer_Elapsed);
-            _userPositionTimer.Elapsed += new ElapsedEventHandler(_userPositionTimer_Elapsed);
-
-            /*var input = Console.ReadLine();
-            while (input != "exit")
-            {
-                foreach (var socket in allSockets.ToList())
-                {
-                    socket.Send(input);
-                }
-                input = Console.ReadLine();
-            }*/
-        }
-
-        /*
-         * Méthode appelée à l'expiration du timer pour les gestures et modes.
-         */
-        public void _gesturesTimer_Elapsed(object sender, ElapsedEventArgs e)
-        {
-            //On débloque la détection de gesture.
-            gestureLocked = false;
-            //On débloque la notification de nouveau mode.
-            //modLocked = false;
-            lastCode = "";
-            //On arrête le timer.
-            _gesturesTimer.Stop();
-        }
-
-        /*
-         * Méthode appelée à l'expiration du timer pour les positions d'utilisateur.
-         */
-        public void _userPositionTimer_Elapsed(object sender, ElapsedEventArgs e)
-        {
-            //On débloque la détection de gesture.
-            //gestureLocked = false;
-            //On débloque la notification de nouveau mode.
-            modLocked = false;
-            lastCode = "";
-            //On arrête le timer.
-            _userPositionTimer.Stop();
-        }
-
-        /*
-        * Méthode appelée lors d'une notification de type : main gauche entrée dans le champ.
-        */
-        public void LeftHandTracked(Point3D pt)
-        {
-            leftHandMessage = "0-" + pt.X + ";" + pt.Y + ";" + pt.Z;
-            //Si le curseur de la main gauche n'est pas créé, alors on le crée.
-            if (!leftHandCursorCreated)
-                leftHandCursorCreated = true;
-        }
-
-        /*
-        * Méthode appelée lors d'une notification de type : main droite entrée dans le champ.
-        */
-        public void RightHandTracked(Point3D pt)
-        {
-            rightHandMessage = "1-" + pt.X + ";" + pt.Y + ";" + pt.Z;
-            //Si le curseur de la main droite n'est pas créé, alors on le crée.
-            if (!rightHandCursorCreated)
-                rightHandCursorCreated = true;
-        }
-
-        /*
-        * Méthode appelée lors d'une notification de type : main gauche sortie du champ.
-        */
-        public void LeftHandQuit()
-        {
-            leftHandMessage = "";
-            //Si le curseur de la main gauche existe, alors on le supprime.
-            if (leftHandCursorCreated)
-                leftHandCursorCreated = false;
-        }
-
-        /*
-        * Méthode appelée lors d'une notification de type : main droite sortie du champ.
-        */
-        public void RightHandQuit()
-        {
-            rightHandMessage = "";
-            //Si le curseur de la main droite existe, alors on le supprime.
-            if (rightHandCursorCreated)
-                rightHandCursorCreated = false;
-        }
-
-        /*
-        * Méthode appelée lorsqu'une gesture a été détectée et que l'événement approprié a été lancé.
-        */
-        public void GesturePerformed(String code)
-        {
-            //Si le code vient d'être envoyé, on passe.
-            /*if (lastCode.Equals(code))
-                return;
-            lastCode = code;*/
-            //Si une gesture a été effectuée, on bloque un certain temps.
-            if (!gestureLocked)
-            {
-                gestureLocked = true;
-
-                //On crée un message contenant le code à envoyer.
-                //if (!gesturesMessageCreated)
-                //{
-                    gesturesMessageCreated = true;
-                    gesturesMessage = "2-" + code;
-
-                    //Console.WriteLine(gesturesMessage);
-                    
-                    foreach (var socket in allSockets.ToList())
-                    {
-                        socket.Send(gesturesMessage);
-                    }
-
-                    //On démarre le timer.
-                    _gesturesTimer.Start();
-
-                    //Console.WriteLine(gestureMessage);
-                //}
-            }
-        }
-
-        /*
-        * Méthode appelée lorsqu'on doit entrer dans un autre mode.
-        */
-        public void ModeNotification(String code)
-        {
-            //Si le code vient d'être envoyé, on passe.
-            /*if (lastCode.Equals(code))
-                return;
-            lastCode = code;*/
-            //Si on a été notifié.
-            if (!modLocked)
-            {
-                modLocked = true;
-
-                //On crée un message contenant le code à envoyer.
-                //if (!modeMessageCreated)
-                //{
-                    modeMessageCreated = true;
-                    modeMessage = "2-" + code;
-                    //On démarre le timer.
-
-                    foreach (var socket in allSockets.ToList())
-                    {
-                        socket.Send(modeMessage);
-                    }
-                    _userPositionTimer.Start();
-
-                    //Console.WriteLine(modeMessage);
-                //}
-            }
-        }
-
-        /*
-        * Méthode de callback vérifiant toutes les 25 ms les nouvelles notifications.
-        * Il est à noter que si le temps de rafraîchissement des trop rapide, les messages n'ont pas
-        * le temps d'être envoyés.
-        */
-        private void ThreadPoolCallback(Object threadContext)
-        {
-            while (true)
-            {
-                /*//S'il existe un message de gesture.
-                if (gesturesMessage != null && !gesturesMessage.Equals(""))// && !gesturesMessage.Equals(prevGestureMessage))
-                {
-                    //On l'envoie au client (au host et au port spécifiés dans le constructeur).
-                    foreach (var socket in allSockets.ToList())
-                    {
-                        socket.Send(gesturesMessage);
-                        //prevGestureMessage = gesturesMessage;
-                    }
-                }
-
-                //S'il existe un message de mode.
-                if (modeMessage != null && !modeMessage.Equals(""))// && !modeMessage.Equals(prevModeMessage))
-                {
-                    //On l'envoie au client (au host et au port spécifiés dans le constructeur).
-                    foreach (var socket in allSockets.ToList())
-                    {
-                        socket.Send(modeMessage);
-                        //prevModeMessage = modeMessage;
-                    }
-                }*/
-
-                //Si la main gauche est détectée.
-                if (leftHandMessage != null && !leftHandMessage.Equals("") && !leftHandMessage.Equals(prevLeftHandMessage))
-                {
-                    //On l'envoie au client (au host et au port spécifiés dans le constructeur).
-                    foreach (var socket in allSockets.ToList())
-                    {
-                        socket.Send(leftHandMessage);
-                        prevLeftHandMessage = leftHandMessage;
-                    }
-                }
-                //Si la main droite est détectée.
-                if (rightHandMessage != null && !rightHandMessage.Equals("") && !rightHandMessage.Equals(prevRightHandMessage))
-                {
-                    //On l'envoie au client (au host et au port spécifiés dans le constructeur).
-                    foreach (var socket in allSockets.ToList())
-                    {
-                        socket.Send(rightHandMessage);
-                        prevRightHandMessage = rightHandMessage;
-                    }
-                }
-                
-                //On attend 25 ms.
-                Thread.Sleep(25);
-
-                //Si une gesture a été effectuée et que le délai d'attente est expiré.
-                if (gesturesMessageCreated && !gestureLocked)
-                {
-                    //On débloque la détection de gesture et on supprime l'objet envoyant les messages OSC de gesture.
-                    gesturesMessageCreated = false;
-                    gesturesMessage = "";
-                }
-
-                //Si un mode a été effectuée et que le délai d'attente est expiré.
-                if (modeMessageCreated && !modLocked)
-                {
-                    //On débloque la détection de gesture et on supprime l'objet envoyant les messages OSC de gesture.
-                    modeMessageCreated = false;
-                    modeMessage = "";
-                }
-            }
-        }
-
-        /*
-         * Getters et Setters
-         */
-        public void setTimerElapsing(int _timerElapsing)
-        {
-            timerElapsing = _timerElapsing;
-        }
-
-        public int getTimerElapsing()
-        {
-            return timerElapsing;
-        }
-    }
-}
--- a/middleware/Debug/DebugWindow.xaml	Tue Jul 24 11:14:52 2012 +0200
+++ b/middleware/Debug/DebugWindow.xaml	Tue Jul 24 16:35:10 2012 +0200
@@ -47,14 +47,20 @@
             </Grid.RowDefinitions>
             <Grid Grid.Row="0" Background="LightGray">
                 <!-- Menu de la fenêtre de debug. -->
-                <Menu Grid.Row="0" VerticalAlignment="Top" HorizontalAlignment="Left" Height="20" Background="LightGray" Foreground="White">
+                <Menu Name="menu" Grid.Row="0" VerticalAlignment="Top" HorizontalAlignment="Left" Height="20" Background="LightGray" Foreground="White">
                     <!-- Readme et doc. -->
                     <MenuItem Name="FileMenu" Header="" Background="Black">
                         <MenuItem Name="ReadmeMiddlewareMenu" Header="" Background="White" Foreground="Black" Click="MiddlewareReadmeMenu_Click" />
+                        
+                        <!-- Readme et doc de TraKERS. -->
                         <MenuItem Name="ReadmeFrontProcessingMenu" Header="" Background="White" Foreground="Black" Click="FrontProcessingReadmeMenu_Click" />
                         <MenuItem Name="DocumentationFrontProcessingMenu" Header="" Background="White" Foreground="Black" Click="FrontProcessingDocumentationMenu_Click" />
                         <MenuItem Name="ReadmeFrontJSMenu" Header="" Background="White" Foreground="Black" Click="FrontJSReadmeMenu_Click" />
                         <MenuItem Name="DocumentationFrontJSMenu" Header="" Background="White" Foreground="Black" Click="FrontJSDocumentationMenu_Click" />
+                        
+                        <!-- Readme et doc de BBM. -->
+                        <MenuItem Name="DocumentationFrontIDILLMenu" Header="" Background="White" Foreground="Black" Click="FrontIDILLDocumentationMenu_Click" />
+                        
                         <MenuItem Name="QuitMenu" Header="" Background="White" Foreground="Black" Click="QuitMenu_Click" />
                     </MenuItem>
                     <!-- Paramètres. -->
@@ -62,6 +68,8 @@
                         <MenuItem Name="ParamMenu" Header="" Background="White" Foreground="Black" Click="ParamMenu_Click" />
                         <MenuItem Name="ParamMenuReboot" Header="" IsEnabled="False" />
                     </MenuItem>
+                    
+                    <!-- Exemples de TraKERS. -->
                     <MenuItem Name="ExamplesMenu" Header="" Background="Black">
                         <!-- Exemples processing. -->
                         <MenuItem Name="ProcessingMenu" Header="" Background="White" Foreground="Black">
@@ -112,6 +120,12 @@
                             </MenuItem>
                         </MenuItem>
                     </MenuItem>
+                    
+                    <!-- Front IDILL. -->
+                    <MenuItem Name="FrontIDILLMenu" Header="" Background="Black">
+                        <MenuItem Name="FrontIDILLMenuS" Header="" Background="White" Foreground="Black" Click="FrontIDILLMenuS_Click" />
+                        <MenuItem Name="FrontIDILLMenuExe" Header="" Background="White" Foreground="Black" Click="FrontIDILLMenuExe_Click" />
+                    </MenuItem>
                 </Menu>
             </Grid>
             <Grid Grid.Row="1">
--- a/middleware/Debug/DebugWindow.xaml.cs	Tue Jul 24 11:14:52 2012 +0200
+++ b/middleware/Debug/DebugWindow.xaml.cs	Tue Jul 24 16:35:10 2012 +0200
@@ -38,6 +38,12 @@
 {
     public partial class DebugWindow : Window
     {
+        //Nom du projet, afin de savoir quel menu charger et quel fichier de configuration utiliser (TraKERS ou BBM).
+        private String projectName = "BBM";
+        //Chemins du fichier de config.
+        private String configPath;
+        //private String projectName = "BBM";
+
         //Gestionnaire de ressources.
         private ResourceManager rm;
 
@@ -65,7 +71,7 @@
         * classe KinectMain.
         * Au départ, la kinect est éteinte.
         */
-        public DebugWindow()//KinectMain main)
+        public DebugWindow()
         {
             InitializeComponent();
 
@@ -75,6 +81,19 @@
 
             //On fait appel au gestionnaire de ressources.
             rm = new ResourceManager("Trakers.Debug.Properties.Resources", Assembly.GetExecutingAssembly());
+
+            //On charge les éléments relatifs au projet.
+            if (projectName.Equals("TraKERS"))
+            {
+                configPath = ".\\TraKERS - config.txt";
+                loadTraKERSMenu();
+            }
+            else if (projectName.Equals("BBM"))
+            {
+                configPath = ".\\BBM - config.txt";
+                loadBBMMenu();
+            }
+
             //On tente de charger les paramètres du fichier params.ini.
             //Si on n'y arrive pas, on affiche une erreur et on charge les paramètres par défaut.
             if (!loadParameters())
@@ -97,47 +116,96 @@
                 config.Add("takenPoints", 10);
                 config.Add("directionChangeTresholdXY", 10);
                 config.Add("directionChangeTresholdZ", 0.01f);
-                //Chemins des readme et doc.
-                config.Add("readmeMiddleware", "..\\readme - Middleware.txt");
-                config.Add("readmeFrontProcessing", "..\\readme - Front Processing.txt");
-                config.Add("docFrontProcessing", "..\\tutorial front processing.html");
-                config.Add("readmeFrontJS", "..\\readme - Front Web.txt");
-                config.Add("docFrontJS", "..\\tutorial front js et wamp.html");
-                //Chemins des exemples processing.
-                config.Add("exPFMPS", "..\\Front Processing\\src\\Fluid_manipulation\\Fluid_manipulation.pde");
-                config.Add("exPFMExe", "..\\Front Processing\\src\\Fluid_manipulation\\application.windows\\Fluid_manipulation.exe");
-                config.Add("exPSMPS", "..\\Front Processing\\src\\Smoke_manipulation\\Smoke_manipulation.pde");
-                config.Add("exPSMExe", "..\\Front Processing\\src\\Smoke_manipulation\\application.windows\\Smoke_manipulation.exe");
-                config.Add("exPTPS", "..\\Front Processing\\src\\Trakers\\Trakers.pde");
-                config.Add("exPTExe", "..\\Front Processing\\src\\Trakers\\application.windows\\Trakers.exe");
-                config.Add("exPTGPS", "..\\Front Processing\\src\\Trakers_gestures\\Trakers_gestures.pde");
-                config.Add("exPTGExe", "..\\Front Processing\\src\\Trakers_gestures\\application.windows\\Trakers_gestures.exe");
-                config.Add("exPIEHand1DPS", "..\\Front Processing\\src\\Interaction_examples\\Hands_1D\\Hands_1D.pde");
-                config.Add("exPIEHand1DExe", "..\\Front Processing\\src\\Interaction_examples\\Hands_1D\\application.windows\\Hands_1D.exe");
-                config.Add("exPIEHand2DPS", "..\\Front Processing\\src\\Interaction_examples\\Hands_2D\\Hands_2D.pde");
-                config.Add("exPIEHand2DExe", "..\\Front Processing\\src\\Interaction_examples\\Hands_2D\\application.windows\\Hands_2D.exe");
-                config.Add("exPIEHandPressPS", "..\\Front Processing\\src\\Interaction_examples\\Hand_press\\Hand_press.pde");
-                config.Add("exPIEHandPressExe", "..\\Front Processing\\src\\Interaction_examples\\Hand_press\\application.windows\\Hand_press.exe");
-                config.Add("exPIEHandSignalPS", "..\\Front Processing\\src\\Interaction_examples\\Hand_signal\\Hand_signal.pde");
-                config.Add("exPIEHandSignalExe", "..\\Front Processing\\src\\Interaction_examples\\Hand_signal\\application.windows\\Hand_signal.exe");
-                //Chemins des exemples web.
-                config.Add("exWPointersPS", "C:\\wamp\\www\\Front JS\\pointers\\");
-                config.Add("exWPointersExe", "http://localhost/Front%20JS/pointers/");
-                config.Add("exWGesturesPS", "C:\\wamp\\www\\Front JS\\pointers\\");
-                config.Add("exWGesturesExe", "http://localhost/Front%20JS/gestures/");
+
+                if (projectName.Equals("TraKERS"))
+                {
+                    //On charge les paramètres relatifs à TraKERS.
+                    //Chemins des readme et doc pour TraKERS.
+                    config.Add("readmeTraKERSMiddleware", "..\\readme - TraKERS Middleware.txt");
+                    config.Add("readmeTraKERSFrontProcessing", "..\\readme - TraKERS Front Processing.txt");
+                    config.Add("docTraKERSFrontProcessing", "..\\tutorial - TraKERS Front Processing.html");
+                    config.Add("readmeTraKERSFrontJS", "..\\readme - TraKERS Front Web.txt");
+                    config.Add("docTraKERSFrontJS", "..\\tutorial - TraKERS Front JS et Wamp.html");
+                    //Chemins des exemples processing.
+                    config.Add("exPFMPS", "..\\Front Processing\\src\\Fluid_manipulation\\Fluid_manipulation.pde");
+                    config.Add("exPFMExe", "..\\Front Processing\\src\\Fluid_manipulation\\application.windows\\Fluid_manipulation.exe");
+                    config.Add("exPSMPS", "..\\Front Processing\\src\\Smoke_manipulation\\Smoke_manipulation.pde");
+                    config.Add("exPSMExe", "..\\Front Processing\\src\\Smoke_manipulation\\application.windows\\Smoke_manipulation.exe");
+                    config.Add("exPTPS", "..\\Front Processing\\src\\Trakers\\Trakers.pde");
+                    config.Add("exPTExe", "..\\Front Processing\\src\\Trakers\\application.windows\\Trakers.exe");
+                    config.Add("exPTGPS", "..\\Front Processing\\src\\Trakers_gestures\\Trakers_gestures.pde");
+                    config.Add("exPTGExe", "..\\Front Processing\\src\\Trakers_gestures\\application.windows\\Trakers_gestures.exe");
+                    config.Add("exPIEHand1DPS", "..\\Front Processing\\src\\Interaction_examples\\Hands_1D\\Hands_1D.pde");
+                    config.Add("exPIEHand1DExe", "..\\Front Processing\\src\\Interaction_examples\\Hands_1D\\application.windows\\Hands_1D.exe");
+                    config.Add("exPIEHand2DPS", "..\\Front Processing\\src\\Interaction_examples\\Hands_2D\\Hands_2D.pde");
+                    config.Add("exPIEHand2DExe", "..\\Front Processing\\src\\Interaction_examples\\Hands_2D\\application.windows\\Hands_2D.exe");
+                    config.Add("exPIEHandPressPS", "..\\Front Processing\\src\\Interaction_examples\\Hand_press\\Hand_press.pde");
+                    config.Add("exPIEHandPressExe", "..\\Front Processing\\src\\Interaction_examples\\Hand_press\\application.windows\\Hand_press.exe");
+                    config.Add("exPIEHandSignalPS", "..\\Front Processing\\src\\Interaction_examples\\Hand_signal\\Hand_signal.pde");
+                    config.Add("exPIEHandSignalExe", "..\\Front Processing\\src\\Interaction_examples\\Hand_signal\\application.windows\\Hand_signal.exe");
+                    //Chemins des exemples web.
+                    config.Add("exWPointersPS", "C:\\wamp\\www\\Front JS\\pointers\\");
+                    config.Add("exWPointersExe", "http://localhost/Front%20JS/pointers/");
+                    config.Add("exWGesturesPS", "C:\\wamp\\www\\Front JS\\pointers\\");
+                    config.Add("exWGesturesExe", "http://localhost/Front%20JS/gestures/");
+                }
+                else if (projectName.Equals("BBM"))
+                {
+                    //On charge les paramètres relatifs à BBM.
+                    //Chemins des readme et doc pour BBM.
+                    config.Add("readmeBBMMiddleware", "..\\readme - BBM Middleware.txt");
+                    config.Add("docBBMFrontIDILL", "..\\Front IDILL\\Documentation - Front IDILL.html");
+                    //Chemins du Front IDILL pour BBM.
+                    config.Add("frontIDILLS", "C:\\wamp\\www\\Front IDILL\\");
+                    config.Add("frontIDILLExe", "http://localhost/Front%20IDILL/");
+                }
             }
 
             //On donne les noms des éléments du menu.
             FileMenu.Header = rm.GetString("menuFile");
             ReadmeMiddlewareMenu.Header = rm.GetString("menuReadmeMiddleware");
+            
+            QuitMenu.Header = rm.GetString("menuQuit");
+            ConfigMenu.Header = rm.GetString("menuConfig");
+            ParamMenu.Header = rm.GetString("menuParam");
+            ParamMenuReboot.Header = rm.GetString("menuParamReboot");
+
+            //kinectMain = main;
+            on = true;
+            closing = false;
+            refreshImage = true;
+            try
+            {
+                //On instancie les timers à N ms.
+                _timer = new System.Timers.Timer((int)config["tuioTimerElapsing"]);
+                //Dès que le timer est expiré, on appelle _timer_Elapsed.
+                _timer.Elapsed += new ElapsedEventHandler(_timer_Elapsed);
+            }
+            catch (Exception){}
+        }
+
+        /*
+         Charge la partie du menu de TraKERS.
+         */
+        public void loadTraKERSMenu()
+        {
+            //On rend visible la partie du menu des readme et doc de TraKERS.
+            ReadmeFrontProcessingMenu.Visibility = Visibility.Visible;
+            DocumentationFrontProcessingMenu.Visibility = Visibility.Visible;
+            ReadmeFrontJSMenu.Visibility = Visibility.Visible;
+            DocumentationFrontJSMenu.Visibility = Visibility.Visible;
+            //On rend visible la partie du menu des exemples Processing et Web de TraKERS.
+            ExamplesMenu.Visibility = Visibility.Visible;
+
+            //On cache la partie du menu des readme et doc de BBM.
+            DocumentationFrontIDILLMenu.Visibility = Visibility.Collapsed;
+
+            //Readme et doc de TraKERS.
             ReadmeFrontProcessingMenu.Header = rm.GetString("menuReadmeFrontProcessing");
             DocumentationFrontProcessingMenu.Header = rm.GetString("menuDocFrontP");
             ReadmeFrontJSMenu.Header = rm.GetString("menuReadmeFrontJS");
             DocumentationFrontJSMenu.Header = rm.GetString("menuDocFrontJS");
-            QuitMenu.Header = rm.GetString("menuQuit");
-            ConfigMenu.Header = rm.GetString("menuConfig");
-            ParamMenu.Header = rm.GetString("menuParam");
-            ParamMenuReboot.Header = rm.GetString("menuParamReboot");
+            //Exemples de TraKERS.
             ExamplesMenu.Header = rm.GetString("menuEx");
             ProcessingMenu.Header = rm.GetString("menuExP");
             ProcessingMenuFM.Header = rm.GetString("menuExPFluid");
@@ -172,19 +240,32 @@
             WebMenuGestures.Header = rm.GetString("menuExWGestures");
             WebMenuGesturesPS.Header = rm.GetString("menuExSource");
             WebMenuGesturesExe.Header = rm.GetString("menuExExe");
+        }
 
-            //kinectMain = main;
-            on = true;
-            closing = false;
-            refreshImage = true;
-            try
-            {
-                //On instancie les timers à N ms.
-                _timer = new System.Timers.Timer((int)config["tuioTimerElapsing"]);
-                //Dès que le timer est expiré, on appelle _timer_Elapsed.
-                _timer.Elapsed += new ElapsedEventHandler(_timer_Elapsed);
-            }
-            catch (Exception){}
+        /*
+         Charge la partie du menu de BBM.
+         */
+        public void loadBBMMenu()
+        {
+            //On rend visible la partie du menu des readme et doc de BBM.
+            DocumentationFrontIDILLMenu.Visibility = Visibility.Visible;
+            //On rend visible la partie du menu du Front IDILL pour BBM.
+            FrontIDILLMenu.Visibility = Visibility.Visible;
+            
+            //On cache la partie du menu des readme et doc de TraKERS.
+            ReadmeFrontProcessingMenu.Visibility = Visibility.Collapsed;
+            DocumentationFrontProcessingMenu.Visibility = Visibility.Collapsed;
+            ReadmeFrontJSMenu.Visibility = Visibility.Collapsed;
+            DocumentationFrontJSMenu.Visibility = Visibility.Collapsed;
+            //On cache la partie du menu des exemples Processing et Web de TraKERS.
+            menu.Items.Remove(ExamplesMenu);
+            
+            //Readme et doc de BBM.
+            DocumentationFrontIDILLMenu.Header = rm.GetString("menuDocFrontIDILL");
+            //Exemples de BBM.
+            FrontIDILLMenu.Header = rm.GetString("menuFrontIDILL");
+            FrontIDILLMenuS.Header = rm.GetString("menuFrontIDILLS");
+            FrontIDILLMenuExe.Header = rm.GetString("menuFrontIDILLExe");
         }
 
         /*
@@ -766,7 +847,8 @@
             try
             {
                 //On lit le fichier de config.
-                String[] lines = System.IO.File.ReadAllLines("config.txt");
+  
+                    String[] lines = System.IO.File.ReadAllLines(configPath);
 
                 //On repère les paramètres supposés être des int ou float de manière à les parser.
                 String[] ints = { "tuioConnexionPort", "wsConnexionPort", "takenPoints", "tuioTimerElapsing", "wsTimerElapsing", "directionChangeTresholdXY", "imagesToShow" };
@@ -1129,7 +1211,14 @@
          */
         private void MiddlewareReadmeMenu_Click(object sender, RoutedEventArgs e)
         {
-            OpenFile((String)config["readmeMiddleware"]);
+            if (projectName.Equals("TraKERS"))
+            {
+                OpenFile((String)config["readmeTraKERSMiddleware"]);
+            }
+            else if (projectName.Equals("BBM"))
+            {
+                OpenFile((String)config["readmeBBMMiddleware"]);
+            }
         }
 
         /*
@@ -1137,7 +1226,7 @@
          */
         private void FrontProcessingReadmeMenu_Click(object sender, RoutedEventArgs e)
         {
-            OpenFile((String)config["readmeFrontProcessing"]);
+            OpenFile((String)config["readmeTraKERSFrontProcessing"]);
         }
 
         /*
@@ -1145,7 +1234,7 @@
          */
         private void FrontProcessingDocumentationMenu_Click(object sender, RoutedEventArgs e)
         {
-            OpenFile((String)config["docFrontProcessing"]);
+            OpenFile((String)config["docTraKERSFrontProcessing"]);
         }
         
         /*
@@ -1153,7 +1242,7 @@
          */
         private void FrontJSReadmeMenu_Click(object sender, RoutedEventArgs e)
         {
-            OpenFile((String)config["readmeFrontJS"]);
+            OpenFile((String)config["readmeTraKERSFrontJS"]);
         }
 
         /*
@@ -1161,7 +1250,15 @@
          */
         private void FrontJSDocumentationMenu_Click(object sender, RoutedEventArgs e)
         {
-            OpenFile((String)config["docFrontJS"]);
+            OpenFile((String)config["docTraKERSFrontJS"]);
+        }
+
+        /*
+         * Ouvre la documentation du Front IDILL.
+         */
+        private void FrontIDILLDocumentationMenu_Click(object sender, RoutedEventArgs e)
+        {
+            OpenFile((String)config["docBBMFrontIDILL"]);
         }
 
         /*
@@ -1169,7 +1266,7 @@
          */
         private void ParamMenu_Click(object sender, RoutedEventArgs e)
         {
-            OpenFile(".\\config.txt");
+            OpenFile(configPath);
         }
 
         /*
@@ -1329,5 +1426,21 @@
         {
             OpenFile((String)config["exWGesturesExe"]);
         }
+
+        /*
+         * Ouvre la source du Front IDILL.
+         */
+        private void FrontIDILLMenuS_Click(object sender, RoutedEventArgs e)
+        {
+            OpenFile((String)config["frontIDILLS"]);
+        }
+
+        /*
+         * Ouvre le Front IDILL.
+         */
+        private void FrontIDILLMenuExe_Click(object sender, RoutedEventArgs e)
+        {
+            OpenFile((String)config["frontIDILLExe"]);
+        }
     }
 }
--- a/middleware/Debug/Properties/Resources.Designer.cs	Tue Jul 24 11:14:52 2012 +0200
+++ b/middleware/Debug/Properties/Resources.Designer.cs	Tue Jul 24 16:35:10 2012 +0200
@@ -122,6 +122,15 @@
         }
         
         /// <summary>
+        ///   Looks up a localized string similar to _Documentation du Front IDILL.
+        /// </summary>
+        internal static string menuDocFrontIDILL {
+            get {
+                return ResourceManager.GetString("menuDocFrontIDILL", resourceCulture);
+            }
+        }
+        
+        /// <summary>
         ///   Looks up a localized string similar to _Documentation du Front Web.
         /// </summary>
         internal static string menuDocFrontJS {
@@ -293,6 +302,33 @@
         }
         
         /// <summary>
+        ///   Looks up a localized string similar to _Front IDILL.
+        /// </summary>
+        internal static string menuFrontIDILL {
+            get {
+                return ResourceManager.GetString("menuFrontIDILL", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to _Exécutable.
+        /// </summary>
+        internal static string menuFrontIDILLExe {
+            get {
+                return ResourceManager.GetString("menuFrontIDILLExe", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///   Looks up a localized string similar to _Source.
+        /// </summary>
+        internal static string menuFrontIDILLS {
+            get {
+                return ResourceManager.GetString("menuFrontIDILLS", resourceCulture);
+            }
+        }
+        
+        /// <summary>
         ///   Looks up a localized string similar to _Fichier des paramètres.
         /// </summary>
         internal static string menuParam {
--- a/middleware/Debug/Properties/Resources.resx	Tue Jul 24 11:14:52 2012 +0200
+++ b/middleware/Debug/Properties/Resources.resx	Tue Jul 24 16:35:10 2012 +0200
@@ -249,4 +249,20 @@
     <value>(redémarrage de TraKERS nécessaire)</value>
     <comment>Indication qu'il est nécessaire de redémarrer TraKERS.</comment>
   </data>
+  <data name="menuDocFrontIDILL" xml:space="preserve">
+    <value>_Documentation du Front IDILL</value>
+    <comment>Documentation du Front IDILL.</comment>
+  </data>
+  <data name="menuFrontIDILL" xml:space="preserve">
+    <value>_Front IDILL</value>
+    <comment>Front IDILL.</comment>
+  </data>
+  <data name="menuFrontIDILLExe" xml:space="preserve">
+    <value>_Exécutable</value>
+    <comment>Exécutable du Front IDILL.</comment>
+  </data>
+  <data name="menuFrontIDILLS" xml:space="preserve">
+    <value>_Source</value>
+    <comment>Source du Front IDILL.</comment>
+  </data>
 </root>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/middleware/dist/BBM.iss	Tue Jul 24 16:35:10 2012 +0200
@@ -0,0 +1,109 @@
+; Script generated by the Inno Setup Script Wizard.
+; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!
+
+#define MyAppName "BrowseByMotion"
+#define MyAppVersion "1.0"
+#define MyAppPublisher "IRI"
+
+[Setup]
+; NOTE: The value of AppId uniquely identifies this application.
+; Do not use the same AppId value in installers for other applications.
+; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
+AppId={{C88C743D-E369-40B3-A1F9-527FD5B9EF9C}
+AppName={#MyAppName}
+AppVersion={#MyAppVersion}
+;AppVerName={#MyAppName} {#MyAppVersion}
+AppPublisher={#MyAppPublisher}
+DefaultDirName={pf}\{#MyAppName}
+DefaultGroupName={#MyAppName}
+AllowNoIcons=yes
+OutputBaseFilename=BBM_setup
+Compression=lzma
+SolidCompression=yes
+
+[Languages]
+Name: "english"; MessagesFile: "compiler:Default.isl"
+Name: "french"; MessagesFile: "compiler:Languages\French.isl"
+
+[Run]
+Filename: "{app}\Dependancies\dotNetFx40_Client_x86_x64.exe"
+Filename: "{app}\Dependancies\wampserver2.2e.exe"
+
+[Files]
+Source: "C:\Users\bastiena\Documents\trakers\contact.txt"; DestDir: "{app}\"; Flags: ignoreversion
+Source: "C:\Users\bastiena\Documents\trakers\LICENSE.txt"; DestDir: "{app}\"; Flags: ignoreversion
+Source: "C:\Users\bastiena\Documents\trakers\readme - BBM Middleware.txt"; DestDir: "{app}\"; Flags: ignoreversion
+
+Source: "C:\Users\bastiena\Documents\trakers\middleware\dist\dotNetFx40_Client_x86_x64.exe"; DestDir: "{app}\Dependancies\"; Flags: ignoreversion
+Source: "C:\Users\bastiena\Documents\trakers\middleware\dist\wampserver2.2e.exe"; DestDir: "{app}\Dependancies\"; Flags: ignoreversion
+
+Source: "C:\Users\bastiena\Documents\trakers\middleware\lib\*"; DestDir: "{app}\Middleware\lib\"; Flags: ignoreversion recursesubdirs createallsubdirs
+
+Source: "C:\Users\bastiena\Documents\trakers\middleware\Communication\WSServer.cs"; DestDir: "{app}\Middleware\Communication\"; Flags: ignoreversion
+Source: "C:\Users\bastiena\Documents\trakers\middleware\Communication\TUIOServer.cs"; DestDir: "{app}\Middleware\Communication\"; Flags: ignoreversion
+Source: "C:\Users\bastiena\Documents\trakers\middleware\Communication\Server.cs"; DestDir: "{app}\Middleware\Communication\"; Flags: ignoreversion
+Source: "C:\Users\bastiena\Documents\trakers\middleware\Communication\Communication.csproj"; DestDir: "{app}\Middleware\Communication\"; Flags: ignoreversion
+Source: "C:\Users\bastiena\Documents\trakers\middleware\Communication\Properties\AssemblyInfo.cs"; DestDir: "{app}\Middleware\Communication\Properties\"; Flags: ignoreversion
+
+Source: "C:\Users\bastiena\Documents\trakers\middleware\Debug\DebugWindow.xaml.cs"; DestDir: "{app}\Middleware\Debug\"; Flags: ignoreversion
+Source: "C:\Users\bastiena\Documents\trakers\middleware\Debug\DebugWindow.xaml"; DestDir: "{app}\Middleware\Debug\"; Flags: ignoreversion
+Source: "C:\Users\bastiena\Documents\trakers\middleware\Debug\App.config"; DestDir: "{app}\Middleware\Debug\"; Flags: ignoreversion
+Source: "C:\Users\bastiena\Documents\trakers\middleware\Debug\Debug.csproj"; DestDir: "{app}\Middleware\Debug\"; Flags: ignoreversion
+Source: "C:\Users\bastiena\Documents\trakers\middleware\Debug\Settings.cs"; DestDir: "{app}\Middleware\Debug\"; Flags: ignoreversion
+Source: "C:\Users\bastiena\Documents\trakers\middleware\Debug\Properties\*"; DestDir: "{app}\Middleware\Debug\Properties"; Flags: ignoreversion recursesubdirs createallsubdirs
+Source: "C:\Users\bastiena\Documents\trakers\middleware\Debug\Resources\*"; DestDir: "{app}\Middleware\Debug\Resources"; Flags: ignoreversion recursesubdirs createallsubdirs
+
+Source: "C:\Users\bastiena\Documents\trakers\middleware\Tracking\Tracking.csproj"; DestDir: "{app}\Middleware\Tracking\"; Flags: ignoreversion
+Source: "C:\Users\bastiena\Documents\trakers\middleware\Tracking\Properties\*"; DestDir: "{app}\Middleware\Tracking\Properties\"; Flags: ignoreversion recursesubdirs createallsubdirs
+Source: "C:\Users\bastiena\Documents\trakers\middleware\Tracking\Postures\*"; DestDir: "{app}\Middleware\Tracking\Postures\"; Flags: ignoreversion recursesubdirs createallsubdirs
+Source: "C:\Users\bastiena\Documents\trakers\middleware\Tracking\Gestures\*"; DestDir: "{app}\Middleware\Tracking\Gestures\"; Flags: ignoreversion recursesubdirs createallsubdirs
+Source: "C:\Users\bastiena\Documents\trakers\middleware\Tracking\Search\*"; DestDir: "{app}\Middleware\Tracking\Search\"; Flags: ignoreversion recursesubdirs createallsubdirs
+
+Source: "C:\Users\bastiena\Documents\trakers\middleware\src\MainClass.cs"; DestDir: "{app}\Middleware\src\"; Flags: ignoreversion
+Source: "C:\Users\bastiena\Documents\trakers\middleware\src\MainModule.csproj"; DestDir: "{app}\Middleware\src\"; Flags: ignoreversion
+Source: "C:\Users\bastiena\Documents\trakers\middleware\src\Resources\*"; DestDir: "{app}\Middleware\src\Resources\"; Flags: ignoreversion recursesubdirs createallsubdirs
+Source: "C:\Users\bastiena\Documents\trakers\middleware\src\MainModule\*"; DestDir: "{app}\Middleware\src\MainModule\"; Flags: ignoreversion recursesubdirs createallsubdirs
+Source: "C:\Users\bastiena\Documents\trakers\middleware\src\Properties\*"; DestDir: "{app}\Middleware\src\Properties\"; Flags: ignoreversion recursesubdirs createallsubdirs
+
+Source: "C:\Users\bastiena\Documents\trakers\middleware\Trakers.sln"; DestDir: "{app}\Middleware\"; Flags: ignoreversion
+
+Source: "C:\Users\bastiena\Documents\trakers\middleware\src\bin\Release\Bespoke.Common.dll"; DestDir: "{app}\Middleware\"; Flags: ignoreversion
+Source: "C:\Users\bastiena\Documents\trakers\middleware\src\bin\Release\Bespoke.Common.Osc.dll"; DestDir: "{app}\Middleware\"; Flags: ignoreversion
+Source: "C:\Users\bastiena\Documents\trakers\middleware\src\bin\Release\Coding4Fun.Kinect.Wpf.dll"; DestDir: "{app}\Middleware\"; Flags: ignoreversion
+Source: "C:\Users\bastiena\Documents\trakers\middleware\src\bin\Release\TuioServer.dll"; DestDir: "{app}\Middleware\"; Flags: ignoreversion
+Source: "C:\Users\bastiena\Documents\trakers\middleware\src\bin\Release\Fleck.dll"; DestDir: "{app}\Middleware\"; Flags: ignoreversion
+Source: "C:\Users\bastiena\Documents\trakers\middleware\src\bin\Release\MainModule.exe"; DestDir: "{app}\Middleware\"; Flags: ignoreversion
+Source: "C:\Users\bastiena\Documents\trakers\middleware\Debug\bin\Release\Debug.dll.config"; DestDir: "{app}\Middleware\Debug\"; Flags: ignoreversion
+Source: "C:\Users\bastiena\Documents\trakers\middleware\Debug\bin\Release\Debug.dll"; DestDir: "{app}\Middleware\"; Flags: ignoreversion
+Source: "C:\Users\bastiena\Documents\trakers\middleware\Communication\bin\Release\Communication.dll"; DestDir: "{app}\Middleware\"; Flags: ignoreversion recursesubdirs createallsubdirs
+Source: "C:\Users\bastiena\Documents\trakers\middleware\Tracking\bin\Release\Tracking.dll"; DestDir: "{app}\Middleware\"; Flags: ignoreversion recursesubdirs createallsubdirs
+Source: "C:\Users\bastiena\Documents\trakers\middleware\Debug\bin\Release\Debug.dll.config"; DestDir: "{app}\Middleware\"; Flags: ignoreversion recursesubdirs createallsubdirs
+Source: "C:\Users\bastiena\Documents\trakers\middleware\src\bin\Release\BBM - config.txt"; DestDir: "{app}\Middleware\"; Flags: ignoreversion
+Source: "C:\Users\bastiena\Documents\trakers\middleware\src\bin\Release\Imgs\*"; DestDir: "{app}\Middleware\Imgs\"; Flags: ignoreversion
+
+Source: "C:\Users\bastiena\Documents\trakers\front_idill\doc\*"; DestDir: "{app}\"; Flags: ignoreversion recursesubdirs createallsubdirs
+Source: "C:\Users\bastiena\Documents\trakers\front_idill\lib\*"; DestDir: "{app}\lib\"; Flags: ignoreversion recursesubdirs createallsubdirs
+Source: "C:\Users\bastiena\Documents\trakers\front_idill\src\communication\*"; DestDir: "{app}\Front IDILL\communication\"; Flags: ignoreversion recursesubdirs createallsubdirs
+Source: "C:\Users\bastiena\Documents\trakers\front_idill\src\img\*"; DestDir: "{app}\Front IDILL\img\"; Flags: ignoreversion recursesubdirs createallsubdirs
+Source: "C:\Users\bastiena\Documents\trakers\front_idill\src\lang\*"; DestDir: "{app}\Front IDILL\lang\"; Flags: ignoreversion recursesubdirs createallsubdirs
+Source: "C:\Users\bastiena\Documents\trakers\front_idill\src\mosaic\*"; DestDir: "{app}\Front IDILL\mosaic\"; Flags: ignoreversion recursesubdirs createallsubdirs
+Source: "C:\Users\bastiena\Documents\trakers\front_idill\src\pictos\*"; DestDir: "{app}\Front IDILL\pictos\"; Flags: ignoreversion recursesubdirs createallsubdirs
+Source: "C:\Users\bastiena\Documents\trakers\front_idill\src\search\*"; DestDir: "{app}\Front IDILL\search\"; Flags: ignoreversion recursesubdirs createallsubdirs
+Source: "C:\Users\bastiena\Documents\trakers\front_idill\src\snapshots\*"; DestDir: "{app}\Front IDILL\snapshots\"; Flags: ignoreversion recursesubdirs createallsubdirs
+Source: "C:\Users\bastiena\Documents\trakers\front_idill\src\snapshots-little\*"; DestDir: "{app}\Front IDILL\snapshots-little\"; Flags: ignoreversion recursesubdirs createallsubdirs
+Source: "C:\Users\bastiena\Documents\trakers\front_idill\src\config.json"; DestDir: "{app}\Front IDILL\"; Flags: ignoreversion
+Source: "C:\Users\bastiena\Documents\trakers\front_idill\src\defaults.js"; DestDir: "{app}\Front IDILL\"; Flags: ignoreversion
+Source: "C:\Users\bastiena\Documents\trakers\front_idill\src\dico.json"; DestDir: "{app}\Front IDILL\"; Flags: ignoreversion
+Source: "C:\Users\bastiena\Documents\trakers\front_idill\src\index.html"; DestDir: "{app}\Front IDILL\"; Flags: ignoreversion
+Source: "C:\Users\bastiena\Documents\trakers\front_idill\src\player\fonts\*"; DestDir: "{app}\Front IDILL\player\fonts\"; Flags: ignoreversion recursesubdirs createallsubdirs
+Source: "C:\Users\bastiena\Documents\trakers\front_idill\src\player\img\*"; DestDir: "{app}\Front IDILL\player\img\"; Flags: ignoreversion recursesubdirs createallsubdirs
+Source: "C:\Users\bastiena\Documents\trakers\front_idill\src\player\json\*"; DestDir: "{app}\Front IDILL\player\json\"; Flags: ignoreversion recursesubdirs createallsubdirs
+Source: "C:\Users\bastiena\Documents\trakers\front_idill\src\player\metadataplayer\*"; DestDir: "{app}\Front IDILL\player\metadataplayer\"; Flags: ignoreversion recursesubdirs createallsubdirs
+Source: "C:\Users\bastiena\Documents\trakers\front_idill\src\player\index.html"; DestDir: "{app}\Front IDILL\player\"; Flags: ignoreversion
+
+; NOTE: Don't use "Flags: ignoreversion" on any shared system files
+
+[Icons]
+Name: "{group}\{cm:UninstallProgram,{#MyAppName}}"; Filename: "{uninstallexe}"
+Name: "{group}\{#MyAppName}\Middleware"; Filename: "{app}\Middleware\MainModule.exe" 
+Name: "{commondesktop}\BBM - Middleware"; Filename: "{app}\Middleware\MainModule.exe"
\ No newline at end of file
--- a/middleware/dist/TraKERS.iss	Tue Jul 24 11:14:52 2012 +0200
+++ b/middleware/dist/TraKERS.iss	Tue Jul 24 16:35:10 2012 +0200
@@ -30,7 +30,11 @@
 Filename: "{app}\Dependancies\wampserver2.2e.exe"
 
 [Files]
-Source: "C:\Users\bastiena\Documents\trakers\*.txt"; DestDir: "{app}\"; Flags: ignoreversion
+Source: "C:\Users\bastiena\Documents\trakers\contact.txt"; DestDir: "{app}\"; Flags: ignoreversion
+Source: "C:\Users\bastiena\Documents\trakers\LICENSE.txt"; DestDir: "{app}\"; Flags: ignoreversion
+Source: "C:\Users\bastiena\Documents\trakers\readme - TraKERS Middleware.txt"; DestDir: "{app}\"; Flags: ignoreversion
+Source: "C:\Users\bastiena\Documents\trakers\readme - TraKERS Front Processing.txt"; DestDir: "{app}\"; Flags: ignoreversion
+Source: "C:\Users\bastiena\Documents\trakers\readme - TraKERS Front Web.txt"; DestDir: "{app}\"; Flags: ignoreversion
 
 Source: "C:\Users\bastiena\Documents\trakers\middleware\dist\dotNetFx40_Client_x86_x64.exe"; DestDir: "{app}\Dependancies\"; Flags: ignoreversion
 Source: "C:\Users\bastiena\Documents\trakers\middleware\dist\wampserver2.2e.exe"; DestDir: "{app}\Dependancies\"; Flags: ignoreversion
@@ -76,7 +80,7 @@
 Source: "C:\Users\bastiena\Documents\trakers\middleware\Communication\bin\Release\Communication.dll"; DestDir: "{app}\Middleware\"; Flags: ignoreversion recursesubdirs createallsubdirs
 Source: "C:\Users\bastiena\Documents\trakers\middleware\Tracking\bin\Release\Tracking.dll"; DestDir: "{app}\Middleware\"; Flags: ignoreversion recursesubdirs createallsubdirs
 Source: "C:\Users\bastiena\Documents\trakers\middleware\Debug\bin\Release\Debug.dll.config"; DestDir: "{app}\Middleware\"; Flags: ignoreversion recursesubdirs createallsubdirs
-Source: "C:\Users\bastiena\Documents\trakers\middleware\src\bin\Release\config.txt"; DestDir: "{app}\Middleware\"; Flags: ignoreversion
+Source: "C:\Users\bastiena\Documents\trakers\middleware\src\bin\Release\TraKERS - config.txt"; DestDir: "{app}\Middleware\"; Flags: ignoreversion
 Source: "C:\Users\bastiena\Documents\trakers\middleware\src\bin\Release\Imgs\*"; DestDir: "{app}\Middleware\Imgs\"; Flags: ignoreversion
 
 Source: "C:\Users\bastiena\Documents\trakers\front_processing\doc\*"; DestDir: "{app}\"; Flags: ignoreversion recursesubdirs createallsubdirs
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/middleware/src/bin/Release/BBM - config.txt	Tue Jul 24 16:35:10 2012 +0200
@@ -0,0 +1,19 @@
+minDistHands:1,0
+minDist:1,0
+takenPoints:10
+directionChangeTresholdXY:10
+imagesToShow:20
+maxDistHands:1,5
+maxDist:3,0
+zeroPoint:1,9
+directionChangeTresholdZ:0,1
+tuioConnexionHost:127.0.0.1
+tuioConnexionPort:8080
+tuioTimerElapsing:1000
+wsConnexionHost:127.0.0.1
+wsConnexionPort:8090
+wsTimerElapsing:1000
+readmeBBMMiddleware:..\readme - BBM Middleware.txt
+docBBMFrontIDILL:..\Documentation - Front IDILL.html
+frontIDILLS:C:\wamp\www\Front IDILL\
+frontIDILLExe:http://localhost/Front%20IDILL/
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/middleware/src/bin/Release/TraKERS - config.txt	Tue Jul 24 16:35:10 2012 +0200
@@ -0,0 +1,40 @@
+minDistHands:1,0
+minDist:1,0
+takenPoints:10
+directionChangeTresholdXY:10
+imagesToShow:20
+maxDistHands:1,5
+maxDist:3,0
+zeroPoint:1,9
+directionChangeTresholdZ:0,1
+tuioConnexionHost:127.0.0.1
+tuioConnexionPort:8080
+tuioTimerElapsing:1000
+wsConnexionHost:127.0.0.1
+wsConnexionPort:8090
+wsTimerElapsing:1000
+readmeTraKERSMiddleware:..\readme - TraKERS Middleware.txt
+readmeTraKERSFrontProcessing:..\readme - TraKERS Front Processing.txt
+docTraKERSFrontProcessing:..\tutorial - TraKERS Front Processing.html
+readmeTraKERSFrontJS:..\readme - TraKERS Front Web.txt
+docTraKERSFrontJS:..\tutorial - TraKERS Front JS et Wamp.html
+exPFMPS:..\Front Processing\src\Fluid_manipulation\Fluid_manipulation.pde
+exPFMExe:..\Front Processing\src\Fluid_manipulation\application.windows\Fluid_manipulation.exe
+exPSMPS:..\Front Processing\src\Smoke_manipulation\Smoke_manipulation.pde
+exPSMExe:..\Front Processing\src\Smoke_manipulation\application.windows\Smoke_manipulation.exe
+exPTPS:..\Front Processing\src\Trakers\Trakers.pde
+exPTExe:..\Front Processing\src\Trakers\application.windows\Trakers.exe
+exPTGPS:..\Front Processing\src\Trakers_gestures\Trakers_gestures.pde
+exPTGExe:..\Front Processing\src\Trakers_gestures\application.windows\Trakers_gestures.exe
+exPIEHand1DPS:..\Front Processing\src\Interaction_examples\Hands_1D\Hands_1D.pde
+exPIEHand1DExe:..\Front Processing\src\Interaction_examples\Hands_1D\application.windows\Hands_1D.exe
+exPIEHand2DPS:..\Front Processing\src\Interaction_examples\Hands_2D\Hands_2D.pde
+exPIEHand2DExe:..\Front Processing\src\Interaction_examples\Hands_2D\application.windows\Hands_2D.exe
+exPIEHandPressPS:..\Front Processing\src\Interaction_examples\Hand_press\Hand_press.pde
+exPIEHandPressExe:..\Front Processing\src\Interaction_examples\Hand_press\application.windows\Hand_press.exe
+exPIEHandSignalPS:..\Front Processing\src\Interaction_examples\Hand_signal\Hand_signal.pde
+exPIEHandSignalExe:..\Front Processing\src\Interaction_examples\Hand_signal\application.windows\Hand_signal.exe
+exWPointersPS:C:\wamp\www\Front JS\pointers\
+exWPointersExe:http://localhost/Front%20JS/pointers/
+exWGesturesPS:C:\wamp\www\Front JS\pointers\
+exWGesturesExe:http://localhost/Front%20JS/gestures/
\ No newline at end of file
--- a/middleware/src/bin/Release/config.txt	Tue Jul 24 11:14:52 2012 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,40 +0,0 @@
-minDistHands:1,0
-minDist:1,0
-takenPoints:10
-directionChangeTresholdXY:10
-imagesToShow:20
-maxDistHands:1,5
-maxDist:3,0
-zeroPoint:1,9
-directionChangeTresholdZ:0,1
-tuioConnexionHost:127.0.0.1
-tuioConnexionPort:8080
-tuioTimerElapsing:1000
-wsConnexionHost:127.0.0.1
-wsConnexionPort:8090
-wsTimerElapsing:1000
-readmeMiddleware:..\readme - Middleware.txt
-readmeFrontProcessing:..\readme - Front Processing.txt
-docFrontProcessing:..\tutorial front processing.html
-readmeFrontJS:..\readme - Front Web.txt
-docFrontJS:..\tutorial front js et wamp.html
-exPFMPS:..\Front Processing\src\Fluid_manipulation\Fluid_manipulation.pde
-exPFMExe:..\Front Processing\src\Fluid_manipulation\application.windows\Fluid_manipulation.exe
-exPSMPS:..\Front Processing\src\Smoke_manipulation\Smoke_manipulation.pde
-exPSMExe:..\Front Processing\src\Smoke_manipulation\application.windows\Smoke_manipulation.exe
-exPTPS:..\Front Processing\src\Trakers\Trakers.pde
-exPTExe:..\Front Processing\src\Trakers\application.windows\Trakers.exe
-exPTGPS:..\Front Processing\src\Trakers_gestures\Trakers_gestures.pde
-exPTGExe:..\Front Processing\src\Trakers_gestures\application.windows\Trakers_gestures.exe
-exPIEHand1DPS:..\Front Processing\src\Interaction_examples\Hands_1D\Hands_1D.pde
-exPIEHand1DExe:..\Front Processing\src\Interaction_examples\Hands_1D\application.windows\Hands_1D.exe
-exPIEHand2DPS:..\Front Processing\src\Interaction_examples\Hands_2D\Hands_2D.pde
-exPIEHand2DExe:..\Front Processing\src\Interaction_examples\Hands_2D\application.windows\Hands_2D.exe
-exPIEHandPressPS:..\Front Processing\src\Interaction_examples\Hand_press\Hand_press.pde
-exPIEHandPressExe:..\Front Processing\src\Interaction_examples\Hand_press\application.windows\Hand_press.exe
-exPIEHandSignalPS:..\Front Processing\src\Interaction_examples\Hand_signal\Hand_signal.pde
-exPIEHandSignalExe:..\Front Processing\src\Interaction_examples\Hand_signal\application.windows\Hand_signal.exe
-exWPointersPS:C:\wamp\www\Front JS\pointers\
-exWPointersExe:http://localhost/Front%20JS/pointers/
-exWGesturesPS:C:\wamp\www\Front JS\pointers\
-exWGesturesExe:http://localhost/Front%20JS/gestures/
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/readme - BBM Middleware.txt	Tue Jul 24 16:35:10 2012 +0200
@@ -0,0 +1,134 @@
+BBM (Browse By Motion) est une interface permettant de naviguer dans une mosaïque de vidéos indexées basée sur la détection de gestures / positions du squelette envoyé par le SDK Microsoft (1.5) de Kinect ou à la souris.
+
+Auteur : Alexandre BASTIEN.
+
+I) TraKERS - Eléments requis :
+
+Les spécifications de Microsoft font état des éléments matériels et logiciels requis afin de pouvoir utiliser le SDK :
+
+Besoins matériels :
+    Capteur Kinect.
+    Processeur32-bit (x86) ou 64-bit (x64).
+    Dual-core 2.66-GHz ou plus rapide.
+    Bus USB 2.0 dédié.
+    2 GB RAM.
+Besoins logiciels :
+    Microsoft® Visual Studio® 2010 Express ou une autre édition de Visual Studio 2010 (si vous souhaitez développer).
+    Windows 7.
+    NET Framework 4.0.
+
+Vous les trouverez ici si vous le souhaitez : http://www.microsoft.com/en-us/kinectforwindows/develop/release-notes.aspx
+
+La version 4.0 du Framework est présente dans l'installation de TraKERS.
+Néanmoins, par soucis de taille de l'installeur, il vous sera nécessaire d'installer le SDK 1.5 de Microsoft ici :
+http://www.microsoft.com/en-us/kinectforwindows/develop/developer-downloads.aspx
+
+II) BBM - Structure :
+
+BBM est composé de deux modules, le Middleware (utilisant la Kinect afin de détecter des gestes et de suivre la position des mains et un Front (nommé Front IDILL, développé en Javascript), permettant de récupérer les WebSockets du Middleware par Client/Server WebSocket. Pour plus d'informations sur le Front, veuillez consulter la documentation située à la racine sous le nom Front IDILL.
+
+Le middleware dispose d'une interface de debug permettant de connaître en temps réel la position de l'utilisateur à la Kinect. Ces fonctionnalités seront vues plus avant dans la partie Utilisation.
+
+Les sources des modules sont fournies lors de l'installation, n'hésitez pas à les consulter si besoin est.
+
+III) BBM - Utilisation :
+
+Vous pouvez démarrer le Middleware ou bien le Front dans l'ordre que vous voulez.
+Lorsque le Middleware est démarré, la Kinect s'allume et affiche ce qu'elle voit. Le capteur (situé le plus à gauche sur la Kinect) est alors allumé en rouge, signe que vous serez détecté si vous entrez dans son champ.
+Lorsque le bouton ON a été appuyé, il devient un bouton OFF, et permet d'éteindre la Kinect. Il est à noter que le fait de fermer la fenêtre éteint également le capteur de la Kinect, avant de quitter.
+(Plus de détails sur la Kinect : http://fr.wikipedia.org/wiki/Kinect).
+
+Lorsque vous êtes détectés, le squelette de la personne la plus proche s'affiche. Les rectangles sur la droite indiquent la proximité de l'utilisateur par rapport à la Kinect, plus la barre est remplie de bas en haut, plus l'utilisateur est proche du point d'interaction maximal (point dans lequel il suffit de tendre les bras pour que les mains soient dans la zone de recherche).
+
+Il existe une zone de détection des mains, située par défaut entre 1m et 1,5m de la Kinect mais configurable. En dehors de cette zone, les mains sont toujours détectées, mais aucun signal n'est envoyé via le serveur TUIO. Il y a deux rectangles en haut de cette fenêtre, permettant d'indiquer si une main est entrée dans ce champ (main gauche/droite dans le champ se traduit par la coloration du rectangle gauche/droit en bleu, et par l'affichage en pixels des coordonnées de la main (sauf pour la profondeur, qui est en mètres).
+
+Il est possible de paramétrer des éléments du Middleware, comme la délimitation du champ pour les mains, le host et le port pour le serveur et l'intervalle de temps minimum qui sépare deux détections de gestes.
+
+Si des erreurs surviennent durant le fonctionnement du Middleware, ceux-ci seront affichés en bas de la fenêtre. Lorsqu'un geste est détecté, une image est affichée puis disparaît de la fenêtre.
+
+A) Position des mains :
+
+Lorsqu'au moins une main entre dans le champ, ses/leurs coordonnées sont envoyées par le serveur au front.
+
+B) Détection de gestes :
+
+Pour l'instant, plusieurs gestes peuvent être détectés :
+
+    SWIPE - Désigne un mouvement de claque horizontal, partant de la droite vers la gauche avec la main droite (et inversement pour la gauche). Durant le geste, la main ne doit pas descendre sous la hanche ni aller au dessus de la tête. Il lui faut une certaine longueur de parcours et elle ne doit aller que vers la gauche pour la main droite et vers la droite pour la main gauche. Le swipe peut donc être pour l'instant gauche ou droit.
+    Lorsque ce geste est détecté, le bas de la fenêtre se colore en rouge si le swipe est vers la gauche.
+    Lorsque ce geste est détecté, le bas de la fenêtre se colore en violet si le swipe est vers la droite.
+    
+    PUSH/PULL - Mouvement de poussée/traction rectiligne dirigé vers la kinect à partir de l'emplacement actuel de la main effectuant le geste.
+    Lorsque ce geste est détecté, le bas de la fenêtre se colore en blanc s'il s'agit d'un push.
+    Lorsque ce geste est détecté, le bas de la fenêtre se colore en noir s'il s'agit d'un pull.
+    
+    JUMP - Action de sauter vers le haut.
+    
+    FALL - Action de s'accroupir.
+    
+    BEND - Action de se pencher en avant.
+    
+    KNEE-UP - Action de lever le genou.
+    
+C) Paramètres de configuration.
+
+Ceux-ci sont accessibles dans le fichier config.txt situé dans le même dossier que l'exécutable du Middleware nommé MainModule.
+Ils sont actuellement de la forme :
+
+Les valeurs nominales min/max définissent la distance min (plus proche) et max (plus éloignée) par rapport à la Kinect et pas à l'utilisateur.
+
+Les variables de types float acceptent les valeurs de type N.Mf ou N,M. N étant un entier relatif et M étant un entier naturel.
+
+minDistHands:1,0    Distance min de la zone de recherche pour les mains.    Type float.
+minDist:1,0    Distance min de la zone de détection globale de l'utilisateur.    Type float.
+takenPoints:10    Nombre de points pris dans une courbe de recherche. (En développement).    Type entier.
+directionChangeTresholdXY:10    Pixels parcourus avant de segmenter une courbe. (En développement).    Type entier.
+imagesToShow:20    Nombre d'images à afficher dans la mosaïque du Front IDILL. (Autre projet).    Type entier.
+maxDistHands:1,5    Distance max de la zone de recherche pour les mains.    Type float.
+maxDist:3,0    Distance max de la zone de détection globale de l'utilisateur.    Type float.
+zeroPoint:1,9    Distance du point d'interaction maximal.    Type float.
+directionChangeTresholdZ:0,1    Nombre de mètres avant de segmenter une courbe en profondeur. (En développement).    Type float.
+tuioConnexionHost:127.0.0.1    Host du serveur TUIO.    Type string.
+tuioConnexionPort:8080    Port du serveur TUIO.    Type entier.
+tuioTimerElapsing:1000    Temps de latence en ms pour l'affichage et l'envoi des notifications de gesture. TUIO.    Type entier.
+wsConnexionHost:127.0.0.1    Host du serveur WebSocket.    Type string.
+wsConnexionPort:8090    Port du serveur WebSocket.    Type entier.
+wsTimerElapsing:1000    Temps de latence en ms pour l'affichage et l'envoi des notifications de gesture. WebSocket.    Type entier.
+
+readmeBBMMiddleware:..\readme - BBM Middleware.txt    Chemin du readme du Middleware.    Type string.    
+docBBMFrontIDILL:..\tutorial - BBM Front IDILL.html    Chemin de la documentation du Front IDILL.    Type string.
+frontIDILLS:C:\wamp\www\Front IDILL\    Chemin du code du Front IDILL.    Type string.
+frontIDILLExe:http://localhost/Front%20IDILL/    Chemin du Front IDILL.    Type string.
+
+Voici les règles à respecter lors de l'affectation des valeurs des paramètres :
+
+1) maxDistHands doit être supérieur à 0f.
+2) minDistHands doit être supérieur à 0f.
+3) maxDistHands doit être inférieur ou égal à maxDist.
+4) minDistHands doit être inférieur ou égal à maxDist.
+5) minDistHands doit être inférieur à maxDistHands.
+6) zeroPoint doit être supérieur ou égal à maxDistHands.
+7) minDistHands doit être inférieur ou égal à minDist.
+8) zeroPoint doit être inférieur à maxDist.
+9) tuioConnexionPort doit être supérieur ou égal à 0.
+10) wsConnexionPort doit être supérieur ou égal à 0.
+11) tuioTimerElapsing doit être supérieur ou égal à 0.
+12) wsTimerElapsing doit être supérieur ou égal à 0.
+13) imagesToShow doit être supérieur ou égal à 1.
+14) takenPoints doit être supérieur à 0.
+15) directionChangeTresholdXY doit être supérieur ou égal à 0.
+16) directionChangeTresholdZ doit être supérieur ou égal à 0.
+
+D) Menu.
+
+Via le menu en haut de la fenêtre de debug du Middleware, il est possible d'accéder aux readme et documentations du Middleware et du Front IDILL. Le fichier de configuration est également disponible dans ce menu. Une fois un paramètre modifié, il est nécessaire de redémarrer le Middleware pour que les nouveaux paramètres soient pris en compte.
+L'exécutable et le code source du Front sont accessibles dans le menu.
+- Dans le cas où l'on souhaite lancer le Front IDILL, il est nécessaire de placer le dossier Front IDILL présent à la racine de BrowseByMotion dans le répertoire www du dossier wamp (par défaut C:\wamp\www).
+
+IV) Mention(s) importante(s) pour le debug :
+
+Le serveur WebSocket permet de gérer le multi-client.
+
+Paramétrage : Le Middleware était conçu à l'origine pour permettre une modification de la configuration via une fenêtre durant le runtime. Il semblerait que Fleck provoque un comportement innatendu de cette fenêtre. Par conséquent, il est nécessaie de modifier le fichier config.txt à la racine de Middleware si on souhaite modifier les paramètres du Middleware. En cas de problème, le fichier ErrorFile.txt est créé dans ce même dossier.
+
+Si vous expérimentez des difficultés ou souhaitez nous soumettre une requête, veuillez consulter le fichier contact.txt à la racine du projet.
\ No newline at end of file
--- a/readme - Front Processing.txt	Tue Jul 24 11:14:52 2012 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,88 +0,0 @@
-TraKERS (Tracking using Kinect and Extracting Robust Skeletons) est une interface basée sur la détection de gestures / positions du squelette envoyé par le SDK Microsoft (1.5) de Kinect.
-
-Auteur : Alexandre BASTIEN.
-
-I) TraKERS - Eléments requis :
-
-Dans cette partie, il vous faudra installer Processing, disponible ici : http://processing.org/download/
-
-II) TraKERS - Structure :
-
-Dans le Front, se trouvent deux principaux exécutables "Trakers" et "Trakers_gestures", respectivement pour le tracé de courbes via les coordonnées des positions des mains récupérées du Middleware et pour l'affichage des gestes détectés. Il aurait été possible de les rassembler en un programme, mais pour des raisons de clarté lors de l'utilisation, j'ai préféré procéder ainsi.
-
-III) TraKERS - Utilisation :
-
-Si le Middleware est lancé, le programme de Front lancé fait office de client, et récupére les notifications envoyées. Détaillons les deux programmes :
-
-A) Trakers (composé du fichier principal et d'un fichier "TuioFunctions" gérant la réception des messages)
-Comme indiqué plus haut, il reçoit et affiche les coordonnées des mains entrant dans le champ délimité par le Middleware.
-Afin d'indiquer les limites de zone de dessin, un masque noir a été appliqué, et se met à jour.
-Les notifications du client s'affichent en blanc en haut du masque, et indique si une ou deux mains sont détectées.
-Lorsque l'on dessine, une série d'ellipses apparaissent à l'écran, formant des courbes.
-Lorsque deux mains sont détectées, la gauche est rouge et l'autre verte.
-Si une main et une seule est détectée, la courbe sera rouge.
-Si la ou les mains s'approchent et atteignent une certaine proximité, le segment dessiné deviendra bleu à partir de ce moment-là.
-
-B) Trakers_gestures (composé du fichier principal et d'un fichier "TuioFunctions" gérant la réception des messages)
-Le même masque a été appliqué dans ce programme d'affichage de notifications de gestes indiqués par le Middleware.
-Le programme indique simplement dans la partie supérieure du masque s'il détecte ou non une gesture, et s'il en détecte une, donne le code envoyé par le Middleware.
-
-Il existe d'autres exemples au sein de cet installeur, qui seront abordés au sein du tutoriel présent dans le dossier : front_processing/doc.
-
-IV) Fonctionnement :
-
-Les programmes sont découpés en fonctions, afin de rendre leur structure plus cohérente.
-
-Il existe deux fonctions principales sous Processing.
-void setup(), qui permet d'initialiser des variables, la taille de la fenêtre, etc.
-void draw(), qui est raffraichie constamment et sert principalement à dessiner ou faire appel aux fonctions amenées à être appelées toutes les N ms.
-Il est bien entendu possible de dessiner via des fonctions déjà implémentées et prêtes à l'emploi, dont la documentation se trouve ici :
-
-http://processing.org/reference/
-
-Ils reçoivent des messages OSC de la part du Middleware. Ceux-ci sont contenus dans des objets qui sont des TuioCursors (en 3D) pour gérer la position des mains et des TuioStrings (objets personnalisés, ajoutés aux dll client et serveur TUIO).
-
-Dans les programmes, les curseurs 3D sont principalement utilisés pour transmettre les coordonnées X, Y et Z (X et Y étant des pixels, et Z une distance en mètres). Les strings, quant à eux, ne véhiculent que de simples messages textuels.
-
-Ils sont envoyés par des listes présentes dans le client TUIO.
-
-Voici un bout de code expliquant comment obtenir la position des mains :
-
-TuioProcessing tuioClient;
-tuioClient = new TuioProcessing(host, port; //host pourrait être this par défaut et port le numéro du port au format int.
-//On récupère les curseurs.
-Vector tuioCursorList = tuioClient.getTuioCursors();
-//Si aucune main n'est repérée.
-if(tuioCursorList.size() <= 0)
-{
-    //fonction_1();
-}
-//Si une main est repéré
-else if (tuioCursorList.size() == 1)
-{
-    TuioCursor cursor = (TuioCursor)tuioCursorList.elementAt(0);
-    //fonctionAffiche1Main(cursor);
-    //s'il y en a un deuxième, on l'obtient à elementAt(1)
-}
-//Si c'est les 2.
-else if(tuioCursorList.size() == 2)
-{
-    //fonctionAffiche2Mains(tuioCursorList);
-}
-
-Voici à présent comment extraire la position actuelle d'une main, via un tuioCursor :
-
-//On obtient le point actuel du curseur TUIO.
-TuioPoint pt = cursor.getPosition();
-//On affiche les coordonnées dans la fenêtre à la position (100 ; 20).
-text(pt.getX() + " " + pt.getY() + " " + pt.getZ(), 100, 20);
-
-Il est à noter que plusieurs projets existent sous Processing, notamment dans l'affichage de fluides ou de fumée par exemple :
-
-http://processing.org/discourse/yabb/YaBB.cgi?board=Contribution_Simlation;action=display;num=1045166270
-http://bodytag.org/nav.php?u=fluid3/
-http://bodytag.org/fluid3/fluid3.pde
-http://bodytag.org/nav.php?u=smoke2/
-http://bodytag.org/smoke2/smoke2.pde
-
-Si vous expérimentez des difficultés ou souhaitez nous soumettre une requête, veuillez consulter le fichier contact.txt à la racine du projet.
\ No newline at end of file
--- a/readme - Front Web.txt	Tue Jul 24 11:14:52 2012 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,28 +0,0 @@
-TraKERS (Tracking using Kinect and Extracting Robust Skeletons) est une interface basée sur la détection de gestures / positions du squelette envoyé par le SDK Microsoft (1.5) de Kinect.
-
-Auteur : Alexandre BASTIEN.
-
-I) TraKERS - Eléments requis :
-
-Dans cette partie, il vous faudra installer WampServer 2, disponible ici : http://www.wampserver.com/en/ et consulter la documentation pour l'installation du Front JS disponible dans Front JS/doc/.
-
-Il est conseillé de télécharger Google Chrome 20 ou supérieur et de le mettre par défaut pour lancer le Front de démonstration Web.
-
-II) TraKERS - Structure :
-
-Dans le Front, se trouvent deux principaux sites web locaux nommés "pointers" et "gestures", respectivement pour l'affichage de pointeurs via les coordonnées des positions des mains récupérées du Middleware et pour l'affichage des gestes détectés. Il aurait été possible de les rassembler en un programme, mais pour des raisons de clarté lors de l'utilisation, j'ai préféré procéder ainsi.
-
-III) TraKERS - Utilisation :
-
-Si le Middleware est lancé, les sites lancés font office de clients, et récupérent les notifications envoyées. Détaillons les deux sites :
-
-A) Pointers (composé du fichier principal index.html et d'un module de communication gérant la réception des messages).
-Comme indiqué plus haut, il reçoit coordonnées des mains entrant dans le champ délimité par le Middleware.
-Les notifications du client s'affichent en blanc en haut de la fenêtre qui est sur fond noir, et indique si une ou deux mains sont détectées.
-
-B) Gestures (composé du fichier principal index.html et d'un module de communication gérant la réception des messages).
-Le programme indique simplement dans la partie supérieure du masque s'il détecte ou non une gesture, et s'il en détecte une, donne le code envoyé par le Middleware et affiche son image.
-
-Note importante : La norme WebSocket permet le multi-client. Par conséquent, il est possible de lancer ces deux exemples en même temps, à condition que le Middleware soit lançé en premier. Dans tous les cas, en cas de problème de connexion, il suffit de raffraichir la page web (avec F5 par exemple).
-
-Si vous expérimentez des difficultés ou souhaitez nous soumettre une requête, veuillez consulter le fichier contact.txt à la racine du projet.
\ No newline at end of file
--- a/readme - Middleware.txt	Tue Jul 24 11:14:52 2012 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,163 +0,0 @@
-TraKERS (Tracking using Kinect and Extracting Robust Skeletons) est une interface basée sur la détection de gestures / positions du squelette envoyé par le SDK Microsoft (1.5) de Kinect.
-
-Auteur : Alexandre BASTIEN.
-
-I) TraKERS - Eléments requis :
-
-Les spécifications de Microsoft font état des éléments matériels et logiciels requis afin de pouvoir utiliser le SDK :
-
-Besoins matériels :
-    Capteur Kinect.
-    Processeur32-bit (x86) ou 64-bit (x64).
-    Dual-core 2.66-GHz ou plus rapide.
-    Bus USB 2.0 dédié.
-    2 GB RAM.
-Besoins logiciels :
-    Microsoft® Visual Studio® 2010 Express ou une autre édition de Visual Studio 2010 (si vous souhaitez développer).
-    Windows 7.
-    NET Framework 4.0.
-
-Vous les trouverez ici si vous le souhaitez : http://www.microsoft.com/en-us/kinectforwindows/develop/release-notes.aspx
-
-La version 4.0 du Framework est présente dans l'installation de TraKERS.
-Néanmoins, par soucis de taille de l'installeur, il vous sera nécessaire d'installer le SDK 1.5 de Microsoft ici :
-http://www.microsoft.com/en-us/kinectforwindows/develop/developer-downloads.aspx
-
-II) TraKERS - Structure :
-
-TraKERS v3.5 est composé de trois modules, le Middleware (utilisant la Kinect afin de détecter des gestes et de suivre la position des mains et plusieurs Fronts (développés en Processing et en Javascript), permettant de récupérer les messages OSC du Middleware par Client/Server TUIO ainsi que les WebSockets du Middleware par Client/Server WebSocket. Pour plus d'informations sur les Fronts, veuillez consulter la documentation située à la racine sous les noms Front Processing et Front Web.
-
-Afin de permettre au Middleware d'envoyer des messages à un Front sous Processing, un client TUIO a été installé dans le Front et un serveur TUIO dans le Middleware.
-Si on souhaite envoyer des données à une page web, un serveur WebSocket ayant un fonctionnement identique a été intégré.
-
-Le middleware dispose d'une interface de debug permettant de connaître en temps réel la position de l'utilisateur à la Kinect. Ces fonctionnalités seront vues plus avant dans la partie Utilisation.
-
-Les sources des modules sont fournies lors de l'installation, n'hésitez pas à les consulter si besoin est.
-
-III) TraKERS - Utilisation :
-
-Vous pouvez démarrer le Middleware ou bien le Front dans l'ordre que vous voulez.
-Lorsque le Middleware est démarré, la Kinect s'allume et affiche ce qu'elle voit. Le capteur (situé le plus à gauche sur la Kinect) est alors allumé en rouge, signe que vous serez détecté si vous entrez dans son champ.
-Lorsque le bouton ON a été appuyé, il devient un bouton OFF, et permet d'éteindre la Kinect. Il est à noter que le fait de fermer la fenêtre éteint également le capteur de la Kinect, avant de quitter.
-(Plus de détails sur la Kinect : http://fr.wikipedia.org/wiki/Kinect).
-
-Lorsque vous êtes détectés, le squelette de la personne la plus proche s'affiche. Les rectangles sur la droite indiquent la proximité de l'utilisateur par rapport à la Kinect, plus la barre est remplie de bas en haut, plus l'utilisateur est proche du point d'interaction maximal (point dans lequel il suffit de tendre les bras pour que les mains soient dans la zone de recherche).
-
-Il existe une zone de détection des mains, située par défaut entre 1m et 1,5m de la Kinect mais configurable. En dehors de cette zone, les mains sont toujours détectées, mais aucun signal n'est envoyé via le serveur TUIO. Il y a deux rectangles en haut de cette fenêtre, permettant d'indiquer si une main est entrée dans ce champ (main gauche/droite dans le champ se traduit par la coloration du rectangle gauche/droit en bleu, et par l'affichage en pixels des coordonnées de la main (sauf pour la profondeur, qui est en mètres).
-
-Il est possible de paramétrer des éléments du Middleware, comme la délimitation du champ pour les mains, le host et le port pour le serveur et l'intervalle de temps minimum qui sépare deux détections de gestes.
-
-Si des erreurs surviennent durant le fonctionnement du Middleware, ceux-ci seront affichés en bas de la fenêtre. Lorsqu'un geste est détecté, une image est affichée puis disparaît de la fenêtre.
-
-A) Position des mains :
-
-Lorsqu'au moins une main entre dans le champ, ses/leurs coordonnées sont envoyées par le serveur au front.
-
-B) Détection de gestes :
-
-Pour l'instant, plusieurs gestes peuvent être détectés :
-
-    SWIPE - Désigne un mouvement de claque horizontal, partant de la droite vers la gauche avec la main droite (et inversement pour la gauche). Durant le geste, la main ne doit pas descendre sous la hanche ni aller au dessus de la tête. Il lui faut une certaine longueur de parcours et elle ne doit aller que vers la gauche pour la main droite et vers la droite pour la main gauche. Le swipe peut donc être pour l'instant gauche ou droit.
-    Lorsque ce geste est détecté, le bas de la fenêtre se colore en rouge si le swipe est vers la gauche.
-    Lorsque ce geste est détecté, le bas de la fenêtre se colore en violet si le swipe est vers la droite.
-    
-    PUSH/PULL - Mouvement de poussée/traction rectiligne dirigé vers la kinect à partir de l'emplacement actuel de la main effectuant le geste.
-    Lorsque ce geste est détecté, le bas de la fenêtre se colore en blanc s'il s'agit d'un push.
-    Lorsque ce geste est détecté, le bas de la fenêtre se colore en noir s'il s'agit d'un pull.
-    
-    JUMP - Action de sauter vers le haut.
-    
-    FALL - Action de s'accroupir.
-    
-    BEND - Action de se pencher en avant.
-    
-    KNEE-UP - Action de lever le genou.
-    
-C) Paramètres de configuration.
-
-Ceux-ci sont accessibles dans le fichier config.txt situé dans le même dossier que l'exécutable du Middleware nommé MainModule.
-Ils sont actuellement de la forme :
-
-Les valeurs nominales min/max définissent la distance min (plus proche) et max (plus éloignée) par rapport à la Kinect et pas à l'utilisateur.
-
-Les variables de types float acceptent les valeurs de type N.Mf ou N,M. N étant un entier relatif et M étant un entier naturel.
-
-minDistHands:1,0    Distance min de la zone de recherche pour les mains.    Type float.
-minDist:1,0    Distance min de la zone de détection globale de l'utilisateur.    Type float.
-takenPoints:10    Nombre de points pris dans une courbe de recherche. (En développement).    Type entier.
-directionChangeTresholdXY:10    Pixels parcourus avant de segmenter une courbe. (En développement).    Type entier.
-imagesToShow:20    Nombre d'images à afficher dans la mosaïque du Front IDILL. (Autre projet).    Type entier.
-maxDistHands:1,5    Distance max de la zone de recherche pour les mains.    Type float.
-maxDist:3,0    Distance max de la zone de détection globale de l'utilisateur.    Type float.
-zeroPoint:1,9    Distance du point d'interaction maximal.    Type float.
-directionChangeTresholdZ:0,1    Nombre de mètres avant de segmenter une courbe en profondeur. (En développement).    Type float.
-tuioConnexionHost:127.0.0.1    Host du serveur TUIO.    Type string.
-tuioConnexionPort:8080    Port du serveur TUIO.    Type entier.
-tuioTimerElapsing:1000    Temps de latence en ms pour l'affichage et l'envoi des notifications de gesture. TUIO.    Type entier.
-wsConnexionHost:127.0.0.1    Host du serveur WebSocket.    Type string.
-wsConnexionPort:8090    Port du serveur WebSocket.    Type entier.
-wsTimerElapsing:1000    Temps de latence en ms pour l'affichage et l'envoi des notifications de gesture. WebSocket.    Type entier.
-
-readmeMiddleware:..\readme - Middleware.txt    Chemin du readme du Middleware.    Type string.    
-readmeFrontProcessing:..\readme - Front Processing.txt    Chemin du readme du Front Processing. Type string.
-docFrontProcessing:..\tutorial front processing.html    Chemin de la documentation du Front Processing.    Type string.
-readmeFrontJS:..\readme - Front Web.txt    Chemin du readme du Front Web.    Type string.
-docFrontJS:..\tutorial front js et wamp.html    Chemin de la documentation du Front Web.    Type string.
-exPFMPS:..\Front Processing\src\Fluid_fanipulation\Fluid_manipulation.pde    Chemin du code de l'exemple Processing de la manipulation de fluide.    Type string.
-exPFMExe:..\Front Processing\src\Fluid_manipulation\application.windows\Fluid_manipulation.exe    Chemin de l'exemple Processing de la manipulation de fluide.    Type string.
-exPSMPS:..\Front Processing\src\Smoke_manipulation\Smoke_manipulation.pde    Chemin du code de l'exemple Processing de la manipulation de fumée.    Type string.
-exPSMExe:..\Front Processing\src\Smoke_manipulation\application.windows\Smoke_manipulation.exe    Chemin de l'exemple Processing de la manipulation de fumée.
-exPTPS:..\Front Processing\src\Trakers\Trakers.pde    Chemin du code de l'exemple Processing de l'affichage des pointeurs.    Type string.
-exPTExe:..\Front Processing\src\Trakers\application.windows\Trakers.exe    Chemin de l'exemple Processing de l'affichage des pointeurs.    Type string.
-exPTGPS:..\Front Processing\src\Trakers_gestures\Trakers_gestures.pde    Chemin du code de l'exemple Processing de l'affichage des gestures.    Type string.
-exPTGExe:..\Front Processing\src\Trakers_gestures\application.windows\Trakers_gestures.exe    Chemin de l'exemple Processing de l'affichage des gestures.    Type string.
-exPIEHand1DPS:..\Front Processing\src\Interaction_examples\Hands_1D\Hands_1D.pde    Chemin du code de l'exemple Processing de la manipulation 1D de la main.    Type string.
-exPIEHand1DExe:..\Front Processing\src\Interaction_examples\Hands_1D\application.windows\Hands_1D.exe    Chemin de l'exemple Processing de la manipulation 1D de la main.    Type string.
-exPIEHand2DPS:..\Front Processing\src\Interaction_examples\Hands_2D\Hands_2D.pde    Chemin du code de l'exemple Processing de la manipulation 2D de la main.    Type string.
-exPIEHand2DExe:..\Front Processing\src\Interaction_examples\Hands_2D\application.windows\Hands_2D.exe    Chemin de l'exemple Processing de la manipulation 2D de la main.    Type string.
-exPIEHandPressPS:..\Front Processing\src\Interaction_examples\Hand_press\Hand_press.pde    Chemin du code de l'exemple Processing du press de la main.    Type string.
-exPIEHandPressExe:..\Front Processing\src\Interaction_examples\Hand_press\application.windows\Hand_press.exe    Chemin de l'exemple Processing du press de la main.    Type string.
-exPIEHandSignalPS:..\Front Processing\src\Interaction_examples\Hand_signal\Hand_signal.pde    Chemin du code de l'exemple Processing du signal de la main.    Type string.
-exPIEHandSignalExe:..\Front Processing\src\Interaction_examples\Hand_signal\application.windows\Hand_signal.exe    Chemin de l'exemple Processing du signal de la main.    Type string.
-exWPointersPS:C:\wamp\www\Front JS\pointers\    Chemin du code de l'exemple Web de l'affichage des pointeurs.    Type string.
-exWPointersExe:http://localhost/Front%20JS/pointers/    Chemin de l'exemple Web de l'affichage des pointeurs.    Type string.
-exWGesturesPS:C:\wamp\www\Front JS\pointers\    Chemin du code de l'exemple Web de l'affichage des gestures.    Type string.
-exWGesturesExe:http://localhost/Front%20JS/gestures/    Chemin de l'exemple Web de l'affichage des gestures.    Type string.
-
-Voici les règles à respecter lors de l'affectation des valeurs des paramètres :
-
-1) maxDistHands doit être supérieur à 0f.
-2) minDistHands doit être supérieur à 0f.
-3) maxDistHands doit être inférieur ou égal à maxDist.
-4) minDistHands doit être inférieur ou égal à maxDist.
-5) minDistHands doit être inférieur à maxDistHands.
-6) zeroPoint doit être supérieur ou égal à maxDistHands.
-7) minDistHands doit être inférieur ou égal à minDist.
-8) zeroPoint doit être inférieur à maxDist.
-9) tuioConnexionPort doit être supérieur ou égal à 0.
-10) wsConnexionPort doit être supérieur ou égal à 0.
-11) tuioTimerElapsing doit être supérieur ou égal à 0.
-12) wsTimerElapsing doit être supérieur ou égal à 0.
-13) imagesToShow doit être supérieur ou égal à 1.
-14) takenPoints doit être supérieur à 0.
-15) directionChangeTresholdXY doit être supérieur ou égal à 0.
-16) directionChangeTresholdZ doit être supérieur ou égal à 0.
-
-D) Menu.
-
-Via le menu en haut de la fenêtre de debug du Middleware, il est possible d'accéder aux readme et documentations du Middleware, du Front Processing et du Front Web. Le fichier de configuration est également disponible dans ce menu. Une fois un paramètre modifié, il est nécessaire de redémarrer le Middleware pour que les nouveaux paramètres soient pris en compte.
-Les exemples et leurs code source des deux Fronts sont accessibles dans le menu.
-- Dans le cas où l'on souhaite accéder aux sources d'un exemple processing, il est nécessaire d'avoir installé Processing et d'avoir lié le type de fichier .pde avec ce programme.
-- Dans le cas où l'on souhaite lancer les exemples du Front Web, il est nécessaire de placer les exemples présents dans le dossier Front JS dans le répertoire www du dossier wamp (par défaut C:\wamp\www).
-
-IV) Mention(s) importante(s) pour le debug :
-
-Il semblerait que l'implémentation actuelle de TUIO dans ce projet ne gère pas le multi-client.
-Par conséquent, le premier client Processing à se connecter au Middleware est le seul à recevoir des messages.
-
-Par contre, le serveur WebSocket permet de gérer le multi-client.
-Si vous expérimentez des difficultés ou souhaitez me soumettre une requête, voici mon adresse : alexandre.bastien@iri.centrepompidou.fr
-
-Paramétrage : Le Middleware était conçu à l'origine pour permettre une modification de la configuration via une fenêtre durant le runtime. Il semblerait que Fleck provoque un comportement innatendu de cette fenêtre. Par conséquent, il est nécessaie de modifier le fichier config.txt à la racine de Middleware si on souhaite modifier les paramètres du Middleware. En cas de problème, le fichier ErrorFile.txt est créé dans ce même dossier.
-
-Si vous expérimentez des difficultés ou souhaitez nous soumettre une requête, veuillez consulter le fichier contact.txt à la racine du projet.
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/readme - TraKERS Front Processing.txt	Tue Jul 24 16:35:10 2012 +0200
@@ -0,0 +1,88 @@
+TraKERS (Tracking using Kinect and Extracting Robust Skeletons) est une interface basée sur la détection de gestures / positions du squelette envoyé par le SDK Microsoft (1.5) de Kinect.
+
+Auteur : Alexandre BASTIEN.
+
+I) TraKERS - Eléments requis :
+
+Dans cette partie, il vous faudra installer Processing, disponible ici : http://processing.org/download/
+
+II) TraKERS - Structure :
+
+Dans le Front, se trouvent deux principaux exécutables "Trakers" et "Trakers_gestures", respectivement pour le tracé de courbes via les coordonnées des positions des mains récupérées du Middleware et pour l'affichage des gestes détectés. Il aurait été possible de les rassembler en un programme, mais pour des raisons de clarté lors de l'utilisation, j'ai préféré procéder ainsi.
+
+III) TraKERS - Utilisation :
+
+Si le Middleware est lancé, le programme de Front lancé fait office de client, et récupére les notifications envoyées. Détaillons les deux programmes :
+
+A) Trakers (composé du fichier principal et d'un fichier "TuioFunctions" gérant la réception des messages)
+Comme indiqué plus haut, il reçoit et affiche les coordonnées des mains entrant dans le champ délimité par le Middleware.
+Afin d'indiquer les limites de zone de dessin, un masque noir a été appliqué, et se met à jour.
+Les notifications du client s'affichent en blanc en haut du masque, et indique si une ou deux mains sont détectées.
+Lorsque l'on dessine, une série d'ellipses apparaissent à l'écran, formant des courbes.
+Lorsque deux mains sont détectées, la gauche est rouge et l'autre verte.
+Si une main et une seule est détectée, la courbe sera rouge.
+Si la ou les mains s'approchent et atteignent une certaine proximité, le segment dessiné deviendra bleu à partir de ce moment-là.
+
+B) Trakers_gestures (composé du fichier principal et d'un fichier "TuioFunctions" gérant la réception des messages)
+Le même masque a été appliqué dans ce programme d'affichage de notifications de gestes indiqués par le Middleware.
+Le programme indique simplement dans la partie supérieure du masque s'il détecte ou non une gesture, et s'il en détecte une, donne le code envoyé par le Middleware.
+
+Il existe d'autres exemples au sein de cet installeur, qui seront abordés au sein du tutoriel présent dans le dossier : front_processing/doc.
+
+IV) Fonctionnement :
+
+Les programmes sont découpés en fonctions, afin de rendre leur structure plus cohérente.
+
+Il existe deux fonctions principales sous Processing.
+void setup(), qui permet d'initialiser des variables, la taille de la fenêtre, etc.
+void draw(), qui est raffraichie constamment et sert principalement à dessiner ou faire appel aux fonctions amenées à être appelées toutes les N ms.
+Il est bien entendu possible de dessiner via des fonctions déjà implémentées et prêtes à l'emploi, dont la documentation se trouve ici :
+
+http://processing.org/reference/
+
+Ils reçoivent des messages OSC de la part du Middleware. Ceux-ci sont contenus dans des objets qui sont des TuioCursors (en 3D) pour gérer la position des mains et des TuioStrings (objets personnalisés, ajoutés aux dll client et serveur TUIO).
+
+Dans les programmes, les curseurs 3D sont principalement utilisés pour transmettre les coordonnées X, Y et Z (X et Y étant des pixels, et Z une distance en mètres). Les strings, quant à eux, ne véhiculent que de simples messages textuels.
+
+Ils sont envoyés par des listes présentes dans le client TUIO.
+
+Voici un bout de code expliquant comment obtenir la position des mains :
+
+TuioProcessing tuioClient;
+tuioClient = new TuioProcessing(host, port; //host pourrait être this par défaut et port le numéro du port au format int.
+//On récupère les curseurs.
+Vector tuioCursorList = tuioClient.getTuioCursors();
+//Si aucune main n'est repérée.
+if(tuioCursorList.size() <= 0)
+{
+    //fonction_1();
+}
+//Si une main est repéré
+else if (tuioCursorList.size() == 1)
+{
+    TuioCursor cursor = (TuioCursor)tuioCursorList.elementAt(0);
+    //fonctionAffiche1Main(cursor);
+    //s'il y en a un deuxième, on l'obtient à elementAt(1)
+}
+//Si c'est les 2.
+else if(tuioCursorList.size() == 2)
+{
+    //fonctionAffiche2Mains(tuioCursorList);
+}
+
+Voici à présent comment extraire la position actuelle d'une main, via un tuioCursor :
+
+//On obtient le point actuel du curseur TUIO.
+TuioPoint pt = cursor.getPosition();
+//On affiche les coordonnées dans la fenêtre à la position (100 ; 20).
+text(pt.getX() + " " + pt.getY() + " " + pt.getZ(), 100, 20);
+
+Il est à noter que plusieurs projets existent sous Processing, notamment dans l'affichage de fluides ou de fumée par exemple :
+
+http://processing.org/discourse/yabb/YaBB.cgi?board=Contribution_Simlation;action=display;num=1045166270
+http://bodytag.org/nav.php?u=fluid3/
+http://bodytag.org/fluid3/fluid3.pde
+http://bodytag.org/nav.php?u=smoke2/
+http://bodytag.org/smoke2/smoke2.pde
+
+Si vous expérimentez des difficultés ou souhaitez nous soumettre une requête, veuillez consulter le fichier contact.txt à la racine du projet.
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/readme - TraKERS Front Web.txt	Tue Jul 24 16:35:10 2012 +0200
@@ -0,0 +1,28 @@
+TraKERS (Tracking using Kinect and Extracting Robust Skeletons) est une interface basée sur la détection de gestures / positions du squelette envoyé par le SDK Microsoft (1.5) de Kinect.
+
+Auteur : Alexandre BASTIEN.
+
+I) TraKERS - Eléments requis :
+
+Dans cette partie, il vous faudra installer WampServer 2, disponible ici : http://www.wampserver.com/en/ et consulter la documentation pour l'installation du Front JS disponible dans Front JS/doc/.
+
+Il est conseillé de télécharger Google Chrome 20 ou supérieur et de le mettre par défaut pour lancer le Front de démonstration Web.
+
+II) TraKERS - Structure :
+
+Dans le Front, se trouvent deux principaux sites web locaux nommés "pointers" et "gestures", respectivement pour l'affichage de pointeurs via les coordonnées des positions des mains récupérées du Middleware et pour l'affichage des gestes détectés. Il aurait été possible de les rassembler en un programme, mais pour des raisons de clarté lors de l'utilisation, j'ai préféré procéder ainsi.
+
+III) TraKERS - Utilisation :
+
+Si le Middleware est lancé, les sites lancés font office de clients, et récupérent les notifications envoyées. Détaillons les deux sites :
+
+A) Pointers (composé du fichier principal index.html et d'un module de communication gérant la réception des messages).
+Comme indiqué plus haut, il reçoit coordonnées des mains entrant dans le champ délimité par le Middleware.
+Les notifications du client s'affichent en blanc en haut de la fenêtre qui est sur fond noir, et indique si une ou deux mains sont détectées.
+
+B) Gestures (composé du fichier principal index.html et d'un module de communication gérant la réception des messages).
+Le programme indique simplement dans la partie supérieure du masque s'il détecte ou non une gesture, et s'il en détecte une, donne le code envoyé par le Middleware et affiche son image.
+
+Note importante : La norme WebSocket permet le multi-client. Par conséquent, il est possible de lancer ces deux exemples en même temps, à condition que le Middleware soit lançé en premier. Dans tous les cas, en cas de problème de connexion, il suffit de raffraichir la page web (avec F5 par exemple).
+
+Si vous expérimentez des difficultés ou souhaitez nous soumettre une requête, veuillez consulter le fichier contact.txt à la racine du projet.
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/readme - TraKERS Middleware.txt	Tue Jul 24 16:35:10 2012 +0200
@@ -0,0 +1,162 @@
+TraKERS (Tracking using Kinect and Extracting Robust Skeletons) est une interface basée sur la détection de gestures / positions du squelette envoyé par le SDK Microsoft (1.5) de Kinect.
+
+Auteur : Alexandre BASTIEN.
+
+I) TraKERS - Eléments requis :
+
+Les spécifications de Microsoft font état des éléments matériels et logiciels requis afin de pouvoir utiliser le SDK :
+
+Besoins matériels :
+    Capteur Kinect.
+    Processeur32-bit (x86) ou 64-bit (x64).
+    Dual-core 2.66-GHz ou plus rapide.
+    Bus USB 2.0 dédié.
+    2 GB RAM.
+Besoins logiciels :
+    Microsoft® Visual Studio® 2010 Express ou une autre édition de Visual Studio 2010 (si vous souhaitez développer).
+    Windows 7.
+    NET Framework 4.0.
+
+Vous les trouverez ici si vous le souhaitez : http://www.microsoft.com/en-us/kinectforwindows/develop/release-notes.aspx
+
+La version 4.0 du Framework est présente dans l'installation de TraKERS.
+Néanmoins, par soucis de taille de l'installeur, il vous sera nécessaire d'installer le SDK 1.5 de Microsoft ici :
+http://www.microsoft.com/en-us/kinectforwindows/develop/developer-downloads.aspx
+
+II) TraKERS - Structure :
+
+TraKERS v3.5 est composé de trois modules, le Middleware (utilisant la Kinect afin de détecter des gestes et de suivre la position des mains et plusieurs Fronts (développés en Processing et en Javascript), permettant de récupérer les messages OSC du Middleware par Client/Server TUIO ainsi que les WebSockets du Middleware par Client/Server WebSocket. Pour plus d'informations sur les Fronts, veuillez consulter la documentation située à la racine sous les noms Front Processing et Front Web.
+
+Afin de permettre au Middleware d'envoyer des messages à un Front sous Processing, un client TUIO a été installé dans le Front et un serveur TUIO dans le Middleware.
+Si on souhaite envoyer des données à une page web, un serveur WebSocket ayant un fonctionnement identique a été intégré.
+
+Le middleware dispose d'une interface de debug permettant de connaître en temps réel la position de l'utilisateur à la Kinect. Ces fonctionnalités seront vues plus avant dans la partie Utilisation.
+
+Les sources des modules sont fournies lors de l'installation, n'hésitez pas à les consulter si besoin est.
+
+III) TraKERS - Utilisation :
+
+Vous pouvez démarrer le Middleware ou bien le Front dans l'ordre que vous voulez.
+Lorsque le Middleware est démarré, la Kinect s'allume et affiche ce qu'elle voit. Le capteur (situé le plus à gauche sur la Kinect) est alors allumé en rouge, signe que vous serez détecté si vous entrez dans son champ.
+Lorsque le bouton ON a été appuyé, il devient un bouton OFF, et permet d'éteindre la Kinect. Il est à noter que le fait de fermer la fenêtre éteint également le capteur de la Kinect, avant de quitter.
+(Plus de détails sur la Kinect : http://fr.wikipedia.org/wiki/Kinect).
+
+Lorsque vous êtes détectés, le squelette de la personne la plus proche s'affiche. Les rectangles sur la droite indiquent la proximité de l'utilisateur par rapport à la Kinect, plus la barre est remplie de bas en haut, plus l'utilisateur est proche du point d'interaction maximal (point dans lequel il suffit de tendre les bras pour que les mains soient dans la zone de recherche).
+
+Il existe une zone de détection des mains, située par défaut entre 1m et 1,5m de la Kinect mais configurable. En dehors de cette zone, les mains sont toujours détectées, mais aucun signal n'est envoyé via le serveur TUIO. Il y a deux rectangles en haut de cette fenêtre, permettant d'indiquer si une main est entrée dans ce champ (main gauche/droite dans le champ se traduit par la coloration du rectangle gauche/droit en bleu, et par l'affichage en pixels des coordonnées de la main (sauf pour la profondeur, qui est en mètres).
+
+Il est possible de paramétrer des éléments du Middleware, comme la délimitation du champ pour les mains, le host et le port pour le serveur et l'intervalle de temps minimum qui sépare deux détections de gestes.
+
+Si des erreurs surviennent durant le fonctionnement du Middleware, ceux-ci seront affichés en bas de la fenêtre. Lorsqu'un geste est détecté, une image est affichée puis disparaît de la fenêtre.
+
+A) Position des mains :
+
+Lorsqu'au moins une main entre dans le champ, ses/leurs coordonnées sont envoyées par le serveur au front.
+
+B) Détection de gestes :
+
+Pour l'instant, plusieurs gestes peuvent être détectés :
+
+    SWIPE - Désigne un mouvement de claque horizontal, partant de la droite vers la gauche avec la main droite (et inversement pour la gauche). Durant le geste, la main ne doit pas descendre sous la hanche ni aller au dessus de la tête. Il lui faut une certaine longueur de parcours et elle ne doit aller que vers la gauche pour la main droite et vers la droite pour la main gauche. Le swipe peut donc être pour l'instant gauche ou droit.
+    Lorsque ce geste est détecté, le bas de la fenêtre se colore en rouge si le swipe est vers la gauche.
+    Lorsque ce geste est détecté, le bas de la fenêtre se colore en violet si le swipe est vers la droite.
+    
+    PUSH/PULL - Mouvement de poussée/traction rectiligne dirigé vers la kinect à partir de l'emplacement actuel de la main effectuant le geste.
+    Lorsque ce geste est détecté, le bas de la fenêtre se colore en blanc s'il s'agit d'un push.
+    Lorsque ce geste est détecté, le bas de la fenêtre se colore en noir s'il s'agit d'un pull.
+    
+    JUMP - Action de sauter vers le haut.
+    
+    FALL - Action de s'accroupir.
+    
+    BEND - Action de se pencher en avant.
+    
+    KNEE-UP - Action de lever le genou.
+    
+C) Paramètres de configuration.
+
+Ceux-ci sont accessibles dans le fichier config.txt situé dans le même dossier que l'exécutable du Middleware nommé MainModule.
+Ils sont actuellement de la forme :
+
+Les valeurs nominales min/max définissent la distance min (plus proche) et max (plus éloignée) par rapport à la Kinect et pas à l'utilisateur.
+
+Les variables de types float acceptent les valeurs de type N.Mf ou N,M. N étant un entier relatif et M étant un entier naturel.
+
+minDistHands:1,0    Distance min de la zone de recherche pour les mains.    Type float.
+minDist:1,0    Distance min de la zone de détection globale de l'utilisateur.    Type float.
+takenPoints:10    Nombre de points pris dans une courbe de recherche. (En développement).    Type entier.
+directionChangeTresholdXY:10    Pixels parcourus avant de segmenter une courbe. (En développement).    Type entier.
+imagesToShow:20    Nombre d'images à afficher dans la mosaïque du Front IDILL. (Autre projet).    Type entier.
+maxDistHands:1,5    Distance max de la zone de recherche pour les mains.    Type float.
+maxDist:3,0    Distance max de la zone de détection globale de l'utilisateur.    Type float.
+zeroPoint:1,9    Distance du point d'interaction maximal.    Type float.
+directionChangeTresholdZ:0,1    Nombre de mètres avant de segmenter une courbe en profondeur. (En développement).    Type float.
+tuioConnexionHost:127.0.0.1    Host du serveur TUIO.    Type string.
+tuioConnexionPort:8080    Port du serveur TUIO.    Type entier.
+tuioTimerElapsing:1000    Temps de latence en ms pour l'affichage et l'envoi des notifications de gesture. TUIO.    Type entier.
+wsConnexionHost:127.0.0.1    Host du serveur WebSocket.    Type string.
+wsConnexionPort:8090    Port du serveur WebSocket.    Type entier.
+wsTimerElapsing:1000    Temps de latence en ms pour l'affichage et l'envoi des notifications de gesture. WebSocket.    Type entier.
+
+readmeMiddleware:..\readme - Middleware.txt    Chemin du readme du Middleware.    Type string.    
+readmeFrontProcessing:..\readme - Front Processing.txt    Chemin du readme du Front Processing. Type string.
+docFrontProcessing:..\tutorial front processing.html    Chemin de la documentation du Front Processing.    Type string.
+readmeFrontJS:..\readme - Front Web.txt    Chemin du readme du Front Web.    Type string.
+docFrontJS:..\tutorial front js et wamp.html    Chemin de la documentation du Front Web.    Type string.
+exPFMPS:..\Front Processing\src\Fluid_fanipulation\Fluid_manipulation.pde    Chemin du code de l'exemple Processing de la manipulation de fluide.    Type string.
+exPFMExe:..\Front Processing\src\Fluid_manipulation\application.windows\Fluid_manipulation.exe    Chemin de l'exemple Processing de la manipulation de fluide.    Type string.
+exPSMPS:..\Front Processing\src\Smoke_manipulation\Smoke_manipulation.pde    Chemin du code de l'exemple Processing de la manipulation de fumée.    Type string.
+exPSMExe:..\Front Processing\src\Smoke_manipulation\application.windows\Smoke_manipulation.exe    Chemin de l'exemple Processing de la manipulation de fumée.
+exPTPS:..\Front Processing\src\Trakers\Trakers.pde    Chemin du code de l'exemple Processing de l'affichage des pointeurs.    Type string.
+exPTExe:..\Front Processing\src\Trakers\application.windows\Trakers.exe    Chemin de l'exemple Processing de l'affichage des pointeurs.    Type string.
+exPTGPS:..\Front Processing\src\Trakers_gestures\Trakers_gestures.pde    Chemin du code de l'exemple Processing de l'affichage des gestures.    Type string.
+exPTGExe:..\Front Processing\src\Trakers_gestures\application.windows\Trakers_gestures.exe    Chemin de l'exemple Processing de l'affichage des gestures.    Type string.
+exPIEHand1DPS:..\Front Processing\src\Interaction_examples\Hands_1D\Hands_1D.pde    Chemin du code de l'exemple Processing de la manipulation 1D de la main.    Type string.
+exPIEHand1DExe:..\Front Processing\src\Interaction_examples\Hands_1D\application.windows\Hands_1D.exe    Chemin de l'exemple Processing de la manipulation 1D de la main.    Type string.
+exPIEHand2DPS:..\Front Processing\src\Interaction_examples\Hands_2D\Hands_2D.pde    Chemin du code de l'exemple Processing de la manipulation 2D de la main.    Type string.
+exPIEHand2DExe:..\Front Processing\src\Interaction_examples\Hands_2D\application.windows\Hands_2D.exe    Chemin de l'exemple Processing de la manipulation 2D de la main.    Type string.
+exPIEHandPressPS:..\Front Processing\src\Interaction_examples\Hand_press\Hand_press.pde    Chemin du code de l'exemple Processing du press de la main.    Type string.
+exPIEHandPressExe:..\Front Processing\src\Interaction_examples\Hand_press\application.windows\Hand_press.exe    Chemin de l'exemple Processing du press de la main.    Type string.
+exPIEHandSignalPS:..\Front Processing\src\Interaction_examples\Hand_signal\Hand_signal.pde    Chemin du code de l'exemple Processing du signal de la main.    Type string.
+exPIEHandSignalExe:..\Front Processing\src\Interaction_examples\Hand_signal\application.windows\Hand_signal.exe    Chemin de l'exemple Processing du signal de la main.    Type string.
+exWPointersPS:C:\wamp\www\Front JS\pointers\    Chemin du code de l'exemple Web de l'affichage des pointeurs.    Type string.
+exWPointersExe:http://localhost/Front%20JS/pointers/    Chemin de l'exemple Web de l'affichage des pointeurs.    Type string.
+exWGesturesPS:C:\wamp\www\Front JS\pointers\    Chemin du code de l'exemple Web de l'affichage des gestures.    Type string.
+exWGesturesExe:http://localhost/Front%20JS/gestures/    Chemin de l'exemple Web de l'affichage des gestures.    Type string.
+
+Voici les règles à respecter lors de l'affectation des valeurs des paramètres :
+
+1) maxDistHands doit être supérieur à 0f.
+2) minDistHands doit être supérieur à 0f.
+3) maxDistHands doit être inférieur ou égal à maxDist.
+4) minDistHands doit être inférieur ou égal à maxDist.
+5) minDistHands doit être inférieur à maxDistHands.
+6) zeroPoint doit être supérieur ou égal à maxDistHands.
+7) minDistHands doit être inférieur ou égal à minDist.
+8) zeroPoint doit être inférieur à maxDist.
+9) tuioConnexionPort doit être supérieur ou égal à 0.
+10) wsConnexionPort doit être supérieur ou égal à 0.
+11) tuioTimerElapsing doit être supérieur ou égal à 0.
+12) wsTimerElapsing doit être supérieur ou égal à 0.
+13) imagesToShow doit être supérieur ou égal à 1.
+14) takenPoints doit être supérieur à 0.
+15) directionChangeTresholdXY doit être supérieur ou égal à 0.
+16) directionChangeTresholdZ doit être supérieur ou égal à 0.
+
+D) Menu.
+
+Via le menu en haut de la fenêtre de debug du Middleware, il est possible d'accéder aux readme et documentations du Middleware, du Front Processing et du Front Web. Le fichier de configuration est également disponible dans ce menu. Une fois un paramètre modifié, il est nécessaire de redémarrer le Middleware pour que les nouveaux paramètres soient pris en compte.
+Les exemples et leurs code source des deux Fronts sont accessibles dans le menu.
+- Dans le cas où l'on souhaite accéder aux sources d'un exemple processing, il est nécessaire d'avoir installé Processing et d'avoir lié le type de fichier .pde avec ce programme.
+- Dans le cas où l'on souhaite lancer les exemples du Front Web, il est nécessaire de placer les exemples présents dans le dossier Front JS dans le répertoire www du dossier wamp (par défaut C:\wamp\www).
+
+IV) Mention(s) importante(s) pour le debug :
+
+Il semblerait que l'implémentation actuelle de TUIO dans ce projet ne gère pas le multi-client.
+Par conséquent, le premier client Processing à se connecter au Middleware est le seul à recevoir des messages.
+
+Par contre, le serveur WebSocket permet de gérer le multi-client.
+
+Paramétrage : Le Middleware était conçu à l'origine pour permettre une modification de la configuration via une fenêtre durant le runtime. Il semblerait que Fleck provoque un comportement innatendu de cette fenêtre. Par conséquent, il est nécessaie de modifier le fichier config.txt à la racine de Middleware si on souhaite modifier les paramètres du Middleware. En cas de problème, le fichier ErrorFile.txt est créé dans ce même dossier.
+
+Si vous expérimentez des difficultés ou souhaitez nous soumettre une requête, veuillez consulter le fichier contact.txt à la racine du projet.
\ No newline at end of file