diff --git a/wrap/io_trimesh/export_field.h b/wrap/io_trimesh/export_field.h index c9aeaa6e..f3f97efe 100644 --- a/wrap/io_trimesh/export_field.h +++ b/wrap/io_trimesh/export_field.h @@ -39,7 +39,90 @@ class ExporterFIELD typedef typename MeshType::CoordType CoordType; public: + + ///load a field on the mesh, it could be a vfield file (per vertex) + ///or an ffield file (per face) + static void SaveFaceFIELD(MeshType &mesh, + const char *path) + { + + FILE *f = fopen(path,"wt"); + //if (!f)return false; +// char word[512]; word[0]=0; +// fscanf(f,"%s",word); +// char c=0; +// if (word[0]=='#') { +// // skip comment line +// while (fscanf(f,"%c",&c)!=EOF) if (c=='\n') break; +// } +// else +// { +// return false; +// } + int nf = mesh.fn;//-1; + fprintf(f,"# frame generated with VCG \n"); + fprintf(f,"target frame \n"); + fprintf(f,"%d\n",nf); +// if (fscanf(f,"%d",&nnv)!=1) +// { +// while (fscanf(f,"%c",&c)!=EOF) if (c=='\n') break; // skip +// fscanf(f,"%d",&nnv); +// } +// int targetnum=mesh.fn; +// if (per_vertex) +// targetnum=mesh.vn; +// if (nnv != (int)targetnum) +// { +// //if (errorMsg) sprintf(errorMsg,"Wrong element number. Found: %d. Expected: %d.",nnv,mesh->vn); +// return false; +// } +// +// if( per_vertex && !HasPerVertexCurvatureDir(mesh)) throw vcg::MissingComponentException("PerVertexCurvatureDir"); +// if(!per_vertex && !HasPerFaceCurvatureDir(mesh)) throw vcg::MissingComponentException("PerFaceCurvatureDir"); + if (!HasPerFaceCurvatureDir(mesh)) + throw vcg::MissingComponentException("PerFaceCurvatureDir"); + + fprintf(f,"k1 k2 k1v_x k1v_y k1v_z k2v_x k2v_y k2v_z\n"); +// while (fscanf(f,"%c",&c)!=EOF) if (c=='\n') break; // skip +// // skip strange string line +// while (fscanf(f,"%c",&c)!=EOF) if (c=='\n') break; + for (int i=0; i u; + u.Import(mesh.face[i].PD1()); + vcg::Point3 v; + v.Import(mesh.face[i].PD2()); + + fprintf(f,"1 1 %f %f %f %f %f %f\n", + (u.X()),(u.Y()),(u.Z()), + (v.X()),(v.Y()),(v.Z())); +// 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; +// } +// +// u.Normalize(); +// v.Normalize(); +// +// if (per_vertex) +// { +// 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); +// } + } + fclose(f); + } + ///Save a 4 rosy format file as used by ///Interactive Visualization of Rotational Symmetry Fields on Surfaces ///Jonathan Palacios and Eugene Zhang