Field3D
ProceduralField Class Reference

#include <ProceduralField.h>

Inheritance diagram for ProceduralField:
Field< Data_T >

List of all members.

Public Types

typedef ProceduralField< Data_T > class_type
typedef ProceduralFieldLookup
< Data_T > 
CubicInterp
typedef ProceduralFieldLookup
< Data_T > 
LinearInterp
typedef boost::intrusive_ptr
< ProceduralField
Ptr

Public Member Functions

virtual std::string className () const
virtual Data_T lsSample (const V3d &lsP) const =0
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<>
half typedFloatMetadata (const std::string &name, const half &defaultVal) const
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
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<>
half typedIntMetadata (const std::string &name, const half &defaultVal) const
template<>
float typedIntMetadata (const std::string &name, const float &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<>
V3f typedIntMetadata (const std::string &name, const V3f &defaultVal) const
template<>
V3d typedIntMetadata (const std::string &name, const V3d &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 ~ProceduralField ()
 Destructor.

Static Public Member Functions

static const char * classType ()
static
DEFINE_FIELD_RTTI_ABSTRACT_CLASS
const char * 
staticClassName ()

Private Types

typedef Field< Data_T > base
 Convenience typedef for referring to base class.

Static Private Attributes

static TemplatedFieldType
< ProceduralField< Data_T > > 
ms_classType

Detailed Description

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.


Member Typedef Documentation

typedef boost::intrusive_ptr<ProceduralField> ProceduralField::Ptr

Reimplemented from Field< Data_T >.

Definition at line 127 of file ProceduralField.h.

Definition at line 129 of file ProceduralField.h.

Definition at line 130 of file ProceduralField.h.

Reimplemented from Field< Data_T >.

Definition at line 134 of file ProceduralField.h.

typedef Field<Data_T> ProceduralField::base [private]

Convenience typedef for referring to base class.

Reimplemented from Field< Data_T >.

Definition at line 189 of file ProceduralField.h.


Constructor & Destructor Documentation

virtual ProceduralField::~ProceduralField ( ) [inline, virtual]

Destructor.

Definition at line 150 of file ProceduralField.h.

  { /* Empty */ }

Member Function Documentation

static DEFINE_FIELD_RTTI_ABSTRACT_CLASS const char* ProceduralField::staticClassName ( ) [inline, static]

Reimplemented from Field< Data_T >.

Definition at line 137 of file ProceduralField.h.

Referenced by className().

  {
    return "ProceduralField";
  }
static const char* ProceduralField::classType ( ) [inline, static]

Reimplemented from Field< Data_T >.

Definition at line 142 of file ProceduralField.h.

virtual Data_T ProceduralField::lsSample ( const V3d lsP) const [pure virtual]
virtual std::string ProceduralField::className ( ) const [inline, virtual]

Definition at line 159 of file ProceduralField.h.

References staticClassName().

  { return staticClassName(); }
virtual Data_T ProceduralField::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 >.

Data_T ProceduralField::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)

Data_T ProceduralField::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<>
half ProceduralField< half >::typedIntMetadata ( const std::string &  name,
const half defaultVal 
) const [inline]

Definition at line 216 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 226 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 236 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 246 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 256 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 266 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 276 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 286 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 296 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 306 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 316 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 326 of file ProceduralField.h.

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

Member Data Documentation

Reimplemented from Field< Data_T >.

Definition at line 185 of file ProceduralField.h.


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