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&);
430 Vec3d
voxelSize()
const {
return transform().voxelSize(); }
433 Vec3d
voxelSize(
const Vec3d& xyz)
const {
return transform().voxelSize(xyz); }
437 Vec3d
indexToWorld(
const Vec3d& xyz)
const {
return transform().indexToWorld(xyz); }
441 Vec3d
worldToIndex(
const Vec3d& xyz)
const {
return transform().worldToIndex(xyz); }
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()) {
1194 return StaticPtrCast<GridType>(
grid);
1196 return typename GridType::Ptr();
1200template<
typename Gr
idType>
1201inline typename GridType::ConstPtr
1204 return ConstPtrCast<const GridType>(
1205 GridBase::grid<GridType>(ConstPtrCast<GridBase>(
grid)));
1209template<
typename Gr
idType>
1210inline typename GridType::ConstPtr
1213 return ConstPtrCast<const GridType>(GridBase::grid<GridType>(
grid));
1217template<
typename Gr
idType>
1218inline typename GridType::ConstPtr
1221 return ConstPtrCast<const GridType>(
1222 GridBase::grid<GridType>(ConstPtrCast<GridBase>(
grid)));
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());
1358 TreePtrType treePtr = ConstPtrCast<TreeT>(this->constTreePtr());
1362template<
typename TreeT>
1366 return this->copyReplacingMetadataAndTransform(*
this, xform);
1369template<
typename TreeT>
1374 TreePtrType treePtr = ConstPtrCast<TreeT>(this->constTreePtr());
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());
1461 mTree = StaticPtrCast<TreeType>(tree);
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>
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();
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>
1770 return GridTypeListT::template apply<OpT&, const GridBase>(std::ref(op), *
this);
1773template<
typename Gr
idTypeListT,
typename OpT>
1777 return GridTypeListT::template apply<OpT&, GridBase>(std::ref(op), *
this);
1780template<
typename Gr
idTypeListT,
typename OpT>
1784 return GridTypeListT::template apply<const OpT&, const GridBase>(std::ref(op), *
this);
1787template<
typename Gr
idTypeListT,
typename OpT>
1791 return GridTypeListT::template apply<const OpT&, GridBase>(std::ref(op), *
this);
ValueT value
Definition: GridBuilder.h:1290
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: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: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:191
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:17
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:414
@ GRID_LEVEL_SET
Definition: Types.h:416
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
SharedPtr< GridPtrVec > GridPtrVecPtr
Definition: Grid.h:511
GridCPtrVec::const_iterator GridCPtrVecCIter
Definition: Grid.h:515
GridPtrSet::iterator GridPtrSetIter
Definition: Grid.h:519
GridCPtrSet::const_iterator GridCPtrSetCIter
Definition: Grid.h:525
GridPtrSet::const_iterator GridPtrSetCIter
Definition: Grid.h:520
@ OPENVDB_FILE_VERSION_MULTIPASS_IO
Definition: version.h.in:259
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:467
VecType
Definition: Types.h:444
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