diff --git a/src/meshlab/alnParser.h b/src/meshlab/alnParser.h new file mode 100644 index 000000000..346e9953f --- /dev/null +++ b/src/meshlab/alnParser.h @@ -0,0 +1,94 @@ +#ifndef __OM_ALNPARSER_ +#define __OM_ALNPARSER_ + +#include +#include +#include + +struct RangeMap +{ + RangeMap() + { + quality = 1.0f; + } + + std::string filename; + vcg::Matrix44f trasformation; + float quality; +}; + +class ALNParser +{ +public: + enum ALNParserCodes {NoError, CantOpen, UnexpectedEOF, ExpectingComment}; + + static const char* ErrorMsg(int message_code) + { + static const char* error_msg[4] = {"No errors", "Can't open file", "Premature End of file", "I was expecting a comment"}; + + if(message_code>3 || message_code<0) + return "Unknown error"; + else + return error_msg[message_code]; + }; + + static int BuildALN(std::vector &rangemaps, std::vector< std::string > &files) + { + rangemaps.clear(); + rangemaps.resize( files.size() ); + std::vector< RangeMap >::iterator rm = rangemaps.begin(); + std::vector< std::string >::iterator it = files.begin(); + std::vector< std::string >::iterator end = files.end(); + for ( ; it!=end; it++, rm++) + { + (*rm).filename = (*it); + (*rm).quality = 1.0f; + (*rm).trasformation.SetIdentity(); + } + files.clear(); + return NoError; + }; + + static int ParseALN(std::vector &rangemaps, const char *ALNname) + { + rangemaps.clear(); + + FILE *stream=fopen(ALNname, "r"); + if(stream==NULL) + return CantOpen; + + int mesh_number; + fscanf(stream, "%i\n", &mesh_number); + + char buffer[1024]; + for (int m=0; m0); + + fscanf(stream,"%f %f %f %f \n",&(rm.trasformation[0][0]),&(rm.trasformation[0][1]),&(rm.trasformation[0][2]),&(rm.trasformation[0][3])); + fscanf(stream,"%f %f %f %f \n",&(rm.trasformation[1][0]),&(rm.trasformation[1][1]),&(rm.trasformation[1][2]),&(rm.trasformation[1][3])); + fscanf(stream,"%f %f %f %f \n",&(rm.trasformation[2][0]),&(rm.trasformation[2][1]),&(rm.trasformation[2][2]),&(rm.trasformation[2][3])); + fscanf(stream,"%f %f %f %f \n",&(rm.trasformation[3][0]),&(rm.trasformation[3][1]),&(rm.trasformation[3][2]),&(rm.trasformation[3][3])); + + rangemaps.push_back(rm); + } + + return NoError; + } // end of ParseALN +}; + +#endif //__OM_ALNPARSER_ \ No newline at end of file