Go to the documentation of this file.
4 #ifndef OPENVDB_GRID_HAS_BEEN_INCLUDED
5 #define OPENVDB_GRID_HAS_BEEN_INCLUDED
18 #include <type_traits>
28 template<
typename>
class Grid;
35 template<
typename Gr
idType>
36 inline typename GridType::Ptr
createGrid(
const typename GridType::ValueType& background);
42 template<
typename Gr
idType>
50 template<
typename TreePtrType>
68 template<
typename Gr
idType>
102 #if OPENVDB_ABI_VERSION_NUMBER >= 7
147 template<
typename Gr
idType>
148 bool isType()
const {
return (this->type() == GridType::gridType()); }
153 template<
typename Gr
idType>
157 template<
typename Gr
idType>
159 template<
typename Gr
idType>
160 static typename GridType::ConstPtr constGrid(
const GridBase::Ptr&);
161 template<
typename Gr
idType>
261 template<
typename Gr
idTypeListT,
typename OpT>
inline bool apply(OpT&)
const;
262 template<
typename Gr
idTypeListT,
typename OpT>
inline bool apply(OpT&);
263 template<
typename Gr
idTypeListT,
typename OpT>
inline bool apply(
const OpT&)
const;
264 template<
typename Gr
idTypeListT,
typename OpT>
inline bool apply(
const OpT&);
474 virtual void print(std::ostream& = std::cout,
int verboseLevel = 1)
const = 0;
481 GridBase(): mTransform(math::Transform::createLinearTransform()) {}
483 #if OPENVDB_ABI_VERSION_NUMBER >= 7
539 template<
typename Gr
idPtrContainerT>
540 inline typename GridPtrContainerT::value_type
543 using GridPtrT =
typename GridPtrContainerT::value_type;
544 typename GridPtrContainerT::const_iterator it =
545 std::find_if(container.begin(), container.end(),
GridNamePred(name));
546 return (it == container.end() ? GridPtrT() : *it);
550 template<
typename KeyT,
typename Gr
idPtrT>
554 using GridPtrMapT = std::map<KeyT, GridPtrT>;
555 for (
typename GridPtrMapT::const_iterator it = container.begin(), end = container.end();
558 const GridPtrT& grid = it->second;
559 if (grid && grid->getName() == name)
return grid;
570 template<
typename _TreeType>
601 template<
typename OtherValueType>
633 template<
typename OtherTreeType>
657 Ptr copyWithNewTree()
const;
673 #if OPENVDB_ABI_VERSION_NUMBER >= 7
712 Name type()
const override {
return this->gridType(); }
728 bool empty()
const override {
return tree().empty(); }
730 void clear()
override { tree().clear(); }
789 void sparseFill(
const CoordBBox& bbox,
const ValueType& value,
bool active =
true);
798 void fill(
const CoordBBox& bbox,
const ValueType& value,
bool active =
true);
806 void denseFill(
const CoordBBox& bbox,
const ValueType& value,
bool active =
true);
809 void pruneGrid(
float tolerance = 0.0)
override;
837 template<
typename OtherTreeType>
852 template<
typename OtherTreeType>
865 template<
typename OtherTreeType>
876 CoordBBox evalActiveVoxelBoundingBox()
const override;
878 Coord evalActiveVoxelDim()
const override;
880 void evalMinMax(ValueType& minVal, ValueType& maxVal)
const;
893 TreePtrType treePtr() {
return mTree; }
900 bool isTreeUnique()
const;
904 TreeType& tree() {
return *mTree; }
927 void newTree()
override;
937 void readTopology(std::istream&)
override;
940 void writeTopology(std::ostream&)
const override;
943 void readBuffers(std::istream&)
override;
945 void readBuffers(std::istream&,
const CoordBBox&)
override;
951 void readNonresidentBuffers()
const override;
953 void writeBuffers(std::ostream&)
const override;
956 void print(std::ostream& = std::cout,
int verboseLevel = 1)
const override;
963 static inline bool hasMultiPassIO();
977 <<
" might not be threadsafe on this platform");
987 #if OPENVDB_ABI_VERSION_NUMBER >= 7
1009 template<
typename Gr
idType>
1010 inline typename GridType::Ptr
1013 return GridBase::grid<GridType>(grid);
1025 template<
typename Gr
idType>
1026 inline typename GridType::ConstPtr
1029 return GridBase::constGrid<GridType>(grid);
1042 template<
typename Gr
idType>
1043 inline typename GridType::Ptr
1046 if (!grid || !grid->isType<GridType>())
return typename GridType::Ptr();
1047 return gridPtrCast<GridType>(grid->deepCopyGrid());
1051 template<
typename Gr
idType>
1052 inline typename GridType::Ptr
1055 if (!grid.
isType<GridType>())
return typename GridType::Ptr();
1065 template<
typename _TreeType>
1097 template<
typename _TreeType>
1126 template<
typename _TreeType>
1167 template<
typename LeafNodeType>
1169 static const bool value = std::is_base_of<io::MultiPass, LeafNodeType>::value;
1173 template<
typename RootNodeType>
1180 template<
typename TreeType>
1189 #if OPENVDB_ABI_VERSION_NUMBER >= 7
1198 template<
typename Gr
idType>
1199 inline typename GridType::Ptr
1204 if (
grid &&
grid->type() == GridType::gridType()) {
1205 return StaticPtrCast<GridType>(
grid);
1207 return typename GridType::Ptr();
1211 template<
typename Gr
idType>
1212 inline typename GridType::ConstPtr
1215 return ConstPtrCast<const GridType>(
1216 GridBase::grid<GridType>(ConstPtrCast<GridBase>(
grid)));
1220 template<
typename Gr
idType>
1221 inline typename GridType::ConstPtr
1224 return ConstPtrCast<const GridType>(GridBase::grid<GridType>(
grid));
1228 template<
typename Gr
idType>
1229 inline typename GridType::ConstPtr
1232 return ConstPtrCast<const GridType>(
1233 GridBase::grid<GridType>(ConstPtrCast<GridBase>(
grid)));
1255 template<
typename TreeT>
1261 template<
typename TreeT>
1267 template<
typename TreeT>
1274 #if OPENVDB_ABI_VERSION_NUMBER >= 7
1275 template<
typename TreeT>
1285 template<
typename TreeT>
1293 template<
typename TreeT>
1294 template<
typename OtherTreeType>
1297 mTree(new
TreeType(other.constTree()))
1302 template<
typename TreeT>
1310 template<
typename TreeT>
1319 template<
typename TreeT>
1328 template<
typename TreeT>
1332 return Ptr(
new Grid(background));
1337 template<
typename TreeT>
1346 template<
typename TreeT>
1357 template<
typename TreeT>
1365 #if OPENVDB_ABI_VERSION_NUMBER >= 7
1366 template<
typename TreeT>
1371 this->constTransformPtr());
1372 TreePtrType treePtr = ConstPtrCast<TreeT>(this->constTreePtr());
1376 template<
typename TreeT>
1380 return this->copyReplacingMetadataAndTransform(*
this, xform);
1383 template<
typename TreeT>
1388 TreePtrType treePtr = ConstPtrCast<TreeT>(this->constTreePtr());
1394 template<
typename TreeT>
1402 template<
typename TreeT>
1412 template<
typename TreeT>
1416 return this->copy();
1419 template<
typename TreeT>
1423 return this->copy();
1426 #if OPENVDB_ABI_VERSION_NUMBER >= 7
1427 template<
typename TreeT>
1431 return this->copyReplacingMetadata(meta);
1434 template<
typename TreeT>
1438 return this->copyReplacingTransform(xform);
1441 template<
typename TreeT>
1446 return this->copyReplacingMetadataAndTransform(meta, xform);
1450 template<
typename TreeT>
1454 return this->copyWithNewTree();
1461 template<
typename TreeT>
1465 return mTree.use_count() == 1;
1469 template<
typename TreeT>
1474 if (tree->type() != TreeType::treeType()) {
1476 + tree->type() +
" to a grid of type " + this->type());
1478 mTree = StaticPtrCast<TreeType>(tree);
1482 template<
typename TreeT>
1486 mTree.reset(
new TreeType(this->background()));
1493 template<
typename TreeT>
1497 tree().sparseFill(bbox, value, active);
1501 template<
typename TreeT>
1505 this->sparseFill(bbox, value, active);
1508 template<
typename TreeT>
1512 tree().denseFill(bbox, value, active);
1515 template<
typename TreeT>
1519 const auto value =
math::cwiseAdd(zeroVal<ValueType>(), tolerance);
1520 this->tree().prune(
static_cast<ValueType>(value));
1523 template<
typename TreeT>
1530 template<
typename TreeT>
1534 tree().merge(other.
tree(), policy);
1538 template<
typename TreeT>
1539 template<
typename OtherTreeType>
1543 tree().topologyUnion(other.
tree());
1547 template<
typename TreeT>
1548 template<
typename OtherTreeType>
1552 tree().topologyIntersection(other.
tree());
1556 template<
typename TreeT>
1557 template<
typename OtherTreeType>
1561 tree().topologyDifference(other.
tree());
1568 template<
typename TreeT>
1572 tree().evalMinMax(minVal, maxVal);
1576 template<
typename TreeT>
1581 tree().evalActiveVoxelBoundingBox(bbox);
1586 template<
typename TreeT>
1591 const bool nonempty = tree().evalActiveVoxelDim(dim);
1592 return (nonempty ? dim :
Coord());
1602 template<
typename TreeT>
1606 tree().readTopology(is, saveFloatAsHalf());
1610 template<
typename TreeT>
1614 tree().writeTopology(os, saveFloatAsHalf());
1618 template<
typename TreeT>
1623 tree().readBuffers(is, saveFloatAsHalf());
1625 uint16_t numPasses = 1;
1626 is.read(
reinterpret_cast<char*
>(&numPasses),
sizeof(uint16_t));
1629 for (uint16_t passIndex = 0; passIndex < numPasses; ++passIndex) {
1630 uint32_t pass = (uint32_t(numPasses) << 16) | uint32_t(passIndex);
1631 meta->setPass(pass);
1632 tree().readBuffers(is, saveFloatAsHalf());
1640 template<
typename TreeT>
1645 tree().readBuffers(is, bbox, saveFloatAsHalf());
1647 uint16_t numPasses = 1;
1648 is.read(
reinterpret_cast<char*
>(&numPasses),
sizeof(uint16_t));
1651 for (uint16_t passIndex = 0; passIndex < numPasses; ++passIndex) {
1652 uint32_t pass = (uint32_t(numPasses) << 16) | uint32_t(passIndex);
1653 meta->setPass(pass);
1654 tree().readBuffers(is, saveFloatAsHalf());
1663 template<
typename TreeT>
1667 tree().readNonresidentBuffers();
1671 template<
typename TreeT>
1675 if (!hasMultiPassIO()) {
1676 tree().writeBuffers(os, saveFloatAsHalf());
1681 uint16_t numPasses = 1;
1682 meta->setCountingPasses(
true);
1684 tree().writeBuffers(os, saveFloatAsHalf());
1685 numPasses =
static_cast<uint16_t
>(meta->pass());
1686 os.write(
reinterpret_cast<const char*
>(&numPasses),
sizeof(uint16_t));
1687 meta->setCountingPasses(
false);
1690 for (uint16_t passIndex = 0; passIndex < numPasses; ++passIndex) {
1691 uint32_t pass = (uint32_t(numPasses) << 16) | uint32_t(passIndex);
1692 meta->setPass(pass);
1693 tree().writeBuffers(os, saveFloatAsHalf());
1700 template<
typename TreeT>
1708 template<
typename TreeT>
1712 tree().print(os, verboseLevel);
1714 if (metaCount() > 0) {
1715 os <<
"Additional metadata:" << std::endl;
1716 for (ConstMetaIterator it = beginMeta(), end = endMeta(); it != end; ++it) {
1717 os <<
" " << it->first;
1719 const std::string value = it->second->str();
1720 if (!value.empty()) os <<
": " << value;
1726 os <<
"Transform:" << std::endl;
1727 transform().print(os,
" ");
1735 template<
typename Gr
idType>
1736 inline typename GridType::Ptr
1739 return GridType::create(background);
1743 template<
typename Gr
idType>
1744 inline typename GridType::Ptr
1747 return GridType::create();
1751 template<
typename TreePtrType>
1755 using TreeType =
typename TreePtrType::element_type;
1760 template<
typename Gr
idType>
1761 typename GridType::Ptr
1764 using ValueType =
typename GridType::ValueType;
1767 static_assert(std::is_floating_point<ValueType>::value,
1768 "level-set grids must be floating-point-valued");
1770 typename GridType::Ptr grid = GridType::create(
1771 static_cast<ValueType
>(voxelSize * halfWidth));
1781 namespace internal {
1784 template<
typename OpT,
typename GridBaseT,
typename T,
typename ...Ts>
1785 struct GridApplyImpl {
static bool apply(GridBaseT&, OpT&) {
return false; } };
1789 template<
typename OpT,
typename GridBaseT,
typename GridT,
typename ...GridTs>
1790 struct GridApplyImpl<OpT, GridBaseT,
TypeList<GridT, GridTs...>>
1792 static bool apply(GridBaseT& grid, OpT& op)
1794 if (grid.template isType<GridT>()) {
1798 return GridApplyImpl<OpT, GridBaseT,
TypeList<GridTs...>>::apply(grid, op);
1805 template<
typename Gr
idTypeListT,
typename OpT>
1809 return internal::GridApplyImpl<OpT, const GridBase, GridTypeListT>::apply(*
this, op);
1812 template<
typename Gr
idTypeListT,
typename OpT>
1816 return internal::GridApplyImpl<OpT, GridBase, GridTypeListT>::apply(*
this, op);
1819 template<
typename Gr
idTypeListT,
typename OpT>
1823 return internal::GridApplyImpl<const OpT, const GridBase, GridTypeListT>::apply(*
this, op);
1826 template<
typename Gr
idTypeListT,
typename OpT>
1830 return internal::GridApplyImpl<const OpT, GridBase, GridTypeListT>::apply(*
this, op);
1836 #endif // OPENVDB_GRID_HAS_BEEN_INCLUDED
TreeBase::ConstPtr baseTreePtr() const
Return a pointer to this grid's tree, which might be shared with other grids. The pointer is guarante...
Definition: Grid.h:173
static TreeType & tree(TreeType &t)
Definition: Grid.h:1144
const TreeType & constTree() const
Return a pointer to this grid's tree, which might be shared with other grids. The pointer is guarante...
Definition: Grid.h:910
typename NonConstGridType::Ptr NonConstGridPtrType
Definition: Grid.h:1078
static std::string gridClassToString(GridClass)
Return the metadata string value for the given class of volumetric data.
TreeBase & baseTree()
Return a reference to this grid's tree, which might be shared with other grids.
Definition: Grid.h:182
Vec3d voxelSize(const Vec3d &xyz) const
Return the size of this grid's voxel at position (x, y, z).
Definition: Grid.h:432
typename TreeType::ValueType ValueType
Definition: Grid.h:1110
GridBase(const GridBase &other)
Deep copy another grid's metadata and transform.
Definition: Grid.h:490
Consolidated llvm types for most supported types.
virtual void readBuffers(std::istream &)=0
Read all data buffers for this grid.
ValueOffCIter beginValueOff() const
Return an iterator over all of this grid's inactive values (tile and voxel).
Definition: Grid.h:766
std::string getName() const
Return this grid's user-specified name.
void setTree(TreeBase::Ptr) override
Associate the given tree with this grid, in place of its existing tree.
Definition: Grid.h:1471
void print(const ast::Node &node, const bool numberStatements=true, std::ostream &os=std::cout, const char *indent=" ")
Writes a descriptive printout of a Node hierarchy into a target stream.
static const TreeType & tree(const GridType &g)
Definition: Grid.h:1118
typename NonConstGridType::Ptr NonConstGridPtrType
Definition: Grid.h:1137
Signed (x, y, z) 32-bit integer coordinates.
Definition: Coord.h:26
SharedPtr< T > StaticPtrCast(const SharedPtr< U > &ptr)
Return a new shared pointer that points to the same object as the given pointer after a static_cast.
Definition: openvdb/Types.h:124
typename _TreeType::ValueOnIter ValueOnIter
Definition: Grid.h:583
Name type() const override
Return the name of this grid's type.
Definition: Grid.h:712
GridClass
Definition: openvdb/Types.h:313
virtual void pruneGrid(float tolerance=0.0)=0
Reduce the memory footprint of this grid by increasing its sparseness either losslessly (tolerance = ...
SharedPtr< GridPtrVec > GridPtrVecPtr
Definition: Grid.h:512
typename TreeType::Ptr TreePtrType
Definition: Grid.h:1072
static const TreeType & tree(const TreeType &t)
Definition: Grid.h:1087
std::vector< GridBase::ConstPtr > GridCPtrVec
Definition: Grid.h:514
SharedPtr< GridPtrSet > GridPtrSetPtr
Definition: Grid.h:522
Coord evalActiveVoxelDim() const override
Return the dimensions of the axis-aligned bounding box of all active voxels.
Definition: Grid.h:1588
virtual TreeBase::ConstPtr constBaseTreePtr() const =0
Return a pointer to this grid's tree, which might be shared with other grids. The pointer is guarante...
SharedPtr< const TreeBase > ConstPtr
Definition: Tree.h:39
ValueOnCIter cbeginValueOn() const
Return an iterator over all of this grid's active values (tile and voxel).
Definition: Grid.h:762
virtual Index64 activeVoxelCount() const =0
Return the number of active voxels.
void print(std::ostream &=std::cout, int verboseLevel=1) const override
Output a human-readable description of this grid.
Definition: Grid.h:1710
ConstPtr copyReplacingMetadata(const MetaMap &meta) const
Return a new grid of the same type as this grid whose tree and transform is shared with this grid and...
Definition: Grid.h:1368
typename _TreeType::ValueOffCIter ValueOffCIter
Definition: Grid.h:586
GridType::Ptr createGrid(const typename GridType::ValueType &background)
Create a new grid of type GridType with a given background value.
Definition: Grid.h:1737
static const TreeType & constTree(GridType &g)
Definition: Grid.h:1151
static void registerGrid(const Name &type, GridFactory)
Register a grid type along with a factory function.
bool operator()(const GridBase::ConstPtr &g) const
Definition: Grid.h:534
Grid & operator=(const Grid &)=delete
Disallow assignment, since it wouldn't be obvious whether the copy is deep or shallow.
static const TreeType & constTree(TreeType &t)
Definition: Grid.h:1119
typename NonConstGridType::Ptr NonConstGridPtrType
Definition: Grid.h:1108
ValueAllCIter beginValueAll() const
Return an iterator over all of this grid's values (tile and voxel).
Definition: Grid.h:772
void setSaveFloatAsHalf(bool)
Return this grid's user-specified name.
void writeBuffers(std::ostream &) const override
Write out all data buffers for this grid.
Definition: Grid.h:1673
static const char *const META_VECTOR_TYPE
Definition: Grid.h:355
virtual CoordBBox evalActiveVoxelBoundingBox() const =0
typename _TreeType::BuildType BuildType
Definition: Grid.h:581
@ GRID_LEVEL_SET
Definition: openvdb/Types.h:315
Index64 activeVoxelCount() const override
Return the number of active voxels.
Definition: Grid.h:874
virtual void readNonresidentBuffers() const =0
Read all of this grid's data buffers that are not yet resident in memory (because delayed loading is ...
Ptr(*)() GridFactory
Definition: Grid.h:83
GridClass getGridClass() const
Return the class of volumetric data (level set, fog volume, etc.) that is stored in this grid.
ConstTreePtrType treePtr() const
Return a pointer to this grid's tree, which might be shared with other grids. The pointer is guarante...
Definition: Grid.h:896
GridBase::ConstPtr copyGridReplacingMetadataAndTransform(const MetaMap &meta, math::Transform::Ptr xform) const override
Return a new grid of the same type as this grid whose tree is shared with this grid and whose transfo...
Definition: Grid.h:1443
ValueOnCIter beginValueOn() const
Return an iterator over all of this grid's active values (tile and voxel).
Definition: Grid.h:760
Accessor getAccessor()
Return an accessor that provides random read and write access to this grid's voxels.
Definition: Grid.h:735
void readTransform(std::istream &is)
Read in the transform for this grid.
Definition: Grid.h:469
typename _TreeType::ValueOnCIter ValueOnCIter
Definition: Grid.h:584
virtual GridBase::Ptr copyGrid()=0
Return a new grid of the same type as this grid whose metadata is a deep copy of this grid's and whos...
Vec3d indexToWorld(const Vec3d &xyz) const
Apply this grid's transform to the given coordinates.
Definition: Grid.h:436
MetaMap::Ptr getStatsMetadata() const
Return a new MetaMap containing just the metadata that was added to this grid with addStatsMetadata.
bool isTreeUnique() const
Return true if tree is not shared with another grid.
Definition: Grid.h:1463
typename std::remove_const< TreeType >::type NonConstTreeType
Definition: Grid.h:1071
OPENVDB_API uint32_t getFormatVersion(std::ios_base &)
Return the file format version number associated with the given input stream.
bool isInWorldSpace() const
bool isType() const
Return true if this grid is of the same type as the template parameter.
Definition: Grid.h:148
static bool isRegistered(const Name &type)
Return true if the given grid type name is registered.
GridType::ConstPtr gridConstPtrCast(const GridBase::ConstPtr &grid)
Cast a generic const grid pointer to a const pointer to a grid of a concrete class.
Definition: Grid.h:1027
typename _TreeType::ValueAllCIter ValueAllCIter
Definition: Grid.h:588
GridBase::ConstPtr copyGridReplacingMetadata(const MetaMap &meta) const override
Return a new grid of the same type as this grid whose tree and transform is shared with this grid and...
Definition: Grid.h:1429
static const TreeType & tree(const AccessorType &a)
Definition: Grid.h:1149
void topologyUnion(const Grid< OtherTreeType > &other)
Union this grid's set of active values with the active values of the other grid, whose value type may...
Definition: Grid.h:1541
virtual Name valueType() const =0
Return the name of the type of a voxel's value (e.g., "float" or "vec3d").
static const TreeType & constTree(const TreeType &t)
Definition: Grid.h:1152
GridPtrSet::const_iterator GridPtrSetCIter
Definition: Grid.h:521
typename tree::ValueAccessor< const _TreeType, true > ConstAccessor
Definition: Grid.h:591
Name name
Definition: Grid.h:535
static const TreeType & tree(const TreeType &t)
Definition: Grid.h:1117
GridPtrSet::iterator GridPtrSetIter
Definition: Grid.h:520
void denseFill(const CoordBBox &bbox, const ValueType &value, bool active=true)
Set all voxels within a given axis-aligned box to a constant value and ensure that those voxels are a...
Definition: Grid.h:1510
static bool hasMultiPassIO()
Return true if grids of this type require multiple I/O passes to read and write data buffers.
Definition: Grid.h:1702
tree::TreeBase TreeBase
Definition: Grid.h:26
static GridType::Ptr grid(const GridBase::Ptr &)
Return the result of downcasting a GridBase pointer to a Grid pointer of the specified type,...
Definition: Grid.h:1200
SharedPtr< TreeBase > Ptr
Definition: Tree.h:38
const TreeType & tree() const
Return a pointer to this grid's tree, which might be shared with other grids. The pointer is guarante...
Definition: Grid.h:909
void evalMinMax(ValueType &minVal, ValueType &maxVal) const
Return the minimum and maximum active values in this grid.
Definition: Grid.h:1570
static const Real LEVEL_SET_HALF_WIDTH
Definition: openvdb/Types.h:321
typename TreeType::Ptr TreePtrType
Definition: Grid.h:1102
typename _TreeType::ValueAllIter ValueAllIter
Definition: Grid.h:587
Definition: ValueAccessor.h:183
typename tree::ValueAccessor< _TreeType, true > Accessor
Definition: Grid.h:590
#define OPENVDB_THROW(exception, message)
Definition: openvdb/Exceptions.h:82
Axis-aligned bounding box of signed integer coordinates.
Definition: Coord.h:249
std::string Name
Definition: Name.h:17
bool saveFloatAsHalf() const
Return true if this grid should be written out with floating-point voxel values (including components...
void merge(Grid &other, MergePolicy policy=MERGE_ACTIVE_STATES)
Efficiently merge another grid into this grid using one of several schemes.
Definition: Grid.h:1532
_TreeType TreeType
Definition: Grid.h:1129
static TreeType & tree(AccessorType &a)
Definition: Grid.h:1146
static GridType::ConstPtr constGrid(const GridBase::Ptr &)
Definition: Grid.h:1222
typename GridType::ConstPtr ConstGridPtrType
Definition: Grid.h:1079
GridCPtrSet::iterator GridCPtrSetIter
Definition: Grid.h:525
_TreeType TreeType
Definition: Grid.h:1100
A list of types (not necessarily unique)
Definition: TypeList.h:366
typename std::remove_const< TreeType >::type NonConstTreeType
Definition: Grid.h:1101
static VecType stringToVecType(const std::string &)
ValueOffIter beginValueOff()
Return an iterator over all of this grid's inactive values (tile and voxel).
Definition: Grid.h:764
const math::Transform & transform() const
Return a pointer to this grid's transform, which might be shared with other grids.
Definition: Grid.h:411
static const TreeType & constTree(GridType &g)
Definition: Grid.h:1090
static const char *const META_FILE_MEM_BYTES
Definition: Grid.h:359
Predicate functor that returns true for grids that have a specified name.
Definition: Grid.h:532
Abstract base class for typed grids.
Definition: Grid.h:78
std::vector< GridBase::Ptr > GridPtrVec
Definition: Grid.h:509
openvdb::GridBase Grid
Definition: openvdb_houdini/openvdb_houdini/Utils.h:33
virtual void newTree()=0
Set a new tree with the same background value as the previous tree.
void setTransform(math::Transform::Ptr)
Associate the given transform with this grid, in place of its existing transform.
Definition: Grid.h:1245
static const TreeType & constTree(TreeType &t)
Definition: Grid.h:1150
Ptr deepCopy() const
Return a new grid whose metadata, transform and tree are deep copies of this grid's.
Definition: Grid.h:704
Container class that associates a tree with a transform and metadata.
Definition: Grid.h:572
void setCreator(const std::string &)
Provide a description of this grid's creator.
void setIsInWorldSpace(bool)
Specify whether this grid's voxel values are in world space or in local space.
ConstAccessor getAccessor() const
Return an accessor that provides random read-only access to this grid's voxels.
Definition: Grid.h:745
static const TreeType & tree(const GridType &g)
Definition: Grid.h:1088
virtual void writeTopology(std::ostream &) const =0
Write the grid topology to a stream. This will write only the grid structure, not the actual data buf...
static std::string gridClassToMenuName(GridClass)
Return a formatted string version of the grid class.
virtual void writeBuffers(std::ostream &) const =0
Write out all data buffers for this grid.
typename tree::ValueAccessor< TreeType > AccessorType
Definition: Grid.h:1140
ValueOffCIter cbeginValueOff() const
Return an iterator over all of this grid's inactive values (tile and voxel).
Definition: Grid.h:768
void clear() override
Empty this grid, so that all voxels become inactive background voxels.
Definition: Grid.h:730
GridCPtrVec::iterator GridCPtrVecIter
Definition: Grid.h:515
typename TreeType::Ptr TreePtrType
Definition: Grid.h:1131
Grid()
Construct a new grid with background value zero.
Definition: Grid.h:1256
virtual void readTopology(std::istream &)=0
Read the grid topology from a stream. This will read only the grid structure, not the actual data buf...
bool hasUniformVoxels() const
Return true if the voxels in world space are uniformly sized cubes.
Definition: Grid.h:434
GridType::Ptr createLevelSet(Real voxelSize=1.0, Real halfWidth=LEVEL_SET_HALF_WIDTH)
Create a new grid of type GridType classified as a "Level Set", i.e., a narrow-band level set.
Definition: Grid.h:1762
typename NonConstTreeType::Ptr NonConstTreePtrType
Definition: Grid.h:1133
GridPtrVec::iterator GridPtrVecIter
Definition: Grid.h:510
uint64_t Index64
Definition: openvdb/Types.h:31
TreeBase::ConstPtr constBaseTreePtr() const override
Return a pointer to this grid's tree, which might be shared with other grids. The pointer is guarante...
Definition: Grid.h:898
virtual Index64 memUsage() const =0
Return the number of bytes of memory used by this grid.
static const char *const META_FILE_DELAYED_LOAD
Definition: Grid.h:361
void writeTransform(std::ostream &os) const
Write out the transform for this grid.
Definition: Grid.h:471
SharedPtr< const Grid > ConstPtr
Definition: Grid.h:575
ConstPtr copyReplacingMetadataAndTransform(const MetaMap &meta, math::Transform::Ptr xform) const
Return a new grid of the same type as this grid whose tree is shared with this grid and whose transfo...
Definition: Grid.h:1385
ValueAllCIter cbeginValueAll() const
Return an iterator over all of this grid's values (tile and voxel).
Definition: Grid.h:774
void newTree() override
Associate a new, empty tree with this grid, in place of its existing tree.
Definition: Grid.h:1484
static const TreeType & constTree(const TreeType &t)
Definition: Grid.h:1091
Metafunction that specifies whether a given leaf node, tree, or grid type requires multiple passes to...
Definition: Grid.h:1168
ValueOnIter beginValueOn()
Return an iterator over all of this grid's active values (tile and voxel).
Definition: Grid.h:758
const ValueType & background() const
Return this grid's background value.
Definition: Grid.h:725
VecType
Definition: openvdb/Types.h:343
static TreeType & tree(TreeType &t)
Definition: Grid.h:1115
typename _TreeType::ConstPtr ConstTreePtrType
Definition: Grid.h:579
This adapter allows code that is templated on a Tree type to accept either a Tree type or a Grid type...
Definition: Grid.h:1069
TreeBase::Ptr baseTreePtr()
Return a pointer to this grid's tree, which might be shared with other grids. The pointer is guarante...
Definition: Grid.h:1238
void clipGrid(const BBoxd &)
Clip this grid to the given world-space bounding box.
ConstPtr copyReplacingTransform(math::Transform::Ptr xform) const
Return a new grid of the same type as this grid whose tree is shared with this grid,...
Definition: Grid.h:1378
Name valueType() const override
Return the name of the type of a voxel's value (e.g., "float" or "vec3d").
Definition: Grid.h:717
typename tree::ValueAccessor< NonConstTreeType > NonConstAccessorType
Definition: Grid.h:1083
void fill(const CoordBBox &bbox, const ValueType &value, bool active=true)
Set all voxels within a given axis-aligned box to a constant value.
Definition: Grid.h:1503
TreeType & tree()
Return a reference to this grid's tree, which might be shared with other grids.
Definition: Grid.h:908
Ptr copyWithNewTree() const
Return a new grid of the same type as this grid whose metadata and transform are deep copies of this ...
Definition: Grid.h:1404
typename _TreeType::ValueType ValueType
Definition: Grid.h:580
typename tree::ValueAccessor< TreeType > AccessorType
Definition: Grid.h:1111
typename tree::ValueAccessor< NonConstTreeType > NonConstAccessorType
Definition: Grid.h:1113
typename tree::ValueAccessor< const _TreeType, false > ConstUnsafeAccessor
Definition: Grid.h:593
Vec3< double > Vec3d
Definition: Vec3.h:662
static bool isRegistered()
Return true if this grid type is registered.
Definition: Grid.h:970
static TreeType & tree(GridType &g)
Definition: Grid.h:1145
static void unregisterGrid(const Name &type)
Remove a grid type from the registry.
SharedPtr< const GridBase > ConstPtr
Definition: Grid.h:81
static const TreeType & tree(const TreeType &t)
Definition: Grid.h:1147
virtual void print(std::ostream &=std::cout, int verboseLevel=1) const =0
Output a human-readable description of this grid.
static TreeType & tree(TreeType &t)
Definition: Grid.h:1085
static const char *const META_GRID_CREATOR
Definition: Grid.h:351
ConstTreePtrType constTreePtr() const
Return a pointer to this grid's tree, which might be shared with other grids. The pointer is guarante...
Definition: Grid.h:897
std::set< GridBase::Ptr > GridPtrSet
Definition: Grid.h:519
static const TreeType & constTree(GridType &g)
Definition: Grid.h:1120
GridCPtrSet::const_iterator GridCPtrSetCIter
Definition: Grid.h:526
bool empty() const override
Return true if this grid contains only inactive background voxels.
Definition: Grid.h:728
static const TreeType & constTree(const GridType &g)
Definition: Grid.h:1092
std::set< GridBase::ConstPtr > GridCPtrSet
Definition: Grid.h:524
void topologyDifference(const Grid< OtherTreeType > &other)
Difference this grid's set of active values with the active values of the other grid,...
Definition: Grid.h:1559
void writeTopology(std::ostream &) const override
Write the grid topology to a stream. This will write only the grid structure, not the actual data buf...
Definition: Grid.h:1612
virtual GridBase::ConstPtr copyGridReplacingMetadataAndTransform(const MetaMap &meta, math::Transform::Ptr xform) const =0
Return a new grid of the same type as this grid whose tree is shared with this grid and whose transfo...
GridType::Ptr deepCopyTypedGrid(const GridBase &grid)
Return a pointer to a deep copy of the given grid, provided that the grid's concrete type is GridType...
Definition: Grid.h:1053
~GridBase() override
Definition: Grid.h:86
bool apply(OpT &) const
If this grid resolves to one of the listed grid types, invoke the given functor on the resolved grid.
Definition: Grid.h:1807
math::Transform::ConstPtr constTransformPtr() const
Return a pointer to this grid's transform, which might be shared with other grids.
Definition: Grid.h:403
typename TreeType::ValueType ValueType
Definition: Grid.h:1139
virtual GridBase::ConstPtr copyGridReplacingTransform(math::Transform::Ptr xform) const =0
Return a new grid of the same type as this grid whose tree is shared with this grid,...
static TreeType & tree(GridType &g)
Definition: Grid.h:1086
_TreeType TreeType
Definition: Grid.h:577
Definition: openvdb/Exceptions.h:64
virtual void clip(const CoordBBox &)=0
Clip this grid to the given index-space bounding box.
static std::string vecTypeToString(VecType)
Return the metadata string value for the given type of vector data.
Mat3< Type1 > cwiseAdd(const Mat3< Type1 > &m, const Type2 s)
Definition: Mat3.h:813
static const char *const META_FILE_BBOX_MAX
Definition: Grid.h:357
void readBuffers(std::istream &) override
Read all data buffers for this grid.
Definition: Grid.h:1620
#define OPENVDB_USE_VERSION_NAMESPACE
Definition: version.h:147
typename tree::ValueAccessor< TreeType > AccessorType
Definition: Grid.h:1081
void readTopology(std::istream &) override
Read the grid topology from a stream. This will read only the grid structure, not the actual data buf...
Definition: Grid.h:1604
typename GridType::Ptr GridPtrType
Definition: Grid.h:1107
GridBase()
Initialize with an identity linear transform.
Definition: Grid.h:481
typename GridType::ConstPtr ConstGridPtrType
Definition: Grid.h:1109
void addStatsMetadata()
Add metadata to this grid comprising the current values of statistics like the active voxel count and...
GridBase::ConstPtr copyGridReplacingTransform(math::Transform::Ptr xform) const override
Return a new grid of the same type as this grid whose tree is shared with this grid,...
Definition: Grid.h:1436
GridPtrVec::const_iterator GridPtrVecCIter
Definition: Grid.h:511
ValueConverter<T>::Type is the type of a grid having the same hierarchy as this grid but a different ...
Definition: Grid.h:602
void clearGridClass()
Remove the setting specifying the class of this grid's volumetric data.
virtual void setTree(TreeBase::Ptr)=0
Associate the given tree with this grid, in place of its existing tree.
void sparseFill(const CoordBBox &bbox, const ValueType &value, bool active=true)
Set all voxels within a given axis-aligned box to a constant value.
Definition: Grid.h:1495
Definition: LeafBuffer.h:41
virtual void clear()=0
Empty this grid, setting all voxels to the background.
static const TreeType & tree(const GridType &g)
Definition: Grid.h:1148
typename GridType::ConstPtr ConstGridPtrType
Definition: Grid.h:1138
void clearVectorType()
Remove the setting specifying the type of vector data stored in this grid.
typename NonConstTreeType::Ptr NonConstTreePtrType
Definition: Grid.h:1074
void clip(const CoordBBox &) override
Clip this grid to the given index-space bounding box.
Definition: Grid.h:1525
typename std::remove_const< ToType >::type Type
Definition: openvdb/Types.h:299
const TreeBase & baseTree() const
Return a reference to this grid's tree, which might be shared with other grids.
Definition: Grid.h:187
typename TreeType::ConstPtr ConstTreePtrType
Definition: Grid.h:1132
static const char *const META_SAVE_HALF_FLOAT
Definition: Grid.h:353
virtual GridBase::Ptr deepCopyGrid() const =0
Return a new grid whose metadata, transform and tree are deep copies of this grid's.
@ OPENVDB_FILE_VERSION_MULTIPASS_IO
Definition: version.h:191
typename NonConstTreeType::Ptr NonConstTreePtrType
Definition: Grid.h:1104
const math::Transform & constTransform() const
Return a pointer to this grid's transform, which might be shared with other grids.
Definition: Grid.h:412
std::string getCreator() const
Return the user-specified description of this grid's creator.
GridPtrT findGridByName(const std::map< KeyT, GridPtrT > &container, const Name &name)
Return the first grid in the given map whose name is name.
Definition: Grid.h:552
static const TreeType & constTree(const TreeType &t)
Definition: Grid.h:1121
Ptr copy()
Return a new grid of the same type as this grid whose metadata and transform are deep copies of this ...
Definition: Grid.h:1396
double Real
Definition: openvdb/Types.h:38
static const TreeType & constTree(TreeType &t)
Definition: Grid.h:1089
#define OPENVDB_VERSION_NAME
The version namespace name for this library version.
Definition: version.h:95
SharedPtr< Grid > Ptr
Definition: Grid.h:574
typename _TreeType::Ptr TreePtrType
Definition: Grid.h:578
Vec3d voxelSize() const
Return the size of this grid's voxels.
Definition: Grid.h:429
virtual bool empty() const =0
Return true if this grid contains only background voxels.
typename TreeType::ValueType ValueType
Definition: Grid.h:1080
GridBase(GridBase &other, ShallowCopy)
Copy another grid's metadata but share its transform.
Definition: Grid.h:493
MergePolicy
Definition: openvdb/Types.h:366
static const char *const META_GRID_NAME
Definition: Grid.h:352
static void registerGrid()
Register this grid type along with a factory function.
Definition: Grid.h:972
math::Transform::ConstPtr transformPtr() const
Return a pointer to this grid's transform, which might be shared with other grids.
Definition: Grid.h:402
static const TreeType & constTree(const GridType &g)
Definition: Grid.h:1153
@ MERGE_ACTIVE_STATES
Definition: openvdb/Types.h:367
static const char *const META_FILE_VOXEL_COUNT
Definition: Grid.h:360
static Ptr createGrid(const Name &type)
Create a new grid of the given (registered) type.
OPENVDB_API SharedPtr< StreamMetadata > getStreamMetadataPtr(std::ios_base &)
Return a shared pointer to an object that stores metadata (file format, compression scheme,...
static Name gridType()
Return the name of this type of grid.
Definition: Grid.h:714
GridBase::Ptr copyGrid() override
Return a new grid of the same type as this grid whose metadata is a deep copy of this grid's and whos...
Definition: Grid.h:1414
typename tree::ValueAccessor< const TreeType > ConstAccessorType
Definition: Grid.h:1112
SharedPtr< GridCPtrVec > GridCPtrVecPtr
Definition: Grid.h:517
static const char *const META_FILE_BBOX_MIN
Definition: Grid.h:356
typename GridType::Ptr GridPtrType
Definition: Grid.h:1136
SharedPtr< GridCPtrSet > GridCPtrSetPtr
Definition: Grid.h:527
static const char *const META_GRID_CLASS
Definition: Grid.h:350
void pruneGrid(float tolerance=0.0) override
Reduce the memory footprint of this grid by increasing its sparseness.
Definition: Grid.h:1517
~Grid() override
Definition: Grid.h:641
_TreeType TreeType
Definition: Grid.h:1070
static Ptr create()
Return a new grid with background value zero.
Definition: Grid.h:1321
ValueAllIter beginValueAll()
Return an iterator over all of this grid's values (tile and voxel).
Definition: Grid.h:770
VecType getVectorType() const
Return the type of vector data (invariant, covariant, etc.) stored in this grid, assuming that this g...
GridBase::Ptr deepCopyGrid() const override
Return a new grid whose metadata, transform and tree are deep copies of this grid's.
Definition: Grid.h:706
Definition: openvdb/Exceptions.h:65
std::shared_ptr< T > SharedPtr
Definition: openvdb/Types.h:92
static std::string vecTypeExamples(VecType)
static const char *const META_IS_LOCAL_SPACE
Definition: Grid.h:354
virtual GridBase::Ptr copyGridWithNewTree() const =0
Return a new grid of the same type as this grid whose metadata and transform are deep copies of this ...
ConstUnsafeAccessor getConstUnsafeAccessor() const
Return an unsafe accessor that provides random read-only access to this grid's voxels.
Definition: Grid.h:755
void topologyIntersection(const Grid< OtherTreeType > &other)
Intersect this grid's set of active values with the active values of the other grid,...
Definition: Grid.h:1550
virtual Name type() const =0
Return the name of this grid's type.
Definition: openvdb/Exceptions.h:13
typename tree::ValueAccessor< NonConstTreeType > NonConstAccessorType
Definition: Grid.h:1142
typename tree::ValueAccessor< const TreeType > ConstAccessorType
Definition: Grid.h:1141
CoordBBox evalActiveVoxelBoundingBox() const override
Return the axis-aligned bounding box of all active voxels.
Definition: Grid.h:1578
static void unregisterGrid()
Remove this grid type from the registry.
Definition: Grid.h:981
typename tree::ValueAccessor< _TreeType, false > UnsafeAccessor
Definition: Grid.h:592
typename GridType::Ptr GridPtrType
Definition: Grid.h:1077
Tag dispatch class that distinguishes shallow copy constructors from deep copy constructors.
Definition: openvdb/Types.h:539
virtual void readBuffers(std::istream &, const CoordBBox &)=0
Read all of this grid's data buffers that intersect the given index-space bounding box.
typename std::remove_const< TreeType >::type NonConstTreeType
Definition: Grid.h:1130
typename TreeType::ConstPtr ConstTreePtrType
Definition: Grid.h:1073
virtual Coord evalActiveVoxelDim() const =0
Return the dimensions of the axis-aligned bounding box of all active voxels.
virtual GridBase::ConstPtr copyGrid() const =0
Return a new grid of the same type as this grid whose metadata is a deep copy of this grid's and whos...
GridCPtrVec::const_iterator GridCPtrVecCIter
Definition: Grid.h:516
void setName(const std::string &)
Specify a name for this grid.
static void clearRegistry()
Clear the grid type registry.
typename _TreeType::ValueOffIter ValueOffIter
Definition: Grid.h:585
Grid< typename TreePtrType::element_type >::Ptr createGrid(TreePtrType)
Create a new grid of the appropriate type that wraps the given tree.
Definition: Grid.h:1753
UnsafeAccessor getUnsafeAccessor()
Return an unsafe accessor that provides random read and write access to this grid's voxels.
Definition: Grid.h:743
Vec3d worldToIndex(const Vec3d &xyz) const
Apply the inverse of this grid's transform to the given coordinates.
Definition: Grid.h:440
GridBase::Ptr copyGridWithNewTree() const override
Return a new grid of the same type as this grid whose metadata and transform are deep copies of this ...
Definition: Grid.h:1452
void readNonresidentBuffers() const override
Read all of this grid's data buffers that are not yet resident in memory (because delayed loading is ...
Definition: Grid.h:1665
static const TreeType & constTree(const GridType &g)
Definition: Grid.h:1122
Vec3d indexToWorld(const Coord &ijk) const
Apply this grid's transform to the given coordinates.
Definition: Grid.h:438
const TreeBase & constBaseTree() const
Return a reference to this grid's tree, which might be shared with other grids.
Definition: Grid.h:192
GridType::Ptr gridPtrCast(const GridBase::Ptr &grid)
Cast a generic grid pointer to a pointer to a grid of a concrete class.
Definition: Grid.h:1011
static GridClass stringToGridClass(const std::string &)
Return the class of volumetric data specified by the given string.
void setGridClass(GridClass)
Specify the class of volumetric data (level set, fog volume, etc.) that is stored in this grid.
static std::string vecTypeDescription(VecType)
Return a string describing how the given type of vector data is affected by transformations (e....
Index64 memUsage() const override
Definition: Grid.h:884
static const char *const META_FILE_COMPRESSION
Definition: Grid.h:358
SharedPtr< GridBase > Ptr
Definition: Grid.h:80
void setVectorType(VecType)
Specify the type of vector data (invariant, covariant, etc.) stored in this grid, assuming that this ...
typename tree::ValueAccessor< const TreeType > ConstAccessorType
Definition: Grid.h:1082
static TreeType & tree(GridType &g)
Definition: Grid.h:1116
Base class for typed trees.
Definition: Tree.h:36
ConstAccessor getConstAccessor() const
Return an accessor that provides random read-only access to this grid's voxels.
Definition: Grid.h:747
GridNamePred(const Name &_name)
Definition: Grid.h:533
typename TreeType::ConstPtr ConstTreePtrType
Definition: Grid.h:1103
#define OPENVDB_LOG_WARN(message)
Log a warning message of the form 'someVar << "some text" << ...'.
Definition: logging.h:253