Field3D
|
This subclass stores a MIP representation of a Field_T field. More...
#include <MIPField.h>
Public Types | |
typedef MIPField< Field_T > | class_type |
typedef CubicMIPFieldInterp< Data_T > | CubicInterp |
typedef Field_T::value_type | Data_T |
typedef Field_T::Ptr | FieldPtr |
typedef std::vector< FieldPtr > | FieldVec |
typedef MIPLinearInterp< MIPField< Field_T > > | LinearInterp |
typedef Field_T | NestedType |
typedef EmptyField< Data_T > | ProxyField |
typedef ProxyField::Ptr | ProxyPtr |
typedef std::vector< ProxyPtr > | ProxyVec |
typedef boost::intrusive_ptr< MIPField > | Ptr |
typedef Data_T | value_type |
typedef std::vector< Ptr > | Vec |
![]() | |
typedef MIPBase< Field_T::value_type > | class_type |
typedef boost::intrusive_ptr< MIPBase > | Ptr |
![]() | |
typedef Field< Field_T::value_type > | class_type |
typedef boost::intrusive_ptr< Field > | Ptr |
typedef Field_T::value_type | 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 | clear () |
Clears all the levels of the MIP field. More... | |
Field_T::Ptr | concreteMipLevel (const size_t level) const |
Returns a concretely typed pointer to a MIP level. More... | |
Data_T | fastMipValue (size_t level, int i, int j, int k) const |
Read access to voxel at a given MIP level. More... | |
virtual void | getVsMIPCoord (const V3f &vsP, const size_t level, V3f &outVsP) const |
Given a voxel space coordinate in the 0-level field, computes the coordinate in another level. More... | |
virtual bool | levelLoaded (const size_t level) const |
Whether a given MIP level is loaded. More... | |
virtual Field< Data_T >::Ptr | mipLevel (const size_t level) const |
Returns a MIP level field. More... | |
virtual V3i | mipResolution (size_t level) const |
Returns the resolution of a given MIP level. More... | |
virtual Data_T | mipValue (size_t level, int i, int j, int k) const |
Read access to a voxel in a given MIP level. More... | |
const Field_T * | rawMipLevel (const size_t level) const |
Returns a raw pointer to a MIP level. More... | |
void | setup (const FieldVec &fields) |
Sets up the MIP field given a set of non-MIP fields This call performs sanity checking to ensure that MIP properties are satisfied for each level. In this case, all MIP levels are available in memory. More... | |
void | setupLazyLoad (const ProxyVec &proxies, const typename LazyLoadAction< Field_T >::Vec &actions) |
Sets up the MIP field in lazy-load mode. More... | |
Constructors & destructor | |
MIPField () | |
Constructs an empty MIP field. More... | |
MIPField (const MIPField &other) | |
Copy constructor. We need this because a) we own a mutex and b) we own shared pointers and shallow copies are not good enough. More... | |
const MIPField & | operator= (const MIPField &rhs) |
Assignment operator. More... | |
From FieldRes | |
Returns -current- memory use, rather than the amount used if all levels were loaded. | |
virtual long long int | memSize () const |
Returns the memory usage (in bytes) More... | |
virtual void | mappingChanged () |
We need to know if the mapping changed so that we may update the MIP levels' mappings. More... | |
From Field | |
For a MIP field, the common value() call accesses data at level 0 only. | |
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 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... | |
![]() | |
size_t | lowestLevel () const |
Lowest MIP level to use. More... | |
MIPBase () | |
size_t | numLevels () const |
Number of MIP levels. More... | |
void | setLowestLevel (size_t level) |
Sets the lowest MIP level to use. Defaults to zero, but can be set higher to prevent high resolution levels from being accessed. 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... | |
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 DEFINE_FIELD_RTTI_CONCRETE_CLASS 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 () |
Protected Types | |
typedef MIPBase< Data_T > | base |
![]() | |
typedef Field< Field_T::value_type > | base |
![]() | |
typedef MatrixFieldMapping | default_mapping |
Protected Member Functions | |
const MIPField & | init (const MIPField &rhs) |
Copies from a second MIPField. More... | |
void | loadLevelFromDisk (size_t level) const |
Loads the given level from disk. More... | |
template<typename T > | |
void | sanityChecks (const T &fields) |
Sanity checks to ensure that the provided Fields are a MIP representation. More... | |
void | updateAuxMembers () const |
Updates the dependent data members based on m_field. More... | |
void | updateMapping (FieldRes::Ptr field) |
Updates the mapping, extents and data window to match the given field. Used so that the MIPField will appear to have the same mapping in space as the level-0 field. More... | |
Protected Attributes | |
std::vector< FieldPtr > | m_fields |
Storage of all MIP levels. Some or all of the pointers may be NULL. This is mutable because it needs updating during lazy loading of data. More... | |
boost::shared_ptr< boost::mutex > | m_ioMutex |
Mutex lock around IO. Used to make sure only one thread reads MIP level data at a time. When a field is cloned, the two new fields will share the mutex, since they point to the same file. More... | |
LazyLoadAction< Field_T >::Vec | m_loadActions |
Lazy load actions. Only used if setupLazyLoad() has been called. More... | |
std::vector< V3i > | m_mipRes |
Resolution of each MIP level. More... | |
std::vector< Field_T * > | m_rawFields |
Raw pointers to MIP levels. More... | |
std::vector< V3f > | m_relativeResolution |
Relative resolution of each MIP level. Pre-computed to avoid int-to-float conversions. More... | |
![]() | |
size_t | m_lowestLevel |
The lowest MIP level to use. Defaults to 0, but can be set higher to prevent high resolution levels from being accessed. More... | |
size_t | m_numLevels |
Number of MIP levels. The default is 1. 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... | |
Static Protected Attributes | |
static NestedFieldType< MIPField< Field_T > > | ms_classType |
![]() | |
static TemplatedFieldType< MIPBase< Field_T::value_type > > | ms_classType |
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 | |
![]() | |
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... | |
This subclass stores a MIP representation of a Field_T field.
Each level in the MIPField is stored as a SparseField, and each level shares the same FieldMapping definition, even though their resolution is different.
The class is lazy loading, such that no MIP levels are read from disk until they are needed. On top of this, standard SparseField caching (memory limiting) is available, and operates the same as normal SparseFields.
The class is thread safe, and ensures that data is read from disk from in one single thread, using the double-checked locking mechanism.
Interpolation into a MIP field may be done either directly to a single level, or by blending between two MIP levels. When blending, each field is assumed to match the other levels only in local-space.
Definition at line 109 of file MIPField.h.
Definition at line 115 of file MIPField.h.
typedef Field_T MIPField< Field_T >::NestedType |
Definition at line 116 of file MIPField.h.
Definition at line 118 of file MIPField.h.
Definition at line 119 of file MIPField.h.
typedef MIPLinearInterp<MIPField<Field_T> > MIPField< Field_T >::LinearInterp |
Definition at line 121 of file MIPField.h.
typedef CubicMIPFieldInterp<Data_T> MIPField< Field_T >::CubicInterp |
Definition at line 122 of file MIPField.h.
typedef Data_T MIPField< Field_T >::value_type |
Definition at line 124 of file MIPField.h.
typedef EmptyField<Data_T> MIPField< Field_T >::ProxyField |
Definition at line 126 of file MIPField.h.
typedef ProxyField::Ptr MIPField< Field_T >::ProxyPtr |
Definition at line 127 of file MIPField.h.
Definition at line 128 of file MIPField.h.
Definition at line 130 of file MIPField.h.
Definition at line 131 of file MIPField.h.
typedef MIPField<Field_T> MIPField< Field_T >::class_type |
Definition at line 173 of file MIPField.h.
Definition at line 242 of file MIPField.h.
Constructs an empty MIP field.
Definition at line 314 of file MIPField.h.
References MIPField< Field_T >::m_fields, and MIPBase< Data_T >::m_numLevels.
Copy constructor. We need this because a) we own a mutex and b) we own shared pointers and shallow copies are not good enough.
Definition at line 324 of file MIPField.h.
References MIPField< Field_T >::init().
const MIPField< Field_T > & MIPField< Field_T >::operator= | ( | const MIPField< Field_T > & | rhs | ) |
Assignment operator.
Definition at line 334 of file MIPField.h.
References MIPField< Field_T >::init(), and RefBase::operator=().
|
virtual |
Returns the memory usage (in bytes)
Reimplemented from FieldRes.
Definition at line 522 of file MIPField.h.
References MIPField< Field_T >::m_fields.
|
virtual |
We need to know if the mapping changed so that we may update the MIP levels' mappings.
Reimplemented from FieldRes.
Definition at line 536 of file MIPField.h.
References detail::adjustedMIPFieldMapping(), FieldRes::dataWindow(), FieldRes::extents(), MIPField< Field_T >::m_fields, and FieldRes::mapping().
|
virtual |
Read access to a voxel. The coordinates are in integer voxel space .
Implements Field< Field_T::value_type >.
Definition at line 499 of file MIPField.h.
References MIPField< Field_T >::fastMipValue().
|
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 508 of file MIPField.h.
References MIPField< Field_T >::m_fields.
|
inlinestatic |
Definition at line 176 of file MIPField.h.
|
inlinestatic |
Definition at line 181 of file MIPField.h.
|
virtual |
Read access to a voxel in a given MIP level.
level | The MIP level to read from |
Implements MIPBase< Field_T::value_type >.
Definition at line 556 of file MIPField.h.
References MIPField< Field_T >::fastMipValue().
Returns the resolution of a given MIP level.
Implements MIPBase< Field_T::value_type >.
Definition at line 564 of file MIPField.h.
References MIPField< Field_T >::m_mipRes, and MIPBase< Data_T >::m_numLevels.
|
virtual |
Whether a given MIP level is loaded.
Implements MIPBase< Field_T::value_type >.
Definition at line 573 of file MIPField.h.
References MIPBase< Data_T >::m_numLevels, and MIPField< Field_T >::m_rawFields.
|
virtual |
Given a voxel space coordinate in the 0-level field, computes the coordinate in another level.
Implements MIPBase< Field_T::value_type >.
Definition at line 582 of file MIPField.h.
References MIPField< Field_T >::m_relativeResolution.
|
virtual |
Returns a MIP level field.
Implements MIPBase< Field_T::value_type >.
Definition at line 592 of file MIPField.h.
References MIPField< Field_T >::loadLevelFromDisk(), MIPField< Field_T >::m_fields, MIPBase< Data_T >::m_numLevels, and MIPField< Field_T >::m_rawFields.
Referenced by MIPField< Field_T >::setupLazyLoad().
MIPField< Field_T >::Data_T MIPField< Field_T >::fastMipValue | ( | size_t | level, |
int | i, | ||
int | j, | ||
int | k | ||
) | const |
Read access to voxel at a given MIP level.
Definition at line 606 of file MIPField.h.
References MIPField< Field_T >::loadLevelFromDisk(), MIPBase< Data_T >::m_numLevels, and MIPField< Field_T >::m_rawFields.
Referenced by MIPField< Field_T >::mipValue(), and MIPField< Field_T >::value().
|
inlinevirtual |
Returns a pointer to a copy of the field, pure virtual so ensure derived classes properly implement it.
Implements FieldBase.
Definition at line 207 of file MIPField.h.
Referenced by MIPField< Field_T >::init().
void MIPField< Field_T >::clear | ( | ) |
Clears all the levels of the MIP field.
Definition at line 379 of file MIPField.h.
References MIPField< Field_T >::m_fields, MIPBase< Data_T >::m_lowestLevel, MIPBase< Data_T >::m_numLevels, and MIPField< Field_T >::m_rawFields.
Referenced by MIPField< Field_T >::setup(), and MIPField< Field_T >::setupLazyLoad().
Sets up the MIP field given a set of non-MIP fields This call performs sanity checking to ensure that MIP properties are satisfied for each level. In this case, all MIP levels are available in memory.
Definition at line 390 of file MIPField.h.
References MIPField< Field_T >::clear(), MIPField< Field_T >::m_fields, MIPBase< Data_T >::m_lowestLevel, MIPField< Field_T >::m_mipRes, MIPBase< Data_T >::m_numLevels, MIPField< Field_T >::m_relativeResolution, MIPField< Field_T >::sanityChecks(), MIPField< Field_T >::setupLazyLoad(), MIPField< Field_T >::updateAuxMembers(), and MIPField< Field_T >::updateMapping().
void MIPField< Field_T >::setupLazyLoad | ( | const ProxyVec & | proxies, |
const typename LazyLoadAction< Field_T >::Vec & | actions | ||
) |
Sets up the MIP field in lazy-load mode.
mipGroupPath | Path in F3D file to read data from. |
Definition at line 418 of file MIPField.h.
References MIPField< Field_T >::clear(), MIPField< Field_T >::loadLevelFromDisk(), MIPField< Field_T >::m_fields, MIPField< Field_T >::m_loadActions, MIPBase< Data_T >::m_lowestLevel, MIPField< Field_T >::m_mipRes, MIPBase< Data_T >::m_numLevels, MIPField< Field_T >::m_rawFields, MIPField< Field_T >::m_relativeResolution, MIPField< Field_T >::mipLevel(), MIPField< Field_T >::sanityChecks(), MIPField< Field_T >::updateAuxMembers(), and MIPField< Field_T >::updateMapping().
Referenced by MIPField< Field_T >::setup().
const Field_T * MIPField< Field_T >::rawMipLevel | ( | const size_t | level | ) | const |
Returns a raw pointer to a MIP level.
Definition at line 471 of file MIPField.h.
References MIPField< Field_T >::loadLevelFromDisk(), MIPBase< Data_T >::m_numLevels, and MIPField< Field_T >::m_rawFields.
Field_T::Ptr MIPField< Field_T >::concreteMipLevel | ( | const size_t | level | ) | const |
Returns a concretely typed pointer to a MIP level.
Definition at line 485 of file MIPField.h.
References MIPField< Field_T >::loadLevelFromDisk(), MIPField< Field_T >::m_fields, MIPBase< Data_T >::m_numLevels, and MIPField< Field_T >::m_rawFields.
|
protected |
Copies from a second MIPField.
Definition at line 344 of file MIPField.h.
References MIPField< Field_T >::clone(), field_dynamic_cast(), MIPField< Field_T >::m_fields, MIPField< Field_T >::m_ioMutex, MIPField< Field_T >::m_loadActions, MIPField< Field_T >::m_mipRes, MIPField< Field_T >::m_rawFields, and MIPField< Field_T >::m_relativeResolution.
Referenced by MIPField< Field_T >::MIPField(), and MIPField< Field_T >::operator=().
|
protected |
Updates the mapping, extents and data window to match the given field. Used so that the MIPField will appear to have the same mapping in space as the level-0 field.
Definition at line 631 of file MIPField.h.
References FieldRes::m_dataWindow, FieldRes::m_extents, and FieldRes::setMapping().
Referenced by MIPField< Field_T >::setup(), and MIPField< Field_T >::setupLazyLoad().
|
protected |
Updates the dependent data members based on m_field.
Definition at line 620 of file MIPField.h.
References MIPField< Field_T >::m_fields, and MIPField< Field_T >::m_rawFields.
Referenced by MIPField< Field_T >::loadLevelFromDisk(), MIPField< Field_T >::setup(), and MIPField< Field_T >::setupLazyLoad().
|
protected |
Loads the given level from disk.
Definition at line 641 of file MIPField.h.
References detail::adjustedMIPFieldMapping(), FieldRes::dataWindow(), FieldRes::extents(), MIPField< Field_T >::m_fields, MIPField< Field_T >::m_ioMutex, MIPField< Field_T >::m_loadActions, MIPField< Field_T >::m_rawFields, FieldRes::mapping(), and MIPField< Field_T >::updateAuxMembers().
Referenced by MIPField< Field_T >::concreteMipLevel(), MIPField< Field_T >::fastMipValue(), MIPField< Field_T >::mipLevel(), MIPField< Field_T >::rawMipLevel(), and MIPField< Field_T >::setupLazyLoad().
|
protected |
Sanity checks to ensure that the provided Fields are a MIP representation.
Definition at line 668 of file MIPField.h.
References FIELD3D_NAMESPACE_HEADER_CLOSE.
Referenced by MIPField< Field_T >::setup(), and MIPField< Field_T >::setupLazyLoad().
MIPField< Field_T >::FIELD3D_CLASSNAME_CLASSTYPE_IMPLEMENTATION |
Definition at line 205 of file MIPField.h.
|
staticprotected |
Definition at line 246 of file MIPField.h.
Storage of all MIP levels. Some or all of the pointers may be NULL. This is mutable because it needs updating during lazy loading of data.
Definition at line 256 of file MIPField.h.
Referenced by MIPField< Field_T >::clear(), MIPField< Field_T >::concreteMipLevel(), MIPField< Field_T >::init(), MIPField< Field_T >::loadLevelFromDisk(), MIPField< Field_T >::mappingChanged(), MIPField< Field_T >::memSize(), MIPField< Field_T >::MIPField(), MIPField< Field_T >::mipLevel(), MIPField< Field_T >::setup(), MIPField< Field_T >::setupLazyLoad(), MIPField< Field_T >::updateAuxMembers(), and MIPField< Field_T >::voxelCount().
|
mutableprotected |
Lazy load actions. Only used if setupLazyLoad() has been called.
Definition at line 258 of file MIPField.h.
Referenced by MIPField< Field_T >::init(), MIPField< Field_T >::loadLevelFromDisk(), and MIPField< Field_T >::setupLazyLoad().
|
mutableprotected |
Raw pointers to MIP levels.
Definition at line 262 of file MIPField.h.
Referenced by MIPField< Field_T >::clear(), MIPField< Field_T >::concreteMipLevel(), MIPField< Field_T >::fastMipValue(), MIPField< Field_T >::init(), MIPField< Field_T >::levelLoaded(), MIPField< Field_T >::loadLevelFromDisk(), MIPField< Field_T >::mipLevel(), MIPField< Field_T >::rawMipLevel(), MIPField< Field_T >::setupLazyLoad(), and MIPField< Field_T >::updateAuxMembers().
Resolution of each MIP level.
Definition at line 264 of file MIPField.h.
Referenced by MIPField< Field_T >::init(), MIPField< Field_T >::mipResolution(), MIPField< Field_T >::setup(), and MIPField< Field_T >::setupLazyLoad().
Relative resolution of each MIP level. Pre-computed to avoid int-to-float conversions.
Definition at line 267 of file MIPField.h.
Referenced by MIPField< Field_T >::getVsMIPCoord(), MIPField< Field_T >::init(), MIPField< Field_T >::setup(), and MIPField< Field_T >::setupLazyLoad().
|
protected |
Mutex lock around IO. Used to make sure only one thread reads MIP level data at a time. When a field is cloned, the two new fields will share the mutex, since they point to the same file.
Definition at line 271 of file MIPField.h.
Referenced by MIPField< Field_T >::init(), and MIPField< Field_T >::loadLevelFromDisk().