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];};
|
||||
|
||||
|
||||
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);
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue