Ejemplo n.º 1
0
    private List<TypingGesture> ProcessGesturesPush(Point3D cursor)
    {
      if (cursor.X == -1 || cursor.Y == -1)
        return null;

      List<TypingGesture> gestures = new List<TypingGesture>();
      InputInfo info = new InputInfo() { Position = cursor };
      System.Windows.Media.Media3D.Vector3D displacement = cursor - lastPos;
      lastPos = cursor;

      if (movementSequenceSB.Length == movementSequence.Capacity)
      {
        movementSequenceSB.Remove(0, 1);
        movementSequence.RemoveAt(0);
      }

      if (displacement.X > LATERAL_THRESHOLD_PUSH || displacement.Y > LATERAL_THRESHOLD_PUSH)
        info.Movement = 'M'; //moving
      else if (Math.Abs(displacement.Z) > DEPTH_THRESHOLD)  //doing some movement on depth
      {
        if (displacement.Z < 0)
          info.Movement = 'P'; //released
        else
          info.Movement = 'R'; //pressed
      }
      else
        info.Movement = 'S'; //steady --- not moving
      movementSequenceSB.Append(info.Movement);
      movementSequence.Add(info);


      String tmpSequence = MovementSequence;
      MatchCollection taps = regexTapCrank.Matches(tmpSequence);
      if (taps.Count > 0)
      {
        Match tap = taps[0];
        gestures.Add(new TypingGesture()
        {
          Time = DateTime.Now,
          Type = GestureType.Tap,
          Position = movementSequence[tap.Index].Position
        });
        movementSequenceSB.Remove(tap.Index, tap.Length);
        movementSequence.RemoveRange(tap.Index, tap.Length);
      }
      OnPropertyChanged("MovementSequence");

      return gestures;
    }
Ejemplo n.º 2
0
    private List<TypingGesture> ProcessGesturesTimer(Point3D cursor, double delta, Key highlightedKey)
    {
      if (cursor.X == -1 || cursor.Y == -1)
        return null;

      List<TypingGesture> gestures = new List<TypingGesture>();
      InputInfo info = new InputInfo() { Position = cursor };
      System.Windows.Media.Media3D.Vector3D displacement = cursor - lastPos;
      lastPos = cursor;

      if (movementSequenceSB.Length == movementSequence.Capacity)
      {
        movementSequenceSB.Remove(0, 1);
        movementSequence.RemoveAt(0);
      }

      if (Math.Abs(displacement.X) > LATERAL_THRESHOLD_TIMER || Math.Abs(displacement.Y) > LATERAL_THRESHOLD_TIMER)
        info.Movement = 'M'; //moving
      else
        info.Movement = 'S'; //steady --- not moving
      movementSequenceSB.Append(info.Movement);
      movementSequence.Add(info);

      String tmpSequence = MovementSequence;
      if (timerState == ArmText.Typing.TimerState.Nothing)
      {
        MatchCollection starts = regexStartTimer.Matches(tmpSequence);
        if (starts.Count > 0)
        {
          Match start = starts[0];
          TimerState = ArmText.Typing.TimerState.Running;
          movementSequenceSB.Remove(start.Index, start.Length);
          movementSequence.RemoveRange(start.Index, start.Length);
        }
      }
      else if (timerState == ArmText.Typing.TimerState.Running)
      {
        MatchCollection selections = regexTapTimer.Matches(tmpSequence);
        if (selections.Count > 0)
        {
          Match selection = selections[0];
          gestures.Add(new TypingGesture()
          {
            Time = DateTime.Now,
            Type = GestureType.Tap,
            Position = movementSequence[selection.Index].Position
          });
          TimerState = ArmText.Typing.TimerState.Nothing;
          movementSequenceSB.Remove(selection.Index, selection.Length);
          movementSequence.RemoveRange(selection.Index, selection.Length);
        }
      }
      OnPropertyChanged("MovementSequence");

      return gestures;
    }
Ejemplo n.º 3
0
    private List<TypingGesture> ProcessGesturesSecondHand(Point3D cursor, Point3D secondaryCursor, double deltaTimeMilliseconds, Key highlightedKey)
    {
      if (cursor.X == -1 || cursor.Y == -1)
        return null;

      List<TypingGesture> gestures = new List<TypingGesture>();
      InputInfo info = new InputInfo() { Position = cursor };
      System.Windows.Media.Media3D.Vector3D displacement = cursor - lastPos;
      lastPos = cursor;
      if (movementSequenceSB.Length == movementSequence.Capacity)
      {
        movementSequenceSB.Remove(0, 1);
        movementSequence.RemoveAt(0);
      }
      if (displacement.X > LATERAL_THRESHOLD_TIMER || displacement.Y > LATERAL_THRESHOLD_TIMER)
        info.Movement = 'M'; //moving
      else
        info.Movement = 'S'; //steady --- not moving
      movementSequenceSB.Append(info.Movement);
      movementSequence.Add(info);

      if (timerState == ArmText.Typing.TimerState.Nothing)
      {
        String tmpSequence = MovementSequence;
        MatchCollection starts = regexStartTimer.Matches(tmpSequence);
        if (starts.Count > 0)
        {
          Match start = starts[0];
          TimerState = ArmText.Typing.TimerState.Running;
          secondHandSelectionInfo = movementSequence[start.Index];
          movementSequenceSB.Remove(start.Index, start.Length);
          movementSequence.RemoveRange(start.Index, start.Length);
        }
      }
      else if (timerState == ArmText.Typing.TimerState.Running)
      {
        if (secondaryCursor.X > LATERAL_THRESHOLD_SECOND_HAND && DateTime.Now > lastSecondHandSelection + secondaryHandSelectionTimeDelta)
        {
          gestures.Add(new TypingGesture()
          {
            Time = DateTime.Now,
            Type = GestureType.Tap,
            Position = secondHandSelectionInfo.Position
          });
          lastSecondHandSelection = DateTime.Now;
          TimerState = ArmText.Typing.TimerState.Nothing;
        }
      }
      OnPropertyChanged("MovementSequence");

      return gestures;
    }
Ejemplo n.º 4
0
    private List<TypingGesture> ProcessGesturesSwipe(Point3D cursor)
    {
      if (cursor.X == -1 || cursor.Y == -1)
        return null;

      List<TypingGesture> gestures = new List<TypingGesture>();
      InputInfo info = new InputInfo() { Position = cursor };
      lastPos = cursor;

      if (movementSequenceSB.Length == movementSequence.Capacity)
      {
        movementSequenceSB.Remove(0, 1);
        movementSequence.RemoveAt(0);
      }

      if (cursor.IsFrozen)
        info.Movement = 'S'; //steady --- not moving
      else
        info.Movement = 'M'; //moving
      movementSequenceSB.Append(info.Movement);
      movementSequence.Add(info);

      String tmpSequence = MovementSequence;
      if (timerState == ArmText.Typing.TimerState.Nothing)
      {
        MatchCollection starts = regexStartSwipe.Matches(tmpSequence);
        if (starts.Count > 0)
        {
          Match start = starts[0];
          TimerState = ArmText.Typing.TimerState.Running;
          secondHandSelectionInfo = movementSequence[start.Index];
          movementSequenceSB.Remove(start.Index, start.Length);
          movementSequence.RemoveRange(start.Index, start.Length);
        }
      }
      else if (timerState == ArmText.Typing.TimerState.Running)
      {
        MatchCollection taps = regexTapSwipe.Matches(tmpSequence);
        if (taps.Count > 0)
        {
          Match tap = taps[0];
          gestures.Add(new TypingGesture()
          {
            Time = DateTime.Now,
            Type = GestureType.Tap,
            Position = movementSequence[tap.Index].Position
          });
          TimerState = ArmText.Typing.TimerState.Nothing;
          movementSequenceSB.Remove(tap.Index, tap.Length);
          movementSequence.RemoveRange(tap.Index, tap.Length);
        }
      }
      OnPropertyChanged("MovementSequence");

      return gestures;
    }