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));
            }
        }
Beispiel #4
0
 partial void DeleteGhostSkeletonSequence(GhostSkeletonSequence instance);
Beispiel #5
0
 partial void InsertGhostSkeletonSequence(GhostSkeletonSequence instance);
Beispiel #6
0
        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));
            }
        }