KinectV2Core.KinectCoreV2.skeletonReader_FrameArrived C# (CSharp) Method

skeletonReader_FrameArrived() public method

public skeletonReader_FrameArrived ( object sender, BodyFrameArrivedEventArgs e ) : void
sender object
e BodyFrameArrivedEventArgs
return void
        void skeletonReader_FrameArrived(object sender, BodyFrameArrivedEventArgs e)
        {
            using (BodyFrame skelFrame = e.FrameReference.AcquireFrame())
            {
                if (skelFrame != null)
                {
                    Body[] skeletons = new Body[skelFrame.BodyCount];
                    skelFrame.GetAndRefreshBodyData(skeletons);
                    DateTime now = DateTime.UtcNow;

                    //Convert from Kinect v2 skeletons to KVR skeletons
                    KinectBase.KinectSkeleton[] kvrSkeletons = new KinectBase.KinectSkeleton[skelFrame.BodyCount];
                    for (int i = 0; i < skelFrame.BodyCount; i++)
                    {
                        kvrSkeletons[i] = new KinectBase.KinectSkeleton();
                        kvrSkeletons[i].Position = new Point3D(skeletons[i].Joints[JointType.SpineBase].Position.X, skeletons[i].Joints[JointType.SpineBase].Position.Y, skeletons[i].Joints[JointType.SpineBase].Position.Z);
                        kvrSkeletons[i].SkeletonTrackingState = convertTrackingState(skeletons[i].IsTracked);
                        kvrSkeletons[i].TrackingId = (int)skeletons[i].TrackingId;
                        //kvrSkeletons[i].utcSampleTime = DateTime.UtcNow;
                        kvrSkeletons[i].sourceKinectID = kinectID;

                        for (int j = 0; j < Body.JointCount; j++)
                        {
                            KinectBase.Joint newJoint = new KinectBase.Joint();
                            newJoint.JointType = convertJointType(skeletons[i].Joints[(JointType)j].JointType);
                            newJoint.Position = convertJointPosition(skeletons[i].Joints[(JointType)j].Position);
                            newJoint.TrackingState = convertTrackingState(skeletons[i].Joints[(JointType)j].TrackingState);
                            newJoint.Orientation = convertJointOrientation(skeletons[i].JointOrientations[(JointType)j].Orientation);
                            newJoint.utcTime = now;

                            //Tracking confidence only exists for the hand states, so set those and leave the rest as unknown
                            if (newJoint.JointType == KinectBase.JointType.HandLeft)
                            {
                                newJoint.Confidence = convertTrackingConfidence(skeletons[i].HandLeftConfidence);
                            }
                            else if (newJoint.JointType == KinectBase.JointType.HandRight)
                            {
                                newJoint.Confidence = convertTrackingConfidence(skeletons[i].HandRightConfidence);
                            }
                            else
                            {
                                newJoint.Confidence = KinectBase.TrackingConfidence.Unknown;
                            }

                            kvrSkeletons[i].skeleton[newJoint.JointType] = newJoint;
                        }

                        kvrSkeletons[i].rightHandClosed = convertHandState(skeletons[i].HandRightState);
                        kvrSkeletons[i].leftHandClosed = convertHandState(skeletons[i].HandLeftState);
                    }

                    //Add the skeleton data to the event handler and throw the event
                    KinectBase.SkeletonEventArgs skelE = new KinectBase.SkeletonEventArgs();
                    skelE.skeletons = kvrSkeletons;
                    skelE.kinectID = kinectID;

                    OnSkeletonChanged(skelE);
                }
            }
        }