mirror of https://github.com/CGAL/cgal
replace bool parameter throw_on_self_intersection with a named parameter
used it at the same time in Boolean operation functions
This commit is contained in:
parent
eea53718bb
commit
d3a9f655af
|
|
@ -65,6 +65,7 @@ CGAL_add_named_parameter(outward_orientation_t, outward_orientation, outward_ori
|
||||||
CGAL_add_named_parameter(overlap_test_t, overlap_test, do_overlap_test_of_bounded_sides)
|
CGAL_add_named_parameter(overlap_test_t, overlap_test, do_overlap_test_of_bounded_sides)
|
||||||
CGAL_add_named_parameter(preserve_genus_t, preserve_genus, preserve_genus)
|
CGAL_add_named_parameter(preserve_genus_t, preserve_genus, preserve_genus)
|
||||||
CGAL_add_named_parameter(new_face_visitor_t, new_face_visitor, new_face_visitor)
|
CGAL_add_named_parameter(new_face_visitor_t, new_face_visitor, new_face_visitor)
|
||||||
|
CGAL_add_named_parameter(throw_on_self_intersection_t, throw_on_self_intersection, throw_on_self_intersection)
|
||||||
|
|
||||||
// List of named parameters that we use in the package 'Surface Mesh Simplification'
|
// List of named parameters that we use in the package 'Surface Mesh Simplification'
|
||||||
CGAL_add_named_parameter(get_cost_policy_t, get_cost_policy, get_cost)
|
CGAL_add_named_parameter(get_cost_policy_t, get_cost_policy, get_cost)
|
||||||
|
|
|
||||||
|
|
@ -73,6 +73,7 @@ void test(const NamedParameters& np)
|
||||||
assert(get_param(np, CGAL::internal_np::nb_points_per_area_unit).v == 32);
|
assert(get_param(np, CGAL::internal_np::nb_points_per_area_unit).v == 32);
|
||||||
assert(get_param(np, CGAL::internal_np::nb_points_per_distance_unit).v == 33);
|
assert(get_param(np, CGAL::internal_np::nb_points_per_distance_unit).v == 33);
|
||||||
assert(get_param(np, CGAL::internal_np::new_face_visitor).v == 42);
|
assert(get_param(np, CGAL::internal_np::new_face_visitor).v == 42);
|
||||||
|
assert(get_param(np, CGAL::internal_np::throw_on_self_intersection).v == 43);
|
||||||
|
|
||||||
// Named parameters that we use in the package 'Surface Mesh Simplification'
|
// Named parameters that we use in the package 'Surface Mesh Simplification'
|
||||||
assert(get_param(np, CGAL::internal_np::get_cost_policy).v == 34);
|
assert(get_param(np, CGAL::internal_np::get_cost_policy).v == 34);
|
||||||
|
|
@ -138,6 +139,7 @@ void test(const NamedParameters& np)
|
||||||
check_same_type<32>(get_param(np, CGAL::internal_np::nb_points_per_area_unit));
|
check_same_type<32>(get_param(np, CGAL::internal_np::nb_points_per_area_unit));
|
||||||
check_same_type<33>(get_param(np, CGAL::internal_np::nb_points_per_distance_unit));
|
check_same_type<33>(get_param(np, CGAL::internal_np::nb_points_per_distance_unit));
|
||||||
check_same_type<42>(get_param(np, CGAL::internal_np::new_face_visitor));
|
check_same_type<42>(get_param(np, CGAL::internal_np::new_face_visitor));
|
||||||
|
check_same_type<43>(get_param(np, CGAL::internal_np::throw_on_self_intersection));
|
||||||
|
|
||||||
// Named parameters that we use in the package 'Surface Mesh Simplification'
|
// Named parameters that we use in the package 'Surface Mesh Simplification'
|
||||||
check_same_type<34>(get_param(np, CGAL::internal_np::get_cost_policy));
|
check_same_type<34>(get_param(np, CGAL::internal_np::get_cost_policy));
|
||||||
|
|
@ -202,6 +204,7 @@ int main()
|
||||||
.preserve_genus(A<40>(40))
|
.preserve_genus(A<40>(40))
|
||||||
.verbosity_level(A<41>(41))
|
.verbosity_level(A<41>(41))
|
||||||
.new_face_visitor(A<42>(42))
|
.new_face_visitor(A<42>(42))
|
||||||
|
.throw_on_self_intersection(A<43>(43))
|
||||||
);
|
);
|
||||||
|
|
||||||
return EXIT_SUCCESS;
|
return EXIT_SUCCESS;
|
||||||
|
|
|
||||||
|
|
@ -38,6 +38,10 @@ Release date: September 2018
|
||||||
- Add in corefinement-related functions a new named parameter `new_face_visitor`
|
- Add in corefinement-related functions a new named parameter `new_face_visitor`
|
||||||
that make it possible to pass a visitor to the function in order to track
|
that make it possible to pass a visitor to the function in order to track
|
||||||
the creation of new faces.
|
the creation of new faces.
|
||||||
|
- Add in all corefinement-related functions a named parameter `throw_on_self_intersection`
|
||||||
|
(that replace the `bool` parameter in `corefine()`) that enables to check for
|
||||||
|
self-intersections faces involved in the intersection before trying to corefine the
|
||||||
|
input meshes.
|
||||||
|
|
||||||
Release 4.12
|
Release 4.12
|
||||||
------------
|
------------
|
||||||
|
|
|
||||||
|
|
@ -318,6 +318,15 @@ to track the creation of new faces.
|
||||||
\b Default `CGAL::Polygon_mesh_processing::Corefinement::Default_new_face_visitor`
|
\b Default `CGAL::Polygon_mesh_processing::Corefinement::Default_new_face_visitor`
|
||||||
\cgalNPEnd
|
\cgalNPEnd
|
||||||
|
|
||||||
|
\cgalNPBegin{throw_on_self_intersection} \anchor PMP_throw_on_self_intersection
|
||||||
|
Parameter used in corefinement-related functions to make the functions throw an exception in
|
||||||
|
case some faces involved in the intersection of the input are self-intersecting
|
||||||
|
and make the operation impossible with the current version of the code.
|
||||||
|
\n
|
||||||
|
\b Type : `bool` \n
|
||||||
|
\b Default value is `false`
|
||||||
|
\cgalNPEnd
|
||||||
|
|
||||||
|
|
||||||
\cgalNPTableEnd
|
\cgalNPTableEnd
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -284,9 +284,11 @@ corefine_and_compute_boolean_operations(
|
||||||
const cpp11::tuple<NamedParametersOut0,
|
const cpp11::tuple<NamedParametersOut0,
|
||||||
NamedParametersOut1,
|
NamedParametersOut1,
|
||||||
NamedParametersOut2,
|
NamedParametersOut2,
|
||||||
NamedParametersOut3>& nps_out,
|
NamedParametersOut3>& nps_out)
|
||||||
const bool throw_on_self_intersection = false )
|
|
||||||
{
|
{
|
||||||
|
const bool throw_on_self_intersection =
|
||||||
|
boost::choose_param(get_param(np1, internal_np::throw_on_self_intersection), false);
|
||||||
|
|
||||||
// Vertex point maps
|
// Vertex point maps
|
||||||
//for input meshes
|
//for input meshes
|
||||||
typedef typename GetVertexPointMap<TriangleMesh,
|
typedef typename GetVertexPointMap<TriangleMesh,
|
||||||
|
|
@ -437,15 +439,13 @@ cpp11::array<bool,4>
|
||||||
corefine_and_compute_boolean_operations(
|
corefine_and_compute_boolean_operations(
|
||||||
TriangleMesh& tm1,
|
TriangleMesh& tm1,
|
||||||
TriangleMesh& tm2,
|
TriangleMesh& tm2,
|
||||||
const cpp11::array< boost::optional<TriangleMesh*>,4>& output,
|
const cpp11::array< boost::optional<TriangleMesh*>,4>& output)
|
||||||
const bool throw_on_self_intersection = false )
|
|
||||||
{
|
{
|
||||||
using namespace CGAL::Polygon_mesh_processing::parameters;
|
using namespace CGAL::Polygon_mesh_processing::parameters;
|
||||||
return corefine_and_compute_boolean_operations(tm1, tm2, output,
|
return corefine_and_compute_boolean_operations(tm1, tm2, output,
|
||||||
all_default(), all_default(),
|
all_default(), all_default(),
|
||||||
cpp11::make_tuple(all_default(), all_default(),
|
cpp11::make_tuple(all_default(), all_default(),
|
||||||
all_default(), all_default()),
|
all_default(), all_default()));
|
||||||
throw_on_self_intersection);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#undef CGAL_COREF_SET_OUTPUT_VERTEX_POINT_MAP
|
#undef CGAL_COREF_SET_OUTPUT_VERTEX_POINT_MAP
|
||||||
|
|
@ -495,6 +495,11 @@ corefine_and_compute_boolean_operations(
|
||||||
* \cgalParamBegin{new_face_visitor} a class model of `PMPCorefinementNewFaceVisitor`
|
* \cgalParamBegin{new_face_visitor} a class model of `PMPCorefinementNewFaceVisitor`
|
||||||
* that is used to track the creation of new faces (`np1` only)
|
* that is used to track the creation of new faces (`np1` only)
|
||||||
* \cgalParamEnd
|
* \cgalParamEnd
|
||||||
|
* \cgalParamBegin{throw_on_self_intersection} if `true`, for each input triangle mesh,
|
||||||
|
* the set of triangles closed to the intersection of `tm1` and `tm2` will be
|
||||||
|
* checked for self-intersection and `CGAL::Polygon_mesh_processing::Corefinement::Self_intersection_exception`
|
||||||
|
* will be thrown if at least one is found (`np1` only).
|
||||||
|
* \cgalParamEnd
|
||||||
* \cgalNamedParamsEnd
|
* \cgalNamedParamsEnd
|
||||||
*
|
*
|
||||||
* @param np_out optional sequence of \ref pmp_namedparameters "Named Parameters" among the ones listed below
|
* @param np_out optional sequence of \ref pmp_namedparameters "Named Parameters" among the ones listed below
|
||||||
|
|
@ -623,10 +628,6 @@ corefine_and_compute_difference( TriangleMesh& tm1,
|
||||||
* @param tm2 second input triangulated surface mesh
|
* @param tm2 second input triangulated surface mesh
|
||||||
* @param np1 optional sequence of \ref pmp_namedparameters "Named Parameters" among the ones listed below
|
* @param np1 optional sequence of \ref pmp_namedparameters "Named Parameters" among the ones listed below
|
||||||
* @param np2 optional sequence of \ref pmp_namedparameters "Named Parameters" among the ones listed below
|
* @param np2 optional sequence of \ref pmp_namedparameters "Named Parameters" among the ones listed below
|
||||||
* @param throw_on_self_intersection if `true`, for each input triangle mesh,
|
|
||||||
* the set of triangles closed to the intersection of `tm1` and `tm2` will be
|
|
||||||
* checked for self-intersection and `CGAL::Polygon_mesh_processing::Corefinement::Self_intersection_exception`
|
|
||||||
* will be thrown if at least one is found.
|
|
||||||
*
|
*
|
||||||
* \cgalNamedParamsBegin
|
* \cgalNamedParamsBegin
|
||||||
* \cgalParamBegin{vertex_point_map}
|
* \cgalParamBegin{vertex_point_map}
|
||||||
|
|
@ -640,6 +641,11 @@ corefine_and_compute_difference( TriangleMesh& tm1,
|
||||||
* \cgalParamBegin{new_face_visitor} a class model of `PMPCorefinementNewFaceVisitor`
|
* \cgalParamBegin{new_face_visitor} a class model of `PMPCorefinementNewFaceVisitor`
|
||||||
* that is used to track the creation of new faces (`np1` only)
|
* that is used to track the creation of new faces (`np1` only)
|
||||||
* \cgalParamEnd
|
* \cgalParamEnd
|
||||||
|
* \cgalParamBegin{throw_on_self_intersection} if `true`, for each input triangle mesh,
|
||||||
|
* the set of triangles closed to the intersection of `tm1` and `tm2` will be
|
||||||
|
* checked for self-intersection and `CGAL::Polygon_mesh_processing::Corefinement::Self_intersection_exception`
|
||||||
|
* will be thrown if at least one is found (`np1` only).
|
||||||
|
* \cgalParamEnd
|
||||||
* \cgalNamedParamsEnd
|
* \cgalNamedParamsEnd
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
@ -650,9 +656,11 @@ corefine_and_compute_difference( TriangleMesh& tm1,
|
||||||
corefine( TriangleMesh& tm1,
|
corefine( TriangleMesh& tm1,
|
||||||
TriangleMesh& tm2,
|
TriangleMesh& tm2,
|
||||||
const NamedParameters1& np1,
|
const NamedParameters1& np1,
|
||||||
const NamedParameters2& np2,
|
const NamedParameters2& np2)
|
||||||
const bool throw_on_self_intersection = false)
|
|
||||||
{
|
{
|
||||||
|
const bool throw_on_self_intersection =
|
||||||
|
boost::choose_param(get_param(np1, internal_np::throw_on_self_intersection), false);
|
||||||
|
|
||||||
// Vertex point maps
|
// Vertex point maps
|
||||||
typedef typename GetVertexPointMap<TriangleMesh,
|
typedef typename GetVertexPointMap<TriangleMesh,
|
||||||
NamedParameters1>::type Vpm;
|
NamedParameters1>::type Vpm;
|
||||||
|
|
@ -1006,22 +1014,60 @@ template <class TriangleMesh, class NamedParameters1>
|
||||||
void
|
void
|
||||||
corefine( TriangleMesh& tm1,
|
corefine( TriangleMesh& tm1,
|
||||||
TriangleMesh& tm2,
|
TriangleMesh& tm2,
|
||||||
const NamedParameters1& np1,
|
const NamedParameters1& np1)
|
||||||
const bool throw_on_self_intersection = false)
|
|
||||||
{
|
{
|
||||||
using namespace CGAL::Polygon_mesh_processing::parameters;
|
using namespace CGAL::Polygon_mesh_processing::parameters;
|
||||||
corefine(tm1, tm2, np1, all_default(), throw_on_self_intersection);
|
corefine(tm1, tm2, np1, all_default());
|
||||||
|
}
|
||||||
|
|
||||||
|
template <class TriangleMesh>
|
||||||
|
void
|
||||||
|
corefine( TriangleMesh& tm1,
|
||||||
|
TriangleMesh& tm2)
|
||||||
|
{
|
||||||
|
using namespace CGAL::Polygon_mesh_processing::parameters;
|
||||||
|
corefine(tm1, tm2, all_default(), all_default());
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifndef CGAL_NO_DEPRECATED_CODE
|
||||||
|
template <class TriangleMesh,
|
||||||
|
class NamedParameters1,
|
||||||
|
class NamedParameters2>
|
||||||
|
void
|
||||||
|
corefine( TriangleMesh& tm1,
|
||||||
|
TriangleMesh& tm2,
|
||||||
|
const NamedParameters1& np1,
|
||||||
|
const NamedParameters2& np2,
|
||||||
|
const bool throw_on_self_intersection)
|
||||||
|
{
|
||||||
|
corefine(tm1, tm2, np1.throw_on_self_intersection(throw_on_self_intersection), np2);
|
||||||
|
}
|
||||||
|
|
||||||
|
template <class TriangleMesh, class NamedParameters1>
|
||||||
|
void
|
||||||
|
corefine( TriangleMesh& tm1,
|
||||||
|
TriangleMesh& tm2,
|
||||||
|
const NamedParameters1& np1,
|
||||||
|
const bool throw_on_self_intersection)
|
||||||
|
{
|
||||||
|
namespace params = CGAL::Polygon_mesh_processing::parameters;
|
||||||
|
corefine(tm1, tm2,
|
||||||
|
np1.throw_on_self_intersection(throw_on_self_intersection),
|
||||||
|
params::all_default());
|
||||||
}
|
}
|
||||||
|
|
||||||
template <class TriangleMesh>
|
template <class TriangleMesh>
|
||||||
void
|
void
|
||||||
corefine( TriangleMesh& tm1,
|
corefine( TriangleMesh& tm1,
|
||||||
TriangleMesh& tm2,
|
TriangleMesh& tm2,
|
||||||
const bool throw_on_self_intersection = false)
|
const bool throw_on_self_intersection)
|
||||||
{
|
{
|
||||||
using namespace CGAL::Polygon_mesh_processing::parameters;
|
namespace params = CGAL::Polygon_mesh_processing::parameters;
|
||||||
corefine(tm1, tm2, all_default(), all_default(), throw_on_self_intersection);
|
corefine(tm1, tm2,
|
||||||
|
params::throw_on_self_intersection(throw_on_self_intersection),
|
||||||
|
params::all_default());
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
///// autorefine /////
|
///// autorefine /////
|
||||||
namespace experimental {
|
namespace experimental {
|
||||||
|
|
|
||||||
|
|
@ -1640,10 +1640,6 @@ OutputIterator intersecting_meshes(const TriangleMeshRange& range,
|
||||||
* @param tm2 second input triangulated surface mesh
|
* @param tm2 second input triangulated surface mesh
|
||||||
* @param polyline_output output iterator of polylines. Each polyline will be
|
* @param polyline_output output iterator of polylines. Each polyline will be
|
||||||
* given as a vector of points
|
* given as a vector of points
|
||||||
* @param throw_on_self_intersection if `true`, for each input triangle mesh,
|
|
||||||
* the set of triangles closed to the intersection of `tm1` and `tm2` will be
|
|
||||||
* checked for self-intersection and `CGAL::Polygon_mesh_processing::Corefinement::Self_intersection_exception`
|
|
||||||
* will be thrown if at least one is found.
|
|
||||||
* @param np1 optional sequence of \ref pmp_namedparameters "Named Parameters" among the ones listed below
|
* @param np1 optional sequence of \ref pmp_namedparameters "Named Parameters" among the ones listed below
|
||||||
* @param np2 optional sequence of \ref pmp_namedparameters "Named Parameters" among the ones listed below
|
* @param np2 optional sequence of \ref pmp_namedparameters "Named Parameters" among the ones listed below
|
||||||
*
|
*
|
||||||
|
|
@ -1652,6 +1648,11 @@ OutputIterator intersecting_meshes(const TriangleMeshRange& range,
|
||||||
* a property map with the points associated to the vertices of `tm1`
|
* a property map with the points associated to the vertices of `tm1`
|
||||||
* (`tm2`). The two property map types must be the same.
|
* (`tm2`). The two property map types must be the same.
|
||||||
* \cgalParamEnd
|
* \cgalParamEnd
|
||||||
|
* \cgalParamBegin{throw_on_self_intersection} if `true`, for each input triangle mesh,
|
||||||
|
* the set of triangles closed to the intersection of `tm1` and `tm2` will be
|
||||||
|
* checked for self-intersection and `CGAL::Polygon_mesh_processing::Corefinement::Self_intersection_exception`
|
||||||
|
* will be thrown if at least one is found (`np1` only).
|
||||||
|
* \cgalParamEnd
|
||||||
* \cgalNamedParamsEnd
|
* \cgalNamedParamsEnd
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
@ -1664,9 +1665,11 @@ surface_intersection(const TriangleMesh& tm1,
|
||||||
const TriangleMesh& tm2,
|
const TriangleMesh& tm2,
|
||||||
OutputIterator polyline_output,
|
OutputIterator polyline_output,
|
||||||
const NamedParameters1& np1,
|
const NamedParameters1& np1,
|
||||||
const NamedParameters2& np2,
|
const NamedParameters2& np2)
|
||||||
const bool throw_on_self_intersection=false)
|
|
||||||
{
|
{
|
||||||
|
const bool throw_on_self_intersection =
|
||||||
|
boost::choose_param(get_param(np1, internal_np::throw_on_self_intersection), false);
|
||||||
|
|
||||||
typedef typename GetVertexPointMap<TriangleMesh,
|
typedef typename GetVertexPointMap<TriangleMesh,
|
||||||
NamedParameters1>::const_type Vpm;
|
NamedParameters1>::const_type Vpm;
|
||||||
typedef typename GetVertexPointMap<TriangleMesh,
|
typedef typename GetVertexPointMap<TriangleMesh,
|
||||||
|
|
@ -1747,16 +1750,44 @@ template <class OutputIterator,
|
||||||
OutputIterator
|
OutputIterator
|
||||||
surface_intersection(const TriangleMesh& tm1,
|
surface_intersection(const TriangleMesh& tm1,
|
||||||
const TriangleMesh& tm2,
|
const TriangleMesh& tm2,
|
||||||
OutputIterator polyline_output,
|
OutputIterator polyline_output)
|
||||||
const bool throw_on_self_intersection=false)
|
|
||||||
{
|
{
|
||||||
return surface_intersection(tm1, tm2, polyline_output,
|
return surface_intersection(tm1, tm2, polyline_output,
|
||||||
CGAL::Polygon_mesh_processing::parameters::all_default(),
|
CGAL::Polygon_mesh_processing::parameters::all_default(),
|
||||||
CGAL::Polygon_mesh_processing::parameters::all_default(),
|
CGAL::Polygon_mesh_processing::parameters::all_default());
|
||||||
throw_on_self_intersection
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifndef CGAL_NO_DEPRECATED_CODE
|
||||||
|
template <class OutputIterator,
|
||||||
|
class TriangleMesh,
|
||||||
|
class NamedParameters1,
|
||||||
|
class NamedParameters2 >
|
||||||
|
OutputIterator
|
||||||
|
surface_intersection(const TriangleMesh& tm1,
|
||||||
|
const TriangleMesh& tm2,
|
||||||
|
OutputIterator polyline_output,
|
||||||
|
const NamedParameters1& np1,
|
||||||
|
const NamedParameters2& np2,
|
||||||
|
const bool throw_on_self_intersection)
|
||||||
|
{
|
||||||
|
return surface_intersection(tm1, tm2, polyline_output,
|
||||||
|
np1.throw_on_self_intersection(throw_on_self_intersection), np2);
|
||||||
|
}
|
||||||
|
|
||||||
|
template <class OutputIterator,
|
||||||
|
class TriangleMesh >
|
||||||
|
OutputIterator
|
||||||
|
surface_intersection(const TriangleMesh& tm1,
|
||||||
|
const TriangleMesh& tm2,
|
||||||
|
OutputIterator polyline_output,
|
||||||
|
const bool throw_on_self_intersection)
|
||||||
|
{
|
||||||
|
return surface_intersection(tm1, tm2, polyline_output,
|
||||||
|
CGAL::Polygon_mesh_processing::parameters::throw_on_self_intersection(throw_on_self_intersection),
|
||||||
|
CGAL::Polygon_mesh_processing::parameters::all_default());
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
namespace experimental {
|
namespace experimental {
|
||||||
template <class OutputIterator,
|
template <class OutputIterator,
|
||||||
class TriangleMesh >
|
class TriangleMesh >
|
||||||
|
|
|
||||||
|
|
@ -12,6 +12,8 @@
|
||||||
using namespace CGAL::Three;
|
using namespace CGAL::Three;
|
||||||
|
|
||||||
namespace PMP = CGAL::Polygon_mesh_processing;
|
namespace PMP = CGAL::Polygon_mesh_processing;
|
||||||
|
namespace params = PMP::parameters;
|
||||||
|
|
||||||
class Polyhedron_demo_corefinement_sm_plugin :
|
class Polyhedron_demo_corefinement_sm_plugin :
|
||||||
public QObject,
|
public QObject,
|
||||||
public Polyhedron_demo_plugin_helper
|
public Polyhedron_demo_plugin_helper
|
||||||
|
|
@ -165,7 +167,7 @@ private:
|
||||||
}
|
}
|
||||||
|
|
||||||
QApplication::setOverrideCursor(Qt::WaitCursor);
|
QApplication::setOverrideCursor(Qt::WaitCursor);
|
||||||
PMP::corefine(*item1->face_graph(), *item2->face_graph());
|
PMP::corefine(*item1->face_graph(), *item2->face_graph(), params::throw_on_self_intersection(true));
|
||||||
item1->invalidateOpenGLBuffers();
|
item1->invalidateOpenGLBuffers();
|
||||||
item2->invalidateOpenGLBuffers();
|
item2->invalidateOpenGLBuffers();
|
||||||
scene->itemChanged(item2);
|
scene->itemChanged(item2);
|
||||||
|
|
@ -197,7 +199,7 @@ private:
|
||||||
{
|
{
|
||||||
case CRF_UNION:
|
case CRF_UNION:
|
||||||
P = *first_item->face_graph(), Q = *item->face_graph();
|
P = *first_item->face_graph(), Q = *item->face_graph();
|
||||||
if (! PMP::corefine_and_compute_union(P, Q, *new_poly) )
|
if (! PMP::corefine_and_compute_union(P, Q, *new_poly, params::throw_on_self_intersection(true)) )
|
||||||
{
|
{
|
||||||
delete new_poly;
|
delete new_poly;
|
||||||
messages->warning(tr("The result of the requested operation is not manifold and has not been computed."));
|
messages->warning(tr("The result of the requested operation is not manifold and has not been computed."));
|
||||||
|
|
@ -209,7 +211,7 @@ private:
|
||||||
break;
|
break;
|
||||||
case CRF_INTER:
|
case CRF_INTER:
|
||||||
P = *first_item->polyhedron(), Q = *item->polyhedron();
|
P = *first_item->polyhedron(), Q = *item->polyhedron();
|
||||||
if (! PMP::corefine_and_compute_intersection(P, Q, *new_poly) )
|
if (! PMP::corefine_and_compute_intersection(P, Q, *new_poly, params::throw_on_self_intersection(true)) )
|
||||||
{
|
{
|
||||||
delete new_poly;
|
delete new_poly;
|
||||||
messages->warning(tr("The result of the requested operation is not manifold and has not been computed."));
|
messages->warning(tr("The result of the requested operation is not manifold and has not been computed."));
|
||||||
|
|
@ -224,7 +226,7 @@ private:
|
||||||
CGAL_FALLTHROUGH;
|
CGAL_FALLTHROUGH;
|
||||||
case CRF_MINUS:
|
case CRF_MINUS:
|
||||||
P = *first_item->polyhedron(), Q = *item->polyhedron();
|
P = *first_item->polyhedron(), Q = *item->polyhedron();
|
||||||
if (! PMP::corefine_and_compute_difference(P, Q, *new_poly) )
|
if (! PMP::corefine_and_compute_difference(P, Q, *new_poly, params::throw_on_self_intersection(true)) )
|
||||||
{
|
{
|
||||||
delete new_poly;
|
delete new_poly;
|
||||||
messages->warning(tr("The result of the requested operation is not manifold and has not been computed."));
|
messages->warning(tr("The result of the requested operation is not manifold and has not been computed."));
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue