00001
00002
00003
00004
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
00015 class XnVPointBuffer;
00016 class XnVFloatSpecificEvent;
00017 class XnVDirectionSpecificEvent;
00018
00027 class XNV_NITE_API XnVSlider1D
00028 {
00029 public:
00033 typedef void (XN_CALLBACK_TYPE* ValueChangeCB)(XnFloat fValue, void* cxt);
00037 typedef void (XN_CALLBACK_TYPE* OffAxisMovementCB)(XnVDirection eDir, void* cxt);
00038
00051 XnVSlider1D(XnVAxis eAxis, const XnPoint3D& ptInitialPosition, XnPoint3D ptMinPoint, XnPoint3D ptMaxPoint,
00052 XnFloat fMinOutput, XnFloat fMaxOutput,
00053 XnFloat fOffAxisDetectionAngle = ms_fOffAxisDefaultDetectionAngle,
00054 XnFloat fOffAxisDetectionMinimumVelocity = ms_fDefaultMinimumOffAxisVelocity);
00067 XnVSlider1D(XnVAxis eAxis, const XnPoint3D& ptInitialPosition, XnFloat fSliderLength, XnFloat fInitialValue,
00068 XnFloat fMinOutput, XnFloat fMaxOutput,
00069 XnFloat fOffAxisDetectionAngle = ms_fOffAxisDefaultDetectionAngle,
00070 XnFloat fOffAxisDetectionMinimumVelocity = ms_fDefaultMinimumOffAxisVelocity);
00071
00072 ~XnVSlider1D();
00073
00084 void Reinitialize(XnVAxis eAxis, const XnPoint3D& ptInitialPoint, const XnPoint3D& ptMinPoint,
00085 const XnPoint3D& ptMaxPoint, XnFloat fMinOutput, XnFloat fMaxOutput);
00096 void Reinitialize(XnVAxis eAxis, const XnPoint3D& ptInitialPoint, XnFloat fSliderLength,
00097 XnFloat fInitialValue, XnFloat fMinOutput, XnFloat fMaxOutput);
00098
00102 XnFloat ValueAtPosition(const XnPoint3D& pt);
00103
00111 XnStatus Update(const XnPoint3D& pt, XnFloat fTime, XnBool bCheckOffAxis = true);
00112
00116 void LostPoint();
00117
00126 XnCallbackHandle RegisterValueChange(void* cxt, ValueChangeCB CB);
00135 XnCallbackHandle RegisterOffAxisMovement(void* cxt, OffAxisMovementCB CB);
00136
00142 void UnregisterValueChange(XnCallbackHandle hCB);
00148 void UnregisterOffAxisMovement(XnCallbackHandle hCB);
00149
00150 XnFloat GetValue() const;
00151 const XnPoint3D& GetPosition() const;
00152 XnBool IsValid() const;
00153
00159 XnVAxis GetAxis() const;
00160
00166 XnFloat GetOffAxisDetectionVelocity() const;
00172 XnFloat GetOffAxisDetectionAngle() const;
00178 XnUInt32 GetOffAxisDetectionTime() const;
00179
00185 void SetOffAxisDetectionVelocity(XnFloat fVelocity);
00191 void SetOffAxisDetectionAngle(XnFloat fAngle);
00197 void SetOffAxisDetectionTime(XnUInt32 nTime);
00198 protected:
00199 void ValueChange(XnFloat fValue);
00200 void OffAxisMovement(XnVDirection eDir);
00201
00202 XnVSlider1D(XnVAxis eAxis, XnBool bDraggable, const XnPoint3D& ptInitialPosition, XnFloat fSliderLength,
00203 XnFloat fInitialValue, XnFloat fMinOutput, XnFloat fMaxOutput,
00204 XnFloat fOffAxisDetectionAngle = ms_fOffAxisDefaultDetectionAngle,
00205 XnFloat fOffAxisDetectionMinimumVelocity = ms_fDefaultMinimumOffAxisVelocity);
00206
00207 void InitializeFromPoint(const XnPoint3D& ptInitialPosition, const XnPoint3D& ptMinPoint, const XnPoint3D& ptMaxPoint,
00208 XnBool bVertical, XnFloat& fSliderLength, XnFloat& fInitialValue);
00209 void Initialize(XnVAxis eAxis, XnBool bDraggable, const XnPoint3D& ptInitialPosition, XnFloat fSliderLength,
00210 XnFloat fInitialValue, XnFloat fMinOutput, XnFloat fMaxOutput, XnFloat fOffAxisDetectionAngle,
00211 XnFloat fOffAxisDetectionMinimumMovement);
00212
00213 XnVDirection CheckForOffAxisMovement(const XnPoint3D& pt, XnFloat fTime);
00214 XnInt32 CheckOffAxis(XnFloat fPrimaryAxisDelta, XnFloat fOffAxisDelta);
00215
00216
00217 static const XnFloat ms_fDefaultMinimumOffAxisVelocity;
00218 static const XnFloat ms_fOffAxisDefaultDetectionAngle;
00219 static const XnUInt32 ms_nDefaultTimeForOffAxisDetection;
00220
00221 XnFloat m_fOffAxisDetectionMinimumVelocity;
00222 XnFloat m_fOffAxisDetectionAngle;
00223 XnUInt32 m_nOffAxisDetectionTime;
00224
00225 XnVAxis m_eAxis;
00226 XnBool m_bIsDraggable;
00227
00228 XnFloat m_fCurrentOutput;
00229 XnPoint3D m_ptCurrentPosition;
00230
00231 XnFloat m_fOutputMinimum, m_fOutputMaximum;
00232 XnFloat m_fMaxOutputMajorAxisPosition, m_fMinOutputMajorAxisPosition;
00233
00234 XnVPointBuffer* m_pPointBuffer;
00235
00236 XnVFloatSpecificEvent* m_pValueChangeCBs;
00237 XnVDirectionSpecificEvent* m_pOffAxisMovementCBs;
00238 };
00239
00240 #endif // _XNV_SLIDER_1D_H_