Go to the documentation of this file.
8 #ifndef OPENVDB_HOUDINI_UTILS_HAS_BEEN_INCLUDED
9 #define OPENVDB_HOUDINI_UTILS_HAS_BEEN_INCLUDED
12 #include <OP/OP_Node.h>
13 #include <UT/UT_SharedPtr.h>
14 #include <UT/UT_Interrupt.h>
17 #include <type_traits>
21 #ifdef OPENVDB_HOUDINI_API
22 #undef OPENVDB_HOUDINI_API
23 #define OPENVDB_HOUDINI_API
33 using Grid = openvdb::GridBase;
49 using FilterFunc = std::function<bool (
const GU_PrimVDB&)>;
60 explicit VdbPrimCIterator(
const GEO_Detail* gdp,
const GA_PrimitiveGroup* group =
nullptr,
73 const GU_PrimVDB* getPrimitive()
const;
75 const GU_PrimVDB*
operator*()
const {
return getPrimitive(); }
76 const GU_PrimVDB*
operator->()
const {
return getPrimitive(); }
80 GA_Offset
getOffset()
const {
return getPrimitive()->getMapOffset(); }
81 GA_Index
getIndex()
const {
return getPrimitive()->getMapIndex(); }
85 operator bool()
const {
return getPrimitive() !=
nullptr; }
91 UT_String getPrimitiveName(
const UT_String& defaultName =
"")
const;
95 UT_String getPrimitiveNameOrIndex()
const;
103 UT_String getPrimitiveIndexAndName(
bool keepEmptyName =
true)
const;
108 const GA_PrimitiveGroup* =
nullptr, FilterFunc = FilterFunc());
110 UT_SharedPtr<GA_GBPrimitiveIterator>
mIter;
157 GU_PrimVDB* getPrimitive()
const {
161 GU_PrimVDB*
operator*()
const {
return getPrimitive(); }
177 mUTI{UTgetInterrupt()}, mRunning{
false}, mTitle{title ? title :
""}
186 void start(
const char* name =
nullptr) {
187 if (!mRunning) { mRunning =
true; mUTI->opStart(name ? name : mTitle.c_str()); }
190 void end() {
if (mRunning) { mUTI->opEnd(); mRunning =
false; } }
232 const bool copyAttrs =
true,
const char* name =
nullptr);
243 openvdb::CoordBBox
makeCoordBBox(
const UT_BoundingBox&,
const openvdb::math::Transform&);
320 template<
typename Gr
idTypeListT,
typename OpT>
324 if (
auto gridPtr = vdb.getConstGridPtr()) {
325 return gridPtr->apply<GridTypeListT>(op);
335 template<
typename Gr
idTypeListT,
typename OpT>
340 auto gridPtr = vdb.getGridPtr();
342 auto treePtr = gridPtr->baseTreePtr();
343 if (treePtr.use_count() > 2) {
346 gridPtr->apply<GridTypeListT>(
347 [](
Grid& baseGrid) { baseGrid.setTree(baseGrid.constBaseTree().copy()); });
350 return gridPtr->apply<GridTypeListT>(op);
357 #endif // OPENVDB_HOUDINI_UTILS_HAS_BEEN_INCLUDED
GU_PrimVDB * operator*() const
Definition: openvdb_houdini/openvdb_houdini/Utils.h:161
Definition: AttributeTransferUtil.h:33
Interrupter & operator=(const Interrupter &)=default
OPENVDB_HOUDINI_API void stopLogForwarding(OP_OpTypeId)
Stop forwarding OpenVDB log messages to the Houdini error manager for all operators of the given type...
bool wasInterrupted(int percent=-1)
Check if an interruptible operation should be aborted.
Definition: openvdb_houdini/openvdb_houdini/Utils.h:195
Grid< Int32Tree > Int32Grid
Definition: openvdb.h:46
Grid< FloatTree > FloatGrid
Definition: openvdb.h:45
openvdb::GridBase & GridRef
Definition: openvdb_houdini/openvdb_houdini/Utils.h:36
openvdb::TypeList< openvdb::FloatGrid, openvdb::DoubleGrid > RealGridTypes
Definition: openvdb_houdini/openvdb_houdini/Utils.h:302
Wrapper class that adapts a Houdini UT_Interrupt object for use with OpenVDB library routines.
Definition: openvdb_houdini/openvdb_houdini/Utils.h:173
Grid< Vec3DTree > Vec3DGrid
Definition: openvdb.h:50
Grid< DoubleTree > DoubleGrid
Definition: openvdb.h:44
GA_Offset getOffset() const
Definition: openvdb_houdini/openvdb_houdini/Utils.h:80
ScalarGridTypes::Append< Vec3GridTypes > VolumeGridTypes
Definition: openvdb_houdini/openvdb_houdini/Utils.h:312
VolumeGridTypes::Append< PointGridTypes > AllGridTypes
Definition: openvdb_houdini/openvdb_houdini/Utils.h:314
openvdb::TypeList< openvdb::BoolGrid, openvdb::FloatGrid, openvdb::DoubleGrid, openvdb::Int32Grid, openvdb::Int64Grid > ScalarGridTypes
Definition: openvdb_houdini/openvdb_houdini/Utils.h:292
Interrupter(const char *title=nullptr)
Definition: openvdb_houdini/openvdb_houdini/Utils.h:176
Grid< Vec3STree > Vec3SGrid
Definition: openvdb.h:52
Iterator over non-const VDB primitives on a geometry detail.
Definition: openvdb_houdini/openvdb_houdini/Utils.h:121
openvdb::TypeList< openvdb::FloatGrid, openvdb::DoubleGrid, openvdb::Int32Grid, openvdb::Int64Grid > NumericGridTypes
Definition: openvdb_houdini/openvdb_houdini/Utils.h:298
openvdb::GridBase Grid
Definition: openvdb_houdini/openvdb_houdini/Utils.h:33
OPENVDB_HOUDINI_API void startLogForwarding(OP_OpTypeId)
Start forwarding OpenVDB log messages to the Houdini error manager for all operators of the given typ...
openvdb::TypeList< openvdb::points::PointDataGrid > PointGridTypes
Definition: openvdb_houdini/openvdb_houdini/Utils.h:310
openvdb::GridBase::ConstPtr GridCPtr
Definition: openvdb_houdini/openvdb_houdini/Utils.h:35
GA_Index getIndex() const
Definition: openvdb_houdini/openvdb_houdini/Utils.h:81
const GU_PrimVDB * getPrimitive() const
Return a pointer to the current VDB primitive (nullptr if at end).
const GU_PrimVDB * operator*() const
Definition: openvdb_houdini/openvdb_houdini/Utils.h:75
UT_SharedPtr< GA_GBPrimitiveIterator > mIter
Definition: openvdb_houdini/openvdb_houdini/Utils.h:110
const GU_PrimVDB * operator->() const
Definition: openvdb_houdini/openvdb_houdini/Utils.h:76
Iterator over const VDB primitives on a geometry detail.
Definition: openvdb_houdini/openvdb_houdini/Utils.h:46
openvdb::GridBase::Ptr GridPtr
Definition: openvdb_houdini/openvdb_houdini/Utils.h:34
Grid< PointDataTree > PointDataGrid
Point data grid.
Definition: PointDataGrid.h:194
OPENVDB_HOUDINI_API GU_PrimVDB * createVdbPrimitive(GU_Detail &gdp, GridPtr grid, const char *name=nullptr)
Store a VDB grid in a new VDB primitive and add the primitive to a geometry detail.
Grid< Vec3ITree > Vec3IGrid
Definition: openvdb.h:51
VdbPrimIterator(GEO_Detail *gdp, GA_Range::safedeletions, const GA_PrimitiveGroup *group=nullptr, FilterFunc filter=FilterFunc())
Allow primitives to be deleted during iteration.
Definition: openvdb_houdini/openvdb_houdini/Utils.h:146
Grid< Int64Tree > Int64Grid
Definition: openvdb.h:47
OPENVDB_HOUDINI_API openvdb::CoordBBox makeCoordBBox(const UT_BoundingBox &, const openvdb::math::Transform &)
Construct an index-space CoordBBox from a UT_BoundingBox.
VdbPrimIterator(GEO_Detail *gdp, const GA_PrimitiveGroup *group=nullptr, FilterFunc filter=FilterFunc())
Definition: openvdb_houdini/openvdb_houdini/Utils.h:133
Grid< BoolTree > BoolGrid
Common grid types.
Definition: openvdb.h:43
void end()
Signal the end of an interruptible operation.
Definition: openvdb_houdini/openvdb_houdini/Utils.h:190
VdbPrimIterator & operator++()
Advance to the next VDB primitive.
Definition: openvdb_houdini/openvdb_houdini/Utils.h:154
openvdb::TypeList< openvdb::Vec3SGrid, openvdb::Vec3DGrid, openvdb::Vec3IGrid > Vec3GridTypes
Definition: openvdb_houdini/openvdb_houdini/Utils.h:307
~Interrupter()
Definition: openvdb_houdini/openvdb_houdini/Utils.h:179
const openvdb::GridBase & GridCRef
Definition: openvdb_houdini/openvdb_houdini/Utils.h:37
OPENVDB_HOUDINI_API bool evalGridBBox(GridCRef grid, UT_Vector3 corners[8], bool expandHalfVoxel=false)
Return in corners the corners of the given grid's active voxel bounding box.
std::function< bool(const GU_PrimVDB &)> FilterFunc
Definition: openvdb_houdini/openvdb_houdini/Utils.h:49
bool GEOvdbApply(const GEO_PrimVDB &vdb, OpT &op)
If the given primitive's grid resolves to one of the listed grid types, invoke the functor op on the ...
Definition: openvdb_houdini/openvdb_houdini/Utils.h:322
void start(const char *name=nullptr)
Signal the start of an interruptible operation.
Definition: openvdb_houdini/openvdb_houdini/Utils.h:186
OPENVDB_HOUDINI_API GU_PrimVDB * replaceVdbPrimitive(GU_Detail &gdp, GridPtr grid, GEO_PrimVDB &src, const bool copyAttrs=true, const char *name=nullptr)
Replace an existing VDB primitive with a new primitive that contains the given grid.
OPENVDB_HOUDINI_API bool isLogForwarding(OP_OpTypeId)
Return true if OpenVDB messages logged by operators of the given type are forwarded to the Houdini er...
FilterFunc mFilter
Definition: openvdb_houdini/openvdb_houdini/Utils.h:111
VdbPrimCIterator & operator++()
Definition: openvdb_houdini/openvdb_houdini/Utils.h:69
GU_PrimVDB * operator->() const
Definition: openvdb_houdini/openvdb_houdini/Utils.h:162