Field3D
FieldWrapper< Field_T > Struct Template Reference

This class wraps up a single field to make its interpolator and its mapping easily accessible. The 'Vec' typedef gives access to a std::vector. More...

#include <FieldWrapper.h>

Public Types

typedef Field_T field_type
 
typedef std::vector< FieldWrapperVec
 

Public Member Functions

 FieldWrapper (const typename Field_T::Ptr f)
 
void setOsToWs (const M44d &i_osToWs)
 
void setValueRemapOp (ValueRemapOp::Ptr op)
 
void setWsBoundsOptimization (const bool doWsBoundsOptimization_)
 

Public Attributes

bool doOsToWs
 
bool doWsBoundsOptimization
 
const Field_T * field
 
Field_T::Ptr fieldPtr
 
Field_T::LinearInterp interp
 
const Field3D::FieldMapping * mapping
 
M44d osToWs
 Optionally, enable doOsToWs to apply a world to object transform before lookups. More...
 
const ValueRemapOpvalueRemapOp
 
ValueRemapOp::Ptr valueRemapOpPtr
 Optionally, set a ValueRemapOp to remap values. More...
 
Box3d vsBounds
 
double worldScale
 
Imath::Box3f wsBounds
 
M44d wsToOs
 
M44d wsToVs
 Optionally, enable wsBounds optimization to use a world axis aligned bounding box in lookups. More...
 

Detailed Description

template<typename Field_T>
struct FieldWrapper< Field_T >

This class wraps up a single field to make its interpolator and its mapping easily accessible. The 'Vec' typedef gives access to a std::vector.

Definition at line 63 of file FieldWrapper.h.

Member Typedef Documentation

◆ field_type

template<typename Field_T >
typedef Field_T FieldWrapper< Field_T >::field_type

Definition at line 65 of file FieldWrapper.h.

◆ Vec

template<typename Field_T >
typedef std::vector<FieldWrapper> FieldWrapper< Field_T >::Vec

Definition at line 66 of file FieldWrapper.h.

Constructor & Destructor Documentation

◆ FieldWrapper()

template<typename Field_T >
FieldWrapper< Field_T >::FieldWrapper ( const typename Field_T::Ptr  f)
inline

Definition at line 68 of file FieldWrapper.h.

69  : field(f.get()),
70  fieldPtr(f),
71  mapping(f->mapping().get()),
72  vsBounds(continuousBounds(f->dataWindow())),
73  worldScale(1.0),
74  doOsToWs(false),
76  valueRemapOp(NULL)
77  { }

Member Function Documentation

◆ setOsToWs()

template<typename Field_T >
void FieldWrapper< Field_T >::setOsToWs ( const M44d i_osToWs)
inline

Definition at line 79 of file FieldWrapper.h.

80  {
81  osToWs = i_osToWs;
82  wsToOs = osToWs.inverse();
83  // Compute world scale
84  V3d ws(1.0);
85  if (!Imath::extractScaling(osToWs, ws, false)) {
86  Msg::print("WARNING: FieldGroup/FieldWrapper: "
87  "Couldn't extract world scale from object-to-world "
88  "transform. Defaulting to 1.0.");
89  }
90  worldScale = std::max(std::max(ws.x, ws.y), ws.z);
91  // Set boolean
92  doOsToWs = true;
93 
94  // Update wsBounds
97  }
98  }

References FieldWrapper< Field_T >::doOsToWs, FieldWrapper< Field_T >::doWsBoundsOptimization, detail::max(), FieldWrapper< Field_T >::osToWs, Msg::print(), FieldWrapper< Field_T >::setWsBoundsOptimization(), FieldWrapper< Field_T >::worldScale, and FieldWrapper< Field_T >::wsToOs.

◆ setWsBoundsOptimization()

template<typename Field_T >
void FieldWrapper< Field_T >::setWsBoundsOptimization ( const bool  doWsBoundsOptimization_)
inline

Definition at line 100 of file FieldWrapper.h.

101  {
102  if (!doWsBoundsOptimization_)
103  return;
104  // wsBounds can be set only if mapping is a matrix
105  const MatrixFieldMapping *mtx_mapping =
106  dynamic_cast<const MatrixFieldMapping*>(mapping);
107  if (mtx_mapping) {
108  const float time = 0;
109  M44d vsToWs;
110  if (doOsToWs) {
111  wsToVs = wsToOs * mtx_mapping->worldToVoxel(time);
112  vsToWs = wsToVs.inverse();
113  } else {
114  wsToVs = mtx_mapping->worldToVoxel(time);
115  vsToWs = wsToVs.inverse();
116  }
117  const Imath::Box3d wsBounds_d = Imath::transform(vsBounds,
118  vsToWs);
119  wsBounds = Imath::Box3f(wsBounds_d.min, wsBounds_d.max);
120  doWsBoundsOptimization = true;
121  }
122  }

References FieldWrapper< Field_T >::doOsToWs, FieldWrapper< Field_T >::doWsBoundsOptimization, FieldWrapper< Field_T >::mapping, FieldWrapper< Field_T >::vsBounds, MatrixFieldMapping::worldToVoxel(), FieldWrapper< Field_T >::wsBounds, FieldWrapper< Field_T >::wsToOs, and FieldWrapper< Field_T >::wsToVs.

Referenced by FieldWrapper< Field_T >::setOsToWs().

◆ setValueRemapOp()

template<typename Field_T >
void FieldWrapper< Field_T >::setValueRemapOp ( ValueRemapOp::Ptr  op)
inline

Definition at line 124 of file FieldWrapper.h.

125  {
126  valueRemapOpPtr = op;
128  }

References FieldWrapper< Field_T >::valueRemapOp, and FieldWrapper< Field_T >::valueRemapOpPtr.

Member Data Documentation

◆ interp

template<typename Field_T >
Field_T::LinearInterp FieldWrapper< Field_T >::interp

Definition at line 130 of file FieldWrapper.h.

◆ field

template<typename Field_T >
const Field_T* FieldWrapper< Field_T >::field

Definition at line 131 of file FieldWrapper.h.

◆ fieldPtr

template<typename Field_T >
Field_T::Ptr FieldWrapper< Field_T >::fieldPtr

Definition at line 132 of file FieldWrapper.h.

◆ mapping

template<typename Field_T >
const Field3D::FieldMapping* FieldWrapper< Field_T >::mapping

Definition at line 133 of file FieldWrapper.h.

Referenced by FieldWrapper< Field_T >::setWsBoundsOptimization().

◆ vsBounds

template<typename Field_T >
Box3d FieldWrapper< Field_T >::vsBounds

Definition at line 134 of file FieldWrapper.h.

Referenced by FieldWrapper< Field_T >::setWsBoundsOptimization().

◆ osToWs

template<typename Field_T >
M44d FieldWrapper< Field_T >::osToWs

Optionally, enable doOsToWs to apply a world to object transform before lookups.

Definition at line 137 of file FieldWrapper.h.

Referenced by FieldWrapper< Field_T >::setOsToWs().

◆ wsToOs

template<typename Field_T >
M44d FieldWrapper< Field_T >::wsToOs

◆ worldScale

template<typename Field_T >
double FieldWrapper< Field_T >::worldScale

Definition at line 138 of file FieldWrapper.h.

Referenced by FieldWrapper< Field_T >::setOsToWs().

◆ doOsToWs

template<typename Field_T >
bool FieldWrapper< Field_T >::doOsToWs

◆ wsToVs

template<typename Field_T >
M44d FieldWrapper< Field_T >::wsToVs

Optionally, enable wsBounds optimization to use a world axis aligned bounding box in lookups.

Definition at line 142 of file FieldWrapper.h.

Referenced by FieldWrapper< Field_T >::setWsBoundsOptimization().

◆ wsBounds

template<typename Field_T >
Imath::Box3f FieldWrapper< Field_T >::wsBounds

Definition at line 143 of file FieldWrapper.h.

Referenced by FieldWrapper< Field_T >::setWsBoundsOptimization().

◆ doWsBoundsOptimization

template<typename Field_T >
bool FieldWrapper< Field_T >::doWsBoundsOptimization

◆ valueRemapOpPtr

template<typename Field_T >
ValueRemapOp::Ptr FieldWrapper< Field_T >::valueRemapOpPtr

Optionally, set a ValueRemapOp to remap values.

Definition at line 146 of file FieldWrapper.h.

Referenced by FieldWrapper< Field_T >::setValueRemapOp().

◆ valueRemapOp

template<typename Field_T >
const ValueRemapOp* FieldWrapper< Field_T >::valueRemapOp

Definition at line 147 of file FieldWrapper.h.

Referenced by FieldWrapper< Field_T >::setValueRemapOp().


The documentation for this struct was generated from the following file:
MatrixFieldMapping::worldToVoxel
const M44d & worldToVoxel() const
Returns a reference to the world to voxel space transform.
Definition: FieldMapping.h:381
FieldWrapper::valueRemapOpPtr
ValueRemapOp::Ptr valueRemapOpPtr
Optionally, set a ValueRemapOp to remap values.
Definition: FieldWrapper.h:146
V3d
Imath::V3d V3d
Definition: SpiMathLib.h:74
Box3f
Imath::Box3f Box3f
Definition: SpiMathLib.h:78
FieldWrapper::osToWs
M44d osToWs
Optionally, enable doOsToWs to apply a world to object transform before lookups.
Definition: FieldWrapper.h:137
FieldWrapper::doOsToWs
bool doOsToWs
Definition: FieldWrapper.h:139
FieldWrapper::wsToVs
M44d wsToVs
Optionally, enable wsBounds optimization to use a world axis aligned bounding box in lookups.
Definition: FieldWrapper.h:142
continuousBounds
Box3d continuousBounds(const Box3i &bbox)
Definition: Field.h:1111
FieldWrapper::valueRemapOp
const ValueRemapOp * valueRemapOp
Definition: FieldWrapper.h:147
detail::max
T max(const T a, const T2 b)
Max operation on mixed types.
Definition: FieldSampler.h:32
FieldWrapper::wsToOs
M44d wsToOs
Definition: FieldWrapper.h:137
Box3d
Imath::Box3d Box3d
Definition: SpiMathLib.h:79
FieldWrapper::fieldPtr
Field_T::Ptr fieldPtr
Definition: FieldWrapper.h:132
FieldWrapper::doWsBoundsOptimization
bool doWsBoundsOptimization
Definition: FieldWrapper.h:144
MatrixFieldMapping
Represents the mapping of a field by a matrix transform.
Definition: FieldMapping.h:335
FieldWrapper::wsBounds
Imath::Box3f wsBounds
Definition: FieldWrapper.h:143
M44d
Imath::M44d M44d
Definition: SpiMathLib.h:82
FieldWrapper::mapping
const Field3D::FieldMapping * mapping
Definition: FieldWrapper.h:133
FieldWrapper::vsBounds
Box3d vsBounds
Definition: FieldWrapper.h:134
Msg::print
FIELD3D_API void print(Severity severity, const std::string &message)
Sends the string to the assigned output, prefixing the message with the severity.
Definition: Log.cpp:70
FieldWrapper::field
const Field_T * field
Definition: FieldWrapper.h:131
FieldWrapper::setWsBoundsOptimization
void setWsBoundsOptimization(const bool doWsBoundsOptimization_)
Definition: FieldWrapper.h:100
FieldWrapper::worldScale
double worldScale
Definition: FieldWrapper.h:138