diff --git a/wrap/io_trimesh/import_field.h b/wrap/io_trimesh/import_field.h index 46d333a7..80b45f33 100644 --- a/wrap/io_trimesh/import_field.h +++ b/wrap/io_trimesh/import_field.h @@ -82,7 +82,7 @@ public: } static bool LoadNDF(MeshType &mesh, - const char *path) + const char *path) { FILE *f = fopen(path,"rt"); if (!f) @@ -99,8 +99,8 @@ public: printf("%s\n",skipstr); }while(strcmp(skipstr,"[Pjumps]")!=0); -// fscanf(f,"%s\"",skipstr); -// printf("%s\n",skipstr); + // fscanf(f,"%s\"",skipstr); + // printf("%s\n",skipstr); fseek(f, 7, SEEK_CUR); char final[1]; do{ @@ -112,37 +112,37 @@ public: printf("%s\n",&final[0]); }while(strcmp(final,"\"")!=0); -// printf("%s\n",skipstr); + // printf("%s\n",skipstr); fflush(stdout); -// for (int i=0;i UV[3]; -// UV[0]= vcg::Point2(u0,v0); -// UV[1]= vcg::Point2(u1,v1); -// UV[2]= vcg::Point2(u2,v2); -// CoordType dir1; -// CoordType dir2; -// vcg::tri::CrossField::GradientToCross(mesh.face[i],UV[0],UV[1],UV[2],dir1,dir2); -// dir1.Normalize(); -// dir2.Normalize(); -// mesh.face[i].PD1()=dir1; -// mesh.face[i].PD2()=dir2; -// } -// fclose(f); -// return true; + // for (int i=0;i UV[3]; + // UV[0]= vcg::Point2(u0,v0); + // UV[1]= vcg::Point2(u1,v1); + // UV[2]= vcg::Point2(u2,v2); + // CoordType dir1; + // CoordType dir2; + // vcg::tri::CrossField::GradientToCross(mesh.face[i],UV[0],UV[1],UV[2],dir1,dir2); + // dir1.Normalize(); + // dir2.Normalize(); + // mesh.face[i].PD1()=dir1; + // mesh.face[i].PD2()=dir2; + // } + // fclose(f); + // return true; } ///load a field on the mesh, it could be a vfield file (per vertex) ///or an ffield file (per face) static bool LoadFFIELD(MeshType &mesh, - const char *path, - bool per_vertex=false) + const char *path, + bool per_vertex=false) { FILE *f = fopen(path,"rt"); @@ -188,13 +188,13 @@ public: vcg::Point3 u,v; float a,b; if (fscanf(f, - "%f %f %f %f %f %f %f %f", - &a,&b, - &(v.X()),&(v.Y()),&(v.Z()), - &(u.X()),&(u.Y()),&(u.Z()) - )!=8) { - //if (errorMsg) sprintf(errorMsg,"Format error reading vertex n. %d",i); - return false; + "%f %f %f %f %f %f %f %f", + &a,&b, + &(v.X()),&(v.Y()),&(v.Z()), + &(u.X()),&(u.Y()),&(u.Z()) + )!=8) { + //if (errorMsg) sprintf(errorMsg,"Format error reading vertex n. %d",i); + return false; } u.Normalize(); @@ -202,13 +202,13 @@ public: if (per_vertex) { - mesh.vert[i].PD1().Import(u); - mesh.vert[i].PD2().Import(v); + mesh.vert[i].PD1().Import(u); + mesh.vert[i].PD2().Import(v); } else { - mesh.face[i].PD1().Import(u); - mesh.face[i].PD2().Import(v); + mesh.face[i].PD1().Import(u); + mesh.face[i].PD2().Import(v); } } } @@ -220,9 +220,9 @@ public: ///Interactive Visualization of Rotational Symmetry Fields on Surfaces ///Jonathan Palacios and Eugene Zhang static void Load4ROSY(MeshType &mesh, - const char *path) + const char *path) { - FILE *f = fopen(path,"rt"); + FILE *f = fopen(path,"rt"); int num,symm; fscanf(f,"%d",&num); assert(num==mesh.vn); @@ -317,7 +317,7 @@ public: //Load a 4 rosy format file as pair of angles static bool Load2AngleFace(MeshType &mesh, - const char *path) + const char *path) { FILE *f = fopen(path,"rt"); if (f==NULL)return false; @@ -335,6 +335,38 @@ public: return true; } + static bool LoadCSVField(MeshType &mesh, + const std::string &field_1, + const std::string &field_2, + bool Normalize=true) + { + FILE *f1=NULL; + FILE *f2=NULL; + f1=fopen(field_1.c_str(),"rt"); + if(f1==NULL)return false; + f2=fopen(field_2.c_str(),"rt"); + if(f2==NULL)return false; + for (size_t i=0;i