partial void DeleteGhostSkeletonSequence(GhostSkeletonSequence instance);
partial void InsertGhostSkeletonSequence(GhostSkeletonSequence instance);
private void sensor_SkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e) { Skeleton[] skeletons = new Skeleton[0]; using (SkeletonFrame skeletonFrame = e.OpenSkeletonFrame()) { if (skeletonFrame != null) { skeletons = new Skeleton[skeletonFrame.SkeletonArrayLength]; skeletonFrame.CopySkeletonDataTo(skeletons); } } // Used to determine when skeletons move off the screen List<int> unseenTrackingIDs = this.trackingIDsToSequences.Keys.ToList(); foreach (Skeleton skel in skeletons) { if (skel.TrackingState == SkeletonTrackingState.Tracked) { if (!isSaving) { GhostSkeletonSequence sequence; if (!this.trackingIDsToSequences.ContainsKey(skel.TrackingId)) { Console.WriteLine("Adding tracking ID " + skel.TrackingId); sequence = new GhostSkeletonSequence(); this.trackingIDsToSequences.Add(skel.TrackingId, sequence); } else { sequence = this.trackingIDsToSequences[skel.TrackingId]; } unseenTrackingIDs.Remove(skel.TrackingId); sequence.AddSkeleton(skel); } } } if (!isSaving) { foreach (int trackingID in unseenTrackingIDs) { if (!this.trackingIDsToSequences.ContainsKey(trackingID)) { return; } Console.WriteLine("we have " + unseenTrackingIDs.Count + " unseen tracking IDs"); BackgroundWorker worker = new BackgroundWorker(); worker.DoWork += (obj, args) => { GhostSkeletonSequence sequence = this.trackingIDsToSequences[trackingID]; this.trackingIDsToSequences.Remove(trackingID); sequence.FinalizeRecording(); isSaving = true; Console.WriteLine("beginning save"); this.dataContext.GhostSkeletonSequences.InsertOnSubmit(sequence); Console.WriteLine("saved!"); sequence.UpdateCache(GhostSkeletonSequence.DefaultInterpolationFactor); Console.WriteLine("Locking down. updating saved sequences"); lock (lockObj) { this.savedSequences.Add(sequence); } Console.WriteLine("Saved sequences updated. Unlocking."); isSaving = false; }; worker.RunWorkerAsync(); } // prevent drawing outside of our render area this.drawingGroup.ClipGeometry = new RectangleGeometry(new Rect(0.0, 0.0, RenderWidth, RenderHeight)); } }
partial void DeleteGhostSkeletonSequence(GhostSkeletonSequence instance);
partial void InsertGhostSkeletonSequence(GhostSkeletonSequence instance);
private void sensor_SkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e) { Skeleton[] skeletons = new Skeleton[0]; using (SkeletonFrame skeletonFrame = e.OpenSkeletonFrame()) { if (skeletonFrame != null) { skeletons = new Skeleton[skeletonFrame.SkeletonArrayLength]; skeletonFrame.CopySkeletonDataTo(skeletons); } } // Used to determine when skeletons move off the screen List <int> unseenTrackingIDs = this.trackingIDsToSequences.Keys.ToList(); foreach (Skeleton skel in skeletons) { if (skel.TrackingState == SkeletonTrackingState.Tracked) { if (!isSaving) { GhostSkeletonSequence sequence; if (!this.trackingIDsToSequences.ContainsKey(skel.TrackingId)) { Console.WriteLine("Adding tracking ID " + skel.TrackingId); sequence = new GhostSkeletonSequence(); this.trackingIDsToSequences.Add(skel.TrackingId, sequence); } else { sequence = this.trackingIDsToSequences[skel.TrackingId]; } unseenTrackingIDs.Remove(skel.TrackingId); sequence.AddSkeleton(skel); } } } if (!isSaving) { foreach (int trackingID in unseenTrackingIDs) { if (!this.trackingIDsToSequences.ContainsKey(trackingID)) { return; } Console.WriteLine("we have " + unseenTrackingIDs.Count + " unseen tracking IDs"); BackgroundWorker worker = new BackgroundWorker(); worker.DoWork += (obj, args) => { GhostSkeletonSequence sequence = this.trackingIDsToSequences[trackingID]; this.trackingIDsToSequences.Remove(trackingID); sequence.FinalizeRecording(); isSaving = true; Console.WriteLine("beginning save"); this.dataContext.GhostSkeletonSequences.InsertOnSubmit(sequence); Console.WriteLine("saved!"); sequence.UpdateCache(GhostSkeletonSequence.DefaultInterpolationFactor); Console.WriteLine("Locking down. updating saved sequences"); lock (lockObj) { this.savedSequences.Add(sequence); } Console.WriteLine("Saved sequences updated. Unlocking."); isSaving = false; }; worker.RunWorkerAsync(); } // prevent drawing outside of our render area this.drawingGroup.ClipGeometry = new RectangleGeometry(new Rect(0.0, 0.0, RenderWidth, RenderHeight)); } }