middleware/src/Tracking/ModeManagement.cs
author bastiena
Thu, 29 Mar 2012 14:39:21 +0200
changeset 13 50de8e8f44d7
child 14 10d5199d9874
permissions -rw-r--r--
Middleware : Began to create a curve segmenter based on cutting on local extremums. Remove joint arguments on hand quit events to notify Processing when skeleton is not detected anymore.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
13
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
     1
/*
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
     2
* This file is part of the TraKERS\Middleware package.
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
     3
*
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
     4
* (c) IRI <http://www.iri.centrepompidou.fr/>
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
     5
*
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
     6
* For the full copyright and license information, please view the LICENSE_MIDDLEWARE
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
     7
* file that was distributed with this source code.
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
     8
*/
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
     9
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
    10
/*
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
    11
 * Projet : TraKERS
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
    12
 * Module : MIDDLEWARE
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
    13
 * Sous-Module : Tracking
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
    14
 * Classe : ModeManagement
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
    15
 * 
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
    16
 * Auteur : alexandre.bastien@iri.centrepompidou.fr
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
    17
 * 
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
    18
 * Fonctionnalités : Permet de gérer les différents modes qui découpent l'interaction avec le middleware.
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
    19
 * Découpe l'interaction avec le middleware en différents modes.
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
    20
 */
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
    21
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
    22
using System;
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
    23
using System.Collections.Generic;
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
    24
using System.Linq;
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
    25
using System.Text;
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
    26
using Trakers.Communication;
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
    27
using Trakers.Tracking.Events;
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
    28
using Trakers.Debug;
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
    29
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
    30
namespace Trakers.Tracking
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
    31
{
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
    32
    public class ModeManagement
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
    33
    {
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
    34
        //Il s'agit de la fonctoin permettant de notifier le serveur en cas de changement de mode.
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
    35
        public delegate void ModChangeHandler(object o, ModChangeEventArgs e);
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
    36
        //L'événement on change de mode.
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
    37
        public static event ModChangeHandler ModChangeEvent;
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
    38
        
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
    39
        //Accès au module d'interaction principal.
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
    40
        private KinectMain kinectMain;
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
    41
        //Accès au debug.
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
    42
        private DebugWindow debug;
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
    43
        //Accès au serveur.
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
    44
        private Server server;
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
    45
        //La liste des modes.
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
    46
        public enum Mode {NO_USER, USER_INCOMING, MOSAIC, FILTER, VIDEO, TIMELINE, SEARCH};
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
    47
        //Mode actuel.
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
    48
        private Mode currentMode;
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
    49
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
    50
        /*
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
    51
        *  Constructeur qui prend en paramètres le module principal et le serveur.
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
    52
        */
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
    53
        public ModeManagement(KinectMain _kinectMain, Server _server, DebugWindow _debug)
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
    54
        {
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
    55
            kinectMain = _kinectMain;
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
    56
            server = _server;
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
    57
            debug = _debug;
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
    58
            currentMode = Mode.NO_USER;
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
    59
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
    60
            //Fonction appelée lorsqu'on change de mode.
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
    61
            ModChangeListener modChangeListener = new ModChangeListener();
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
    62
            ModChangeEvent += new ModChangeHandler(modChangeListener.ShowOnScreen);
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
    63
        }
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
    64
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
    65
        /*
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
    66
        *  Détecte tout changement de mode en se basant sur la proximité de l'utilisateur.
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
    67
        */
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
    68
        public void DetectProximityBasedModes(float proximity, int numberOfImages)
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
    69
        {
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
    70
            //Si l'utilisateur se déplace dans la zone de détection.
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
    71
            //On traite le problème en plusieurs limites, on discrétise la zone.
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
    72
            //On considère qu'il n'y a pas d'utilisateur si sa proximité est trop faible.
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
    73
            if (proximity < 10f && currentMode != Mode.NO_USER)
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
    74
            {
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
    75
                currentMode = Mode.NO_USER;
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
    76
                ModChangeEventArgs modChangeEvent = new ModChangeEventArgs(debug, server, "NO_USER");
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
    77
                OnModChangeEvent(modChangeEvent);
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
    78
            }
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
    79
            //S'il n'est pas encore au point d'interaction maximale, on considère qu'il est en chemin.
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
    80
            else if (proximity >= 10f && proximity < 100f)
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
    81
            {
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
    82
                currentMode = Mode.USER_INCOMING;
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
    83
                ModChangeEventArgs modChangeEvent = new ModChangeEventArgs(debug, server, "USER_INCOMING");
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
    84
                OnModChangeEvent(modChangeEvent);
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
    85
            }
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
    86
            //S'il est arrivé au point, il a la mosaïque complète.
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
    87
            else
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
    88
            {
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
    89
                currentMode = Mode.MOSAIC;
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
    90
                ModChangeEventArgs modChangeEvent = new ModChangeEventArgs(debug, server, "MOSAIC");
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
    91
                OnModChangeEvent(modChangeEvent);
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
    92
            }
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
    93
        }
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
    94
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
    95
        /*
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
    96
        *  Détecte si l'utilisateur veut filtrer la mosaïque.
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
    97
        */
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
    98
        public void DetectFilterMode()
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
    99
        {
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
   100
            //Ne fonctionne que si on se trouve dans la mosaïque.
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
   101
            if (currentMode == Mode.MOSAIC)
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
   102
            {
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
   103
                currentMode = Mode.FILTER;
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
   104
                ModChangeEventArgs modChangeEvent = new ModChangeEventArgs(debug, server, "FILTER");
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
   105
                OnModChangeEvent(modChangeEvent);
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
   106
            }
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
   107
        }
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
   108
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
   109
        /*
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
   110
        *  Détecte si l'utilisateur veut entrer dans une vidéo.
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
   111
        */
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
   112
        public void DetectVideoMode()
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
   113
        {
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
   114
            //Si on vient de la mosaïque, d'un filtrage, de la timeline ou d'une recherche, on peut entrer.
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
   115
            if (currentMode == Mode.MOSAIC || currentMode == Mode.FILTER ||
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
   116
            currentMode == Mode.TIMELINE || currentMode == Mode.SEARCH)
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
   117
            {
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
   118
                currentMode = Mode.VIDEO;
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
   119
                ModChangeEventArgs modChangeEvent = new ModChangeEventArgs(debug, server, "VIDEO");
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
   120
                OnModChangeEvent(modChangeEvent);
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
   121
            }
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
   122
        }
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
   123
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
   124
        /*
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
   125
        *  Détecte si l'utilisateur veut entrer dans la timeline.
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
   126
        */
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
   127
        public void DetectTimeLineMode()
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
   128
        {
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
   129
            //Si on est dans une vidéo, on peut entrer.
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
   130
            if (currentMode == Mode.VIDEO)
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
   131
            {
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
   132
                currentMode = Mode.TIMELINE;
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
   133
                ModChangeEventArgs modChangeEvent = new ModChangeEventArgs(debug, server, "TIMELINE");
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
   134
                OnModChangeEvent(modChangeEvent);
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
   135
            }
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
   136
        }
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
   137
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
   138
        /*
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
   139
        *  Détecte si l'utilisateur veut effectuer une recherche dans cette vidéo.
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
   140
        */
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
   141
        public void DetectSearchMode()
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
   142
        {
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
   143
            //Si on est dans une vidéo, on peut entrer.
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
   144
            if (currentMode == Mode.VIDEO)
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
   145
            {
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
   146
                currentMode = Mode.SEARCH;
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
   147
                ModChangeEventArgs modChangeEvent = new ModChangeEventArgs(debug, server, "SEARCH");
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
   148
                OnModChangeEvent(modChangeEvent);
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
   149
            }
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
   150
        }
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
   151
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
   152
        /*
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
   153
        *  Initialise l'événement et fait appel aux fonctions du listener quand on change de mode.
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
   154
        */
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
   155
        public static void OnModChangeEvent(ModChangeEventArgs e)
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
   156
        {
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
   157
            if (ModChangeEvent != null)
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
   158
                ModChangeEvent(new object(), e);
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
   159
        }
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
   160
    }
50de8e8f44d7 Middleware :
bastiena
parents:
diff changeset
   161
}