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>
145 template<
typename Gr
idType>
146 bool isType()
const {
return (this->type() == GridType::gridType()); }
153 template<
typename Gr
idType>
155 template<
typename Gr
idType>
157 template<
typename Gr
idType>
158 static typename GridType::ConstPtr constGrid(
const GridBase::Ptr&);
159 template<
typename Gr
idType>
176#if OPENVDB_ABI_VERSION_NUMBER >= 8
264 template<
typename Gr
idTypeListT,
typename OpT>
inline bool apply(OpT&)
const;
265 template<
typename Gr
idTypeListT,
typename OpT>
inline bool apply(OpT&);
266 template<
typename Gr
idTypeListT,
typename OpT>
inline bool apply(
const OpT&)
const;
267 template<
typename Gr
idTypeListT,
typename OpT>
inline bool apply(
const OpT&);
432 Vec3d
voxelSize()
const {
return transform().voxelSize(); }
435 Vec3d
voxelSize(
const Vec3d& xyz)
const {
return transform().voxelSize(xyz); }
439 Vec3d
indexToWorld(
const Vec3d& xyz)
const {
return transform().indexToWorld(xyz); }
443 Vec3d
worldToIndex(
const Vec3d& xyz)
const {
return transform().worldToIndex(xyz); }
477 virtual void print(std::ostream& = std::cout,
int verboseLevel = 1)
const = 0;
484 GridBase(): mTransform(math::Transform::createLinearTransform()) {}
540template<
typename Gr
idPtrContainerT>
541inline typename GridPtrContainerT::value_type
544 using GridPtrT =
typename GridPtrContainerT::value_type;
545 typename GridPtrContainerT::const_iterator it =
546 std::find_if(container.begin(), container.end(),
GridNamePred(name));
547 return (it == container.end() ? GridPtrT() : *it);
551template<
typename KeyT,
typename Gr
idPtrT>
555 using GridPtrMapT = std::map<KeyT, GridPtrT>;
556 for (
typename GridPtrMapT::const_iterator it = container.begin(), end = container.end();
559 const GridPtrT& grid = it->second;
560 if (grid && grid->getName() == name)
return grid;
571template<
typename _TreeType>
602 template<
typename OtherValueType>
634 template<
typename OtherTreeType>
658 Ptr copyWithNewTree()
const;
711 Name type()
const override {
return this->gridType(); }
727 bool empty()
const override {
return tree().empty(); }
729 void clear()
override { tree().clear(); }
788 void sparseFill(
const CoordBBox& bbox,
const ValueType&
value,
bool active =
true);
797 void fill(
const CoordBBox& bbox,
const ValueType&
value,
bool active =
true);
805 void denseFill(
const CoordBBox& bbox,
const ValueType&
value,
bool active =
true);
808 void pruneGrid(
float tolerance = 0.0)
override;
836 template<
typename OtherTreeType>
851 template<
typename OtherTreeType>
864 template<
typename OtherTreeType>
875 CoordBBox evalActiveVoxelBoundingBox()
const override;
877 Coord evalActiveVoxelDim()
const override;
880tools::minMax(grid->tree()). Use threaded = false for serial execution")
881 void
evalMinMax(ValueType& minVal, ValueType& maxVal) const;
903#if OPENVDB_ABI_VERSION_NUMBER >= 8
904 bool isTreeUnique() const final;
906 bool isTreeUnique()
const;
932 void newTree()
override;
942 void readTopology(std::istream&)
override;
945 void writeTopology(std::ostream&)
const override;
948 void readBuffers(std::istream&)
override;
950 void readBuffers(std::istream&,
const CoordBBox&)
override;
956 void readNonresidentBuffers()
const override;
958 void writeBuffers(std::ostream&)
const override;
961 void print(std::ostream& = std::cout,
int verboseLevel = 1)
const override;
968 static inline bool hasMultiPassIO();
1005template<
typename Gr
idType>
1006inline typename GridType::Ptr
1009 return GridBase::grid<GridType>(grid);
1021template<
typename Gr
idType>
1022inline typename GridType::ConstPtr
1025 return GridBase::constGrid<GridType>(grid);
1038template<
typename Gr
idType>
1039inline typename GridType::Ptr
1042 if (!grid || !grid->isType<
GridType>())
return typename GridType::Ptr();
1043 return gridPtrCast<GridType>(grid->deepCopyGrid());
1047template<
typename Gr
idType>
1048inline typename GridType::Ptr
1063template<
typename _TreeType>
1093template<
typename _TreeType>
1122template<
typename _TreeType>
1163template<
typename LeafNodeType>
1169template<
typename RootNodeType>
1176template<
typename TreeType>
1192template<
typename Gr
idType>
1193inline typename GridType::Ptr
1198 if (
grid &&
grid->type() == GridType::gridType()) {
1199 return StaticPtrCast<GridType>(
grid);
1201 return typename GridType::Ptr();
1205template<
typename Gr
idType>
1206inline typename GridType::ConstPtr
1209 return ConstPtrCast<const GridType>(
1210 GridBase::grid<GridType>(ConstPtrCast<GridBase>(
grid)));
1214template<
typename Gr
idType>
1215inline typename GridType::ConstPtr
1218 return ConstPtrCast<const GridType>(GridBase::grid<GridType>(
grid));
1222template<
typename Gr
idType>
1223inline typename GridType::ConstPtr
1226 return ConstPtrCast<const GridType>(
1227 GridBase::grid<GridType>(ConstPtrCast<GridBase>(
grid)));
1249template<
typename TreeT>
1255template<
typename TreeT>
1261template<
typename TreeT>
1268template<
typename TreeT>
1277template<
typename TreeT>
1285template<
typename TreeT>
1286template<
typename OtherTreeType>
1289 mTree(new
TreeType(other.constTree()))
1294template<
typename TreeT>
1302template<
typename TreeT>
1311template<
typename TreeT>
1320template<
typename TreeT>
1324 return Ptr(
new Grid(background));
1329template<
typename TreeT>
1338template<
typename TreeT>
1349template<
typename TreeT>
1357template<
typename TreeT>
1362 this->constTransformPtr());
1363 TreePtrType treePtr = ConstPtrCast<TreeT>(this->constTreePtr());
1367template<
typename TreeT>
1371 return this->copyReplacingMetadataAndTransform(*
this, xform);
1374template<
typename TreeT>
1379 TreePtrType treePtr = ConstPtrCast<TreeT>(this->constTreePtr());
1384template<
typename TreeT>
1392template<
typename TreeT>
1402template<
typename TreeT>
1406 return this->copy();
1409template<
typename TreeT>
1413 return this->copy();
1416template<
typename TreeT>
1420 return this->copyReplacingMetadata(meta);
1423template<
typename TreeT>
1427 return this->copyReplacingTransform(xform);
1430template<
typename TreeT>
1435 return this->copyReplacingMetadataAndTransform(meta, xform);
1438template<
typename TreeT>
1442 return this->copyWithNewTree();
1449template<
typename TreeT>
1453 return mTree.use_count() == 1;
1457template<
typename TreeT>
1462 if (tree->type() != TreeType::treeType()) {
1464 + tree->type() +
" to a grid of type " + this->type());
1466 mTree = StaticPtrCast<TreeType>(tree);
1470template<
typename TreeT>
1474 mTree.reset(
new TreeType(this->background()));
1481template<
typename TreeT>
1485 tree().sparseFill(bbox,
value, active);
1489template<
typename TreeT>
1493 this->sparseFill(bbox,
value, active);
1496template<
typename TreeT>
1500 tree().denseFill(bbox,
value, active);
1503template<
typename TreeT>
1511template<
typename TreeT>
1518template<
typename TreeT>
1522 tree().merge(other.
tree(), policy);
1526template<
typename TreeT>
1527template<
typename OtherTreeType>
1531 tree().topologyUnion(other.
tree());
1535template<
typename TreeT>
1536template<
typename OtherTreeType>
1540 tree().topologyIntersection(other.
tree());
1544template<
typename TreeT>
1545template<
typename OtherTreeType>
1549 tree().topologyDifference(other.
tree());
1556template<
typename TreeT>
1561 tree().evalMinMax(minVal, maxVal);
1566template<
typename TreeT>
1571 tree().evalActiveVoxelBoundingBox(bbox);
1576template<
typename TreeT>
1581 const bool nonempty = tree().evalActiveVoxelDim(dim);
1582 return (nonempty ? dim :
Coord());
1592template<
typename TreeT>
1596 tree().readTopology(is, saveFloatAsHalf());
1600template<
typename TreeT>
1604 tree().writeTopology(os, saveFloatAsHalf());
1608template<
typename TreeT>
1613 tree().readBuffers(is, saveFloatAsHalf());
1615 uint16_t numPasses = 1;
1616 is.read(
reinterpret_cast<char*
>(&numPasses),
sizeof(uint16_t));
1619 for (uint16_t passIndex = 0; passIndex < numPasses; ++passIndex) {
1620 uint32_t pass = (uint32_t(numPasses) << 16) | uint32_t(passIndex);
1621 meta->setPass(pass);
1622 tree().readBuffers(is, saveFloatAsHalf());
1630template<
typename TreeT>
1635 tree().readBuffers(is, bbox, saveFloatAsHalf());
1637 uint16_t numPasses = 1;
1638 is.read(
reinterpret_cast<char*
>(&numPasses),
sizeof(uint16_t));
1641 for (uint16_t passIndex = 0; passIndex < numPasses; ++passIndex) {
1642 uint32_t pass = (uint32_t(numPasses) << 16) | uint32_t(passIndex);
1643 meta->setPass(pass);
1644 tree().readBuffers(is, saveFloatAsHalf());
1653template<
typename TreeT>
1657 tree().readNonresidentBuffers();
1661template<
typename TreeT>
1665 if (!hasMultiPassIO()) {
1666 tree().writeBuffers(os, saveFloatAsHalf());
1671 uint16_t numPasses = 1;
1672 meta->setCountingPasses(
true);
1674 tree().writeBuffers(os, saveFloatAsHalf());
1675 numPasses =
static_cast<uint16_t
>(meta->pass());
1676 os.write(
reinterpret_cast<const char*
>(&numPasses),
sizeof(uint16_t));
1677 meta->setCountingPasses(
false);
1680 for (uint16_t passIndex = 0; passIndex < numPasses; ++passIndex) {
1681 uint32_t pass = (uint32_t(numPasses) << 16) | uint32_t(passIndex);
1682 meta->setPass(pass);
1683 tree().writeBuffers(os, saveFloatAsHalf());
1690template<
typename TreeT>
1698template<
typename TreeT>
1702 tree().print(os, verboseLevel);
1704 if (metaCount() > 0) {
1705 os <<
"Additional metadata:" << std::endl;
1707 os <<
" " << it->first;
1709 const std::string
value = it->second->str();
1716 os <<
"Transform:" << std::endl;
1717 transform().print(os,
" ");
1725template<
typename Gr
idType>
1726inline typename GridType::Ptr
1729 return GridType::create(background);
1733template<
typename Gr
idType>
1734inline typename GridType::Ptr
1737 return GridType::create();
1741template<
typename TreePtrType>
1745 using TreeType =
typename TreePtrType::element_type;
1750template<
typename Gr
idType>
1751typename GridType::Ptr
1754 using ValueType =
typename GridType::ValueType;
1758 "level-set grids must be floating-point-valued");
1760 typename GridType::Ptr grid = GridType::create(
1761 static_cast<ValueType
>(voxelSize * halfWidth));
1771template<
typename Gr
idTypeListT,
typename OpT>
1775 return GridTypeListT::template apply<OpT&, const GridBase>(std::ref(op), *
this);
1778template<
typename Gr
idTypeListT,
typename OpT>
1782 return GridTypeListT::template apply<OpT&, GridBase>(std::ref(op), *
this);
1785template<
typename Gr
idTypeListT,
typename OpT>
1789 return GridTypeListT::template apply<const OpT&, const GridBase>(std::ref(op), *
this);
1792template<
typename Gr
idTypeListT,
typename OpT>
1796 return GridTypeListT::template apply<const OpT&, GridBase>(std::ref(op), *
this);
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:362
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:1194
static const char *const META_FILE_BBOX_MAX
Definition: Grid.h:360
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:437
math::Transform::ConstPtr constTransformPtr() const
Return a pointer to this grid's transform, which might be shared with other grids.
Definition: Grid.h:406
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:441
Vec3d voxelSize() const
Return the size of this grid's voxels.
Definition: Grid.h:432
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:415
void setName(const std::string &)
Specify a name for this grid.
static const char *const META_FILE_DELAYED_LOAD
Definition: Grid.h:364
Vec3d indexToWorld(const Vec3d &xyz) const
Apply this grid's transform to the given coordinates.
Definition: Grid.h:439
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:146
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:357
Vec3d worldToIndex(const Vec3d &xyz) const
Apply the inverse of this grid's transform to the given coordinates.
Definition: Grid.h:443
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:413
GridBase(GridBase &other, ShallowCopy)
Copy another grid's metadata but share its transform.
Definition: Grid.h:494
static const char *const META_SAVE_HALF_FLOAT
Definition: Grid.h:356
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:171
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:190
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:361
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:359
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:435
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:1239
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:1773
static GridType::ConstPtr constGrid(const GridBase::Ptr &)
Definition: Grid.h:1216
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:354
void readTransform(std::istream &is)
Read in the transform for this grid.
Definition: Grid.h:472
static const char *const META_GRID_NAME
Definition: Grid.h:355
static const char *const META_GRID_CLASS
Definition: Grid.h:353
GridBase(const GridBase &other)
Deep copy another grid's metadata and transform.
Definition: Grid.h:491
math::Transform::Ptr transformPtr()
Return a pointer to this grid's transform, which might be shared with other grids.
Definition: Grid.h:404
static const char *const META_VECTOR_TYPE
Definition: Grid.h:358
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:414
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:185
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:195
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:474
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:1232
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:363
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:484
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:405
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:573
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:914
typename tree::ValueAccessor< const _TreeType, false > ConstUnsafeAccessor
Definition: Grid.h:594
typename _TreeType::Ptr TreePtrType
Definition: Grid.h:579
Grid()
Construct a new grid with background value zero.
Definition: Grid.h:1250
typename _TreeType::ValueOffCIter ValueOffCIter
Definition: Grid.h:587
void evalMinMax(ValueType &minVal, ValueType &maxVal) const
Return the minimum and maximum active values in this grid.
Definition: Grid.h:1558
typename tree::ValueAccessor< _TreeType, false > UnsafeAccessor
Definition: Grid.h:593
bool empty() const override
Return true if this grid contains only inactive background voxels.
Definition: Grid.h:727
typename _TreeType::ValueOffIter ValueOffIter
Definition: Grid.h:586
TreeType & tree()
Return a reference to this grid's tree, which might be shared with other grids.
Definition: Grid.h:913
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:1538
ValueOffCIter cbeginValueOff() const
Return an iterator over all of this grid's inactive values (tile and voxel).
Definition: Grid.h:767
void readBuffers(std::istream &) override
Read all data buffers for this grid.
Definition: Grid.h:1610
static Name gridType()
Return the name of this type of grid.
Definition: Grid.h:713
void writeBuffers(std::ostream &) const override
Write out all data buffers for this grid.
Definition: Grid.h:1663
static bool hasMultiPassIO()
Return true if grids of this type require multiple I/O passes to read and write data buffers.
Definition: Grid.h:1692
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:1369
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:1386
bool isTreeUnique() const final
Return true if tree is not shared with another grid.
Definition: Grid.h:1451
void pruneGrid(float tolerance=0.0) override
Reduce the memory footprint of this grid by increasing its sparseness.
Definition: Grid.h:1505
void clip(const CoordBBox &) override
Clip this grid to the given index-space bounding box.
Definition: Grid.h:1513
ValueAllCIter cbeginValueAll() const
Return an iterator over all of this grid's values (tile and voxel).
Definition: Grid.h:773
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:898
Coord evalActiveVoxelDim() const override
Return the dimensions of the axis-aligned bounding box of all active voxels.
Definition: Grid.h:1578
ValueOnCIter beginValueOn() const
Return an iterator over all of this grid's active values (tile and voxel).
Definition: Grid.h:759
typename tree::ValueAccessor< _TreeType, true > Accessor
Definition: Grid.h:591
void setTree(TreeBase::Ptr) override
Associate the given tree with this grid, in place of its existing tree.
Definition: Grid.h:1459
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:1394
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:1440
typename tree::ValueAccessor< const _TreeType, true > ConstAccessor
Definition: Grid.h:592
~Grid() override
Definition: Grid.h:642
Name type() const override
Return the name of this grid's type.
Definition: Grid.h:711
void print(std::ostream &=std::cout, int verboseLevel=1) const override
Output a human-readable description of this grid.
Definition: Grid.h:1700
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:1418
typename _TreeType::ValueAllCIter ValueAllCIter
Definition: Grid.h:589
Index64 activeVoxelCount() const override
Return the number of active voxels.
Definition: Grid.h:873
ConstAccessor getAccessor() const
Return an accessor that provides random read-only access to this grid's voxels.
Definition: Grid.h:744
GridBase::Ptr deepCopyGrid() const override
Return a new grid whose metadata, transform and tree are deep copies of this grid's.
Definition: Grid.h:705
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:1491
ValueOffCIter beginValueOff() const
Return an iterator over all of this grid's inactive values (tile and voxel).
Definition: Grid.h:765
UnsafeAccessor getUnsafeAccessor()
Return an unsafe accessor that provides random read and write access to this grid's voxels.
Definition: Grid.h:742
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:1404
typename _TreeType::ValueType ValueType
Definition: Grid.h:581
typename _TreeType::ConstPtr ConstTreePtrType
Definition: Grid.h:580
ValueOnIter beginValueOn()
Return an iterator over all of this grid's active values (tile and voxel).
Definition: Grid.h:757
typename _TreeType::ValueOnCIter ValueOnCIter
Definition: Grid.h:585
SharedPtr< const Grid > ConstPtr
Definition: Grid.h:576
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:1594
static void registerGrid()
Register this grid type along with a factory function.
Definition: Grid.h:977
ValueOnCIter cbeginValueOn() const
Return an iterator over all of this grid's active values (tile and voxel).
Definition: Grid.h:761
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:1376
static bool isRegistered()
Return true if this grid type is registered.
Definition: Grid.h:975
typename _TreeType::ValueOnIter ValueOnIter
Definition: Grid.h:584
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:1655
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:1432
typename _TreeType::BuildType BuildType
Definition: Grid.h:582
ConstAccessor getConstAccessor() const
Return an accessor that provides random read-only access to this grid's voxels.
Definition: Grid.h:746
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:1498
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:897
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:1547
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:899
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:1425
CoordBBox evalActiveVoxelBoundingBox() const override
Return the axis-aligned bounding box of all active voxels.
Definition: Grid.h:1568
Ptr deepCopy() const
Return a new grid whose metadata, transform and tree are deep copies of this grid's.
Definition: Grid.h:703
const ValueType & background() const
Return this grid's background value.
Definition: Grid.h:724
ValueOffIter beginValueOff()
Return an iterator over all of this grid's inactive values (tile and voxel).
Definition: Grid.h:763
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:1483
TreePtrType treePtr()
Return a pointer to this grid's tree, which might be shared with other grids. The pointer is guarante...
Definition: Grid.h:896
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:1602
void merge(Grid &other, MergePolicy policy=MERGE_ACTIVE_STATES)
Efficiently merge another grid into this grid using one of several schemes.
Definition: Grid.h:1520
static void unregisterGrid()
Remove this grid type from the registry.
Definition: Grid.h:979
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:1359
typename _TreeType::ValueAllIter ValueAllIter
Definition: Grid.h:588
_TreeType TreeType
Definition: Grid.h:578
Name valueType() const override
Return the name of the type of a voxel's value (e.g., "float" or "vec3d").
Definition: Grid.h:716
void clear() override
Empty this grid, so that all voxels become inactive background voxels.
Definition: Grid.h:729
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:915
ValueAllCIter beginValueAll() const
Return an iterator over all of this grid's values (tile and voxel).
Definition: Grid.h:771
void newTree() override
Associate a new, empty tree with this grid, in place of its existing tree.
Definition: Grid.h:1472
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:754
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:1529
SharedPtr< Grid > Ptr
Definition: Grid.h:575
Accessor getAccessor()
Return an accessor that provides random read and write access to this grid's voxels.
Definition: Grid.h:734
ValueAllIter beginValueAll()
Return an iterator over all of this grid's values (tile and voxel).
Definition: Grid.h:769
static Ptr create()
Return a new grid with background value zero.
Definition: Grid.h:1313
Tag dispatch class that distinguishes shallow copy constructors from deep copy constructors.
Definition: Types.h:641
Definition: Exceptions.h:64
Definition: Exceptions.h:65
Axis-aligned bounding box of signed integer coordinates.
Definition: Coord.h:249
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
OPENVDB_AX_API 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::pair< ValueT, ValueT > evalMinMax(const PointDataTreeT &points, const std::string &attribute, const FilterT &filter=NullFilter())
Evaluates the minimum and maximum values of a point attribute.
Definition: PointStatistics.h:697
std::string Name
Definition: Name.h:17
static const Real LEVEL_SET_HALF_WIDTH
Definition: Types.h:422
GridPtrVec::const_iterator GridPtrVecCIter
Definition: Grid.h:512
std::vector< GridBase::Ptr > GridPtrVec
Definition: Grid.h:510
SharedPtr< GridPtrSet > GridPtrSetPtr
Definition: Grid.h:523
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:1007
GridCPtrSet::iterator GridCPtrSetIter
Definition: Grid.h:526
SharedPtr< GridCPtrSet > GridCPtrSetPtr
Definition: Grid.h:528
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:1023
Grid< typenameTreePtrType::element_type >::Ptr createGrid(TreePtrType)
Create a new grid of the appropriate type that wraps the given tree.
Definition: Grid.h:1743
double Real
Definition: Types.h:60
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:553
GridClass
Definition: Types.h:414
@ GRID_LEVEL_SET
Definition: Types.h:416
std::set< GridBase::ConstPtr > GridCPtrSet
Definition: Grid.h:525
std::set< GridBase::Ptr > GridPtrSet
Definition: Grid.h:520
SharedPtr< GridCPtrVec > GridCPtrVecPtr
Definition: Grid.h:518
GridCPtrVec::iterator GridCPtrVecIter
Definition: Grid.h:516
SharedPtr< GridPtrVec > GridPtrVecPtr
Definition: Grid.h:513
GridCPtrVec::const_iterator GridCPtrVecCIter
Definition: Grid.h:517
GridPtrSet::iterator GridPtrSetIter
Definition: Grid.h:521
GridCPtrSet::const_iterator GridCPtrSetCIter
Definition: Grid.h:527
GridPtrSet::const_iterator GridPtrSetCIter
Definition: Grid.h:522
@ OPENVDB_FILE_VERSION_MULTIPASS_IO
Definition: version.h.in:249
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:1752
GridType::Ptr createGrid(const typename GridType::ValueType &background)
Create a new grid of type GridType with a given background value.
Definition: Grid.h:1727
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:1049
uint64_t Index64
Definition: Types.h:53
tree::TreeBase TreeBase
Definition: Grid.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: Types.h:146
GridPtrVec::iterator GridPtrVecIter
Definition: Grid.h:511
std::shared_ptr< T > SharedPtr
Definition: Types.h:114
MergePolicy
Definition: Types.h:467
@ MERGE_ACTIVE_STATES
Definition: Types.h:468
VecType
Definition: Types.h:444
std::vector< GridBase::ConstPtr > GridCPtrVec
Definition: Grid.h:515
openvdb::GridBase Grid
Definition: Utils.h:34
Definition: Exceptions.h:13
#define OPENVDB_THROW(exception, message)
Definition: Exceptions.h:74
Predicate functor that returns true for grids that have a specified name.
Definition: Grid.h:533
Name name
Definition: Grid.h:536
GridNamePred(const Name &_name)
Definition: Grid.h:534
bool operator()(const GridBase::ConstPtr &g) const
Definition: Grid.h:535
ValueConverter<T>::Type is the type of a grid having the same hierarchy as this grid but a different ...
Definition: Grid.h:603
Metafunction that specifies whether a given leaf node, tree, or grid type requires multiple passes to...
Definition: Grid.h:1164
static TreeType & tree(GridType &g)
Definition: Grid.h:1112
typename std::remove_const< TreeType >::type NonConstTreeType
Definition: Grid.h:1097
typename TreeType::ValueType ValueType
Definition: Grid.h:1106
static const TreeType & constTree(GridType &g)
Definition: Grid.h:1116
typename tree::ValueAccessor< NonConstTreeType > NonConstAccessorType
Definition: Grid.h:1109
typename tree::ValueAccessor< const TreeType > ConstAccessorType
Definition: Grid.h:1108
static const TreeType & tree(const GridType &g)
Definition: Grid.h:1114
typename NonConstTreeType::Ptr NonConstTreePtrType
Definition: Grid.h:1100
typename TreeType::ConstPtr ConstTreePtrType
Definition: Grid.h:1099
static TreeType & tree(TreeType &t)
Definition: Grid.h:1111
static const TreeType & constTree(const GridType &g)
Definition: Grid.h:1118
typename GridType::Ptr GridPtrType
Definition: Grid.h:1103
static const TreeType & tree(const TreeType &t)
Definition: Grid.h:1113
static const TreeType & constTree(TreeType &t)
Definition: Grid.h:1115
typename GridType::ConstPtr ConstGridPtrType
Definition: Grid.h:1105
typename TreeType::Ptr TreePtrType
Definition: Grid.h:1098
_TreeType TreeType
Definition: Grid.h:1096
static const TreeType & constTree(const TreeType &t)
Definition: Grid.h:1117
typename NonConstGridType::Ptr NonConstGridPtrType
Definition: Grid.h:1104
typename tree::ValueAccessor< TreeType > AccessorType
Definition: Grid.h:1107
static TreeType & tree(GridType &g)
Definition: Grid.h:1141
typename std::remove_const< TreeType >::type NonConstTreeType
Definition: Grid.h:1126
typename TreeType::ValueType ValueType
Definition: Grid.h:1135
static const TreeType & constTree(GridType &g)
Definition: Grid.h:1147
typename tree::ValueAccessor< NonConstTreeType > NonConstAccessorType
Definition: Grid.h:1138
typename tree::ValueAccessor< const TreeType > ConstAccessorType
Definition: Grid.h:1137
static const TreeType & tree(const GridType &g)
Definition: Grid.h:1144
static const TreeType & tree(const AccessorType &a)
Definition: Grid.h:1145
typename NonConstTreeType::Ptr NonConstTreePtrType
Definition: Grid.h:1129
typename TreeType::ConstPtr ConstTreePtrType
Definition: Grid.h:1128
static TreeType & tree(TreeType &t)
Definition: Grid.h:1140
static const TreeType & constTree(const GridType &g)
Definition: Grid.h:1149
typename GridType::Ptr GridPtrType
Definition: Grid.h:1132
static const TreeType & tree(const TreeType &t)
Definition: Grid.h:1143
static const TreeType & constTree(TreeType &t)
Definition: Grid.h:1146
static TreeType & tree(AccessorType &a)
Definition: Grid.h:1142
typename GridType::ConstPtr ConstGridPtrType
Definition: Grid.h:1134
typename TreeType::Ptr TreePtrType
Definition: Grid.h:1127
_TreeType TreeType
Definition: Grid.h:1125
static const TreeType & constTree(const TreeType &t)
Definition: Grid.h:1148
typename NonConstGridType::Ptr NonConstGridPtrType
Definition: Grid.h:1133
typename tree::ValueAccessor< TreeType > AccessorType
Definition: Grid.h:1136
This adapter allows code that is templated on a Tree type to accept either a Tree type or a Grid type...
Definition: Grid.h:1065
static TreeType & tree(GridType &g)
Definition: Grid.h:1082
typename std::remove_const< TreeType >::type NonConstTreeType
Definition: Grid.h:1067
typename TreeType::ValueType ValueType
Definition: Grid.h:1076
static const TreeType & constTree(GridType &g)
Definition: Grid.h:1086
typename tree::ValueAccessor< NonConstTreeType > NonConstAccessorType
Definition: Grid.h:1079
typename tree::ValueAccessor< const TreeType > ConstAccessorType
Definition: Grid.h:1078
static const TreeType & tree(const GridType &g)
Definition: Grid.h:1084
typename NonConstTreeType::Ptr NonConstTreePtrType
Definition: Grid.h:1070
typename TreeType::ConstPtr ConstTreePtrType
Definition: Grid.h:1069
static TreeType & tree(TreeType &t)
Definition: Grid.h:1081
static const TreeType & constTree(const GridType &g)
Definition: Grid.h:1088
typename GridType::Ptr GridPtrType
Definition: Grid.h:1073
static const TreeType & tree(const TreeType &t)
Definition: Grid.h:1083
static const TreeType & constTree(TreeType &t)
Definition: Grid.h:1085
typename GridType::ConstPtr ConstGridPtrType
Definition: Grid.h:1075
typename TreeType::Ptr TreePtrType
Definition: Grid.h:1068
_TreeType TreeType
Definition: Grid.h:1066
static const TreeType & constTree(const TreeType &t)
Definition: Grid.h:1087
typename NonConstGridType::Ptr NonConstGridPtrType
Definition: Grid.h:1074
typename tree::ValueAccessor< TreeType > AccessorType
Definition: Grid.h:1077
#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