OpenVDB  0.104.0
Classes | Public Types | Public Member Functions | Static Public Member Functions | Static Public Attributes | Protected Types | Protected Member Functions | Static Protected Member Functions | Protected Attributes | Friends | List of all members
InternalNode< _ChildNodeType, Log2Dim > Class Template Reference

#include <InternalNode.h>

Classes

struct  ChildAll
 
struct  ChildIter
 
struct  ChildOff
 
struct  ChildOn
 
struct  DenseIter
 
struct  ValueAll
 
struct  ValueConverter
 ValueConverter<T>::Type is the type of an InternalNode having the same child hierarchy and dimensions as this node but a different value type, T. More...
 
struct  ValueIter
 
struct  ValueOff
 
struct  ValueOn
 

Public Types

typedef _ChildNodeType ChildNodeType
 
typedef ChildNodeType::LeafNodeType LeafNodeType
 
typedef ChildNodeType::ValueType ValueType
 
typedef NodeUnion< ValueType,
ChildNodeType
UnionType
 
typedef util::NodeMask< Log2Dim > NodeMaskType
 
typedef ChildIter
< InternalNode, ChildNodeType,
MaskOnIterator, ChildOn
ChildOnIter
 
typedef ChildIter< const
InternalNode, const
ChildNodeType, MaskOnIterator,
ChildOn
ChildOnCIter
 
typedef ValueIter
< InternalNode, const
ValueType, MaskOffIterator,
ChildOff
ChildOffIter
 
typedef ValueIter< const
InternalNode, const ValueType,
MaskOffIterator, ChildOff
ChildOffCIter
 
typedef DenseIter
< InternalNode, ChildNodeType,
ValueType, ChildAll
ChildAllIter
 
typedef DenseIter< const
InternalNode, const
ChildNodeType, ValueType,
ChildAll
ChildAllCIter
 
typedef ValueIter
< InternalNode, const
ValueType, MaskOnIterator,
ValueOn
ValueOnIter
 
typedef ValueIter< const
InternalNode, const ValueType,
MaskOnIterator, ValueOn
ValueOnCIter
 
typedef ValueIter
< InternalNode, const
ValueType, MaskOffIterator,
ValueOff
ValueOffIter
 
typedef ValueIter< const
InternalNode, const ValueType,
MaskOffIterator, ValueOff
ValueOffCIter
 
typedef ValueIter
< InternalNode, const
ValueType, MaskOffIterator,
ValueAll
ValueAllIter
 
typedef ValueIter< const
InternalNode, const ValueType,
MaskOffIterator, ValueAll
ValueAllCIter
 

Public Member Functions

 InternalNode ()
 
 InternalNode (const ValueType &offValue)
 
 InternalNode (const Coord &, const ValueType &value, bool active=false)
 
 InternalNode (const InternalNode &)
 Deep copy constructor. More...
 
template<typename OtherChildNodeType >
 InternalNode (const InternalNode< OtherChildNodeType, Log2Dim > &other, const ValueType &background, TopologyCopy)
 Topology copy constructor. More...
 
template<typename OtherChildNodeType >
 InternalNode (const InternalNode< OtherChildNodeType, Log2Dim > &other, const ValueType &offValue, const ValueType &onValue, TopologyCopy)
 Topology copy constructor. More...
 
virtual ~InternalNode ()
 
ChildOnCIter cbeginChildOn () const
 
ChildOffCIter cbeginChildOff () const
 
ChildAllCIter cbeginChildAll () const
 
ChildOnCIter beginChildOn () const
 
ChildOffCIter beginChildOff () const
 
ChildAllCIter beginChildAll () const
 
ChildOnIter beginChildOn ()
 
ChildOffIter beginChildOff ()
 
ChildAllIter beginChildAll ()
 
ValueOnCIter cbeginValueOn () const
 
ValueOffCIter cbeginValueOff () const
 
ValueAllCIter cbeginValueAll () const
 
ValueOnCIter beginValueOn () const
 
ValueOffCIter beginValueOff () const
 
ValueAllCIter beginValueAll () const
 
ValueOnIter beginValueOn ()
 
ValueOffIter beginValueOff ()
 
ValueAllIter beginValueAll ()
 
Coord offset2globalCoord (Index n) const
 
Coord getOrigin () const
 
Index32 leafCount () const
 
Index32 nonLeafCount () const
 
Index64 onVoxelCount () const
 
Index64 offVoxelCount () const
 
Index64 onLeafVoxelCount () const
 
Index64 offLeafVoxelCount () const
 
Index64 memUsage () const
 Return the total amount of memory in bytes occupied by this node and its children. More...
 
void evalActiveVoxelBoundingBox (CoordBBox &bbox) const
 Expand the specified bounding box so that it includes the active tiles of this internal node as well as all the active values in its child nodes. More...
 
CoordBBox getNodeBoundingBox () const
 Return the bounding box of this node, i.e., the full index space spanned by the node regardless of its content. More...
 
bool isEmpty () const
 
bool isConstant (ValueType &constValue, bool &state, const ValueType &tolerance=zeroVal< ValueType >()) const
 
bool isInactive () const
 Return true if this node has no children and only contains inactive values. More...
 
bool isValueOn (const Coord &xyz) const
 Return true if the voxel at the given coordinates is active. More...
 
bool isValueOn (Index offset) const
 Return true if the voxel at the given offset is active. More...
 
bool hasActiveTiles () const
 Return true if this node or any of its child nodes have any active tiles. More...
 
const ValueTypegetValue (const Coord &xyz) const
 
bool probeValue (const Coord &xyz, ValueType &value) const
 
Index getValueLevel (const Coord &xyz) const
 Return the level of the tree (0 = leaf) at which the value at the given coordinates resides. More...
 
const ValueTypegetFirstValue () const
 If the first entry in this node's table is a tile, return the tile's value. Otherwise, return the result of calling getFirstValue() on the child. More...
 
const ValueTypegetLastValue () const
 If the last entry in this node's table is a tile, return the tile's value. Otherwise, return the result of calling getLastValue() on the child. More...
 
void setActiveState (const Coord &xyz, bool on)
 Set the active state at the given coordinates, but don't change its value. More...
 
void setValueOff (const Coord &xyz)
 Mark the voxel at the given coordinates as inactive, but don't change its value. More...
 
void setValueOff (const Coord &xyz, const ValueType &value)
 Change the value of the voxel at the given coordinates and mark the voxel as inactive. More...
 
void setValueOn (const Coord &xyz)
 
void setValueOn (const Coord &xyz, const ValueType &value)
 
void setValueOnly (const Coord &xyz, const ValueType &value)
 
void setValueOnMin (const Coord &xyz, const ValueType &value)
 
void setValueOnMax (const Coord &xyz, const ValueType &value)
 
void setValueOnSum (const Coord &xyz, const ValueType &value)
 
void fill (const CoordBBox &bbox, const ValueType &, bool active=true)
 Set all voxels within an axis-aligned box to a constant value. (The min and max coordinates are inclusive.) More...
 
template<typename AccessorT >
const ValueTypegetValueAndCache (const Coord &xyz, AccessorT &) const
 
template<typename AccessorT >
bool isValueOnAndCache (const Coord &xyz, AccessorT &) const
 
template<typename AccessorT >
void setValueAndCache (const Coord &xyz, const ValueType &value, AccessorT &)
 
template<typename AccessorT >
void setValueOnlyAndCache (const Coord &xyz, const ValueType &value, AccessorT &)
 
template<typename AccessorT >
void setValueOnSumAndCache (const Coord &xyz, const ValueType &value, AccessorT &)
 
template<typename AccessorT >
void setValueOffAndCache (const Coord &xyz, const ValueType &value, AccessorT &)
 
template<typename AccessorT >
void setActiveStateAndCache (const Coord &xyz, bool on, AccessorT &)
 
template<typename AccessorT >
bool probeValueAndCache (const Coord &xyz, ValueType &value, AccessorT &) const
 
template<typename AccessorT >
OPENVDB_DEPRECATED const
ValueType
getValue (const Coord &xyz, bool &on, int &level, AccessorT &) const
 
template<typename ProbeType , typename AccessorT >
OPENVDB_DEPRECATED const
ValueType
probe (const Coord &xyz, ProbeType &p, AccessorT &) const
 
template<bool State, bool Level, typename AccessorT >
OPENVDB_DEPRECATED const
ValueType
probe (const Coord &xyz, bool &state, int &level, AccessorT &) const
 
template<typename AccessorT >
Index getValueLevelAndCache (const Coord &xyz, AccessorT &) const
 Return the level of the tree (0 = leaf) at which the value at the given coordinates resides. More...
 
void setValuesOn ()
 Mark all values (both tiles and voxels) as active. More...
 
template<typename AccessorT >
OPENVDB_DEPRECATED void updateCache (const Coord &xyz, AccessorT &) const
 Update the given accessor with pointers to the nodes along the path from the root node to the node containing voxel (x, y, z). More...
 
void writeTopology (std::ostream &, bool toHalf=false) const
 
void readTopology (std::istream &, bool fromHalf=false)
 
void writeBuffers (std::ostream &, bool toHalf=false) const
 
void readBuffers (std::istream &, bool fromHalf=false)
 
void signedFloodFill (const ValueType &background)
 Propagates the sign from a narrow-band LEVEL SET into the inactive voxels and tiles. Note this method should only be use on narrow-band level sets!!! More...
 
void negate ()
 
void voxelizeActiveTiles ()
 Replace active tiles with dense voxels, i.e., with active leaf nodes. More...
 
void merge (InternalNode &other, const ValueType &background, const ValueType &otherBackground)
 Simple merge: Nodes and values of this node are always unchanged! More...
 
template<typename OtherChildNodeType >
void topologyUnion (const InternalNode< OtherChildNodeType, Log2Dim > &other)
 Union this branch's set of active values with the other branch's active values. The value type of the other branch can be different. More...
 
template<typename CombineOp >
void combine (InternalNode &other, CombineOp &)
 
template<typename CombineOp >
void combine (const ValueType &value, bool valueIsActive, CombineOp &)
 
template<typename CombineOp >
void combine2 (const InternalNode &other0, const InternalNode &other1, CombineOp &)
 
template<typename CombineOp >
void combine2 (const ValueType &value, const InternalNode &other, bool valueIsActive, CombineOp &)
 
template<typename CombineOp >
void combine2 (const InternalNode &other, const ValueType &value, bool valueIsActive, CombineOp &)
 
template<typename BBoxOp >
void visitActiveBBox (BBoxOp &) const
 Calls the templated functor BBoxOp with bounding box information for all active tiles and leaf nodes in this node. An additional level argument is provided for each callback. More...
 
template<typename VisitorOp >
void visit (VisitorOp &)
 
template<typename VisitorOp >
void visit (VisitorOp &) const
 
template<typename OtherNodeType , typename VisitorOp >
void visit2Node (OtherNodeType &other, VisitorOp &)
 
template<typename OtherNodeType , typename VisitorOp >
void visit2Node (OtherNodeType &other, VisitorOp &) const
 
template<typename IterT , typename VisitorOp >
void visit2 (IterT &otherIter, VisitorOp &, bool otherIsLHS=false)
 
template<typename IterT , typename VisitorOp >
void visit2 (IterT &otherIter, VisitorOp &, bool otherIsLHS=false) const
 
template<typename PruneOp >
void pruneOp (PruneOp &)
 Call the PruneOp functor for each child node and, if the functor returns true, prune the node and replace it with a tile. More...
 
void prune (const ValueType &tolerance=zeroVal< ValueType >())
 Reduce the memory footprint of this tree by replacing with tiles any nodes whose values are all the same (optionally to within a tolerance) and have the same active state. More...
 
void pruneInactive (const ValueType &)
 Reduce the memory footprint of this tree by replacing with tiles of the given value any nodes whose values are all inactive. More...
 
void pruneInactive ()
 Reduce the memory footprint of this tree by replacing with background tiles any nodes whose values are all inactive. More...
 
LeafNodeTypetouchLeaf (const Coord &xyz)
 Return the leaf node that contains voxel (x, y, z). If no such node exists, create one, but preserve the values and active states of all voxels. More...
 
LeafNodeTypeprobeLeaf (const Coord &xyz)
 Return a pointer to the leaf node that contains voxel (x, y, z). If no such node exists, return NULL. More...
 
const LeafNodeTypeprobeConstLeaf (const Coord &xyz) const
 Return a const pointer to the leaf node that contains voxel (x, y, z). If no such node exists, return NULL. More...
 
template<typename AccessorT >
LeafNodeTypetouchLeafAndCache (const Coord &xyz, AccessorT &)
 Same as touchLeaf except, if necessary, it update the accessor with pointers to the nodes along the path from the root node to the node containing the coordinate. More...
 
template<typename AccessorT >
LeafNodeTypeprobeLeafAndCache (const Coord &xyz, AccessorT &)
 Same as probeLeaf except, if necessary, it update the accessor with pointers to the nodes along the path from the root node to the node containing the coordinate. More...
 
template<typename AccessorT >
const LeafNodeTypeprobeConstLeafAndCache (const Coord &xyz, AccessorT &) const
 Same as probeConstLeaf except, if necessary, it update the accessor with pointers to the nodes along the path from the root node to the node containing the coordinate. More...
 
void resetBackground (const ValueType &oldBackground, const ValueType &newBackground)
 
template<typename OtherChildNodeType , Index OtherLog2Dim>
bool hasSameTopology (const InternalNode< OtherChildNodeType, OtherLog2Dim > *other) const
 Return true if the given tree branch has the same node and active value topology as this tree branch (but possibly a different ValueType). More...
 
bool isValueMaskOn (Index n) const
 
bool isValueMaskOn () const
 
bool isValueMaskOff (Index n) const
 
bool isValueMaskOff () const
 
bool isChildMaskOn (Index n) const
 
bool isChildMaskOff (Index n) const
 
bool isChildMaskOff () const
 
template<typename AccessorT >
ChildT::LeafNodeType * touchLeafAndCache (const Coord &xyz, AccessorT &acc)
 
template<typename AccessorT >
ChildT::LeafNodeType * probeLeafAndCache (const Coord &xyz, AccessorT &acc)
 
template<typename AccessorT >
const ChildT::LeafNodeType * probeConstLeafAndCache (const Coord &xyz, AccessorT &acc) const
 
template<typename AccessorT >
const ChildT::ValueType & getValueAndCache (const Coord &xyz, AccessorT &acc) const
 
template<typename AccessorT >
const ChildT::ValueType & getValue (const Coord &xyz, bool &state, int &level, AccessorT &acc) const
 
template<typename ProbeT , typename AccessorT >
const ChildT::ValueType & probe (const Coord &xyz, ProbeT &p, AccessorT &acc) const
 
template<bool State, bool Level, typename AccessorT >
const ChildT::ValueType & probe (const Coord &xyz, bool &state, int &level, AccessorT &acc) const
 
template<typename AccessorT >
void updateCache (const Coord &xyz, AccessorT &acc) const
 
template<typename OtherChildT >
void topologyUnion (const InternalNode< OtherChildT, Log2Dim > &other)
 
template<typename NodeT , typename VisitorOp , typename ChildAllIterT >
void doVisit (NodeT &self, VisitorOp &op)
 
template<typename NodeT , typename OtherNodeT , typename VisitorOp , typename ChildAllIterT , typename OtherChildAllIterT >
void doVisit2Node (NodeT &self, OtherNodeT &other, VisitorOp &op)
 
template<typename OtherChildAllIterType , typename VisitorOp >
void visit2 (OtherChildAllIterType &otherIter, VisitorOp &op, bool otherIsLHS)
 
template<typename OtherChildAllIterType , typename VisitorOp >
void visit2 (OtherChildAllIterType &otherIter, VisitorOp &op, bool otherIsLHS) const
 
template<typename NodeT , typename VisitorOp , typename ChildAllIterT , typename OtherChildAllIterT >
void doVisit2 (NodeT &self, OtherChildAllIterT &otherIter, VisitorOp &op, bool otherIsLHS)
 

Static Public Member Functions

static Index dim ()
 
static Index getLevel ()
 
static void getNodeLog2Dims (std::vector< Index > &dims)
 
static Index getChildDim ()
 
static Index coord2offset (const Coord &xyz)
 
static void offset2coord (Index n, Coord &xyz)
 

Static Public Attributes

static const Index LOG2DIM = Log2Dim
 
static const Index TOTAL = Log2Dim + ChildNodeType::TOTAL
 
static const Index DIM = 1 << TOTAL
 
static const Index NUM_VALUES = 1 << (3 * Log2Dim)
 
static const Index LEVEL = 1 + ChildNodeType::LEVEL
 
static const Index64 NUM_VOXELS = uint64_t(1) << (3 * TOTAL)
 

Protected Types

typedef NodeMaskType::OnIterator MaskOnIterator
 
typedef NodeMaskType::OffIterator MaskOffIterator
 
typedef NodeMaskType::DenseIterator MaskDenseIterator
 

Protected Member Functions

void makeChildNodeEmpty (Index n, const ValueType &value)
 
void setChildNode (Index i, ChildNodeType *child)
 
ChildNodeTypeunsetChildNode (Index i, const ValueType &value)
 
ChildNodeTypegetChildNode (Index n)
 
const ChildNodeTypegetChildNode (Index n) const
 
void setValueMask (Index n, bool on)
 

Static Protected Member Functions

template<typename NodeT , typename VisitorOp , typename ChildAllIterT >
static void doVisit (NodeT &, VisitorOp &)
 
template<typename NodeT , typename OtherNodeT , typename VisitorOp , typename ChildAllIterT , typename OtherChildAllIterT >
static void doVisit2Node (NodeT &, OtherNodeT &, VisitorOp &)
 
template<typename NodeT , typename VisitorOp , typename ChildAllIterT , typename OtherChildAllIterT >
static void doVisit2 (NodeT &, OtherChildAllIterT &, VisitorOp &, bool otherIsLHS)
 

Protected Attributes

UnionType mNodes [NUM_VALUES]
 
NodeMaskType mChildMask
 
NodeMaskType mValueMask
 
Coord mOrigin
 Global grid index coordinates (x,y,z) of the local origin of this node. More...
 

Friends

template<typename , Index >
class InternalNode
 During topology-only construction, access is needed to protected/private members of other template instances. More...
 
class IteratorBase< MaskOnIterator, InternalNode >
 
class IteratorBase< MaskOffIterator, InternalNode >
 
class IteratorBase< MaskDenseIterator, InternalNode >
 

Member Typedef Documentation

typedef _ChildNodeType ChildNodeType
typedef ChildNodeType::LeafNodeType LeafNodeType
typedef util::NodeMask<Log2Dim> NodeMaskType
typedef ChildNodeType::ValueType ValueType

Constructor & Destructor Documentation

InternalNode ( )
inline
InternalNode ( const ValueType offValue)
inlineexplicit
InternalNode ( const Coord origin,
const ValueType value,
bool  active = false 
)
inline
InternalNode ( const InternalNode< _ChildNodeType, Log2Dim > &  other)
inline

Deep copy constructor.

InternalNode ( const InternalNode< OtherChildNodeType, Log2Dim > &  other,
const ValueType background,
TopologyCopy   
)
inline

Topology copy constructor.

InternalNode ( const InternalNode< OtherChildNodeType, Log2Dim > &  other,
const ValueType offValue,
const ValueType onValue,
TopologyCopy   
)
inline

Topology copy constructor.

~InternalNode ( )
inlinevirtual

Member Function Documentation

ChildAllCIter beginChildAll ( ) const
inline
ChildAllIter beginChildAll ( )
inline
ChildOffCIter beginChildOff ( ) const
inline
ChildOffIter beginChildOff ( )
inline
ChildOnCIter beginChildOn ( ) const
inline
ChildOnIter beginChildOn ( )
inline
ValueAllCIter beginValueAll ( ) const
inline
ValueAllIter beginValueAll ( )
inline
ValueOffCIter beginValueOff ( ) const
inline
ValueOffIter beginValueOff ( )
inline
ValueOnCIter beginValueOn ( ) const
inline
ValueOnIter beginValueOn ( )
inline
ChildAllCIter cbeginChildAll ( ) const
inline
ChildOffCIter cbeginChildOff ( ) const
inline
ChildOnCIter cbeginChildOn ( ) const
inline
ValueAllCIter cbeginValueAll ( ) const
inline
ValueOffCIter cbeginValueOff ( ) const
inline
ValueOnCIter cbeginValueOn ( ) const
inline
void combine ( InternalNode< _ChildNodeType, Log2Dim > &  other,
CombineOp &  op 
)
inline
void combine ( const ValueType value,
bool  valueIsActive,
CombineOp &  op 
)
inline
void combine2 ( const InternalNode< _ChildNodeType, Log2Dim > &  other0,
const InternalNode< _ChildNodeType, Log2Dim > &  other1,
CombineOp &  op 
)
inline
void combine2 ( const ValueType value,
const InternalNode< _ChildNodeType, Log2Dim > &  other,
bool  valueIsActive,
CombineOp &  op 
)
inline
void combine2 ( const InternalNode< _ChildNodeType, Log2Dim > &  other,
const ValueType value,
bool  valueIsActive,
CombineOp &  op 
)
inline
Index coord2offset ( const Coord xyz)
inlinestatic
static Index dim ( )
inlinestatic
static void doVisit ( NodeT &  ,
VisitorOp &   
)
inlinestaticprotected
void doVisit ( NodeT &  self,
VisitorOp &  op 
)
inline
static void doVisit2 ( NodeT &  ,
OtherChildAllIterT &  ,
VisitorOp &  ,
bool  otherIsLHS 
)
inlinestaticprotected
void doVisit2 ( NodeT &  self,
OtherChildAllIterT &  otherIter,
VisitorOp &  op,
bool  otherIsLHS 
)
inline
static void doVisit2Node ( NodeT &  ,
OtherNodeT &  ,
VisitorOp &   
)
inlinestaticprotected
void doVisit2Node ( NodeT &  self,
OtherNodeT &  other,
VisitorOp &  op 
)
inline
void evalActiveVoxelBoundingBox ( CoordBBox bbox) const
inline

Expand the specified bounding box so that it includes the active tiles of this internal node as well as all the active values in its child nodes.

void fill ( const CoordBBox bbox,
const ValueType value,
bool  active = true 
)
inline

Set all voxels within an axis-aligned box to a constant value. (The min and max coordinates are inclusive.)

static Index getChildDim ( )
inlinestatic
ChildT * getChildNode ( Index  n)
inlineprotected
const ChildT * getChildNode ( Index  n) const
inlineprotected
const ChildT::ValueType & getFirstValue ( ) const
inline

If the first entry in this node's table is a tile, return the tile's value. Otherwise, return the result of calling getFirstValue() on the child.

const ChildT::ValueType & getLastValue ( ) const
inline

If the last entry in this node's table is a tile, return the tile's value. Otherwise, return the result of calling getLastValue() on the child.

static Index getLevel ( )
inlinestatic
CoordBBox getNodeBoundingBox ( ) const
inline

Return the bounding box of this node, i.e., the full index space spanned by the node regardless of its content.

void getNodeLog2Dims ( std::vector< Index > &  dims)
static
Coord getOrigin ( ) const
inline
const ChildT::ValueType & getValue ( const Coord xyz) const
inline
OPENVDB_DEPRECATED const ValueType& getValue ( const Coord xyz,
bool &  on,
int &  level,
AccessorT &   
) const

Return the value of the voxel at the given coordinates and, if necessary, update the accessor with pointers to the nodes along the path from the root node to the node containing the voxel. Return the state and level of the voxel in on and level, respectively.

Note
Used internally by ValueAccessor.
const ChildT::ValueType& getValue ( const Coord xyz,
bool &  state,
int &  level,
AccessorT &  acc 
) const
inline
const ValueType& getValueAndCache ( const Coord xyz,
AccessorT &   
) const

Return the value of the voxel at the given coordinates and, if necessary, update the accessor with pointers to the nodes along the path from the root node to the node containing the voxel.

Note
Used internally by ValueAccessor.
const ChildT::ValueType& getValueAndCache ( const Coord xyz,
AccessorT &  acc 
) const
inline
Index getValueLevel ( const Coord xyz) const
inline

Return the level of the tree (0 = leaf) at which the value at the given coordinates resides.

Index getValueLevelAndCache ( const Coord xyz,
AccessorT &  acc 
) const
inline

Return the level of the tree (0 = leaf) at which the value at the given coordinates resides.

If necessary, update the accessor with pointers to the nodes along the path from the root node to the node containing the voxel.

Note
Used internally by ValueAccessor.
bool hasActiveTiles ( ) const
inline

Return true if this node or any of its child nodes have any active tiles.

bool hasSameTopology ( const InternalNode< OtherChildNodeType, OtherLog2Dim > *  other) const
inline

Return true if the given tree branch has the same node and active value topology as this tree branch (but possibly a different ValueType).

bool isChildMaskOff ( Index  n) const
inline
bool isChildMaskOff ( ) const
inline
bool isChildMaskOn ( Index  n) const
inline
bool isConstant ( ValueType constValue,
bool &  state,
const ValueType tolerance = zeroVal<ValueType>() 
) const
inline

Return true if all of this node's table entries have the same active state and the same constant value to within the given tolerance, and return that value in constValue and the active state in state.

bool isEmpty ( ) const
inline
bool isInactive ( ) const
inline

Return true if this node has no children and only contains inactive values.

bool isValueMaskOff ( Index  n) const
inline
bool isValueMaskOff ( ) const
inline
bool isValueMaskOn ( Index  n) const
inline
bool isValueMaskOn ( ) const
inline
bool isValueOn ( const Coord xyz) const
inline

Return true if the voxel at the given coordinates is active.

bool isValueOn ( Index  offset) const
inline

Return true if the voxel at the given offset is active.

bool isValueOnAndCache ( const Coord xyz,
AccessorT &  acc 
) const
inline

Return true if the voxel at the given coordinates is active and, if necessary, update the accessor with pointers to the nodes along the path from the root node to the node containing the voxel.

Note
Used internally by ValueAccessor.
Index32 leafCount ( ) const
inline
void makeChildNodeEmpty ( Index  n,
const ValueType value 
)
inlineprotected
Index64 memUsage ( ) const
inline

Return the total amount of memory in bytes occupied by this node and its children.

void merge ( InternalNode< _ChildNodeType, Log2Dim > &  other,
const ValueType background,
const ValueType otherBackground 
)
inline

Simple merge: Nodes and values of this node are always unchanged!

Note
Nodes and values of the other node are simply merged into this node and the other tree is cannibalized in the process!
void negate ( )
inline
Index32 nonLeafCount ( ) const
inline
Index64 offLeafVoxelCount ( ) const
inline
void offset2coord ( Index  n,
Coord xyz 
)
inlinestatic
Coord offset2globalCoord ( Index  n) const
inline
Index64 offVoxelCount ( ) const
inline
Index64 onLeafVoxelCount ( ) const
inline
Index64 onVoxelCount ( ) const
inline
OPENVDB_DEPRECATED const ValueType& probe ( const Coord xyz,
ProbeType &  p,
AccessorT &   
) const
OPENVDB_DEPRECATED const ValueType& probe ( const Coord xyz,
bool &  state,
int &  level,
AccessorT &   
) const
const ChildT::ValueType& probe ( const Coord xyz,
ProbeT &  p,
AccessorT &  acc 
) const
inline
const ChildT::ValueType& probe ( const Coord xyz,
bool &  state,
int &  level,
AccessorT &  acc 
) const
inline
const ChildT::LeafNodeType * probeConstLeaf ( const Coord xyz) const
inline

Return a const pointer to the leaf node that contains voxel (x, y, z). If no such node exists, return NULL.

const LeafNodeType* probeConstLeafAndCache ( const Coord xyz,
AccessorT &   
) const

Same as probeConstLeaf except, if necessary, it update the accessor with pointers to the nodes along the path from the root node to the node containing the coordinate.

const ChildT::LeafNodeType* probeConstLeafAndCache ( const Coord xyz,
AccessorT &  acc 
) const
inline
ChildT::LeafNodeType * probeLeaf ( const Coord xyz)
inline

Return a pointer to the leaf node that contains voxel (x, y, z). If no such node exists, return NULL.

LeafNodeType* probeLeafAndCache ( const Coord xyz,
AccessorT &   
)

Same as probeLeaf except, if necessary, it update the accessor with pointers to the nodes along the path from the root node to the node containing the coordinate.

ChildT::LeafNodeType* probeLeafAndCache ( const Coord xyz,
AccessorT &  acc 
)
inline
bool probeValue ( const Coord xyz,
ValueType value 
) const
inline
bool probeValueAndCache ( const Coord xyz,
ValueType value,
AccessorT &  acc 
) const
inline

Return true if the voxel at the given coordinates is active, change the voxel's value, and, if necessary, update the accessor with pointers to the nodes along the path from the root node to the node containing the voxel.

Note
Used internally by ValueAccessor.
void prune ( const ValueType tolerance = zeroVal<ValueType>())
inline

Reduce the memory footprint of this tree by replacing with tiles any nodes whose values are all the same (optionally to within a tolerance) and have the same active state.

void pruneInactive ( const ValueType bg)
inline

Reduce the memory footprint of this tree by replacing with tiles of the given value any nodes whose values are all inactive.

void pruneInactive ( )
inline

Reduce the memory footprint of this tree by replacing with background tiles any nodes whose values are all inactive.

void pruneOp ( PruneOp &  op)
inline

Call the PruneOp functor for each child node and, if the functor returns true, prune the node and replace it with a tile.

This method is used to implement all of the various pruning algorithms (prune(), pruneInactive(), etc.). It should rarely be called directly.

See Also
openvdb/tree/Util.h for the definition of the PruneOp functor
void readBuffers ( std::istream &  is,
bool  fromHalf = false 
)
inline
void readTopology ( std::istream &  is,
bool  fromHalf = false 
)
inline
void resetBackground ( const ValueType oldBackground,
const ValueType newBackground 
)
inline
void setActiveState ( const Coord xyz,
bool  on 
)
inline

Set the active state at the given coordinates, but don't change its value.

void setActiveStateAndCache ( const Coord xyz,
bool  on,
AccessorT &  acc 
)
inline

Set the active state of the voxel at the given coordinates without changing its value. If necessary, update the accessor with pointers to the nodes along the path from the root node to the node containing the voxel.

Note
Used internally by ValueAccessor.
void setChildNode ( Index  i,
ChildNodeType child 
)
inlineprotected
void setValueAndCache ( const Coord xyz,
const ValueType value,
AccessorT &  acc 
)
inline

Change the value of the voxel at the given coordinates and mark it as active. If necessary, update the accessor with pointers to the nodes along the path from the root node to the node containing the voxel.

Note
Used internally by ValueAccessor.
void setValueMask ( Index  n,
bool  on 
)
inlineprotected

Use a mask accessor to ensure consistency between the child and value masks; i.e., the value mask should always be off wherever the child mask is on.

void setValueOff ( const Coord xyz)
inline

Mark the voxel at the given coordinates as inactive, but don't change its value.

void setValueOff ( const Coord xyz,
const ValueType value 
)
inline

Change the value of the voxel at the given coordinates and mark the voxel as inactive.

void setValueOffAndCache ( const Coord xyz,
const ValueType value,
AccessorT &  acc 
)
inline

Change the value of the voxel at the given coordinates and mark it as inactive. If necessary, update the accessor with pointers to the nodes along the path from the root node to the node containing the voxel.

Note
Used internally by ValueAccessor.
void setValueOn ( const Coord xyz)
inline
void setValueOn ( const Coord xyz,
const ValueType value 
)
inline
void setValueOnly ( const Coord xyz,
const ValueType value 
)
inline
void setValueOnlyAndCache ( const Coord xyz,
const ValueType value,
AccessorT &  acc 
)
inline

Set the value of the voxel at the given coordinate but preserves its active state. If necessary, update the accessor with pointers to the nodes along the path from the root node to the node containing the voxel.

Note
Used internally by ValueAccessor.
void setValueOnMax ( const Coord xyz,
const ValueType value 
)
inline
void setValueOnMin ( const Coord xyz,
const ValueType value 
)
inline
void setValueOnSum ( const Coord xyz,
const ValueType value 
)
inline
void setValueOnSumAndCache ( const Coord xyz,
const ValueType value,
AccessorT &  acc 
)
inline

Set the value of the voxel at the given coordinates to the sum of its current value and the given value, and mark the voxel as active. If necessary, update the accessor with pointers to the nodes along the path from the root node to the node containing the voxel.

Note
Used internally by ValueAccessor.
void setValuesOn ( )
inline

Mark all values (both tiles and voxels) as active.

void signedFloodFill ( const ValueType background)
inline

Propagates the sign from a narrow-band LEVEL SET into the inactive voxels and tiles. Note this method should only be use on narrow-band level sets!!!

void topologyUnion ( const InternalNode< OtherChildNodeType, Log2Dim > &  other)

Union this branch's set of active values with the other branch's active values. The value type of the other branch can be different.

Note
Values in this branch are not modified, only their state. That is, active values in this branch are untouched, and values that were inactive in this branch but active in the other branch are marked as active and set to their original value in this branch.
void topologyUnion ( const InternalNode< OtherChildT, Log2Dim > &  other)
inline
ChildT::LeafNodeType * touchLeaf ( const Coord xyz)
inline

Return the leaf node that contains voxel (x, y, z). If no such node exists, create one, but preserve the values and active states of all voxels.

Use this method to preallocate a static tree topology over which to safely perform multithreaded processing.

LeafNodeType* touchLeafAndCache ( const Coord xyz,
AccessorT &   
)

Same as touchLeaf except, if necessary, it update the accessor with pointers to the nodes along the path from the root node to the node containing the coordinate.

ChildT::LeafNodeType* touchLeafAndCache ( const Coord xyz,
AccessorT &  acc 
)
inline
ChildT * unsetChildNode ( Index  i,
const ValueType value 
)
inlineprotected
OPENVDB_DEPRECATED void updateCache ( const Coord xyz,
AccessorT &   
) const

Update the given accessor with pointers to the nodes along the path from the root node to the node containing voxel (x, y, z).

Note
Used internally by ValueAccessor.
void updateCache ( const Coord xyz,
AccessorT &  acc 
) const
inline
void visit ( VisitorOp &  op)
inline
void visit ( VisitorOp &  op) const
inline
void visit2 ( IterT &  otherIter,
VisitorOp &  ,
bool  otherIsLHS = false 
)
void visit2 ( IterT &  otherIter,
VisitorOp &  ,
bool  otherIsLHS = false 
) const
void visit2 ( OtherChildAllIterType &  otherIter,
VisitorOp &  op,
bool  otherIsLHS 
)
inline
void visit2 ( OtherChildAllIterType &  otherIter,
VisitorOp &  op,
bool  otherIsLHS 
) const
inline
void visit2Node ( OtherNodeType &  other,
VisitorOp &  op 
)
inline
void visit2Node ( OtherNodeType &  other,
VisitorOp &  op 
) const
inline
void visitActiveBBox ( BBoxOp &  op) const
inline

Calls the templated functor BBoxOp with bounding box information for all active tiles and leaf nodes in this node. An additional level argument is provided for each callback.

Note
The bounding boxes are guarenteed to be non-overlapping.
void voxelizeActiveTiles ( )
inline

Replace active tiles with dense voxels, i.e., with active leaf nodes.

void writeBuffers ( std::ostream &  os,
bool  toHalf = false 
) const
inline
void writeTopology ( std::ostream &  os,
bool  toHalf = false 
) const
inline

Friends And Related Function Documentation

friend class InternalNode
friend

During topology-only construction, access is needed to protected/private members of other template instances.

friend class IteratorBase< MaskDenseIterator, InternalNode >
friend

Allow iterators to call mask accessor methods (setValueMask(), setChildMask(), etc.).

friend class IteratorBase< MaskOffIterator, InternalNode >
friend

Allow iterators to call mask accessor methods (setValueMask(), setChildMask(), etc.).

friend class IteratorBase< MaskOnIterator, InternalNode >
friend

Allow iterators to call mask accessor methods (setValueMask(), setChildMask(), etc.).

Member Data Documentation

const Index DIM = 1 << TOTAL
static
const Index LEVEL = 1 + ChildNodeType::LEVEL
static
const Index LOG2DIM = Log2Dim
static
NodeMaskType mChildMask
protected
UnionType mNodes[NUM_VALUES]
protected
Coord mOrigin
protected

Global grid index coordinates (x,y,z) of the local origin of this node.

NodeMaskType mValueMask
protected
const Index NUM_VALUES = 1 << (3 * Log2Dim)
static
const Index64 NUM_VOXELS = uint64_t(1) << (3 * TOTAL)
static
const Index TOTAL = Log2Dim + ChildNodeType::TOTAL
static

The documentation for this class was generated from the following file: