|
Field3D
|
#include <FieldInterp.h>
Public Types | |
| typedef CubicFieldInterp | class_type |
| typedef boost::intrusive_ptr < CubicFieldInterp > | 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 < CubicFieldInterp< Data_T > > | ms_classType |
Definition at line 195 of file FieldInterp.h.
| typedef Data_T CubicFieldInterp< Data_T >::value_type |
Reimplemented from FieldInterp< Data_T >.
Definition at line 201 of file FieldInterp.h.
| typedef boost::intrusive_ptr<CubicFieldInterp> CubicFieldInterp< Data_T >::Ptr |
Reimplemented from FieldInterp< Data_T >.
Definition at line 202 of file FieldInterp.h.
| typedef CubicFieldInterp CubicFieldInterp< Data_T >::class_type |
Reimplemented from FieldInterp< Data_T >.
Definition at line 206 of file FieldInterp.h.
typedef FieldInterp<Data_T> CubicFieldInterp< Data_T >::base [private] |
Convenience typedef for referring to base class.
Reimplemented from FieldInterp< Data_T >.
Definition at line 232 of file FieldInterp.h.
| static const char* CubicFieldInterp< Data_T >::staticClassName | ( | ) | [inline, static] |
Reimplemented from FieldInterp< Data_T >.
Definition at line 209 of file FieldInterp.h.
{
return "CubicFieldInterp";
}
| static const char* CubicFieldInterp< Data_T >::classType | ( | ) | [inline, static] |
Reimplemented from FieldInterp< Data_T >.
Definition at line 214 of file FieldInterp.h.
References CubicFieldInterp< Data_T >::ms_classType, and TemplatedFieldType< Field_T >::name().
{
return ms_classType.name();
}
| Data_T CubicFieldInterp< Data_T >::sample | ( | const Field< Data_T > & | data, |
| const V3d & | vsP | ||
| ) | const [virtual] |
Implements FieldInterp< Data_T >.
Definition at line 651 of file FieldInterp.h.
References FieldRes::dataWindow(), monotonicCubicInterpolant(), 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.
V3d clampedVsP(std::max(0.5, vsP.x),
std::max(0.5, vsP.y),
std::max(0.5, vsP.z));
FIELD3D_VEC3_T<double> p(clampedVsP - FIELD3D_VEC3_T<double>(0.5));
// Lower left corner
V3i c(static_cast<int>(floor(p.x)),
static_cast<int>(floor(p.y)),
static_cast<int>(floor(p.z)));
// Fractions
FIELD3D_VEC3_T<double> t(p - static_cast<FIELD3D_VEC3_T<double> >(c));
const Box3i &dataWindow = data.dataWindow();
// Clamp the coordinates
int im, jm, km;
im = std::max(dataWindow.min.x, std::min(c.x, dataWindow.max.x));
jm = std::max(dataWindow.min.y, std::min(c.y, dataWindow.max.y));
km = std::max(dataWindow.min.z, std::min(c.z, dataWindow.max.z));
int im_1, jm_1, km_1;
im_1 = std::max(dataWindow.min.x, std::min(im - 1, dataWindow.max.x));
jm_1 = std::max(dataWindow.min.y, std::min(jm - 1, dataWindow.max.y));
km_1 = std::max(dataWindow.min.z, std::min(km - 1, dataWindow.max.z));
int im1, jm1, km1;
im1 = std::max(dataWindow.min.x, std::min(im + 1, dataWindow.max.x));
jm1 = std::max(dataWindow.min.y, std::min(jm + 1, dataWindow.max.y));
km1 = std::max(dataWindow.min.z, std::min(km + 1, dataWindow.max.z));
int im2, jm2, km2;
im2 = std::max(dataWindow.min.x, std::min(im + 2, dataWindow.max.x));
jm2 = std::max(dataWindow.min.y, std::min(jm + 2, dataWindow.max.y));
km2 = std::max(dataWindow.min.z, std::min(km + 2, dataWindow.max.z));
// interpolate 16 lines in z:
Data_T z11 = monotonicCubicInterpolant(data.value(im_1, jm_1, km_1),
data.value(im_1, jm_1, km),
data.value(im_1, jm_1, km1),
data.value(im_1, jm_1, km2), t.z);
Data_T z12 = monotonicCubicInterpolant(data.value(im_1, jm, km_1),
data.value(im_1, jm, km),
data.value(im_1, jm, km1),
data.value(im_1, jm, km2), t.z);
Data_T z13 = monotonicCubicInterpolant(data.value(im_1, jm1, km_1),
data.value(im_1, jm1, km),
data.value(im_1, jm1, km1),
data.value(im_1, jm1, km2), t.z);
Data_T z14 = monotonicCubicInterpolant(data.value(im_1, jm2, km_1),
data.value(im_1, jm2, km),
data.value(im_1, jm2, km1),
data.value(im_1, jm2, km2), t.z);
Data_T z21 = monotonicCubicInterpolant(data.value(im, jm_1, km_1),
data.value(im, jm_1, km),
data.value(im, jm_1, km1),
data.value(im, jm_1, km2), t.z);
Data_T z22 = monotonicCubicInterpolant(data.value(im, jm, km_1),
data.value(im, jm, km),
data.value(im, jm, km1),
data.value(im, jm, km2), t.z);
Data_T z23 = monotonicCubicInterpolant(data.value(im, jm1, km_1),
data.value(im, jm1, km),
data.value(im, jm1, km1),
data.value(im, jm1, km2), t.z);
Data_T z24 = monotonicCubicInterpolant(data.value(im, jm2, km_1),
data.value(im, jm2, km),
data.value(im, jm2, km1),
data.value(im, jm2, km2), t.z);
Data_T z31 = monotonicCubicInterpolant(data.value(im1, jm_1, km_1),
data.value(im1, jm_1, km),
data.value(im1, jm_1, km1),
data.value(im1, jm_1, km2), t.z);
Data_T z32 = monotonicCubicInterpolant(data.value(im1, jm, km_1),
data.value(im1, jm, km),
data.value(im1, jm, km1),
data.value(im1, jm, km2), t.z);
Data_T z33 = monotonicCubicInterpolant(data.value(im1, jm1, km_1),
data.value(im1, jm1, km),
data.value(im1, jm1, km1),
data.value(im1, jm1, km2), t.z);
Data_T z34 = monotonicCubicInterpolant(data.value(im1, jm2, km_1),
data.value(im1, jm2, km),
data.value(im1, jm2, km1),
data.value(im1, jm2, km2), t.z);
Data_T z41 = monotonicCubicInterpolant(data.value(im2, jm_1, km_1),
data.value(im2, jm_1, km),
data.value(im2, jm_1, km1),
data.value(im2, jm_1, km2), t.z);
Data_T z42 = monotonicCubicInterpolant(data.value(im2, jm, km_1),
data.value(im2, jm, km),
data.value(im2, jm, km1),
data.value(im2, jm, km2), t.z);
Data_T z43 = monotonicCubicInterpolant(data.value(im2, jm1, km_1),
data.value(im2, jm1, km),
data.value(im2, jm1, km1),
data.value(im2, jm1, km2), t.z);
Data_T z44 = monotonicCubicInterpolant(data.value(im2, jm2, km_1),
data.value(im2, jm2, km),
data.value(im2, jm2, km1),
data.value(im2, jm2, km2), t.z);
Data_T y1 = monotonicCubicInterpolant(z11, z12, z13, z14, t.y);
Data_T y2 = monotonicCubicInterpolant(z21, z22, z23, z24, t.y);
Data_T y3 = monotonicCubicInterpolant(z31, z32, z33, z34, t.y);
Data_T y4 = monotonicCubicInterpolant(z41, z42, z43, z44, t.y);
Data_T z0 = monotonicCubicInterpolant(y1, y2, y3, y4, t.x);
return z0;
}
| CubicFieldInterp< Data_T >::DEFINE_FIELD_RTTI_CONCRETE_CLASS |
Definition at line 207 of file FieldInterp.h.
TemplatedFieldType<CubicFieldInterp<Data_T> > CubicFieldInterp< Data_T >::ms_classType [static, private] |
Reimplemented from FieldInterp< Data_T >.
Definition at line 227 of file FieldInterp.h.
Referenced by CubicFieldInterp< Data_T >::classType().