Nuitrack 1.5.0
3D スケルトン トラッキング ミドルウェア
 すべて クラス 名前空間 関数 変数 Typedefs 列挙型 列挙子 プロパティ イベント グループ ページ
UserTracker.h
1 #ifndef NUITRACK_USERTRACKER_H_
2 #define NUITRACK_USERTRACKER_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/UserFrame.h"
10 #include "nuitrack/capi/UserTracker_CAPI.h"
11 #include "nuitrack/capi/Nuitrack_CAPI.h"
12 #include "nuitrack/utils/ExceptionTranslator.h"
13 #include "nuitrack/utils/CallbackStruct.h"
14 
15 
16 namespace tdv
17 {
18 namespace nuitrack
19 {
34 class UserTracker :public tdv::nuitrack::HeaderOnlyAPI_Module
35 {
36 public:
41  typedef std::shared_ptr<UserTracker> Ptr;
42 
50  typedef std::function<void (UserFrame::Ptr)> OnUpdate;
51 
52  typedef void (*OnUpdateRawFunctionPtr)(UserFrame*, UserTracker*);
53 
61  typedef std::function<void (int)> OnNewUser;
62 
63  typedef void (*OnNewUserRawFunctionPtr)(int, UserTracker*);
64 
72  typedef std::function<void (int)> OnLostUser;
73 
74  typedef void (*OnLostUserRawFunctionPtr)(int, UserTracker*);
75 
84  {
85  NuitrackModule* pimpl = NULL;
86  ExceptionType exception_code = nuitrack_CreateUserTracker(&pimpl);
87  ExceptionTranslator::generateExceptionByErrorCode(exception_code);;
88  return std::shared_ptr<UserTracker>(new UserTracker(pimpl));
89  }
90 
92  UserTracker(NuitrackModule* pimpl)
93  {
94  _pimpl = pimpl;
95 
96  _onUpdateCallbackStruct = new CallbackStruct<UserFrame::Ptr>();
97  _onNewUserCallbackStruct = new CallbackStruct<int>();
98  _onLostUserCallbackStruct = new CallbackStruct<int>();
99 
100  _callbackWrapper.setUserTracker(this);
101  _callbackWrapper.setOnUpdateAddress(&onUpdateCallback);
102  _callbackWrapper.setOnNewUserAddress(&onNewUserCallback);
103  _callbackWrapper.setOnLostUserAddress(&onLostUserCallback);
104 
105  nuitrack_registerUserTrackerCallback(_pimpl, &_callbackWrapper);
106  }
107 
108  virtual ~UserTracker()
109  {
110  nuitrack_DestroyUserTracker(_pimpl);
111  destroyUserTracker();
112  }
113 
121  uint64_t connectOnUpdate(const OnUpdate& callback)
122  {
123  return _onUpdateCallbackStruct->addCallback(callback);
124  }
125 
132  void disconnectOnUpdate(uint64_t handler)
133  {
134  _onUpdateCallbackStruct->deleteCallback(handler);
135  }
136 
145  uint64_t connectOnNewUser(const OnNewUser& callback)
146  {
147  return _onNewUserCallbackStruct->addCallback(callback);
148  }
149 
156  void disconnectOnNewUser(uint64_t handler)
157  {
158  _onNewUserCallbackStruct->deleteCallback(handler);
159  }
160 
169  uint64_t connectOnLostUser(const OnLostUser& callback)
170  {
171  return _onLostUserCallbackStruct->addCallback(callback);
172  }
173 
180  void disconnectOnLostUser(uint64_t handler)
181  {
182  _onLostUserCallbackStruct->deleteCallback(handler);
183  }
184 
188  UserFrame::Ptr getUserFrame()
189  {
190  UserTrackerDataPtr data = nuitrack_GetUserTrackerData(_pimpl);
191  UserFrame::Ptr newFrame = UserFrame::Ptr(new UserFrame(data));
192  return newFrame;
193  }
194 
198  float getProcessingTime() const
199  {
200  return nuitrack_GetUserTrackerProcessingTime(_pimpl);
201  }
202 
203  bool canUpdate() const
204  {
205  return nuitrack_GetNuitrackModuleCanUpdate(_pimpl);
206  }
207 
215  virtual uint64_t getTimestamp()
216  {
217  return nuitrack_GetNuitrackModuleTimestamp(_pimpl);
218  }
219 
220 private:
221 
222  static void onUpdateCallback(UserTrackerData* userFrameImpl, UserTracker* tracker)
223  {
224  UserFrame::Ptr newFrame = UserFrame::Ptr(new UserFrame(userFrameImpl));
225  tracker->_onUpdateCallbackStruct->executeAllCallbacks(newFrame);
226  }
227 
228  static void onNewUserCallback(int usedID, UserTracker* tracker)
229  {
230  tracker->_onNewUserCallbackStruct->executeAllCallbacks(usedID);
231  }
232  static void onLostUserCallback(int usedID, UserTracker* tracker)
233  {
234  tracker->_onLostUserCallbackStruct->executeAllCallbacks(usedID);
235  }
236 
237  void destroyUserTracker()
238  {
239  if(_onUpdateCallbackStruct)
240  delete _onUpdateCallbackStruct;
241  if(_onNewUserCallbackStruct)
242  delete _onNewUserCallbackStruct;
243  if(_onLostUserCallbackStruct)
244  delete _onLostUserCallbackStruct;
245  }
246 
247  NuitrackModule* _pimpl;
248 
249  UserTrackerCallbackWrapper _callbackWrapper;
250 
251  CallbackStruct<UserFrame::Ptr>* _onUpdateCallbackStruct;
252  CallbackStruct<int>* _onNewUserCallbackStruct;
253  CallbackStruct<int>* _onLostUserCallbackStruct;
254 
255 };
256 
257 } /* namespace nuitrack */
258 } /* namespace tdv */
259 
260 
261 #endif /* NUITRACK_USERTRACKER_H_ */
float getProcessingTime() const
最後に行われたフレーム処理をミリ秒で戻します。
定義:UserTracker.h:198
Exception タイプ
Nuitrack 内部関数の考え得るエラーコードです。
定義:Error.h:20
床に関する情報を含むユーザー マップを表します。
定義:UserFrame.h:27
void disconnectOnNewUser(uint64_t handler)
ユーザー出現イベントに関するコールバックを削除します。
定義:UserTracker.h:156
static UserTracker::Ptr create()
Create the UserTracker module object.
定義:UserTracker.h:83
UserFrame::Ptr getUserFrame()
利用可能な最後の UserFrame に対してスマート ポインターを戻します。
定義:UserTracker.h:188
std::function< void(UserFrame::Ptr)> OnUpdate
ユーザー フレーム更新リクエストのためのコールバック タイプ。
定義:UserTracker.h:50
uint64_t connectOnLostUser(const OnLostUser &callback)
ユーザーのフレームアウト イベントに関するコールバックを追加します。
定義:UserTracker.h:169
std::function< void(int)> OnLostUser
ユーザーのフレームアウト イベントのためのコールバック タイプ。
定義:UserTracker.h:72
void disconnectOnUpdate(uint64_t handler)
ユーザー フレームのデータ更新リクエストのためのコールバックを削除します。
定義:UserTracker.h:132
virtual uint64_t getTimestamp()
マイクロ秒で表示される、最後に処理したデータのタイムスタンプを戻します。
定義:UserTracker.h:215
std::function< void(int)> OnNewUser
新しいユーザー出現イベントのためのコールバック タイプ。
定義:UserTracker.h:61
void disconnectOnLostUser(uint64_t handler)
ユーザーのフレームアウト イベントに関するコールバックを削除します。
定義:UserTracker.h:180
uint64_t connectOnNewUser(const OnNewUser &callback)
ユーザー出現イベントに関するコールバックを追加します。
定義:UserTracker.h:145
インターフェイスに Nuitrack ユーザー トラッカー モジュールの可能性を表します。...
定義:UserTracker.h:34
uint64_t connectOnUpdate(const OnUpdate &callback)
ユーザー フレームのデータ更新リクエストのためのコールバックを追加します。
定義:UserTracker.h:121
UserTracker(NuitrackModule *pimpl)
定義:UserTracker.h:92
std::shared_ptr< UserTracker > Ptr
UserTracker インスタンスにアクセスするためのスマート ポインター。
定義:UserTracker.h:41