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.
 
 
 
 
 
 

182 lines
6.5 KiB

/*=========================================================================
Program: Visualization Toolkit
Module: $RCSfile: vtkArrayCalculator.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 vtkArrayCalculator - perform mathematical operations on data in field data arrays
// .SECTION Description
// vtkArrayCalculator performs operations on vectors or scalars in field
// data arrays. It uses vtkFunctionParser to do the parsing and to
// evaluate the function for each entry in the input arrays. The arrays
// used in a given function must be all in point data or all in cell data.
// The resulting array will be stored as a field data array. The result
// array can either be stored in a new array or it can overwrite an existing
// array.
//
// The functions that this array calculator understands is:
// <pre>
// standard operations: + - * / ^ .
// access vector components: iHat, jHat, kHat
// abs
// acos
// asin
// atan
// ceil
// cos
// cosh
// exp
// floor
// log
// mag
// min
// max
// norm
// sign
// sin
// sinh
// sqrt
// tan
// tanh
// </pre>
// Note that some of these operations work on scalars, some on vectors, and some on
// both (e.g., you can multiply a scalar times a vector). The operations are performed
// tuple-wise (i.e., tuple-by-tuple). The user must specify which arrays to use as
// vectors and/or scalars, and the name of the output data array.
//
// .SECTION See Also
// vtkFunctionParser
#ifndef __vtkArrayCalculator_h
#define __vtkArrayCalculator_h
#include "vtkDataSetAlgorithm.h"
class vtkFunctionParser;
#define VTK_ATTRIBUTE_MODE_DEFAULT 0
#define VTK_ATTRIBUTE_MODE_USE_POINT_DATA 1
#define VTK_ATTRIBUTE_MODE_USE_CELL_DATA 2
class VTK_GRAPHICS_EXPORT vtkArrayCalculator : public vtkDataSetAlgorithm
{
public:
vtkTypeRevisionMacro(vtkArrayCalculator,vtkDataSetAlgorithm);
void PrintSelf(ostream& os, vtkIndent indent);
static vtkArrayCalculator *New();
// Description:
// Set/Get the function to be evaluated.
void SetFunction(const char* function);
vtkGetStringMacro(Function);
// Description:
// Add an array name to the list of arrays used in the function and specify
// which components of the array to use in evaluating the function. The
// array name must match the name in the function. Use AddScalarVariable or
// AddVectorVariable to use a variable name different from the array name.
void AddScalarArrayName(const char* arrayName, int component = 0);
void AddVectorArrayName(const char* arrayName, int component0 = 0,
int component1 = 1, int component2 = 2);
// Description:
// Add a variable name, a corresponding array name, and which components of
// the array to use.
void AddScalarVariable(const char* variableName, const char* arrayName,
int component = 0);
void AddVectorVariable(const char* variableName, const char* arrayName,
int component0 = 0, int component1 = 1,
int component2 = 2);
// Description:
// Set the name of the array in which to store the result of
// evaluating this function. If this is the name of an existing array,
// that array will be overwritten. Otherwise a new array will be
// created with the specified name.
void SetResultArrayName(const char* name);
vtkGetStringMacro(ResultArrayName);
// Description:
// Control whether the filter operates on point data or cell data.
// By default (AttributeModeToDefault), the filter uses point
// data. Alternatively you can explicitly set the filter to use point data
// (AttributeModeToUsePointData) or cell data (AttributeModeToUseCellData).
vtkSetMacro(AttributeMode,int);
vtkGetMacro(AttributeMode,int);
void SetAttributeModeToDefault()
{this->SetAttributeMode(VTK_ATTRIBUTE_MODE_DEFAULT);};
void SetAttributeModeToUsePointData()
{this->SetAttributeMode(VTK_ATTRIBUTE_MODE_USE_POINT_DATA);};
void SetAttributeModeToUseCellData()
{this->SetAttributeMode(VTK_ATTRIBUTE_MODE_USE_CELL_DATA);};
const char *GetAttributeModeAsString();
// Description:
// Remove all the variable names and their associated array names.
void RemoveAllVariables();
// Description:
// Methods to get information about the current variables.
char** GetScalarArrayNames() { return this->ScalarArrayNames; }
char* GetScalarArrayName(int i);
char** GetVectorArrayNames() { return this->VectorArrayNames; }
char* GetVectorArrayName(int i);
char** GetScalarVariableNames() { return this->ScalarVariableNames; }
char* GetScalarVariableName(int i);
char** GetVectorVariableNames() { return this->VectorVariableNames; }
char* GetVectorVariableName(int i);
int* GetSelectedScalarComponents() { return this->SelectedScalarComponents; }
int GetSelectedScalarComponent(int i);
int** GetSelectedVectorComponents() { return this->SelectedVectorComponents;}
int* GetSelectedVectorComponents(int i);
vtkGetMacro(NumberOfScalarArrays, int);
vtkGetMacro(NumberOfVectorArrays, int);
// Description:
// When ReplaceInvalidValues is on, all invalid values (such as
// sqrt(-2), note that function parser does not handle complex
// numbers) will be replaced by ReplacementValue. Otherwise an
// error will be reported
vtkSetMacro(ReplaceInvalidValues,int);
vtkGetMacro(ReplaceInvalidValues,int);
vtkBooleanMacro(ReplaceInvalidValues,int);
vtkSetMacro(ReplacementValue,double);
vtkGetMacro(ReplacementValue,double);
protected:
vtkArrayCalculator();
~vtkArrayCalculator();
virtual int RequestData(vtkInformation *, vtkInformationVector **, vtkInformationVector *);
char* Function;
char* ResultArrayName;
char** ScalarArrayNames;
char** VectorArrayNames;
char** ScalarVariableNames;
char** VectorVariableNames;
int NumberOfScalarArrays;
int NumberOfVectorArrays;
int AttributeMode;
int* SelectedScalarComponents;
int** SelectedVectorComponents;
vtkFunctionParser* FunctionParser;
int ReplaceInvalidValues;
double ReplacementValue;
private:
vtkArrayCalculator(const vtkArrayCalculator&); // Not implemented.
void operator=(const vtkArrayCalculator&); // Not implemented.
};
#endif