29 #include<vcg/complex/complex.h>
31 #include <vcg/complex/algorithms/clustering.h>
33 #include <wrap/io_trimesh/import.h>
34 #include <wrap/io_trimesh/export.h>
39 struct MyUsedTypes :
public vcg::UsedTypes< vcg::Use<MyVertex>::AsVertexType, vcg::Use<MyFace>::AsFaceType>{};
41 class MyVertex :
public vcg::Vertex< MyUsedTypes, vcg::vertex::Coord3f, vcg::vertex::Normal3f, vcg::vertex::BitFlags >{};
42 class MyFace :
public vcg::Face < MyUsedTypes, vcg::face::VertexRef, vcg::face::Normal3f, vcg::face::BitFlags > {};
43 class MyMesh :
public vcg::tri::TriMesh< std::vector<MyVertex>, std::vector<MyFace> > {};
45 int main(
int argc,
char **argv)
50 "Usage: trimesh_clustering filein.ply fileout.ply [opt] \n"
52 "-k cellnum approx number of cluster that should be defined; (default 10e5)\n"
53 "-s size in absolute units the size of the clustering cell (override the previous param)\n"
54 "-d enable the duplication of faces for double surfaces\n"
67 { printf(
"Error unable to parse option '%s'\n",argv[i]); exit(0); }
70 case 'k' : CellNum=atoi(argv[i+1]); ++i; printf(
"Using %i clustering cells\n",CellNum);
break;
71 case 's' : CellSize=atof(argv[i+1]); ++i; printf(
"Using %5f as clustering cell size\n",CellSize);
break;
72 case 'd' : DupFace=
true; printf(
"Enabling the duplication of faces for double surfaces\n");
break;
74 default : {printf(
"Error unable to parse option '%s'\n",argv[i]); exit(0);}
80 if(vcg::tri::io::ImporterPLY<MyMesh>::Open(m,argv[1])!=0)
82 printf(
"Error reading file %s\n",argv[1]);
88 printf(
"Input mesh vn:%i fn:%i\n",m.VN(),m.FN());
89 vcg::tri::Clustering<MyMesh, vcg::tri::AverageColorCell<MyMesh> > Grid;
90 Grid.DuplicateFaceParam=DupFace;
91 Grid.Init(m.bbox,CellNum,CellSize);
93 printf(
"Clustering to %i cells\n",Grid.Grid.siz[0]*Grid.Grid.siz[1]*Grid.Grid.siz[2] );
94 printf(
"Grid of %i x %i x %i cells\n",Grid.Grid.siz[0],Grid.Grid.siz[1],Grid.Grid.siz[2]);
95 printf(
"with cells size of %.2f x %.2f x %.2f units\n",Grid.Grid.voxel[0],Grid.Grid.voxel[1],Grid.Grid.voxel[2]);
99 printf(
"Output mesh vn:%i fn:%i\n",m.VN(),m.FN());
101 vcg::tri::io::ExporterPLY<MyMesh>::Save(m,argv[2]);