30 #include <vcg/complex/complex.h>
31 #include <vcg/complex/algorithms/clean.h>
32 #include <vcg/complex/algorithms/intersection.h>
33 #include <vcg/complex/algorithms/refine.h>
34 #include <vcg/complex/algorithms/update/color.h>
35 #include <vcg/complex/algorithms/create/platonic.h>
36 #include<vcg/complex/algorithms/isotropic_remeshing.h>
38 #include <wrap/io_trimesh/export_off.h>
46 struct MyUsedTypes :
public UsedTypes<
47 Use<MyVertex>::AsVertexType,
48 Use<MyFace> ::AsFaceType>{};
51 class MyVertex :
public Vertex< MyUsedTypes, vertex::Coord3f, vertex::VFAdj, vertex::BitFlags, vertex::Normal3f, vertex::Qualityf, vertex::Mark>{};
52 class MyFace :
public Face < MyUsedTypes, face::VertexRef, face::VFAdj, face::FFAdj, face::Color4b, face::BitFlags, face::Mark, face::Normal3f> {};
54 class MyMesh:
public tri::TriMesh< vector<MyVertex>, vector<MyFace > >{};
56 int main(
int ,
char **)
61 printf(
"Created a sphere mesh of %i vertices %i edges\n",m1.VN(),m1.FN());
62 printf(
"Created a cube mesh of %i vertices %i edges\n",m2.VN(),m2.FN());
64 math::MarsenneTwisterRNG rnd(clock());
65 Point3f direction = vcg::math::GeneratePointOnUnitSphereUniform<float,math::MarsenneTwisterRNG>(rnd);
73 IsotropicRemeshing<MyMesh>::Params params;
75 float len = (tri::Stat<MyMesh>::ComputeFaceEdgeLengthAverage(m1,
true) + tri::Stat<MyMesh>::ComputeFaceEdgeLengthAverage(m1,
true));
76 params.SetTargetLen(len*0.8f);
77 params.SetFeatureAngleDeg(10);
79 params.selectedOnly=
true;
80 printf(
" Input mesh %8i v %8i f\n",m1.VN(),m1.FN());
81 IsotropicRemeshing<MyMesh>::Do(m1, params);
82 IsotropicRemeshing<MyMesh>::Do(m2, params);
83 printf(
" Input mesh %8i v %8i f\n",m1.VN(),m1.FN());
88 printf(
"Intersected %i faces on sphere\n",selCnt);
90 printf(
"Intersected %i faces on cube\n",selCnt);
92 tri::io::ExporterOFF<MyMesh>::Save(m1,
"sphere.off",tri::io::Mask::IOM_FACECOLOR);
93 tri::io::ExporterOFF<MyMesh>::Save(m2,
"cube.off",tri::io::Mask::IOM_FACECOLOR);