00001 #ifndef __JBXL_OPENNI_TOOL_H_
00002 #define __JBXL_OPENNI_TOOL_H_
00003
00011
00012 #ifdef ENABLE_OPENNI2
00013
00014 #include "OpenNi2Tool.h"
00015
00016 #ifdef ENABLE_OPENNI
00017 #undef ENABLE_OPENNI
00018 #endif
00019
00020 #endif
00021
00022
00023 #ifdef ENABLE_OPENNI
00024
00025
00026 #include "OpenNiDevice.h"
00027
00028
00029
00030 namespace jbxl {
00031
00032
00033 class COpenNiTool
00034 {
00035 public:
00036 COpenNiTool(void);
00037 virtual ~COpenNiTool(void) { free();}
00038
00039 private:
00040 COpenNiDevice* device;
00041 COpenNiDevice* dev_backup;
00042
00043 public:
00044 Buffer m_err_mesg;
00045
00046 unsigned int tracking_user;
00047 unsigned int tracking_deny;
00048
00049 public:
00050 BOOL init(BOOL use_camera);
00051 void free(void);
00052 void delete_Device(void);
00053
00054 void clear_JointsData(void);
00055 void clear_JointsPosData(void);
00056 void clear_JointsRotData(void);
00057
00058 public:
00059
00060 void get_JointsPositionData(unsigned int nId);
00061 void get_JointsRotationData(unsigned int nId);
00062
00063 XnVector3D joint_PositionData(int joint);
00064 XnMatrix3X3 joint_RotationData(int joint);
00065 double joint_PositionConfidence(int joint);
00066 double joint_RotationConfidence(int joint);
00067
00068 public:
00069
00070 BOOL start_Detection(int profile, double smooth);
00071 BOOL stop_Detection(void);
00072
00073 unsigned int get_TrackingUser(void);
00074 void set_DenyTrackingSearch(unsigned int user);
00075
00076
00077 BOOL backupDevice(void);
00078 BOOL restoreDevice(void);
00079
00080
00081 protected:
00082
00083 XnVector3D jointPosData[OPENNI_JOINT_NUM];
00084 XnMatrix3X3 jointRotData[OPENNI_JOINT_NUM];
00085 double jointPosConfidence[OPENNI_JOINT_NUM];
00086 double jointRotConfidence[OPENNI_JOINT_NUM];
00087
00088
00089 public:
00090 ONI_EnuDev getEnuDevice(void) { if (device!=NULL) return device->m_enu_dev; else return EnuDev_Unknown;}
00091
00092 BOOL initDevice(BOOL image) { if (device!=NULL) return device->init(image); else return FALSE;}
00093 BOOL initDevice(char* fname, BOOL image) { if (device!=NULL) return device->init(fname, image); else return FALSE;}
00094
00095 BOOL resetDevice(BOOL image) { deleteDepth(); deleteImage(); deletePlayer(); return initDevice(image);}
00096 BOOL resetDevice(char* fname, BOOL image) { deleteDepth(); deleteImage(); deletePlayer(); return initDevice(fname, image);}
00097
00098 BOOL hasBackupDev(void) { if (dev_backup!=NULL) return TRUE; else return FALSE;}
00099 void deleteBackupDev(void) { if (dev_backup!=NULL) { delete(dev_backup); dev_backup=NULL;}}
00100
00101 int getDevState(void) { if (device!=NULL) return device->m_state; else return NI_STATE_UNKNOWN;}
00102 void setDevState(int state) { if (device!=NULL) device->m_state = state;}
00103
00104 BOOL hasContext(void) { if (device!=NULL && device->context!=NULL) return TRUE; else return FALSE;}
00105 BOOL hasImageGen(void) { if (device!=NULL && device->image!=NULL) return TRUE; else return FALSE;}
00106 BOOL hasDepthGen(void) { if (device!=NULL && device->depth!=NULL) return TRUE; else return FALSE;}
00107 BOOL hasPlayer(void) { if (device!=NULL && device->player!=NULL) return TRUE; else return FALSE;}
00108
00109 BOOL createContext(void){ if (device!=NULL) return device->create_Context();else return FALSE;}
00110 BOOL createImage(void) { if (device!=NULL) return device->create_Image(); else return FALSE;}
00111 BOOL createDepth(void) { if (device!=NULL) return device->create_Depth(); else return FALSE;}
00112 BOOL createPlayer(void) { if (device!=NULL) return device->create_Player(); else return FALSE;}
00113
00114 void deleteContext(void){ if (device!=NULL) device->delete_Context();}
00115 void deleteImage(void) { if (device!=NULL) device->delete_Image();}
00116 void deleteDepth(void) { if (device!=NULL) device->delete_Depth();}
00117 void deletePlayer(void) { if (device!=NULL) device->delete_Player();}
00118
00119 void waitStreamData(void) { if (device!=NULL && device->context!=NULL) device->context->WaitAndUpdateAll();}
00120
00121
00122 BOOL setImageData(void)
00123 {
00124 if (device!=NULL && device->image!=NULL && device->imageMD!=NULL) {
00125 device->image->GetMetaData(*(device->imageMD));
00126 return TRUE;
00127 }
00128 return FALSE;
00129 }
00130
00131
00132 BOOL setDepthData(void)
00133 {
00134 if (device!=NULL && device->depth!=NULL && device->depthMD!=NULL) {
00135 device->depth->GetMetaData(*(device->depthMD));
00136 return TRUE;
00137 }
00138 return FALSE;
00139 }
00140
00141
00142 BOOL setSceneData(void)
00143 {
00144 if (device!=NULL && device->user!=NULL && device->sceneMD!=NULL) {
00145 device->user->GetUserPixels(0, *(device->sceneMD));
00146 return TRUE;
00147 }
00148 return FALSE;
00149 }
00150
00151
00152 uByte* getImageData(void)
00153 {
00154 if (device!=NULL && device->imageMD!=NULL) return (uByte*)device->imageMD->RGB24Data();
00155 else return NULL;
00156 }
00157
00158
00159 uByte* getDepthData(void)
00160 {
00161 if (device!=NULL && device->depthMD!=NULL) return (uByte*)device->depthMD->Data();
00162 else return NULL;
00163 }
00164
00165
00166 uByte* getSceneData(void)
00167 {
00168 if (device!=NULL && device->sceneMD!=NULL) return (uByte*)device->sceneMD->Data();
00169 else return NULL;
00170 }
00171
00172
00173 BOOL isTracking(unsigned int user)
00174 {
00175 if (device!=NULL && device->skeleton!=NULL && device->skeleton->IsTracking((XnUserID)user)) return TRUE;
00176 else return FALSE;
00177 }
00178 void stopTracking(unsigned int user)
00179 {
00180 if (device!=NULL && device->skeleton!=NULL) device->skeleton->StopTracking((XnUserID)user);
00181 }
00182
00183
00184 void setGlobalMirror(BOOL mirror)
00185 {
00186 if (device!=NULL && device->context!=NULL) device->context->SetGlobalMirror(mirror);
00187 }
00188
00189
00190 int getXSize(void) { if (device!=NULL) return device->m_xsize; else return 0;}
00191 int getYSize(void) { if (device!=NULL) return device->m_ysize; else return 0;}
00192 int getFPS(void) { if (device!=NULL) return device->m_nfps; else return 0;}
00193
00194
00195 void setViewPoint(void)
00196 {
00197 if (device!=NULL && device->depth!=NULL && device->image!=NULL) {
00198 device->depth->GetAlternativeViewPointCap().SetViewPoint(*(device->image));
00199 }
00200 }
00201
00202
00203 void convertDepth2Image(int dx, int dy, unsigned short dz, int* ix, int* iy)
00204 {
00205 (*ix) = dx;
00206 (*iy) = dy;
00207 }
00208
00209
00210 void convert2Projective(unsigned int c, XnPoint3D* a, XnPoint3D* b)
00211 {
00212 if (device!=NULL && device->depth!=NULL) device->depth->ConvertRealWorldToProjective(c, a, b);
00213 }
00214
00215
00216 BOOL startRecorde(char* file_name, BOOL use_image)
00217 {
00218 if (device!=NULL) return device->start_Recorde(file_name, use_image);
00219 else return FALSE;
00220 }
00221
00222
00223 void stopRecorde(void) { device->stop_Recorde();}
00224
00225 void playerSetRepeat(BOOL rep) { if (device!=NULL && device->player!=NULL) device->player->SetRepeat(rep); }
00226 void playerSetSeek(XnInt64 tm) { if (device!=NULL && device->player!=NULL) device->player->SeekToTimeStamp(tm, XN_PLAYER_SEEK_SET);}
00227
00228
00229 BOOL open_USBDevice(void) { if (device!=NULL) return device->open_USB_Device(); else return FALSE;}
00230 void close_USBDevice(void) { if (device!=NULL) device->close_USB_Device();}
00231 void set_LEDColor(int col) { if (device!=NULL) device->set_LED_Color(col);}
00232 void set_TiltMotor(int ang) { if (device!=NULL) device->set_Tilt_Motor(ang);}
00233
00234 };
00235
00236
00237 }
00238
00239
00240
00241
00242 #endif
00243
00244
00245
00246 #endif // __JBXL_OPENNI_TOOL_H_
00247
00248
00249
00250
00251
00252
00253
00254
00255
00256
00258
00259
00260
00261
00262
00263
00264
00265
00266
00267
00268
00269
00270
00271
00272
00273
00274
00275
00276
00277
00278
00279
00280
00281
00282
00283
00284
00285
00286
00287
00288
00289
00290
00291
00292
00293
00294
00295
00296
00297