changes to compile with gcc 4.3.3-5
This commit is contained in:
parent
5c0f228a4d
commit
4fa2f2a557
|
@ -59,13 +59,142 @@ namespace io {
|
||||||
|
|
||||||
template <int N> struct PlaceHolderType{ char A[N];};
|
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>
|
template <class SaveMeshType>
|
||||||
class ExporterVMI
|
class ExporterVMI
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
static FILE *& F(){static FILE * f; return f;}
|
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 WriteString { WriteString (const char * in) { WriteString A = (F(),in);}};
|
||||||
struct WriteInt { WriteInt (const unsigned int i) { fwrite(&i,1,4,F());} };
|
struct WriteInt { WriteInt (const unsigned int i) { WriteInt A = (F(),i);} };
|
||||||
|
|
||||||
typedef typename SaveMeshType::FaceContainer FaceContainer;
|
typedef typename SaveMeshType::FaceContainer FaceContainer;
|
||||||
typedef typename SaveMeshType::FaceIterator FaceIterator;
|
typedef typename SaveMeshType::FaceIterator FaceIterator;
|
||||||
|
@ -79,128 +208,6 @@ namespace io {
|
||||||
|
|
||||||
/* save Ocf Components */
|
/* 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){
|
static void Save(const SaveMeshType &m,char * filename){
|
||||||
|
@ -257,7 +264,7 @@ namespace io {
|
||||||
/* save the vertices */
|
/* save the vertices */
|
||||||
written = fwrite((void*)&m.vert[0],sizeof(typename SaveMeshType::VertexType),m.vert.size(),F());
|
written = fwrite((void*)&m.vert[0],sizeof(typename SaveMeshType::VertexType),m.vert.size(),F());
|
||||||
assert(written==m.vert.size());
|
assert(written==m.vert.size());
|
||||||
SaveVertexOcf<VertContainer>(m.vert);
|
SaveVertexOcf<SaveMeshType,VertContainer>(F(),m.vert);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(faceSize!=0){
|
if(faceSize!=0){
|
||||||
|
@ -265,7 +272,7 @@ namespace io {
|
||||||
written = fwrite((void*)&m.face[0],sizeof(typename SaveMeshType::FaceType),faceSize,F());
|
written = fwrite((void*)&m.face[0],sizeof(typename SaveMeshType::FaceType),faceSize,F());
|
||||||
assert(written==m.face.size());
|
assert(written==m.face.size());
|
||||||
|
|
||||||
SaveFaceOcf<FaceContainer>(m.face);
|
SaveFaceOcf<SaveMeshType,FaceContainer>(F(),m.face);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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 >
|
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>
|
class ImporterVMI: public AttrAll<OpenMeshType,A0,A1,A2,A3,A4>
|
||||||
|
@ -245,15 +417,6 @@ namespace io {
|
||||||
public:
|
public:
|
||||||
static FILE *& F(){static FILE * f; return f;}
|
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 * Malloc(unsigned int n){ return (n)?malloc(n):0;}
|
||||||
static void Free(void * ptr){ if(ptr) free (ptr);}
|
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){
|
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);
|
return GetHeader(F(),nameV, nameF, vertSize, faceSize);
|
||||||
fclose(F());
|
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());
|
read=fread((void*)& m.vert[0],sizeof(VertexType),vertSize,F());
|
||||||
assert(ferror(F())==0);
|
assert(ferror(F())==0);
|
||||||
assert(read==vertSize);
|
assert(read==vertSize);
|
||||||
LoadVertexOcf<VertContainer>(m.vert);
|
LoadVertexOcf<OpenMeshType,VertContainer>(F(),m.vert);
|
||||||
}
|
}
|
||||||
|
|
||||||
read = 0;
|
read = 0;
|
||||||
|
@ -518,7 +526,7 @@ namespace io {
|
||||||
assert(ferror(F())==0);
|
assert(ferror(F())==0);
|
||||||
assert(!feof(F()));
|
assert(!feof(F()));
|
||||||
assert(read==faceSize);
|
assert(read==faceSize);
|
||||||
LoadFaceOcf<FaceContainer>(m.face);
|
LoadFaceOcf<OpenMeshType,FaceContainer>(F(),m.face);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -551,7 +559,7 @@ namespace io {
|
||||||
|
|
||||||
/* load the per mesh attributes */
|
/* load the per mesh attributes */
|
||||||
ReadString(F(),_trash); ReadInt(F(),n);
|
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); ReadString(F(),_string);
|
||||||
ReadString(F(),_trash); ReadInt(F(),sz);
|
ReadString(F(),_trash); ReadInt(F(),sz);
|
||||||
void * data = Malloc(sz);
|
void * data = Malloc(sz);
|
||||||
|
@ -594,6 +602,7 @@ namespace io {
|
||||||
|
|
||||||
}; // end class
|
}; // end class
|
||||||
|
|
||||||
|
|
||||||
} // end Namespace tri
|
} // end Namespace tri
|
||||||
} // end Namespace io
|
} // end Namespace io
|
||||||
} // end Namespace vcg
|
} // end Namespace vcg
|
||||||
|
|
Loading…
Reference in New Issue