00001 #pragma once
00002
00003 #include "NiToolWin.h"
00004 #include "Vector.h"
00005 #include "Rotation.h"
00006 #include "RingBuffer.h"
00007
00008
00009 #define NI_JTXT_FILE_ID "NI_JOINTS_TEXT_FILE"
00010
00011
00012 #define NI_NORML_JOINT_NUM 33 // NORMAL JOINTS
00013 #define NI_SPECL_JOINT_NUM 4 // NI_L_FINGER, NI_R_FINGER, NI_FACE, NI_AVATAR
00014 #define NI_TOTAL_JOINT_NUM 37 // 33 + 4
00015
00016
00017 #define NI_OPENNI_JOINT_NUM 25 // OPENNI_JOINT_NUM
00018 #define NI_OPENNI2_JOINT_NUM 16 // OPENNI2_JOINT_NUM
00019 #define NI_KINECT_JOINT_NUM 20 // KINECT_JOINT_NUM, NUI_SKELETON_POSITION_COUNT
00020
00021
00022 #define NI_SDK_IS_TRACKING 0x0100
00023 #define NI_SDK_PROFILE_UPPER 0x1000
00024 #define NI_SDK_AVATAR_TRAILER 0x2000
00025
00026 #define NI_PROFILE_UPPER 3
00027
00028
00030
00031
00032 #define NI_PELVIS 0
00033 #define NI_WAIST 1
00034 #define NI_TORSO 2
00035 #define NI_CHEST 3
00036 #define NI_NECK 4
00037 #define NI_HEAD 5
00038 #define NI_SKULL 6
00039
00040 #define NI_L_EYE 7
00041 #define NI_R_EYE 8
00042 #define NI_L_BUST 9
00043 #define NI_R_BUST 10
00044
00045 #define NI_L_COLLAR 11
00046 #define NI_L_SHLDR 12
00047 #define NI_L_ELBOW 13
00048 #define NI_L_WRIST 14
00049 #define NI_L_HAND 15
00050 #define NI_L_FNGRTIP 16
00051
00052 #define NI_R_COLLAR 17
00053 #define NI_R_SHLDR 18
00054 #define NI_R_ELBOW 19
00055 #define NI_R_WRIST 20
00056 #define NI_R_HAND 21
00057 #define NI_R_FNGRTIP 22
00058
00059 #define NI_L_HIP 23
00060 #define NI_L_KNEE 24
00061 #define NI_L_ANKLE 25
00062 #define NI_L_FOOT 26
00063 #define NI_L_TOE 27
00064
00065 #define NI_R_HIP 28
00066 #define NI_R_KNEE 29
00067 #define NI_R_ANKLE 30
00068 #define NI_R_FOOT 31
00069 #define NI_R_TOE 32
00070
00071
00072 #define NI_L_FINGER 33 // Parameter for Left Finger
00073 #define NI_R_FINGER 34 // Parameter for Right Finger
00074 #define NI_FACE 35 // Parameter for Expression
00075
00076 #define NI_AVATAR 36
00077
00078
00080
00081
00082
00083 extern int NI_SDK_PELVIS;
00084 extern int NI_SDK_TORSO;
00085 extern int NI_SDK_NECK;
00086 extern int NI_SDK_HEAD;
00087
00088 extern int NI_SDK_L_EYE;
00089 extern int NI_SDK_R_EYE;
00090 extern int NI_SDK_L_BUST;
00091 extern int NI_SDK_R_BUST;
00092
00093 extern int NI_SDK_L_SHLDR;
00094 extern int NI_SDK_L_ELBOW;
00095 extern int NI_SDK_L_WRIST;
00096 extern int NI_SDK_L_HAND;
00097
00098 extern int NI_SDK_R_SHLDR;
00099 extern int NI_SDK_R_ELBOW;
00100 extern int NI_SDK_R_WRIST;
00101 extern int NI_SDK_R_HAND;
00102
00103 extern int NI_SDK_L_HIP;
00104 extern int NI_SDK_L_KNEE;
00105 extern int NI_SDK_L_ANKLE;
00106 extern int NI_SDK_L_FOOT;
00107
00108 extern int NI_SDK_R_HIP;
00109 extern int NI_SDK_R_KNEE;
00110 extern int NI_SDK_R_ANKLE;
00111 extern int NI_SDK_R_FOOT;
00112
00113 extern int NI_SDK_L_FINGER;
00114 extern int NI_SDK_R_FINGER;
00115 extern int NI_SDK_FACE;
00116
00117 extern int NI_SDK_AVATAR;
00118
00119
00120 extern jbxl::RBound<double> RBound_NI_TORSO;
00121 extern jbxl::RBound<double> RBound_NI_CHEST;
00122 extern jbxl::RBound<double> RBound_NI_NECK;
00123 extern jbxl::RBound<double> RBound_NI_HEAD;
00124
00125 extern jbxl::RBound<double> RBound_NI_L_COLLAR;
00126 extern jbxl::RBound<double> RBound_NI_L_COLLAR;
00127 extern jbxl::RBound<double> RBound_NI_L_COLLAR;
00128 extern jbxl::RBound<double> RBound_NI_R_COLLAR;
00129 extern jbxl::RBound<double> RBound_NI_L_SHLDR;
00130 extern jbxl::RBound<double> RBound_NI_R_SHLDR;
00131 extern jbxl::RBound<double> RBound_NI_L_ELBOW;
00132 extern jbxl::RBound<double> RBound_NI_R_ELBOW;
00133 extern jbxl::RBound<double> RBound_NI_L_WRIST;
00134 extern jbxl::RBound<double> RBound_NI_R_WRIST;
00135 extern jbxl::RBound<double> RBound_NI_L_HAND;
00136 extern jbxl::RBound<double> RBound_NI_R_HAND;
00137
00138 extern jbxl::RBound<double> RBound_NI_L_HIP;
00139 extern jbxl::RBound<double> RBound_NI_R_HIP;
00140 extern jbxl::RBound<double> RBound_NI_L_KNEE;
00141 extern jbxl::RBound<double> RBound_NI_R_KNEE;
00142 extern jbxl::RBound<double> RBound_NI_L_ANKLE;
00143 extern jbxl::RBound<double> RBound_NI_R_ANKLE;
00144 extern jbxl::RBound<double> RBound_NI_L_FOOT;
00145 extern jbxl::RBound<double> RBound_NI_R_FOOT;
00146
00147
00148
00149 namespace jbxwl {
00150
00151 using namespace jbxl;
00152
00153
00155
00156 typedef struct __NiJointData
00157 {
00158 int joint;
00159 int index;
00160
00161 Vector<double> vect;
00162 Quaternion<double> quat;
00163
00164 double angl;
00165
00166 } NiJointData;
00167
00168
00169
00170 typedef struct __NiFrameData
00171 {
00172 int frmn;
00173 int msec;
00174 int jnum;
00175 NiJointData* jdat;
00176
00177 } NiFrameData;
00178
00179
00180
00182
00183
00184 std::string NiJointName(int n);
00185 int NiJointNum(char* name);
00186
00187
00188 std::string NiSDK2JointName(int joint, NiSDK_Lib lib);
00189
00190
00191 int NiSDKMirrorJointNum(int joint, NiSDK_Lib lib);
00192
00193 #define NiMirrorJointNum(j) NiSDKMirrorJointNum((j), NiSDK_None)
00194
00195
00196 int JointName2NiSDK(char* jname, NiSDK_Lib lib);
00197
00198
00199 int Ni2SDKPosJointNum(int joint, NiSDK_Lib lib);
00200 int Ni2SDKRotJointNum(int joint, NiSDK_Lib lib);
00201
00202 #define Ni2SDKJointNum(j, l) Ni2SDKPosJointNum((j), (l))
00203
00204
00205 void NiSetKinectJointNums(void);
00206 void NiSetOpenNIJointNums(void);
00207 void NiSetOpenNI2JointNums(void);
00208
00209
00210
00211
00212 NiFrameData* makeFramesData(int frame, int joint_num, int* frame_num);
00213 void freeFramesData(NiFrameData* frmdata, int frm_num);
00214
00215
00216
00218
00219
00220 void NiInitRBoundJointsRotation(void);
00221
00222 void NiCorrectJointsRotation(Quaternion<double>* quat, NiSDK_Lib lib);
00223 void NiCorrectJointEuler(int joint, Quaternion<double>* quat, RBound<double> rb);
00224
00225 void NiGetJointEuler(int joint, Quaternion<double>* quat, Vector<double>* vect);
00226 void NiSetJointEuler(int joint, Vector<double>* vect, Quaternion<double>* quat);
00227
00228
00229
00231
00232
00233
00234 class CNiJoints
00235 {
00236 public:
00237 CNiJoints(void) { init();}
00238 CNiJoints(NiSDK_Lib lib) { init(); sdk_lib = lib;}
00239 virtual ~CNiJoints(void) {}
00240
00241 void clear(void) { init();}
00242
00243 public:
00244 NiSDK_Lib sdk_lib;
00245
00246 public:
00247 void init(void);
00248
00249 void clearNiJointsData(void);
00250 void connectJointsData(Vector<double>* vct, Quaternion<double>* qut,
00251 Vector<int>* crd, double* agl, CRingBuffer* vrg, CRingBuffer* qrg);
00252 void copyJoints2NiJoints(BOOL mirror);
00253
00254 public:
00255 Vector<double>* posVect;
00256 Quaternion<double>* rotQuat;
00257 Vector<int>* crdVect;
00258
00259 double* jntAngl;
00260
00261 CRingBuffer* posRing;
00262 CRingBuffer* rotRing;
00263
00264 Vector<double> niPosVect[NI_TOTAL_JOINT_NUM];
00265 Quaternion<double> niRotQuat[NI_TOTAL_JOINT_NUM];
00266 double niJntAngl[NI_TOTAL_JOINT_NUM];
00267
00268
00269
00270
00271 };
00272
00273
00274
00276
00277
00278
00279 class CBaseFrameTool
00280 {
00281 public:
00282 CBaseFrameTool(void);
00283 virtual ~CBaseFrameTool(void);
00284
00285 public:
00286 virtual unsigned int getFramesNumber(void) { return frames_num;}
00287 virtual int getJointsNumber(void) { return joints_num;}
00288
00289 virtual NiFrameData* getFramesData(void) { return framesData;}
00290 virtual NiJointData* getJointsData(int frmnum, int fps) { return jointsData;}
00291
00292 virtual int getPlayBackTime(void) { return exec_time;}
00293 virtual int getPlayBackFPS(void) { return 30;}
00294
00295 virtual BOOL readFile (FILE* fp) { return FALSE;}
00296 virtual BOOL writeFile(FILE* fp) { return FALSE;}
00297
00298
00299 protected:
00300 void init_data(void);
00301 void free_data(void);
00302 void clear_data(void);
00303
00304 protected:
00305 unsigned int frames_num;
00306 int joints_num;
00307
00308 int start_time;
00309 int stop_time;
00310 int exec_time;
00311
00312 protected:
00313 NiFrameData* framesData;
00314 NiJointData* jointsData;
00315
00316 void clearJointsData(int jnum);
00317
00318 protected:
00319
00320 void clearVectorData(int jnum);
00321
00322 Vector<double>* posVect;
00323 Quaternion<double>* rotQuat;
00324 };
00325
00326
00327 }
00328
00329
00330
00331
00332
00333
00334
00335
00336
00337
00338
00339
00340
00341
00342
00343
00344
00345
00346
00347
00348
00349
00350
00351
00352
00353
00354
00355
00356
00357
00358
00359
00360
00361
00362
00363
00364
00365
00366
00367
00368
00369
00370
00371
00372
00373
00374
00375
00376
00377
00378
00379
00380
00381
00382
00383
00384
00385
00386
00387
00388
00389
00390
00391
00392
00393
00394
00395
00396
00397
00398
00399
00400
00401
00402
00403
00404
00405
00406
00407
00408
00409
00410
00411
00412
00413
00414
00415
00416
00417
00418
00419
00420
00421
00422
00423