4#ifndef OPENVDB_GRID_HAS_BEEN_INCLUDED
5#define OPENVDB_GRID_HAS_BEEN_INCLUDED
28template<
typename>
class Grid;
35template<
typename Gr
idType>
36inline typename GridType::Ptr
createGrid(
const typename GridType::ValueType& background);
42template<
typename Gr
idType>
50template<
typename TreePtrType>
68template<
typename Gr
idType>
102#if OPENVDB_ABI_VERSION_NUMBER >= 7
147 template<
typename Gr
idType>
148 bool isType()
const {
return (this->type() == GridType::gridType()); }
155 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>
178#if OPENVDB_ABI_VERSION_NUMBER >= 8
266 template<
typename Gr
idTypeListT,
typename OpT>
inline bool apply(OpT&)
const;
267 template<
typename Gr
idTypeListT,
typename OpT>
inline bool apply(OpT&);
268 template<
typename Gr
idTypeListT,
typename OpT>
inline bool apply(
const OpT&)
const;
269 template<
typename Gr
idTypeListT,
typename OpT>
inline bool apply(
const OpT&);
434 Vec3d
voxelSize()
const {
return transform().voxelSize(); }
437 Vec3d
voxelSize(
const Vec3d& xyz)
const {
return transform().voxelSize(xyz); }
441 Vec3d
indexToWorld(
const Vec3d& xyz)
const {
return transform().indexToWorld(xyz); }
445 Vec3d
worldToIndex(
const Vec3d& xyz)
const {
return transform().worldToIndex(xyz); }
479 virtual void print(std::ostream& = std::cout,
int verboseLevel = 1)
const = 0;
486 GridBase(): mTransform(math::Transform::createLinearTransform()) {}
488#if OPENVDB_ABI_VERSION_NUMBER >= 7
544template<
typename Gr
idPtrContainerT>
545inline typename GridPtrContainerT::value_type
548 using GridPtrT =
typename GridPtrContainerT::value_type;
549 typename GridPtrContainerT::const_iterator it =
550 std::find_if(container.begin(), container.end(),
GridNamePred(name));
551 return (it == container.end() ? GridPtrT() : *it);
555template<
typename KeyT,
typename Gr
idPtrT>
559 using GridPtrMapT = std::map<KeyT, GridPtrT>;
560 for (
typename GridPtrMapT::const_iterator it = container.begin(), end = container.end();
563 const GridPtrT& grid = it->second;
564 if (grid && grid->getName() == name)
return grid;
575template<
typename _TreeType>
606 template<
typename OtherValueType>
638 template<
typename OtherTreeType>
662 Ptr copyWithNewTree()
const;
678#if OPENVDB_ABI_VERSION_NUMBER >= 7
717 Name type()
const override {
return this->gridType(); }
733 bool empty()
const override {
return tree().empty(); }
735 void clear()
override { tree().clear(); }
794 void sparseFill(
const CoordBBox& bbox,
const ValueType&
value,
bool active =
true);
803 void fill(
const CoordBBox& bbox,
const ValueType&
value,
bool active =
true);
811 void denseFill(
const CoordBBox& bbox,
const ValueType&
value,
bool active =
true);
814 void pruneGrid(
float tolerance = 0.0)
override;
842 template<
typename OtherTreeType>
857 template<
typename OtherTreeType>
870 template<
typename OtherTreeType>
881 CoordBBox evalActiveVoxelBoundingBox()
const override;
883 Coord evalActiveVoxelDim()
const override;
885 void evalMinMax(ValueType& minVal, ValueType& maxVal)
const;
907#if OPENVDB_ABI_VERSION_NUMBER >= 8
908 bool isTreeUnique() const final;
910 bool isTreeUnique()
const;
936 void newTree()
override;
946 void readTopology(std::istream&)
override;
949 void writeTopology(std::ostream&)
const override;
952 void readBuffers(std::istream&)
override;
954 void readBuffers(std::istream&,
const CoordBBox&)
override;
960 void readNonresidentBuffers()
const override;
962 void writeBuffers(std::ostream&)
const override;
965 void print(std::ostream& = std::cout,
int verboseLevel = 1)
const override;
972 static inline bool hasMultiPassIO();
989#if OPENVDB_ABI_VERSION_NUMBER >= 7
1011template<
typename Gr
idType>
1012inline typename GridType::Ptr
1015 return GridBase::grid<GridType>(grid);
1027template<
typename Gr
idType>
1028inline typename GridType::ConstPtr
1031 return GridBase::constGrid<GridType>(grid);
1044template<
typename Gr
idType>
1045inline typename GridType::Ptr
1048 if (!grid || !grid->isType<
GridType>())
return typename GridType::Ptr();
1049 return gridPtrCast<GridType>(grid->deepCopyGrid());
1053template<
typename Gr
idType>
1054inline typename GridType::Ptr
1069template<
typename _TreeType>
1099template<
typename _TreeType>
1128template<
typename _TreeType>
1169template<
typename LeafNodeType>
1175template<
typename RootNodeType>
1182template<
typename TreeType>
1191#if OPENVDB_ABI_VERSION_NUMBER >= 7
1200template<
typename Gr
idType>
1201inline typename GridType::Ptr
1206 if (
grid &&
grid->type() == GridType::gridType()) {
1207 return StaticPtrCast<GridType>(
grid);
1209 return typename GridType::Ptr();
1213template<
typename Gr
idType>
1214inline typename GridType::ConstPtr
1217 return ConstPtrCast<const GridType>(
1218 GridBase::grid<GridType>(ConstPtrCast<GridBase>(
grid)));
1222template<
typename Gr
idType>
1223inline typename GridType::ConstPtr
1226 return ConstPtrCast<const GridType>(GridBase::grid<GridType>(
grid));
1230template<
typename Gr
idType>
1231inline typename GridType::ConstPtr
1234 return ConstPtrCast<const GridType>(
1235 GridBase::grid<GridType>(ConstPtrCast<GridBase>(
grid)));
1257template<
typename TreeT>
1263template<
typename TreeT>
1269template<
typename TreeT>
1276#if OPENVDB_ABI_VERSION_NUMBER >= 7
1277template<
typename TreeT>
1287template<
typename TreeT>
1295template<
typename TreeT>
1296template<
typename OtherTreeType>
1299 mTree(new
TreeType(other.constTree()))
1304template<
typename TreeT>
1312template<
typename TreeT>
1321template<
typename TreeT>
1330template<
typename TreeT>
1334 return Ptr(
new Grid(background));
1339template<
typename TreeT>
1348template<
typename TreeT>
1359template<
typename TreeT>
1367#if OPENVDB_ABI_VERSION_NUMBER >= 7
1368template<
typename TreeT>
1373 this->constTransformPtr());
1374 TreePtrType treePtr = ConstPtrCast<TreeT>(this->constTreePtr());
1378template<
typename TreeT>
1382 return this->copyReplacingMetadataAndTransform(*
this, xform);
1385template<
typename TreeT>
1390 TreePtrType treePtr = ConstPtrCast<TreeT>(this->constTreePtr());
1396template<
typename TreeT>
1404template<
typename TreeT>
1414template<
typename TreeT>
1418 return this->copy();
1421template<
typename TreeT>
1425 return this->copy();
1428#if OPENVDB_ABI_VERSION_NUMBER >= 7
1429template<
typename TreeT>
1433 return this->copyReplacingMetadata(meta);
1436template<
typename TreeT>
1440 return this->copyReplacingTransform(xform);
1443template<
typename TreeT>
1448 return this->copyReplacingMetadataAndTransform(meta, xform);
1452template<
typename TreeT>
1456 return this->copyWithNewTree();
1463template<
typename TreeT>
1467 return mTree.use_count() == 1;
1471template<
typename TreeT>
1476 if (tree->type() != TreeType::treeType()) {
1478 + tree->type() +
" to a grid of type " + this->type());
1480 mTree = StaticPtrCast<TreeType>(tree);
1484template<
typename TreeT>
1488 mTree.reset(
new TreeType(this->background()));
1495template<
typename TreeT>
1499 tree().sparseFill(bbox,
value, active);
1503template<
typename TreeT>
1507 this->sparseFill(bbox,
value, active);
1510template<
typename TreeT>
1514 tree().denseFill(bbox,
value, active);
1517template<
typename TreeT>
1525template<
typename TreeT>
1532template<
typename TreeT>
1536 tree().merge(other.
tree(), policy);
1540template<
typename TreeT>
1541template<
typename OtherTreeType>
1545 tree().topologyUnion(other.
tree());
1549template<
typename TreeT>
1550template<
typename OtherTreeType>
1554 tree().topologyIntersection(other.
tree());
1558template<
typename TreeT>
1559template<
typename OtherTreeType>
1563 tree().topologyDifference(other.
tree());
1570template<
typename TreeT>
1574 tree().evalMinMax(minVal, maxVal);
1578template<
typename TreeT>
1583 tree().evalActiveVoxelBoundingBox(bbox);
1588template<
typename TreeT>
1593 const bool nonempty = tree().evalActiveVoxelDim(dim);
1594 return (nonempty ? dim :
Coord());
1604template<
typename TreeT>
1608 tree().readTopology(is, saveFloatAsHalf());
1612template<
typename TreeT>
1616 tree().writeTopology(os, saveFloatAsHalf());
1620template<
typename TreeT>
1625 tree().readBuffers(is, saveFloatAsHalf());
1627 uint16_t numPasses = 1;
1628 is.read(
reinterpret_cast<char*
>(&numPasses),
sizeof(uint16_t));
1631 for (uint16_t passIndex = 0; passIndex < numPasses; ++passIndex) {
1632 uint32_t pass = (uint32_t(numPasses) << 16) | uint32_t(passIndex);
1633 meta->setPass(pass);
1634 tree().readBuffers(is, saveFloatAsHalf());
1642template<
typename TreeT>
1647 tree().readBuffers(is, bbox, saveFloatAsHalf());
1649 uint16_t numPasses = 1;
1650 is.read(
reinterpret_cast<char*
>(&numPasses),
sizeof(uint16_t));
1653 for (uint16_t passIndex = 0; passIndex < numPasses; ++passIndex) {
1654 uint32_t pass = (uint32_t(numPasses) << 16) | uint32_t(passIndex);
1655 meta->setPass(pass);
1656 tree().readBuffers(is, saveFloatAsHalf());
1665template<
typename TreeT>
1669 tree().readNonresidentBuffers();
1673template<
typename TreeT>
1677 if (!hasMultiPassIO()) {
1678 tree().writeBuffers(os, saveFloatAsHalf());
1683 uint16_t numPasses = 1;
1684 meta->setCountingPasses(
true);
1686 tree().writeBuffers(os, saveFloatAsHalf());
1687 numPasses =
static_cast<uint16_t
>(meta->pass());
1688 os.write(
reinterpret_cast<const char*
>(&numPasses),
sizeof(uint16_t));
1689 meta->setCountingPasses(
false);
1692 for (uint16_t passIndex = 0; passIndex < numPasses; ++passIndex) {
1693 uint32_t pass = (uint32_t(numPasses) << 16) | uint32_t(passIndex);
1694 meta->setPass(pass);
1695 tree().writeBuffers(os, saveFloatAsHalf());
1702template<
typename TreeT>
1710template<
typename TreeT>
1714 tree().print(os, verboseLevel);
1716 if (metaCount() > 0) {
1717 os <<
"Additional metadata:" << std::endl;
1719 os <<
" " << it->first;
1721 const std::string
value = it->second->str();
1728 os <<
"Transform:" << std::endl;
1729 transform().print(os,
" ");
1737template<
typename Gr
idType>
1738inline typename GridType::Ptr
1741 return GridType::create(background);
1745template<
typename Gr
idType>
1746inline typename GridType::Ptr
1749 return GridType::create();
1753template<
typename TreePtrType>
1757 using TreeType =
typename TreePtrType::element_type;
1762template<
typename Gr
idType>
1763typename GridType::Ptr
1766 using ValueType =
typename GridType::ValueType;
1770 "level-set grids must be floating-point-valued");
1772 typename GridType::Ptr grid = GridType::create(
1773 static_cast<ValueType
>(voxelSize * halfWidth));
1787template<
typename OpT,
typename GridBaseT,
typename T,
typename ...Ts>
1788struct GridApplyImpl {
static bool apply(GridBaseT&, OpT&) {
return false; } };
1792template<
typename OpT,
typename GridBaseT,
typename GridT,
typename ...GridTs>
1793struct GridApplyImpl<OpT, GridBaseT, TypeList<GridT, GridTs...>>
1795 static bool apply(GridBaseT& grid, OpT& op)
1797 if (grid.template isType<GridT>()) {
1801 return GridApplyImpl<OpT, GridBaseT, TypeList<GridTs...>>::apply(grid, op);
1809template<
typename Gr
idTypeListT,
typename OpT>
1813 return internal::GridApplyImpl<OpT, const GridBase, GridTypeListT>::apply(*
this, op);
1816template<
typename Gr
idTypeListT,
typename OpT>
1820 return internal::GridApplyImpl<OpT, GridBase, GridTypeListT>::apply(*
this, op);
1823template<
typename Gr
idTypeListT,
typename OpT>
1827 return internal::GridApplyImpl<const OpT, const GridBase, GridTypeListT>::apply(*
this, op);
1830template<
typename Gr
idTypeListT,
typename OpT>
1834 return internal::GridApplyImpl<const OpT, GridBase, GridTypeListT>::apply(*
this, op);
ValueT value
Definition: GridBuilder.h:1287
Consolidated llvm types for most supported types.
Abstract base class for typed grids.
Definition: Grid.h:78
virtual Name valueType() const =0
Return the name of the type of a voxel's value (e.g., "float" or "vec3d").
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...
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...
virtual GridBase::ConstPtr copyGridReplacingMetadata(const MetaMap &meta) const =0
Return a new grid of the same type as this grid whose tree and transform is shared with this grid and...
static const char *const META_FILE_MEM_BYTES
Definition: Grid.h:364
Ptr(*)() GridFactory
Definition: Grid.h:83
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:1202
static const char *const META_FILE_BBOX_MAX
Definition: Grid.h:362
virtual void readBuffers(std::istream &)=0
Read all data buffers for this grid.
virtual void writeBuffers(std::ostream &) const =0
Write out all data buffers for this grid.
static std::string gridClassToMenuName(GridClass)
Return a formatted string version of the grid class.
bool hasUniformVoxels() const
Return true if the voxels in world space are uniformly sized cubes.
Definition: Grid.h:439
math::Transform::ConstPtr constTransformPtr() const
Return a pointer to this grid's transform, which might be shared with other grids.
Definition: Grid.h:408
void setSaveFloatAsHalf(bool)
Return this grid's user-specified name.
~GridBase() override
Definition: Grid.h:86
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,...
Vec3d indexToWorld(const Coord &ijk) const
Apply this grid's transform to the given coordinates.
Definition: Grid.h:443
Vec3d voxelSize() const
Return the size of this grid's voxels.
Definition: Grid.h:434
static std::string vecTypeDescription(VecType)
Return a string describing how the given type of vector data is affected by transformations (e....
const math::Transform & constTransform() const
Return a pointer to this grid's transform, which might be shared with other grids.
Definition: Grid.h:417
void setName(const std::string &)
Specify a name for this grid.
static const char *const META_FILE_DELAYED_LOAD
Definition: Grid.h:366
Vec3d indexToWorld(const Vec3d &xyz) const
Apply this grid's transform to the given coordinates.
Definition: Grid.h:441
void clearGridClass()
Remove the setting specifying the class of this grid's volumetric data.
virtual bool isTreeUnique() const =0
Return true if tree is not shared with another grid.
bool isType() const
Return true if this grid is of the same type as the template parameter.
Definition: Grid.h:148
static std::string vecTypeToString(VecType)
Return the metadata string value for the given type of vector data.
static const char *const META_IS_LOCAL_SPACE
Definition: Grid.h:359
Vec3d worldToIndex(const Vec3d &xyz) const
Apply the inverse of this grid's transform to the given coordinates.
Definition: Grid.h:445
SharedPtr< const GridBase > ConstPtr
Definition: Grid.h:81
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 ...
math::Transform & transform()
Return a reference to this grid's transform, which might be shared with other grids.
Definition: Grid.h:415
GridBase(GridBase &other, ShallowCopy)
Copy another grid's metadata but share its transform.
Definition: Grid.h:498
static const char *const META_SAVE_HALF_FLOAT
Definition: Grid.h:358
virtual void clear()=0
Empty this grid, setting all voxels to the background.
void setGridClass(GridClass)
Specify the class of volumetric data (level set, fog volume, etc.) that is stored in this grid.
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...
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
void addStatsMetadata()
Add metadata to this grid comprising the current values of statistics like the active voxel count and...
const TreeBase & baseTree() const
Return a reference to this grid's tree, which might be shared with other grids.
Definition: Grid.h:192
void clearVectorType()
Remove the setting specifying the type of vector data stored in this grid.
virtual void newTree()=0
Set a new tree with the same background value as the previous tree.
static const char *const META_FILE_COMPRESSION
Definition: Grid.h:363
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...
static std::string vecTypeExamples(VecType)
void clipGrid(const BBoxd &)
Clip this grid to the given world-space bounding box.
virtual CoordBBox evalActiveVoxelBoundingBox() const =0
static const char *const META_FILE_BBOX_MIN
Definition: Grid.h:361
virtual Index64 memUsage() const =0
Return the number of bytes of memory used by this grid.
void setVectorType(VecType)
Specify the type of vector data (invariant, covariant, etc.) stored in this grid, assuming that this ...
virtual Index64 activeVoxelCount() const =0
Return the number of active voxels.
static bool isRegistered(const Name &type)
Return true if the given grid type name is registered.
Vec3d voxelSize(const Vec3d &xyz) const
Return the size of this grid's voxel at position (x, y, z).
Definition: Grid.h:437
std::string getName() const
Return this grid's user-specified name.
virtual void print(std::ostream &=std::cout, int verboseLevel=1) const =0
Output a human-readable description of this grid.
void setTransform(math::Transform::Ptr)
Associate the given transform with this grid, in place of its existing transform.
Definition: Grid.h:1247
virtual void pruneGrid(float tolerance=0.0)=0
Reduce the memory footprint of this grid by increasing its sparseness either losslessly (tolerance = ...
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:1811
static GridType::ConstPtr constGrid(const GridBase::Ptr &)
Definition: Grid.h:1224
GridClass getGridClass() const
Return the class of volumetric data (level set, fog volume, etc.) that is stored in this grid.
static VecType stringToVecType(const std::string &)
static void unregisterGrid(const Name &type)
Remove a grid type from the registry.
virtual void readNonresidentBuffers() const =0
Read all of this grid's data buffers that are not yet resident in memory (because delayed loading is ...
static const char *const META_GRID_CREATOR
Definition: Grid.h:356
void readTransform(std::istream &is)
Read in the transform for this grid.
Definition: Grid.h:474
static const char *const META_GRID_NAME
Definition: Grid.h:357
static const char *const META_GRID_CLASS
Definition: Grid.h:355
GridBase(const GridBase &other)
Deep copy another grid's metadata and transform.
Definition: Grid.h:495
math::Transform::Ptr transformPtr()
Return a pointer to this grid's transform, which might be shared with other grids.
Definition: Grid.h:406
static const char *const META_VECTOR_TYPE
Definition: Grid.h:360
static GridClass stringToGridClass(const std::string &)
Return the class of volumetric data specified by the given string.
virtual Coord evalActiveVoxelDim() const =0
Return the dimensions of the axis-aligned bounding box of all active voxels.
void setCreator(const std::string &)
Provide a description of this grid's creator.
bool saveFloatAsHalf() const
Return true if this grid should be written out with floating-point voxel values (including components...
MetaMap::Ptr getStatsMetadata() const
Return a new MetaMap containing just the metadata that was added to this grid with addStatsMetadata.
const math::Transform & transform() const
Return a pointer to this grid's transform, which might be shared with other grids.
Definition: Grid.h:416
static std::string gridClassToString(GridClass)
Return the metadata string value for the given class of volumetric data.
virtual void clip(const CoordBBox &)=0
Clip this grid to the given index-space bounding box.
virtual Name type() const =0
Return the name of this grid's type.
TreeBase & baseTree()
Return a reference to this grid's tree, which might be shared with other grids.
Definition: Grid.h:187
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...
virtual void readBuffers(std::istream &, const CoordBBox &)=0
Read all of this grid's data buffers that intersect the given index-space bounding box.
const TreeBase & constBaseTree() const
Return a reference to this grid's tree, which might be shared with other grids.
Definition: Grid.h:197
static void clearRegistry()
Clear the grid type registry.
std::string getCreator() const
Return the user-specified description of this grid's creator.
void writeTransform(std::ostream &os) const
Write out the transform for this grid.
Definition: Grid.h:476
VecType getVectorType() const
Return the type of vector data (invariant, covariant, etc.) stored in this grid, assuming that this g...
static Ptr createGrid(const Name &type)
Create a new grid of the given (registered) type.
SharedPtr< GridBase > Ptr
Definition: Grid.h:80
static void registerGrid(const Name &type, GridFactory)
Register a grid type along with a factory function.
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:1240
virtual bool empty() const =0
Return true if this grid contains only background voxels.
static const char *const META_FILE_VOXEL_COUNT
Definition: Grid.h:365
virtual void setTree(TreeBase::Ptr)=0
Associate the given tree with this grid, in place of its existing tree.
virtual GridBase::Ptr deepCopyGrid() const =0
Return a new grid whose metadata, transform and tree are deep copies of this grid's.
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...
GridBase()
Initialize with an identity linear transform.
Definition: Grid.h:486
bool isInWorldSpace() const
math::Transform::ConstPtr transformPtr() const
Return a pointer to this grid's transform, which might be shared with other grids.
Definition: Grid.h:407
void setIsInWorldSpace(bool)
Specify whether this grid's voxel values are in world space or in local space.
Container class that associates a tree with a transform and metadata.
Definition: Grid.h:577
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:918
typename tree::ValueAccessor< const _TreeType, false > ConstUnsafeAccessor
Definition: Grid.h:598
typename _TreeType::Ptr TreePtrType
Definition: Grid.h:583
Grid()
Construct a new grid with background value zero.
Definition: Grid.h:1258
typename _TreeType::ValueOffCIter ValueOffCIter
Definition: Grid.h:591
void evalMinMax(ValueType &minVal, ValueType &maxVal) const
Return the minimum and maximum active values in this grid.
Definition: Grid.h:1572
typename tree::ValueAccessor< _TreeType, false > UnsafeAccessor
Definition: Grid.h:597
bool empty() const override
Return true if this grid contains only inactive background voxels.
Definition: Grid.h:733
typename _TreeType::ValueOffIter ValueOffIter
Definition: Grid.h:590
TreeType & tree()
Return a reference to this grid's tree, which might be shared with other grids.
Definition: Grid.h:917
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:1552
ValueOffCIter cbeginValueOff() const
Return an iterator over all of this grid's inactive values (tile and voxel).
Definition: Grid.h:773
void readBuffers(std::istream &) override
Read all data buffers for this grid.
Definition: Grid.h:1622
static Name gridType()
Return the name of this type of grid.
Definition: Grid.h:719
Index64 memUsage() const override
Definition: Grid.h:889
void writeBuffers(std::ostream &) const override
Write out all data buffers for this grid.
Definition: Grid.h:1675
static bool hasMultiPassIO()
Return true if grids of this type require multiple I/O passes to read and write data buffers.
Definition: Grid.h:1704
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:1380
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:1398
bool isTreeUnique() const final
Return true if tree is not shared with another grid.
Definition: Grid.h:1465
void pruneGrid(float tolerance=0.0) override
Reduce the memory footprint of this grid by increasing its sparseness.
Definition: Grid.h:1519
void clip(const CoordBBox &) override
Clip this grid to the given index-space bounding box.
Definition: Grid.h:1527
ValueAllCIter cbeginValueAll() const
Return an iterator over all of this grid's values (tile and voxel).
Definition: Grid.h:779
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:902
Coord evalActiveVoxelDim() const override
Return the dimensions of the axis-aligned bounding box of all active voxels.
Definition: Grid.h:1590
ValueOnCIter beginValueOn() const
Return an iterator over all of this grid's active values (tile and voxel).
Definition: Grid.h:765
typename tree::ValueAccessor< _TreeType, true > Accessor
Definition: Grid.h:595
void setTree(TreeBase::Ptr) override
Associate the given tree with this grid, in place of its existing tree.
Definition: Grid.h:1473
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:1406
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:1454
typename tree::ValueAccessor< const _TreeType, true > ConstAccessor
Definition: Grid.h:596
~Grid() override
Definition: Grid.h:646
Name type() const override
Return the name of this grid's type.
Definition: Grid.h:717
void print(std::ostream &=std::cout, int verboseLevel=1) const override
Output a human-readable description of this grid.
Definition: Grid.h:1712
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:1431
typename _TreeType::ValueAllCIter ValueAllCIter
Definition: Grid.h:593
Index64 activeVoxelCount() const override
Return the number of active voxels.
Definition: Grid.h:879
ConstAccessor getAccessor() const
Return an accessor that provides random read-only access to this grid's voxels.
Definition: Grid.h:750
GridBase::Ptr deepCopyGrid() const override
Return a new grid whose metadata, transform and tree are deep copies of this grid's.
Definition: Grid.h:711
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:1505
ValueOffCIter beginValueOff() const
Return an iterator over all of this grid's inactive values (tile and voxel).
Definition: Grid.h:771
UnsafeAccessor getUnsafeAccessor()
Return an unsafe accessor that provides random read and write access to this grid's voxels.
Definition: Grid.h:748
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:1416
typename _TreeType::ValueType ValueType
Definition: Grid.h:585
typename _TreeType::ConstPtr ConstTreePtrType
Definition: Grid.h:584
ValueOnIter beginValueOn()
Return an iterator over all of this grid's active values (tile and voxel).
Definition: Grid.h:763
typename _TreeType::ValueOnCIter ValueOnCIter
Definition: Grid.h:589
SharedPtr< const Grid > ConstPtr
Definition: Grid.h:580
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:1606
static void registerGrid()
Register this grid type along with a factory function.
Definition: Grid.h:981
ValueOnCIter cbeginValueOn() const
Return an iterator over all of this grid's active values (tile and voxel).
Definition: Grid.h:767
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:1387
static bool isRegistered()
Return true if this grid type is registered.
Definition: Grid.h:979
typename _TreeType::ValueOnIter ValueOnIter
Definition: Grid.h:588
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:1667
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:1445
typename _TreeType::BuildType BuildType
Definition: Grid.h:586
ConstAccessor getConstAccessor() const
Return an accessor that provides random read-only access to this grid's voxels.
Definition: Grid.h:752
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:1512
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:901
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:1561
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:903
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:1438
CoordBBox evalActiveVoxelBoundingBox() const override
Return the axis-aligned bounding box of all active voxels.
Definition: Grid.h:1580
Ptr deepCopy() const
Return a new grid whose metadata, transform and tree are deep copies of this grid's.
Definition: Grid.h:709
const ValueType & background() const
Return this grid's background value.
Definition: Grid.h:730
ValueOffIter beginValueOff()
Return an iterator over all of this grid's inactive values (tile and voxel).
Definition: Grid.h:769
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:1497
TreePtrType treePtr()
Return a pointer to this grid's tree, which might be shared with other grids. The pointer is guarante...
Definition: Grid.h:900
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:1614
void merge(Grid &other, MergePolicy policy=MERGE_ACTIVE_STATES)
Efficiently merge another grid into this grid using one of several schemes.
Definition: Grid.h:1534
static void unregisterGrid()
Remove this grid type from the registry.
Definition: Grid.h:983
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:1370
typename _TreeType::ValueAllIter ValueAllIter
Definition: Grid.h:592
_TreeType TreeType
Definition: Grid.h:582
Name valueType() const override
Return the name of the type of a voxel's value (e.g., "float" or "vec3d").
Definition: Grid.h:722
void clear() override
Empty this grid, so that all voxels become inactive background voxels.
Definition: Grid.h:735
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:919
ValueAllCIter beginValueAll() const
Return an iterator over all of this grid's values (tile and voxel).
Definition: Grid.h:777
void newTree() override
Associate a new, empty tree with this grid, in place of its existing tree.
Definition: Grid.h:1486
Grid & operator=(const Grid &)=delete
Disallow assignment, since it wouldn't be obvious whether the copy is deep or shallow.
ConstUnsafeAccessor getConstUnsafeAccessor() const
Return an unsafe accessor that provides random read-only access to this grid's voxels.
Definition: Grid.h:760
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:1543
SharedPtr< Grid > Ptr
Definition: Grid.h:579
Accessor getAccessor()
Return an accessor that provides random read and write access to this grid's voxels.
Definition: Grid.h:740
ValueAllIter beginValueAll()
Return an iterator over all of this grid's values (tile and voxel).
Definition: Grid.h:775
static Ptr create()
Return a new grid with background value zero.
Definition: Grid.h:1323
Tag dispatch class that distinguishes shallow copy constructors from deep copy constructors.
Definition: Types.h:561
Definition: Exceptions.h:64
Definition: Exceptions.h:65
Axis-aligned bounding box of signed integer coordinates.
Definition: Coord.h:248
Signed (x, y, z) 32-bit integer coordinates.
Definition: Coord.h:25
Base class for typed trees.
Definition: Tree.h:37
SharedPtr< TreeBase > Ptr
Definition: Tree.h:39
SharedPtr< const TreeBase > ConstPtr
Definition: Tree.h:40
Definition: ValueAccessor.h:183
GridType
List of types that are currently supported by NanoVDB.
Definition: NanoVDB.h:216
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.
OPENVDB_API uint32_t getFormatVersion(std::ios_base &)
Return the file format version number associated with the given input stream.
OPENVDB_API SharedPtr< StreamMetadata > getStreamMetadataPtr(std::ios_base &)
Return a shared pointer to an object that stores metadata (file format, compression scheme,...
Mat3< Type1 > cwiseAdd(const Mat3< Type1 > &m, const Type2 s)
Definition: Mat3.h:820
std::string Name
Definition: Name.h:17
static const Real LEVEL_SET_HALF_WIDTH
Definition: Types.h:343
GridPtrVec::const_iterator GridPtrVecCIter
Definition: Grid.h:516
std::vector< GridBase::Ptr > GridPtrVec
Definition: Grid.h:514
SharedPtr< GridPtrSet > GridPtrSetPtr
Definition: Grid.h:527
GridCPtrSet::iterator GridCPtrSetIter
Definition: Grid.h:530
SharedPtr< GridCPtrSet > GridCPtrSetPtr
Definition: Grid.h:532
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:1055
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:557
Grid< typenameTreePtrType::element_type >::Ptr createGrid(TreePtrType)
Create a new grid of the appropriate type that wraps the given tree.
Definition: Grid.h:1755
double Real
Definition: Types.h:60
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:1029
GridClass
Definition: Types.h:335
@ GRID_LEVEL_SET
Definition: Types.h:337
std::set< GridBase::ConstPtr > GridCPtrSet
Definition: Grid.h:529
std::set< GridBase::Ptr > GridPtrSet
Definition: Grid.h:524
SharedPtr< GridCPtrVec > GridCPtrVecPtr
Definition: Grid.h:522
GridCPtrVec::iterator GridCPtrVecIter
Definition: Grid.h:520
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:1013
SharedPtr< GridPtrVec > GridPtrVecPtr
Definition: Grid.h:517
GridCPtrVec::const_iterator GridCPtrVecCIter
Definition: Grid.h:521
GridPtrSet::iterator GridPtrSetIter
Definition: Grid.h:525
GridCPtrSet::const_iterator GridCPtrSetCIter
Definition: Grid.h:531
GridPtrSet::const_iterator GridPtrSetCIter
Definition: Grid.h:526
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:1764
GridType::Ptr createGrid(const typename GridType::ValueType &background)
Create a new grid of type GridType with a given background value.
Definition: Grid.h:1739
uint64_t Index64
Definition: Types.h:53
tree::TreeBase TreeBase
Definition: Grid.h:26
GridPtrVec::iterator GridPtrVecIter
Definition: Grid.h:515
std::shared_ptr< T > SharedPtr
Definition: Types.h:114
MergePolicy
Definition: Types.h:388
@ MERGE_ACTIVE_STATES
Definition: Types.h:389
@ OPENVDB_FILE_VERSION_MULTIPASS_IO
Definition: version.h.in:249
VecType
Definition: Types.h:365
std::vector< GridBase::ConstPtr > GridCPtrVec
Definition: Grid.h:519
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: Types.h:146
openvdb::GridBase Grid
Definition: Utils.h:34
Definition: Exceptions.h:13
#define OPENVDB_THROW(exception, message)
Definition: Exceptions.h:74
typename std::remove_const< ToType >::type Type
Definition: Types.h:321
Predicate functor that returns true for grids that have a specified name.
Definition: Grid.h:537
Name name
Definition: Grid.h:540
GridNamePred(const Name &_name)
Definition: Grid.h:538
bool operator()(const GridBase::ConstPtr &g) const
Definition: Grid.h:539
ValueConverter<T>::Type is the type of a grid having the same hierarchy as this grid but a different ...
Definition: Grid.h:607
Metafunction that specifies whether a given leaf node, tree, or grid type requires multiple passes to...
Definition: Grid.h:1170
static TreeType & tree(GridType &g)
Definition: Grid.h:1118
typename std::remove_const< TreeType >::type NonConstTreeType
Definition: Grid.h:1103
typename TreeType::ValueType ValueType
Definition: Grid.h:1112
static const TreeType & constTree(GridType &g)
Definition: Grid.h:1122
typename tree::ValueAccessor< NonConstTreeType > NonConstAccessorType
Definition: Grid.h:1115
typename tree::ValueAccessor< const TreeType > ConstAccessorType
Definition: Grid.h:1114
static const TreeType & tree(const GridType &g)
Definition: Grid.h:1120
typename NonConstTreeType::Ptr NonConstTreePtrType
Definition: Grid.h:1106
typename TreeType::ConstPtr ConstTreePtrType
Definition: Grid.h:1105
static TreeType & tree(TreeType &t)
Definition: Grid.h:1117
static const TreeType & constTree(const GridType &g)
Definition: Grid.h:1124
typename GridType::Ptr GridPtrType
Definition: Grid.h:1109
static const TreeType & tree(const TreeType &t)
Definition: Grid.h:1119
static const TreeType & constTree(TreeType &t)
Definition: Grid.h:1121
typename GridType::ConstPtr ConstGridPtrType
Definition: Grid.h:1111
typename TreeType::Ptr TreePtrType
Definition: Grid.h:1104
_TreeType TreeType
Definition: Grid.h:1102
static const TreeType & constTree(const TreeType &t)
Definition: Grid.h:1123
typename NonConstGridType::Ptr NonConstGridPtrType
Definition: Grid.h:1110
typename tree::ValueAccessor< TreeType > AccessorType
Definition: Grid.h:1113
static TreeType & tree(GridType &g)
Definition: Grid.h:1147
typename std::remove_const< TreeType >::type NonConstTreeType
Definition: Grid.h:1132
typename TreeType::ValueType ValueType
Definition: Grid.h:1141
static const TreeType & constTree(GridType &g)
Definition: Grid.h:1153
typename tree::ValueAccessor< NonConstTreeType > NonConstAccessorType
Definition: Grid.h:1144
typename tree::ValueAccessor< const TreeType > ConstAccessorType
Definition: Grid.h:1143
static const TreeType & tree(const GridType &g)
Definition: Grid.h:1150
static const TreeType & tree(const AccessorType &a)
Definition: Grid.h:1151
typename NonConstTreeType::Ptr NonConstTreePtrType
Definition: Grid.h:1135
typename TreeType::ConstPtr ConstTreePtrType
Definition: Grid.h:1134
static TreeType & tree(TreeType &t)
Definition: Grid.h:1146
static const TreeType & constTree(const GridType &g)
Definition: Grid.h:1155
typename GridType::Ptr GridPtrType
Definition: Grid.h:1138
static const TreeType & tree(const TreeType &t)
Definition: Grid.h:1149
static const TreeType & constTree(TreeType &t)
Definition: Grid.h:1152
static TreeType & tree(AccessorType &a)
Definition: Grid.h:1148
typename GridType::ConstPtr ConstGridPtrType
Definition: Grid.h:1140
typename TreeType::Ptr TreePtrType
Definition: Grid.h:1133
_TreeType TreeType
Definition: Grid.h:1131
static const TreeType & constTree(const TreeType &t)
Definition: Grid.h:1154
typename NonConstGridType::Ptr NonConstGridPtrType
Definition: Grid.h:1139
typename tree::ValueAccessor< TreeType > AccessorType
Definition: Grid.h:1142
This adapter allows code that is templated on a Tree type to accept either a Tree type or a Grid type...
Definition: Grid.h:1071
static TreeType & tree(GridType &g)
Definition: Grid.h:1088
typename std::remove_const< TreeType >::type NonConstTreeType
Definition: Grid.h:1073
typename TreeType::ValueType ValueType
Definition: Grid.h:1082
static const TreeType & constTree(GridType &g)
Definition: Grid.h:1092
typename tree::ValueAccessor< NonConstTreeType > NonConstAccessorType
Definition: Grid.h:1085
typename tree::ValueAccessor< const TreeType > ConstAccessorType
Definition: Grid.h:1084
static const TreeType & tree(const GridType &g)
Definition: Grid.h:1090
typename NonConstTreeType::Ptr NonConstTreePtrType
Definition: Grid.h:1076
typename TreeType::ConstPtr ConstTreePtrType
Definition: Grid.h:1075
static TreeType & tree(TreeType &t)
Definition: Grid.h:1087
static const TreeType & constTree(const GridType &g)
Definition: Grid.h:1094
typename GridType::Ptr GridPtrType
Definition: Grid.h:1079
static const TreeType & tree(const TreeType &t)
Definition: Grid.h:1089
static const TreeType & constTree(TreeType &t)
Definition: Grid.h:1091
typename GridType::ConstPtr ConstGridPtrType
Definition: Grid.h:1081
typename TreeType::Ptr TreePtrType
Definition: Grid.h:1074
_TreeType TreeType
Definition: Grid.h:1072
static const TreeType & constTree(const TreeType &t)
Definition: Grid.h:1093
typename NonConstGridType::Ptr NonConstGridPtrType
Definition: Grid.h:1080
typename tree::ValueAccessor< TreeType > AccessorType
Definition: Grid.h:1083
#define OPENVDB_VERSION_NAME
The version namespace name for this library version.
Definition: version.h.in:116
#define OPENVDB_USE_VERSION_NAMESPACE
Definition: version.h.in:202