public int CompareTo(Object obj) { if (obj.GetType().Equals(this.GetType())) { Bubble other = (Bubble)(obj); if ((char)(this.Label.Content) < (char)(other.Label.Content)) { return(-1); } else if ((char)(this.Label.Content) == (char)(other.Label.Content)) { return(0); } else { return(1); } } else { return(1); } }
public void RunWordSearch() { if (TrackedSkeleton != null) { Joint MotionHandJoint = (TrackedSkeleton.Joints[MotionHand]).ScaleTo(222, 1044); Joint MotionHandJointScaled = TrackedSkeleton.Joints[MotionHand].ScaleTo(1366, 768, 0.55f, 0.55f); Joint SelectionHandJoint = (TrackedSkeleton.Joints[SelectionHand]).ScaleTo(222, 656); Joint SelectionHandJointScaled = (TrackedSkeleton.Joints[SelectionHand]).ScaleTo(1366, 768, 0.55f, 0.55f); Point MotionHandPosition = new Point((MotionHandJointScaled.Position.X), (MotionHandJointScaled.Position.Y)); Point SelectionHandPosition = new Point((SelectionHandJointScaled.Position.X), (SelectionHandJointScaled.Position.Y)); //Move Cursor //SetCursorPos((int)(MotionHandPosition.X), (int)(MotionHandPosition.Y)); Point destination_top_left = theCanvas.PointFromScreen(MotionHandPosition); destination_top_left = Point.Add(destination_top_left, new System.Windows.Vector(Pointer_Ellipse.Width / -2, Pointer_Ellipse.Height / -2)); Canvas.SetTop(Pointer_Ellipse, destination_top_left.Y); Canvas.SetLeft(Pointer_Ellipse, destination_top_left.X); //Added data position to a queue of positions that will be loaded for each letter PositionData.Enqueue("\r\n\t\t\t\t<entry motionhand_x=\"" + MotionHandPosition.X + "\" motionhand_y=\"" + MotionHandPosition.Y + "\" selectionhand_x=\"" + SelectionHandPosition.X + "\" selectionhand_y=\"" + SelectionHandPosition.Y + "\" relative_timestamp=\"" + DateTime.Now.Subtract(StartTime).TotalMilliseconds + "\" />"); //Setup the default colors of the bubbles foreach (Bubble beta in Letters) { if (CircleOver(beta.Ellipse)) { beta.SetColor(Brushes.LawnGreen); } else { if (CurrentNode.HasChild(beta.Word()) != null) { beta.SetColor(Brushes.Yellow); } else { beta.SetColor(Brushes.LightYellow); } } } for (int i = 0; i < selected.Count; i++) { if (!selected_off[i] && !CircleOver(selected[i].Ellipse)) { selected_off[i] = true; selected_time[i][1] = DateTime.Now; } else if (selected_off[i] && CircleOver(selected[i].Ellipse)) { TimeSpan t = selected_time[i][1].Subtract(selected_time[i][0]); selected_time[i][0] = DateTime.Now.Subtract(t); selected_time[i][1] = DateTime.Now; selected_off[i] = false; } } //Starting Case (only occurs once) if (SelectionHandLast == null) { SelectionHandLast = SelectionHandPosition; } else { //Measures the distance traveled by the selection hand SelectionHandDistance += Point.Subtract(SelectionHandLast, SelectionHandPosition).Length; SelectionHandLast = SelectionHandPosition; } //Measures the distance traveled by the motion hand if (MotionHandLast == null) { MotionHandLast = MotionHandPosition; } else { MotionHandDistance += Point.Subtract(MotionHandLast, MotionHandPosition).Length; MotionHandLast = MotionHandPosition; } foreach (Bubble beta in Letters) { if (Shift) { beta.setText(beta.Word().ToString().ToUpperInvariant()[0]); } else { beta.setText(beta.Word().ToString().ToLowerInvariant()[0]); } } Gesture MotionHandGesture = keyboardGestureTracker.track(TrackedSkeleton, TrackedSkeleton.Joints[MotionHand], nui.NuiCamera.ElevationAngle); Gesture SelectionHandGesture = regularGestureTracker.track(TrackedSkeleton, TrackedSkeleton.Joints[SelectionHand], nui.NuiCamera.ElevationAngle); if (CircleOver(CenterBubble_Ellipse)) { ReturnedToCenter = true; if (!EnterCenterFirst) { PositionData = new Queue <string>(); EnterCenterFirst = true; } if (SelectionHandGesture != null && ((SelectionHandGesture.id == GestureID.SwipeLeft && SelectionHand == JointID.HandRight) || (SelectionHandGesture.id == GestureID.SwipeRight && SelectionHand == JointID.HandLeft))) { SendKeys.SendWait("{Backspace}"); if (CenterBubble_Label.Content.ToString().Length > 0) { CenterBubble_Label.Content = CenterBubble_Label.Content.ToString().Substring(0, CenterBubble_Label.Content.ToString().Length - 1); CurrentNode = (CurrentNode.parent != null ? CurrentNode.parent : CurrentNode); } PositionData.Enqueue("\r\n\t\t\t\t<backspace motionhand_x=\"" + MotionHandPosition.X + "\" motionhand_y=\"" + MotionHandPosition.Y + "\" selectionhand_x=\"" + SelectionHandPosition.X + "\" selectionhand_y=\"" + SelectionHandPosition.Y + "\" relative_timestamp=\"" + DateTime.Now.Subtract(StartTime).TotalMilliseconds + "\" />"); } else if (SelectionHandGesture != null && SelectionHandGesture.id == GestureID.Push) { if (DateTime.Now.Subtract(last_space).TotalSeconds > 0.75) { RemoveLayout(); CurrentNode = InitialNode; ConstructLetterLayout(); SendKeys.SendWait(" "); WordStack.Push(CenterBubble_Label.Content.ToString()); string word = "\r\n\t\t<word text=\"" + WordStack.Peek() + "\">"; while (WordData.Count > 0) { word += WordData.Dequeue(); } word += "\r\n\t\t</word>"; SentenceData.Enqueue(word); WordData = new Queue <string>(); CenterBubble_Label.Content = ""; last_space = DateTime.Now; } } if ((SelectionHandGesture != null && SelectionHandGesture.id == GestureID.SwipeUp) || Shift == true) { Shift = true; foreach (Bubble beta in Letters) { beta.setText(beta.Word().ToString().ToUpperInvariant()[0]); } } if ((SelectionHandGesture != null && SelectionHandGesture.id == GestureID.SwipeDown) || Shift == false) { Shift = false; foreach (Bubble beta in Letters) { beta.setText(beta.Word().ToString().ToLowerInvariant()[0]); } } if (selected.Count > 0) { int best = 0; for (int i = 1; i < selected.Count; i++) { if (selected_time[i][1].Subtract(selected_time[i][0]).TotalDays > selected_time[best][1].Subtract(selected_time[best][0]).TotalDays) { best = i; } } Bubble select = selected[best]; Shift = false; ReturnedToCenter = false; char c = select.GetCharacter(); RemoveLayout(); WordTreeNode NextNode = CurrentNode.HasChild(c); if (NextNode == null) { NextNode = new WordTreeNode(c, false); NextNode.parent = CurrentNode; } CurrentNode = NextNode; ConstructLetterLayout(); SendKeys.SendWait(c.ToString()); CenterBubble_Label.Content = CenterBubble_Label.Content.ToString() + c.ToString(); string letter = ""; string InnerRing = (select.r == Bubble.RingStatus.INNER ? "true" : (PreviousCharacterLocation.Contains(CurrentNode) ? "false" : "outside")); letter += ("\r\n\t\t\t<print char=\"" + c + "\" selection_hand_distance=\"" + SelectionHandDistance + "\" motion_hand_distance=\"" + MotionHandDistance + "\" InnerRing=\"" + InnerRing + "\""); while (PositionData.Count > 0) { letter += PositionData.Dequeue(); } PositionData = new Queue <string>(); letter += ("\r\n\t\t\t</print>"); WordData.Enqueue(letter); SelectionHandDistance = 0.0; MotionHandDistance = 0.0; if (CurrentNode.HasChild('!') != null) { CenterBubble_Ellipse.Fill = Brushes.AntiqueWhite; } else { CenterBubble_Ellipse.Fill = Brushes.GreenYellow; } selected = new List <Bubble>(); selected_time = new List <DateTime[]>(); selected_off = new List <bool> (); } } // We can make changes to the layout if (ReturnedToCenter) { if (MotionHandGesture.id == GestureID.Still) { foreach (Bubble beta in Letters) { if (CircleOver(beta.Ellipse) && !selected.Contains(beta)) { selected.Add(beta); DateTime[] arr = new DateTime[2]; arr[0] = DateTime.Now; arr[1] = DateTime.Now; selected_time.Add(arr); selected_off.Add(false); } if (CurrentNode.HasChild(beta.Word()) != null) { beta.SetColor(Brushes.Yellow); } else { beta.SetColor(Brushes.LightYellow); } } } } } if (DateTime.Now.Subtract(BlueFlash).TotalMilliseconds < 500) { CenterBubble_Ellipse.Fill = Brushes.LightBlue; } else { if (CurrentNode.HasChild('!') != null) { CenterBubble_Ellipse.Fill = Brushes.AntiqueWhite; } else { CenterBubble_Ellipse.Fill = Brushes.GreenYellow; } } }