Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009 #ifndef _XNV_CLICKABLE_VIRTUAL_PLANE_H_
00010 #define _XNV_CLICKABLE_VIRTUAL_PLANE_H_
00011
00012 #include "XnVVirtualCoordinates.h"
00013
00014 class XnVClickableVirtualPlane;
00015 struct XnVClickableID
00016 {
00017 XnVClickableID(const XnVHandPointContext* cxt, XnVClickableVirtualPlane* pPlane) :
00018 pCxt(cxt), pCVP(pPlane)
00019 {}
00020
00021 const XnVHandPointContext* pCxt;
00022 XnVClickableVirtualPlane* pCVP;
00023 };
00024
00028 class XNV_NITE_API XnVClickableVirtualPlane :
00029 public XnVVirtualCoordinates
00030 {
00031 public:
00035 typedef void (XN_CALLBACK_TYPE* ClickCB)(XnUInt32 nID, const XnPoint3D& ptPosition, void* cxt);
00036
00043 XnVClickableVirtualPlane(const XnChar* strINI, const XnChar* strName = "XnVClickableVirtualPlane");
00044 ~XnVClickableVirtualPlane();
00045
00054 XnCallbackHandle RegisterClick(void* cxt, ClickCB CB);
00060 void UnregisterClick(XnCallbackHandle hCB);
00061
00067 void Click(XnUInt32, const XnPoint3D& ptPosition);
00068
00074 void OnPointCreate(const XnVHandPointContext* pContext);
00080 void OnPointDestroy(XnUInt32 nID);
00081
00088 void FreezeCoordinates(XnUInt32 nID, const XnPoint3D& ptPosition);
00094 void UnfreezeCoordinates(XnUInt32 nID);
00102 XnBool IsFrozen(XnUInt32 nID) const;
00103 protected:
00104 XN_DECLARE_DEFAULT_HASH_DECL(XNV_NITE_API, XnUInt32, XnPoint3D*, XnVIntPointHash);
00105 XN_DECLARE_DEFAULT_HASH_DECL(XNV_NITE_API, XnUInt32, XnVClickableID*, XnVIntIDHash);
00106
00107 void UpdateVirtualPoint(XnVVirtualCoordinatesInternal* pVC, const XnVHandPointContext* pContext, XnVHandPointContext* pLocalContext);
00108
00109 XnVIntPointHash m_FrozenPoints;
00110 XnVIntIDHash m_IDContexts;
00111
00112 XnVUintPointSpecificEvent m_ClickCBs;
00113 };
00114
00115 #endif // _XNV_CLICKABLE_VIRTUAL_PLANE_H_