Field3D
|
This Field subclass stores voxel data in block-allocated arrays. More...
#include <SparseField.h>
Classes | |
class | block_iterator |
class | const_iterator |
class | iterator |
Public Types | |
typedef SparseField< Data_T > | class_type |
typedef CubicGenericFieldInterp< SparseField< Data_T > > | CubicInterp |
typedef LinearSparseFieldInterp< Data_T > | LinearInterp |
typedef boost::intrusive_ptr< SparseField > | Ptr |
typedef std::vector< Ptr > | Vec |
![]() | |
typedef ResizableField< Data_T > | class_type |
typedef boost::intrusive_ptr< ResizableField > | Ptr |
![]() | |
typedef WritableField< Data_T > | class_type |
typedef boost::intrusive_ptr< WritableField > | Ptr |
![]() | |
typedef Field< Data_T > | class_type |
typedef boost::intrusive_ptr< Field > | Ptr |
typedef Data_T | value_type |
Allows us to reference the template class. More... | |
typedef std::vector< Ptr > | Vec |
This is a convenience typedef for the list that Field3DInputFile::readScalarLayers() and Field3DInputFile::readVectorLayers() will return its data in. More... | |
![]() | |
typedef FieldRes | class_type |
typedef boost::intrusive_ptr< FieldRes > | Ptr |
typedef std::vector< Ptr > | Vec |
![]() | |
typedef FieldBase | class_type |
typedef boost::intrusive_ptr< FieldBase > | Ptr |
![]() | |
typedef boost::intrusive_ptr< RefBase > | Ptr |
typedef boost::weak_ptr< RefBase > | WeakPtr |
Public Member Functions | |
void | activateBlock (const int blockId) const |
Activates a given block. More... | |
void | addReference (const std::string &filename, const std::string &layerPath, int valuesPerBlock, int occupiedBlocks) |
Internal function to create a Reference for the current field, for use in dynamic reading. More... | |
void | applyDataWindowOffset (int &i, int &j, int &k) const |
Applies data window offset. More... | |
Data_T * | blockData (int bi, int bj, int bk) const |
Returns a pointer to the data in a block, or null if the given block is unallocated. More... | |
int | blockId (int blockI, int blockJ, int blockK) const |
Calculates the block number based on a block i,j,k index. More... | |
bool | blockIndexIsValid (int bi, int bj, int bk) const |
Returns whether a block index is valid. More... | |
bool | blockIsAllocated (int bi, int bj, int bk) const |
Checks if a block is allocated. More... | |
int | blockOrder () const |
Returns the block order. More... | |
V3i | blockRes () const |
Returns the resolution of the block array. More... | |
int | blockSize () const |
Returns the block size. More... | |
virtual void | clear (const Data_T &value) |
Clears all the voxels in the storage. More... | |
void | decBlockRef (const int blockId) const |
Decrements the block ref count for the given block. More... | |
Data_T & | fastLValue (int i, int j, int k) |
Write access to voxel. Notice that this is non-virtual. More... | |
Data_T | fastValue (int i, int j, int k) const |
Read access to voxel. Notice that this is non-virtual. More... | |
void | getBlockCoord (int i, int j, int k, int &bi, int &bj, int &bk) const |
Calculates the block coordinates that a given set of voxel coords are in. More... | |
const Data_T | getBlockEmptyValue (int bi, int bj, int bk) const |
Returns the constant value of an block, whether it's allocated already or not.. More... | |
bool | getGrainBounds (const size_t idx, Box3i &vsBounds) const |
Bounding box of the given 'grain'. More... | |
void | getVoxelInBlock (int i, int j, int k, int &vi, int &vj, int &vk) const |
Calculates the coordinates in a block for the given voxel index. More... | |
void | incBlockRef (const int blockId) const |
Increments the block ref count for the given block. More... | |
bool | isDynamicLoad () const |
Whether the field is dynamically loaded. More... | |
size_t | numGrains () const |
Number of 'grains' to use with threaded access. More... | |
template<typename Functor_T > | |
int | releaseBlocks (Functor_T func) |
Releases any blocks that are deemed empty. This can be used to clean up after algorithms that write "zero" values to the buffer, as well as after any narrow band levelset algorithms. More... | |
void | setBlockEmptyValue (int bi, int bj, int bk, const Data_T &val) |
Sets the constant value of an block. If the block is already allocated, it gets deallocated. More... | |
void | setBlockOrder (int order) |
Sets the block order (i.e. the power-of-2 to use as block size. More... | |
void | setupReferenceBlocks () |
Internal function to setup the Reference's block pointers, for use with dynamic reading. More... | |
bool | voxelIsInAllocatedBlock (int i, int j, int k) const |
Checks if a voxel is in an allocated block. More... | |
Constructors & destructor | |
SparseField () | |
Constructs an empty buffer. More... | |
SparseField (const SparseField &o) | |
Copy constructor. More... | |
~SparseField () | |
Destructor. More... | |
SparseField & | operator= (const SparseField &o) |
Assignment operator. For cache-managed fields, it creates a new file reference, and for non-managed fields, it copies the data. More... | |
From Field | |
virtual Data_T | value (int i, int j, int k) const |
Read access to a voxel. The coordinates are in integer voxel space . More... | |
virtual long long int | memSize () const |
Returns the memory usage (in bytes) More... | |
virtual size_t | voxelCount () const |
Counts the number of voxels. For most fields, this is just the volume of the data window, but sparse data structures can override this to return a better value. More... | |
From WritableField | |
virtual Data_T & | lvalue (int i, int j, int k) |
Write access to a voxel. The coordinates are global coordinates. More... | |
Iterators | |
const_iterator | cbegin () const |
Const iterator to first element. "cbegin" matches the tr1 c++ standard. More... | |
const_iterator | cbegin (const Box3i &subset) const |
Const iterator to first element of specific subset. More... | |
const_iterator | cend () const |
Const iterator pointing one element past the last valid one. More... | |
const_iterator | cend (const Box3i &subset) const |
Const iterator pointing one element past the last valid one (for a subset) More... | |
iterator | begin () |
Iterator to first element. More... | |
iterator | begin (const Box3i &subset) |
Iterator to first element of specific subset. More... | |
iterator | end () |
Iterator pointing one element past the last valid one. More... | |
iterator | end (const Box3i &subset) |
Iterator pointing one element past the last valid one (for a subset) More... | |
block_iterator | blockBegin () const |
block_iterator | blockEnd () const |
Const iterator pointing to element one past the last valid block. More... | |
![]() | |
void | copyFrom (typename Field< Data_T >::Ptr other) |
Copies the data from another Field, also resizes. More... | |
template<class Data_T2 > | |
void | copyFrom (typename Field< Data_T2 >::Ptr other) |
Copies the data from another Field of another template class, also resizes. More... | |
void | matchDefinition (FieldRes::Ptr fieldToMatch) |
Sets up this field so that resolution and mapping matches the other. More... | |
void | setSize (const V3i &size) |
Resizes the object. More... | |
void | setSize (const Box3i &extents) |
Resizes the object. More... | |
void | setSize (const Box3i &extents, const Box3i &dataWindow) |
Resizes the object. More... | |
void | setSize (const V3i &size, int padding) |
Resizes the object with padding. More... | |
![]() | |
iterator | begin () |
Iterator to first element. More... | |
iterator | begin (const Box3i &subset) |
Iterator to first element of specific subset. More... | |
iterator | end () |
Iterator pointing one element past the last valid one. More... | |
iterator | end (const Box3i &subset) |
Iterator pointing one element past the last valid one (for a subset) More... | |
![]() | |
const_iterator | cbegin () const |
Const iterator to first element. "cbegin" matches the tr1 c++ standard. More... | |
const_iterator | cbegin (const Box3i &subset) const |
Const iterator to first element of specific subset. More... | |
const_iterator | cend () const |
Const iterator pointing one element past the last valid one. More... | |
const_iterator | cend (const Box3i &subset) const |
Const iterator pointing one element past the last valid one (for a subset) More... | |
virtual std::string | dataTypeString () const |
virtual | ~Field () |
Dtor. More... | |
![]() | |
V3i const | dataResolution () const |
const Box3i & | dataWindow () const |
Returns the data window. Any coordinate inside this window is safe to pass to value() in the Field subclass. More... | |
const Box3i & | extents () const |
Returns the extents of the data. This signifies the relevant area that the data exists over. However, the data window (below) may be smaller than the extents, in which case it is only safe to call value() for those coordinate inside the data window. More... | |
FieldRes () | |
This constructor ensures that we have a valid mapping at all times. More... | |
FieldRes (const FieldRes &src) | |
Base class copy constructor. More... | |
bool | isInBounds (int i, int j, int k) const |
Returns true is the indicies are in bounds of the data window. More... | |
FieldMapping::Ptr | mapping () |
Returns a pointer to the mapping. More... | |
const FieldMapping::Ptr | mapping () const |
Returns a pointer to the mapping. More... | |
virtual void | mappingChanged () |
Tells the subclass that the mapping changed. More... | |
void | setMapping (FieldMapping::Ptr mapping) |
Sets the field's mapping. More... | |
![]() | |
FieldBase () | |
Constructor. More... | |
FieldBase (const FieldBase &) | |
Copy Constructor. More... | |
virtual | ~FieldBase () |
Destructor. More... | |
virtual std::string | className () const =0 |
Returns the class name of the object. Used by the class pool and when writing the data to disk. More... | |
virtual std::string | classType () const =0 |
Returns the full class type string. More... | |
FieldMetadata< FieldBase > & | metadata () |
accessor to the m_metadata class More... | |
const FieldMetadata< FieldBase > & | metadata () const |
Read only access to the m_metadata class. More... | |
virtual void | metadataHasChanged (const std::string &) |
This function should implemented by concrete classes to get the callback when metadata changes. More... | |
void | copyMetadata (const FieldBase &field) |
Copies the metadata from a second field. More... | |
![]() | |
void | ref () const |
Used by boost::intrusive_pointer. More... | |
size_t | refcnt () |
Used by boost::intrusive_pointer. More... | |
void | unref () const |
Used by boost::intrusive_pointer. More... | |
WeakPtr | weakPtr () const |
RefBase () | |
RefBase (const RefBase &) | |
Copy constructor. More... | |
RefBase & | operator= (const RefBase &) |
Assignment operator. More... | |
virtual | ~RefBase () |
Destructor. More... | |
virtual bool | checkRTTI (const char *typenameStr)=0 |
This function is only implemented by concrete classes and triggers the actual RTTI check through matchRTTI();. More... | |
bool | matchRTTI (const char *typenameStr) |
Performs a check to see if the given typename string matches this class' This needs to be implemented in -all- subclasses, even abstract ones. More... | |
Static Public Member Functions | |
static const char * | staticClassName () |
static const char * | staticClassType () |
![]() | |
static const char * | staticClassName () |
static const char * | staticClassType () |
![]() | |
static const char * | staticClassName () |
static const char * | staticClassType () |
![]() | |
static const char * | staticClassName () |
static const char * | staticClassType () |
![]() | |
static const char * | staticClassName () |
static const char * | staticClassType () |
![]() | |
static const char * | staticClassName () |
static const char * | staticClassType () |
![]() | |
static const char * | staticClassType () |
Public Attributes | |
DEFINE_FIELD_RTTI_CONCRETE_CLASS | |
![]() | |
DEFINE_FIELD_RTTI_ABSTRACT_CLASS | |
![]() | |
DEFINE_FIELD_RTTI_ABSTRACT_CLASS | |
![]() | |
DEFINE_FIELD_RTTI_ABSTRACT_CLASS | |
![]() | |
DEFINE_FIELD_RTTI_ABSTRACT_CLASS | |
![]() | |
std::string | attribute |
Optional name of the attribute the field represents. More... | |
std::string | name |
Optional name of the field. More... | |
Protected Types | |
typedef ResizableField< Data_T > | base |
typedef Sparse::SparseBlock< Data_T > | Block |
![]() | |
typedef WritableField< Data_T > | base |
![]() | |
typedef MatrixFieldMapping | default_mapping |
Protected Member Functions | |
virtual void | sizeChanged () |
Subclasses should re-implement this if they need to perform memory allocations, etc. every time the size of the storage changes. More... | |
Convenience methods | |
void | setupBlocks () |
Initializes the block structure. Will clear any existing data. More... | |
void | deallocBlock (Block &block, const Data_T &emptyValue) |
Deallocated the data of the given block and sets its empty value. More... | |
Protected Attributes | |
int | m_blockOrder |
Block order (size = 2^blockOrder) More... | |
V3i | m_blockRes |
Block array resolution. More... | |
Block * | m_blocks |
Array of blocks. Not using std::vector since SparseBlock is noncopyable. More... | |
int | m_blockXYSize |
Block array res.x * res.y. More... | |
Data_T | m_dummy |
Dummy value used when needing to return but indicating a failed call. More... | |
int | m_fileId |
File id. Used with m_fileManager if active. Otherwise -1. More... | |
SparseFileManager * | m_fileManager |
Pointer to SparseFileManager. Used when doing dynamic reading. NULL if not in use. More... | |
size_t | m_numBlocks |
Number of blocks in field. More... | |
![]() | |
Box3i | m_dataWindow |
Defines the area where data is allocated. This should be treated as a closed (i.e. inclusive) interval. More... | |
Box3i | m_extents |
Defines the extents of the the storage. This may be larger or smaller than the data window, and in the case where it is larger, care must be taken not to access voxels outside the data window. This should be treated as a closed (i.e. inclusive) interval. More... | |
FieldMapping::Ptr | m_mapping |
Pointer to the field's mapping. More... | |
Private Member Functions | |
void | copyBlockStates (const SparseField< Data_T > &o) |
Internal function to copy empty values and allocated flags, without copying data, used when copying a dynamically read field. More... | |
void | copySparseField (const SparseField &o) |
Copies internal data, including blocks, from another SparseField, used by copy constructor and operator=. More... | |
Static Private Attributes | |
static TemplatedFieldType< SparseField< Data_T > > | ms_classType |
Friends | |
class | SparseFieldIO |
From FieldBase | |
FIELD3D_CLASSNAME_CLASSTYPE_IMPLEMENTATION | |
virtual FieldBase::Ptr | clone () const |
Returns a pointer to a copy of the field, pure virtual so ensure derived classes properly implement it. More... | |
Additional Inherited Members | |
![]() | |
static TemplatedFieldType< ResizableField< Data_T > > | ms_classType |
This Field subclass stores voxel data in block-allocated arrays.
Empty blocks aren't allocated. This effectively optimizes away memory use for "empty" voxels.
Refer to using_fields for examples of how to use this in your code.
Definition at line 350 of file SparseField.h.
typedef boost::intrusive_ptr<SparseField> SparseField< Data_T >::Ptr |
Definition at line 357 of file SparseField.h.
typedef std::vector<Ptr> SparseField< Data_T >::Vec |
Definition at line 358 of file SparseField.h.
typedef LinearSparseFieldInterp<Data_T> SparseField< Data_T >::LinearInterp |
Definition at line 360 of file SparseField.h.
typedef CubicGenericFieldInterp<SparseField<Data_T> > SparseField< Data_T >::CubicInterp |
Definition at line 361 of file SparseField.h.
typedef SparseField<Data_T> SparseField< Data_T >::class_type |
Definition at line 365 of file SparseField.h.
|
protected |
Definition at line 582 of file SparseField.h.
|
protected |
Definition at line 583 of file SparseField.h.
SparseField< Data_T >::SparseField | ( | ) |
Constructs an empty buffer.
Definition at line 1274 of file SparseField.h.
References SparseField< Data_T >::setupBlocks().
SparseField< Data_T >::SparseField | ( | const SparseField< Data_T > & | o | ) |
Copy constructor.
Definition at line 1286 of file SparseField.h.
References SparseField< Data_T >::copySparseField().
SparseField< Data_T >::~SparseField | ( | ) |
Destructor.
Definition at line 1298 of file SparseField.h.
References SparseField< Data_T >::m_blocks, SparseField< Data_T >::m_fileId, SparseField< Data_T >::m_fileManager, and SparseFileManager::removeFieldFromCache().
|
inlinestatic |
Definition at line 368 of file SparseField.h.
|
inlinestatic |
Definition at line 373 of file SparseField.h.
References FieldBase::name, and RefBase::operator=().
SparseField< Data_T > & SparseField< Data_T >::operator= | ( | const SparseField< Data_T > & | o | ) |
Assignment operator. For cache-managed fields, it creates a new file reference, and for non-managed fields, it copies the data.
Definition at line 1315 of file SparseField.h.
References SparseField< Data_T >::copySparseField(), and RefBase::operator=().
|
virtual |
Clears all the voxels in the storage.
Reimplemented from WritableField< Data_T >.
Definition at line 1422 of file SparseField.h.
References Sparse::SparseBlock< Data_T >::emptyValue, SparseField< Data_T >::end(), SparseField< Data_T >::m_blocks, SparseField< Data_T >::m_numBlocks, SparseField< Data_T >::setupBlocks(), and SparseField< Data_T >::value().
void SparseField< Data_T >::setBlockOrder | ( | int | order | ) |
Sets the block order (i.e. the power-of-2 to use as block size.
Definition at line 1436 of file SparseField.h.
References SparseField< Data_T >::m_blockOrder, and SparseField< Data_T >::setupBlocks().
Referenced by SparseFieldIO::read().
int SparseField< Data_T >::blockOrder | ( | ) | const |
Returns the block order.
Definition at line 1445 of file SparseField.h.
References SparseField< Data_T >::m_blockOrder.
Referenced by LinearSparseFieldInterp< Data_T >::sample().
int SparseField< Data_T >::blockSize | ( | ) | const |
Returns the block size.
Definition at line 1453 of file SparseField.h.
References SparseField< Data_T >::m_blockOrder.
Referenced by SparseField< Data_T >::fastLValue(), SparseField< Data_T >::memSize(), SparseField< Data_T >::releaseBlocks(), detail::threadingBlockSize(), and SparseField< Data_T >::voxelCount().
bool SparseField< Data_T >::voxelIsInAllocatedBlock | ( | int | i, |
int | j, | ||
int | k | ||
) | const |
Checks if a voxel is in an allocated block.
Definition at line 1461 of file SparseField.h.
References SparseField< Data_T >::applyDataWindowOffset(), SparseField< Data_T >::blockIsAllocated(), and SparseField< Data_T >::getBlockCoord().
bool SparseField< Data_T >::blockIsAllocated | ( | int | bi, |
int | bj, | ||
int | bk | ||
) | const |
Checks if a block is allocated.
Definition at line 1472 of file SparseField.h.
References SparseField< Data_T >::blockId(), Sparse::SparseBlock< Data_T >::isAllocated, and SparseField< Data_T >::m_blocks.
Referenced by detail::checkInputEmpty(), LinearSparseFieldInterp< Data_T >::sample(), and SparseField< Data_T >::voxelIsInAllocatedBlock().
const Data_T SparseField< Data_T >::getBlockEmptyValue | ( | int | bi, |
int | bj, | ||
int | bk | ||
) | const |
Returns the constant value of an block, whether it's allocated already or not..
Definition at line 1481 of file SparseField.h.
References SparseField< Data_T >::blockId(), Sparse::SparseBlock< Data_T >::emptyValue, and SparseField< Data_T >::m_blocks.
Referenced by detail::checkInputEmpty(), and LinearSparseFieldInterp< Data_T >::sample().
void SparseField< Data_T >::setBlockEmptyValue | ( | int | bi, |
int | bj, | ||
int | bk, | ||
const Data_T & | val | ||
) |
Sets the constant value of an block. If the block is already allocated, it gets deallocated.
Definition at line 1489 of file SparseField.h.
References SparseField< Data_T >::blockId(), SparseField< Data_T >::deallocBlock(), Sparse::SparseBlock< Data_T >::emptyValue, Sparse::SparseBlock< Data_T >::isAllocated, and SparseField< Data_T >::m_blocks.
bool SparseField< Data_T >::blockIndexIsValid | ( | int | bi, |
int | bj, | ||
int | bk | ||
) | const |
Returns whether a block index is valid.
Definition at line 1503 of file SparseField.h.
References SparseField< Data_T >::m_blockRes.
V3i SparseField< Data_T >::blockRes | ( | ) | const |
Returns the resolution of the block array.
Definition at line 1512 of file SparseField.h.
References SparseField< Data_T >::m_blockRes.
Referenced by SparseField< Data_T >::setupBlocks().
int SparseField< Data_T >::releaseBlocks | ( | Functor_T | func | ) |
Releases any blocks that are deemed empty. This can be used to clean up after algorithms that write "zero" values to the buffer, as well as after any narrow band levelset algorithms.
func | A function object with the method "bool check(SparseBlock&)" |
Definition at line 1521 of file SparseField.h.
References SparseField< Data_T >::blockSize(), FieldRes::dataResolution(), SparseField< Data_T >::deallocBlock(), SparseField< Data_T >::m_blockRes, SparseField< Data_T >::m_blocks, and SparseField< Data_T >::m_numBlocks.
int SparseField< Data_T >::blockId | ( | int | blockI, |
int | blockJ, | ||
int | blockK | ||
) | const |
Calculates the block number based on a block i,j,k index.
Definition at line 1851 of file SparseField.h.
References SparseField< Data_T >::m_blockRes, and SparseField< Data_T >::m_blockXYSize.
Referenced by SparseField< Data_T >::activateBlock(), SparseField< Data_T >::blockData(), SparseField< Data_T >::blockIsAllocated(), SparseField< Data_T >::decBlockRef(), SparseField< Data_T >::fastLValue(), SparseField< Data_T >::fastValue(), SparseField< Data_T >::getBlockEmptyValue(), SparseField< Data_T >::incBlockRef(), LinearSparseFieldInterp< Data_T >::sample(), and SparseField< Data_T >::setBlockEmptyValue().
void SparseField< Data_T >::getBlockCoord | ( | int | i, |
int | j, | ||
int | k, | ||
int & | bi, | ||
int & | bj, | ||
int & | bk | ||
) | const |
Calculates the block coordinates that a given set of voxel coords are in.
Definition at line 1860 of file SparseField.h.
References SparseField< Data_T >::m_blockOrder.
Referenced by blockCoords(), SparseField< Data_T >::fastLValue(), SparseField< Data_T >::fastValue(), LinearSparseFieldInterp< Data_T >::sample(), and SparseField< Data_T >::voxelIsInAllocatedBlock().
void SparseField< Data_T >::getVoxelInBlock | ( | int | i, |
int | j, | ||
int | k, | ||
int & | vi, | ||
int & | vj, | ||
int & | vk | ||
) | const |
Calculates the coordinates in a block for the given voxel index.
Definition at line 1875 of file SparseField.h.
References SparseField< Data_T >::m_blockOrder.
Referenced by SparseField< Data_T >::fastLValue(), SparseField< Data_T >::fastValue(), and LinearSparseFieldInterp< Data_T >::sample().
|
inline |
Applies data window offset.
Definition at line 455 of file SparseField.h.
Referenced by SparseField< Data_T >::fastLValue(), SparseField< Data_T >::fastValue(), LinearSparseFieldInterp< Data_T >::sample(), and SparseField< Data_T >::voxelIsInAllocatedBlock().
|
inline |
Whether the field is dynamically loaded.
Definition at line 463 of file SparseField.h.
Referenced by LinearSparseFieldInterp< Data_T >::sample().
void SparseField< Data_T >::incBlockRef | ( | const int | blockId | ) | const |
Increments the block ref count for the given block.
Definition at line 1889 of file SparseField.h.
References SparseField< Data_T >::blockId(), SparseFileManager::incBlockRef(), SparseField< Data_T >::m_fileId, and SparseField< Data_T >::m_fileManager.
Referenced by LinearSparseFieldInterp< Data_T >::sample().
void SparseField< Data_T >::activateBlock | ( | const int | blockId | ) | const |
Activates a given block.
Definition at line 1897 of file SparseField.h.
References SparseFileManager::activateBlock(), SparseField< Data_T >::blockId(), SparseField< Data_T >::m_fileId, and SparseField< Data_T >::m_fileManager.
Referenced by LinearSparseFieldInterp< Data_T >::sample().
void SparseField< Data_T >::decBlockRef | ( | const int | blockId | ) | const |
Decrements the block ref count for the given block.
Definition at line 1905 of file SparseField.h.
References SparseField< Data_T >::blockId(), SparseFileManager::decBlockRef(), SparseField< Data_T >::m_fileId, and SparseField< Data_T >::m_fileManager.
Referenced by LinearSparseFieldInterp< Data_T >::sample().
size_t SparseField< Data_T >::numGrains | ( | ) | const |
Number of 'grains' to use with threaded access.
Definition at line 1913 of file SparseField.h.
References SparseField< Data_T >::m_numBlocks.
bool SparseField< Data_T >::getGrainBounds | ( | const size_t | idx, |
Box3i & | vsBounds | ||
) | const |
Bounding box of the given 'grain'.
Definition at line 1921 of file SparseField.h.
References clipBounds(), SparseField< Data_T >::end(), indexToCoord(), SparseField< Data_T >::m_blockOrder, SparseField< Data_T >::m_blockRes, and FieldRes::m_dataWindow.
|
virtual |
Read access to a voxel. The coordinates are in integer voxel space .
Implements Field< Data_T >.
Definition at line 1568 of file SparseField.h.
References SparseField< Data_T >::fastValue().
Referenced by SparseField< Data_T >::clear().
|
virtual |
Returns the memory usage (in bytes)
Reimplemented from FieldRes.
Definition at line 1678 of file SparseField.h.
References SparseField< Data_T >::blockSize(), SparseField< Data_T >::m_blockOrder, SparseField< Data_T >::m_blocks, and SparseField< Data_T >::m_numBlocks.
|
virtual |
Counts the number of voxels. For most fields, this is just the volume of the data window, but sparse data structures can override this to return a better value.
Reimplemented from FieldRes.
Definition at line 1696 of file SparseField.h.
References SparseField< Data_T >::blockSize(), SparseField< Data_T >::m_blockOrder, SparseField< Data_T >::m_blocks, and SparseField< Data_T >::m_numBlocks.
|
virtual |
Write access to a voxel. The coordinates are global coordinates.
Implements WritableField< Data_T >.
Definition at line 1576 of file SparseField.h.
References SparseField< Data_T >::fastLValue().
Data_T SparseField< Data_T >::fastValue | ( | int | i, |
int | j, | ||
int | k | ||
) | const |
Read access to voxel. Notice that this is non-virtual.
Definition at line 1584 of file SparseField.h.
References SparseFileManager::activateBlock(), SparseField< Data_T >::applyDataWindowOffset(), SparseField< Data_T >::blockId(), SparseFileManager::decBlockRef(), Sparse::SparseBlock< Data_T >::emptyValue, SparseField< Data_T >::getBlockCoord(), SparseField< Data_T >::getVoxelInBlock(), SparseFileManager::incBlockRef(), Sparse::SparseBlock< Data_T >::isAllocated, SparseField< Data_T >::m_blockOrder, SparseField< Data_T >::m_blocks, FieldRes::m_dataWindow, SparseField< Data_T >::m_fileId, SparseField< Data_T >::m_fileManager, and Sparse::SparseBlock< Data_T >::value().
Referenced by LinearSparseFieldInterp< Data_T >::sample(), and SparseField< Data_T >::value().
Data_T & SparseField< Data_T >::fastLValue | ( | int | i, |
int | j, | ||
int | k | ||
) |
Write access to voxel. Notice that this is non-virtual.
Definition at line 1623 of file SparseField.h.
References SparseField< Data_T >::applyDataWindowOffset(), SparseField< Data_T >::blockId(), SparseField< Data_T >::blockSize(), SparseField< Data_T >::getBlockCoord(), SparseField< Data_T >::getVoxelInBlock(), Sparse::SparseBlock< Data_T >::isAllocated, SparseField< Data_T >::m_blockOrder, SparseField< Data_T >::m_blocks, FieldRes::m_dataWindow, SparseField< Data_T >::m_dummy, SparseField< Data_T >::m_fileManager, Msg::print(), Sparse::SparseBlock< Data_T >::resize(), Msg::SevWarning, and Sparse::SparseBlock< Data_T >::value().
Referenced by SparseField< Data_T >::lvalue().
Data_T * SparseField< Data_T >::blockData | ( | int | bi, |
int | bj, | ||
int | bk | ||
) | const |
Returns a pointer to the data in a block, or null if the given block is unallocated.
Definition at line 1664 of file SparseField.h.
References SparseField< Data_T >::blockId(), Sparse::SparseBlock< Data_T >::data, Sparse::SparseBlock< Data_T >::isAllocated, and SparseField< Data_T >::m_blocks.
Referenced by LinearSparseFieldInterp< Data_T >::sample().
|
inlinevirtual |
Returns a pointer to a copy of the field, pure virtual so ensure derived classes properly implement it.
Implements FieldBase.
Definition at line 517 of file SparseField.h.
SparseField< Data_T >::const_iterator SparseField< Data_T >::cbegin | ( | ) | const |
Const iterator to first element. "cbegin" matches the tr1 c++ standard.
Definition at line 1714 of file SparseField.h.
References SparseField< Data_T >::cend(), FieldRes::dataResolution(), SparseField< Data_T >::m_blockOrder, and FieldRes::m_dataWindow.
SparseField< Data_T >::const_iterator SparseField< Data_T >::cbegin | ( | const Box3i & | subset | ) | const |
Const iterator to first element of specific subset.
Definition at line 1726 of file SparseField.h.
References SparseField< Data_T >::cend(), and SparseField< Data_T >::m_blockOrder.
SparseField< Data_T >::const_iterator SparseField< Data_T >::cend | ( | ) | const |
Const iterator pointing one element past the last valid one.
Definition at line 1737 of file SparseField.h.
References SparseField< Data_T >::m_blockOrder, and FieldRes::m_dataWindow.
Referenced by SparseField< Data_T >::cbegin().
SparseField< Data_T >::const_iterator SparseField< Data_T >::cend | ( | const Box3i & | subset | ) | const |
Const iterator pointing one element past the last valid one (for a subset)
Definition at line 1750 of file SparseField.h.
References SparseField< Data_T >::m_blockOrder.
SparseField< Data_T >::iterator SparseField< Data_T >::begin | ( | ) |
Iterator to first element.
Definition at line 1762 of file SparseField.h.
References FieldRes::dataResolution(), SparseField< Data_T >::end(), SparseField< Data_T >::m_blockOrder, and FieldRes::m_dataWindow.
SparseField< Data_T >::iterator SparseField< Data_T >::begin | ( | const Box3i & | subset | ) |
Iterator to first element of specific subset.
Definition at line 1773 of file SparseField.h.
References SparseField< Data_T >::end(), and SparseField< Data_T >::m_blockOrder.
SparseField< Data_T >::iterator SparseField< Data_T >::end | ( | ) |
Iterator pointing one element past the last valid one.
Definition at line 1784 of file SparseField.h.
References SparseField< Data_T >::m_blockOrder, and FieldRes::m_dataWindow.
Referenced by SparseField< Data_T >::begin(), SparseField< Data_T >::clear(), and SparseField< Data_T >::getGrainBounds().
SparseField< Data_T >::iterator SparseField< Data_T >::end | ( | const Box3i & | subset | ) |
Iterator pointing one element past the last valid one (for a subset)
Definition at line 1796 of file SparseField.h.
References SparseField< Data_T >::m_blockOrder.
SparseField< Data_T >::block_iterator SparseField< Data_T >::blockBegin | ( | ) | const |
Definition at line 1807 of file SparseField.h.
References SparseField< Data_T >::blockEnd(), FieldRes::dataResolution(), and SparseField< Data_T >::m_blockRes.
SparseField< Data_T >::block_iterator SparseField< Data_T >::blockEnd | ( | ) | const |
Const iterator pointing to element one past the last valid block.
Definition at line 1819 of file SparseField.h.
References SparseField< Data_T >::m_blockRes.
Referenced by SparseField< Data_T >::blockBegin().
void SparseField< Data_T >::addReference | ( | const std::string & | filename, |
const std::string & | layerPath, | ||
int | valuesPerBlock, | ||
int | occupiedBlocks | ||
) |
Internal function to create a Reference for the current field, for use in dynamic reading.
Definition at line 1365 of file SparseField.h.
References SparseFileManager::getNextId(), SparseField< Data_T >::m_fileId, SparseField< Data_T >::m_fileManager, SparseField< Data_T >::m_numBlocks, SparseFileManager::reference(), and SparseFileManager::singleton().
Referenced by SparseField< Data_T >::copySparseField(), and SparseFieldIO::readData().
void SparseField< Data_T >::setupReferenceBlocks | ( | ) |
Internal function to setup the Reference's block pointers, for use with dynamic reading.
Definition at line 1397 of file SparseField.h.
References SparseFile::Reference< Data_T >::blocks, SparseFile::Reference< Data_T >::fileBlockIndices, SparseField< Data_T >::m_blocks, SparseField< Data_T >::m_fileId, SparseField< Data_T >::m_fileManager, SparseField< Data_T >::m_numBlocks, and SparseFileManager::reference().
Referenced by SparseField< Data_T >::copySparseField(), and SparseFieldIO::readData().
|
inlineprotectedvirtual |
Subclasses should re-implement this if they need to perform memory allocations, etc. every time the size of the storage changes.
Reimplemented from ResizableField< Data_T >.
Definition at line 587 of file SparseField.h.
|
protected |
Initializes the block structure. Will clear any existing data.
Definition at line 1828 of file SparseField.h.
References SparseField< Data_T >::blockRes(), detail::ceil(), SparseField< Data_T >::m_blockOrder, SparseField< Data_T >::m_blockRes, SparseField< Data_T >::m_blocks, SparseField< Data_T >::m_blockXYSize, FieldRes::m_dataWindow, and SparseField< Data_T >::m_numBlocks.
Referenced by SparseField< Data_T >::clear(), SparseField< Data_T >::copySparseField(), SparseField< Data_T >::setBlockOrder(), and SparseField< Data_T >::SparseField().
|
protected |
Deallocated the data of the given block and sets its empty value.
Block::clear() deallocates the data
Definition at line 1940 of file SparseField.h.
References Sparse::SparseBlock< Data_T >::clear(), Sparse::SparseBlock< Data_T >::emptyValue, FIELD3D_NAMESPACE_HEADER_CLOSE, and Sparse::SparseBlock< Data_T >::isAllocated.
Referenced by SparseField< Data_T >::releaseBlocks(), and SparseField< Data_T >::setBlockEmptyValue().
|
private |
Copies internal data, including blocks, from another SparseField, used by copy constructor and operator=.
Definition at line 1328 of file SparseField.h.
References SparseField< Data_T >::addReference(), Sparse::SparseBlock< Data_T >::copy(), SparseField< Data_T >::copyBlockStates(), Sparse::SparseBlock< Data_T >::emptyValue, SparseFile::Reference< Data_T >::filename, Sparse::SparseBlock< Data_T >::isAllocated, SparseFile::Reference< Data_T >::layerPath, SparseField< Data_T >::m_blockOrder, SparseField< Data_T >::m_blockRes, SparseField< Data_T >::m_blocks, SparseField< Data_T >::m_blockXYSize, SparseField< Data_T >::m_fileId, SparseField< Data_T >::m_fileManager, SparseField< Data_T >::m_numBlocks, SparseFile::Reference< Data_T >::occupiedBlocks, SparseFileManager::reference(), SparseField< Data_T >::setupBlocks(), SparseField< Data_T >::setupReferenceBlocks(), and SparseFile::Reference< Data_T >::valuesPerBlock.
Referenced by SparseField< Data_T >::operator=(), and SparseField< Data_T >::SparseField().
|
private |
Internal function to copy empty values and allocated flags, without copying data, used when copying a dynamically read field.
Definition at line 1383 of file SparseField.h.
References Sparse::SparseBlock< Data_T >::clear(), Sparse::SparseBlock< Data_T >::emptyValue, Sparse::SparseBlock< Data_T >::isAllocated, SparseField< Data_T >::m_blocks, and SparseField< Data_T >::m_numBlocks.
Referenced by SparseField< Data_T >::copySparseField().
|
friend |
Definition at line 578 of file SparseField.h.
SparseField< Data_T >::DEFINE_FIELD_RTTI_CONCRETE_CLASS |
Definition at line 366 of file SparseField.h.
SparseField< Data_T >::FIELD3D_CLASSNAME_CLASSTYPE_IMPLEMENTATION |
Definition at line 515 of file SparseField.h.
|
protected |
Block order (size = 2^blockOrder)
Definition at line 610 of file SparseField.h.
Referenced by SparseField< Data_T >::begin(), SparseField< Data_T >::blockOrder(), SparseField< Data_T >::blockSize(), SparseField< Data_T >::cbegin(), SparseField< Data_T >::cend(), SparseField< Data_T >::copySparseField(), SparseField< Data_T >::end(), SparseField< Data_T >::fastLValue(), SparseField< Data_T >::fastValue(), SparseField< Data_T >::getBlockCoord(), SparseField< Data_T >::getGrainBounds(), SparseField< Data_T >::getVoxelInBlock(), SparseField< Data_T >::memSize(), SparseFieldIO::readData(), SparseField< Data_T >::setBlockOrder(), SparseField< Data_T >::setupBlocks(), SparseField< Data_T >::voxelCount(), and SparseFieldIO::writeInternal().
|
protected |
Block array resolution.
Definition at line 612 of file SparseField.h.
Referenced by SparseField< Data_T >::blockBegin(), SparseField< Data_T >::blockEnd(), SparseField< Data_T >::blockId(), SparseField< Data_T >::blockIndexIsValid(), SparseField< Data_T >::blockRes(), SparseField< Data_T >::copySparseField(), SparseField< Data_T >::getGrainBounds(), SparseField< Data_T >::releaseBlocks(), SparseField< Data_T >::setupBlocks(), and SparseFieldIO::writeInternal().
|
protected |
Block array res.x * res.y.
Definition at line 614 of file SparseField.h.
Referenced by SparseField< Data_T >::blockId(), SparseField< Data_T >::copySparseField(), and SparseField< Data_T >::setupBlocks().
|
protected |
Array of blocks. Not using std::vector since SparseBlock is noncopyable.
Definition at line 616 of file SparseField.h.
Referenced by SparseField< Data_T >::blockData(), SparseField< Data_T >::blockIsAllocated(), SparseField< Data_T >::clear(), SparseField< Data_T >::copyBlockStates(), SparseField< Data_T >::copySparseField(), SparseField< Data_T >::fastLValue(), SparseField< Data_T >::fastValue(), SparseField< Data_T >::getBlockEmptyValue(), SparseField< Data_T >::memSize(), SparseFieldIO::readData(), SparseField< Data_T >::releaseBlocks(), SparseField< Data_T >::setBlockEmptyValue(), SparseField< Data_T >::setupBlocks(), SparseField< Data_T >::setupReferenceBlocks(), SparseField< Data_T >::voxelCount(), SparseFieldIO::writeInternal(), and SparseField< Data_T >::~SparseField().
|
protected |
Number of blocks in field.
Definition at line 618 of file SparseField.h.
Referenced by SparseField< Data_T >::addReference(), SparseField< Data_T >::clear(), SparseField< Data_T >::copyBlockStates(), SparseField< Data_T >::copySparseField(), SparseField< Data_T >::memSize(), SparseField< Data_T >::numGrains(), SparseField< Data_T >::releaseBlocks(), SparseField< Data_T >::setupBlocks(), SparseField< Data_T >::setupReferenceBlocks(), and SparseField< Data_T >::voxelCount().
|
protected |
Pointer to SparseFileManager. Used when doing dynamic reading. NULL if not in use.
Definition at line 622 of file SparseField.h.
Referenced by SparseField< Data_T >::activateBlock(), SparseField< Data_T >::addReference(), SparseField< Data_T >::copySparseField(), SparseField< Data_T >::decBlockRef(), SparseField< Data_T >::fastLValue(), SparseField< Data_T >::fastValue(), SparseField< Data_T >::incBlockRef(), SparseField< Data_T >::setupReferenceBlocks(), and SparseField< Data_T >::~SparseField().
|
protected |
File id. Used with m_fileManager if active. Otherwise -1.
Definition at line 624 of file SparseField.h.
Referenced by SparseField< Data_T >::activateBlock(), SparseField< Data_T >::addReference(), SparseField< Data_T >::copySparseField(), SparseField< Data_T >::decBlockRef(), SparseField< Data_T >::fastValue(), SparseField< Data_T >::incBlockRef(), SparseField< Data_T >::setupReferenceBlocks(), and SparseField< Data_T >::~SparseField().
|
protected |
Dummy value used when needing to return but indicating a failed call.
Definition at line 627 of file SparseField.h.
Referenced by SparseField< Data_T >::fastLValue().
|
staticprivate |
Definition at line 633 of file SparseField.h.