diff --git a/Boolean_set_operations_2/doc/Boolean_set_operations_2/CGAL/Boolean_set_operations_2.h b/Boolean_set_operations_2/doc/Boolean_set_operations_2/CGAL/Boolean_set_operations_2.h
deleted file mode 100644
index 59d0efa4236..00000000000
--- a/Boolean_set_operations_2/doc/Boolean_set_operations_2/CGAL/Boolean_set_operations_2.h
+++ /dev/null
@@ -1,3018 +0,0 @@
-namespace CGAL {
-
-/*! \addtogroup boolean_complement Complement Functions
- * \ingroup PkgBooleanSetOperations2Ref
- * \anchor ref_bso_complement
- *
- * There are several overloaded function templates called `complement()` that
- * compute the \e complement of a given polygon `pgn`. Depending on the type of
- * the polygon `pgn` the complement is either a single (general) polygon with
- * holes, or several (general) poylgons with holes. In the latter case the
- * `complement()` function template inserts the resulting poylgons with holes
- * into a container via an output iterator.
- *
- * A function template in this group has one of the two following signatures:
- * - `void complement(const Type1& pgn, Type2& res);`
- * - `void complement(const Type1& pgn, Type2& res, const GpsTraits& traits);`
- *
- * \cgalHeading{Parameters}
- *
- * The types `Type` and `Type2` of the parameters must be convertible to the
- * types specified in a row in the table below, respectively.
- *
- *
- *
- * | `Type1` | `Type2` |
- * | `Polygon_2` | `Polygon_with_holes_2` |
- * | `Polygon_with_holes_2` | `Polygon_with_holes_2` |
- * | `General_polygon_2` | `General_polygon_with_holes_2` |
- * | `General_polygon_with_holes_2` | `General_polygon_with_holes_2` |
- *
- *
- *
- * \sa \link boolean_do_intersect `CGAL::do_intersect()` \endlink
- * \sa \link boolean_intersection `CGAL::intersection()` \endlink
- * \sa \link boolean_join `CGAL::join()` \endlink
- * \sa \link boolean_difference `CGAL::difference()` \endlink
- * \sa \link boolean_symmetric_difference `CGAL::symmetric_difference()` \endlink
- */
-
-/// @{
-
-//////// Traits-less
-
-/*! computes the complement of a polygon.
- * \param pgn the input polygon.
- * \param res the resulting complement of \p pgn.
- */
-template
-void complement(const Polygon_2& pgn,
- Polygon_with_holes_2& res);
-
-/*! computes the complement of a polygon.
- * \tparam UsePolylines determines whether the boundary of `pgn` is treated as a
- * cyclic sequence of single (\f$x\f$-monotone) segments or as a cyclic
- * sequence of (\f$x\f$-monotone) polylines. If substituted with
- * `CGAL::Tag_true`, which is the default, `pgn` is converted into a
- * general polygon bounded by polylines before the operation is actually
- * performed. Then, the resulting general polygon with holes is
- * converted back to a standard polygon. If substituted with
- * `CGAL::Tag_false`, `pgn` is used as is. Refer to \ref
- * bso_ssectraits_sel for more information.
- * \param pgn the input polygon.
- * \param res the resulting complement of \p pgn.
- */
-template
-void complement(const Polygon_2& pgn,
- Polygon_with_holes_2& res,
- UsePolylines = UsePolylines());
-
-/*! computes the complement of a general polygon.
- * \param pgn the input polygon.
- * \param res the complement of \p pgn.
- * \pre `%ArrTraits` must be a model of the concept
- * `ArrangementDirectionalXMonotoneTraits_2`.
- */
-template
-void
-complement(const General_polygon_2& pgn,
- General_polygon_with_holes_2>& res);
-
-/*! computes the complement of a polygon with holes.
- * \param pgn the input polygon.
- * \param oi the output iterator for the result.
- * Its dereference type must be convertible to
- * `Polygon_with_holes_2`.
- * \return the past-the-end iterator of the output container.
- */
-template
-OutputIterator complement(const Polygon_with_holes_2& pgn,
- OutputIterator oi);
-
-/*! computes the complement of a polygon with holes.
- * \tparam UsePolylines determines whether the boundaries of `pgn` is treated as
- * cyclic sequences of single (\f$x\f$-monotone) segments or as cyclic
- * sequences of (\f$x\f$-monotone) polylines. If substituted with
- * `CGAL::Tag_true`, which is the default, `pgn` is converted into a
- * general polygon with holes bounded by polylines before the operation
- * is actually performed. Then, the resulting general polygons with
- * holes are converted back to a standard polygon with holes. If
- * substituted with `CGAL::Tag_false`, `pgn` is used as is. Refer to
- * \ref bso_ssectraits_sel for more information.
- * \param pgn the input polygon.
- * \param oi the output iterator for the result.
- * Its dereference type must be convertible to
- * `Polygon_with_holes_2`.
- * \return the past-the-end iterator of the output container.
- */
-template
-OutputIterator complement(const Polygon_with_holes_2& pgn,
- OutputIterator oi,
- UsePolylines = UsePolylines());
-
-/*! computes the complement of a general polygon with holes.
- * \param pgn the input polygon.
- * \param oi the output iterator for the result.
- * Its dereference type must be convertible to
- * `General_polygon_with_holes_2<>`.
- * \return the past-the-end iterator of the output container.
- * \pre `%ArrTraits` must be a model of the concept
- * `ArrangementDirectionalXMonotoneTraits_2`.
- */
-template
-OutputIterator
-complement(const General_polygon_with_holes_2>& pgn,
- OutputIterator oi);
-
-//////// With Traits
-
-/*! computes the complement of a polygon.
- * \param pgn the input polygon.
- * \param res the resulting complement of \p pgn
- * \param traits a traits object.
- * \pre `GpsTraits` must be a model of the concept `GeneralPolygonSetTraits_2`.
- */
-template
-void complement(const Polygon_2& pgn,
- Polygon_with_holes_2& res,
- const GpsTraits& traits);
-
-/*! computes the complement of a general polygon.
- * \param pgn the input polygon.
- * \param res the resulting complement of \p pgn
- * \param traits a traits object.
- * \pre `%ArrTraits` must be a model of the concept
- * `ArrangementDirectionalXMonotoneTraits_2`.
- * \pre `GpsTraits` must be a model of the concept `GeneralPolygonSetTraits_2`.
- */
-template
-void
-complement(const General_polygon_2& pgn,
- General_polygon_with_holes_2>& res,
- const GpsTraits& traits);
-
-/*! computes the complement of a polygon with holes.
- * \param pgn the input polygon.
- * \param oi the output iterator for the result.
- * Its dereference type must be convertible to
- * `Polygon_with_holes_2`.
- * \param traits a traits object.
- * \return the past-the-end iterator of the output container.
- * \pre `GpsTraits` must be a model of the concept `GeneralPolygonSetTraits_2`.
- */
-template
-OutputIterator complement(const Polygon_with_holes_2& pgn,
- OutputIterator oi,
- const GpsTraits& traits);
-
-/*! computes the complement of the general polygon with holes.
- * \param pgn the input polygon.
- * \param oi the output iterator for the result.
- * Its dereference type must be convertible to
- * `General_polygon_with_holes_2<>`.
- * \param traits a traits object.
- * \return the past-the-end iterator of the output container.
- * \pre `%ArrTraits` must be a model of the concept
- * `ArrangementDirectionalXMonotoneTraits_2`.
- * \pre `GpsTraits` must be a model of the concept `GeneralPolygonSetTraits_2`.
- */
-template
-OutputIterator complement(const General_polygon_with_holes_2& pgn,
- OutputIterator oi,
- const GpsTraits& traits);
-
-/// @}
-
-} /* namespace CGAL */
-
-namespace CGAL {
-
-/*! \addtogroup boolean_difference Difference Functions
- * \ingroup PkgBooleanSetOperations2Ref
- * \anchor ref_bso_difference
- *
- * There are several overloaded function templates called `difference()` that
- * compute the \e difference between two polygons and insert the resulting
- * polygons with holes into a container via an output iterator.
- *
- * A function template in this group has one of the two following signatures:
- * - `OutputIterator difference(const Type1& pgn1, const Type2& pgn2,
- * OutputIterator oi);`
- * - `OutputIterator difference(const Type1& pgn1, const Type2& pgn2,
- * OutputIterator oi, const GpsTraits& traits);`
- *
- * \param oi the output iterator for the result.
- *
- * The types `Type1` and `Type2` of the parameters must be convertible to the
- * types specified in a row in the table below, respectively. The 3rd column
- * specifies the corresponding dereference type of the output iterator.
- *
- *
- *
- * | `Type1` | `Type2` | %Dereference Type of `oi` |
- * | `Polygon_2` | `Polygon_2` | `Polygon_with_holes_2` |
- * | `Polygon_2` | `Polygon_with_holes_2` | `Polygon_with_holes_2` |
- * | `Polygon_with_holes_2` | `Polygon_2` | `Polygon_with_holes_2` |
- * | `Polygon_with_holes_2` | `Polygon_with_holes_2` | `Polygon_with_holes_2` |
- * | `General_polygon_2` | `General_polygon_2` | `General_polygon_with_holes_2` |
- * | `General_polygon_2` | `General_polygon_with_holes_2` | `General_polygon_with_holes_2` |
- * | `General_polygon_with_holes_2` | `General_polygon_2` | `General_polygon_with_holes_2` |
- * | `General_polygon_with_holes_2` | `General_polygon_with_holes_2` | `General_polygon_with_holes_2` |
- *
- *
- *
- * \sa \link boolean_complement `CGAL::complement()` \endlink
- * \sa \link boolean_do_intersect `CGAL::do_intersect()` \endlink
- * \sa \link boolean_intersection `CGAL::intersection()` \endlink
- * \sa \link boolean_join `CGAL::join()` \endlink
- * \sa \link boolean_symmetric_difference `CGAL::symmetric_difference()` \endlink
- */
-
-/// @{
-
-//////// Traits-less
-
-/*! computes the difference of two polygons and inserts the resulting polygons
- * with holes into a container via an output iterator.
- * \param pgn1 the 1st input polygon.
- * \param pgn2 the 2nd input polygon.
- * \param oi the output iterator for the result.
- * Its dereference type must be convertibe to
- * `Polygon_with_holes_2`.
- * \return the past-the-end iterator of the output container.
- */
-template
-OutputIterator difference(const Polygon_2& pgn1,
- const Polygon_2& pgn2,
- OutputIterator oi);
-
-/*! computes the difference of two polygons and inserts the resulting polygons
- * with holes into a container via an output iterator.
- * \tparam UsePolylines determines whether the boundaries of `pgn1` and `pgn2`
- * are treated as cyclic sequences of single (\f$x\f$-monotone) segments
- * or as a cyclic sequences of (\f$x\f$-monotone) polylines. If
- * substituted with `CGAL::Tag_true`, which is the default, `pgn1` and
- * `pgn2` are converted into a general polygons bounded by polylines
- * before the operation is actually performed. Then, the resulting
- * general polygons with holes are converted back to standard
- * polygons with holes. If substituted with `CGAL::Tag_false`, `pgn1`
- * and `pgn2` are used as is. Refer to \ref bso_ssectraits_sel for more
- * information.
- * \param pgn1 the 1st input polygon.
- * \param pgn2 the 2nd input polygon.
- * \param oi the output iterator for the result.
- * Its dereference type must be convertibe to
- * `Polygon_with_holes_2`.
- * \return the past-the-end iterator of the output container.
- */
-template
-OutputIterator difference(const Polygon_2& pgn1,
- const Polygon_2& pgn2,
- OutputIterator oi,
- UsePolylines = UsePolylines());
-
-/*! computes the difference of two polygons and inserts the resulting polygons
- * with holes into a container via an output iterator.
- * \param pgn1 the 1st input polygon.
- * \param pgn2 the 2nd input polygon.
- * \param oi the output iterator for the result.
- * Its dereference type must be convertibe to
- * `Polygon_with_holes_2`.
- * \return the past-the-end iterator of the output container.
- */
-template
-OutputIterator difference(const Polygon_2& pgn1,
- const Polygon_with_holes_2& pgn2,
- OutputIterator oi);
-
-/*! computes the difference of two polygons and inserts the resulting polygons
- * with holes into a container via an output iterator.
- * \tparam UsePolylines determines whether the boundaries of `pgn1` and `pgn2`
- * are treated as cyclic sequences of single (\f$x\f$-monotone) segments
- * or as a cyclic sequences of (\f$x\f$-monotone) polylines. If
- * substituted with `CGAL::Tag_true`, which is the default, `pgn1` and
- * `pgn2` are converted into a general polygon and a general polygon
- * with holes, respectively, bounded by polylines before the operation
- * is actually performed. Then, the resulting general polygons with
- * holes are converted back to standard polygons with holes. If
- * substituted with `CGAL::Tag_false`, `pgn1` and `pgn2` are used as
- * is. Refer to \ref bso_ssectraits_sel for more information.
- * \param pgn1 the 1st input polygon.
- * \param pgn2 the 2nd input polygon.
- * \param oi the output iterator for the result.
- * Its dereference type must be convertibe to
- * `Polygon_with_holes_2`.
- * \return the past-the-end iterator of the output container.
- */
-template
-OutputIterator difference(const Polygon_2& pgn1,
- const Polygon_with_holes_2& pgn2,
- OutputIterator oi,
- UsePolylines = UsePolylines());
-
-/*! computes the difference of two polygons and inserts the resulting polygons
- * with holes into a container via an output iterator.
- * \param pgn1 the 1st input polygon.
- * \param pgn2 the 2nd input polygon.
- * \param oi the output iterator for the result.
- * Its dereference type must be convertibe to
- * `Polygon_with_holes_2`.
- * \return the past-the-end iterator of the output container.
- */
-template
-OutputIterator difference(const Polygon_with_holes_2& pgn1,
- const Polygon_2& pgn2,
- OutputIterator oi);
-
-/*! computes the difference of two polygons and inserts the resulting polygons
- * with holes into a container via an output iterator.
- * \tparam UsePolylines determines whether the boundaries of `pgn1` and `pgn2`
- * are treated as cyclic sequences of single (\f$x\f$-monotone) segments
- * or as a cyclic sequences of (\f$x\f$-monotone) polylines. If
- * substituted with `CGAL::Tag_true`, which is the default, `pgn1` and
- * `pgn2` are converted into a general polygon with holes and a general
- * polygon, respectively, bounded by polylines before the operation
- * is actually performed. Then, the resulting general polygons with
- * holes are converted back to standard polygons with holes. If
- * substituted with `CGAL::Tag_false`, `pgn1` and `pgn2` are used as
- * is. Refer to \ref bso_ssectraits_sel for more information.
- * \param pgn1 the 1st input polygon.
- * \param pgn2 the 2nd input polygon.
- * \param oi the output iterator for the result.
- * Its dereference type must be convertibe to
- * `Polygon_with_holes_2`.
- * \return the past-the-end iterator of the output container.
- */
-template
-OutputIterator difference(const Polygon_with_holes_2& pgn1,
- const Polygon_2& pgn2,
- OutputIterator oi,
- UsePolylines = UsePolylines());
-
-/*! computes the difference of two polygons and inserts the resulting polygons
- * with holes into a container via an output iterator.
- * \param pgn1 the 1st input polygon.
- * \param pgn2 the 2nd input polygon.
- * \param oi the output iterator for the result.
- * Its dereference type must be convertibe to
- * `Polygon_with_holes_2`.
- * \return the past-the-end iterator of the output container.
- */
-template
-OutputIterator difference(const Polygon_with_holes_2& pgn1,
- const Polygon_with_holes_2& pgn2,
- OutputIterator oi);
-
-/*! computes the difference of two polygons and inserts the resulting polygons
- * with holes into a container via an output iterator.
- * \tparam UsePolylines determines whether the boundaries of `pgn1` and `pgn2`
- * are treated as cyclic sequences of single (\f$x\f$-monotone) segments
- * or as a cyclic sequences of (\f$x\f$-monotone) polylines. If
- * substituted with `CGAL::Tag_true`, which is the default, `pgn1` and
- * `pgn2` are converted into general polygons with holes, bounded by
- * polylines before the operation is actually performed. Then, the
- * resulting general polygons with holes are converted back to standard
- * polygons with holes. If substituted with `CGAL::Tag_false`, `pgn1`
- * and `pgn2` are used as is. Refer to \ref bso_ssectraits_sel for more
- * information.
- * \param pgn1 the 1st input polygon.
- * \param pgn2 the 2nd input polygon.
- * \param oi the output iterator for the result.
- * Its dereference type must be convertibe to
- * `Polygon_with_holes_2`.
- * \return the past-the-end iterator of the output container.
- */
-template
-OutputIterator difference(const Polygon_with_holes_2& pgn1,
- const Polygon_with_holes_2& pgn2,
- OutputIterator oi,
- UsePolylines = UsePolylines());
-
-/*! computes the difference of two general polygons and inserts the resulting
- * general polygons with holes into a container via an output iterator.
- * \param pgn1 the 1st input polygon.
- * \param pgn2 the 2nd input polygon.
- * \param oi the output iterator for the result.
- * Its dereference type must be convertibe to
- * `General_polygon_with_holes_2>`.
- * \return the past-the-end iterator of the output container.
- * \pre `%ArrTraits` must be a model of the concept `ArrangementDirectionalXMonotoneTraits_2`.
- */
-template
-OutputIterator difference(const General_polygon_2& pgn1,
- const General_polygon_2& pgn2,
- OutputIterator oi);
-
-/*! computes the difference of two general polygons and inserts the resulting
- * general polygons with holes into a container via an output iterator.
- * \param pgn1 the 1st input polygon.
- * \param pgn2 the 2nd input polygon.
- * \param oi the output iterator for the result.
- * Its dereference type must be convertibe to
- * `General_polygon_with_holes_2>`.
- * \return the past-the-end iterator of the output container.
- * \pre `%ArrTraits` must be a model of the concept
- * `ArrangementDirectionalXMonotoneTraits_2`.
- */
-template
-OutputIterator
-difference(const General_polygon_with_holes_2>& pgn1,
- const General_polygon_2& pgn2,
- OutputIterator oi);
-
-/*! computes the difference of two polygons and inserts the resulting
- * general polygons with holes into a container via an output iterator.
- * \param pgn1 the 1st input polygon.
- * \param pgn2 the 2nd input polygon.
- * \param oi the output iterator for the result.
- * Its dereference type must be convertibe to
- * `General_polygon_with_holes_2>`.
- * \return the past-the-end iterator of the output container.
- * \pre `%ArrTraits` must be a model of the concept
- * `ArrangementDirectionalXMonotoneTraits_2`.
- */
-template
-OutputIterator
-difference(const General_polygon_2& pgn1,
- const General_polygon_with_holes_2>& pgn2,
- OutputIterator oi);
-
-/*! computes the difference of two general polygons with holes and inserts the
- * resulting general polygons with holes into a container via an output
- * iterator.
- * \param pgn1 the 1st input polygon.
- * \param pgn2 the 2nd input polygon.
- * \param oi the output iterator for the result.
- * Its dereference type must be convertibe to
- * `General_polygon_with_holes_2`.
- * \return the past-the-end iterator of the output container.
- */
-template
-OutputIterator difference(const General_polygon_with_holes_2& pgn1,
- const General_polygon_with_holes_2& pgn2,
- OutputIterator oi);
-
-//////// With Traits
-
-/*! computes the difference of two polygons and inserts the resulting polygons
- * with holes into a container via an output iterator.
- * \param pgn1 the 1st input polygon.
- * \param pgn2 the 2nd input polygon.
- * \param oi the output iterator for the result.
- * Its dereference type must be convertibe to
- * `Polygon_with_holes_2`.
- * \param traits a traits object.
- * \return the past-the-end iterator of the output container.
- * \pre GpsTraits must be a model of `GeneralPolygonSetTraits_2`.
- */
-template
-OutputIterator difference(const Polygon_2& pgn1,
- const Polygon_2& pgn2,
- OutputIterator oi,
- const GpsTraits& traits);
-
-/*! computes the difference of two polygons and inserts the resulting polygons
- * with holes into a container via an output iterator.
- * \param pgn1 the 1st input polygon.
- * \param pgn2 the 2nd input polygon.
- * \param oi the output iterator for the result.
- * Its dereference type must be convertibe to
- * `Polygon_with_holes_2`.
- * \param traits a traits object.
- * \return the past-the-end iterator of the output container.
- * \pre GpsTraits must be a model of `GeneralPolygonSetTraits_2`.
- */
-template
-OutputIterator difference(const Polygon_2& pgn1,
- const Polygon_with_holes_2& pgn2,
- OutputIterator oi,
- const GpsTraits& traits);
-
-/*! computes the difference of two polygons and inserts the resulting polygons
- * with holes into a container via an output iterator.
- * \param pgn1 the 1st input polygon.
- * \param pgn2 the 2nd input polygon.
- * \param oi the output iterator for the result.
- * Its dereference type must be convertibe to
- * `Polygon_with_holes_2`.
- * \param traits a traits object.
- * \return the past-the-end iterator of the output container.
- * \pre GpsTraits must be a model of `GeneralPolygonSetTraits_2`.
- */
-template
-OutputIterator difference(const Polygon_with_holes_2& pgn1,
- const Polygon_2& pgn2,
- OutputIterator oi,
- const GpsTraits& traits);
-
-/*! computes the difference of two polygons with holes and inserts the resulting
- * polygons with holes into a container via an output iterator.
- * \param pgn1 the 1st input polygon.
- * \param pgn2 the 2nd input polygon.
- * \param oi the output iterator for the result.
- * Its dereference type must be convertibe to
- * `Polygon_with_holes_2`.
- * \param traits a traits object.
- * \return the past-the-end iterator of the output container.
- * \pre GpsTraits must be a model of `GeneralPolygonSetTraits_2`.
- */
-template
-OutputIterator difference(const Polygon_with_holes_2& pgn1,
- const Polygon_with_holes_2& pgn2,
- OutputIterator oi,
- const GpsTraits& traits);
-
-/*! computes the difference of two general polygons and inserts the resulting
- * general polygons with holes into a container via an output iterator.
- * \param pgn1 the 1st input polygon.
- * \param pgn2 the 2nd input polygon.
- * \param oi the output iterator for the result.
- * Its dereference type must be convertibe to
- * `General_polygon_with_holes_2>`.
- * \param traits a traits object.
- * \return the past-the-end iterator of the output container.
- * \pre `%ArrTraits` must be a model of the concept
- * `ArrangementDirectionalXMonotoneTraits_2`.
- * \pre GpsTraits must be a model of `GeneralPolygonSetTraits_2`.
- */
-template
-OutputIterator difference(const General_polygon_2& pgn1,
- const General_polygon_2& pgn2,
- OutputIterator oi,
- const GpsTraits& traits);
-
-/*! computes the difference of two general polygons and inserts the resulting
- * general polygons with holes into a container via an output iterator.
- * \param pgn1 the 1st input polygon.
- * \param pgn2 the 2nd input polygon.
- * \param oi the output iterator for the result.
- * Its dereference type must be convertibe to
- * `General_polygon_with_holes_2>`.
- * \param traits a traits object.
- * \return the past-the-end iterator of the output container.
- * \pre `%ArrTraits` must be a model of the concept
- * `ArrangementDirectionalXMonotoneTraits_2`.
- * \pre GpsTraits must be a model of `GeneralPolygonSetTraits_2`.
- */
-template
-OutputIterator
-difference(const General_polygon_with_holes_2>& pgn1,
- const General_polygon_2& pgn2,
- OutputIterator oi,
- const GpsTraits& traits);
-
-/*! computes the difference of two general polygons and inserts the resulting
- * general polygons with holes into a container via an output iterator.
- * \param pgn1 the 1st input polygon.
- * \param pgn2 the 2nd input polygon.
- * \param oi the output iterator for the result.
- * Its dereference type must be convertibe to
- * `General_polygon_with_holes_2>`.
- * \param traits a traits object.
- * \return the past-the-end iterator of the output container.
- * \pre `%ArrTraits` must be a model of the concept
- * `ArrangementDirectionalXMonotoneTraits_2`.
- * \pre GpsTraits must be a model of `GeneralPolygonSetTraits_2`.
- */
-template
-OutputIterator
-difference(const General_polygon_2& pgn1,
- const General_polygon_with_holes_2>& pgn2,
- OutputIterator oi,
- const GpsTraits& traits);
-
-/*! computes the difference of two general polygons and inserts the resulting
- * general polygons with holes into a container via an output iterator.
- * \param pgn1 the 1st input polygon.
- * \param pgn2 the 2nd input polygon.
- * \param oi the output iterator for the result.
- * Its dereference type must be convertibe to
- * `General_polygon_with_holes_2`.
- * \param traits a traits object.
- * \return the past-the-end iterator of the output container.
- * \pre GpsTraits must be a model of `GeneralPolygonSetTraits_2`.
- */
-template
-OutputIterator difference(const General_polygon_with_holes_2& pgn1,
- const General_polygon_with_holes_2& pgn2,
- OutputIterator oi,
- const GpsTraits& traits);
-/// @}
-
-} /* namespace CGAL */
-
-namespace CGAL {
-
-/*! \addtogroup boolean_do_intersect Intersection Testing Functions
- * \ingroup PkgBooleanSetOperations2Ref
- * \anchor ref_bso_do_intersect
- *
- * There are several overloaded function templates called `do_intersect()`
- * that determine whether the interior of two or more polygons intersect.
- *
- * A function template in this group that accepts two input polygons has one of
- * the two following signatures:
- * - `bool do_intersect(const Type1& pgn1, const Type2& pgn2);`
- * - `bool do_intersect(const Type1& pgn1, const Type2& pgn2,
- const GpsTraits& traits);`
- *
- * \cgalHeading{Parameters}
- *
- * The types `Type1` and `Type2` of the parameters must be convertible to the
- * types specified in a row in the table below, respectively.
- *
- *
- *
- * | `Type1` | `Type2` |
- * | `Polygon_2` | `Polygon_2` |
- * | `Polygon_2` | `Polygon_with_holes_2` |
- * | `Polygon_with_holes_2` | `Polygon_2` |
- * | `Polygon_with_holes_2` | `Polygon_with_holes_2` |
- * | `General_polygon_2` | `General_polygon_2` |
- * | `General_polygon_2` | `General_polygon_with_holes_2` |
- * | `General_polygon_with_holes_2` | `General_polygon_2` |
- * | `General_polygon_with_holes_2` | `General_polygon_with_holes_2` |
- *
- *
- *
- * \sa \link boolean_complement `CGAL::complement()` \endlink
- * \sa \link boolean_intersection `CGAL::intersection()` \endlink
- * \sa \link boolean_join `CGAL::join()` \endlink
- * \sa \link boolean_difference `CGAL::difference()` \endlink
- * \sa \link boolean_symmetric_difference `CGAL::symmetric_difference()` \endlink
- */
-
-/// @{
-
-//////// Traits-less
-
-/*! determines whether two polygons intersect in their interior.
- * \param pgn1 the 1st input polygon.
- * \param pgn2 the 2nd input polygon.
- * \return `true` if `pgn1` and `pgn2` intersect in their interiro and `false`
- * otherwise.
- */
-template
-bool do_intersect(const Polygon_2& pgn1,
- const Polygon_2& pgn2);
-
-/*! determines whether two polygons intersect in their interior.
- * \tparam UsePolylines determines whether the boundaries of `pgn1` and `pgn2`
- * are treated as cyclic sequences of single (\f$x\f$-monotone) segments
- * or as a cyclic sequences of (\f$x\f$-monotone) polylines. If
- * substituted with `CGAL::Tag_true`, which is the default, `pgn1` and
- * `pgn2` are converted into general polygons, bounded by polylines
- * before the operation is actually performed. If substituted with
- * `CGAL::Tag_false`, `pgn1` and `pgn2` are used as is. Refer to \ref
- * bso_ssectraits_sel for more information.
- * \param pgn1 the 1st input polygon.
- * \param pgn2 the 2nd input polygon.
- * \return `true` if `pgn1` and `pgn2` intersect in their interiro and `false`
- * otherwise.
- */
-template
-bool do_intersect(const Polygon_2& pgn1,
- const Polygon_2& pgn2,
- UsePolylines = UsePolylines());
-
-/*! determines whether two polygons intersect in their interior.
- * \param pgn1 the 1st input polygon.
- * \param pgn2 the 2nd input polygon.
- * \return `true` if `pgn1` and `pgn2` intersect in their interiro and `false`
- * otherwise.
- */
-template
-bool do_intersect(const Polygon_2& pgn1,
- const Polygon_with_holes_2& pgn2);
-
-/*! determines whether two polygons intersect in their interior.
- * \tparam UsePolylines determines whether the boundaries of `pgn1` and `pgn2`
- * are treated as cyclic sequences of single (\f$x\f$-monotone) segments
- * or as a cyclic sequences of (\f$x\f$-monotone) polylines. If
- * substituted with `CGAL::Tag_true`, which is the default, `pgn1` and
- * `pgn2` are converted into a general polygon and a general polygon
- * with holes, respectively, bounded by polylines before the operation
- * is actually performed. If substituted with `CGAL::Tag_false`, `pgn1`
- * and `pgn2` are used as is. Refer to \ref bso_ssectraits_sel for more
- * information.
- * \param pgn1 the 1st input polygon.
- * \param pgn2 the 2nd input polygon.
- * \return `true` if `pgn1` and `pgn2` intersect in their interiro and `false`
- * otherwise.
- */
-template
-bool do_intersect(const Polygon_2& pgn1,
- const Polygon_with_holes_2& pgn2,
- UsePolylines = UsePolylines());
-
-/*! determines whether two polygons intersect in their interior.
- * \param pgn1 the 1st input polygon.
- * \param pgn2 the 2nd input polygon.
- * \return `true` if `pgn1` and `pgn2` intersect in their interiro and `false`
- * otherwise.
- */
-template
-bool do_intersect(const Polygon_with_holes_2& pgn1,
- const Polygon_2& pgn2);
-
-/*! determines whether two polygons intersect in their interior.
- * \tparam UsePolylines determines whether the boundaries of `pgn1` and `pgn2`
- * are treated as cyclic sequences of single (\f$x\f$-monotone) segments
- * or as a cyclic sequences of (\f$x\f$-monotone) polylines. If
- * substituted with `CGAL::Tag_true`, which is the default, `pgn1` and
- * `pgn2` are converted into a general polygon with holes and a general
- * polygon, respectively, bounded by polylines before the operation
- * is actually performed. If substituted with `CGAL::Tag_false`, `pgn1`
- * and `pgn2` are used as is. Refer to \ref bso_ssectraits_sel for more
- * information.
- * \param pgn1 the 1st input polygon.
- * \param pgn2 the 2nd input polygon.
- * \return `true` if `pgn1` and `pgn2` intersect in their interiro and `false`
- * otherwise.
- */
-template
-bool do_intersect(const Polygon_with_holes_2& pgn1,
- const Polygon_2& pgn2,
- UsePolylines = UsePolylines());
-
-/*! determines whether two polygons with holes intersect in their interior.
- * \param pgn1 the 1st input polygon.
- * \param pgn2 the 2nd input polygon.
- * \return `true` if `pgn1` and `pgn2` intersect in their interiro and `false`
- * otherwise.
- */
-template
-bool do_intersect(const Polygon_with_holes_2& pgn1,
- const Polygon_with_holes_2& pgn2);
-
-/*! determines whether two polygons with holes intersect in their interior.
- * \tparam UsePolylines determines whether the boundaries of `pgn1` and `pgn2`
- * are treated as cyclic sequences of single (\f$x\f$-monotone) segments
- * or as a cyclic sequences of (\f$x\f$-monotone) polylines. If
- * substituted with `CGAL::Tag_true`, which is the default, `pgn1` and
- * `pgn2` are converted into general polygon with holes , bounded by
- * polylines before the operation is actually performed. If substituted
- * with `CGAL::Tag_false`, `pgn1` and `pgn2` are used as is. Refer to
- * \ref bso_ssectraits_sel for more information.
- * \param pgn1 the 1st input polygon.
- * \param pgn2 the 2nd input polygon.
- * \return `true` if `pgn1` and `pgn2` intersect in their interiro and `false`
- * otherwise.
- */
-template
-bool do_intersect(const Polygon_with_holes_2& pgn1,
- const Polygon_with_holes_2& pgn2,
- UsePolylines = UsePolylines());
-
-/*! determines whether two general polygons intersect in their interior.
- * \param pgn1 the 1st input polygon.
- * \param pgn2 the 2nd input polygon.
- * \return `true` if `pgn1` and `pgn2` intersect in their interiro and `false`
- * otherwise.
- * \pre `%ArrTraits` must be a model of the concept
- * `ArrangementDirectionalXMonotoneTraits_2`.
- */
-template
-bool do_intersect(const General_polygon_2& pgn1,
- const General_polygon_2& pgn2);
-
-/*! determines whether two general polygons intersect in their interior.
- * \param pgn1 the 1st input polygon.
- * \param pgn2 the 2nd input polygon.
- * \return `true` if `pgn1` and `pgn2` intersect in their interiro and `false`
- * otherwise.
- * \pre `%ArrTraits` must be a model of the concept
- * `ArrangementDirectionalXMonotoneTraits_2`.
- */
-template
-bool
-do_intersect(const General_polygon_2& pgn1,
- const General_polygon_with_holes_2>& pgn2);
-
-/*! determines whether two general polygons intersect in their interior.
- * \param pgn1 the 1st input polygon.
- * \param pgn2 the 2nd input polygon.
- * \return `true` if `pgn1` and `pgn2` intersect in their interiro and `false`
- * otherwise.
- * \pre `%ArrTraits` must be a model of the concept
- * `ArrangementDirectionalXMonotoneTraits_2`.
- */
-template
-bool do_intersect(const General_polygon_with_holes_2>& pgn1,
- const General_polygon_2& pgn2);
-
-/*! determines whether two general polygons with holes intersect in their
- * interior.
- * \param pgn1 the 1st input polygon.
- * \param pgn2 the 2nd input polygon.
- * \return `true` if `pgn1` and `pgn2` intersect in their interiro and `false`
- * otherwise.
- */
-template
-bool do_intersect(const General_polygon_with_holes_2& pgn1,
- const General_polygon_with_holes_2& pgn2);
-
-/*! Given a range of polygons or a range of polygons with holes (resp. a range
- * of general polygons or a range of general polygons with holes) determines
- * whether the open polygons (resp. general polygons) in the range have a common
- * point.
- * \param begin the first iterator of the input range. Its value type is
- * either `Polygon_2` (resp. `General_polygon_2`) or
- * `Polygon_with_holes_2` (resp. `General_polygon_with_holes_2`).
- * \param end the past-the-end iterator of the input range. Its value type is
- * either `Polygon_2` (resp. `General_polygon_2`) or
- * `Polygon_with_holes_2` (resp. `General_polygon_with_holes_2`).
- * \return `true` if the pairwise intersections of all open polygons or polygons
- * with holes (resp. general polygons or general polygons with holes) in
- * the range [*begin,*end) overlap, and `false` otherwise.
- */
-template
-bool do_intersect(InputIterator begin, InputIterator end);
-
-/*! Given a range of polygons or a range of polygons with holes (resp. a range
- * of general polygons or a range of general polygons with holes) determines
- * whether the open polygons (resp. general polygons) in the range have a common
- * point.
- * \tparam UsePolylines determines whether the boundaries of the polygons in the
- * input range are treated as cyclic sequences of single
- * (\f$x\f$-monotone) segments or as a cyclic sequences of
- * (\f$x\f$-monotone) polylines. If substituted with `CGAL::Tag_true`,
- * which is the default, the input polygons are converted into general
- * polygon with holes , bounded by polylines before the operation is
- * actually performed. If substituted with `CGAL::Tag_false`, `pgn1` and
- * `pgn2` are used as is. Refer to \ref bso_ssectraits_sel for more
- * information.
- * \param begin the first iterator of the input range. Its value type is
- * either `Polygon_2` (resp. `General_polygon_2`) or
- * `Polygon_with_holes_2` (resp. `General_polygon_with_holes_2`).
- * \param end the past-the-end iterator of the input range. Its value type is
- * either `Polygon_2` (resp. `General_polygon_2`) or
- * `Polygon_with_holes_2` (resp. `General_polygon_with_holes_2`).
- * \return `true` if the pairwise intersections of all open polygons or polygons
- * with holes (resp. general polygons or general polygons with holes) in
- * the range [*begin,*end) overlap, and `false` otherwise.
- */
-template
-bool do_intersect(InputIterator begin, InputIterator end,
- UsePolylines = UsePolylines());
-
-/*! Given a range of polygons (resp. general polygons) and a range of polygons
- * with holes (resp. general polygons with holes) determines whether the open
- * polygons (resp. general polygons) in the two ranges have a common point.
- * \param begin1 the first iterator of the 1st input range. Its value type is
- * `Polygon_2` (resp. `General_polygon_2`).
- * \param end1 the past-the-end iterator of the 1st input range. Its value
- * type is `Polygon_2` (resp. `General_polygon_2`).
- * \param begin2 the first iterator of the 2nd input range. Its value type
- * is `Polygon_with_holes_2` (resp. `General_polygon_with_holes_2`).
- * \param end2 the past-the-end iterator of the 2nd input range. Its value
- * type is `Polygon_with_holes_2` (resp. `General_polygon_with_holes_2`).
- * \return `true` if the pairwise intersections of all open polygons (resp.
- * general polygons) and polygons with holes (resp. general polygons with
- * holes) in the ranges [*begin1,*end1) and [*begin2,*end2),
- * respectively, overlap, and `false` otherwise.
- */
-template
-bool do_intersect(InputIterator1 begin1, InputIterator1 end1,
- InputIterator2 begin2, InputIterator2 end2);
-
-/*! Given a range of polygons (resp. general polygons) and a range of polygons
- * with holes (resp. general polygons with holes) determines whether the open
- * polygons (resp. general polygons) in the two ranges have a common point.
- * \tparam UsePolylines determines whether the boundaries of the polygons in the
- * input ranges are treated as cyclic sequences of single
- * (\f$x\f$-monotone) segments or as a cyclic sequences of
- * (\f$x\f$-monotone) polylines. If substituted with `CGAL::Tag_true`,
- * which is the default, the input polygons are converted into general
- * polygon with holes , bounded by polylines before the operation is
- * actually performed. If substituted with `CGAL::Tag_false`, `pgn1` and
- * `pgn2` are used as is. Refer to \ref bso_ssectraits_sel for more
- * information.
- * \param begin1 the first iterator of the 1st input range. Its value type is
- * `Polygon_2` (resp. `General_polygon_2`).
- * \param end1 the past-the-end iterator of the 1st input range. Its value
- * type is `Polygon_2` (resp. `General_polygon_2`).
- * \param begin2 the first iterator of the 2nd input range. Its value type
- * is `Polygon_with_holes_2` (resp. `General_polygon_with_holes_2`).
- * \param end2 the past-the-end iterator of the 2nd input range. Its value
- * type is `Polygon_with_holes_2` (resp. `General_polygon_with_holes_2`).
- * \return `true` if the pairwise intersections of all open polygons (resp.
- * general polygons) and polygons with holes (resp. general polygons with
- * holes) in the ranges [*begin1,*end1) and [*begin2,*end2),
- * respectively, overlap, and `false` otherwise.
- */
-template
-bool do_intersect(InputIterator1 begin1, InputIterator1 end1,
- InputIterator2 begin2, InputIterator2 end2,
- UsePolylines = UsePolylines());
-
-//////// With Traits
-
-/*! determines whether two polygons intersect in their interior.
- * \param pgn1 the 1st input polygon.
- * \param pgn2 the 2nd input polygon.
- * \param traits a traits object.
- * \return `true` if `pgn1` and `pgn2` intersect in their interiro and `false`
- * otherwise.
- * \pre `GpsTraits` must be a model of the concept `GeneralPolygonSetTraits_2`.
- */
-template
-bool do_intersect(const Polygon_2& pgn1,
- const Polygon_2& pgn2,
- const GpsTraits& traits);
-
-/*! determines whether two polygons intersect in their interior.
- * \param pgn1 the 1st input polygon.
- * \param pgn2 the 2nd input polygon.
- * \param traits a traits object.
- * \return `true` if `pgn1` and `pgn2` intersect in their interiro and `false`
- * otherwise.
- * \pre `GpsTraits` must be a model of the concept `GeneralPolygonSetTraits_2`.
- */
-template
-bool do_intersect(const Polygon_2& pgn1,
- const Polygon_with_holes_2& pgn2,
- const GpsTraits& traits,
- const GpsTraits& traits);
-
-/*! determines whether two polygons intersect in their interior.
- * \param pgn1 the 1st input polygon.
- * \param pgn2 the 2nd input polygon.
- * \param traits a traits object.
- * \return `true` if `pgn1` and `pgn2` intersect in their interiro and `false`
- * otherwise.
- * \pre `GpsTraits` must be a model of the concept `GeneralPolygonSetTraits_2`.
- */
-template
-bool do_intersect(const Polygon_with_holes_2& pgn1,
- const Polygon_2& pgn2,
- const GpsTraits& traits);
-
-/*! determines whether two polygons with holes intersect in their interior.
- * \param pgn1 the 1st input polygon.
- * \param pgn2 the 2nd input polygon.
- * \param traits a traits object.
- * \return `true` if `pgn1` and `pgn2` intersect in their interiro and `false`
- * otherwise.
- * \pre `GpsTraits` must be a model of the concept `GeneralPolygonSetTraits_2`.
- */
-template
-bool do_intersect(const Polygon_with_holes_2& pgn1,
- const Polygon_with_holes_2& pgn2,
- const GpsTraits& traits);
-
-/*! determines whether two general polygons intersect in their interior.
- * \param pgn1 the 1st input polygon.
- * \param pgn2 the 2nd input polygon.
- * \param traits a traits object.
- * \return `true` if `pgn1` and `pgn2` intersect in their interiro and `false`
- * otherwise.
- * \pre `GpsTraits` must be a model of the concept `GeneralPolygonSetTraits_2`.
- * \pre `%ArrTraits` must be a model of the concept
- * `ArrangementDirectionalXMonotoneTraits_2`.
- */
-template
-bool do_intersect(const General_polygon_2& pgn1,
- const General_polygon_2& pgn2,
- const GpsTraits& traits);
-
-/*! determines whether two general polygons intersect in their interior.
- * \param pgn1 the 1st input polygon.
- * \param pgn2 the 2nd input polygon.
- * \param traits a traits object.
- * \return `true` if `pgn1` and `pgn2` intersect in their interiro and `false`
- * otherwise.
- * \pre `GpsTraits` must be a model of the concept `GeneralPolygonSetTraits_2`.
- * \pre `%ArrTraits` must be a model of the concept
- * `ArrangementDirectionalXMonotoneTraits_2`.
- */
-template
-bool
-do_intersect(const General_polygon_2& pgn1,
- const General_polygon_with_holes_2>& pgn2,
- const GpsTraits& traits);
-
-/*! determines whether two general polygons intersect in their interior.
- * \param pgn1 the 1st input polygon.
- * \param pgn2 the 2nd input polygon.
- * \param traits a traits object.
- * \return `true` if `pgn1` and `pgn2` intersect in their interiro and `false`
- * otherwise.
- * \pre `GpsTraits` must be a model of the concept `GeneralPolygonSetTraits_2`.
- * \pre `%ArrTraits` must be a model of the concept
- * `ArrangementDirectionalXMonotoneTraits_2`.
- */
-template
-bool
-do_intersect(const General_polygon_with_holes_2>& pgn1,
- const General_polygon_2& pgn2,
- const GpsTraits& traits);
-
-/*! determines whether two general polygons with holes intersect in their
- * interior.
- * \param pgn1 the 1st input polygon.
- * \param pgn2 the 2nd input polygon.
- * \param traits a traits object.
- * \return `true` if `pgn1` and `pgn2` intersect in their interiro and `false`
- * otherwise.
- * \pre `GpsTraits` must be a model of the concept `GeneralPolygonSetTraits_2`.
- * \pre `GpsTraits` must be a model of the concept `GeneralPolygonSetTraits_2`.
- */
-template
-bool do_intersect(const General_polygon_with_holes_2& pgn1,
- const General_polygon_with_holes_2& pgn2,
- const GpsTraits& traits);
-
-/*! Given a range of polygons or a range of polygons with holes (resp. a range
- * of general polygons or a range of general polygons with holes) determines
- * whether the open polygons (resp. general polygons) in the range have a common
- * point.
- * \param begin the first iterator of the input range. Its value type is
- * either `Polygon_2` (resp. `General_polygon_2`) or
- * `Polygon_with_holes_2` (resp. `General_polygon_with_holes_2`).
- * \param end the past-the-end iterator of the input range. Its value type is
- * either `Polygon_2` (resp. `General_polygon_2`) or
- * `Polygon_with_holes_2` (resp. `General_polygon_with_holes_2`).
- * \param traits a traits object.
- * \return `true` if the pairwise intersections of all open polygons or polygons
- * with holes (resp. general polygons or general polygons with holes) in
- * the range [*begin,*end) overlap, and `false` otherwise.
- * \pre `GpsTraits` must be a model of the concept `GeneralPolygonSetTraits_2`.
- */
-template
-bool do_intersect(InputIterator begin, InputIterator end,
- const GpsTraits& traits);
-
-/*! Given a range of polygons (resp. general polygons) and a range of polygons
- * with holes (resp. general polygons with holes) determines whether the open
- * polygons (resp. general polygons) in the two ranges have a common point.
- * \param begin1 the first iterator of the 1st input range. Its value type is
- * `Polygon_2` (resp. `General_polygon_2`).
- * \param end1 the past-the-end iterator of the 1st input range. Its value
- * type is `Polygon_2` (resp. `General_polygon_2`).
- * \param begin2 the first iterator of the 2nd input range. Its value type
- * is `Polygon_with_holes_2` (resp. `General_polygon_with_holes_2`).
- * \param end2 the past-the-end iterator of the 2nd input range. Its value
- * type is `Polygon_with_holes_2` (resp. `General_polygon_with_holes_2`).
- * \param traits a traits object.
- * \return `true` if the pairwise intersections of all open polygons (resp.
- * general polygons) and polygons with holes (resp. general polygons with
- * holes) in the ranges [*begin1,*end1) and [*begin2,*end2),
- * respectively, overlap, and `false` otherwise.
- */
-template
-bool do_intersect(InputIterator1 begin1, InputIterator1 end1,
- InputIterator2 begin2, InputIterator2 end2,
- const GpsTraits& traits);
-
-/// @}
-} /* namespace CGAL */
-
-namespace CGAL {
-
-/*! \addtogroup boolean_intersection Intersection Functions
- * \ingroup PkgBooleanSetOperations2Ref
- * \anchor ref_bso_intersection
- *
- * There are several overloaded function templates called `intersection()` that
- * compute the \e intersection of two or more polygons and insert the resulting
- * polygons with holes into a container via an output iterator.
- *
- * A function template in this group that accepts two input polygons has one of
- * the two following signatures:
- * - `OutputIterator %intersection(const Type1& pgn1, const Type2& pgn2,
- * OutputIterator oi);`
- * - `OutputIterator %intersection(const Type1& pgn1, const Type2& pgn2,
- * OutputIterator oi, const GpsTraits& traits);`
- *
- * \param oi the output iterator for the result.
- *
- * The types `Type1` and `Type2` of the parameters must be convertible to the
- * types specified in a row in the table below, respectively. The 3rd column
- * specifies the corresponding dereference type of the output iterator.
- *
- *
- *
- * | `Type1` | `Type2` | %Dereference Type of `oi` |
- * | `Polygon_2` | `Polygon_2` | `Polygon_with_holes_2` |
- * | `Polygon_2` | `Polygon_with_holes_2` | `Polygon_with_holes_2` |
- * | `Polygon_with_holes_2` | `Polygon_2` | `Polygon_with_holes_2` |
- * | `Polygon_with_holes_2` | `Polygon_with_holes_2` | `Polygon_with_holes_2` |
- * | `General_polygon_2` | `General_polygon_2` | `General_polygon_with_holes_2` |
- * | `General_polygon_2` | `General_polygon_with_holes_2` | `General_polygon_with_holes_2` |
- * | `General_polygon_with_holes_2` | `General_polygon_2` | `General_polygon_with_holes_2` |
- * | `General_polygon_with_holes_2` | `General_polygon_with_holes_2` | `General_polygon_with_holes_2` |
- *
- *
- *
- * \sa \link boolean_complement `CGAL::complement()` \endlink
- * \sa \link boolean_do_intersect `CGAL::do_intersect()` \endlink
- * \sa \link boolean_join `CGAL::join()` \endlink
- * \sa \link boolean_difference `CGAL::difference()` \endlink
- * \sa \link boolean_symmetric_difference `CGAL::symmetric_difference()` \endlink
- */
-
-/// @{
-
-/*! computes the intersection of two polygons and inserts the resulting polygons
- * with holes into a container via an output iterator.
- * \param pgn1 the 1st input polygon.
- * \param pgn2 the 2nd input polygon.
- * \param oi the output iterator for the result.
- * Its dereference type must be convertible to
- * `Polygon_with_holes_2`.
- * \return the past-the-end iterator of the output container.
- */
-template
-OutputIterator intersection(const Polygon_2& pgn1,
- const Polygon_2& pgn2,
- OutputIterator oi);
-
-/*! computes the intersection of two polygons and inserts the resulting polygons
- * with holes into a container via an output iterator.
- * \tparam UsePolylines determines whether the boundary of `pgn` is treated as a
- * cyclic sequence of single (\f$x\f$-monotone) segments or as a cyclic
- * sequence of (\f$x\f$-monotone) polylines. If substituted with
- * `CGAL::Tag_true`, which is the default, `pgn` is converted into a
- * general polygon bounded by polylines before the operation is actually
- * performed. Then, the resulting general polygon with holes is
- * converted back to a standard polygon. If substituted with
- * `CGAL::Tag_false`, `pgn` is used as is. Refer to \ref
- * bso_ssectraits_sel for more information.
- * \param pgn1 the 1st input polygon.
- * \param pgn2 the 2nd input polygon.
- * \param oi the output iterator for the result.
- * Its dereference type must be convertible to
- * `Polygon_with_holes_2`.
- * \return the past-the-end iterator of the output container.
- */
-template
-OutputIterator intersection(const Polygon_2& pgn1,
- const Polygon_2& pgn2,
- OutputIterator oi,
- UsePolylines = UsePolylines());
-
-/*! computes the intersection of two polygons and inserts the resulting polygons
- * with holes into a container via an output iterator.
- * \param pgn1 the 1st input polygon.
- * \param pgn2 the 2nd input polygon.
- * \param oi the output iterator for the result.
- * Its dereference type must be convertible to
- * `Polygon_with_holes_2`.
- * \return the past-the-end iterator of the output container.
- */
-template
-OutputIterator intersection(const Polygon_2& pgn1,
- const Polygon_with_holes_2& pgn2,
- OutputIterator oi);
-
-/*! computes the intersection of two polygons and inserts the resulting polygons
- * with holes into a container via an output iterator.
- * \tparam UsePolylines determines whether the boundaries of `pgn` is treated as
- * cyclic sequences of single (\f$x\f$-monotone) segments or as cyclic
- * sequences of (\f$x\f$-monotone) polylines. If substituted with
- * `CGAL::Tag_true`, which is the default, `pgn` is converted into a
- * general polygon with holes bounded by polylines before the operation
- * is actually performed. Then, the resulting general polygons with
- * holes are converted back to a standard polygon with holes. If
- * substituted with `CGAL::Tag_false`, `pgn` is used as is. Refer to
- * \ref bso_ssectraits_sel for more information.
- * \param pgn1 the 1st input polygon.
- * \param pgn2 the 2nd input polygon.
- * \param oi the output iterator for the result.
- * Its dereference type must be convertible to
- * `Polygon_with_holes_2`.
- * \return the past-the-end iterator of the output container.
- */
-template
-OutputIterator intersection(const Polygon_2& pgn1,
- const Polygon_with_holes_2& pgn2,
- OutputIterator oi,
- UsePolylines = UsePolylines());
-
-/*! computes the intersection of two polygons and inserts the resulting polygons
- * with holes into a container via an output iterator.
- * \param pgn1 the 1st input polygon.
- * \param pgn2 the 2nd input polygon.
- * \param oi the output iterator for the result.
- * Its dereference type must be convertible to
- * `Polygon_with_holes_2`.
- * \return the past-the-end iterator of the output container.
- */
-template
-OutputIterator intersection(const Polygon_with_holes_2& pgn1,
- const Polygon_2& pgn2,
- OutputIterator oi);
-
-/*! computes the intersection of two polygons and inserts the resulting polygons
- * with holes into a container via an output iterator.
- * \tparam UsePolylines determines whether the boundaries of `pgn1` and `pgn2`
- * are treated as cyclic sequences of single (\f$x\f$-monotone) segments
- * or as a cyclic sequences of (\f$x\f$-monotone) polylines. If
- * substituted with `CGAL::Tag_true`, which is the default, `pgn1` and
- * `pgn2` are converted into a general polygons bounded by polylines
- * before the operation is actually performed. Then, the resulting
- * general polygons with holes are converted back to standard
- * polygons with holes. If substituted with `CGAL::Tag_false`, `pgn1`
- * and `pgn2` are used as is. Refer to \ref bso_ssectraits_sel for more
- * information.
- * \param pgn1 the 1st input polygon.
- * \param pgn2 the 2nd input polygon.
- * \param oi the output iterator for the result.
- * Its dereference type must be convertible to
- * `Polygon_with_holes_2`.
- * \return the past-the-end iterator of the output container.
- */
-template
-OutputIterator intersection(const Polygon_with_holes_2& pgn1,
- const Polygon_2& pgn2,
- OutputIterator oi,
- UsePolylines = UsePolylines());
-
-/*! computes the intersection of two polygons and inserts the resulting polygons
- * with holes into a container via an output iterator.
- * \param pgn1 the 1st input polygon.
- * \param pgn2 the 2nd input polygon.
- * \param oi the output iterator for the result.
- * Its dereference type must be convertible to
- * `Polygon_with_holes_2`.
- * \return the past-the-end iterator of the output container.
- */
-template
-OutputIterator intersection(const Polygon_with_holes_2& pgn1,
- const Polygon_with_holes_2& pgn2,
- OutputIterator oi);
-
-/*! computes the intersection of two polygons and inserts the resulting polygons
- * with holes into a container via an output iterator.
- * \tparam UsePolylines determines whether the boundaries of `pgn1` and `pgn2`
- * are treated as cyclic sequences of single (\f$x\f$-monotone) segments
- * or as a cyclic sequences of (\f$x\f$-monotone) polylines. If
- * substituted with `CGAL::Tag_true`, which is the default, `pgn1` and
- * `pgn2` are converted into a general polygon and a general polygon
- * with holes, respectively, bounded by polylines before the operation
- * is actually performed. Then, the resulting general polygons with
- * holes are converted back to standard polygons with holes. If
- * substituted with `CGAL::Tag_false`, `pgn1` and `pgn2` are used as
- * is. Refer to \ref bso_ssectraits_sel for more information.
- * \param pgn1 the 1st input polygon.
- * \param pgn2 the 2nd input polygon.
- * \param oi the output iterator for the result.
- * Its dereference type must be convertible to
- * `Polygon_with_holes_2`.
- * \return the past-the-end iterator of the output container.
- */
-template
-OutputIterator intersection(const Polygon_with_holes_2& pgn1,
- const Polygon_with_holes_2& pgn2,
- OutputIterator oi,
- UsePolylines = UsePolylines());
-
-/*! computes the intersection of two general polygons and inserts the resulting
- * general polygons with holes into a container via an output iterator.
- * \param pgn1 the 1st input polygon.
- * \param pgn2 the 2nd input polygon.
- * \param oi the output iterator for the result.
- * Its dereference type must be convertible to
- * `General_polygon_with_holes_2>`.
- * \return the past-the-end iterator of the output container.
- * \pre `%ArrTraits` must be a model of the concept
- * `ArrangementDirectionalXMonotoneTraits_2`.
- */
-template
-OutputIterator intersection(const General_polygon_2& pgn1,
- const General_polygon_2& pgn2,
- OutputIterator oi);
-
-/*! computes the intersection of two general polygons and inserts the resulting
- * general polygons with holes into a container via an output iterator.
- * \param pgn1 the 1st input polygon.
- * \param pgn2 the 2nd input polygon.
- * \param oi the output iterator for the result.
- * Its dereference type must be convertible to
- * `General_polygon_with_holes_2>`.
- * \return the past-the-end iterator of the output container.
- * \pre `%ArrTraits` must be a model of the concept
- * `ArrangementDirectionalXMonotoneTraits_2`.
- */
-template
-OutputIterator
-intersection(const General_polygon_with_holes_2>& pgn1,
- const General_polygon_2& pgn2,
- OutputIterator oi);
-
-/*! computes the intersection of two general polygons and inserts the resulting
- * general polygons with holes into a container via an output iterator.
- * \param pgn1 the 1st input polygon.
- * \param pgn2 the 2nd input polygon.
- * \param oi the output iterator for the result.
- * Its dereference type must be convertible to
- * `General_polygon_with_holes_2>`.
- * \return the past-the-end iterator of the output container.
- * \pre `%ArrTraits` must be a model of the concept
- * `ArrangementDirectionalXMonotoneTraits_2`.
- */
-template
-OutputIterator
-intersection(const General_polygon_2& pgn1,
- const General_polygon_with_holes_2>& pgn2,
- OutputIterator oi);
-
-/*! computes the intersection of two general polygons with holes and inserts the
- * resulting general polygons with holes into a container via an output iterator.
- * \param pgn1 the 1st input polygon.
- * \param pgn2 the 2nd input polygon.
- * \param oi the output iterator for the result.
- * Its dereference type must be convertible to
- * `General_polygon_with_holes_2`.
- * \return the past-the-end iterator of the output container.
- */
-template
-OutputIterator intersection(const General_polygon_with_holes_2& pgn1,
- const General_polygon_with_holes_2& pgn2,
- OutputIterator oi);
-
-
-/*! Given a range of polygons (resp. general polygons) or a range of general
- * polygons with holes (resp. general polygons with holes) computes the
- * intersection of all polygons in the range and inserts the resulting polygons
- * with holes (resp. general polygons with holes) into a container via an output
- * iterator.
- * \param begin the first iterator of the input range. Its value type is
- * either `Polygon_2` (resp. `General_polygon_2`) or `Polygon_with_holes_2`
- * (resp. `General_polygon_with_holes_2`).
- * \param end the past-the-end iterator of the input range. Its value type is
- * either `Polygon_2` (resp. `General_polygon_2`) or `Polygon_with_holes_2`
- * (resp. `General_polygon_with_holes_2`).
- * \param oi the output iterator for the result.
- * Its dereference type must be convertible to
- * `Polygon_with_holes_2` (resp. `General_polygons_with_holes_2`).
- * \return the past-the-end iterator of the output container.
- */
-template
-OutputIterator intersection(InputIterator begin, InputIterator end,
- OutputIterator oi);
-
-/*! Given a range of polygons (resp. general polygons) or a range of general
- * polygons with holes (resp. general polygons with holes) computes the
- * intersection of all polygons in the range and inserts the resulting polygons
- * with holes (resp. general polygons with holes) into a container via an output
- * iterator.
- * \tparam UsePolylines determines whether the boundaries of the polygons in the
- * input range are treated as cyclic sequences of single
- * (\f$x\f$-monotone) segments or as a cyclic sequences of
- * (\f$x\f$-monotone) polylines. If substituted with `CGAL::Tag_true`,
- * which is the default, the input polygons are converted into general
- * polygon with holes , bounded by polylines before the operation is
- * actually performed. Then, the resulting general polygons with holes
- * are converted back to standard polygons with holes. If substituted
- * with `CGAL::Tag_false`, `pgn1` and `pgn2` are used as is. Refer to
- * \ref bso_ssectraits_sel for more information.
- * \param begin the first iterator of the input range. Its value type is
- * either `Polygon_2` (resp. `General_polygon_2`) or
- * `Polygon_with_holes_2` (resp. `General_polygon_with_holes_2`).
- * \param end the past-the-end iterator of the input range. Its value type is
- * either `Polygon_2` (resp. `General_polygon_2`) or
- * `Polygon_with_holes_2` (resp. `General_polygon_with_holes_2`).
- * \param oi the output iterator for the result.
- * Its dereference type must be convertible to
- * `Polygon_with_holes_2` (resp. `General_polygons_with_holes_2`).
- * \return the past-the-end iterator of the output container.
- */
-template
-OutputIterator intersection(InputIterator begin, InputIterator end,
- OutputIterator oi,
- UsePolylines = UsePolylines());
-
-/*! Given a range of polygons (resp. general polygons) and a range of general
- * polygons with holes (resp. general polygons with holes) computes the
- * intersection of all polygons in the two ranges and inserts the resulting
- * polygons with holes (resp. general polygons with holes) into a container via
- * an output iterator.
- * \param begin1 the first iterator of the 1st input range. Its value type is
- * `Polygon_2` (resp. `General_polygon_2`).
- * \param end1 the past-the-end iterator of the 1st input range. Its value
- * type is `Polygon_2` (resp. `General_polygon_2`).
- * \param begin2 the first iterator of the 2nd input range. Its value type
- * is `Polygon_with_holes_2` (resp. `General_polygon_with_holes_2`).
- * \param end2 the past-the-end iterator of the 2nd input range. Its value
- * type is `Polygon_with_holes_2` (resp. `General_polygon_with_holes_2`).
- * \param oi the output iterator for the result.
- * Its dereference type must be convertible to
- * `Polygon_with_holes_2` (resp. `General_polygons_with_holes_2`).
- * \return the past-the-end iterator of the output container.
- */
-template
-OutputIterator intersection(InputIterator1 begin1, InputIterator1 end1,
- InputIterator2 begin2, InputIterator2 end2,
- OutputIterator oi);
-
-/*! Given a range of polygons (resp. general polygons) and a range of general
- * polygons with holes (resp. general polygons with holes) computes the
- * intersection of all polygons in the two ranges and inserts the resulting
- * polygons with holes (resp. general polygons with holes) into a container via
- * an output iterator.
- * \tparam UsePolylines determines whether the boundaries of the polygons in the
- * input ranges are treated as cyclic sequences of single
- * (\f$x\f$-monotone) segments or as a cyclic sequences of
- * (\f$x\f$-monotone) polylines. If substituted with `CGAL::Tag_true`,
- * which is the default, the input polygons are converted into general
- * polygon with holes , bounded by polylines before the operation is
- * actually performed. Then, the resulting general polygons with holes
- * are converted back to standard polygons with holes. If substituted
- * with `CGAL::Tag_false`, `pgn1` and `pgn2` are used as is. Refer to
- * \ref bso_ssectraits_sel for more information.
- * \param begin1 the first iterator of the 1st input range. Its value type is
- * `Polygon_2` (resp. `General_polygon_2`).
- * \param end1 the past-the-end iterator of the 1st input range. Its value
- * type is `Polygon_2` (resp. `General_polygon_2`).
- * \param begin2 the first iterator of the 2nd input range. Its value type
- * is `Polygon_with_holes_2` (resp. `General_polygon_with_holes_2`).
- * \param end2 the past-the-end iterator of the 2nd input range. Its value
- * type is `Polygon_with_holes_2` (resp. `General_polygon_with_holes_2`).
- * \param oi the output iterator for the result.
- * Its dereference type must be convertible to
- * `Polygon_with_holes_2` (resp. `General_polygons_with_holes_2`).
- * \return the past-the-end iterator of the output container.
- */
-template
-OutputIterator intersection(InputIterator1 begin1, InputIterator1 end1,
- InputIterator2 begin2, InputIterator2 end2,
- OutputIterator oi,
- UsePolylines = UsePolylines());
-
-/// @}
-
-} /* namespace CGAL */
-
-namespace CGAL {
-
-/*! \addtogroup boolean_join Union Functions
- * \ingroup PkgBooleanSetOperations2Ref
- * \anchor ref_bso_union
- *
- * There are several overloaded function templates called `join()` that
- * compute the \e union of two polygons.
- *
- * A function template in this group has one of the two following signatures:
- * - `bool join(const Type1& pgn1, const Type2& pgn2, Type3& res);`
- * - `bool join(const Type1& pgn1, const Type2& pgn2, Type3& res,
- * const GpsTraits& traits);`
- *
- * \cgalHeading{Parameters}
- *
- * The types `Type1`, `Type2`, and `Type3, of the parameters must be convertible
- * to the types specified in a row in the table below, respectively.
- *
- *
- *
- * | `Type1` | `Type2` | `Type3` |
- * | `Polygon_2` | `Polygon_2` | `Polygon_with_holes_2` |
- * | `Polygon_2` | `Polygon_with_holes_2` | `Polygon_with_holes_2` |
- * | `Polygon_with_holes_2` | `Polygon_2` | `Polygon_with_holes_2` |
- * | `Polygon_with_holes_2` | `Polygon_with_holes_2` | `Polygon_with_holes_2` |
- * | `General_polygon_2` | `General_polygon_2` | `General_polygon_with_holes_2` |
- * | `General_polygon_2` | `General_polygon_with_holes_2` | `General_polygon_with_holes_2` |
- * | `General_polygon_with_holes_2` | `General_polygon_2` | `General_polygon_with_holes_2` |
- * | `General_polygon_with_holes_2` | `General_polygon_with_holes_2` | `General_polygon_with_holes_2` |
- *
- *
- *
- * \sa \link boolean_complement `CGAL::complement()` \endlink
- * \sa \link boolean_do_intersect `CGAL::do_intersect()` \endlink
- * \sa \link boolean_intersection `CGAL::intersection()` \endlink
- * \sa \link boolean_difference `CGAL::difference()` \endlink
- * \sa \link boolean_symmetric_difference `CGAL::symmetric_difference()` \endlink
- */
-
-/// @{
-
-//////// Traits-less
-
-/*! computes the union of two polygons.
- * \param pgn1 the 1st input polygon.
- * \param pgn2 the 2nd input polygon.
- * \param res the resulting union of \p pgn1 and \p pgn2.
- * \return `true` if the two input polygons overlap.
- */
-template
-bool join(const Polygon_2& pgn1,
- const Polygon_2& pgn2,
- General_polygon_with_holes_2>& res);
-
-/*! computes the union of two polygons.
- * \tparam UsePolylines determines whether the boundaries of `pgn1` and `pgn2`
- * are treated as cyclic sequences of single (\f$x\f$-monotone) segments
- * or as a cyclic sequences of (\f$x\f$-monotone) polylines. If
- * substituted with `CGAL::Tag_true`, which is the default, `pgn1` and
- * `pgn2` are converted into a general polygons bounded by polylines
- * before the operation is actually performed. Then, the resulting
- * general polygons with holes are converted back to standard
- * polygons with holes. If substituted with `CGAL::Tag_false`, `pgn1`
- * and `pgn2` are used as is. Refer to \ref bso_ssectraits_sel for more
- * information.
- * \param pgn1 the 1st input polygon.
- * \param pgn2 the 2nd input polygon.
- * \param res the resulting union of \p pgn1 and \p pgn2.
- * \return `true` if the two input polygons overlap.
- */
-template
-bool join(const Polygon_2& pgn1,
- const Polygon_2& pgn2,
- General_polygon_with_holes_2>& res,
- UsePolylines = UsePolylines());
-
-/*! computes the union of two polygons.
- * \param pgn1 the 1st input polygon.
- * \param pgn2 the 2nd input polygon.
- * \param res the resulting union of \p pgn1 and \p pgn2.
- * \return `true` if the two input polygons overlap.
- */
-template
-bool join(const Polygon_2& pgn1,
- const Polygon_with_holes_2& pgn2,
- General_polygon_with_holes_2>& res);
-
-/*! computes the union of two polygons.
- * \tparam UsePolylines determines whether the boundaries of `pgn1` and `pgn2`
- * are treated as cyclic sequences of single (\f$x\f$-monotone) segments
- * or as a cyclic sequences of (\f$x\f$-monotone) polylines. If
- * substituted with `CGAL::Tag_true`, which is the default, `pgn1` and
- * `pgn2` are converted into a general polygon and a general polygon
- * with holes, respectively, bounded by polylines before the operation
- * is actually performed. Then, the resulting general polygons with
- * holes are converted back to standard polygons with holes. If
- * substituted with `CGAL::Tag_false`, `pgn1` and `pgn2` are used as
- * is. Refer to \ref bso_ssectraits_sel for more information.
- * \param pgn1 the 1st input polygon.
- * \param pgn2 the 2nd input polygon.
- * \param res the resulting union of \p pgn1 and \p pgn2.
- * \return `true` if the two input polygons overlap.
- */
-template
-bool join(const Polygon_2& pgn1,
- const Polygon_with_holes_2& pgn2,
- General_polygon_with_holes_2>& res,
- UsePolylines = UsePolylines());
-
-/*! computes the union of two polygons.
- * \param pgn1 the 1st input polygon.
- * \param pgn2 the 2nd input polygon.
- * \param res the resulting union of \p pgn1 and \p pgn2.
- * \return `true` if the two input polygons overlap.
- */
-template
-bool join(const Polygon_with_holes_2& pgn1,
- const Polygon_2& pgn2,
- General_polygon_with_holes_2>& res);
-
-/*! computes the union of two polygons.
- * \tparam UsePolylines determines whether the boundaries of `pgn1` and `pgn2`
- * are treated as cyclic sequences of single (\f$x\f$-monotone) segments
- * or as a cyclic sequences of (\f$x\f$-monotone) polylines. If
- * substituted with `CGAL::Tag_true`, which is the default, `pgn1` and
- * `pgn2` are converted into a general polygon with holes and a general
- * polygon, respectively, bounded by polylines before the operation
- * is actually performed. Then, the resulting general polygons with
- * holes are converted back to standard polygons with holes. If
- * substituted with `CGAL::Tag_false`, `pgn1` and `pgn2` are used as
- * is. Refer to \ref bso_ssectraits_sel for more information.
- * \param pgn1 the 1st input polygon.
- * \param pgn2 the 2nd input polygon.
- * \param res the resulting union of \p pgn1 and \p pgn2.
- * \return `true` if the two input polygons overlap.
- */
-template
-bool join(const Polygon_with_holes_2& pgn1,
- const Polygon_2& pgn2,
- General_polygon_with_holes_2>& res,
- UsePolylines = UsePolylines());
-
-/*! computes the union of two polygons with holes.
- * \param pgn1 the 1st input polygon.
- * \param pgn2 the 2nd input polygon.
- * \param res the resulting union of \p pgn1 and \p pgn2.
- * \return `true` if the two input polygons overlap.
- */
-template
-bool join(const Polygon_with_holes_2