Field3D
CubicGenericFieldInterp Class Reference

#include <FieldInterp.h>

Inheritance diagram for CubicGenericFieldInterp:
RefBase

List of all members.

Public Types

typedef CubicGenericFieldInterp class_type
typedef boost::intrusive_ptr
< CubicGenericFieldInterp
Ptr
typedef Field_T::value_type value_type

Public Member Functions

value_type sample (const Field_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 RefBase base
 Convenience typedef for referring to base class.

Static Private Attributes

static TemplatedFieldType
< CubicGenericFieldInterp
< Field_T > > 
ms_classType

Member Typedef Documentation

typedef Field_T::value_type CubicGenericFieldInterp::value_type

Definition at line 381 of file FieldInterp.h.

Reimplemented from RefBase.

Definition at line 382 of file FieldInterp.h.

Convenience typedef for referring to base class.

Definition at line 413 of file FieldInterp.h.


Member Function Documentation

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

Definition at line 389 of file FieldInterp.h.

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

Reimplemented from RefBase.

Definition at line 394 of file FieldInterp.h.

References ms_classType, and TemplatedFieldType::name().

  {
    return ms_classType.name();    
  }
Field_T::value_type CubicGenericFieldInterp::sample ( const Field_T &  data,
const V3d vsP 
) const

Definition at line 1083 of file FieldInterp.h.

References monotonicCubicInterpolant().

{
  typedef typename Field_T::value_type Data_T;

  // Pixel 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));

  const Box3i &dataWindow = data.dataWindow();

  // 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));

  // 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));

  Data_T z11 = monotonicCubicInterpolant(data.fastValue(im_1, jm_1, km_1), 
                                         data.fastValue(im_1, jm_1, km), 
                                         data.fastValue(im_1, jm_1, km1), 
                                         data.fastValue(im_1, jm_1, km2), t.z);
  Data_T z12 = monotonicCubicInterpolant(data.fastValue(im_1, jm, km_1), 
                                         data.fastValue(im_1, jm, km), 
                                         data.fastValue(im_1, jm, km1), 
                                         data.fastValue(im_1, jm, km2), t.z);
  Data_T z13 = monotonicCubicInterpolant(data.fastValue(im_1, jm1, km_1), 
                                         data.fastValue(im_1, jm1, km), 
                                         data.fastValue(im_1, jm1, km1), 
                                         data.fastValue(im_1, jm1, km2), t.z);
  Data_T z14 = monotonicCubicInterpolant(data.fastValue(im_1, jm2, km_1), 
                                         data.fastValue(im_1, jm2, km), 
                                         data.fastValue(im_1, jm2, km1), 
                                         data.fastValue(im_1, jm2, km2), t.z);

  Data_T z21 = monotonicCubicInterpolant(data.fastValue(im, jm_1, km_1), 
                                         data.fastValue(im, jm_1, km), 
                                         data.fastValue(im, jm_1, km1), 
                                         data.fastValue(im, jm_1, km2), t.z);
  Data_T z22 = monotonicCubicInterpolant(data.fastValue(im, jm, km_1), 
                                         data.fastValue(im, jm, km), 
                                         data.fastValue(im, jm, km1), 
                                         data.fastValue(im, jm, km2), t.z);
  Data_T z23 = monotonicCubicInterpolant(data.fastValue(im, jm1, km_1), 
                                         data.fastValue(im, jm1, km), 
                                         data.fastValue(im, jm1, km1), 
                                         data.fastValue(im, jm1, km2), t.z);
  Data_T z24 = monotonicCubicInterpolant(data.fastValue(im, jm2, km_1), 
                                         data.fastValue(im, jm2, km), 
                                         data.fastValue(im, jm2, km1), 
                                         data.fastValue(im, jm2, km2), t.z);

  Data_T z31 = monotonicCubicInterpolant(data.fastValue(im1, jm_1, km_1), 
                                         data.fastValue(im1, jm_1, km), 
                                         data.fastValue(im1, jm_1, km1), 
                                         data.fastValue(im1, jm_1, km2), t.z);
  Data_T z32 = monotonicCubicInterpolant(data.fastValue(im1, jm, km_1), 
                                         data.fastValue(im1, jm, km), 
                                         data.fastValue(im1, jm, km1), 
                                         data.fastValue(im1, jm, km2), t.z);
  Data_T z33 = monotonicCubicInterpolant(data.fastValue(im1, jm1, km_1), 
                                         data.fastValue(im1, jm1, km), 
                                         data.fastValue(im1, jm1, km1), 
                                         data.fastValue(im1, jm1, km2), t.z);
  Data_T z34 = monotonicCubicInterpolant(data.fastValue(im1, jm2, km_1), 
                                         data.fastValue(im1, jm2, km), 
                                         data.fastValue(im1, jm2, km1), 
                                         data.fastValue(im1, jm2, km2), t.z);

  Data_T z41 = monotonicCubicInterpolant(data.fastValue(im2, jm_1, km_1), 
                                         data.fastValue(im2, jm_1, km), 
                                         data.fastValue(im2, jm_1, km1), 
                                         data.fastValue(im2, jm_1, km2), t.z);
  Data_T z42 = monotonicCubicInterpolant(data.fastValue(im2, jm, km_1), 
                                         data.fastValue(im2, jm, km), 
                                         data.fastValue(im2, jm, km1), 
                                         data.fastValue(im2, jm, km2), t.z);
  Data_T z43 = monotonicCubicInterpolant(data.fastValue(im2, jm1, km_1), 
                                         data.fastValue(im2, jm1, km), 
                                         data.fastValue(im2, jm1, km1), 
                                         data.fastValue(im2, jm1, km2), t.z);
  Data_T z44 = monotonicCubicInterpolant(data.fastValue(im2, jm2, km_1), 
                                         data.fastValue(im2, jm2, km), 
                                         data.fastValue(im2, jm2, km1), 
                                         data.fastValue(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;
}

Member Data Documentation

Definition at line 408 of file FieldInterp.h.

Referenced by classType().


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