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 #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;
00217 static const XnFloat ms_fOffAxisDefaultDetectionAngle;
00218 static const XnUInt32 ms_nDefaultTimeForOffAxisDetection;
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_