primitives/Point.h
Go to the documentation of this file.
1 #pragma once
2 #pragma GCC diagnostic push
3 #if defined __GNUC__ && (__GNUC__ >= 6)
4 #pragma GCC diagnostic ignored "-Wignored-attributes"
5 #pragma GCC diagnostic ignored "-Wint-in-bool-context"
6 #endif
7 #include <Eigen/Core>
8 #pragma GCC diagnostic pop
9 #include <utility>
10 
11 #include "lanelet2_core/Forward.h"
16 
17 namespace lanelet {
18 
19 using BasicPoint3d = Eigen::Vector3d;
20 using BasicPoint2d = Eigen::Matrix<double, 2, 1, Eigen::DontAlign>;
21 using BasicPoints2d = std::vector<Eigen::Vector2d,
22  Eigen::aligned_allocator<Eigen::Vector2d>>;
23 using BasicPoints3d = std::vector<BasicPoint3d>;
24 
25 namespace internal {
26 template <>
27 class Converter<const BasicPoint2d> {
28  public:
29  template <typename InType>
30  const BasicPoint2d& convert(const InType& t) const {
31  return t.basicPoint2d();
32  }
33 };
34 } // namespace internal
35 
36 namespace traits {
38 template <>
44  using Category = PointTag;
45 };
46 template <>
52  using Category = PointTag;
53 };
54 template <>
55 struct PrimitiveTraits<Eigen::Vector2d> {
60  using Category = PointTag;
61 };
62 template <>
63 struct PointTraits<BasicPoint3d> : PrimitiveTraits<BasicPoint3d> {
67  static constexpr bool IsPrimitive = false;
69 };
70 template <>
71 struct PointTraits<BasicPoint2d> : PrimitiveTraits<BasicPoint2d> {
75  static constexpr bool IsPrimitive = false;
76  static constexpr Dimensions Dimension = Dimensions::Two;
77 };
78 template <>
79 struct PointTraits<Eigen::Vector2d> : PrimitiveTraits<Eigen::Vector2d> {
83  static constexpr bool IsPrimitive = false;
84  static constexpr Dimensions Dimension = Dimensions::Two;
85 };
86 
87 template <>
88 inline BasicPoint3d to3D(const BasicPoint2d& primitive) {
89  return {primitive.x(), primitive.y(), 0};
90 }
91 template <>
92 inline BasicPoint2d to2D(const BasicPoint3d& primitive) {
93  return {primitive.x(), primitive.y()};
94 }
95 } // namespace traits
96 
99  double length{0.};
100  double distance{0.};
101 };
102 
105 class PointData : public PrimitiveData { // NOLINT
106  public:
109  PointData(const PointData&) = delete;
110  PointData& operator=(const LineStringData&) = delete;
111  PointData(PointData&&) = default;
112  PointData& operator=(PointData&&) = default;
113  ~PointData() = default;
114  const BasicPoint2d& point2d() const {
115  if (BOOST_UNLIKELY(point.head<2>() != point2d_)) {
116  point2d_ = point.head<2>();
117  }
118  return point2d_;
119  }
120 
121  BasicPoint3d point; // NOLINT(cppcoreguidelines-non-private-member-variables-in-classes)
122 
123  private:
125 };
126 
144 
150 class ConstPoint2d : public ConstPrimitive<PointData> {
151  public:
159 
161 
164  : ConstPrimitive<PointData>{std::make_shared<PointData>(id, point, attributes)} {} // NOLINT
165 
167 
171  explicit ConstPoint2d(Id id = InvalId, double x = 0., double y = 0., double z = 0.,
173  : ConstPrimitive<PointData>{std::make_shared<PointData>( // NOLINT
174  id, BasicPoint3d(x, y, z), attributes)} {}
175 
177  operator BasicPoint2d() const noexcept { // NOLINT
178  return point2d();
179  }
180 
182  const BasicPoint& basicPoint() const noexcept { return point2d(); }
183 
186  const BasicPoint2d& basicPoint2d() const noexcept { return point2d(); }
187 
189  double x() const noexcept { return point().x(); }
190 
192  double y() const noexcept { return point().y(); }
193 
194  protected:
195  const BasicPoint3d& point() const { return constData()->point; }
196  const BasicPoint2d& point2d() const { return constData()->point2d(); }
197 };
198 
202 class ConstPoint3d : public ConstPoint2d {
203  public:
208 
210  ConstPoint3d() = default;
211  explicit ConstPoint3d(const ConstPoint2d& other) : ConstPoint2d(other) {}
212 
213  operator BasicPoint2d() const noexcept = delete; // NOLINT
214 
216  operator const BasicPoint3d&() const noexcept { // NOLINT
217  return point();
218  }
219 
221  const BasicPoint& basicPoint() const noexcept { return point(); }
222 
224  double z() const noexcept { return point().z(); }
225 };
226 
230 class Point2d : public Primitive<ConstPoint3d> {
231  public:
235  using TwoDType = Point2d;
238 
239  using Primitive::Primitive;
240  using Primitive::x;
241  using Primitive::y;
242  Point2d() = default;
243  operator const BasicPoint3d&() const = delete;
244 
246  operator BasicPoint2d() const noexcept { // NOLINT
247  return point().head<2>();
248  }
249 
251  auto basicPoint() noexcept { return point().head<2>(); }
252 
254  const BasicPoint2d& basicPoint() const noexcept { return point2d(); }
255 
257  double& x() noexcept { return point().x(); }
258 
260  double& y() noexcept { return point().y(); }
261  double z() const noexcept = delete;
262 
263  protected:
264  using Primitive::point;
265  BasicPoint3d& point() { return data()->point; }
266 };
267 
271 class Point3d : public Point2d {
272  public:
276  Point3d() = default;
278 
279  using Point2d::Point2d;
280 
282  explicit Point3d(const Point2d& other) : Point2d(other) {}
283 
284  using Primitive::x;
285  using Primitive::y;
286  using Primitive::z;
287 
288  operator BasicPoint2d() const noexcept = delete;
289 
291  operator BasicPoint3d&() noexcept { return point(); } // NOLINT
292 
294  operator const BasicPoint3d&() const noexcept { return point(); } // NOLINT
295 
297  BasicPoint& basicPoint() noexcept { return point(); }
298 
300  const BasicPoint& basicPoint() const noexcept { return point(); }
301 
303  double& x() noexcept { return point().x(); }
304 
306  double& y() noexcept { return point().y(); }
307 
309  double& z() noexcept { return point().z(); }
310 };
311 
312 inline std::ostream& operator<<(std::ostream& stream, const ConstPoint2d& obj) {
313  return stream << "[id: " << obj.id() << " x: " << obj.x() << " y: " << obj.y() << "]";
314 }
315 
316 inline std::ostream& operator<<(std::ostream& stream, const ConstPoint3d& obj) {
317  return stream << "[id: " << obj.id() << " x: " << obj.x() << " y: " << obj.y() << " z: " << obj.z() << "]";
318 }
319 
320 inline std::ostream& operator<<(std::ostream& stream, const Point2d& obj) {
321  return stream << "[id: " << obj.id() << " x: " << obj.x() << " y: " << obj.y() << "]";
322 }
323 
324 inline std::ostream& operator<<(std::ostream& stream, const Point3d& obj) {
325  return stream << "[id: " << obj.id() << " x: " << obj.x() << " y: " << obj.y() << " z: " << obj.z() << "]";
326 }
327 
328 namespace traits {
329 template <typename T>
330 constexpr bool isPointT() {
331  return isCategory<T, traits::PointTag>();
332 }
333 } // namespace traits
334 template <typename T, typename RetT>
335 using IfPT = std::enable_if_t<traits::isPointT<T>(), RetT>;
336 
337 } // namespace lanelet
338 
339 // Hash function for usage in containers
340 namespace std {
341 template <>
342 struct hash<lanelet::Point3d> : public lanelet::HashBase<lanelet::Point3d> {};
343 template <>
344 struct hash<lanelet::ConstPoint3d> : public lanelet::HashBase<lanelet::ConstPoint3d> {};
345 template <>
346 struct hash<lanelet::Point2d> : public lanelet::HashBase<lanelet::Point2d> {};
347 template <>
348 struct hash<lanelet::ConstPoint2d> : public lanelet::HashBase<lanelet::ConstPoint2d> {};
349 } // namespace std
lanelet::InvalId
constexpr Id InvalId
indicates a primitive that is not part of a map
Definition: Forward.h:199
lanelet::HashBase
Definition: Primitive.h:328
lanelet::traits::Dimensions::Two
@ Two
lanelet::traits::PointTraits< BasicPoint3d >::BasicPoint
BasicPoint3d BasicPoint
Definition: primitives/Point.h:64
lanelet::Primitive
Base class for all mutable Primitives of lanelet2.
Definition: Primitive.h:243
lanelet::ArcCoordinates::length
double length
length along linestring
Definition: primitives/Point.h:99
lanelet::traits::PrimitiveTraits< Eigen::Vector2d >::TwoDType
BasicPoint2d TwoDType
Definition: primitives/Point.h:58
lanelet::Point3d::x
double & x() noexcept
gets a mutable reference to the x coordinate
Definition: primitives/Point.h:303
lanelet::Point3d::y
double & y() noexcept
gets a mutable reference to the y coordinate
Definition: primitives/Point.h:306
lanelet::ConstPoint2d::point
const BasicPoint3d & point() const
Definition: primitives/Point.h:195
lanelet::ConstPoint3d::ConstPoint3d
ConstPoint3d(const ConstPoint2d &other)
Definition: primitives/Point.h:211
lanelet::PointData::point2d_
BasicPoint2d point2d_
Definition: primitives/Point.h:124
lanelet::BasicPoints3d
std::vector< BasicPoint3d > BasicPoints3d
multiple simple 3d-points
Definition: primitives/Point.h:23
lanelet::Point3d::z
double & z() noexcept
gets a mutable reference to the z coordinate
Definition: primitives/Point.h:309
lanelet::traits::PrimitiveTraits::ConstType
typename T::ConstType ConstType
Definition: Traits.h:22
lanelet::traits::isPointT
constexpr bool isPointT()
Definition: primitives/Point.h:330
lanelet::PrimitiveData
Common data class for all lanelet primitives.
Definition: Primitive.h:31
lanelet::Point3d::Point3d
Point3d(const Point2d &other)
constructs a 3D from a 2D point. No data is lost in that process.
Definition: primitives/Point.h:282
lanelet::Point2d::basicPoint
const BasicPoint2d & basicPoint() const noexcept
get a basic 2d point
Definition: primitives/Point.h:254
lanelet::traits::to2D
BoundingBox2d to2D(const BoundingBox3d &primitive)
Definition: primitives/BoundingBox.h:304
lanelet::traits::Dimensions
Dimensions
Definition: Traits.h:129
lanelet
Definition: Attribute.h:13
lanelet::BasicPoint3d
Eigen::Vector3d BasicPoint3d
a simple 3d-point
Definition: primitives/Point.h:19
lanelet::ConstPrimitive< PointData >::attributes
const AttributeMap & attributes() const
get the attributes of this primitive
Definition: Primitive.h:89
lanelet::ConstPoint2d::ConstPoint2d
ConstPoint2d(Id id=InvalId, double x=0., double y=0., double z=0., const AttributeMap &attributes=AttributeMap())
Construct from an id and coordinates.
Definition: primitives/Point.h:171
lanelet::AttributeMap
HybridMap< Attribute, decltype(AttributeNamesString::Map)&, AttributeNamesString::Map > AttributeMap
Definition: Attribute.h:371
lanelet::ConstPoint2d::Dimension
static constexpr traits::Dimensions Dimension
Definition: primitives/Point.h:158
lanelet::traits::PointTag
Definition: Traits.h:6
lanelet::Point2d
A mutable 2d point.
Definition: primitives/Point.h:230
lanelet::traits::PointTraits::IsPrimitive
static constexpr bool IsPrimitive
Definition: Traits.h:137
lanelet::Id
int64_t Id
Definition: Forward.h:198
lanelet::operator<<
std::ostream & operator<<(std::ostream &stream, const Attribute &obj)
Definition: Attribute.h:369
lanelet::traits::PrimitiveTraits< BasicPoint2d >::ConstType
BasicPoint2d ConstType
Definition: primitives/Point.h:48
lanelet::ConstPoint3d::basicPoint
const BasicPoint & basicPoint() const noexcept
get a basic 3d point
Definition: primitives/Point.h:221
lanelet::ConstPoint3d::z
double z() const noexcept
get the z coordinate
Definition: primitives/Point.h:224
lanelet::traits::PrimitiveTraits< BasicPoint3d >::ConstType
BasicPoint3d ConstType
Definition: primitives/Point.h:40
lanelet::traits::PointTraits< BasicPoint2d >::ConstPoint
typename PrimitiveTraits< BasicPoint2d >::ConstType ConstPoint
Definition: primitives/Point.h:73
lanelet::traits::PrimitiveTraits< BasicPoint3d >::TwoDType
BasicPoint2d TwoDType
Definition: primitives/Point.h:42
lanelet::Point2d::z
double z() const noexcept=delete
lanelet::traits::PrimitiveTraits< Eigen::Vector2d >::ThreeDType
BasicPoint3d ThreeDType
Definition: primitives/Point.h:59
lanelet::ConstPoint2d::point2d
const BasicPoint2d & point2d() const
Definition: primitives/Point.h:196
lanelet::ArcCoordinates::distance
double distance
signed distance to linestring (left=positive)
Definition: primitives/Point.h:100
lanelet::ArcCoordinates
Describes a position in linestring coordinates.
Definition: primitives/Point.h:98
TransformIterator.h
lanelet::traits::PrimitiveTraits< BasicPoint2d >::ThreeDType
BasicPoint3d ThreeDType
Definition: primitives/Point.h:51
lanelet::traits::PointTraits< BasicPoint3d >::ConstPoint
typename PrimitiveTraits< BasicPoint3d >::ConstType ConstPoint
Definition: primitives/Point.h:65
lanelet::ConstPoint2d::basicPoint2d
const BasicPoint2d & basicPoint2d() const noexcept
Definition: primitives/Point.h:186
lanelet::PointData::point2d
const BasicPoint2d & point2d() const
Definition: primitives/Point.h:114
lanelet::internal::Converter< const BasicPoint2d >::convert
const BasicPoint2d & convert(const InType &t) const
Definition: primitives/Point.h:30
lanelet::IfPT
std::enable_if_t< traits::isPointT< T >(), RetT > IfPT
Definition: primitives/Point.h:335
lanelet::ConstPrimitive< PointData >::constData
const std::shared_ptr< const PointData > & constData() const
get the internal data of this primitive
Definition: Primitive.h:178
lanelet::traits::PointTraits< BasicPoint2d >::MutablePoint
typename PrimitiveTraits< BasicPoint2d >::MutableType MutablePoint
Definition: primitives/Point.h:74
lanelet::traits::PrimitiveTraits::MutableType
typename T::MutableType MutableType
Definition: Traits.h:23
lanelet::ConstPoint3d
An immutable 3d point.
Definition: primitives/Point.h:202
Primitive.h
lanelet::PrimitiveData::attributes
AttributeMap attributes
attributes of this primitive
Definition: Primitive.h:45
lanelet::ConstPoint3d::Dimension
static constexpr traits::Dimensions Dimension
Definition: primitives/Point.h:207
lanelet::Point2d::x
double & x() noexcept
gets a mutable reference to the x coordinate
Definition: primitives/Point.h:257
lanelet::PointData::~PointData
~PointData()=default
lanelet::Primitive::Primitive
friend class Primitive
Definition: Primitive.h:280
lanelet::ConstPoint3d::ConstPoint3d
ConstPoint3d()=default
lanelet::traits::PrimitiveTraits< BasicPoint2d >::MutableType
BasicPoint2d MutableType
Definition: primitives/Point.h:49
lanelet::Point2d::Point2d
Point2d()=default
lanelet::PointData::point
BasicPoint3d point
Definition: primitives/Point.h:121
lanelet::traits::PrimitiveTraits< BasicPoint3d >::ThreeDType
BasicPoint3d ThreeDType
Definition: primitives/Point.h:43
lanelet::traits::PointTraits< Eigen::Vector2d >::MutablePoint
typename PrimitiveTraits< BasicPoint2d >::MutableType MutablePoint
Definition: primitives/Point.h:82
lanelet::ConstPoint2d::BasicPoint
BasicPoint2d BasicPoint
returned basic point type
Definition: primitives/Point.h:152
Utilities.h
lanelet::traits::PrimitiveTraits< BasicPoint2d >::TwoDType
BasicPoint2d TwoDType
Definition: primitives/Point.h:50
lanelet::BasicPoint2d
Eigen::Matrix< double, 2, 1, Eigen::DontAlign > BasicPoint2d
a simple 2d-point
Definition: primitives/Point.h:20
lanelet::Point3d
A mutable 3d point.
Definition: primitives/Point.h:271
lanelet::ConstPoint2d::x
double x() const noexcept
gets x coordinate
Definition: primitives/Point.h:189
lanelet::Point3d::basicPoint
BasicPoint & basicPoint() noexcept
Get a mutable reference to the internal 3d point.
Definition: primitives/Point.h:297
lanelet::traits::PointTraits< Eigen::Vector2d >::BasicPoint
BasicPoint2d BasicPoint
Definition: primitives/Point.h:80
lanelet::Point2d::y
double & y() noexcept
gets a mutable reference to the y coordinate
Definition: primitives/Point.h:260
lanelet::ConstPrimitive::ConstPrimitive
ConstPrimitive(const std::shared_ptr< const Data > &data)
Construct from a pointer to the data.
Definition: Primitive.h:78
lanelet::HybridMap< Attribute, decltype(AttributeNamesString::Map)&, AttributeNamesString::Map >
Traits.h
lanelet::traits::PrimitiveTraits< Eigen::Vector2d >::ConstType
BasicPoint2d ConstType
Definition: primitives/Point.h:56
lanelet::ConstPrimitive
Basic Primitive class for all primitives of lanelet2.
Definition: Primitive.h:70
lanelet::traits::PrimitiveTraits< Eigen::Vector2d >::MutableType
BasicPoint2d MutableType
Definition: primitives/Point.h:57
std
Definition: primitives/Area.h:369
lanelet::PointData::operator=
PointData & operator=(const LineStringData &)=delete
lanelet::ConstPoint2d::ConstPoint2d
ConstPoint2d(Id id, const BasicPoint3d &point, const AttributeMap &attributes=AttributeMap())
Construct from an id and a point.
Definition: primitives/Point.h:163
lanelet::Point3d::Dimension
static constexpr traits::Dimensions Dimension
Definition: primitives/Point.h:277
lanelet::traits::PointTraits< Eigen::Vector2d >::ConstPoint
typename PrimitiveTraits< BasicPoint2d >::ConstType ConstPoint
Definition: primitives/Point.h:81
lanelet::Point3d::Point3d
Point3d()=default
lanelet::PointData
Definition: primitives/Point.h:105
lanelet::traits::PrimitiveTraits< BasicPoint3d >::MutableType
BasicPoint3d MutableType
Definition: primitives/Point.h:41
lanelet::Point2d::Dimension
static constexpr traits::Dimensions Dimension
Definition: primitives/Point.h:237
lanelet::ConstPoint2d::y
double y() const noexcept
gets y coordinate
Definition: primitives/Point.h:192
lanelet::traits::PointTraits::Dimension
static constexpr Dimensions Dimension
Definition: Traits.h:138
lanelet::internal::Converter
Definition: TransformIterator.h:8
lanelet::traits::PointTraits
Specialization of traits for points.
Definition: Traits.h:133
lanelet::PrimitiveData::id
Id id
Id of this primitive (unique across one map)
Definition: Primitive.h:44
lanelet::traits::PrimitiveTraits
Identifies RegulatoryElementPrimitives.
Definition: Traits.h:20
Forward.h
lanelet::Primitive< ConstPoint3d >::data
std::shared_ptr< DataType > data() const
Definition: Primitive.h:287
lanelet::ConstPoint2d::basicPoint
const BasicPoint & basicPoint() const noexcept
Get an Eigen point for faster calculations.
Definition: primitives/Point.h:182
lanelet::Point3d::basicPoint
const BasicPoint & basicPoint() const noexcept
Get an immutable reference to the internal 3d point.
Definition: primitives/Point.h:300
lanelet::ConstPrimitive::id
Id id() const noexcept
get the unique id of this primitive
Definition: Primitive.h:96
lanelet::traits::PointTraits< BasicPoint2d >::BasicPoint
BasicPoint2d BasicPoint
Definition: primitives/Point.h:72
lanelet::traits::PointTraits< BasicPoint3d >::MutablePoint
typename PrimitiveTraits< BasicPoint3d >::MutableType MutablePoint
Definition: primitives/Point.h:66
lanelet::traits::Dimensions::Three
@ Three
lanelet::Point2d::basicPoint
auto basicPoint() noexcept
get a mutable reference to the 2d point data
Definition: primitives/Point.h:251
lanelet::ConstPoint2d
An immutable 2d point.
Definition: primitives/Point.h:150
lanelet::BasicPoints2d
std::vector< Eigen::Vector2d, Eigen::aligned_allocator< Eigen::Vector2d > > BasicPoints2d
multiple simple 2d-points
Definition: primitives/Point.h:22
lanelet::traits::to3D
BoundingBox3d to3D(const BoundingBox2d &primitive)
Definition: primitives/BoundingBox.h:303
lanelet::PointData::PointData
PointData(Id id, BasicPoint3d point, const AttributeMap &attributes=AttributeMap())
Definition: primitives/Point.h:107
lanelet::Point2d::point
BasicPoint3d & point()
Definition: primitives/Point.h:265


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