middleware/src/Debug/DebugWindow.xaml.cs
author bastiena
Mon, 19 Mar 2012 18:24:59 +0100
changeset 6 93dfb08dcc97
parent 5 d40f84d77db4
child 7 8a21bec5d45f
permissions -rw-r--r--
Middleware : User position events + detector (proximity). More parameters, like proximity bounds.
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;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    64
            on = false;
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
                {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   144
                    //Sinon on met à jour le tableau en copiant le contenu de la trame dans le tableau.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   145
                    colorImageFrameData.CopyPixelDataTo(colorPixelData);
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   146
                    receivedData = true;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   147
                }
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   148
            }
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   149
            //Si on a des données dans le tableau et que la kinect est allumée.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   150
            if (receivedData && on)
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   151
            {
5
d40f84d77db4 Documentations (readme)
bastiena
parents: 3
diff changeset
   152
                //Exemples de modifications de l'affichage :
d40f84d77db4 Documentations (readme)
bastiena
parents: 3
diff changeset
   153
                //Zombies apocalypse.
d40f84d77db4 Documentations (readme)
bastiena
parents: 3
diff changeset
   154
                //Black & White movie.
3
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   155
                /*for (int i = 0; i < colorPixelData.Length; i += colorImageFrameData.BytesPerPixel)
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   156
                {
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   157
                    byte gray = Math.Min(colorPixelData[i], colorPixelData[i + 1]);
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   158
                    gray = Math.Min(gray, colorPixelData[i + 2]);
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   159
                    colorPixelData[i] = gray;
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   160
                    colorPixelData[i + 1] = gray;
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   161
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   162
                    colorPixelData[i] = colorPixelData[i + 1];
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   163
                    colorPixelData[i + 1] = colorPixelData[i];
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   164
                    colorPixelData[i + 2] = (byte)~colorPixelData[i + 2];
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   165
                }*/
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   166
0
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   167
                //On met à jour l'image de la caméra.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   168
                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
   169
                DebugImage.HorizontalAlignment = System.Windows.HorizontalAlignment.Center;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   170
                DebugImage.VerticalAlignment = System.Windows.VerticalAlignment.Center;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   171
                DebugImage.Stretch = Stretch.Fill;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   172
            }
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   173
        }
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   174
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   175
        /*
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   176
        * Affiche la distance de l'utilisateur dans le rendu visuel.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   177
        * Sous forme de nombre en m et de rectangles changeant de couleur en fonction de la distance.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   178
        */
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   179
        public void showDistance(float distance)
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   180
        {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   181
            DistanceLbl.Content = "Distance : " + distance;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   182
5
d40f84d77db4 Documentations (readme)
bastiena
parents: 3
diff changeset
   183
            if (distance > 0 && distance < 1)
0
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   184
            {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   185
                R1.Fill = System.Windows.Media.Brushes.Red;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   186
                R2.Fill = System.Windows.Media.Brushes.DarkGray;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   187
                R3.Fill = System.Windows.Media.Brushes.DarkGray;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   188
                R4.Fill = System.Windows.Media.Brushes.DarkGray;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   189
            }
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   190
            else if (distance > 1 && distance < 2)
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   191
            {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   192
                R1.Fill = System.Windows.Media.Brushes.DarkGray;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   193
                R2.Fill = System.Windows.Media.Brushes.Orange;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   194
                R3.Fill = System.Windows.Media.Brushes.DarkGray;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   195
                R4.Fill = System.Windows.Media.Brushes.DarkGray;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   196
            }
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   197
            else if (distance > 2 && distance < 3)
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   198
            {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   199
                R1.Fill = System.Windows.Media.Brushes.DarkGray;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   200
                R2.Fill = System.Windows.Media.Brushes.DarkGray;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   201
                R3.Fill = System.Windows.Media.Brushes.Yellow;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   202
                R4.Fill = System.Windows.Media.Brushes.DarkGray;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   203
            }
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   204
            else if (distance > 3 && distance < 4)
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   205
            {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   206
                R1.Fill = System.Windows.Media.Brushes.DarkGray;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   207
                R2.Fill = System.Windows.Media.Brushes.DarkGray;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   208
                R3.Fill = System.Windows.Media.Brushes.DarkGray;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   209
                R4.Fill = System.Windows.Media.Brushes.White;
5
d40f84d77db4 Documentations (readme)
bastiena
parents: 3
diff changeset
   210
            }
0
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   211
        }
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   212
6
93dfb08dcc97 Middleware :
bastiena
parents: 5
diff changeset
   213
        public void showProximity(UserPositionEventArgs e)
93dfb08dcc97 Middleware :
bastiena
parents: 5
diff changeset
   214
        {
93dfb08dcc97 Middleware :
bastiena
parents: 5
diff changeset
   215
93dfb08dcc97 Middleware :
bastiena
parents: 5
diff changeset
   216
        }
93dfb08dcc97 Middleware :
bastiena
parents: 5
diff changeset
   217
0
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   218
        /*
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   219
        * Affiche la détection de la main droite via un label.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   220
        */
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   221
        public void showRightHandRect(bool show)
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   222
        {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   223
            if (show)
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   224
                RightHand.Background = System.Windows.Media.Brushes.Blue;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   225
            else
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   226
                RightHand.Background = System.Windows.Media.Brushes.DarkGray;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   227
        }
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   228
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   229
        /*
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   230
        * Affiche la détection de la main gauche via un label.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   231
        */
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   232
        public void showLeftHandRect(bool show)
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   233
        {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   234
            if (show)
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   235
                LeftHand.Background = System.Windows.Media.Brushes.Blue;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   236
            else
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   237
                LeftHand.Background = System.Windows.Media.Brushes.DarkGray;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   238
        }
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   239
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   240
        /*
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   241
        * Dessine les noeuds du squelette dans le rendu visuel.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   242
        */
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   243
        public void drawJoints(JointCollection joints, Skeleton first)
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   244
        {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   245
            //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
   246
            DebugCanvas.Children.RemoveRange(1, DebugCanvas.Children.Count - 1);
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   247
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   248
            //Pour chaque noeud.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   249
            foreach (Joint joint in first.Joints)
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   250
            {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   251
                //On crée une ellipse de taille 20 et de largeur 20.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   252
                Ellipse node = new Ellipse();
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   253
                node.Height = 20;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   254
                node.Width = 20;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   255
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   256
                //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
   257
                if (joint.JointType == JointType.Head)
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   258
                    node.Fill = System.Windows.Media.Brushes.Red;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   259
                else if(joint.JointType == JointType.ShoulderCenter)
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   260
                    node.Fill = System.Windows.Media.Brushes.Green;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   261
                else if(joint.JointType == JointType.HipCenter)
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   262
                    node.Fill = System.Windows.Media.Brushes.Green;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   263
                else if (joint.JointType == JointType.HandRight)
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   264
                    node.Fill = System.Windows.Media.Brushes.Red;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   265
                else
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   266
                    node.Fill = System.Windows.Media.Brushes.Blue;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   267
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   268
                //On met à la bonne échelle les coordonnées des positions des noeuds.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   269
                Joint scaledJoint = Coding4Fun.Kinect.Wpf.SkeletalExtensions.ScaleTo(joint, 600, 400, 0.75f, 0.75f);
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   270
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   271
                //On positionne le noeud dans le Canvas, et on l'ajoute.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   272
                Canvas.SetLeft(node, scaledJoint.Position.X);
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   273
                Canvas.SetTop(node, scaledJoint.Position.Y);
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   274
                DebugCanvas.Children.Add(node);
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   275
            }
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   276
        }
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   277
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   278
        /*
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   279
        * Dessine un os, en ayant en paramètres deux noeuds.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   280
        */
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   281
        public void drawBone(Joint j1, Joint j2)
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   282
        {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   283
            //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
   284
            Line line = new Line();
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   285
            line.Stroke = System.Windows.Media.Brushes.Green;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   286
            line.X1 = j1.Position.X;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   287
            line.X2 = j2.Position.X;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   288
            line.Y1 = j1.Position.Y;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   289
            line.Y2 = j2.Position.Y;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   290
            line.StrokeThickness = 8;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   291
            DebugCanvas.Children.Add(line);
3
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   292
            ExceptionLbl.Content = DebugCanvas.Children.Count;
0
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   293
        }
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   294
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   295
        /*
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   296
        * Dessine le squelette (ensemble des os), en ayant en paramètres tous les noeuds.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   297
        */
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   298
        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
   299
        {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   300
            //On met les noeuds deux par deux en fonction de leur position dans le squelette.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   301
            drawBone(head, shoulderCenter);
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   302
            drawBone(shoulderCenter, shoulderLeft);
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   303
            drawBone(shoulderLeft, elbowLeft);
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   304
            drawBone(elbowLeft, wristLeft);
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   305
            drawBone(wristLeft, handLeft);
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   306
            drawBone(shoulderCenter, shoulderRight);
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   307
            drawBone(shoulderRight, elbowRight);
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   308
            drawBone(elbowRight, wristRight);
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   309
            drawBone(wristRight, handRight);
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   310
            drawBone(shoulderCenter, spine);
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   311
            drawBone(spine, hipCenter);
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   312
            drawBone(hipCenter, hipLeft);
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   313
            drawBone(hipLeft, kneeLeft);
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   314
            drawBone(kneeLeft, ankleLeft);
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   315
            drawBone(ankleLeft, footLeft);
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   316
            drawBone(hipCenter, hipRight);
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   317
            drawBone(hipRight, kneeRight);
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   318
            drawBone(kneeRight, ankleRight);
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   319
            drawBone(ankleRight, footRight);
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   320
        }
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   321
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   322
        /*
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   323
        * Affiche la position de la main gauche dans le rendu visuel.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   324
        */
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   325
        public void showLeftHandCoord(String coord)
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   326
        {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   327
            LeftHand.Content = coord;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   328
        }
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   329
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   330
        /*
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   331
        * Affiche la position de la main gauche dans le rendu visuel.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   332
        */
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   333
        public void showRightHandCoord(String coord)
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   334
        {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   335
            RightHand.Content = coord;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   336
        }
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   337
3
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   338
        public void showSwipe(SwipeEventArgs e)
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   339
        {
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   340
            if(e.direction == Tracking.Gestures.SwipeDetector.Direction.LEFT)
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   341
                ExceptionLbl.Background = System.Windows.Media.Brushes.Red;
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   342
            else if(e.direction == Tracking.Gestures.SwipeDetector.Direction.RIGHT)
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   343
                ExceptionLbl.Background = System.Windows.Media.Brushes.Purple;
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   344
        }
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   345
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   346
        public void showPush(PushEventArgs e)
0
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   347
        {
3
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   348
            if (e.direction == Tracking.Gestures.PushDetector.Direction.PUSH)
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   349
            {
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   350
                if(e.hand == Tracking.Gestures.PushDetector.Hand.LEFT)
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   351
                    LeftHand.Background = System.Windows.Media.Brushes.White;
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   352
                else if(e.hand == Tracking.Gestures.PushDetector.Hand.RIGHT)
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   353
                    RightHand.Background = System.Windows.Media.Brushes.White;
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   354
                else
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   355
                {
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   356
                    LeftHand.Background = System.Windows.Media.Brushes.White;
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   357
                    RightHand.Background = System.Windows.Media.Brushes.White;
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   358
                }
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   359
            }
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   360
            else
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   361
            {
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   362
                if (e.hand == Tracking.Gestures.PushDetector.Hand.LEFT)
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   363
                    LeftHand.Background = System.Windows.Media.Brushes.Black;
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   364
                else if (e.hand == Tracking.Gestures.PushDetector.Hand.RIGHT)
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   365
                    RightHand.Background = System.Windows.Media.Brushes.Black;
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   366
                else
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   367
                {
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   368
                    LeftHand.Background = System.Windows.Media.Brushes.Black;
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   369
                    RightHand.Background = System.Windows.Media.Brushes.Black;
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   370
                }
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   371
            }
0
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   372
        }
5
d40f84d77db4 Documentations (readme)
bastiena
parents: 3
diff changeset
   373
d40f84d77db4 Documentations (readme)
bastiena
parents: 3
diff changeset
   374
        /*
d40f84d77db4 Documentations (readme)
bastiena
parents: 3
diff changeset
   375
         * 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
   376
         */
d40f84d77db4 Documentations (readme)
bastiena
parents: 3
diff changeset
   377
        private void Parameters_Click(object sender, RoutedEventArgs e)
d40f84d77db4 Documentations (readme)
bastiena
parents: 3
diff changeset
   378
        {
d40f84d77db4 Documentations (readme)
bastiena
parents: 3
diff changeset
   379
            DebugParameters param = new DebugParameters(kinectMain);
d40f84d77db4 Documentations (readme)
bastiena
parents: 3
diff changeset
   380
d40f84d77db4 Documentations (readme)
bastiena
parents: 3
diff changeset
   381
            try
d40f84d77db4 Documentations (readme)
bastiena
parents: 3
diff changeset
   382
            {
d40f84d77db4 Documentations (readme)
bastiena
parents: 3
diff changeset
   383
                param.ShowDialog();
d40f84d77db4 Documentations (readme)
bastiena
parents: 3
diff changeset
   384
            }
d40f84d77db4 Documentations (readme)
bastiena
parents: 3
diff changeset
   385
            catch (Exception)
d40f84d77db4 Documentations (readme)
bastiena
parents: 3
diff changeset
   386
            {
d40f84d77db4 Documentations (readme)
bastiena
parents: 3
diff changeset
   387
                ExceptionLbl.Content = rm.GetString("loadParamFail");
d40f84d77db4 Documentations (readme)
bastiena
parents: 3
diff changeset
   388
            }
d40f84d77db4 Documentations (readme)
bastiena
parents: 3
diff changeset
   389
        }
d40f84d77db4 Documentations (readme)
bastiena
parents: 3
diff changeset
   390
d40f84d77db4 Documentations (readme)
bastiena
parents: 3
diff changeset
   391
        /*
d40f84d77db4 Documentations (readme)
bastiena
parents: 3
diff changeset
   392
         * Méthode associée à l'événement : Quitter via le menu.
d40f84d77db4 Documentations (readme)
bastiena
parents: 3
diff changeset
   393
         */
d40f84d77db4 Documentations (readme)
bastiena
parents: 3
diff changeset
   394
        private void Quit_Click(object sender, RoutedEventArgs e)
d40f84d77db4 Documentations (readme)
bastiena
parents: 3
diff changeset
   395
        {
d40f84d77db4 Documentations (readme)
bastiena
parents: 3
diff changeset
   396
            closing = true;
d40f84d77db4 Documentations (readme)
bastiena
parents: 3
diff changeset
   397
            //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
   398
            kinectMain.KinectClose();
d40f84d77db4 Documentations (readme)
bastiena
parents: 3
diff changeset
   399
            Application.Current.Shutdown();
d40f84d77db4 Documentations (readme)
bastiena
parents: 3
diff changeset
   400
        }
0
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   401
    }
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   402
}