GameApi 28
Library used by GameApi Builder tool
Loading...
Searching...
No Matches
geometry_metadata.h
Go to the documentation of this file.
1// Copyright 2017 The Draco Authors.
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7// http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14//
15#ifndef DRACO_METADATA_GEOMETRY_METADATA_H_
16#define DRACO_METADATA_GEOMETRY_METADATA_H_
17
19
20namespace draco {
21
22// Class for representing specifically metadata of attributes. It must have an
23// attribute id which should be identical to it's counterpart attribute in
24// the point cloud it belongs to.
26 public:
27 AttributeMetadata() : att_unique_id_(0) {}
28 AttributeMetadata(const AttributeMetadata &metadata);
29 explicit AttributeMetadata(const Metadata &metadata)
30 : Metadata(metadata), att_unique_id_(0) {}
31
33 att_unique_id_ = att_unique_id;
34 }
35 // The unique id of the attribute that this metadata belongs to.
36 uint32_t att_unique_id() const { return att_unique_id_; }
37
38 private:
39 uint32_t att_unique_id_;
40
42 friend class PointCloud;
43};
44
45// Functor for computing a hash from data stored in a AttributeMetadata class.
47 size_t operator()(const AttributeMetadata &metadata) const {
48 size_t hash = metadata.att_unique_id_;
49 MetadataHasher metadata_hasher;
50 hash = HashCombine(metadata_hasher(static_cast<const Metadata &>(metadata)),
51 hash);
52 return hash;
53 }
54};
55
56// Class for representing the metadata for a point cloud. It could have a list
57// of attribute metadata.
58class GeometryMetadata : public Metadata {
59 public:
61 GeometryMetadata(const GeometryMetadata &metadata);
62 explicit GeometryMetadata(const Metadata &metadata) : Metadata(metadata) {}
63
65 const std::string &entry_name, const std::string &entry_value) const;
66 bool AddAttributeMetadata(std::unique_ptr<AttributeMetadata> att_metadata);
67
68 void DeleteAttributeMetadataByUniqueId(int32_t att_unique_id) {
69 if (att_unique_id < 0) {
70 return;
71 }
72 for (auto itr = att_metadatas_.begin(); itr != att_metadatas_.end();
73 ++itr) {
74 if (itr->get()->att_unique_id() == static_cast<uint32_t>(att_unique_id)) {
75 att_metadatas_.erase(itr);
76 return;
77 }
78 }
79 }
80
82 int32_t att_unique_id) const {
83 if (att_unique_id < 0) {
84 return nullptr;
85 }
86
87 // TODO(draco-eng): Consider using unordered_map instead of vector to store
88 // attribute metadata.
89 for (auto &&att_metadata : att_metadatas_) {
90 if (att_metadata->att_unique_id() ==
91 static_cast<uint32_t>(att_unique_id)) {
92 return att_metadata.get();
93 }
94 }
95 return nullptr;
96 }
97
98 AttributeMetadata *attribute_metadata(int32_t att_unique_id) {
99 if (att_unique_id < 0) {
100 return nullptr;
101 }
102
103 // TODO(draco-eng): Consider use unordered_map instead of vector to store
104 // attribute metadata.
105 for (auto &&att_metadata : att_metadatas_) {
106 if (att_metadata->att_unique_id() ==
107 static_cast<uint32_t>(att_unique_id)) {
108 return att_metadata.get();
109 }
110 }
111 return nullptr;
112 }
113
114 const std::vector<std::unique_ptr<AttributeMetadata>> &attribute_metadatas()
115 const {
116 return att_metadatas_;
117 }
118
119 private:
120 std::vector<std::unique_ptr<AttributeMetadata>> att_metadatas_;
121
123};
124
125// Functor for computing a hash from data stored in a GeometryMetadata class.
127 size_t operator()(const GeometryMetadata &metadata) const {
128 size_t hash = metadata.att_metadatas_.size();
129 AttributeMetadataHasher att_metadata_hasher;
130 for (auto &&att_metadata : metadata.att_metadatas_) {
131 hash = HashCombine(att_metadata_hasher(*att_metadata), hash);
132 }
133 MetadataHasher metadata_hasher;
134 hash = HashCombine(metadata_hasher(static_cast<const Metadata &>(metadata)),
135 hash);
136 return hash;
137 }
138};
139
140} // namespace draco
141
142#endif // THIRD_PARTY_DRACO_METADATA_GEOMETRY_METADATA_H_
Definition geometry_metadata.h:25
void set_att_unique_id(uint32_t att_unique_id)
Definition geometry_metadata.h:32
friend struct AttributeMetadataHasher
Definition geometry_metadata.h:41
uint32_t att_unique_id() const
Definition geometry_metadata.h:36
friend class PointCloud
Definition geometry_metadata.h:42
AttributeMetadata()
Definition geometry_metadata.h:27
AttributeMetadata(const Metadata &metadata)
Definition geometry_metadata.h:29
Definition geometry_metadata.h:58
void DeleteAttributeMetadataByUniqueId(int32_t att_unique_id)
Definition geometry_metadata.h:68
const AttributeMetadata * GetAttributeMetadataByUniqueId(int32_t att_unique_id) const
Definition geometry_metadata.h:81
GeometryMetadata()
Definition geometry_metadata.h:60
GeometryMetadata(const Metadata &metadata)
Definition geometry_metadata.h:62
const std::vector< std::unique_ptr< AttributeMetadata > > & attribute_metadatas() const
Definition geometry_metadata.h:114
const AttributeMetadata * GetAttributeMetadataByStringEntry(const std::string &entry_name, const std::string &entry_value) const
Definition geometry_metadata.cc:34
bool AddAttributeMetadata(std::unique_ptr< AttributeMetadata > att_metadata)
Definition geometry_metadata.cc:49
friend struct GeometryMetadataHasher
Definition geometry_metadata.h:122
AttributeMetadata * attribute_metadata(int32_t att_unique_id)
Definition geometry_metadata.h:98
Definition metadata.h:96
Metadata()
Definition metadata.h:98
Definition attribute_octahedron_transform.cc:21
size_t HashCombine(T1 a, T2 b)
Definition hash_utils.h:26
Definition geometry_metadata.h:46
size_t operator()(const AttributeMetadata &metadata) const
Definition geometry_metadata.h:47
Definition geometry_metadata.h:126
size_t operator()(const GeometryMetadata &metadata) const
Definition geometry_metadata.h:127
Definition metadata.h:189