private void Instance_HeadMeasurement(object sender, HeadMeasurementEventArgs e) { this.Dispatcher.Invoke((Action)(() => { HeadTracker tracker = HeadTracker.Instance; this.yawOffsetLabel.Content = e.X - tracker.OriginX; this.pitchOffsetLabel.Content = e.Y - tracker.OriginY; this.rollOffsetLabel.Content = e.Z - tracker.OriginZ; })); }
private void OnHeadMeasurement(object sender, HeadMeasurementEventArgs e) { /* * Process head measurements here * * */ Int16 newX = e.X; // yaw Int16 newY = e.Y; // pitch Int16 newZ = e.Z; // roll if (Calibrating) { originX += newX; originY += newY; originZ += newZ; calibrationCount++; //originX = Math.Abs(newX - originX) > 5 ? newX : originX; //originY = Math.Abs(newY - originY) > 5 ? newY : originY; //originZ = Math.Abs(newZ - originZ) > 5 ? newZ : originZ; ////Console.WriteLine("oz: " + originZ); if (calibrationCount == MaxCalibrationCount) { StopCalibration(); } } else { Int16[] diff = new Int16[3]; diff[0] = (Int16)(newX - originX); diff[1] = (Int16)(newY - originY); diff[2] = (Int16)(newZ - originZ); if (DoMeasure) { int max = FindMaxMagnitude(diff); if (Math.Abs(diff[max]) > thresholds[max]) { DoMeasure = false; int index; if (diff[max] > 0) { index = 2 * max; } else { index = 2 * max + 1; } Console.WriteLine("[{0}] Gesture detected: {1}. Moved {2} from origin.", Thread.CurrentThread.GetHashCode(), gestures[index], diff[max]); OnHeadMovement(new HeadMovementEventArgs(gestures[index],newX,newY,newZ)); } } else { int i = 0; for (; i < diff.Length; i++) { if (Math.Abs(diff[i]) > thresholds[i]) { break; } } if (i == diff.Length) { DoMeasure = true; } } } }