Exemplo n.º 1
0
 public SkeletonDataChangedEvent SkeletonDataChanged; // Skeleton data change
 protected virtual void SkeletonDataChange(SkeletonDataChangeEventArgs e)
 {
     if (SkeletonDataChanged != null)
     {
         SkeletonDataChanged(this, e);
     }
 }
Exemplo n.º 2
0
        // Event Handler for SkeletonFrameReady events
        // (A new frame of SkeletonStream data is available)
        private void KinectSkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e)
        {
            // Initialize/empty the skeletonStreamData array
            this.skeletonStreamData = new Skeleton[0];

            // Get the current SkeletonFrame and copy out the data
            using (SkeletonFrame skeletonFrame = e.OpenSkeletonFrame())
            {
                if (skeletonFrame != null)
                {
                    try
                    {
                        // Get the Skeleton data from the SkeletonFrame
                        skeletonStreamData = new Skeleton[skeletonFrame.SkeletonArrayLength];
                        skeletonFrame.CopySkeletonDataTo(skeletonStreamData);
                        // Dispatch the SkeletonDataChange event
                        SkeletonDataChangeEventArgs s = new SkeletonDataChangeEventArgs(skeletonStreamData);
                        SkeletonDataChange(s);
                    }
                    catch (NullReferenceException ex)
                    {
                        Console.WriteLine(ex.TargetSite + " - " + ex.Message);
                    }
                }
            }

            // Create the Skeleton image output
            using (DrawingContext dc = this.drawingGroup.Open())
            {
                // Draw a black background the size of our render
                dc.DrawRectangle(Brushes.White, null, new Rect(0, 0, RenderWidth, RenderHeight));

                //Draw each Skeleton
                if (skeletonStreamData.Length != 0)
                {
                    foreach (Skeleton skeleton in skeletonStreamData)
                    {
                        // TO-DO: Render clipped edges

                        if (skeleton.TrackingState == SkeletonTrackingState.Tracked)
                        {
                            DrawSkeletonBonesAndJoints(dc, skeleton.Joints);
                        }
                        else if (skeleton.TrackingState == SkeletonTrackingState.PositionOnly)
                        {
                            DrawSkeletonPosition(dc, skeleton.Position);
                        }
                    }
                }

                // Prevent any drawing outside the render area
                this.drawingGroup.ClipGeometry = new RectangleGeometry(new Rect(0, 0, RenderWidth, RenderHeight));
            }
        }
Exemplo n.º 3
0
        //Event handler for changes in the Kinect's skeleton data
        private void SkeletonDataChange(object sender, SkeletonDataChangeEventArgs e)
        {
            //Get the coordinates of the right and left hands
            Skeleton skel = null;

            for (int i = 0; i < e.skeletons.Length; i++)
            {
                if (e.skeletons[i].TrackingState == SkeletonTrackingState.Tracked)
                {
                    skel = e.skeletons[i];
                    break;
                }
            }
            if (skel == null)
            {
                return;
            }
            Point rightHand = helper.SkeletonPointToScreen(skel.Joints[JointType.HandRight].Position);

            rightLabel.Content = "(" + rightHand.X + "," + rightHand.Y + ")";
            Point leftHand = helper.SkeletonPointToScreen(skel.Joints[JointType.HandLeft].Position);

            leftLabel.Content = "(" + leftHand.X + "," + leftHand.Y + ")";

            //Adjust the frequency based on the position of the left hand
            float ratio      = player.MaxFreq / player.MinFreq;
            float customFreq = (float)(player.MaxFreq - (ratio * leftHand.Y / skelImage.Height) * player.MinFreq);

            customFreq = SineWavePlayer.ConstrainFrequency(customFreq);
            if (player.IsPlaying())
            {
                player.UpdateFrequency(customFreq);
                freqSlider.Value = customFreq;
                freqBox.Text     = customFreq.ToString();
            }

            //Adjust the amplitude based on the position of the right hand
            float customAmp = (float)(1 - (rightHand.Y / skelImage.Height));

            customAmp = SineWavePlayer.ConstrainAmplitude(customAmp);
            if (player.IsPlaying())
            {
                player.UpdateAmplitude(customAmp);
                volBox.Text = (customAmp * 100).ToString();
            }
        }
Exemplo n.º 4
0
        // Event Handler for SkeletonFrameReady events
        // (A new frame of SkeletonStream data is available)
        private void KinectSkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e)
        {
            // Initialize/empty the skeletonStreamData array
            this.skeletonStreamData = new Skeleton[0];

            // Get the current SkeletonFrame and copy out the data
            using (SkeletonFrame skeletonFrame = e.OpenSkeletonFrame())
            {
                if (skeletonFrame != null)
                {
                    try
                    {
                        // Get the Skeleton data from the SkeletonFrame
                        skeletonStreamData = new Skeleton[skeletonFrame.SkeletonArrayLength];
                        skeletonFrame.CopySkeletonDataTo(skeletonStreamData);
                        // Dispatch the SkeletonDataChange event
                        SkeletonDataChangeEventArgs s = new SkeletonDataChangeEventArgs(skeletonStreamData);
                        SkeletonDataChange(s);
                    }
                    catch (NullReferenceException ex)
                    {
                        Console.WriteLine(ex.TargetSite + " - " + ex.Message);
                    }
                }
            }

            // Create the Skeleton image output
            using (DrawingContext dc = this.drawingGroup.Open())
            {
                // Draw a black background the size of our render
                dc.DrawRectangle(Brushes.White, null, new Rect(0, 0, RenderWidth, RenderHeight));

                //Draw each Skeleton
                if (skeletonStreamData.Length != 0)
                {
                    foreach (Skeleton skeleton in skeletonStreamData)
                    {
                        // TO-DO: Render clipped edges

                        if (skeleton.TrackingState == SkeletonTrackingState.Tracked)
                        {
                            DrawSkeletonBonesAndJoints(dc, skeleton.Joints);
                        }
                        else if (skeleton.TrackingState == SkeletonTrackingState.PositionOnly)
                        {
                            DrawSkeletonPosition(dc, skeleton.Position);
                        }
                    }
                }

                // Prevent any drawing outside the render area
                this.drawingGroup.ClipGeometry = new RectangleGeometry(new Rect(0, 0, RenderWidth, RenderHeight));
            }
        }
Exemplo n.º 5
0
 protected virtual void SkeletonDataChange(SkeletonDataChangeEventArgs e)
 {
     if (SkeletonDataChanged != null)
     {
         SkeletonDataChanged(this, e);
     }
 }
Exemplo n.º 6
0
        //Event handler for changes in the Kinect's skeleton data
        private void SkeletonDataChange(object sender, SkeletonDataChangeEventArgs e)
        {
            //Get the coordinates of the right and left hands
            Skeleton skel = null;
            for (int i = 0; i < e.skeletons.Length; i++)
            {
                if (e.skeletons[i].TrackingState == SkeletonTrackingState.Tracked)
                {
                    skel = e.skeletons[i];
                    break;
                }
            }
            if (skel == null)
                return;
            Point rightHand = helper.SkeletonPointToScreen(skel.Joints[JointType.HandRight].Position);
            rightLabel.Content = "(" + rightHand.X + "," + rightHand.Y + ")";
            Point leftHand = helper.SkeletonPointToScreen(skel.Joints[JointType.HandLeft].Position);
            leftLabel.Content = "(" + leftHand.X + "," + leftHand.Y + ")";

            //Adjust the frequency based on the position of the left hand
            float ratio = player.MaxFreq / player.MinFreq;
            float customFreq = (float)(player.MaxFreq - (ratio * leftHand.Y / skelImage.Height) * player.MinFreq);
            customFreq = SineWavePlayer.ConstrainFrequency(customFreq);
            if (player.IsPlaying())
            {
                player.UpdateFrequency(customFreq);
                freqSlider.Value = customFreq;
                freqBox.Text = customFreq.ToString();
            }

            //Adjust the amplitude based on the position of the right hand
            float customAmp = (float)(1 - (rightHand.Y / skelImage.Height));
            customAmp = SineWavePlayer.ConstrainAmplitude(customAmp);
            if (player.IsPlaying())
            {
                player.UpdateAmplitude(customAmp);
                volBox.Text = (customAmp * 100).ToString();
            }
        }