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