dracox 0.0.1__cp39-cp39-win_amd64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (214) hide show
  1. bin/draco_decoder.exe +0 -0
  2. bin/draco_encoder.exe +0 -0
  3. dracox/__init__.py +252 -0
  4. dracox/dracox_ext.cp39-win_amd64.pyd +0 -0
  5. dracox-0.0.1.dist-info/METADATA +14 -0
  6. dracox-0.0.1.dist-info/RECORD +214 -0
  7. dracox-0.0.1.dist-info/WHEEL +5 -0
  8. include/draco/animation/keyframe_animation.h +107 -0
  9. include/draco/animation/keyframe_animation_decoder.h +34 -0
  10. include/draco/animation/keyframe_animation_encoder.h +39 -0
  11. include/draco/attributes/attribute_octahedron_transform.h +81 -0
  12. include/draco/attributes/attribute_quantization_transform.h +102 -0
  13. include/draco/attributes/attribute_transform.h +76 -0
  14. include/draco/attributes/attribute_transform_data.h +71 -0
  15. include/draco/attributes/attribute_transform_type.h +30 -0
  16. include/draco/attributes/geometry_attribute.h +541 -0
  17. include/draco/attributes/geometry_indices.h +54 -0
  18. include/draco/attributes/point_attribute.h +196 -0
  19. include/draco/compression/attributes/attributes_decoder.h +97 -0
  20. include/draco/compression/attributes/attributes_decoder_interface.h +62 -0
  21. include/draco/compression/attributes/attributes_encoder.h +154 -0
  22. include/draco/compression/attributes/kd_tree_attributes_decoder.h +50 -0
  23. include/draco/compression/attributes/kd_tree_attributes_encoder.h +51 -0
  24. include/draco/compression/attributes/kd_tree_attributes_shared.h +28 -0
  25. include/draco/compression/attributes/linear_sequencer.h +51 -0
  26. include/draco/compression/attributes/mesh_attribute_indices_encoding_data.h +58 -0
  27. include/draco/compression/attributes/normal_compression_utils.h +372 -0
  28. include/draco/compression/attributes/point_d_vector.h +288 -0
  29. include/draco/compression/attributes/points_sequencer.h +63 -0
  30. include/draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_constrained_multi_parallelogram_decoder.h +236 -0
  31. include/draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_constrained_multi_parallelogram_encoder.h +413 -0
  32. include/draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_constrained_multi_parallelogram_shared.h +34 -0
  33. include/draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_data.h +72 -0
  34. include/draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_decoder.h +46 -0
  35. include/draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_encoder.h +46 -0
  36. include/draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_geometric_normal_decoder.h +176 -0
  37. include/draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_geometric_normal_encoder.h +180 -0
  38. include/draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_geometric_normal_predictor_area.h +117 -0
  39. include/draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_geometric_normal_predictor_base.h +96 -0
  40. include/draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_multi_parallelogram_decoder.h +128 -0
  41. include/draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_multi_parallelogram_encoder.h +133 -0
  42. include/draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_parallelogram_encoder.h +111 -0
  43. include/draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_parallelogram_shared.h +78 -0
  44. include/draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_tex_coords_decoder.h +372 -0
  45. include/draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_tex_coords_encoder.h +318 -0
  46. include/draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_tex_coords_portable_decoder.h +143 -0
  47. include/draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_tex_coords_portable_encoder.h +136 -0
  48. include/draco/compression/attributes/prediction_schemes/mesh_prediction_scheme_tex_coords_portable_predictor.h +282 -0
  49. include/draco/compression/attributes/prediction_schemes/prediction_scheme_decoder.h +90 -0
  50. include/draco/compression/attributes/prediction_schemes/prediction_scheme_decoder_factory.h +194 -0
  51. include/draco/compression/attributes/prediction_schemes/prediction_scheme_decoder_interface.h +53 -0
  52. include/draco/compression/attributes/prediction_schemes/prediction_scheme_decoding_transform.h +65 -0
  53. include/draco/compression/attributes/prediction_schemes/prediction_scheme_delta_decoder.h +65 -0
  54. include/draco/compression/attributes/prediction_schemes/prediction_scheme_delta_encoder.h +69 -0
  55. include/draco/compression/attributes/prediction_schemes/prediction_scheme_encoder.h +90 -0
  56. include/draco/compression/attributes/prediction_schemes/prediction_scheme_encoder_factory.h +134 -0
  57. include/draco/compression/attributes/prediction_schemes/prediction_scheme_encoder_interface.h +55 -0
  58. include/draco/compression/attributes/prediction_schemes/prediction_scheme_encoding_transform.h +77 -0
  59. include/draco/compression/attributes/prediction_schemes/prediction_scheme_factory.h +85 -0
  60. include/draco/compression/attributes/prediction_schemes/prediction_scheme_interface.h +60 -0
  61. include/draco/compression/attributes/prediction_schemes/prediction_scheme_normal_octahedron_canonicalized_decoding_transform.h +118 -0
  62. include/draco/compression/attributes/prediction_schemes/prediction_scheme_normal_octahedron_canonicalized_encoding_transform.h +116 -0
  63. include/draco/compression/attributes/prediction_schemes/prediction_scheme_normal_octahedron_canonicalized_transform_base.h +102 -0
  64. include/draco/compression/attributes/prediction_schemes/prediction_scheme_normal_octahedron_decoding_transform.h +115 -0
  65. include/draco/compression/attributes/prediction_schemes/prediction_scheme_normal_octahedron_encoding_transform.h +105 -0
  66. include/draco/compression/attributes/prediction_schemes/prediction_scheme_normal_octahedron_transform_base.h +90 -0
  67. include/draco/compression/attributes/prediction_schemes/prediction_scheme_wrap_decoding_transform.h +88 -0
  68. include/draco/compression/attributes/prediction_schemes/prediction_scheme_wrap_encoding_transform.h +81 -0
  69. include/draco/compression/attributes/prediction_schemes/prediction_scheme_wrap_transform_base.h +120 -0
  70. include/draco/compression/attributes/sequential_attribute_decoder.h +86 -0
  71. include/draco/compression/attributes/sequential_attribute_decoders_controller.h +61 -0
  72. include/draco/compression/attributes/sequential_attribute_encoder.h +134 -0
  73. include/draco/compression/attributes/sequential_attribute_encoders_controller.h +115 -0
  74. include/draco/compression/attributes/sequential_integer_attribute_decoder.h +76 -0
  75. include/draco/compression/attributes/sequential_integer_attribute_encoder.h +67 -0
  76. include/draco/compression/attributes/sequential_normal_attribute_decoder.h +83 -0
  77. include/draco/compression/attributes/sequential_normal_attribute_encoder.h +82 -0
  78. include/draco/compression/attributes/sequential_quantization_attribute_decoder.h +52 -0
  79. include/draco/compression/attributes/sequential_quantization_attribute_encoder.h +52 -0
  80. include/draco/compression/bit_coders/adaptive_rans_bit_coding_shared.h +43 -0
  81. include/draco/compression/bit_coders/adaptive_rans_bit_decoder.h +54 -0
  82. include/draco/compression/bit_coders/adaptive_rans_bit_encoder.h +61 -0
  83. include/draco/compression/bit_coders/direct_bit_decoder.h +89 -0
  84. include/draco/compression/bit_coders/direct_bit_encoder.h +89 -0
  85. include/draco/compression/bit_coders/folded_integer_bit_decoder.h +77 -0
  86. include/draco/compression/bit_coders/folded_integer_bit_encoder.h +82 -0
  87. include/draco/compression/bit_coders/rans_bit_decoder.h +55 -0
  88. include/draco/compression/bit_coders/rans_bit_encoder.h +57 -0
  89. include/draco/compression/bit_coders/symbol_bit_decoder.h +36 -0
  90. include/draco/compression/bit_coders/symbol_bit_encoder.h +36 -0
  91. include/draco/compression/config/compression_shared.h +155 -0
  92. include/draco/compression/config/decoder_options.h +34 -0
  93. include/draco/compression/config/draco_options.h +249 -0
  94. include/draco/compression/config/encoder_options.h +101 -0
  95. include/draco/compression/config/encoding_features.h +39 -0
  96. include/draco/compression/decode.h +80 -0
  97. include/draco/compression/draco_compression_options.h +141 -0
  98. include/draco/compression/encode.h +139 -0
  99. include/draco/compression/encode_base.h +131 -0
  100. include/draco/compression/entropy/ans.h +526 -0
  101. include/draco/compression/entropy/rans_symbol_coding.h +53 -0
  102. include/draco/compression/entropy/rans_symbol_decoder.h +171 -0
  103. include/draco/compression/entropy/rans_symbol_encoder.h +290 -0
  104. include/draco/compression/entropy/shannon_entropy.h +110 -0
  105. include/draco/compression/entropy/symbol_decoding.h +29 -0
  106. include/draco/compression/entropy/symbol_encoding.h +47 -0
  107. include/draco/compression/expert_encode.h +160 -0
  108. include/draco/compression/mesh/mesh_decoder.h +68 -0
  109. include/draco/compression/mesh/mesh_edgebreaker_decoder.h +54 -0
  110. include/draco/compression/mesh/mesh_edgebreaker_decoder_impl.h +228 -0
  111. include/draco/compression/mesh/mesh_edgebreaker_decoder_impl_interface.h +47 -0
  112. include/draco/compression/mesh/mesh_edgebreaker_encoder.h +73 -0
  113. include/draco/compression/mesh/mesh_edgebreaker_encoder_impl.h +209 -0
  114. include/draco/compression/mesh/mesh_edgebreaker_encoder_impl_interface.h +57 -0
  115. include/draco/compression/mesh/mesh_edgebreaker_shared.h +129 -0
  116. include/draco/compression/mesh/mesh_edgebreaker_traversal_decoder.h +201 -0
  117. include/draco/compression/mesh/mesh_edgebreaker_traversal_encoder.h +139 -0
  118. include/draco/compression/mesh/mesh_edgebreaker_traversal_predictive_decoder.h +134 -0
  119. include/draco/compression/mesh/mesh_edgebreaker_traversal_predictive_encoder.h +172 -0
  120. include/draco/compression/mesh/mesh_edgebreaker_traversal_valence_decoder.h +219 -0
  121. include/draco/compression/mesh/mesh_edgebreaker_traversal_valence_encoder.h +226 -0
  122. include/draco/compression/mesh/mesh_encoder.h +84 -0
  123. include/draco/compression/mesh/mesh_sequential_decoder.h +39 -0
  124. include/draco/compression/mesh/mesh_sequential_encoder.h +56 -0
  125. include/draco/compression/mesh/traverser/depth_first_traverser.h +172 -0
  126. include/draco/compression/mesh/traverser/max_prediction_degree_traverser.h +226 -0
  127. include/draco/compression/mesh/traverser/mesh_attribute_indices_encoding_observer.h +76 -0
  128. include/draco/compression/mesh/traverser/mesh_traversal_sequencer.h +113 -0
  129. include/draco/compression/mesh/traverser/traverser_base.h +87 -0
  130. include/draco/compression/point_cloud/algorithms/dynamic_integer_points_kd_tree_decoder.h +369 -0
  131. include/draco/compression/point_cloud/algorithms/dynamic_integer_points_kd_tree_encoder.h +372 -0
  132. include/draco/compression/point_cloud/algorithms/float_points_tree_decoder.h +141 -0
  133. include/draco/compression/point_cloud/algorithms/float_points_tree_encoder.h +126 -0
  134. include/draco/compression/point_cloud/algorithms/point_cloud_compression_method.h +34 -0
  135. include/draco/compression/point_cloud/algorithms/point_cloud_types.h +76 -0
  136. include/draco/compression/point_cloud/algorithms/quantize_points_3.h +84 -0
  137. include/draco/compression/point_cloud/algorithms/queuing_policy.h +75 -0
  138. include/draco/compression/point_cloud/point_cloud_decoder.h +118 -0
  139. include/draco/compression/point_cloud/point_cloud_encoder.h +158 -0
  140. include/draco/compression/point_cloud/point_cloud_kd_tree_decoder.h +31 -0
  141. include/draco/compression/point_cloud/point_cloud_kd_tree_encoder.h +45 -0
  142. include/draco/compression/point_cloud/point_cloud_sequential_decoder.h +33 -0
  143. include/draco/compression/point_cloud/point_cloud_sequential_encoder.h +43 -0
  144. include/draco/core/bit_utils.h +127 -0
  145. include/draco/core/bounding_box.h +77 -0
  146. include/draco/core/constants.h +6 -0
  147. include/draco/core/cycle_timer.h +51 -0
  148. include/draco/core/data_buffer.h +82 -0
  149. include/draco/core/decoder_buffer.h +216 -0
  150. include/draco/core/divide.h +42 -0
  151. include/draco/core/draco_index_type.h +184 -0
  152. include/draco/core/draco_index_type_vector.h +90 -0
  153. include/draco/core/draco_types.h +52 -0
  154. include/draco/core/draco_version.h +25 -0
  155. include/draco/core/encoder_buffer.h +152 -0
  156. include/draco/core/hash_utils.h +64 -0
  157. include/draco/core/macros.h +124 -0
  158. include/draco/core/math_utils.h +79 -0
  159. include/draco/core/options.h +151 -0
  160. include/draco/core/quantization_utils.h +82 -0
  161. include/draco/core/status.h +83 -0
  162. include/draco/core/status_or.h +81 -0
  163. include/draco/core/varint_decoding.h +81 -0
  164. include/draco/core/varint_encoding.h +61 -0
  165. include/draco/core/vector_d.h +355 -0
  166. include/draco/draco_features.h +25 -0
  167. include/draco/io/file_reader_factory.h +34 -0
  168. include/draco/io/file_reader_interface.h +32 -0
  169. include/draco/io/file_utils.h +86 -0
  170. include/draco/io/file_writer_factory.h +34 -0
  171. include/draco/io/file_writer_interface.h +26 -0
  172. include/draco/io/file_writer_utils.h +38 -0
  173. include/draco/io/mesh_io.h +107 -0
  174. include/draco/io/obj_decoder.h +147 -0
  175. include/draco/io/obj_encoder.h +107 -0
  176. include/draco/io/parser_utils.h +66 -0
  177. include/draco/io/ply_decoder.h +69 -0
  178. include/draco/io/ply_encoder.h +54 -0
  179. include/draco/io/ply_property_reader.h +96 -0
  180. include/draco/io/ply_property_writer.h +94 -0
  181. include/draco/io/ply_reader.h +155 -0
  182. include/draco/io/point_cloud_io.h +89 -0
  183. include/draco/io/stdio_file_reader.h +48 -0
  184. include/draco/io/stdio_file_writer.h +42 -0
  185. include/draco/io/stl_decoder.h +38 -0
  186. include/draco/io/stl_encoder.h +52 -0
  187. include/draco/mesh/corner_table.h +397 -0
  188. include/draco/mesh/corner_table_iterators.h +309 -0
  189. include/draco/mesh/mesh.h +378 -0
  190. include/draco/mesh/mesh_are_equivalent.h +71 -0
  191. include/draco/mesh/mesh_attribute_corner_table.h +202 -0
  192. include/draco/mesh/mesh_cleanup.h +61 -0
  193. include/draco/mesh/mesh_features.h +93 -0
  194. include/draco/mesh/mesh_indices.h +37 -0
  195. include/draco/mesh/mesh_misc_functions.h +105 -0
  196. include/draco/mesh/mesh_stripifier.h +258 -0
  197. include/draco/mesh/triangle_soup_mesh_builder.h +134 -0
  198. include/draco/mesh/valence_cache.h +142 -0
  199. include/draco/metadata/geometry_metadata.h +142 -0
  200. include/draco/metadata/metadata.h +209 -0
  201. include/draco/metadata/metadata_decoder.h +42 -0
  202. include/draco/metadata/metadata_encoder.h +41 -0
  203. include/draco/metadata/property_attribute.h +107 -0
  204. include/draco/metadata/property_table.h +222 -0
  205. include/draco/metadata/structural_metadata.h +78 -0
  206. include/draco/metadata/structural_metadata_schema.h +118 -0
  207. include/draco/point_cloud/point_cloud.h +289 -0
  208. include/draco/point_cloud/point_cloud_builder.h +101 -0
  209. lib/draco.lib +0 -0
  210. lib/pkgconfig/draco.pc +6 -0
  211. share/cmake/draco/draco-config-version.cmake +43 -0
  212. share/cmake/draco/draco-config.cmake +27 -0
  213. share/cmake/draco/draco-targets-release.cmake +19 -0
  214. share/cmake/draco/draco-targets.cmake +107 -0
@@ -0,0 +1,222 @@
1
+ // Copyright 2022 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_PROPERTY_TABLE_H_
16
+ #define DRACO_METADATA_PROPERTY_TABLE_H_
17
+
18
+ #include "draco/draco_features.h"
19
+
20
+ #ifdef DRACO_TRANSCODER_SUPPORTED
21
+
22
+ #include <cstdint>
23
+ #include <cstring>
24
+ #include <limits>
25
+ #include <memory>
26
+ #include <string>
27
+ #include <vector>
28
+
29
+ #include "draco/core/status_or.h"
30
+
31
+ namespace draco {
32
+
33
+ // Describes a property table (properties are table columns) as defined in the
34
+ // EXT_structural_metadata glTF extension.
35
+ class PropertyTable {
36
+ public:
37
+ // Describes a property (column) of a property table.
38
+ class Property {
39
+ public:
40
+ // Describes glTF buffer view data.
41
+ struct Data {
42
+ // Methods for comparing two data objects.
43
+ bool operator==(const Data &other) const;
44
+ bool operator!=(const Data &other) const { return !(*this == other); }
45
+
46
+ // Buffer view data.
47
+ std::vector<uint8_t> data;
48
+
49
+ // Data target corresponds to the target property of the glTF bufferView
50
+ // object and classifies the type or nature of the data.
51
+ int target = 0;
52
+ };
53
+
54
+ // Describes offsets of the entries in property data when the data
55
+ // represents an array of strings or an array of variable-length number
56
+ // arrays.
57
+ struct Offsets {
58
+ // Methods for comparing two offsets.
59
+ bool operator==(const Offsets &other) const;
60
+ bool operator!=(const Offsets &other) const { return !(*this == other); }
61
+
62
+ // Data containing the offset entries.
63
+ Data data;
64
+
65
+ // Data type of the offset entries.
66
+ std::string type;
67
+
68
+ // Builds a new Offsets object given the offsets in |ints|. The resultant
69
+ // offsets will choose the smallest possible result.type that can contain
70
+ // all of the input |ints|.
71
+ static Offsets MakeFromInts(const std::vector<uint64_t> &ints) {
72
+ uint64_t max_value = 0;
73
+ for (uint64_t i = 0; i < ints.size(); ++i) {
74
+ if (ints[i] > max_value) {
75
+ max_value = ints[i];
76
+ }
77
+ }
78
+
79
+ Offsets result;
80
+ int bytes_per_int = 0;
81
+ if (max_value <= std::numeric_limits<uint8_t>::max()) {
82
+ result.type = "UINT8";
83
+ bytes_per_int = 1;
84
+ } else if (max_value <= std::numeric_limits<uint16_t>::max()) {
85
+ result.type = "UINT16";
86
+ bytes_per_int = 2;
87
+ } else if (max_value <= std::numeric_limits<uint32_t>::max()) {
88
+ result.type = "UINT32";
89
+ bytes_per_int = 4;
90
+ } else {
91
+ result.type = "UINT64";
92
+ bytes_per_int = 8;
93
+ }
94
+
95
+ result.data.data.resize(ints.size() * bytes_per_int);
96
+ for (uint64_t i = 0; i < ints.size(); ++i) {
97
+ // This assumes execution on a little endian platform.
98
+ memcpy(&result.data.data[i * bytes_per_int], &ints[i], bytes_per_int);
99
+ }
100
+
101
+ return result;
102
+ }
103
+
104
+ // Decodes the binary data in Offsets::data into offset integers as
105
+ // defined by the EXT_structural_metadata extension. Returns an error if
106
+ // Offsets::type is not one of the types allowed by the spec.
107
+ StatusOr<std::vector<uint64_t>> ParseToInts() const {
108
+ if (data.data.empty()) {
109
+ return std::vector<uint64_t>();
110
+ }
111
+
112
+ int bytes_per_int = 0;
113
+ if (type == "UINT8") {
114
+ bytes_per_int = 1;
115
+ } else if (type == "UINT16") {
116
+ bytes_per_int = 2;
117
+ } else if (type == "UINT32") {
118
+ bytes_per_int = 4;
119
+ } else if (type == "UINT64") {
120
+ bytes_per_int = 8;
121
+ } else {
122
+ return Status(Status::DRACO_ERROR, "Offsets data type invalid");
123
+ }
124
+
125
+ const int count = data.data.size() / bytes_per_int;
126
+ std::vector<uint64_t> result(count);
127
+ for (int i = 0; i < count; ++i) {
128
+ // This assumes execution on a little endian platform.
129
+ memcpy(&result[i], &data.data[i * bytes_per_int], bytes_per_int);
130
+ }
131
+ return result;
132
+ }
133
+ };
134
+
135
+ // Creates an empty property.
136
+ Property() = default;
137
+
138
+ // Methods for comparing two properties.
139
+ bool operator==(const Property &other) const;
140
+ bool operator!=(const Property &other) const { return !(*this == other); }
141
+
142
+ // Copies all data from |src| property.
143
+ void Copy(const Property &src);
144
+
145
+ // Name of this property.
146
+ void SetName(const std::string &name);
147
+ const std::string &GetName() const;
148
+
149
+ // Property data stores one table column worth of data. For example, when
150
+ // the data of type UINT8 is [11, 22] then the property values are 11 and 22
151
+ // for the first and second table rows. See EXT_structural_metadata glTF
152
+ // extension documentation for more details.
153
+ Data &GetData();
154
+ const Data &GetData() const;
155
+
156
+ // Array offsets are used when property data contains a variable-length
157
+ // number arrays. For example, when the data is [0, 1, 2, 3, 4] and the
158
+ // array offsets are [0, 2, 5] for a two-row table, then the property value
159
+ // arrays are [0, 1] and [2, 3, 4] for the first and second table rows,
160
+ // respectively. See EXT_structural_metadata glTF extension documentation
161
+ // for more details.
162
+ const Offsets &GetArrayOffsets() const;
163
+ Offsets &GetArrayOffsets();
164
+
165
+ // String offsets are used when property data contains strings. For example,
166
+ // when the data is "SeaLand" and the array offsets are [0, 3, 7] for a
167
+ // two-row table, then the property strings are "Sea" and "Land" for the
168
+ // first and second table rows, respectively. See EXT_structural_metadata
169
+ // glTF extension documentation for more details.
170
+ const Offsets &GetStringOffsets() const;
171
+ Offsets &GetStringOffsets();
172
+
173
+ private:
174
+ std::string name_;
175
+ Data data_;
176
+ Offsets array_offsets_;
177
+ Offsets string_offsets_;
178
+ // TODO(vytyaz): Support property value modifiers min, max, offset, scale.
179
+ };
180
+
181
+ // Creates an empty property table.
182
+ PropertyTable();
183
+
184
+ // Methods for comparing two property tables.
185
+ bool operator==(const PropertyTable &other) const;
186
+ bool operator!=(const PropertyTable &other) const {
187
+ return !(*this == other);
188
+ }
189
+
190
+ // Copies all data from |src| property table.
191
+ void Copy(const PropertyTable &src);
192
+
193
+ // Name of this property table.
194
+ void SetName(const std::string &value);
195
+ const std::string &GetName() const;
196
+
197
+ // Class of this property table.
198
+ void SetClass(const std::string &value);
199
+ const std::string &GetClass() const;
200
+
201
+ // Number of rows in this property table.
202
+ void SetCount(int count);
203
+ int GetCount() const;
204
+
205
+ // Table properties (columns).
206
+ int AddProperty(std::unique_ptr<Property> property);
207
+ int NumProperties() const;
208
+ const Property &GetProperty(int index) const;
209
+ Property &GetProperty(int index);
210
+ void RemoveProperty(int index);
211
+
212
+ private:
213
+ std::string name_;
214
+ std::string class_;
215
+ int count_;
216
+ std::vector<std::unique_ptr<Property>> properties_;
217
+ };
218
+
219
+ } // namespace draco
220
+
221
+ #endif // DRACO_TRANSCODER_SUPPORTED
222
+ #endif // DRACO_METADATA_PROPERTY_TABLE_H_
@@ -0,0 +1,78 @@
1
+ // Copyright 2022 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_STRUCTURAL_METADATA_H_
16
+ #define DRACO_METADATA_STRUCTURAL_METADATA_H_
17
+
18
+ #include "draco/draco_features.h"
19
+
20
+ #ifdef DRACO_TRANSCODER_SUPPORTED
21
+
22
+ #include <memory>
23
+ #include <vector>
24
+
25
+ #include "draco/metadata/property_attribute.h"
26
+ #include "draco/metadata/property_table.h"
27
+ #include "draco/metadata/structural_metadata_schema.h"
28
+
29
+ namespace draco {
30
+
31
+ // Holds data associated with EXT_structural_metadata glTF extension.
32
+ class StructuralMetadata {
33
+ public:
34
+ StructuralMetadata() = default;
35
+
36
+ // Methods for comparing two structural metadata objects.
37
+ bool operator==(const StructuralMetadata &other) const;
38
+ bool operator!=(const StructuralMetadata &other) const {
39
+ return !(*this == other);
40
+ }
41
+
42
+ // Copies |src| structural metadata into this object.
43
+ void Copy(const StructuralMetadata &src);
44
+
45
+ // Schema of the structural metadata.
46
+ void SetSchema(const StructuralMetadataSchema &schema);
47
+ const StructuralMetadataSchema &GetSchema() const;
48
+
49
+ // Property tables.
50
+ int AddPropertyTable(std::unique_ptr<PropertyTable> property_table);
51
+ int NumPropertyTables() const;
52
+ const PropertyTable &GetPropertyTable(int index) const;
53
+ PropertyTable &GetPropertyTable(int index);
54
+ void RemovePropertyTable(int index);
55
+
56
+ // Property attributes.
57
+ int AddPropertyAttribute(
58
+ std::unique_ptr<PropertyAttribute> property_attribute);
59
+ int NumPropertyAttributes() const;
60
+ const PropertyAttribute &GetPropertyAttribute(int index) const;
61
+ PropertyAttribute &GetPropertyAttribute(int index);
62
+ void RemovePropertyAttribute(int index);
63
+
64
+ private:
65
+ // Schema of the structural metadata.
66
+ StructuralMetadataSchema schema_;
67
+
68
+ // Property tables.
69
+ std::vector<std::unique_ptr<PropertyTable>> property_tables_;
70
+
71
+ // Property attributes.
72
+ std::vector<std::unique_ptr<PropertyAttribute>> property_attributes_;
73
+ };
74
+
75
+ } // namespace draco
76
+
77
+ #endif // DRACO_TRANSCODER_SUPPORTED
78
+ #endif // DRACO_METADATA_STRUCTURAL_METADATA_H_
@@ -0,0 +1,118 @@
1
+ // Copyright 2023 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_SCHEMA_H_
16
+ #define DRACO_METADATA_SCHEMA_H_
17
+
18
+ #include "draco/draco_features.h"
19
+
20
+ #ifdef DRACO_TRANSCODER_SUPPORTED
21
+
22
+ #include <cstdint>
23
+ #include <cstring>
24
+ #include <limits>
25
+ #include <memory>
26
+ #include <string>
27
+ #include <vector>
28
+
29
+ #include "draco/core/status_or.h"
30
+
31
+ namespace draco {
32
+
33
+ // Defines schema that describes the structure of the metadata as defined in the
34
+ // EXT_structural_metadata glTF extension, in the form of a JSON object.
35
+ struct StructuralMetadataSchema {
36
+ // JSON object of the schema.
37
+ // TODO(vytyaz): Consider using a third_party/json library. Currently there
38
+ // is a conflict between Filament's assert_invariant() macro and JSON
39
+ // library's assert_invariant() method that causes compile errors in Draco
40
+ // visualization library.
41
+ class Object {
42
+ public:
43
+ enum Type { OBJECT, ARRAY, STRING, INTEGER, BOOLEAN };
44
+
45
+ // Constructors.
46
+ Object();
47
+ explicit Object(const std::string &name);
48
+ Object(const std::string &name, const std::string &value);
49
+ Object(const std::string &name, const char *value);
50
+ Object(const std::string &name, int value);
51
+ Object(const std::string &name, bool value);
52
+
53
+ // Methods for comparing two objects.
54
+ bool operator==(const Object &other) const;
55
+ bool operator!=(const Object &other) const;
56
+
57
+ // Method for copying the object.
58
+ void Copy(const Object &src);
59
+
60
+ // Methods for getting object name and type.
61
+ const std::string &GetName() const { return name_; }
62
+ Type GetType() const { return type_; }
63
+
64
+ // Methods for getting object value.
65
+ const std::vector<Object> &GetObjects() const { return objects_; }
66
+ const std::vector<Object> &GetArray() const { return array_; }
67
+ const std::string &GetString() const { return string_; }
68
+ int GetInteger() const { return integer_; }
69
+ bool GetBoolean() const { return boolean_; }
70
+
71
+ // Looks for a child object matching the given |name|. If no object is
72
+ // found, returns nullptr.
73
+ //
74
+ // Note that this is not recursive. I.e., for the following object:
75
+ //
76
+ // { "level1": { "level2": "value" } }
77
+ //
78
+ // GetObjectByName("level1") will return '{ "level2": "value" }', but
79
+ // GetObjectByName("level2") will return nullptr. Instead, the user should
80
+ // use GetObjectByName("level1")->GetObjectByName("level2") to get the
81
+ // nested child. Note that this follows the typical JSON semantics.
82
+ const Object *GetObjectByName(const std::string &name) const;
83
+
84
+ // Methods for setting object value.
85
+ std::vector<Object> &SetObjects();
86
+ std::vector<Object> &SetArray();
87
+ void SetString(const std::string &value);
88
+ void SetInteger(int value);
89
+ void SetBoolean(bool value);
90
+
91
+ private:
92
+ std::string name_;
93
+ Type type_;
94
+ std::vector<Object> objects_;
95
+ std::vector<Object> array_;
96
+ std::string string_;
97
+ int integer_;
98
+ bool boolean_;
99
+ };
100
+
101
+ // Valid schema top-level JSON object name is "schema".
102
+ StructuralMetadataSchema() : json("schema") {}
103
+
104
+ // Methods for comparing two schemas.
105
+ bool operator==(const StructuralMetadataSchema &other) const;
106
+ bool operator!=(const StructuralMetadataSchema &other) const;
107
+
108
+ // Valid schema top-level JSON object is required to have child objects.
109
+ bool Empty() const { return json.GetObjects().empty(); }
110
+
111
+ // Top-level JSON object of the schema.
112
+ Object json;
113
+ };
114
+
115
+ } // namespace draco
116
+
117
+ #endif // DRACO_TRANSCODER_SUPPORTED
118
+ #endif // DRACO_METADATA_SCHEMA_H_