private TrackedHandJoint ConvertHandJointKindToTrackedHandJoint(HandJointKind handJointKind)
        {
            switch (handJointKind)
            {
            case HandJointKind.Palm: return(TrackedHandJoint.Palm);

            case HandJointKind.Wrist: return(TrackedHandJoint.Wrist);

            case HandJointKind.ThumbMetacarpal: return(TrackedHandJoint.ThumbMetacarpalJoint);

            case HandJointKind.ThumbProximal: return(TrackedHandJoint.ThumbProximalJoint);

            case HandJointKind.ThumbDistal: return(TrackedHandJoint.ThumbDistalJoint);

            case HandJointKind.ThumbTip: return(TrackedHandJoint.ThumbTip);

            case HandJointKind.IndexMetacarpal: return(TrackedHandJoint.IndexMetacarpal);

            case HandJointKind.IndexProximal: return(TrackedHandJoint.IndexKnuckle);

            case HandJointKind.IndexIntermediate: return(TrackedHandJoint.IndexMiddleJoint);

            case HandJointKind.IndexDistal: return(TrackedHandJoint.IndexDistalJoint);

            case HandJointKind.IndexTip: return(TrackedHandJoint.IndexTip);

            case HandJointKind.MiddleMetacarpal: return(TrackedHandJoint.MiddleMetacarpal);

            case HandJointKind.MiddleProximal: return(TrackedHandJoint.MiddleKnuckle);

            case HandJointKind.MiddleIntermediate: return(TrackedHandJoint.MiddleMiddleJoint);

            case HandJointKind.MiddleDistal: return(TrackedHandJoint.MiddleDistalJoint);

            case HandJointKind.MiddleTip: return(TrackedHandJoint.MiddleTip);

            case HandJointKind.RingMetacarpal: return(TrackedHandJoint.RingMetacarpal);

            case HandJointKind.RingProximal: return(TrackedHandJoint.RingKnuckle);

            case HandJointKind.RingIntermediate: return(TrackedHandJoint.RingMiddleJoint);

            case HandJointKind.RingDistal: return(TrackedHandJoint.RingDistalJoint);

            case HandJointKind.RingTip: return(TrackedHandJoint.RingTip);

            case HandJointKind.LittleMetacarpal: return(TrackedHandJoint.PinkyMetacarpal);

            case HandJointKind.LittleProximal: return(TrackedHandJoint.PinkyKnuckle);

            case HandJointKind.LittleIntermediate: return(TrackedHandJoint.PinkyMiddleJoint);

            case HandJointKind.LittleDistal: return(TrackedHandJoint.PinkyDistalJoint);

            case HandJointKind.LittleTip: return(TrackedHandJoint.PinkyTip);

            default: return(TrackedHandJoint.None);
            }
        }
        /// <summary>
        /// Converts a native <see cref="HandJointKind"/> to XRTK <see cref="TrackedHandJoint"/>.
        /// </summary>
        /// <param name="handJointKind">The native <see cref="HandJointKind"/> value to convert.</param>
        /// <returns><see cref="TrackedHandJoint"/> value equivalent to <paramref name="handJointKind"/>.</returns>
        public static TrackedHandJoint ToTrackedHandJoint(this HandJointKind handJointKind)
        {
            switch (handJointKind)
            {
            case HandJointKind.Palm:
                return(TrackedHandJoint.Palm);

            case HandJointKind.Wrist:
                return(TrackedHandJoint.Wrist);

            case HandJointKind.ThumbMetacarpal:
                return(TrackedHandJoint.ThumbMetacarpal);

            case HandJointKind.ThumbProximal:
                return(TrackedHandJoint.ThumbProximal);

            case HandJointKind.ThumbDistal:
                return(TrackedHandJoint.ThumbDistal);

            case HandJointKind.ThumbTip:
                return(TrackedHandJoint.ThumbTip);

            case HandJointKind.IndexMetacarpal:
                return(TrackedHandJoint.IndexMetacarpal);

            case HandJointKind.IndexProximal:
                return(TrackedHandJoint.IndexProximal);

            case HandJointKind.IndexIntermediate:
                return(TrackedHandJoint.IndexIntermediate);

            case HandJointKind.IndexDistal:
                return(TrackedHandJoint.IndexDistal);

            case HandJointKind.IndexTip:
                return(TrackedHandJoint.IndexTip);

            case HandJointKind.MiddleMetacarpal:
                return(TrackedHandJoint.MiddleMetacarpal);

            case HandJointKind.MiddleProximal:
                return(TrackedHandJoint.MiddleProximal);

            case HandJointKind.MiddleIntermediate:
                return(TrackedHandJoint.MiddleIntermediate);

            case HandJointKind.MiddleDistal:
                return(TrackedHandJoint.MiddleDistal);

            case HandJointKind.MiddleTip:
                return(TrackedHandJoint.MiddleTip);

            case HandJointKind.RingMetacarpal:
                return(TrackedHandJoint.RingMetacarpal);

            case HandJointKind.RingProximal:
                return(TrackedHandJoint.RingProximal);

            case HandJointKind.RingIntermediate:
                return(TrackedHandJoint.RingIntermediate);

            case HandJointKind.RingDistal:
                return(TrackedHandJoint.RingDistal);

            case HandJointKind.RingTip:
                return(TrackedHandJoint.RingTip);

            case HandJointKind.LittleMetacarpal:
                return(TrackedHandJoint.LittleMetacarpal);

            case HandJointKind.LittleProximal:
                return(TrackedHandJoint.LittleProximal);

            case HandJointKind.LittleIntermediate:
                return(TrackedHandJoint.LittleIntermediate);

            case HandJointKind.LittleDistal:
                return(TrackedHandJoint.LittleDistal);

            case HandJointKind.LittleTip:
                return(TrackedHandJoint.LittleTip);

            default:
                throw new ArgumentOutOfRangeException($"{nameof(HandJointKind)}.{handJointKind} could not be mapped to {nameof(TrackedHandJoint)}");
            }
        }