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; }
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; }
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; }
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; }