|
Field3D
|
#include <FieldInterp.h>
Public Types | |
| typedef LinearFieldInterp | class_type |
| typedef boost::intrusive_ptr < LinearFieldInterp > | Ptr |
| typedef Data_T | value_type |
Public Member Functions | |
| virtual Data_T | sample (const Field< Data_T > &data, const V3d &vsP) const |
Static Public Member Functions | |
| static const char * | classType () |
| static const char * | staticClassName () |
Public Attributes | |
| DEFINE_FIELD_RTTI_CONCRETE_CLASS | |
Private Types | |
| typedef FieldInterp< Data_T > | base |
| Convenience typedef for referring to base class. | |
Static Private Attributes | |
| static TemplatedFieldType < LinearFieldInterp< Data_T > > | ms_classType |
Definition at line 136 of file FieldInterp.h.
| typedef Data_T LinearFieldInterp< Data_T >::value_type |
Reimplemented from FieldInterp< Data_T >.
Definition at line 142 of file FieldInterp.h.
| typedef boost::intrusive_ptr<LinearFieldInterp> LinearFieldInterp< Data_T >::Ptr |
Reimplemented from FieldInterp< Data_T >.
Definition at line 143 of file FieldInterp.h.
| typedef LinearFieldInterp LinearFieldInterp< Data_T >::class_type |
Reimplemented from FieldInterp< Data_T >.
Definition at line 147 of file FieldInterp.h.
typedef FieldInterp<Data_T> LinearFieldInterp< Data_T >::base [private] |
Convenience typedef for referring to base class.
Reimplemented from FieldInterp< Data_T >.
Definition at line 173 of file FieldInterp.h.
| static const char* LinearFieldInterp< Data_T >::staticClassName | ( | ) | [inline, static] |
Reimplemented from FieldInterp< Data_T >.
Definition at line 150 of file FieldInterp.h.
{
return "LinearFieldInterp";
}
| static const char* LinearFieldInterp< Data_T >::classType | ( | ) | [inline, static] |
Reimplemented from FieldInterp< Data_T >.
Definition at line 155 of file FieldInterp.h.
References LinearFieldInterp< Data_T >::ms_classType, and TemplatedFieldType< Field_T >::name().
{
return ms_classType.name();
}
| Data_T LinearFieldInterp< Data_T >::sample | ( | const Field< Data_T > & | data, |
| const V3d & | vsP | ||
| ) | const [virtual] |
Implements FieldInterp< Data_T >.
Definition at line 606 of file FieldInterp.h.
References FieldRes::dataWindow(), and Field< Data_T >::value().
{
// Voxel centers are at .5 coordinates
// NOTE: Don't use contToDisc for this, we're looking for sample
// point locations, not coordinate shifts.
FIELD3D_VEC3_T<double> p(vsP - FIELD3D_VEC3_T<double>(0.5));
// Lower left corner
V3i c1(static_cast<int>(floor(p.x)),
static_cast<int>(floor(p.y)),
static_cast<int>(floor(p.z)));
// Upper right corner
V3i c2(c1 + V3i(1));
// C1 fractions
FIELD3D_VEC3_T<double> f1(static_cast<FIELD3D_VEC3_T<double> >(c2) - p);
// C2 fraction
FIELD3D_VEC3_T<double> f2(static_cast<FIELD3D_VEC3_T<double> >(1.0) - f1);
// Clamp the indexing coordinates
if (true) {
const Box3i &dataWindow = data.dataWindow();
c1.x = std::max(dataWindow.min.x, std::min(c1.x, dataWindow.max.x));
c2.x = std::max(dataWindow.min.x, std::min(c2.x, dataWindow.max.x));
c1.y = std::max(dataWindow.min.y, std::min(c1.y, dataWindow.max.y));
c2.y = std::max(dataWindow.min.y, std::min(c2.y, dataWindow.max.y));
c1.z = std::max(dataWindow.min.z, std::min(c1.z, dataWindow.max.z));
c2.z = std::max(dataWindow.min.z, std::min(c2.z, dataWindow.max.z));
}
return static_cast<Data_T>
(f1.x * (f1.y * (f1.z * data.value(c1.x, c1.y, c1.z) +
f2.z * data.value(c1.x, c1.y, c2.z)) +
f2.y * (f1.z * data.value(c1.x, c2.y, c1.z) +
f2.z * data.value(c1.x, c2.y, c2.z))) +
f2.x * (f1.y * (f1.z * data.value(c2.x, c1.y, c1.z) +
f2.z * data.value(c2.x, c1.y, c2.z)) +
f2.y * (f1.z * data.value(c2.x, c2.y, c1.z) +
f2.z * data.value(c2.x, c2.y, c2.z))));
}
| LinearFieldInterp< Data_T >::DEFINE_FIELD_RTTI_CONCRETE_CLASS |
Definition at line 148 of file FieldInterp.h.
TemplatedFieldType<LinearFieldInterp<Data_T> > LinearFieldInterp< Data_T >::ms_classType [static, private] |
Reimplemented from FieldInterp< Data_T >.
Definition at line 168 of file FieldInterp.h.
Referenced by LinearFieldInterp< Data_T >::classType().