1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137
|
// Copyright (c) 2005 Tel-Aviv University (Israel).
// All rights reserved.
//
// This file is part of CGAL (www.cgal.org).
//
// $URL: https://github.com/CGAL/cgal/blob/v6.1/Boolean_set_operations_2/include/CGAL/Boolean_set_operations_2/complement.h $
// $Id: include/CGAL/Boolean_set_operations_2/complement.h b26b07a1242 $
// SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-Commercial
//
//
// Author(s): Baruch Zukerman <baruchzu@post.tau.ac.il>
// Ron Wein <wein@post.tau.ac.il>
// Efi Fogel <efif@post.tau.ac.il>
// Simon Giraudot <simon.giraudot@geometryfactory.com>
#ifndef CGAL_BOOLEAN_SET_OPERATIONS_2_COMPLEMENT_H
#define CGAL_BOOLEAN_SET_OPERATIONS_2_COMPLEMENT_H
#include <CGAL/license/Boolean_set_operations_2.h>
#include <CGAL/disable_warnings.h>
#include <CGAL/Polygon_2.h>
#include <CGAL/Polygon_with_holes_2.h>
#include <CGAL/Gps_segment_traits_2.h>
#include <CGAL/General_polygon_set_2.h>
#include <CGAL/Polygon_set_2.h>
#include <CGAL/General_polygon_2.h>
#include <CGAL/General_polygon_with_holes_2.h>
#include <CGAL/Gps_traits_2.h>
#include <CGAL/iterator.h>
#include <CGAL/Boolean_set_operations_2/Bso_internal_functions.h>
#include <CGAL/Boolean_set_operations_2/Polygon_conversions.h>
#include <CGAL/type_traits/is_iterator.h>
namespace CGAL
{
/// \name complement() functions.
//@{
// Polygon_2 ===================================================================
// With Traits
template <typename Kernel, typename Container, typename Traits>
void complement(const Polygon_2<Kernel, Container>& pgn,
Polygon_with_holes_2<Kernel, Container>& res,
Traits& traits)
{ _complement(pgn, res, traits); }
// With Tag_true
template <typename Kernel, typename Container>
void complement(const Polygon_2<Kernel, Container>& pgn,
Polygon_with_holes_2<Kernel, Container>& res,
Tag_true = Tag_true())
{ _complement(pgn, res); }
// With Tag_false
template <typename Kernel, typename Container>
void complement(const Polygon_2<Kernel, Container>& pgn,
Polygon_with_holes_2<Kernel, Container>& res,
Tag_false)
{
typedef Polygon_2<Kernel, Container> Polygon;
typename Gps_default_traits<Polygon>::Traits traits;
complement(pgn, res, traits);
}
// Polygon_with_holes_2 ========================================================
// With Traits
template <typename Kernel, typename Container, typename OutputIterator,
typename Traits>
OutputIterator complement(const Polygon_with_holes_2<Kernel, Container>& pgn,
OutputIterator oi, Traits& traits)
{ return _complement(pgn, oi, traits); }
// With Tag_true
template <typename Kernel, typename Container, typename OutputIterator>
OutputIterator complement(const Polygon_with_holes_2<Kernel, Container>& pgn,
OutputIterator oi, Tag_true = Tag_true())
{ return _complement(pgn, oi); }
// With Tag_false
template <typename Kernel, typename Container, typename OutputIterator>
OutputIterator complement(const Polygon_with_holes_2<Kernel, Container>& pgn,
OutputIterator oi, Tag_false)
{
typedef Polygon_2<Kernel, Container> Polygon;
typename Gps_default_traits<Polygon>::Traits traits;
return complement(pgn, oi, traits);
}
// General_polygon_2 ===========================================================
// With Traits
template <typename ArrTraits, typename Traits>
void complement(const General_polygon_2<ArrTraits>& pgn,
General_polygon_with_holes_2
<General_polygon_2<ArrTraits> >& res,
Traits& traits)
{ _complement(pgn, res, traits); }
// Without Traits
template <typename ArrTraits>
void complement(const General_polygon_2<ArrTraits>& pgn,
General_polygon_with_holes_2
<General_polygon_2<ArrTraits> >& res)
{
// Use the first polygon to determine the (default) traits
typedef General_polygon_2<ArrTraits> Polygon;
typename Gps_default_traits<Polygon>::Traits traits;
complement(pgn, res, traits);
}
// General_polygon_with_holes_2 ================================================
// With Traits
template <typename Polygon_, typename OutputIterator, typename Traits>
OutputIterator complement(const General_polygon_with_holes_2<Polygon_>& pgn,
OutputIterator oi, Traits& traits)
{ return _complement(pgn, oi, traits); }
// Without Traits
template <typename Polygon_, typename OutputIterator>
OutputIterator complement(General_polygon_with_holes_2<Polygon_>& pgn,
OutputIterator oi)
{
// Use the first polygon to determine the (default) traits
typedef General_polygon_with_holes_2<Polygon_> Polygon_with_holes;
typename Gps_default_traits<Polygon_with_holes>::Traits traits;
return complement(pgn, oi, traits);
}
//@}
} //namespace CGAL
#include <CGAL/enable_warnings.h>
#endif
|