From 0882d6258252174ee6635b3d1d337bdedad97ab8 Mon Sep 17 00:00:00 2001 From: alemuntoni Date: Tue, 20 Apr 2021 10:25:54 +0200 Subject: [PATCH] fix import matrix precision in aln parser --- wrap/io_trimesh/alnParser.h | 192 ++++++++++++++++++------------------ 1 file changed, 95 insertions(+), 97 deletions(-) diff --git a/wrap/io_trimesh/alnParser.h b/wrap/io_trimesh/alnParser.h index 1e7fd4a4..1e18593a 100644 --- a/wrap/io_trimesh/alnParser.h +++ b/wrap/io_trimesh/alnParser.h @@ -2,7 +2,7 @@ * MeshLab o o * * An extendible mesh processor o o * * _ O _ * -* Copyright(C) 2005, 2009 \/)\/ * +* Copyright(C) 2005, 2021 \/)\/ * * Visual Computing Lab /\/| * * ISTI - Italian National Research Council | * * \ * @@ -30,126 +30,124 @@ struct RangeMap { - RangeMap() - { - quality = 1.0f; - } + RangeMap() : quality(1.0f) {} - std::string filename; - Matrix44m transformation; - float quality; + std::string filename; + vcg::Matrix44d transformation; + float quality; }; class ALNParser { public: - enum ALNParserCodes {NoError, CantOpen, UnexpectedEOF, ExpectingComment}; + 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"}; + 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]; - }; + 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).transformation.SetIdentity(); - } - files.clear(); - return NoError; - }; + 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).transformation.SetIdentity(); + } + files.clear(); + return NoError; + }; - static int ParseALN(std::vector &rangemaps, const char *ALNname) - { - rangemaps.clear(); + static int ParseALN(std::vector &rangemaps, const char *ALNname) + { + rangemaps.clear(); - FILE *stream=fopen(ALNname, "rt"); - if(stream==NULL) - return CantOpen; + FILE *stream=fopen(ALNname, "rt"); + if(stream==NULL) + return CantOpen; - int mesh_number; - fscanf(stream, "%i\n", &mesh_number); + int mesh_number; + fscanf(stream, "%i\n", &mesh_number); - char buffer[1024]; - for (int m=0; m0); + char *occurrence = strchr(buffer, 'W'); + if(occurrence!=NULL && occurrence[1]==':') + rm.quality = (float) atof(occurrence+2); + assert(rm.quality>0); - fscanf(stream,"%f %f %f %f \n",&(rm.transformation[0][0]),&(rm.transformation[0][1]),&(rm.transformation[0][2]),&(rm.transformation[0][3])); - fscanf(stream,"%f %f %f %f \n",&(rm.transformation[1][0]),&(rm.transformation[1][1]),&(rm.transformation[1][2]),&(rm.transformation[1][3])); - fscanf(stream,"%f %f %f %f \n",&(rm.transformation[2][0]),&(rm.transformation[2][1]),&(rm.transformation[2][2]),&(rm.transformation[2][3])); - fscanf(stream,"%f %f %f %f \n",&(rm.transformation[3][0]),&(rm.transformation[3][1]),&(rm.transformation[3][2]),&(rm.transformation[3][3])); + fscanf(stream,"%lf %lf %lf %lf \n",&(rm.transformation[0][0]),&(rm.transformation[0][1]),&(rm.transformation[0][2]),&(rm.transformation[0][3])); + fscanf(stream,"%lf %lf %lf %lf \n",&(rm.transformation[1][0]),&(rm.transformation[1][1]),&(rm.transformation[1][2]),&(rm.transformation[1][3])); + fscanf(stream,"%lf %lf %lf %lf \n",&(rm.transformation[2][0]),&(rm.transformation[2][1]),&(rm.transformation[2][2]),&(rm.transformation[2][3])); + fscanf(stream,"%lf %lf %lf %lf \n",&(rm.transformation[3][0]),&(rm.transformation[3][1]),&(rm.transformation[3][2]),&(rm.transformation[3][3])); - rangemaps.push_back(rm); - } - fclose(stream); - return NoError; - } // end of ParseALN + rangemaps.push_back(rm); + } + fclose(stream); + return NoError; + } // end of ParseALN -static bool SaveALN(const char *alnfile, std::vector &names) -{ - std::vector Tr(names.size()); - for(int i=0; i < static_cast(Tr.size()); ++i) Tr[i].SetIdentity(); - return SaveALN(alnfile,names, Tr); -} -template -static bool SaveALN(const char *alnfile, std::vector &names, std::vector > &Tr) -{ - // printf("Saving aln file %s\n",alnfile); - FILE *fp=fopen(alnfile,"w"); - if(!fp) - { - printf("unable to open file %s\n",alnfile); - return false; - } + static bool SaveALN(const char *alnfile, std::vector &names) + { + std::vector Tr(names.size()); + for(int i=0; i < static_cast(Tr.size()); ++i) Tr[i].SetIdentity(); + return SaveALN(alnfile,names, Tr); + } - fprintf(fp,"%i\n",(int)names.size()); - for(int i=0;i < static_cast(names.size());++i) - { - fprintf(fp,"%s\n",names[i].c_str()); + template + static bool SaveALN(const char *alnfile, std::vector &names, std::vector > &Tr) + { + // printf("Saving aln file %s\n",alnfile); + FILE *fp=fopen(alnfile,"w"); + if(!fp) + { + printf("unable to open file %s\n",alnfile); + return false; + } - fprintf(fp,"#\n"); - fprintf(fp,"%lf %lf %lf %lf \n",(Tr[i][0][0]),(Tr[i][0][1]),(Tr[i][0][2]),(Tr[i][0][3])); - fprintf(fp,"%lf %lf %lf %lf \n",(Tr[i][1][0]),(Tr[i][1][1]),(Tr[i][1][2]),(Tr[i][1][3])); - fprintf(fp,"%lf %lf %lf %lf \n",(Tr[i][2][0]),(Tr[i][2][1]),(Tr[i][2][2]),(Tr[i][2][3])); - fprintf(fp,"%lf %lf %lf %lf \n",(Tr[i][3][0]),(Tr[i][3][1]),(Tr[i][3][2]),(Tr[i][3][3])); - } - fprintf(fp,"0\n"); + fprintf(fp,"%i\n",(int)names.size()); + for(int i=0;i < static_cast(names.size());++i) + { + fprintf(fp,"%s\n",names[i].c_str()); - fclose(fp); - return true; -} + fprintf(fp,"#\n"); + fprintf(fp,"%lf %lf %lf %lf \n",(Tr[i][0][0]),(Tr[i][0][1]),(Tr[i][0][2]),(Tr[i][0][3])); + fprintf(fp,"%lf %lf %lf %lf \n",(Tr[i][1][0]),(Tr[i][1][1]),(Tr[i][1][2]),(Tr[i][1][3])); + fprintf(fp,"%lf %lf %lf %lf \n",(Tr[i][2][0]),(Tr[i][2][1]),(Tr[i][2][2]),(Tr[i][2][3])); + fprintf(fp,"%lf %lf %lf %lf \n",(Tr[i][3][0]),(Tr[i][3][1]),(Tr[i][3][2]),(Tr[i][3][3])); + } + fprintf(fp,"0\n"); + + fclose(fp); + return true; + } };