示例#1
0
 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;
     }));
 }
示例#2
0
        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;
                    }
                }
            }
        }