// Boost.Geometry (aka GGL, Generic Geometry Library) // Copyright (c) 2012-2014 Barend Gehrels, Amsterdam, the Netherlands. // Use, modification and distribution is subject to the Boost Software License, // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef BOOST_GEOMETRY_STRATEGIES_CARTESIAN_BUFFER_HPP #define BOOST_GEOMETRY_STRATEGIES_CARTESIAN_BUFFER_HPP namespace boost { namespace geometry { namespace strategy { namespace buffer { /* A Buffer-join strategy gets 4 input points. On the two consecutive segments s1 and s2 (joining at vertex v): The lines from parallel at s1, s2 (at buffer-distance) end/start in two points perpendicular to the segments: p1 and p2. These parallel lines interesct in point ip (s2) | | ^ | (p2) |(v) * +----<--- (s1) x(ip) *(p1) So, in clockwise order: v : vertex point p1: perpendicular on left side of segment1<1> (perp1) ip: intersection point p2: perpendicular on left side of segment2<0> (perp2) */ /*! \brief Enumerates options for side of buffer (left/right w.r.t. directed segment) \ingroup enum \details Around a linestring, a buffer can be defined left or right. Around a polygon, assumed clockwise internally, a buffer is either on the left side (inflates the polygon), or on the right side (deflates the polygon) */ enum buffer_side_selector { buffer_side_left, buffer_side_right }; /*! \brief Enumerates types of pieces (parts of buffer) around geometries \ingroup enum */ enum piece_type { buffered_segment, buffered_join, buffered_round_end, buffered_flat_end, buffered_point, buffered_concave // always on the inside }; /*! \brief Enumerates types of joins \ingroup enum */ enum join_selector { join_convex, join_concave, join_continue, // collinear, next segment touches previous segment join_spike // collinear, with overlap, next segment goes back }; }} // namespace strategy::buffer }} // namespace boost::geometry #endif // BOOST_GEOMETRY_STRATEGIES_CARTESIAN_BUFFER_HPP