TouchTracker.cs 3.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. using bbiwarg.Input.InputHandling;
  2. using bbiwarg.Recognition.Tracking;
  3. using bbiwarg.Utility;
  4. using System.Collections.Generic;
  5. namespace bbiwarg.Recognition.TouchRecognition
  6. {
  7. /// <summary>
  8. /// Keeps track of touches over a period of time and generates touch events
  9. /// </summary>
  10. internal class TouchTracker : Tracker<Touch, TrackedTouch>
  11. {
  12. /// <summary>
  13. /// the touch events in the current frame
  14. /// </summary>
  15. private List<TouchEvent> touchEvents;
  16. /// <summary>
  17. /// Initializes a new instance of the TouchTracker class.
  18. /// </summary>
  19. /// <param name="imageSize">Size of the input image.</param>
  20. public TouchTracker(ImageSize imageSize)
  21. : base(imageSize)
  22. {
  23. touchEvents = new List<TouchEvent>();
  24. }
  25. /// <summary>
  26. /// Calculates the similarity [0-1] of a tracked touch and a detected touch.
  27. /// </summary>
  28. /// <param name="trackedTouch">the tracked touch</param>
  29. /// <param name="detectedTouch">the detected touch</param>
  30. /// <returns>the similarity</returns>
  31. public override float calculateSimilarity(TrackedTouch trackedTouch, Touch detectedTouch)
  32. {
  33. return (trackedTouch.FingerID == detectedTouch.Finger.TrackID) ? 1 : 0;
  34. }
  35. public List<TouchEvent> flushTouchEvents()
  36. {
  37. List<TouchEvent> flushedTouchEvents = touchEvents;
  38. touchEvents = new List<TouchEvent>();
  39. return flushedTouchEvents;
  40. }
  41. /// <summary>
  42. /// Updates the tracked touches, and stores the (optimized) touches in frameData.trackedTouches and the touch events in frameData.touchEvents.
  43. /// </summary>
  44. /// <param name="frameData"></param>
  45. public void trackTouches(FrameData frameData)
  46. {
  47. trackObjects(frameData.DetectedTouches);
  48. frameData.TrackedTouches = getOptimizedTouches();
  49. frameData.TouchEvents = flushTouchEvents();
  50. }
  51. /// <summary>
  52. /// Creates a new TrackedTouch
  53. /// </summary>
  54. /// <param name="detectedObject">the detected touch</param>
  55. /// <returns>a new TrackedTouch</returns>
  56. protected override TrackedTouch createTrackedObject(Touch detectedObject)
  57. {
  58. TrackedTouch tt = new TrackedTouch(idPool.getNextUnusedID(), detectedObject, Parameters.TouchTrackerNumFramesDetectedUntilTracked, Parameters.TouchTrackerNumFramesLostUntilDeleted);
  59. tt.TouchEvent += touchEvent;
  60. return tt;
  61. }
  62. /// <summary>
  63. /// Get all optimized representations of all tracked touches
  64. /// </summary>
  65. /// <returns>all optimized tracked touches</returns>
  66. private List<Touch> getOptimizedTouches()
  67. {
  68. List<Touch> optimizedTouchs = new List<Touch>();
  69. foreach (TrackedTouch tp in TrackedObjects)
  70. {
  71. if (tp.IsTouchActive)
  72. optimizedTouchs.Add(tp.OptimizedTouch);
  73. }
  74. return optimizedTouchs;
  75. }
  76. private void touchEvent(object sender, TouchEvent e)
  77. {
  78. touchEvents.Add(e);
  79. }
  80. }
  81. }