private void HandleHandPointerGrip(HandPointer handPointer) { if (handPointer == null) { return; } if (this.capturedHandPointer != handPointer) { if (handPointer.Captured == null) { // Only capture hand pointer if it isn't already captured handPointer.Capture(this); } else { // Some other control has capture, ignore grip return; } } this.lastGripState = GripState.Gripped; this.lastGripTimeStamp = handPointer.TimestampOfLastUpdate; this.scrollViewerInertiaScroller.Stop(); this.gripPoint = handPointer.GetPosition(this); this.startingScrollOffset = new Point(this.HorizontalOffset, this.VerticalOffset); }
/// <summary> /// Check the position of the hand on the Y-axis to determine what track it is over /// </summary> /// <param name="handPointer">A Kinect.Toolkit.Controls.HandPointer object</param> /// <returns>The track number</returns> public int CheckHandForTrack(HandPointer handPointer) { double y = handPointer.GetPosition(tracksUI).Y; int trackSelected = (int)y / 101; return trackSelected; }
/// <summary> /// Check the position of the hand on the X-axis to determine what slot it is over /// </summary> /// <param name="hand">A Kinect.Toolkit.Controls.HandPointer object</param> /// <returns>The slot number</returns> public int CheckHandForSlot(HandPointer hand) { double x = hand.GetPosition(tracksUI).X; int slot = (int)x / 101; return slot; }
private void HandleHandPointerChanges( HandPointer handPointer, bool pressedChanged, bool positionChanged, bool primaryHandOfPrimaryUserChanged, bool removed) { bool doPress = false; bool doRelease = false; bool doMove = false; bool doLostCapture = false; bool doGrip = false; bool doGripRelease = false; if (removed) { // Deny the existence of this hand pointer doRelease = handPointer.IsPressed; doLostCapture = handPointer.Captured != null; } else { if (pressedChanged) { doPress = handPointer.IsPressed; doRelease = !handPointer.IsPressed; } if (positionChanged) { doMove = true; } doGrip = handPointer.HandEventType == HandEventType.Grip; doGripRelease = handPointer.HandEventType == HandEventType.GripRelease; } if (doLostCapture) { SwitchCapture(handPointer, handPointer.Captured, null); } var targetElement = handPointer.Captured; if (targetElement == null) { var position = handPointer.GetPosition(this.InteractionRootElement); targetElement = this.HitTest(position); } // Update internal enter/leave state HashSet<UIElement> oldIntersectingElements; this.UpdateIntersections(handPointer, removed ? null : targetElement, out oldIntersectingElements); // See if this hand pointer is participating in a grip-initiated // interaction. var newIsInGripInteraction = false; if (targetElement != null) { var args = new QueryInteractionStatusEventArgs(handPointer, this.InteractionRootElement); targetElement.RaiseEvent(args); if (args.Handled && args.IsInGripInteraction) { newIsInGripInteraction = true; } } handPointer.IsInGripInteraction = newIsInGripInteraction; //// After this point there should be no more changes to the internal //// state of the handPointers. We don't want event handlers calling us //// when our internal state is inconsistent. DoIntersectionNotifications(handPointer, primaryHandOfPrimaryUserChanged, oldIntersectingElements); if (targetElement == null) { return; } if (doGrip) { var args = CreateEventArgs(KinectRegion.HandPointerGripEvent, targetElement, handPointer); targetElement.RaiseEvent(args); } if (doGripRelease) { var args = CreateEventArgs(KinectRegion.HandPointerGripReleaseEvent, targetElement, handPointer); targetElement.RaiseEvent(args); } if (doPress) { var args = CreateEventArgs(KinectRegion.HandPointerPressEvent, targetElement, handPointer); targetElement.RaiseEvent(args); } if (doMove) { var args = CreateEventArgs(KinectRegion.HandPointerMoveEvent, targetElement, handPointer); targetElement.RaiseEvent(args); } if (doRelease) { var args = CreateEventArgs(KinectRegion.HandPointerPressReleaseEvent, targetElement, handPointer); targetElement.RaiseEvent(args); } }
private void HandleHandPointerChanges( HandPointer handPointer, bool pressedChanged, bool positionChanged, bool primaryHandOfPrimaryUserChanged, bool removed) { bool doPress = false; bool doRelease = false; bool doMove = false; bool doLostCapture = false; bool doGrip = false; bool doGripRelease = false; // bool doSwipe = false; if (removed) { // Deny the existence of this hand pointer doRelease = handPointer.IsPressed; doLostCapture = handPointer.Captured != null; } else { if (pressedChanged) { doPress = handPointer.IsPressed; doRelease = !handPointer.IsPressed; } if (positionChanged) { doMove = true; } doGrip = handPointer.HandEventType == HandEventType.Grip; doGripRelease = handPointer.HandEventType == HandEventType.GripRelease; } if (doLostCapture) { SwitchCapture(handPointer, handPointer.Captured, null); } var targetElement = handPointer.Captured; if (targetElement == null) { var position = handPointer.GetPosition(this.InteractionRootElement); targetElement = this.HitTest(position); } // Update internal enter/leave state HashSet <UIElement> oldIntersectingElements; this.UpdateIntersections(handPointer, removed ? null : targetElement, out oldIntersectingElements); // See if this hand pointer is participating in a grip-initiated // interaction. var newIsInGripInteraction = false; if (targetElement != null) { var args = new QueryInteractionStatusEventArgs(handPointer, this.InteractionRootElement); targetElement.RaiseEvent(args); if (args.Handled && args.IsInGripInteraction) { newIsInGripInteraction = true; } } handPointer.IsInGripInteraction = newIsInGripInteraction; //// After this point there should be no more changes to the internal //// state of the handPointers. We don't want event handlers calling us //// when our internal state is inconsistent. DoIntersectionNotifications(handPointer, primaryHandOfPrimaryUserChanged, oldIntersectingElements); if (targetElement == null) { return; } if (doGrip) { var args = CreateEventArgs(KinectRegion.HandPointerGripEvent, targetElement, handPointer); targetElement.RaiseEvent(args); } if (doGripRelease) { var args = CreateEventArgs(KinectRegion.HandPointerGripReleaseEvent, targetElement, handPointer); targetElement.RaiseEvent(args); } if (doPress) { var args = CreateEventArgs(KinectRegion.HandPointerPressEvent, targetElement, handPointer); targetElement.RaiseEvent(args); } if (doMove) { var args = CreateEventArgs(KinectRegion.HandPointerMoveEvent, targetElement, handPointer); targetElement.RaiseEvent(args); } if (doRelease) { var args = CreateEventArgs(KinectRegion.HandPointerPressReleaseEvent, targetElement, handPointer); targetElement.RaiseEvent(args); } }
private void HandleHandPointerGrip(HandPointer handPointer) { if (handPointer == null) { return; } if (this.capturedHandPointer != handPointer) { if (handPointer.Captured == null) { handPointer.Capture(element); } else { return; } } this.lastGripStatus = GripState.Gripped; this.gripPoint = handPointer.GetPosition(element); }