Field3D
LinearGenericFieldInterp Class Reference

#include <FieldInterp.h>

Inheritance diagram for LinearGenericFieldInterp:
RefBase

List of all members.

Public Types

typedef LinearGenericFieldInterp class_type
typedef boost::intrusive_ptr
< LinearGenericFieldInterp
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
< LinearGenericFieldInterp
< Field_T > > 
ms_classType

Member Typedef Documentation

typedef Field_T::value_type LinearGenericFieldInterp::value_type

Definition at line 259 of file FieldInterp.h.

Reimplemented from RefBase.

Definition at line 260 of file FieldInterp.h.

Convenience typedef for referring to base class.

Definition at line 290 of file FieldInterp.h.


Member Function Documentation

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

Definition at line 267 of file FieldInterp.h.

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

Reimplemented from RefBase.

Definition at line 272 of file FieldInterp.h.

References ms_classType, and TemplatedFieldType::name().

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

Definition at line 773 of file FieldInterp.h.

{
  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.
  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);

  const Box3i &dataWindow = data.dataWindow();        

  // Clamp the coordinates
  c1.x = std::min(dataWindow.max.x, std::max(dataWindow.min.x, c1.x));
  c1.y = std::min(dataWindow.max.y, std::max(dataWindow.min.y, c1.y));
  c1.z = std::min(dataWindow.max.z, std::max(dataWindow.min.z, c1.z));
  c2.x = std::min(dataWindow.max.x, std::max(dataWindow.min.x, c2.x));
  c2.y = std::min(dataWindow.max.y, std::max(dataWindow.min.y, c2.y));
  c2.z = std::min(dataWindow.max.z, std::max(dataWindow.min.z, c2.z));

  return static_cast<Data_T>
    (f1.x * (f1.y * (f1.z * data.fastValue(c1.x, c1.y, c1.z) +
                     f2.z * data.fastValue(c1.x, c1.y, c2.z)) +
             f2.y * (f1.z * data.fastValue(c1.x, c2.y, c1.z) + 
                     f2.z * data.fastValue(c1.x, c2.y, c2.z))) +
     f2.x * (f1.y * (f1.z * data.fastValue(c2.x, c1.y, c1.z) + 
                     f2.z * data.fastValue(c2.x, c1.y, c2.z)) +
             f2.y * (f1.z * data.fastValue(c2.x, c2.y, c1.z) + 
                     f2.z * data.fastValue(c2.x, c2.y, c2.z))));
}

Member Data Documentation

Definition at line 285 of file FieldInterp.h.

Referenced by classType().


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