annotate DEPENDENCIES/generic/include/boost/geometry/strategies/intersection_result.hpp @ 133:4acb5d8d80b6 tip

Don't fail environmental check if README.md exists (but .txt and no-suffix don't)
author Chris Cannam
date Tue, 30 Jul 2019 12:25:44 +0100
parents c530137014c0
children
rev   line source
Chris@16 1 // Boost.Geometry (aka GGL, Generic Geometry Library)
Chris@16 2
Chris@16 3 // Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
Chris@16 4
Chris@16 5 // Use, modification and distribution is subject to the Boost Software License,
Chris@16 6 // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
Chris@16 7 // http://www.boost.org/LICENSE_1_0.txt)
Chris@16 8
Chris@16 9 #ifndef BOOST_GEOMETRY_STRATEGIES_INTERSECTION_RESULT_HPP
Chris@16 10 #define BOOST_GEOMETRY_STRATEGIES_INTERSECTION_RESULT_HPP
Chris@16 11
Chris@16 12 #if defined(HAVE_MATRIX_AS_STRING)
Chris@16 13 #include <string>
Chris@16 14 #endif
Chris@16 15
Chris@16 16 #include <cstddef>
Chris@16 17
Chris@16 18
Chris@101 19
Chris@16 20 namespace boost { namespace geometry
Chris@16 21 {
Chris@16 22
Chris@16 23 /*!
Chris@16 24 \brief Dimensionally Extended 9 Intersection Matrix
Chris@16 25 \details
Chris@16 26 \ingroup overlay
Chris@16 27 \see http://gis.hsr.ch/wiki/images/3/3d/9dem_springer.pdf
Chris@16 28 */
Chris@16 29 struct de9im
Chris@16 30 {
Chris@16 31 int ii, ib, ie,
Chris@16 32 bi, bb, be,
Chris@16 33 ei, eb, ee;
Chris@16 34
Chris@16 35 inline de9im()
Chris@16 36 : ii(-1), ib(-1), ie(-1)
Chris@16 37 , bi(-1), bb(-1), be(-1)
Chris@16 38 , ei(-1), eb(-1), ee(-1)
Chris@16 39 {
Chris@16 40 }
Chris@16 41
Chris@16 42 inline de9im(int ii0, int ib0, int ie0,
Chris@16 43 int bi0, int bb0, int be0,
Chris@16 44 int ei0, int eb0, int ee0)
Chris@16 45 : ii(ii0), ib(ib0), ie(ie0)
Chris@16 46 , bi(bi0), bb(bb0), be(be0)
Chris@16 47 , ei(ei0), eb(eb0), ee(ee0)
Chris@16 48 {}
Chris@16 49
Chris@16 50 inline bool equals() const
Chris@16 51 {
Chris@16 52 return ii >= 0 && ie < 0 && be < 0 && ei < 0 && eb < 0;
Chris@16 53 }
Chris@16 54
Chris@16 55 inline bool disjoint() const
Chris@16 56 {
Chris@16 57 return ii < 0 && ib < 0 && bi < 0 && bb < 0;
Chris@16 58 }
Chris@16 59
Chris@16 60 inline bool intersects() const
Chris@16 61 {
Chris@16 62 return ii >= 0 || bb >= 0 || bi >= 0 || ib >= 0;
Chris@16 63 }
Chris@16 64
Chris@16 65 inline bool touches() const
Chris@16 66 {
Chris@16 67 return ii < 0 && (bb >= 0 || bi >= 0 || ib >= 0);
Chris@16 68 }
Chris@16 69
Chris@16 70 inline bool crosses() const
Chris@16 71 {
Chris@16 72 return (ii >= 0 && ie >= 0) || (ii == 0);
Chris@16 73 }
Chris@16 74
Chris@16 75 inline bool overlaps() const
Chris@16 76 {
Chris@16 77 return ii >= 0 && ie >= 0 && ei >= 0;
Chris@16 78 }
Chris@16 79
Chris@16 80 inline bool within() const
Chris@16 81 {
Chris@16 82 return ii >= 0 && ie < 0 && be < 0;
Chris@16 83 }
Chris@16 84
Chris@16 85 inline bool contains() const
Chris@16 86 {
Chris@16 87 return ii >= 0 && ei < 0 && eb < 0;
Chris@16 88 }
Chris@16 89
Chris@16 90
Chris@16 91 static inline char as_char(int v)
Chris@16 92 {
Chris@101 93 return v >= 0 && v < 10 ? static_cast<char>('0' + v) : '-';
Chris@16 94 }
Chris@16 95
Chris@16 96 #if defined(HAVE_MATRIX_AS_STRING)
Chris@16 97 inline std::string matrix_as_string(std::string const& tab, std::string const& nl) const
Chris@16 98 {
Chris@16 99 std::string ret;
Chris@16 100 ret.reserve(9 + tab.length() * 3 + nl.length() * 3);
Chris@16 101 ret += tab; ret += as_char(ii); ret += as_char(ib); ret += as_char(ie); ret += nl;
Chris@16 102 ret += tab; ret += as_char(bi); ret += as_char(bb); ret += as_char(be); ret += nl;
Chris@16 103 ret += tab; ret += as_char(ei); ret += as_char(eb); ret += as_char(ee);
Chris@16 104 return ret;
Chris@16 105 }
Chris@16 106
Chris@16 107 inline std::string matrix_as_string() const
Chris@16 108 {
Chris@16 109 return matrix_as_string("", "");
Chris@16 110 }
Chris@16 111 #endif
Chris@16 112
Chris@16 113 };
Chris@16 114
Chris@16 115 struct de9im_segment : public de9im
Chris@16 116 {
Chris@16 117 bool collinear; // true if segments are aligned (for equal,overlap,touch)
Chris@16 118 bool opposite; // true if direction is reversed (for equal,overlap,touch)
Chris@16 119 bool parallel; // true if disjoint but parallel
Chris@16 120 bool degenerate; // true for segment(s) of zero length
Chris@16 121
Chris@16 122 double ra, rb; // temp
Chris@16 123
Chris@16 124 inline de9im_segment()
Chris@16 125 : de9im()
Chris@16 126 , collinear(false)
Chris@16 127 , opposite(false)
Chris@16 128 , parallel(false)
Chris@16 129 , degenerate(false)
Chris@16 130 {}
Chris@16 131
Chris@16 132 inline de9im_segment(double a, double b,
Chris@16 133 int ii0, int ib0, int ie0,
Chris@16 134 int bi0, int bb0, int be0,
Chris@16 135 int ei0, int eb0, int ee0,
Chris@16 136 bool c = false, bool o = false, bool p = false, bool d = false)
Chris@16 137 : de9im(ii0, ib0, ie0, bi0, bb0, be0, ei0, eb0, ee0)
Chris@16 138 , collinear(c)
Chris@16 139 , opposite(o)
Chris@16 140 , parallel(p)
Chris@16 141 , degenerate(d)
Chris@16 142 , ra(a), rb(b)
Chris@16 143 {}
Chris@16 144
Chris@16 145
Chris@16 146 #if defined(HAVE_MATRIX_AS_STRING)
Chris@16 147 inline std::string as_string() const
Chris@16 148 {
Chris@16 149 std::string ret = matrix_as_string();
Chris@16 150 ret += collinear ? "c" : "-";
Chris@16 151 ret += opposite ? "o" : "-";
Chris@16 152 return ret;
Chris@16 153 }
Chris@16 154 #endif
Chris@16 155 };
Chris@16 156
Chris@101 157 template <typename SegmentRatio>
Chris@101 158 struct fraction_type
Chris@101 159 {
Chris@101 160 SegmentRatio robust_ra; // TODO this can be renamed now to "ra"
Chris@101 161 SegmentRatio robust_rb;
Chris@16 162
Chris@101 163 bool initialized;
Chris@101 164 inline fraction_type()
Chris@101 165 : initialized(false)
Chris@101 166 {}
Chris@16 167
Chris@101 168 template <typename Info>
Chris@101 169 inline void assign(Info const& info)
Chris@101 170 {
Chris@101 171 initialized = true;
Chris@101 172 robust_ra = info.robust_ra;
Chris@101 173 robust_rb = info.robust_rb;
Chris@101 174 }
Chris@101 175
Chris@101 176 inline void assign(SegmentRatio const& a, SegmentRatio const& b)
Chris@101 177 {
Chris@101 178 initialized = true;
Chris@101 179 robust_ra = a;
Chris@101 180 robust_rb = b;
Chris@101 181 }
Chris@101 182
Chris@101 183 };
Chris@101 184
Chris@101 185 //
Chris@101 186 /*!
Chris@101 187 \brief return-type for segment-intersection
Chris@101 188 \note Set in intersection_points.hpp, from segment_intersection_info
Chris@101 189 */
Chris@101 190 template <typename Point, typename SegmentRatio>
Chris@16 191 struct segment_intersection_points
Chris@16 192 {
Chris@101 193 std::size_t count; // The number of intersection points
Chris@101 194
Chris@101 195 // TODO: combine intersections and fractions in one struct
Chris@16 196 Point intersections[2];
Chris@101 197 fraction_type<SegmentRatio> fractions[2];
Chris@16 198 typedef Point point_type;
Chris@16 199
Chris@16 200 segment_intersection_points()
Chris@16 201 : count(0)
Chris@16 202 {}
Chris@16 203 };
Chris@16 204
Chris@101 205 // All assigned in cart_intersect, passed to intersection_points
Chris@101 206 template <typename CoordinateType, typename PromotedType, typename SegmentRatio>
Chris@101 207 struct segment_intersection_info
Chris@101 208 {
Chris@101 209 typedef PromotedType promoted_type;
Chris@101 210
Chris@101 211 CoordinateType dx_a, dy_a;
Chris@101 212 CoordinateType dx_b, dy_b; // TODO b can be removed
Chris@101 213 SegmentRatio robust_ra;
Chris@101 214 SegmentRatio robust_rb;
Chris@101 215 };
Chris@101 216
Chris@16 217
Chris@16 218 }} // namespace boost::geometry
Chris@16 219
Chris@16 220
Chris@16 221 #endif // BOOST_GEOMETRY_STRATEGIES_INTERSECTION_RESULT_HPP