public SkeletonDataChangedEvent SkeletonDataChanged; // Skeleton data change protected virtual void SkeletonDataChange(SkeletonDataChangeEventArgs e) { if (SkeletonDataChanged != null) { SkeletonDataChanged(this, e); } }
// 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)); } }
//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(); } }
// 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)); } }
protected virtual void SkeletonDataChange(SkeletonDataChangeEventArgs e) { if (SkeletonDataChanged != null) { SkeletonDataChanged(this, e); } }
//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(); } }