Ejemplo n.º 1
0
        private void GazeInputSourcePreview_GazeMoved(GazeInputSourcePreview sender, GazeMovedPreviewEventArgs args)
        {
            _gazePosition.SetPosition(args.CurrentPoint.EyeGazePosition);

            if (_gazeHidPositionsParser == null)
            {
                _gazeHidPositionsParser = new GazeHidPositionsParser(args.CurrentPoint.SourceDevice);
            }
            var positions = _gazeHidPositionsParser.GetGazeHidPositions(args.CurrentPoint.HidInputReport);

            _leftEyePosition.SetPosition(positions.LeftEyePosition);
            _rightEyePosition.SetPosition(positions.RightEyePosition);
            _headPosition.SetPosition(positions.HeadPosition);
            _headRotatePosition.SetPosition(positions.HeadRotation);

            if (_leftEyePosition.Z == 0 && _rightEyePosition.Z == 0)
            {
                Blink?.Invoke(BlinkType.Both);
            }
            else
            {
                if (_leftEyePosition.Z == 0)
                {
                    Blink?.Invoke(BlinkType.Left);
                }
                if (_rightEyePosition.Z == 0)
                {
                    Blink?.Invoke(BlinkType.Right);
                }
            }

            GazeMoved?.Invoke();
        }
Ejemplo n.º 2
0
        private void GazeInputSourcePreview_GazeMoved(GazeInputSourcePreview sender, GazeMovedPreviewEventArgs args)
        {
            if (args.CurrentPoint.HidInputReport != null)
            {
                var hidReport    = args.CurrentPoint.HidInputReport;
                var sourceDevice = args.CurrentPoint.SourceDevice;

                if (gazeHidPositionsParser == null)
                {
                    gazeHidPositionsParser = new GazeHidPositionsParser(sourceDevice);
                }

                GazeHidPositions positions = gazeHidPositionsParser.GetGazeHidPositions(hidReport);

                if (positions.RightEyePosition != null)
                {
                    double DistanceInMM = positions.RightEyePosition.Z / 10000;

                    DistanceText.Text = "Head distance: " + DistanceInMM.ToString() + " mm";
                    if (DistanceInMM >= 50)
                    {
                        DevicesList.ItemTemplate = (DataTemplate)this.Resources["LargeDeviceTemplate"];
                    }
                    else
                    {
                        DevicesList.ItemTemplate = (DataTemplate)this.Resources["SmallDeviceTemplate"];
                    }
                }
            }
        }
        private void GazeInputSourcePreview_GazeMoved(GazeInputSourcePreview sender, GazeMovedPreviewEventArgs args)
        {
            var sb = new StringBuilder();

            sb.Append("      GazePos (");
            if (args.CurrentPoint.EyeGazePosition != null)
            {
                Canvas.SetLeft(GazePositionEllipse, args.CurrentPoint.EyeGazePosition.Value.X);
                Canvas.SetTop(GazePositionEllipse, args.CurrentPoint.EyeGazePosition.Value.Y);

                sb.Append($"{args.CurrentPoint.EyeGazePosition.Value.X,6}px, {args.CurrentPoint.EyeGazePosition.Value.Y,6}px");

                if (showGaze)
                {
                    GazePositionEllipse.Visibility = Visibility.Visible;
                }
                else
                {
                    GazePositionEllipse.Visibility = Visibility.Collapsed;
                }
            }
            else
            {
                GazePositionEllipse.Visibility = Visibility.Collapsed;
            }
            sb.AppendLine(")");

            if (args.CurrentPoint.HidInputReport != null)
            {
                var hidReport    = args.CurrentPoint.HidInputReport;
                var sourceDevice = args.CurrentPoint.SourceDevice;

                if (gazeHidPositionsParser == null)
                {
                    gazeHidPositionsParser = new GazeHidPositionsParser(sourceDevice);
                }

                var positions = gazeHidPositionsParser.GetGazeHidPositions(hidReport);

                // The return values for the left and right eye are in micrometers by default
                // They are references such that X and Y origin are the top left hand corner
                // of the calibrated display. The Z origin is the centerpoint of the display
                // (not the tracker). As such, there is a minor difference between the actual
                // sensor-to-eye distance vs the reported distance for left/right eye position.

                UpdateEyeData("Left", positions.LeftEyePosition, LeftEyePositionEllipse, sb);
                UpdateEyeData("Right", positions.RightEyePosition, RightEyePositionEllipse, sb);

                if (positions.RightEyePosition != null && positions.LeftEyePosition != null)
                {
                    // calculate IPD in mm
                    var interPupilaryDistance = (positions.RightEyePosition.X - positions.LeftEyePosition.X) / 1000.0;

                    sb.AppendLine($"          IPD ({interPupilaryDistance,6:F2}mm)");
                }

                if (positions.HeadPosition != null)
                {
                    sb.AppendLine($"HeadPosition ({positions.HeadPosition.X,8:F2}, {positions.HeadPosition.Y,8:F2}, {positions.HeadPosition.Z,8:F2})");
                }

                if (positions.HeadRotation != null)
                {
                    sb.AppendLine($"HeadRotation ({positions.HeadRotation.X,8:F2}, {positions.HeadRotation.Y,8:F2}, {positions.HeadRotation.Z,8:F2})");
                }
            }

            StatusTextBlock.Text = sb.ToString();
        }