kDB: Knowledge DataBase
Loading...
Searching...
No Matches
Patch.h
1#pragma once
2
3#include <QFlags>
4#include <QSharedDataPointer>
5
6#include <kDBGIS/Forward.h>
7
8#include <clog_qt>
9#include <cres_qt>
10
11#include <knowValues/Forward.h>
12
13#include "Point.h"
14
15namespace kDBPointClouds
16{
17 class Patch
18 {
19 public:
20 enum class PGWKBFlag
21 {
22 Default = 0,
23 IgnorePCID = 1
24 };
25 Q_DECLARE_FLAGS(PGWKBFlags, PGWKBFlag)
26 public:
27 Patch();
28 Patch(const PointSpecification& _specification, const QByteArray& _data = QByteArray());
29 Patch(const Patch& _rhs);
30 Patch& operator=(const Patch& _rhs);
31 ~Patch();
32 bool operator==(const Patch& _rhs) const;
45 Cartography::CoordinateSystem coordinateSystem() const;
49 void reserve(std::size_t _pts);
50 void append(const Point& _point);
51 template<typename... Types>
52 inline void append(const std::tuple<Types...>& _values);
53 template<typename... Types>
54 void append(Types... _values)
55 {
56 append(std::make_tuple(_values...));
57 }
58 std::size_t pointsCount() const;
59 template<typename... Types>
60 inline std::tuple<Types...> get(std::size_t _index) const;
61 Point get(std::size_t _index) const;
67 QByteArray toPGWKB(PGWKBFlags _flags = PGWKBFlag::Default) const;
68 static cres_qresult<Patch> fromPGWKB(const QByteArray&,
69 const PointSpecification& _pointSpecification,
70 PGWKBFlags _flags = PGWKBFlag::Default);
78 static cres_qresult<Patch> fromPGWKB(const QByteArray& _data,
79 const kDB::Repository::Connection& _connection,
80 PGWKBFlags _flags = PGWKBFlag::Default);
84 bool isValid() const;
88 QByteArray data() const;
92 Patch transform(const Cartography::CoordinateSystem& _coordinateSystem, double _tx = 0.0,
93 double _ty = 0.0, double _tz = 0.0) const;
94 cres_qresult<QByteArray> md5() const;
95 public:
99 knowValues::Values::PointCloud toValuesPointCloud(const knowGIS::Pose& _pose,
100 const knowGIS::GeometryObject& _geometry,
101 const knowCore::Timestamp& _timestamp);
105 knowValues::Values::Lidar3DScan toValuesLidar3DScan(const knowGIS::Pose& _pose,
106 const knowCore::Timestamp& _timestamp);
110 static Patch create(const knowValues::Values::PointCloud& _rhs);
111 private:
116 std::size_t prepareNextPointInsertion();
117 std::size_t pointSize() const;
118 QByteArray& data_ref();
119 private:
120 struct Private;
121 QSharedDataPointer<Private> d;
122 };
123
124 template<typename... Types>
125 void Patch::append(const std::tuple<Types...>& _values)
126 {
127 Point::setter<sizeof...(Types)>::doit(prepareNextPointInsertion(), data_ref(), _values);
128 }
129 template<typename... Types>
130 inline std::tuple<Types...> Patch::get(std::size_t _index) const
131 {
132 std::tuple<Types...> values;
133 Point::getter<sizeof...(Types)>::doit(_index * pointSize(), data(), values);
134 return values;
135 }
136} // namespace kDBPointClouds
137
138#include <knowCore/MetaType.h>
139KNOWCORE_DECLARE_FULL_METATYPE(kDBPointClouds, Patch);
Definition Patch.h:18
bool isValid() const
Definition Patch.cpp:212
static Patch create(const knowValues::Values::PointCloud &_rhs)
Definition Patch.cpp:327
Cartography::CoordinateSystem coordinateSystem() const
bool synchroniseSpecification(const kDB::Repository::Connection &_connection)
Definition Patch.cpp:62
knowValues::Values::PointCloud toValuesPointCloud(const knowGIS::Pose &_pose, const knowGIS::GeometryObject &_geometry, const knowCore::Timestamp &_timestamp)
Definition Patch.cpp:311
QByteArray toPGWKB(PGWKBFlags _flags=PGWKBFlag::Default) const
Definition Patch.cpp:181
QByteArray data() const
Definition Patch.cpp:104
void reserve(std::size_t _pts)
Definition Patch.cpp:67
Patch transform(const Cartography::CoordinateSystem &_coordinateSystem, double _tx=0.0, double _ty=0.0, double _tz=0.0) const
Definition Patch.cpp:214
PointSpecification specification() const
Definition Patch.cpp:60
knowValues::Values::Lidar3DScan toValuesLidar3DScan(const knowGIS::Pose &_pose, const knowCore::Timestamp &_timestamp)
Definition Patch.cpp:320
Definition PointSpecification.h:13
Definition Point.h:14
Definition Connection.h:26
Definition Timestamp.h:39
Definition GeometryObject.h:24
Definition Pose.h:10