24 #include <vcg/complex/complex.h>
26 #include <vcg/complex/algorithms/clean.h>
27 #include <vcg/complex/algorithms/create/platonic.h>
28 #include <vcg/complex/algorithms/polygonal_algorithms.h>
30 #include <wrap/io_trimesh/export_obj.h>
31 #include <wrap/io_trimesh/import_ply.h>
32 #include <wrap/io_trimesh/export_off.h>
33 #include <wrap/io_trimesh/import_off.h>
42 struct TUsedTypes:
public vcg::UsedTypes< vcg::Use<TVertex>::AsVertexType, vcg::Use<TFace>::AsFaceType >{};
46 class TVertex :
public Vertex< TUsedTypes,
52 class TFace :
public Face< TUsedTypes,
61 class TMesh :
public vcg::tri::TriMesh< vector<TVertex>, vector<TFace> > {};
69 struct PUsedTypes:
public vcg::UsedTypes<vcg::Use<PVertex> ::AsVertexType,
70 vcg::Use<PFace> ::AsFaceType>{};
72 class PVertex:
public vcg::Vertex< PUsedTypes,
74 vcg::vertex::Normal3f,
76 vcg::vertex::Qualityf,
78 vcg::vertex::BitFlags>{} ;
80 class PFace:
public vcg::Face<
102 int main(
int,
char **)
106 math::MarsenneTwisterRNG RndGen;
107 tri::io::ImporterOFF<PMesh>::Open(pm,
"../../meshes/fertility_quad.off");
111 float randScale = pm.bbox.Diag()/200.0f;
112 ForEachVertex(pm,[&](PVertex &v){
113 if(v.P()[0] < pm.bbox.Center()[0])
114 v.P() += math::GeneratePointInUnitBallUniform<float,math::MarsenneTwisterRNG>(RndGen)*randScale;
118 ForEachVertex(pm,[&](PVertex &v){
119 if(v.P()[2] < pm.bbox.Center()[2])
124 tri::io::ImporterPLY<TMesh>::Open(tm,
"../../meshes/fertility_tri.ply");
126 printf(
"Input tri mesh has %i %i\n",tm.VN(), tm.FN());
127 tri::io::ExporterOFF<PMesh>::Save(pm,
"./smooth.off");
128 PolygonalAlgorithm<PMesh>::LaplacianReproject(pm,tm,100,0.6,0.3,
true);
129 tri::io::ExporterOFF<PMesh>::Save(pm,
"./smooth2.off");