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.
This commit is contained in:
Paolo Cignoni 2004-06-23 15:36:57 +00:00
parent 35e423a642
commit ed7382539c
4 changed files with 96 additions and 56 deletions

View File

@ -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<ScalarType>,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<int(pf.elements.size());i++)
{
@ -738,7 +771,7 @@ int LoadCamera(const char * filename)
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;

View File

@ -25,6 +25,9 @@
History
$Log: not supported by cvs2svn $
Revision 1.4 2004/03/18 15:30:57 cignoni
Removed float/double warning
Revision 1.3 2004/03/12 21:42:52 cignoni
First working version!
@ -42,7 +45,7 @@ namespace io {
/**
This class encapsulate a filter for importing stl (stereolitograpy) meshes.
The stl format is quite simple and rather un-flexible. It just stores, in ascii or binary the, unindexed, geometry of the faces.
warning this code assume little endian (PC) architecture!!!
Warning: this code assume little endian (PC) architecture!!!
*/
template <class OpenMeshType>
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

View File

@ -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

View File

@ -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"
};