HDK
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
openvdb.h
Go to the documentation of this file.
1 // Copyright Contributors to the OpenVDB Project
2 // SPDX-License-Identifier: MPL-2.0
3 
4 #ifndef OPENVDB_OPENVDB_HAS_BEEN_INCLUDED
5 #define OPENVDB_OPENVDB_HAS_BEEN_INCLUDED
6 
7 #include "Platform.h"
8 #include "Types.h"
9 #include "TypeList.h"
10 #include "Metadata.h"
11 #include "math/Maps.h"
12 #include "math/Transform.h"
13 #include "Grid.h"
14 #include "tree/Tree.h"
15 #include "points/PointDataGrid.h"
16 #include "io/File.h"
17 
18 
19 namespace openvdb {
21 namespace OPENVDB_VERSION_NAME {
22 
23 /// @brief Global registration of native Grid, Transform, Metadata and Point
24 /// attribute types. Also initializes blosc (if enabled).
25 /// @details Calling this methods registers factory callbacks for the set of
26 /// native grid, transform, metadata and point attribute types that OpenVDB
27 /// supports by default. For most types, calling openvdb::initialize is only
28 /// required for serialization support. However, openvdb::initialize must be
29 /// called for PointDataGrid attribute usage as these callbacks are used in
30 /// various tools.
31 /// @note This method is thread safe - it can be concurrently called multiple
32 /// times, early exiting if it has already been called so long as
33 /// openvdb::uninitialize() has not been called.
34 OPENVDB_API void initialize();
35 
36 /// @brief Global deregistration of native Grid, Transform, Metadata and Point
37 /// attribute types.
38 /// @details Clears all registered factory callbacks. This includes everything
39 /// registered by openvdb::initialize() but will also include any manually
40 /// registered types.
41 /// @note This method is thread safe - it can be concurrently called multiple
42 /// times.
43 /// @warning This method does *not* uninitialize blosc. This is to avoid
44 /// changing program states should another library also be using blosc. If
45 /// blosc is enabled, consider calling blosc_destroy() in your application.
47 
48 
49 // foward declare some default types
50 namespace io { class DelayedLoadMetadata; }
51 
52 /// Common tree types
71 
72 /// Common grid types
87 
88 /// @name Lists of native Grid Types
89 /// @{
90 /// The floating point Grid types which OpenVDB will register by default.
92 /// The integer Grid types which OpenVDB will register by default.
94 /// The scalar Grid types which OpenVDB will register by default. This is a
95 /// combination of native floating point and integer grid types. Note that
96 /// this list does not include Bool or Mask Grids.
98 /// The Vec3 Grid types which OpenVDB will register by default.
100 
101 /// The Grid types which OpenVDB will register by default.
102 using GridTypes =
103  NumericGridTypes::
104  Append<Vec3GridTypes>::
105  Append<tools::PointIndexGrid>::
106  // #define unfortunately required for one of the tests that removes this alias
107 #ifndef OPENVDB_DISABLE_POINT_DATA_TREE_ALIAS
108  Append<points::PointDataGrid>::
109 #endif
110  Append<BoolGrid, MaskGrid>;
111 /// @}
112 
113 
114 namespace internal {
115 template <typename T> using ToTreeType = typename T::TreeType;
116 }
117 /// @name Lists of native Tree Types
118 /// @{
121 using NumericTreeTypes = NumericGridTypes::Transform<internal::ToTreeType>;
123 using TreeTypes = GridTypes::Transform<internal::ToTreeType>;
124 /// @}
125 
126 
127 /// @name Lists of native TypedAttributeArray Types (for PointDataGrids)
128 /// @{
129 /// The floating point attribute array types which OpenVDB will register by default.
131  points::TypedAttributeArray<float>,
132  points::TypedAttributeArray<double>,
133  points::TypedAttributeArray<float, points::TruncateCodec>,
134  points::TypedAttributeArray<float, points::FixedPointCodec<true, points::UnitRange>>,
135  points::TypedAttributeArray<float, points::FixedPointCodec<false, points::UnitRange>>
136  >;
137 /// The integer attribute array types which OpenVDB will register by default.
139  points::TypedAttributeArray<int8_t>,
140  points::TypedAttributeArray<int16_t>,
141  points::TypedAttributeArray<int32_t>,
142  points::TypedAttributeArray<int64_t>
143  >;
144 /// The scalar attribute array types which OpenVDB will register by default.
145 /// This is a combination of native floating point and integer array types.
146 /// Note that this list does not include bool arrays.
147 using NumericAttributeTypes =
149 /// The Vec3 attribute array types which OpenVDB will register by default.
151  points::TypedAttributeArray<math::Vec3<int32_t>>,
152  points::TypedAttributeArray<math::Vec3<float>>,
153  points::TypedAttributeArray<math::Vec3<double>>,
154  points::TypedAttributeArray<math::Vec3<float>, points::TruncateCodec>,
155  points::TypedAttributeArray<math::Vec3<float>, points::FixedPointCodec<true, points::PositionRange>>,
156  points::TypedAttributeArray<math::Vec3<float>, points::FixedPointCodec<false, points::PositionRange>>,
157  points::TypedAttributeArray<math::Vec3<float>, points::FixedPointCodec<true, points::UnitRange>>,
158  points::TypedAttributeArray<math::Vec3<float>, points::FixedPointCodec<false, points::UnitRange>>,
159  points::TypedAttributeArray<math::Vec3<float>, points::UnitVecCodec>
160  >;
161 /// The Mat3 attribute array types which OpenVDB will register by default.
163  points::TypedAttributeArray<math::Mat3<float>>,
164  points::TypedAttributeArray<math::Mat3<double>>
165  >;
166 /// The Mat4 attribute array types which OpenVDB will register by default.
168  points::TypedAttributeArray<math::Mat4<float>>,
169  points::TypedAttributeArray<math::Mat4<double>>
170  >;
171 /// The Quat attribute array types which OpenVDB will register by default.
173  points::TypedAttributeArray<math::Quat<float>>,
174  points::TypedAttributeArray<math::Quat<double>>
175  >;
176 
177 /// The attribute array types which OpenVDB will register by default.
178 using AttributeTypes =
179  NumericAttributeTypes::
180  Append<Vec3AttributeTypes>::
181  Append<Mat3AttributeTypes>::
182  Append<Mat4AttributeTypes>::
183  Append<QuatAttributeTypes>::
184  Append<points::GroupAttributeArray>::
185  Append<points::StringAttributeArray>::
186  Append<points::TypedAttributeArray<bool>>;
187 /// @}
188 
189 
190 /// The Map types which OpenVDB will register by default.
191 using MapTypes = TypeList<
192  math::AffineMap,
193  math::UnitaryMap,
195  math::UniformScaleMap,
196  math::TranslationMap,
198  math::UniformScaleTranslateMap,
199  math::NonlinearFrustumMap>;
200 
201 
202 /// The Metadata types which OpenVDB will register by default.
203 using MetaTypes = TypeList<
204  BoolMetadata,
222 
223 
224 // Deprecated types
225 /// @note Customizing the type of a VDB tree to an arbitrary class is still
226 /// supported however std::string Trees will, in the future, no longer be
227 /// provided as a native type by OpenVDB.
228 using StringTree OPENVDB_DEPRECATED_MESSAGE("Support for std::string Trees "
229  "as a native type will be dropped in future versions. Please feedback with any concerns.")
231 using StringGrid OPENVDB_DEPRECATED_MESSAGE("Support for std::string Grids "
232  "as a native type will be dropped in future versions. Please feedback with any concerns.")
234 
235 } // namespace OPENVDB_VERSION_NAME
236 } // namespace openvdb
237 
238 #endif // OPENVDB_OPENVDB_HAS_BEEN_INCLUDED
Grid< Vec3DTree > Vec3DGrid
Definition: openvdb.h:79
TypedMetadata< Vec3d > Vec3DMetadata
Definition: Metadata.h:367
NumericGridTypes::Append< Vec3GridTypes >::Append< tools::PointIndexGrid >::Append< points::PointDataGrid >::Append< BoolGrid, MaskGrid > GridTypes
The Grid types which OpenVDB will register by default.
Definition: openvdb.h:110
Store a buffer of data that can be optionally used during reading for faster delayed-load I/O perform...
OPENVDB_API void uninitialize()
Global deregistration of native Grid, Transform, Metadata and Point attribute types.
TypedMetadata< Vec4d > Vec4DMetadata
Definition: Metadata.h:370
NumericAttributeTypes::Append< Vec3AttributeTypes >::Append< Mat3AttributeTypes >::Append< Mat4AttributeTypes >::Append< QuatAttributeTypes >::Append< points::GroupAttributeArray >::Append< points::StringAttributeArray >::Append< points::TypedAttributeArray< bool >> AttributeTypes
The attribute array types which OpenVDB will register by default.
Definition: openvdb.h:186
A specialized Affine transform that scales along the principal axis the scaling need not be uniform i...
Definition: Maps.h:669
typename typelist_internal::TSAppendImpl< Self, TypesToAppend...>::type Append
Append types, or the members of another TypeList, to this list.
Definition: TypeList.h:560
#define OPENVDB_DEPRECATED_MESSAGE(msg)
Definition: Platform.h:123
#define OPENVDB_USE_VERSION_NAMESPACE
Definition: version.h:207
tree::Tree4< ValueMask, 5, 4, 3 >::Type MaskTree
Definition: openvdb.h:58
TypedMetadata< Mat4d > Mat4DMetadata
Definition: Metadata.h:374
Vec3GridTypes::Transform< internal::ToTreeType > Vec3TreeTypes
Definition: openvdb.h:122
tree::Tree4< Vec3d, 5, 4, 3 >::Type Vec3DTree
Definition: openvdb.h:63
TypedMetadata< Vec3i > Vec3IMetadata
Definition: Metadata.h:368
TypedMetadata< Mat4s > Mat4SMetadata
Definition: Metadata.h:373
TypedMetadata< std::string > StringMetadata
Definition: Metadata.h:363
#define OPENVDB_API
Definition: Platform.h:249
A TypeList provides a compile time sequence of heterogeneous types which can be accessed, transformed and executed over in various ways. It incorporates a subset of functionality similar to hboost::mpl::vector however provides most of its content through using declarations rather than additional typed classes.
Grid< MaskTree > MaskGrid
Definition: openvdb.h:78
TypedMetadata< int32_t > Int32Metadata
Definition: Metadata.h:361
TypedMetadata< bool > BoolMetadata
Definition: Metadata.h:358
GridTypes::Transform< internal::ToTreeType > TreeTypes
Definition: openvdb.h:123
OPENVDB_API void initialize()
Global registration of native Grid, Transform, Metadata and Point attribute types. Also initializes blosc (if enabled).
Definition: logging.h:294
TypedMetadata< int64_t > Int64Metadata
Definition: Metadata.h:362
IntegerGridTypes::Transform< internal::ToTreeType > IntegerTreeTypes
Definition: openvdb.h:120
Container class that associates a tree with a transform and metadata.
Definition: Grid.h:28
RealGridTypes::Append< IntegerGridTypes > NumericGridTypes
Definition: openvdb.h:97
typename T::TreeType ToTreeType
Definition: openvdb.h:115
tree::Tree4< float, 5, 4, 3 >::Type FloatTree
Definition: openvdb.h:55
TypedMetadata< Vec2d > Vec2DMetadata
Definition: Metadata.h:364
NumericGridTypes::Transform< internal::ToTreeType > NumericTreeTypes
Definition: openvdb.h:121
RealGridTypes::Transform< internal::ToTreeType > RealTreeTypes
Definition: openvdb.h:119
RealAttributeTypes::Append< IntegerAttributeTypes > NumericAttributeTypes
Definition: openvdb.h:148
A specialized Affine transform that scales along the principal axis the scaling need not be uniform i...
Definition: Maps.h:1178
TypedMetadata< Vec2i > Vec2IMetadata
Definition: Metadata.h:365
TypedMetadata< Vec2s > Vec2SMetadata
Definition: Metadata.h:366
TypedMetadata< float > FloatMetadata
Definition: Metadata.h:360
tree::Tree4< Vec3f, 5, 4, 3 >::Type Vec3STree
Definition: openvdb.h:65
TypedMetadata< Vec4i > Vec4IMetadata
Definition: Metadata.h:371
TypedMetadata< Vec4s > Vec4SMetadata
Definition: Metadata.h:372
TypedMetadata< Vec3s > Vec3SMetadata
Definition: Metadata.h:369
Grid< FloatTree > FloatGrid
Definition: openvdb.h:75
typename typelist_internal::TSTranformImpl< OpT, Ts...>::type Transform
Transform each type of this TypeList, rebuiling a new list of converted types. This method instantiat...
Definition: TypeList.h:640
#define OPENVDB_VERSION_NAME
The version namespace name for this library version.
Definition: version.h:119
Attribute-owned data structure for points. Point attributes are stored in leaf nodes and ordered by v...
A list of types (not necessarily unique)
Definition: TypeList.h:483
TypedMetadata< double > DoubleMetadata
Definition: Metadata.h:359
Grid< Vec3STree > Vec3SGrid
Definition: openvdb.h:81