OpenLexocad  28.0
LODGrid.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include <Geom/Pnt.h>
4 #include <Geom/Vec.h>
5 #ifndef Q_MOC_RUN
6 #include <mutex>
7 #endif
8 
9 namespace Base
10 {
11 class MColor;
12 }
13 
14 #undef min
15 #undef max
16 
17 namespace Geom
18 {
19 
20 struct LODPoint
21 {
22  LODPoint(const double lcoordinates[3])
23  {
24  coordinates[0] = lcoordinates[0];
25  coordinates[1] = lcoordinates[1];
26  coordinates[2] = lcoordinates[2];
27  }
28  float coordinates[3];
29 };
30 
31 
32 struct LX_GEOM_EXPORT LODNode
33 {
34 public:
35  std::string id = "";
36  int64_t level = 0;
37  int64_t x = 0;
38  int64_t y = 0;
39  int64_t z = 0;
40  int64_t size;
41  int64_t numPoints;
42  std::vector<LODPoint> points;
43  std::vector<uint32_t> colors;
44 
45  LODNode(std::string id, int numPoints);
46  LODNode(const LODNode& origin);
47  LODNode(const LODNode&& origin);
49 
50  void addPoint(const double coordinates[3], const uint32_t c);
51 
52 private:
53  std::mutex mutex;
54 };
55 
56 class LX_GEOM_EXPORT LODGrid
57 {
58 public:
59  LODGrid(uint64_t lgridsize, Geom::Vec lmin, Geom::Vec lmax);
60  LODGrid(const LODGrid& origin) = delete;
61  LODGrid(const LODGrid&& origin) = delete;
63 
64  uint64_t toIndex(const double coordinates[3]);
65  void addCoordinate_Pass1(const double coordinates[3]);
67  void addCoordinate_Pass2(const double coordinates[3], uint32_t color);
68  void addCoordinate_Pass2(const Geom::Pnt& p, const Base::MColor& color);
69  void shuffle();
70  void createLUT();
71 
76  uint64_t gridSize;
77  double dGridSize;
79  std::vector<int32_t> grid{0};
80  std::vector<int32_t> lut{0};
81  int64_t maxPointsPerChunk = 1'000'000;
82  std::vector<LODNode*> nodes;
83 };
84 } // namespace Geom
Geom::LODGrid::cubeSize
Geom::Vec cubeSize
Definition: LODGrid.h:78
Vec.h
Geom::LODGrid::max_bbox
Geom::Vec max_bbox
Definition: LODGrid.h:73
Geom::LODGrid::shuffle
void shuffle()
Geom::LODGrid::addCoordinate_Pass2
void addCoordinate_Pass2(const double coordinates[3], uint32_t color)
Base::MColor
Definition: Color.h:15
Geom::LODNode::points
std::vector< LODPoint > points
Definition: LODGrid.h:42
Geom::LODGrid::addCoordinate_Pass1
void addCoordinate_Pass1(const Geom::Pnt &p)
Geom::Vec
Defines a non-persistent vector in 3D space.
Definition: Vec.h:41
Geom::LODGrid::LODGrid
LODGrid(const LODGrid &origin)=delete
Geom::LODGrid::~LODGrid
~LODGrid()
Geom::LODGrid::cube_max
Geom::Vec cube_max
Definition: LODGrid.h:75
Geom::LODGrid::toIndex
uint64_t toIndex(const double coordinates[3])
Geom::LODNode::~LODNode
~LODNode()
Geom::LODGrid::addCoordinate_Pass2
void addCoordinate_Pass2(const Geom::Pnt &p, const Base::MColor &color)
Geom::LODNode::LODNode
LODNode(const LODNode &&origin)
Geom::LODPoint
Definition: LODGrid.h:21
Geom::LODNode::numPoints
int64_t numPoints
Definition: LODGrid.h:41
Geom::LODNode::addPoint
void addPoint(const double coordinates[3], const uint32_t c)
Geom::LODGrid::LODGrid
LODGrid(const LODGrid &&origin)=delete
Geom::Pnt
Defines a non-persistent 3D Cartesian point.
Definition: Pnt.h:44
Geom::LODNode::size
int64_t size
Definition: LODGrid.h:40
Geom::LODGrid::dGridSize
double dGridSize
Definition: LODGrid.h:77
Pnt.h
Geom::LODGrid::cube_min
Geom::Vec cube_min
Definition: LODGrid.h:74
Geom::LODNode::LODNode
LODNode(const LODNode &origin)
Geom::LODNode::colors
std::vector< uint32_t > colors
Definition: LODGrid.h:43
Geom::LODPoint::coordinates
float coordinates[3]
Definition: LODGrid.h:28
Geom::LODNode::LODNode
LODNode(std::string id, int numPoints)
Geom::LODGrid::createLUT
void createLUT()
Geom::LODNode
Definition: LODGrid.h:33
Geom::LODGrid::nodes
std::vector< LODNode * > nodes
Definition: LODGrid.h:82
Geom::LODGrid
Definition: LODGrid.h:57
Geom::LODGrid::addCoordinate_Pass1
void addCoordinate_Pass1(const double coordinates[3])
Geom::LODPoint::LODPoint
LODPoint(const double lcoordinates[3])
Definition: LODGrid.h:22
Geom::LODGrid::min_bbox
Geom::Vec min_bbox
Definition: LODGrid.h:72
Base
Definition: AbstractXMLReader.h:5
Geom
Definition: PropertyContainer.h:33
Geom::LODGrid::gridSize
uint64_t gridSize
Definition: LODGrid.h:76
Geom::LODGrid::LODGrid
LODGrid(uint64_t lgridsize, Geom::Vec lmin, Geom::Vec lmax)