Nuitrack 1.5.0
3D スケルトン トラッキング ミドルウェア
 すべて クラス 名前空間 関数 変数 Typedefs 列挙型 列挙子 プロパティ イベント グループ ページ
Nuitrack.h
1 #ifndef NUITRACK_HEADER_ONLY_API_H_
2 #define NUITRACK_HEADER_ONLY_API_H_
3 
4 #include <string>
5 #include <memory>
6 #include <functional>
7 
8 #include <stdio.h>
9 
10 #include "nuitrack/types/Export.h"
11 #include "nuitrack/types/Error.h"
12 
13 #include "nuitrack/modules/NuitrackModule.h"
14 #include "nuitrack/modules/DepthSensor.h"
15 #include "nuitrack/modules/ColorSensor.h"
16 #include "nuitrack/modules/UserTracker.h"
17 #include "nuitrack/modules/SkeletonTracker.h"
18 #include "nuitrack/modules/GestureRecognizer.h"
19 #include "nuitrack/modules/HandTracker.h"
20 #include "nuitrack/types/IssuesData.h"
21 
22 #include "nuitrack/capi/Public_Nuitrack_CAPI.h"
23 #include "nuitrack/capi/IssueTracker_CAPI.h"
24 
25 namespace tdv
26 {
27 namespace nuitrack
28 {
29 
45 class NUITRACK_LOCAL Nuitrack
46 {
47 public:
58  static void init(const std::string& config = "")
59  {
60  ExceptionTranslator::generateExceptionByErrorCode(nuitrack_InitializeFromConfig(config.c_str()));
61  }
62 
71  static void run()
72  {
73  ExceptionTranslator::generateExceptionByErrorCode(nuitrack_Run());
74  }
75 
85  static void update()
86  {
87  ExceptionTranslator::generateExceptionByErrorCode(nuitrack_Update());
88  }
89 
104  static void update(std::shared_ptr<HeaderOnlyAPI_Module> module)
105  {
106  ExceptionTranslator::generateExceptionByErrorCode(nuitrack_SyncUpdatePublic(module.get()));
107  }
108 
118  static void waitUpdate(std::shared_ptr<HeaderOnlyAPI_Module> module)
119  {
120  ExceptionTranslator::generateExceptionByErrorCode(nuitrack_WaitSyncUpdatePublic(module.get()));
121  }
122 
129  static void release()
130  {
131  CallbackStruct<IssuesData::Ptr>* callbackStruct =
132  (CallbackStruct<IssuesData::Ptr>*)nuitrack_getIssuesCallbackStruct();
133  if(callbackStruct != NULL)
134  {
135  nuitrack_setIssuesCallbackStruct(NULL);
136  delete callbackStruct;
137  }
138  ExceptionTranslator::generateExceptionByErrorCode(nuitrack_Release());
139  }
140 
148  static void setConfigValue(const std::string& key, const std::string& value)
149  {
150  ExceptionTranslator::generateExceptionByErrorCode(nuitrack_SetConfigValue(key.c_str(), value.c_str()));
151  }
152 
160  static std::string getConfigValue(const std::string& key)
161  {
162  int bufferSize = 5000;
163  char* buffer = new char[bufferSize];
164  ExceptionTranslator::generateExceptionByErrorCode(nuitrack_GetConfigValue(key.c_str(), buffer, bufferSize));
165 
166  std::string result = std::string(buffer);
167  delete[] buffer;
168 
169  return result;
170  }
171 
178  static std::string getInstancesJson()
179  {
180  int bufferSize = (6000 * 6);
181  char* buffer = new char[bufferSize];
182  ExceptionTranslator::generateExceptionByErrorCode(nuitrack_GetInstancesJson(buffer, bufferSize));
183 
184  std::string result = std::string(buffer);
185  delete[] buffer;
186 
187  return result;
188  }
189 
197  typedef std::function<void (IssuesData::Ptr)> OnIssueUpdate;
198 
206  static uint64_t connectOnIssuesUpdate(const OnIssueUpdate& callback)
207  {
208  IssueTracker* issueTracker = NULL;
209  nuitrack_getIssueTracker(&issueTracker);
210  if(issueTracker == NULL)
211  return 0;
212 
213  if(nuitrack_getIssuesCallbackStruct() == NULL)
214  {
215  CallbackStruct<IssuesData::Ptr>* ptr = new CallbackStruct<IssuesData::Ptr>();
216  nuitrack_setIssuesCallbackStruct(ptr);
217 
218  IssueTrackerCallbackWrapper* callbackWrapper = new IssueTrackerCallbackWrapper();
219  callbackWrapper->setIssueTracker(issueTracker);
220  callbackWrapper->setFunctionAddress(&onIssuesUpdateCallback);
221  nuitrack_registerIssuesTrackerCallback(callbackWrapper);
222  }
223 
224  return ((CallbackStruct<IssuesData::Ptr>*)(nuitrack_getIssuesCallbackStruct()))->addCallback(callback);
225  }
226 
228  static void onIssuesUpdateCallback(IssueTrackerData* data)
229  {
230  IssuesData::Ptr newData = IssuesData::Ptr(new IssuesData(data));
231  CallbackStruct<IssuesData::Ptr>* callbackStruct =
232  (CallbackStruct<IssuesData::Ptr>*)nuitrack_getIssuesCallbackStruct();
233  if(callbackStruct == NULL)
234  return;
235  callbackStruct->executeAllCallbacks(newData);
236  }
237 
244  static void disconnectOnIssuesUpdate(uint64_t handler)
245  {
246  CallbackStruct<IssuesData::Ptr>* callbackStruct =
247  (CallbackStruct<IssuesData::Ptr>*)nuitrack_getIssuesCallbackStruct();
248  if(callbackStruct == NULL)
249  return;
250  callbackStruct->deleteCallback(handler);
251  }
252 };
253 
254 } /* namespace nuitrack */
255 } /* namespace tdv */
256 
257 #endif /* NUITRACK_HEADER_ONLY_API_H_ */
static std::string getConfigValue(const std::string &key)
Nuitrack 設定パラメーターの値を取得します。
定義:Nuitrack.h:160
static void update()
Nuitrack の更新を初期化します。
定義:Nuitrack.h:85
static void setConfigValue(const std::string &key, const std::string &value)
Nuitrack 設定パラメーターの値を設定します。
定義:Nuitrack.h:148
static void waitUpdate(std::shared_ptr< HeaderOnlyAPI_Module > module)
Nuitrack モジュール更新の初期化を行い、完了するまで待ちます。
定義:Nuitrack.h:118
std::function< void(IssuesData::Ptr)> OnIssueUpdate
問題更新リクエストのためのコールバック タイプ。
定義:Nuitrack.h:197
static void run()
センサーにより提供されたデータの処理を開始します。
定義:Nuitrack.h:71
static uint64_t connectOnIssuesUpdate(const OnIssueUpdate &callback)
問題更新リクエストのためのコールバックを追加します。
定義:Nuitrack.h:206
static void init(const std::string &config="")
Nuitrack を初期化します。
定義:Nuitrack.h:58
static void disconnectOnIssuesUpdate(uint64_t handler)
問題更新リクエストのためのコールバックを削除します。
定義:Nuitrack.h:244
共通 Nuitrack 操作にとって重要なクラスです。
定義:Nuitrack.h:45
static std::string getInstancesJson()
Get the JSON string of Nuitrack instance-based API.
定義:Nuitrack.h:178
static void update(std::shared_ptr< HeaderOnlyAPI_Module > module)
Nuitrack モジュール データ更新を開始します。
定義:Nuitrack.h:104
static void release()
データ処理を停止し、既存の Nuitrack モジュールをすべて破壊します。
定義:Nuitrack.h:129
static void onIssuesUpdateCallback(IssueTrackerData *data)
定義:Nuitrack.h:228
問題の検出に関する結果を保存します。
定義:IssuesData.h:24
std::shared_ptr< IssuesData > Ptr
IssuesData インスタンスにアクセスするためのスマート ポインター。
定義:IssuesData.h:41