#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 implemenation of this class depends on the package PkgAABBTree.
- Todo:
- Shall we document more in details what is required?
Traits must provide:
Plane_3
Point_3
Segment_3
Oriented_side_3 with Oriented_side operator()(Plane_3, Point_3)
Do_intersect_3 with boost::optional<variant<Point_3,Segment_3> operator()(Plane_3,Segment_3)
Do_intersect_3 with bool operator()(Plane_3, Bbox_3)
- Todo:
- If we keep the traits for plane orthogonal to a frame axis,
Traits must also provide:
FT
Construct_cartesian_const_iterator_3 with Iterator operator()(Point_3) Iterator being a random access iterator with FT as value type
Construct_point_3 with Point_3 operator()(FT,FT,FT); Construct_source_3 with const Point_3& operator()(Segment_3)
Construct_target_3 with const Point_3& operator()(Segment_3)
- Todo:
_object() functions must also be provided
- Examples
- Polygon_mesh_processing/mesh_slicer_example.cpp.
|
|
typedef AABBTree | AABB_tree |
| | the AABB-tree type used internally
|
| |
|
| | Polygon_mesh_slicer (const TriangleMesh &tmesh, VertexPointMap vpmap, const Traits &traits=Traits()) |
| | Constructor using edges(tmesh) to initialize the internal AABB_tree. More...
|
| |
| | 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. More...
|
| |
| | Polygon_mesh_slicer (const TriangleMesh &tmesh, const Traits &traits=Traits()) |
| | Constructor using edges(tmesh) to initialize the internal AABB_tree. More...
|
| |
| | Polygon_mesh_slicer (const TriangleMesh &tmesh, const AABBTree &tree, const Traits &traits=Traits()) |
| | Constructor using a AABB_tree provided by the user. More...
|
| |
| template<class OutputIterator > |
| OutputIterator | operator() (const Plane_3 &plane, OutputIterator out) const |
| | Constructs the intersecting polylines of plane with the input triangulated surface mesh. More...
|
| |
◆ 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 >
| OutputIterator CGAL::Polygon_mesh_slicer< TriangleMesh, Traits, VertexPointMap, AABBTree, UseParallelPlaneOptimization >::operator() |
( |
const Plane_3 & |
plane, |
|
|
OutputIterator |
out |
|
) |
| const |
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 |