46#ifndef _INCLUDED_Field3D_ProceduralField_H_
47#define _INCLUDED_Field3D_ProceduralField_H_
70#define REGISTER_FIELD_TYPES(FIELDCLASS) \
71 factory.registerField(FIELDCLASS<half>::create); \
72 factory.registerField(FIELDCLASS<float>::create); \
73 factory.registerField(FIELDCLASS<double>::create); \
74 factory.registerField(FIELDCLASS<V3h>::create); \
75 factory.registerField(FIELDCLASS<V3f>::create); \
76 factory.registerField(FIELDCLASS<V3d>::create)
78#define INSTANTIATE_FIELD_TYPES(FIELDCLASS) \
79 template class FIELDCLASS<half>; \
80 template class FIELDCLASS<float>; \
81 template class FIELDCLASS<double>; \
82 template class FIELDCLASS<V3h>; \
83 template class FIELDCLASS<V3f>; \
84 template class FIELDCLASS<V3d>
119template <
class Data_T>
127 typedef boost::intrusive_ptr<ProceduralField>
Ptr;
139 return "ProceduralField";
165 virtual Data_T
value(
int i,
int j,
int k)
const = 0;
173 const Data_T& defaultVal)
const;
178 const Data_T& defaultVal)
const;
216 const half& defaultVal)
const
218 return metadata().intMetadata(name,
static_cast<int>(defaultVal));
226 const float& defaultVal)
const
228 return metadata().intMetadata(name,
static_cast<int>(defaultVal));
236 const double& defaultVal)
const
238 return metadata().intMetadata(name,
static_cast<int>(defaultVal));
246 const V3h& defaultVal)
const
248 return V3h(metadata().vecIntMetadata(name, defaultVal));
256 const V3f& defaultVal)
const
258 return V3f(metadata().vecIntMetadata(name, defaultVal));
266 const V3d& defaultVal)
const
268 return V3d(metadata().vecIntMetadata(name, defaultVal));
276 const half& defaultVal)
const
278 return metadata().floatMetadata(name,
static_cast<float>(defaultVal));
286 const float& defaultVal)
const
288 return metadata().floatMetadata(name, defaultVal);
296 const double& defaultVal)
const
298 return metadata().floatMetadata(name,
static_cast<float>(defaultVal));
306 const V3h& defaultVal)
const
308 return V3h(metadata().vecFloatMetadata(name, defaultVal));
316 const V3f& defaultVal)
const
318 return V3f(metadata().vecFloatMetadata(name, defaultVal));
326 const V3d& defaultVal)
const
328 return V3d(metadata().vecFloatMetadata(name, defaultVal));
Contains Field, WritableField and ResizableField classes.
#define FIELD3D_CLASSTYPE_TEMPL_INSTANTIATION(field)
#define FIELD3D_CLASSNAME_CLASSTYPE_IMPLEMENTATION
ProceduralField< V3f > ProceduralField3f
ProceduralField< half > ProceduralFieldh
ProceduralField< float > ProceduralFieldf
ProceduralField< V3h > ProceduralField3h
ProceduralField< V3d > ProceduralField3d
ProceduralField< double > ProceduralFieldd
FIELD3D_NAMESPACE_OPENtypedef ::half half
std::string name
Optional name of the field.
DEFINE_FIELD_RTTI_ABSTRACT_CLASS
Data_T typedIntMetadata(const std::string &name, const Data_T &defaultVal) const
Calls either sampleIntMetadata() if the ProceduralField is scalar (half, float, or double),...
static const char * staticClassType()
static DEFINE_FIELD_RTTI_ABSTRACT_CLASS const char * staticClassName()
ProceduralFieldLookup< Data_T > CubicInterp
virtual ~ProceduralField()
Destructor.
static TemplatedFieldType< ProceduralField< Data_T > > ms_classType
boost::intrusive_ptr< ProceduralField > Ptr
ProceduralField< Data_T > class_type
ProceduralFieldLookup< Data_T > LinearInterp
virtual Data_T lsSample(const V3d &lsP) const =0
virtual FIELD3D_CLASSNAME_CLASSTYPE_IMPLEMENTATION 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.
Data_T typedFloatMetadata(const std::string &name, const Data_T &defaultVal) const
Calls either sampleFloatMetadata() if the ProceduralField is scalar (half, float, or double),...
#define FIELD3D_NAMESPACE_HEADER_CLOSE
Used to return a string for the name of a templated field.