OpenVDB  7.2.0
PointUtils.h
Go to the documentation of this file.
1 // Copyright Contributors to the OpenVDB Project
2 // SPDX-License-Identifier: MPL-2.0
3 
9 
10 #ifndef OPENVDB_HOUDINI_POINT_UTILS_HAS_BEEN_INCLUDED
11 #define OPENVDB_HOUDINI_POINT_UTILS_HAS_BEEN_INCLUDED
12 
13 #include <openvdb/math/Vec3.h>
14 #include <openvdb/Types.h>
16 
17 #include <GA/GA_Attribute.h>
18 #include <GU/GU_Detail.h>
19 #include <PRM/PRM_ChoiceList.h>
20 
21 #include <iosfwd>
22 #include <map>
23 #include <memory>
24 #include <string>
25 #include <vector>
26 
27 
28 #ifdef SESI_OPENVDB
29  #ifdef OPENVDB_HOUDINI_API
30  #undef OPENVDB_HOUDINI_API
31  #define OPENVDB_HOUDINI_API
32  #endif
33 #endif
34 
35 
36 namespace openvdb_houdini {
37 
38 using OffsetList = std::vector<GA_Offset>;
39 using OffsetListPtr = std::shared_ptr<OffsetList>;
40 
41 using OffsetPair = std::pair<GA_Offset, GA_Offset>;
42 using OffsetPairList = std::vector<OffsetPair>;
43 using OffsetPairListPtr = std::shared_ptr<OffsetPairList>;
44 
45 // note that the bool parameter here for toggling in-memory compression is now deprecated
46 using AttributeInfoMap = std::map<openvdb::Name, std::pair<int, bool>>;
47 
48 using WarnFunc = std::function<void (const std::string&)>;
49 
51 const std::string META_GROUP_VIEWPORT = "group_viewport";
52 
53 
56 {
62 };
63 
64 
65 // forward declaration
66 class Interrupter;
67 
68 
77 float
79  const GU_Detail& detail,
80  const openvdb::Index pointsPerVoxel,
81  const openvdb::math::Mat4d& matrix,
82  const openvdb::Index decimalPlaces,
83  Interrupter& interrupter);
84 
85 
95 openvdb::points::PointDataGrid::Ptr
97  const GU_Detail& detail,
98  const int compression,
99  const AttributeInfoMap& attributes,
100  const openvdb::math::Transform& transform,
101  const WarnFunc& warnings = [](const std::string&){});
102 
103 
116 void
118  GU_Detail& detail,
119  const openvdb::points::PointDataGrid& grid,
120  const std::vector<std::string>& attributes = {},
121  const std::vector<std::string>& includeGroups = {},
122  const std::vector<std::string>& excludeGroups = {},
123  const bool inCoreOnly = false);
124 
125 
132 void
135  const GU_Detail& detail,
136  const WarnFunc& warnings = [](const std::string&){});
137 
138 
145 void
147  GU_Detail& detail,
148  const openvdb::MetaMap& metaMap,
149  const WarnFunc& warnings = [](const std::string&){});
150 
151 
154 int16_t
155 attributeTupleSize(const GA_Attribute* const attribute);
156 
157 
160 GA_Storage
161 attributeStorageType(const GA_Attribute* const attribute);
162 
163 
165 
166 
171 void
172 pointDataGridSpecificInfoText(std::ostream&, const openvdb::GridBase&);
173 
186 void
188  std::string& countStr,
189  std::string& groupStr,
190  std::string& attributeStr);
191 
192 
194 
195 
196 // VDB Points group name drop-down menu
197 
198 OPENVDB_HOUDINI_API extern const PRM_ChoiceList VDBPointsGroupMenuInput1;
199 OPENVDB_HOUDINI_API extern const PRM_ChoiceList VDBPointsGroupMenuInput2;
200 OPENVDB_HOUDINI_API extern const PRM_ChoiceList VDBPointsGroupMenuInput3;
201 OPENVDB_HOUDINI_API extern const PRM_ChoiceList VDBPointsGroupMenuInput4;
202 
206 OPENVDB_HOUDINI_API extern const PRM_ChoiceList VDBPointsGroupMenu;
207 
208 } // namespace openvdb_houdini
209 
210 #endif // OPENVDB_HOUDINI_POINT_UTILS_HAS_BEEN_INCLUDED
std::function< void(const std::string &)> WarnFunc
Definition: PointUtils.h:48
OPENVDB_HOUDINI_API openvdb::points::PointDataGrid::Ptr convertHoudiniToPointDataGrid(const GU_Detail &detail, const int compression, const AttributeInfoMap &attributes, const openvdb::math::Transform &transform, const WarnFunc &warnings=[](const std::string &){})
Convert a Houdini detail into a VDB Points grid.
OPENVDB_HOUDINI_API const PRM_ChoiceList VDBPointsGroupMenuInput2
POINT_COMPRESSION_TYPE
Enum to store available compression types for point grids.
Definition: PointUtils.h:55
#define OPENVDB_HOUDINI_API
Definition: Platform.h:229
OPENVDB_HOUDINI_API void pointDataGridSpecificInfoText(std::ostream &, const openvdb::GridBase &)
If the given grid is a PointDataGrid, add node specific info text to the stream provided. This is used to populate the MMB window in Houdini versions 15 and earlier, as well as the Operator Information Window.
std::vector< GA_Offset > OffsetList
Definition: PointUtils.h:38
std::pair< GA_Offset, GA_Offset > OffsetPair
Definition: PointUtils.h:41
Mat4< double > Mat4d
Definition: Mat4.h:1362
OPENVDB_HOUDINI_API void populateMetadataFromHoudini(openvdb::points::PointDataGrid &grid, const GU_Detail &detail, const WarnFunc &warnings=[](const std::string &){})
Populate VDB Points grid metadata from Houdini detail attributes.
Container that maps names (strings) to values of arbitrary types.
Definition: MetaMap.h:19
Definition: PointUtils.h:58
std::shared_ptr< OffsetList > OffsetListPtr
Definition: PointUtils.h:39
std::map< openvdb::Name, std::pair< int, bool >> AttributeInfoMap
Definition: PointUtils.h:46
Definition: PointUtils.h:59
OPENVDB_HOUDINI_API void collectPointInfo(const openvdb::points::PointDataGrid &grid, std::string &countStr, std::string &groupStr, std::string &attributeStr)
Populates string data with information about the provided OpenVDB Points grid.
OPENVDB_HOUDINI_API void convertMetadataToHoudini(GU_Detail &detail, const openvdb::MetaMap &metaMap, const WarnFunc &warnings=[](const std::string &){})
Convert VDB Points grid metadata into Houdini detail attributes.
std::vector< OffsetPair > OffsetPairList
Definition: PointUtils.h:42
OPENVDB_HOUDINI_API const PRM_ChoiceList VDBPointsGroupMenuInput4
const std::string META_GROUP_VIEWPORT
Metadata name for viewport groups.
Definition: PointUtils.h:51
std::shared_ptr< OffsetPairList > OffsetPairListPtr
Definition: PointUtils.h:43
Abstract base class for typed grids.
Definition: Grid.h:77
OPENVDB_HOUDINI_API GA_Storage attributeStorageType(const GA_Attribute *const attribute)
Returns supported Storage types for conversion from GA_Attribute.
OPENVDB_HOUDINI_API const PRM_ChoiceList VDBPointsGroupMenuInput1
Wrapper class that adapts a Houdini UT_Interrupt object for use with OpenVDB library routines...
Definition: openvdb_houdini/openvdb_houdini/Utils.h:173
Definition: AttributeTransferUtil.h:33
Attribute-owned data structure for points. Point attributes are stored in leaf nodes and ordered by v...
OPENVDB_HOUDINI_API const PRM_ChoiceList VDBPointsGroupMenuInput3
OPENVDB_HOUDINI_API int16_t attributeTupleSize(const GA_Attribute *const attribute)
Returns supported tuple sizes for conversion from GA_Attribute.
Index32 Index
Definition: openvdb/Types.h:32
OPENVDB_HOUDINI_API const PRM_ChoiceList VDBPointsGroupMenu
Grid< PointDataTree > PointDataGrid
Point data grid.
Definition: PointDataGrid.h:189
OPENVDB_HOUDINI_API void convertPointDataGridToHoudini(GU_Detail &detail, const openvdb::points::PointDataGrid &grid, const std::vector< std::string > &attributes={}, const std::vector< std::string > &includeGroups={}, const std::vector< std::string > &excludeGroups={}, const bool inCoreOnly=false)
Convert a VDB Points grid into Houdini points and append them to a Houdini Detail.
Definition: PointUtils.h:57
OPENVDB_HOUDINI_API float computeVoxelSizeFromHoudini(const GU_Detail &detail, const openvdb::Index pointsPerVoxel, const openvdb::math::Mat4d &matrix, const openvdb::Index decimalPlaces, Interrupter &interrupter)
Compute a voxel size from a Houdini detail.