middleware/src/Debug/DebugWindow.xaml.cs
author bastiena
Tue, 20 Mar 2012 18:00:55 +0100
changeset 7 8a21bec5d45f
parent 6 93dfb08dcc97
child 8 e4e7db2435f8
permissions -rw-r--r--
Middleware : No proximity bugs anymore. The skeleton disappear if a tracked person is too close or not tracked anymore. Processing : There are no laggs anymore when an user stay too long moving his hands and drawing tons of ellipses. (TUIO Cursors are not taken by their vectors, only the last position of the cursors are caught to be drawn).
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
6fefd4afe506 First Import
bastiena
parents:
diff changeset
     1
/*
3
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
     2
 * Projet : TraKERS
0
6fefd4afe506 First Import
bastiena
parents:
diff changeset
     3
 * Module : MIDDLEWARE
6fefd4afe506 First Import
bastiena
parents:
diff changeset
     4
 * Sous-Module : Debug
6fefd4afe506 First Import
bastiena
parents:
diff changeset
     5
 * Classe : DebugWindow
6fefd4afe506 First Import
bastiena
parents:
diff changeset
     6
 * 
6fefd4afe506 First Import
bastiena
parents:
diff changeset
     7
 * Auteur : alexandre.bastien@iri.centrepompidou.fr
6fefd4afe506 First Import
bastiena
parents:
diff changeset
     8
 * 
6fefd4afe506 First Import
bastiena
parents:
diff changeset
     9
 * Fonctionnalités : Reçoit des notifications des sous-modules Tracking, Communication et Exception.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    10
 * Intéragit avec la fenêtre XAML de debug de façon à afficher un rendu visuel.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    11
 */
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    12
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    13
using System;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    14
using System.Collections.Generic;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    15
using System.Linq;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    16
using System.Text;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    17
using System.Windows;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    18
using System.Windows.Controls;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    19
using System.Windows.Data;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    20
using System.Windows.Documents;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    21
using System.Windows.Input;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    22
using System.Windows.Media;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    23
using System.Windows.Media.Imaging;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    24
using System.Windows.Navigation;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    25
using System.Windows.Shapes;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    26
using System.Drawing;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    27
using System.Windows.Media.Media3D;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    28
using Microsoft.Kinect;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    29
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    30
using Coding4Fun.Kinect.Wpf;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    31
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    32
using Trakers.Tracking;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    33
using System.Threading;
3
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
    34
using Trakers.Tracking.Events;
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
    35
using Trakers.Tracking.Gestures;
5
d40f84d77db4 Documentations (readme)
bastiena
parents: 3
diff changeset
    36
using System.Resources;
d40f84d77db4 Documentations (readme)
bastiena
parents: 3
diff changeset
    37
using System.Reflection;
0
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    38
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    39
namespace Trakers.Debug
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    40
{
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    41
    public partial class DebugWindow : Window
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    42
    {
5
d40f84d77db4 Documentations (readme)
bastiena
parents: 3
diff changeset
    43
        //Gestionnaire de ressources.
d40f84d77db4 Documentations (readme)
bastiena
parents: 3
diff changeset
    44
        private ResourceManager rm;
0
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    45
        //Membre permettant d'atteindre la classe KinectMain du sous-module Tracking.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    46
        private KinectMain kinectMain;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    47
        //Tableau contenant une image en couleurs.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    48
        private byte[] colorPixelData;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    49
        //Indique si la kinect est allumée/éteinte.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    50
        private bool on;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    51
        //Indique si la fenêtre de debug est actuellement en cours de fermeture.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    52
        private bool closing;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    53
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    54
        /*
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    55
        * Constructeur : Affiche la fenêtre de debug en lui passant en paramètre une instanciation de la
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    56
        * classe KinectMain.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    57
        * Au départ, la kinect est éteinte.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    58
        */
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    59
        public DebugWindow(KinectMain main)
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    60
        {
5
d40f84d77db4 Documentations (readme)
bastiena
parents: 3
diff changeset
    61
            rm = new ResourceManager("Trakers.Properties.resources", Assembly.GetExecutingAssembly());
0
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    62
            InitializeComponent();
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    63
            kinectMain = main;
7
8a21bec5d45f Middleware :
bastiena
parents: 6
diff changeset
    64
            on = true;
0
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    65
            closing = false;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    66
        }
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    67
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    68
        /*
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    69
        * Getter pour le membre indiquant la fermeture de la fenêtre de debug.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    70
        */
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    71
        public bool isClosing()
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    72
        {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    73
            return closing;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    74
        }
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    75
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    76
        /*
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    77
        * Est appelée à la fermeture de la fenêtre.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    78
        */
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    79
        private void Window_Closed(object sender, EventArgs e)
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    80
        {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    81
            closing = true;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    82
            //On éteint la Kinect (pour éviter qu'elle reste allumée même lorsque le programme est éteint).
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    83
            kinectMain.KinectClose();
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    84
        }
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    85
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    86
        /*
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    87
        * Bouton ON/OFF.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    88
        */
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    89
        private void Switch_Click(object sender, RoutedEventArgs e)
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    90
        {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    91
            //S'il valait faux, il vaut vrai maintenant et inversement.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    92
            on = !on;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    93
            //Si la kinect est allumée.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    94
            if (on)
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    95
            {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    96
                //Il affiche OFF (pour éteindre la kinect).
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    97
                Switch.Content = "OFF";
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    98
                //On vide le label des exceptions.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    99
                ExceptionLbl.Content = "";
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   100
                //On initialise la Kinect.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   101
                kinectMain.KinectInitialization();
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   102
            }
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   103
            else
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   104
            {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   105
                //Il affiche ON (pour allumer la kinect).
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   106
                Switch.Content = "ON";
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   107
                //On remet à zéro tous les éléments du retour visuel.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   108
                R1.Fill = System.Windows.Media.Brushes.DarkGray;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   109
                R2.Fill = System.Windows.Media.Brushes.DarkGray;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   110
                R3.Fill = System.Windows.Media.Brushes.DarkGray;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   111
                R4.Fill = System.Windows.Media.Brushes.DarkGray;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   112
                DistanceLbl.Content = "Distance :";
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   113
                LeftHand.Background = System.Windows.Media.Brushes.DarkGray;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   114
                LeftHand.Content = "";
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   115
                RightHand.Background = System.Windows.Media.Brushes.DarkGray;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   116
                RightHand.Content = "";
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   117
                DebugCanvas.Children.RemoveRange(1, DebugCanvas.Children.Count - 1);
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   118
                //On éteint la Kinect.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   119
                kinectMain.KinectClose();
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   120
            }
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   121
        }
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   122
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   123
        /*
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   124
        *  Récupère le flux video et met à jour le rendu visuel de debug.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   125
        */
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   126
        public void RefreshVideo(AllFramesReadyEventArgs e)
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   127
        {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   128
            bool receivedData = false;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   129
            ColorImageFrame colorImageFrameData;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   130
            using (colorImageFrameData = e.OpenColorImageFrame())
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   131
            {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   132
                //Si on ne reçoit pas de trames de la kinect.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   133
                if (colorImageFrameData == null)
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   134
                {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   135
                    //L'image est supprimée.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   136
                    DebugImage.Source = null;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   137
                }
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   138
                //Si le tableau stockant l'image en cours est nul.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   139
                if (colorPixelData == null)
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   140
                    //On alloue un nouveau tableau.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   141
                    colorPixelData = new byte[colorImageFrameData.PixelDataLength];
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   142
                else
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   143
                {
7
8a21bec5d45f Middleware :
bastiena
parents: 6
diff changeset
   144
                    try
8a21bec5d45f Middleware :
bastiena
parents: 6
diff changeset
   145
                    {
8a21bec5d45f Middleware :
bastiena
parents: 6
diff changeset
   146
                        //Sinon on met à jour le tableau en copiant le contenu de la trame dans le tableau.
8a21bec5d45f Middleware :
bastiena
parents: 6
diff changeset
   147
                        colorImageFrameData.CopyPixelDataTo(colorPixelData);
8a21bec5d45f Middleware :
bastiena
parents: 6
diff changeset
   148
                        receivedData = true;
8a21bec5d45f Middleware :
bastiena
parents: 6
diff changeset
   149
                    }
8a21bec5d45f Middleware :
bastiena
parents: 6
diff changeset
   150
                    catch (Exception){}
0
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   151
                }
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   152
            }
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   153
            //Si on a des données dans le tableau et que la kinect est allumée.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   154
            if (receivedData && on)
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   155
            {
5
d40f84d77db4 Documentations (readme)
bastiena
parents: 3
diff changeset
   156
                //Exemples de modifications de l'affichage :
d40f84d77db4 Documentations (readme)
bastiena
parents: 3
diff changeset
   157
                //Zombies apocalypse.
d40f84d77db4 Documentations (readme)
bastiena
parents: 3
diff changeset
   158
                //Black & White movie.
3
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   159
                /*for (int i = 0; i < colorPixelData.Length; i += colorImageFrameData.BytesPerPixel)
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   160
                {
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   161
                    byte gray = Math.Min(colorPixelData[i], colorPixelData[i + 1]);
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   162
                    gray = Math.Min(gray, colorPixelData[i + 2]);
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   163
                    colorPixelData[i] = gray;
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   164
                    colorPixelData[i + 1] = gray;
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   165
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   166
                    colorPixelData[i] = colorPixelData[i + 1];
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   167
                    colorPixelData[i + 1] = colorPixelData[i];
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   168
                    colorPixelData[i + 2] = (byte)~colorPixelData[i + 2];
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   169
                }*/
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   170
0
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   171
                //On met à jour l'image de la caméra.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   172
                DebugImage.Source = BitmapSource.Create(colorImageFrameData.Width, colorImageFrameData.Height, 96, 96, PixelFormats.Bgr32, null, colorPixelData, colorImageFrameData.Width * colorImageFrameData.BytesPerPixel);
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   173
                DebugImage.HorizontalAlignment = System.Windows.HorizontalAlignment.Center;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   174
                DebugImage.VerticalAlignment = System.Windows.VerticalAlignment.Center;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   175
                DebugImage.Stretch = Stretch.Fill;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   176
            }
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   177
        }
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   178
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   179
        /*
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   180
        * Affiche la distance de l'utilisateur dans le rendu visuel.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   181
        * Sous forme de nombre en m et de rectangles changeant de couleur en fonction de la distance.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   182
        */
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   183
        public void showDistance(float distance)
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   184
        {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   185
            DistanceLbl.Content = "Distance : " + distance;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   186
5
d40f84d77db4 Documentations (readme)
bastiena
parents: 3
diff changeset
   187
            if (distance > 0 && distance < 1)
0
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   188
            {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   189
                R1.Fill = System.Windows.Media.Brushes.Red;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   190
                R2.Fill = System.Windows.Media.Brushes.DarkGray;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   191
                R3.Fill = System.Windows.Media.Brushes.DarkGray;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   192
                R4.Fill = System.Windows.Media.Brushes.DarkGray;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   193
            }
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   194
            else if (distance > 1 && distance < 2)
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   195
            {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   196
                R1.Fill = System.Windows.Media.Brushes.DarkGray;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   197
                R2.Fill = System.Windows.Media.Brushes.Orange;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   198
                R3.Fill = System.Windows.Media.Brushes.DarkGray;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   199
                R4.Fill = System.Windows.Media.Brushes.DarkGray;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   200
            }
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   201
            else if (distance > 2 && distance < 3)
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   202
            {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   203
                R1.Fill = System.Windows.Media.Brushes.DarkGray;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   204
                R2.Fill = System.Windows.Media.Brushes.DarkGray;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   205
                R3.Fill = System.Windows.Media.Brushes.Yellow;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   206
                R4.Fill = System.Windows.Media.Brushes.DarkGray;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   207
            }
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   208
            else if (distance > 3 && distance < 4)
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   209
            {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   210
                R1.Fill = System.Windows.Media.Brushes.DarkGray;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   211
                R2.Fill = System.Windows.Media.Brushes.DarkGray;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   212
                R3.Fill = System.Windows.Media.Brushes.DarkGray;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   213
                R4.Fill = System.Windows.Media.Brushes.White;
5
d40f84d77db4 Documentations (readme)
bastiena
parents: 3
diff changeset
   214
            }
0
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   215
        }
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   216
6
93dfb08dcc97 Middleware :
bastiena
parents: 5
diff changeset
   217
        public void showProximity(UserPositionEventArgs e)
93dfb08dcc97 Middleware :
bastiena
parents: 5
diff changeset
   218
        {
93dfb08dcc97 Middleware :
bastiena
parents: 5
diff changeset
   219
93dfb08dcc97 Middleware :
bastiena
parents: 5
diff changeset
   220
        }
93dfb08dcc97 Middleware :
bastiena
parents: 5
diff changeset
   221
0
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   222
        /*
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   223
        * Affiche la détection de la main droite via un label.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   224
        */
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   225
        public void showRightHandRect(bool show)
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   226
        {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   227
            if (show)
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   228
                RightHand.Background = System.Windows.Media.Brushes.Blue;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   229
            else
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   230
                RightHand.Background = System.Windows.Media.Brushes.DarkGray;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   231
        }
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   232
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   233
        /*
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   234
        * Affiche la détection de la main gauche via un label.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   235
        */
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   236
        public void showLeftHandRect(bool show)
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   237
        {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   238
            if (show)
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   239
                LeftHand.Background = System.Windows.Media.Brushes.Blue;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   240
            else
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   241
                LeftHand.Background = System.Windows.Media.Brushes.DarkGray;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   242
        }
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   243
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   244
        /*
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   245
        * Dessine les noeuds du squelette dans le rendu visuel.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   246
        */
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   247
        public void drawJoints(JointCollection joints, Skeleton first)
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   248
        {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   249
            //On enlève tout élément du Canvas à part l'image, de manière à mettre à jour la position du squelette. 
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   250
            DebugCanvas.Children.RemoveRange(1, DebugCanvas.Children.Count - 1);
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   251
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   252
            //Pour chaque noeud.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   253
            foreach (Joint joint in first.Joints)
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   254
            {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   255
                //On crée une ellipse de taille 20 et de largeur 20.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   256
                Ellipse node = new Ellipse();
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   257
                node.Height = 20;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   258
                node.Width = 20;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   259
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   260
                //S'il s'agit d'un noeud de tête, on le colorie en rouge, sinon en bleu.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   261
                if (joint.JointType == JointType.Head)
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   262
                    node.Fill = System.Windows.Media.Brushes.Red;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   263
                else if(joint.JointType == JointType.ShoulderCenter)
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   264
                    node.Fill = System.Windows.Media.Brushes.Green;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   265
                else if(joint.JointType == JointType.HipCenter)
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   266
                    node.Fill = System.Windows.Media.Brushes.Green;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   267
                else if (joint.JointType == JointType.HandRight)
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   268
                    node.Fill = System.Windows.Media.Brushes.Red;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   269
                else
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   270
                    node.Fill = System.Windows.Media.Brushes.Blue;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   271
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   272
                //On met à la bonne échelle les coordonnées des positions des noeuds.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   273
                Joint scaledJoint = Coding4Fun.Kinect.Wpf.SkeletalExtensions.ScaleTo(joint, 600, 400, 0.75f, 0.75f);
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   274
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   275
                //On positionne le noeud dans le Canvas, et on l'ajoute.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   276
                Canvas.SetLeft(node, scaledJoint.Position.X);
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   277
                Canvas.SetTop(node, scaledJoint.Position.Y);
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   278
                DebugCanvas.Children.Add(node);
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   279
            }
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   280
        }
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   281
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   282
        /*
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   283
        * Dessine un os, en ayant en paramètres deux noeuds.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   284
        */
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   285
        public void drawBone(Joint j1, Joint j2)
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   286
        {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   287
            //On crée une nouvelle ligne verte d'épaisseur 8 entre les deux noeuds et on l'ajoute au Canvas.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   288
            Line line = new Line();
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   289
            line.Stroke = System.Windows.Media.Brushes.Green;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   290
            line.X1 = j1.Position.X;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   291
            line.X2 = j2.Position.X;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   292
            line.Y1 = j1.Position.Y;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   293
            line.Y2 = j2.Position.Y;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   294
            line.StrokeThickness = 8;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   295
            DebugCanvas.Children.Add(line);
3
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   296
            ExceptionLbl.Content = DebugCanvas.Children.Count;
0
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   297
        }
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   298
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   299
        /*
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   300
        * Dessine le squelette (ensemble des os), en ayant en paramètres tous les noeuds.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   301
        */
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   302
        public void showSkeleton(Joint hipCenter, Joint spine, Joint shoulderCenter, Joint head, Joint shoulderLeft, Joint elbowLeft, Joint wristLeft, Joint handLeft, Joint shoulderRight, Joint elbowRight, Joint wristRight, Joint handRight, Joint hipLeft, Joint kneeLeft, Joint ankleLeft, Joint footLeft, Joint hipRight, Joint kneeRight, Joint ankleRight, Joint footRight)
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   303
        {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   304
            //On met les noeuds deux par deux en fonction de leur position dans le squelette.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   305
            drawBone(head, shoulderCenter);
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   306
            drawBone(shoulderCenter, shoulderLeft);
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   307
            drawBone(shoulderLeft, elbowLeft);
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   308
            drawBone(elbowLeft, wristLeft);
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   309
            drawBone(wristLeft, handLeft);
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   310
            drawBone(shoulderCenter, shoulderRight);
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   311
            drawBone(shoulderRight, elbowRight);
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   312
            drawBone(elbowRight, wristRight);
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   313
            drawBone(wristRight, handRight);
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   314
            drawBone(shoulderCenter, spine);
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   315
            drawBone(spine, hipCenter);
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   316
            drawBone(hipCenter, hipLeft);
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   317
            drawBone(hipLeft, kneeLeft);
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   318
            drawBone(kneeLeft, ankleLeft);
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   319
            drawBone(ankleLeft, footLeft);
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   320
            drawBone(hipCenter, hipRight);
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   321
            drawBone(hipRight, kneeRight);
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   322
            drawBone(kneeRight, ankleRight);
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   323
            drawBone(ankleRight, footRight);
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   324
        }
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   325
7
8a21bec5d45f Middleware :
bastiena
parents: 6
diff changeset
   326
        public void hideSkeleton()
8a21bec5d45f Middleware :
bastiena
parents: 6
diff changeset
   327
        {
8a21bec5d45f Middleware :
bastiena
parents: 6
diff changeset
   328
            if(DebugCanvas.Children.Count > 1)
8a21bec5d45f Middleware :
bastiena
parents: 6
diff changeset
   329
                DebugCanvas.Children.RemoveRange(1, DebugCanvas.Children.Count - 1);
8a21bec5d45f Middleware :
bastiena
parents: 6
diff changeset
   330
        }
8a21bec5d45f Middleware :
bastiena
parents: 6
diff changeset
   331
0
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   332
        /*
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   333
        * Affiche la position de la main gauche dans le rendu visuel.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   334
        */
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   335
        public void showLeftHandCoord(String coord)
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   336
        {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   337
            LeftHand.Content = coord;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   338
        }
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   339
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   340
        /*
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   341
        * Affiche la position de la main gauche dans le rendu visuel.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   342
        */
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   343
        public void showRightHandCoord(String coord)
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   344
        {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   345
            RightHand.Content = coord;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   346
        }
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   347
3
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   348
        public void showSwipe(SwipeEventArgs e)
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   349
        {
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   350
            if(e.direction == Tracking.Gestures.SwipeDetector.Direction.LEFT)
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   351
                ExceptionLbl.Background = System.Windows.Media.Brushes.Red;
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   352
            else if(e.direction == Tracking.Gestures.SwipeDetector.Direction.RIGHT)
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   353
                ExceptionLbl.Background = System.Windows.Media.Brushes.Purple;
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   354
        }
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   355
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   356
        public void showPush(PushEventArgs e)
0
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   357
        {
3
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   358
            if (e.direction == Tracking.Gestures.PushDetector.Direction.PUSH)
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   359
            {
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   360
                if(e.hand == Tracking.Gestures.PushDetector.Hand.LEFT)
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   361
                    LeftHand.Background = System.Windows.Media.Brushes.White;
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   362
                else if(e.hand == Tracking.Gestures.PushDetector.Hand.RIGHT)
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   363
                    RightHand.Background = System.Windows.Media.Brushes.White;
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   364
                else
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   365
                {
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   366
                    LeftHand.Background = System.Windows.Media.Brushes.White;
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   367
                    RightHand.Background = System.Windows.Media.Brushes.White;
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   368
                }
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   369
            }
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   370
            else
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   371
            {
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   372
                if (e.hand == Tracking.Gestures.PushDetector.Hand.LEFT)
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   373
                    LeftHand.Background = System.Windows.Media.Brushes.Black;
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   374
                else if (e.hand == Tracking.Gestures.PushDetector.Hand.RIGHT)
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   375
                    RightHand.Background = System.Windows.Media.Brushes.Black;
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   376
                else
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   377
                {
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   378
                    LeftHand.Background = System.Windows.Media.Brushes.Black;
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   379
                    RightHand.Background = System.Windows.Media.Brushes.Black;
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   380
                }
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   381
            }
0
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   382
        }
5
d40f84d77db4 Documentations (readme)
bastiena
parents: 3
diff changeset
   383
d40f84d77db4 Documentations (readme)
bastiena
parents: 3
diff changeset
   384
        /*
d40f84d77db4 Documentations (readme)
bastiena
parents: 3
diff changeset
   385
         * Méthode associée à l'événement : Ouvrir la fenêtre de paramétrage via le menu.
d40f84d77db4 Documentations (readme)
bastiena
parents: 3
diff changeset
   386
         */
d40f84d77db4 Documentations (readme)
bastiena
parents: 3
diff changeset
   387
        private void Parameters_Click(object sender, RoutedEventArgs e)
d40f84d77db4 Documentations (readme)
bastiena
parents: 3
diff changeset
   388
        {
d40f84d77db4 Documentations (readme)
bastiena
parents: 3
diff changeset
   389
            DebugParameters param = new DebugParameters(kinectMain);
d40f84d77db4 Documentations (readme)
bastiena
parents: 3
diff changeset
   390
d40f84d77db4 Documentations (readme)
bastiena
parents: 3
diff changeset
   391
            try
d40f84d77db4 Documentations (readme)
bastiena
parents: 3
diff changeset
   392
            {
d40f84d77db4 Documentations (readme)
bastiena
parents: 3
diff changeset
   393
                param.ShowDialog();
d40f84d77db4 Documentations (readme)
bastiena
parents: 3
diff changeset
   394
            }
d40f84d77db4 Documentations (readme)
bastiena
parents: 3
diff changeset
   395
            catch (Exception)
d40f84d77db4 Documentations (readme)
bastiena
parents: 3
diff changeset
   396
            {
d40f84d77db4 Documentations (readme)
bastiena
parents: 3
diff changeset
   397
                ExceptionLbl.Content = rm.GetString("loadParamFail");
d40f84d77db4 Documentations (readme)
bastiena
parents: 3
diff changeset
   398
            }
d40f84d77db4 Documentations (readme)
bastiena
parents: 3
diff changeset
   399
        }
d40f84d77db4 Documentations (readme)
bastiena
parents: 3
diff changeset
   400
d40f84d77db4 Documentations (readme)
bastiena
parents: 3
diff changeset
   401
        /*
d40f84d77db4 Documentations (readme)
bastiena
parents: 3
diff changeset
   402
         * Méthode associée à l'événement : Quitter via le menu.
d40f84d77db4 Documentations (readme)
bastiena
parents: 3
diff changeset
   403
         */
d40f84d77db4 Documentations (readme)
bastiena
parents: 3
diff changeset
   404
        private void Quit_Click(object sender, RoutedEventArgs e)
d40f84d77db4 Documentations (readme)
bastiena
parents: 3
diff changeset
   405
        {
d40f84d77db4 Documentations (readme)
bastiena
parents: 3
diff changeset
   406
            closing = true;
d40f84d77db4 Documentations (readme)
bastiena
parents: 3
diff changeset
   407
            //On éteint la Kinect (pour éviter qu'elle reste allumée même lorsque le programme est éteint).
d40f84d77db4 Documentations (readme)
bastiena
parents: 3
diff changeset
   408
            kinectMain.KinectClose();
d40f84d77db4 Documentations (readme)
bastiena
parents: 3
diff changeset
   409
            Application.Current.Shutdown();
d40f84d77db4 Documentations (readme)
bastiena
parents: 3
diff changeset
   410
        }
7
8a21bec5d45f Middleware :
bastiena
parents: 6
diff changeset
   411
8a21bec5d45f Middleware :
bastiena
parents: 6
diff changeset
   412
        private void Window_Loaded(object sender, RoutedEventArgs e)
8a21bec5d45f Middleware :
bastiena
parents: 6
diff changeset
   413
        {
8a21bec5d45f Middleware :
bastiena
parents: 6
diff changeset
   414
            kinectMain.KinectInitialization();
8a21bec5d45f Middleware :
bastiena
parents: 6
diff changeset
   415
        }
0
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   416
    }
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   417
}