private void fluxoInteracao_InteractionFrameReady(object sender, InteractionFrameReadyEventArgs e)
        {
            using (InteractionFrame quadro = e.OpenInteractionFrame())
            {
                if (quadro == null) return;

                UserInfo[] informacoesUsuarios = new UserInfo[6];
                quadro.CopyInteractionDataTo(informacoesUsuarios);
                IEnumerable<UserInfo> usuariosRastreados = informacoesUsuarios.Where(info => info.SkeletonTrackingId != 0);
                if (usuariosRastreados.Count() > 0)
                {
                    UserInfo usuarioPrincipal = usuariosRastreados.First();

                    if (usuarioPrincipal.HandPointers[0].HandEventType == InteractionHandEventType.Grip)
                        configuracaoMaoEsquerda.DesenhoAtivo = true;
                    else if (usuarioPrincipal.HandPointers[0].HandEventType == InteractionHandEventType.GripRelease)
                        configuracaoMaoEsquerda.DesenhoAtivo = false;

                    if (usuarioPrincipal.HandPointers[1].HandEventType == InteractionHandEventType.Grip)
                        configuracaoMaoDireita.DesenhoAtivo = true;
                    else if (usuarioPrincipal.HandPointers[1].HandEventType == InteractionHandEventType.GripRelease)
                        configuracaoMaoDireita.DesenhoAtivo = false;

                }
            }
        }
コード例 #2
0
        void stream_InteractionFrameReady(object sender, InteractionFrameReadyEventArgs e)
        {
            using (var interactionFrame = e.OpenInteractionFrame()) {
                if (interactionFrame != null)
                {
                    var userInfos = new UserInfo[InteractionFrame.UserInfoArrayLength];
                    interactionFrame.CopyInteractionDataTo(userInfos);

                    List <InteractionHandPointer> hands = new List <InteractionHandPointer>();

                    foreach (var user in userInfos)
                    {
                        if (user.SkeletonTrackingId != 0)
                        {
                            foreach (var hand in user.HandPointers)
                            {
                                hands.Add(hand);
                            }
                        }
                    }

                    Grid.ItemsSource = hands;
                }
            }
        }
コード例 #3
0
        //called on every new frame
        private void InteractionStreamOnInteractionFrameReady(object sender, InteractionFrameReadyEventArgs args)
        {
            using (var iaf = args.OpenInteractionFrame()) //dispose as soon as possible
            {
                if (iaf == null)
                    return;
                iaf.CopyInteractionDataTo(_userInfos);
            }

            var hasUser = false;
            foreach (var userInfo in _userInfos)
            {
                var userID = userInfo.SkeletonTrackingId;
                if (userID == 0)
                    continue;

                mainManager.newImageReceived(userInfo);
                hasUser = true;
                //we manage only the first user
                break;
            }
            if (!hasUser)
                mainManager.setInformationText("No User Detected");
            else
                mainManager.setInformationText("User Tracked");
        }
コード例 #4
0
        private void KinectInteractionFrameReady(object sender, InteractionFrameReadyEventArgs args)
        {
            if (activeSkeleton == null)
            {
                return;
            }
            using (var iaf = args.OpenInteractionFrame()) {  //dispose as soon as possible
                if (iaf == null)
                {
                    return;
                }
                iaf.CopyInteractionDataTo(_userInfos);
            }

            UserInfo userInfo = (from u in _userInfos where u.SkeletonTrackingId == activeSkeleton.TrackingId select u).FirstOrDefault();

            if (userInfo == null)
            {
                return;
            }

            int userID = userInfo.SkeletonTrackingId;

            var hands = userInfo.HandPointers;

            if (hands.Count != 0)
            {
                foreach (var hand in hands)
                {
                    bool grip        = hand.HandEventType == InteractionHandEventType.Grip;
                    bool gripRelease = hand.HandEventType == InteractionHandEventType.GripRelease;
                    mouseController.AnalyzeGrip(grip, gripRelease, ref isClicks[(int)hand.HandType]);
                }
            }
        }
コード例 #5
0
        void interStream_InteractionFrameReady(object sender, InteractionFrameReadyEventArgs e)
        {
            using (var iaf = e.OpenInteractionFrame())
            {
                #region 標準處理架構
                if (iaf == null)
                {
                    return;
                }

                UserInfo[] userInfos = new UserInfo[InteractionFrame.UserInfoArrayLength];
                iaf.CopyInteractionDataTo(userInfos);
                #endregion

                #region 擷取互動串流提供的資訊
                GetIDs(userInfos);

                var activeuser = (from u in userInfos
                                  where u.SkeletonTrackingId > 0
                                  select u).FirstOrDefault();

                if (activeuser != null)
                {
                    GetHands(activeuser);
                    GetHandEvent(activeuser);
                }
                #endregion
            }
        }
コード例 #6
0
        public void InteractionFrameReady(object sender, InteractionFrameReadyEventArgs e)
        {
            // Check for a null userInfos since we may still get posted events
            // from the stream after we have unregistered our event handler and
            // deleted our buffers.
            if (this.userInfos == null)
            {
                return;
            }

            UserInfo[] localUserInfos = null;
            long timestamp = 0;

            using (InteractionFrame interactionFrame = e.OpenInteractionFrame())
            {
                if (interactionFrame != null)
                {
                    // Copy interaction frame data so we can dispose interaction frame
                    // right away, even if data processing/event handling takes a while.
                    interactionFrame.CopyInteractionDataTo(this.userInfos);
                    timestamp = interactionFrame.Timestamp;
                    localUserInfos = this.userInfos;
                }
            }

            if (localUserInfos != null)
            {
                HandleUsersInfo(localUserInfos);
            }
        }
コード例 #7
0
        private void InteractionStream_InteractionFrameReady(object sender, InteractionFrameReadyEventArgs e)
        {
            using (var frame = e.OpenInteractionFrame())
            {
                if (frame == null)
                {
                    return;
                }

                frame.CopyInteractionDataTo(_userInfos);
                if (_userInfos != null && _userInfos.Length > 0)
                {
                    bool rightHandPress   = false;
                    bool leftHandPress    = false;
                    bool rightHandGrip    = false;
                    bool leftHandGrip     = false;
                    bool rightHandRelease = false;
                    bool leftHandRelease  = false;

                    foreach (var info in _userInfos)
                    {
                        foreach (var hand in info.HandPointers)
                        {
                            if (hand.HandType == InteractionHandType.Right)
                            {
                                if (!rightHandPress && hand.IsPressed)
                                {
                                    rightHandPress = true;
                                }
                                if (!rightHandGrip && hand.HandEventType == InteractionHandEventType.Grip)
                                {
                                    rightHandGrip = true;
                                }
                                if (!rightHandRelease && hand.HandEventType == InteractionHandEventType.GripRelease)
                                {
                                    rightHandRelease = true;
                                }
                            }

                            if (hand.HandType == InteractionHandType.Left)
                            {
                                if (!leftHandPress && hand.IsPressed)
                                {
                                    leftHandPress = true;
                                }
                                if (!leftHandGrip && hand.HandEventType == InteractionHandEventType.Grip)
                                {
                                    leftHandGrip = true;
                                }
                                if (!leftHandRelease && hand.HandEventType == InteractionHandEventType.GripRelease)
                                {
                                    leftHandRelease = true;
                                }
                            }
                        }
                    }
                }
            }
        }
コード例 #8
0
        /// <summary>
        /// 手势的处理
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>

        private void OnInteractionFrameReady(object sender, InteractionFrameReadyEventArgs e)
        {
            using (InteractionFrame frame = e.OpenInteractionFrame())
            {
                if (frame != null)
                {
                    if (this.userInfos == null)
                    {
                        this.userInfos = new UserInfo[InteractionFrame.UserInfoArrayLength];
                    }

                    frame.CopyInteractionDataTo(this.userInfos);
                }
                else
                {
                    return;
                }
            }
            /////////////
            foreach (UserInfo userInfo in this.userInfos)
            {
                foreach (InteractionHandPointer handPointer in userInfo.HandPointers)
                {
                    // string action = null;

                    switch (handPointer.HandEventType)
                    {
                    case InteractionHandEventType.Grip:
                        //action = "gripped";
                        //isDrawing.Content = "isDrawing: True";
                        isgrip = true;
                        break;

                    case InteractionHandEventType.GripRelease:
                        // action = "released";
                        isgrip = false;
                        break;
                    }

                    //if (action != null)
                    //{
                    //    string handSide = "unknown";

                    //    switch (handPointer.HandType)
                    //    {
                    //        case InteractionHandType.Left:
                    //            handSide = "left";
                    //            break;

                    //        case InteractionHandType.Right:
                    //            handSide = "right";
                    //            break;
                    //    }
                    // Console.WriteLine("User " + userInfo.SkeletonTrackingId + " " + action + " their " + handSide + "hand.");
                    //}
                }
            }
        }
コード例 #9
0
 void stream_InteractionFrameReady(object sender, InteractionFrameReadyEventArgs e)
 {
     using (InteractionFrame interactionFrame = e.OpenInteractionFrame())
     {
         if (interactionFrame != null)
         {
             interactionFrame.CopyInteractionDataTo(this.infos);
         }
     }
 }
コード例 #10
0
ファイル: KinectV1Core.cs プロジェクト: vancegroup/KVR
        private void interactStream_InteractionFrameReady(object sender, InteractionFrameReadyEventArgs e)
        {
            using (InteractionFrame interactFrame = e.OpenInteractionFrame())
            {
                if (interactFrame != null && masterKinectSettings.mergeSkeletons)
                {
                    UserInfo[] tempUserInfo = new UserInfo[6];
                    interactFrame.CopyInteractionDataTo(tempUserInfo);

                    foreach (UserInfo interactionInfo in tempUserInfo)
                    {
                        foreach (InteractionHandPointer hand in interactionInfo.HandPointers)
                        {
                            if (hand.HandEventType == InteractionHandEventType.Grip)
                            {
                                for (int i = 0; i < skeletonHandGrabData.Count; i++)
                                {
                                    if (skeletonHandGrabData[i].skeletonTrackingID == interactionInfo.SkeletonTrackingId)
                                    {
                                        if (hand.HandType == InteractionHandType.Left)
                                        {
                                            skeletonHandGrabData[i].leftHandClosed = true;
                                        }
                                        else if (hand.HandType == InteractionHandType.Right)
                                        {
                                            skeletonHandGrabData[i].rightHandClosed = true;
                                        }
                                        break;
                                    }
                                }
                            }
                            else if (hand.HandEventType == InteractionHandEventType.GripRelease)
                            {
                                for (int i = 0; i < skeletonHandGrabData.Count; i++)
                                {
                                    if (skeletonHandGrabData[i].skeletonTrackingID == interactionInfo.SkeletonTrackingId)
                                    {
                                        if (hand.HandType == InteractionHandType.Left)
                                        {
                                            skeletonHandGrabData[i].leftHandClosed = false;
                                        }
                                        else if (hand.HandType == InteractionHandType.Right)
                                        {
                                            skeletonHandGrabData[i].rightHandClosed = false;
                                        }
                                        break;
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
コード例 #11
0
ファイル: KinectStreams.cs プロジェクト: nuwud/Kinect-Lego
        /// <summary>
        /// Evènement : si on a les informations de profondeur et du squelette -> définit l'état actuel de la main
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void EventInteractionFrameReady(object sender, InteractionFrameReadyEventArgs e)
        {
            UserInfo[] userInfos = new UserInfo[InteractionFrame.UserInfoArrayLength];
            using (InteractionFrame interactionFrame = e.OpenInteractionFrame())
            {
                if (interactionFrame == null)
                {
                    return;
                }

                interactionFrame.CopyInteractionDataTo(userInfos);
            }

            // On parcourt les informations trouvées
            bool handFound = false;

            foreach (UserInfo userInfo in userInfos)
            {
                // Si mal reconnu ou on déjà trouvé une main qui est affichée
                if (userInfo.SkeletonTrackingId == 0 || handFound)
                {
                    continue;
                }

                var hands = userInfo.HandPointers;
                if (hands.Count == 0) // Si aucune main reconnue
                {
                    continue;
                }

                foreach (var hand in hands)
                {
                    // La main doit être trackée, active et la main 'primaire' (= première levée des deux)
                    if (!hand.IsActive || !hand.IsTracked)
                    {
                        continue;
                    }

                    handFound      = true;
                    actualHandType = hand.HandType;

                    // Si la main devient grip et c'était pas son ancien état
                    if (hand.HandEventType == InteractionHandEventType.Grip && hand.HandEventType != actualHandState)
                    {
                        actualHandState = InteractionHandEventType.Grip;
                    }
                    // Si la main lâche le grip
                    else if (hand.HandEventType == InteractionHandEventType.GripRelease && hand.HandEventType != actualHandState)
                    {
                        actualHandState = InteractionHandEventType.GripRelease;
                    }
                }
            }
        }
コード例 #12
0
        /// <summary>
        /// Event handler for InteractionStream's InteractionFrameReady event
        /// </summary>
        /// <param name="sender">object sending the event</param>
        /// <param name="e">event arguments</param>
        internal async void InteractionFrameReadyAsync(object sender, InteractionFrameReadyEventArgs e)
        {
            if (!this.ShouldProcessInteractionData)
            {
                return;
            }

            if (this.isProcessingInteractionFrame)
            {
                // Re-entered InteractionFrameReadyAsync while a previous frame is already being processed.
                // Just ignore new frames until the current one finishes processing.
                return;
            }

            this.isProcessingInteractionFrame = true;

            try
            {
                bool haveFrameData = false;

                using (var interactionFrame = e.OpenInteractionFrame())
                {
                    // Even though we checked value of userInfos above as part of
                    // ShouldProcessInteractionData check, callbacks happening while
                    // opening an interaction frame might have invalidated it, so we
                    // check value again.
                    if ((interactionFrame != null) && (this.userInfos != null))
                    {
                        // Copy interaction frame data so we can dispose interaction frame
                        // right away, even if data processing/event handling takes a while.
                        interactionFrame.CopyInteractionDataTo(this.userInfos);
                        this.interactionStreamMessage.timestamp = interactionFrame.Timestamp;
                        haveFrameData = true;
                    }
                }

                if (haveFrameData)
                {
                    this.userStateManager.UpdateUserInformation(this.userInfos, this.interactionStreamMessage.timestamp);
                    this.userViewerColorizer.UpdateColorLookupTable(this.userInfos, this.userViewerDefaultUserColor, this.userStateManager.UserStates, this.userViewerUserColors);

                    if (this.interactionIsEnabled)
                    {
                        this.interactionStreamMessage.UpdateHandPointers(this.userInfos, this.userStateManager.PrimaryUserTrackingId);
                        await this.ownerContext.SendStreamMessageAsync(this.interactionStreamMessage);
                    }
                }
            }
            finally
            {
                this.isProcessingInteractionFrame = false;
            }
        }
コード例 #13
0
ファイル: Program.cs プロジェクト: shkamaru/Alexis
        static void OnInteractionFrameReady(object sender, InteractionFrameReadyEventArgs e)
        {
            using (InteractionFrame frame = e.OpenInteractionFrame())
            {
                if (frame != null)
                {
                    frame.CopyInteractionDataTo(userInfos);

                    foreach (UserInfo userInfo in userInfos)
                    {
                        foreach (InteractionHandPointer handPointer in userInfo.HandPointers)
                        {
                            string action = null;

                            switch (handPointer.HandEventType)
                            {
                            case InteractionHandEventType.Grip:
                                action = "gripped";
                                break;

                            case InteractionHandEventType.GripRelease:
                                action = "released";
                                break;
                            }

                            if (action != null)
                            {
                                string handSide = "unknown";

                                switch (handPointer.HandType)
                                {
                                case InteractionHandType.Left:
                                    handSide = "left";
                                    break;

                                case InteractionHandType.Right:
                                    handSide = "right";
                                    break;
                                }

                                Console.WriteLine("{\"hand\":" + handSide + ",\"action\":" + action + "}");
                                foreach (var socket in _clients)
                                {
                                    socket.Send("{\"hand\":\"" + handSide + "\",\"action\":\"" + action + "\"}");
                                }
                            }
                        }
                    }
                }
            }
        }
コード例 #14
0
        private void InteractionStreamOnInteractionFrameReady(object sender, InteractionFrameReadyEventArgs args)
        {
            using (var iaf = args.OpenInteractionFrame()) //dispose as soon as possible
            {
                if (iaf == null)
                {
                    return;
                }

                iaf.CopyInteractionDataTo(_userInfos);
            }

            if (_userInfos == null)
            {
                return;
            }

            //this.BeginInteractionFrame();

            try
            {
                foreach (var userInfo in _userInfos)
                {
                    if (userInfo.SkeletonTrackingId == 0)
                    {
                        continue;
                    }

                    var hands = userInfo.HandPointers;
                    foreach (var hand in hands)
                    {
                        if (!hand.IsActive)
                        {
                            continue;
                        }
                        if (hand.HandType == InteractionHandType.None)
                        {
                            continue;
                        }

                        analyzeHandPointer(hand);
                    }
                }
            }
            finally
            {
                //this.EndInteractionFrame();
            }
        }
コード例 #15
0
 private void InteractionFrameReadyHandler(object sender, InteractionFrameReadyEventArgs e)
 {
     using (var interactionFrame = e.OpenInteractionFrame())
     {
         if (interactionFrame != null)
         {
             if (this.userInfos == null)
             {
                 this.userInfos = new UserInfo[InteractionFrame.UserInfoArrayLength];
             }
             interactionFrame.CopyInteractionDataTo(this.userInfos);
             this.controller.processInteractionInfo(this.userInfos, interactionFrame.Timestamp);
         }
     }
 }
コード例 #16
0
        private void InteractionStreamOnInteractionFrameReady(object sender, InteractionFrameReadyEventArgs interactionFrameReadyEventArgs)
        {
            if (_userInfos == null)
            {
                return;
            }

            using (var interactionFrame = interactionFrameReadyEventArgs.OpenInteractionFrame())
            {
                if (interactionFrame != null)
                {
                    interactionFrame.CopyInteractionDataTo(_userInfos);
                }
            }

            _payload = CreatePayloadFromUserInfo(_userInfos);
        }
コード例 #17
0
        private void InteractionStreamOnInteractionFrameReady(object sender, InteractionFrameReadyEventArgs e)
        {
            TrackClosestSkeleton();

            using (var iaf = e.OpenInteractionFrame())
            {
                if (iaf == null)
                {
                    return;
                }

                iaf.CopyInteractionDataTo(_userInfos);
            }

            // for activating and disabling draw
            if (controlManager.isDrawActive(_userInfos, _skeletons))
            {
                newPoint = controlManager.getCursorLocation(kinectRegion);

                if (oldDepth == null || stopDraw == true)
                {
                    oldDepth = newDepth;
                }
                if (oldPoint == null || stopDraw == true)
                {
                    oldPoint = newPoint;
                    stopDraw = false;
                }

                newDepth = controlManager.getHandLocation();

                DrawCanvas.Paint(oldPoint, newPoint, inkCanvas, color, thickness, tool, oldDepth, newDepth);
                oldPoint         = newPoint;
                oldDepth         = newDepth;
                kinectRegion.Tag = "draw";
            }
            else
            {
                kinectRegion.Tag = "";
                stopDraw         = true;
            }
        }
コード例 #18
0
        private void fluxoInteracao_InteractionFrameReady(object sender, InteractionFrameReadyEventArgs e)
        {
            using (InteractionFrame quadro = e.OpenInteractionFrame())
            {
                if (quadro == null)
                {
                    return;
                }

                UserInfo[] informacoesUsuarios = new UserInfo[6];
                quadro.CopyInteractionDataTo(informacoesUsuarios);
                IEnumerable <UserInfo> usuariosRastreados = informacoesUsuarios.Where(info => info.SkeletonTrackingId != 0);
                if (usuariosRastreados.Count() > 0)
                {
                    UserInfo usuarioPrincipal = usuariosRastreados.First();

                    if (usuarioPrincipal.HandPointers[0].HandEventType == InteractionHandEventType.Grip)
                    {
                        configuracaoMaoEsquerda.DesenhoAtivo = true;
                    }
                    else if (usuarioPrincipal.HandPointers[0].HandEventType == InteractionHandEventType.GripRelease)
                    {
                        configuracaoMaoEsquerda.DesenhoAtivo = false;
                    }

                    if (usuarioPrincipal.HandPointers[1].HandEventType == InteractionHandEventType.Grip)
                    {
                        configuracaoMaoDireita.DesenhoAtivo = true;
                    }
                    else if (usuarioPrincipal.HandPointers[1].HandEventType == InteractionHandEventType.GripRelease)
                    {
                        configuracaoMaoDireita.DesenhoAtivo = false;
                    }
                }
            }
        }
コード例 #19
0
        private void interStream_InteractionFrameReady(object sender, InteractionFrameReadyEventArgs e)
        {
            using (InteractionFrame inf = e.OpenInteractionFrame())
            {
                if (inf == null)
                {
                    return;
                }
                inf.CopyInteractionDataTo(userInfos);
            }

            foreach (UserInfo ui in userInfos)
            {
                var hands = ui.HandPointers;
                if (ui.SkeletonTrackingId == 0)
                {
                    continue;
                }

                foreach (InteractionHandPointer hand in hands)
                {
                    last = hand.HandEventType == InteractionHandEventType.None ? last : hand.HandEventType;
                    if (last == InteractionHandEventType.Grip)
                    {
                        checkDraw.IsChecked = true;
                    }
                    else
                    {
                        if (checkDraw.IsChecked == true)
                        {
                            checkDraw.IsChecked = false;
                        }
                    }
                }
            }
        }
コード例 #20
0
        private void interStream_InteractionFrameReady(object sender, InteractionFrameReadyEventArgs e)
        {
            using (InteractionFrame inf = e.OpenInteractionFrame())
            {
                if (inf == null)
                {
                    return;
                }
                inf.CopyInteractionDataTo(userInfos);
            }

            foreach (UserInfo ui in userInfos)
            {
                var hands = ui.HandPointers;
                if (ui.SkeletonTrackingId == 0)
                    continue;

                foreach (InteractionHandPointer hand in hands)
                {
                    last = hand.HandEventType == InteractionHandEventType.None ? last : hand.HandEventType;
                    if (last == InteractionHandEventType.Grip)
                    {
                        checkDraw.IsChecked = true;
                    }
                    else 
                    {
                        if(checkDraw.IsChecked == true)
                            checkDraw.IsChecked = false;
                    }
                }

            }
        }
コード例 #21
0
        private static void InteractionStreamOnInteractionFrameReady(object sender, InteractionFrameReadyEventArgs e)
        {
            //Console.WriteLine("\tentered interaction");
            using (InteractionFrame frame = e.OpenInteractionFrame())
            {
                if (frame != null)
                {
                    if (userInfos == null)
                    {
                        userInfos = new UserInfo[InteractionFrame.UserInfoArrayLength];
                    }

                    frame.CopyInteractionDataTo(userInfos);
                }
                else
                {
                    return;
                }
            }

            foreach (UserInfo userInfo in userInfos)
            {
                //Console.WriteLine(userInfo.HandPointers.Count + " mãos");
                foreach (InteractionHandPointer handPointer in userInfo.HandPointers)
                {
                    string action = null;
                    switch (handPointer.HandEventType)
                    {
                        case InteractionHandEventType.Grip:
                            Console.WriteLine("grip");
                            action = "gripped";
                            break;

                        case InteractionHandEventType.GripRelease:
                            Console.WriteLine("grip release");
                            action = "released";
                            break;
                        default:
                            action = "default";
                            break;
                    }

                    if (action != null)
                    {
                        string handSide = "unknown";

                        switch (handPointer.HandType)
                        {
                            case InteractionHandType.Left:
                                //Console.WriteLine("mão esquerda");
                                handSide = "left";
                                break;

                            case InteractionHandType.Right:
                                //Console.WriteLine("mão direita");
                                handSide = "right";
                                break;
                        }

                        if (handSide == "left")
                        {
                            if (action == "released")
                            {
                                // left hand released code here

                            }
                            else if (action == "gripped")
                            {
                                // left hand gripped code here

                            }
                        }
                        else
                        {
                            if (action == "released")
                            {
                                // right hand released code here

                            }
                            else if (action == "gripped")
                            {
                                // right hand gripped code here

                            }
                        }
                    }
                }
            }
        }
コード例 #22
0
        private void StreamOnInteractionFrameReady(object sender, InteractionFrameReadyEventArgs e)
        {
            using (InteractionFrame interactionFrame = e.OpenInteractionFrame())
            {
                if (interactionFrame != null)
                {
                    if (userInfos == null)
                    {
                        userInfos = new UserInfo[InteractionFrame.UserInfoArrayLength];
                    }
                    interactionFrame.CopyInteractionDataTo(userInfos);
                }
                else
                {
                    return;
                }

                foreach (UserInfo player in userInfos)
                {
                    foreach (InteractionHandPointer handPointer in player.HandPointers)
                    {
                        int id = player.SkeletonTrackingId;

                        for (int i = 0; i < skeletonList.Length; i++)
                        {
                            if (id == skeletonList[i].TrackingId)
                            {
                                index = i;
                            }
                        }

                        //Trace.WriteLine(index);
                        headText = skeletonList[index].Joints[JointType.Head].Position.X + " " + skeletonList[index].Joints[JointType.Head].Position.Y + " " + skeletonList[index].Joints[JointType.Head].Position.Z;
                        string action = null;
                        switch (handPointer.HandEventType)
                        {
                        case InteractionHandEventType.Grip:
                            action = "Hand Gripped";
                            break;

                        case InteractionHandEventType.GripRelease:
                            action = "Hand Released";
                            break;
                        }
                        if (action != null)
                        {
                            string handSide = "unknown";
                            switch (handPointer.HandType)
                            {
                            case InteractionHandType.Left:
                                handSide = "Left";
                                break;

                            case InteractionHandType.Right:
                                handSide = "Right";
                                break;
                            }

                            handText = handSide + " " + action;
                            //this.label1.Content = labelText;
                            udpConnection.SendData(System.Text.Encoding.Default.GetBytes(handText));
                        }
                        if (handPointer.HandType == InteractionHandType.Right && handPointer.IsTracked)
                        {
                            string pos = "pos: " + handPointer.RawX + " " + handPointer.RawY + " " + handPointer.RawZ + " " + headText;
                            Trace.WriteLine(pos);
                            udpConnection.SendData(pos);
                        }
                    }
                }
            }
        }
コード例 #23
0
        /// <summary>
        /// Event handler for InteractionStream's InteractionFrameReady event
        /// </summary>
        /// <param name="sender">object sending the event</param>
        /// <param name="e">event arguments</param>
        internal async void InteractionFrameReadyAsync(object sender, InteractionFrameReadyEventArgs e)
        {
            if (!this.ShouldProcessInteractionData)
            {
                return;
            }

            if (this.isProcessingInteractionFrame)
            {
                // Re-entered InteractionFrameReadyAsync while a previous frame is already being processed.
                // Just ignore new frames until the current one finishes processing.
                return;
            }

            this.isProcessingInteractionFrame = true;

            try
            {
                bool haveFrameData = false;

                using (var interactionFrame = e.OpenInteractionFrame())
                {
                    // Even though we checked value of userInfos above as part of
                    // ShouldProcessInteractionData check, callbacks happening while
                    // opening an interaction frame might have invalidated it, so we
                    // check value again. 
                    if ((interactionFrame != null) && (this.userInfos != null))
                    {
                        // Copy interaction frame data so we can dispose interaction frame
                        // right away, even if data processing/event handling takes a while.
                        interactionFrame.CopyInteractionDataTo(this.userInfos);
                        this.interactionStreamMessage.timestamp = interactionFrame.Timestamp;
                        haveFrameData = true;
                    }
                }

                if (haveFrameData)
                {
                    this.userStateManager.UpdateUserInformation(this.userInfos, this.interactionStreamMessage.timestamp);
                    this.userViewerColorizer.UpdateColorLookupTable(this.userInfos, this.userViewerDefaultUserColor, this.userStateManager.UserStates, this.userViewerUserColors);

                    if (this.interactionIsEnabled)
                    {
                        this.interactionStreamMessage.UpdateHandPointers(this.userInfos, this.userStateManager.PrimaryUserTrackingId);
                        await this.ownerContext.SendStreamMessageAsync(this.interactionStreamMessage);
                    }
                }
            }
            finally
            {
                this.isProcessingInteractionFrame = false;
            }
        }
コード例 #24
0
        private void InteractionStreamOnInteractionFrameReady(object sender, InteractionFrameReadyEventArgs e)
        {
            using (InteractionFrame frame = e.OpenInteractionFrame())
            {
                if (frame != null)
                {
                    if (this.userInfos == null)
                    {
                        this.userInfos = new UserInfo[InteractionFrame.UserInfoArrayLength];
                    }

                    frame.CopyInteractionDataTo(this.userInfos);
                }
                else
                {
                    return;
                }
            }



            foreach (UserInfo userInfo in this.userInfos)
            {
                foreach (InteractionHandPointer handPointer in userInfo.HandPointers)
                {
                    string action = null;

                    switch (handPointer.HandEventType)
                    {
                    case InteractionHandEventType.Grip:
                        action = "gripped";
                        break;

                    case InteractionHandEventType.GripRelease:
                        action = "released";

                        break;
                    }

                    if (action != null)
                    {
                        string handSide = "unknown";

                        switch (handPointer.HandType)
                        {
                        case InteractionHandType.Left:
                            handSide = "left";
                            break;

                        case InteractionHandType.Right:
                            handSide = "right";
                            break;
                        }
                        //comprobar si conincide con la mano primario y en caso de coincidir
                        //hand.JointType == JointType.HandRight
                        if (handSide == "left")
                        {
                            if (action == "released")
                            {
                                // left hand released code here
                            }
                            else
                            {
                                // left hand gripped code here
                            }
                        }
                        else
                        {
                            if (action == "released")
                            {
                                // right hand released code here
                            }
                            else
                            {
                                // right hand gripped code here
                            }
                        }
                    }
                }
            }
        }
コード例 #25
0
        void inStream_InteractionFrameReady(object sender, InteractionFrameReadyEventArgs e)
        {
            // if wrong state
            //onRaisedVoiceCommand(new VoiceCommandEventArgs("I'm in state" + state + " and I got interaciton data"));
            if (state < 2 || state > 3)
            {
                return;
            }
            if (frameout < 4)
            {
                frameout++;
                return;
            }
            //onRaisedVoiceCommand(new VoiceCommandEventArgs("I'm in state" + state));
            InteractionFrame intFrame = e.OpenInteractionFrame();

            UserInfo[] userInfos = new UserInfo[6];
            if (intFrame != null)
            {
                intFrame.CopyInteractionDataTo(userInfos); // copy userinfos to array
                frameout = 0;
            }
            else
            {
                return;
            }
            foreach (UserInfo userInfo in userInfos)
            {
                foreach (InteractionHandPointer handPointer in userInfo.HandPointers)
                {
                    // if at state 2 and grip is detected
                    if (handPointer.IsPrimaryForUser && handPointer.IsTracked &&
                        handPointer.HandEventType == InteractionHandEventType.Grip && state == 2)
                    {
                        skeletonID = userInfo.SkeletonTrackingId;
                        if (this.command != "ZOOM")
                        {
                            initialValue = handPointer.RawY;
                        }
                        else
                        {
                            initialValue = handPointer.RawZ;
                        }
                        handType = handPointer.HandType;
                        String message = "Gesture command " + command.ToString() + " began with an initial value of " + initialValue;
                        //onRaisedGestureCommand(new GestureEventArgs(message, command, initialValue));
                        onRaisedVoiceCommand(new VoiceCommandEventArgs(message));
                        state = 3; // move onto next stage
                    }
                    // at state 3 grip has not released
                    if (handPointer.IsPrimaryForUser && handPointer.IsTracked && userInfo.SkeletonTrackingId == skeletonID &&
                        handPointer.HandEventType == InteractionHandEventType.None && state == 3 && handPointer.HandType == handType)
                    {
                        if (this.command != "ZOOM")
                        {
                            currentValue = handPointer.RawY;
                        }
                        else
                        {
                            currentValue = handPointer.RawZ;
                        }
                        String message = "Gesture command " + command.ToString() + " with a value of " + currentValue;
                        onRaisedGestureCommand(new GestureEventArgs(message, command, initialValue - currentValue));
                    }
                    // grip released detected at state 3
                    if (handPointer.IsPrimaryForUser && handPointer.IsTracked && userInfo.SkeletonTrackingId == skeletonID &&
                        handPointer.HandEventType == InteractionHandEventType.GripRelease && state == 3 && handPointer.HandType == handType)
                    {
                        //currentValue = handPointer.RawY;
                        String message = "Gesture command " + command.ToString() + " ended with a value of " + currentValue + " and initial value of " + initialValue + " and a difference of " + (currentValue - initialValue);
                        onRaisedGestureCommand(new GestureEventArgs(message, command, initialValue - currentValue));
                        state = 1; // return to initial stage
                    }
                }
            }
        }
コード例 #26
0
        /// <summary>
        /// The event handler for interaction frame events.
        /// </summary>
        /// <param name="sender">The sender of the event.</param>
        /// <param name="e">The arguments for the event.</param>
        private void InteractionFrameReady(object sender, InteractionFrameReadyEventArgs e)
        {
            Player playerToUse = null;
            List<Point> RectanglePoints = new List<Point>();
            // Check for a null userInfos since we may still get posted events
            // from the stream after we have unregistered our event handler and
            // deleted our buffers.
            if (this.usersInfo != null)
            {

                UserInfo[] localUserInfos = null;
                long timestamp = 0;


                using (InteractionFrame interactionFrame = e.OpenInteractionFrame())
                {
                    if (interactionFrame != null)
                    {
                        // Copy interaction frame data so we can dispose interaction frame
                        // right away, even if data processing/event handling takes a while.
                        interactionFrame.CopyInteractionDataTo(this.usersInfo);
                        timestamp = interactionFrame.Timestamp;
                        localUserInfos = this.usersInfo;
                    }
                }

                if (localUserInfos != null)
                {

                    var currentUserSet = new HashSet<int>();
                    var usersToRemove = new HashSet<Player>();

                    // Keep track of current users in scene
                    foreach (var info in localUserInfos)
                    {
                        if (info.SkeletonTrackingId == 0)
                        {
                            // Only look at user information corresponding to valid users
                            continue;
                        }



                        foreach (Player player in players)
                        {
                            if (player.Info.SkeletonTrackingId == info.SkeletonTrackingId)
                            {
                                playerToUse = player;
                            }
                        }

                        currentUserSet.Add(info.SkeletonTrackingId);
                        this.trackedUsers.Add(info.SkeletonTrackingId);

                        // Perform hit testing and look for Grip and GripRelease events
                        foreach (var handPointer in info.HandPointers)
                        {

                            if (handPointer.IsPrimaryForUser)
                            {
                                double xUI = handPointer.X * this.Width;
                                double yUI = handPointer.Y * this.Height;

                                RectanglePoints.Add(new Point(xUI+50, yUI+50));

                                if (handPointer.HandEventType == InteractionHandEventType.Grip)
                                {
                                    playerToUse.Grab();
                                    //check the rectangle and see what colour we're on.
                                    foreach (UIElement elem in ColourScreen.Children)
                                    {
                                        if (elem is Rectangle)
                                        {
                                            Rectangle tmp = (Rectangle)elem;

                                            CheckSelect(playerToUse, new Point(xUI+50, yUI+50), tmp);
                                        }
                                    }
                                }
                                else if(handPointer.HandEventType == InteractionHandEventType.GripRelease)
                                {
                                    playerToUse.Release();
                                }

                                if (playerToUse != null)
                                {
                                    if (xUI + 100 <= this.Width && xUI >= 0)
                                    {
                                        Canvas.SetLeft(playerToUse.Cursor, xUI);
                                    }
                                    if (yUI + 100 <= this.Height && yUI >= 0)
                                    {
                                        Canvas.SetTop(playerToUse.Cursor, yUI);
                                    }

                                }
                            }
                        }
                    }
                    foreach (Player player in players)
                    {
                        if (!currentUserSet.Contains(player.Info.SkeletonTrackingId))
                        {
                            usersToRemove.Add(player);
                            ResetUser(player);
                        }
                    }

                    foreach (Player player in usersToRemove)
                    {
                        ColourScreen.Children.Remove(player.Cursor);
                        players.Remove(player);
                        if (players.Count == 0)
                        {
                            //start a timer that will mark the time and go back if there's no one there within 5 seconds
                            
                            break;
                        }
                        sensor.SkeletonStream.AppChoosesSkeletons = false;

                    }

                    CheckHover(RectanglePoints);


                }
            }
        }
コード例 #27
0
        void stream_InteractionFrameReady(object sender, InteractionFrameReadyEventArgs e)
        {
            long timestamp = 0;

            using (InteractionFrame interactionFrame = e.OpenInteractionFrame())
            {
                if (interactionFrame != null)
                {
                    interactionFrame.CopyInteractionDataTo(this.infos);
                }
            }
        }
コード例 #28
0
        private void InteractionStreamOnInteractionFrameReady(object sender, InteractionFrameReadyEventArgs args)
        {
            using (var iaf = args.OpenInteractionFrame()) //dispose as soon as possible
            {
                if (iaf == null)
                    return;

                iaf.CopyInteractionDataTo(_userInfos);
            }

            StringBuilder dump = new StringBuilder();
            this.buildAndSendStringDump(dump);

            foreach (var userInfo in _userInfos)
            {
                var userID = userInfo.SkeletonTrackingId;
                if (userID == 0)
                    continue;

                var hands = userInfo.HandPointers;
                if (hands.Count == 0)
                    dump.AppendLine("    No hands");
                else
                {
                    foreach (var hand in hands)
                    {
                        if (hand.IsActive)
                        {

                        }

                        var lastHandEvents = hand.HandType == InteractionHandType.Left
                                                 ? _lastLeftHandEvents
                                                 : _lastRightHandEvents;

                        if (hand.HandEventType != InteractionHandEventType.None)
                            lastHandEvents[userID] = hand.HandEventType;

                        var lastHandEvent = lastHandEvents.ContainsKey(userID)
                                                ? lastHandEvents[userID]
                                                : InteractionHandEventType.None;

                    }
                }

            }
        }
コード例 #29
0
ファイル: KinectV1Core.cs プロジェクト: vancegroup/KVR
        private void interactStream_InteractionFrameReady(object sender, InteractionFrameReadyEventArgs e)
        {
            using (InteractionFrame interactFrame = e.OpenInteractionFrame())
            {
                if (interactFrame != null && masterKinectSettings.mergeSkeletons)
                {
                    UserInfo[] tempUserInfo = new UserInfo[6];
                    interactFrame.CopyInteractionDataTo(tempUserInfo);

                    foreach (UserInfo interactionInfo in tempUserInfo)
                    {
                        foreach (InteractionHandPointer hand in interactionInfo.HandPointers)
                        {
                            if (hand.HandEventType == InteractionHandEventType.Grip)
                            {
                                for (int i = 0; i < skeletonHandGrabData.Count; i++)
                                {
                                    if (skeletonHandGrabData[i].skeletonTrackingID == interactionInfo.SkeletonTrackingId)
                                    {
                                        if (hand.HandType == InteractionHandType.Left)
                                        {
                                            skeletonHandGrabData[i].leftHandClosed = true;
                                        }
                                        else if (hand.HandType == InteractionHandType.Right)
                                        {
                                            skeletonHandGrabData[i].rightHandClosed = true;
                                        }
                                        break;
                                    }
                                }
                            }
                            else if (hand.HandEventType == InteractionHandEventType.GripRelease)
                            {
                                for (int i = 0; i < skeletonHandGrabData.Count; i++)
                                {
                                    if (skeletonHandGrabData[i].skeletonTrackingID == interactionInfo.SkeletonTrackingId)
                                    {
                                        if (hand.HandType == InteractionHandType.Left)
                                        {
                                            skeletonHandGrabData[i].leftHandClosed = false;
                                        }
                                        else if (hand.HandType == InteractionHandType.Right)
                                        {
                                            skeletonHandGrabData[i].rightHandClosed = false;
                                        }
                                        break;
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
コード例 #30
0
ファイル: KinectEvents.cs プロジェクト: GregWard/Tronsformers
        private void InteractionFrameReady(object sender, InteractionFrameReadyEventArgs e)
        {
            Storyboard sb = this.TryFindResource("HelloFlashing") as Storyboard;
            Player playerToUse = null;
            // Check for a null userInfos since we may still get posted events
            // from the stream after we have unregistered our event handler and
            // deleted our buffers.
            if (this.usersInfo == null)
            {
                return;
            }

            UserInfo[] localUserInfos = null;
            long timestamp = 0;
            //HashSet<int> trackedUsers = new HashSet<int>();

            //foreach(Player player in players)
            //{
            //    trackedUsers.Add(player.Info.SkeletonTrackingId);
            //}

            using (InteractionFrame interactionFrame = e.OpenInteractionFrame())
            {
                if (interactionFrame != null)
                {
                    // Copy interaction frame data so we can dispose interaction frame
                    // right away, even if data processing/event handling takes a while.
                    interactionFrame.CopyInteractionDataTo(this.usersInfo);
                    timestamp = interactionFrame.Timestamp;
                    localUserInfos = this.usersInfo;
                }
            }

            if (localUserInfos != null)
            {

                var currentUserSet = new HashSet<int>();
                var usersToRemove = new HashSet<Player>();

                // Keep track of current users in scene
                foreach (var info in localUserInfos)
                {
                    if (info.SkeletonTrackingId == 0)
                    {
                        // Only look at user information corresponding to valid users
                        continue;
                    }


                    if (!this.trackedUsers.Contains(info.SkeletonTrackingId))
                    {
                        Ellipse newPlayerCursor;
                        if (players.Count == 0)
                        {
                            if(Hello.Opacity == 0)
                            {
                                sb.Begin(Hello, true);
                            }
                            
                            newPlayerCursor = KinectHelper.CreateCursor(100, 100, new SolidColorBrush(Colors.Yellow), "player1");

                            players.Add(new Player(info, newPlayerCursor, "player1"));

                            canvas.Children.Add(newPlayerCursor);
                        }
                        else
                        {
                            if (players.Count == 1)
                            {
                                string name = "player2";

                                if (players[0].Name == "player2")
                                {
                                    name = "player1";
                                }

                                newPlayerCursor = KinectHelper.CreateCursor(this.Height/20, this.Height / 20, new SolidColorBrush(Colors.Crimson), name);
                                players.Add(new Player(info, newPlayerCursor, name));
                                canvas.Children.Add(newPlayerCursor);
                            }
                        }
                    }

                    foreach (Player player in players)
                    {
                        if (player.Info.SkeletonTrackingId == info.SkeletonTrackingId)
                        {
                            playerToUse = player;
                        }
                    }

                    currentUserSet.Add(info.SkeletonTrackingId);
                    this.trackedUsers.Add(info.SkeletonTrackingId);

                    // Perform hit testing and look for Grip and GripRelease events
                    foreach (var handPointer in info.HandPointers)
                    {

                        if (handPointer.IsPrimaryForUser)
                        {
                            double xUI = handPointer.X * this.Width;
                            double yUI = handPointer.Y * this.Height;





                            double coinTop = 0;
                            double coinLeft = 0;
                            var uiElement = VisualTreeHelper.HitTest(canvas, new Point(xUI, yUI));
                            Ellipse coinElement = null;
                            // canvas.FindName("Quarter");

                            foreach (UIElement elem in canvas.Children)
                            {
                                if (elem is Ellipse && ((Ellipse)elem).Name == "Quarter")
                                {
                                    coinElement = (Ellipse)elem;
                                    coinTop = Canvas.GetTop(coinElement);
                                    coinLeft = Canvas.GetLeft(coinElement);
                                }
                            }


                            if (playerToUse != null)
                            {
                                if (xUI + 100 <= this.Width && xUI >= 0)
                                {
                                    Canvas.SetLeft(playerToUse.Cursor, xUI);
                                }
                                if (yUI + 100 <= this.Height && yUI >= 0)
                                {
                                    Canvas.SetTop(playerToUse.Cursor, yUI);
                                }

                            }
                            if (coinElement != null)
                            {
                                if (handPointer.HandEventType != InteractionHandEventType.None)
                                {
                                    if (handPointer.HandEventType == InteractionHandEventType.Grip)
                                    {
                                        if (!entryCoin.IsGripped)
                                        {
                                            if (((xUI <= coinLeft + 60) || (xUI <= coinLeft - 20)) && ((yUI <= coinTop + 60) || (yUI <= coinTop - 20)))
                                            {
                                                entryCoin.IsGripped = true;
                                                entryCoin.GrippedBy = playerToUse.Name;
                                            }
                                        }

                                    }
                                    else if (handPointer.HandEventType == InteractionHandEventType.GripRelease)
                                    {
                                        if ((entryCoin.IsGripped) && (entryCoin.GrippedBy == playerToUse.Name))
                                        {
                                            entryCoin.GrippedBy = "";
                                            entryCoin.IsGripped = false;
                                            //do not let the coin exceed the bounds of the screen. This must be set explicitly and not
                                            //in reference to the top/left of the players cursor due to it still exceeding boundary

                                            if (xUI + 100 <= this.Width && xUI >= 0)
                                            {
                                                Canvas.SetLeft(coinElement, xUI);
                                            }

                                            if (yUI + 100 <= this.Height && yUI >= 0)
                                            {
                                                Canvas.SetTop(coinElement, yUI);
                                            }

                                        }
                                    }
                                }

                                if (entryCoin.IsGripped && (entryCoin.GrippedBy == playerToUse.Name))
                                {

                                    //do not let the coin exceed the bounds of the screen. This must be set explicitly and not
                                    //in reference to the top/left of the players cursor due to it still exceeding boundary

                                    if (xUI + 100 <= this.Width && xUI >= 0)
                                    {
                                        Canvas.SetLeft(coinElement, xUI);
                                    }

                                    if (yUI + 100 <= this.Height && yUI >= 0)
                                    {
                                        Canvas.SetTop(coinElement, yUI);
                                    }
                                }

                            }
                        }
                    }
                }
                foreach (Player player in players)
                {
                    if (!currentUserSet.Contains(player.Info.SkeletonTrackingId))
                    {
                        usersToRemove.Add(player);
                    }
                }

                foreach (Player player in usersToRemove)
                {
                    canvas.Children.Remove(player.Cursor);
                    players.Remove(player);
                    
                }

                if(players.Count == 0)
                {
                    //start a timer that will mark the time and go back if there's no one there within 5 seconds
                }
            }
        }
コード例 #31
0
        /// <summary>
        /// Event handler for InteractionStream's InteractionFrameReady event
        /// </summary>
        /// <param name="sender">object sending the event</param>
        /// <param name="e">event arguments</param>
        private void InteractionFrameReady(object sender, InteractionFrameReadyEventArgs e)
        {
            // Check for a null userInfos since we may still get posted events
            // from the stream after we have unregistered our event handler and
            // deleted our buffers.
            if (this.userInfos == null)
            {
                return;
            }

            UserInfo[] localUserInfos = null;
            long timestamp = 0;

            using (InteractionFrame interactionFrame = e.OpenInteractionFrame())
            {
                if (interactionFrame != null)
                {
                    // Copy interaction frame data so we can dispose interaction frame
                    // right away, even if data processing/event handling takes a while.
                    interactionFrame.CopyInteractionDataTo(this.userInfos);
                    timestamp = interactionFrame.Timestamp;
                    localUserInfos = this.userInfos;
                }
            }

            if (localUserInfos != null)
            {
                //// TODO: Process user info data, perform hit testing with UI, route UI events, etc.
                //// TODO: See KinectRegion and KinectAdapter in Microsoft.Kinect.Toolkit.Controls assembly
                //// TODO: For a more comprehensive example on how to do this.

                var currentUserSet = new HashSet<int>();
                var usersToRemove = new HashSet<int>();

                // Keep track of current users in scene
                foreach (var info in localUserInfos)
                {
                    if (info.SkeletonTrackingId == InvalidTrackingId)
                    {
                        // Only look at user information corresponding to valid users
                        continue;
                    }

                    if (!this.trackedUsers.Contains(info.SkeletonTrackingId))
                    {
                        Console.WriteLine(Converter.EncodeNewInteractionUser(info.SkeletonTrackingId));
                    }

                    currentUserSet.Add(info.SkeletonTrackingId);
                    this.trackedUsers.Add(info.SkeletonTrackingId);

                    // Perform hit testing and look for Grip and GripRelease events
                    foreach (var handPointer in info.HandPointers)
                    {
                        Console.WriteLine(Converter.EncodeInteraction(info.SkeletonTrackingId,
                                                                    (HandEventType)handPointer.HandEventType,
                                                                    (HandType)handPointer.HandType, (float)handPointer.X, (float)handPointer.Y, (float)handPointer.PressExtent,
                                                                    handPointer.IsActive, handPointer.IsInteractive, handPointer.IsPressed, handPointer.IsTracked));                            
                    }
                }

                foreach (var id in this.trackedUsers)
                {
                    if (!currentUserSet.Contains(id))
                    {
                        usersToRemove.Add(id);
                    }
                }

                foreach (var id in usersToRemove)
                {
                    this.trackedUsers.Remove(id);
                    Console.WriteLine(Converter.EncodeInteractionUserLeft(id));
                }
            }
        }
コード例 #32
0
        private void InteractiontStream_InteractionFrameReady( object sender, InteractionFrameReadyEventArgs e )
        {
            InteractionFrame iFrame = e.OpenInteractionFrame();
            if( iFrame == null ) return;

            iFrame.CopyInteractionDataTo( _userInfo );

            List<UserInfo> curUsers = _userInfo.Where( x => x.SkeletonTrackingId > 0 ).ToList<UserInfo>();

            if( curUsers.Count > 0 )
            {

                if ( !_skeletonFound )
                {
                    _skeletonFound = true;
                }
                UserInfo curUser = curUsers[0];

                _handsVisible = true;

                _positionTrackerController.NotifyPositionTrackers( curUser );

                if( HandsPointReady != null )
                {
                    Point left = WindowPointFromHandPointer( curUser.HandPointers[0] );
                    Point right = WindowPointFromHandPointer( curUser.HandPointers[1] );
                    _leftHand = left;
                    _rightHand = right;
                    MapInput();

                    OnHandsPointReady( left, right );

                    SafetyModeCheck( curUser );

                    TestTakeOffCapabitility( curUser );
                }
            }
            else if( _handsVisible == true )
            {
                OnHandsPointReady( new System.Windows.Point( -1, -1 ), new System.Windows.Point( -1, -1 ) );
                _leftHand = new System.Windows.Point(-1, -1);
                _rightHand = new System.Windows.Point(-1, -1);
                MapInput();

                _handsVisible = false;
                if( _skeletonFound )
                {
                    _skeletonFound = false;
                    SafetyModeCheck( null );
                }
                _leftGrip = false;
                _rightGrip = false;
            }
            else
            {
                if( _skeletonFound )
                {
                    _skeletonFound = false;
                }
                _leftGrip = false;
                _rightGrip = false;
            }
        }
コード例 #33
0
        private void InteractionStreamOnInteractionFrameReady(object sender, InteractionFrameReadyEventArgs args)
        {
            using (var iaf = args.OpenInteractionFrame())             //dispose as soon as possible
            {
                if (iaf == null)
                {
                    return;
                }

                iaf.CopyInteractionDataTo(_userInfos);
            }

            foreach (var userInfo in _userInfos)
            {
                var userID = userInfo.SkeletonTrackingId;
                if (userID == 0)
                {
                    continue;
                }

                var hands = userInfo.HandPointers;

                foreach (var hand in hands)
                {
                    var lastHandEvents = hand.HandType == InteractionHandType.Left
                                                                                                ? _lastLeftHandEvents
                                                                                                : _lastRightHandEvents;
                    if (lastHandEvents == _lastLeftHandEvents)
                    {
                        continue;
                    }

                    if (hand.HandEventType != InteractionHandEventType.None)
                    {
                        lastHandEvents[userID] = hand.HandEventType;
                    }

                    var lastHandEvent = lastHandEvents.ContainsKey(userID)
                                                                                        ? lastHandEvents[userID]
                                                                                        : InteractionHandEventType.None;

                    if (lastHandEvent == InteractionHandEventType.Grip)
                    {
                        //	Set value
                        isGripped = true;

                        //	If hand gripped, show gripped cursor and move the item with the cursor
                        handCursor.Source = new BitmapImage(new Uri("Resources/pointerWhite.png", UriKind.Relative));

                        //	Find the item number of which the hand cursor is on
                        if (itemGripped.HandCursorOn == -1 && itemGripped.HandCursorOnSet == false)
                        {
                            for (int i = itemChildrenStart; i < canvas.Children.Count; i++)
                            {
                                var childrenPoint   = canvas.Children[i].TranslatePoint(new Point(0, 0), canvas);
                                var handCursorPoint = handCursor.TranslatePoint(new Point(0, 0), canvas);
                                if (handCursorPoint.X > childrenPoint.X && handCursorPoint.X < childrenPoint.X +
                                    itemWidth && handCursorPoint.Y > childrenPoint.Y && handCursorPoint.Y < childrenPoint.Y + itemHeight)
                                {
                                    itemGripped.HandCursorOn            = i;
                                    itemGripped.HandCursorOnLeftDistant = handCursorPoint.X - childrenPoint.X;
                                    itemGripped.HandCursorOnTopDistant  = handCursorPoint.Y - childrenPoint.Y;
                                    itemGripped.HandCursorOnSet         = true;
                                    break;
                                }
                            }
                        }

                        //	Move the item with the hand cursor
                        if (itemGripped.HandCursorOn != -1)
                        {
                            var p = handCursor.TranslatePoint(new Point(0, 0), canvas);

                            try
                            {
                                Canvas.SetLeft(canvas.Children[itemGripped.HandCursorOn], p.X - itemGripped.HandCursorOnLeftDistant);
                                Canvas.SetTop(canvas.Children[itemGripped.HandCursorOn], p.Y - itemGripped.HandCursorOnTopDistant);
                            }
                            catch (Exception)
                            {
                            }
                        }
                    }
                    else if (lastHandEvent == InteractionHandEventType.GripRelease)
                    {
                        //	Set value
                        isGripped = false;

                        //	If hand grip released, show normal cursor
                        handCursor.Source           = new BitmapImage(new Uri("Resources/handWhite.png", UriKind.Relative));
                        itemGripped.HandCursorOn    = -1;
                        itemGripped.HandCursorOnSet = false;
                    }

                    if (hand.IsPressed)
                    {
                        //	If hand pressed the back, go back:

                        //	Get points of hand cursor and back button
                        var handCursorPoint = handCursor.TranslatePoint(new Point(0, 0), canvas);
                        var backPoint       = back.TranslatePoint(new Point(0, 0), canvas);

                        //	Left and Right check:
                        if (back.ActualWidth + backPoint.X >= handCursorPoint.X && handCursorPoint.X + handCursor.ActualWidth / 2 >= backPoint.X)
                        {
                            //	Top and Bottom check:
                            if (back.ActualHeight + backPoint.Y >= handCursorPoint.Y && handCursorPoint.Y + handCursor.ActualHeight / 2 >= backPoint.Y)
                            {
                                //	If 'watch' timer is running, then save the game first
                                //	If not, just close the window
                                if (watch.IsRunning)
                                {
                                    //	Stop the timer
                                    watch.Stop();

                                    //	Reset the timer
                                    watch.Reset();
                                }
                                //	Close the game window
                                Close();
                            }
                        }
                    }
                }
            }
        }
コード例 #34
0
        /// <summary>
        /// Event handler for InteractionStream's InteractionFrameReady event
        /// </summary>
        /// <param name="sender">object sending the event</param>
        /// <param name="e">event arguments</param>
        private void InteractionFrameReady(object sender, InteractionFrameReadyEventArgs e)
        {
            // Check for a null userInfos since we may still get posted events
            // from the stream after we have unregistered our event handler and
            // deleted our buffers.
            if (this.userInfos == null)
            {
                return;
            }

            UserInfo[] localUserInfos = null;
            long       timestamp      = 0;

            using (InteractionFrame interactionFrame = e.OpenInteractionFrame())
            {
                if (interactionFrame != null)
                {
                    // Copy interaction frame data so we can dispose interaction frame
                    // right away, even if data processing/event handling takes a while.
                    interactionFrame.CopyInteractionDataTo(this.userInfos);
                    timestamp      = interactionFrame.Timestamp;
                    localUserInfos = this.userInfos;
                }
            }

            if (localUserInfos != null)
            {
                //// TODO: Process user info data, perform hit testing with UI, route UI events, etc.
                //// TODO: See KinectRegion and KinectAdapter in Microsoft.Kinect.Toolkit.Controls assembly
                //// TODO: For a more comprehensive example on how to do this.

                var currentUserSet = new HashSet <int>();
                var usersToRemove  = new HashSet <int>();

                // Keep track of current users in scene
                foreach (var info in localUserInfos)
                {
                    if (info.SkeletonTrackingId == InvalidTrackingId)
                    {
                        // Only look at user information corresponding to valid users
                        continue;
                    }

                    if (!this.trackedUsers.Contains(info.SkeletonTrackingId))
                    {
                        Console.WriteLine(Converter.EncodeNewInteractionUser(info.SkeletonTrackingId));
                    }

                    currentUserSet.Add(info.SkeletonTrackingId);
                    this.trackedUsers.Add(info.SkeletonTrackingId);

                    // Perform hit testing and look for Grip and GripRelease events
                    foreach (var handPointer in info.HandPointers)
                    {
                        Console.WriteLine(Converter.EncodeInteraction(info.SkeletonTrackingId,
                                                                      (HandEventType)handPointer.HandEventType,
                                                                      (HandType)handPointer.HandType, (float)handPointer.X, (float)handPointer.Y, (float)handPointer.PressExtent,
                                                                      handPointer.IsActive, handPointer.IsInteractive, handPointer.IsPressed, handPointer.IsTracked));
                    }
                }

                foreach (var id in this.trackedUsers)
                {
                    if (!currentUserSet.Contains(id))
                    {
                        usersToRemove.Add(id);
                    }
                }

                foreach (var id in usersToRemove)
                {
                    this.trackedUsers.Remove(id);
                    Console.WriteLine(Converter.EncodeInteractionUserLeft(id));
                }
            }
        }
コード例 #35
0
        private static void InteractionStreamOnInteractionFrameReady(object sender, InteractionFrameReadyEventArgs e)
        {
            using (InteractionFrame frame = e.OpenInteractionFrame())
            {
                if (frame != null)
                {
                    if (userInfos == null)
                    {
                        userInfos = new UserInfo[InteractionFrame.UserInfoArrayLength];
                    }
                    frame.CopyInteractionDataTo(userInfos);
                }
                else
                {
                    return;
                }
            }

            isFirstGrip = false;
            Console.WriteLine("userinfo length : " + userInfos.Length);
            foreach (UserInfo userInfo in userInfos)
            {
                //if (userInfo.SkeletonTrackingId == 0) continue;
                Console.WriteLine("number handpointers : " + userInfo.HandPointers.Count);
                foreach (InteractionHandPointer handPointer in userInfo.HandPointers)
                {
                    //if (!handPointer.IsTracked) continue;
                    string action = null;
                    switch (handPointer.HandEventType)
                    {
                        case InteractionHandEventType.Grip:
                            Console.WriteLine("grip");
                            action = "gripped";
                            break;

                        case InteractionHandEventType.GripRelease:
                            Console.WriteLine("grip release");
                            action = "released";
                            break;
                        default:
                            action = "default";
                            break;
                    }

                    if (action != null)
                    {
                        string handSide = "unknown";
                        switch (handPointer.HandType)
                        {
                            case InteractionHandType.Left:
                                //Console.WriteLine("mão esquerda");
                                handSide = "left";
                                break;

                            case InteractionHandType.Right:
                                //Console.WriteLine("mão direita");
                                handSide = "right";
                                break;
                        }

                        if (handSide == "left")
                        {
                            if (action == "released")
                            {
                                // left hand released code here
                                handGrip = NO_HAND;
                            }
                            else if (action == "gripped")
                            {
                                // left hand gripped code here
                                handGrip = LEFT_HAND;
                            }
                        }
                        else
                        {
                            if (action == "released")
                            {
                                // right hand released code here
                                handGrip = NO_HAND;
                            }
                            else if (action == "gripped")
                            {
                                // right hand gripped code here
                                handGrip = RIGHT_HAND;
                            }
                        }
                    }

                    float xPos = 20f, yPos = 20f, zPos = 20f;

                    // check if at least one hand on grip
                    if (handGrip != NO_HAND)
                    {
                        // aqui podia verificar se dá -1, que significa nenhum a ser tracked, mas em
                        // princípio isso não vai suceder
                        int skeletonIndex = whichSkeleton(skeletons);

                        Console.WriteLine(handGrip);
                        if (handGrip == LEFT_HAND)
                        {
                            xPos = skeletons[skeletonIndex].Joints[JointType.HandLeft].Position.X;
                            yPos = skeletons[skeletonIndex].Joints[JointType.HandLeft].Position.Y;
                            zPos = skeletons[skeletonIndex].Joints[JointType.HandLeft].Position.Z;
                        }
                        else
                        {

                            xPos = skeletons[skeletonIndex].Joints[JointType.HandRight].Position.X;
                            yPos = skeletons[skeletonIndex].Joints[JointType.HandRight].Position.Y;
                            zPos = skeletons[skeletonIndex].Joints[JointType.HandRight].Position.Z;
                            Console.WriteLine(userInfo.SkeletonTrackingId);
                            Console.WriteLine("posição z : " + skeletons[skeletonIndex].Joints[JointType.HandRight].Position.Z);
                        }

                        // check if this is the first grip of a sequence
                        if (isFirstGrip)
                        {
                            isFirstGrip = false;
                            Console.WriteLine("First grip!");
                            // store the first positions
                            xPosFirst = xPos;
                            yPosFirst = yPos;
                            zPosFirst = zPos;
                            // dá sempre zero
                            float distanceFromOrigin = calculateDistanceBetweenHands(xPos, xPosFirst, yPos, yPosFirst);
                            Console.WriteLine("Distance from origin: " + distanceFromOrigin);
                            //Console.WriteLine(xPosFirst);
                        }
                        // call functions to manipulate image
                        else
                        {
                            float distanceFromOrigin = calculateDistanceBetweenHands(xPos, xPosFirst, yPos, yPosFirst);
                            // Console.WriteLine("Distance from origin: " + distanceFromOrigin);
                            Console.WriteLine("diferença z : " + (zPos - zPosFirst));
                            image_Zoom(zPos - zPosFirst);
                        }
                    }
                    else
                    {
                        isFirstGrip = true;
                    }
                }

            }
        }
コード例 #36
0
        /// <summary>
        /// Manejador de eventos para el evento del sensor de kinect InteractionStream sacado y adaptado de:
        /// http://dotneteers.net/blogs/vbandi/archive/2013/05/03/kinect-interactions-with-wpf-part-iii-demystifying-the-interaction-stream.aspx
        /// y https://msdn.microsoft.com/es-es/library/system.windows.media.formattedtext(v=vs.110).aspx
        /// </summary>
        /// <param name="sender">object sending the event</param>
        /// <param name="e">event arguments</param>
        private void InteractionStreamOnInteractionFrameReady(object sender, InteractionFrameReadyEventArgs e)
        {
            using (InteractionFrame frame = e.OpenInteractionFrame())
            {
                if (frame != null)
                {
                    if (this.userInfos == null)
                    {
                        this.userInfos = new UserInfo[InteractionFrame.UserInfoArrayLength];
                    }
                    //Copiamos los datos de interacción.
                    frame.CopyInteractionDataTo(this.userInfos);
                }
                else
                {
                    //return;
                }
            }

            foreach (UserInfo userInfo in this.userInfos)
            {
                foreach (InteractionHandPointer handPointer in userInfo.HandPointers)
                {
                    //Inicializamos la acción que realizará.
                    string action = null;

                    //Comprobamos cual es la acción y asignamos la acción que realice el evento de la mano.
                    switch (handPointer.HandEventType)
                    {
                        //Si cerramos la mano asignamos gripped a la acción
                        case InteractionHandEventType.Grip:
                            action = "gripped";
                            break;

                        //Si abrimos la mano asinamos released a la acción
                        case InteractionHandEventType.GripRelease:
                            action = "released";

                            break;
                    }

                    if (action != null)
                    {
                        //Iniciamos que mano es la que está realizando la acción a desconocida.
                        string handSide = "unknown";

                        //Comprobamos que mano es la que realiza la acción y asignamos left o right dependiendo de que mano es.
                        switch (handPointer.HandType)
                        {
                            case InteractionHandType.Left:
                                handSide = "left";
                                break;

                            case InteractionHandType.Right:
                                handSide = "right";
                                break;
                        }

                        // Dependiendo de la mano hará una acción u otra al abrir y cerrar,
                        // en nuestro caso son las mismas acciones para ambas manos pero dibujará un puño cerrado o abierto dependiendo de que mano esté realizando la acción.
                        //Si la acción es released llamaremos a la función soltar de la clase Puzzle.cs
                        //Si es coger llamará a la función coger de la clase Puzzle.cs
                        //Ver Puzzle.cs para saber lo que hacen.
                        if (handSide == "left")
                        {
                            if (action == "released")
                            {
                                puzzle.soltar(handSide);
                                manoIzq = manoIzqA;
                            }
                            else
                            {
                                puzzle.coger(handSide);
                                manoIzq = manoIzqC;
                            }
                        }
                        else
                        {
                            if (action == "released")
                            {
                                puzzle.soltar(handSide);
                                manoDer = manoDerA;
                            }
                            else
                            {
                                puzzle.coger(handSide);
                                manoDer = manoDerC;
                            }
                        }
                    }
                }
            }
        }
コード例 #37
0
        private void InteractionStream_InteractionFrameReady(object sender, InteractionFrameReadyEventArgs e)
        {
            using (InteractionFrame interactionFrame = e.OpenInteractionFrame()) //dispose as soon as possible
            {
                if (interactionFrame == null)
                {
                    return;
                }

                interactionFrame.CopyInteractionDataTo(userInfos);
            }

            //select our user and get his data
            var userInfo = userInfos.FirstOrDefault(uInfo => uInfo.SkeletonTrackingId != 0);

            if (userInfo == null)
            {
                return;
            }

            var userID = userInfo.SkeletonTrackingId;

            hands = userInfo.HandPointers;

            //if at least one hand has been found
            if (hands.Count > 0)
            {
                var mySkeleton = skeletons.FirstOrDefault(skeleton => skeleton.TrackingState == SkeletonTrackingState.Tracked);

                var leftHand  = hands.FirstOrDefault(hand => hand.HandType == InteractionHandType.Left);
                var rightHand = hands.FirstOrDefault(hand => hand.HandType == InteractionHandType.Right);

                if (leftHand == null || rightHand == null)
                {
                    return;
                }

                var leftHandEvent  = DetermineLastHandEvent(leftHand, userID);
                var rightHandEvent = DetermineLastHandEvent(rightHand, userID);

                var leftHandJoint  = mySkeleton.Joints[JointType.HandLeft];
                var rightHandJoint = mySkeleton.Joints[JointType.HandRight];

                LHandText = $"Tracking status: {leftHand.IsTracked}\nX: {Math.Round(leftHand.RawX, 1)} Y: {Math.Round(leftHand.RawY, 1)} Z: {Math.Round(leftHand.RawZ, 1)}\nState: {leftHandEvent}";
                RHandText = $"Tracking status: {rightHand.IsTracked}\nX: {Math.Round(rightHand.RawX, 1)} Y: {Math.Round(rightHand.RawY, 1)} Z: {Math.Round(rightHand.RawZ, 1)}\nState: {rightHandEvent}";

                LeftHandMarker.UpdateUI(kinectSensor, leftHandJoint, leftHandEvent, leftHandEvent);
                NotifyPropertyChanged("LeftHandMarker");
                RightHandMarker.UpdateUI(kinectSensor, rightHandJoint, leftHandEvent, rightHandEvent);
                NotifyPropertyChanged("RightHandMarker");

                if (Manipulator == null || !Manipulator.Connected)
                {
                    return;
                }

                if (leftHandEvent == InteractionHandEventType.Grip)
                {
                    const int multiplication = 100; //tbd

                    if (sample)
                    {
                        if (rightHandEvent == InteractionHandEventType.Grip && lastGripCommand.Equals(GripOpen))
                        {
                            Manipulator?.SendCustom(GripClose);
                            lastGripCommand = GripClose;
                            wasGripSent     = true;
                        }
                        else if (rightHandEvent == InteractionHandEventType.GripRelease && lastGripCommand.Equals(GripClose))
                        {
                            Manipulator?.SendCustom(GripOpen);
                            lastGripCommand = GripOpen;
                            wasGripSent     = true;
                        }


                        if (!wasGripSent)
                        {
                            var moveCommand = $"DS {(int)sumZ}, {(int)sumX}, {(int)sumY}";
                            Manipulator?.SendCustom(moveCommand);
                        }
                        else
                        {
                            wasGripSent = false;
                        }

                        timer.Start();
                        ResetSums();
                        sample       = false;
                        lastPosition = rightHandJoint.Position;
                    }
                    else
                    {
                        var deltaX = (rightHandJoint.Position.X - lastPosition.X) * multiplication;
                        var deltaY = (rightHandJoint.Position.Y - lastPosition.Y) * multiplication;
                        var deltaZ = (rightHandJoint.Position.Z - lastPosition.Z) * multiplication;

                        sumX += deltaX;
                        sumY += deltaY;
                        sumZ += deltaZ;
                    }

                    //lastPosition = rightHandJoint.Position;
                }
                else
                {
                    lastPosition = rightHandJoint.Position;
                }
            }
        }
コード例 #38
0
        /// <summary>
        /// Manejador de eventos para el evento del sensor de kinect InteractionStream sacado y adaptado de:
        /// http://dotneteers.net/blogs/vbandi/archive/2013/05/03/kinect-interactions-with-wpf-part-iii-demystifying-the-interaction-stream.aspx
        /// </summary>
        /// <param name="sender">object sending the event</param>
        /// <param name="e">event arguments</param>
        private void InteractionStreamOnInteractionFrameReady(object sender, InteractionFrameReadyEventArgs e)
        {
            using (InteractionFrame frame = e.OpenInteractionFrame())
            {
                if (frame != null)
                {
                    if (this.userInfos == null)
                    {
                        this.userInfos = new UserInfo[InteractionFrame.UserInfoArrayLength];
                    }
                    //Copiamos los datos de interacción.
                    frame.CopyInteractionDataTo(this.userInfos);
                }
                else
                {
                    return;
                }
            }

            foreach (UserInfo userInfo in this.userInfos)
            {
                foreach (InteractionHandPointer handPointer in userInfo.HandPointers)
                {
                    //Inicializamos la acción que realizará.
                    string action = null;

                    //Comprobamos cual es la acción y asignamos la acción que realice el evento de la mano.
                    switch (handPointer.HandEventType)
                    {
                    //Si cerramos la mano asignamos gripped a la acción
                    case InteractionHandEventType.Grip:
                        action = "gripped";
                        break;

                    //Si abrimos la mano asinamos released a la acción
                    case InteractionHandEventType.GripRelease:
                        action = "released";

                        break;
                    }

                    if (action != null)
                    {
                        //Iniciamos que mano es la que está realizando la acción a desconocida.
                        string handSide = "unknown";

                        //Comprobamos que mano es la que realiza la acción y asignamos left o right dependiendo de que mano es.
                        switch (handPointer.HandType)
                        {
                        case InteractionHandType.Left:
                            handSide = "left";
                            break;

                        case InteractionHandType.Right:
                            handSide = "right";
                            break;
                        }

                        // Dependiendo de la mano hará una acción u otra al abrir y cerrar,
                        // en nuestro caso son las mismas acciones para ambas manos pero dibujará un puño cerrado o abierto dependiendo de que mano esté realizando la acción.
                        //Si la acción es released llamaremos a la función soltar de la clase Puzzle.cs
                        //Si es coger llamará a la función coger de la clase Puzzle.cs
                        //Ver Puzzle.cs para saber lo que hacen.
                        if (handSide == "left")
                        {
                            if (action == "released")
                            {
                                puzzle.soltar(handSide);
                                manoIzq = manoIzqA;
                            }
                            else
                            {
                                puzzle.coger(handSide);
                                manoIzq = manoIzqC;
                            }
                        }
                        else
                        {
                            if (action == "released")
                            {
                                puzzle.soltar(handSide);
                                manoDer = manoDerA;
                            }
                            else
                            {
                                puzzle.coger(handSide);
                                manoDer = manoDerC;
                            }
                        }
                    }
                }
            }
        }
コード例 #39
0
        //Listener de las interacciones del esqueleto
        private void InteractionStreamOnInteractionFrameReady(object sender, InteractionFrameReadyEventArgs args)
        {
            using (var iaf = args.OpenInteractionFrame()) //dispose as soon as possible
            {
                if (iaf == null)
                {
                    return;
                }
                iaf.CopyInteractionDataTo(_userInfos);
            }

            StringBuilder dump = new StringBuilder();

            var hasUser = false;

            //Ciclo por los usuarios disponibles
            foreach (var userInfo in _userInfos)
            {
                //obtiene id del usuario proporcionado por kinec
                var userID = userInfo.SkeletonTrackingId;
                //si el id es 0 se sigue con el siguiente
                if (userID == 0)
                {
                    continue;
                }
                //como existe usuario le coloca true
                hasUser = true;
                //se agrega el id del usuario al stringbuilder
                dump.AppendLine("User ID = " + userID);
                dump.AppendLine("  Hands: ");
                //Se crea un arreglo con las manos disponibles de la persona y se le asigna
                var hands = userInfo.HandPointers;
                if (hands.Count == 0)
                {
                    dump.AppendLine("    No hands");
                }
                else
                {
                    //se recorren las manos por persona
                    foreach (var hand in hands)
                    {
                        //Se diferencia mano derecha o izquierda
                        var lastHandEvents = hand.HandType == InteractionHandType.Left
                                                 ? _lastLeftHandEvents
                                                 : _lastRightHandEvents;

                        if (hand.HandEventType != InteractionHandEventType.None)
                        {
                            lastHandEvents[userID] = hand.HandEventType;
                        }
                        var lastHandEvent = lastHandEvents.ContainsKey(userID)
                                                ? lastHandEvents[userID]
                                                : InteractionHandEventType.None;
                        //se obtienen datos de las manos, como que tipo
                        dump.AppendLine();
                        dump.AppendLine("    Mano derecha o izquierda : " + hand.HandType);
                        dump.AppendLine("    Tipo de evento de la mano: " + hand.HandEventType);
                        dump.AppendLine("    ultimo  evento: " + lastHandEvent);
                        dump.AppendLine("    esta activa: " + hand.IsActive);
                        dump.AppendLine("    es la mano dominante en el programa: " + hand.IsPrimaryForUser);
                        dump.AppendLine("    IsInteractive: " + hand.IsInteractive);
                        dump.AppendLine("    PressExtent: " + hand.PressExtent.ToString("N3"));
                        dump.AppendLine("    es precionada: " + hand.IsPressed);
                        dump.AppendLine("    es trackeada: " + hand.IsTracked);
                        dump.AppendLine("    X: " + hand.X.ToString("N3"));
                        dump.AppendLine("    Y: " + hand.Y.ToString("N3"));
                        dump.AppendLine("    RawX: " + hand.RawX.ToString("N3"));
                        dump.AppendLine("    RawY: " + hand.RawY.ToString("N3"));
                        dump.AppendLine("    RawZ: " + hand.RawZ.ToString("N3"));
                        movimiento(hand.X, hand.Y, hand.HandType);

                        if (hand.HandEventType == InteractionHandEventType.Grip && hand.HandType == InteractionHandType.Right)
                        {
                            recDerecha.Fill = new SolidColorBrush(Colors.Red);
                        }
                        else if (hand.HandEventType == InteractionHandEventType.GripRelease && hand.HandType == InteractionHandType.Right)
                        {
                            recDerecha.Fill = new SolidColorBrush(Colors.Black);
                        }
                    }
                }


                //Se imprimen las variables
                // tb.Text = dump.ToString();
            }

            // si no existe el usuario
            if (!hasUser)
            {
                // tb.Text = "No user detected.";
            }
        }
コード例 #40
0
        private void StreamOnInteractionFrameReady(object sender, InteractionFrameReadyEventArgs e)
        {
            using (InteractionFrame interactionFrame = e.OpenInteractionFrame())
            {
                if (interactionFrame != null)
                {
                    if (userInfos == null)
                    {
                        userInfos = new UserInfo[InteractionFrame.UserInfoArrayLength];
                    }
                    interactionFrame.CopyInteractionDataTo(userInfos);
                }
                else
                {
                    return;
                }

                foreach (UserInfo player in userInfos)
                {
                    foreach (InteractionHandPointer handPointer in player.HandPointers)
                    {
                        string action = null;
                        switch (handPointer.HandEventType)
                        {
                        case InteractionHandEventType.Grip:
                            action = "Hand Gripped";
                            break;

                        case InteractionHandEventType.GripRelease:
                            action = "Hand Released";
                            break;
                        }
                        if (action != null)
                        {
                            string handSide = "unknown";
                            switch (handPointer.HandType)
                            {
                            case InteractionHandType.Left:
                                handSide = "Left";
                                break;

                            case InteractionHandType.Right:
                                handSide = "Right";
                                break;
                            }

                            labelText = handSide + " " + action;



                            this.label1.Content = labelText;
                            udpConnection.SendData(System.Text.Encoding.Default.GetBytes(labelText));
                        }
                        if (handPointer.HandType == InteractionHandType.Right && handPointer.IsTracked)
                        {
                            string pos = "pos: " + handPointer.RawX + " " + handPointer.RawY + " " + handPointer.RawZ;
                            Trace.WriteLine(pos);
                            udpConnection.SendData(pos);
                        }
                    }
                }
            }
        }
コード例 #41
0
        private void InteractionStreamOnInteractionFrameReady(object sender, InteractionFrameReadyEventArgs args)
        {
            using (var iaf = args.OpenInteractionFrame()) //dispose as soon as possible
            {
                if (iaf == null)
                    return;

                iaf.CopyInteractionDataTo(_userInfos);
            }
            var lastSkeleton = _skeletons.Where((s) => s.TrackingState != SkeletonTrackingState.NotTracked).LastOrDefault(); 
            foreach (var userInfo in _userInfos)
            {
                var userID = userInfo.SkeletonTrackingId;
                if (userID == 0)
                    continue;
                //Update with all skeletons and current user info
                //Currently use last valid skeleton
                
                gestureController.UpdateAllGestures(lastSkeleton, userInfo);
                
            }
            if (DEBUG)
                GenerateDump(_userInfos,lastSkeleton);
        }
コード例 #42
0
        private void InteractionStreamOnInteractionFrameReady(object sender, InteractionFrameReadyEventArgs args)
        {
            using (var iaf = args.OpenInteractionFrame()) //dispose as soon as possible
            {
                if (iaf == null)
                {
                    return;
                }

                iaf.CopyInteractionDataTo(_userInfos);
            }

            StringBuilder dump = new StringBuilder();

            var hasUser = false;

            foreach (var userInfo in _userInfos)
            {
                var userID = userInfo.SkeletonTrackingId;
                if (userID == 0)
                {
                    continue;
                }

                hasUser = true;
                dump.AppendLine("User ID = " + userID);
                dump.AppendLine("  Hands: ");
                var hands = userInfo.HandPointers;
                if (hands.Count == 0)
                {
                    dump.AppendLine("    No hands");
                }
                else
                {
                    foreach (var hand in hands)
                    {
                        var lastHandEvents = hand.HandType == InteractionHandType.Left
                                                 ? _lastLeftHandEvents
                                                 : _lastRightHandEvents;

                        if (hand.HandEventType != InteractionHandEventType.None)
                        {
                            lastHandEvents[userID] = hand.HandEventType;
                        }

                        var lastHandEvent = lastHandEvents.ContainsKey(userID)
                                                ? lastHandEvents[userID]
                                                : InteractionHandEventType.None;

                        dump.AppendLine();
                        dump.AppendLine("    HandType: " + hand.HandType);
                        dump.AppendLine("    HandEventType: " + hand.HandEventType);
                        dump.AppendLine("    LastHandEventType: " + lastHandEvent);
                        dump.AppendLine("    IsActive: " + hand.IsActive);
                        dump.AppendLine("    IsPrimaryForUser: "******"    IsInteractive: " + hand.IsInteractive);
                        dump.AppendLine("    PressExtent: " + hand.PressExtent.ToString("N3"));
                        dump.AppendLine("    IsPressed: " + hand.IsPressed);
                        dump.AppendLine("    IsTracked: " + hand.IsTracked);
                        dump.AppendLine("    X: " + hand.X.ToString("N3"));
                        dump.AppendLine("    Y: " + hand.Y.ToString("N3"));
                        dump.AppendLine("    RawX: " + hand.RawX.ToString("N3"));
                        dump.AppendLine("    RawY: " + hand.RawY.ToString("N3"));
                        dump.AppendLine("    RawZ: " + hand.RawZ.ToString("N3"));
                    }
                }

                tb.Text = dump.ToString();
            }

            if (!hasUser)
            {
                tb.Text = "No user detected.";
            }
        }
コード例 #43
0
        /// <summary>
        /// The event handler for Kinect interactions for the InitialDetectionPage.
        /// </summary>
        /// <param name="sender">The sender of the event.</param>
        /// <param name="e">The arguments for the event.</param>
        private void InteractionFrameReady(object sender, InteractionFrameReadyEventArgs e)
        {
            Player playerToUse = null;
            // Check for a null userInfos since we may still get posted events
            // from the stream after we have unregistered our event handler and
            // deleted our buffers.
            if (this.usersInfo != null)
            {

                UserInfo[] localUserInfos = null;
                long timestamp = 0;


                using (InteractionFrame interactionFrame = e.OpenInteractionFrame())
                {
                    if (interactionFrame != null)
                    {
                        // Copy interaction frame data so we can dispose interaction frame
                        // right away, even if data processing/event handling takes a while.
                        interactionFrame.CopyInteractionDataTo(this.usersInfo);
                        timestamp = interactionFrame.Timestamp;
                        localUserInfos = this.usersInfo;
                    }
                }

                if (localUserInfos != null)
                {

                    var currentUserSet = new HashSet<int>();
                    var usersToRemove = new HashSet<Player>();

                    // Keep track of current users in scene
                    foreach (var info in localUserInfos)
                    {
                        if (info.SkeletonTrackingId == 0)
                        {
                            // Only look at user information corresponding to valid users
                            continue;
                        }


                        if (!this.trackedUsers.Contains(info.SkeletonTrackingId))
                        {
                            if (players.Count == 0)
                            {

                                players.Add(new Player(info, "player1", Brushes.SteelBlue));

                                canvas.Children.Add(players[0].Cursor);
                            }
                            else
                            {
                                if (players.Count == 1)
                                {
                                    string name = "player2";

                                    // Default the player's colour.
                                    SolidColorBrush playerColour = Brushes.Firebrick;

                                    if (players[0].Name == "player2")
                                    {
                                        name = "player1";
                                        // Default the player's colour.
                                        playerColour = Brushes.SteelBlue;
                                    }


                                    players.Add(new Player(info, name, playerColour));
                                    
                                    canvas.Children.Add(players[1].Cursor);

                                    sensor.SkeletonStream.AppChoosesSkeletons = true;
                                    sensor.SkeletonStream.ChooseSkeletons(players[0].Info.SkeletonTrackingId, players[1].Info.SkeletonTrackingId);
                                }
                            }

                            //re initialize timer so we are not counting players missing
                            playersMissing.Stop();
                            playersMissingCount = 0;
                        }

                        foreach (Player player in players)
                        {
                            if (player.Info.SkeletonTrackingId == info.SkeletonTrackingId)
                            {
                                playerToUse = player;
                            }
                        }

                        currentUserSet.Add(info.SkeletonTrackingId);
                        this.trackedUsers.Add(info.SkeletonTrackingId);

                        // Perform hit testing and look for Grip and GripRelease events
                        foreach (var handPointer in info.HandPointers)
                        {

                            if (handPointer.IsPrimaryForUser)
                            {
                                double xUI = handPointer.X * this.Width;
                                double yUI = handPointer.Y * this.Height;

                                double coinTop = 0;
                                double coinLeft = 0;
                               
                                Ellipse coinElement = null;
                                // canvas.FindName("Quarter");

                                foreach (UIElement elem in canvas.Children)
                                {
                                    if (elem is Ellipse && ((Ellipse)elem).Name == "Quarter")
                                    {
                                        coinElement = (Ellipse)elem;
                                        coinTop = Canvas.GetTop(coinElement);
                                        coinLeft = Canvas.GetLeft(coinElement);
                                    }
                                }


                                if (playerToUse != null)
                                {
                                    if (xUI + 100 <= this.Width && xUI >= 0)
                                    {
                                        Canvas.SetLeft(playerToUse.Cursor, xUI);
                                    }
                                    if (yUI + 100 <= this.Height && yUI >= 0)
                                    {
                                        Canvas.SetTop(playerToUse.Cursor, yUI);
                                    }

                                }
                                if (coinElement != null)
                                {
                                    if (handPointer.HandEventType != InteractionHandEventType.None)
                                    {
                                        if (handPointer.HandEventType == InteractionHandEventType.Grip)
                                        {
                                            playerToUse.Grab();

                                            if (!entryCoin.IsGripped)
                                            {
                                                if (((xUI <= coinLeft + 60) && (xUI >= coinLeft - 60)) && ((yUI <= coinTop + 60) && (yUI >= coinTop - 60)))
                                                {
                                                    entryCoin.IsGripped = true;
                                                    entryCoin.GrippedBy = playerToUse.Name;
                                                }
                                            }

                                        }
                                        else if (handPointer.HandEventType == InteractionHandEventType.GripRelease)
                                        {
                                            playerToUse.Release();
                                            if ((entryCoin.IsGripped) && (entryCoin.GrippedBy == playerToUse.Name))
                                            {
                                                entryCoin.GrippedBy = "";
                                                entryCoin.IsGripped = false;
                                                //do not let the coin exceed the bounds of the screen. This must be set explicitly and not
                                                //in reference to the top/left of the players cursor due to it still exceeding boundary

                                                if (xUI + 100 <= this.Width && xUI >= 0)
                                                {
                                                    Canvas.SetLeft(coinElement, xUI);
                                                }

                                                if (yUI + 100 <= this.Height && yUI >= 0)
                                                {
                                                    Canvas.SetTop(coinElement, yUI);
                                                }

                                                double slotThresholdX = xUI - Canvas.GetLeft(coinbox.Slot);
                                                double slotThresholdY = yUI - Canvas.GetTop(coinbox.Slot);

                                                if (  (slotThresholdX >= 0 && slotThresholdX < 400) && (slotThresholdY >= 0 && slotThresholdY < 400))
                                                {
                                                        canvas.Children.Clear();
                                                        NavigationService.Navigate(new ColourPicker(players, sensor));
                                                    playersMissing.Stop();
                                                    playersMissing.Tick -= PlayersMissing_Tick;
                                                    playersMissingCount = 0;
                                                    

                                                }

                                            }
                                        }
                                    }

                                    if (entryCoin.IsGripped && (entryCoin.GrippedBy == playerToUse.Name))
                                    {

                                        //do not let the coin exceed the bounds of the screen. This must be set explicitly and not
                                        //in reference to the top/left of the players cursor due to it still exceeding boundary

                                        if (xUI + 100 <= this.Width && xUI >= 0)
                                        {
                                            Canvas.SetLeft(coinElement, xUI);
                                        }

                                        if (yUI + 100 <= this.Height && yUI >= 0)
                                        {
                                            Canvas.SetTop(coinElement, yUI);
                                        }
                                    }

                                }
                            }
                        }
                    }
                    foreach (Player player in players)
                    {
                        if (!currentUserSet.Contains(player.Info.SkeletonTrackingId))
                        {
                            usersToRemove.Add(player);
                        }
                    }

                    foreach (Player player in usersToRemove)
                    {
                        canvas.Children.Remove(player.Cursor);
                        players.Remove(player);
                        if (players.Count == 0)
                        {
                            //start a timer that will mark the time and go back if there's no one there within 5 seconds
                            playersMissing.Start();
                            break;
                        }
                        sensor.SkeletonStream.AppChoosesSkeletons = false;

                    }


                }
            }
        }
コード例 #44
0
        private void OnInteractionFrameReady(object o, InteractionFrameReadyEventArgs e)
        {
            using (var iaf = e.OpenInteractionFrame()) //dispose as soon as possible
            {
                if (iaf == null)
                {
                    return;
                }
                iaf.CopyInteractionDataTo(user_infos);
            }
            foreach (var u in user_infos)
            {
                var userId = u.SkeletonTrackingId;
                if (userId == 0)
                {
                    continue;
                }
                var hands = u.HandPointers;
                if (hands.Count == 0)
                {
                    Console.WriteLine("No hands.");
                }
                else
                {
                    foreach (var hand in hands)
                    {
                        double cy     = (this.ActualHeight - leftCursor.Height) / 2;
                        double cx     = (this.ActualWidth - leftCursor.Width - this.ActualWidth / 4) / 2;
                        var    v_hand = new Vector(hand.X, hand.Y);
                        if (hand.HandType == InteractionHandType.Right)
                        {
                            v_hand += shoulder;
                            rightCursor.SetValue(Canvas.LeftProperty, cx + v_hand.X * 420);
                            rightCursor.SetValue(Canvas.TopProperty, cy + v_hand.Y * 420);
                            if (!hand.IsTracked || hand.HandEventType == InteractionHandEventType.GripRelease)
                            {
                                startR                 = new Vector(0, 0);
                                currentR               = new Vector(0, 0);
                                grabbedRightEh         = false;
                                startLocation          = null;
                                startHeading           = mainMap.Heading;
                                rightCursor.Visibility = Visibility.Visible;
                                rightCursor.Fill       = inactive;
                                if (!hand.IsTracked)
                                {
                                    rightCursor.Visibility = Visibility.Hidden;
                                }
                            }
                            else if (grabbedRightEh)
                            {
                                currentR = v_hand;
                            }
                            else if (hand.HandEventType == InteractionHandEventType.Grip)
                            {
                                startR                 = v_hand;
                                currentR               = v_hand;
                                grabbedRightEh         = true;
                                startLocation          = mainMap.Center;
                                rightCursor.Fill       = active;
                                rightCursor.Visibility = Visibility.Visible;
                            }
                        }

                        if (hand.HandType == InteractionHandType.Left)
                        {
                            v_hand -= shoulder;
                            leftCursor.SetValue(Canvas.TopProperty, cy + v_hand.Y * 420);
                            leftCursor.SetValue(Canvas.LeftProperty, cx + v_hand.X * 420);
                            if (!hand.IsTracked || hand.HandEventType == InteractionHandEventType.GripRelease)
                            {
                                startL                = new Vector(0, 0);
                                currentL              = new Vector(0, 0);
                                grabbedLeftEh         = false;
                                startLocation         = null;
                                startHeading          = mainMap.Heading;
                                leftCursor.Visibility = Visibility.Visible;
                                leftCursor.Fill       = inactive;
                                if (!hand.IsTracked)
                                {
                                    leftCursor.Visibility = Visibility.Hidden;
                                }
                            }
                            else if (grabbedLeftEh)
                            {
                                currentL = v_hand;
                            }
                            else if (hand.HandEventType == InteractionHandEventType.Grip)
                            {
                                startL        = v_hand;
                                currentL      = v_hand;
                                grabbedLeftEh = true;
                                startLocation = mainMap.Center;
                                startHeading  = mainMap.Heading;
                                startZoom     = mainMap.ZoomLevel;

                                leftCursor.Fill       = active;
                                leftCursor.Visibility = Visibility.Visible;
                            }
                        }
                    }
                    if (grabbedLeftEh && grabbedRightEh)
                    {
                        Vector v_start     = startL - startR;
                        Vector v_current   = currentL - currentR;
                        Vector v_Rmove     = currentR - startR;
                        Vector v_Lmove     = currentL - startL;
                        Vector v_moveTotal = (v_Rmove + v_Lmove) / 2;

                        double newHeading   = mainMap.Heading;
                        double lenChange    = v_current.Length - v_start.Length;
                        double newZoomLevel = startZoom;
                        // StatusBarText = mainMap.ZoomLevel.ToString();
                        if (zoomEnabled)
                        {
                            newZoomLevel += lenChange;
                        }
                        if (newZoomLevel < 4.0)
                        {
                            newZoomLevel = 4.0;
                        }


                        double sa = 0.0, ca = 0.0;
                        ca = Math.Cos(-newHeading * (Math.PI / 180));
                        sa = Math.Sin(-newHeading * (Math.PI / 180));
                        if (Math.Abs(v_current.Length) > 0.4 && rotateEnabled)
                        {
                            newHeading = startHeading + Vector.AngleBetween(v_start, v_current);
                        }



                        if (movementEnabled)
                        {
                            v_moveTotal = new Vector(ca * v_moveTotal.X - sa * v_moveTotal.Y, sa * v_moveTotal.X + ca * v_moveTotal.Y);
                        }
                        else
                        {
                            v_moveTotal = new Vector(0, 0);
                        }

                        double mapFactor = 0.17 * (Math.Pow(2, 12 - newZoomLevel));
                        double longitude = startLocation.Longitude - (v_moveTotal.X * mapFactor);
                        double latitude  = startLocation.Latitude + (v_moveTotal.Y * mapFactor * 0.5);
                        Console.WriteLine("Adjusting view");
                        mainMap.SetView(new Location(latitude, longitude), newZoomLevel, newHeading);
                    }
                }
            }
        }
コード例 #45
0
        void stream_InteractionFrameReady( object sender, InteractionFrameReadyEventArgs e )
        {
            using ( var interactionFrame = e.OpenInteractionFrame() ) {
                if ( interactionFrame != null ) {
                    var userInfos = new UserInfo[InteractionFrame.UserInfoArrayLength];
                    interactionFrame.CopyInteractionDataTo( userInfos );

                    List<InteractionHandPointer> hands = new List<InteractionHandPointer>();

                    foreach ( var user in userInfos ) {
                        if ( user.SkeletonTrackingId != 0 ) {
                            foreach ( var hand in user.HandPointers ) {
                                hands.Add( hand );
                            }
                        }
                    }

                    Grid.ItemsSource = hands;
                }
            }
        }
コード例 #46
0
        /// <summary>
        /// 手势的处理
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void OnInteractionFrameReady(object sender, InteractionFrameReadyEventArgs e)
        {
            using (InteractionFrame frame = e.OpenInteractionFrame())
            {

                if (frame != null)
                {
                    if (this.userInfos == null)
                    {
                        this.userInfos = new UserInfo[InteractionFrame.UserInfoArrayLength];
                    }

                    frame.CopyInteractionDataTo(this.userInfos);

                }
                else
                {
                    return;
                }
            }
            /////////////
            foreach (UserInfo userInfo in this.userInfos)
            {
                foreach (InteractionHandPointer handPointer in userInfo.HandPointers)
                {
                   // string action = null;

                    switch (handPointer.HandEventType)
                    {
                        case InteractionHandEventType.Grip:
                            //action = "gripped";
                            //isDrawing.Content = "isDrawing: True";
                            isgrip = true;
                            break;

                        case InteractionHandEventType.GripRelease:
                           // action = "released";
                            isgrip = false;
                            break;
                    }

                    //if (action != null)
                    //{
                    //    string handSide = "unknown";

                    //    switch (handPointer.HandType)
                    //    {
                    //        case InteractionHandType.Left:
                    //            handSide = "left";
                    //            break;

                    //        case InteractionHandType.Right:
                    //            handSide = "right";
                    //            break;
                    //    }
                    // Console.WriteLine("User " + userInfo.SkeletonTrackingId + " " + action + " their " + handSide + "hand.");
                    //}
                }
            }
        }
コード例 #47
0
        /// <summary>
        /// KinectInteraction Frame Manager
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void OnKinectInteractionFrameReady(object sender, InteractionFrameReadyEventArgs e)
        {
            // get the users KinectInteraction frame
            UserInfo[] userInfos = new UserInfo[InteractionFrame.UserInfoArrayLength];
            using (var iaf = e.OpenInteractionFrame())
            {
                if (iaf == null)
                {
                    return;
                }

                iaf.CopyInteractionDataTo(userInfos);
            }

            // For each user, treated the kinectInteraction
            foreach (var userInfo in userInfos)
            {
                if (m_refListUsers.ContainsKey(userInfo.SkeletonTrackingId))
                {
                    (m_refListUsers[userInfo.SkeletonTrackingId] as UserDataPointing).UpdateDataHands(userInfo);
                }
            }
        }
コード例 #48
0
 void intStream_InteractionFrameReady(object sender, InteractionFrameReadyEventArgs e)
 {
     using (InteractionFrame iFrame = e.OpenInteractionFrame())
     {
         if (iFrame != null)
         {
             if (userInfo == null)
             {
                 this.userInfo = new UserInfo[6];
             }
             iFrame.CopyInteractionDataTo(this.userInfo);
         }
     }
 }
コード例 #49
0
        private void InteractionFrameReady(object sender, InteractionFrameReadyEventArgs e)
        {
            // Check for a null userInfos since we may still get posted events
            // from the stream after we have unregistered our event handler and
            // deleted our buffers.
            if (this.userInfos == null)
            {
                return;
            }

            if (this.kinectAdapter.IsInInteractionFrame)
            {
                Debugger.Log(
                    0,
                    "warning",
                    "Application might have raised modal UI (e.g.: message box) while handling KinectRegion event. Applications are advised to raise modal UI via a call to System.Windows.Threading.Dispatcher.BeginInvoke instead.\n");
                return;
            }

            UserInfo[] localUserInfos = null;
            long       timestamp      = 0;

            using (InteractionFrame interactionFrame = e.OpenInteractionFrame())
            {
                if (interactionFrame != null)
                {
                    // Copy interaction frame data so we can dispose interaction frame
                    // right away, even if data processing/event handling takes a while.
                    interactionFrame.CopyInteractionDataTo(this.userInfos);
                    timestamp      = interactionFrame.Timestamp;
                    localUserInfos = this.userInfos;
                }
            }

            if (localUserInfos != null)
            {
                this.kinectAdapter.BeginInteractionFrame();

                try
                {
                    bool wasProcessingAborted = false;

                    // Distribute routed events based on the state of all hand pointers
                    for (int userIndex = 0; userIndex < localUserInfos.Length; ++userIndex)
                    {
                        var user = localUserInfos[userIndex];
                        foreach (var handPointer in user.HandPointers)
                        {
                            this.HandleHandPointerData(timestamp, user, userIndex, handPointer);

                            if (localUserInfos != this.userInfos)
                            {
                                // Double-check that user info data being processed is still valid.
                                // Client might have invalidated it by changing the KinectSensor
                                // while handling a KinectRegion event.
                                wasProcessingAborted = true;
                                break;
                            }
                        }
                    }

                    if (wasProcessingAborted)
                    {
                        Debugger.Log(
                            0,
                            "warning",
                            "Application might have changed KinectSensor while handling KinectRegion event. Applications are advised to change KinectSensor via a call to System.Windows.Threading.Dispatcher.BeginInvoke instead.\n");
                    }
                    else
                    {
                        this.PrimaryUserTrackingId = this.kinectAdapter.ChoosePrimaryUser(timestamp, this.PrimaryUserTrackingId, this.QueryPrimaryUserTrackingIdCallback);
                    }
                }
                finally
                {
                    this.kinectAdapter.EndInteractionFrame();
                }
            }
        }
コード例 #50
0
        private void SensorInteractionFrameReady(object sender, InteractionFrameReadyEventArgs e)
        {
            // Do ball movement and collisions if we have a human being tracked
            if (humanNumber != -1)
            {
                runCollisions();
            }

            // Acquire data from SensorInteractionFramesReadyEventArgs and do stuff with it
            UserInfo[] interactionData;

            using (InteractionFrame interactionFrame = e.OpenInteractionFrame()) //dispose as soon as possible
            {
                if (interactionFrame == null)
                {
                    return;
                }
                interactionData = new UserInfo[InteractionFrame.UserInfoArrayLength];
                interactionFrame.CopyInteractionDataTo(interactionData);
                bool sawUserThisFrame = false;
                foreach (UserInfo u in interactionData)
                {
                    if (u.SkeletonTrackingId != 0)
                    {
                        if (humanNumber == -1)
                        {
                            humanNumber = u.SkeletonTrackingId;
                            quitTimer.Stop();
                        }
                        if (humanNumber != u.SkeletonTrackingId)
                        {
                            continue;
                        }
                        sawUserThisFrame = true;
                        foreach (InteractionHandPointer pointer in u.HandPointers)
                        {
                            if (!pointer.IsPrimaryForUser)
                            {
                                continue;
                            }

                            double x = pointer.X;
                            if (x < 0)
                            {
                                x = 0;
                            }
                            if (x > 1)
                            {
                                x = 1;
                            }
                            x          = x * (screenWidth - paddle.width) + paddle.width / 2;
                            paddle.loc = new Point(x, paddle.loc.Y);
                        }
                    }
                }
                if (!sawUserThisFrame)
                {
                    humanNumber = -1;
                    quitTimer.Start();
                }
            }
            draw();
        }
コード例 #51
0
        private void InteractionFrameReady(object sender, InteractionFrameReadyEventArgs e)
        {
            // Check for a null userInfos since we may still get posted events
            // from the stream after we have unregistered our event handler and
            // deleted our buffers.
            if (this.userInfos == null)
            {
                return;
            }

            if (this.kinectAdapter.IsInInteractionFrame)
            {
                Debugger.Log(
                    0,
                    "warning",
                    "Application might have raised modal UI (e.g.: message box) while handling KinectRegion event. Applications are advised to raise modal UI via a call to System.Windows.Threading.Dispatcher.BeginInvoke instead.\n");
                return;
            }

            UserInfo[] localUserInfos = null;
            long timestamp = 0;

            using (InteractionFrame interactionFrame = e.OpenInteractionFrame())
            {
                if (interactionFrame != null)
                {
                    // Copy interaction frame data so we can dispose interaction frame
                    // right away, even if data processing/event handling takes a while.
                    interactionFrame.CopyInteractionDataTo(this.userInfos);
                    timestamp = interactionFrame.Timestamp;
                    localUserInfos = this.userInfos;
                }
            }

            if (localUserInfos != null)
            {
                this.kinectAdapter.BeginInteractionFrame();

                try
                {
                    bool wasProcessingAborted = false;

                    // Distribute routed events based on the state of all hand pointers
                    for (int userIndex = 0; userIndex < localUserInfos.Length; ++userIndex)
                    {
                        var user = localUserInfos[userIndex];
                        foreach (var handPointer in user.HandPointers)
                        {
                            this.HandleHandPointerData(timestamp, user, userIndex, handPointer);

                            if (localUserInfos != this.userInfos)
                            {
                                // Double-check that user info data being processed is still valid.
                                // Client might have invalidated it by changing the KinectSensor
                                // while handling a KinectRegion event.
                                wasProcessingAborted = true;
                                break;
                            }
                        }
                    }

                    if (wasProcessingAborted)
                    {
                        Debugger.Log(
                            0,
                            "warning",
                            "Application might have changed KinectSensor while handling KinectRegion event. Applications are advised to change KinectSensor via a call to System.Windows.Threading.Dispatcher.BeginInvoke instead.\n");
                    }
                    else
                    {
                        this.PrimaryUserTrackingId = this.kinectAdapter.ChoosePrimaryUser(timestamp, this.PrimaryUserTrackingId, this.QueryPrimaryUserTrackingIdCallback);
                    }
                }
                finally
                {
                    this.kinectAdapter.EndInteractionFrame();
                }
            }
        }
コード例 #52
0
        private void interactStream_InteractionFrameReady(object sender, InteractionFrameReadyEventArgs e)
        {
            using (InteractionFrame interactFrame = e.OpenInteractionFrame())
            {
                if (interactFrame != null && server.serverMasterOptions.kinectOptions[kinectID].trackSkeletons)
                {
                    bool       changeMade   = false;
                    UserInfo[] tempUserInfo = new UserInfo[6];
                    interactFrame.CopyInteractionDataTo(tempUserInfo);

                    foreach (UserInfo interactionInfo in tempUserInfo)
                    {
                        foreach (InteractionHandPointer hand in interactionInfo.HandPointers)
                        {
                            if (hand.HandEventType == InteractionHandEventType.Grip)
                            {
                                for (int i = 0; i < skeletonData.actualSkeletons.Count; i++)
                                {
                                    if (skeletonData.actualSkeletons[i].skeleton.TrackingId == interactionInfo.SkeletonTrackingId)
                                    {
                                        if (hand.HandType == InteractionHandType.Left)
                                        {
                                            skeletonData.actualSkeletons[i].leftHandClosed = true;
                                            changeMade = true;
                                        }
                                        else if (hand.HandType == InteractionHandType.Right)
                                        {
                                            skeletonData.actualSkeletons[i].rightHandClosed = true;
                                            changeMade = true;
                                        }
                                        break;
                                    }
                                }
                            }
                            else if (hand.HandEventType == InteractionHandEventType.GripRelease)
                            {
                                for (int i = 0; i < skeletonData.actualSkeletons.Count; i++)
                                {
                                    if (skeletonData.actualSkeletons[i].skeleton.TrackingId == interactionInfo.SkeletonTrackingId)
                                    {
                                        if (hand.HandType == InteractionHandType.Left)
                                        {
                                            skeletonData.actualSkeletons[i].leftHandClosed = false;
                                            changeMade = true;
                                        }
                                        else if (hand.HandType == InteractionHandType.Right)
                                        {
                                            skeletonData.actualSkeletons[i].rightHandClosed = false;
                                            changeMade = true;
                                        }
                                        break;
                                    }
                                }
                            }
                        }
                    }

                    lock (skeletonData)
                    {
                        //The grab isn't going to update very often, so lets just force an update when it is actually needed
                        skeletonData.needsUpdate = changeMade;
                    }
                }
            }
        }