Пример #1
0
 void FEyetrackerIn_Changed(IDiffSpread <IEyetracker> spread)
 {
     if (spread.SliceCount == 0)
     {
         if (FEyetracker != null)
         {
             FEyetracker = null;
             FCalibrationRunner.OnTriggerCalibrationPoint -= FCalibrationRunner_OnTriggerCalibrationPoint;
             FCalibrationRunner.OnCalibrationDone         -= FCalibrationRunner_OnCalibrationDone;
             FCalibrationRunner.OnCalibrationAborted      -= FCalibrationRunner_OnCalibrationAborted;
             FCalibrationRunner.OnLastCalibPointTriggered -= FCalibrationRunner_OnLastCalibPointTriggered;
             FCalibrationRunner = null;
         }
     }
     else
     {
         FEyetracker        = spread[0];
         FCalibrationRunner = new CalibrationRunner(spread[0], FInterval[0]);
         // register event listeners
         FCalibrationRunner.OnTriggerCalibrationPoint += FCalibrationRunner_OnTriggerCalibrationPoint;
         FCalibrationRunner.OnCalibrationDone         += FCalibrationRunner_OnCalibrationDone;
         FCalibrationRunner.OnCalibrationAborted      += FCalibrationRunner_OnCalibrationAborted;
         FCalibrationRunner.OnLastCalibPointTriggered += FCalibrationRunner_OnLastCalibPointTriggered;
     }
 }
Пример #2
0
        // helper
        private void DisconnectEyetracker(bool DoRescan)
        {
            if (FEyetracker != null)
            {
                FEyetracker.ConnectionError -= HandleConnectionError;
                FEyetracker.Dispose();
                FEyetracker     = null;
                FConnectionName = string.Empty;

                FSyncManager.Dispose();

                UpdateDeviceStatus(FTrackerInfo.Status);
                if (!FEyetrackerBrowser.IsStarted)
                {
                    if (DoRescan)
                    {
                        FEyetrackerBrowser.Start();
                    }
                }
                if (FEyetrackerBrowser.IsStarted)
                {
                    FEyetrackerBrowser.Stop();
                }
            }
        }
Пример #3
0
        /// <summary>
        /// Connects to eyetracker and subscribes to events. Events are received on background thread.
        /// </summary>
        public void Connect()
        {
            try
            {
                eyetracker = EyetrackerFactory.CreateEyetracker(info, EventThreadingOptions.BackgroundThread);

                // subscribe to eyetracker events
                eyetracker.ConnectionError += ConnectionError;
                foreach (EventHandler <FramerateChangedEventArgs> handler in framerateChangedHandlers)
                {
                    eyetracker.FramerateChanged += handler;
                }
                foreach (EventHandler <GazeDataEventArgs> handler in gazeDataHandlers)
                {
                    eyetracker.GazeDataReceived += handler;
                }

                eyetracker.StartTracking();
            }
            catch (EyetrackerException ee)
            {
                Disconnect();
                if (ee.ErrorCode == 0x20000402)
                {
                    throw new Exception("Failed to upgrade protocol. Upgrade firmware to version 2.0.0 or higher.", ee);
                }

                throw ee;
            }
            catch (Exception e)
            {
                Disconnect();
                throw e;
            }
        }
Пример #4
0
        public static Point GetGazePointInScreenPixels(IEyetracker eyetracker)
        {
            var w  = System.Windows.Forms.Screen.PrimaryScreen;
            var gx = eyetracker.X * w.Bounds.Width;
            var gy = eyetracker.Y * w.Bounds.Height;

            return(new Point(gx, gy));
        }
Пример #5
0
 public Eyetracker()
 {
     if (!EyetrackerFactory.Default.CanCreateEyetracker)
     {
         throw new CannotCreateEyetrackerException();
     }
     _eyetracker = EyetrackerFactory.Default.Create();
 }
Пример #6
0
        public GazeCaret(IWpfTextView textView, KeyboardListener keyboard, IEyetracker eyetracker)
        {
            _textView   = textView;
            _keyboard   = keyboard;
            _eyetracker = eyetracker;

            _keyboard.CarretAction += OnCarretAction;
        }
        private void OnLoaded(object sender, RoutedEventArgs e)
        {
            _eyetracker  = new Eyetracker();
            _rootElement = GetVisualChild(0) as FrameworkElement;

            ImageEffect.Texture2 = new ImageBrush(new BitmapImage(new Uri("./Images/wood.jpg", UriKind.Relative)));

            CompositionTarget.Rendering += CompositionTargetOnRendering;
        }
Пример #8
0
        public GazeScroll(IWpfTextView textView, KeyboardListener keyboard, IEyetracker eyetracker)
        {
            _textView = textView;
            _keyboard = keyboard;
            _gaze     = eyetracker;

            _textView.Closed       += OnTextViewClosed;
            _keyboard.UpdateScroll += OnUpdateScroll;
        }
Пример #9
0
        // constructor
        public CalibrationRunner(IEyetracker Eyetracker, float Interval)
        {
            FEyetracker = Eyetracker;
            FEyetracker.ConnectionError += HandleConnectionError;

            FIntervalTime      = Interval;
            FCalibrationPoints = new Queue <Point2D>();
            FSleepTimer        = new System.Timers.Timer();
        }
Пример #10
0
        // establich connection to eyetracker device
        private void ConnectToTrackerAndStartTracking(EyetrackerInfo info)
        {
            try
            {
                if (FEyetracker == null)
                {
                    // get tracker representation from EyetrackerInfo
                    FEyetracker = EyetrackerFactory.CreateEyetracker(info);
                }

                FEyetracker.ConnectionError -= HandleConnectionError;

                // Trigger device-status-update event for IS1Node
                UpdateDeviceStatus(FTrackerInfo.Status);

                FConnectionName = info.ProductId;
                if (FSyncManager == null)
                {
                    FSyncManager = new SyncManager(FClock, info);
                    FSyncManager.SyncStateChanged += HandleSyncStateChanged;
                }

                SyncState st = FSyncManager.SyncState;
                if (st.StateFlag == SyncStateFlag.Unsynchronized)
                {
                    // TODO: handle the case that eyetracker is unsynchronized to make sure that et-status gets OK
                }

                // register eventhandlers
                FEyetracker.ConnectionError += HandleConnectionError;

                // trigger device-status-update event for IS1Node
                UpdateDeviceStatus(FTrackerInfo.Status);
            }
            catch (EyetrackerException ee)
            {
                if (ee.ErrorCode == 0x20000402)
                {
                    // trigger custom-error event for IS1Node
                    OnCustomError("EyetrackerException occured (errorCode " + ee.ErrorCode.ToString() + ") - Failed to upgrade protocol." +
                                  "This probably means that the firmware needs to be upgraded to a version that supports the new sdk.");
                }
                else
                {
                    // trigger custom-error event for IS1Node
                    OnCustomError("EyetrackerException occured (errorCode " + ee.ErrorCode.ToString() + ") - Eyetracker responded with error" + ee);
                }
                DisconnectEyetracker(false);
            }
            catch (Exception e)
            {
                // trigger custom-error event for IS1Node
                OnCustomError("Could not connect to eyetracker. " + "Connection failed" + "(" + e.Message + ")");
                DisconnectEyetracker(false);
            }
        }
Пример #11
0
 /// <summary>
 /// Unsubscribes from events and disconnects eyetracker.
 /// </summary>
 public void Disconnect()
 {
     if (eyetracker != null)
     {
         eyetracker.ConnectionError -= ConnectionError;
         eyetracker.Dispose();
         eyetracker = null;
         info       = null;
     }
 }
Пример #12
0
        public static bool IsLookingAt(this IEyetracker eyetracker, EnvDTE.Window window)
        {
            var gazePixels = ScreenHelpers.GetGazePointInScreenPixels(eyetracker);

            ThreadHelper.ThrowIfNotOnUIThread();

            var x = gazePixels.X - window.Left;
            var y = gazePixels.Y - window.Top;

            return(x > 0 && x < window.Width && y > 0 && y < window.Height);
        }
Пример #13
0
        /// <summary>
        ///   The disconnect tracker method.
        /// </summary>
        private void DisconnectTracker()
        {
            if (connectedTracker == null)
            {
                return;
            }

            connectedTracker.GazeDataReceived -= this.ConnectedTrackerGazeDataReceived;
            connectedTracker.Dispose();
            connectedTracker = null;
            this.isTracking  = false;

            this.syncManager.Dispose();
        }
Пример #14
0
        public static IEyetracker AdaptTo(this IEyetracker eyetracker, FrameworkElement elm)
        {
            var elementScreenBounds = new Rect(
                elm.PointToScreen(new Point(0, 0)),
                elm.PointToScreen(new Point(elm.ActualWidth, elm.ActualHeight)));

            var w            = System.Windows.Forms.Screen.PrimaryScreen;
            var gazeInPixels = new Point(
                eyetracker.X * w.Bounds.Width,
                eyetracker.Y * w.Bounds.Height);

            var relativeGaze = Clamp(gazeInPixels - elementScreenBounds.TopLeft, elementScreenBounds.Size);

            return(new ClampedTracker(
                       (float)(relativeGaze.X / elementScreenBounds.Width),
                       (float)(relativeGaze.Y / elementScreenBounds.Height)));
        }
Пример #15
0
        void FEyetrackerIn_Changed(IDiffSpread <IEyetracker> spread)
        {
            if (spread[0] == null)
            {
                if (FEyetracker != null)
                {
                    FEyetracker.Dispose();
                    FEyetracker = null;
                }

                FPointsOut.SliceCount = 0;
            }
            else
            {
                FEyetracker = spread[0];
                FConnected  = true;
            }
        }
Пример #16
0
        // start the calibration process on the given Eyetracker
        public void RunCalibration(IEyetracker tracker, float interval, double threshold)
        {
            FCalibrationState = true;
            FCalibThreshold   = threshold;
            try
            {
                FSleepTimer.Interval = interval;
                FSleepTimer.Elapsed += HandleTimerElapsed;
                FEyetracker.StartCalibration();
            }
            catch (Exception ee)
            {
                FCalibrationState = false;
            }

            // begin collecting data for the calibration points
            StartNextOrFinish();
        }
Пример #17
0
        public Calibration RunCalibration(IEyetracker tracker)
        {
            CreatePointList();

            _tracker = tracker;
            _tracker.ConnectionError += HandleConnectionError;

            // Inform the eyetracker that we want to run a calibration
            _tracker.StartCalibration();

            _calibrationForm.ClearCalibrationPoint();
            _calibrationForm.ShowDialog();

            // Inform the eyetracker that we have finished
            // the calibration routine
            _tracker.StopCalibration();

            return _calibrationResult;
        }
Пример #18
0
        /// <summary>
        /// Unsubscribes from events and disconnects eyetracker.
        /// </summary>
        public void Disconnect()
        {
            if (eyetracker != null)
            {
                eyetracker.ConnectionError -= ConnectionError;
                foreach (EventHandler <FramerateChangedEventArgs> handler in framerateChangedHandlers)
                {
                    eyetracker.FramerateChanged -= handler;
                }
                foreach (EventHandler <GazeDataEventArgs> handler in gazeDataHandlers)
                {
                    eyetracker.GazeDataReceived -= handler;
                }

                eyetracker.Dispose();
                eyetracker = null;
                info       = null;
            }
        }
Пример #19
0
    /// <summary>
    /// The method runs the calibration of the tobii device.
    /// </summary>
    /// <param name="givenTracker">The <see cref="IEyetracker"/> tracker</param>
    /// <returns>A <see cref="Calibration"/> object</returns>
    public Calibration RunCalibration(IEyetracker givenTracker)
    {
      this.CreatePointList();

      this.tracker = givenTracker;
      this.tracker.ConnectionError += this.HandleConnectionError;

      // Inform the eyetracker that we want to run a calibration
      this.tracker.StartCalibration();

      this.tobiiCalibrationForm.ClearCalibrationPoint();
      PresentationScreen.PutFormOnPresentationScreen(this.tobiiCalibrationForm, true);
      this.tobiiCalibrationForm.ShowDialog();

      // Inform the eyetracker that we have finished 
      // the calibration routine
      this.tracker.StopCalibration();

      return this.calibrationResult;
    }
        /// <summary>
        /// Initializes a new instance of the <see cref="TobiiEyeTracker4C"/> class.
        /// </summary>
        /// <param name="updateIntervalms">The update interval, in ms.</param>
        /// <exception cref="ArgumentOutOfRangeException">The update interval must be >= 10ms</exception>
        /// <exception cref="Exception">Device not found.</exception>
        public TobiiEyeTracker4C(int updateIntervalms = 100)
        {
            if (updateIntervalms < 10)
            {
                throw new ArgumentOutOfRangeException("The update interval must be >= 10ms");
            }
            _updateInterval = updateIntervalms;
            _eyetracker     = new Eyetracker();

            if (_eyetracker is null)
            {
                throw new Exception("Device not found.");
            }

            _uiDispatcher = Dispatcher.CurrentDispatcher;
            _screenWidth  = SystemParameters.PrimaryScreenWidth;
            _screenHeight = SystemParameters.PrimaryScreenHeight;

            UpdateAsync();
        }
Пример #21
0
        /// <summary>
        /// The method runs the calibration of the tobii device.
        /// </summary>
        /// <param name="givenTracker">The <see cref="IEyetracker"/> tracker</param>
        /// <returns>A <see cref="Calibration"/> object</returns>
        public Calibration RunCalibration(IEyetracker givenTracker)
        {
            this.CreatePointList();

            this.tracker = givenTracker;
            this.tracker.ConnectionError += this.HandleConnectionError;

            // Inform the eyetracker that we want to run a calibration
            this.tracker.StartCalibration();

            this.tobiiCalibrationForm.ClearCalibrationPoint();
            PresentationScreen.PutFormOnPresentationScreen(this.tobiiCalibrationForm, true);
            this.tobiiCalibrationForm.ShowDialog();

            // Inform the eyetracker that we have finished
            // the calibration routine
            this.tracker.StopCalibration();

            return(this.calibrationResult);
        }
Пример #22
0
        /// <summary>
        /// This methods connects to the tracker.
        /// </summary>
        /// <param name="info">
        /// A <see cref="EyetrackerInfo"/>with information about the
        ///   eyetracker to connect to.
        /// </param>
        private void ConnectToTracker(EyetrackerInfo info)
        {
            try
            {
                connectedTracker = EyetrackerFactory.CreateEyetracker(info);
                connectedTracker.ConnectionError       += this.HandleConnectionError;
                this.tobiiSettings.ConnectedTrackerName = connectedTracker.GetUnitName();

                this.tobiiClock  = new Clock();
                this.syncManager = new SyncManager(this.tobiiClock, info);

                connectedTracker.GazeDataReceived += this.ConnectedTrackerGazeDataReceived;
                connectedTracker.StartTracking();
            }
            catch (EyetrackerException ee)
            {
                if (ee.ErrorCode == 0x20000402)
                {
                    MessageBox.Show(
                        Resources.TobiiTracker_ConnectToTrackerFailed,
                        "Upgrade Failed",
                        MessageBoxButtons.OK,
                        MessageBoxIcon.Error);
                }
                else
                {
                    MessageBox.Show("Eyetracker responded with error " + ee, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }

                this.DisconnectTracker();
            }
            catch (Exception)
            {
                MessageBox.Show(
                    "Could not connect to eyetracker.",
                    "Connection Failed",
                    MessageBoxButtons.OK,
                    MessageBoxIcon.Error);
                this.DisconnectTracker();
            }
        }
Пример #23
0
 void FEyetrackerIn_Changed(IDiffSpread <IEyetracker> spread)
 {
     if (spread.SliceCount == 0)
     {
         if (FEyetracker != null)
         {
             FEyetracker.StopTracking();
             FEyetracker.Dispose();
             FEyetracker = null;
         }
         FSliceCount = 0;
     }
     else
     {
         FEyetracker = spread[0];
         // maybe leave this line away??
         // FEyetracker.StartTracking();
         // FEyetracker.GazeDataReceived += GazeDataReceive;
         FSliceCount = spread.SliceCount;
     }
     FConnectionChanged = true;
 }
Пример #24
0
        private void ConnectToTracker(EyetrackerInfo info)
        {
            try
            {
                _connectedTracker = EyetrackerFactory.CreateEyetracker(info);
                _connectedTracker.ConnectionError += HandleConnectionError;
                _connectionName = info.ProductId;

                _syncManager = new SyncManager(_clock, info);

                _connectedTracker.GazeDataReceived += _connectedTracker_GazeDataReceived;
                _connectedTracker.FramerateChanged += _connectedTracker_FramerateChanged;
            }
            catch (EyetrackerException ee)
            {
                if(ee.ErrorCode == 0x20000402)
                {
                    MessageBox.Show("Failed to upgrade protocol. " +
                        "This probably means that the firmware needs" +
                        " to be upgraded to a version that supports the new sdk.","Upgrade Failed",MessageBoxButtons.OK,
                        MessageBoxIcon.Error);
                }
                else
                {
                    MessageBox.Show("Eyetracker responded with error " + ee, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }

                DisconnectTracker();
            }
            catch(Exception)
            {
                MessageBox.Show("Could not connect to eyetracker.","Connection Failed",MessageBoxButtons.OK,MessageBoxIcon.Error);
                DisconnectTracker();
            }

            UpdateUIElements();
        }
Пример #25
0
        /// <summary>
        /// Connects to eyetracker and subscribes to events. Events are received on background thread.
        /// </summary>
        public void Connect()
        {
            try
            {
                eyetracker = EyetrackerFactory.CreateEyetracker(info, EventThreadingOptions.BackgroundThread);
                eyetracker.ConnectionError += ConnectionError;
                eyetracker.StartTracking();
            }
            catch (EyetrackerException ee)
            {
                Disconnect();
                if (ee.ErrorCode == 0x20000402)
                {
                    throw new Exception("Failed to upgrade protocol. Upgrade firmware to version 2.0.0 or higher.", ee);
                }

                throw ee;
            }
            catch (Exception e)
            {
                Disconnect();
                throw e;
            }
        }
Пример #26
0
        /// <summary>
        /// Unsubscribes from events and disconnects eyetracker.
        /// </summary>
        public void Disconnect()
        {
            if (eyetracker != null)
            {
                eyetracker.ConnectionError -= ConnectionError;
                foreach (EventHandler<FramerateChangedEventArgs> handler in framerateChangedHandlers)
                {
                    eyetracker.FramerateChanged -= handler;
                }
                foreach (EventHandler<GazeDataEventArgs> handler in gazeDataHandlers)
                {
                    eyetracker.GazeDataReceived -= handler;
                }

                eyetracker.Dispose();
                eyetracker = null;
                info = null;
            }
        }
Пример #27
0
        /// <summary>
        /// Connects to eyetracker and subscribes to events. Events are received on background thread.
        /// </summary>
        public void Connect()
        {
            try
            {
                eyetracker = EyetrackerFactory.CreateEyetracker(info, EventThreadingOptions.BackgroundThread);

                // subscribe to eyetracker events
                eyetracker.ConnectionError += ConnectionError;
                foreach (EventHandler<FramerateChangedEventArgs> handler in framerateChangedHandlers)
                {
                    eyetracker.FramerateChanged += handler;
                }
                foreach (EventHandler<GazeDataEventArgs> handler in gazeDataHandlers)
                {
                    eyetracker.GazeDataReceived += handler;
                }

                eyetracker.StartTracking();
            }
            catch (EyetrackerException ee)
            {
                Disconnect();
                if (ee.ErrorCode == 0x20000402)
                {
                    throw new Exception("Failed to upgrade protocol. Upgrade firmware to version 2.0.0 or higher.", ee);
                }

                throw ee;
            }
            catch (Exception e)
            {
                Disconnect();
                throw e;
            }
        }
Пример #28
0
        private void DisconnectTracker()
        {
            if(_connectedTracker != null)
            {
                _connectedTracker.GazeDataReceived -= _connectedTracker_GazeDataReceived;
                _connectedTracker.Dispose();
                _connectedTracker = null;
                _connectionName = string.Empty;
                _isTracking = false;

                _syncManager.Dispose();
            }
        }
Пример #29
0
    /// <summary>
    ///   The disconnect tracker method.
    /// </summary>
    private void DisconnectTracker()
    {
      if (connectedTracker == null)
      {
        return;
      }

      connectedTracker.GazeDataReceived -= this.ConnectedTrackerGazeDataReceived;
      connectedTracker.Dispose();
      connectedTracker = null;
      this.isTracking = false;

      this.syncManager.Dispose();
    }
Пример #30
0
    /// <summary>
    /// This methods connects to the tracker.
    /// </summary>
    /// <param name="info">
    /// A <see cref="EyetrackerInfo"/>with information about the
    ///   eyetracker to connect to.
    /// </param>
    private void ConnectToTracker(EyetrackerInfo info)
    {
      try
      {
        connectedTracker = EyetrackerFactory.CreateEyetracker(info);
        connectedTracker.ConnectionError += this.HandleConnectionError;
        this.tobiiSettings.ConnectedTrackerName = connectedTracker.GetUnitName();

        this.tobiiClock = new Clock();
        this.syncManager = new SyncManager(this.tobiiClock, info);

        connectedTracker.GazeDataReceived += this.ConnectedTrackerGazeDataReceived;
        connectedTracker.StartTracking();
      }
      catch (EyetrackerException ee)
      {
        if (ee.ErrorCode == 0x20000402)
        {
          MessageBox.Show(
            Resources.TobiiTracker_ConnectToTrackerFailed, 
            "Upgrade Failed", 
            MessageBoxButtons.OK, 
            MessageBoxIcon.Error);
        }
        else
        {
          MessageBox.Show("Eyetracker responded with error " + ee, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
        }

        this.DisconnectTracker();
      }
      catch (Exception)
      {
        MessageBox.Show(
          "Could not connect to eyetracker.", 
          "Connection Failed", 
          MessageBoxButtons.OK, 
          MessageBoxIcon.Error);
        this.DisconnectTracker();
      }
    }
Пример #31
0
 /// <summary>
 /// Unsubscribes from events and disconnects eyetracker.
 /// </summary>
 public void Disconnect()
 {
     if (eyetracker != null)
     {
         eyetracker.ConnectionError -= ConnectionError;
         eyetracker.Dispose();
         eyetracker = null;
         info = null;
     }
 }
Пример #32
0
        public static Point GetRelativeGazePointForElement(IEyetracker eyetracker, FrameworkElement element)
        {
            var screenGazePoint = ScreenHelpers.GetGazePointInScreenPixels(eyetracker);

            return(element.PointFromScreen(screenGazePoint));
        }
Пример #33
0
        private void ConnectToTracker(EyetrackerInfo info)
        {
            try
            {
                LogEvent.Engine.Write("Tracker: Connecting to " + info.Model);
                tracker = EyetrackerFactory.CreateEyetracker(info);
                tracker.ConnectionError += HandleConnectionError;
                connectionName = info.ProductId;
                syncManager = new SyncManager(clock, info);

                tracker.GazeDataReceived += tracker_GazeDataReceived;
                tracker.FramerateChanged += tracker_FramerateChanged;
                LogEvent.Engine.Write(string.Format("Connected to {0} FrameRate {1}.", info.Model, tracker.GetFramerate()));
                tracker.SetFramerate(60);
                ListFramerates();
                IsConnected = true;
            }
            catch (EyetrackerException ee)
            {
                foreach (TraceListener tl in Trace.Listeners)
                {
                    tl.Flush();
                    tl.Dispose();
                }

                if (ee.ErrorCode == 0x20000402)
                {
                    LogEvent.Engine.Write("Failed to upgrade protocol. " +
                                          "This probably means that the firmware needs" +
                                          " to be upgraded to a version that supports the new sdk.");
                }
                else
                    LogEvent.Engine.Write("Eyetracker responded with error " + ee);

                DisconnectTracker();
            }
            catch (Exception)
            {
                foreach (TraceListener tl in Trace.Listeners)
                {
                    tl.Flush();
                    tl.Dispose();
                }
                LogEvent.Engine.Write("Could not connect to eyetracker.");
                DisconnectTracker();
            }
        }
Пример #34
0
        // called when data for any output pin is requested
        public void Evaluate(int SpreadMax)
        {
            if (FInit)
            {
                FEyetrackerInfoIn.Changed += new SpreadChangedEventHander <EyetrackerInfo>(FEyetrackerInfo_Changed);
            }

            if (!FXConfigSetToOutput && FUpdateIn.IsChanged && FUpdateIn[0] == true)
            {
                ReadAndOutputXConfig();
            }

            // Enabled true
            if ((FConnectionChanged || FEnable.IsChanged) && FEnable[0] == true)
            {
                try
                {
                    if (FEyetrackerInfo != null)
                    {
                        FEyetrackerOut.SliceCount = FEyetrackerInfoIn.SliceCount;
                        if (FSyncManager == null)
                        {
                            FClock       = new Clock();
                            FSyncManager = new SyncManager(FClock, FEyetrackerInfo);
                            FSyncManager.SyncManagerError += new EventHandler(FSyncManager_SyncManagerError);
                            FSyncManager.SyncStateChanged += new EventHandler <SyncStateChangedEventArgs>(FSyncManager_SyncStateChanged);
                        }

                        if (FEyetracker == null)
                        {
                            // get tracker representation from EyetrackerInfo
                            FEyetracker = EyetrackerFactory.CreateEyetracker(FEyetrackerInfo);
                            FEyetracker.ConnectionError       += new EventHandler <ConnectionErrorEventArgs>(FEyetracker_ConnectionError);
                            FEyetracker.XConfigurationChanged += new EventHandler <XConfigurationChangedEventArgs>(FEyetracker_XConfigurationChanged);
                            FEyetracker.FramerateChanged      += new EventHandler <FramerateChangedEventArgs>(FEyetracker_FramerateChanged);
                            FEyetrackerOut[0] = FEyetracker;
                            ReadAndOutputXConfig();
                        }
                    }
                }
                catch (EyetrackerException ex)
                {
                    if (ex.ErrorCode == 0x20000402)
                    {
                        // trigger custom-error event for IS1Node
                        FLogger.Log(LogType.Error, "EyetrackerException occured (errorCode " + ex.ErrorCode.ToString() + ") - Failed to upgrade protocol." +
                                    "This probably means that the firmware needs to be upgraded to a version that supports the new sdk.");
                    }
                    else
                    {
                        FLogger.Log(LogType.Error, "Error Code: " + ex.ErrorCode + " Message: " + ex.Message);
                    }
                }
                catch (Exception e)
                {
                    FLogger.Log(LogType.Error, "Could not connect to eyetracker. " + "Connection failed" + "(" + e.Message + ")");
                }
            }

            // Enabled false
            else if ((FConnectionChanged || FEnable.IsChanged) && FEnable[0] == false)
            {
                // disconnect and stop eye tracker correctly
                if (FEyetracker != null)
                {
                    FEyetracker.ConnectionError -= new EventHandler <ConnectionErrorEventArgs>(FEyetracker_ConnectionError);
                    FEyetracker.Dispose();
                    FEyetracker = null;
                    FEyetrackerOut.SliceCount = 1;
                }
                if (FSyncManager != null)
                {
                    FSyncManager.SyncManagerError -= new EventHandler(FSyncManager_SyncManagerError);
                    FSyncManager.SyncStateChanged -= new EventHandler <SyncStateChangedEventArgs>(FSyncManager_SyncStateChanged);
                    FSyncManager.Dispose();
                    FSyncManager = null;
                    FClock       = null;
                }
                frameCount   = 0;
                noXConfCount = 0;
            }

            // input params changed
            if (FSyncManager != null && FEyetracker != null)
            {
                if (FFramerateIn.IsChanged)
                {
                    FEyetracker.SetFramerate(FFramerateIn[0]);
                }

                if (FUpdateIn.IsChanged && FUpdateIn[0] == true)
                {
                    FSerial[0] = FEyetracker.GetUnitInfo().SerialNumber;
                    IList <float> Framerate = FEyetracker.EnumerateFramerates();
                    FFramerates.SliceCount = Framerate.Count;
                    if (Framerate.Count == 1)
                    {
                        FCurrentFramerate[0] = Framerate[0];
                    }
                    for (int i = 0; i < Framerate.Count; i++)
                    {
                        FFramerates[i] = Framerate[i];
                    }
                    try
                    {
                        IList <string> IlluminationModes = FEyetracker.EnumerateIlluminationModes();
                        FIlluminationMode.SliceCount = IlluminationModes.Count;
                        for (int i = 0; i < IlluminationModes.Count; i++)
                        {
                            FIlluminationMode[i] = IlluminationModes[i];
                        }
                    }
                    catch (EyetrackerException ex)
                    {
                        FLogger.Log(LogType.Error, "Could not set illumination mode, " + ex.Message);
                    }

                    XConfiguration x = FEyetracker.GetXConfiguration();
                    FLowerLeft[0]  = new Vector3D(x.LowerLeft.X, x.LowerLeft.Y, x.LowerLeft.Z) * 0.1;
                    FUpperLeft[0]  = new Vector3D(x.UpperLeft.X, x.UpperLeft.Y, x.UpperLeft.Z) * 0.1;
                    FUpperRight[0] = new Vector3D(x.UpperRight.X, x.UpperRight.Y, x.UpperRight.Z) * 0.1;
                }
                if (FXConfigurationIn.IsChanged)
                {
                    try
                    {
                        if (FXConfigurationIn[0] != null)
                        {
                            FEyetracker.SetXConfiguration(FXConfigurationIn[0]);
                        }
                    }
                    catch (Exception ee)
                    {
                        FLogger.Log(LogType.Error, "Could not set XConfiguration, " + ee.Message);
                    }
                }
            }

            if (FConnectionChanged && FEyetrackerInfo == null)
            {
                // Eyetracker has been disconnected, (recognized by error)
            }

            if (FEyetrackerInfoIn.IsChanged)
            {
            }
            FConnectionChanged = false;
            FInit = false;
        }
Пример #35
0
        public static bool IsLookingAt(this IEyetracker eyetracker, FrameworkElement element)
        {
            var wpfGazePoint = WpfHelpers.GetRelativeGazePointForElement(eyetracker, element);

            return(WpfHelpers.IsLookingAtElement(wpfGazePoint, element));
        }
Пример #36
0
 public static Vector ToVector(this IEyetracker eyetracker)
 {
     return(new Vector(eyetracker.X, eyetracker.Y));
 }
Пример #37
0
 public MainWindow()
 {
     _eyeTracker = new Eyetracker();
     InitializeComponent();
     CompositionTarget.Rendering += delegate { Content = $"X: {_eyeTracker.X} Y: {_eyeTracker.Y}"; };
 }
Пример #38
0
        /// <summary>
        /// Connects to eyetracker and subscribes to events. Events are received on background thread.
        /// </summary>
        public void Connect()
        {
            try
            {
                eyetracker = EyetrackerFactory.CreateEyetracker(info, EventThreadingOptions.BackgroundThread);
                eyetracker.ConnectionError += ConnectionError;
                eyetracker.StartTracking();
            }
            catch (EyetrackerException ee)
            {
                Disconnect();
                if (ee.ErrorCode == 0x20000402)
                {
                    throw new Exception("Failed to upgrade protocol. Upgrade firmware to version 2.0.0 or higher.", ee);
                }

                throw ee;
            }
            catch (Exception e)
            {
                Disconnect();
                throw e;
            }
        }
Пример #39
0
        private void _trackButton_Click(object sender, RoutedEventArgs e)
        {
            if(_tracking)
            {
                _tracker.GazeDataReceived -= _tracker_GazeDataReceived;
                _tracker.StopTracking();

                _tracker.Dispose();
                _trackButton.Content = "Track";
                _tracking = false;
            }
            else
            {
                EyetrackerInfo etInfo = _trackerCombo.SelectedItem as EyetrackerInfo;
                if(etInfo != null)
                {
                    _tracker = EyetrackerFactory.CreateEyetracker(etInfo);

                    UpdateHeadMovementBox();
                    UpdateScreen();

                    _tracker.StartTracking();

                    _tracker.GazeDataReceived += _tracker_GazeDataReceived;
                    _tracker.HeadMovementBoxChanged += _tracker_HeadMovementBoxChanged;
                    _tracker.XConfigurationChanged += _tracker_XConfigurationChanged;

                    _trackButton.Content = "Stop";
                    _tracking = true;
                }

            }
        }