Nuitrack 1.5.0
3D スケルトン トラッキング ミドルウェア
 すべて クラス 名前空間 関数 変数 Typedefs 列挙型 列挙子 プロパティ イベント グループ ページ
GestureRecognizer.h
1 #ifndef NUITRACK_GESTURE_RECOGNIZER_H_
2 #define NUITRACK_GESTURE_RECOGNIZER_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/GestureData.h"
10 #include "nuitrack/capi/GestureRecognizer_CAPI.h"
11 #include "nuitrack/utils/ExceptionTranslator.h"
12 #include "nuitrack/utils/CallbackStruct.h"
13 
14 namespace tdv
15 {
16 namespace nuitrack
17 {
18 
34 class GestureRecognizer :public tdv::nuitrack::HeaderOnlyAPI_Module
35 {
36 public:
37  typedef std::shared_ptr<GestureRecognizer> Ptr;
38 
47  typedef std::function<void (GestureData::Ptr)> OnNewGestures;
48  typedef void (*OnNewGesturesRawFunctionPtr)(GestureData*, GestureRecognizer*);
49 
58  typedef std::function<void (UserStateData::Ptr)> OnUserStateChange;
59  typedef void (*OnUserStateChangeRawFunctionPtr)(UserStateData*, GestureRecognizer*);
60 
69  typedef std::function<void (UserGesturesStateData::Ptr)> OnUpdate;
70  typedef void (*OnUpdateRawFunctionPtr)(UserGesturesStateData*, GestureRecognizer*);
71 
79  static GestureRecognizer::Ptr create()
80  {
81  NuitrackModule* pimpl = NULL;
82  ExceptionType exception_code = nuitrack_CreateGestureRecognizer(&pimpl);
83  ExceptionTranslator::generateExceptionByErrorCode(exception_code);
84  return std::shared_ptr<GestureRecognizer>(new GestureRecognizer(pimpl));
85  }
86 
88  GestureRecognizer(NuitrackModule* pimpl)
89  {
90  _pimpl = pimpl;
91 
92  _onNewGesturesCallbackStruct = new CallbackStruct<GestureData::Ptr>();
93  _onUserStateChangeCallbackStruct = new CallbackStruct<UserStateData::Ptr>();
94  _onUpdateCallbackStruct = new CallbackStruct<UserGesturesStateData::Ptr>();
95 
96  _callbackWrapper.setGestureRecognizer(this);
97  _callbackWrapper.setOnNewGestureAddress(&onNewGesturesCallback);
98  _callbackWrapper.setOnUserStateChangeAddress(&onUserStateChangeCallback);
99  _callbackWrapper.setOnUpdateAddress(&onUpdateCallback);
100  nuitrack_registerGestureRecognizerCallback(_pimpl, &_callbackWrapper);
101  }
102 
103  virtual ~GestureRecognizer()
104  {
105  nuitrack_DestroyGestureRecognizer(_pimpl);
107  }
108 
117  uint64_t connectOnNewGestures(const OnNewGestures& callback)
118  {
119  return _onNewGesturesCallbackStruct->addCallback(callback);
120  }
121 
128  void disconnectOnNewGestures(uint64_t handler)
129  {
130  _onNewGesturesCallbackStruct->deleteCallback(handler);
131  }
132 
141  uint64_t connectOnUserStateChange(const OnUserStateChange& callback)
142  {
143  return _onUserStateChangeCallbackStruct->addCallback(callback);
144  }
145 
152  void disconnectOnUserStateChange(uint64_t handler)
153  {
154  _onUserStateChangeCallbackStruct->deleteCallback(handler);
155  }
156 
165  uint64_t connectOnUpdate(const OnUpdate& callback)
166  {
167  return _onUpdateCallbackStruct->addCallback(callback);
168  }
169 
176  void disconnectOnUpdate(uint64_t handler)
177  {
178  _onUpdateCallbackStruct->deleteCallback(handler);
179  }
180 
184  float getProcessingTime() const
185  {
186  return nuitrack_GetGestureRecognizerProcessingTime(_pimpl);
187  }
188 
197  void setControlGesturesStatus(bool status)
198  {
199  nuitrack_UserGesturesSetControlStatus(_pimpl, status);
200  }
201 
204  {
207  if(_onUserStateChangeCallbackStruct)
208  delete _onUserStateChangeCallbackStruct;
209  if(_onUpdateCallbackStruct)
210  delete _onUpdateCallbackStruct;
211  }
212 
213  bool canUpdate() const
214  {
215  return nuitrack_GetNuitrackModuleCanUpdate(_pimpl);
216  }
217 
224  virtual uint64_t getTimestamp()
225  {
226  return nuitrack_GetNuitrackModuleTimestamp(_pimpl);
227  }
228 
229 protected:
231  static void onNewGesturesCallback(GestureRecognizerData* data, GestureRecognizer* tracker)
232  {
233  GestureData::Ptr newFrame = GestureData::Ptr(new GestureData(data));
234  tracker->_onNewGesturesCallbackStruct->executeAllCallbacks(newFrame);
235  }
237  static void onUserStateChangeCallback(UsersStateChanges* data, GestureRecognizer* tracker)
238  {
239  UserStateData::Ptr newFrame = UserStateData::Ptr(new UserStateData(data));
240  tracker->_onUserStateChangeCallbackStruct->executeAllCallbacks(newFrame);
241  }
243  static void onUpdateCallback(GestureRecognizerUserGesturesStateData* data, GestureRecognizer* tracker)
244  {
245  UserGesturesStateData::Ptr newFrame = UserGesturesStateData::Ptr(new UserGesturesStateData(data));
246  tracker->_onUpdateCallbackStruct->executeAllCallbacks(newFrame);
247  }
249  NuitrackModule* _pimpl;
251  GestureRecognizerCallbackWrapper _callbackWrapper;
253  CallbackStruct<GestureData::Ptr>* _onNewGesturesCallbackStruct;
254  CallbackStruct<UserStateData::Ptr>* _onUserStateChangeCallbackStruct;
255  CallbackStruct<UserGesturesStateData::Ptr>* _onUpdateCallbackStruct;
256 };
257 
258 } /* namespace nuitrack */
259 } /* namespace tdv */
260 
261 #endif /* NUITRACK_GESTURE_RECOGNIZER_H_ */
インターフェイスに Nuitrack ジェスチャ認識モジュールの可能性を表します。
定義:GestureRecognizer.h:34
std::function< void(UserStateData::Ptr)> OnUserStateChange
ユーザー ステータス変更イベントのためのコールバック タイプ。
定義:GestureRecognizer.h:58
static GestureRecognizer::Ptr create()
GestureRecognizer モジュール オブジェクトを作成します。
定義:GestureRecognizer.h:79
float getProcessingTime() const
最後のジェスチャ認識時間をミリ秒で戻します。
定義:GestureRecognizer.h:184
ユーザーの状態に関する判断の結果を保存します。
定義:GestureData.h:83
void disconnectOnUserStateChange(uint64_t handler)
ユーザー ステータス変更イベントに関するコールバックを削除します。
定義:GestureRecognizer.h:152
Exception タイプ
Nuitrack 内部関数の考え得るエラーコードです。
定義:Error.h:20
void destroyGestureRecognizer()
定義:GestureRecognizer.h:203
ジェスチャ判断の結果を保存します。
定義:GestureData.h:16
void disconnectOnNewGestures(uint64_t handler)
新規ジェスチャ検出イベントに関するコールバックを削除します。
定義:GestureRecognizer.h:128
GestureRecognizerCallbackWrapper _callbackWrapper
定義:GestureRecognizer.h:251
void setControlGesturesStatus(bool status)
コントロール ジェスチャ認識状態を設定します。
定義:GestureRecognizer.h:197
トラッキングを行っているすべてのユーザーに関するジェスチャの状態の判断結果を保存します。...
定義:GestureData.h:150
static void onNewGesturesCallback(GestureRecognizerData *data, GestureRecognizer *tracker)
定義:GestureRecognizer.h:231
NuitrackModule * _pimpl
定義:GestureRecognizer.h:249
std::function< void(UserGesturesStateData::Ptr)> OnUpdate
ユーザー ジェスチャ データ更新リクエストのためのコールバック タイプ。
定義:GestureRecognizer.h:69
uint64_t connectOnUpdate(const OnUpdate &callback)
ジェスチャの状態データ更新リクエストのためのコールバックを追加します。
定義:GestureRecognizer.h:165
GestureRecognizer(NuitrackModule *pimpl)
定義:GestureRecognizer.h:88
uint64_t connectOnNewGestures(const OnNewGestures &callback)
新規ジェスチャ検出イベントに関するコールバックを追加します。
定義:GestureRecognizer.h:117
CallbackStruct< GestureData::Ptr > * _onNewGesturesCallbackStruct
定義:GestureRecognizer.h:253
static void onUserStateChangeCallback(UsersStateChanges *data, GestureRecognizer *tracker)
定義:GestureRecognizer.h:237
std::function< void(GestureData::Ptr)> OnNewGestures
新しいジェスチャ検出イベントのためのコールバック タイプ。
定義:GestureRecognizer.h:47
static void onUpdateCallback(GestureRecognizerUserGesturesStateData *data, GestureRecognizer *tracker)
定義:GestureRecognizer.h:243
virtual uint64_t getTimestamp()
マイクロ秒で表示される、最後に処理したデータのタイムスタンプを戻します。
定義:GestureRecognizer.h:224
uint64_t connectOnUserStateChange(const OnUserStateChange &callback)
ユーザー ステータス変更イベントに関するコールバックを追加します。
定義:GestureRecognizer.h:141
void disconnectOnUpdate(uint64_t handler)
ジェスチャの状態データ更新リクエストのためのコールバックを削除します。
定義:GestureRecognizer.h:176