You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

127 lines
3.2 KiB

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
}
}
}