changes to compile with gcc 4.3.3-5

This commit is contained in:
ganovelli 2009-10-09 10:17:24 +00:00
parent 5c0f228a4d
commit 4fa2f2a557
2 changed files with 310 additions and 294 deletions

View File

@ -59,13 +59,142 @@ namespace io {
template <int N> 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 <typename OpenMeshType,typename CONT>
struct SaveVertexOcf{
SaveVertexOcf(FILE*f, const CONT & vert){
// do nothing, it is a std::vector
}
};
/* partial specialization for vector_ocf */
template <typename MeshType>
struct SaveVertexOcf<MeshType, vertex::vector_ocf<typename MeshType::VertexType> >{
typedef typename MeshType::VertexType VertexType;
SaveVertexOcf(FILE * f,const vertex::vector_ocf<VertexType> & 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<VertexType>::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<VertexType>::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<VertexType>::RadiusType),vert.size(),f);
}else WriteString(f,"NOT_HAS_VERTEX_RADIUS_OCF");
}
};
/* save Ocf Face Components */
template <typename MeshType,typename CONT>
struct SaveFaceOcf{
SaveFaceOcf(FILE * f,const CONT & face){
// do nothing, it is a std::vector
}
};
/* partial specialization for vector_ocf */
template <typename MeshType>
struct SaveFaceOcf< MeshType, face::vector_ocf<typename MeshType::FaceType> >{
typedef typename MeshType::FaceType FaceType;
SaveFaceOcf(FILE * f,const face::vector_ocf<FaceType> & 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<FaceType>::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<FaceType>::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<FaceType>::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<FaceType>::WedgeNormalTypePack),face.size(),f);
}else WriteString(f,"NOT_HAS_FACE_WEDGENORMAL_OCF");
}
};
template <class SaveMeshType>
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 <typename CONT>
struct SaveVertexOcf{
SaveVertexOcf(const CONT & vert){
// do nothing, it is a std::vector
}
};
/* partial specialization for vector_ocf */
template <>
struct SaveVertexOcf< vertex::vector_ocf<VertexType> >{
SaveVertexOcf(const vertex::vector_ocf<VertexType> & 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<VertexType>::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<VertexType>::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<VertexType>::RadiusType),vert.size(),F());
}else WriteString("NOT_HAS_VERTEX_RADIUS_OCF");
}
};
/* save Ocf Face Components */
template <typename CONT>
struct SaveFaceOcf{
SaveFaceOcf(const CONT & face){
// do nothing, it is a std::vector
}
};
/* partial specialization for vector_ocf */
template <>
struct SaveFaceOcf< face::vector_ocf<FaceType> >{
SaveFaceOcf(const face::vector_ocf<FaceType> & 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<FaceType>::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<FaceType>::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<FaceType>::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<FaceType>::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<VertContainer>(m.vert);
SaveVertexOcf<SaveMeshType,VertContainer>(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<FaceContainer>(m.face);
SaveFaceOcf<SaveMeshType,FaceContainer>(F(),m.face);
}

View File

@ -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 <typename OpenMeshType, typename CONT>
struct LoadVertexOcf{
LoadVertexOcf(FILE*f,const CONT & vert){
// do nothing, it is a std::vector
}
};
template <typename OpenMeshType>
struct
LoadVertexOcf<OpenMeshType,vertex::vector_ocf<typename OpenMeshType::VertexType> >{
typedef typename OpenMeshType::VertexType VertexType;
LoadVertexOcf( FILE * f, vertex::vector_ocf<typename OpenMeshType::VertexType> & 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<VertexType>::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<VertexType>::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<VertexType>::RadiusType),vert.size(),f);
}
}
};
template <typename OpenMeshType, typename CONT>
struct LoadFaceOcf{
LoadFaceOcf(FILE * f, const CONT & face){
// do nothing, it is a std::vector
}
};
/* partial specialization for vector_ocf */
template <typename OpenMeshType>
struct LoadFaceOcf< OpenMeshType, face::vector_ocf<typename OpenMeshType::FaceType> >{
typedef typename OpenMeshType::FaceType FaceType;
LoadFaceOcf( FILE * f, face::vector_ocf<FaceType> & 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<FaceType>::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<FaceType>::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<FaceType>::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<FaceType>::WedgeNormalTypePack),face.size(),f);
}
}
};
template <class OpenMeshType,class A0 = long, class A1 = double, class A2 = int,class A3 = short, class A4 = char >
class ImporterVMI: public AttrAll<OpenMeshType,A0,A1,A2,A3,A4>
@ -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<std::string>& nameV, std::vector<std::string>& nameF, int & vertSize, int &faceSize){
FILE * F() = fopen(filename,"rb");
F() = fopen(filename,"rb");
return GetHeader(F(),nameV, nameF, vertSize, faceSize);
fclose(F());
}
template <typename CONT>
struct LoadVertexOcf{
LoadVertexOcf(const CONT & vert){
// do nothing, it is a std::vector
}
};
/* partial specialization for vector_ocf */
template <>
struct LoadVertexOcf< vertex::vector_ocf<VertexType> >{
LoadVertexOcf( vertex::vector_ocf<VertexType> & 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<VertexType>::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<VertexType>::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<VertexType>::RadiusType),vert.size(),F());
}
}
};
template <typename CONT>
struct LoadFaceOcf{
LoadFaceOcf(const CONT & face){
// do nothing, it is a std::vector
}
};
/* partial specialization for vector_ocf */
template <>
struct LoadFaceOcf< face::vector_ocf<FaceType> >{
LoadFaceOcf( face::vector_ocf<FaceType> & 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<FaceType>::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<FaceType>::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<FaceType>::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<FaceType>::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<VertContainer>(m.vert);
LoadVertexOcf<OpenMeshType,VertContainer>(F(),m.vert);
}
read = 0;
@ -518,7 +526,7 @@ namespace io {
assert(ferror(F())==0);
assert(!feof(F()));
assert(read==faceSize);
LoadFaceOcf<FaceContainer>(m.face);
LoadFaceOcf<OpenMeshType,FaceContainer>(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