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