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>
70 Real voxelSize = 1.0,
Real halfWidth = LEVEL_SET_HALF_WIDTH);
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>
262 template<
typename Gr
idTypeListT,
typename OpT>
inline bool apply(OpT&)
const;
263 template<
typename Gr
idTypeListT,
typename OpT>
inline bool apply(OpT&);
264 template<
typename Gr
idTypeListT,
typename OpT>
inline bool apply(
const OpT&)
const;
265 template<
typename Gr
idTypeListT,
typename OpT>
inline bool apply(
const OpT&);
475 virtual void print(std::ostream& = std::cout,
int verboseLevel = 1)
const = 0;
482 GridBase(): mTransform(math::Transform::createLinearTransform()) {}
538template<
typename Gr
idPtrContainerT>
539inline typename GridPtrContainerT::value_type
542 using GridPtrT =
typename GridPtrContainerT::value_type;
543 typename GridPtrContainerT::const_iterator it =
544 std::find_if(container.begin(), container.end(),
GridNamePred(name));
545 return (it == container.end() ? GridPtrT() : *it);
549template<
typename KeyT,
typename Gr
idPtrT>
553 using GridPtrMapT = std::map<KeyT, GridPtrT>;
554 for (
typename GridPtrMapT::const_iterator it = container.begin(), end = container.end();
557 const GridPtrT& grid = it->second;
558 if (grid && grid->getName() == name)
return grid;
569template<
typename _TreeType>
600 template<
typename OtherValueType>
632 template<
typename OtherTreeType>
656 Ptr copyWithNewTree()
const;
709 Name type()
const override {
return this->gridType(); }
725 bool empty()
const override {
return tree().empty(); }
727 void clear()
override { tree().clear(); }
786 void sparseFill(
const CoordBBox& bbox,
const ValueType& value,
bool active =
true);
795 void fill(
const CoordBBox& bbox,
const ValueType& value,
bool active =
true);
803 void denseFill(
const CoordBBox& bbox,
const ValueType& value,
bool active =
true);
806 void pruneGrid(
float tolerance = 0.0)
override;
834 template<
typename OtherTreeType>
849 template<
typename OtherTreeType>
862 template<
typename OtherTreeType>
873 CoordBBox evalActiveVoxelBoundingBox()
const override;
875 Coord evalActiveVoxelDim()
const override;
878tools::minMax(grid->tree()). Use threaded = false for serial execution")
879 void evalMinMax(ValueType& minVal, ValueType& maxVal) const;
883 Index64 memUsage()
const override {
return tree().memUsage(); }
901 bool isTreeUnique() const final;
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();
970 static bool isRegistered() {
return GridBase::isRegistered(Grid::gridType()); }
972 static void registerGrid() { GridBase::registerGrid(Grid::gridType(), Grid::factory); }
1000template<
typename Gr
idType>
1001inline typename GridType::Ptr
1004 return GridBase::grid<GridType>(grid);
1016template<
typename Gr
idType>
1017inline typename GridType::ConstPtr
1020 return GridBase::constGrid<GridType>(grid);
1033template<
typename Gr
idType>
1034inline typename GridType::Ptr
1037 if (!grid || !grid->isType<GridType>())
return typename GridType::Ptr();
1038 return gridPtrCast<GridType>(grid->deepCopyGrid());
1042template<
typename Gr
idType>
1043inline typename GridType::Ptr
1046 if (!grid.
isType<GridType>())
return typename GridType::Ptr();
1058template<
typename _TreeType>
1088template<
typename _TreeType>
1117template<
typename _TreeType>
1158template<
typename LeafNodeType>
1160 static const bool value = std::is_base_of<io::MultiPass, LeafNodeType>::value;
1164template<
typename RootNodeType>
1171template<
typename TreeType>
1187template<
typename Gr
idType>
1188inline typename GridType::Ptr
1193 if (
grid &&
grid->type() == GridType::gridType()) {
1196 return typename GridType::Ptr();
1200template<
typename Gr
idType>
1201inline typename GridType::ConstPtr
1209template<
typename Gr
idType>
1210inline typename GridType::ConstPtr
1217template<
typename Gr
idType>
1218inline typename GridType::ConstPtr
1244template<
typename TreeT>
1250template<
typename TreeT>
1256template<
typename TreeT>
1263template<
typename TreeT>
1272template<
typename TreeT>
1280template<
typename TreeT>
1281template<
typename OtherTreeType>
1284 mTree(new
TreeType(other.constTree()))
1289template<
typename TreeT>
1297template<
typename TreeT>
1306template<
typename TreeT>
1315template<
typename TreeT>
1319 return Ptr(
new Grid(background));
1324template<
typename TreeT>
1333template<
typename TreeT>
1344template<
typename TreeT>
1352template<
typename TreeT>
1357 this->constTransformPtr());
1362template<
typename TreeT>
1366 return this->copyReplacingMetadataAndTransform(*
this, xform);
1369template<
typename TreeT>
1379template<
typename TreeT>
1387template<
typename TreeT>
1397template<
typename TreeT>
1401 return this->copy();
1404template<
typename TreeT>
1408 return this->copy();
1411template<
typename TreeT>
1415 return this->copyReplacingMetadata(meta);
1418template<
typename TreeT>
1422 return this->copyReplacingTransform(xform);
1425template<
typename TreeT>
1430 return this->copyReplacingMetadataAndTransform(meta, xform);
1433template<
typename TreeT>
1437 return this->copyWithNewTree();
1444template<
typename TreeT>
1448 return mTree.use_count() == 1;
1452template<
typename TreeT>
1457 if (tree->type() != TreeType::treeType()) {
1459 + tree->type() +
" to a grid of type " + this->type());
1465template<
typename TreeT>
1469 mTree.reset(
new TreeType(this->background()));
1476template<
typename TreeT>
1480 tree().sparseFill(bbox, value, active);
1484template<
typename TreeT>
1488 this->sparseFill(bbox, value, active);
1491template<
typename TreeT>
1495 tree().denseFill(bbox, value, active);
1498template<
typename TreeT>
1503 this->tree().prune(
static_cast<ValueType>(value));
1506template<
typename TreeT>
1513template<
typename TreeT>
1517 tree().merge(other.
tree(), policy);
1521template<
typename TreeT>
1522template<
typename OtherTreeType>
1526 tree().topologyUnion(other.
tree());
1530template<
typename TreeT>
1531template<
typename OtherTreeType>
1535 tree().topologyIntersection(other.
tree());
1539template<
typename TreeT>
1540template<
typename OtherTreeType>
1544 tree().topologyDifference(other.
tree());
1551template<
typename TreeT>
1556 tree().evalMinMax(minVal, maxVal);
1561template<
typename TreeT>
1566 tree().evalActiveVoxelBoundingBox(bbox);
1571template<
typename TreeT>
1576 const bool nonempty = tree().evalActiveVoxelDim(dim);
1577 return (nonempty ? dim :
Coord());
1587template<
typename TreeT>
1591 tree().readTopology(is, saveFloatAsHalf());
1595template<
typename TreeT>
1599 tree().writeTopology(os, saveFloatAsHalf());
1603template<
typename TreeT>
1608 tree().readBuffers(is, saveFloatAsHalf());
1610 uint16_t numPasses = 1;
1611 is.read(
reinterpret_cast<char*
>(&numPasses),
sizeof(uint16_t));
1614 for (uint16_t passIndex = 0; passIndex < numPasses; ++passIndex) {
1615 uint32_t pass = (uint32_t(numPasses) << 16) | uint32_t(passIndex);
1616 meta->setPass(pass);
1617 tree().readBuffers(is, saveFloatAsHalf());
1625template<
typename TreeT>
1630 tree().readBuffers(is, bbox, saveFloatAsHalf());
1632 uint16_t numPasses = 1;
1633 is.read(
reinterpret_cast<char*
>(&numPasses),
sizeof(uint16_t));
1636 for (uint16_t passIndex = 0; passIndex < numPasses; ++passIndex) {
1637 uint32_t pass = (uint32_t(numPasses) << 16) | uint32_t(passIndex);
1638 meta->setPass(pass);
1639 tree().readBuffers(is, saveFloatAsHalf());
1648template<
typename TreeT>
1652 tree().readNonresidentBuffers();
1656template<
typename TreeT>
1660 if (!hasMultiPassIO()) {
1661 tree().writeBuffers(os, saveFloatAsHalf());
1666 uint16_t numPasses = 1;
1667 meta->setCountingPasses(
true);
1669 tree().writeBuffers(os, saveFloatAsHalf());
1670 numPasses =
static_cast<uint16_t
>(meta->pass());
1671 os.write(
reinterpret_cast<const char*
>(&numPasses),
sizeof(uint16_t));
1672 meta->setCountingPasses(
false);
1675 for (uint16_t passIndex = 0; passIndex < numPasses; ++passIndex) {
1676 uint32_t pass = (uint32_t(numPasses) << 16) | uint32_t(passIndex);
1677 meta->setPass(pass);
1678 tree().writeBuffers(os, saveFloatAsHalf());
1685template<
typename TreeT>
1693template<
typename TreeT>
1697 tree().print(os, verboseLevel);
1699 if (metaCount() > 0) {
1700 os <<
"Additional metadata:" << std::endl;
1702 os <<
" " << it->first;
1704 const std::string value = it->second->str();
1705 if (!value.empty()) os <<
": " << value;
1711 os <<
"Transform:" << std::endl;
1712 transform().print(os,
" ");
1720template<
typename Gr
idType>
1721inline typename GridType::Ptr
1724 return GridType::create(background);
1728template<
typename Gr
idType>
1729inline typename GridType::Ptr
1732 return GridType::create();
1736template<
typename TreePtrType>
1740 using TreeType =
typename TreePtrType::element_type;
1745template<
typename Gr
idType>
1746typename GridType::Ptr
1749 using ValueType =
typename GridType::ValueType;
1752 static_assert(std::is_floating_point<ValueType>::value,
1753 "level-set grids must be floating-point-valued");
1755 typename GridType::Ptr grid = GridType::create(
1756 static_cast<ValueType
>(voxelSize * halfWidth));
1766template<
typename Gr
idTypeListT,
typename OpT>
1773template<
typename Gr
idTypeListT,
typename OpT>
1780template<
typename Gr
idTypeListT,
typename OpT>
1787template<
typename Gr
idTypeListT,
typename OpT>
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:360
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:1189
static const char *const META_FILE_BBOX_MAX
Definition Grid.h:358
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:435
math::Transform::ConstPtr constTransformPtr() const
Return a pointer to this grid's transform, which might be shared with other grids.
Definition Grid.h:404
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:439
Vec3d voxelSize() const
Return the size of this grid's voxels.
Definition Grid.h:430
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:413
void setName(const std::string &)
Specify a name for this grid.
static const char *const META_FILE_DELAYED_LOAD
Definition Grid.h:362
Vec3d indexToWorld(const Vec3d &xyz) const
Apply this grid's transform to the given coordinates.
Definition Grid.h:437
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:355
Vec3d worldToIndex(const Vec3d &xyz) const
Apply the inverse of this grid's transform to the given coordinates.
Definition Grid.h:441
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:411
GridBase(GridBase &other, ShallowCopy)
Copy another grid's metadata but share its transform.
Definition Grid.h:492
static const char *const META_SAVE_HALF_FLOAT
Definition Grid.h:354
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:188
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:359
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:357
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:433
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:1234
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:1768
static GridType::ConstPtr constGrid(const GridBase::Ptr &)
Definition Grid.h:1211
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:352
void readTransform(std::istream &is)
Read in the transform for this grid.
Definition Grid.h:470
static const char *const META_GRID_NAME
Definition Grid.h:353
static const char *const META_GRID_CLASS
Definition Grid.h:351
GridBase(const GridBase &other)
Deep copy another grid's metadata and transform.
Definition Grid.h:489
math::Transform::Ptr transformPtr()
Return a pointer to this grid's transform, which might be shared with other grids.
Definition Grid.h:402
static const char *const META_VECTOR_TYPE
Definition Grid.h:356
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:412
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:183
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:193
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:472
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:1227
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:361
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:482
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:403
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:571
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
typename tree::ValueAccessor< const _TreeType, false > ConstUnsafeAccessor
Definition Grid.h:592
typename _TreeType::Ptr TreePtrType
Definition Grid.h:577
Grid()
Construct a new grid with background value zero.
Definition Grid.h:1245
typename _TreeType::ValueOffCIter ValueOffCIter
Definition Grid.h:585
void evalMinMax(ValueType &minVal, ValueType &maxVal) const
Return the minimum and maximum active values in this grid.
Definition Grid.h:1553
typename tree::ValueAccessor< _TreeType, false > UnsafeAccessor
Definition Grid.h:591
bool empty() const override
Return true if this grid contains only inactive background voxels.
Definition Grid.h:725
typename _TreeType::ValueOffIter ValueOffIter
Definition Grid.h:584
TreeType & tree()
Return a reference to this grid's tree, which might be shared with other grids.
Definition Grid.h:908
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:1533
ValueOffCIter cbeginValueOff() const
Return an iterator over all of this grid's inactive values (tile and voxel).
Definition Grid.h:765
void readBuffers(std::istream &) override
Read all data buffers for this grid.
Definition Grid.h:1605
static Name gridType()
Return the name of this type of grid.
Definition Grid.h:711
void writeBuffers(std::ostream &) const override
Write out all data buffers for this grid.
Definition Grid.h:1658
static bool hasMultiPassIO()
Return true if grids of this type require multiple I/O passes to read and write data buffers.
Definition Grid.h:1687
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:1364
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:1381
bool isTreeUnique() const final
Return true if tree is not shared with another grid.
Definition Grid.h:1446
void pruneGrid(float tolerance=0.0) override
Reduce the memory footprint of this grid by increasing its sparseness.
Definition Grid.h:1500
void clip(const CoordBBox &) override
Clip this grid to the given index-space bounding box.
Definition Grid.h:1508
ValueAllCIter cbeginValueAll() const
Return an iterator over all of this grid's values (tile and voxel).
Definition Grid.h:771
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:896
Coord evalActiveVoxelDim() const override
Return the dimensions of the axis-aligned bounding box of all active voxels.
Definition Grid.h:1573
ValueOnCIter beginValueOn() const
Return an iterator over all of this grid's active values (tile and voxel).
Definition Grid.h:757
typename tree::ValueAccessor< _TreeType, true > Accessor
Definition Grid.h:589
void setTree(TreeBase::Ptr) override
Associate the given tree with this grid, in place of its existing tree.
Definition Grid.h:1454
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:1389
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:1435
typename tree::ValueAccessor< const _TreeType, true > ConstAccessor
Definition Grid.h:590
~Grid() override
Definition Grid.h:640
Name type() const override
Return the name of this grid's type.
Definition Grid.h:709
void print(std::ostream &=std::cout, int verboseLevel=1) const override
Output a human-readable description of this grid.
Definition Grid.h:1695
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:1413
typename _TreeType::ValueAllCIter ValueAllCIter
Definition Grid.h:587
Index64 activeVoxelCount() const override
Return the number of active voxels.
Definition Grid.h:871
ConstAccessor getAccessor() const
Return an accessor that provides random read-only access to this grid's voxels.
Definition Grid.h:742
GridBase::Ptr deepCopyGrid() const override
Return a new grid whose metadata, transform and tree are deep copies of this grid's.
Definition Grid.h:703
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:1486
ValueOffCIter beginValueOff() const
Return an iterator over all of this grid's inactive values (tile and voxel).
Definition Grid.h:763
UnsafeAccessor getUnsafeAccessor()
Return an unsafe accessor that provides random read and write access to this grid's voxels.
Definition Grid.h:740
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:1399
typename _TreeType::ValueType ValueType
Definition Grid.h:579
typename _TreeType::ConstPtr ConstTreePtrType
Definition Grid.h:578
ValueOnIter beginValueOn()
Return an iterator over all of this grid's active values (tile and voxel).
Definition Grid.h:755
typename _TreeType::ValueOnCIter ValueOnCIter
Definition Grid.h:583
SharedPtr< const Grid > ConstPtr
Definition Grid.h:574
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:1589
static void registerGrid()
Register this grid type along with a factory function.
Definition Grid.h:972
ValueOnCIter cbeginValueOn() const
Return an iterator over all of this grid's active values (tile and voxel).
Definition Grid.h:759
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:1371
static bool isRegistered()
Return true if this grid type is registered.
Definition Grid.h:970
typename _TreeType::ValueOnIter ValueOnIter
Definition Grid.h:582
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:1650
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:1427
typename _TreeType::BuildType BuildType
Definition Grid.h:580
ConstAccessor getConstAccessor() const
Return an accessor that provides random read-only access to this grid's voxels.
Definition Grid.h:744
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:1493
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:895
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:1542
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:897
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:1420
CoordBBox evalActiveVoxelBoundingBox() const override
Return the axis-aligned bounding box of all active voxels.
Definition Grid.h:1563
Ptr deepCopy() const
Return a new grid whose metadata, transform and tree are deep copies of this grid's.
Definition Grid.h:701
const ValueType & background() const
Return this grid's background value.
Definition Grid.h:722
ValueOffIter beginValueOff()
Return an iterator over all of this grid's inactive values (tile and voxel).
Definition Grid.h:761
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:1478
TreePtrType treePtr()
Return a pointer to this grid's tree, which might be shared with other grids. The pointer is guarante...
Definition Grid.h:894
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:1597
void merge(Grid &other, MergePolicy policy=MERGE_ACTIVE_STATES)
Efficiently merge another grid into this grid using one of several schemes.
Definition Grid.h:1515
static void unregisterGrid()
Remove this grid type from the registry.
Definition Grid.h:974
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:1354
typename _TreeType::ValueAllIter ValueAllIter
Definition Grid.h:586
_TreeType TreeType
Definition Grid.h:576
Name valueType() const override
Return the name of the type of a voxel's value (e.g., "float" or "vec3d").
Definition Grid.h:714
void clear() override
Empty this grid, so that all voxels become inactive background voxels.
Definition Grid.h:727
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
ValueAllCIter beginValueAll() const
Return an iterator over all of this grid's values (tile and voxel).
Definition Grid.h:769
void newTree() override
Associate a new, empty tree with this grid, in place of its existing tree.
Definition Grid.h:1467
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:752
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:1524
SharedPtr< Grid > Ptr
Definition Grid.h:573
Accessor getAccessor()
Return an accessor that provides random read and write access to this grid's voxels.
Definition Grid.h:732
ValueAllIter beginValueAll()
Return an iterator over all of this grid's values (tile and voxel).
Definition Grid.h:767
static Ptr create()
Return a new grid with background value zero.
Definition Grid.h:1308
Tag dispatch class that distinguishes shallow copy constructors from deep copy constructors.
Definition Types.h:680
Definition Exceptions.h:64
Definition Exceptions.h:65
Axis-aligned bounding box of signed integer coordinates.
Definition Coord.h:251
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
The Value Accessor Implementation and API methods. The majoirty of the API matches the API of a compa...
Definition ValueAccessor.h:367
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:806
std::string Name
Definition Name.h:19
GridPtrVec::const_iterator GridPtrVecCIter
Definition Grid.h:510
std::vector< GridBase::Ptr > GridPtrVec
Definition Grid.h:508
SharedPtr< GridPtrSet > GridPtrSetPtr
Definition Grid.h:521
GridCPtrSet::iterator GridCPtrSetIter
Definition Grid.h:524
SharedPtr< GridCPtrSet > GridCPtrSetPtr
Definition Grid.h:526
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:1018
double Real
Definition Types.h:60
GridClass
Definition Types.h:453
@ GRID_LEVEL_SET
Definition Types.h:455
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:1002
std::set< GridBase::ConstPtr > GridCPtrSet
Definition Grid.h:523
GridPtrContainerT::value_type findGridByName(const GridPtrContainerT &container, const Name &name)
Return the first grid in the given container whose name is name.
Definition Grid.h:540
std::set< GridBase::Ptr > GridPtrSet
Definition Grid.h:518
SharedPtr< GridCPtrVec > GridCPtrVecPtr
Definition Grid.h:516
GridCPtrVec::iterator GridCPtrVecIter
Definition Grid.h:514
constexpr T zeroVal()
Return the value of type T that corresponds to zero.
Definition Math.h:70
@ OPENVDB_FILE_VERSION_MULTIPASS_IO
Definition version.h.in:259
SharedPtr< GridPtrVec > GridPtrVecPtr
Definition Grid.h:511
GridCPtrVec::const_iterator GridCPtrVecCIter
Definition Grid.h:515
GridPtrSet::iterator GridPtrSetIter
Definition Grid.h:519
SharedPtr< T > ConstPtrCast(const SharedPtr< U > &ptr)
Return a new shared pointer that points to the same object as the given pointer but with possibly dif...
Definition Types.h:126
GridCPtrSet::const_iterator GridCPtrSetCIter
Definition Grid.h:525
GridPtrSet::const_iterator GridPtrSetCIter
Definition Grid.h:520
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:1747
GridType::Ptr createGrid(const typename GridType::ValueType &background)
Create a new grid of type GridType with a given background value.
Definition Grid.h:1722
uint64_t Index64
Definition Types.h:53
GridPtrVec::iterator GridPtrVecIter
Definition Grid.h:509
std::shared_ptr< T > SharedPtr
Definition Types.h:114
MergePolicy
Definition Types.h:506
VecType
Definition Types.h:483
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
std::vector< GridBase::ConstPtr > GridCPtrVec
Definition Grid.h:513
GridType::Ptr deepCopyTypedGrid(const GridBase::ConstPtr &grid)
Return a pointer to a deep copy of the given grid, provided that the grid's concrete type is GridType...
Definition Grid.h:1035
GridType::Ptr createGrid()
Create a new grid of type GridType with background value zero.
Definition Grid.h:1730
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:531
Name name
Definition Grid.h:534
GridNamePred(const Name &_name)
Definition Grid.h:532
bool operator()(const GridBase::ConstPtr &g) const
Definition Grid.h:533
ValueConverter<T>::Type is the type of a grid having the same hierarchy as this grid but a different ...
Definition Grid.h:601
Metafunction that specifies whether a given leaf node, tree, or grid type requires multiple passes to...
Definition Grid.h:1159
static TreeType & tree(GridType &g)
Definition Grid.h:1107
typename std::remove_const< TreeType >::type NonConstTreeType
Definition Grid.h:1092
typename TreeType::ValueType ValueType
Definition Grid.h:1101
static const TreeType & constTree(GridType &g)
Definition Grid.h:1111
typename tree::ValueAccessor< NonConstTreeType > NonConstAccessorType
Definition Grid.h:1104
typename tree::ValueAccessor< const TreeType > ConstAccessorType
Definition Grid.h:1103
static const TreeType & tree(const GridType &g)
Definition Grid.h:1109
typename NonConstTreeType::Ptr NonConstTreePtrType
Definition Grid.h:1095
typename TreeType::ConstPtr ConstTreePtrType
Definition Grid.h:1094
static TreeType & tree(TreeType &t)
Definition Grid.h:1106
static const TreeType & constTree(const GridType &g)
Definition Grid.h:1113
typename GridType::Ptr GridPtrType
Definition Grid.h:1098
static const TreeType & tree(const TreeType &t)
Definition Grid.h:1108
static const TreeType & constTree(TreeType &t)
Definition Grid.h:1110
typename GridType::ConstPtr ConstGridPtrType
Definition Grid.h:1100
typename TreeType::Ptr TreePtrType
Definition Grid.h:1093
_TreeType TreeType
Definition Grid.h:1091
static const TreeType & constTree(const TreeType &t)
Definition Grid.h:1112
typename NonConstGridType::Ptr NonConstGridPtrType
Definition Grid.h:1099
typename tree::ValueAccessor< TreeType > AccessorType
Definition Grid.h:1102
static TreeType & tree(GridType &g)
Definition Grid.h:1136
typename std::remove_const< TreeType >::type NonConstTreeType
Definition Grid.h:1121
typename TreeType::ValueType ValueType
Definition Grid.h:1130
static const TreeType & constTree(GridType &g)
Definition Grid.h:1142
typename tree::ValueAccessor< NonConstTreeType > NonConstAccessorType
Definition Grid.h:1133
typename tree::ValueAccessor< const TreeType > ConstAccessorType
Definition Grid.h:1132
static const TreeType & tree(const GridType &g)
Definition Grid.h:1139
static const TreeType & tree(const AccessorType &a)
Definition Grid.h:1140
typename NonConstTreeType::Ptr NonConstTreePtrType
Definition Grid.h:1124
typename TreeType::ConstPtr ConstTreePtrType
Definition Grid.h:1123
static TreeType & tree(TreeType &t)
Definition Grid.h:1135
static const TreeType & constTree(const GridType &g)
Definition Grid.h:1144
typename GridType::Ptr GridPtrType
Definition Grid.h:1127
static const TreeType & tree(const TreeType &t)
Definition Grid.h:1138
static const TreeType & constTree(TreeType &t)
Definition Grid.h:1141
static TreeType & tree(AccessorType &a)
Definition Grid.h:1137
typename GridType::ConstPtr ConstGridPtrType
Definition Grid.h:1129
typename TreeType::Ptr TreePtrType
Definition Grid.h:1122
_TreeType TreeType
Definition Grid.h:1120
static const TreeType & constTree(const TreeType &t)
Definition Grid.h:1143
typename NonConstGridType::Ptr NonConstGridPtrType
Definition Grid.h:1128
typename tree::ValueAccessor< TreeType > AccessorType
Definition Grid.h:1131
This adapter allows code that is templated on a Tree type to accept either a Tree type or a Grid type...
Definition Grid.h:1060
static TreeType & tree(GridType &g)
Definition Grid.h:1077
typename std::remove_const< TreeType >::type NonConstTreeType
Definition Grid.h:1062
typename TreeType::ValueType ValueType
Definition Grid.h:1071
static const TreeType & constTree(GridType &g)
Definition Grid.h:1081
typename tree::ValueAccessor< NonConstTreeType > NonConstAccessorType
Definition Grid.h:1074
typename tree::ValueAccessor< const TreeType > ConstAccessorType
Definition Grid.h:1073
static const TreeType & tree(const GridType &g)
Definition Grid.h:1079
typename NonConstTreeType::Ptr NonConstTreePtrType
Definition Grid.h:1065
typename TreeType::ConstPtr ConstTreePtrType
Definition Grid.h:1064
static TreeType & tree(TreeType &t)
Definition Grid.h:1076
static const TreeType & constTree(const GridType &g)
Definition Grid.h:1083
typename GridType::Ptr GridPtrType
Definition Grid.h:1068
static const TreeType & tree(const TreeType &t)
Definition Grid.h:1078
static const TreeType & constTree(TreeType &t)
Definition Grid.h:1080
typename GridType::ConstPtr ConstGridPtrType
Definition Grid.h:1070
typename TreeType::Ptr TreePtrType
Definition Grid.h:1063
_TreeType TreeType
Definition Grid.h:1061
static const TreeType & constTree(const TreeType &t)
Definition Grid.h:1082
typename NonConstGridType::Ptr NonConstGridPtrType
Definition Grid.h:1069
typename tree::ValueAccessor< TreeType > AccessorType
Definition Grid.h:1072
#define OPENVDB_VERSION_NAME
The version namespace name for this library version.
Definition version.h.in:121
#define OPENVDB_USE_VERSION_NAMESPACE
Definition version.h.in:212