#pragma once #include "tools++.h" #include "xLib/bvh_tool.h" #include "Vector.h" #include "Rotation.h" #include "WinTools.h" #include "NiToolWin.h" #include "NiJointsTool.h" #define NI_FILE_HD_ID "NI_JOINTS_TEXT_FILE" // namespace jbxwl { using namespace jbxl; // typedef struct __NiJointData { int joint; float px, py, pz; float qx, qy, qz, qs; } NiJointData; typedef struct __NiJointsFrameData { int msec; int num; NiJointData* joint_data; // } NiJointsFrameData; class CNiFileTool { public: CNiFileTool(void) { clear_data();} CNiFileTool(NiSDK_Lib lib) { clear_data(); init(lib);} ~CNiFileTool(void); private: NiSDK_Lib m_lib; BOOL m_enable_wfile; // 一時ファイルに書き込み可能 int m_num; FILE* m_wfp; FILE* m_rfp; int m_ni2sdkjoint[NI_JOINT_NUM]; protected: void clear_data(void); void init(NiSDK_Lib lib); BOOL open_wfile(CString fname); BOOL open_rfile(CString fname); void close_wfile(void); void close_rfile(void); public: // Frame Data int frame_start; int frame_ptr; int frame_num; NiJointsFrameData* frame_data; int frame_timer; unsigned short lap_timer; float play_time; float time_scale; public: // I/O void writeJointsText(Vector* pos, Quaternion* rot, BOOL mirror); int readJointsTextFile(CString fname); BOOL saveAsJointsText(CString fname, CString backup); public: // BVH BOOL saveAsBVH(CString fname, CString backup); public: // Frame Data BOOL makeFrameData(int frame, int* frame_time, int* joints_num); void freeFrameData(void); BOOL startFrame(int start=0); BOOL nextFrame(BOOL next=TRUE); void setFrame(int frame); BOOL resetFrame(void) { return startFrame();} public: // Joints void clearStartPosition(void) { start_pos.init(1.0);} void clearJointsData(void); void getPosVect(BOOL mirror, int frame=-1); void getRotQuat(BOOL mirror, int frame=-1); Vector start_pos; Vector posVect[NI_JOINT_NUM]; Quaternion rotQuat[NI_JOINT_NUM]; }; } // namespace