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