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