32 #include <vcg/complex/complex.h>
33 #include <vcg/complex/algorithms/clean.h>
34 #include <vcg/complex/algorithms/intersection.h>
35 #include <vcg/complex/algorithms/refine.h>
36 #include <vcg/complex/algorithms/create/platonic.h>
38 #include <wrap/io_edgemesh/export_svg.h>
39 #include <wrap/io_edgemesh/export_dxf.h>
40 #include <wrap/io_trimesh/export_off.h>
49 struct MyUsedTypes :
public UsedTypes<
50 Use<MyVertex>::AsVertexType,
51 Use<MyEdge> ::AsEdgeType,
52 Use<MyFace> ::AsFaceType>{};
55 class MyVertex :
public Vertex< MyUsedTypes, vertex::Coord3f, vertex::BitFlags, vertex::Normal3f, vertex::Qualityf, vertex::Mark>{};
56 class MyEdge :
public Edge < MyUsedTypes, edge::VertexRef, edge::EVAdj> {};
57 class MyFace :
public Face < MyUsedTypes, face::VertexRef, face::FFAdj, face::BitFlags, face::Normal3f> {};
59 class MyEdgeMesh:
public tri::TriMesh< vector<MyVertex>, vector<MyEdge> > {};
60 class MyMesh:
public tri::TriMesh< vector<MyVertex>, vector<MyFace > >{};
62 int main(
int ,
char **)
64 MyMesh m, m_over, m_under;;
66 printf(
"Created a sphere mesh of %i vertices %i edges\n",m.VN(),m.FN());
69 math::MarsenneTwisterRNG rnd;
70 Point3f direction = vcg::math::GeneratePointOnUnitSphereUniform<float,math::MarsenneTwisterRNG>(rnd);
71 float distance = rnd.generate01();
72 vcg::Plane3<MyMesh::ScalarType> plane(distance, direction);
74 printf(
"Intersecting a sphere with a plane %4.2f %4.2f %4.2f off: %4.2f\n",direction[0],direction[1],direction[2],distance);
76 vcg::IntersectionPlaneMesh<MyMesh, MyEdgeMesh, MyMesh::ScalarType>(m, plane, edge_mesh);
80 printf(
"Created a edge mesh of %i vertices %i edges\n",edge_mesh.VN(),edge_mesh.EN());
83 tri::io::SVGProperties pro;
84 pro.projDir = plane.Direction();
85 tri::io::ExporterSVG<MyEdgeMesh>::Save(edge_mesh,
"trimesh_intersection.svg",pro);
89 tri::QualityMidPointFunctor<MyMesh> slicingfunc(0.0);
90 tri::QualityEdgePredicate<MyMesh> slicingpred(0.0,0.0);
92 tri::RefineE<MyMesh, tri::QualityMidPointFunctor<MyMesh>, tri::QualityEdgePredicate<MyMesh> > (m, slicingfunc, slicingpred,
false);
99 printf(
"Created a sphere mesh of %i vertices %i edges\n",m_over.VN(),m_over.FN());
100 tri::io::ExporterOFF<MyMesh>::Save(m_over,
"trimesh_intersection_over.off");
101 printf(
"Created a sphere mesh of %i vertices %i edges\n",m_under.VN(),m_under.FN());
102 tri::io::ExporterOFF<MyMesh>::Save(m_under,
"trimesh_intersection_under.off");