HDK
|
#include <UT_VoxelArray.h>
Public Member Functions | |
UT_VoxelArrayIterator () | |
UT_VoxelArrayIterator (UT_VoxelArray< T > *vox) | |
UT_VoxelArrayIterator (UT_COWReadHandle< UT_VoxelArray< T > > handle) | |
~UT_VoxelArrayIterator () | |
void | setArray (UT_VoxelArray< T > *vox) |
void | setConstArray (const UT_VoxelArray< T > *vox) |
void | setHandle (UT_COWReadHandle< UT_VoxelArray< T > > handle) |
void | setPartialRange (int idx, int numranges) |
void | splitByTile (const UT_JobInfo &info) |
template<typename S > | |
void | setTile (const UT_VoxelArrayIterator< S > &vit, UT_VoxelArray< T > *array) |
void | setTile (const UT_VoxelArrayIterator< T > &vit) |
void | setInterrupt (UT_Interrupt *interrupt) |
void | detectInterrupts () |
void | restrictToBBox (const UT_BoundingBox &bbox) |
void | restrictToBBox (int xmin, int xmax, int ymin, int ymax, int zmin, int zmax) |
The [xmin, xmax] are inclusive and measured in voxels. More... | |
void | rewind () |
Resets the iterator to point to the first voxel. More... | |
bool | atEnd () const |
Returns true if we have iterated over all of the voxels. More... | |
void | advance () |
Advances the iterator to point to the next voxel. More... | |
int | x () const |
Retrieve the current location of the iterator. More... | |
int | y () const |
int | z () const |
int | idx (int idx) const |
T | getValue () const |
void | setValue (T t) const |
Sets the voxel we are currently pointing to the given value. More... | |
bool | isTileConstant () const |
Returns true if the tile we are currently in is a constant tile. More... | |
void | getTileVoxels (UT_Vector3I &start, UT_Vector3I &end) const |
This tile will iterate over the voxels indexed [start,end). More... | |
UT_BoundingBoxI | getTileBBox () const |
bool | isStartOfTile () const |
Returns true if we are at the start of a new tile. More... | |
UT_VoxelTile< T > * | getTile () const |
Returns the VoxelTile we are currently processing. More... | |
int | getLinearTileNum () const |
void | advanceTile () |
void | skipToEndOfTile () |
bool | getCompressOnExit () const |
void | setCompressOnExit (bool shouldcompress) |
template<typename OP > | |
void | applyOperation (const OP &op) |
template<typename OP , typename S > | |
void | applyOperation (const OP &op, const UT_VoxelArray< S > &a) |
template<typename OP > | |
void | applyOperation (const OP &op, T a) |
template<typename OP , typename S , typename R > | |
void | applyOperation (const OP &op, const UT_VoxelArray< S > &a, const UT_VoxelArray< R > &b) |
template<typename OP , typename S , typename R , typename Q > | |
void | applyOperation (const OP &op, const UT_VoxelArray< S > &a, const UT_VoxelArray< R > &b, const UT_VoxelArray< Q > &c) |
template<typename OP , typename S > | |
void | applyOperationCheckNoop (const OP &op, const UT_VoxelArray< S > &a) |
template<typename OP > | |
void | applyOperationCheckNoop (const OP &op, T a) |
template<typename OP , typename M > | |
void | maskedApplyOperation (const OP &op, const UT_VoxelArray< M > &mask) |
template<typename OP , typename S , typename M > | |
void | maskedApplyOperation (const OP &op, const UT_VoxelArray< S > &a, const UT_VoxelArray< M > &mask) |
template<typename OP , typename S , typename R , typename M > | |
void | maskedApplyOperation (const OP &op, const UT_VoxelArray< S > &a, const UT_VoxelArray< R > &b, const UT_VoxelArray< M > &mask) |
template<typename OP , typename S , typename R , typename Q , typename M > | |
void | maskedApplyOperation (const OP &op, const UT_VoxelArray< S > &a, const UT_VoxelArray< R > &b, const UT_VoxelArray< Q > &c, const UT_VoxelArray< M > &mask) |
template<typename OP , typename S > | |
void | assignOperation (const OP &op, const UT_VoxelArray< S > &a) |
template<typename OP , typename S , typename R > | |
void | assignOperation (const OP &op, const UT_VoxelArray< S > &a, const UT_VoxelArray< R > &b) |
template<typename OP , typename S , typename R , typename Q > | |
void | assignOperation (const OP &op, const UT_VoxelArray< S > &a, const UT_VoxelArray< R > &b, const UT_VoxelArray< Q > &c) |
template<typename OP , typename S , typename M > | |
void | maskedAssignOperation (const OP &op, const UT_VoxelArray< S > &a, const UT_VoxelArray< M > &mask) |
template<typename OP , typename S , typename R , typename M > | |
void | maskedAssignOperation (const OP &op, const UT_VoxelArray< S > &a, const UT_VoxelArray< R > &b, const UT_VoxelArray< M > &mask) |
template<typename OP , typename S , typename R , typename Q , typename M > | |
void | maskedAssignOperation (const OP &op, const UT_VoxelArray< S > &a, const UT_VoxelArray< R > &b, const UT_VoxelArray< Q > &c, const UT_VoxelArray< M > &mask) |
template<typename OP > | |
void | reduceOperation (OP &op) |
UT_VoxelArray< T > * | getArray () const |
Public Attributes | |
int | myCurTile |
Our current linear tile idx. A value of -1 implies at end. More... | |
int | myCurTileListIdx |
Our current index into the tile list. More... | |
int | myTileStart |
int | myTileEnd |
int | myTilePos [3] |
Which tile we are as per tx,ty,tz rather than linear index. More... | |
int | myTileLocalPos [3] |
Our position within the current tile. More... | |
int | myTileSize [3] |
The size of the current tile. More... | |
const UT_JobInfo * | myJobInfo |
The job info to use for tilefetching. More... | |
UT_Interrupt * | myInterrupt |
Protected Attributes | |
UT_VoxelArray< T > * | myArray |
The array we belong to. More... | |
UT_COWReadHandle < UT_VoxelArray< T > > | myHandle |
int | myPos [3] |
Absolute index into voxel array. More... | |
bool | myShouldCompressOnExit |
bool | myUseTileList |
UT_IntArray | myTileList |
Iterator for Voxel Arrays
This class eliminates the need for having for (z = 0; z < zres; z++) ... for (x = 0; x < xres; x++) loops everywhere.
Note that the order of iteration is undefined! (The actual order is to complete each tile in turn, thereby hopefully improving cache coherency)
It is safe to write to the voxel array while this iterator is active. It is not safe to resize the voxel array (or destroy it)
The iterator is similar in principal to an STL iterator, but somewhat simpler. The classic STL loop for ( it = begin(); it != end(); ++it ) is done using for ( it.rewind(); !it.atEnd(); it.advance() )
Definition at line 1619 of file UT_VoxelArray.h.
UT_VoxelArrayIterator< T >::UT_VoxelArrayIterator | ( | ) |
Definition at line 7025 of file UT_VoxelArray.C.
UT_VoxelArrayIterator< T >::UT_VoxelArrayIterator | ( | UT_VoxelArray< T > * | vox | ) |
Definition at line 7037 of file UT_VoxelArray.C.
UT_VoxelArrayIterator< T >::UT_VoxelArrayIterator | ( | UT_COWReadHandle< UT_VoxelArray< T > > | handle | ) |
Definition at line 7047 of file UT_VoxelArray.C.
UT_VoxelArrayIterator< T >::~UT_VoxelArrayIterator | ( | ) |
Definition at line 7057 of file UT_VoxelArray.C.
|
inline |
Advances the iterator to point to the next voxel.
Definition at line 1713 of file UT_VoxelArray.h.
void UT_VoxelArrayIterator< T >::advanceTile | ( | ) |
Advances the iterator to point to the next tile. Useful if the constant test showed that you didn't need to deal with this one.
Definition at line 7295 of file UT_VoxelArray.C.
void UT_VoxelArrayIterator< T >::applyOperation | ( | const OP & | op | ) |
These templated algorithms are designed to apply simple operations across all of the voxels with as little overhead as possible. The iterator should already point to a voxel array and if multithreaded had its partial range set. The source arrays must be matching size. The operator should support a () operator, and the result is vit.setValue( op(vit.getValue(), a->getValue(vit), ...); Passing T instead of UT_VoxelArray will treat it as a constant source Note if both source and destination tiles are constant, only a single operation is invoked.
Definition at line 7783 of file UT_VoxelArray.C.
void UT_VoxelArrayIterator< T >::applyOperation | ( | const OP & | op, |
const UT_VoxelArray< S > & | a | ||
) |
Definition at line 7792 of file UT_VoxelArray.C.
void UT_VoxelArrayIterator< T >::applyOperation | ( | const OP & | op, |
T | a | ||
) |
Definition at line 7426 of file UT_VoxelArray.C.
void UT_VoxelArrayIterator< T >::applyOperation | ( | const OP & | op, |
const UT_VoxelArray< S > & | a, | ||
const UT_VoxelArray< R > & | b | ||
) |
Definition at line 7804 of file UT_VoxelArray.C.
void UT_VoxelArrayIterator< T >::applyOperation | ( | const OP & | op, |
const UT_VoxelArray< S > & | a, | ||
const UT_VoxelArray< R > & | b, | ||
const UT_VoxelArray< Q > & | c | ||
) |
Definition at line 7818 of file UT_VoxelArray.C.
void UT_VoxelArrayIterator< T >::applyOperationCheckNoop | ( | const OP & | op, |
const UT_VoxelArray< S > & | a | ||
) |
These variants will invoke op.isNoop(a, b, ...) which will return true if those values won't affect the destination. This allows constant source tiles to be skipped, for example when adding 0.
Definition at line 7469 of file UT_VoxelArray.C.
void UT_VoxelArrayIterator< T >::applyOperationCheckNoop | ( | const OP & | op, |
T | a | ||
) |
Definition at line 7570 of file UT_VoxelArray.C.
void UT_VoxelArrayIterator< T >::assignOperation | ( | const OP & | op, |
const UT_VoxelArray< S > & | a | ||
) |
Assign operation works like apply operation, but *this is written to without reading, so there is one less parameter to the () callback. This can optimize constant tile writes as the constant() status of the destination doesn't matter.
Definition at line 7894 of file UT_VoxelArray.C.
void UT_VoxelArrayIterator< T >::assignOperation | ( | const OP & | op, |
const UT_VoxelArray< S > & | a, | ||
const UT_VoxelArray< R > & | b | ||
) |
Definition at line 7906 of file UT_VoxelArray.C.
void UT_VoxelArrayIterator< T >::assignOperation | ( | const OP & | op, |
const UT_VoxelArray< S > & | a, | ||
const UT_VoxelArray< R > & | b, | ||
const UT_VoxelArray< Q > & | c | ||
) |
Definition at line 7920 of file UT_VoxelArray.C.
|
inline |
Returns true if we have iterated over all of the voxels.
Definition at line 1709 of file UT_VoxelArray.h.
|
inline |
Definition at line 1691 of file UT_VoxelArray.h.
|
inline |
Definition at line 1930 of file UT_VoxelArray.h.
|
inline |
Sets a flag which causes the iterator to tryCompress() tiles when it is done with them.
Definition at line 1841 of file UT_VoxelArray.h.
|
inline |
Definition at line 1823 of file UT_VoxelArray.h.
|
inline |
Returns the VoxelTile we are currently processing.
Definition at line 1818 of file UT_VoxelArray.h.
|
inline |
This tile will iterate over the inclusive voxels indexed in the returned boudning box.
Definition at line 1804 of file UT_VoxelArray.h.
|
inline |
This tile will iterate over the voxels indexed [start,end).
Definition at line 1791 of file UT_VoxelArray.h.
|
inline |
Retrieves the value that we are currently pointing at. This is faster than an operator(x,y,z) as we already know our current tile and that bounds checking isn't needed.
Definition at line 1753 of file UT_VoxelArray.h.
|
inline |
Definition at line 1748 of file UT_VoxelArray.h.
|
inline |
Returns true if we are at the start of a new tile.
Definition at line 1812 of file UT_VoxelArray.h.
|
inline |
Returns true if the tile we are currently in is a constant tile.
Definition at line 1780 of file UT_VoxelArray.h.
void UT_VoxelArrayIterator< T >::maskedApplyOperation | ( | const OP & | op, |
const UT_VoxelArray< M > & | mask | ||
) |
These variants of apply operation also accept a mask array. The operation is applied only where the mask is greater than 0.5.
Definition at line 7834 of file UT_VoxelArray.C.
void UT_VoxelArrayIterator< T >::maskedApplyOperation | ( | const OP & | op, |
const UT_VoxelArray< S > & | a, | ||
const UT_VoxelArray< M > & | mask | ||
) |
Definition at line 7846 of file UT_VoxelArray.C.
void UT_VoxelArrayIterator< T >::maskedApplyOperation | ( | const OP & | op, |
const UT_VoxelArray< S > & | a, | ||
const UT_VoxelArray< R > & | b, | ||
const UT_VoxelArray< M > & | mask | ||
) |
Definition at line 7860 of file UT_VoxelArray.C.
void UT_VoxelArrayIterator< T >::maskedApplyOperation | ( | const OP & | op, |
const UT_VoxelArray< S > & | a, | ||
const UT_VoxelArray< R > & | b, | ||
const UT_VoxelArray< Q > & | c, | ||
const UT_VoxelArray< M > & | mask | ||
) |
Definition at line 7876 of file UT_VoxelArray.C.
void UT_VoxelArrayIterator< T >::maskedAssignOperation | ( | const OP & | op, |
const UT_VoxelArray< S > & | a, | ||
const UT_VoxelArray< M > & | mask | ||
) |
These variants of assign operation also accept a mask array. The assignment operation is performed only where the mask is greater than 0.5.
Definition at line 7936 of file UT_VoxelArray.C.
void UT_VoxelArrayIterator< T >::maskedAssignOperation | ( | const OP & | op, |
const UT_VoxelArray< S > & | a, | ||
const UT_VoxelArray< R > & | b, | ||
const UT_VoxelArray< M > & | mask | ||
) |
Definition at line 7950 of file UT_VoxelArray.C.
void UT_VoxelArrayIterator< T >::maskedAssignOperation | ( | const OP & | op, |
const UT_VoxelArray< S > & | a, | ||
const UT_VoxelArray< R > & | b, | ||
const UT_VoxelArray< Q > & | c, | ||
const UT_VoxelArray< M > & | mask | ||
) |
Definition at line 7966 of file UT_VoxelArray.C.
void UT_VoxelArrayIterator< T >::reduceOperation | ( | OP & | op | ) |
Reduction operators. op.reduce(T a) called for each voxel, but, op.reduceMany(T a, int n) called to reduce constant blocks.
Definition at line 7984 of file UT_VoxelArray.C.
void UT_VoxelArrayIterator< T >::restrictToBBox | ( | const UT_BoundingBox & | bbox | ) |
Restricts this iterator to the tiles that intersect the given bounding box of voxel coordinates. Note that this will not be a precise restriction as each tile is either included or not. You should setPartialRange() after setting the bbox range The bounding box is on the [0..1]^3 range.
Definition at line 7140 of file UT_VoxelArray.C.
void UT_VoxelArrayIterator< T >::restrictToBBox | ( | int | xmin, |
int | xmax, | ||
int | ymin, | ||
int | ymax, | ||
int | zmin, | ||
int | zmax | ||
) |
The [xmin, xmax] are inclusive and measured in voxels.
Definition at line 7164 of file UT_VoxelArray.C.
void UT_VoxelArrayIterator< T >::rewind | ( | ) |
Resets the iterator to point to the first voxel.
Definition at line 7224 of file UT_VoxelArray.C.
|
inline |
Definition at line 1627 of file UT_VoxelArray.h.
|
inline |
Definition at line 1842 of file UT_VoxelArray.h.
|
inline |
Definition at line 1635 of file UT_VoxelArray.h.
|
inline |
Iterates over the array pointed to by the handle. Only supports read access during the iteration as it does a read lock.
Definition at line 1643 of file UT_VoxelArray.h.
|
inline |
Assigns an interrupt handler. This will be tested whenever it advances to a new tile. If it is interrupted, the iterator will jump forward to atEnd()
Definition at line 1690 of file UT_VoxelArray.h.
void UT_VoxelArrayIterator< T >::setPartialRange | ( | int | idx, |
int | numranges | ||
) |
Restricts this iterator to only run over a subset of the tiles. The tiles will be divided into approximately numrange equal groups, this will be the idx'th. The resulting iterator may have zero tiles.
Definition at line 7063 of file UT_VoxelArray.C.
|
inline |
Sets this iterator to run over the tile specified by the referenced iterator. This assumes the underlying arrays are matching.
Definition at line 1671 of file UT_VoxelArray.h.
|
inline |
Definition at line 1682 of file UT_VoxelArray.h.
|
inline |
Sets the voxel we are currently pointing to the given value.
Definition at line 1766 of file UT_VoxelArray.h.
void UT_VoxelArrayIterator< T >::skipToEndOfTile | ( | ) |
Advances the iterator to pointing just before the next tile so the next advance() will be an advanceTile(). This is useful if you want to do a continue; as your break but the forloop is doing advance() Note the iterator is in a bad state until advance() is called.
Definition at line 7416 of file UT_VoxelArray.C.
void UT_VoxelArrayIterator< T >::splitByTile | ( | const UT_JobInfo & | info | ) |
Ties this iterator to the given jobinfo so it will match the jobinfo's processing.
Definition at line 7124 of file UT_VoxelArray.C.
|
inline |
Retrieve the current location of the iterator.
Definition at line 1745 of file UT_VoxelArray.h.
|
inline |
Definition at line 1746 of file UT_VoxelArray.h.
|
inline |
Definition at line 1747 of file UT_VoxelArray.h.
|
protected |
The array we belong to.
Definition at line 1934 of file UT_VoxelArray.h.
int UT_VoxelArrayIterator< T >::myCurTile |
Our current linear tile idx. A value of -1 implies at end.
Definition at line 1951 of file UT_VoxelArray.h.
int UT_VoxelArrayIterator< T >::myCurTileListIdx |
Our current index into the tile list.
Definition at line 1954 of file UT_VoxelArray.h.
|
protected |
The handle that we have locked to get our array. It is null by default which makes the lock/unlock nops.
Definition at line 1937 of file UT_VoxelArray.h.
UT_Interrupt* UT_VoxelArrayIterator< T >::myInterrupt |
Definition at line 1972 of file UT_VoxelArray.h.
const UT_JobInfo* UT_VoxelArrayIterator< T >::myJobInfo |
The job info to use for tilefetching.
Definition at line 1970 of file UT_VoxelArray.h.
|
protected |
Absolute index into voxel array.
Definition at line 1940 of file UT_VoxelArray.h.
|
protected |
Flag determining if we should compress tiles whenever we advance out of them.
Definition at line 1944 of file UT_VoxelArray.h.
int UT_VoxelArrayIterator< T >::myTileEnd |
Definition at line 1958 of file UT_VoxelArray.h.
|
protected |
Definition at line 1947 of file UT_VoxelArray.h.
int UT_VoxelArrayIterator< T >::myTileLocalPos[3] |
Our position within the current tile.
Definition at line 1964 of file UT_VoxelArray.h.
int UT_VoxelArrayIterator< T >::myTilePos[3] |
Which tile we are as per tx,ty,tz rather than linear index.
Definition at line 1961 of file UT_VoxelArray.h.
int UT_VoxelArrayIterator< T >::myTileSize[3] |
The size of the current tile.
Definition at line 1967 of file UT_VoxelArray.h.
int UT_VoxelArrayIterator< T >::myTileStart |
Our start & end tiles for processing a subrange. The tile range is half open [start, end)
Definition at line 1958 of file UT_VoxelArray.h.
|
protected |
Definition at line 1946 of file UT_VoxelArray.h.