public bool GetRightHandInteractionBox(Int64 userId, ref Vector3 leftBotBack, ref Vector3 rightTopFront, bool bValidBox)
{
if (dictUserIdToIndex.ContainsKey(userId))
{
int index = dictUserIdToIndex[userId];
if (index >= 0 && index < sensorData.bodyCount &&
bodyFrame.bodyData[index].bIsTracked != 0)
{
KinectInterop.BodyData bodyData = bodyFrame.bodyData[index];
bool bResult = true;
if (bodyData.joint[(int)KinectInterop.JointType.ShoulderLeft].trackingState != KinectInterop.TrackingState.NotTracked &&
bodyData.joint[(int)KinectInterop.JointType.HipRight].trackingState != KinectInterop.TrackingState.NotTracked)
{
leftBotBack.x = bodyData.joint[(int)KinectInterop.JointType.ShoulderLeft].position.x;
rightTopFront.x = leftBotBack.x + 2 * (bodyData.joint[(int)KinectInterop.JointType.HipRight].position.x - leftBotBack.x);
}
else
{
bResult = bValidBox;
}
if (bodyData.joint[(int)KinectInterop.JointType.HipLeft].trackingState != KinectInterop.TrackingState.NotTracked &&
bodyData.joint[(int)KinectInterop.JointType.ShoulderLeft].trackingState != KinectInterop.TrackingState.NotTracked)
{
leftBotBack.y = bodyData.joint[(int)KinectInterop.JointType.HipLeft].position.y;
rightTopFront.y = bodyData.joint[(int)KinectInterop.JointType.ShoulderLeft].position.y;
float fDelta = (rightTopFront.y - leftBotBack.y) * 0.35f; // * 2 / 3;
leftBotBack.y += fDelta;
rightTopFront.y += fDelta;
}
else
{
bResult = bValidBox;
}
if (bodyData.joint[(int)KinectInterop.JointType.SpineBase].trackingState != KinectInterop.TrackingState.NotTracked)
{
leftBotBack.z = bodyData.joint[(int)KinectInterop.JointType.SpineBase].position.z;
rightTopFront.z = leftBotBack.z - 0.5f;
}
else
{
bResult = bValidBox;
}
return bResult;
}
}
return false;
}