diff --git a/wrap/io_trimesh/import_vmi.h b/wrap/io_trimesh/import_vmi.h index 845682b8..ffc7a35d 100644 --- a/wrap/io_trimesh/import_vmi.h +++ b/wrap/io_trimesh/import_vmi.h @@ -431,6 +431,34 @@ namespace io { typedef typename OpenMeshType::VertexIterator VertexIterator; typedef typename OpenMeshType::VertexType VertexType; + enum VMIErrorCodes { + NO_ERROR=0, + INCOMPATIBLE_VERTEX_TYPE, + INCOMPATIBLE_FACE_TYPE, + FAILED_OPEN + }; + + /*! + * Standard call for knowing the meaning of an error code + * \param message_code The code returned by Open + * \return The string describing the error code + */ + static const char* ErrorMsg(int message_code) + { + static const char* error_msg[] = + { + "No errors", + "The file has a incompatible vertex signature", + "The file has a incompatible Face signature", + "General failure of the file opening" + }; + + if(message_code>4 || message_code<0) + return "Unknown error"; + else + return error_msg[message_code]; + }; + static bool GetHeader(std::vector& fnameV, std::vector& fnameF, unsigned int & vertSize, unsigned int &faceSize){ std::string name; unsigned int nameFsize,nameVsize,i; @@ -466,13 +494,14 @@ namespace io { - static bool Open(OpenMeshType &m, const char * filename, int &/*mask*/, CallBackPos *cb=0){ + static int Open(OpenMeshType &m, const char * filename, int &/*mask*/, CallBackPos *cb=0){ typedef typename OpenMeshType::VertexType VertexType; typedef typename OpenMeshType::FaceType FaceType; typename OpenMeshType::FaceIterator fi; typename OpenMeshType::VertexIterator vi; F() = fopen(filename,"rb"); + if(!F()) return FAILED_OPEN; std::vector nameF,nameV,fnameF,fnameV; unsigned int vertSize,faceSize; @@ -484,8 +513,8 @@ namespace io { OpenMeshType::VertexType::Name(nameV); /* check if the type is the very same, otherwise return */ - if(fnameV != nameV) return false; - if(fnameF != nameF) return false; + if(fnameV != nameV) return INCOMPATIBLE_VERTEX_TYPE; + if(fnameF != nameF) return INCOMPATIBLE_FACE_TYPE; int offsetV,offsetF; @@ -598,8 +627,8 @@ namespace io { } fclose(F()); - return true; - } + return NO_ERROR; // zero is the standard (!) code of success + } }; // end class