Nuitrack 1.5.0
3D スケルトン トラッキング ミドルウェア
 すべて クラス 名前空間 関数 変数 Typedefs 列挙型 列挙子 プロパティ イベント グループ ページ
DepthSensor.h
1 #ifndef NUITRACK_DEPTHSENSOR_H_
2 #define NUITRACK_DEPTHSENSOR_H_
3 
4 #include <vector>
5 
6 #include "nuitrack/modules/HeaderOnlyAPI_Module.h"
7 #include "nuitrack/ModuleFunctions.h"
8 #include "nuitrack/types/Export.h"
9 #include "nuitrack/utils/ExceptionTranslator.h"
10 #include "nuitrack/types/DepthFrame.h"
11 #include "nuitrack/types/Vector3.h"
12 #include "nuitrack/types/OutputMode.h"
13 #include "nuitrack/capi/Nuitrack_CAPI.h"
14 #include "nuitrack/capi/DepthSensor_CAPI.h"
15 #include "nuitrack/utils/CallbackStruct.h"
16 
17 #include <iostream>
18 
19 namespace tdv
20 {
21 namespace nuitrack
22 {
37 class DepthSensor :public tdv::nuitrack::HeaderOnlyAPI_Module
38 {
39 public:
40 
45  typedef std::shared_ptr<DepthSensor> Ptr;
46 
53  typedef std::function<void (DepthFrame::Ptr)> OnNewFrame;
54 
63  {
64  NuitrackModule* pimpl = NULL;
65  ExceptionType exception_code = nuitrack_CreateDepthSensor(&pimpl);
66  char exception_message[1024];
67  nuitrack_GetExceptionMessage(pimpl, exception_message, 1024);
68  ExceptionTranslator::generateExceptionByErrorCode(exception_code, exception_message);
69  return std::shared_ptr<DepthSensor>(new DepthSensor(pimpl));
70  }
71 
73  DepthSensor(NuitrackModule* pimpl)
74  {
75  _pimpl = pimpl;
76 
77  _callbackStruct = new CallbackStruct<DepthFrame::Ptr>();
78  _callbackWrapper.setDepthSensor(this);
79  _callbackWrapper.setFunctionAddress(&onNewFrameCallback);
80  nuitrack_registerDepthSensorCallback(_pimpl, &_callbackWrapper);
81  }
82 
83  virtual ~DepthSensor()
84  {
85  nuitrack_DestroyDepthSensor(_pimpl);
86  if(_callbackStruct)
87  delete _callbackStruct;
88  }
89 
93  const OutputMode getOutputMode() const
94  {
95  OutputMode mode;
96  nuitrack_GetDepthSensorOutputMode(_pimpl, &mode);
97  return mode;
98  }
99 
104  bool isMirror() const
105  {
106  return nuitrack_IsDepthSensorMirror(_pimpl);
107  }
108 
121  void setMirror(bool mirror)
122  {
123  nuitrack_SetDepthSensorMirror(_pimpl, mirror);
124  }
125 
133  uint64_t connectOnNewFrame(const OnNewFrame& callback)
134  {
135  return _callbackStruct->addCallback(callback);
136  }
137 
138 
145  void disconnectOnNewFrame(uint64_t handler)
146  {
147  _callbackStruct->deleteCallback(handler);
148  }
149 
154  DepthFrame::Ptr getDepthFrame()
155  {
156  DepthSensorDataPtr data = nuitrack_GetDepthSensorData(_pimpl);
157  DepthFrame::Ptr newFrame = DepthFrame::Ptr(new DepthFrame(data));
158  return newFrame;
159  }
160 
167  {
168  return nuitrack_ConvertProjToRealCoordsVector3(_pimpl, p);
169  }
170 
177  virtual Vector3 convertProjToRealCoords(size_t x, size_t y, DepthFrame::DataType depth) const
178  {
179  return nuitrack_ConvertProjToRealCoordsXYZ(_pimpl, x, y, depth);
180  }
181 
187  virtual Vector3 convertRealToProjCoords(const Vector3& p) const
188  {
189  return nuitrack_ConvertRealToProjCoordsVector3(_pimpl, p);
190  }
191 
197  virtual Vector3 convertRealToProjCoords(float x, float y, float z) const
198  {
199  return nuitrack_ConvertRealToProjCoordsXYZ(_pimpl, x, y, z);
200  }
201 
202  bool canUpdate() const
203  {
204  return nuitrack_GetNuitrackModuleCanUpdate(_pimpl);
205  }
206 
213  virtual uint64_t getTimestamp()
214  {
215  return nuitrack_GetNuitrackModuleTimestamp(_pimpl);
216  }
217 
218 private:
219 
220  static void onNewFrameCallback(DepthSensorData* depthFrameImpl, DepthSensor* sensor)
221  {
222  DepthFrame::Ptr newFrame = DepthFrame::Ptr(new DepthFrame(depthFrameImpl));
223  sensor->_callbackStruct->executeAllCallbacks(newFrame);
224  }
225 
226  NuitrackModule* _pimpl;
227 
228  DepthSensorCallbackWrapper _callbackWrapper;
229 
230  CallbackStruct<DepthFrame::Ptr>* _callbackStruct;
231 
232 
233 };
234 
235 } /* namespace nuitrack */
236 } /* namespace tdv */
237 
238 #endif /* NUITRACK_DEPTHSENSOR_H_ */
Exception タイプ
Nuitrack 内部関数の考え得るエラーコードです。
定義:Error.h:20
void disconnectOnNewFrame(uint64_t handler)
新しい深度フレーム リクエストに関するコールバックを削除します。
定義:DepthSensor.h:145
void setMirror(bool mirror)
ミラー モードの状態を設定します。
定義:DepthSensor.h:121
static DepthSensor::Ptr create()
DepthSensor モジュール オブジェクトを作成します。
定義:DepthSensor.h:62
std::function< void(DepthFrame::Ptr)> OnNewFrame
新しい深度フレームリクエストのコールバック タイプ。
定義:DepthSensor.h:53
virtual uint64_t getTimestamp()
マイクロ秒で表示される、最後に処理したデータのタイムスタンプを戻します。
定義:DepthSensor.h:213
フレームの深度マップを保存します。
定義:DepthFrame.h:15
Vector3 convertProjToRealCoords(const Vector3 &p) const
射影座標を Vector3 ポイントから実際の座標に変換します。
定義:DepthSensor.h:166
センサー データ プロパティを保存します。
定義:OutputMode.h:13
インターフェイスに Nuitrack 深度センサー モジュールの可能性を表します。...
定義:DepthSensor.h:37
std::shared_ptr< DepthSensor > Ptr
DepthSensor インスタンスにアクセスするためのスマート ポインター。
定義:DepthSensor.h:45
定義:Vector3.h:9
bool isMirror() const
ミラー モードが有効な場合には true、その他の場合には false となります。
定義:DepthSensor.h:104
DepthFrame::Ptr getDepthFrame()
利用可能な最後の DepthFrame に対してスマート ポインターを戻します。
定義:DepthSensor.h:154
uint64_t connectOnNewFrame(const OnNewFrame &callback)
新しい深度フレーム リクエストに関するコールバックを追加します。
定義:DepthSensor.h:133
DepthSensor(NuitrackModule *pimpl)
定義:DepthSensor.h:73
virtual Vector3 convertRealToProjCoords(const Vector3 &p) const
実際の座標を Vector3 ポイントから射影座標に変換します。
定義:DepthSensor.h:187
virtual Vector3 convertRealToProjCoords(float x, float y, float z) const
実際の座標 x, y, z を射影座標に変換します。
定義:DepthSensor.h:197
virtual Vector3 convertProjToRealCoords(size_t x, size_t y, DepthFrame::DataType depth) const
射影座標を x,y と深度マップから実際の座標に変換します。...
定義:DepthSensor.h:177
const OutputMode getOutputMode() const
深度センサーから出力モードを戻します。
定義:DepthSensor.h:93