00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033 #ifndef VCGLIB_TRACKRECORDER
00034 #define VCGLIB_TRACKRECORDER
00035
00036
00037 #include <wrap/gui/trackball.h>
00038 #include <stdio.h>
00039 #include <time.h>
00040
00041 namespace vcg{
00042 struct TrackRecorder{
00043
00044 TrackRecorder(){Stop();}
00045
00046 FILE * trackfile;
00047
00048 enum { PLAY,REC,OFF } mode;
00049 int nextTime,
00050 startTime;
00051
00052 void StartPlaying(char * namefile){
00053 if(trackfile != NULL) return;
00054
00055 trackfile = fopen(namefile,"rb");
00056 startTime = clock();
00057 mode = PLAY;
00058 fread(&nextTime,4,1,trackfile);
00059 }
00060
00061 void UpdateTrackball(Trackball & t){
00062
00063 while( ( clock()-startTime > nextTime)&& !feof(trackfile)){
00064 fread(&t.track,sizeof(float)*4 + sizeof(float)*5,1,trackfile);
00065 fread(&nextTime,4,1,trackfile);
00066 }
00067 if(feof(trackfile))
00068 Stop();
00069 }
00070
00071 void StartRecording(char * namefile){
00072 if(trackfile != NULL) return;
00073 trackfile = fopen(namefile,"wb");
00074 startTime = clock();
00075 mode = REC;
00076 }
00077
00078 void RecordTrackball(Trackball & t){
00079 nextTime = clock()-startTime;
00080 fwrite(&nextTime,4,1,trackfile);
00081 fwrite(&t.track,sizeof(float)*4 + sizeof(float)*5,1,trackfile);
00082 }
00083
00084 void Stop(){mode = OFF; trackfile = NULL;};
00085
00086 };
00087 }
00088 #endif