Field3D
ProceduralField< Data_T > Class Template Reference

#include <ProceduralField.h>

Inheritance diagram for ProceduralField< Data_T >:
Field< Data_T > Field< Data_T > FieldRes FieldRes FieldRes FieldRes FieldBase FieldBase FieldBase FieldBase FieldBase FieldBase FieldBase FieldBase

List of all members.

Public Types

typedef Field< Data_T > base
 Convenience typedef for referring to base class.
typedef Field< Data_T > base
 Convenience typedef for referring to base class.
typedef ProceduralField< Data_T > class_type
typedef ProceduralField< Data_T > class_type
typedef ProceduralFieldLookup
< Data_T > 
CubicInterp
typedef ProceduralFieldLookup
< Data_T > 
CubicInterp
typedef ProceduralFieldLookup
< Data_T > 
LinearInterp
typedef ProceduralFieldLookup
< Data_T > 
LinearInterp
typedef boost::intrusive_ptr
< ProceduralField
Ptr
typedef boost::intrusive_ptr
< ProceduralField
Ptr

Public Member Functions

virtual
DEFINE_FIELD_RTTI_ABSTRACT_CLASS
std::string 
className () const
 Returns the class name of the object. Used by the class pool and when writing the data to disk.
virtual
DEFINE_FIELD_RTTI_ABSTRACT_CLASS
std::string 
className () const
 Returns the class name of the object. Used by the class pool and when writing the data to disk.
virtual Data_T lsSample (const V3d &lsP) const =0
virtual Data_T lsSample (const V3d &lsP) const =0
template<>
V3f typedFloatMetadata (const std::string &name, const V3f &defaultVal) const
Data_T typedFloatMetadata (const std::string &name, const Data_T &defaultVal) const
 Calls either sampleFloatMetadata() if the ProceduralField is scalar (half, float, or double), or sampleVecFloatMetadata() if the field is vector (V3h, V3f, V3d)
template<>
float typedFloatMetadata (const std::string &name, const float &defaultVal) const
template<>
double typedFloatMetadata (const std::string &name, const double &defaultVal) const
template<>
V3h typedFloatMetadata (const std::string &name, const V3h &defaultVal) const
template<>
half typedFloatMetadata (const std::string &name, const half &defaultVal) const
template<>
V3d typedFloatMetadata (const std::string &name, const V3d &defaultVal) const
Data_T typedFloatMetadata (const std::string &name, const Data_T &defaultVal) const
 Calls either sampleFloatMetadata() if the ProceduralField is scalar (half, float, or double), or sampleVecFloatMetadata() if the field is vector (V3h, V3f, V3d)
template<>
float typedFloatMetadata (const std::string &name, const float &defaultVal) const
template<>
double typedFloatMetadata (const std::string &name, const double &defaultVal) const
template<>
V3h typedFloatMetadata (const std::string &name, const V3h &defaultVal) const
template<>
V3f typedFloatMetadata (const std::string &name, const V3f &defaultVal) const
template<>
V3d typedFloatMetadata (const std::string &name, const V3d &defaultVal) const
template<>
half typedFloatMetadata (const std::string &name, const half &defaultVal) const
template<>
V3d typedIntMetadata (const std::string &name, const V3d &defaultVal) const
template<>
V3d typedIntMetadata (const std::string &name, const V3d &defaultVal) const
template<>
double typedIntMetadata (const std::string &name, const double &defaultVal) const
template<>
V3h typedIntMetadata (const std::string &name, const V3h &defaultVal) const
template<>
float typedIntMetadata (const std::string &name, const float &defaultVal) const
template<>
V3h typedIntMetadata (const std::string &name, const V3h &defaultVal) const
template<>
half typedIntMetadata (const std::string &name, const half &defaultVal) const
template<>
V3f typedIntMetadata (const std::string &name, const V3f &defaultVal) const
Data_T typedIntMetadata (const std::string &name, const Data_T &defaultVal) const
 Calls either sampleIntMetadata() if the ProceduralField is scalar (half, float, or double), or sampleVecIntMetadata() if the field is vector (V3h, V3f, V3d)
template<>
float typedIntMetadata (const std::string &name, const float &defaultVal) const
Data_T typedIntMetadata (const std::string &name, const Data_T &defaultVal) const
 Calls either sampleIntMetadata() if the ProceduralField is scalar (half, float, or double), or sampleVecIntMetadata() if the field is vector (V3h, V3f, V3d)
template<>
V3f typedIntMetadata (const std::string &name, const V3f &defaultVal) const
template<>
double typedIntMetadata (const std::string &name, const double &defaultVal) const
template<>
half typedIntMetadata (const std::string &name, const half &defaultVal) const
virtual Data_T value (int i, int j, int k) const =0
 Transforms the point from voxel space to subclass's space and calls the appropriate sample function.
virtual Data_T value (int i, int j, int k) const =0
 Transforms the point from voxel space to subclass's space and calls the appropriate sample function.
virtual ~ProceduralField ()
 Destructor.
virtual ~ProceduralField ()
 Destructor.

Detailed Description

template<class Data_T>
class ProceduralField< Data_T >

This class generalizes the Field concept to fields that don't necessarily contain voxel data. This is technically wrong (it's not true that a perlin noise volume IS-A Field) but it lends great flexibility to the Field concept.

So what happens when a ProceduralField is accessed using the Field interface? ProceduralField itself implements value() such that it automatically point-samples the field instead of accessing a particular voxel. This makes the ProceduralField seem as a regular Field to anyone using that interface.

The interesting part comes when we look at interpolation. Regular Field objects use Interpolator objects to produce values in-between voxels. For ProceduralField, we instead want to point-sample in space, but other than that the resultant value can be handled the same.

It is also fine to interpolate the ProceduralField outside its bounds - just as it is with regular Fields. The difference is that ProceduralFields still return valid values outside its bounds.

By using ProceduralField, we can support purely procedural and hybrid procedural/discrete volumes, but to the functions that use them, they all function the same.

Definition at line 120 of file ProceduralField.h.


Member Typedef Documentation

template<class Data_T>
typedef boost::intrusive_ptr<ProceduralField> ProceduralField< Data_T >::Ptr

Reimplemented from Field< Data_T >.

Definition at line 127 of file ProceduralField.h.

template<class Data_T>
typedef ProceduralFieldLookup<Data_T> ProceduralField< Data_T >::LinearInterp

Definition at line 129 of file ProceduralField.h.

template<class Data_T>
typedef ProceduralFieldLookup<Data_T> ProceduralField< Data_T >::CubicInterp

Definition at line 130 of file ProceduralField.h.

template<class Data_T>
typedef ProceduralField<Data_T> ProceduralField< Data_T >::class_type

Reimplemented from Field< Data_T >.

Definition at line 163 of file ProceduralField.h.

template<class Data_T>
typedef Field<Data_T> ProceduralField< Data_T >::base

Convenience typedef for referring to base class.

Reimplemented from Field< Data_T >.

Definition at line 171 of file ProceduralField.h.

template<class Data_T>
typedef boost::intrusive_ptr<ProceduralField> ProceduralField< Data_T >::Ptr

Reimplemented from Field< Data_T >.

Definition at line 127 of file ProceduralField.h.

template<class Data_T>
typedef ProceduralFieldLookup<Data_T> ProceduralField< Data_T >::LinearInterp

Definition at line 129 of file ProceduralField.h.

template<class Data_T>
typedef ProceduralFieldLookup<Data_T> ProceduralField< Data_T >::CubicInterp

Definition at line 130 of file ProceduralField.h.

template<class Data_T>
typedef ProceduralField<Data_T> ProceduralField< Data_T >::class_type

Reimplemented from Field< Data_T >.

Definition at line 163 of file ProceduralField.h.

template<class Data_T>
typedef Field<Data_T> ProceduralField< Data_T >::base

Convenience typedef for referring to base class.

Reimplemented from Field< Data_T >.

Definition at line 171 of file ProceduralField.h.


Constructor & Destructor Documentation

template<class Data_T>
virtual ProceduralField< Data_T >::~ProceduralField ( ) [inline, virtual]

Destructor.

Definition at line 135 of file ProceduralField.h.

  { /* Empty */ }
template<class Data_T>
virtual ProceduralField< Data_T >::~ProceduralField ( ) [inline, virtual]

Destructor.

Definition at line 135 of file ProceduralField.h.

  { /* Empty */ }

Member Function Documentation

template<class Data_T>
virtual Data_T ProceduralField< Data_T >::lsSample ( const V3d lsP) const [pure virtual]
template<class Data_T>
virtual Data_T ProceduralField< Data_T >::value ( int  i,
int  j,
int  k 
) const [pure virtual]

Transforms the point from voxel space to subclass's space and calls the appropriate sample function.

Implements Field< Data_T >.

template<class Data_T>
Data_T ProceduralField< Data_T >::typedIntMetadata ( const std::string &  name,
const Data_T &  defaultVal 
) const

Calls either sampleIntMetadata() if the ProceduralField is scalar (half, float, or double), or sampleVecIntMetadata() if the field is vector (V3h, V3f, V3d)

template<class Data_T>
Data_T ProceduralField< Data_T >::typedFloatMetadata ( const std::string &  name,
const Data_T &  defaultVal 
) const

Calls either sampleFloatMetadata() if the ProceduralField is scalar (half, float, or double), or sampleVecFloatMetadata() if the field is vector (V3h, V3f, V3d)

template<class Data_T>
virtual DEFINE_FIELD_RTTI_ABSTRACT_CLASS std::string ProceduralField< 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 166 of file ProceduralField.h.

    { return std::string("ProceduralField"); }
template<class Data_T>
virtual Data_T ProceduralField< Data_T >::lsSample ( const V3d lsP) const [pure virtual]
template<class Data_T>
virtual Data_T ProceduralField< Data_T >::value ( int  i,
int  j,
int  k 
) const [pure virtual]

Transforms the point from voxel space to subclass's space and calls the appropriate sample function.

Implements Field< Data_T >.

template<class Data_T>
Data_T ProceduralField< Data_T >::typedIntMetadata ( const std::string &  name,
const Data_T &  defaultVal 
) const

Calls either sampleIntMetadata() if the ProceduralField is scalar (half, float, or double), or sampleVecIntMetadata() if the field is vector (V3h, V3f, V3d)

template<class Data_T>
Data_T ProceduralField< Data_T >::typedFloatMetadata ( const std::string &  name,
const Data_T &  defaultVal 
) const

Calls either sampleFloatMetadata() if the ProceduralField is scalar (half, float, or double), or sampleVecFloatMetadata() if the field is vector (V3h, V3f, V3d)

template<class Data_T>
virtual DEFINE_FIELD_RTTI_ABSTRACT_CLASS std::string ProceduralField< 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 166 of file ProceduralField.h.

    { return std::string("ProceduralField"); }
template<>
half ProceduralField< half >::typedIntMetadata ( const std::string &  name,
const half defaultVal 
) const [inline]

Definition at line 192 of file ProceduralField.h.

{
  return metadata().intMetadata(name, static_cast<int>(defaultVal));
}
template<>
float ProceduralField< float >::typedIntMetadata ( const std::string &  name,
const float &  defaultVal 
) const [inline]

Definition at line 202 of file ProceduralField.h.

{
  return metadata().intMetadata(name, static_cast<int>(defaultVal));
}
template<>
double ProceduralField< double >::typedIntMetadata ( const std::string &  name,
const double &  defaultVal 
) const [inline]

Definition at line 212 of file ProceduralField.h.

{
  return metadata().intMetadata(name, static_cast<int>(defaultVal));
}
template<>
V3h ProceduralField< V3h >::typedIntMetadata ( const std::string &  name,
const V3h defaultVal 
) const [inline]

Definition at line 222 of file ProceduralField.h.

{
  return V3h(metadata().vecIntMetadata(name, defaultVal));
}
template<>
V3f ProceduralField< V3f >::typedIntMetadata ( const std::string &  name,
const V3f defaultVal 
) const [inline]

Definition at line 232 of file ProceduralField.h.

{
  return V3f(metadata().vecIntMetadata(name, defaultVal));
}
template<>
V3d ProceduralField< V3d >::typedIntMetadata ( const std::string &  name,
const V3d defaultVal 
) const [inline]

Definition at line 242 of file ProceduralField.h.

{
  return V3d(metadata().vecIntMetadata(name, defaultVal));
}
template<>
half ProceduralField< half >::typedFloatMetadata ( const std::string &  name,
const half defaultVal 
) const [inline]

Definition at line 252 of file ProceduralField.h.

{
  return metadata().floatMetadata(name, static_cast<float>(defaultVal));
}
template<>
float ProceduralField< float >::typedFloatMetadata ( const std::string &  name,
const float &  defaultVal 
) const [inline]

Definition at line 262 of file ProceduralField.h.

{
  return metadata().floatMetadata(name, defaultVal);
}
template<>
double ProceduralField< double >::typedFloatMetadata ( const std::string &  name,
const double &  defaultVal 
) const [inline]

Definition at line 272 of file ProceduralField.h.

{
  return metadata().floatMetadata(name, static_cast<float>(defaultVal));
}
template<>
V3h ProceduralField< V3h >::typedFloatMetadata ( const std::string &  name,
const V3h defaultVal 
) const [inline]

Definition at line 282 of file ProceduralField.h.

{
  return V3h(metadata().vecFloatMetadata(name, defaultVal));
}
template<>
V3f ProceduralField< V3f >::typedFloatMetadata ( const std::string &  name,
const V3f defaultVal 
) const [inline]

Definition at line 292 of file ProceduralField.h.

{
  return V3f(metadata().vecFloatMetadata(name, defaultVal));
}
template<>
V3d ProceduralField< V3d >::typedFloatMetadata ( const std::string &  name,
const V3d defaultVal 
) const [inline]

Definition at line 302 of file ProceduralField.h.

{
  return V3d(metadata().vecFloatMetadata(name, defaultVal));
}
template<>
half ProceduralField< half >::typedIntMetadata ( const std::string &  name,
const half defaultVal 
) const [inline]

Definition at line 192 of file ProceduralField.h.

{
  return metadata().intMetadata(name, static_cast<int>(defaultVal));
}
template<>
float ProceduralField< float >::typedIntMetadata ( const std::string &  name,
const float &  defaultVal 
) const [inline]

Definition at line 202 of file ProceduralField.h.

{
  return metadata().intMetadata(name, static_cast<int>(defaultVal));
}
template<>
double ProceduralField< double >::typedIntMetadata ( const std::string &  name,
const double &  defaultVal 
) const [inline]

Definition at line 212 of file ProceduralField.h.

{
  return metadata().intMetadata(name, static_cast<int>(defaultVal));
}
template<>
V3h ProceduralField< V3h >::typedIntMetadata ( const std::string &  name,
const V3h defaultVal 
) const [inline]

Definition at line 222 of file ProceduralField.h.

{
  return V3h(metadata().vecIntMetadata(name, defaultVal));
}
template<>
V3f ProceduralField< V3f >::typedIntMetadata ( const std::string &  name,
const V3f defaultVal 
) const [inline]

Definition at line 232 of file ProceduralField.h.

{
  return V3f(metadata().vecIntMetadata(name, defaultVal));
}
template<>
V3d ProceduralField< V3d >::typedIntMetadata ( const std::string &  name,
const V3d defaultVal 
) const [inline]

Definition at line 242 of file ProceduralField.h.

{
  return V3d(metadata().vecIntMetadata(name, defaultVal));
}
template<>
half ProceduralField< half >::typedFloatMetadata ( const std::string &  name,
const half defaultVal 
) const [inline]

Definition at line 252 of file ProceduralField.h.

{
  return metadata().floatMetadata(name, static_cast<float>(defaultVal));
}
template<>
float ProceduralField< float >::typedFloatMetadata ( const std::string &  name,
const float &  defaultVal 
) const [inline]

Definition at line 262 of file ProceduralField.h.

{
  return metadata().floatMetadata(name, defaultVal);
}
template<>
double ProceduralField< double >::typedFloatMetadata ( const std::string &  name,
const double &  defaultVal 
) const [inline]

Definition at line 272 of file ProceduralField.h.

{
  return metadata().floatMetadata(name, static_cast<float>(defaultVal));
}
template<>
V3h ProceduralField< V3h >::typedFloatMetadata ( const std::string &  name,
const V3h defaultVal 
) const [inline]

Definition at line 282 of file ProceduralField.h.

{
  return V3h(metadata().vecFloatMetadata(name, defaultVal));
}
template<>
V3f ProceduralField< V3f >::typedFloatMetadata ( const std::string &  name,
const V3f defaultVal 
) const [inline]

Definition at line 292 of file ProceduralField.h.

{
  return V3f(metadata().vecFloatMetadata(name, defaultVal));
}
template<>
V3d ProceduralField< V3d >::typedFloatMetadata ( const std::string &  name,
const V3d defaultVal 
) const [inline]

Definition at line 302 of file ProceduralField.h.

{
  return V3d(metadata().vecFloatMetadata(name, defaultVal));
}

The documentation for this class was generated from the following files: