1.3.49
 
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 delete_flag_data[geometry_type] = {};
48 size_data[geometry_type] = {};
49 }
50 }
51
53
61 void allocateBufferSize(size_t primitive_count, VisualizerGeometryType geometry_type);
62
90 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,
91 bool has_glyph_texture, uint coordinate_system, bool visible_flag, bool iscontextgeometry, int size = 0);
92
94 void markDirty(size_t UUID);
95
97 [[nodiscard]] const std::unordered_set<size_t> &getDirtyUUIDs() const;
98
100 void clearDirtyUUIDs();
101
102 [[nodiscard]] bool doesGeometryExist(size_t UUID) const;
103
104 [[nodiscard]] std::vector<size_t> getAllGeometryIDs() const;
105
106 [[nodiscard]] size_t getPrimitiveCount(bool include_deleted = true) const;
107
114 [[nodiscard]] size_t getRectangleCount(bool include_deleted = true) const;
115
122 [[nodiscard]] size_t getTriangleCount(bool include_deleted = true) const;
123
130 [[nodiscard]] size_t getPointCount(bool include_deleted = true) const;
131
138 [[nodiscard]] size_t getLineCount(bool include_deleted = true) const;
139
146 [[nodiscard]] const std::vector<int> *getFaceIndexData_ptr(VisualizerGeometryType geometry_type) const;
147
158 void setVertices(size_t UUID, const std::vector<helios::vec3> &vertices);
159
166 [[nodiscard]] std::vector<helios::vec3> getVertices(size_t UUID) const;
167
175 static char getVertexCount(const VisualizerGeometryType &geometry_type);
176
183 [[nodiscard]] const std::vector<float> *getVertexData_ptr(VisualizerGeometryType geometry_type) const;
184
191 [[nodiscard]] helios::vec3 getNormal(size_t UUID) const;
192
199 [[nodiscard]] const std::vector<float> *getNormalData_ptr(VisualizerGeometryType geometry_type) const;
200
207 void setColor(size_t UUID, const helios::RGBAcolor &color);
208
215 [[nodiscard]] helios::RGBAcolor getColor(size_t UUID) const;
216
223 [[nodiscard]] const std::vector<float> *getColorData_ptr(VisualizerGeometryType geometry_type) const;
224
233 void setUVs(size_t UUID, const std::vector<helios::vec2> &uvs);
234
241 [[nodiscard]] std::vector<helios::vec2> getUVs(size_t UUID) const;
242
249 [[nodiscard]] const std::vector<float> *getUVData_ptr(VisualizerGeometryType geometry_type) const;
250
257 void setTextureID(size_t UUID, int textureID);
258
265 [[nodiscard]] int getTextureID(size_t UUID) const;
266
273 [[nodiscard]] const std::vector<int> *getTextureIDData_ptr(VisualizerGeometryType geometry_type) const;
274
280 void overrideTextureColor(size_t UUID);
281
287 void useTextureColor(size_t UUID);
288
295 [[nodiscard]] const std::vector<int> *getTextureFlagData_ptr(VisualizerGeometryType geometry_type) const;
296
303 void setVisibility(size_t UUID, bool isvisible);
304
311 [[nodiscard]] bool isPrimitiveVisible(size_t UUID) const;
312
319 [[nodiscard]] const std::vector<char> *getVisibilityFlagData_ptr(VisualizerGeometryType geometry_type) const;
320
327 [[nodiscard]] const std::vector<int> *getCoordinateFlagData_ptr(VisualizerGeometryType geometry_type) const;
328
335 void setSize(size_t UUID, float size);
336
343 [[nodiscard]] float getSize(size_t UUID) const;
344
351 [[nodiscard]] const std::vector<float> *getSizeData_ptr(VisualizerGeometryType geometry_type) const;
352
353 [[nodiscard]] bool getDeleteFlag(size_t UUID) const;
354
360 void deleteGeometry(size_t UUID);
361
367 void deleteGeometry(const std::vector<size_t> &UUIDs);
368
375 void clearAllGeometry();
376
384
392 void getDomainBoundingBox(helios::vec2 &xbounds, helios::vec2 &ybounds, helios::vec2 &zbounds) const;
393
400 void getDomainBoundingSphere(helios::vec3 &center, helios::vec3 &radius) const;
401
407 size_t sampleUUID();
408
410 [[nodiscard]] const PrimitiveIndexMap &getIndexMap(size_t UUID) const;
411
412 constexpr static std::array<VisualizerGeometryType, 4> all_geometry_types = {GEOMETRY_TYPE_RECTANGLE, GEOMETRY_TYPE_TRIANGLE, GEOMETRY_TYPE_POINT, GEOMETRY_TYPE_LINE};
413
414private:
415 struct PrimitiveIndexMap {
416 VisualizerGeometryType geometry_type;
417 size_t face_index_index;
418 size_t vertex_index;
419 size_t normal_index;
420 size_t uv_index;
421 size_t color_index;
422 size_t texture_flag_index;
423 size_t texture_ID_index;
424 size_t coordinate_flag_index;
425 size_t visible_index;
426 size_t context_geometry_flag_index;
427 size_t delete_flag_index;
428 size_t size_index;
429 };
430
431 std::mt19937_64 random_generator;
432
433 std::unordered_map<size_t, PrimitiveIndexMap> UUID_map;
434
435 std::unordered_map<VisualizerGeometryType, std::vector<int>> face_index_data;
436 std::unordered_map<VisualizerGeometryType, std::vector<float>> vertex_data;
437 std::unordered_map<VisualizerGeometryType, std::vector<float>> normal_data;
438 std::unordered_map<VisualizerGeometryType, std::vector<float>> uv_data;
439 std::unordered_map<VisualizerGeometryType, std::vector<float>> color_data;
440 std::unordered_map<VisualizerGeometryType, std::vector<int>> texture_flag_data;
441 std::unordered_map<VisualizerGeometryType, std::vector<int>> texture_ID_data;
442 std::unordered_map<VisualizerGeometryType, std::vector<int>> coordinate_flag_data;
443 std::unordered_map<VisualizerGeometryType, std::vector<char>> visible_flag_data;
444 std::unordered_map<VisualizerGeometryType, std::vector<bool>> context_geometry_flag_data;
445 std::unordered_map<VisualizerGeometryType, std::vector<bool>> delete_flag_data;
446 std::unordered_map<VisualizerGeometryType, std::vector<float>> size_data;
447
448 std::unordered_set<size_t> dirty_UUIDs;
449
450 size_t deleted_primitive_count = 0;
451
459 void defragmentBuffers();
460
467 void registerUUID(size_t UUID, const VisualizerGeometryType &geometry_type);
468};
469
470#endif