diff --git a/wrap/io_trimesh/export_ply.h b/wrap/io_trimesh/export_ply.h index ae383c47..b9f7c173 100644 --- a/wrap/io_trimesh/export_ply.h +++ b/wrap/io_trimesh/export_ply.h @@ -294,6 +294,13 @@ static int Save(SaveMeshType &m, const char * filename, bool binary, PlyInfo &p ); } + if( tri::HasPerVertexRadius(m) && (pi.mask & Mask::IOM_VERTRADIUS) ) + { + fprintf(fpout, + "property float radius\n" + ); + } + for(i=0;iQ() ),sizeof(float),1,fpout); + if( HasPerVertexRadius(m) && (pi.mask & Mask::IOM_VERTRADIUS) ) + fwrite(&( vp->R() ),sizeof(float),1,fpout); + for(i=0;iQ()); + if( HasPerVertexRadius(m) && (pi.mask & Mask::IOM_VERTRADIUS) ) + fprintf(fpout,"%g ",vp->R()); + for(i=0;i(),offsetof(LoadPly_VertAux,p),0,0,0,0,0 ,0}, /*01*/ {"vertex", "y", ply::T_FLOAT, PlyType(),offsetof(LoadPly_VertAux,p) + sizeof(ScalarType),0,0,0,0,0 ,0}, /*02*/ {"vertex", "z", ply::T_FLOAT, PlyType(),offsetof(LoadPly_VertAux,p) + 2*sizeof(ScalarType),0,0,0,0,0 ,0}, @@ -288,9 +291,13 @@ static const PropDescriptor &VertDesc(int i) /*09*/ {"vertex", "diffuse_green", ply::T_UCHAR, ply::T_UCHAR, offsetof(LoadPly_VertAux,g),0,0,0,0,0 ,0}, /*10*/ {"vertex", "diffuse_blue" , ply::T_UCHAR, ply::T_UCHAR, offsetof(LoadPly_VertAux,b),0,0,0,0,0 ,0}, /*11*/ {"vertex", "confidence",ply::T_FLOAT, ply::T_FLOAT, offsetof(LoadPly_VertAux,q),0,0,0,0,0 ,0}, -/*12*/ {"vertex", "nx", ply::T_FLOAT, PlyType(),offsetof(LoadPly_VertAux,n),0,0,0,0,0 ,0}, -/*13*/ {"vertex", "ny", ply::T_FLOAT, PlyType(),offsetof(LoadPly_VertAux,n) + sizeof(ScalarType),0,0,0,0,0 ,0}, +/*12*/ {"vertex", "nx", ply::T_FLOAT, PlyType(),offsetof(LoadPly_VertAux,n) ,0,0,0,0,0 ,0}, +/*13*/ {"vertex", "ny", ply::T_FLOAT, PlyType(),offsetof(LoadPly_VertAux,n) + 1*sizeof(ScalarType),0,0,0,0,0 ,0}, /*14*/ {"vertex", "nz", ply::T_FLOAT, PlyType(),offsetof(LoadPly_VertAux,n) + 2*sizeof(ScalarType),0,0,0,0,0 ,0}, +/*15*/ {"vertex", "radius", ply::T_FLOAT, ply::T_FLOAT, offsetof(LoadPly_VertAux,radius),0,0,0,0,0 ,0}, +/*16*/ {"vertex", "texture_u", ply::T_FLOAT, ply::T_FLOAT, offsetof(LoadPly_VertAux,u),0,0,0,0,0 ,0}, +/*17*/ {"vertex", "texture_v", ply::T_FLOAT, ply::T_FLOAT, offsetof(LoadPly_VertAux,v),0,0,0,0,0 ,0}, +/*18*/ {"vertex", "texture_w", ply::T_FLOAT, ply::T_FLOAT, offsetof(LoadPly_VertAux,w),0,0,0,0,0 ,0}, }; return pv[i]; } @@ -551,7 +558,11 @@ static int Open( OpenMeshType &m, const char * filename, PlyInfo &pi ) pi.mask |= Mask::IOM_VERTCOLOR; } } - + if( VertexType::HasRadius() ) + { + pf.AddToRead(VertDesc(15)); + pi.mask |= Mask::IOM_VERTRADIUS; + } // se ci sono i flag per vertice ci devono essere anche i flag per faccia if( pf.AddToRead(FaceDesc(1))!=-1 ) pi.mask |= Mask::IOM_FACEFLAGS; @@ -726,6 +737,8 @@ static int Open( OpenMeshType &m, const char * filename, PlyInfo &pi ) (*vi).C()[2] = va.b; (*vi).C()[3] = 255; } + if( pi.mask & Mask::IOM_VERTRADIUS ) + (*vi).R() = va.radius; for(int k=0;k