Field3D
CubicFieldInterp< Data_T > Class Template Reference

#include <FieldInterp.h>

Inheritance diagram for CubicFieldInterp< Data_T >:
FieldInterp< Data_T > RefBase

Public Types

typedef CubicFieldInterp class_type
 
typedef boost::intrusive_ptr< CubicFieldInterpPtr
 
typedef Data_T value_type
 
- Public Types inherited from FieldInterp< Data_T >
typedef FieldInterp class_type
 
typedef boost::intrusive_ptr< FieldInterpPtr
 
typedef Data_T value_type
 
- Public Types inherited from RefBase
typedef boost::intrusive_ptr< RefBasePtr
 
typedef boost::weak_ptr< RefBaseWeakPtr
 

Public Member Functions

virtual Data_T sample (const Field< Data_T > &data, const V3d &vsP) const
 
- Public Member Functions inherited from FieldInterp< Data_T >
virtual ~FieldInterp ()
 
- Public Member Functions inherited from RefBase
void ref () const
 Used by boost::intrusive_pointer.
 
size_t refcnt ()
 Used by boost::intrusive_pointer.
 
void unref () const
 Used by boost::intrusive_pointer.
 
WeakPtr weakPtr () const
 
 RefBase ()
 
 RefBase (const RefBase &)
 Copy constructor.
 
RefBaseoperator= (const RefBase &)
 Assignment operator.
 
virtual ~RefBase ()
 Destructor.
 
virtual bool checkRTTI (const char *typenameStr)=0
 This function is only implemented by concrete classes and triggers the actual RTTI check through matchRTTI();.
 
bool matchRTTI (const char *typenameStr)
 Performs a check to see if the given typename string matches this class' This needs to be implemented in -all- subclasses, even abstract ones.
 

Static Public Member Functions

static const char * staticClassName ()
 
static const char * staticClassType ()
 
- Static Public Member Functions inherited from FieldInterp< Data_T >
static const char * staticClassName ()
 
static const char * staticClassType ()
 
static const char * staticClassType ()
 

Public Attributes

 DEFINE_FIELD_RTTI_CONCRETE_CLASS
 
- Public Attributes inherited from FieldInterp< Data_T >
 DEFINE_FIELD_RTTI_ABSTRACT_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
 

Detailed Description

template<class Data_T>
class CubicFieldInterp< Data_T >

Definition at line 195 of file FieldInterp.h.

Member Typedef Documentation

◆ value_type

template<class Data_T>
typedef Data_T CubicFieldInterp< Data_T >::value_type

Definition at line 201 of file FieldInterp.h.

◆ Ptr

template<class Data_T>
typedef boost::intrusive_ptr<CubicFieldInterp> CubicFieldInterp< Data_T >::Ptr

Definition at line 202 of file FieldInterp.h.

◆ class_type

template<class Data_T>
typedef CubicFieldInterp CubicFieldInterp< Data_T >::class_type

Definition at line 206 of file FieldInterp.h.

◆ base

template<class Data_T>
typedef FieldInterp<Data_T> CubicFieldInterp< Data_T >::base
private

Convenience typedef for referring to base class.

Definition at line 232 of file FieldInterp.h.

Member Function Documentation

◆ staticClassName()

template<class Data_T>
static const char * CubicFieldInterp< Data_T >::staticClassName ( )
inlinestatic

Definition at line 209 of file FieldInterp.h.

210 {
211 return "CubicFieldInterp";
212 }

◆ staticClassType()

template<class Data_T>
static const char * CubicFieldInterp< Data_T >::staticClassType ( )
inlinestatic

Definition at line 214 of file FieldInterp.h.

215 {
216 return ms_classType.name();
217 }
static TemplatedFieldType< CubicFieldInterp< Data_T > > ms_classType

References ms_classType.

◆ sample()

template<class Data_T>
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.

653{
654 // Voxel centers are at .5 coordinates
655 // NOTE: Don't use contToDisc for this, we're looking for sample
656 // point locations, not coordinate shifts.
657 V3d clampedVsP(std::max(0.5, vsP.x),
658 std::max(0.5, vsP.y),
659 std::max(0.5, vsP.z));
661
662 // Lower left corner
663 V3i c(static_cast<int>(floor(p.x)),
664 static_cast<int>(floor(p.y)),
665 static_cast<int>(floor(p.z)));
666
667 // Fractions
669
670 const Box3i &dataWindow = data.dataWindow();
671
672 // Clamp the coordinates
673 int im, jm, km;
674 im = std::max(dataWindow.min.x, std::min(c.x, dataWindow.max.x));
675 jm = std::max(dataWindow.min.y, std::min(c.y, dataWindow.max.y));
676 km = std::max(dataWindow.min.z, std::min(c.z, dataWindow.max.z));
677 int im_1, jm_1, km_1;
678 im_1 = std::max(dataWindow.min.x, std::min(im - 1, dataWindow.max.x));
679 jm_1 = std::max(dataWindow.min.y, std::min(jm - 1, dataWindow.max.y));
680 km_1 = std::max(dataWindow.min.z, std::min(km - 1, dataWindow.max.z));
681 int im1, jm1, km1;
682 im1 = std::max(dataWindow.min.x, std::min(im + 1, dataWindow.max.x));
683 jm1 = std::max(dataWindow.min.y, std::min(jm + 1, dataWindow.max.y));
684 km1 = std::max(dataWindow.min.z, std::min(km + 1, dataWindow.max.z));
685 int im2, jm2, km2;
686 im2 = std::max(dataWindow.min.x, std::min(im + 2, dataWindow.max.x));
687 jm2 = std::max(dataWindow.min.y, std::min(jm + 2, dataWindow.max.y));
688 km2 = std::max(dataWindow.min.z, std::min(km + 2, dataWindow.max.z));
689
690 // interpolate 16 lines in z:
692 data.value(im_1, jm_1, km),
693 data.value(im_1, jm_1, km1),
694 data.value(im_1, jm_1, km2), t.z);
696 data.value(im_1, jm, km),
697 data.value(im_1, jm, km1),
698 data.value(im_1, jm, km2), t.z);
700 data.value(im_1, jm1, km),
701 data.value(im_1, jm1, km1),
702 data.value(im_1, jm1, km2), t.z);
704 data.value(im_1, jm2, km),
705 data.value(im_1, jm2, km1),
706 data.value(im_1, jm2, km2), t.z);
707
709 data.value(im, jm_1, km),
710 data.value(im, jm_1, km1),
711 data.value(im, jm_1, km2), t.z);
713 data.value(im, jm, km),
714 data.value(im, jm, km1),
715 data.value(im, jm, km2), t.z);
717 data.value(im, jm1, km),
718 data.value(im, jm1, km1),
719 data.value(im, jm1, km2), t.z);
721 data.value(im, jm2, km),
722 data.value(im, jm2, km1),
723 data.value(im, jm2, km2), t.z);
724
726 data.value(im1, jm_1, km),
727 data.value(im1, jm_1, km1),
728 data.value(im1, jm_1, km2), t.z);
730 data.value(im1, jm, km),
731 data.value(im1, jm, km1),
732 data.value(im1, jm, km2), t.z);
734 data.value(im1, jm1, km),
735 data.value(im1, jm1, km1),
736 data.value(im1, jm1, km2), t.z);
738 data.value(im1, jm2, km),
739 data.value(im1, jm2, km1),
740 data.value(im1, jm2, km2), t.z);
741
743 data.value(im2, jm_1, km),
744 data.value(im2, jm_1, km1),
745 data.value(im2, jm_1, km2), t.z);
747 data.value(im2, jm, km),
748 data.value(im2, jm, km1),
749 data.value(im2, jm, km2), t.z);
751 data.value(im2, jm1, km),
752 data.value(im2, jm1, km1),
753 data.value(im2, jm1, km2), t.z);
755 data.value(im2, jm2, km),
756 data.value(im2, jm2, km1),
757 data.value(im2, jm2, km2), t.z);
758
763
765
766 return z0;
767}
Data_T monotonicCubicInterpolant(const Data_T &f1, const Data_T &f2, const Data_T &f3, const Data_T &f4, double t)
Monotonic cubic interpolation References: http://en.wikipedia.org/wiki/Monotone_cubic_interpolation h...

References FieldRes::dataWindow(), FIELD3D_VEC3_T, monotonicCubicInterpolant(), and Field< Data_T >::value().

Member Data Documentation

◆ DEFINE_FIELD_RTTI_CONCRETE_CLASS

template<class Data_T>
CubicFieldInterp< Data_T >::DEFINE_FIELD_RTTI_CONCRETE_CLASS

Definition at line 207 of file FieldInterp.h.

◆ ms_classType

template<class Data_T>
TemplatedFieldType<CubicFieldInterp<Data_T> > CubicFieldInterp< Data_T >::ms_classType
staticprivate

Definition at line 227 of file FieldInterp.h.

Referenced by staticClassType().


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