middleware/src/Debug/DebugWindow.xaml.cs
author bastiena
Thu, 15 Mar 2012 13:33:21 +0100
changeset 3 92f19af39024
parent 0 6fefd4afe506
child 5 d40f84d77db4
permissions -rw-r--r--
Middleware : Swipe & Push & Jump(Experimental) Detectors ant events added Server modified for gesture detection TUIO Server C# Modified : Hand cursors redirected to /TUIO/3DCur channel New kind of OSC message created (TuioString) for gesture detection, using /TUIO/_siP channel. TUIO Processing Java Modified : Hand cursors redirected to /TUIO/3DCur channel New kind of OSC message created (TuioString) for gesture detection, using /TUIO/_siP channel. Front Processing : Mask added and modifications in the drawing process New front for gesture detection (just showing a text message in the mask for the moment)
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;
0
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    36
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    37
namespace Trakers.Debug
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    38
{
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    39
    public partial class DebugWindow : Window
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    40
    {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    41
        //Membre permettant d'atteindre la classe KinectMain du sous-module Tracking.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    42
        private KinectMain kinectMain;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    43
        //Tableau contenant une image en couleurs.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    44
        private byte[] colorPixelData;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    45
        //Indique si la kinect est allumée/éteinte.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    46
        private bool on;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    47
        //Indique si la fenêtre de debug est actuellement en cours de fermeture.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    48
        private bool closing;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    49
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    50
        /*
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    51
        * Constructeur : Affiche la fenêtre de debug en lui passant en paramètre une instanciation de la
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    52
        * classe KinectMain.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    53
        * Au départ, la kinect est éteinte.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    54
        */
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    55
        public DebugWindow(KinectMain main)
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    56
        {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    57
            InitializeComponent();
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    58
            kinectMain = main;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    59
            on = false;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    60
            closing = false;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    61
        }
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    62
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    63
        /*
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    64
        * Getter pour le membre indiquant la fermeture de la fenêtre de debug.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    65
        */
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    66
        public bool isClosing()
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    67
        {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    68
            return closing;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    69
        }
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    70
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    71
        /*
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    72
        * Est appelée à la fermeture de la fenêtre.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    73
        */
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    74
        private void Window_Closed(object sender, EventArgs e)
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    75
        {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    76
            closing = true;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    77
            //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
    78
            kinectMain.KinectClose();
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    79
        }
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    80
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    81
        /*
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    82
        * Bouton ON/OFF.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    83
        */
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    84
        private void Switch_Click(object sender, RoutedEventArgs e)
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    85
        {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    86
            //S'il valait faux, il vaut vrai maintenant et inversement.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    87
            on = !on;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    88
            //Si la kinect est allumée.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    89
            if (on)
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    90
            {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    91
                //Il affiche OFF (pour éteindre la kinect).
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    92
                Switch.Content = "OFF";
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    93
                //On vide le label des exceptions.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    94
                ExceptionLbl.Content = "";
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    95
                //On initialise la Kinect.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    96
                kinectMain.KinectInitialization();
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    97
            }
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    98
            else
6fefd4afe506 First Import
bastiena
parents:
diff changeset
    99
            {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   100
                //Il affiche ON (pour allumer la kinect).
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   101
                Switch.Content = "ON";
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   102
                //On remet à zéro tous les éléments du retour visuel.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   103
                R1.Fill = System.Windows.Media.Brushes.DarkGray;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   104
                R2.Fill = System.Windows.Media.Brushes.DarkGray;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   105
                R3.Fill = System.Windows.Media.Brushes.DarkGray;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   106
                R4.Fill = System.Windows.Media.Brushes.DarkGray;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   107
                DistanceLbl.Content = "Distance :";
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   108
                LeftHand.Background = System.Windows.Media.Brushes.DarkGray;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   109
                LeftHand.Content = "";
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   110
                RightHand.Background = System.Windows.Media.Brushes.DarkGray;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   111
                RightHand.Content = "";
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   112
                DebugCanvas.Children.RemoveRange(1, DebugCanvas.Children.Count - 1);
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   113
                //On éteint la Kinect.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   114
                kinectMain.KinectClose();
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   115
            }
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   116
        }
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   117
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   118
        /*
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   119
        *  Récupère le flux video et met à jour le rendu visuel de debug.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   120
        */
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   121
        public void RefreshVideo(AllFramesReadyEventArgs e)
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   122
        {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   123
            bool receivedData = false;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   124
            ColorImageFrame colorImageFrameData;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   125
            using (colorImageFrameData = e.OpenColorImageFrame())
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   126
            {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   127
                //Si on ne reçoit pas de trames de la kinect.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   128
                if (colorImageFrameData == null)
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   129
                {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   130
                    //L'image est supprimée.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   131
                    DebugImage.Source = null;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   132
                }
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   133
                //Si le tableau stockant l'image en cours est nul.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   134
                if (colorPixelData == null)
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   135
                    //On alloue un nouveau tableau.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   136
                    colorPixelData = new byte[colorImageFrameData.PixelDataLength];
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   137
                else
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   138
                {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   139
                    //Sinon on met à jour le tableau en copiant le contenu de la trame dans le tableau.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   140
                    colorImageFrameData.CopyPixelDataTo(colorPixelData);
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   141
                    receivedData = true;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   142
                }
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   143
            }
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   144
            //Si on a des données dans le tableau et que la kinect est allumée.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   145
            if (receivedData && on)
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   146
            {
3
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   147
                /*for (int i = 0; i < colorPixelData.Length; i += colorImageFrameData.BytesPerPixel)
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   148
                {
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   149
                    byte gray = Math.Min(colorPixelData[i], colorPixelData[i + 1]);
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   150
                    gray = Math.Min(gray, colorPixelData[i + 2]);
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   151
                    colorPixelData[i] = gray;
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   152
                    colorPixelData[i + 1] = gray;
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   153
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   154
                    colorPixelData[i] = colorPixelData[i + 1];
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   155
                    colorPixelData[i + 1] = colorPixelData[i];
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   156
                    colorPixelData[i + 2] = (byte)~colorPixelData[i + 2];
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   157
                }*/
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   158
0
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   159
                //On met à jour l'image de la caméra.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   160
                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
   161
                DebugImage.HorizontalAlignment = System.Windows.HorizontalAlignment.Center;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   162
                DebugImage.VerticalAlignment = System.Windows.VerticalAlignment.Center;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   163
                DebugImage.Stretch = Stretch.Fill;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   164
            }
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   165
        }
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   166
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   167
        /*
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   168
        * Affiche la distance de l'utilisateur dans le rendu visuel.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   169
        * Sous forme de nombre en m et de rectangles changeant de couleur en fonction de la distance.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   170
        */
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   171
        public void showDistance(float distance)
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   172
        {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   173
            DistanceLbl.Content = "Distance : " + distance;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   174
3
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   175
            /*R1.Fill = System.Windows.Media.Brushes.Transparent;
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   176
            R2.Fill = System.Windows.Media.Brushes.Transparent;
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   177
            R3.Fill = System.Windows.Media.Brushes.Transparent;
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   178
            R4.Fill = System.Windows.Media.Brushes.Transparent;*/
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   179
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   180
            /*if (distance > 0 && distance < 1)
0
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   181
            {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   182
                R1.Fill = System.Windows.Media.Brushes.Red;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   183
                R2.Fill = System.Windows.Media.Brushes.DarkGray;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   184
                R3.Fill = System.Windows.Media.Brushes.DarkGray;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   185
                R4.Fill = System.Windows.Media.Brushes.DarkGray;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   186
            }
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   187
            else if (distance > 1 && distance < 2)
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   188
            {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   189
                R1.Fill = System.Windows.Media.Brushes.DarkGray;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   190
                R2.Fill = System.Windows.Media.Brushes.Orange;
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 > 2 && distance < 3)
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.DarkGray;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   198
                R3.Fill = System.Windows.Media.Brushes.Yellow;
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 > 3 && distance < 4)
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.DarkGray;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   206
                R4.Fill = System.Windows.Media.Brushes.White;
3
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   207
            }*/
0
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   208
        }
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   209
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   210
        /*
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   211
        * Affiche la détection de la main droite via un label.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   212
        */
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   213
        public void showRightHandRect(bool show)
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   214
        {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   215
            if (show)
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   216
                RightHand.Background = System.Windows.Media.Brushes.Blue;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   217
            else
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   218
                RightHand.Background = System.Windows.Media.Brushes.DarkGray;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   219
        }
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   220
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   221
        /*
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   222
        * Affiche la détection de la main gauche via un label.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   223
        */
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   224
        public void showLeftHandRect(bool show)
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   225
        {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   226
            if (show)
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   227
                LeftHand.Background = System.Windows.Media.Brushes.Blue;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   228
            else
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   229
                LeftHand.Background = System.Windows.Media.Brushes.DarkGray;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   230
        }
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   231
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   232
        /*
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   233
        * Dessine les noeuds du squelette dans le rendu visuel.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   234
        */
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   235
        public void drawJoints(JointCollection joints, Skeleton first)
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   236
        {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   237
            //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
   238
            DebugCanvas.Children.RemoveRange(1, DebugCanvas.Children.Count - 1);
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   239
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   240
            //Pour chaque noeud.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   241
            foreach (Joint joint in first.Joints)
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   242
            {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   243
                //On crée une ellipse de taille 20 et de largeur 20.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   244
                Ellipse node = new Ellipse();
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   245
                node.Height = 20;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   246
                node.Width = 20;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   247
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   248
                //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
   249
                if (joint.JointType == JointType.Head)
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   250
                    node.Fill = System.Windows.Media.Brushes.Red;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   251
                else if(joint.JointType == JointType.ShoulderCenter)
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   252
                    node.Fill = System.Windows.Media.Brushes.Green;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   253
                else if(joint.JointType == JointType.HipCenter)
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   254
                    node.Fill = System.Windows.Media.Brushes.Green;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   255
                else if (joint.JointType == JointType.HandRight)
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   256
                    node.Fill = System.Windows.Media.Brushes.Red;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   257
                else
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   258
                    node.Fill = System.Windows.Media.Brushes.Blue;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   259
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   260
                //On met à la bonne échelle les coordonnées des positions des noeuds.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   261
                Joint scaledJoint = Coding4Fun.Kinect.Wpf.SkeletalExtensions.ScaleTo(joint, 600, 400, 0.75f, 0.75f);
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   262
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   263
                //On positionne le noeud dans le Canvas, et on l'ajoute.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   264
                Canvas.SetLeft(node, scaledJoint.Position.X);
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   265
                Canvas.SetTop(node, scaledJoint.Position.Y);
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   266
                DebugCanvas.Children.Add(node);
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   267
            }
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   268
        }
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   269
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   270
        /*
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   271
        * Dessine un os, en ayant en paramètres deux noeuds.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   272
        */
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   273
        public void drawBone(Joint j1, Joint j2)
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   274
        {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   275
            //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
   276
            Line line = new Line();
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   277
            line.Stroke = System.Windows.Media.Brushes.Green;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   278
            line.X1 = j1.Position.X;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   279
            line.X2 = j2.Position.X;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   280
            line.Y1 = j1.Position.Y;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   281
            line.Y2 = j2.Position.Y;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   282
            line.StrokeThickness = 8;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   283
            DebugCanvas.Children.Add(line);
3
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   284
            ExceptionLbl.Content = DebugCanvas.Children.Count;
0
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   285
        }
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   286
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   287
        /*
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   288
        * Dessine le squelette (ensemble des os), en ayant en paramètres tous les noeuds.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   289
        */
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   290
        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
   291
        {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   292
            //On met les noeuds deux par deux en fonction de leur position dans le squelette.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   293
            drawBone(head, shoulderCenter);
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   294
            drawBone(shoulderCenter, shoulderLeft);
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   295
            drawBone(shoulderLeft, elbowLeft);
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   296
            drawBone(elbowLeft, wristLeft);
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   297
            drawBone(wristLeft, handLeft);
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   298
            drawBone(shoulderCenter, shoulderRight);
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   299
            drawBone(shoulderRight, elbowRight);
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   300
            drawBone(elbowRight, wristRight);
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   301
            drawBone(wristRight, handRight);
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   302
            drawBone(shoulderCenter, spine);
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   303
            drawBone(spine, hipCenter);
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   304
            drawBone(hipCenter, hipLeft);
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   305
            drawBone(hipLeft, kneeLeft);
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   306
            drawBone(kneeLeft, ankleLeft);
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   307
            drawBone(ankleLeft, footLeft);
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   308
            drawBone(hipCenter, hipRight);
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   309
            drawBone(hipRight, kneeRight);
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   310
            drawBone(kneeRight, ankleRight);
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   311
            drawBone(ankleRight, footRight);
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   312
        }
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   313
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   314
        /*
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   315
        * Affiche la position de la main gauche dans le rendu visuel.
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   316
        */
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   317
        public void showLeftHandCoord(String coord)
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   318
        {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   319
            LeftHand.Content = coord;
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 showRightHandCoord(String coord)
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   326
        {
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   327
            RightHand.Content = coord;
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   328
        }
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   329
3
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   330
        public void showSwipe(SwipeEventArgs e)
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   331
        {
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   332
            if(e.direction == Tracking.Gestures.SwipeDetector.Direction.LEFT)
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   333
                ExceptionLbl.Background = System.Windows.Media.Brushes.Red;
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   334
            else if(e.direction == Tracking.Gestures.SwipeDetector.Direction.RIGHT)
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   335
                ExceptionLbl.Background = System.Windows.Media.Brushes.Purple;
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   336
        }
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   337
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   338
        public void showPush(PushEventArgs e)
0
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   339
        {
3
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   340
            if (e.direction == Tracking.Gestures.PushDetector.Direction.PUSH)
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   341
            {
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   342
                if(e.hand == Tracking.Gestures.PushDetector.Hand.LEFT)
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   343
                    LeftHand.Background = System.Windows.Media.Brushes.White;
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   344
                else if(e.hand == Tracking.Gestures.PushDetector.Hand.RIGHT)
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   345
                    RightHand.Background = System.Windows.Media.Brushes.White;
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   346
                else
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   347
                {
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   348
                    LeftHand.Background = System.Windows.Media.Brushes.White;
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   349
                    RightHand.Background = System.Windows.Media.Brushes.White;
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   350
                }
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   351
            }
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   352
            else
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   353
            {
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   354
                if (e.hand == Tracking.Gestures.PushDetector.Hand.LEFT)
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   355
                    LeftHand.Background = System.Windows.Media.Brushes.Black;
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   356
                else if (e.hand == Tracking.Gestures.PushDetector.Hand.RIGHT)
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   357
                    RightHand.Background = System.Windows.Media.Brushes.Black;
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   358
                else
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   359
                {
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   360
                    LeftHand.Background = System.Windows.Media.Brushes.Black;
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   361
                    RightHand.Background = System.Windows.Media.Brushes.Black;
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   362
                }
92f19af39024 Middleware :
bastiena
parents: 0
diff changeset
   363
            }
0
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   364
        }
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   365
    }
6fefd4afe506 First Import
bastiena
parents:
diff changeset
   366
}