NITE 1.4.1 - API Reference
|
00001 /******************************************************************************* 00002 * * 00003 * PrimeSense NITE 1.3 * 00004 * Copyright (C) 2010 PrimeSense Ltd. * 00005 * * 00006 *******************************************************************************/ 00007 00008 00009 #ifndef _XNV_SLIDER_1D_H_ 00010 #define _XNV_SLIDER_1D_H_ 00011 00012 #include "XnVNiteDefs.h" 00013 #include "XnVDirection.h" 00014 #include "XnVNiteEvents.h" 00015 00016 class XnVPointBuffer; 00017 00026 class XNV_NITE_API XnVSlider1D 00027 { 00028 public: 00032 typedef void (XN_CALLBACK_TYPE* ValueChangeCB)(XnFloat fValue, void* cxt); 00036 typedef void (XN_CALLBACK_TYPE* OffAxisMovementCB)(XnVDirection eDir, void* cxt); 00037 00050 XnVSlider1D(XnVAxis eAxis, const XnPoint3D& ptInitialPosition, XnPoint3D ptMinPoint, XnPoint3D ptMaxPoint, 00051 XnFloat fMinOutput, XnFloat fMaxOutput, 00052 XnFloat fOffAxisDetectionAngle = ms_fOffAxisDefaultDetectionAngle, 00053 XnFloat fOffAxisDetectionMinimumVelocity = ms_fDefaultMinimumOffAxisVelocity); 00066 XnVSlider1D(XnVAxis eAxis, const XnPoint3D& ptInitialPosition, XnFloat fSliderLength, XnFloat fInitialValue, 00067 XnFloat fMinOutput, XnFloat fMaxOutput, 00068 XnFloat fOffAxisDetectionAngle = ms_fOffAxisDefaultDetectionAngle, 00069 XnFloat fOffAxisDetectionMinimumVelocity = ms_fDefaultMinimumOffAxisVelocity); 00070 00071 ~XnVSlider1D(); 00072 00083 void Reinitialize(XnVAxis eAxis, const XnPoint3D& ptInitialPoint, const XnPoint3D& ptMinPoint, 00084 const XnPoint3D& ptMaxPoint, XnFloat fMinOutput, XnFloat fMaxOutput); 00095 void Reinitialize(XnVAxis eAxis, const XnPoint3D& ptInitialPoint, XnFloat fSliderLength, 00096 XnFloat fInitialValue, XnFloat fMinOutput, XnFloat fMaxOutput); 00097 00101 XnFloat ValueAtPosition(const XnPoint3D& pt); 00102 00110 XnStatus Update(const XnPoint3D& pt, XnFloat fTime, XnBool bCheckOffAxis = true); 00111 00115 void LostPoint(); 00116 00125 XnCallbackHandle RegisterValueChange(void* cxt, ValueChangeCB CB); 00134 XnCallbackHandle RegisterOffAxisMovement(void* cxt, OffAxisMovementCB CB); 00135 00141 void UnregisterValueChange(XnCallbackHandle hCB); 00147 void UnregisterOffAxisMovement(XnCallbackHandle hCB); 00148 00149 XnFloat GetValue() const; 00150 const XnPoint3D& GetPosition() const; 00151 XnBool IsValid() const; 00152 00158 XnVAxis GetAxis() const; 00159 00165 XnFloat GetOffAxisDetectionVelocity() const; 00171 XnFloat GetOffAxisDetectionAngle() const; 00177 XnUInt32 GetOffAxisDetectionTime() const; 00178 00184 void SetOffAxisDetectionVelocity(XnFloat fVelocity); 00190 void SetOffAxisDetectionAngle(XnFloat fAngle); 00196 void SetOffAxisDetectionTime(XnUInt32 nTime); 00197 protected: 00198 void ValueChange(XnFloat fValue); 00199 void OffAxisMovement(XnVDirection eDir); 00200 00201 XnVSlider1D(XnVAxis eAxis, XnBool bDraggable, const XnPoint3D& ptInitialPosition, XnFloat fSliderLength, 00202 XnFloat fInitialValue, XnFloat fMinOutput, XnFloat fMaxOutput, 00203 XnFloat fOffAxisDetectionAngle = ms_fOffAxisDefaultDetectionAngle, 00204 XnFloat fOffAxisDetectionMinimumVelocity = ms_fDefaultMinimumOffAxisVelocity); 00205 00206 void InitializeFromPoint(const XnPoint3D& ptInitialPosition, const XnPoint3D& ptMinPoint, const XnPoint3D& ptMaxPoint, 00207 XnBool bVertical, XnFloat& fSliderLength, XnFloat& fInitialValue); 00208 void Initialize(XnVAxis eAxis, XnBool bDraggable, const XnPoint3D& ptInitialPosition, XnFloat fSliderLength, 00209 XnFloat fInitialValue, XnFloat fMinOutput, XnFloat fMaxOutput, XnFloat fOffAxisDetectionAngle, 00210 XnFloat fOffAxisDetectionMinimumMovement); 00211 00212 XnVDirection CheckForOffAxisMovement(const XnPoint3D& pt, XnFloat fTime); 00213 XnInt32 CheckOffAxis(XnFloat fPrimaryAxisDelta, XnFloat fOffAxisDelta); 00214 00215 00216 static const XnFloat ms_fDefaultMinimumOffAxisVelocity; // = 0.15f m/s 00217 static const XnFloat ms_fOffAxisDefaultDetectionAngle; // = 60.0f 00218 static const XnUInt32 ms_nDefaultTimeForOffAxisDetection; // = 350 ms 00219 00220 XnFloat m_fOffAxisDetectionMinimumVelocity; 00221 XnFloat m_fOffAxisDetectionAngle; 00222 XnUInt32 m_nOffAxisDetectionTime; 00223 00224 XnVAxis m_eAxis; 00225 XnBool m_bIsDraggable; 00226 00227 XnFloat m_fCurrentOutput; 00228 XnPoint3D m_ptCurrentPosition; 00229 00230 XnFloat m_fOutputMinimum, m_fOutputMaximum; 00231 XnFloat m_fMaxOutputMajorAxisPosition, m_fMinOutputMajorAxisPosition; 00232 00233 XnVPointBuffer* m_pPointBuffer; 00234 00235 XnVFloatSpecificEvent m_ValueChangeCBs; 00236 XnVDirectionSpecificEvent m_OffAxisMovementCBs; 00237 }; 00238 00239 #endif // _XNV_SLIDER_1D_H_