diff --git a/wrap/io_trimesh/export_vmi.h b/wrap/io_trimesh/export_vmi.h index 91623de1..b50b26bc 100644 --- a/wrap/io_trimesh/export_vmi.h +++ b/wrap/io_trimesh/export_vmi.h @@ -59,13 +59,142 @@ namespace io { template struct PlaceHolderType{ char A[N];}; + + struct WriteString { WriteString (FILE *f,const char * in) { unsigned int l = strlen(in); fwrite(&l,4,1,f); fwrite(in,1,l,f);}}; + struct WriteInt { WriteInt (FILE *f,const unsigned int i) { fwrite(&i,1,4,f);} }; + + /* save Ocf Vertex Components */ + template + struct SaveVertexOcf{ + SaveVertexOcf(FILE*f, const CONT & vert){ + // do nothing, it is a std::vector + } + }; + + /* partial specialization for vector_ocf */ + template + struct SaveVertexOcf >{ + typedef typename MeshType::VertexType VertexType; + SaveVertexOcf(FILE * f,const vertex::vector_ocf & vert){ + + if( VertexType::HasVertexQualityOcf() && vert.IsQualityEnabled()){ + WriteString(f,"HAS_VERTEX_QUALITY_OCF"); + fwrite(&vert.QV[0],sizeof(VertexType::QualityType),vert.size(),f); + }else WriteString(f,"NOT_HAS_VERTEX_QUALITY_OCF"); + + if( VertexType::HasVertexColorOcf() && vert.IsColorEnabled()){ + WriteString(f,"HAS_VERTEX_COLOR_OCF"); + fwrite(&vert.CV[0],sizeof(VertexType::ColorType),vert.size(),f); + }else WriteString(f,"NOT_HAS_VERTEX_COLOR_OCF"); + + if( VertexType::HasVertexNormalOcf() && vert.IsNormalEnabled()){ + WriteString(f,"HAS_VERTEX_NORMAL_OCF"); + fwrite(&vert.NV[0],sizeof(VertexType::NormalType),vert.size(),f); + }else WriteString(f,"NOT_HAS_VERTEX_NORMAL_OCF"); + + if( VertexType::HasVertexMarkOcf() && vert.IsMarkEnabled()){ + WriteString(f,"HAS_VERTEX_MARK_OCF"); + fwrite(&vert.MV[0],sizeof(VertexType::MarkType),vert.size(),f); + }else WriteString(f,"NOT_HAS_VERTEX_MARK_OCF"); + + if( VertexType::HasTexCoordOcf() && vert.IsTexCoordEnabled()){ + WriteString(f,"HAS_VERTEX_TEXCOORD_OCF"); + fwrite(&vert.TV[0],sizeof(vertex::vector_ocf::TexCoordType),vert.size(),f); + }else WriteString(f,"NOT_HAS_VERTEX_TEXCOORD_OCF"); + + if( VertexType::HasVFAdjacencyOcf() && vert.IsVFAdjacencyEnabled()){ + WriteString(f,"HAS_VERTEX_VFADJACENCY_OCF"); + fwrite(&vert.AV[0],sizeof(vertex::vector_ocf::VFAdjType),vert.size(),f); + }else WriteString(f,"NOT_HAS_VERTEX_VFADJACENCY_OCF"); + + if( VertexType::HasCurvatureOcf() && vert.IsCurvatureEnabled()){ + WriteString(f,"HAS_VERTEX_CURVATURE_OCF"); + fwrite(&vert.CuV[0],sizeof(VertexType::CurvatureType),vert.size(),f); + }else WriteString(f,"NOT_HAS_VERTEX_CURVATURE_OCF"); + + if( VertexType::HasCurvatureDirOcf() && vert.IsCurvatureDirEnabled()){ + WriteString(f,"HAS_VERTEX_CURVATUREDIR_OCF"); + fwrite(&vert.CuDV[0],sizeof(VertexType::CurvatureDirType),vert.size(),f); + }else WriteString(f,"NOT_HAS_VERTEX_CURVATUREDIR_OCF"); + + if( VertexType::HasRadiusOcf() && vert.IsRadiusEnabled()){ + WriteString(f,"HAS_VERTEX_RADIUS_OCF"); + fwrite(&vert.RadiusV[0],sizeof(vertex::vector_ocf::RadiusType),vert.size(),f); + }else WriteString(f,"NOT_HAS_VERTEX_RADIUS_OCF"); + + } + }; + + + /* save Ocf Face Components */ + template + struct SaveFaceOcf{ + SaveFaceOcf(FILE * f,const CONT & face){ + // do nothing, it is a std::vector + } + }; + + /* partial specialization for vector_ocf */ + template + struct SaveFaceOcf< MeshType, face::vector_ocf >{ + typedef typename MeshType::FaceType FaceType; + SaveFaceOcf(FILE * f,const face::vector_ocf & face){ + + if( FaceType::HasFaceQualityOcf() && face.IsQualityEnabled()){ + WriteString(f,"HAS_FACE_QUALITY_OCF"); + fwrite(&face.QV[0],sizeof(FaceType::QualityType),face.size(),f); + }else WriteString(f,"NOT_HAS_FACE_QUALITY_OCF"); + + if( FaceType::HasFaceColorOcf() && face.IsColorEnabled()){ + WriteString(f,"HAS_FACE_COLOR_OCF"); + fwrite(&face.CV[0],sizeof(FaceType::ColorType),face.size(),f); + }else WriteString(f,"NOT_HAS_FACE_COLOR_OCF"); + + if( FaceType::HasFaceNormalOcf() && face.IsNormalEnabled()){ + WriteString(f,"HAS_FACE_NORMAL_OCF"); + fwrite(&face.NV[0],sizeof(FaceType::NormalType),face.size(),f); + }else WriteString(f,"NOT_HAS_FACE_NORMAL_OCF"); + + if( FaceType::HasFaceMarkOcf() && face.IsMarkEnabled()){ + WriteString(f,"HAS_FACE_MARK_OCF"); + fwrite(&face.MV[0],sizeof(FaceType::MarkType),face.size(),f); + }else WriteString(f,"NOT_HAS_FACE_MARK_OCF"); + + if( FaceType::HasWedgeTexCoordOcf() && face.IsWedgeTexEnabled()){ + WriteString(f,"HAS_FACE_WEDGETEXCOORD_OCF"); + fwrite(&face.WTV[0],sizeof(FaceType::WedgeTexCoordType),face.size(),f); + }else WriteString(f,"NOT_HAS_FACE_WEDGETEXCOORD_OCF"); + + if( FaceType::HasFFAdjacencyOcf() && face.IsFFAdjacencyEnabled()){ + WriteString(f,"HAS_FACE_FFADJACENCY_OCF"); + fwrite(&face.AF[0],sizeof(face::vector_ocf::AdjTypePack),face.size(),f); + }else WriteString(f,"NOT_HAS_FACE_FFADJACENCY_OCF"); + + if( FaceType::HasVFAdjacencyOcf() && face.IsVFAdjacencyEnabled()){ + WriteString(f,"HAS_FACE_VFADJACENCY_OCF"); + fwrite(&face.AV[0],sizeof(face::vector_ocf::AdjTypePack),face.size(),f); + }else WriteString(f,"NOT_HAS_FACE_VFADJACENCY_OCF"); + + if( FaceType::HasWedgeColorOcf() && face.IsWedgeColorEnabled()){ + WriteString(f,"HAS_FACE_WEDGECOLOR_OCF"); + fwrite(&face.WCV[0],sizeof(face::vector_ocf::WedgeColorTypePack),face.size(),f); + }else WriteString(f,"NOT_HAS_FACE_WEDGECOLOR_OCF"); + + if( FaceType::HasWedgeNormalOcf() && face.IsWedgeNormalEnabled()){ + WriteString(f,"HAS_FACE_WEDGENORMAL_OCF"); + fwrite(&face.WNV[0],sizeof(face::vector_ocf::WedgeNormalTypePack),face.size(),f); + }else WriteString(f,"NOT_HAS_FACE_WEDGENORMAL_OCF"); + } + }; + + template class ExporterVMI { public: static FILE *& F(){static FILE * f; return f;} - struct WriteString { WriteString (const char * in) { unsigned int l = strlen(in); fwrite(&l,4,1,F()); fwrite(in,1,l,F());}}; - struct WriteInt { WriteInt (const unsigned int i) { fwrite(&i,1,4,F());} }; + struct WriteString { WriteString (const char * in) { WriteString A = (F(),in);}}; + struct WriteInt { WriteInt (const unsigned int i) { WriteInt A = (F(),i);} }; typedef typename SaveMeshType::FaceContainer FaceContainer; typedef typename SaveMeshType::FaceIterator FaceIterator; @@ -79,128 +208,6 @@ namespace io { /* save Ocf Components */ - /* save Ocf Vertex Components */ - template - struct SaveVertexOcf{ - SaveVertexOcf(const CONT & vert){ - // do nothing, it is a std::vector - } - }; - - /* partial specialization for vector_ocf */ - template <> - struct SaveVertexOcf< vertex::vector_ocf >{ - SaveVertexOcf(const vertex::vector_ocf & vert){ - - if( VertexType::HasVertexQualityOcf() && vert.IsQualityEnabled()){ - WriteString("HAS_VERTEX_QUALITY_OCF"); - fwrite(&vert.QV[0],sizeof(VertexType::QualityType),vert.size(),F()); - }else WriteString("NOT_HAS_VERTEX_QUALITY_OCF"); - - if( VertexType::HasVertexColorOcf() && vert.IsColorEnabled()){ - WriteString("HAS_VERTEX_COLOR_OCF"); - fwrite(&vert.CV[0],sizeof(VertexType::ColorType),vert.size(),F()); - }else WriteString("NOT_HAS_VERTEX_COLOR_OCF"); - - if( VertexType::HasVertexNormalOcf() && vert.IsNormalEnabled()){ - WriteString("HAS_VERTEX_NORMAL_OCF"); - fwrite(&vert.NV[0],sizeof(VertexType::NormalType),vert.size(),F()); - }else WriteString("NOT_HAS_VERTEX_NORMAL_OCF"); - - if( VertexType::HasVertexMarkOcf() && vert.IsMarkEnabled()){ - WriteString("HAS_VERTEX_MARK_OCF"); - fwrite(&vert.MV[0],sizeof(VertexType::MarkType),vert.size(),F()); - }else WriteString("NOT_HAS_VERTEX_MARK_OCF"); - - if( VertexType::HasTexCoordOcf() && vert.IsTexCoordEnabled()){ - WriteString("HAS_VERTEX_TEXCOORD_OCF"); - fwrite(&vert.TV[0],sizeof(vertex::vector_ocf::TexCoordType),vert.size(),F()); - }else WriteString("NOT_HAS_VERTEX_TEXCOORD_OCF"); - - if( VertexType::HasVFAdjacencyOcf() && vert.IsVFAdjacencyEnabled()){ - WriteString("HAS_VERTEX_VFADJACENCY_OCF"); - fwrite(&vert.AV[0],sizeof(vertex::vector_ocf::VFAdjType),vert.size(),F()); - }else WriteString("NOT_HAS_VERTEX_VFADJACENCY_OCF"); - - if( VertexType::HasCurvatureOcf() && vert.IsCurvatureEnabled()){ - WriteString("HAS_VERTEX_CURVATURE_OCF"); - fwrite(&vert.CuV[0],sizeof(VertexType::CurvatureType),vert.size(),F()); - }else WriteString("NOT_HAS_VERTEX_CURVATURE_OCF"); - - if( VertexType::HasCurvatureDirOcf() && vert.IsCurvatureDirEnabled()){ - WriteString("HAS_VERTEX_CURVATUREDIR_OCF"); - fwrite(&vert.CuDV[0],sizeof(VertexType::CurvatureDirType),vert.size(),F()); - }else WriteString("NOT_HAS_VERTEX_CURVATUREDIR_OCF"); - - if( VertexType::HasRadiusOcf() && vert.IsRadiusEnabled()){ - WriteString("HAS_VERTEX_RADIUS_OCF"); - fwrite(&vert.RadiusV[0],sizeof(vertex::vector_ocf::RadiusType),vert.size(),F()); - }else WriteString("NOT_HAS_VERTEX_RADIUS_OCF"); - - } - }; - - - /* save Ocf Face Components */ - template - struct SaveFaceOcf{ - SaveFaceOcf(const CONT & face){ - // do nothing, it is a std::vector - } - }; - - /* partial specialization for vector_ocf */ - template <> - struct SaveFaceOcf< face::vector_ocf >{ - SaveFaceOcf(const face::vector_ocf & face){ - - if( FaceType::HasFaceQualityOcf() && face.IsQualityEnabled()){ - WriteString("HAS_FACE_QUALITY_OCF"); - fwrite(&face.QV[0],sizeof(FaceType::QualityType),face.size(),F()); - }else WriteString("NOT_HAS_FACE_QUALITY_OCF"); - - if( FaceType::HasFaceColorOcf() && face.IsColorEnabled()){ - WriteString("HAS_FACE_COLOR_OCF"); - fwrite(&face.CV[0],sizeof(FaceType::ColorType),face.size(),F()); - }else WriteString("NOT_HAS_FACE_COLOR_OCF"); - - if( FaceType::HasFaceNormalOcf() && face.IsNormalEnabled()){ - WriteString("HAS_FACE_NORMAL_OCF"); - fwrite(&face.NV[0],sizeof(FaceType::NormalType),face.size(),F()); - }else WriteString("NOT_HAS_FACE_NORMAL_OCF"); - - if( FaceType::HasFaceMarkOcf() && face.IsMarkEnabled()){ - WriteString("HAS_FACE_MARK_OCF"); - fwrite(&face.MV[0],sizeof(FaceType::MarkType),face.size(),F()); - }else WriteString("NOT_HAS_FACE_MARK_OCF"); - - if( FaceType::HasWedgeTexCoordOcf() && face.IsWedgeTexEnabled()){ - WriteString("HAS_FACE_WEDGETEXCOORD_OCF"); - fwrite(&face.WTV[0],sizeof(FaceType::WedgeTexCoordType),face.size(),F()); - }else WriteString("NOT_HAS_FACE_WEDGETEXCOORD_OCF"); - - if( FaceType::HasFFAdjacencyOcf() && face.IsFFAdjacencyEnabled()){ - WriteString("HAS_FACE_FFADJACENCY_OCF"); - fwrite(&face.AF[0],sizeof(face::vector_ocf::AdjTypePack),face.size(),F()); - }else WriteString("NOT_HAS_FACE_FFADJACENCY_OCF"); - - if( FaceType::HasVFAdjacencyOcf() && face.IsVFAdjacencyEnabled()){ - WriteString("HAS_FACE_VFADJACENCY_OCF"); - fwrite(&face.AV[0],sizeof(face::vector_ocf::AdjTypePack),face.size(),F()); - }else WriteString("NOT_HAS_FACE_VFADJACENCY_OCF"); - - if( FaceType::HasWedgeColorOcf() && face.IsWedgeColorEnabled()){ - WriteString("HAS_FACE_WEDGECOLOR_OCF"); - fwrite(&face.WCV[0],sizeof(face::vector_ocf::WedgeColorTypePack),face.size(),F()); - }else WriteString("NOT_HAS_FACE_WEDGECOLOR_OCF"); - - if( FaceType::HasWedgeNormalOcf() && face.IsWedgeNormalEnabled()){ - WriteString("HAS_FACE_WEDGENORMAL_OCF"); - fwrite(&face.WNV[0],sizeof(face::vector_ocf::WedgeNormalTypePack),face.size(),F()); - }else WriteString("NOT_HAS_FACE_WEDGENORMAL_OCF"); - } - }; - static void Save(const SaveMeshType &m,char * filename){ @@ -257,7 +264,7 @@ namespace io { /* save the vertices */ written = fwrite((void*)&m.vert[0],sizeof(typename SaveMeshType::VertexType),m.vert.size(),F()); assert(written==m.vert.size()); - SaveVertexOcf(m.vert); + SaveVertexOcf(F(),m.vert); } if(faceSize!=0){ @@ -265,7 +272,7 @@ namespace io { written = fwrite((void*)&m.face[0],sizeof(typename SaveMeshType::FaceType),faceSize,F()); assert(written==m.face.size()); - SaveFaceOcf(m.face); + SaveFaceOcf(F(),m.face); } diff --git a/wrap/io_trimesh/import_vmi.h b/wrap/io_trimesh/import_vmi.h index 09813352..5bab7bd9 100644 --- a/wrap/io_trimesh/import_vmi.h +++ b/wrap/io_trimesh/import_vmi.h @@ -236,8 +236,180 @@ namespace io { + struct ReadString{ ReadString(FILE * f,std::string & out){ + unsigned int l; fread(&l,4,1,f); + char * buf = new char[l+1]; + fread(buf,1,l,f);buf[l]='\0'; + out = std::string(buf); + delete [] buf; + } + }; + struct ReadInt{ ReadInt(FILE *f, unsigned int & i){ fread(&i,1,4,f);}}; + template + struct LoadVertexOcf{ + LoadVertexOcf(FILE*f,const CONT & vert){ + // do nothing, it is a std::vector + } + }; + + + + template + struct + LoadVertexOcf >{ + typedef typename OpenMeshType::VertexType VertexType; + LoadVertexOcf( FILE * f, vertex::vector_ocf & vert){ + std::string s; + + // vertex quality + ReadString(f,s); + if( s == std::string("HAS_VERTEX_QUALITY_OCF")) { + vert.EnableQuality(); + fread((void*)&vert.QV[0],sizeof(VertexType::QualityType),vert.size(),f); + } + + // vertex color + ReadString(f,s); + if( s == std::string("HAS_VERTEX_COLOR_OCF")) { + vert.EnableColor(); + fread((void*)&vert.CV[0],sizeof(VertexType::ColorType),vert.size(),f); + } + + // vertex normal + ReadString(f,s); + if( s == std::string("HAS_VERTEX_NORMAL_OCF")) { + vert.EnableNormal(); + fread((void*)&vert.NV[0],sizeof(VertexType::NormalType),vert.size(),f); + } + + // vertex mark + ReadString(f,s); + if( s == std::string("HAS_VERTEX_MARK_OCF")) { + vert.EnableMark(); + fread((void*)&vert.MV[0],sizeof(VertexType::MarkType),vert.size(),f); + } + + // vertex texcoord + ReadString(f,s); + if( s == std::string("HAS_VERTEX_TEXCOORD_OCF")) { + vert.EnableTexCoord(); + fread((void*)&vert.TV[0],sizeof(vertex::vector_ocf::TexCoordType),vert.size(),f); + } + + // vertex-face adjacency + ReadString(f,s); + if( s == std::string("HAS_VERTEX_VFADJACENCY_OCF")) { + vert.EnableVFAdjacency(); + fread((void*)&vert.AV[0],sizeof(vertex::vector_ocf::VFAdjType),vert.size(),f); + } + + // vertex curvature + ReadString(f,s); + if( s == std::string("HAS_VERTEX_CURVATURE_OCF")) { + vert.EnableCurvature(); + fread((void*)&vert.CuV[0],sizeof(VertexType::CurvatureType),vert.size(),f); + } + + // vertex curvature dir + ReadString(f,s); + if( s == std::string("HAS_VERTEX_CURVATUREDIR_OCF")) { + vert.EnableCurvatureDir(); + fread((void*)&vert.CuDV[0],sizeof(VertexType::CurvatureDirType),vert.size(),f); + } + + // vertex radius + ReadString(f,s); + if( s == std::string("HAS_VERTEX_RADIUS_OCF")) { + vert.EnableRadius(); + fread((void*)&vert.RadiusV[0],sizeof(vertex::vector_ocf::RadiusType),vert.size(),f); + } + + } + }; + + template + struct LoadFaceOcf{ + LoadFaceOcf(FILE * f, const CONT & face){ + // do nothing, it is a std::vector + } + }; + + + /* partial specialization for vector_ocf */ + template + struct LoadFaceOcf< OpenMeshType, face::vector_ocf >{ + typedef typename OpenMeshType::FaceType FaceType; + LoadFaceOcf( FILE * f, face::vector_ocf & face){ + std::string s; + + // face quality + ReadString(f,s); + if( s == std::string("HAS_FACE_QUALITY_OCF")) { + face.EnableQuality(); + fread((void*)&face.QV[0],sizeof(FaceType::QualityType),face.size(),f); + } + + // face color + ReadString(f,s); + if( s == std::string("HAS_FACE_COLOR_OCF")) { + face.EnableColor(); + fread((void*)&face.CV[0],sizeof(FaceType::ColorType),face.size(),f); + } + + // face normal + ReadString(f,s); + if( s == std::string("HAS_FACE_NORMAL_OCF")) { + face.EnableNormal(); + fread((void*)&face.NV[0],sizeof(FaceType::NormalType),face.size(),f); + } + + // face mark + ReadString(f,s); + if( s == std::string("HAS_FACE_MARK_OCF")) { + face.EnableMark(); + fread((void*)&face.MV[0],sizeof(FaceType::MarkType),face.size(),f); + } + + // face wedgetexcoord + ReadString(f,s); + if( s == std::string("HAS_FACE_WEDGETEXCOORD_OCF")) { + face.EnableWedgeTex(); + fread((void*)&face.WTV[0],sizeof(FaceType::WedgeTexCoordType),face.size(),f); + } + + + // face-face adjacency + ReadString(f,s); + if( s == std::string("HAS_FACE_FFADJACENCY_OCF")) { + face.EnableFFAdjacency(); + fread((void*)&face.AF[0],sizeof(face::vector_ocf::AdjTypePack),face.size(),f); + } + + // vertex-face adjacency + ReadString(f,s); + if( s == std::string("HAS_FACE_VFADJACENCY_OCF")) { + face.EnableVFAdjacency(); + fread((void*)&face.AV[0],sizeof(face::vector_ocf::AdjTypePack),face.size(),f); + } + + // face WedgeColor + ReadString(f,s); + if( s == std::string("HAS_FACE_WEDGECOLOR_OCF")) { + face.EnableWedgeColor(); + fread((void*)&face.WCV[0],sizeof(face::vector_ocf::WedgeColorTypePack),face.size(),f); + } + + // face WedgeNormal + ReadString(f,s); + if( s == std::string("HAS_FACE_WEDGENORMAL_OCF")) { + face.EnableWedgeNormal(); + fread((void*)&face.WNV[0],sizeof(face::vector_ocf::WedgeNormalTypePack),face.size(),f); + } + } + }; + template class ImporterVMI: public AttrAll @@ -245,15 +417,6 @@ namespace io { public: static FILE *& F(){static FILE * f; return f;} - struct ReadString{ ReadString(FILE * f,std::string & out){ - unsigned int l; fread(&l,4,1,f); - char * buf = new char[l+1]; - fread(buf,1,l,F());buf[l]='\0'; - out = std::string(buf); - delete [] buf; - } - }; - struct ReadInt{ ReadInt(FILE *f, unsigned int & i){ fread(&i,1,4,f);}}; static void * Malloc(unsigned int n){ return (n)?malloc(n):0;} static void Free(void * ptr){ if(ptr) free (ptr);} @@ -288,172 +451,17 @@ namespace io { } static bool GetHeader(char * filename,std::vector& nameV, std::vector& nameF, int & vertSize, int &faceSize){ - FILE * F() = fopen(filename,"rb"); + F() = fopen(filename,"rb"); return GetHeader(F(),nameV, nameF, vertSize, faceSize); fclose(F()); } - template - struct LoadVertexOcf{ - LoadVertexOcf(const CONT & vert){ - // do nothing, it is a std::vector - } - }; - - /* partial specialization for vector_ocf */ - template <> - struct LoadVertexOcf< vertex::vector_ocf >{ - LoadVertexOcf( vertex::vector_ocf & vert){ - std::string s; - - // vertex quality - ReadString(F(),s); - if( s == std::string("HAS_VERTEX_QUALITY_OCF")) { - vert.EnableQuality(); - fread((void*)&vert.QV[0],sizeof(VertexType::QualityType),vert.size(),F()); - } - - // vertex color - ReadString(F(),s); - if( s == std::string("HAS_VERTEX_COLOR_OCF")) { - vert.EnableColor(); - fread((void*)&vert.CV[0],sizeof(VertexType::ColorType),vert.size(),F()); - } - - // vertex normal - ReadString(F(),s); - if( s == std::string("HAS_VERTEX_NORMAL_OCF")) { - vert.EnableNormal(); - fread((void*)&vert.NV[0],sizeof(VertexType::NormalType),vert.size(),F()); - } - - // vertex mark - ReadString(F(),s); - if( s == std::string("HAS_VERTEX_MARK_OCF")) { - vert.EnableMark(); - fread((void*)&vert.MV[0],sizeof(VertexType::MarkType),vert.size(),F()); - } - - // vertex texcoord - ReadString(F(),s); - if( s == std::string("HAS_VERTEX_TEXCOORD_OCF")) { - vert.EnableTexCoord(); - fread((void*)&vert.TV[0],sizeof(vertex::vector_ocf::TexCoordType),vert.size(),F()); - } - - // vertex-face adjacency - ReadString(F(),s); - if( s == std::string("HAS_VERTEX_VFADJACENCY_OCF")) { - vert.EnableVFAdjacency(); - fread((void*)&vert.AV[0],sizeof(vertex::vector_ocf::VFAdjType),vert.size(),F()); - } - - // vertex curvature - ReadString(F(),s); - if( s == std::string("HAS_VERTEX_CURVATURE_OCF")) { - vert.EnableCurvature(); - fread((void*)&vert.CuV[0],sizeof(VertexType::CurvatureType),vert.size(),F()); - } - - // vertex curvature dir - ReadString(F(),s); - if( s == std::string("HAS_VERTEX_CURVATUREDIR_OCF")) { - vert.EnableCurvatureDir(); - fread((void*)&vert.CuDV[0],sizeof(VertexType::CurvatureDirType),vert.size(),F()); - } - - // vertex radius - ReadString(F(),s); - if( s == std::string("HAS_VERTEX_RADIUS_OCF")) { - vert.EnableRadius(); - fread((void*)&vert.RadiusV[0],sizeof(vertex::vector_ocf::RadiusType),vert.size(),F()); - } - - } - }; - template - struct LoadFaceOcf{ - LoadFaceOcf(const CONT & face){ - // do nothing, it is a std::vector - } - }; - /* partial specialization for vector_ocf */ - template <> - struct LoadFaceOcf< face::vector_ocf >{ - LoadFaceOcf( face::vector_ocf & face){ - std::string s; - - // face quality - ReadString(F(),s); - if( s == std::string("HAS_FACE_QUALITY_OCF")) { - face.EnableQuality(); - fread((void*)&face.QV[0],sizeof(FaceType::QualityType),face.size(),F()); - } - - // face color - ReadString(F(),s); - if( s == std::string("HAS_FACE_COLOR_OCF")) { - face.EnableColor(); - fread((void*)&face.CV[0],sizeof(FaceType::ColorType),face.size(),F()); - } - - // face normal - ReadString(F(),s); - if( s == std::string("HAS_FACE_NORMAL_OCF")) { - face.EnableNormal(); - fread((void*)&face.NV[0],sizeof(FaceType::NormalType),face.size(),F()); - } - - // face mark - ReadString(F(),s); - if( s == std::string("HAS_FACE_MARK_OCF")) { - face.EnableMark(); - fread((void*)&face.MV[0],sizeof(FaceType::MarkType),face.size(),F()); - } - - // face wedgetexcoord - ReadString(F(),s); - if( s == std::string("HAS_FACE_WEDGETEXCOORD_OCF")) { - face.EnableWedgeTex(); - fread((void*)&face.WTV[0],sizeof(FaceType::WedgeTexCoordType),face.size(),F()); - } - - - // face-face adjacency - ReadString(F(),s); - if( s == std::string("HAS_FACE_FFADJACENCY_OCF")) { - face.EnableFFAdjacency(); - fread((void*)&face.AF[0],sizeof(face::vector_ocf::AdjTypePack),face.size(),F()); - } - - // vertex-face adjacency - ReadString(F(),s); - if( s == std::string("HAS_FACE_VFADJACENCY_OCF")) { - face.EnableVFAdjacency(); - fread((void*)&face.AV[0],sizeof(face::vector_ocf::AdjTypePack),face.size(),F()); - } - - // face WedgeColor - ReadString(F(),s); - if( s == std::string("HAS_FACE_WEDGECOLOR_OCF")) { - face.EnableWedgeColor(); - fread((void*)&face.WCV[0],sizeof(face::vector_ocf::WedgeColorTypePack),face.size(),F()); - } - - // face WedgeNormal - ReadString(F(),s); - if( s == std::string("HAS_FACE_WEDGENORMAL_OCF")) { - face.EnableWedgeNormal(); - fread((void*)&face.WNV[0],sizeof(face::vector_ocf::WedgeNormalTypePack),face.size(),F()); - } - } - }; @@ -507,7 +515,7 @@ namespace io { read=fread((void*)& m.vert[0],sizeof(VertexType),vertSize,F()); assert(ferror(F())==0); assert(read==vertSize); - LoadVertexOcf(m.vert); + LoadVertexOcf(F(),m.vert); } read = 0; @@ -518,7 +526,7 @@ namespace io { assert(ferror(F())==0); assert(!feof(F())); assert(read==faceSize); - LoadFaceOcf(m.face); + LoadFaceOcf(F(),m.face); } @@ -551,7 +559,7 @@ namespace io { /* load the per mesh attributes */ ReadString(F(),_trash); ReadInt(F(),n); - for(int ia = 0 ; ia < n; ++ia){ + for(unsigned int ia = 0 ; ia < n; ++ia){ ReadString(F(),_trash); ReadString(F(),_string); ReadString(F(),_trash); ReadInt(F(),sz); void * data = Malloc(sz); @@ -594,6 +602,7 @@ namespace io { }; // end class + } // end Namespace tri } // end Namespace io } // end Namespace vcg