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.

120 lines
3.3 KiB

using Microsoft.Kinect;
using System.ComponentModel;
using System.Diagnostics;
using System.Windows.Media;
namespace Lib
{
public class KinectManager : INotifyPropertyChanged
{
private KinectSensor sensor;
public KinectSensor Sensor
{
get { return sensor; }
set
{
sensor = value;
OnPropertyChanged(nameof(Sensor));
}
}
private SolidColorBrush _kinectStatusColor = new SolidColorBrush(Colors.Red); // Couleur rouge par défaut, signifiant inactive
public SolidColorBrush KinectStatusColor
{
get { return _kinectStatusColor; }
set
{
_kinectStatusColor = value;
OnPropertyChanged(nameof(KinectStatusColor));
}
}
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(string propertyName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
public KinectManager()
{
sensor = KinectSensor.GetDefault();
UpdateStatusProperties();
// Abonnez-vous à l'événement IsAvailableChanged
if (sensor != null)
{
sensor.IsAvailableChanged += KinectSensor_IsAvailableChanged;
}
}
public void StartSensor()
{
if (sensor != null && !sensor.IsOpen)
{
sensor.Open();
}
else
{
sensor = KinectSensor.GetDefault();
sensor.Open();
}
}
public void StopSensor()
{
if (sensor != null)
{
sensor.Close();
sensor = null;
}
}
public bool Status
{
get { return Sensor != null && Sensor.IsAvailable; }
}
private string _statusText;
public string StatusText
{
get { return _statusText; }
set
{
_statusText = value;
if (this.PropertyChanged != null)
{
this.PropertyChanged(this, new PropertyChangedEventArgs("StatusText"));
}
}
}
private void KinectSensor_IsAvailableChanged(object sender, IsAvailableChangedEventArgs e)
{
UpdateStatusProperties();
}
private void UpdateStatusProperties()
{
if (Sensor == null)
{
StatusText = "Kinect n'est pas connecté";
KinectStatusColor = new SolidColorBrush(Colors.Red);
}
else if (!Sensor.IsOpen)
{
StatusText = "Kinect n'est pas ouvert";
KinectStatusColor = new SolidColorBrush(Colors.Yellow);
}
else if (Sensor.IsAvailable)
{
StatusText = "Kinect est disponible";
KinectStatusColor = new SolidColorBrush(Colors.Green);
}
else
{
StatusText = "Kinect n'est pas disponible";
KinectStatusColor = new SolidColorBrush(Colors.Orange);
}
}
}
}