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,39 @@
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_ANIMATION_KEYFRAME_ANIMATION_ENCODER_H_
16
+ #define DRACO_ANIMATION_KEYFRAME_ANIMATION_ENCODER_H_
17
+
18
+ #include "draco/animation/keyframe_animation.h"
19
+ #include "draco/compression/point_cloud/point_cloud_sequential_encoder.h"
20
+
21
+ namespace draco {
22
+
23
+ // Class for encoding keyframe animation. It takes KeyframeAnimation as a
24
+ // PointCloud and compress it. It's mostly a wrapper around PointCloudEncoder so
25
+ // that the animation module could be separated from geometry compression when
26
+ // exposed to developers.
27
+ class KeyframeAnimationEncoder : private PointCloudSequentialEncoder {
28
+ public:
29
+ KeyframeAnimationEncoder();
30
+
31
+ // Encode an animation to a buffer.
32
+ Status EncodeKeyframeAnimation(const KeyframeAnimation &animation,
33
+ const EncoderOptions &options,
34
+ EncoderBuffer *out_buffer);
35
+ };
36
+
37
+ } // namespace draco
38
+
39
+ #endif // DRACO_ANIMATION_KEYFRAME_ANIMATION_ENCODER_H_
@@ -0,0 +1,81 @@
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
+
16
+ #ifndef DRACO_ATTRIBUTES_ATTRIBUTE_OCTAHEDRON_TRANSFORM_H_
17
+ #define DRACO_ATTRIBUTES_ATTRIBUTE_OCTAHEDRON_TRANSFORM_H_
18
+
19
+ #include "draco/attributes/attribute_transform.h"
20
+ #include "draco/attributes/point_attribute.h"
21
+ #include "draco/core/encoder_buffer.h"
22
+
23
+ namespace draco {
24
+
25
+ // Attribute transform for attributes transformed to octahedral coordinates.
26
+ class AttributeOctahedronTransform : public AttributeTransform {
27
+ public:
28
+ AttributeOctahedronTransform() : quantization_bits_(-1) {}
29
+
30
+ // Return attribute transform type.
31
+ AttributeTransformType Type() const override {
32
+ return ATTRIBUTE_OCTAHEDRON_TRANSFORM;
33
+ }
34
+ // Try to init transform from attribute.
35
+ bool InitFromAttribute(const PointAttribute &attribute) override;
36
+ // Copy parameter values into the provided AttributeTransformData instance.
37
+ void CopyToAttributeTransformData(
38
+ AttributeTransformData *out_data) const override;
39
+
40
+ bool TransformAttribute(const PointAttribute &attribute,
41
+ const std::vector<PointIndex> &point_ids,
42
+ PointAttribute *target_attribute) override;
43
+
44
+ bool InverseTransformAttribute(const PointAttribute &attribute,
45
+ PointAttribute *target_attribute) override;
46
+
47
+ // Set number of quantization bits.
48
+ void SetParameters(int quantization_bits);
49
+
50
+ // Encode relevant parameters into buffer.
51
+ bool EncodeParameters(EncoderBuffer *encoder_buffer) const override;
52
+
53
+ bool DecodeParameters(const PointAttribute &attribute,
54
+ DecoderBuffer *decoder_buffer) override;
55
+
56
+ bool is_initialized() const { return quantization_bits_ != -1; }
57
+ int32_t quantization_bits() const { return quantization_bits_; }
58
+
59
+ protected:
60
+ DataType GetTransformedDataType(
61
+ const PointAttribute &attribute) const override {
62
+ return DT_UINT32;
63
+ }
64
+ int GetTransformedNumComponents(
65
+ const PointAttribute &attribute) const override {
66
+ return 2;
67
+ }
68
+
69
+ // Perform the actual transformation.
70
+ bool GeneratePortableAttribute(const PointAttribute &attribute,
71
+ const std::vector<PointIndex> &point_ids,
72
+ int num_points,
73
+ PointAttribute *target_attribute) const;
74
+
75
+ private:
76
+ int32_t quantization_bits_;
77
+ };
78
+
79
+ } // namespace draco
80
+
81
+ #endif // DRACO_ATTRIBUTES_ATTRIBUTE_OCTAHEDRON_TRANSFORM_H_
@@ -0,0 +1,102 @@
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_ATTRIBUTES_ATTRIBUTE_QUANTIZATION_TRANSFORM_H_
16
+ #define DRACO_ATTRIBUTES_ATTRIBUTE_QUANTIZATION_TRANSFORM_H_
17
+
18
+ #include <vector>
19
+
20
+ #include "draco/attributes/attribute_transform.h"
21
+ #include "draco/attributes/point_attribute.h"
22
+ #include "draco/core/encoder_buffer.h"
23
+
24
+ namespace draco {
25
+
26
+ // Attribute transform for quantized attributes.
27
+ class AttributeQuantizationTransform : public AttributeTransform {
28
+ public:
29
+ AttributeQuantizationTransform() : quantization_bits_(-1), range_(0.f) {}
30
+ // Return attribute transform type.
31
+ AttributeTransformType Type() const override {
32
+ return ATTRIBUTE_QUANTIZATION_TRANSFORM;
33
+ }
34
+ // Try to init transform from attribute.
35
+ bool InitFromAttribute(const PointAttribute &attribute) override;
36
+ // Copy parameter values into the provided AttributeTransformData instance.
37
+ void CopyToAttributeTransformData(
38
+ AttributeTransformData *out_data) const override;
39
+
40
+ bool TransformAttribute(const PointAttribute &attribute,
41
+ const std::vector<PointIndex> &point_ids,
42
+ PointAttribute *target_attribute) override;
43
+
44
+ bool InverseTransformAttribute(const PointAttribute &attribute,
45
+ PointAttribute *target_attribute) override;
46
+
47
+ bool SetParameters(int quantization_bits, const float *min_values,
48
+ int num_components, float range);
49
+
50
+ bool ComputeParameters(const PointAttribute &attribute,
51
+ const int quantization_bits);
52
+
53
+ // Encode relevant parameters into buffer.
54
+ bool EncodeParameters(EncoderBuffer *encoder_buffer) const override;
55
+
56
+ bool DecodeParameters(const PointAttribute &attribute,
57
+ DecoderBuffer *decoder_buffer) override;
58
+
59
+ int32_t quantization_bits() const { return quantization_bits_; }
60
+ float min_value(int axis) const { return min_values_[axis]; }
61
+ const std::vector<float> &min_values() const { return min_values_; }
62
+ float range() const { return range_; }
63
+ bool is_initialized() const { return quantization_bits_ != -1; }
64
+
65
+ protected:
66
+ // Create portable attribute using 1:1 mapping between points in the input and
67
+ // output attribute.
68
+ void GeneratePortableAttribute(const PointAttribute &attribute,
69
+ int num_points,
70
+ PointAttribute *target_attribute) const;
71
+
72
+ // Create portable attribute using custom mapping between input and output
73
+ // points.
74
+ void GeneratePortableAttribute(const PointAttribute &attribute,
75
+ const std::vector<PointIndex> &point_ids,
76
+ int num_points,
77
+ PointAttribute *target_attribute) const;
78
+
79
+ DataType GetTransformedDataType(
80
+ const PointAttribute &attribute) const override {
81
+ return DT_UINT32;
82
+ }
83
+ int GetTransformedNumComponents(
84
+ const PointAttribute &attribute) const override {
85
+ return attribute.num_components();
86
+ }
87
+
88
+ static bool IsQuantizationValid(int quantization_bits);
89
+
90
+ private:
91
+ int32_t quantization_bits_;
92
+
93
+ // Minimal dequantized value for each component of the attribute.
94
+ std::vector<float> min_values_;
95
+
96
+ // Bounds of the dequantized attribute (max delta over all components).
97
+ float range_;
98
+ };
99
+
100
+ } // namespace draco
101
+
102
+ #endif // DRACO_COMPRESSION_ATTRIBUTES_ATTRIBUTE_DEQUANTIZATION_TRANSFORM_H_
@@ -0,0 +1,76 @@
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_ATTRIBUTES_ATTRIBUTE_TRANSFORM_H_
16
+ #define DRACO_ATTRIBUTES_ATTRIBUTE_TRANSFORM_H_
17
+
18
+ #include "draco/attributes/attribute_transform_data.h"
19
+ #include "draco/attributes/point_attribute.h"
20
+ #include "draco/core/decoder_buffer.h"
21
+ #include "draco/core/encoder_buffer.h"
22
+
23
+ namespace draco {
24
+
25
+ // Virtual base class for various attribute transforms, enforcing common
26
+ // interface where possible.
27
+ class AttributeTransform {
28
+ public:
29
+ virtual ~AttributeTransform() = default;
30
+
31
+ // Return attribute transform type.
32
+ virtual AttributeTransformType Type() const = 0;
33
+ // Try to init transform from attribute.
34
+ virtual bool InitFromAttribute(const PointAttribute &attribute) = 0;
35
+ // Copy parameter values into the provided AttributeTransformData instance.
36
+ virtual void CopyToAttributeTransformData(
37
+ AttributeTransformData *out_data) const = 0;
38
+ bool TransferToAttribute(PointAttribute *attribute) const;
39
+
40
+ // Applies the transform to |attribute| and stores the result in
41
+ // |target_attribute|. |point_ids| is an optional vector that can be used to
42
+ // remap values during the transform.
43
+ virtual bool TransformAttribute(const PointAttribute &attribute,
44
+ const std::vector<PointIndex> &point_ids,
45
+ PointAttribute *target_attribute) = 0;
46
+
47
+ // Applies an inverse transform to |attribute| and stores the result in
48
+ // |target_attribute|. In this case, |attribute| is an attribute that was
49
+ // already transformed (e.g. quantized) and |target_attribute| is the
50
+ // attribute before the transformation.
51
+ virtual bool InverseTransformAttribute(const PointAttribute &attribute,
52
+ PointAttribute *target_attribute) = 0;
53
+
54
+ // Encodes all data needed by the transformation into the |encoder_buffer|.
55
+ virtual bool EncodeParameters(EncoderBuffer *encoder_buffer) const = 0;
56
+
57
+ // Decodes all data needed to transform |attribute| back to the original
58
+ // format.
59
+ virtual bool DecodeParameters(const PointAttribute &attribute,
60
+ DecoderBuffer *decoder_buffer) = 0;
61
+
62
+ // Initializes a transformed attribute that can be used as target in the
63
+ // TransformAttribute() function call.
64
+ virtual std::unique_ptr<PointAttribute> InitTransformedAttribute(
65
+ const PointAttribute &src_attribute, int num_entries);
66
+
67
+ protected:
68
+ virtual DataType GetTransformedDataType(
69
+ const PointAttribute &attribute) const = 0;
70
+ virtual int GetTransformedNumComponents(
71
+ const PointAttribute &attribute) const = 0;
72
+ };
73
+
74
+ } // namespace draco
75
+
76
+ #endif // DRACO_ATTRIBUTES_ATTRIBUTE_OCTAHEDRON_TRANSFORM_H_
@@ -0,0 +1,71 @@
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_ATTRIBUTES_ATTRIBUTE_TRANSFORM_DATA_H_
16
+ #define DRACO_ATTRIBUTES_ATTRIBUTE_TRANSFORM_DATA_H_
17
+
18
+ #include <memory>
19
+
20
+ #include "draco/attributes/attribute_transform_type.h"
21
+ #include "draco/core/data_buffer.h"
22
+
23
+ namespace draco {
24
+
25
+ // Class for holding parameter values for an attribute transform of a
26
+ // PointAttribute. This can be for example quantization data for an attribute
27
+ // that holds quantized values. This class provides only a basic storage for
28
+ // attribute transform parameters and it should be accessed only through wrapper
29
+ // classes for a specific transform (e.g. AttributeQuantizationTransform).
30
+ class AttributeTransformData {
31
+ public:
32
+ AttributeTransformData() : transform_type_(ATTRIBUTE_INVALID_TRANSFORM) {}
33
+ AttributeTransformData(const AttributeTransformData &data) = default;
34
+
35
+ // Returns the type of the attribute transform that is described by the class.
36
+ AttributeTransformType transform_type() const { return transform_type_; }
37
+ void set_transform_type(AttributeTransformType type) {
38
+ transform_type_ = type;
39
+ }
40
+
41
+ // Returns a parameter value on a given |byte_offset|.
42
+ template <typename DataTypeT>
43
+ DataTypeT GetParameterValue(int byte_offset) const {
44
+ DataTypeT out_data;
45
+ buffer_.Read(byte_offset, &out_data, sizeof(DataTypeT));
46
+ return out_data;
47
+ }
48
+
49
+ // Sets a parameter value on a given |byte_offset|.
50
+ template <typename DataTypeT>
51
+ void SetParameterValue(int byte_offset, const DataTypeT &in_data) {
52
+ if (byte_offset + sizeof(DataTypeT) > buffer_.data_size()) {
53
+ buffer_.Resize(byte_offset + sizeof(DataTypeT));
54
+ }
55
+ buffer_.Write(byte_offset, &in_data, sizeof(DataTypeT));
56
+ }
57
+
58
+ // Sets a parameter value at the end of the |buffer_|.
59
+ template <typename DataTypeT>
60
+ void AppendParameterValue(const DataTypeT &in_data) {
61
+ SetParameterValue(static_cast<int>(buffer_.data_size()), in_data);
62
+ }
63
+
64
+ private:
65
+ AttributeTransformType transform_type_;
66
+ DataBuffer buffer_;
67
+ };
68
+
69
+ } // namespace draco
70
+
71
+ #endif // DRACO_ATTRIBUTES_ATTRIBUTE_TRANSFORM_DATA_H_
@@ -0,0 +1,30 @@
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_ATTRIBUTES_ATTRIBUTE_TRANSFORM_TYPE_H_
16
+ #define DRACO_ATTRIBUTES_ATTRIBUTE_TRANSFORM_TYPE_H_
17
+
18
+ namespace draco {
19
+
20
+ // List of all currently supported attribute transforms.
21
+ enum AttributeTransformType {
22
+ ATTRIBUTE_INVALID_TRANSFORM = -1,
23
+ ATTRIBUTE_NO_TRANSFORM = 0,
24
+ ATTRIBUTE_QUANTIZATION_TRANSFORM = 1,
25
+ ATTRIBUTE_OCTAHEDRON_TRANSFORM = 2,
26
+ };
27
+
28
+ } // namespace draco
29
+
30
+ #endif // DRACO_ATTRIBUTES_ATTRIBUTE_TRANSFORM_TYPE_H_