private void KinectWatcherThread(object data) { while (true) { WaitHandle.WaitAll(new WaitHandle[] { SkeletonStream.NextFrameReadyEvent, ColorStream.NextFrameReadyEvent }, 0); if (this.ColorStream != null && this.ColorFrameReady != null && ColorFrameReady.GetInvocationList().Length > 0) { var args = new ImageFrameReadyEventArgs(); // Get the next colorframe. var frame = this.ColorStream.OpenNextFrame(); if (frame != null) { args.ImageFrame = frame; // Fire ColorFrameReady event. ColorFrameReady(this, args); } } if (this.DepthStream != null && this.DepthFrameReady != null && DepthFrameReady.GetInvocationList().Length > 0) { var args = new ImageFrameReadyEventArgs(); // Get the next depthframe. var frame = this.DepthStream.OpenNextFrame(); if (frame != null) { args.ImageFrame = frame; // Fire DepthFrameReady event. DepthFrameReady(this, args); } } if (this.SkeletonStream != null && this.SkeletonFrameReady != null && SkeletonFrameReady.GetInvocationList().Length > 0) { var args = new SkeletonFrameReadyEventArgs(); // Get the next frame of skeletons. var frame = this.SkeletonStream.OpenNextFrame(); if (frame != null) { args.SkeletonFrame = frame; // Fire SkeletonFrameReady event. SkeletonFrameReady(this, args); } } } }
private void sensor_SkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e) { Dispatcher.BeginInvoke(() => { var skeletons = (from s in e.SkeletonFrame.Skeletons where s.TrackingState == SkeletonTrackingState.Tracked select s).ToArray(); if (skeletons.Length > 0) { skeletonCanvas.Children.Clear(); var joints = skeletons[0].Joints; Draw(joints[JointType.Head], joints[JointType.ShoulderCenter]); Draw(joints[JointType.ShoulderCenter], joints[JointType.Spine]); Draw(joints[JointType.Spine], joints[JointType.HipCenter]); Draw(joints[JointType.HipCenter], joints[JointType.HipLeft]); Draw(joints[JointType.HipLeft], joints[JointType.KneeLeft]); Draw(joints[JointType.KneeLeft], joints[JointType.AnkleLeft]); Draw(joints[JointType.AnkleLeft], joints[JointType.FootLeft]); Draw(joints[JointType.HipCenter], joints[JointType.HipRight]); Draw(joints[JointType.HipRight], joints[JointType.KneeRight]); Draw(joints[JointType.KneeRight], joints[JointType.AnkleRight]); Draw(joints[JointType.AnkleRight], joints[JointType.FootRight]); Draw(joints[JointType.ShoulderCenter], joints[JointType.ShoulderLeft]); Draw(joints[JointType.ShoulderLeft], joints[JointType.ElbowLeft]); Draw(joints[JointType.ElbowLeft], joints[JointType.WristLeft]); Draw(joints[JointType.WristLeft], joints[JointType.HandLeft]); Draw(joints[JointType.ShoulderCenter], joints[JointType.ShoulderRight]); Draw(joints[JointType.ShoulderRight], joints[JointType.ElbowRight]); Draw(joints[JointType.ElbowRight], joints[JointType.WristRight]); Draw(joints[JointType.WristRight], joints[JointType.HandRight]); } }); }
private static void sensor_SkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e) { try { if (e.SkeletonFrame == null) return; // Get all tracked skeletons. var skeletons = (from s in e.SkeletonFrame.Skeletons where s.TrackingState == SkeletonTrackingState.Tracked select s).ToArray(); // Check moves for each tracked skeleton. foreach (var skeleton in skeletons) CheckMoves(skeleton); } catch (KinectException ex) { Deployment.Current.Dispatcher.BeginInvoke(() => { OnKinectException(null, ex.Message); }); } }
private static void SkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e) { try { if (e.SkeletonFrame == null) return; // Get all tracked skeletons. var newSkeletons = (from s in e.SkeletonFrame.Skeletons where s.TrackingState == SkeletonTrackingState.Tracked select s).ToArray(); // Get all skeletons that left the frame. var leftSkeletons = new List<Skeleton>(); foreach (var trackedSkeleton in trackedSkeletons) { if (!newSkeletons.Any(n => n.TrackingID == trackedSkeleton.TrackingID)) leftSkeletons.Add(trackedSkeleton); } // Get all skeletons that entered the frame. var enteredSkeletons = new List<Skeleton>(); foreach (var newSkeleton in newSkeletons) { if (!trackedSkeletons.Any(t => t.TrackingID == newSkeleton.TrackingID)) enteredSkeletons.Add(newSkeleton); } // Fire OnPersonLeft event for each skeleton that left the frame. if (OnPersonLeft != null) foreach (var skeleton in leftSkeletons) Deployment.Current.Dispatcher.BeginInvoke(() => { OnPersonLeft(Sensor, new PersonEventArgs(skeleton.TrackingID)); }); // Fire OnPersonEntered event for each skeleton that entered the frame. if (OnPersonEntered != null) foreach (var skeleton in enteredSkeletons) Deployment.Current.Dispatcher.BeginInvoke(() => { OnPersonEntered(Sensor, new PersonEventArgs(skeleton.TrackingID)); }); trackedSkeletons = newSkeletons; // Check moves for each tracked skeleton. foreach (var skeleton in newSkeletons) CheckMoves(skeleton); } catch (KinectException ex) { if (OnKinectException != null) Deployment.Current.Dispatcher.BeginInvoke(() => { OnKinectException(null, ex.Message); }); } }