Stap 4: De C#
Controleer eerst of dat u de Microsoft Kinect en Toolkit bibliotheken hebt geïmporteerd.
In MainWindow() activeren we de Kinect:
privé KinectSensor sensor;
Vervolgens wanneer het venster geladen gaan we om te beginnen met de Kinect kiezer om de Status van de kinect.
private void MainWindowLoaded (object afzender, RoutedEventArgs e)
{
var sensorStatus = new KinectSensorChooser();
sensorStatus.KinectChanged += KinectSensorChooserKinectChanged;
kinectChooser.KinectSensorChooser = sensorStatus; sensorStatus.Start();
}
De het label wordt bijgewerkt door de KinectSensorChooserKinectChanged, als gevolg van de schakelaar maken we in deze functie. Hier is ook het skelet geïnitialiseerd.
private void KinectSensorChooserKinectChanged (object afzender, KinectChangedEventArgs e)
{
Als (sensor! = null) sensor. SkeletonFrameReady-= KinectSkeletonFrameReady;
sensor = e.NewSensor;
Als (sensor == null) return;
schakelaar (Convert.ToString(e.NewSensor.Status))
{
kast 'Verbonden': KinectStatus.Content = "Connected"; breken;
kast "Verbinding verbroken": KinectStatus.Content = "Verbinding verbroken"; breken;
geval van 'Fout': KinectStatus.Content = "Fout"; breken;
geval van "NotReady": KinectStatus.Content = "Niet klaar"; breken;
geval van "NotPowered": KinectStatus.Content = "Niet aangedreven"; breken;
kast "Initialiseren": KinectStatus.Content = "Initialisatie"; breken;
standaard: KinectStatus.Content = "Undefined"; breken;
}
sensor. SkeletonStream.Enable(); sensor. SkeletonFrameReady += KinectSkeletonFrameReady;
}
Zodra we een tracking het skelet dat we voor de X-, Y- en Z kijken kunnen-coördinaten voor de specifieke punten op het skelet. In dit voorbeeld zijn we na de coördinaten van de handen van de gebruiker. We laten de waarden als tekst in het venster in onze textblocks. We vergelijken vervolgens de positie op de Z van de gebruikers heup naar de positie Z van hun hand. Als er boven een bepaalde drempel gaan we voor de behandeling van de gebruikers arm als zijnde 'verhoogde' en daarom druk aan het venster welke arm is.
private void KinectSkeletonFrameReady (object afzender, SkeletonFrameReadyEventArgs e)
{
var skeletten = nieuwe skelet [0];
met behulp van (var skeletonFrame = e.OpenSkeletonFrame())
{
Als (skeletonFrame! = null)
{
skeletten = nieuwe Skeleton[skeletonFrame.SkeletonArrayLength]; skeletonFrame.CopySkeletonDataTo(skeletons);
}
}
Als (skeletten. Lengte == 0) {terugkeer;}
var skel = skeletten. FirstOrDefault (x = > x.TrackingState == SkeletonTrackingState.Tracked);
Als (skel == null) {terugkeer;}
var beeld = skel. Joints[JointType.WristRight]; XValueRight.Text = rightHand.Position.X.ToString(CultureInfo.InvariantCulture); YValueRight.Text = rightHand.Position.Y.ToString(CultureInfo.InvariantCulture); ZValueRight.Text = rightHand.Position.Z.ToString(CultureInfo.InvariantCulture);
var links = skel. Joints[JointType.WristLeft]; XValueLeft.Text = leftHand.Position.X.ToString(CultureInfo.InvariantCulture); YValueLeft.Text = leftHand.Position.Y.ToString(CultureInfo.InvariantCulture); ZValueLeft.Text = leftHand.Position.Z.ToString(CultureInfo.InvariantCulture);
var centreHip = skel. Joints[JointType.HipCenter];
Als (centreHip.Position.Z - rightHand.Position.Z > 0.35)
{
RightRaised.Text = "Opgeheven";
}
anders als (centreHip.Position.Z - leftHand.Position.Z > 0.35)
{
LeftRaised.Text = "Opgeheven";
}
anders
{
LeftRaised.Text = "Verlaagd"; RightRaised.Text = "Verlaagd";
}
}
U kunt de 0.35 waarde wijzigen afhankelijk van de lengte van uw arm en hoe ver u wilt bereiken voordat het denkt uw arm dat wordt verhoogd.