middleware/src/Tracking/KinectMain.cs
changeset 11 a1bf0d21022e
parent 8 e4e7db2435f8
child 13 50de8e8f44d7
--- a/middleware/src/Tracking/KinectMain.cs	Fri Mar 23 16:24:36 2012 +0100
+++ b/middleware/src/Tracking/KinectMain.cs	Mon Mar 26 16:22:51 2012 +0200
@@ -67,6 +67,8 @@
     public delegate void JumpHandler(object o, JumpEventArgs e);
     //Il s'agit de la fonction permettant d'appeler les fonctions des événements de proximité.
     public delegate void UserPositionHandler(object o, UserPositionEventArgs e);
+    //Il s'agit de la fonctoin permettant de notifier le serveur en cas de changement de mode.
+    public delegate void ModChangeHandler(object o, ModChangeEventArgs e);
 
     public class KinectMain
     {
@@ -94,6 +96,7 @@
         private float minDist;
         private float maxDist;
         private float zeroPoint;
+        private int imagesToShow;
 
         //Temps de rafraichissement pour le timer (Détection de gesture dans le serveur TUIO).
         private int timerElapsing;
@@ -114,6 +117,8 @@
         public static event JumpHandler JumpEvent;
         //L'événement l'utilisateur se déplace dans la zone de détection.
         public static event UserPositionHandler UserPositionEvent;
+        //L'événement on change de mode.
+        public static event ModChangeHandler ModChangeEvent;
 
         private string connexionHost;
         private int connexionPort;
@@ -142,6 +147,7 @@
                 connexionHost = "127.0.0.1";
                 connexionPort = 80;
                 timerElapsing = 1000;
+                imagesToShow = 25;
             }
 
             //On crée la fenêtre de debug.
@@ -239,6 +245,10 @@
             UserPositionListener userPositionListener = new UserPositionListener();
             UserPositionEvent += new UserPositionHandler(userPositionListener.ShowOnScreen);
 
+            //Fonction appelée lorsqu'on change de mode.
+            ModChangeListener modChangeListener = new ModChangeListener();
+            ModChangeEvent += new ModChangeHandler(modChangeListener.ShowOnScreen);
+
             //On connecte le serveur à l'adresse locale sur le port 80.
             server = new Server(connexionHost, connexionPort, timerElapsing, debug);
         }
@@ -447,15 +457,15 @@
                 if (first.TrackingState == SkeletonTrackingState.Tracked)
                 {
                     float proximity = userPositionDetector.CalcProximity(first.Position.Z);
+                    int numberOfImages = userPositionDetector.ImagesToShow(proximity, imagesToShow);
 
                     if (proximity > 0f)
                     {
-                        UserPositionEventArgs userPositionEvent = new UserPositionEventArgs(debug, server, proximity);
+                        UserPositionEventArgs userPositionEvent = new UserPositionEventArgs(debug, server, proximity, numberOfImages);
                         OnUserPositionEvent(userPositionEvent);
                     }
                     else
                     {
-                        Console.Out.WriteLine("FAIL");
                         debug.hideSkeleton();
                     }
                 }
@@ -550,6 +560,15 @@
         }
 
         /*
+        *  Initialise l'événement et fait appel aux fonctions du listener quand on change de mode.
+        */
+        public static void OnModChangeEvent(ModChangeEventArgs e)
+        {
+            if (ModChangeEvent != null)
+                ModChangeEvent(new object(), e);
+        }
+
+        /*
         *  Méthode de chargement des paramètres (position du champ de recherche...).
         */
         public bool loadParameters()
@@ -564,6 +583,7 @@
                 connexionHost = ConfigurationManager.AppSettings["connexionHost"];
                 connexionPort = int.Parse(ConfigurationManager.AppSettings["connexionPort"]);
                 timerElapsing = int.Parse(ConfigurationManager.AppSettings["timerElapsing"]);
+                imagesToShow = int.Parse(ConfigurationManager.AppSettings["imagesToShow"]);
             }
             catch (Exception)
             {
@@ -572,7 +592,7 @@
 
             if (maxDistHands <= 0f || minDistHands <= 0f || maxDistHands > maxDist || minDistHands > maxDist ||
                 minDistHands >= maxDistHands || zeroPoint < maxDistHands || minDistHands < minDist ||
-                zeroPoint >= maxDist || connexionPort < 0 || timerElapsing < 0)
+                zeroPoint >= maxDist || connexionPort < 0 || timerElapsing < 0 || imagesToShow < 1)
             {
                 debug.ExceptionLbl.Content = rm.GetString("loadParametersIncorrect");
                 return false;
@@ -606,6 +626,8 @@
             config.AppSettings.Settings.Add("connexionPort", connexionPort.ToString());
             config.AppSettings.Settings.Remove("timerElapsing");
             config.AppSettings.Settings.Add("timerElapsing", timerElapsing.ToString());
+            config.AppSettings.Settings.Remove("imagesToShow");
+            config.AppSettings.Settings.Add("imagesToShow", imagesToShow.ToString());
 
             //Sauvegarde la configuration.
             config.Save(ConfigurationSaveMode.Modified);
@@ -623,6 +645,18 @@
         {
             maxDistHands = max;
         }
+        public void setMinDist(float min)
+        {
+            minDist = min;
+        }
+        public void setMaxDist(float max)
+        {
+            maxDist = max;
+        }
+        public void setZeroPoint(float zero)
+        {
+            zeroPoint = zero;
+        }
         public void setConnexionHost(String host)
         {
             connexionHost = host;
@@ -635,6 +669,10 @@
         {
             timerElapsing = time;
         }
+        public void setImagesToShow(int _imagesToShow)
+        {
+            imagesToShow = _imagesToShow;
+        }
 
         public float getMinDistHands()
         {
@@ -644,6 +682,18 @@
         {
             return maxDistHands;
         }
+        public float getMinDist()
+        {
+            return minDist;
+        }
+        public float getMaxDist()
+        {
+            return maxDist;
+        }
+        public float getZeroPoint()
+        {
+            return zeroPoint;
+        }
         public String getConnexionHost()
         {
             return connexionHost;
@@ -656,5 +706,9 @@
         {
             return timerElapsing;
         }
+        public int getImagesToShow()
+        {
+            return imagesToShow;
+        }
     }
 }