NITE 1.5.1 - API Reference

XnVPushDetector.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_PUSH_DETECTOR_H_
00010 #define _XNV_PUSH_DETECTOR_H_
00011 
00012 #include "XnVNiteDefs.h"
00013 #include "XnVPointControl.h"
00014 #include "XnV3DVector.h"
00015 
00016 class XnVPointBuffer;
00017 class XnVFloatFloatSpecificEvent;
00018 class XnVFloatSpecificEvent;
00025 class XNV_NITE_API XnVPushDetector :
00026     public XnVPointControl
00027 {
00028 public:
00032     typedef void (XN_CALLBACK_TYPE *PushCB)(XnFloat fVelocity, XnFloat fAngle, void* UserCxt);
00036     typedef void (XN_CALLBACK_TYPE *StabilizedCB)(XnFloat fVelocity, void* UserCxt);
00037 
00043     XnVPushDetector(const XnChar* strName = "XnVPushDetector");
00044     ~XnVPushDetector();
00045 
00052     void OnPrimaryPointCreate(const XnVHandPointContext* pContext, const XnPoint3D& ptFocus);
00059     void OnPrimaryPointUpdate(const XnVHandPointContext* pContext);
00060 
00069     XnCallbackHandle RegisterPush(void* cxt, PushCB pCB);
00078     XnCallbackHandle RegisterStabilized(void* cxt, StabilizedCB pCB);
00079 
00085     void UnregisterPush(XnCallbackHandle handle);
00091     void UnregisterStabilized(XnCallbackHandle handle);
00092 
00097     XnUInt32 GetPushDuration() const;
00098 
00102     void Reset();
00103 
00109     XnFloat GetPushImmediateMinimumVelocity() const;
00115     XnUInt32 GetPushImmediateDuration() const;
00121     XnUInt32 GetPushImmediateOffset() const;
00122 
00128     XnFloat GetPushPreviousMinimumVelocity() const;
00134     XnUInt32 GetPushPreviousDuration() const;
00140     XnUInt32 GetPushPreviousOffset() const;
00141 
00147     XnFloat GetPushMaximumAngleBetweenImmediateAndZ() const;
00153     XnFloat GetPushMinimumAngleBetweenImmediateAndPrevious() const;
00154     
00160     XnFloat GetStableMaximumVelocity() const;
00166     XnUInt32 GetStableDuration() const;
00167 
00173     void SetPushImmediateMinimumVelocity(XnFloat fVelocity);
00179     void SetPushImmediateDuration(XnUInt32 nDuration);
00185     void SetPushImmediateOffset(XnUInt32 nOffset);
00186 
00192     void SetPushPreviousMinimumVelocity(XnFloat fVelocity);
00198     void SetPushPreviousDuration(XnUInt32 nDuration);
00204     void SetPushPreviousOffset(XnUInt32 nOffset);
00205 
00211     void SetPushMaximumAngleBetweenImmediateAndZ(XnFloat fAngle);
00217     void SetPushMinimumAngleBetweenImmediateAndPrevious(XnFloat fAngle);
00218 
00224     void SetStableMaximumVelocity(XnFloat fVelocity);
00230     void SetStableDuration(XnUInt32 nDuration);
00231 protected:
00232     XnBool IsPushDetected(const XnV3DVector& vImmediateVelocity, const XnV3DVector& vPreviousVelocity, XnFloat& fZAngle);
00233     XnBool IsStabilized(XnFloat fTime, XnFloat& fVelocity);
00234     void UpdateLines(XnFloat fTime);
00235 
00236     void AddPoint(const XnPoint3D& pt, XnFloat fTime);
00237 
00238     XnFloat AngleBetweenVectors(const XnV3DVector& v1, const XnV3DVector& v2);
00239 
00240     XnBool m_bPushDetected;
00241 
00242     XnVPointBuffer* m_pPoints;
00243 
00244     XnFloat m_fPushImmediateMinVelocity;
00245     XnUInt32 m_nPushImmediateOffset;
00246     XnUInt32 m_nPushImmediateDuration;
00247 
00248     XnFloat m_fPushPreviousMinVelocity;
00249     XnUInt32 m_nPushPreviousOffset;
00250     XnUInt32 m_nPushPreviousDuration;
00251 
00252     XnFloat m_fPushMaxAngleFromZ;
00253     XnFloat m_fPushMinAngleImmediateAndPrevious;
00254 
00255     XnFloat m_fStableMaxVelocity;
00256     XnUInt32 m_nStableDuration;
00257 
00258     // CBs
00259     void PushDetected(XnFloat fVelocity, XnFloat fAngle);
00260     void StabilizedDetected(XnFloat fVelocity);
00261 
00262     XnVFloatFloatSpecificEvent* m_pPushCBs;
00263     XnVFloatSpecificEvent* m_pStabilizedCBs;
00264 }; // XnVPushDetector
00265 
00266 #endif // _XNV_PUSH_DETECTOR_H_