OpenVDB  1.1.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.
template<typename OtherChildNodeType >
 InternalNode (const InternalNode< OtherChildNodeType, Log2Dim > &other, const ValueType &background, TopologyCopy)
 Topology copy constructor.
template<typename OtherChildNodeType >
 InternalNode (const InternalNode< OtherChildNodeType, Log2Dim > &other, const ValueType &offValue, const ValueType &onValue, TopologyCopy)
 Topology copy constructor.
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.
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.
CoordBBox getNodeBoundingBox () const
 Return the bounding box of this node, i.e., the full index space spanned by the node regardless of its content.
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.
bool isValueOn (const Coord &xyz) const
 Return true if the voxel at the given coordinates is active.
bool isValueOn (Index offset) const
 Return true if the voxel at the given offset is active.
bool hasActiveTiles () const
 Return true if this node or any of its child nodes have any active tiles.
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.
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.
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.
void setActiveState (const Coord &xyz, bool on)
 Set the active state at the given coordinates, but don't change its value.
void setValueOff (const Coord &xyz)
 Mark the voxel at the given coordinates as inactive, but don't change its value.
void setValueOff (const Coord &xyz, const ValueType &value)
 Change the value of the voxel at the given coordinates and mark the voxel as inactive.
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.)
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 >
Index getValueLevelAndCache (const Coord &xyz, AccessorT &) const
 Return the level of the tree (0 = leaf) at which the value at the given coordinates resides.
void setValuesOn ()
 Mark all values (both tiles and voxels) as active.
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)
 Overwrites the inactive values with a new value whos magnitude is equal to the specified background value and sign is consistant with the lexicographically closest active value. The net effect is a propagation of signs from the active to the inactive values. Note this flood-filling is also performed on any child nodes.
void signedFloodFill (const ValueType &outside, const ValueType &inside)
 Sets the inactive values to either the outside or inside value, depending on the sign of the closest corresponding active value. More specefically, an inactive value is set to the outside value if the closest active value in the lexicographic direction is positive, else it is set to the inside value. Note this operation is also performed on any child nodes.
void negate ()
void voxelizeActiveTiles ()
 Replace active tiles with dense voxels, i.e., with active leaf nodes.
void merge (InternalNode &other, const ValueType &background, const ValueType &otherBackground)
 Simple merge: Nodes and values of this node are always unchanged!
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.
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.
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.
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.
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.
void pruneInactive ()
 Reduce the memory footprint of this tree by replacing with background tiles any nodes whose values are all inactive.
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.
LeafNodeTypeprobeLeaf (const Coord &xyz)
 Return a pointer to the leaf node that contains voxel (x, y, z). If no such node exists, return NULL.
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.
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.
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.
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.
void resetBackground (const ValueType &oldBackground, const ValueType &newBackground)
 Change inactive tiles or voxels with value oldBackground to newBackground or -oldBackground to -newBackground. Active values are unchanged.
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).
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 OtherChildT >
void topologyUnion (const InternalNode< OtherChildT, Log2Dim > &other)
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

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.

Friends

class InternalNode
 During topology-only construction, access is needed to protected/private members of other template instances.
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
void doVisit ( NodeT &  self,
VisitorOp &  op 
)
inlinestaticprotected
void doVisit2 ( NodeT &  self,
OtherChildAllIterT &  otherIter,
VisitorOp &  op,
bool  otherIsLHS 
)
inlinestaticprotected
void doVisit2Node ( NodeT &  self,
OtherNodeT &  other,
VisitorOp &  op 
)
inlinestaticprotected
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
const ChildT::ValueType & getValueAndCache ( const Coord xyz,
AccessorT &  acc 
) const
inline

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.
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

Change the sign of all the values represented in this node and its child nodes.

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
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 ChildT::LeafNodeType * probeConstLeafAndCache ( const Coord xyz,
AccessorT &  acc 
) const
inline

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.

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.

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

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.

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

Change inactive tiles or voxels with value oldBackground to newBackground or -oldBackground to -newBackground. Active values are unchanged.

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

Overwrites the inactive values with a new value whos magnitude is equal to the specified background value and sign is consistant with the lexicographically closest active value. The net effect is a propagation of signs from the active to the inactive values. Note this flood-filling is also performed on any child nodes.

Note
This method is primarily useful for propagating the sign from the (active) voxels in a narrow-band level set to the inactive values outside the narrow band.
void signedFloodFill ( const ValueType outside,
const ValueType inside 
)
inline

Sets the inactive values to either the outside or inside value, depending on the sign of the closest corresponding active value. More specefically, an inactive value is set to the outside value if the closest active value in the lexicographic direction is positive, else it is set to the inside value. Note this operation is also performed on any child nodes.

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.

The resulting state of a value is active if the corresponding value was already active OR if it is active in the other tree. Also, a resulting value maps to a voxel if the corresponding value already mapped to a voxel OR if it is a voxel in the other tree. Thus, a resulting value can only map to a tile if the corresponding value already mapped to a tile AND if it is a tile value in other tree.

Specifically, active tiles and voxels in this branch are not changed, and tiles or voxels that were inactive in this branch but active in the other branch are marked as active in this branch but left with their original values.

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.

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

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 * unsetChildNode ( Index  i,
const ValueType value 
)
inlineprotected
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: