--- 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.
*/