Cloned library of VTK-5.0.0 with extra build files for internal package management.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

159 lines
5.1 KiB

/*=========================================================================
Program: Visualization Toolkit
Module: $RCSfile: vtkInterpolatedVelocityField.h,v $
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.
=========================================================================*/
// .NAME vtkInterpolatedVelocityField - Interface for obtaining
// interpolated velocity values
// .SECTION Description
// vtkInterpolatedVelocityField 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 id. For example, in streamline
// integration, the next evaluation is usually in the same or a neighbour
// cell. For this reason, vtkInterpolatedVelocityField stores the last
// cell id. If caching is turned on, it uses this id as the starting point.
// .SECTION Caveats
// vtkInterpolatedVelocityField is not thread safe. A new instance should
// be created by each thread.
// .SECTION See Also
// vtkFunctionSet vtkStreamer
#ifndef __vtkInterpolatedVelocityField_h
#define __vtkInterpolatedVelocityField_h
#include "vtkFunctionSet.h"
class vtkDataSet;
class vtkGenericCell;
class vtkInterpolatedVelocityFieldDataSetsType;
class VTK_FILTERING_EXPORT vtkInterpolatedVelocityField : public vtkFunctionSet
{
public:
vtkTypeRevisionMacro(vtkInterpolatedVelocityField,vtkFunctionSet);
virtual void PrintSelf(ostream& os, vtkIndent indent);
// Description:
// Construct a vtkInterpolatedVelocityField with no initial data set.
// Caching is on. LastCellId is set to -1.
static vtkInterpolatedVelocityField *New();
// Description:
// Evaluate the velocity field, f, at (x, y, z, t).
// For now, t is ignored.
virtual int FunctionValues(double* x, double* f);
// Description:
// 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(vtkDataSet* dataset);
// Description:
// Return the cell id cached from last evaluation.
vtkGetMacro(LastCellId, vtkIdType);
vtkSetMacro(LastCellId, vtkIdType);
// Description:
// Set the last cell id to -1 so that the next search does not
// start from the previous cell
void ClearLastCellId() { this->LastCellId = -1; }
// Description:
// 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 GetLastWeights(double* w);
int GetLastLocalCoordinates(double pcoords[3]);
// Description:
// Turn caching on/off.
vtkGetMacro(Caching, int);
vtkSetMacro(Caching, int);
vtkBooleanMacro(Caching, int);
// Description:
// Caching statistics.
vtkGetMacro(CacheHit, int);
vtkGetMacro(CacheMiss, int);
// Description:
// If you want to work with an arbitrary vector array, then set its name
// here. By default this in NULL and the filter will use the active vector
// array.
vtkGetStringMacro(VectorsSelection);
void SelectVectors(const char *fieldName)
{this->SetVectorsSelection(fieldName);}
// Description:
// 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, vtkDataSet);
// Description:
// Copy the user set parameters from source. This copies
// the Caching parameters. Sub-classes can add more after
// chaining.
virtual void CopyParameters(vtkInterpolatedVelocityField* from);
protected:
vtkInterpolatedVelocityField();
~vtkInterpolatedVelocityField();
vtkGenericCell* GenCell; // last cell
vtkGenericCell* Cell;
double* Weights; // last weights
int WeightsSize;
double LastPCoords[3]; // last local coordinates
vtkIdType LastCellId;
int CacheHit;
int CacheMiss;
int Caching;
vtkDataSet* LastDataSet;
vtkSetStringMacro(VectorsSelection);
char *VectorsSelection;
vtkInterpolatedVelocityFieldDataSetsType* DataSets;
int FunctionValues(vtkDataSet* ds, double* x, double* f);
static const double TOLERANCE_SCALE;
private:
vtkInterpolatedVelocityField(const vtkInterpolatedVelocityField&); // Not implemented.
void operator=(const vtkInterpolatedVelocityField&); // Not implemented.
};
#endif