CGAL 5.5.2 - Polygon Mesh Processing
Corefinement and Boolean Operations

Functions to corefine triangulated surface meshes and compute triangulated surface meshes of the union, difference and intersection of the bounded volumes.

## Classes

struct  CGAL::Polygon_mesh_processing::Corefinement::Default_visitor< TriangleMesh >
Default new-face visitor model of PMPCorefinementVisitor. More...

## Enumerations

enum  CGAL::Polygon_mesh_processing::Corefinement::Boolean_operation_type {
UNION = 0, INTERSECTION =1, TM1_MINUS_TM2 =2, TM2_MINUS_TM1 =3,
NONE
}
Integer identifiers to refer to a particular Boolean operation in the function corefine_and_compute_boolean_operations().

## Functions

template<class TriangleMesh , class NamedParameters1 = parameters::Default_named_parameters, class NamedParameters2 = parameters::Default_named_parameters>
bool CGAL::Polygon_mesh_processing::clip (TriangleMesh &tm, TriangleMesh &clipper, const NamedParameters1 &np_tm=parameters::default_values(), const NamedParameters2 &np_c=parameters::default_values())
clips tm by keeping the part that is inside the volume bounded by clipper. More...

template<class TriangleMesh , class NamedParameters = parameters::Default_named_parameters>
bool CGAL::Polygon_mesh_processing::clip (TriangleMesh &tm, const Plane_3 &plane, const NamedParameters &np=parameters::default_values())
clips tm by keeping the part that is on the negative side of plane (side opposite to its normal vector). More...

template<class TriangleMesh , class NamedParameters = parameters::Default_named_parameters>
bool CGAL::Polygon_mesh_processing::clip (TriangleMesh &tm, const Iso_cuboid_3 &iso_cuboid, const NamedParameters &np=parameters::default_values())
clips tm by keeping the part that is inside iso_cuboid. More...

template<class TriangleMesh , class NamedParameters1 = parameters::Default_named_parameters, class NamedParameters2 = parameters::Default_named_parameters>
void CGAL::Polygon_mesh_processing::split (TriangleMesh &tm, TriangleMesh &splitter, const NamedParameters1 &np_tm=parameters::default_values(), const NamedParameters2 &np_s=parameters::default_values())
corefines tm and splitter and duplicates edges in tm that are on the intersection with splitter. More...

template<class TriangleMesh , class NamedParameters = parameters::Default_named_parameters>
void CGAL::Polygon_mesh_processing::split (TriangleMesh &tm, const Plane_3 &plane, const NamedParameters &np=parameters::default_values())
adds intersection edges of plane and tm in tm and duplicates those edges. More...

template<class TriangleMesh , class NamedParameters = parameters::Default_named_parameters>
void CGAL::Polygon_mesh_processing::split (TriangleMesh &tm, const Iso_cuboid_3 &iso_cuboid, const NamedParameters &np=parameters::default_values())
adds intersection edges of iso_cuboid and tm in tm and duplicates those edges. More...

template<class TriangleMesh , class NamedParameters1 = parameters::Default_named_parameters, class NamedParameters2 = parameters::Default_named_parameters, class NamedParametersOut0 = parameters::Default_named_parameters, class NamedParametersOut1 = parameters::Default_named_parameters, class NamedParametersOut2 = parameters::Default_named_parameters, class NamedParametersOut3 = parameters::Default_named_parameters>
std::array< bool, 4 > CGAL::Polygon_mesh_processing::corefine_and_compute_boolean_operations (TriangleMesh &tm1, TriangleMesh &tm2, const std::array< boost::optional< TriangleMesh *>, 4 > &output, const NamedParameters1 &np1=parameters::default_values(), const NamedParameters2 &np2=parameters::default_values(), const std::tuple< NamedParametersOut0, NamedParametersOut1, NamedParametersOut2, NamedParametersOut3 > &nps_out=std::tuple< NamedParametersOut0, NamedParametersOut1, NamedParametersOut2, NamedParametersOut3 >())
corefines tm1 and tm2 and for each triangle mesh tm_out passed as an optional in output different from boost::none, the triangulated surface mesh bounding the result of a particular Boolean operation between the volumes bounded by tm1 and tm2 will be put in the corresponding triangle mesh. More...

template<class TriangleMesh , class NamedParameters1 = parameters::Default_named_parameters, class NamedParameters2 = parameters::Default_named_parameters, class NamedParametersOut = parameters::Default_named_parameters>
bool CGAL::Polygon_mesh_processing::corefine_and_compute_union (TriangleMesh &tm1, TriangleMesh &tm2, TriangleMesh &tm_out, const NamedParameters1 &np1=parameters::default_values(), const NamedParameters2 &np2=parameters::default_values(), const NamedParametersOut &np_out=parameters::default_values())
corefines tm1 and tm2 and puts in tm_out a triangulated surface mesh bounding the union of the volumes bounded by tm1 and tm2. More...

template<class TriangleMesh , class NamedParameters1 = parameters::Default_named_parameters, class NamedParameters2 = parameters::Default_named_parameters, class NamedParametersOut = parameters::Default_named_parameters>
bool CGAL::Polygon_mesh_processing::corefine_and_compute_intersection (TriangleMesh &tm1, TriangleMesh &tm2, TriangleMesh &tm_out, const NamedParameters1 &np1=parameters::default_values(), const NamedParameters2 &np2=parameters::default_values(), const NamedParametersOut &np_out=parameters::default_values())
corefines tm1 and tm2 and puts in tm_out a triangulated surface mesh bounding the intersection of the volumes bounded by tm1 and tm2. More...

template<class TriangleMesh , class NamedParameters1 = parameters::Default_named_parameters, class NamedParameters2 = parameters::Default_named_parameters, class NamedParametersOut = parameters::Default_named_parameters>
bool CGAL::Polygon_mesh_processing::corefine_and_compute_difference (TriangleMesh &tm1, TriangleMesh &tm2, TriangleMesh &tm_out, const NamedParameters1 &np1=parameters::default_values(), const NamedParameters2 &np2=parameters::default_values(), const NamedParametersOut &np_out=parameters::default_values())
corefines tm1 and tm2 and puts in tm_out a triangulated surface mesh bounding the volume bounded by tm1 minus the volume bounded by tm2. More...

template<class TriangleMesh , class NamedParameters1 = parameters::Default_named_parameters, class NamedParameters2 = parameters::Default_named_parameters>
void CGAL::Polygon_mesh_processing::corefine (TriangleMesh &tm1, TriangleMesh &tm2, const NamedParameters1 &np1=parameters::default_values(), const NamedParameters2 &np2=parameters::default_values())
corefines tm1 and tm2. More...

template<class OutputIterator , class TriangleMesh , class NamedParameters1 = parameters::Default_named_parameters, class NamedParameters2 = parameters::Default_named_parameters>
OutputIterator CGAL::Polygon_mesh_processing::surface_intersection (const TriangleMesh &tm1, const TriangleMesh &tm2, OutputIterator polyline_output, const NamedParameters1 &np1=parameters::default_values(), const NamedParameters2 &np2=parameters::default_values())
computes the intersection of triangles of tm1 and tm2. More...

## ◆ clip() [1/3]

template<class TriangleMesh , class NamedParameters1 = parameters::Default_named_parameters, class NamedParameters2 = parameters::Default_named_parameters>
 bool CGAL::Polygon_mesh_processing::clip ( TriangleMesh & tm, TriangleMesh & clipper, const NamedParameters1 & np_tm = parameters::default_values(), const NamedParameters2 & np_c = parameters::default_values() )

#include <CGAL/Polygon_mesh_processing/clip.h>

clips tm by keeping the part that is inside the volume bounded by clipper.

If tm is closed, the clipped part can be closed too if the named parameter clip_volume is set to true. See Subsection Clipping for more details.

Attention
With the current implementation, clipper will be modified (refined with the intersection with tm).
Precondition
!CGAL::Polygon_mesh_processing::does_self_intersect(tm)
!CGAL::Polygon_mesh_processing::does_self_intersect(clipper)
CGAL::Polygon_mesh_processing::does_bound_a_volume(clipper)
Template Parameters
 TriangleMesh a model of MutableFaceGraph, HalfedgeListGraph and FaceListGraph. NamedParameters1 a sequence of Named Parameters NamedParameters2 a sequence of Named Parameters
Parameters
 tm input triangulated surface mesh clipper triangulated surface mesh used to clip tm np_tm an optional sequence of Named Parameters among the ones listed below np_c an optional sequence of Named Parameters among the ones listed below
Optional Named Parameters
 a property map associating points to the vertices of tm (resp. clipper) Type: a class model of ReadWritePropertyMap with boost::graph_traits::vertex_descriptor as key type and Point_3 as value type Default: boost::get(CGAL::vertex_point, tm (resp. clipper)) Extra: If this parameter is omitted, an internal property map for CGAL::vertex_point_t must be available in TriangleMesh. a property map associating to each face of tm (clipper) a unique index between 0 and num_faces(tm (resp. clipper)) - 1 Type: a class model of ReadWritePropertyMap with boost::graph_traits::face_descriptor as key type and std::size_t as value type Default: an automatically indexed internal map Extra: if the property map is writable, the indices of the faces of tm and clipper will be set after refining tm with the intersection with clipper a visitor used to track the creation of new faces Type: a class model of PMPCorefinementVisitor Default: Corefinement::Default_visitor If true, the set of triangles closed to the intersection of tm and clipper will be checked for self-intersections and Corefinement::Self_intersection_exception will be thrown if at least one self-intersection is found. Type: Boolean Default: false If true, and tm is closed, the clipping will be done on the volume bounded by tm rather than on its surface (i.e., tm will be kept closed). Type: Boolean Default: false if false, the parts of tm coplanar with clipper will not be part of the output. Type: Boolean Default: false Extra: This option has an effect only if a surface and not a volume is clipped, (i.e., if clip_volume is false or if tm is open). (np_c only) if true, clipper will not be modified. Type: Boolean Default: false Extra: If this option is set to true, tm is no longer required to be without self-intersection. Setting this option to true will automatically set throw_on_self_intersection to false and clip_volume to false.
Returns
true if the output surface mesh is manifold. If false is returned tm and clipper are only corefined.
split()

## ◆ clip() [2/3]

template<class TriangleMesh , class NamedParameters = parameters::Default_named_parameters>
 bool CGAL::Polygon_mesh_processing::clip ( TriangleMesh & tm, const Plane_3 & plane, const NamedParameters & np = parameters::default_values() )

#include <CGAL/Polygon_mesh_processing/clip.h>

clips tm by keeping the part that is on the negative side of plane (side opposite to its normal vector).

If tm is closed, the clipped part can be closed too if the named parameter clip_volume is set to true. See Subsection Clipping for more details.

Note
Plane_3 must be from the same Kernel as the point of the internal vertex point map of TriangleMesh.
Plane_3 must be from the same Kernel as the point of the vertex point map of tm.
Precondition
!CGAL::Polygon_mesh_processing::does_self_intersect(tm)
Template Parameters
 TriangleMesh a model of MutableFaceGraph, HalfedgeListGraph and FaceListGraph. An internal property map for CGAL::vertex_point_t must be available. NamedParameters a sequence of Named Parameters
Parameters
 tm input triangulated surface mesh plane plane whose negative side defines the half-space to intersect tm with. Plane_3 is the plane type for the same CGAL kernel as the point of the vertex point map of tm. np an optional sequence of Named Parameters among the ones listed below
Optional Named Parameters
 a property map associating points to the vertices of tm Type: a class model of ReadWritePropertyMap with boost::graph_traits::vertex_descriptor as key type and Point_3 as value type Default: boost::get(CGAL::vertex_point, tm) a visitor used to track the creation of new faces Type: a class model of PMPCorefinementVisitor Default: Corefinement::Default_visitor If true, the set of triangles closed to the intersection of tm and plane will be checked for self-intersections and CGAL::Polygon_mesh_processing::Corefinement::Self_intersection_exception will be thrown if at least one self-intersection is found. Type: Boolean Default: false If true, and tm is closed, the clipping will be done on the volume bounded by tm rather than on its surface (i.e., tm will be kept closed). Type: Boolean Default: false if false the parts of tm coplanar with plane will not be part of the output Type: Boolean Default: true If true, self-intersections are accepted for tm. Type: Boolean Default: false Extra: If this option is set to true, tm is no longer required to be without self-intersection. Setting this option to true will automatically set throw_on_self_intersection to false and clip_volume to false.
Returns
true if the output surface mesh is manifold. If false is returned tm is only refined by the intersection with plane.
split()

## ◆ clip() [3/3]

template<class TriangleMesh , class NamedParameters = parameters::Default_named_parameters>
 bool CGAL::Polygon_mesh_processing::clip ( TriangleMesh & tm, const Iso_cuboid_3 & iso_cuboid, const NamedParameters & np = parameters::default_values() )

#include <CGAL/Polygon_mesh_processing/clip.h>

clips tm by keeping the part that is inside iso_cuboid.

If tm is closed, the clipped part can be closed too if the named parameter clip_volume is set to true. See Subsection Clipping for more details.

Note
Iso_cuboid_3 must be from the same Kernel as the point of the internal vertex point map of TriangleMesh.
Iso_cuboid_3 must be from the same Kernel as the point of the vertex point map of tm.
Precondition
!CGAL::Polygon_mesh_processing::does_self_intersect(tm)
Template Parameters
 TriangleMesh a model of MutableFaceGraph, HalfedgeListGraph and FaceListGraph. An internal property map for CGAL::vertex_point_t must be available. NamedParameters a sequence of Named Parameters
Parameters
 tm input triangulated surface mesh iso_cuboid iso-cuboid used to clip tm. np an optional sequence of Named Parameters among the ones listed below
Optional Named Parameters
 a visitor used to track the creation of new faces Type: a class model of PMPCorefinementVisitor Default: Corefinement::Default_visitor If true, the set of triangles closed to the intersection of tm and iso_cuboid will be checked for self-intersections and CGAL::Polygon_mesh_processing::Corefinement::Self_intersection_exception will be thrown if at least one self-intersection is found. Type: Boolean Default: false If true, and tm is closed, the clipping will be done on the volume bounded by tm rather than on its surface (i.e., tm will be kept closed). Type: Boolean Default: false if false the parts of tm coplanar with iso_cuboid will not be part of the output Type: Boolean Default: true If true, self-intersections are accepted for tm. Type: Boolean Default: false Extra: If this option is set to true, tm is no longer required to be without self-intersection. Setting this option to true will automatically set throw_on_self_intersection to false and clip_volume to false.
Returns
true if the output surface mesh is manifold. If false is returned tm is only refined by the intersection with iso_cuboid.
split()

## ◆ corefine()

template<class TriangleMesh , class NamedParameters1 = parameters::Default_named_parameters, class NamedParameters2 = parameters::Default_named_parameters>
 void CGAL::Polygon_mesh_processing::corefine ( TriangleMesh & tm1, TriangleMesh & tm2, const NamedParameters1 & np1 = parameters::default_values(), const NamedParameters2 & np2 = parameters::default_values() )

#include <CGAL/Polygon_mesh_processing/corefinement.h>

corefines tm1 and tm2.

For each input triangulated surface mesh, if a constrained edge is provided, intersection edges will be marked as constrained. If an edge that was marked as constrained is split, its sub-edges will be marked as constrained as well.

Precondition
!CGAL::Polygon_mesh_processing::does_self_intersect(tm1)
!CGAL::Polygon_mesh_processing::does_self_intersect(tm2)
Template Parameters
 TriangleMesh a model of HalfedgeListGraph, FaceListGraph, and MutableFaceGraph NamedParameters1 a sequence of Named Parameters NamedParameters2 a sequence of Named Parameters
Parameters
 tm1 first input triangulated surface mesh tm2 second input triangulated surface mesh np1 an optional sequence of Named Parameters among the ones listed below np2 an optional sequence of Named Parameters among the ones listed below
Optional Named Parameters
 a property map associating points to the vertices of tm1 (tm2) Type: a class model of ReadablePropertyMap with boost::graph_traits::vertex_descriptor as key type and Point_3 as value type Default: boost::get(CGAL::vertex_point, tm1 (tm2)) Extra: If this parameter is omitted, an internal property map for CGAL::vertex_point_t must be available in TriangleMesh. a property map containing the constrained-or-not status of each edge of tm1 (tm2) Type: a class model of ReadablePropertyMap with boost::graph_traits::edge_descriptor as key type and bool as value type Default: a constant property map returning false for any edge a visitor used to track the creation of new faces Type: a class model of PMPCorefinementVisitor Default: Corefinement::Default_visitor Extra: np1 only If true the set of triangles closed to the intersection of tm1 and tm2 will be checked for self-intersections and Corefinement::Self_intersection_exception will be thrown if at least one self-intersection is found. Type: Boolean Default: false Extra: np1 only if true, the corresponding mesh will not be updated. Type: Boolean Default: false Extra: If this parameter is set to true for both meshes nothing will be done. If this option is set to true for one mesh, the other mesh is no longer required to be without self-intersection.

## ◆ corefine_and_compute_boolean_operations()

template<class TriangleMesh , class NamedParameters1 = parameters::Default_named_parameters, class NamedParameters2 = parameters::Default_named_parameters, class NamedParametersOut0 = parameters::Default_named_parameters, class NamedParametersOut1 = parameters::Default_named_parameters, class NamedParametersOut2 = parameters::Default_named_parameters, class NamedParametersOut3 = parameters::Default_named_parameters>
 std::array CGAL::Polygon_mesh_processing::corefine_and_compute_boolean_operations ( TriangleMesh & tm1, TriangleMesh & tm2, const std::array< boost::optional< TriangleMesh *>, 4 > & output, const NamedParameters1 & np1 = parameters::default_values(), const NamedParameters2 & np2 = parameters::default_values(), const std::tuple< NamedParametersOut0, NamedParametersOut1, NamedParametersOut2, NamedParametersOut3 > & nps_out = std::tuple() )

#include <CGAL/Polygon_mesh_processing/corefinement.h>

corefines tm1 and tm2 and for each triangle mesh tm_out passed as an optional in output different from boost::none, the triangulated surface mesh bounding the result of a particular Boolean operation between the volumes bounded by tm1 and tm2 will be put in the corresponding triangle mesh.

The positions of the meshes in the array output are specific to the Boolean operation to compute and Corefinement::Boolean_operation_type encodes and describes the ordering. Constructing the default array means that no Boolean operation will be done. Overwriting a default value will trigger the corresponding operation. In such a case, the address to a valid surface mesh must be provided. The optional named parameters for all output meshes are provided as a tuple and follow the same order as the array output. A call to corefine_and_compute_boolean_operations() with optional named parameters passed for output meshes should be done using make_tuple() as the types of named parameters are unspecified.

If tm1 and/or tm2 are part of the output surface meshes, they will be updated to contain the output (in-place operation), in any other case, the corresponding result will be inserted into the mesh without clearing it first.

Precondition
!CGAL::Polygon_mesh_processing::does_self_intersect(tm1)
!CGAL::Polygon_mesh_processing::does_self_intersect(tm2)
CGAL::Polygon_mesh_processing::does_bound_a_volume(tm1)
CGAL::Polygon_mesh_processing::does_bound_a_volume(tm2)
Template Parameters
 TriangleMesh a model of HalfedgeListGraph, FaceListGraph, and MutableFaceGraph NamedParameters1 a sequence of Named Parameters NamedParameters2 a sequence of Named Parameters NamedParametersOut0 a sequence of Named Parameters for computing the union of the volumes bounded by tm1 and tm2 NamedParametersOut1 a sequence of Named Parameters for computing the intersection of the volumes bounded by tm1 and tm2 NamedParametersOut2 a sequence of Named Parameters for computing the difference of the volumes bounded by tm1 and tm2 NamedParametersOut3 a sequence of Named Parameters for computing the difference of the volumes bounded by tm2 and tm1
Parameters
 tm1 first input triangulated surface mesh tm2 second input triangulated surface mesh output an array of output surface meshes np1 an optional sequence of Named Parameters among the ones listed below np2 an optional sequence of Named Parameters among the ones listed below
Optional Named Parameters
 a property map associating points to the vertices of tm1 (tm2) Type: a class model of ReadablePropertyMap with boost::graph_traits::vertex_descriptor as key type and Point_3 as value type Default: boost::get(CGAL::vertex_point, tm1 (tm2)) Extra: If this parameter is omitted, an internal property map for CGAL::vertex_point_t must be available in TriangleMesh. a property map containing the constrained-or-not status of each edge of tm1 (tm2) Type: a class model of ReadablePropertyMap with boost::graph_traits::edge_descriptor as key type and bool as value type Default: a constant property map returning false for any edge a property map associating to each face of tm1 (tm2) a unique index between 0 and num_faces(tm1) - 1 (num_faces(tm2) - 1) Type: a class model of ReadablePropertyMap with boost::graph_traits::face_descriptor as key type and std::size_t as value type Default: an automatically indexed internal map Extra: If the property map is writable, the indices of the faces of tm1 and tm2 will be set after the corefinement is done. a visitor used to track the creation of new faces Type: a class model of PMPCorefinementVisitor Default: Corefinement::Default_visitor Extra: np1 only If true, the set of triangles closed to the intersection of tm1 and tm2 will be checked for self-intersections and Corefinement::Self_intersection_exception will be thrown if at least one self-intersection is found. Type: Boolean Default: false Extra: np1 only
Parameters
 nps_out an optional tuple of sequences of Named Parameters each among the ones listed below (tm_out being used to refer to the output surface mesh in output corresponding to a given named parameter sequence)
Optional Named Parameters
 a property map associating points to the vertices of tm_out Type: a class model of ReadWritePropertyMap with boost::graph_traits::vertex_descriptor as key type and Point_3 as value type Default: boost::get(CGAL::vertex_point, tm_out) Extra: If this parameter is omitted, an internal property map for CGAL::vertex_point_t must be available in TriangleMesh. a property map containing the constrained-or-not status of each edge of tm_out. An edge of tm_out is constrained if it is on the intersection of tm1 and tm2, or if the edge corresponds to a constrained edge in tm1 or tm2. Type: a class model of WritablePropertyMap with boost::graph_traits::edge_descriptor as key type and bool as value type
Returns
an array filled as follows: for each operation computed, the position in the array will contain true iff the output surface mesh is manifold, and it is put in the surface mesh at the same position as in output. Note that if an output surface mesh also was an input mesh but the output operation was generating a non-manifold mesh, the surface mesh will only be corefined.
Examples:
Polygon_mesh_processing/corefinement_mesh_union_and_intersection.cpp.

## ◆ corefine_and_compute_difference()

template<class TriangleMesh , class NamedParameters1 = parameters::Default_named_parameters, class NamedParameters2 = parameters::Default_named_parameters, class NamedParametersOut = parameters::Default_named_parameters>
 bool CGAL::Polygon_mesh_processing::corefine_and_compute_difference ( TriangleMesh & tm1, TriangleMesh & tm2, TriangleMesh & tm_out, const NamedParameters1 & np1 = parameters::default_values(), const NamedParameters2 & np2 = parameters::default_values(), const NamedParametersOut & np_out = parameters::default_values() )

#include <CGAL/Polygon_mesh_processing/corefinement.h>

corefines tm1 and tm2 and puts in tm_out a triangulated surface mesh bounding the volume bounded by tm1 minus the volume bounded by tm2.

If tm_out is one of the input surface meshes, it will be updated to contain the output (in-place operation), otherwise the result will be inserted into tm_out without clearing it first.

Precondition
!CGAL::Polygon_mesh_processing::does_self_intersect(tm1)
!CGAL::Polygon_mesh_processing::does_self_intersect(tm2)
CGAL::Polygon_mesh_processing::does_bound_a_volume(tm1)
CGAL::Polygon_mesh_processing::does_bound_a_volume(tm2)
Template Parameters
 TriangleMesh a model of HalfedgeListGraph, FaceListGraph, and MutableFaceGraph NamedParameters1 a sequence of Named Parameters NamedParameters2 a sequence of Named Parameters NamedParametersOut a sequence of Named Parameters
Parameters
 tm1 first input triangulated surface mesh tm2 second input triangulated surface mesh tm_out output surface mesh np1 an optional sequence of Named Parameters among the ones listed below np2 an optional sequence of Named Parameters among the ones listed below
Optional Named Parameters
 a property map associating points to the vertices of tm1 (tm2) Type: a class model of ReadablePropertyMap with boost::graph_traits::vertex_descriptor as key type and Point_3 as value type Default: boost::get(CGAL::vertex_point, tm1 (tm2)) Extra: If this parameter is omitted, an internal property map for CGAL::vertex_point_t must be available in TriangleMesh. a property map containing the constrained-or-not status of each edge of tm1 (tm2) Type: a class model of ReadablePropertyMap with boost::graph_traits::edge_descriptor as key type and bool as value type Default: a constant property map returning false for any edge a property map associating to each face of tm1 (tm2) a unique index between 0 and num_faces(tm1) - 1 (num_faces(tm2) - 1) Type: a class model of ReadablePropertyMap with boost::graph_traits::face_descriptor as key type and std::size_t as value type Default: an automatically indexed internal map Extra: If the property map is writable, the indices of the faces of tm1 and tm2 will be set after the corefinement is done. a visitor used to track the creation of new faces Type: a class model of PMPCorefinementVisitor Default: Corefinement::Default_visitor Extra: np1 only If true the set of triangles closed to the intersection of tm1 and tm2 will be checked for self-intersections and Corefinement::Self_intersection_exception will be thrown if at least one self-intersection is found. Type: Boolean Default: false Extra: np1 only
Parameters
 np_out an optional sequence of Named Parameters among the ones listed below
Optional Named Parameters
 a property map associating points to the vertices of tm_out Type: a class model of ReadWritePropertyMap with boost::graph_traits::vertex_descriptor as key type and Point_3 as value type Default: boost::get(CGAL::vertex_point, tm_out) Extra: If this parameter is omitted, an internal property map for CGAL::vertex_point_t must be available in TriangleMesh. a property map containing the constrained-or-not status of each edge of tm_out. An edge of tm_out is constrained if it is on the intersection of tm1 and tm2, or if the edge corresponds to a constrained edge in tm1 or tm2. Type: a class model of WritablePropertyMap with boost::graph_traits::edge_descriptor as key type and bool as value type
Returns
true if the output surface mesh is manifold and is put into tm_out. If false is returned and if tm_out is one of the input surface meshes, then tm_out is only corefined.
Examples:
Polygon_mesh_processing/corefinement_difference_remeshed.cpp.

## ◆ corefine_and_compute_intersection()

template<class TriangleMesh , class NamedParameters1 = parameters::Default_named_parameters, class NamedParameters2 = parameters::Default_named_parameters, class NamedParametersOut = parameters::Default_named_parameters>
 bool CGAL::Polygon_mesh_processing::corefine_and_compute_intersection ( TriangleMesh & tm1, TriangleMesh & tm2, TriangleMesh & tm_out, const NamedParameters1 & np1 = parameters::default_values(), const NamedParameters2 & np2 = parameters::default_values(), const NamedParametersOut & np_out = parameters::default_values() )

#include <CGAL/Polygon_mesh_processing/corefinement.h>

corefines tm1 and tm2 and puts in tm_out a triangulated surface mesh bounding the intersection of the volumes bounded by tm1 and tm2.

If tm_out is one of the input surface meshes, it will be updated to contain the output (in-place operation), otherwise the result will be inserted into tm_out without clearing it first.

Precondition
!CGAL::Polygon_mesh_processing::does_self_intersect(tm1)
!CGAL::Polygon_mesh_processing::does_self_intersect(tm2)
CGAL::Polygon_mesh_processing::does_bound_a_volume(tm1)
CGAL::Polygon_mesh_processing::does_bound_a_volume(tm2)
Template Parameters
 TriangleMesh a model of HalfedgeListGraph, FaceListGraph, and MutableFaceGraph NamedParameters1 a sequence of Named Parameters NamedParameters2 a sequence of Named Parameters NamedParametersOut a sequence of Named Parameters
Parameters
 tm1 first input triangulated surface mesh tm2 second input triangulated surface mesh tm_out output surface mesh np1 an optional sequence of Named Parameters among the ones listed below np2 an optional sequence of Named Parameters among the ones listed below
Optional Named Parameters
 a property map associating points to the vertices of tm1 (tm2) Type: a class model of ReadablePropertyMap with boost::graph_traits::vertex_descriptor as key type and Point_3 as value type Default: boost::get(CGAL::vertex_point, tm1 (tm2)) Extra: If this parameter is omitted, an internal property map for CGAL::vertex_point_t must be available in TriangleMesh. a property map containing the constrained-or-not status of each edge of tm1 (tm2) Type: a class model of ReadablePropertyMap with boost::graph_traits::edge_descriptor as key type and bool as value type Default: a constant property map returning false for any edge a property map associating to each face of tm1 (tm2) a unique index between 0 and num_faces(tm1) - 1 (num_faces(tm2) - 1) Type: a class model of ReadablePropertyMap with boost::graph_traits::face_descriptor as key type and std::size_t as value type Default: an automatically indexed internal map Extra: If the property map is writable, the indices of the faces of tm1 and tm2 will be set after the corefinement is done. a visitor used to track the creation of new faces Type: a class model of PMPCorefinementVisitor Default: Corefinement::Default_visitor Extra: np1 only If true the set of triangles closed to the intersection of tm1 and tm2 will be checked for self-intersections and Corefinement::Self_intersection_exception will be thrown if at least one self-intersection is found. Type: Boolean Default: false Extra: np1 only
Parameters
 np_out an optional sequence of Named Parameters among the ones listed below
Optional Named Parameters
 a property map associating points to the vertices of tm_out Type: a class model of ReadWritePropertyMap with boost::graph_traits::vertex_descriptor as key type and Point_3 as value type Default: boost::get(CGAL::vertex_point, tm_out) Extra: If this parameter is omitted, an internal property map for CGAL::vertex_point_t must be available in TriangleMesh. a property map containing the constrained-or-not status of each edge of tm_out. An edge of tm_out is constrained if it is on the intersection of tm1 and tm2, or if the edge corresponds to a constrained edge in tm1 or tm2. Type: a class model of WritablePropertyMap with boost::graph_traits::edge_descriptor as key type and bool as value type
Returns
true if the output surface mesh is manifold and is put into tm_out. If false is returned and if tm_out is one of the input surface meshes, then tm_out is only corefined.
Examples:
Polygon_mesh_processing/corefinement_consecutive_bool_op.cpp.

## ◆ corefine_and_compute_union()

template<class TriangleMesh , class NamedParameters1 = parameters::Default_named_parameters, class NamedParameters2 = parameters::Default_named_parameters, class NamedParametersOut = parameters::Default_named_parameters>
 bool CGAL::Polygon_mesh_processing::corefine_and_compute_union ( TriangleMesh & tm1, TriangleMesh & tm2, TriangleMesh & tm_out, const NamedParameters1 & np1 = parameters::default_values(), const NamedParameters2 & np2 = parameters::default_values(), const NamedParametersOut & np_out = parameters::default_values() )

#include <CGAL/Polygon_mesh_processing/corefinement.h>

corefines tm1 and tm2 and puts in tm_out a triangulated surface mesh bounding the union of the volumes bounded by tm1 and tm2.

If tm_out is one of the input surface meshes, it will be updated to contain the output (in-place operation), otherwise the result will be inserted into tm_out without clearing it first.

Precondition
!CGAL::Polygon_mesh_processing::does_self_intersect(tm1)
!CGAL::Polygon_mesh_processing::does_self_intersect(tm2)
CGAL::Polygon_mesh_processing::does_bound_a_volume(tm1)
CGAL::Polygon_mesh_processing::does_bound_a_volume(tm2)
Template Parameters
 TriangleMesh a model of HalfedgeListGraph, FaceListGraph, and MutableFaceGraph NamedParameters1 a sequence of Named Parameters NamedParameters2 a sequence of Named Parameters NamedParametersOut a sequence of Named Parameters
Parameters
 tm1 first input triangulated surface mesh tm2 second input triangulated surface mesh tm_out output surface mesh np1 an optional sequence of Named Parameters among the ones listed below np2 an optional sequence of Named Parameters among the ones listed below
Optional Named Parameters
 a property map associating points to the vertices of tm1 (tm2) Type: a class model of ReadablePropertyMap with boost::graph_traits::vertex_descriptor as key type and Point_3 as value type Default: boost::get(CGAL::vertex_point, tm1 (tm2)) Extra: If this parameter is omitted, an internal property map for CGAL::vertex_point_t must be available in TriangleMesh. a property map containing the constrained-or-not status of each edge of tm1 (tm2) Type: a class model of ReadablePropertyMap with boost::graph_traits::edge_descriptor as key type and bool as value type Default: a constant property map returning false for any edge a property map associating to each face of tm1 (tm2) a unique index between 0 and num_faces(tm1) - 1 (num_faces(tm2) - 1) Type: a class model of ReadablePropertyMap with boost::graph_traits::face_descriptor as key type and std::size_t as value type Default: an automatically indexed internal map Extra: If the property map is writable, the indices of the faces of tm1 and tm2 will be set after the corefinement is done. a visitor used to track the creation of new faces Type: a class model of PMPCorefinementVisitor Default: Corefinement::Default_visitor Extra: np1 only If true the set of triangles closed to the intersection of tm1 and tm2 will be checked for self-intersections and Corefinement::Self_intersection_exception will be thrown if at least one self-intersection is found. Type: Boolean Default: false Extra: np1 only
Parameters
 np_out an optional sequence of Named Parameters among the ones listed below
Optional Named Parameters
 a property map associating points to the vertices of tm_out Type: a class model of ReadWritePropertyMap with boost::graph_traits::vertex_descriptor as key type and Point_3 as value type Default: boost::get(CGAL::vertex_point, tm_out) Extra: If this parameter is omitted, an internal property map for CGAL::vertex_point_t must be available in TriangleMesh. a property map containing the constrained-or-not status of each edge of tm_out. An edge of tm_out is constrained if it is on the intersection of tm1 and tm2, or if the edge corresponds to a constrained edge in tm1 or tm2. Type: a class model of WritablePropertyMap with boost::graph_traits::edge_descriptor as key type and bool as value type
Returns
true if the output surface mesh is manifold and is put into tm_out. If false is returned and if tm_out is one of the input surface meshes, then tm_out is only corefined.
Examples:
Polygon_mesh_processing/corefinement_consecutive_bool_op.cpp, Polygon_mesh_processing/corefinement_mesh_union.cpp, Polygon_mesh_processing/corefinement_mesh_union_progress.cpp, and Polygon_mesh_processing/corefinement_OM_union.cpp.

## ◆ split() [1/3]

template<class TriangleMesh , class NamedParameters1 = parameters::Default_named_parameters, class NamedParameters2 = parameters::Default_named_parameters>
 void CGAL::Polygon_mesh_processing::split ( TriangleMesh & tm, TriangleMesh & splitter, const NamedParameters1 & np_tm = parameters::default_values(), const NamedParameters2 & np_s = parameters::default_values() )

#include <CGAL/Polygon_mesh_processing/clip.h>

corefines tm and splitter and duplicates edges in tm that are on the intersection with splitter.

Precondition
!CGAL::Polygon_mesh_processing::does_self_intersect(tm)
!CGAL::Polygon_mesh_processing::does_self_intersect(splitter)
Template Parameters
 TriangleMesh a model of MutableFaceGraph, HalfedgeListGraph, and FaceListGraph. NamedParameters1 a sequence of Named Parameters NamedParameters2 a sequence of Named Parameters
Parameters
 tm input triangulated surface mesh splitter triangulated surface mesh used to split tm np_tm an optional sequence of Named Parameters among the ones listed below np_s an optional sequence of Named Parameters among the ones listed below
Optional Named Parameters
 a property map associating points to the vertices of tm (splitter) Type: a class model of ReadWritePropertyMap with boost::graph_traits::vertex_descriptor as key type and Point_3 as value type Default: boost::get(CGAL::vertex_point, tm) Default: If this parameter is omitted, an internal property map for CGAL::vertex_point_t must be available in TriangleMesh. a visitor used to track the creation of new faces Type: a class model of PMPCorefinementVisitor Default: Corefinement::Default_visitor If true, the set of triangles closed to the intersection of tm and splitter will be checked for self-intersections and CGAL::Polygon_mesh_processing::Corefinement::Self_intersection_exception will be thrown if at least one self-intersection is found. Type: Boolean Default: false (np_s only) if true, splitter will not be modified. Type: Boolean Default: false Extra: If this option is set to true, tm is no longer required to be without self-intersection. Setting this option to true will automatically set throw_on_self_intersection to false and clip_volume to false.
clip()

## ◆ split() [2/3]

template<class TriangleMesh , class NamedParameters = parameters::Default_named_parameters>
 void CGAL::Polygon_mesh_processing::split ( TriangleMesh & tm, const Plane_3 & plane, const NamedParameters & np = parameters::default_values() )

#include <CGAL/Polygon_mesh_processing/clip.h>

adds intersection edges of plane and tm in tm and duplicates those edges.

Note
Plane_3 must be from the same Kernel as the point of the internal vertex point map of TriangleMesh.
Plane_3 must be from the same Kernel as the point of the vertex point map of tm.
Precondition
!CGAL::Polygon_mesh_processing::does_self_intersect(tm)
Template Parameters
 TriangleMesh a model of MutableFaceGraph, HalfedgeListGraph, and FaceListGraph. An internal property map for CGAL::vertex_point_t must be available. NamedParameters a sequence of Named Parameters
Parameters
 tm input triangulated surface mesh plane the plane that will be used to split tm. Plane_3 is the plane type for the same CGAL kernel as the point of the vertex point map of tm. np an optional sequence of Named Parameters among the ones listed below
Optional Named Parameters
 a property map associating points to the vertices of tm Type: a class model of ReadWritePropertyMap with boost::graph_traits::vertex_descriptor as key type and Point_3 as value type Default: boost::get(CGAL::vertex_point, tm) a visitor used to track the creation of new faces Type: a class model of PMPCorefinementVisitor Default: Corefinement::Default_visitor If true, the set of triangles closed to the intersection of tm and plane will be checked for self-intersections and CGAL::Polygon_mesh_processing::Corefinement::Self_intersection_exception will be thrown if at least one self-intersection is found. Type: Boolean Default: false If true, self-intersections are accepted for tm. Type: Boolean Default: false Extra: If this option is set to true, tm is no longer required to be without self-intersection. Setting this option to true will automatically set throw_on_self_intersection to false.
clip()

## ◆ split() [3/3]

template<class TriangleMesh , class NamedParameters = parameters::Default_named_parameters>
 void CGAL::Polygon_mesh_processing::split ( TriangleMesh & tm, const Iso_cuboid_3 & iso_cuboid, const NamedParameters & np = parameters::default_values() )

#include <CGAL/Polygon_mesh_processing/clip.h>

adds intersection edges of iso_cuboid and tm in tm and duplicates those edges.

Note
Iso_cuboid_3 must be from the same Kernel as the point of the internal vertex point map of TriangleMesh.
Iso_cuboid_3 must be from the same Kernel as the point of the vertex point map of tm.
Precondition
!CGAL::Polygon_mesh_processing::does_self_intersect(tm)
Template Parameters
 TriangleMesh a model of MutableFaceGraph, HalfedgeListGraph, and FaceListGraph. An internal property map for CGAL::vertex_point_t must be available. NamedParameters a sequence of Named Parameters
Parameters
 tm input triangulated surface mesh iso_cuboid iso-cuboid used to split tm. np an optional sequence of Named Parameters among the ones listed below
Optional Named Parameters
 a property map associating points to the vertices of tm Type: a class model of ReadWritePropertyMap with boost::graph_traits::vertex_descriptor as key type and Point_3 as value type Default: boost::get(CGAL::vertex_point, tm) a visitor used to track the creation of new faces Type: a class model of PMPCorefinementVisitor Default: Corefinement::Default_visitor If true, the set of triangles closed to the intersection of tm and iso_cuboid will be checked for self-intersections and CGAL::Polygon_mesh_processing::Corefinement::Self_intersection_exception will be thrown if at least one self-intersection is found. Type: Boolean Default: false If true, and tm is closed, the clipping will be done on the volume bounded by tm rather than on its surface (i.e., tm will be kept closed). Type: Boolean Default: false if false, the parts of tm coplanar with iso_cuboid will not be part of the output. Type: Boolean Default: true If true, self-intersections are accepted for tm. Type: Boolean Default: false Extra: If this option is set to true, tm is no longer required to be without self-intersection. Setting this option to true will automatically set throw_on_self_intersection to false and clip_volume to false.
clip()

## ◆ surface_intersection()

template<class OutputIterator , class TriangleMesh , class NamedParameters1 = parameters::Default_named_parameters, class NamedParameters2 = parameters::Default_named_parameters>
 OutputIterator CGAL::Polygon_mesh_processing::surface_intersection ( const TriangleMesh & tm1, const TriangleMesh & tm2, OutputIterator polyline_output, const NamedParameters1 & np1 = parameters::default_values(), const NamedParameters2 & np2 = parameters::default_values() )

#include <CGAL/Polygon_mesh_processing/intersection.h>

computes the intersection of triangles of tm1 and tm2.

The output is a set of polylines with all vertices but endpoints being of degree 2.

Precondition
!CGAL::Polygon_mesh_processing::does_self_intersect(tm1)
!CGAL::Polygon_mesh_processing::does_self_intersect(tm2)
Template Parameters
 TriangleMesh a model of MutableFaceGraph, HalfedgeListGraph and FaceListGraph NamedParameters1 a sequence of Named Parameters NamedParameters2 a sequence of Named Parameters OutputIterator an output iterator in which std::vector of points can be put. The point type is the one from the vertex property map
Parameters
 tm1 first input triangulated surface mesh tm2 second input triangulated surface mesh polyline_output output iterator of polylines. Each polyline will be given as a vector of points np1 an optional sequence of Named Parameters among the ones listed below np2 an optional sequence of Named Parameters among the ones listed below
Optional Named Parameters
 a property map associating points to the vertices of tm1 (tm2) Type: a class model of ReadablePropertyMap with boost::graph_traits::vertex_descriptor as key type and Point_3 as value type Default: boost::get(CGAL::vertex_point, tm1 (tm2)) Extra: If this parameter is omitted, an internal property map for CGAL::vertex_point_t should be available for the vertices of tm1 (tm2) Extra: Both vertex point maps must have the same value type If true, the set of triangles closed to the intersection of tm1 and tm2 will be checked for self-intersections and Corefinement::Self_intersection_exception will be thrown if at least one self-intersection is found. Type: Boolean Default: false Extra: np1 only
do_intersect()