Go to the documentation of this file.00001
00002
00003
00004
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 class XnVSteadyStates;
00016 class XnVUintFloatSpecificEvent;
00022 class XNV_NITE_API XnVSteadyDetector :
00023 public XnVPointControl
00024 {
00025 public:
00029 typedef void (XN_CALLBACK_TYPE *SteadyCB)(XnUInt32 nId, XnFloat fStdDev, void* pUserCxt);
00030 typedef void (XN_CALLBACK_TYPE *NotSteadyCB)(XnUInt32 nId, XnFloat fStdDev, void* pUserCxt);
00031
00040 XnVSteadyDetector(XnUInt32 nCooldownFrames = ms_nDefaultInitialCooldown,
00041 XnUInt32 nDetectionDuration = ms_nDefaultDetectionDuration,
00042 XnFloat fMaximumStdDevForSteady = ms_fDefaultMaximumStdDevForSteady,
00043 const XnChar* strName = "XnVSteadyDetector");
00044
00045 ~XnVSteadyDetector();
00054 XnCallbackHandle RegisterSteady(void* cxt, SteadyCB CB);
00060 void UnregisterSteady(XnCallbackHandle hCB);
00061
00070 XnCallbackHandle RegisterNotSteady(void* cxt, NotSteadyCB CB);
00076 void UnregisterNotSteady(XnCallbackHandle hCB);
00080 void Reset();
00081
00087 XnUInt32 GetDetectionDuration() const;
00093 XnFloat GetMaximumStdDevForSteady() const;
00099 XnFloat GetMinimumStdDevForNotSteady() const;
00100
00106 void SetDetectionDuration(XnUInt32 nDuration);
00112 void SetMaximumStdDevForSteady(XnFloat fStdDev);
00118 void SetMinimumStdDevForNotSteady(XnFloat fStdDev);
00119
00120 static const XnUInt32 ms_nDefaultDetectionDuration;
00121 static const XnUInt32 ms_nDefaultInitialCooldown;
00122 static const XnFloat ms_fDefaultMaximumStdDevForSteady;
00123 static const XnFloat ms_fDefaultMinimumStdDevForNotSteady;
00124
00130 void OnPointCreate(const XnVHandPointContext* cxt);
00137 void OnPointUpdate(const XnVHandPointContext* cxt);
00138
00139 XnFloat XN_API_DEPRECATED("Please use GetMaximumStdDevForSteady() instead.")
00140 GetMaximumVelocity() const;
00141 void XN_API_DEPRECATED("Please use SetMaximumStdDevForSteady() instead.")
00142 SetMaximumVelocity(XnFloat fVelocity);
00143 protected:
00144 void Reset(XnUInt32 id);
00145
00146 XnStatus DetectSteady(XnUInt32 nId, const XnPoint3D& pt, XnFloat fTime);
00147
00148
00149 virtual void OnSteadyDetected(XnUInt32 nId, XnFloat fStdDev);
00150 virtual void OnNotSteadyDetected(XnUInt32 nId, XnFloat fStdDev);
00151
00152 XnUInt32 m_nDetectionDuration;
00153 XnFloat m_fMaximumStdDevForSteady;
00154 XnFloat m_fMaximumVarianceForSteady;
00155 XnFloat m_fMinimumStdDevForNotSteady;
00156 XnFloat m_fMinimumVarianceForNotSteady;
00157
00158 XnUInt32 m_nInitialCooldownFrames;
00159
00160 XnVSteadyStates* m_pSteadyStates;
00161 private:
00162 XnVUintFloatSpecificEvent* m_pSteadyCBs;
00163 XnVUintFloatSpecificEvent* m_pNotSteadyCBs;
00164 };
00165
00166 #endif // _XNV_STEADY_DETECTOR_H_