Example #1
0
 public UserInfo(string authorizationCode, string userId, string email, string displayName, string idToken, UserDetectionStatus userDetectionStatus)
 {
     this.authorizationCode   = authorizationCode;
     this.userId              = userId;
     this.email               = email;
     this.displayName         = displayName;
     this.idToken             = idToken;
     this.userDetectionStatus = userDetectionStatus;
 }
Example #2
0
 public UserDetectionStatusChangeEventArgs(UserDetectionStatus userDetectionStatus)
 {
     this.userDetectionStatus = userDetectionStatus;
 }
Example #3
0
        private void SensorSkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e)
        {
            Skeleton[] skeletons = new Skeleton[0];

            // Retreiving skeletons from event args
            using (SkeletonFrame skeletonFrame = e.OpenSkeletonFrame())
            {
                if (skeletonFrame != null)
                {
                    skeletons = new Skeleton[skeletonFrame.SkeletonArrayLength];
                    skeletonFrame.CopySkeletonDataTo(skeletons);
                }
            }

            // Initializing joints (wrist, hip and shoulder for each side)
            Joint rightWrist = new Joint(), rightShoulder = new Joint(), rightHip = new Joint(), leftWrist = new Joint(), leftShoulder = new Joint(), leftHip = new Joint();

            // Seaching for joints
            int counter = -1; // Minus one is when we don't have any valid skeleton
            foreach (Skeleton s in skeletons)
            {
                // Getting the first tracked skeleton from skeletons list
                if (s.TrackingState == SkeletonTrackingState.Tracked)
                {
                    counter = 0; // Between 0 and 6 excluded is when the skeleton is incomplete
                    // Trying to get the 6 joints we want (wrist, hip and shoulder for each side)
                    foreach (Joint j in s.Joints)
                    {
                        // We only get the data if it is flagged as "tracked"
                        if (j.TrackingState == JointTrackingState.Tracked)
                        {
                            switch (j.JointType)
                            {
                                case JointType.WristRight: rightWrist = j; counter++; break;
                                case JointType.ShoulderRight: rightShoulder = j; counter++; break;
                                case JointType.HipRight: rightHip = j; counter++; break;
                                case JointType.WristLeft: leftWrist = j; counter++; break;
                                case JointType.ShoulderLeft: leftShoulder = j; counter++; break;
                                case JointType.HipLeft: leftHip = j; counter++; break;
                            }
                        }

                    }
                    break;
                }
            }

            // If we managed to get the 6 joints we wanted, we continue calculation
            if (counter == 6)
            {
                // Getting angles in radian from joints (inverting left angle because it will be negative
                double rightSideAngleRadian = AngleFromSkeletonPoints(rightHip.Position, rightShoulder.Position, rightWrist.Position);
                double leftSideAngleRadian = AngleFromSkeletonPoints(leftWrist.Position, leftShoulder.Position, leftHip.Position);

                // Converting to degrees (simplier to work with)
                double rightSideAngleDegree = 180.0d * (rightSideAngleRadian) / System.Math.PI;
                double leftSideAngleDegree = 180.0d * (leftSideAngleRadian) / System.Math.PI;

                double invertedRightSideAngleDegree = 180 - rightSideAngleDegree;
                double invertedLeftSideAngleDegree = 180 - leftSideAngleDegree;

                // Triggering NewControlDataIsReady event
                if (NewControlDataIsReady != null)
                {
                    NewControlDataIsReady(this, new ControlDataReadyEventArgs(PowerFromAngle(invertedRightSideAngleDegree), PowerFromAngle(invertedLeftSideAngleDegree)));
                }

                // Triggering UserDetectionStatusChanged if currentUserDetectionStatus changed
                if (currentUserDetectionStatus!=UserDetectionStatus.Detected)
                {
                    currentUserDetectionStatus = UserDetectionStatus.Detected;
                    if (UserDetectionStatusChanged != null)
                    {
                        UserDetectionStatusChanged(this, new UserDetectionStatusChangeEventArgs(UserDetectionStatus.Detected));
                    }
                }

            }
            else if (counter > 0) // Skeleton is incomplete
            {
                // Triggering UserDetectionStatusChanged if currentUserDetectionStatus changed
                if (currentUserDetectionStatus != UserDetectionStatus.PartiallyDetected)
                {
                    currentUserDetectionStatus = UserDetectionStatus.PartiallyDetected;
                    if (UserDetectionStatusChanged != null)
                    {
                        UserDetectionStatusChanged(this, new UserDetectionStatusChangeEventArgs(UserDetectionStatus.PartiallyDetected));
                    }
                }
            }
            else // No skeleton at all
            {
                // Triggering UserDetectionStatusChanged if currentUserDetectionStatus changed
                if (currentUserDetectionStatus != UserDetectionStatus.NotDetected)
                {
                    currentUserDetectionStatus = UserDetectionStatus.NotDetected;
                    if (UserDetectionStatusChanged != null)
                    {
                        UserDetectionStatusChanged(this, new UserDetectionStatusChangeEventArgs(UserDetectionStatus.NotDetected));
                    }
                }
            }
        }