23 #include<vcg/complex/complex.h>
24 #include <vcg/complex/algorithms/create/ball_pivoting.h>
27 #include <wrap/io_trimesh/import_ply.h>
28 #include <wrap/io_trimesh/export_ply.h>
36 struct MyUsedTypes :
public UsedTypes< Use<MyVertex> ::AsVertexType,
37 Use<MyFace> ::AsFaceType>{};
39 class MyVertex :
public Vertex< MyUsedTypes, vertex::Coord3f, vertex::Normal3f, vertex::BitFlags, vertex::Mark>{};
40 class MyFace :
public Face < MyUsedTypes, face::VertexRef, face::Normal3f, face::BitFlags > {};
41 class MyMesh :
public vcg::tri::TriMesh< vector<MyVertex>, vector<MyFace> > {};
43 bool callback(
int percent,
const char *str) {
44 cout <<
"str: " << str <<
" " << percent <<
"%\n";
48 int main(
int argc,
char **argv)
53 "Usage: trimesh_ball_pivoting filein.ply fileout.ply [opt]\n"
55 "-r <val> radius of the rolling ball\n"
56 "-c <val> clustering radius (as fraction of radius) default: 0.05\n"
62 float clustering = 0.05;
67 {printf(
"Error unable to parse option '%s'\n",argv[i]); exit(0);}
70 case 'r' : radius = atof(argv[++i]); printf(
"Using %f sphere radius\n",radius);
break;
71 case 'c' : clustering = atof(argv[++i]); printf(
"Using %f clustering radius\n",clustering);
break;
73 default : {printf(
"Error unable to parse option '%s'\n",argv[i]); exit(0);}
78 printf(
"Autodetecting ball radius...\n");
82 if(vcg::tri::io::ImporterPLY<MyMesh>::Open(m,argv[1])!=0)
84 printf(
"Error reading file %s\n",argv[1]);
89 printf(
"Input mesh vn:%i fn:%i\n",m.VN(),m.FN());
93 tri::BallPivoting<MyMesh> pivot(m, radius, clustering);
94 printf(
"Ball radius: %f\nClustering points withing %f radii\n", pivot.radius, clustering);
98 pivot.BuildMesh(callback);
102 printf(
"Output mesh vn:%i fn:%i\n",m.VN(),m.FN());
103 printf(
"Created in :%i msec (%i+%i)\n",t2-t0,t1-t0,t2-t1);
105 vcg::tri::io::ExporterPLY<MyMesh>::Save(m,argv[2]);