Ejemplo n.º 1
0
        /// <summary>
        /// Handles timer event
        /// </summary>
        /// <param name="sender">Sender</param>
        /// <param name="e">Args</param>
        private void OnTimer(object sender, ElapsedEventArgs e)
        {
            _gesture = _gesture == InputGestureEnum.None && !System.Windows.Forms.Cursor.Position.Equals(_previousPosition) ?
                       InputGestureEnum.Position : _gesture;

            _previousPosition = System.Windows.Forms.Cursor.Position;

            ScreenInputEvent?.Invoke(
                this,
                new ScreenInputEventArg(
                    System.Windows.Forms.Cursor.Position.X,
                    System.Windows.Forms.Cursor.Position.Y,
                    _gesture));
            _gesture = InputGestureEnum.None;
            _timer.Start();
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Handles timer event
        /// </summary>
        /// <param name="sender">Sender</param>
        /// <param name="e">Args</param>
        private void OnTimer(object sender, ElapsedEventArgs e)
        {
            try
            {
                Frame  frame       = _controller.Frame();
                Hand   currentHand = GetRightHand(frame);
                Vector tip         = GetHandTip(currentHand);

                // Get reference frame get first time with a righthand
                if (_referenceFrame == null && currentHand != null)
                {
                    _referenceFrame = frame;
                }
                else if (_referenceFrame != null && currentHand == null)
                {
                    // Remove reference frame if no hand is detected
                    _referenceFrame = null;
                }

                // Compute gesture
                float rotation = 0;
                if (_referenceFrame != null && currentHand != null)
                {
                    rotation = currentHand.RotationAngle(_referenceFrame, Vector.ZAxis);
                }

                int screenX             = _settingsManager.Settings.ScreenX.Value;
                int screenY             = _settingsManager.Settings.ScreenY.Value;
                int screenH             = _settingsManager.Settings.ScreenHeight.Value;
                int delayBetweenActions = _settingsManager.Settings.DelayBetweenActions.Value;

                double xPos = tip == null ? 0f : tip.x * screenX / 180f + screenY;
                double yPos = tip == null ? 0f : screenH - tip.y * 4f;

                if (frame.Hands.Count == 2)
                {
                    _gesture = DateTime.Now.Subtract(_lastClick).TotalMilliseconds > delayBetweenActions ? InputGestureEnum.Exit : InputGestureEnum.None;
                }
                else if (_referenceFrame != null && Math.Abs(rotation) > Math.PI / 3)
                {
                    _gesture = rotation > 0 ? InputGestureEnum.RollIn : InputGestureEnum.Rollout;
                }
                else if (tip != null)
                {
                    _gesture = tip.z <0 && DateTime.Now.Subtract(_lastClick).TotalMilliseconds> delayBetweenActions ? InputGestureEnum.Click : InputGestureEnum.Position;
                }
                else
                {
                    _gesture = InputGestureEnum.None;
                }

                if (_gesture == InputGestureEnum.Click || _gesture == InputGestureEnum.Exit)
                {
                    _lastClick = DateTime.Now;
                }

                // Notify gesture
                ScreenInputEvent?.Invoke(this, new ScreenInputEventArg(xPos, yPos, _gesture));
            }
            catch (Exception ex)
            {
                LogManager.LogLine(ex.Message);
            }
            _timer.Start();
        }