diff -r a9ebacd6c089 -r fda26bfcabef middleware/src/MainModule/KinectMain.cs --- a/middleware/src/MainModule/KinectMain.cs Wed Apr 04 10:51:21 2012 +0200 +++ b/middleware/src/MainModule/KinectMain.cs Thu Apr 05 15:54:44 2012 +0200 @@ -30,10 +30,11 @@ using Microsoft.Kinect; using Trakers.Communication; using Trakers.MainModule.Events; -using Trakers.MainModule.Gestures; -using Trakers.MainModule.Search; +using Trakers.Tracking.Search; using Trakers.Debug; using System.Windows; +using Trakers.Tracking.Gestures; +using Trakers.Tracking.Postures; namespace Trakers.MainModule { @@ -42,12 +43,24 @@ public delegate void RightHandTrackedHandler(object o, RightHandTrackedEventArgs e); public delegate void LeftHandQuitHandler(object o, LeftHandQuitEventArgs e); public delegate void RightHandQuitHandler(object o, RightHandQuitEventArgs e); + + //Il s'agit de la fonction permettant d'appeler les fonctions des événements Bend. + public delegate void BendHandler(object o, BendEventArgs e); + //Il s'agit de la fonction permettant d'appeler les fonctions des événements Cross. + public delegate void CrossHandler(object o, CrossEventArgs e); + //Il s'agit de la fonction permettant d'appeler les fonctions des événements KneeUp. + public delegate void KneeUpHandler(object o, KneeUpEventArgs e); + //Il s'agit de la fonction permettant d'appeler les fonctions des événements Swipe left/right/up/down. public delegate void SwipeHandler(object o, SwipeEventArgs e); //Il s'agit de la fonction permettant d'appeler les fonctions des événements Push/Pull. public delegate void PushHandler(object o, PushEventArgs e); //Il s'agit de la fonction permettant d'appeler les fonctions des événements Jump. public delegate void JumpHandler(object o, JumpEventArgs e); + //Il s'agit de la fonction permettant d'appeler les fonctions des événements Wave. + public delegate void WaveHandler(object o, WaveEventArgs e); + //Il s'agit de la fonction permettant d'appeler les fonctions des événements Circle. + public delegate void CircleHandler(object o, CircleEventArgs 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); @@ -55,19 +68,28 @@ { //Fenêtre de debug. private DebugWindow debug; - //Fenêtre de paramètres. - private DebugParameters parameters; //Squelettes (Il y en a 6 par défaut). private Skeleton[] skeletons; //Caméra infrarouge (sensor) de la Kinect. private KinectSensor kinectSensor; + //Détecteur de penchés. + private BendDetector bendDetector; + //Détecteur de croisement de bras en X. + private CrossDetector crossDetector; + //Détecteur de levé de genou. + private KneeUpDetector kneeUpDetector; + //Détecteur de swipes. private SwipeDetector swipeDetector; //Détecteur de pushes. private PushDetector pushDetector; //Détecteur de jumps. private JumpDetector jumpDetector; + //Détecteur de waves. + private WaveDetector waveDetector; + //Détecteur de cercles. + private CircleDetector circleDetector; //Détecteur de proximité. private UserPositionDetector userPositionDetector; @@ -82,12 +104,24 @@ public static event RightHandTrackedHandler RightHandTrackedEvent; public static event LeftHandQuitHandler LeftHandQuitEvent; public static event RightHandQuitHandler RightHandQuitEvent; + + //L'événement bend. + public static event BendHandler BendEvent; + //L'événement cross. + public static event CrossHandler CrossEvent; + //L'événement kneeUp. + public static event KneeUpHandler KneeUpEvent; + //L'événement swipe. public static event SwipeHandler SwipeEvent; //L'événement push. public static event PushHandler PushEvent; //L'événement jump. public static event JumpHandler JumpEvent; + //L'événement wave. + public static event WaveHandler WaveEvent; + //L'événement circle. + public static event CircleHandler CircleEvent; //L'événement l'utilisateur se déplace dans la zone de détection. public static event UserPositionHandler UserPositionEvent; @@ -101,10 +135,17 @@ //On crée la fenêtre de debug. debug = new DebugWindow(); + //On crée les détecteurs de postures. + bendDetector = new BendDetector(debug); + crossDetector = new CrossDetector(debug); + kneeUpDetector = new KneeUpDetector(debug); + //On crée les détecteurs de gestes. - swipeDetector = new SwipeDetector(); - pushDetector = new PushDetector(); - jumpDetector = new JumpDetector(); + swipeDetector = new SwipeDetector(debug); + pushDetector = new PushDetector(debug); + jumpDetector = new JumpDetector(debug); + waveDetector = new WaveDetector(debug); + circleDetector = new CircleDetector(debug); //On crée le détecteur de proximité. userPositionDetector = new UserPositionDetector(debug.getMinDist(), debug.getMaxDist(), debug.getZeroPoint(), debug.getMinDistHands(), debug.getMaxDistHands()); @@ -199,6 +240,18 @@ RightHandQuitListener rightHandQuitListener = new RightHandQuitListener(); RightHandQuitEvent += new RightHandQuitHandler(rightHandQuitListener.showAndSend); + //Fonction appelée lorsque l'utilisateur se penche. + BendListener bendListener = new BendListener(); + BendEvent += new BendHandler(bendListener.showAndSend); + + //Fonction appelée lorsque l'utilisateur croise les bras en X. + CrossListener crossListener = new CrossListener(); + CrossEvent += new CrossHandler(crossListener.showAndSend); + + //Fonction appelée lorsque l'utilisateur lève le genou. + KneeUpListener kneeUpListener = new KneeUpListener(); + KneeUpEvent += new KneeUpHandler(kneeUpListener.showAndSend); + //Fonction appelée lorsque l'utilisateur effectue un Swipe right/left/up/down. SwipeListener swipeListener = new SwipeListener(); SwipeEvent += new SwipeHandler(swipeListener.showAndSend); @@ -211,6 +264,14 @@ JumpListener jumpListener = new JumpListener(); JumpEvent += new JumpHandler(jumpListener.showAndSend); + //Fonction appelée lorsque l'utilisateur effectue un Wave. + WaveListener waveListener = new WaveListener(); + WaveEvent += new WaveHandler(waveListener.showAndSend); + + //Fonction appelée lorsque l'utilisateur effectue un Circle. + CircleListener circleListener = new CircleListener(); + CircleEvent += new CircleHandler(circleListener.showAndSend); + //Fonction appelée lorsque l'utilisateur se déplace dans la zone de détection. UserPositionListener userPositionListener = new UserPositionListener(); UserPositionEvent += new UserPositionHandler(userPositionListener.showAndSend); @@ -402,12 +463,18 @@ joints.Insert((int)JointType.AnkleRight, ankleRight); joints.Insert((int)JointType.FootRight, footRight); GestureDetector.UpdateSkeletonHistory(joints); + PostureDetector.UpdateSkeletonState(joints); //Si la main gauche est dans le champ, on lance l'événement approprié. if (handLeft.Position.Z < debug.getMaxDistHands() && handLeft.Position.Z > debug.getMinDistHands()) { LeftHandTrackedEventArgs leftHandTrackedEvent = new LeftHandTrackedEventArgs(server, debug, handLeft, handLeft.Position.Z); OnLeftHandTrackedEvent(leftHandTrackedEvent); + /*if (circleDetector.CheckForLeftCircle()) + { + CircleEventArgs circleEvent = new CircleEventArgs(server, debug); + OnCircleEvent(circleEvent); + }*/ } //Si la main gauche quitte le champ, on lance l'événement approprié. else @@ -420,6 +487,12 @@ { RightHandTrackedEventArgs rightHandTrackedEvent = new RightHandTrackedEventArgs(server, debug, handRight, handRight.Position.Z); OnRightHandTrackedEvent(rightHandTrackedEvent); + /*if (circleDetector.CheckForRightCircle()) + { + CircleEventArgs circleEvent = new CircleEventArgs(server, debug); + OnCircleEvent(circleEvent); + //Console.Out.WriteLine("CIRCLE"); + }*/ } //Si la main droite quitte le champ, on lance l'événement approprié. else @@ -428,6 +501,27 @@ OnRightHandQuitEvent(rightHandQuitEvent); } + //Si l'utilisateur s'est penché. + if (bendDetector.CheckForBend()) + { + BendEventArgs bendEvent = new BendEventArgs(server, debug); + OnBendEvent(bendEvent); + } + + //Si l'utilisateur a croisé les bras en X. + if (crossDetector.CheckForCross()) + { + CrossEventArgs crossEvent = new CrossEventArgs(server, debug); + OnCrossEvent(crossEvent); + } + + //Si l'utilisateur a levé le genou. + if (kneeUpDetector.CheckForKneeUp()) + { + KneeUpEventArgs kneeUpEvent = new KneeUpEventArgs(server, debug); + OnKneeUpEvent(kneeUpEvent); + } + //Si l'utilisateur effectue un swipe left. if (swipeDetector.CheckForSwipeLeft()) { @@ -457,6 +551,14 @@ OnPushEvent(pushEvent); } + //Si l'utilisateur effectue un wave. + if (waveDetector.CheckForWave()) + { + WaveEventArgs waveEvent = new WaveEventArgs(server, debug); + OnWaveEvent(waveEvent); + Console.Out.WriteLine("WAVE"); + } + //Si l'utilisateur se déplace dans la zone de détection. //On traite le problème en plusieurs limites, on discrétise la zone. if (first.TrackingState == SkeletonTrackingState.Tracked) @@ -542,6 +644,33 @@ } /* + * Initialise l'événement et fait appel aux fonctions du listener quand l'utilisateur se penche. + */ + public static void OnBendEvent(BendEventArgs e) + { + if (BendEvent != null) + BendEvent(new object(), e); + } + + /* + * Initialise l'événement et fait appel aux fonctions du listener quand l'utilisateur croise les bras en X. + */ + public static void OnCrossEvent(CrossEventArgs e) + { + if (CrossEvent != null) + CrossEvent(new object(), e); + } + + /* + * Initialise l'événement et fait appel aux fonctions du listener quand l'utilisateur lève le genou. + */ + public static void OnKneeUpEvent(KneeUpEventArgs e) + { + if (KneeUpEvent != null) + KneeUpEvent(new object(), e); + } + + /* * Initialise l'événement et fait appel aux fonctions du listener quand l'utilisateur effectue un swipe right. */ public static void OnSwipeEvent(SwipeEventArgs e) @@ -569,6 +698,24 @@ } /* + * Initialise l'événement et fait appel aux fonctions du listener quand l'utilisateur effectue un cercle. + */ + public static void OnCircleEvent(CircleEventArgs e) + { + if (CircleEvent != null) + CircleEvent(new object(), e); + } + + /* + * Initialise l'événement et fait appel aux fonctions du listener quand l'utilisateur effectue un wave. + */ + public static void OnWaveEvent(WaveEventArgs e) + { + if (WaveEvent != null) + WaveEvent(new object(), e); + } + + /* * Initialise l'événement et fait appel aux fonctions du listener quand l'utilisateur se déplace * dans la zone de détection. */