private void NuiSkeleton2DdataCoordReady(object sender, Skeleton2DdataCoordEventArgs a) { if (_kinectHandler == null || _seqCoords == null || _dtw == null) { return; } if (_seqCoords.Count > MINIMUM_FRAMES && !_isRecording && _isRecognizing) { ////Console.Out.WriteLine("No of frames: " + seqCoords.Count); if (_dtw != null) { var g = _dtw.Recognize(_seqCoords, _ctxt); if (_recTimer != null && (g != null || _recTimer.ElapsedMilliseconds > 4000)) { _isRecognizing = false; _seqCoords.Clear(); if (g != null && (!g.Name.Equals("__UNKNOWN") || _recTimer.ElapsedMilliseconds > 4000)) { _kinectHandler.GestureRecognitionCompleted(g.Name); } } } } if (_isRecording) { _kinectHandler.RecordingCountdownEvent(_seqCoords.Count); } if (_seqCoords.Count > BUFFER_SIZE) { lock (this) { if (_isRecording && _currentGesture != null) { _isRecording = false; if (_dtw != null) { _dtw.AddOrUpdate(_seqCoords, _currentGesture); } _seqCoords.Clear(); _kinectHandler.GestureRecordCompleted(_currentGesture.Name, _currentGesture.Context); _currentGesture = null; } else { _seqCoords.RemoveAt(0); } } } if (a == null || Double.IsNaN(a.GetPoint(0).X)) { return; } // Optionally register only 1 frame out of every n _flipFlop = (_flipFlop + 1) % IGNORE; if (_flipFlop == 0) { _seqCoords.Add(a.GetCoords()); } }