Field3D
|
This subclass of Field stores data in a contiguous std::vector. More...
#include <DenseField.h>
Classes | |
class | const_iterator |
class | iterator |
Public Types | |
typedef ResizableField< Data_T > | base |
Convenience typedef for referring to base class. | |
typedef ResizableField< Data_T > | base |
Convenience typedef for referring to base class. | |
typedef DenseField< Data_T > | class_type |
typedef DenseField< Data_T > | class_type |
typedef CubicGenericFieldInterp < DenseField< Data_T > > | CubicInterp |
typedef CubicGenericFieldInterp < DenseField< Data_T > > | CubicInterp |
typedef LinearGenericFieldInterp < DenseField< Data_T > > | LinearInterp |
typedef LinearGenericFieldInterp < DenseField< Data_T > > | LinearInterp |
typedef boost::intrusive_ptr < DenseField > | Ptr |
typedef boost::intrusive_ptr < DenseField > | Ptr |
typedef std::vector< Ptr > | Vec |
This is a convenience typedef for the list that Field3DInputFile::readScalarLayers() and Field3DInputFile::readVectorLayers() will return its data in. | |
typedef std::vector< Ptr > | Vec |
This is a convenience typedef for the list that Field3DInputFile::readScalarLayers() and Field3DInputFile::readVectorLayers() will return its data in. | |
Public Member Functions | |
virtual void | clear (const Data_T &value) |
Clears all the voxels in the storage. | |
virtual void | clear (const Data_T &value) |
Clears all the voxels in the storage. | |
Data_T & | fastLValue (int i, int j, int k) |
Write access to voxel. Notice that this is non-virtual. | |
Data_T & | fastLValue (int i, int j, int k) |
Write access to voxel. Notice that this is non-virtual. | |
const Data_T & | fastValue (int i, int j, int k) const |
Read access to voxel. Notice that this is non-virtual. | |
const Data_T & | fastValue (int i, int j, int k) const |
Read access to voxel. Notice that this is non-virtual. | |
const FIELD3D_VEC3_T< size_t > & | internalMemSize () const |
Returns the internal memory size in each dimension. This is used for example in LinearInterpolator, where it optimizes random access to voxels. | |
const FIELD3D_VEC3_T< size_t > & | internalMemSize () const |
Returns the internal memory size in each dimension. This is used for example in LinearInterpolator, where it optimizes random access to voxels. | |
Constructors & destructor | |
DenseField () | |
Constructs an empty buffer. | |
DenseField () | |
Constructs an empty buffer. | |
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 . | |
virtual long long int | memSize () const |
Returns the memory usage (in bytes) | |
virtual Data_T | value (int i, int j, int k) const |
Read access to a voxel. The coordinates are in integer voxel space . | |
virtual long long int | memSize () const |
Returns the memory usage (in bytes) | |
From WritableField | |
virtual Data_T & | lvalue (int i, int j, int k) |
Write access to a voxel. The coordinates are global coordinates. | |
virtual Data_T & | lvalue (int i, int j, int k) |
Write access to a voxel. The coordinates are global coordinates. | |
Iterators | |
const_iterator | cbegin () const |
Const iterator to first element. "cbegin" matches the tr1 c++ standard. | |
const_iterator | cbegin (const Box3i &subset) const |
Const iterator to first element of specific subset. | |
const_iterator | cend () const |
Const iterator pointing one element past the last valid one. | |
const_iterator | cend (const Box3i &subset) const |
Const iterator pointing one element past the last valid one (for a subset) | |
iterator | begin () |
Iterator to first element. | |
iterator | begin (const Box3i &subset) |
Iterator to first element of specific subset. | |
iterator | end () |
Iterator pointing one element past the last valid one. | |
iterator | end (const Box3i &subset) |
Iterator pointing one element past the last valid one (for a subset) | |
const_iterator | cbegin () const |
Const iterator to first element. "cbegin" matches the tr1 c++ standard. | |
const_iterator | cbegin (const Box3i &subset) const |
Const iterator to first element of specific subset. | |
const_iterator | cend () const |
Const iterator pointing one element past the last valid one. | |
const_iterator | cend (const Box3i &subset) const |
Const iterator pointing one element past the last valid one (for a subset) | |
iterator | begin () |
Iterator to first element. | |
iterator | begin (const Box3i &subset) |
Iterator to first element of specific subset. | |
iterator | end () |
Iterator pointing one element past the last valid one. | |
iterator | end (const Box3i &subset) |
Iterator pointing one element past the last valid one (for a subset) | |
From FieldBase | |
virtual std::string | className () const |
Returns the class name of the object. Used by the class pool and when writing the data to disk. | |
virtual FieldBase::Ptr | clone () const |
Returns a pointer to a copy of the field, pure virtual so ensure derived classes properly implement it. | |
virtual std::string | className () const |
Returns the class name of the object. Used by the class pool and when writing the data to disk. | |
virtual FieldBase::Ptr | clone () const |
Returns a pointer to a copy of the field, pure virtual so ensure derived classes properly implement it. | |
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. | |
virtual void | sizeChanged () |
Subclasses should re-implement this if they need to perform memory allocations, etc. every time the size of the storage changes. | |
Protected Attributes | |
std::vector< Data_T > | m_data |
Field storage. | |
FIELD3D_VEC3_T< size_t > | m_memSize |
Memory allocation size in each dimension. | |
size_t | m_memSizeXY |
X scanline * Y scanline size. | |
Private Member Functions | |
Data_T * | ptr (int i, int j, int k) |
Returns a pointer to a given element. Used by the iterators mainly. | |
const Data_T * | ptr (int i, int j, int k) const |
Returns a pointer to a given element. Used by the iterators mainly. | |
Data_T * | ptr (int i, int j, int k) |
Returns a pointer to a given element. Used by the iterators mainly. | |
const Data_T * | ptr (int i, int j, int k) const |
Returns a pointer to a given element. Used by the iterators mainly. |
This subclass of Field stores data in a contiguous std::vector.
Refer to using_fields for examples of how to use this in your code.
Definition at line 83 of file DenseField.h.
typedef boost::intrusive_ptr<DenseField> DenseField< Data_T >::Ptr |
Reimplemented from ResizableField< Data_T >.
Definition at line 90 of file DenseField.h.
typedef std::vector<Ptr> DenseField< Data_T >::Vec |
This is a convenience typedef for the list that Field3DInputFile::readScalarLayers() and Field3DInputFile::readVectorLayers() will return its data in.
Reimplemented from Field< Data_T >.
Definition at line 91 of file DenseField.h.
typedef LinearGenericFieldInterp<DenseField<Data_T> > DenseField< Data_T >::LinearInterp |
Definition at line 93 of file DenseField.h.
typedef CubicGenericFieldInterp<DenseField<Data_T> > DenseField< Data_T >::CubicInterp |
Definition at line 94 of file DenseField.h.
typedef ResizableField<Data_T> DenseField< Data_T >::base |
Convenience typedef for referring to base class.
Reimplemented from ResizableField< Data_T >.
Definition at line 96 of file DenseField.h.
typedef DenseField<Data_T> DenseField< Data_T >::class_type |
Reimplemented from ResizableField< Data_T >.
Definition at line 123 of file DenseField.h.
typedef boost::intrusive_ptr<DenseField> DenseField< Data_T >::Ptr |
Reimplemented from ResizableField< Data_T >.
Definition at line 90 of file DenseField.h.
typedef std::vector<Ptr> DenseField< Data_T >::Vec |
This is a convenience typedef for the list that Field3DInputFile::readScalarLayers() and Field3DInputFile::readVectorLayers() will return its data in.
Reimplemented from Field< Data_T >.
Definition at line 91 of file DenseField.h.
typedef LinearGenericFieldInterp<DenseField<Data_T> > DenseField< Data_T >::LinearInterp |
Definition at line 93 of file DenseField.h.
typedef CubicGenericFieldInterp<DenseField<Data_T> > DenseField< Data_T >::CubicInterp |
Definition at line 94 of file DenseField.h.
typedef ResizableField<Data_T> DenseField< Data_T >::base |
Convenience typedef for referring to base class.
Reimplemented from ResizableField< Data_T >.
Definition at line 96 of file DenseField.h.
typedef DenseField<Data_T> DenseField< Data_T >::class_type |
Reimplemented from ResizableField< Data_T >.
Definition at line 123 of file DenseField.h.
DenseField< Data_T >::DenseField | ( | ) |
Constructs an empty buffer.
Definition at line 389 of file DenseField.h.
Referenced by DenseField< Data_T >::clone().
: base(), m_memSize(0), m_memSizeXY(0) { // Empty }
DenseField< Data_T >::DenseField | ( | ) |
Constructs an empty buffer.
void DenseField< Data_T >::clear | ( | const Data_T & | value | ) | [virtual] |
Clears all the voxels in the storage.
Reimplemented from WritableField< Data_T >.
Definition at line 399 of file DenseField.h.
Referenced by main().
Data_T DenseField< Data_T >::value | ( | int | i, |
int | j, | ||
int | k | ||
) | const [virtual] |
Read access to a voxel. The coordinates are in integer voxel space .
Implements Field< Data_T >.
Definition at line 407 of file DenseField.h.
{ return fastValue(i, j, k); }
long long int DenseField< Data_T >::memSize | ( | ) | const [virtual] |
Returns the memory usage (in bytes)
Reimplemented from FieldRes.
Definition at line 415 of file DenseField.h.
{ long long int superClassMemSize = base::memSize(); long long int vectorMemSize = m_data.capacity() * sizeof(Data_T); return sizeof(*this) + vectorMemSize + superClassMemSize; }
Data_T & DenseField< Data_T >::lvalue | ( | int | i, |
int | j, | ||
int | k | ||
) | [virtual] |
Write access to a voxel. The coordinates are global coordinates.
Implements WritableField< Data_T >.
Definition at line 425 of file DenseField.h.
{ return fastLValue(i, j, k); }
const Data_T & DenseField< Data_T >::fastValue | ( | int | i, |
int | j, | ||
int | k | ||
) | const |
Read access to voxel. Notice that this is non-virtual.
Definition at line 433 of file DenseField.h.
{ assert (i >= base::m_dataWindow.min.x); assert (i <= base::m_dataWindow.max.x); assert (j >= base::m_dataWindow.min.y); assert (j <= base::m_dataWindow.max.y); assert (k >= base::m_dataWindow.min.z); assert (k <= base::m_dataWindow.max.z); // Add crop window offset i -= base::m_dataWindow.min.x; j -= base::m_dataWindow.min.y; k -= base::m_dataWindow.min.z; // Access data return m_data[i + j * m_memSize.x + k * m_memSizeXY]; }
Data_T & DenseField< Data_T >::fastLValue | ( | int | i, |
int | j, | ||
int | k | ||
) |
Write access to voxel. Notice that this is non-virtual.
Definition at line 452 of file DenseField.h.
{ assert (i >= base::m_dataWindow.min.x); assert (i <= base::m_dataWindow.max.x); assert (j >= base::m_dataWindow.min.y); assert (j <= base::m_dataWindow.max.y); assert (k >= base::m_dataWindow.min.z); assert (k <= base::m_dataWindow.max.z); // Add crop window offset i -= base::m_dataWindow.min.x; j -= base::m_dataWindow.min.y; k -= base::m_dataWindow.min.z; // Access data return m_data[i + j * m_memSize.x + k * m_memSizeXY]; }
DenseField< Data_T >::const_iterator DenseField< Data_T >::cbegin | ( | ) | const |
Const iterator to first element. "cbegin" matches the tr1 c++ standard.
Reimplemented from Field< Data_T >.
Definition at line 472 of file DenseField.h.
References FieldRes::dataResolution().
{ if (FieldRes::dataResolution() == V3i(0)) return cend(); return const_iterator(*this, base::m_dataWindow, base::m_dataWindow.min); }
DenseField< Data_T >::const_iterator DenseField< Data_T >::cbegin | ( | const Box3i & | subset | ) | const |
Const iterator to first element of specific subset.
Reimplemented from Field< Data_T >.
Definition at line 483 of file DenseField.h.
{ if (subset.isEmpty()) return cend(subset); return const_iterator(*this, subset, subset.min); }
DenseField< Data_T >::const_iterator DenseField< Data_T >::cend | ( | ) | const |
Const iterator pointing one element past the last valid one.
Reimplemented from Field< Data_T >.
Definition at line 494 of file DenseField.h.
{ return const_iterator(*this, base::m_dataWindow, V3i(base::m_dataWindow.min.x, base::m_dataWindow.min.y, base::m_dataWindow.max.z + 1)); }
DenseField< Data_T >::const_iterator DenseField< Data_T >::cend | ( | const Box3i & | subset | ) | const |
Const iterator pointing one element past the last valid one (for a subset)
Reimplemented from Field< Data_T >.
Definition at line 506 of file DenseField.h.
{ return const_iterator(*this, subset, V3i(subset.min.x, subset.min.y, subset.max.z + 1)); }
DenseField< Data_T >::iterator DenseField< Data_T >::begin | ( | ) |
Iterator to first element.
Reimplemented from WritableField< Data_T >.
Definition at line 516 of file DenseField.h.
References FieldRes::dataResolution().
Referenced by DenseFieldIO::readData(), and DenseFieldIO::writeData().
{ if (FieldRes::dataResolution() == V3i(0)) return end(); return iterator(*this, base::m_dataWindow, base::m_dataWindow.min); }
DenseField< Data_T >::iterator DenseField< Data_T >::begin | ( | const Box3i & | subset | ) |
Iterator to first element of specific subset.
Reimplemented from WritableField< Data_T >.
Definition at line 526 of file DenseField.h.
{ if (subset.isEmpty()) return end(subset); return iterator(*this, subset, subset.min); }
DenseField< Data_T >::iterator DenseField< Data_T >::end | ( | ) |
Iterator pointing one element past the last valid one.
Reimplemented from WritableField< Data_T >.
Definition at line 537 of file DenseField.h.
{ return iterator(*this, base::m_dataWindow, V3i(base::m_dataWindow.min.x, base::m_dataWindow.min.y, base::m_dataWindow.max.z + 1)); }
DenseField< Data_T >::iterator DenseField< Data_T >::end | ( | const Box3i & | subset | ) |
Iterator pointing one element past the last valid one (for a subset)
Reimplemented from WritableField< Data_T >.
Definition at line 549 of file DenseField.h.
{ return iterator(*this, subset, V3i(subset.min.x, subset.min.y, subset.max.z + 1)); }
const FIELD3D_VEC3_T<size_t>& DenseField< Data_T >::internalMemSize | ( | ) | const [inline] |
Returns the internal memory size in each dimension. This is used for example in LinearInterpolator, where it optimizes random access to voxels.
Definition at line 177 of file DenseField.h.
References DenseField< Data_T >::m_memSize.
Referenced by DenseFieldIO::writeInternal().
{ return m_memSize; }
virtual std::string DenseField< Data_T >::className | ( | ) | const [inline, virtual] |
Returns the class name of the object. Used by the class pool and when writing the data to disk.
Implements FieldBase.
Definition at line 184 of file DenseField.h.
{ return std::string("DenseField"); }
virtual FieldBase::Ptr DenseField< Data_T >::clone | ( | ) | const [inline, virtual] |
Returns a pointer to a copy of the field, pure virtual so ensure derived classes properly implement it.
Implements FieldBase.
Definition at line 187 of file DenseField.h.
References DenseField< Data_T >::DenseField().
{ return Ptr(new DenseField(*this)); }
void DenseField< Data_T >::sizeChanged | ( | ) | [protected, virtual] |
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 558 of file DenseField.h.
{ // Call base class base::sizeChanged(); // Calculate offsets m_memSize = base::m_dataWindow.max - base::m_dataWindow.min + V3i(1); m_memSizeXY = m_memSize.x * m_memSize.y; // Check that mem size is >= 0 in all dimensions if (base::m_dataWindow.max.x < base::m_dataWindow.min.x || base::m_dataWindow.max.y < base::m_dataWindow.min.y || base::m_dataWindow.max.z < base::m_dataWindow.min.z) throw Exc::ResizeException("Attempt to resize ResizableField object " "using negative size. Data window was: " + boost::lexical_cast<std::string>( base::m_dataWindow.min) + " - " + boost::lexical_cast<std::string>( base::m_dataWindow.max)); // Allocate memory try { std::vector<Data_T>().swap(m_data); m_data.resize(m_memSize.x * m_memSize.y * m_memSize.z); } catch (std::bad_alloc &e) { throw Exc::MemoryException("Couldn't allocate DenseField of size " + boost::lexical_cast<std::string>(m_memSize)); } }
Data_T * DenseField< Data_T >::ptr | ( | int | i, |
int | j, | ||
int | k | ||
) | [inline, private] |
Returns a pointer to a given element. Used by the iterators mainly.
Definition at line 592 of file DenseField.h.
{ // Add crop window offset i -= base::m_dataWindow.min.x; j -= base::m_dataWindow.min.y; k -= base::m_dataWindow.min.z; // Access data return &m_data[i + j * m_memSize.x + k * m_memSizeXY]; }
const Data_T * DenseField< Data_T >::ptr | ( | int | i, |
int | j, | ||
int | k | ||
) | const [inline, private] |
Returns a pointer to a given element. Used by the iterators mainly.
Definition at line 605 of file DenseField.h.
{ // Add crop window offset i -= base::m_dataWindow.min.x; j -= base::m_dataWindow.min.y; k -= base::m_dataWindow.min.z; // Access data return &m_data[i + j * m_memSize.x + k * m_memSizeXY]; }
virtual void DenseField< Data_T >::clear | ( | const Data_T & | value | ) | [virtual] |
Clears all the voxels in the storage.
Reimplemented from WritableField< Data_T >.
virtual Data_T DenseField< Data_T >::value | ( | int | i, |
int | j, | ||
int | k | ||
) | const [virtual] |
Read access to a voxel. The coordinates are in integer voxel space .
Implements Field< Data_T >.
virtual long long int DenseField< Data_T >::memSize | ( | ) | const [virtual] |
Returns the memory usage (in bytes)
Reimplemented from FieldRes.
virtual Data_T& DenseField< Data_T >::lvalue | ( | int | i, |
int | j, | ||
int | k | ||
) | [virtual] |
Write access to a voxel. The coordinates are global coordinates.
Implements WritableField< Data_T >.
const Data_T& DenseField< Data_T >::fastValue | ( | int | i, |
int | j, | ||
int | k | ||
) | const |
Read access to voxel. Notice that this is non-virtual.
Data_T& DenseField< Data_T >::fastLValue | ( | int | i, |
int | j, | ||
int | k | ||
) |
Write access to voxel. Notice that this is non-virtual.
const_iterator DenseField< Data_T >::cbegin | ( | ) | const |
Const iterator to first element. "cbegin" matches the tr1 c++ standard.
Reimplemented from Field< Data_T >.
const_iterator DenseField< Data_T >::cbegin | ( | const Box3i & | subset | ) | const |
Const iterator to first element of specific subset.
Reimplemented from Field< Data_T >.
const_iterator DenseField< Data_T >::cend | ( | ) | const |
Const iterator pointing one element past the last valid one.
Reimplemented from Field< Data_T >.
const_iterator DenseField< Data_T >::cend | ( | const Box3i & | subset | ) | const |
Const iterator pointing one element past the last valid one (for a subset)
Reimplemented from Field< Data_T >.
iterator DenseField< Data_T >::begin | ( | ) |
Iterator to first element.
Reimplemented from WritableField< Data_T >.
iterator DenseField< Data_T >::begin | ( | const Box3i & | subset | ) |
Iterator to first element of specific subset.
Reimplemented from WritableField< Data_T >.
iterator DenseField< Data_T >::end | ( | ) |
Iterator pointing one element past the last valid one.
Reimplemented from WritableField< Data_T >.
iterator DenseField< Data_T >::end | ( | const Box3i & | subset | ) |
Iterator pointing one element past the last valid one (for a subset)
Reimplemented from WritableField< Data_T >.
const FIELD3D_VEC3_T<size_t>& DenseField< Data_T >::internalMemSize | ( | ) | const [inline] |
Returns the internal memory size in each dimension. This is used for example in LinearInterpolator, where it optimizes random access to voxels.
Definition at line 177 of file DenseField.h.
References DenseField< Data_T >::m_memSize.
{ return m_memSize; }
virtual std::string DenseField< Data_T >::className | ( | ) | const [inline, virtual] |
Returns the class name of the object. Used by the class pool and when writing the data to disk.
Implements FieldBase.
Definition at line 184 of file DenseField.h.
{ return std::string("DenseField"); }
virtual FieldBase::Ptr DenseField< Data_T >::clone | ( | ) | const [inline, virtual] |
Returns a pointer to a copy of the field, pure virtual so ensure derived classes properly implement it.
Implements FieldBase.
Definition at line 187 of file DenseField.h.
References DenseField< Data_T >::DenseField().
{ return Ptr(new DenseField(*this)); }
virtual void DenseField< Data_T >::sizeChanged | ( | ) | [protected, virtual] |
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 >.
Data_T* DenseField< Data_T >::ptr | ( | int | i, |
int | j, | ||
int | k | ||
) | [inline, private] |
Returns a pointer to a given element. Used by the iterators mainly.
const Data_T* DenseField< Data_T >::ptr | ( | int | i, |
int | j, | ||
int | k | ||
) | const [inline, private] |
Returns a pointer to a given element. Used by the iterators mainly.
FIELD3D_VEC3_T< size_t > DenseField< Data_T >::m_memSize [protected] |
Memory allocation size in each dimension.
Definition at line 201 of file DenseField.h.
Referenced by DenseField< Data_T >::internalMemSize().
size_t DenseField< Data_T >::m_memSizeXY [protected] |
X scanline * Y scanline size.
Definition at line 203 of file DenseField.h.
std::vector< Data_T > DenseField< Data_T >::m_data [protected] |
Field storage.
Definition at line 205 of file DenseField.h.