/// <summary> /// Processes the message. /// </summary> /// <param name="msg">The message from the haytham server.</param> private void ProcessMessage(string msg) { if (msg == "Commands|CalibrationFinished|") { this.OnCalibrationFinished(EventArgs.Empty); return; } string[] msgArray = this.ConvertMsgToArray(msg); if (msg.StartsWith("Eye|")) { var newData = new GazeData(); // Get time var timeInTicks = long.Parse(msgArray[0]); // Convert to milliseconds newData.Time = (long)(timeInTicks / 10000.0); // Get Position in screen coordinates var absoluteX = float.Parse(msgArray[1]); var absoluteY = float.Parse(msgArray[2]); // Convert to relative coordinates, cause this is expected by Ogama newData.GazePosX = absoluteX / this.presentationScreenSize.Width; newData.GazePosY = absoluteY / this.presentationScreenSize.Height; newData.PupilDiaX = int.Parse(msgArray[3]); this.OnGazeDataReceived(new GazeDataChangedEventArgs(newData)); var newTrackStatusData = new TrackStatusData(); newTrackStatusData.TrackedEyes = Eye.Left; var isPupilFound = bool.Parse(msgArray[4]); newTrackStatusData.LeftEyeValidity = isPupilFound ? Validity.Good : Validity.Missing; var pupilPosX = float.Parse(msgArray[5]); var pupilPosY = float.Parse(msgArray[6]); newTrackStatusData.LeftEyePosition = new Vector3D(pupilPosX, pupilPosY, 0); this.OnTrackStatusDataChanged(new TrackStatusDataChangedEventArgs(newTrackStatusData)); } }
/// <summary> /// Initializes a new instance of the TrackStatusDataChangedEventArgs class. /// </summary> /// <param name="newTrackStatusData"> /// The track status data as a <see cref="TrackStatusData"/> value. /// </param> public TrackStatusDataChangedEventArgs(TrackStatusData newTrackStatusData) { this.TrackStatusData = newTrackStatusData; }