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