Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009 #ifndef _XNV_SWIPE_DETECTOR_H_
00010 #define _XNV_SWIPE_DETECTOR_H_
00011
00012 #include "XnVNiteDefs.h"
00013 #include "XnVPointControl.h"
00014 #include "XnVDirection.h"
00015
00016 #include "XnVSteadyDetector.h"
00017
00018 class XnVPointBuffer;
00019 class XnVFloatFloatSpecificEvent;
00020 class XnVGeneralSwipeSpecificEvent;
00031 class XNV_NITE_API XnVSwipeDetector :
00032 public XnVPointControl
00033 {
00034 public:
00038 typedef void (XN_CALLBACK_TYPE *SwipeCB)(XnFloat fVelocity, XnFloat fAngle, void* pUserCxt);
00039 typedef void (XN_CALLBACK_TYPE *GeneralSwipeCB)(XnVDirection eDir, XnFloat fVelocity, XnFloat fAngle, void* pUserCxt);
00040
00047 XnVSwipeDetector(XnBool bUseSteadyBeforeSwipe = true, const XnChar* strName = "XnVSwipeDetector");
00048 ~XnVSwipeDetector();
00049
00056 void OnPrimaryPointCreate(const XnVHandPointContext* pContext, const XnPoint3D& ptFocus);
00063 void OnPrimaryPointUpdate(const XnVHandPointContext* pContext);
00071 void OnPrimaryPointReplace(XnUInt32 nOldId, const XnVHandPointContext* pContext);
00077 void OnPrimaryPointDestroy(XnUInt32 nID);
00081 void Reset();
00082
00083
00092 XnCallbackHandle RegisterSwipeUp(void* cxt, SwipeCB pCB);
00101 XnCallbackHandle RegisterSwipeDown(void* cxt, SwipeCB pCB);
00110 XnCallbackHandle RegisterSwipeLeft(void* cxt, SwipeCB pCB);
00119 XnCallbackHandle RegisterSwipeRight(void* cxt, SwipeCB pCB);
00128 XnCallbackHandle RegisterSwipe(void* cxt, GeneralSwipeCB pCB);
00129
00135 void UnregisterSwipeUp(XnCallbackHandle handle);
00141 void UnregisterSwipeDown(XnCallbackHandle handle);
00147 void UnregisterSwipeLeft(XnCallbackHandle handle);
00153 void UnregisterSwipeRight(XnCallbackHandle handle);
00159 void UnregisterSwipe(XnCallbackHandle handle);
00160
00166 void SetMotionSpeedThreshold(XnFloat fThreshold);
00167 XnFloat GetMotionSpeedThreshold() const;
00168
00174 void SetMotionTime(XnUInt32 nThreshold);
00175 XnUInt32 GetMotionTime() const;
00176
00182 void SetXAngleThreshold(XnFloat fThreshold);
00183 XnFloat GetXAngleThreshold() const;
00184
00190 void SetYAngleThreshold(XnFloat fThreshold);
00191 XnFloat GetYAngleThreshold() const;
00192
00198 void SetSteadyMaxStdDev(XnFloat fStdDev);
00199 XnFloat GetSteadyMaxStdDev() const;
00200
00201 XnFloat XN_API_DEPRECATED("Use GetSteadyMaxStdDev() instead")
00202 GetSteadyMaxVelocity() const;
00203 void XN_API_DEPRECATED("Use SetSteadyMaxStdDev() instead")
00204 SetSteadyMaxVelocity(XnFloat fVelocity);
00205
00211 void SetSteadyDuration(XnUInt32 nDuration);
00212 XnUInt32 GetSteadyDuration() const;
00213
00214 void SetUseSteady(XnBool bUse);
00215 XnBool GetUseSteady() const;
00216 protected:
00217 XnStatus AddPoint(const XnPoint3D& pt, XnFloat fTime);
00218
00219 static void XN_CALLBACK_TYPE Steady_Steady(XnUInt32 nId, XnFloat fVelocity, void* cxt);
00220
00221 XnVPointBuffer* m_pMovementDetectionBuffer;
00222
00223 static const XnFloat ms_fDefaultMotionDetectionVelocity;
00224 static const XnUInt32 ms_nDefaultMotionDetectionDuration;
00225
00226 XnFloat m_fMotionDetectionSpeed;
00227 XnUInt32 m_nMotionDetectionTime;
00228
00229 XnFloat m_fLowestVelocity;
00230 XnBool m_bWaitingForSlowdown;
00231
00232 XnFloat m_fAngleXThreshold;
00233 XnFloat m_fAngleYThreshold;
00234
00235 XnVFloatFloatSpecificEvent* m_pPendingEvent;
00236 XnVDirection m_ePendingDirection;
00237 XnFloat m_fPendingVelocity;
00238 XnFloat m_fPendingAngle;
00239
00240 XnVFloatFloatSpecificEvent* m_pSwipeDownCBs;
00241 XnVFloatFloatSpecificEvent* m_pSwipeUpCBs;
00242 XnVFloatFloatSpecificEvent* m_pSwipeLeftCBs;
00243 XnVFloatFloatSpecificEvent* m_pSwipeRightCBs;
00244
00245 XnVGeneralSwipeSpecificEvent* m_pSwipeCBs;
00246
00247 XnBool m_bUseSteady;
00248 XnBool m_bInSteady;
00249 XnVSteadyDetector m_Steady;
00250 };
00251
00252 #endif // _XNV_SWIPE_DETECTOR_H_