|
| | BOOST_STATIC_ASSERT (CacheLevels< _TreeType::DEPTH) |
| |
| | ValueAccessor (TreeType &tree) |
| |
| | ValueAccessor (const ValueAccessor &other) |
| |
| ValueAccessor & | operator= (const ValueAccessor &other) |
| |
| virtual | ~ValueAccessor () |
| |
| bool | isCached (const Coord &xyz) const |
| | Return true if nodes along the path to the given voxel have been cached. More...
|
| |
| const ValueType & | getValue (const Coord &xyz) const |
| | Return the value of the voxel at the given coordinates. More...
|
| |
| bool | isValueOn (const Coord &xyz) const |
| | Return the active state of the voxel at the given coordinates. More...
|
| |
| bool | probeValue (const Coord &xyz, ValueType &value) const |
| | Return the active state of the voxel as well as its value. More...
|
| |
| int | getValueDepth (const Coord &xyz) const |
| |
| bool | isVoxel (const Coord &xyz) const |
| |
| void | setValueOnly (const Coord &xyz, const ValueType &value) |
| | Set the value of the voxel at the given coordinate but don't change its active state. More...
|
| |
| void | newSetValue (const Coord &xyz, const ValueType &value) |
| |
| void | setValueOff (const Coord &xyz, const ValueType &value) |
| | Set the value of the voxel at the given coordinates and mark the voxel as inactive. More...
|
| |
| template<typename ModifyOp > |
| void | modifyValue (const Coord &xyz, const ModifyOp &op) |
| | Apply a functor to the value of the voxel at the given coordinates and mark the voxel as active. More...
|
| |
| template<typename ModifyOp > |
| void | modifyValueAndActiveState (const Coord &xyz, const ModifyOp &op) |
| | Apply a functor to the voxel at the given coordinates. More...
|
| |
| void | setActiveState (const Coord &xyz, bool on=true) |
| | Set the active state of the voxel at the given coordinates but don't change its value. More...
|
| |
| void | setValueOn (const Coord &xyz) |
| | Mark the voxel at the given coordinates as active 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...
|
| |
| template<typename NodeType > |
| NodeType * | getNode () |
| | Return the cached node of type NodeType. [Mainly for internal use]. More...
|
| |
| template<typename NodeType > |
| void | insertNode (const Coord &xyz, NodeType &node) |
| |
| template<typename NodeType > |
| void | eraseNode () |
| |
| void | addLeaf (LeafNodeT *leaf) |
| | Add the specified leaf to this tree, possibly creating a child branch in the process. If the leaf node already exists, replace it. More...
|
| |
| void | addTile (Index level, const Coord &xyz, const ValueType &value, bool state) |
| | Add a tile at the specified tree level that contains voxel (x, y, z), possibly deleting existing nodes or creating new nodes in the process. More...
|
| |
| LeafNodeT * | touchLeaf (const Coord &xyz) |
| | Return a pointer to 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...
|
| |
| virtual void | clear () |
| | Remove all nodes from this cache, then reinsert the root node. More...
|
| |
| _TreeType * | getTree () const |
| | Return a pointer to the tree associated with this accessor. More...
|
| |
| _TreeType & | tree () const |
| | Return a reference to the tree associated with this accessor. More...
|
| |
|
| void | setValue (const Coord &xyz, const ValueType &value) |
| | Set the value of the voxel at the given coordinates and mark the voxel as active. More...
|
| |
| void | setValueOn (const Coord &xyz, const ValueType &value) |
| | Set the value of the voxel at the given coordinates and mark the voxel as active. More...
|
| |
|
| template<typename NodeT > |
| NodeT * | probeNode (const Coord &xyz) |
| | Return a pointer to the node of the specified type that contains voxel (x, y, z), or NULL if no such node exists. More...
|
| |
| template<typename NodeT > |
| const NodeT * | probeConstNode (const Coord &xyz) const |
| | Return a pointer to the node of the specified type that contains voxel (x, y, z), or NULL if no such node exists. More...
|
| |
| template<typename NodeT > |
| const NodeT * | probeNode (const Coord &xyz) const |
| | Return a pointer to the node of the specified type that contains voxel (x, y, z), or NULL if no such node exists. More...
|
| |
|
| LeafNodeT * | probeLeaf (const Coord &xyz) |
| | Return a pointer to the leaf node that contains voxel (x, y, z), or NULL if no such node exists. More...
|
| |
| const LeafNodeT * | probeConstLeaf (const Coord &xyz) const |
| | Return a pointer to the leaf node that contains voxel (x, y, z), or NULL if no such node exists. More...
|
| |
| const LeafNodeT * | probeLeaf (const Coord &xyz) const |
| | Return a pointer to the leaf node that contains voxel (x, y, z), or NULL if no such node exists. More...
|
| |
template<typename _TreeType, Index CacheLevels = _TreeType::DEPTH-1, typename MutexType = tbb::null_mutex>
class openvdb::v2_3_0::tree::ValueAccessor< _TreeType, CacheLevels, MutexType >
When traversing a grid in a spatially coherent pattern (e.g., iterating over neighboring voxels), request a ValueAccessor from the grid (with Grid::getAccessor()) and use the accessor's getValue() and setValue() methods. These will typically be significantly faster than accessing voxels directly in the grid's tree.
A ValueAccessor caches pointers to tree nodes along the path to a voxel (x, y, z). A subsequent access to voxel (x', y', z') starts from the cached leaf node and moves up until a cached node that encloses (x', y', z') is found, then traverses down the tree from that node to a leaf, updating the cache with the new path. This leads to significant acceleration of spatially-coherent accesses.
- Parameters
-
| _TreeType | the type of the tree to be accessed [required] |
| CacheLevels | the number of nodes to be cached, starting from the leaf level and not including the root (i.e., CacheLevels < DEPTH), and defaulting to all non-root nodes |
| MutexType | the type of mutex to use (see note) |
- Note
- If
MutexType is a TBB-compatible mutex, then multiple threads may safely access a single, shared accessor. However, it is highly recommended that, instead, each thread be assigned its own, non-mutex-protected accessor.