• Main Page
  • Namespaces
  • Classes
  • Files
  • File List
  • File Members

XnVSessionManager.h

Go to the documentation of this file.
00001 /*******************************************************************************
00002 *                                                                              *
00003 *   PrimeSense NITE 1.3                                                        *
00004 *   Copyright (C) 2010 PrimeSense Ltd.                                         *
00005 *                                                                              *
00006 *******************************************************************************/
00007 
00008 
00009 #ifndef _XNV_SESSION_MANAGER_H_
00010 #define _XNV_SESSION_MANAGER_H_
00011 
00012 #include "XnVDeviceControl.h"
00013 #include "XnVMessageGenerator.h"
00014 #include "XnVMultipleHands.h"
00015 #include "XnVGesture.h"
00016 #include "XnVPointTracker.h"
00017 #include "XnVPointMessage.h"
00018 #include "XnVSessionGenerator.h"
00019 #include "XnV3DVector.h"
00020 #include "XnVSteadyDetector.h"
00021 
00031 class XNV_NITE_API XnVSessionManager :
00032     public XnVContextControl,
00033     public XnVSessionGenerator
00034 {
00035 public:
00041     XnVSessionManager(const XnChar* strName = "XnVSessionManager");
00042     ~XnVSessionManager();
00043 
00056     XnStatus Initialize(xn::Context* pContext,
00057                         const XnChar* strUseAsFocus, const XnChar* strUseAsQuickRefocus,
00058                         xn::HandsGenerator* pTracker = NULL, xn::GestureGenerator* pFocusGenerator = NULL,
00059                         xn::GestureGenerator* pQuickRefocusGenerator = NULL);
00060 
00068     void Update(XnVMessage* pMessage);
00074     void Update(const xn::Context* pContext);
00080     void ProcessPoints(XnVMultipleHands* pHands);
00081 
00087     void SetTracker(XnVPointTracker* pTracker);
00088     void SetTracker(xn::HandsGenerator generator);
00089 
00095     void SetQuickRefocusTimeout(XnUInt32 nMilliseconds);
00096     XnUInt32 GetQuickRefocusTimeout() const;
00097 
00103     XnStatus LosePoint(XnUInt32 nID);
00107     XnStatus LosePoints();
00108 
00112     XnStatus EndSession();
00118     XnStatus ForceSession(const XnPoint3D& ptFocus);
00124     XnStatus TrackPoint(const XnPoint3D& pt);
00125 
00129     void ClearQueue();
00130 
00136     XnStatus SetQuickRefocusArea(const XnBoundingBox3D& bbQuickRefocusArea);
00144     XnStatus SetQuickRefocusArea(XnFloat fLengthX, XnFloat fLengthY, XnFloat fLengthZ);
00145 
00146     void GetQuickRefocusArea(XnFloat& fLengthX, XnFloat& fLengthY, XnFloat& fLengthZ);
00153     void ForceQuickRefocus(XnBoundingBox3D* pbbForcedArea, XnUInt32 nForcedTimeout);
00154 
00162     XnUInt32 AddGesture(XnVGesture* pGesture);
00171     XnUInt32 AddGesture(xn::GestureGenerator& generator, const XnChar* strName);
00180     XnUInt32 AddGesture(xn::Context& context, const XnChar* strName);
00186     void RemoveGesture(XnUInt32 nId);
00187 
00195     XnUInt32 AddQuickRefocus(XnVGesture* pGesture);
00204     XnUInt32 AddQuickRefocus(xn::GestureGenerator& generator, const XnChar* strName);
00213     XnUInt32 AddQuickRefocus(xn::Context& context, const XnChar* strName);
00219     void RemoveQuickRefocus(XnUInt32 nId);
00220 
00224     void StartPrimaryStatic();
00228     void StopPrimaryStatic();
00234     void SetPrimaryStaticTimeout(XnFloat fTimeout);
00240     XnFloat GetPrimarySteadyTimeout() const;
00241 
00250     void SetPrimaryStaticBoundingBox(XnFloat fX, XnFloat fY, XnFloat fZ);
00258     void GetPrimaryStaticBoundingBox(XnFloat& fX, XnFloat& fY, XnFloat& fZ);
00259 
00260     XnStatus XN_API_DEPRECATED("Please use Initialize() instead.")
00261         Initialize(XnVGesture* pFocusGesture, XnVGesture* pQuickRefocusGesture, XnVPointTracker* pTracker);
00262 
00263     void XN_API_DEPRECATED("Please use AddGesture() instead.")
00264         SetGesture(XnVGesture* pGesture);
00265     void XN_API_DEPRECATED("Please use AddGesture() instead.")
00266         SetGesture(xn::GestureGenerator gestureGenerator, const XnChar* strGestures);
00267 
00268     void XN_API_DEPRECATED("Please use AddQuickRefocus() instead.")
00269         SetQRGesture(XnVGesture* pGesture);
00270     void XN_API_DEPRECATED("Please use AddQuickRefocus() instead.")
00271         SetQRGesture(xn::GestureGenerator gestureGenerator, const XnChar* strGestures);
00272 
00273 protected:
00274 
00275     void SessionStop();
00276     void StartQuickRefocus(XnBoundingBox3D* pbbROI, XnUInt32 nTimeout);
00277 
00278     XnStatus FindTracker(xn::Context* pContext, xn::HandsGenerator* pTracker, xn::HandsGenerator& tracker);
00279 
00280     static void XN_CALLBACK_TYPE Gesture_Recognized(const XnChar* strGesture, const XnPoint3D& ptIDPosition, const XnPoint3D& ptEndPosition, void* cxt);
00281     static void XN_CALLBACK_TYPE Gesture_StartRecognized(const XnChar* strGesture, const XnPoint3D& pos, XnFloat fProgress, void* cxt);
00282     void GestureRecognized(const XnChar* strGesture, const XnPoint3D& ptIDPosition, const XnPoint3D& ptEndPosition);
00283     void GestureStartRecognized(const XnChar* strGesture, const XnPoint3D& pos, XnFloat fProgress);
00284 
00285     XnUInt64 GetTime();
00286 
00287     void EnableGestures(XnBoundingBox3D* pROI = NULL);
00288     void EnableQuickRefocusGestures(XnBoundingBox3D* pROI = NULL);
00289     void DisableGestures();
00290     void DisableQuickRefocusGestures();
00291     void UpdateGestures(const xn::Context* pContext);
00292     void UpdateQuickRefocusGestures(const xn::Context* pContext);
00293 
00294     XnBool m_bGesturesEnabled;
00295     XnBool m_bQuickRefocusEnabled;
00296 
00297     struct GestureDescription
00298     {
00299         XnUInt32 nID;
00300         XnVGesture* pGesture;
00301         XnBool bAuto;
00302         XnCallbackHandle hFocus;
00303         XnCallbackHandle hMidFocus;
00304     };
00305     XN_DECLARE_DEFAULT_HASH(XnUInt32, GestureDescription*, GestureHash);
00306     void ClearGestureHash(GestureHash& hash);
00307     GestureHash m_MainGestures;
00308     GestureHash m_QuickRefocusGestures;
00309     XnUInt32 m_nNextGestureID;
00310 
00311     XnUInt32 AddGesture(XnVGesture* pGesture, XnBool bAuto, XnUInt32 nHintID, XnBool bFocus);
00312 
00313     XnUInt32 AddGesture(xn::Context& context, const XnChar* strName, const XnStringsHash& hash, XnBool bFocus);
00314     XnUInt32 AddGesture(xn::GestureGenerator& generator, const XnChar* strName, const XnStringsHash& hash, XnBool bFocus);
00315 
00316     void RemoveGesture(XnUInt32 nId, GestureHash& hash);
00317 
00318     XnVPointTracker* m_pTracker;
00319     XnBool m_bAutoTracker;
00320 
00321     enum
00322     {
00323         SMGR_ILLEGAL        = 0x0000,
00324         SMGR_NOT_IN_SESSION = 0x0001,
00325         SMGR_IN_SESSION     = 0x0002,
00326         SMGR_QUICK_REFOCUS  = SMGR_IN_SESSION | SMGR_NOT_IN_SESSION,
00327         SMGR_START_SESSION  = 0x0004,
00328     } m_eSessionState;
00329 
00330     inline XnBool IsInSession() const {return (m_eSessionState & SMGR_IN_SESSION) != 0;}
00331     inline XnBool IsNotInSession() const {return (m_eSessionState & SMGR_NOT_IN_SESSION) != 0;}
00332     inline XnBool IsQuickRefocus() const {return m_eSessionState == SMGR_QUICK_REFOCUS;}
00333 
00334     XnBool m_bQuickRefocusAllowed;
00335 
00336     XnCallbackHandle m_hGesture;
00337     XnCallbackHandle m_hGestureMid;
00338     XnCallbackHandle m_hQRGesture;
00339 
00340     XnUInt32 m_nQuickRefocusTimeout;
00341     XnUInt64 m_nQuickRefocusExpire;
00342 
00343     static const XnUInt32 ms_nQuickRefocusDefaultTimeout;
00344 
00345     XnV3DVector m_ptLastPrimaryPosition;
00346 
00347     XnBoundingBox3D m_bbQuickRefocusArea;
00348     const xn::Context* m_pContext;
00349 
00350     XnBool m_bCheckPrimaryForStatic;
00351     XnBool m_bPrimaryIsStatic;
00352     XnVSteadyDetector* m_pSteadyDetector;
00353 
00354     static void XN_CALLBACK_TYPE PrimaryIsSteady(XnUInt32 id, XnFloat dummy, void* cxt);
00355     static void XN_CALLBACK_TYPE PrimaryIsNotSteady(XnUInt32 id, XnFloat dummy, void* cxt);
00356 
00357     XnFloat m_fLastSteadyTime;
00358     XnFloat m_fLastPrimaryTime;
00359     XnFloat m_fSteadyTimeout;
00360 
00361     XnUInt32 m_nLastPrimaryID;
00362     XnPoint3D m_GestureWhileTrackingThreshold;
00363 
00364     void InitializeStatic();
00365     void FinalizeStatic();
00366 };
00367 
00368 #endif

Generated on Tue Jul 19 2011 15:52:50 for NITE 1.4.1 - API Reference by  doxygen 1.7.1