using System; using System.Collections.Generic; using System.Linq; using System.Runtime.Remoting.Messaging; using System.Text; using System.Threading.Tasks; using Lib; using Microsoft.Kinect; namespace KinectUtils { static class GestureManager { static private BodyFrameReader bodyFrameReader; static private Body[] bodies; static event EventHandler GestureRecognized; static KinectManager KinectManager { get; set; } static List KnownGestures { get; set; } static public void AddGestures(IGestureFactory factory) { KnownGestures = (List)factory.CreateGestures(); } static public void AddGestures(params BaseGesture[] gestures) { foreach (var gesture in gestures) { KnownGestures.Add(gesture); } } static public void RemoveGesture(BaseGesture gesture) { KnownGestures.Remove(gesture); } static public void StartAcquiringFrames(KinectManager kinectManager) { bodyFrameReader = kinectManager.Sensor.BodyFrameSource.OpenReader(); bodyFrameReader.FrameArrived += Reader_BodyFrameArrived; } static private void Reader_BodyFrameArrived(object sender, BodyFrameArrivedEventArgs e) { using (var bodyframe = e.FrameReference.AcquireFrame()) { if (bodyframe != null) { bodyframe.GetAndRefreshBodyData(bodies); foreach (var body in bodies) { if (body.IsTracked) { foreach(var gesture in KnownGestures) { if (gesture.TestGesture(body)) { } } } } } } } } }