Nuitrack 1.5.0
3D スケルトン トラッキング ミドルウェア
 すべて クラス 名前空間 関数 変数 Typedefs 列挙型 列挙子 プロパティ イベント グループ ページ
HandTracker.h
1 #ifndef NUITRACK_HAND_TRACKER_H_
2 #define NUITRACK_HAND_TRACKER_H_
3 
4 #include <functional>
5 
6 #include "nuitrack/modules/HeaderOnlyAPI_Module.h"
7 #include "nuitrack/ModuleFunctions.h"
8 #include "nuitrack/types/Export.h"
9 #include "nuitrack/types/HandTrackerData.h"
10 #include "nuitrack/capi/HandTracker_CAPI.h"
11 #include "nuitrack/utils/ExceptionTranslator.h"
12 #include "nuitrack/utils/CallbackStruct.h"
13 
14 namespace tdv
15 {
16 namespace nuitrack
17 {
29 class HandTracker :public tdv::nuitrack::HeaderOnlyAPI_Module
30 {
31 public:
36  typedef std::shared_ptr<HandTracker> Ptr;
37 
47  typedef std::function<void (HandTrackerData::Ptr)> OnUpdate;
48 
49  typedef void (*OnUpdateRawFunctionPtr)(HandTrackerData*, HandTracker*);
50 
59  {
60  NuitrackModule* pimpl = NULL;
61  ExceptionType exception_code = nuitrack_CreateHandTracker(&pimpl);
62  ExceptionTranslator::generateExceptionByErrorCode(exception_code);
63  return std::shared_ptr<HandTracker>(new HandTracker(pimpl));
64  }
65 
66  virtual ~HandTracker()
67  {
69  nuitrack_DestroyHandTracker(_pimpl);
70  }
71 
73  HandTracker(NuitrackModule* pimpl)
74  {
75  _pimpl = pimpl;
76 
77  _callbackStruct = new CallbackStruct<HandTrackerData::Ptr>();
78  _callbackWrapper.setHandTracker(this);
79  _callbackWrapper.setFunctionAddress(&onUpdateCallback);
80  nuitrack_registerHandTrackerCallback(_pimpl, &_callbackWrapper);
81  }
82 
90  uint64_t connectOnUpdate(const OnUpdate& callback)
91  {
92  return _callbackStruct->addCallback(callback);
93  }
94 
101  void disconnectOnUpdate(uint64_t handler)
102  {
103  _callbackStruct->deleteCallback(handler);
104  }
105 
109  HandTrackerData::Ptr getData()
110  {
111  HandTrackerDataInner* data = NULL;
112  nuitrack_ReceiveInnerHandTrackerData(_pimpl, &data);
113  HandTrackerData::Ptr newFrame = HandTrackerData::Ptr(new HandTrackerData(data));
114  return newFrame;
115  }
116 
120  float getProcessingTime() const
121  {
122  return nuitrack_GetHandTrackerProcessingTime(_pimpl);
123  }
124 
125  bool canUpdate() const
126  {
127  return nuitrack_GetNuitrackModuleCanUpdate(_pimpl);
128  }
129 
136  virtual uint64_t getTimestamp()
137  {
138  return nuitrack_GetNuitrackModuleTimestamp(_pimpl);
139  }
140 
141 protected:
143  static void onUpdateCallback(HandTrackerDataInner* data, HandTracker* tracker)
144  {
145  HandTrackerData::Ptr newFrame = HandTrackerData::Ptr(new HandTrackerData(data));
146  tracker->_callbackStruct->executeAllCallbacks(newFrame);
147  }
150  {
151  if(_callbackStruct)
152  delete _callbackStruct;
153  }
155  NuitrackModule* _pimpl;
157  HandTrackerCallbackWrapper _callbackWrapper;
159  CallbackStruct<HandTrackerData::Ptr>* _callbackStruct;
160 };
161 
162 } /* namespace nuitrack */
163 } /* namespace tdv */
164 
165 #endif /* NUITRACK_HAND_TRACKER_H_ */
uint64_t connectOnUpdate(const OnUpdate &callback)
手のデータ更新リクエストのためのコールバックを追加します。
定義:HandTracker.h:90
インターフェイスに Nuitrack ハンド トラッカー モジュールの可能性を表します。...
定義:HandTracker.h:29
HandTrackerCallbackWrapper _callbackWrapper
定義:HandTracker.h:157
Exception タイプ
Nuitrack 内部関数の考え得るエラーコードです。
定義:Error.h:20
HandTracker(NuitrackModule *pimpl)
定義:HandTracker.h:73
float getProcessingTime() const
最後に行われた手のデータ処理をミリ秒で戻します。
定義:HandTracker.h:120
virtual uint64_t getTimestamp()
マイクロ秒で表示される、最後に処理したデータのタイムスタンプを戻します。
定義:HandTracker.h:136
std::function< void(HandTrackerData::Ptr)> OnUpdate
手のデータ更新リクエストのためのコールバック タイプ。
定義:HandTracker.h:47
void destroyHandTracker()
定義:HandTracker.h:149
std::shared_ptr< HandTracker > Ptr
Smart pointer to access the SkeletonTracker instance.
定義:HandTracker.h:36
static HandTracker::Ptr create()
HandTracker モジュール オブジェクトを作成します。
定義:HandTracker.h:58
static void onUpdateCallback(HandTrackerDataInner *data, HandTracker *tracker)
定義:HandTracker.h:143
void disconnectOnUpdate(uint64_t handler)
手のデータ更新リクエストのためのコールバックを削除します。
定義:HandTracker.h:101
NuitrackModule * _pimpl
定義:HandTracker.h:155
HandTrackerData::Ptr getData()
利用可能な最後の HandTrackerData に対してスマート ポインターを戻します。
定義:HandTracker.h:109
CallbackStruct< HandTrackerData::Ptr > * _callbackStruct
定義:HandTracker.h:159
特定の時間についての手のトラッキング結果を保存します。
定義:HandTrackerData.h:17