Пример #1
0
    /// used for updating every frame
    /// @note While we are still steady (i.e. we haven't gotten a "not steady" event) we update
    /// the time and frame every frame!
    public override void UpdateFrame()
    {
        if (m_context == null || m_context.UserSkeletonValid == false)
        {
            return; // no data;
        }
        NISkeletonTracker tracker = m_pointTracker as NISkeletonTracker;

        if (tracker.Valid == false)
        {
            return; // no one to track.
        }
        NISelectedPlayer player = tracker.GetTrackedPlayer();

        if (player == null || player.Valid == false)
        {
            return;
        }
        NIUserAndSkeleton.NIPoseDetectionStateStatus curStatus = new NIUserAndSkeleton.NIPoseDetectionStateStatus();
        if (m_context.UserGenrator.GetPoseStatus(player.OpenNIUserID, m_poseName, ref curStatus) == false)
        {
            return; // we do not have good pose information
        }
        if (curStatus.m_eState != PoseDetectionState.InPose)
        {
            return;
        }
        if (curStatus.m_timePoseHeld >= m_timeToHoldPose)
        {
            InternalFireDetectEvent();
        }
    }
Пример #2
0
    // protected methods
    protected override bool InternalInit(NIPointTracker hand)
    {
        NISkeletonTracker curHand = hand as NISkeletonTracker;

        if (curHand == null)
        {
            return(false);
        }
        if (m_context == null || m_context.UserSkeletonValid == false)
        {
            return(false);
        }
        NISelectedPlayer player = curHand.GetTrackedPlayer();

        if (player == null)
        {
            return(false); // no player
        }
        player.m_userChangeEventHandler += PlayerUserChangeHandler;
        if (player.Valid)
        {
            validRequestedPoseDetection = m_context.UserGenrator.RequestPoseDetection(m_poseName, player.OpenNIUserID);
            return(validRequestedPoseDetection);
        }
        validRequestedPoseDetection = false;
        return(true);
    }
    // protected methods

    /// this method tries to fill a new point on each of the relevant joints.
    /// It returns true if it succeed and false otherwise
    /// @note it will fail if even one of the points has a low confidence!
    /// @return true on success, false on failure.
    protected bool FillPoints()
    {
        // first we find a reference to the skeleton capability
        NISkeletonTracker hand = m_pointTracker as NISkeletonTracker;

        if (hand == null)
        {
            return(false); // no hand to track
        }
        NISelectedPlayer player = hand.GetTrackedPlayer();

        if (player == null || player.Valid == false || player.Tracking == false)
        {
            return(false); // no player to work with...
        }
        // We need to figure out if we have a good confidence on all joints

        SkeletonJointPosition rightHand;
        SkeletonJointPosition leftHand;
        SkeletonJointPosition rightElbow;
        SkeletonJointPosition leftElbow;

        if (player.GetSkeletonJointPosition(SkeletonJoint.RightHand, out rightHand) == false || rightHand.Confidence <= 0.5f)
        {
            return(false);
        }
        if (player.GetSkeletonJointPosition(SkeletonJoint.LeftHand, out leftHand) == false || leftHand.Confidence <= 0.5f)
        {
            return(false);
        }
        if (player.GetSkeletonJointPosition(SkeletonJoint.RightElbow, out rightElbow) == false || rightElbow.Confidence <= 0.5f)
        {
            return(false);
        }
        if (player.GetSkeletonJointPosition(SkeletonJoint.LeftElbow, out leftElbow) == false || leftElbow.Confidence <= 0.5f)
        {
            return(false);
        }
        Vector3 pos = NIConvertCoordinates.ConvertPos(rightHand.Position);

        m_pointsRightHand.AddPoint(ref pos);
        pos = NIConvertCoordinates.ConvertPos(leftHand.Position);
        m_pointsLeftHand.AddPoint(ref pos);
        pos = NIConvertCoordinates.ConvertPos(rightElbow.Position);
        m_pointsRightElbow.AddPoint(ref pos);
        pos = NIConvertCoordinates.ConvertPos(leftElbow.Position);
        m_pointsLeftElbow.AddPoint(ref pos);
        return(true);
    }
Пример #4
0
 /// Release the gesture
 public override void ReleaseGesture()
 {
     if (m_context != null && m_context.UserSkeletonValid)
     {
         NISkeletonTracker tracker = m_pointTracker as NISkeletonTracker;
         if (tracker.Valid)
         {
             NISelectedPlayer player = tracker.GetTrackedPlayer();
             if (player != null && player.Valid && validRequestedPoseDetection)
             {
                 m_context.UserGenrator.ReleasePoseDetection(m_poseName, player.OpenNIUserID);
             }
         }
     }
     m_context      = null;
     m_poseName     = "";
     m_pointTracker = null;
 }
Пример #5
0
    /// This is true if the gesture is in the middle of doing (i.e. it has detected but not gone out of the gesture).
    /// for our purposes this means the steady event has occurred and the unsteady has not occurred yet
    /// @return a value between 0 and 1. 0 means no pose, 1 means the pose has been detected and held
    /// for a while. a value in the middle means the pose has been detected and has been held this
    /// portion of the time required to fire the trigger (@ref m_timeToHoldPose).
    public override float GestureInProgress()
    {
        if (m_context == null || m_context.UserSkeletonValid == false)
        {
            return(0.0f); // no data;
        }
        NISkeletonTracker tracker = m_pointTracker as NISkeletonTracker;

        if (tracker.Valid == false)
        {
            return(0.0f); // no one to track.
        }
        NISelectedPlayer player = tracker.GetTrackedPlayer();

        if (player == null || player.Valid == false)
        {
            return(0.0f);
        }
        NIUserAndSkeleton.NIPoseDetectionStateStatus curStatus = new NIUserAndSkeleton.NIPoseDetectionStateStatus();
        if (m_context.UserGenrator.GetPoseStatus(player.OpenNIUserID, m_poseName, ref curStatus) == false)
        {
            return(0.0f); // we do not have good pose information
        }
        if (curStatus.m_eState != PoseDetectionState.InPose)
        {
            return(0.0f);
        }
        if (curStatus.m_timePoseHeld < 0)
        {
            return(0.0f);
        }
        if (curStatus.m_timePoseHeld >= m_timeToHoldPose)
        {
            return(1.0f);
        }
        return(curStatus.m_timePoseHeld / m_timeToHoldPose);
    }