1: using System;
2: using System.Threading;
3: using ManagedNite;
4:
5: namespace DetectingPush
6: {
7: class Program
8: {
9: private static XnMOpenNIContext _context;
10: private static XnMSessionManager _sessionManager;
11: private static XnMCircleDetector _circleDetector;
12: private static Thread _readerThread;
13: private static bool _shouldRun;
14:
15: static void Main()
16: {
17: Console.WriteLine("Iniciando acceso a Kinect ...");
18: _shouldRun = true;
19:
20: InitSensorInteraction();
21: InitThreadReader();
22:
23: Console.WriteLine("Kinect online. Saluda para comenzar");
24: Console.ReadLine();
25: _shouldRun = false;
26: }
27:
28: #region Sensor Interaction
29: private static void InitSensorInteraction()
30: {
31: _context = new XnMOpenNIContext();
32: _context.Init();
33:
34: _sessionManager = new XnMSessionManager(_context, "Wave", "RaiseHand");
35: _circleDetector = new XnMCircleDetector();
36: _circleDetector.Circle += CircleDetectorCircle;
37: _sessionManager.AddListener(_circleDetector);
38: }
39:
40: static void CircleDetectorCircle(object sender, CircleEventArgs e)
41: {
42: Console.WriteLine("Circle Center: {0}", GetPointData(e.CircleCenter));
43: Console.WriteLine("CircleRadius: {0}", e.CircleRadius);
44: Console.WriteLine("Confident: {0}", e.Confident);
45: Console.WriteLine("Value: {0}", e.Value);
46: }
47:
48: private static string GetPointData(XnMPoint point)
49: {
50: return string.Format("X: {0} Y: {1} Z: {2}", point.X, point.Y, point.Z);
51: }
52:
53: #endregion
54:
55: #region Update Thread
56: private static void InitThreadReader()
57: {
58: _readerThread = new Thread(ReaderThread);
59: _readerThread.Start();
60: }
61: private static void ReaderThread()
62: {
63: while (_shouldRun)
64: {
65: var rc = _context.Update();
66: if (rc == 0)
67: _sessionManager.Update(_context);
68: }
69: }
70: #endregion
71: }
72: }