00001 #pragma once
00002
00003
00004 #include "WinTools.h"
00005
00006 #include "NiJTextTool.h"
00007 #include "NiBVHTool.h"
00008 #include "NiVMDTool.h"
00009
00010
00012
00013
00014
00015
00016
00017 namespace jbxwl {
00018
00019 using namespace jbxl;
00020
00021
00022 class CNiFileTool
00023 {
00024 public:
00025 CNiFileTool(void) { init_data();}
00026 CNiFileTool(NiSDK_Lib lib) { init_data(); init(lib);}
00027
00028 virtual ~CNiFileTool(void);
00029
00030 void free_data(void);
00031 void clear_data(void);
00032
00033 private:
00034 NiSDK_Lib m_lib;
00035 BOOL m_enable_wfile;
00036 FILE* m_wfp;
00037 FILE* m_rfp;
00038
00039 protected:
00040 void init(NiSDK_Lib lib);
00041 void init_data(void);
00042
00043 BOOL open_wfile(LPCTSTR fname, BOOL force);
00044 BOOL open_rfile(LPCTSTR fname);
00045 void close_wfile(void);
00046 void close_rfile(void);
00047
00048 void write_header(FILE* fp=NULL);
00049
00050 public:
00051
00052 int frame_start;
00053 int frame_ptr;
00054
00055 NiFrameData* frames_data;
00056 int frames_num;
00057
00058 int frame_timer;
00059 unsigned short lap_timer;
00060 double time_scale;
00061
00062 double playback_time;
00063 int playback_fps;
00064
00065 public:
00066 CNiJTextTool* JTXT_Tool;
00067 CNiVMDTool* VMD_Tool;
00068 CNiBVHTool* BVH_Tool;
00069
00070 public:
00071 CBaseFrameTool* frameTool;
00072
00073
00074 int readJTextFile(LPCTSTR fname);
00075 BOOL writeJTextData(FILE* fp, Vector<double>* pos, Quaternion<double>* rot, double* agl, BOOL mrr, NiSDK_Lib lib=NiSDK_Default);
00076
00077 BOOL saveJTextfromFile(LPCTSTR tempf, LPCTSTR fname, BOOL force);
00078 BOOL writeTempJText(Vector<double>* pos, Quaternion<double>* rot, double* agl, BOOL mrr, NiSDK_Lib lib=NiSDK_Default);
00079
00080
00081 int readBVHFile(LPCTSTR fname);
00082 BOOL saveBVHfromFile(LPCTSTR tempf, LPCTSTR fname, BVHSaveParam param);
00083 BOOL writeBVHFile(LPCTSTR fname, BVHSaveParam param);
00084
00085
00086 int readVMDFile(LPCTSTR fname);
00087 BOOL saveVMDfromFile(LPCTSTR tempf, LPCTSTR fname);
00088
00089 public:
00090
00091 void clearFrameData(void);
00092
00093 BOOL startFrame(int start=0);
00094 BOOL nextFrame(BOOL next=TRUE);
00095 void setFrame(int frame);
00096 BOOL resetFrame(void) { return startFrame();}
00097
00098 public:
00099
00100 virtual void Vector2Quaternion(Vector<double>* vt, Quaternion<double>* qt) {}
00101
00102
00103 void clearStartPosition(void) { startPos.init(1.0);}
00104 void clearJointsData(void);
00105
00106 void getJointsDataSeq(BOOL mirror, int frame=-1);
00107
00108
00109 Vector<double> startPos;
00110 Vector<double> currentPos;
00111
00112 Vector<double> posVect[NI_TOTAL_JOINT_NUM];
00113 Quaternion<double> rotQuat[NI_TOTAL_JOINT_NUM];
00114 };
00115
00116
00117 }
00118