diff --git a/JeuHoyEtudiants/JeuHoy_WPF_Natif/Model/GestionKinect.cs b/JeuHoyEtudiants/JeuHoy_WPF_Natif/Model/GestionKinect.cs index 676ae8b..89d9187 100644 --- a/JeuHoyEtudiants/JeuHoy_WPF_Natif/Model/GestionKinect.cs +++ b/JeuHoyEtudiants/JeuHoy_WPF_Natif/Model/GestionKinect.cs @@ -25,7 +25,9 @@ namespace JeuHoy_WPF_Natif.Model { private WriteableBitmap _bitmap; private byte[] _picPixels = null; - public GestionKinect() { + public GestionKinect(Image img, Canvas cnv) { + Image = img; + Canvas = cnv; _sensor = KinectSensor.GetDefault(); if (_sensor != null) { _sensor.Open(); diff --git a/JeuHoyEtudiants/JeuHoy_WPF_Natif/Presenter/PresentateurWEntrainement.cs b/JeuHoyEtudiants/JeuHoy_WPF_Natif/Presenter/PresentateurWEntrainement.cs index 2cb1d0a..6d98195 100644 --- a/JeuHoyEtudiants/JeuHoy_WPF_Natif/Presenter/PresentateurWEntrainement.cs +++ b/JeuHoyEtudiants/JeuHoy_WPF_Natif/Presenter/PresentateurWEntrainement.cs @@ -15,11 +15,13 @@ namespace JeuHoy_WPF_Natif.Presenter { private IwEntrainement _vue; private GestionPerceptrons _gestionnairePerceptron; + private GestionKinect _gestionnaireKinect; public PresentateurWEntrainement(IwEntrainement vue) { _vue = vue; _gestionnairePerceptron = new GestionPerceptrons(); + _gestionnaireKinect = new GestionKinect(_vue.Image, _vue.Canvas); _vue.EntrainementEvt += _vue_EntrainementEvt; } diff --git a/JeuHoyEtudiants/JeuHoy_WPF_Natif/View/wEntrainement.xaml.cs b/JeuHoyEtudiants/JeuHoy_WPF_Natif/View/wEntrainement.xaml.cs index d02f0de..3f822bb 100644 --- a/JeuHoyEtudiants/JeuHoy_WPF_Natif/View/wEntrainement.xaml.cs +++ b/JeuHoyEtudiants/JeuHoy_WPF_Natif/View/wEntrainement.xaml.cs @@ -33,192 +33,19 @@ namespace JeuHoy_WPF.View public string Console { get => txtConsole.Text; set => txtConsole.Text = value; } public Canvas Canvas { get => pDessinSquelette; set => pDessinSquelette = value; } - private KinectSensor _sensor; - private MultiSourceFrameReader _multiSourceFrameReader; - private BodyFrameReader _bodyFrameReader; - private WriteableBitmap _bitmap; - private Body _currentBody; - //private DisplayFrameType _displayFrameType = DisplayFrameType.Color; - - private byte[] _picPixels = null; - - - - /// /// Constructeur /// public wEntrainement() { - _presentateur = new PresentateurWEntrainement(this); - InitializeComponent(); + _presentateur = new PresentateurWEntrainement(this); - _sensor = KinectSensor.GetDefault(); - if (_sensor != null) - { - _sensor.Open(); - - //Lecture des images - _multiSourceFrameReader = _sensor.OpenMultiSourceFrameReader(FrameSourceTypes.Color); - _multiSourceFrameReader.MultiSourceFrameArrived += MultiSourceFrameReader_MultiSourceFrameArrived; - - FrameDescription frameDescription = _sensor.ColorFrameSource.FrameDescription; - _picPixels = new byte[frameDescription.Width * frameDescription.Height * 4]; - - //Lecture des squelettes détectés - _bodyFrameReader = _sensor.BodyFrameSource.OpenReader(); - _bodyFrameReader.FrameArrived += BodyFrameReader_FrameArrived; - - - } - - - for (int i = 1; i <= CstApplication.NBFIGURE; i++) - { - Uri uriSource = new Uri(AppDomain.CurrentDomain.BaseDirectory + @"./HoyContent/fig" + i + ".png", UriKind.Absolute); - _dicImgFigure.Add("fig" + i, new BitmapImage(uriSource)); - } - - lblNbPositions.Content = "/ " + CstApplication.NBFIGURE.ToString(); ChargerFigure(); _son.JouerSonAsync(@"./HoyContent/hoy.wav"); } - - private void MultiSourceFrameReader_MultiSourceFrameArrived(object sender, MultiSourceFrameArrivedEventArgs e) - { - MultiSourceFrame multiSource = e.FrameReference.AcquireFrame(); - - if (multiSource == null) - return; - - - - using (ColorFrame colorFrame = multiSource.ColorFrameReference.AcquireFrame()) - { - if (colorFrame != null) - { - FrameDescription frameDescription = colorFrame.FrameDescription; - if (_bitmap == null) - _bitmap = new WriteableBitmap(frameDescription.Width, - frameDescription.Height, - 96.0, - 96.0, - PixelFormats.Bgra32, - null); - colorFrame.CopyConvertedFrameDataToArray(_picPixels, ColorImageFormat.Bgra); - _bitmap.Lock(); - Marshal.Copy(_picPixels, 0, _bitmap.BackBuffer, _picPixels.Length); - _bitmap.AddDirtyRect(new Int32Rect(0, 0, _bitmap.PixelWidth, _bitmap.PixelHeight)); - _bitmap.Unlock(); - picKinect.Source = _bitmap; - } - - } - } - - - - private void BodyFrameReader_FrameArrived(object sender, BodyFrameArrivedEventArgs e) - { - using (BodyFrame bodyFrame = e.FrameReference.AcquireFrame()) - { - if (bodyFrame == null) - return; - Body[] bodies = new Body[bodyFrame.BodyCount]; - bodyFrame.GetAndRefreshBodyData(bodies); - Body body = bodies.FirstOrDefault(b => b.IsTracked); - - if (body != null) - { - _currentBody = body; - DessinerSquelette(body, _sensor); - } - } - } - - - /// - /// Dessine un ellipse pour chacune des jointure du squelette détecté. - /// - /// Le joueur détecté - /// Le sensor Kinect - private void DessinerSquelette(Body body, KinectSensor sensor) - { - try - { - if (body != null) - { - pDessinSquelette.Children.Clear(); - Joint[] joints = body.Joints.Values.ToArray(); - for (int i = 0; i < joints.Count(); i++) - DrawJoint(sensor, joints[i], CstApplication.BODY_ELLIPSE_SIZE, pDessinSquelette); - } - } - catch (Exception ex) - { - txtConsole.Text = ex.Message; - } - } - - - /// - /// Dessine le joint d'un squellete d'un senseur Kinect sur le canvas passé en paramètre - /// - /// - /// - /// - /// - private void DrawJoint(KinectSensor sensor, Joint joint, int size, Canvas canvas) - { - if (joint.Position.X != 0 && joint.Position.Y != 0 && joint.Position.Z != 0) - { - // Convertir la position du joint en coordonnées d'écran - System.Windows.Point point = GetPoint(sensor, joint.Position, canvas.Height, canvas.Width); - - // Créer un cercle à la position du joint - Ellipse ellipse = new Ellipse(); - ellipse.Fill = new SolidColorBrush(Colors.Yellow); - ellipse.Width = size; - ellipse.Height = size; - - // Positionner le cercle sur l'élément de dessin Canvas - Canvas.SetLeft(ellipse, point.X - size / 2); - Canvas.SetTop(ellipse, point.Y - size / 2); - - // Ajouter le cercle à l'élément de dessin Canvas - canvas.Children.Add(ellipse); - } - } - - /// - /// Retourne le point x,y d'un joint par rapport à la taille d'un canvas. - /// J'ai permis de dépasser le canvas car je trouvais ça drole :-) - /// - /// - /// - /// - /// - /// - public System.Windows.Point GetPoint(KinectSensor sensor, CameraSpacePoint position, double iCanvasHeight, double iCanvasWidth) - { - System.Windows.Point point = new System.Windows.Point(); - - DepthSpacePoint depthPoint = sensor.CoordinateMapper.MapCameraPointToDepthSpace(position); - point.X = float.IsInfinity(depthPoint.X) ? 0.0 : depthPoint.X; - point.Y = float.IsInfinity(depthPoint.Y) ? 0.0 : depthPoint.Y; - - // La Kinect pour Xbox One utilise également le SDK 2 de Microsoft, et sa résolution de profondeur est de 512x424 pixels. - //// Ainsi, la résolution de la carte de profondeur pour la Kinect pour Xbox One est également de 512x424 pixels. - point.X = point.X / 512 * iCanvasHeight; - point.Y = point.Y / 424 * iCanvasWidth; - - return point; - } - - /// /// Charger la figure de danse en cours. ///