primitives/Polygon.h
Go to the documentation of this file.
1 #pragma once
2 
6 
7 namespace lanelet {
8 
19  public:
20  explicit BasicPolygon2d(const BasicLineString2d& other) : BasicLineString2d(other) {}
26  BasicPolygon2d() = default;
27 };
28 
39  public:
40  explicit BasicPolygon3d(const BasicLineString3d& other) : BasicLineString3d(other) {}
46  BasicPolygon3d() = default;
47 };
48 
75 
82 class ConstPolygon2d : public ConstLineStringImpl<Point2d> {
83  public:
91 
99  explicit ConstPolygon2d(const ConstLineString2d& other) : ConstLineStringImpl(other) {}
100  explicit operator ConstLineString2d() const { return ConstLineString2d(constData(), inverted()); }
101 
102  ConstPolygon2d() = default;
103 
105  BasicPolygon2d basicPolygon() const { return {basicBegin(), basicEnd()}; }
106 
108  operator BasicPolygon2d() const { // NOLINT
109  return {basicBegin(), basicEnd()};
110  }
111 
113  size_t numSegments() const noexcept { return size() < 2 ? 0 : size(); }
114 };
115 
122 class ConstPolygon3d : public ConstLineStringImpl<Point3d> {
123  public:
131 
132  ConstPolygon3d() = default;
133 
136  explicit ConstPolygon3d(const ConstLineString3d& other) : ConstLineStringImpl(other) {}
137  explicit operator ConstLineString3d() const { return ConstLineString3d(constData(), inverted()); }
138 
140  BasicPolygon3d basicPolygon() const { return {basicBegin(), basicEnd()}; }
141 
143  operator BasicPolygon3d() const { // NOLINT
144  return {basicBegin(), basicEnd()};
145  }
146 
148  size_t numSegments() const noexcept { return size() < 2 ? 0 : size(); }
149 };
150 
157 class Polygon3d : public LineStringImpl<ConstPolygon3d> {
158  public:
164 
165  Polygon3d() = default; // gcc5 needs this
166 
168  explicit Polygon3d(const LineString3d& other) : LineStringImpl(other) {}
169  explicit operator LineString3d() const { return LineString3d(data(), inverted()); }
170 
171  friend class Polygon2d;
172 
174  BasicPolygon3d basicPolygon() const { return {basicBegin(), basicEnd()}; }
175 
177  operator BasicPolygon3d() const { // NOLINT
178  return {basicBegin(), basicEnd()};
179  }
180 };
181 
188 class Polygon2d : public LineStringImpl<ConstPolygon2d> {
189  public:
195 
196  Polygon2d() = default;
197 
199  explicit Polygon2d(const LineString2d& other) : LineStringImpl(other) {}
200  explicit operator LineString2d() const { return LineString2d(data(), inverted()); }
201 
205  inline BasicPolygon2d basicPolygon() const {
206  BasicPolygon2d::allocator_type alloc; // gcc produces undef refs otherwise
207  return BasicPolygon2d(basicBegin(), basicEnd(), alloc);
208  }
209  inline operator BasicPolygon2d() const { // NOLINT
210  return BasicPolygon2d(basicBegin(), basicEnd());
211  }
212  friend class Polygon3d;
213 };
214 
229  public:
230  using const_iterator = BasicIterator; // NOLINT
231  using iterator = BasicIterator; // NOLINT
232 
238 
239  ConstHybridPolygon3d() = default;
240 
242  explicit ConstHybridPolygon3d(const ConstPolygon3d& poly) : ConstPolygon3d(poly) {}
243 
245  BasicIterator begin() const noexcept { return basicBegin(); }
246 
248  BasicIterator end() const noexcept { return basicEnd(); }
249 
251  const BasicPointType& front() const noexcept { return ConstPolygon3d::front().basicPoint(); }
252 
254  const BasicPointType& back() const noexcept { return ConstPolygon3d::back().basicPoint(); }
255 
257  const BasicPointType& operator[](size_t idx) const noexcept { return ConstPolygon3d::operator[](idx).basicPoint(); }
258 };
259 
274  public:
275  using const_iterator = BasicIterator; // NOLINT
276  using iterator = BasicIterator; // NOLINT
277 
284 
285  ConstHybridPolygon2d() = default;
286 
288  explicit ConstHybridPolygon2d(const ConstPolygon2d& poly) : ConstPolygon2d(poly) {}
289 
291  BasicIterator begin() const noexcept { return basicBegin(); }
292 
294  BasicIterator end() const noexcept { return basicEnd(); }
295 
297  BasicPointType front() const noexcept { return ConstPolygon2d::front().basicPoint(); }
298 
300  BasicPointType back() const noexcept { return ConstPolygon2d::back().basicPoint(); }
301 
303  BasicPointType operator[](size_t idx) const noexcept { return ConstPolygon2d::operator[](idx).basicPoint(); }
304 };
305 
314  public:
317 };
318 
327  public:
330 };
331 
332 inline std::ostream& operator<<(std::ostream& stream, const ConstPolygon2d& obj) {
333  return stream << ConstLineString2d(obj);
334 }
335 
336 inline std::ostream& operator<<(std::ostream& stream, const ConstPolygon3d& obj) {
337  return stream << ConstLineString2d(obj);
338 }
339 
340 namespace internal {
341 
342 template <>
343 class Converter<const ConstPolygon3d> {
344  public:
345  template <typename T>
346  const ConstPolygon3d& convert(const T& t) const {
347  val_ = t;
348  return val_;
349  }
350 
351  private:
353 };
354 template <>
355 class Converter<const ConstPolygon2d> {
356  public:
357  template <typename T>
358  const ConstPolygon2d& convert(const T& t) const {
359  val_ = t;
360  return val_;
361  }
362 
363  private:
365 };
366 } // namespace internal
367 
368 namespace traits {
369 template <typename T>
370 constexpr bool isPolygonT() {
371  return isCategory<T, traits::PolygonTag>();
372 }
373 
374 template <>
381 };
382 template <>
389 };
390 template <>
392  BasicPolygon2d p2d(primitive.size());
393  std::transform(primitive.begin(), primitive.end(), p2d.begin(), utils::to2D<BasicPoint3d>);
394  return p2d;
395 }
396 
397 template <typename PolygonT>
398 std::enable_if_t<traits::isPolygonT<PolygonT>(), BasicPolygon2d> toBasicPolygon2d(const PolygonT& t) {
399  return traits::to2D(t).basicPolygon();
400 }
401 
402 template <>
404  return t;
405 }
406 
407 template <>
409  return traits::to2D(t);
410 }
411 
412 inline BasicPolygon2d toBasicPolygon2d(BasicPolygon2d&& t) { return std::move(t); }
413 
414 template <typename PolygonT>
415 std::enable_if_t<traits::isPolygonT<PolygonT>(), BasicPolygon3d> toBasicPolygon3d(const PolygonT& t) {
416  return traits::to3D(t).basicPolygon();
417 }
418 
419 template <>
421  return t;
422 }
423 
424 inline BasicPolygon3d toBasicPolygon3d(BasicPolygon3d&& t) { return std::move(t); }
425 
426 } // namespace traits
427 template <typename T, typename RetT>
428 using IfPoly = std::enable_if_t<traits::isPolygonT<T>(), RetT>;
429 
430 } // namespace lanelet
431 
432 // Hash function for usage in containers
433 namespace std {
434 template <>
435 struct hash<lanelet::Polygon3d> : public lanelet::HashBase<lanelet::Polygon3d> {};
436 template <>
437 struct hash<lanelet::ConstPolygon3d> : public lanelet::HashBase<lanelet::ConstPolygon3d> {};
438 template <>
439 struct hash<lanelet::Polygon2d> : public lanelet::HashBase<lanelet::Polygon2d> {};
440 template <>
441 struct hash<lanelet::ConstPolygon2d> : public lanelet::HashBase<lanelet::ConstPolygon2d> {};
442 } // namespace std
lanelet::HashBase
Definition: Primitive.h:328
lanelet::BasicPolygonWithHoles2d::outer
BasicPolygon2d outer
Definition: primitives/Polygon.h:328
lanelet::BasicPolygon3d::PointType
BasicPoint3d PointType
Definition: primitives/Polygon.h:44
lanelet::traits::to2D< BasicPolygon3d >
BasicPolygon2d to2D< BasicPolygon3d >(const BasicPolygon3d &primitive)
Definition: primitives/Polygon.h:391
lanelet::ConstLineStringImpl< Point3d >::operator[]
const ConstPointType & operator[](size_t idx) const noexcept
returns the point at this position
Definition: primitives/LineString.h:304
lanelet::ConstLineStringImpl< Point2d >::basicBegin
BasicIterator basicBegin() const noexcept
returns a normal iterator to the internal point type at begin
Definition: primitives/LineString.h:313
lanelet::traits::toBasicPolygon3d
std::enable_if_t< traits::isPolygonT< PolygonT >), BasicPolygon3d > toBasicPolygon3d(const PolygonT &t)
Definition: primitives/Polygon.h:415
lanelet::BasicPolygons2d
std::vector< BasicPolygon2d > BasicPolygons2d
Definition: Forward.h:153
lanelet::ConstPolygon3d::numSegments
size_t numSegments() const noexcept
Returns the number of (geometrically valid) segments.
Definition: primitives/Polygon.h:148
lanelet::Polygon2d::Polygon2d
Polygon2d()=default
lanelet::ConstHybridPolygon2d::ConstHybridPolygon2d
ConstHybridPolygon2d()=default
lanelet::traits::to2D
BoundingBox2d to2D(const BoundingBox3d &primitive)
Definition: primitives/BoundingBox.h:304
lanelet
Definition: Attribute.h:13
lanelet::BasicPoint3d
Eigen::Vector3d BasicPoint3d
a simple 3d-point
Definition: primitives/Point.h:19
lanelet::Polygon3d::Polygon3d
Polygon3d()=default
lanelet::BasicPolygon3d::BasicPolygon3d
BasicPolygon3d(const BasicLineString3d &other)
Definition: primitives/Polygon.h:40
lanelet::ConstLineStringImpl< Point2d >::basicEnd
BasicIterator basicEnd() const noexcept
returns a normal iterator for the internal point type at end
Definition: primitives/LineString.h:319
lanelet::ConstHybridPolygon3d::begin
BasicIterator begin() const noexcept
BasicPoint3d Iterator to begin.
Definition: primitives/Polygon.h:245
lanelet::ConstHybridPolygon3d
Polygon with access to primitive points.
Definition: primitives/Polygon.h:228
lanelet::LineStringImpl::LineStringImpl
LineStringImpl()=default
lanelet::ConstHybridPolygon2d::begin
BasicIterator begin() const noexcept
BasicPoint2d Iterator to begin.
Definition: primitives/Polygon.h:291
lanelet::LineStringImpl
Implementation template class that is common to all non-const types.
Definition: primitives/LineString.h:364
lanelet::BasicPolygon2d::BasicPolygon2d
BasicPolygon2d()=default
lanelet::BasicPolygon2d::BasicPolygon2d
BasicPolygon2d(const BasicLineString2d &other)
Definition: primitives/Polygon.h:20
lanelet::operator<<
std::ostream & operator<<(std::ostream &stream, const Attribute &obj)
Definition: Attribute.h:369
lanelet::ConstPolygon3d
An immutable clockwise oriented, open (ie start point != end point) polygon in 3d.
Definition: primitives/Polygon.h:122
lanelet::ConstHybridPolygon3d::end
BasicIterator end() const noexcept
BasicPoint3d Iterator to past-the-end.
Definition: primitives/Polygon.h:248
lanelet::ConstPolygon2d::numSegments
size_t numSegments() const noexcept
Returns the number of (geometrically valid) segments.
Definition: primitives/Polygon.h:113
lanelet::internal::Converter< const ConstPolygon2d >::convert
const ConstPolygon2d & convert(const T &t) const
Definition: primitives/Polygon.h:358
lanelet::Polygon2d::basicPolygon
BasicPolygon2d basicPolygon() const
create a simple 2d polygon from this (just a vector)
Definition: primitives/Polygon.h:205
lanelet::ConstLineStringImpl< Point3d >::back
const ConstPointType & back() const noexcept
returns the last point (if it exist)
Definition: primitives/LineString.h:295
lanelet::ConstLineStringImpl< Point2d >::inverted
bool inverted() const noexcept
Returns whether this is an inverted linestring.
Definition: primitives/LineString.h:257
lanelet::BasicPolygonWithHoles2d::inner
BasicPolygons2d inner
Definition: primitives/Polygon.h:329
lanelet::ConstPolygon2d::basicPolygon
BasicPolygon2d basicPolygon() const
create a simple 2d polygon from this (just a vector)
Definition: primitives/Polygon.h:105
lanelet::traits::PolygonTag
Identifies LineStringPrimitives.
Definition: Traits.h:9
lanelet::BasicPolygon2d::PointType
BasicPoint2d PointType
Definition: primitives/Polygon.h:24
lanelet::ConstLineStringImpl< Point3d >::BasicIterator
internal::TransformIterator< const_iterator, const BasicPointType > BasicIterator
Definition: primitives/LineString.h:236
lanelet::BasicPolygon3d::BasicPolygon3d
BasicPolygon3d()=default
lanelet::ConstHybridPolygon2d::front
BasicPointType front() const noexcept
Get first BasicPoint2d.
Definition: primitives/Polygon.h:297
lanelet::ConstLineString2d
A normal 2d linestring with immutable data.
Definition: primitives/LineString.h:552
lanelet::Polygon2d
An mutable clockwise oriented, open (ie start point != end point) polygon in 2d.
Definition: primitives/Polygon.h:188
lanelet::BasicPolygonWithHoles2d
A (basic) 2d polygon with holes inside.
Definition: primitives/Polygon.h:326
lanelet::ConstHybridPolygon3d::PointType
BasicPoint3d PointType
Definition: primitives/Polygon.h:237
lanelet::LineString2d
A normal 2d linestring with mutable data.
Definition: primitives/LineString.h:569
lanelet::ConstPrimitive< LineStringData >::constData
const std::shared_ptr< const LineStringData > & constData() const
get the internal data of this primitive
Definition: Primitive.h:178
lanelet::Polygon2d::Polygon2d
Polygon2d(const LineString2d &other)
Conversion from LineString2d. Does not ensure validity of the polygon!
Definition: primitives/Polygon.h:199
lanelet::ConstLineStringImpl< Point3d >::BasicPointType
traits::BasicPointT< Point3d > BasicPointType
Definition: primitives/LineString.h:223
lanelet::utils::detail::transform
auto transform(Container &&c, Func f)
Definition: Utilities.h:120
lanelet::ConstLineStringImpl
Implementation template class that is common to all LineStrings.
Definition: primitives/LineString.h:220
lanelet::Polygon3d::basicPolygon
BasicPolygon3d basicPolygon() const
create a simple 3d polygon from this (just a vector)
Definition: primitives/Polygon.h:174
lanelet::traits::isPolygonT
constexpr bool isPolygonT()
Definition: primitives/Polygon.h:370
lanelet::internal::Converter< const ConstPolygon3d >::val_
ConstPolygon3d val_
Definition: primitives/Polygon.h:352
lanelet::internal::TransformIterator
Definition: TransformIterator.h:54
lanelet::traits::toBasicPolygon2d< BasicPolygon3d >
BasicPolygon2d toBasicPolygon2d< BasicPolygon3d >(const BasicPolygon3d &t)
Definition: primitives/Polygon.h:408
lanelet::BasicPolygon3d
Primitive 3d polygon with basic points.
Definition: primitives/Polygon.h:38
lanelet::BasicLineString2d
BasicPoints2d BasicLineString2d
Definition: primitives/LineString.h:14
lanelet::ConstHybridPolygon2d::back
BasicPointType back() const noexcept
Get last BasicPoint2d.
Definition: primitives/Polygon.h:300
lanelet::internal::Converter< const ConstPolygon3d >::convert
const ConstPolygon3d & convert(const T &t) const
Definition: primitives/Polygon.h:346
lanelet::ConstPolygon2d::ConstPolygon2d
ConstPolygon2d()=default
lanelet::ConstHybridPolygon3d::front
const BasicPointType & front() const noexcept
Get first BasicPoint3d.
Definition: primitives/Polygon.h:251
lanelet::BasicPolygonWithHoles3d::outer
BasicPolygon3d outer
Definition: primitives/Polygon.h:315
lanelet::ConstPolygon3d::ConstPolygon3d
ConstPolygon3d(const ConstLineString3d &other)
Definition: primitives/Polygon.h:136
lanelet::ConstHybridPolygon3d::back
const BasicPointType & back() const noexcept
Get last BasicPoint3d.
Definition: primitives/Polygon.h:254
lanelet::ConstHybridPolygon2d::operator[]
BasicPointType operator[](size_t idx) const noexcept
access element at specific position
Definition: primitives/Polygon.h:303
lanelet::Polygon2d::Polygon3d
friend class Polygon3d
Definition: primitives/Polygon.h:212
lanelet::BasicPoint2d
Eigen::Matrix< double, 2, 1, Eigen::DontAlign > BasicPoint2d
a simple 2d-point
Definition: primitives/Point.h:20
lanelet::BasicPolygonWithHoles3d::inner
BasicPolygons3d inner
Definition: primitives/Polygon.h:316
lanelet::Polygon3d::Polygon3d
Polygon3d(const LineString3d &other)
Conversion from LineString3d. Does not ensure validity of the polygon!
Definition: primitives/Polygon.h:168
lanelet::traits::toBasicPolygon2d< BasicPolygon2d >
BasicPolygon2d toBasicPolygon2d< BasicPolygon2d >(const BasicPolygon2d &t)
Definition: primitives/Polygon.h:403
lanelet::ConstPolygon2d
An immutable clockwise oriented, open (ie start point != end point) polygon in 2d.
Definition: primitives/Polygon.h:82
lanelet::ConstHybridPolygon3d::operator[]
const BasicPointType & operator[](size_t idx) const noexcept
access BasicPoint3d at specific position
Definition: primitives/Polygon.h:257
lanelet::ConstHybridPolygon2d
Polygon with access to primitive points.
Definition: primitives/Polygon.h:273
Traits.h
std
Definition: primitives/Area.h:369
lanelet::ConstPolygon3d::basicPolygon
BasicPolygon3d basicPolygon() const
create a simple 3d polygon from this (just a vector)
Definition: primitives/Polygon.h:140
lanelet::BasicPolygons3d
std::vector< BasicPolygon3d > BasicPolygons3d
Definition: Forward.h:154
lanelet::ConstHybridPolygon3d::ConstHybridPolygon3d
ConstHybridPolygon3d()=default
lanelet::ConstLineStringImpl< Point2d >::size
size_t size() const noexcept
Return the number of points in this linestring.
Definition: primitives/LineString.h:260
lanelet::ConstLineStringImpl< Point3d >::front
const ConstPointType & front() const noexcept
returns the first point (if it exist)
Definition: primitives/LineString.h:286
lanelet::ConstLineString3d
A normal 3d linestring with immutable data.
Definition: primitives/LineString.h:521
lanelet::ConstHybridPolygon2d::ConstHybridPolygon2d
ConstHybridPolygon2d(const ConstPolygon2d &poly)
Conversion from ConstPolygon2d.
Definition: primitives/Polygon.h:288
lanelet::ConstPolygon2d::ConstPolygon2d
ConstPolygon2d(const ConstLineString2d &other)
Conversion from/to ConstLineString2d.
Definition: primitives/Polygon.h:99
lanelet::Polygon3d
A mutable clockwise oriented, open (ie start point != end point) polygon in 3d.
Definition: primitives/Polygon.h:157
lanelet::IfPoly
std::enable_if_t< traits::isPolygonT< T >(), RetT > IfPoly
Definition: primitives/Polygon.h:428
lanelet::Polygon3d::Polygon2d
friend class Polygon2d
Definition: primitives/Polygon.h:171
lanelet::ConstHybridPolygon3d::ConstHybridPolygon3d
ConstHybridPolygon3d(const ConstPolygon3d &poly)
Conversion from ConstPolygon3d.
Definition: primitives/Polygon.h:242
lanelet::ConstHybridPolygon2d::end
BasicIterator end() const noexcept
BasicPoint2d Iterator to past-the-end.
Definition: primitives/Polygon.h:294
lanelet::ConstHybridPolygon2d::PointType
BasicPoint2d PointType
Definition: primitives/Polygon.h:282
lanelet::traits::toBasicPolygon2d
std::enable_if_t< traits::isPolygonT< PolygonT >), BasicPolygon2d > toBasicPolygon2d(const PolygonT &t)
Definition: primitives/Polygon.h:398
LineString.h
lanelet::traits::toBasicPolygon3d< BasicPolygon3d >
BasicPolygon3d toBasicPolygon3d< BasicPolygon3d >(const BasicPolygon3d &t)
Definition: primitives/Polygon.h:420
lanelet::internal::Converter
Definition: TransformIterator.h:8
lanelet::ConstPolygon3d::ConstPolygon3d
ConstPolygon3d()=default
lanelet::traits::PrimitiveTraits
Identifies RegulatoryElementPrimitives.
Definition: Traits.h:20
Forward.h
lanelet::internal::Converter< const ConstPolygon2d >::val_
ConstPolygon2d val_
Definition: primitives/Polygon.h:364
lanelet::Primitive< ConstPolygon3d >::data
std::shared_ptr< DataType > data() const
Definition: Primitive.h:287
lanelet::BasicPolygonWithHoles3d
A (basic) 2d polygon with holes inside.
Definition: primitives/Polygon.h:313
lanelet::LineString3d
A normal 3d linestring with mutable data.
Definition: primitives/LineString.h:538
lanelet::BasicPolygon2d
Primitive 2d polygon with basic points.
Definition: primitives/Polygon.h:18
lanelet::ConstLineStringImpl::ConstLineStringImpl
ConstLineStringImpl(Id id=InvalId, Points3d points=Points3d(), const AttributeMap &attributes=AttributeMap())
Constructs a LineString or similar from an Id and a list of points.
Definition: primitives/LineString.h:243
lanelet::traits::to3D
BoundingBox3d to3D(const BoundingBox2d &primitive)
Definition: primitives/BoundingBox.h:303
lanelet::BasicLineString3d
BasicPoints3d BasicLineString3d
Definition: primitives/LineString.h:15


lanelet2_core
Author(s): Fabian Poggenhans
autogenerated on Thu Mar 6 2025 03:25:52