Polyphase Game Engine
Loading...
Searching...
No Matches
PointCloud.h
Go to the documentation of this file.
1#pragma once
2
3#include "Datum.h"
4#include "Maths.h"
5
6#include <string>
7#include <unordered_map>
8#include <vector>
9
11{
12public:
13
15 {
17 std::vector<float> mFloats;
18 std::vector<int32_t> mInts;
19 std::vector<glm::vec3> mVectors;
20 std::vector<glm::vec4> mColors;
21 std::vector<std::string> mStrings;
22 };
23
24 PointCloud() = default;
25 ~PointCloud() = default;
26
27 uint32_t GetNumPoints() const;
28 void Resize(uint32_t count);
29 void AddPoint(const glm::vec3& pos);
30 void RemovePoint(uint32_t index);
31 void Clear();
32
33 // Position (always present)
34 const glm::vec3& GetPosition(uint32_t i) const;
35 void SetPosition(uint32_t i, const glm::vec3& p);
36 const std::vector<glm::vec3>& GetPositions() const;
37
38 // Generic attribute CRUD
39 void AddAttribute(const std::string& name, DatumType type);
40 bool HasAttribute(const std::string& name) const;
41 DatumType GetAttributeType(const std::string& name) const;
42 float GetAttributeFloat(uint32_t pointIndex, const std::string& name) const;
43 int32_t GetAttributeInt(uint32_t pointIndex, const std::string& name) const;
44 glm::vec3 GetAttributeVector(uint32_t pointIndex, const std::string& name) const;
45 glm::vec4 GetAttributeColor(uint32_t pointIndex, const std::string& name) const;
46 const std::string& GetAttributeString(uint32_t pointIndex, const std::string& name) const;
47 void SetAttributeFloat(uint32_t pointIndex, const std::string& name, float value);
48 void SetAttributeInt(uint32_t pointIndex, const std::string& name, int32_t value);
49 void SetAttributeVector(uint32_t pointIndex, const std::string& name, const glm::vec3& value);
50 void SetAttributeColor(uint32_t pointIndex, const std::string& name, const glm::vec4& value);
51 void SetAttributeString(uint32_t pointIndex, const std::string& name, const std::string& value);
52
53 // Well-known attribute shortcuts
54 float GetPScale(uint32_t i) const;
55 glm::vec4 GetCd(uint32_t i) const;
56 glm::vec3 GetNormal(uint32_t i) const;
57 glm::vec3 GetVelocity(uint32_t i) const;
58
59 // Merge another cloud (appends points + matching attributes)
60 void Merge(const PointCloud& other);
61
62 // Deep copy
63 PointCloud* Clone() const;
64
65 const std::unordered_map<std::string, AttribArray>& GetAttributes() const { return mAttributes; }
66
67private:
68
69 std::vector<glm::vec3> mPositions;
70 std::unordered_map<std::string, AttribArray> mAttributes;
71};
DatumType
Definition Datum.h:28
Definition PointCloud.h:11
PointCloud()=default
glm::vec4 GetCd(uint32_t i) const
Definition PointCloud.cpp:242
void AddPoint(const glm::vec3 &pos)
Definition PointCloud.cpp:30
void SetAttributeVector(uint32_t pointIndex, const std::string &name, const glm::vec3 &value)
Definition PointCloud.cpp:195
glm::vec4 GetAttributeColor(uint32_t pointIndex, const std::string &name) const
Definition PointCloud.cpp:153
DatumType GetAttributeType(const std::string &name) const
Definition PointCloud.cpp:121
const std::string & GetAttributeString(uint32_t pointIndex, const std::string &name) const
Definition PointCloud.cpp:161
void SetAttributeFloat(uint32_t pointIndex, const std::string &name, float value)
Definition PointCloud.cpp:169
void SetPosition(uint32_t i, const glm::vec3 &p)
Definition PointCloud.cpp:82
void Resize(uint32_t count)
Definition PointCloud.cpp:11
void Clear()
Definition PointCloud.cpp:71
void Merge(const PointCloud &other)
Definition PointCloud.cpp:263
uint32_t GetNumPoints() const
Definition PointCloud.cpp:6
glm::vec3 GetNormal(uint32_t i) const
Definition PointCloud.cpp:249
glm::vec3 GetVelocity(uint32_t i) const
Definition PointCloud.cpp:256
float GetAttributeFloat(uint32_t pointIndex, const std::string &name) const
Definition PointCloud.cpp:129
void AddAttribute(const std::string &name, DatumType type)
Definition PointCloud.cpp:92
void SetAttributeInt(uint32_t pointIndex, const std::string &name, int32_t value)
Definition PointCloud.cpp:182
void SetAttributeString(uint32_t pointIndex, const std::string &name, const std::string &value)
Definition PointCloud.cpp:221
const glm::vec3 & GetPosition(uint32_t i) const
Definition PointCloud.cpp:77
bool HasAttribute(const std::string &name) const
Definition PointCloud.cpp:116
glm::vec3 GetAttributeVector(uint32_t pointIndex, const std::string &name) const
Definition PointCloud.cpp:145
void SetAttributeColor(uint32_t pointIndex, const std::string &name, const glm::vec4 &value)
Definition PointCloud.cpp:208
float GetPScale(uint32_t i) const
Definition PointCloud.cpp:234
const std::vector< glm::vec3 > & GetPositions() const
Definition PointCloud.cpp:87
int32_t GetAttributeInt(uint32_t pointIndex, const std::string &name) const
Definition PointCloud.cpp:137
PointCloud * Clone() const
Definition PointCloud.cpp:355
const std::unordered_map< std::string, AttribArray > & GetAttributes() const
Definition PointCloud.h:65
~PointCloud()=default
void RemovePoint(uint32_t index)
Definition PointCloud.cpp:49
Definition PointCloud.h:15
std::vector< glm::vec3 > mVectors
Definition PointCloud.h:19
DatumType mType
Definition PointCloud.h:16
std::vector< glm::vec4 > mColors
Definition PointCloud.h:20
std::vector< std::string > mStrings
Definition PointCloud.h:21
std::vector< int32_t > mInts
Definition PointCloud.h:18
std::vector< float > mFloats
Definition PointCloud.h:17