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 #include "graspRecord.h"
00027 #include "gloveInterface.h"
00028 #include "debug.h"
00029
00030 GraspRecord::GraspRecord(int size)
00031 {
00032 mSize = size;
00033 mPose = new CalibrationPose(mSize);
00034
00035 mTran = transf::IDENTITY;
00036 mObjectName = mRobotName = QString("not_set");
00037 }
00038
00039 GraspRecord::~GraspRecord()
00040 {
00041 delete mPose;
00042 }
00043
00044 void GraspRecord::writeToFile(FILE *fp)
00045 {
00046
00047 fprintf(fp,"%s\n",mObjectName.latin1());
00048 fprintf(fp,"%s\n",mRobotName.latin1());
00049
00050 Quaternion q = mTran.rotation();
00051 fprintf(fp,"%f %f %f %f ",q.x, q.y, q.z, q.w);
00052 vec3 t = mTran.translation();
00053 fprintf(fp,"%f %f %f\n",t.x(), t.y(), t.z());
00054
00055 mPose->writeToFile(fp);
00056 }
00057
00058 void GraspRecord::readFromFile(FILE *fp)
00059 {
00060 float x,y,z,w;
00061
00062 char name[1000];
00063 do {
00064 if(fgets(name, 1000, fp) == NULL) {
00065 DBGA("GraspRecord::readFromFile - failed to read record name");
00066 return;
00067 }
00068 } while (name[0]=='\n' || name[0]=='\0' || name[0]==' ');
00069 mObjectName = QString(name);
00070 mObjectName = mObjectName.stripWhiteSpace();
00071 fprintf(stderr,"object: %s__\n",mObjectName.latin1());
00072 do {
00073 if(fgets(name, 1000, fp) == NULL) {
00074 DBGA("GraspRecord::readFromFile - failed to read robot name");
00075 return;
00076 }
00077 } while (name[0]=='\n' || name[0]=='\0' || name[0]==' ');
00078 mRobotName = QString(name);
00079 mRobotName = mRobotName.stripWhiteSpace();
00080 fprintf(stderr,"robot: %s__\n",mRobotName.latin1());
00081
00082 if( fscanf(fp,"%f %f %f %f",&x, &y, &z, &w) <= 0) {
00083 DBGA("GraspRecord::readFromFile - failed to read record orientation.");
00084 return;
00085 }
00086 Quaternion q(w, x, y, z);
00087 if( fscanf(fp,"%f %f %f",&x, &y, &z) <= 0) {
00088 DBGA("GraspRecord::readFromFile - failed to read record location");
00089 }
00090 vec3 t(x,y,z);
00091 mTran.set(q,t);
00092
00093 mPose->readFromFile(fp);
00094 mSize = mPose->getSize();
00095 }
00096
00097 void loadGraspListFromFile(std::vector<GraspRecord*> *list, const char *filename)
00098 {
00099 FILE *fp = fopen(filename, "r");
00100 if (fp==NULL) {
00101 fprintf(stderr,"Unable to open file %s for reading\n",filename);
00102 return;
00103 }
00104
00105 GraspRecord *newGrasp;
00106 int nGrasps;
00107 if(fscanf(fp,"%d",&nGrasps)) {
00108 DBGA("loadGraspListFromFile - failed to read number of grasps");
00109 return;
00110 }
00111 for(int i=0; i<nGrasps; i++) {
00112 newGrasp = new GraspRecord(0);
00113 newGrasp->readFromFile(fp);
00114 list->push_back(newGrasp);
00115 }
00116
00117 fclose(fp);
00118 }
00119
00120 void writeGraspListToFile (std::vector<GraspRecord*> *list, const char *filename)
00121 {
00122 FILE *fp = fopen(filename, "w");
00123 if (fp==NULL) {
00124 fprintf(stderr,"Unable to open file %s for reading\n",filename);
00125 return;
00126 }
00127
00128 fprintf(fp,"%d\n",(int)list->size());
00129 for (int i=0; i<(int)list->size(); i++) {
00130 (*list)[i]->writeToFile(fp);
00131 }
00132
00133 fclose(fp);
00134 }