annotate DEPENDENCIES/generic/include/boost/geometry/strategies/cartesian/buffer_point_square.hpp @ 125:34e428693f5d vext

Vext -> Repoint
author Chris Cannam
date Thu, 14 Jun 2018 11:15:39 +0100
parents f46d142149f5
children
rev   line source
Chris@102 1 // Boost.Geometry (aka GGL, Generic Geometry Library)
Chris@102 2 // Copyright (c) 2012-2014 Barend Gehrels, Amsterdam, the Netherlands.
Chris@102 3 // Use, modification and distribution is subject to the Boost Software License,
Chris@102 4 // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
Chris@102 5 // http://www.boost.org/LICENSE_1_0.txt)
Chris@102 6
Chris@102 7 #ifndef BOOST_GEOMETRY_STRATEGIES_CARTESIAN_BUFFER_POINT_SQUARE_HPP
Chris@102 8 #define BOOST_GEOMETRY_STRATEGIES_CARTESIAN_BUFFER_POINT_SQUARE_HPP
Chris@102 9
Chris@102 10 #include <cstddef>
Chris@102 11
Chris@102 12 #include <boost/range.hpp>
Chris@102 13
Chris@102 14 #include <boost/geometry/util/math.hpp>
Chris@102 15
Chris@102 16 #include <boost/geometry/strategies/buffer.hpp>
Chris@102 17
Chris@102 18
Chris@102 19 namespace boost { namespace geometry
Chris@102 20 {
Chris@102 21
Chris@102 22 namespace strategy { namespace buffer
Chris@102 23 {
Chris@102 24
Chris@102 25 /*!
Chris@102 26 \brief Create a squared form buffer around a point
Chris@102 27 \ingroup strategies
Chris@102 28 \details This strategy can be used as PointStrategy for the buffer algorithm.
Chris@102 29 It creates a square from each point, where the point lies in the center.
Chris@102 30 It can be applied for points and multi_points, but also for a linestring (if it is degenerate,
Chris@102 31 so consisting of only one point) and for polygons (if it is degenerate).
Chris@102 32 This strategy is only applicable for Cartesian coordinate systems.
Chris@102 33
Chris@102 34 \qbk{
Chris@102 35 [heading Example]
Chris@102 36 [buffer_point_square]
Chris@102 37 [heading Output]
Chris@102 38 [$img/strategies/buffer_point_square.png]
Chris@102 39 [heading See also]
Chris@102 40 \* [link geometry.reference.algorithms.buffer.buffer_7_with_strategies buffer (with strategies)]
Chris@102 41 \* [link geometry.reference.strategies.strategy_buffer_point_circle point_circle]
Chris@102 42 }
Chris@102 43 */
Chris@102 44 class point_square
Chris@102 45 {
Chris@102 46 template
Chris@102 47 <
Chris@102 48 typename Point,
Chris@102 49 typename DistanceType,
Chris@102 50 typename OutputRange
Chris@102 51 >
Chris@102 52 inline void add_point(Point const& point,
Chris@102 53 DistanceType const& distance,
Chris@102 54 DistanceType const& x,
Chris@102 55 DistanceType const& y,
Chris@102 56 OutputRange& output_range) const
Chris@102 57 {
Chris@102 58 typename boost::range_value<OutputRange>::type p;
Chris@102 59 set<0>(p, get<0>(point) + x * distance);
Chris@102 60 set<1>(p, get<1>(point) + y * distance);
Chris@102 61 output_range.push_back(p);
Chris@102 62 }
Chris@102 63
Chris@102 64 template
Chris@102 65 <
Chris@102 66 typename Point,
Chris@102 67 typename DistanceType,
Chris@102 68 typename OutputRange
Chris@102 69 >
Chris@102 70 inline void add_points(Point const& point,
Chris@102 71 DistanceType const& distance,
Chris@102 72 OutputRange& output_range) const
Chris@102 73 {
Chris@102 74 add_point(point, distance, -1.0, -1.0, output_range);
Chris@102 75 add_point(point, distance, -1.0, +1.0, output_range);
Chris@102 76 add_point(point, distance, +1.0, +1.0, output_range);
Chris@102 77 add_point(point, distance, +1.0, -1.0, output_range);
Chris@102 78
Chris@102 79 // Close it:
Chris@102 80 output_range.push_back(output_range.front());
Chris@102 81 }
Chris@102 82
Chris@102 83 public :
Chris@102 84
Chris@102 85 #ifndef DOXYGEN_SHOULD_SKIP_THIS
Chris@102 86 //! Fills output_range with a square around point using distance_strategy
Chris@102 87 template
Chris@102 88 <
Chris@102 89 typename Point,
Chris@102 90 typename DistanceStrategy,
Chris@102 91 typename OutputRange
Chris@102 92 >
Chris@102 93 inline void apply(Point const& point,
Chris@102 94 DistanceStrategy const& distance_strategy,
Chris@102 95 OutputRange& output_range) const
Chris@102 96 {
Chris@102 97 add_points(point, distance_strategy.apply(point, point,
Chris@102 98 strategy::buffer::buffer_side_left), output_range);
Chris@102 99 }
Chris@102 100 #endif // DOXYGEN_SHOULD_SKIP_THIS
Chris@102 101
Chris@102 102 };
Chris@102 103
Chris@102 104
Chris@102 105 }} // namespace strategy::buffer
Chris@102 106
Chris@102 107 }} // namespace boost::geometry
Chris@102 108
Chris@102 109 #endif // BOOST_GEOMETRY_STRATEGIES_CARTESIAN_BUFFER_POINT_SQUARE_HPP