VTK  9.3.0
vtkAbstractInterpolatedVelocityField.h
Go to the documentation of this file.
1// SPDX-FileCopyrightText: Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
2// SPDX-License-Identifier: BSD-3-Clause
65#ifndef vtkAbstractInterpolatedVelocityField_h
66#define vtkAbstractInterpolatedVelocityField_h
67
68#include "vtkFiltersFlowPathsModule.h" // For export macro
69#include "vtkFunctionSet.h"
70#include "vtkNew.h" // for vtkNew
71#include "vtkSmartPointer.h" // for vtkSmartPointer
72
73#include <vector> // for weights
74
75VTK_ABI_NAMESPACE_BEGIN
80class vtkDataObject;
81class vtkDataSet;
82class vtkDataArray;
83class vtkIdList;
84class vtkPointData;
85class vtkGenericCell;
87
88class VTKFILTERSFLOWPATHS_EXPORT vtkAbstractInterpolatedVelocityField : public vtkFunctionSet
89{
90public:
92
96 void PrintSelf(ostream& os, vtkIndent indent) override;
98
99 // Keep track of how the interpolated velocity field is
100 // initialized. Currently, all datasets that compose the velocity field are
101 // initialized (meaning that supporting structures like locators are
102 // built).
104 {
105 NOT_INITIALIZED = 0,
106 INITIALIZE_ALL_DATASETS = 1,
107 SELF_INITIALIZE = 2
108 };
109
111
125 virtual void Initialize(vtkCompositeDataSet* compDS, int initStrategy = INITIALIZE_ALL_DATASETS);
126 vtkGetMacro(InitializationState, int);
128
130
136 vtkSetMacro(Caching, bool);
137 vtkGetMacro(Caching, bool);
139
141
145 vtkGetMacro(CacheHit, int);
146 vtkGetMacro(CacheMiss, int);
148
149 vtkGetObjectMacro(LastDataSet, vtkDataSet);
150
152
155 vtkGetMacro(LastCellId, vtkIdType);
156 virtual void SetLastCellId(vtkIdType c) { this->LastCellId = c; }
158
162 virtual void SetLastCellId(vtkIdType c, int dataindex) = 0;
163
165
169 vtkGetStringMacro(VectorsSelection);
170 vtkGetMacro(VectorsType, int);
172
177 void SelectVectors(int fieldAssociation, const char* fieldName);
178
180
197 vtkSetMacro(NormalizeVector, bool);
198 vtkGetMacro(NormalizeVector, bool);
200
202
207 vtkSetMacro(ForceSurfaceTangentVector, bool);
208 vtkGetMacro(ForceSurfaceTangentVector, bool);
210
212
215 vtkSetMacro(SurfaceDataset, bool);
216 vtkGetMacro(SurfaceDataset, bool);
218
226
227 using Superclass::FunctionValues;
231 int FunctionValues(double* x, double* f) override = 0;
232
236 void ClearLastCellId() { this->LastCellId = -1; }
237
239
243 int GetLastWeights(double* w);
244 int GetLastLocalCoordinates(double pcoords[3]);
246
248
255 vtkGetObjectMacro(FindCellStrategy, vtkFindCellStrategy);
257
258protected:
261
262 static const double TOLERANCE_SCALE;
263 static const double SURFACE_TOLERANCE_SCALE;
264
273 std::vector<double> Weights;
274 double LastPCoords[3];
276 double LastClosestPoint[3];
282
288
289 // This is used to keep track of the find cell strategy and vector array
290 // associated with each dataset forming the velocity field. Note that the
291 // find cells strategy can be null, this means the find cell is invoked
292 // using the dataset's FindCell() method.
294 {
298
300 : DataSet(dataSet)
301 , Strategy(strategy)
302 , Vectors(vectors)
303 {
304 }
305 };
307
312 std::vector<vtkDataSetInformation> DataSetsInfo;
313 std::vector<vtkDataSetInformation>::iterator GetDataSetInfo(vtkDataSet* dataset);
315
317
320 vtkSetStringMacro(VectorsSelection);
322
334 virtual int FunctionValues(vtkDataSet* ds, double* x, double* f);
335
342 virtual bool FindAndUpdateCell(vtkDataSet* ds, vtkFindCellStrategy* strategy, double* x);
343
346
352 void FastCompute(vtkDataArray* vectors, double f[3]);
358 {
359 return (this->LastCellId != -1) ? this->CurrentCell.Get() : nullptr;
360 }
362
364
370 virtual int SelfInitialize() { return 0; }
374
375private:
377 void operator=(const vtkAbstractInterpolatedVelocityField&) = delete;
378};
379
380VTK_ABI_NAMESPACE_END
381#endif
An abstract class for obtaining the interpolated velocity values at a point.
std::vector< vtkDataSetInformation >::iterator GetDataSetInfo(vtkDataSet *dataset)
Define a FindCell() strategy, keep track of the strategies (and other cached information) associated ...
int FunctionValues(double *x, double *f) override=0
Evaluate the velocity field f at point (x, y, z).
virtual int FunctionValues(vtkDataSet *ds, double *x, double *f)
Evaluate the velocity field f at point (x, y, z) in a specified dataset by invoking vtkDataSet::FindC...
virtual int SelfInitialize()
These methods pertain to initializing the vector field by subclasses (which may have special initiali...
int GetLastWeights(double *w)
Get the interpolation weights cached from last evaluation.
int GetLastLocalCoordinates(double pcoords[3])
Get the interpolation weights cached from last evaluation.
int InitializationState
Make sure the velocity field is initialized: record the initialization strategy.
size_t GetDataSetsInfoSize()
These methods pertain to initializing the vector field by subclasses (which may have special initiali...
virtual void Initialize(vtkCompositeDataSet *compDS, int initStrategy=INITIALIZE_ALL_DATASETS)
The Initialize() method is used to build and cache supporting structures (such as locators) which are...
void ClearLastCellId()
Set the last cell id to -1 to incur a global cell search for the next point.
virtual void SetFindCellStrategy(vtkFindCellStrategy *)
Set / get the strategy used to perform the FindCell() operation.
void FastCompute(vtkDataArray *vectors, double f[3])
If all weights have been computed (parametric coords etc all valid), a scalar/vector can be quickly i...
std::vector< vtkDataSetInformation > DataSetsInfo
Define a FindCell() strategy, keep track of the strategies (and other cached information) associated ...
void AddToDataSetsInfo(vtkDataSet *, vtkFindCellStrategy *, vtkDataArray *vectors)
These methods pertain to initializing the vector field by subclasses (which may have special initiali...
vtkFindCellStrategy * FindCellStrategy
Define a FindCell() strategy, keep track of the strategies (and other cached information) associated ...
bool InterpolatePoint(vtkPointData *outPD, vtkIdType outIndex)
If all weights have been computed (parametric coords etc all valid), a scalar/vector can be quickly i...
bool InterpolatePoint(vtkAbstractInterpolatedVelocityField *inIVF, vtkPointData *outPD, vtkIdType outIndex)
If all weights have been computed (parametric coords etc all valid), a scalar/vector can be quickly i...
vtkGenericCell * GetLastCell()
If all weights have been computed (parametric coords etc all valid), a scalar/vector can be quickly i...
virtual void CopyParameters(vtkAbstractInterpolatedVelocityField *from)
Copy essential parameters between instances of this class.
virtual void SetLastCellId(vtkIdType c)
Get/Set the id of the cell cached from last evaluation.
virtual bool FindAndUpdateCell(vtkDataSet *ds, vtkFindCellStrategy *strategy, double *x)
Try to find the cell closest to provided x point in provided dataset, By first testing inclusion in i...
virtual void SetLastCellId(vtkIdType c, int dataindex)=0
Set the id of the most recently visited cell of a dataset.
void PrintSelf(ostream &os, vtkIndent indent) override
Standard methods for obtaining type information and printing the object state.
void FastCompute(vtkAbstractInterpolatedVelocityField *inIVF, vtkDataArray *vectors, double f[3])
If all weights have been computed (parametric coords etc all valid), a scalar/vector can be quickly i...
void SelectVectors(int fieldAssociation, const char *fieldName)
the association type (see vtkDataObject::FieldAssociations) and the name of the velocity data field
implement a specific vtkPointSet::FindCell() strategy based on using a cell locator
implement a specific vtkPointSet::FindCell() strategy based on the N closest points
implement a specific vtkPointSet::FindCell() strategy based on closest point
abstract superclass for composite (multi-block or AMR) datasets
abstract superclass for arrays of numeric data
general representation of visualization data
abstract class to specify dataset behavior
Definition vtkDataSet.h:53
helper class to manage the vtkPointSet::FindCell() METHOD
Abstract interface for sets of functions.
provides thread-safe access to cells
list of point or cell ids
Definition vtkIdList.h:23
a simple class to control print indentation
Definition vtkIndent.h:29
Allocate and hold a VTK object.
Definition vtkNew.h:51
T * Get() const noexcept
Get a raw pointer to the contained object.
Definition vtkNew.h:141
represent and manipulate point attribute data
A helper class for interpolating between times during particle tracing.
vtkDataSetInformation(vtkDataSet *dataSet, vtkFindCellStrategy *strategy, vtkDataArray *vectors)
int vtkIdType
Definition vtkType.h:315