public bool GetLeftHandInteractionBox(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.ShoulderRight].trackingState != KinectInterop.TrackingState.NotTracked &&
bodyData.joint[(int)KinectInterop.JointType.HipLeft].trackingState != KinectInterop.TrackingState.NotTracked)
{
rightTopFront.x = bodyData.joint[(int)KinectInterop.JointType.ShoulderRight].position.x;
leftBotBack.x = rightTopFront.x - 2 * (rightTopFront.x - bodyData.joint[(int)KinectInterop.JointType.HipLeft].position.x);
}
else
{
bResult = bValidBox;
}
if (bodyData.joint[(int)KinectInterop.JointType.HipRight].trackingState != KinectInterop.TrackingState.NotTracked &&
bodyData.joint[(int)KinectInterop.JointType.ShoulderRight].trackingState != KinectInterop.TrackingState.NotTracked)
{
leftBotBack.y = bodyData.joint[(int)KinectInterop.JointType.HipRight].position.y;
rightTopFront.y = bodyData.joint[(int)KinectInterop.JointType.ShoulderRight].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;
}