added GetHeader
This commit is contained in:
parent
50ed5305a4
commit
5a2dccac0b
|
@ -25,6 +25,9 @@
|
||||||
History
|
History
|
||||||
|
|
||||||
$Log: not supported by cvs2svn $
|
$Log: not supported by cvs2svn $
|
||||||
|
Revision 1.1 2007/02/14 01:20:37 ganovelli
|
||||||
|
working draft of VCG Mesh Image importer and exporter. Does not consider optional attributes. The mesh atributes are only vn and fn (no bbox, texture coordiantes)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
@ -51,20 +54,10 @@ namespace io {
|
||||||
typedef typename OpenMeshType::VertexIterator VertexIterator;
|
typedef typename OpenMeshType::VertexIterator VertexIterator;
|
||||||
typedef typename OpenMeshType::VertexType VertexType;
|
typedef typename OpenMeshType::VertexType VertexType;
|
||||||
|
|
||||||
static bool Open(OpenMeshType &m,char * filename){
|
static bool GetHeader(FILE * f,std::vector<std::string>& fnameV, std::vector<std::string>& fnameF, int & vertSize, int &faceSize){
|
||||||
int i;
|
|
||||||
OpenMeshType::FaceIterator fi;
|
|
||||||
OpenMeshType::VertexIterator vi;
|
|
||||||
FILE * f = fopen(filename,"rb");
|
|
||||||
std::vector<string> nameF,nameV,fnameF,fnameV;
|
|
||||||
int nameFsize,nameVsize,vertSize,faceSize;
|
|
||||||
|
|
||||||
OpenMeshType::FaceType::Name(nameF);
|
|
||||||
OpenMeshType::VertexType::Name(nameV);
|
|
||||||
|
|
||||||
/* read header */
|
|
||||||
char name[100];
|
char name[100];
|
||||||
char buf[4096];
|
char buf[4096];
|
||||||
|
int nameFsize,nameVsize,i;
|
||||||
fgets(buf,4096,f);
|
fgets(buf,4096,f);
|
||||||
sscanf(buf,"%s %d",&name[0],&nameFsize);
|
sscanf(buf,"%s %d",&name[0],&nameFsize);
|
||||||
for(i=0; i < nameFsize; ++i) {
|
for(i=0; i < nameFsize; ++i) {
|
||||||
|
@ -83,6 +76,28 @@ namespace io {
|
||||||
sscanf(buf,"%s %d",&name[0],&vertSize);
|
sscanf(buf,"%s %d",&name[0],&vertSize);
|
||||||
fgets(buf,4096,f);
|
fgets(buf,4096,f);
|
||||||
assert(strstr(buf,"end_header")!=NULL);
|
assert(strstr(buf,"end_header")!=NULL);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
static bool GetHeader(char * filename,std::vector<std::string>& nameV, std::vector<std::string>& nameF, int & vertSize, int &faceSize){
|
||||||
|
FILE * f = fopen(filename,"rb");
|
||||||
|
return GetHeader(f,nameV, nameF, vertSize, faceSize);
|
||||||
|
fclose(f);
|
||||||
|
}
|
||||||
|
static bool Open(OpenMeshType &m,char * filename){
|
||||||
|
int i;
|
||||||
|
OpenMeshType::FaceIterator fi;
|
||||||
|
OpenMeshType::VertexIterator vi;
|
||||||
|
FILE * f = fopen(filename,"rb");
|
||||||
|
std::vector<string> nameF,nameV,fnameF,fnameV;
|
||||||
|
int vertSize,faceSize;
|
||||||
|
|
||||||
|
/* read the header */
|
||||||
|
GetHeader(f,fnameV, fnameF, vertSize, faceSize);
|
||||||
|
|
||||||
|
/* read the mesh type */
|
||||||
|
OpenMeshType::FaceType::Name(nameF);
|
||||||
|
OpenMeshType::VertexType::Name(nameV);
|
||||||
|
|
||||||
/* check if the type is the very same, otherwise return */
|
/* check if the type is the very same, otherwise return */
|
||||||
if(fnameV != nameV) return false;
|
if(fnameV != nameV) return false;
|
||||||
|
@ -96,20 +111,25 @@ namespace io {
|
||||||
fread(&offsetF,sizeof( int),1,f);
|
fread(&offsetF,sizeof( int),1,f);
|
||||||
|
|
||||||
/* read the object mesh */
|
/* read the object mesh */
|
||||||
fread(&m.vn,sizeof(int),1,f);
|
fread(&m,sizeof(OpenMeshType),1,f);
|
||||||
fread(&m.fn,sizeof(int),1,f);
|
|
||||||
|
/* overwrite che container because they could be inconsistent */
|
||||||
|
OpenMeshType::VertContainer tvc;
|
||||||
|
OpenMeshType::FaceContainer tfc;
|
||||||
|
memcpy(&m.vert,&tvc,sizeof(OpenMeshType::VertContainer));
|
||||||
|
memcpy(&m.face,&tfc,sizeof(OpenMeshType::FaceContainer));
|
||||||
|
|
||||||
m.vert.resize(vertSize);
|
m.vert.resize(vertSize);
|
||||||
|
|
||||||
int read;
|
int read;
|
||||||
/* load the vertices */
|
/* load the vertices */
|
||||||
read=fread((void*)& m.vert[0],sizeof(OpenMeshType::VertexType)*vertSize,1,f);
|
read=fread((void*)& m.vert[0],sizeof(OpenMeshType::VertexType),vertSize,f);
|
||||||
assert(ferror(f)==0);
|
assert(ferror(f)==0);
|
||||||
assert(read==vertSize);
|
assert(read==vertSize);
|
||||||
|
|
||||||
m.face.resize(faceSize);
|
m.face.resize(faceSize);
|
||||||
/* load the faces */
|
/* load the faces */
|
||||||
read = fread((void*)& m.face[0],sizeof(OpenMeshType::FaceType)*faceSize,1,f);
|
read = fread((void*)& m.face[0],sizeof(OpenMeshType::FaceType),faceSize,f);
|
||||||
assert(ferror(f)==0);
|
assert(ferror(f)==0);
|
||||||
assert(!feof(f));
|
assert(!feof(f));
|
||||||
assert(read==faceSize);
|
assert(read==faceSize);
|
||||||
|
|
Loading…
Reference in New Issue