23 #include<vcg/complex/complex.h>
25 #include<wrap/io_trimesh/import.h>
26 #include<wrap/io_trimesh/export.h>
28 #include<vcg/complex/algorithms/point_sampling.h>
29 #include<vcg/complex/algorithms/clustering.h>
37 struct MyUsedTypes :
public UsedTypes< Use<MyVertex> ::AsVertexType,
38 Use<MyEdge> ::AsEdgeType,
39 Use<MyFace> ::AsFaceType>{};
41 class MyVertex :
public Vertex<MyUsedTypes, vertex::Coord3f, vertex::Normal3f, vertex::BitFlags >{};
42 class MyFace :
public Face< MyUsedTypes, face::FFAdj, face::Normal3f, face::VertexRef, face::BitFlags > {};
43 class MyEdge :
public Edge<MyUsedTypes>{};
44 class MyMesh :
public tri::TriMesh< vector<MyVertex>, vector<MyFace> , vector<MyEdge> > {};
46 int main(
int argc,
char **argv )
50 printf(
"Usage trimesh_base <meshfilename> radius (as perc) (\n");
59 tri::MeshSampler<MyMesh> mps(subM);
60 tri::MeshSampler<MyMesh> mrs(rndM);
62 if(tri::io::Importer<MyMesh>::Open(m,argv[1])!=0)
64 printf(
"Error reading file %s\n",argv[1]);
68 float perc = atof(argv[2]);
70 float radius = m.bbox.Diag() * perc;
71 printf(
"Subsampling a PointCloud of %i vert with %f radius\n",m.VN(),radius);
73 pp.bestSampleChoiceFlag=
false;
75 tri::io::ExporterPLY<MyMesh>::Save(subM,
"PoissonMesh.ply");
76 printf(
"Sampled %i vertices in %5.2f\n",subM.VN(), float(pp.pds.pruneTime+pp.pds.gridTime)/float(CLOCKS_PER_SEC));
79 tri::Clustering<MyMesh, vcg::tri::AverageColorCell<MyMesh> > ClusteringGrid;
80 ClusteringGrid.Init(m.bbox,100000,radius*sqrt(2.0f));
81 ClusteringGrid.AddPointSet(m);
82 ClusteringGrid.ExtractMesh(cluM);
84 tri::io::ExporterPLY<MyMesh>::Save(cluM,
"ClusterMesh.ply");
85 printf(
"Sampled %i vertices in %5.2f\n",cluM.VN(), float(t1-t0)/float(CLOCKS_PER_SEC));
88 int sampleNum = (cluM.VN()+subM.VN())/2;
91 tri::io::ExporterPLY<MyMesh>::Save(rndM,
"RandomMesh.ply");
92 printf(
"Sampled %i vertices in %5.2f\n",rndM.VN(), float(t3-t2)/float(CLOCKS_PER_SEC));