/usr/include/CGAL/offset_polygon_2.h is in libcgal-dev 4.7-4.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
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 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 | // Copyright (c) 2006 Tel-Aviv University (Israel).
// All rights reserved.
//
// This file is part of CGAL (www.cgal.org).
// You can redistribute it and/or modify it under the terms of the GNU
// General Public License as published by the Free Software Foundation,
// either version 3 of the License, or (at your option) any later version.
//
// Licensees holding a valid commercial license may use this file in
// accordance with the commercial license agreement provided with the software.
//
// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
//
// Author(s) : Ron Wein <wein_r@yahoo.com>
#ifndef CGAL_OFFSET_POLYGON_H
#define CGAL_OFFSET_POLYGON_H
#include <CGAL/Minkowski_sum_2/Exact_offset_base_2.h>
#include <CGAL/Minkowski_sum_2/Offset_conv_2.h>
#include <CGAL/Minkowski_sum_2/Offset_decomp_2.h>
namespace CGAL {
/*!
* Compute the offset of a given simple polygon by a given radius,
* using the convolution method.
* Note that as the input polygon may not be convex, its offset may not be
* simply connected. The result is therefore represented as a polygon with
* holes.
* \param pgn The polygon.
* \param r The offset radius.
* \return The offset polygon.
*/
template <class ConicTraits, class Container>
typename Gps_traits_2<ConicTraits>::Polygon_with_holes_2
offset_polygon_2 (const Polygon_2<typename ConicTraits::Rat_kernel,
Container>& pgn,
const typename ConicTraits::Rat_kernel::FT& r,
const ConicTraits& )
{
typedef Exact_offset_base_2<ConicTraits, Container> Base;
typedef Offset_by_convolution_2<Base> Exact_offset_2;
typedef typename Exact_offset_2::Offset_polygon_2 Offset_polygon_2;
Base base;
Exact_offset_2 exact_offset (base);
Offset_polygon_2 offset_bound;
std::list<Offset_polygon_2> offset_holes;
exact_offset (pgn, r,
offset_bound, std::back_inserter(offset_holes));
return (typename Gps_traits_2<ConicTraits>::Polygon_with_holes_2
(offset_bound, offset_holes.begin(), offset_holes.end()));
}
/*!
* Compute the offset of a given polygon with holes by a given radius,
* using the convolution method.
* The result is represented as a polygon with holes whose edges are line
* segments and circular arcs.
* \param pwh The polygon with holes.
* \param r The offset radius.
* \pre The polygon is bounded (has a valid outer boundary).
* \return The offset polygon.
*/
template <class ConicTraits, class Container>
typename Gps_traits_2<ConicTraits>::Polygon_with_holes_2
offset_polygon_2 (const Polygon_with_holes_2<typename ConicTraits::Rat_kernel,
Container>& pwh,
const typename ConicTraits::Rat_kernel::FT& r,
const ConicTraits& )
{
typedef Exact_offset_base_2<ConicTraits, Container> Base;
typedef Offset_by_convolution_2<Base> Exact_offset_2;
typedef typename Exact_offset_2::Offset_polygon_2 Offset_polygon_2;
Base base;
Exact_offset_2 exact_offset (base);
Offset_polygon_2 offset_bound;
std::list<Offset_polygon_2> offset_holes;
exact_offset (pwh, r,
offset_bound, std::back_inserter(offset_holes));
return (typename Gps_traits_2<ConicTraits>::Polygon_with_holes_2
(offset_bound, offset_holes.begin(), offset_holes.end()));
}
/*!
* Compute the offset of a given simple polygon by a given radius,
* by decomposing it to convex sub-polygons and computing the union of their
* offsets.
* Note that as the input polygon may not be convex, its offset may not be
* simply connected. The result is therefore represented as a polygon with
* holes.
* \param pgn The polygon.
* \param r The offset radius.
* \param decomp A functor for decomposing polygons.
* \return The offset polygon.
*/
template <class ConicTraits, class Container, class DecompositionStrategy>
typename Gps_traits_2<ConicTraits>::Polygon_with_holes_2
offset_polygon_2 (const Polygon_2<typename ConicTraits::Rat_kernel,
Container>& pgn,
const typename ConicTraits::Rat_kernel::FT& r,
const DecompositionStrategy&,
const ConicTraits& )
{
typedef Exact_offset_base_2<ConicTraits, Container> Base;
typedef Offset_by_decomposition_2<Base, DecompositionStrategy>
Exact_offset_2;
typedef typename Exact_offset_2::Offset_polygon_2 Offset_polygon_2;
Base base;
Exact_offset_2 exact_offset (base);
Offset_polygon_2 offset_bound;
std::list<Offset_polygon_2> offset_holes;
exact_offset (pgn, r,
offset_bound, std::back_inserter(offset_holes));
return (typename Gps_traits_2<ConicTraits>::Polygon_with_holes_2
(offset_bound, offset_holes.begin(), offset_holes.end()));
}
/*!
* Compute the inset of a given simple polygon by a given radius, using the
* convolution method.
* Note that as the input polygon may not be convex, its inset may not be
* simply connected. The result is therefore represented as a set of polygons.
* \param pgn The polygon.
* \param r The inset radius.
* \param oi An output iterator for the inset polygons.
* Its value-type must be Gps_traits_2<ConicTraits>::Polygon_2.
* \return A past-the-end iterator for the inset polygons.
*/
template <class ConicTraits, class Container, class OutputIterator>
OutputIterator
inset_polygon_2 (const Polygon_2<typename ConicTraits::Rat_kernel,
Container>& pgn,
const typename ConicTraits::Rat_kernel::FT& r,
const ConicTraits& ,
OutputIterator oi)
{
typedef Exact_offset_base_2<ConicTraits, Container> Base;
typedef Offset_by_convolution_2<Base> Exact_offset_2;
Base base;
Exact_offset_2 exact_offset (base);
oi = exact_offset.inset (pgn, r,
oi);
return (oi);
}
} //namespace CGAL
#endif
|