using Microsoft.Kinect; using System.ComponentModel; using System.Diagnostics; namespace Lib { public class KinectManager : INotifyPropertyChanged { private KinectSensor sensor; private BodyFrameReader bodyFrameReader; private Body[] bodies = null; public KinectSensor Sensor { get { return sensor; } set { sensor = value; OnPropertyChanged(nameof(Sensor)); } } public event PropertyChangedEventHandler PropertyChanged; protected virtual void OnPropertyChanged(string propertyName) { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); } public KinectManager() { sensor = KinectSensor.GetDefault(); if (sensor != null) { bodyFrameReader = sensor.BodyFrameSource.OpenReader(); bodyFrameReader.FrameArrived += BodyFrameReader_FrameArrived; } } private void BodyFrameReader_FrameArrived(object sender, BodyFrameArrivedEventArgs e) { using (var frame = e.FrameReference.AcquireFrame()) { if (frame != null) { if (bodies == null) { bodies = new Body[frame.BodyCount]; } frame.GetAndRefreshBodyData(bodies); } } } public Body GetNextBody() { if (bodies == null) return null; foreach (var body in bodies) { if (body.IsTracked) { return body; } } return null; } public bool StartSensor() { if (sensor != null) { sensor.Open(); return true; } else { return false; } } public bool StopSensor() { if (sensor != null) { sensor.Close(); return true; } else { return false; } } public bool Status { get { return Sensor != null && Sensor.IsAvailable; } } public string StatusText { get { if (Sensor == null) { return "Kinect n'est pas connecté"; } else if (!Sensor.IsOpen) { return "Kinect n'est pas ouvert"; } else if (Sensor.IsAvailable) { return "Kinect est disponible"; } else { return "Kinect n'est pas disponible"; } } } private void KinectSensor_IsAvailableChanged(object sender, IsAvailableChangedEventArgs args) { // Vous pouvez ajouter ici une logique supplémentaire si nécessaire } } }