コード例 #1
0
        private SerializableBody PrepareBody(Body body, SerializableBody lastBody)
        {
            MovingState movingState = IsMoving(body, lastBody);

            CalibrationState calibrationState = CalibrationState.Uncalibrated;
            RaisedHand       raisedHand       = RaisedHand.None;
            bool             gestureDetected  = false;

            if (lastBody != null)
            {
                switch (lastBody.CalibrationState)
                {
                // raise hand
                case CalibrationState.Uncalibrated:
                    gestureDetected  = false;
                    raisedHand       = IsRaisedHand(body);
                    calibrationState = (raisedHand == RaisedHand.None) ? CalibrationState.Uncalibrated : CalibrationState.RaisedHand;
                    break;

                // wait to stand
                case CalibrationState.RaisedHand:
                    if (lastBody.GestureDetected)
                    {
                        gestureDetected  = false;
                        calibrationState = CalibrationState.SavedPose;
                        raisedHand       = lastBody.RaisedHand;
                        break;
                    }

                    if (movingState == MovingState.Stand)
                    {
                        gestureDetected  = true;
                        calibrationState = CalibrationState.RaisedHand;
                        raisedHand       = lastBody.RaisedHand;
                        // show notification
                        this.mainWindow.Dispatcher.Invoke(
                            new Action(() =>
                        {
                            Storyboard sb = this.mainWindow.notificationEllipse.FindResource("notificationStoryBoard") as Storyboard;
                            sb.Begin();
                        }));
                    }
                    else
                    {
                        gestureDetected  = false;
                        raisedHand       = IsRaisedHand(body);
                        calibrationState = (raisedHand == RaisedHand.None) ? CalibrationState.Uncalibrated : CalibrationState.RaisedHand;
                    }
                    break;

                // lower hand
                case CalibrationState.SavedPose:
                    gestureDetected  = false;
                    raisedHand       = IsRaisedHand(body);
                    calibrationState = (raisedHand == RaisedHand.None) ? CalibrationState.Uncalibrated : CalibrationState.SavedPose;
                    break;
                }
            }

            return(new SerializableBody(body, movingState, calibrationState, raisedHand, gestureDetected));
        }
コード例 #2
0
 public SerializableBody(Body body, MovingState movingState, CalibrationState calibrationState, RaisedHand raisedHand, bool gestureDetected)
 {
     if (body != null)
     {
         this.IsTracked        = body.IsTracked;
         this.Joints           = body.Joints;
         this.MovingState      = movingState;
         this.CalibrationState = calibrationState;
         this.RaisedHand       = raisedHand;
         this.GestureDetected  = gestureDetected;
         this.TrackingID       = body.TrackingId;
     }
 }