You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
172 lines
5.2 KiB
C++
172 lines
5.2 KiB
C++
/*=========================================================================
|
|
|
|
Program: Visualization Toolkit
|
|
Module: vtkGenericInterpolatedVelocityField.h
|
|
|
|
Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
|
|
All rights reserved.
|
|
See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
|
|
|
|
This software is distributed WITHOUT ANY WARRANTY; without even
|
|
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
|
PURPOSE. See the above copyright notice for more information.
|
|
|
|
=========================================================================*/
|
|
/**
|
|
* @class vtkGenericInterpolatedVelocityField
|
|
* @brief Interface for obtaining
|
|
* interpolated velocity values
|
|
*
|
|
* vtkGenericInterpolatedVelocityField acts as a continuous velocity field
|
|
* by performing cell interpolation on the underlying vtkDataSet.
|
|
* This is a concrete sub-class of vtkFunctionSet with
|
|
* NumberOfIndependentVariables = 4 (x,y,z,t) and
|
|
* NumberOfFunctions = 3 (u,v,w). Normally, every time an evaluation
|
|
* is performed, the cell which contains the point (x,y,z) has to
|
|
* be found by calling FindCell. This is a computationally expansive
|
|
* operation. In certain cases, the cell search can be avoided or shortened
|
|
* by providing a guess for the cell iterator. For example, in streamline
|
|
* integration, the next evaluation is usually in the same or a neighbour
|
|
* cell. For this reason, vtkGenericInterpolatedVelocityField stores the last
|
|
* cell iterator. If caching is turned on, it uses this iterator as the
|
|
* starting point.
|
|
*
|
|
* @warning
|
|
* vtkGenericInterpolatedVelocityField is not thread safe. A new instance
|
|
* should be created by each thread.
|
|
*
|
|
* @sa
|
|
* vtkFunctionSet vtkGenericStreamTracer
|
|
*/
|
|
|
|
#ifndef vtkGenericInterpolatedVelocityField_h
|
|
#define vtkGenericInterpolatedVelocityField_h
|
|
|
|
#include "vtkCommonDataModelModule.h" // For export macro
|
|
#include "vtkFunctionSet.h"
|
|
|
|
class vtkGenericDataSet;
|
|
class vtkGenericCellIterator;
|
|
class vtkGenericAdaptorCell;
|
|
|
|
class vtkGenericInterpolatedVelocityFieldDataSetsType;
|
|
|
|
class VTKCOMMONDATAMODEL_EXPORT vtkGenericInterpolatedVelocityField : public vtkFunctionSet
|
|
{
|
|
public:
|
|
vtkTypeMacro(vtkGenericInterpolatedVelocityField, vtkFunctionSet);
|
|
void PrintSelf(ostream& os, vtkIndent indent) override;
|
|
|
|
/**
|
|
* Construct a vtkGenericInterpolatedVelocityField with no initial data set.
|
|
* Caching is on. LastCellId is set to -1.
|
|
*/
|
|
static vtkGenericInterpolatedVelocityField* New();
|
|
|
|
using Superclass::FunctionValues;
|
|
/**
|
|
* Evaluate the velocity field, f, at (x, y, z, t).
|
|
* For now, t is ignored.
|
|
*/
|
|
int FunctionValues(double* x, double* f) override;
|
|
|
|
/**
|
|
* Add a dataset used for the implicit function evaluation.
|
|
* If more than one dataset is added, the evaluation point is
|
|
* searched in all until a match is found. THIS FUNCTION
|
|
* DOES NOT CHANGE THE REFERENCE COUNT OF dataset FOR THREAD
|
|
* SAFETY REASONS.
|
|
*/
|
|
virtual void AddDataSet(vtkGenericDataSet* dataset);
|
|
|
|
/**
|
|
* Set the last cell id to -1 so that the next search does not
|
|
* start from the previous cell
|
|
*/
|
|
void ClearLastCell();
|
|
|
|
/**
|
|
* Return the cell cached from last evaluation.
|
|
*/
|
|
vtkGenericAdaptorCell* GetLastCell();
|
|
|
|
/**
|
|
* Returns the interpolation weights cached from last evaluation
|
|
* if the cached cell is valid (returns 1). Otherwise, it does not
|
|
* change w and returns 0.
|
|
*/
|
|
int GetLastLocalCoordinates(double pcoords[3]);
|
|
|
|
//@{
|
|
/**
|
|
* Turn caching on/off.
|
|
*/
|
|
vtkGetMacro(Caching, vtkTypeBool);
|
|
vtkSetMacro(Caching, vtkTypeBool);
|
|
vtkBooleanMacro(Caching, vtkTypeBool);
|
|
//@}
|
|
|
|
//@{
|
|
/**
|
|
* Caching statistics.
|
|
*/
|
|
vtkGetMacro(CacheHit, int);
|
|
vtkGetMacro(CacheMiss, int);
|
|
//@}
|
|
|
|
//@{
|
|
/**
|
|
* If you want to work with an arbitrary vector array, then set its name
|
|
* here. By default this in nullptr and the filter will use the active vector
|
|
* array.
|
|
*/
|
|
vtkGetStringMacro(VectorsSelection);
|
|
void SelectVectors(const char* fieldName) { this->SetVectorsSelection(fieldName); }
|
|
//@}
|
|
|
|
//@{
|
|
/**
|
|
* Returns the last dataset that was visited. Can be used
|
|
* as a first guess as to where the next point will be as
|
|
* well as to avoid searching through all datasets to get
|
|
* more information about the point.
|
|
*/
|
|
vtkGetObjectMacro(LastDataSet, vtkGenericDataSet);
|
|
//@}
|
|
|
|
/**
|
|
* Copy the user set parameters from source. This copies
|
|
* the Caching parameters. Sub-classes can add more after
|
|
* chaining.
|
|
*/
|
|
virtual void CopyParameters(vtkGenericInterpolatedVelocityField* from);
|
|
|
|
protected:
|
|
vtkGenericInterpolatedVelocityField();
|
|
~vtkGenericInterpolatedVelocityField() override;
|
|
|
|
vtkGenericCellIterator* GenCell; // last cell
|
|
|
|
double LastPCoords[3]; // last local coordinates
|
|
int CacheHit;
|
|
int CacheMiss;
|
|
vtkTypeBool Caching;
|
|
|
|
vtkGenericDataSet* LastDataSet;
|
|
|
|
vtkSetStringMacro(VectorsSelection);
|
|
char* VectorsSelection;
|
|
|
|
vtkGenericInterpolatedVelocityFieldDataSetsType* DataSets;
|
|
|
|
int FunctionValues(vtkGenericDataSet* ds, double* x, double* f);
|
|
|
|
static const double TOLERANCE_SCALE;
|
|
|
|
private:
|
|
vtkGenericInterpolatedVelocityField(const vtkGenericInterpolatedVelocityField&) = delete;
|
|
void operator=(const vtkGenericInterpolatedVelocityField&) = delete;
|
|
};
|
|
|
|
#endif
|