1.3.64
 
Loading...
Searching...
No Matches
GeometryHandler.h
Go to the documentation of this file.
1
16#ifndef VISUALIZER_GEOMETRY_HANDLER_H
17#define VISUALIZER_GEOMETRY_HANDLER_H
18
19#include <unordered_set>
20#include "global.h"
21
23private:
24 struct PrimitiveIndexMap;
25
26public:
28
32 enum VisualizerGeometryType { GEOMETRY_TYPE_RECTANGLE = 1, GEOMETRY_TYPE_TRIANGLE = 2, GEOMETRY_TYPE_POINT = 3, GEOMETRY_TYPE_LINE = 4 };
33
35 GeometryHandler() : random_generator(std::random_device{}()) {
36 for (const auto &geometry_type: all_geometry_types) {
37 face_index_data[geometry_type] = {};
38 vertex_data[geometry_type] = {};
39 normal_data[geometry_type] = {};
40 color_data[geometry_type] = {};
41 uv_data[geometry_type] = {};
42 texture_flag_data[geometry_type] = {};
43 texture_ID_data[geometry_type] = {};
44 coordinate_flag_data[geometry_type] = {};
45 visible_flag_data[geometry_type] = {};
46 context_geometry_flag_data[geometry_type] = {};
47 sky_geometry_flag_data[geometry_type] = {};
48 delete_flag_data[geometry_type] = {};
49 size_data[geometry_type] = {};
50 }
51 }
52
54
62 void allocateBufferSize(size_t primitive_count, VisualizerGeometryType geometry_type);
63
92 void addGeometry(size_t UUID, const VisualizerGeometryType &geometry_type, const std::vector<helios::vec3> &vertices, const helios::RGBAcolor &color, const std::vector<helios::vec2> &uvs, int textureID, bool override_texture_color,
93 bool has_glyph_texture, uint coordinate_system, bool visible_flag, bool iscontextgeometry, bool isskygeometry = false, float size = 0);
94
96 void markDirty(size_t UUID);
97
99 [[nodiscard]] const std::unordered_set<size_t> &getDirtyUUIDs() const;
100
102 void clearDirtyUUIDs();
103
104 [[nodiscard]] bool doesGeometryExist(size_t UUID) const;
105
106 [[nodiscard]] std::vector<size_t> getAllGeometryIDs() const;
107
108 [[nodiscard]] size_t getPrimitiveCount(bool include_deleted = true) const;
109
116 [[nodiscard]] size_t getRectangleCount(bool include_deleted = true) const;
117
124 [[nodiscard]] size_t getTriangleCount(bool include_deleted = true) const;
125
132 [[nodiscard]] size_t getPointCount(bool include_deleted = true) const;
133
140 [[nodiscard]] size_t getLineCount(bool include_deleted = true) const;
141
148 [[nodiscard]] const std::vector<int> *getFaceIndexData_ptr(VisualizerGeometryType geometry_type) const;
149
160 void setVertices(size_t UUID, const std::vector<helios::vec3> &vertices);
161
168 [[nodiscard]] std::vector<helios::vec3> getVertices(size_t UUID) const;
169
177 static char getVertexCount(const VisualizerGeometryType &geometry_type);
178
185 [[nodiscard]] const std::vector<float> *getVertexData_ptr(VisualizerGeometryType geometry_type) const;
186
193 [[nodiscard]] helios::vec3 getNormal(size_t UUID) const;
194
201 [[nodiscard]] const std::vector<float> *getNormalData_ptr(VisualizerGeometryType geometry_type) const;
202
209 void setColor(size_t UUID, const helios::RGBAcolor &color);
210
217 [[nodiscard]] helios::RGBAcolor getColor(size_t UUID) const;
218
225 [[nodiscard]] const std::vector<float> *getColorData_ptr(VisualizerGeometryType geometry_type) const;
226
235 void setUVs(size_t UUID, const std::vector<helios::vec2> &uvs);
236
243 [[nodiscard]] std::vector<helios::vec2> getUVs(size_t UUID) const;
244
251 [[nodiscard]] const std::vector<float> *getUVData_ptr(VisualizerGeometryType geometry_type) const;
252
259 void setTextureID(size_t UUID, int textureID);
260
267 [[nodiscard]] int getTextureID(size_t UUID) const;
268
275 [[nodiscard]] const std::vector<int> *getTextureIDData_ptr(VisualizerGeometryType geometry_type) const;
276
282 void overrideTextureColor(size_t UUID);
283
289 void useTextureColor(size_t UUID);
290
297 [[nodiscard]] const std::vector<int> *getTextureFlagData_ptr(VisualizerGeometryType geometry_type) const;
298
305 void setVisibility(size_t UUID, bool isvisible);
306
313 [[nodiscard]] bool isPrimitiveVisible(size_t UUID) const;
314
321 [[nodiscard]] const std::vector<char> *getVisibilityFlagData_ptr(VisualizerGeometryType geometry_type) const;
322
329 [[nodiscard]] const std::vector<int> *getCoordinateFlagData_ptr(VisualizerGeometryType geometry_type) const;
330
337 [[nodiscard]] bool isSkyGeometry(size_t UUID) const;
338
345 [[nodiscard]] const std::vector<char> *getSkyGeometryFlagData_ptr(VisualizerGeometryType geometry_type) const;
346
353 void setSize(size_t UUID, float size);
354
361 [[nodiscard]] float getSize(size_t UUID) const;
362
369 [[nodiscard]] const std::vector<float> *getSizeData_ptr(VisualizerGeometryType geometry_type) const;
370
371 [[nodiscard]] bool getDeleteFlag(size_t UUID) const;
372
378 void deleteGeometry(size_t UUID);
379
385 void deleteGeometry(const std::vector<size_t> &UUIDs);
386
393 void clearAllGeometry();
394
402
410 void getDomainBoundingBox(helios::vec2 &xbounds, helios::vec2 &ybounds, helios::vec2 &zbounds) const;
411
418 void getDomainBoundingSphere(helios::vec3 &center, helios::vec3 &radius) const;
419
425 size_t sampleUUID();
426
428 [[nodiscard]] const PrimitiveIndexMap &getIndexMap(size_t UUID) const;
429
430 constexpr static std::array<VisualizerGeometryType, 4> all_geometry_types = {GEOMETRY_TYPE_RECTANGLE, GEOMETRY_TYPE_TRIANGLE, GEOMETRY_TYPE_POINT, GEOMETRY_TYPE_LINE};
431
432private:
433 struct PrimitiveIndexMap {
434 VisualizerGeometryType geometry_type;
435 size_t face_index_index;
436 size_t vertex_index;
437 size_t normal_index;
438 size_t uv_index;
439 size_t color_index;
440 size_t texture_flag_index;
441 size_t texture_ID_index;
442 size_t coordinate_flag_index;
443 size_t visible_index;
444 size_t context_geometry_flag_index;
445 size_t sky_geometry_flag_index;
446 size_t delete_flag_index;
447 size_t size_index;
448 };
449
450 std::mt19937_64 random_generator;
451
452 std::unordered_map<size_t, PrimitiveIndexMap> UUID_map;
453
454 std::unordered_map<VisualizerGeometryType, std::vector<int>> face_index_data;
455 std::unordered_map<VisualizerGeometryType, std::vector<float>> vertex_data;
456 std::unordered_map<VisualizerGeometryType, std::vector<float>> normal_data;
457 std::unordered_map<VisualizerGeometryType, std::vector<float>> uv_data;
458 std::unordered_map<VisualizerGeometryType, std::vector<float>> color_data;
459 std::unordered_map<VisualizerGeometryType, std::vector<int>> texture_flag_data;
460 std::unordered_map<VisualizerGeometryType, std::vector<int>> texture_ID_data;
461 std::unordered_map<VisualizerGeometryType, std::vector<int>> coordinate_flag_data;
462 std::unordered_map<VisualizerGeometryType, std::vector<char>> visible_flag_data;
463 std::unordered_map<VisualizerGeometryType, std::vector<bool>> context_geometry_flag_data;
464 std::unordered_map<VisualizerGeometryType, std::vector<char>> sky_geometry_flag_data;
465 std::unordered_map<VisualizerGeometryType, std::vector<bool>> delete_flag_data;
466 std::unordered_map<VisualizerGeometryType, std::vector<float>> size_data;
467
468 std::unordered_set<size_t> dirty_UUIDs;
469
470 size_t deleted_primitive_count = 0;
471
479 void defragmentBuffers();
480
487 void registerUUID(size_t UUID, const VisualizerGeometryType &geometry_type);
488};
489
490#endif