added support for face normals export and import and face (double precision) quality export and import for ply format
This commit is contained in:
parent
d46c581ffb
commit
ca65cf2162
|
|
@ -263,6 +263,14 @@ namespace vcg {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (HasPerFaceNormal(m) && (pi.mask & Mask::IOM_FACENORMAL))
|
||||||
|
{
|
||||||
|
const char* fntp = vcg::tri::io::Precision<typename SaveMeshType::ScalarType>::typeName();
|
||||||
|
fprintf(fpout, "property %s nx\n", fntp);
|
||||||
|
fprintf(fpout, "property %s ny\n", fntp);
|
||||||
|
fprintf(fpout, "property %s nz\n", fntp);
|
||||||
|
}
|
||||||
|
|
||||||
if( HasPerFaceQuality(m) && (pi.mask & Mask::IOM_FACEQUALITY) )
|
if( HasPerFaceQuality(m) && (pi.mask & Mask::IOM_FACEQUALITY) )
|
||||||
{
|
{
|
||||||
const char* fqtp = vcg::tri::io::Precision<typename SaveMeshType::FaceType::QualityType>::typeName();
|
const char* fqtp = vcg::tri::io::Precision<typename SaveMeshType::FaceType::QualityType>::typeName();
|
||||||
|
|
@ -612,6 +620,14 @@ namespace vcg {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if( HasPerFaceNormal(m) && (pi.mask & Mask::IOM_FACENORMAL) )
|
||||||
|
{
|
||||||
|
ScalarType t;
|
||||||
|
t = ScalarType(fp->N()[0]); fwrite(&t,sizeof(ScalarType),1,fpout);
|
||||||
|
t = ScalarType(fp->N()[1]); fwrite(&t,sizeof(ScalarType),1,fpout);
|
||||||
|
t = ScalarType(fp->N()[2]); fwrite(&t,sizeof(ScalarType),1,fpout);
|
||||||
|
}
|
||||||
|
|
||||||
if( HasPerFaceQuality(m) && (pi.mask & Mask::IOM_FACEQUALITY) )
|
if( HasPerFaceQuality(m) && (pi.mask & Mask::IOM_FACEQUALITY) )
|
||||||
fwrite( &(fp->Q()),sizeof(typename FaceType::ScalarType),1,fpout);
|
fwrite( &(fp->Q()),sizeof(typename FaceType::ScalarType),1,fpout);
|
||||||
|
|
||||||
|
|
@ -695,6 +711,9 @@ namespace vcg {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (HasPerFaceNormal(m) && (pi.mask & Mask::IOM_FACENORMAL))
|
||||||
|
fprintf(fpout,"%.*g %.*g %.*g " ,DGT, ScalarType(fp->N()[0]),DGT,ScalarType(fp->N()[1]),DGT,ScalarType(fp->N()[2]));
|
||||||
|
|
||||||
if( HasPerFaceQuality(m) && (pi.mask & Mask::IOM_FACEQUALITY) )
|
if( HasPerFaceQuality(m) && (pi.mask & Mask::IOM_FACEQUALITY) )
|
||||||
fprintf(fpout,"%.*g ",DGTFQ,fp->Q());
|
fprintf(fpout,"%.*g ",DGTFQ,fp->Q());
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -60,19 +60,24 @@ typedef ::vcg::ply::PropDescriptor PropDescriptor ;
|
||||||
typedef typename OpenMeshType::VertexPointer VertexPointer;
|
typedef typename OpenMeshType::VertexPointer VertexPointer;
|
||||||
typedef typename OpenMeshType::ScalarType ScalarType;
|
typedef typename OpenMeshType::ScalarType ScalarType;
|
||||||
typedef typename OpenMeshType::VertexType VertexType;
|
typedef typename OpenMeshType::VertexType VertexType;
|
||||||
|
typedef typename VertexType::QualityType VertQualityType;
|
||||||
typedef typename OpenMeshType::FaceType FaceType;
|
typedef typename OpenMeshType::FaceType FaceType;
|
||||||
|
typedef typename FaceType::QualityType FaceQualityType;
|
||||||
|
|
||||||
typedef typename OpenMeshType::VertexIterator VertexIterator;
|
typedef typename OpenMeshType::VertexIterator VertexIterator;
|
||||||
typedef typename OpenMeshType::FaceIterator FaceIterator;
|
typedef typename OpenMeshType::FaceIterator FaceIterator;
|
||||||
typedef typename OpenMeshType::EdgeIterator EdgeIterator;
|
typedef typename OpenMeshType::EdgeIterator EdgeIterator;
|
||||||
|
|
||||||
#define MAX_USER_DATA 256
|
#define MAX_USER_DATA 256
|
||||||
// Auxiliary structure for reading ply files
|
// Auxiliary structure for reading ply files
|
||||||
|
template<class S>
|
||||||
struct LoadPly_FaceAux
|
struct LoadPly_FaceAux
|
||||||
{
|
{
|
||||||
unsigned char size;
|
unsigned char size;
|
||||||
int v[512];
|
int v[512];
|
||||||
int flags;
|
int flags;
|
||||||
float q;
|
S n[3];
|
||||||
|
S q;
|
||||||
float texcoord[32];
|
float texcoord[32];
|
||||||
unsigned char ntexcoord;
|
unsigned char ntexcoord;
|
||||||
int texcoordind;
|
int texcoordind;
|
||||||
|
|
@ -162,7 +167,7 @@ static const PropDescriptor &VertDesc(int i)
|
||||||
/*01*/ {"vertex", "y", ply::T_FLOAT, PlyType<ScalarType>(),offsetof(LoadPly_VertAux<ScalarType>,p) + sizeof(ScalarType),0,0,0,0,0 ,0},
|
/*01*/ {"vertex", "y", ply::T_FLOAT, PlyType<ScalarType>(),offsetof(LoadPly_VertAux<ScalarType>,p) + sizeof(ScalarType),0,0,0,0,0 ,0},
|
||||||
/*02*/ {"vertex", "z", ply::T_FLOAT, PlyType<ScalarType>(),offsetof(LoadPly_VertAux<ScalarType>,p) + 2*sizeof(ScalarType),0,0,0,0,0 ,0},
|
/*02*/ {"vertex", "z", ply::T_FLOAT, PlyType<ScalarType>(),offsetof(LoadPly_VertAux<ScalarType>,p) + 2*sizeof(ScalarType),0,0,0,0,0 ,0},
|
||||||
/*03*/ {"vertex", "flags", ply::T_INT, ply::T_INT, offsetof(LoadPly_VertAux<ScalarType>,flags),0,0,0,0,0 ,0},
|
/*03*/ {"vertex", "flags", ply::T_INT, ply::T_INT, offsetof(LoadPly_VertAux<ScalarType>,flags),0,0,0,0,0 ,0},
|
||||||
/*04*/ {"vertex", "quality", ply::T_FLOAT, ply::T_FLOAT, offsetof(LoadPly_VertAux<ScalarType>,q),0,0,0,0,0 ,0},
|
/*04*/ {"vertex", "quality", ply::T_FLOAT, ply::T_FLOAT, offsetof(LoadPly_VertAux<float>,q),0,0,0,0,0 ,0},
|
||||||
/*05*/ {"vertex", "red", ply::T_UCHAR, ply::T_UCHAR, offsetof(LoadPly_VertAux<ScalarType>,r),0,0,0,0,0 ,0},
|
/*05*/ {"vertex", "red", ply::T_UCHAR, ply::T_UCHAR, offsetof(LoadPly_VertAux<ScalarType>,r),0,0,0,0,0 ,0},
|
||||||
/*06*/ {"vertex", "green", ply::T_UCHAR, ply::T_UCHAR, offsetof(LoadPly_VertAux<ScalarType>,g),0,0,0,0,0 ,0},
|
/*06*/ {"vertex", "green", ply::T_UCHAR, ply::T_UCHAR, offsetof(LoadPly_VertAux<ScalarType>,g),0,0,0,0,0 ,0},
|
||||||
/*07*/ { "vertex", "blue", ply::T_UCHAR, ply::T_UCHAR, offsetof(LoadPly_VertAux<ScalarType>,b),0,0,0,0,0 ,0},
|
/*07*/ { "vertex", "blue", ply::T_UCHAR, ply::T_UCHAR, offsetof(LoadPly_VertAux<ScalarType>,b),0,0,0,0,0 ,0},
|
||||||
|
|
@ -190,41 +195,50 @@ static const PropDescriptor &VertDesc(int i)
|
||||||
/*28*/ {"vertex", "ny", ply::T_DOUBLE, PlyType<ScalarType>(),offsetof(LoadPly_VertAux<ScalarType>,n) + 1*sizeof(ScalarType),0,0,0,0,0 ,0},
|
/*28*/ {"vertex", "ny", ply::T_DOUBLE, PlyType<ScalarType>(),offsetof(LoadPly_VertAux<ScalarType>,n) + 1*sizeof(ScalarType),0,0,0,0,0 ,0},
|
||||||
/*29*/ {"vertex", "nz", ply::T_DOUBLE, PlyType<ScalarType>(),offsetof(LoadPly_VertAux<ScalarType>,n) + 2*sizeof(ScalarType),0,0,0,0,0 ,0},
|
/*29*/ {"vertex", "nz", ply::T_DOUBLE, PlyType<ScalarType>(),offsetof(LoadPly_VertAux<ScalarType>,n) + 2*sizeof(ScalarType),0,0,0,0,0 ,0},
|
||||||
/*30*/ {"vertex", "radius", ply::T_DOUBLE, PlyType<ScalarType>(),offsetof(LoadPly_VertAux<ScalarType>,radius),0,0,0,0,0 ,0},
|
/*30*/ {"vertex", "radius", ply::T_DOUBLE, PlyType<ScalarType>(),offsetof(LoadPly_VertAux<ScalarType>,radius),0,0,0,0,0 ,0},
|
||||||
/*31*/ {"vertex", "quality", ply::T_DOUBLE, PlyType<ScalarType>(),offsetof(LoadPly_VertAux<ScalarType>,q),0,0,0,0,0 ,0}
|
/*31*/ {"vertex", "quality", ply::T_DOUBLE, ply::T_DOUBLE,offsetof(LoadPly_VertAux<double>,q),0,0,0,0,0 ,0}
|
||||||
};
|
};
|
||||||
return pv[i];
|
return pv[i];
|
||||||
}
|
}
|
||||||
|
|
||||||
#define _FACEDESC_FIRST_ 10 // the first descriptor with possible vertex indices
|
#define _FACEDESC_FIRST_ 13 // the first descriptor with possible vertex indices
|
||||||
#define _FACEDESC_LAST_ 22
|
#define _FACEDESC_LAST_ 29
|
||||||
static const PropDescriptor &FaceDesc(int i)
|
static const PropDescriptor &FaceDesc(int i)
|
||||||
{
|
{
|
||||||
static const PropDescriptor qf[_FACEDESC_LAST_]=
|
static const PropDescriptor qf[_FACEDESC_LAST_]=
|
||||||
{
|
{
|
||||||
/* on file on memory on file on memory */
|
/* on file on memory on file on memory */
|
||||||
/* 0 */ {"face", "vertex_indices", ply::T_INT, ply::T_INT, offsetof(LoadPly_FaceAux,v), 1,0,ply::T_UCHAR, ply::T_UCHAR,offsetof(LoadPly_FaceAux,size) ,0},
|
/* 0 */ {"face", "vertex_indices", ply::T_INT, ply::T_INT, offsetof(LoadPly_FaceAux<ScalarType>,v), 1,0,ply::T_UCHAR, ply::T_UCHAR,offsetof(LoadPly_FaceAux<ScalarType>,size) ,0},
|
||||||
/* 1 */ {"face", "flags", ply::T_INT, ply::T_INT, offsetof(LoadPly_FaceAux,flags), 0,0,0,0,0 ,0},
|
/* 1 */ {"face", "flags", ply::T_INT, ply::T_INT, offsetof(LoadPly_FaceAux<ScalarType>,flags), 0,0,0,0,0 ,0},
|
||||||
/* 2 */ {"face", "quality", ply::T_FLOAT, ply::T_FLOAT, offsetof(LoadPly_FaceAux,q), 0,0,0,0,0 ,0},
|
/* 2 */ {"face", "quality", ply::T_FLOAT, ply::T_FLOAT, offsetof(LoadPly_FaceAux<ScalarType>,q), 0,0,0,0,0 ,0},
|
||||||
/* 3 */ {"face", "texcoord", ply::T_FLOAT, ply::T_FLOAT, offsetof(LoadPly_FaceAux,texcoord), 1,0,ply::T_UCHAR, ply::T_UCHAR,offsetof(LoadPly_FaceAux,ntexcoord) ,0},
|
/* 3 */ {"face", "texcoord", ply::T_FLOAT, ply::T_FLOAT, offsetof(LoadPly_FaceAux<ScalarType>,texcoord), 1,0,ply::T_UCHAR, ply::T_UCHAR,offsetof(LoadPly_FaceAux<ScalarType>,ntexcoord) ,0},
|
||||||
/* 4 */ {"face", "color", ply::T_FLOAT, ply::T_FLOAT, offsetof(LoadPly_FaceAux,colors), 1,0,ply::T_UCHAR, ply::T_UCHAR,offsetof(LoadPly_FaceAux,ncolors) ,0},
|
/* 4 */ {"face", "color", ply::T_FLOAT, ply::T_FLOAT, offsetof(LoadPly_FaceAux<ScalarType>,colors), 1,0,ply::T_UCHAR, ply::T_UCHAR,offsetof(LoadPly_FaceAux<ScalarType>,ncolors) ,0},
|
||||||
/* 5 */ {"face", "texnumber", ply::T_INT, ply::T_INT, offsetof(LoadPly_FaceAux,texcoordind), 0,0,0,0,0 ,0},
|
/* 5 */ {"face", "texnumber", ply::T_INT, ply::T_INT, offsetof(LoadPly_FaceAux<ScalarType>,texcoordind), 0,0,0,0,0 ,0},
|
||||||
/* 6 */ {"face", "red" , ply::T_UCHAR, ply::T_UCHAR, offsetof(LoadPly_FaceAux,r), 0,0,0,0,0 ,0},
|
/* 6 */ {"face", "red" , ply::T_UCHAR, ply::T_UCHAR, offsetof(LoadPly_FaceAux<ScalarType>,r), 0,0,0,0,0 ,0},
|
||||||
/* 7 */ {"face", "green", ply::T_UCHAR, ply::T_UCHAR, offsetof(LoadPly_FaceAux,g), 0,0,0,0,0 ,0},
|
/* 7 */ {"face", "green", ply::T_UCHAR, ply::T_UCHAR, offsetof(LoadPly_FaceAux<ScalarType>,g), 0,0,0,0,0 ,0},
|
||||||
/* 8 */ {"face", "blue", ply::T_UCHAR, ply::T_UCHAR, offsetof(LoadPly_FaceAux,b), 0,0,0,0,0 ,0},
|
/* 8 */ {"face", "blue", ply::T_UCHAR, ply::T_UCHAR, offsetof(LoadPly_FaceAux<ScalarType>,b), 0,0,0,0,0 ,0},
|
||||||
/* 9 */ {"face", "alpha", ply::T_UCHAR, ply::T_UCHAR, offsetof(LoadPly_FaceAux,a), 0,0,0,0,0 ,0},
|
/* 9 */ {"face", "alpha", ply::T_UCHAR, ply::T_UCHAR, offsetof(LoadPly_FaceAux<ScalarType>,a), 0,0,0,0,0 ,0},
|
||||||
/* 10 */ {"face", "vertex_index", ply::T_INT, ply::T_INT, offsetof(LoadPly_FaceAux,v), 1,0,ply::T_UCHAR, ply::T_CHAR,offsetof(LoadPly_FaceAux,size) ,0},
|
/* 10 */ {"face", "nx", ply::T_FLOAT, PlyType<ScalarType>(),offsetof(LoadPly_FaceAux<ScalarType>,n) ,0,0,0,0,0 ,0},
|
||||||
/* 11 */ {"face", "vertex_index", ply::T_INT, ply::T_INT, offsetof(LoadPly_FaceAux,v), 1,0,ply::T_CHAR, ply::T_CHAR,offsetof(LoadPly_FaceAux,size) ,0},
|
/* 11 */ {"face", "ny", ply::T_FLOAT, PlyType<ScalarType>(),offsetof(LoadPly_FaceAux<ScalarType>,n) + 1*sizeof(ScalarType),0,0,0,0,0 ,0},
|
||||||
/* 12 */ {"face", "vertex_index", ply::T_INT, ply::T_INT, offsetof(LoadPly_FaceAux,v), 1,0,ply::T_INT, ply::T_CHAR,offsetof(LoadPly_FaceAux,size) ,0},
|
/* 12 */ {"face", "nz", ply::T_FLOAT, PlyType<ScalarType>(),offsetof(LoadPly_FaceAux<ScalarType>,n) + 2*sizeof(ScalarType),0,0,0,0,0 ,0},
|
||||||
|
/* 13 */ {"face", "vertex_index", ply::T_INT, ply::T_INT, offsetof(LoadPly_FaceAux<ScalarType>,v), 1,0,ply::T_UCHAR, ply::T_CHAR,offsetof(LoadPly_FaceAux<ScalarType>,size) ,0},
|
||||||
|
/* 14 */ {"face", "vertex_index", ply::T_INT, ply::T_INT, offsetof(LoadPly_FaceAux<ScalarType>,v), 1,0,ply::T_CHAR, ply::T_CHAR,offsetof(LoadPly_FaceAux<ScalarType>,size) ,0},
|
||||||
|
/* 15 */ {"face", "vertex_index", ply::T_INT, ply::T_INT, offsetof(LoadPly_FaceAux<ScalarType>,v), 1,0,ply::T_INT, ply::T_CHAR,offsetof(LoadPly_FaceAux<ScalarType>,size) ,0},
|
||||||
|
|
||||||
|
/* 16 */ {"face", "vertex_indices", ply::T_INT, ply::T_INT, offsetof(LoadPly_FaceAux<ScalarType>,v), 1,0,ply::T_CHAR, ply::T_CHAR,offsetof(LoadPly_FaceAux<ScalarType>,size) ,0},
|
||||||
|
/* 17 */ {"face", "vertex_indices", ply::T_INT, ply::T_INT, offsetof(LoadPly_FaceAux<ScalarType>,v), 1,0,ply::T_INT, ply::T_CHAR,offsetof(LoadPly_FaceAux<ScalarType>,size) ,0},
|
||||||
|
/* 18 */ {"face", "vertex_indices", ply::T_UINT, ply::T_INT, offsetof(LoadPly_FaceAux<ScalarType>,v), 1,0,ply::T_UCHAR, ply::T_CHAR,offsetof(LoadPly_FaceAux<ScalarType>,size) ,0},
|
||||||
|
/* 19 */ {"face", "vertex_indices", ply::T_UINT, ply::T_INT, offsetof(LoadPly_FaceAux<ScalarType>,v), 1,0,ply::T_CHAR, ply::T_CHAR,offsetof(LoadPly_FaceAux<ScalarType>,size) ,0},
|
||||||
|
/* 20 */ {"face", "vertex_indices", ply::T_UINT, ply::T_INT, offsetof(LoadPly_FaceAux<ScalarType>,v), 1,0,ply::T_INT, ply::T_CHAR,offsetof(LoadPly_FaceAux<ScalarType>,size) ,0},
|
||||||
|
/* 21 */ {"face", "vertex_indices", ply::T_UINT, ply::T_INT, offsetof(LoadPly_FaceAux<ScalarType>,v), 1,0,ply::T_USHORT,ply::T_CHAR,offsetof(LoadPly_FaceAux<ScalarType>,size) ,0},
|
||||||
|
/* 22 */ {"face", "vertex_indices", ply::T_SHORT, ply::T_INT, offsetof(LoadPly_FaceAux<ScalarType>,v), 1,0,ply::T_CHAR, ply::T_CHAR,offsetof(LoadPly_FaceAux<ScalarType>,size) ,0},
|
||||||
|
/* 23 */ {"face", "vertex_indices", ply::T_SHORT, ply::T_INT, offsetof(LoadPly_FaceAux<ScalarType>,v), 1,0,ply::T_UCHAR, ply::T_CHAR,offsetof(LoadPly_FaceAux<ScalarType>,size) ,0},
|
||||||
|
/* 24 */ {"face", "vertex_indices", ply::T_SHORT, ply::T_INT, offsetof(LoadPly_FaceAux<ScalarType>,v), 1,0,ply::T_INT, ply::T_CHAR,offsetof(LoadPly_FaceAux<ScalarType>,size) ,0},
|
||||||
|
// DOUBLE
|
||||||
|
/* 25 */ {"face", "quality", ply::T_DOUBLE, ply::T_DOUBLE, offsetof(LoadPly_FaceAux<double>,q), 0,0,0,0,0 ,0},
|
||||||
|
/* 26 */ {"face", "nx", ply::T_DOUBLE, PlyType<ScalarType>(),offsetof(LoadPly_FaceAux<ScalarType>,n) ,0,0,0,0,0 ,0},
|
||||||
|
/* 27 */ {"face", "ny", ply::T_DOUBLE, PlyType<ScalarType>(),offsetof(LoadPly_FaceAux<ScalarType>,n) + 1*sizeof(ScalarType),0,0,0,0,0 ,0},
|
||||||
|
/* 28 */ {"face", "nz", ply::T_DOUBLE, PlyType<ScalarType>(),offsetof(LoadPly_FaceAux<ScalarType>,n) + 2*sizeof(ScalarType),0,0,0,0,0 ,0}
|
||||||
|
|
||||||
/* 13 */ {"face", "vertex_indices", ply::T_INT, ply::T_INT, offsetof(LoadPly_FaceAux,v), 1,0,ply::T_CHAR, ply::T_CHAR,offsetof(LoadPly_FaceAux,size) ,0},
|
|
||||||
/* 14 */ {"face", "vertex_indices", ply::T_INT, ply::T_INT, offsetof(LoadPly_FaceAux,v), 1,0,ply::T_INT, ply::T_CHAR,offsetof(LoadPly_FaceAux,size) ,0},
|
|
||||||
/* 15 */ {"face", "vertex_indices", ply::T_UINT, ply::T_INT, offsetof(LoadPly_FaceAux,v), 1,0,ply::T_UCHAR, ply::T_CHAR,offsetof(LoadPly_FaceAux,size) ,0},
|
|
||||||
/* 16 */ {"face", "vertex_indices", ply::T_UINT, ply::T_INT, offsetof(LoadPly_FaceAux,v), 1,0,ply::T_CHAR, ply::T_CHAR,offsetof(LoadPly_FaceAux,size) ,0},
|
|
||||||
/* 17 */ {"face", "vertex_indices", ply::T_UINT, ply::T_INT, offsetof(LoadPly_FaceAux,v), 1,0,ply::T_INT, ply::T_CHAR,offsetof(LoadPly_FaceAux,size) ,0},
|
|
||||||
/* 18 */ {"face", "vertex_indices", ply::T_UINT, ply::T_INT, offsetof(LoadPly_FaceAux,v), 1,0,ply::T_USHORT,ply::T_CHAR,offsetof(LoadPly_FaceAux,size) ,0},
|
|
||||||
/* 19 */ {"face", "vertex_indices", ply::T_SHORT, ply::T_INT, offsetof(LoadPly_FaceAux,v), 1,0,ply::T_CHAR, ply::T_CHAR,offsetof(LoadPly_FaceAux,size) ,0},
|
|
||||||
/* 20 */ {"face", "vertex_indices", ply::T_SHORT, ply::T_INT, offsetof(LoadPly_FaceAux,v), 1,0,ply::T_UCHAR, ply::T_CHAR,offsetof(LoadPly_FaceAux,size) ,0},
|
|
||||||
/* 21 */ {"face", "vertex_indices", ply::T_SHORT, ply::T_INT, offsetof(LoadPly_FaceAux,v), 1,0,ply::T_INT, ply::T_CHAR,offsetof(LoadPly_FaceAux,size) ,0},
|
|
||||||
};
|
};
|
||||||
return qf[i];
|
return qf[i];
|
||||||
}
|
}
|
||||||
|
|
@ -358,7 +372,7 @@ static int Open( OpenMeshType &m, const char * filename, PlyInfo &pi )
|
||||||
{
|
{
|
||||||
assert(filename!=0);
|
assert(filename!=0);
|
||||||
std::vector<VertexPointer> index;
|
std::vector<VertexPointer> index;
|
||||||
LoadPly_FaceAux fa;
|
LoadPly_FaceAux<ScalarType> fa;
|
||||||
LoadPly_EdgeAux ea;
|
LoadPly_EdgeAux ea;
|
||||||
LoadPly_TristripAux tsa;
|
LoadPly_TristripAux tsa;
|
||||||
LoadPly_VertAux<ScalarType> va;
|
LoadPly_VertAux<ScalarType> va;
|
||||||
|
|
@ -508,10 +522,20 @@ static int Open( OpenMeshType &m, const char * filename, PlyInfo &pi )
|
||||||
if( pf.AddToRead(FaceDesc(1))!=-1 )
|
if( pf.AddToRead(FaceDesc(1))!=-1 )
|
||||||
pi.mask |= Mask::IOM_FACEFLAGS;
|
pi.mask |= Mask::IOM_FACEFLAGS;
|
||||||
|
|
||||||
|
if (vcg::tri::HasPerFaceNormal(m))
|
||||||
|
{
|
||||||
|
if (pf.AddToRead(FaceDesc(10)) != -1 && pf.AddToRead(FaceDesc(11)) != -1 && pf.AddToRead(FaceDesc(12)) != -1)
|
||||||
|
pi.mask |= Mask::IOM_FACENORMAL;
|
||||||
|
else if (pf.AddToRead(FaceDesc(26)) != -1 && pf.AddToRead(FaceDesc(27)) != -1 && pf.AddToRead(FaceDesc(28)) != -1)
|
||||||
|
pi.mask |= Mask::IOM_FACENORMAL;
|
||||||
|
}
|
||||||
|
|
||||||
if( vcg::tri::HasPerFaceQuality(m) )
|
if( vcg::tri::HasPerFaceQuality(m) )
|
||||||
{
|
{
|
||||||
if( pf.AddToRead(FaceDesc(2))!=-1 )
|
if( pf.AddToRead(FaceDesc(2))!=-1 )
|
||||||
pi.mask |= Mask::IOM_FACEQUALITY;
|
pi.mask |= Mask::IOM_FACEQUALITY;
|
||||||
|
else if (pf.AddToRead(FaceDesc(25)) != -1)
|
||||||
|
pi.mask |= Mask::IOM_FACEQUALITY;
|
||||||
}
|
}
|
||||||
|
|
||||||
if( vcg::tri::HasPerFaceColor(m) )
|
if( vcg::tri::HasPerFaceColor(m) )
|
||||||
|
|
@ -568,7 +592,7 @@ static int Open( OpenMeshType &m, const char * filename, PlyInfo &pi )
|
||||||
size_t totsz=0;
|
size_t totsz=0;
|
||||||
for(size_t i=0;i<pi.FaceDescriptorVec.size();i++){
|
for(size_t i=0;i<pi.FaceDescriptorVec.size();i++){
|
||||||
FPV[i] = pi.FaceDescriptorVec[i];
|
FPV[i] = pi.FaceDescriptorVec[i];
|
||||||
FPV[i].offset1=offsetof(LoadPly_FaceAux,data)+totsz;
|
FPV[i].offset1=offsetof(LoadPly_FaceAux<ScalarType>,data)+totsz;
|
||||||
totsz+=pi.FaceDescriptorVec[i].memtypesize();
|
totsz+=pi.FaceDescriptorVec[i].memtypesize();
|
||||||
if( pf.AddToRead(FPV[i])==-1 ) { pi.status = pf.GetError(); return pi.status; }
|
if( pf.AddToRead(FPV[i])==-1 ) { pi.status = pf.GetError(); return pi.status; }
|
||||||
}
|
}
|
||||||
|
|
@ -664,7 +688,7 @@ static int Open( OpenMeshType &m, const char * filename, PlyInfo &pi )
|
||||||
(*vi).Flags() = va.flags;
|
(*vi).Flags() = va.flags;
|
||||||
|
|
||||||
if( pi.mask & Mask::IOM_VERTQUALITY )
|
if( pi.mask & Mask::IOM_VERTQUALITY )
|
||||||
(*vi).Q() = (typename OpenMeshType::VertexType::QualityType)va.q;
|
(*vi).Q() = (VertQualityType)va.q;
|
||||||
|
|
||||||
if( pi.mask & Mask::IOM_VERTNORMAL )
|
if( pi.mask & Mask::IOM_VERTNORMAL )
|
||||||
{
|
{
|
||||||
|
|
@ -763,6 +787,13 @@ static int Open( OpenMeshType &m, const char * filename, PlyInfo &pi )
|
||||||
(*fi).Flags() = fa.flags;
|
(*fi).Flags() = fa.flags;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (pi.mask & Mask::IOM_FACENORMAL)
|
||||||
|
{
|
||||||
|
(*fi).N()[0] = fa.n[0];
|
||||||
|
(*fi).N()[1] = fa.n[1];
|
||||||
|
(*fi).N()[2] = fa.n[2];
|
||||||
|
}
|
||||||
|
|
||||||
if( pi.mask & Mask::IOM_FACEQUALITY )
|
if( pi.mask & Mask::IOM_FACEQUALITY )
|
||||||
{
|
{
|
||||||
(*fi).Q() = (typename OpenMeshType::FaceType::QualityType) fa.q;
|
(*fi).Q() = (typename OpenMeshType::FaceType::QualityType) fa.q;
|
||||||
|
|
@ -1165,8 +1196,14 @@ static bool LoadMask(const char * filename, int &mask, PlyInfo &pi)
|
||||||
|
|
||||||
if( pf.AddToRead(FaceDesc(0))!=-1 ) mask |= Mask::IOM_FACEINDEX;
|
if( pf.AddToRead(FaceDesc(0))!=-1 ) mask |= Mask::IOM_FACEINDEX;
|
||||||
if( pf.AddToRead(FaceDesc(1))!=-1 ) mask |= Mask::IOM_FACEFLAGS;
|
if( pf.AddToRead(FaceDesc(1))!=-1 ) mask |= Mask::IOM_FACEFLAGS;
|
||||||
|
if( pf.AddToRead(FaceDesc(10))!=-1 &&
|
||||||
|
pf.AddToRead(FaceDesc(11))!=-1 &&
|
||||||
|
pf.AddToRead(FaceDesc(12))!=-1 ) mask |= Mask::IOM_FACENORMAL;
|
||||||
|
if( pf.AddToRead(FaceDesc(26))!=-1 &&
|
||||||
|
pf.AddToRead(FaceDesc(27))!=-1 &&
|
||||||
|
pf.AddToRead(FaceDesc(28))!=-1 ) mask |= Mask::IOM_FACENORMAL;
|
||||||
if( pf.AddToRead(FaceDesc(2))!=-1 ) mask |= Mask::IOM_FACEQUALITY;
|
if( pf.AddToRead(FaceDesc(2))!=-1 ) mask |= Mask::IOM_FACEQUALITY;
|
||||||
|
if( pf.AddToRead(FaceDesc(25))!=-1 ) mask |= Mask::IOM_FACEQUALITY;
|
||||||
if( pf.AddToRead(FaceDesc(3))!=-1 ) mask |= Mask::IOM_WEDGTEXCOORD;
|
if( pf.AddToRead(FaceDesc(3))!=-1 ) mask |= Mask::IOM_WEDGTEXCOORD;
|
||||||
if( pf.AddToRead(FaceDesc(5))!=-1 ) mask |= Mask::IOM_WEDGTEXMULTI;
|
if( pf.AddToRead(FaceDesc(5))!=-1 ) mask |= Mask::IOM_WEDGTEXMULTI;
|
||||||
if( pf.AddToRead(FaceDesc(4))!=-1 ) mask |= Mask::IOM_WEDGCOLOR;
|
if( pf.AddToRead(FaceDesc(4))!=-1 ) mask |= Mask::IOM_WEDGCOLOR;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue