#include <CGAL/Polygon_mesh_slicer.h>
template<class TriangleMesh, class Traits, class VertexPointMap = typename boost::property_map< TriangleMesh, vertex_point_t>::type, class AABBTree = AABB_tree< AABB_traits<Traits, AABB_halfedge_graph_segment_primitive<TriangleMesh, typename boost::mpl::if_< typename boost::is_same< VertexPointMap, typename boost::property_map< TriangleMesh, vertex_point_t>::type >::type, Default, VertexPointMap>::type> > >, bool UseParallelPlaneOptimization = true>
class CGAL::Polygon_mesh_slicer< TriangleMesh, Traits, VertexPointMap, AABBTree, UseParallelPlaneOptimization >
Function object that computes the intersection of a plane with a triangulated surface mesh.
- Template Parameters
-
TriangleMesh | a triangulated surface mesh, model of FaceGraph and HalfedgeListGraph |
Traits | a model of AABBGeomTraits |
VertexPointMap | a model of ReadablePropertyMap with boost::graph_traits<TriangleMesh>::vertex_descriptor as key and Traits::Point_3 as value type. The default is typename boost::property_map< TriangleMesh, vertex_point_t>::type . |
AABBTree | must be an instantiation of CGAL::AABB_tree able to handle the edges of TriangleMesh , having its edge_descriptor as primitive id. The default is CGAL::AABB_tree<CGAL::AABB_traits< Traits, CGAL::AABB_halfedge_graph_segment_primitive<TriangleMesh> > > |
UseParallelPlaneOptimization | if true , the code will use specific predicates and constructions in case the functor is called with a plane orthogonal to a frame axis, the non-null coefficient being 1 or -1. The default is true . |
The implementation of this class depends on the package 3D Fast Intersection and Distance Computation.
- Examples:
- Polygon_mesh_processing/mesh_slicer_example.cpp.
|
typedef AABBTree | AABB_tree |
| the AABB-tree type used internally
|
|
◆ Polygon_mesh_slicer() [1/4]
template<class TriangleMesh, class Traits, class VertexPointMap = typename boost::property_map< TriangleMesh, vertex_point_t>::type, class AABBTree = AABB_tree< AABB_traits<Traits, AABB_halfedge_graph_segment_primitive<TriangleMesh, typename boost::mpl::if_< typename boost::is_same< VertexPointMap, typename boost::property_map< TriangleMesh, vertex_point_t>::type >::type, Default, VertexPointMap>::type> > >, bool UseParallelPlaneOptimization = true>
Constructor using edges(tmesh)
to initialize the internal AABB_tree
.
- Parameters
-
tmesh | the triangulated surface mesh to be sliced. It must be valid and non modified as long as the functor is used. |
vpmap | an instance of the vertex point property map associated to tmesh |
traits | a traits class instance, can be omitted |
◆ Polygon_mesh_slicer() [2/4]
template<class TriangleMesh, class Traits, class VertexPointMap = typename boost::property_map< TriangleMesh, vertex_point_t>::type, class AABBTree = AABB_tree< AABB_traits<Traits, AABB_halfedge_graph_segment_primitive<TriangleMesh, typename boost::mpl::if_< typename boost::is_same< VertexPointMap, typename boost::property_map< TriangleMesh, vertex_point_t>::type >::type, Default, VertexPointMap>::type> > >, bool UseParallelPlaneOptimization = true>
CGAL::Polygon_mesh_slicer< TriangleMesh, Traits, VertexPointMap, AABBTree, UseParallelPlaneOptimization >::Polygon_mesh_slicer |
( |
const TriangleMesh & |
tmesh, |
|
|
const AABBTree & |
tree, |
|
|
VertexPointMap |
vpmap, |
|
|
const Traits & |
traits = Traits() |
|
) |
| |
Constructor using a pre-built AABB_tree
of edges provided by the user.
- Parameters
-
tmesh | the triangulated surface mesh to be sliced. It must be valid and non modified as long as the functor is used. |
tree | must be initialized with all the edges of tmesh |
vpmap | an instance of the vertex point property map associated to tmesh |
traits | a traits class instance, can be omitted |
◆ Polygon_mesh_slicer() [3/4]
template<class TriangleMesh, class Traits, class VertexPointMap = typename boost::property_map< TriangleMesh, vertex_point_t>::type, class AABBTree = AABB_tree< AABB_traits<Traits, AABB_halfedge_graph_segment_primitive<TriangleMesh, typename boost::mpl::if_< typename boost::is_same< VertexPointMap, typename boost::property_map< TriangleMesh, vertex_point_t>::type >::type, Default, VertexPointMap>::type> > >, bool UseParallelPlaneOptimization = true>
Constructor using edges(tmesh)
to initialize the internal AABB_tree
.
The vertex point property map used is get(CGAL::vertex_point, tmesh)
- Parameters
-
tmesh | the triangulated surface mesh to be sliced. It must be valid and non modified as long as the functor is used. |
traits | a traits class instance, can be omitted |
◆ Polygon_mesh_slicer() [4/4]
template<class TriangleMesh, class Traits, class VertexPointMap = typename boost::property_map< TriangleMesh, vertex_point_t>::type, class AABBTree = AABB_tree< AABB_traits<Traits, AABB_halfedge_graph_segment_primitive<TriangleMesh, typename boost::mpl::if_< typename boost::is_same< VertexPointMap, typename boost::property_map< TriangleMesh, vertex_point_t>::type >::type, Default, VertexPointMap>::type> > >, bool UseParallelPlaneOptimization = true>
Constructor using a AABB_tree
provided by the user.
The vertex point property map used is get(CGAL::vertex_point, tmesh)
- Parameters
-
tmesh | the triangulated surface mesh to be sliced. It must be valid and non modified as long as the functor is used. |
tree | must be initialized with all the edges of tmesh |
traits | a traits class instance, can be omitted |
◆ operator()()
template<class TriangleMesh, class Traits, class VertexPointMap = typename boost::property_map< TriangleMesh, vertex_point_t>::type, class AABBTree = AABB_tree< AABB_traits<Traits, AABB_halfedge_graph_segment_primitive<TriangleMesh, typename boost::mpl::if_< typename boost::is_same< VertexPointMap, typename boost::property_map< TriangleMesh, vertex_point_t>::type >::type, Default, VertexPointMap>::type> > >, bool UseParallelPlaneOptimization = true>
template<class OutputIterator >
Constructs the intersecting polylines of plane
with the input triangulated surface mesh.
If a polyline is closed, the first and last point of that polyline will be identical.
Each resulting polyline P
is oriented such that for two consecutive points p
and q
in P
, the normal vector of the face(s) containing the segment pq
, the vector pq
, and the orthogonal vertor of plane
is a direct orthogonal basis. The normal vector of each face is chosen to point on the side of the face where its sequence of vertices is seen counterclockwise.
Note that an edge shared by two faces included in plane
will not be reported. For example, if plane
passes though one face of a cube, only one closed polyline will be reported (the boundary of the face)
- Template Parameters
-
OutputIterator | an output iterator accepting polylines. A polyline is provided as std::vector<Traits::Point_3> . A polyline is closed if its first and last point are identical. |
- Parameters
-
plane | the plane to intersect the triangulated surface mesh with |
out | output iterator of polylines |