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

XnVSteadyDetector.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_STEADY_DETECTOR_H_
00010 #define _XNV_STEADY_DETECTOR_H_
00011 
00012 #include "XnVNiteDefs.h"
00013 #include "XnVPointControl.h"
00014 class XnVPointBuffer;
00015 
00021 class XNV_NITE_API XnVSteadyDetector :
00022     public XnVPointControl
00023 {
00024 public:
00028     typedef void (XN_CALLBACK_TYPE *SteadyCB)(XnUInt32 nId, XnFloat fStdDev, void* pUserCxt);
00029     typedef void (XN_CALLBACK_TYPE *NotSteadyCB)(XnUInt32 nId, XnFloat fStdDev, void* pUserCxt);
00030 
00039     XnVSteadyDetector(XnUInt32 nCooldownFrames = ms_nDefaultInitialCooldown,
00040         XnUInt32 nDetectionDuration = ms_nDefaultDetectionDuration,
00041         XnFloat fMaximumStdDevForSteady = ms_fDefaultMaximumStdDevForSteady,
00042         const XnChar* strName = "XnVSteadyDetector");
00043 
00044     ~XnVSteadyDetector();
00053     XnCallbackHandle RegisterSteady(void* cxt, SteadyCB CB);
00059     void UnregisterSteady(XnCallbackHandle hCB);
00060 
00069     XnCallbackHandle RegisterNotSteady(void* cxt, NotSteadyCB CB);
00075     void UnregisterNotSteady(XnCallbackHandle hCB);
00079     void Reset();
00080 
00086     XnUInt32 GetDetectionDuration() const;
00092     XnFloat GetMaximumStdDevForSteady() const;
00098     XnFloat GetMinimumStdDevForNotSteady() const;
00099 
00105     void SetDetectionDuration(XnUInt32 nDuration);
00111     void SetMaximumStdDevForSteady(XnFloat fStdDev);
00117     void SetMinimumStdDevForNotSteady(XnFloat fStdDev);
00118 
00119     static const XnUInt32 ms_nDefaultDetectionDuration;     // = 200 ms
00120     static const XnUInt32 ms_nDefaultInitialCooldown;       // = 0
00121     static const XnFloat ms_fDefaultMaximumStdDevForSteady; // 0.01 m/s
00122     static const XnFloat ms_fDefaultMinimumStdDevForNotSteady;  // 0.02 m/s
00123 
00129     void OnPointCreate(const XnVHandPointContext* cxt);
00136     void OnPointUpdate(const XnVHandPointContext* cxt);
00137 
00138     XnFloat XN_API_DEPRECATED("Please use GetMaximumStdDevForSteady() instead.")
00139         GetMaximumVelocity() const;
00140     void XN_API_DEPRECATED("Please use SetMaximumStdDevForSteady() instead.")
00141         SetMaximumVelocity(XnFloat fVelocity);
00142 protected:
00143     void Reset(XnUInt32 id);
00144     // called whenever we have a new point
00145     XnStatus DetectSteady(XnUInt32 nId, const XnPoint3D& pt, XnFloat fTime);
00146 
00147     // broadcasts the event to all listeners
00148     virtual void OnSteadyDetected(XnUInt32 nId, XnFloat fStdDev);
00149     virtual void OnNotSteadyDetected(XnUInt32 nId, XnFloat fStdDev);
00150 
00151     XnUInt32 m_nDetectionDuration;
00152     XnFloat m_fMaximumStdDevForSteady;
00153     XnFloat m_fMaximumVarianceForSteady;
00154     XnFloat m_fMinimumStdDevForNotSteady;
00155     XnFloat m_fMinimumVarianceForNotSteady;
00156 
00157     XnUInt32 m_nInitialCooldownFrames;
00158 
00159     struct SteadyState
00160     {
00161         XnUInt32 nCurrentCooldownFrames;
00162         XnBool bCurrentSteady;
00163         XnVPointBuffer* pPoints;
00164     };
00165     XN_DECLARE_DEFAULT_HASH(XnUInt32, SteadyState*, SteadyStates);
00166     SteadyStates m_SteadyStates;
00167 private:
00168     XnVUintFloatSpecificEvent m_SteadyCBs;
00169     XnVUintFloatSpecificEvent m_NotSteadyCBs;
00170 }; // XnVSteadyDetector
00171 
00172 #endif // _XNV_STEADY_DETECTOR_H_

Generated on Tue Jul 19 2011 20:22:59 for NITE 1.4.1 - API Reference by  doxygen 1.7.1