]>
Commit | Line | Data |
---|---|---|
7c673cae FG |
1 | // Boost.Geometry (aka GGL, Generic Geometry Library) |
2 | ||
3 | // Copyright (c) 2012-2014 Barend Gehrels, Amsterdam, the Netherlands. | |
4 | ||
5 | // Use, modification and distribution is subject to the Boost Software License, | |
6 | // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at | |
7 | // http://www.boost.org/LICENSE_1_0.txt) | |
8 | ||
9 | #ifndef BOOST_GEOMETRY_STRATEGIES_CARTESIAN_BUFFER_HPP | |
10 | #define BOOST_GEOMETRY_STRATEGIES_CARTESIAN_BUFFER_HPP | |
11 | ||
12 | namespace boost { namespace geometry | |
13 | { | |
14 | ||
15 | namespace strategy { namespace buffer | |
16 | { | |
17 | ||
18 | /* | |
19 | ||
20 | A Buffer-join strategy gets 4 input points. | |
21 | On the two consecutive segments s1 and s2 (joining at vertex v): | |
22 | ||
23 | The lines from parallel at s1, s2 (at buffer-distance) end/start | |
24 | in two points perpendicular to the segments: p1 and p2. | |
25 | These parallel lines interesct in point ip | |
26 | ||
27 | (s2) | |
28 | | | |
29 | | | |
30 | ^ | |
31 | | | |
32 | (p2) |(v) | |
33 | * +----<--- (s1) | |
34 | ||
35 | x(ip) *(p1) | |
36 | ||
37 | ||
38 | So, in clockwise order: | |
39 | v : vertex point | |
40 | p1: perpendicular on left side of segment1<1> (perp1) | |
41 | ip: intersection point | |
42 | p2: perpendicular on left side of segment2<0> (perp2) | |
43 | */ | |
44 | ||
45 | ||
46 | ||
47 | /*! | |
48 | \brief Enumerates options for side of buffer (left/right w.r.t. directed | |
49 | segment) | |
50 | \ingroup enum | |
51 | \details Around a linestring, a buffer can be defined left or right. | |
52 | Around a polygon, assumed clockwise internally, | |
53 | a buffer is either on the left side (inflates the polygon), or on the | |
54 | right side (deflates the polygon) | |
55 | */ | |
56 | enum buffer_side_selector { buffer_side_left, buffer_side_right }; | |
57 | ||
58 | /*! | |
59 | \brief Enumerates types of pieces (parts of buffer) around geometries | |
60 | \ingroup enum | |
61 | */ | |
62 | enum piece_type | |
63 | { | |
64 | buffered_segment, | |
65 | buffered_join, | |
66 | buffered_round_end, | |
67 | buffered_flat_end, | |
68 | buffered_point, | |
69 | buffered_concave, // always on the inside | |
70 | piece_type_unknown | |
71 | }; | |
72 | ||
73 | ||
74 | /*! | |
75 | \brief Enumerates types of joins | |
76 | \ingroup enum | |
77 | */ | |
78 | enum join_selector | |
79 | { | |
80 | join_convex, | |
81 | join_concave, | |
82 | join_continue, // collinear, next segment touches previous segment | |
83 | join_spike // collinear, with overlap, next segment goes back | |
84 | }; | |
85 | ||
86 | /*! | |
87 | \brief Enumerates types of result codes from buffer strategies | |
88 | \ingroup enum | |
89 | */ | |
90 | enum result_code | |
91 | { | |
92 | result_normal, | |
93 | result_error_numerical, | |
94 | result_no_output | |
95 | }; | |
96 | ||
97 | ||
98 | }} // namespace strategy::buffer | |
99 | ||
100 | ||
101 | }} // namespace boost::geometry | |
102 | ||
103 | #endif // BOOST_GEOMETRY_STRATEGIES_CARTESIAN_BUFFER_HPP |