Example #1
0
        public Gesture(GestureType type, IGestureSegment[] segments)
        {
            _type = type;
            _segments = segments;

            _name = type.ToString();
        }
Example #2
0
        /// <summary>
        /// Adds the specified gesture for recognition.
        /// </summary>
        /// <param name="type">The predefined <see cref="GestureType" />.</param>
        public void AddGesture(GestureType type)
        {
            IGestureSegment[] segments = null;

            // DEVELOPERS: If you add a new predefined gesture with a new GestureType,
            // simply add the proper segments to the switch statement here.
            switch (type)
            {
                case GestureType.SwipeRight:
                    segments = new IGestureSegment[3];

                    segments[0] = new SwipeRightSegment1();
                    segments[1] = new SwipeRightSegment2();
                    segments[2] = new SwipeRightSegment3();
                    break;

                case GestureType.All:
                case GestureType.None:
                default:
                    break;
            }

            if (type != GestureType.None)
            {
                Gesture gesture = new Gesture(type, segments);
                gesture.GestureRecognized += OnGestureRecognized;

                _gestures.Add(gesture);
            }
        }
Example #3
0
        /// <summary>
        /// Adds the specified gesture for recognition.
        /// </summary>
        /// <param name="type">The predefined <see cref="GestureType" />.</param>
        public void AddGesture(GestureType type)
        {
            // Check whether the gesure is already added.
            if (_gestures.Where(g => g.GestureType == type).Count() > 0)
            {
                return;
            }

            IGestureSegment[] segments = null;

            // DEVELOPERS: If you add a new predefined gesture with a new GestureType,
            // simply add the proper segments to the switch statement here.
            switch (type)
            {
            case GestureType.JoinedHands:
                segments = new IGestureSegment[20];

                JoinedHandsSegment1 joinedhandsSegment = new JoinedHandsSegment1();
                for (int i = 0; i < 20; i++)
                {
                    segments[i] = joinedhandsSegment;
                }
                break;

            case GestureType.Menu:
                segments = new IGestureSegment[20];

                MenuSegment1 menuSegment = new MenuSegment1();
                for (int i = 0; i < 20; i++)
                {
                    segments[i] = menuSegment;
                }
                break;
            //case GestureType.SwipeDown:
            //    segments = new IGestureSegment[3];

            //    segments[0] = new SwipeDownSegment1();
            //    segments[1] = new SwipeDownSegment2();
            //    segments[2] = new SwipeDownSegment3();
            //    break;
            //case GestureType.SwipeLeft:
            //    segments = new IGestureSegment[3];

            //    segments[0] = new SwipeLeftSegment1();
            //    segments[1] = new SwipeLeftSegment2();
            //    segments[2] = new SwipeLeftSegment3();
            //    break;
            //case GestureType.SwipeRight:
            //    segments = new IGestureSegment[3];

            //    segments[0] = new SwipeRightSegment1();
            //    segments[1] = new SwipeRightSegment2();
            //    segments[2] = new SwipeRightSegment3();
            //    break;
            //case GestureType.SwipeUp:
            //    segments = new IGestureSegment[3];

            //    segments[0] = new SwipeUpSegment1();
            //    segments[1] = new SwipeUpSegment2();
            //    segments[2] = new SwipeUpSegment3();
            //    break;

            case GestureType.SwipeDown:
                segments = new IGestureSegment[2];

                segments[0] = new SwipeUpSegment2();
                segments[1] = new SwipeUpSegment1();
                //segments[2] = new SwipeUpSegment1();
                break;

            case GestureType.SwipeUp:
                segments = new IGestureSegment[2];

                segments[0] = new SwipeUpSegment1();
                segments[1] = new SwipeUpSegment2();
                //segments[2] = new SwipeUpSegment3();
                break;

            case GestureType.SwipeLeft:
                segments = new IGestureSegment[2];

                segments[0] = new SwipeLeftSegment1();
                segments[1] = new SwipeLeftSegment2();
                //segments[2] = new SwipeLeftSegment3();
                break;

            case GestureType.SwipeRight:
                segments = new IGestureSegment[2];

                segments[0] = new SwipeLeftSegment2();
                segments[1] = new SwipeLeftSegment1();
                //segments[2] = new SwipeLeftSegment1();
                break;

            case GestureType.WaveLeft:
                segments = new IGestureSegment[6];

                WaveLeftSegment1 waveLeftSegment1 = new WaveLeftSegment1();
                WaveLeftSegment2 waveLeftSegment2 = new WaveLeftSegment2();

                segments[0] = waveLeftSegment1;
                segments[1] = waveLeftSegment2;
                segments[2] = waveLeftSegment1;
                segments[3] = waveLeftSegment2;
                segments[4] = waveLeftSegment1;
                segments[5] = waveLeftSegment2;
                break;

            case GestureType.WaveRight:
                segments = new IGestureSegment[6];

                WaveRightSegment1 waveRightSegment1 = new WaveRightSegment1();
                WaveRightSegment2 waveRightSegment2 = new WaveRightSegment2();

                segments[0] = waveRightSegment1;
                segments[1] = waveRightSegment2;
                segments[2] = waveRightSegment1;
                segments[3] = waveRightSegment2;
                segments[4] = waveRightSegment1;
                segments[5] = waveRightSegment2;
                break;

            case GestureType.ZoomIn:
                segments = new IGestureSegment[3];

                segments[0] = new ZoomSegment1();
                segments[1] = new ZoomSegment2();
                segments[2] = new ZoomSegment3();
                break;

            case GestureType.ZoomOut:
                segments = new IGestureSegment[3];

                segments[0] = new ZoomSegment3();
                segments[1] = new ZoomSegment2();
                segments[2] = new ZoomSegment1();
                break;

            default:
                break;
            }

            if (segments != null)
            {
                Gesture gesture = new Gesture(type, segments);
                gesture.GestureRecognized += OnGestureRecognized;

                _gestures.Add(gesture);
            }
        }
Example #4
0
 /// <summary>
 /// Initializes a new instance of <see cref="Gesture"/> with the specified type and segments.
 /// </summary>
 /// <param name="type">The type of gesture.</param>
 /// <param name="segments">The segments of the gesture.</param>
 public Gesture(GestureType type, IGestureSegment[] segments)
 {
     GestureType = type;
     Segments = segments;
 }
        private void AddStatue(Statues name)
        {
            IGestureSegment[] segments = null;
            switch (name)
            {
            case Statues.HandUp:
                segments = new IGestureSegment[NB_FRAME];
                for (int i = 0; i < NB_FRAME; i++)
                {
                    segments[i] = new HandUpSegment();
                }
                break;

            case Statues.HandRight:
                segments = new IGestureSegment[NB_FRAME];
                for (int i = 0; i < NB_FRAME; i++)
                {
                    segments[i] = new HandRightSegment();
                }
                break;

            case Statues.HandLeft:
                segments = new IGestureSegment[NB_FRAME];
                for (int i = 0; i < NB_FRAME; i++)
                {
                    segments[i] = new HandLeftSegment();
                }
                break;

            case Statues.HandBottom:
                segments = new IGestureSegment[NB_FRAME];
                for (int i = 0; i < NB_FRAME; i++)
                {
                    segments[i] = new HandBottomSegment();
                }
                break;

            case Statues.Reset:
                segments = new IGestureSegment[NB_FRAME];
                for (int i = 0; i < NB_FRAME; i++)
                {
                    segments[i] = new ResetSegment();
                }
                break;

            case Statues.Jump:
                segments = new IGestureSegment[NB_FRAME];
                for (int i = 0; i < NB_FRAME; i++)
                {
                    segments[i] = new JumpSegment();
                }
                break;

            case Statues.TurnRight:
                segments = new IGestureSegment[NB_FRAME];
                for (int i = 0; i < NB_FRAME; i++)
                {
                    segments[i] = new TurnRightSegment();
                }
                break;

            case Statues.TurnLeft:
                segments = new IGestureSegment[NB_FRAME];
                for (int i = 0; i < NB_FRAME; i++)
                {
                    segments[i] = new TurnLeftSegment();
                }
                break;

            case Statues.OpenRepeat:
                segments = new IGestureSegment[NB_FRAME];
                for (int i = 0; i < NB_FRAME; i++)
                {
                    segments[i] = new OpenRepeatSegment();
                }
                break;

            case Statues.CloseRepeat:
                segments = new IGestureSegment[NB_FRAME];
                for (int i = 0; i < NB_FRAME; i++)
                {
                    segments[i] = new CloseRepeatSegment();
                }
                break;

            case Statues.Stop:
                segments = new IGestureSegment[15];
                for (int i = 0; i < 15; i++)
                {
                    segments[i] = new StopSegment();
                }
                break;

            case Statues.GreenFlag:
                segments = new IGestureSegment[15];
                for (int i = 0; i < 15; i++)
                {
                    segments[i] = new GreenFlagSegment();
                }
                break;

            case Statues.Grow:
                segments = new IGestureSegment[NB_FRAME];
                for (int i = 0; i < NB_FRAME; i++)
                {
                    segments[i] = new GrowSegment();
                }
                break;

            case Statues.Shrink:
                segments = new IGestureSegment[NB_FRAME];
                for (int i = 0; i < NB_FRAME; i++)
                {
                    segments[i] = new ShrinkSegment();
                }
                break;

            case Statues.ChangeScene:
                segments = new IGestureSegment[NB_FRAME];
                for (int i = 0; i < NB_FRAME; i++)
                {
                    segments[i] = new ChangeSceneSegment();
                }
                break;

            case Statues.NormalSize:
                segments = new IGestureSegment[NB_FRAME];
                for (int i = 0; i < NB_FRAME; i++)
                {
                    segments[i] = new NormalSizeSegment();
                }
                break;

            case Statues.Show:
                segments = new IGestureSegment[NB_FRAME];
                for (int i = 0; i < NB_FRAME; i++)
                {
                    segments[i] = new ShowSegment();
                }
                break;

            case Statues.Hide:
                segments = new IGestureSegment[NB_FRAME];
                for (int i = 0; i < NB_FRAME; i++)
                {
                    segments[i] = new HideSegment();
                }
                break;

            case Statues.Speed:
                segments = new IGestureSegment[NB_FRAME];
                for (int i = 0; i < NB_FRAME; i++)
                {
                    segments[i] = new SpeedSegment();
                }
                break;

            case Statues.Wait:
                segments = new IGestureSegment[NB_FRAME];
                for (int i = 0; i < NB_FRAME; i++)
                {
                    segments[i] = new WaitSegment();
                }
                break;

            case Statues.TouchAnotherSprite:
                segments = new IGestureSegment[NB_FRAME];
                for (int i = 0; i < NB_FRAME; i++)
                {
                    segments[i] = new TouchAnotherSpriteSegment();
                }
                break;

            case Statues.WaveRight:
                segments = new IGestureSegment[2 * NB_FRAME];
                for (int i = 0; i < NB_FRAME; i++)
                {
                    segments[i] = new WaveRightSegment1();
                }
                for (int i = NB_FRAME; i < 2 * NB_FRAME; i++)
                {
                    segments[i] = new WaveRightSegment2();
                }
                break;

            case Statues.FingerCount:
                segments = new IGestureSegment[20];
                for (int i = 0; i < 20; i++)
                {
                    segments[i] = new FingerCount();
                }
                break;

            default:
                break;
            }

            Gesture gesture = new Gesture(name.ToString(), segments);

            gesture.GestureDetected += OnGestureDetected;

            _gestures.Add(gesture);
        }
        /// <summary>
        /// Adds the specified gesture for recognition.
        /// </summary>
        /// <param name="type">The predefined <see cref="GestureType" />.</param>
        public void AddGesture(GestureType type)
        {
            IGestureSegment[] segments = null;

            // DEVELOPERS: If you add a new predefined gesture with a new GestureType,
            // simply add the proper segments to the switch statement here.
            switch (type)
            {
                /*
                case GestureType.JoinedHands:
                    segments = new IGestureSegment[20];

                    JoinedHandsSegment1 joinedhandsSegment = new JoinedHandsSegment1();
                    for (int i = 0; i < 20; i++)
                    {
                        segments[i] = joinedhandsSegment;
                    }
                    break;
                case GestureType.Menu:
                    segments = new IGestureSegment[20];

                    MenuSegment1 menuSegment = new MenuSegment1();
                    for (int i = 0; i < 20; i++)
                    {
                        segments[i] = menuSegment;
                    }
                    break;
                case GestureType.SwipeDown:
                    segments = new IGestureSegment[3];

                    segments[0] = new SwipeDownSegment1();
                    segments[1] = new SwipeDownSegment2();
                    segments[2] = new SwipeDownSegment3();
                    break;
                 * */
                case GestureType.SwipeLeft:
                    segments = new IGestureSegment[3];

                    segments[0] = new SwipeLeftSegment1();
                    segments[1] = new SwipeLeftSegment2();
                    segments[2] = new SwipeLeftSegment3();
                    break;
                case GestureType.SwipeRight:
                    segments = new IGestureSegment[3];

                    segments[0] = new SwipeRightSegment1();
                    segments[1] = new SwipeRightSegment2();
                    segments[2] = new SwipeRightSegment3();
                    break;
                /*
                case GestureType.SwipeUp:
                    segments = new IGestureSegment[3];

                    segments[0] = new SwipeUpSegment1();
                    segments[1] = new SwipeUpSegment2();
                    segments[2] = new SwipeUpSegment3();
                    break;
                 * 
                case GestureType.WaveLeft:
                    segments = new IGestureSegment[6];

                    WaveLeftSegment1 waveLeftSegment1 = new WaveLeftSegment1();
                    WaveLeftSegment2 waveLeftSegment2 = new WaveLeftSegment2();

                    segments[0] = waveLeftSegment1;
                    segments[1] = waveLeftSegment2;
                    segments[2] = waveLeftSegment1;
                    segments[3] = waveLeftSegment2;
                    segments[4] = waveLeftSegment1;
                    segments[5] = waveLeftSegment2;
                    break;
                case GestureType.WaveRight:
                    segments = new IGestureSegment[6];

                    WaveRightSegment1 waveRightSegment1 = new WaveRightSegment1();
                    WaveRightSegment2 waveRightSegment2 = new WaveRightSegment2();

                    segments[0] = waveRightSegment1;
                    segments[1] = waveRightSegment2;
                    segments[2] = waveRightSegment1;
                    segments[3] = waveRightSegment2;
                    segments[4] = waveRightSegment1;
                    segments[5] = waveRightSegment2;
                    break;*/
                /*
                case GestureType.ZoomIn:
                    segments = new IGestureSegment[3];

                    segments[0] = new ZoomSegment1();
                    segments[1] = new ZoomSegment2();
                    segments[2] = new ZoomSegment3();
                    break;
                case GestureType.ZoomOut:
                    segments = new IGestureSegment[3];

                    segments[0] = new ZoomSegment3();
                    segments[1] = new ZoomSegment2();
                    segments[2] = new ZoomSegment1();
                    break;
                */
                case GestureType.Grab:
                    segments = new IGestureSegment[2];

                    segments[0] = new GrabSegment1();
                    segments[1] = new GrabSegment2();
                    break;
                case GestureType.GrabLeft:
                    segments = new IGestureSegment[2];

                    segments[0] = new GrabLeftSegment1();
                    segments[1] = new GrabLeftSegment2();
                    break;
                case GestureType.GrabRight:
                    segments = new IGestureSegment[2];

                    segments[0] = new GrabRightSegment1();
                    segments[1] = new GrabRightSegment2();
                    break;
                case GestureType.Release:
                    segments = new IGestureSegment[2];

                    segments[0] = new ReleaseSegment1();
                    segments[1] = new ReleaseSegment2();
                    break;
                case GestureType.ReleaseLeft:
                    segments = new IGestureSegment[2];

                    segments[0] = new ReleaseLeftSegment1();
                    segments[1] = new ReleaseLeftSegment2();
                    break;
                case GestureType.ReleaseRight:
                    segments = new IGestureSegment[2];

                    segments[0] = new ReleaseRightSegment1();
                    segments[1] = new ReleaseRightSegment2();
                    break;
                case GestureType.All:
                case GestureType.None:
                default:
                    break;
            }

            if (type != GestureType.None)
            {
                Gesture gesture = new Gesture(type, segments);
                gesture.GestureRecognized += OnGestureRecognized;

                _gestures.Add(gesture);
            }
        }
        /// <summary>
        /// Adds the specified gesture for recognition.
        /// </summary>
        /// <param name="name">The gesture name.</param>
        /// <param name="segments">The gesture segments.</param>
        public void AddGesture(string name, IGestureSegment[] segments)
        {
            Gesture gesture = new Gesture(name, segments);
            gesture.GestureRecognized += OnGestureRecognized;

            _gestures.Add(gesture);
        }
Example #8
0
        /// <summary>
        /// Adds the specified gesture for recognition.
        /// </summary>
        /// <param name="type">The predefined <see cref="GestureType" />.</param>
        public void AddGesture(GestureType type)
        {
            // Check whether the gesure is already added.
            if (_gestures.Where(g => g.GestureType == type).Count() > 0)
            {
                return;
            }

            IGestureSegment[] segments = null;

            // DEVELOPERS: If you add a new predefined gesture with a new GestureType,
            // simply add the proper segments to the switch statement here.
            switch (type)
            {
            case GestureType.CrossedHands:
                segments = new IGestureSegment[8];

                CrossHandsSegment1 segment = new CrossHandsSegment1();
                for (int i = 0; i < 8; i++)
                {
                    segments[i] = segment;
                }
                break;

            case GestureType.HandsAboveHead:
                segments = new IGestureSegment[8];

                HandsAboveHeadSegment1 segment_hand_head = new HandsAboveHeadSegment1();
                for (int i = 0; i < 8; i++)
                {
                    segments[i] = segment_hand_head;
                }
                break;

            case GestureType.SwipeLeftReversed:
                segments = new IGestureSegment[3];

                segments[0] = new SwipeLeftReversedSegment3();
                segments[1] = new SwipeLeftReversedSegment2();
                segments[2] = new SwipeLeftReversedSegment1();
                break;

            case GestureType.SwipeLeftSupport:
                segments = new IGestureSegment[3];

                segments[0] = new SwipeLeftReversedSegment1();
                segments[1] = new SwipeLeftReversedSegment2();
                segments[2] = new SwipeLeftReversedSegment3();
                break;

            case GestureType.SwipeLeft:
                segments = new IGestureSegment[3];

                segments[0] = new SwipeLeftSegment1();
                segments[1] = new SwipeLeftSegment2();
                segments[2] = new SwipeLeftSegment3();
                break;

            case GestureType.SwipeRightReversed:
                segments = new IGestureSegment[3];

                segments[0] = new SwipeRightSegment3();
                segments[1] = new SwipeRightSegment2();
                segments[2] = new SwipeRightSegment1();
                break;

            case GestureType.SwipeRight:
                segments = new IGestureSegment[3];

                segments[0] = new SwipeRightSegment1();
                segments[1] = new SwipeRightSegment2();
                segments[2] = new SwipeRightSegment3();
                break;

            case GestureType.ZoomIn:
                segments = new IGestureSegment[3];

                segments[0] = new ZoomInSegment1();
                segments[1] = new ZoomInSegment2();
                segments[2] = new ZoomInSegment3();
                break;

            case GestureType.ZoomOut:
                segments = new IGestureSegment[3];

                segments[0] = new ZoomOutSegment1();
                segments[1] = new ZoomOutSegment2();
                segments[2] = new ZoomOutSegment3();
                break;

            default:
                break;
            }

            if (segments != null)
            {
                Gesture gesture = new Gesture(type, segments);
                gesture.GestureRecognized += OnGestureRecognized;

                _gestures.Add(gesture);
            }
        }
 public GestureListener(IGestureSegment[] gestures)
 {
     _segments = gestures;
 }
Example #10
0
 /// <summary>
 /// Initializes a new instance of <see cref="Gesture"/>.
 /// </summary>
 /// <param name="name">The name of gesture.</param>
 /// <param name="segments">The segments of the gesture.</param>
 public Gesture(string name, IGestureSegment[] segments)
 {
     _name = name;
     _segments = segments;
 }
Example #11
0
        /// <summary>
        /// Adds the specified gesture for recognition.
        /// </summary>
        /// <param name="type">The predefined <see cref="GestureType" />.</param>
        public void AddGesture(GestureType type)
        {
            IGestureSegment[] segments = null;

            // DEVELOPERS: If you add a new predefined gesture with a new GestureType,
            // simply add the proper segments to the switch statement here.
            switch (type)
            {
            case GestureType.JoinedHands:
                segments = new IGestureSegment[20];

                JoinedHandsSegment1 joinedhandsSegment = new JoinedHandsSegment1();
                for (int i = 0; i < 20; i++)
                {
                    segments[i] = joinedhandsSegment;
                }
                break;

            case GestureType.Menu:
                segments = new IGestureSegment[20];

                MenuSegment1 menuSegment = new MenuSegment1();
                for (int i = 0; i < 20; i++)
                {
                    segments[i] = menuSegment;
                }
                break;

            case GestureType.SwipeDown:
                segments = new IGestureSegment[3];

                segments[0] = new SwipeDownSegment1();
                segments[1] = new SwipeDownSegment2();
                segments[2] = new SwipeDownSegment3();
                break;

            case GestureType.SwipeLeft:
                segments = new IGestureSegment[3];

                segments[0] = new SwipeLeftSegment1();
                segments[1] = new SwipeLeftSegment2();
                segments[2] = new SwipeLeftSegment3();
                break;

            case GestureType.SwipeRight:
                segments = new IGestureSegment[3];

                segments[0] = new SwipeRightSegment1();
                segments[1] = new SwipeRightSegment2();
                segments[2] = new SwipeRightSegment3();
                break;

            case GestureType.SwipeUp:
                segments = new IGestureSegment[3];

                segments[0] = new SwipeUpSegment1();
                segments[1] = new SwipeUpSegment2();
                segments[2] = new SwipeUpSegment3();
                break;

            case GestureType.WaveLeft:
                segments = new IGestureSegment[6];

                WaveLeftSegment1 waveLeftSegment1 = new WaveLeftSegment1();
                WaveLeftSegment2 waveLeftSegment2 = new WaveLeftSegment2();

                segments[0] = waveLeftSegment1;
                segments[1] = waveLeftSegment2;
                segments[2] = waveLeftSegment1;
                segments[3] = waveLeftSegment2;
                segments[4] = waveLeftSegment1;
                segments[5] = waveLeftSegment2;
                break;

            case GestureType.WaveRight:
                segments = new IGestureSegment[6];

                WaveRightSegment1 waveRightSegment1 = new WaveRightSegment1();
                WaveRightSegment2 waveRightSegment2 = new WaveRightSegment2();

                segments[0] = waveRightSegment1;
                segments[1] = waveRightSegment2;
                segments[2] = waveRightSegment1;
                segments[3] = waveRightSegment2;
                segments[4] = waveRightSegment1;
                segments[5] = waveRightSegment2;
                break;

            case GestureType.ZoomIn:
                segments = new IGestureSegment[3];

                segments[0] = new ZoomSegment1();
                segments[1] = new ZoomSegment2();
                segments[2] = new ZoomSegment3();
                break;

            case GestureType.ZoomOut:
                segments = new IGestureSegment[3];

                segments[0] = new ZoomSegment3();
                segments[1] = new ZoomSegment2();
                segments[2] = new ZoomSegment1();
                break;


            case GestureType.All:
            case GestureType.None:
            default:
                break;
            }

            if (type != GestureType.None)
            {
                Gesture gesture = new Gesture(type, segments);
                gesture.GestureRecognized += OnGestureRecognized;

                _gestures.Add(gesture);
            }
        }
        /// <summary>
        /// Initializes a new instance of the MainWindow class.
        /// </summary>
        public MainWindow()
        {
            // one sensor is currently supported
            this.kinectSensor = KinectSensor.GetDefault();

            // get the coordinate mapper
            this.coordinateMapper = this.kinectSensor.CoordinateMapper;

            // get the depth (display) extents
            FrameDescription frameDescription = this.kinectSensor.DepthFrameSource.FrameDescription;

            // get size of joint space
            this.displayWidth = frameDescription.Width;
            this.displayHeight = frameDescription.Height;

            // open the reader for the body frames
            this.bodyFrameReader = this.kinectSensor.BodyFrameSource.OpenReader();

            // a bone defined as a line between two joints
            this.bones = new List<Tuple<JointType, JointType>>();

            // Torso
            this.bones.Add(new Tuple<JointType, JointType>(JointType.Head, JointType.Neck));
            this.bones.Add(new Tuple<JointType, JointType>(JointType.Neck, JointType.SpineShoulder));
            this.bones.Add(new Tuple<JointType, JointType>(JointType.SpineShoulder, JointType.SpineMid));
            this.bones.Add(new Tuple<JointType, JointType>(JointType.SpineMid, JointType.SpineBase));
            this.bones.Add(new Tuple<JointType, JointType>(JointType.SpineShoulder, JointType.ShoulderRight));
            this.bones.Add(new Tuple<JointType, JointType>(JointType.SpineShoulder, JointType.ShoulderLeft));
            this.bones.Add(new Tuple<JointType, JointType>(JointType.SpineBase, JointType.HipRight));
            this.bones.Add(new Tuple<JointType, JointType>(JointType.SpineBase, JointType.HipLeft));

            // Right Arm
            this.bones.Add(new Tuple<JointType, JointType>(JointType.ShoulderRight, JointType.ElbowRight));
            this.bones.Add(new Tuple<JointType, JointType>(JointType.ElbowRight, JointType.WristRight));
            this.bones.Add(new Tuple<JointType, JointType>(JointType.WristRight, JointType.HandRight));
            this.bones.Add(new Tuple<JointType, JointType>(JointType.HandRight, JointType.HandTipRight));
            this.bones.Add(new Tuple<JointType, JointType>(JointType.WristRight, JointType.ThumbRight));

            // Left Arm
            this.bones.Add(new Tuple<JointType, JointType>(JointType.ShoulderLeft, JointType.ElbowLeft));
            this.bones.Add(new Tuple<JointType, JointType>(JointType.ElbowLeft, JointType.WristLeft));
            this.bones.Add(new Tuple<JointType, JointType>(JointType.WristLeft, JointType.HandLeft));
            this.bones.Add(new Tuple<JointType, JointType>(JointType.HandLeft, JointType.HandTipLeft));
            this.bones.Add(new Tuple<JointType, JointType>(JointType.WristLeft, JointType.ThumbLeft));

            // Right Leg
            this.bones.Add(new Tuple<JointType, JointType>(JointType.HipRight, JointType.KneeRight));
            this.bones.Add(new Tuple<JointType, JointType>(JointType.KneeRight, JointType.AnkleRight));
            this.bones.Add(new Tuple<JointType, JointType>(JointType.AnkleRight, JointType.FootRight));

            // Left Leg
            this.bones.Add(new Tuple<JointType, JointType>(JointType.HipLeft, JointType.KneeLeft));
            this.bones.Add(new Tuple<JointType, JointType>(JointType.KneeLeft, JointType.AnkleLeft));
            this.bones.Add(new Tuple<JointType, JointType>(JointType.AnkleLeft, JointType.FootLeft));

            // populate body colors, one for each BodyIndex
            this.bodyColors = new List<Pen>();

            this.bodyColors.Add(new Pen(Brushes.Red, 6));
            this.bodyColors.Add(new Pen(Brushes.Orange, 6));
            this.bodyColors.Add(new Pen(Brushes.Green, 6));
            this.bodyColors.Add(new Pen(Brushes.Blue, 6));
            this.bodyColors.Add(new Pen(Brushes.Indigo, 6));
            this.bodyColors.Add(new Pen(Brushes.Violet, 6));

            // set IsAvailableChanged event notifier
            this.kinectSensor.IsAvailableChanged += this.Sensor_IsAvailableChanged;

            // open the sensor
            this.kinectSensor.Open();

            // grab the audio stream
            IReadOnlyList<AudioBeam> audioBeamList = this.kinectSensor.AudioSource.AudioBeams;
            System.IO.Stream audioStream = audioBeamList[0].OpenInputStream();

            // create the convert stream
            this.convertStream = new KinectAudioStream(audioStream);

            // set the status text
            this.StatusText = this.kinectSensor.IsAvailable ? Properties.Resources.RunningStatusText
                                                            : Properties.Resources.NoSensorStatusText;

            RecognizerInfo ri = TryGetKinectRecognizer();

            if (null != ri)
            {
                this.speechEngine = new SpeechRecognitionEngine(ri.Id);

                //var directions = new Choices();
                //directions.Add(new SemanticResultValue("hide", "hide"));
                //directions.Add(new SemanticResultValue("minimize", "minimize"));
                //directions.Add(new SemanticResultValue("maximize", "maximize"));
                //directions.Add(new SemanticResultValue("snap left", "snap left"));
                //directions.Add(new SemanticResultValue("snap right", "snap right"));
                //directions.Add(new SemanticResultValue("front", "front"));
                //directions.Add(new SemanticResultValue("drag", "drag"));
                //directions.Add(new SemanticResultValue("get windows", "get windows"));

                // Grammar for snapping
                GrammarBuilder snap = new GrammarBuilder { Culture = ri.Culture };
                // Any window
                snap.Append(new Choices("snap"));
                snap.Append(new Choices("Spotify", "Genie", "Chrome", "Media Player", "Visual Studio", "Github", "Eclipse", "Word", "Notepad"));
                snap.Append(new Choices("left", "right", "down", "up"));
                var g = new Grammar(snap);
                this.speechEngine.LoadGrammar(g);


                GrammarBuilder snap2 = new GrammarBuilder { Culture = ri.Culture };
                snap2.Append(new Choices("snap"));
                snap2.AppendWildcard();
                snap2.Append(new Choices("left", "right", "down", "up"));
                var g4 = new Grammar(snap2);
                this.speechEngine.LoadGrammar(g4);


                GrammarBuilder grab1 = new GrammarBuilder { Culture = ri.Culture };
                grab1.Append(new Choices("grab"));
                grab1.Append(new Choices("Spotify", "Genie", "Chrome", "Media Player", "Visual Studio", "Github", "Eclipse", "Word", "Notepad"));
                var g1 = new Grammar(grab1);
                this.speechEngine.LoadGrammar(g1);


                GrammarBuilder drag1 = new GrammarBuilder { Culture = ri.Culture };
                drag1.Append(new Choices("grab"));
                drag1.Append(new Choices("Spotify", "Genie", "Chrome", "Media Player", "Visual Studio", "Github", "Eclipse", "Word", "Notepad"));
                var d1 = new Grammar(drag1);
                this.speechEngine.LoadGrammar(d1);

                GrammarBuilder grab2 = new GrammarBuilder { Culture = ri.Culture };
                // Any window
                grab2.Append(new Choices("grab"));
                var g2 = new Grammar(grab2);
                this.speechEngine.LoadGrammar(g2);

                GrammarBuilder dropit = new GrammarBuilder { Culture = ri.Culture };
                // Any window
                dropit.Append(new Choices("drop it"));
                var drop = new Grammar(dropit);
                this.speechEngine.LoadGrammar(drop);

                GrammarBuilder mouse = new GrammarBuilder { Culture = ri.Culture };
                // Any window
                mouse.Append(new Choices("mouse mode"));
                var mg = new Grammar(mouse);
                this.speechEngine.LoadGrammar(mg);



                GrammarBuilder click = new GrammarBuilder { Culture = ri.Culture };
                click.Append(new Choices("click", "double click", "right click"));
                var clickGram = new Grammar(click);
                this.speechEngine.LoadGrammar(clickGram);

                GrammarBuilder go = new GrammarBuilder { Culture = ri.Culture };
                go.Append(new Choices("lets hack", "shut it down"));
                var goGram = new Grammar(go);
                this.speechEngine.LoadGrammar(goGram);







                this.speechEngine.SpeechRecognized += this.SpeechRecognized;
                this.speechEngine.SpeechRecognitionRejected += this.SpeechRejected;

                // let the convertStream know speech is going active
                this.convertStream.SpeechActive = true;

                // For long recognition sessions (a few hours or more), it may be beneficial to turn off adaptation of the acoustic model. 
                // This will prevent recognition accuracy from degrading over time.
                speechEngine.UpdateRecognizerSetting("AdaptationOn", 0);

                this.speechEngine.SetInputToAudioStream(
                    this.convertStream, new SpeechAudioFormatInfo(EncodingFormat.Pcm, 16000, 16, 1, 32000, 2, null));
                this.speechEngine.RecognizeAsync(RecognizeMode.Multiple);
            }
            else
            {
                this.StatusText = "No recognizer";
            }

            // Create the drawing group we'll use for drawing
            this.drawingGroup = new DrawingGroup();

            // Create an image source that we can use in our image control
            this.imageSource = new DrawingImage(this.drawingGroup);

            // use the window object as the view model in this simple example
            this.DataContext = this;

            // initialize the components (controls) of the window
            this.InitializeComponent();

            KnockSegment1 knockSegment1 = new KnockSegment1();
            KnockSegment2 knockSegment2 = new KnockSegment2();
            KnockSegment3 knockSegment3 = new KnockSegment3();
            SlapSegment1 slapSegment1 = new SlapSegment1();
            SlapSegment2 slapSegment2 = new SlapSegment2();
            PokeSegment1 pokeSegment1 = new PokeSegment1();
            PokeSegment2 pokeSegment2 = new PokeSegment2();

            IGestureSegment[] knock = new IGestureSegment[]
            {
                knockSegment1,
                knockSegment2
            };
            IGestureSegment[] knockPull = new IGestureSegment[]
            {
                knockSegment1,
                knockSegment3
            };
            IGestureSegment[] slap = new IGestureSegment[]
            {
                slapSegment1,
                slapSegment2
            };
            IGestureSegment[] poke = new IGestureSegment[]
            {
                pokeSegment1,
                pokeSegment2
            };

            knockGesture = new GestureListener(knock);
            knockGesture.GestureRecognized += Gesture_KnockRecognized;
            knockPullGesture = new GestureListener(knockPull);
            knockPullGesture.GestureRecognized += Gesture_KnockPullRecognized;
            slapGesture = new GestureListener(slap);
            slapGesture.GestureRecognized += Gesture_SlapRecognized;
            pokeGesture = new GestureListener(poke);
            pokeGesture.GestureRecognized += Gesture_PokeRecognized;

            WindowDragStart dragSeg1 = new WindowDragStart();
            WindowDragMove dragSeg2 = new WindowDragMove();
            MouseMoveStart mouseSeg1 = new MouseMoveStart();
            ScrollUpStart scrollUpSeg1 = new ScrollUpStart();
            ScrollDownStart scrollUpSeg2 = new ScrollDownStart();
            VolumeUpStart volumeUpStart = new VolumeUpStart();
            VolumeDownStart volumeDownStart = new VolumeDownStart();
            PausePlaySegment1 pausePlaySeg1 = new PausePlaySegment1();
            PausePlaySegment2 pausePlaySeg2 = new PausePlaySegment2();
            ShowAllStart showSeg1 = new ShowAllStart();
            HideAllStart showSeg2 = new HideAllStart();
            MouseMove mouseSeg2 = new MouseMove();
            DragFinishedGesture dragFinished = new DragFinishedGesture();
            VolumeFinishGesture volumeFinished = new VolumeFinishGesture();
            ScrollFinishedGesture scrollFinished = new ScrollFinishedGesture();
            MouseFinishedGesture mouseFinished = new MouseFinishedGesture();
            
            IGestureSegment[] windowDrag = new IGestureSegment[]
            {
                dragSeg1,
                dragSeg2
            };
            IGestureSegment[] mouseMove = new IGestureSegment[]
            {
                mouseSeg1,
                mouseSeg2
            };
            IGestureSegment[] dragFinishedSequence = new IGestureSegment[]
            {
                dragFinished
            };
            IGestureSegment[] volumeFinishedSequence = new IGestureSegment[]
            {
                volumeFinished
            };
            IGestureSegment[] scrollFinishedSequence = new IGestureSegment[]
            {
                scrollFinished
            };
            IGestureSegment[] mouseFinishedSequence = new IGestureSegment[]
            {
                mouseFinished
            };

            IGestureSegment[] scrollUp = new IGestureSegment[]
            {
                scrollUpSeg1,
                scrollUpSeg2
            };
            IGestureSegment[] scrollDown = new IGestureSegment[]
            {
                scrollUpSeg2,
                scrollUpSeg1
            };

            IGestureSegment[] volumeUp = new IGestureSegment[]
            {
                volumeUpStart,
                volumeDownStart
            };
            IGestureSegment[] volumeDown = new IGestureSegment[]
            {
                volumeDownStart,
                volumeUpStart
            };
            IGestureSegment[] pausePlay = new IGestureSegment[]
            {
                pausePlaySeg1,
                pausePlaySeg2
            };

            IGestureSegment[] bringUp = new IGestureSegment[]
            {
                showSeg1,
                showSeg2
            };
            IGestureSegment[] bringDown = new IGestureSegment[]
            {
                showSeg2,
                showSeg1
            };

            windowDragGesture = new GestureListener(windowDrag);
            windowDragGesture.GestureRecognized += Gesture_DragMove;

            windowDragGestureFinish = new GestureListener(dragFinishedSequence);
            windowDragGestureFinish.GestureRecognized += Gesture_DragFinish;

            mouseMoveGesture = new GestureListener(mouseMove);
            mouseMoveGesture.GestureRecognized += Gesture_MouseMove;

            mouseMoveGestureFinish = new GestureListener(mouseFinishedSequence);
            mouseMoveGestureFinish.GestureRecognized += Gesture_MouseMoveFinish;

            scrollUpGesture = new GestureListener(scrollUp);
            scrollUpGesture.GestureRecognized += Gesture_ScrollUp;

            scrollDownGesture = new GestureListener(scrollDown);
            scrollDownGesture.GestureRecognized += Gesture_ScrollDown;

            scrollGestureFinish = new GestureListener(scrollFinishedSequence);
            scrollGestureFinish.GestureRecognized += Gesture_ScrollFinish;

            volumeUpGesture = new GestureListener(volumeUp);
            volumeUpGesture.GestureRecognized += Gesture_VolumeUp;

            volumeDownGesture = new GestureListener(volumeDown);
            volumeDownGesture.GestureRecognized += Gesture_VolumeDown;

            volumeGestureFinish = new GestureListener(volumeFinishedSequence);
            volumeGestureFinish.GestureRecognized += Gesture_VolumeFinish;

            pausePlayGesture = new GestureListener(pausePlay);
            pausePlayGesture.GestureRecognized += Gesture_PausePlay;
            showAllGesture = new GestureListener(bringUp);
            showAllGesture.GestureRecognized += Gesture_ShowAll;

            hideAllGesture = new GestureListener(bringDown);
            hideAllGesture.GestureRecognized += Gesture_HideAll;
        }