From ed7382539c0e1812afbe723e89ea3b9357ea6345 Mon Sep 17 00:00:00 2001 From: cignoni Date: Wed, 23 Jun 2004 15:36:57 +0000 Subject: [PATCH] Restructured management of error, now the standard open for any mesh type return the error code, the default success value is zero Any import class has a method ErrorMsg that give a verbal description of an error code. --- wrap/io_trimesh/import_ply.h | 73 ++++++++++++++++++++++++++---------- wrap/io_trimesh/import_stl.h | 35 ++++++++++++++--- wrap/io_trimesh/io_ply.h | 18 +++++---- wrap/ply/plylib.cpp | 26 ++----------- 4 files changed, 96 insertions(+), 56 deletions(-) diff --git a/wrap/io_trimesh/import_ply.h b/wrap/io_trimesh/import_ply.h index 1d33e7a9..ff962edb 100644 --- a/wrap/io_trimesh/import_ply.h +++ b/wrap/io_trimesh/import_ply.h @@ -24,6 +24,9 @@ History $Log: not supported by cvs2svn $ +Revision 1.7 2004/06/11 17:09:41 ganovelli +inclusion of vector..minorchanges + Revision 1.6 2004/05/28 14:11:13 ganovelli changes to comply io_mask moving in vcg::ply namesp @@ -228,6 +231,36 @@ static const PropDescriptor &CameraDesc(int i) }; return cad[i]; } +/// Standard call for knowing the meaning of an error code +static const char *ErrorMsg(int error) +{ + const char * ply_error_msg[] = +{ + "No errors", + "Can't open file", + "Header not found", + "Eof in header", + "Format not found", + "Syntax error on header", + "Property without element", + "Bad type name", + "Element not found", + "Property not found", + "Bad type on addtoread", + "Incompatible type", + "Bad cast", + "No vertex field found", + "No face field found", + "Unespected eof", + "Face with more than 3 vertices", + "Bad vertex index in face", + "Face with no 6 texture coordinates", + "Number of color differ from vertices" +}; + + if(error>PlyInfo::E_MAXPLYINFOERRORS || error<0) return "Unknown error"; + else return ply_error_msg[error]; +}; /// Standard call for reading a mesh @@ -287,7 +320,7 @@ static int Open( OpenMeshType &m, const char * filename, PlyInfo &pi ) if( pf.Open(filename,vcg::ply::PlyFile::MODE_READ)==-1 ) { pi.status = pf.GetError(); - return -1; + return pi.status; } pi.header = pf.GetHeader(); @@ -305,13 +338,13 @@ static int Open( OpenMeshType &m, const char * filename, PlyInfo &pi ) } // Descrittori dati standard (vertex coord e faces) - if( pf.AddToRead(VertDesc(0))==-1 ) { pi.status = PlyInfo::E_NO_VERTEX; return -1; } - if( pf.AddToRead(VertDesc(1))==-1 ) { pi.status = PlyInfo::E_NO_VERTEX; return -1; } - if( pf.AddToRead(VertDesc(2))==-1 ) { pi.status = PlyInfo::E_NO_VERTEX; return -1; } + if( pf.AddToRead(VertDesc(0))==-1 ) { pi.status = PlyInfo::E_NO_VERTEX; return pi.status; } + if( pf.AddToRead(VertDesc(1))==-1 ) { pi.status = PlyInfo::E_NO_VERTEX; return pi.status; } + if( pf.AddToRead(VertDesc(2))==-1 ) { pi.status = PlyInfo::E_NO_VERTEX; return pi.status; } if( pf.AddToRead(FaceDesc(0))==-1 ) // Se fallisce si prova anche la sintassi di rapidform con index al posto di indices if( pf.AddToRead(FaceDesc(9))==-1 ) if(pf.AddToRead(TristripDesc(0))==-1) // Se fallisce tutto si prova a vedere se ci sono tristrip alla levoy. - { pi.status = PlyInfo::E_NO_FACE; return -1; } + { pi.status = PlyInfo::E_NO_FACE; return pi.status; } // Descrittori facoltativi dei flags if( pf.AddToRead(VertDesc(3))!=-1 ) @@ -385,12 +418,12 @@ static int Open( OpenMeshType &m, const char * filename, PlyInfo &pi ) VPV[i] = pi.VertexData[i]; VPV[i].offset1=offsetof(LoadPly_VertAux,data)+totsz; totsz+=pi.VertexData[i].memtypesize(); - if( pf.AddToRead(VPV[i])==-1 ) { pi.status = pf.GetError(); return -1; } + if( pf.AddToRead(VPV[i])==-1 ) { pi.status = pf.GetError(); return pi.status; } } if(totsz > MAX_USER_DATA) { pi.status = vcg::ply::E_BADTYPE; - return -1; + return pi.status; } } if(pi.fdn>0){ @@ -399,12 +432,12 @@ static int Open( OpenMeshType &m, const char * filename, PlyInfo &pi ) FPV[i] = pi.FaceData[i]; FPV[i].offset1=offsetof(LoadPly_FaceAux,data)+totsz; totsz+=pi.FaceData[i].memtypesize(); - if( pf.AddToRead(FPV[i])==-1 ) { pi.status = pf.GetError(); return -1; } + if( pf.AddToRead(FPV[i])==-1 ) { pi.status = pf.GetError(); return pi.status; } } if(totsz > MAX_USER_DATA) { pi.status = vcg::ply::E_BADTYPE; - return -1; + return pi.status; } } @@ -427,7 +460,7 @@ static int Open( OpenMeshType &m, const char * filename, PlyInfo &pi ) if( pf.Read( (void *)&(ca) )==-1 ) { pi.status = PlyInfo::E_SHORTFILE; - return -1; + return pi.status; } //camera.valid = true; //camera.view_p[0] = ca.view_px; @@ -469,7 +502,7 @@ static int Open( OpenMeshType &m, const char * filename, PlyInfo &pi ) if( pf.Read( (void *)&(va) )==-1 ) { pi.status = PlyInfo::E_SHORTFILE; - return -1; + return pi.status; } (*vi).P()[0] = va.p[0]; @@ -517,12 +550,12 @@ static int Open( OpenMeshType &m, const char * filename, PlyInfo &pi ) if( pf.Read(&fa)==-1 ) { pi.status = PlyInfo::E_SHORTFILE; - return -1; + return pi.status; } if(fa.size!=3) { pi.status = PlyInfo::E_NO_3VERTINFACE; - return -1; + return pi.status; } for(k=0;k<3;++k) @@ -530,7 +563,7 @@ static int Open( OpenMeshType &m, const char * filename, PlyInfo &pi ) if( fa.v[k]<0 || fa.v[k]>=m.vn ) { pi.status = PlyInfo::E_BAD_VERT_INDEX; - return -1; + return pi.status; } (*fi).V(k) = index[ fa.v[k] ]; } @@ -600,7 +633,7 @@ static int Open( OpenMeshType &m, const char * filename, PlyInfo &pi ) if( pf.Read(&tsa)==-1 ) { pi.status = PlyInfo::E_SHORTFILE; - return -1; + return pi.status; } int remainder=0; //int startface=m.face.size(); @@ -609,7 +642,7 @@ static int Open( OpenMeshType &m, const char * filename, PlyInfo &pi ) if(pi.cb && (k%1000)==0) pi.cb(50+k*50/tsa.size,"Tristrip Face Loading"); if(tsa.v[k]<0 || tsa.v[k]>=numvert_tmp ) { pi.status = PlyInfo::E_BAD_VERT_INDEX; - return -1; + return pi.status; } if(tsa.v[k+2]==-1) { @@ -637,7 +670,7 @@ static int Open( OpenMeshType &m, const char * filename, PlyInfo &pi ) if( pf.Read(0)==-1) { pi.status = PlyInfo::E_SHORTFILE; - return -1; + return pi.status; } } } @@ -705,7 +738,7 @@ int LoadCamera(const char * filename) if( pf.Open(filename,vcg::ply::PlyFile::MODE_READ)==-1 ) { pi.status = pf.GetError(); - return -1; + return pi.status; } @@ -721,7 +754,7 @@ int LoadCamera(const char * filename) } if(!found) - return -1; + return pi.status; for(i=0;i class ImporterSTL @@ -68,6 +71,26 @@ public: // short attr; }; +enum STLError { + E_NOERROR, // 0 + // Errori di open + E_CANTOPEN, // 1 + E_UNESPECTEDEOF, // 2 +}; + +static const char *ErrorMsg(int error) +{ + static const char * stl_error_msg[] = + { + "No errors", + "Can't open file", + "Premature End of file", + }; + + if(error>2 || error<0) return "Unknown error"; + else return stl_error_msg[error]; +}; + static int Open( OpenMeshType &m, const char * filename, CallBackPos *cb=0) { FILE *fp; @@ -75,7 +98,7 @@ static int Open( OpenMeshType &m, const char * filename, CallBackPos *cb=0) fp = fopen(filename, "r"); if(fp == NULL) { - return 0; + return E_CANTOPEN; } /* Find size of file */ @@ -109,7 +132,7 @@ static int OpenBinary( OpenMeshType &m, const char * filename, CallBackPos *cb=0 fp = fopen(filename, "rb"); if(fp == NULL) { - return 0; + return E_CANTOPEN; } int facenum; @@ -137,7 +160,7 @@ static int OpenBinary( OpenMeshType &m, const char * filename, CallBackPos *cb=0 ++fi; } fclose(fp); - return 1; + return E_NOERROR; } @@ -147,7 +170,7 @@ static int OpenBinary( OpenMeshType &m, const char * filename, CallBackPos *cb=0 fp = fopen(filename, "r"); if(fp == NULL) { - return 0; + return E_CANTOPEN; } m.Clear(); @@ -177,7 +200,7 @@ static int OpenBinary( OpenMeshType &m, const char * filename, CallBackPos *cb=0 } } fclose(fp); - return 1; + return E_NOERROR; } }; // end class } // end Namespace tri diff --git a/wrap/io_trimesh/io_ply.h b/wrap/io_trimesh/io_ply.h index e1d44a8c..626a237f 100644 --- a/wrap/io_trimesh/io_ply.h +++ b/wrap/io_trimesh/io_ply.h @@ -24,6 +24,9 @@ History $Log: not supported by cvs2svn $ +Revision 1.3 2004/05/12 10:19:30 ganovelli +new line added at the end of file + Revision 1.2 2004/03/09 21:26:47 cignoni cr lf mismatch @@ -94,13 +97,14 @@ public: enum Error { // Funzioni superiori - E_NO_VERTEX, // 14 - E_NO_FACE, // 15 - E_SHORTFILE, // 16 - E_NO_3VERTINFACE, // 17 - E_BAD_VERT_INDEX, // 18 - E_NO_6TCOORD, // 19 - E_DIFFER_COLORS, // 20 + E_NO_VERTEX = ply::E_MAXPLYERRORS+1, // 14 + E_NO_FACE = ply::E_MAXPLYERRORS+2, // 15 + E_SHORTFILE = ply::E_MAXPLYERRORS+3, // 16 + E_NO_3VERTINFACE = ply::E_MAXPLYERRORS+4, // 17 + E_BAD_VERT_INDEX = ply::E_MAXPLYERRORS+5, // 18 + E_NO_6TCOORD = ply::E_MAXPLYERRORS+6, // 19 + E_DIFFER_COLORS = ply::E_MAXPLYERRORS+7, + E_MAXPLYINFOERRORS= ply::E_MAXPLYERRORS+8// 20 }; }; // end class diff --git a/wrap/ply/plylib.cpp b/wrap/ply/plylib.cpp index c284aaca..f25bae2d 100644 --- a/wrap/ply/plylib.cpp +++ b/wrap/ply/plylib.cpp @@ -31,6 +31,9 @@ of Greg Turk and on the work of Claudio Rocchini History $Log: not supported by cvs2svn $ +Revision 1.5 2004/06/23 00:06:45 ponchio +Moved #define LITTLE_MACHINE outside of #ifdef WIN32 (linux on PC is little too). + Revision 1.4 2004/05/12 17:21:08 ganovelli inclusion of io.h removed (unnecessary) @@ -120,29 +123,6 @@ const char * cachedir = "vcg_cache"; const char * bboxcacheext = ".bbox_cache"; const char * bboxheader = "BBOXCACH"; -const char * ply_error_msg[] = -{ - "No errors", - "Can't open file", - "Header not found", - "Eof in header", - "Format not found", - "Syntax error on header", - "Property without element", - "Bad type name", - "Element not found", - "Property not found", - "Bad type on addtoread", - "Incompatible type", - "Bad cast", - "No vertex field found", - "No face field found", - "Unespected eof", - "Face with more than 3 vertices", - "Bad vertex index in face", - "Face with no 6 texture coordinates", - "Number of color differ from vertices" -};