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)); }
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; } }