1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296
|
/*=========================================================================
Program: Visualization Toolkit
Module: vtkFieldDataToAttributeDataFilter.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.
=========================================================================*/
// .NAME vtkFieldDataToAttributeDataFilter - map field data to dataset attribute data
// .SECTION Description
// vtkFieldDataToAttributeDataFilter is a class that maps field data into
// dataset attributes. The input to this filter is any type of dataset and
// the output is the same dataset (geometry/topology) with new attribute data
// (attribute data is passed through if not replaced during filter
// execution).
//
// To use this filter you must specify which field data from the input
// dataset to use. There are three possibilities: the cell field data, the
// point field data, or the field data associated with the data object
// superclass. Then you specify which attribute data to create: either cell
// attribute data or point attribute data. Finally, you must define how to
// construct the various attribute data types (e.g., scalars, vectors,
// normals, etc.) from the arrays and the components of the arrays from the
// field data. This is done by associating components in the input field with
// components making up the attribute data. For example, you would specify a
// scalar with three components (RGB) by assigning components from the field
// for the R, then G, then B values of the scalars. You may also have to
// specify component ranges (for each R-G-B) to make sure that the number of
// R, G, and B values is the same. Also, you may want to normalize the
// components which helps distribute the data uniformly.
//
// This filter is often used in conjunction with
// vtkDataObjectToDataSetFilter. vtkDataObjectToDataSetFilter filter
// generates dataset topology and geometry and passes its input field data
// along to its output. Then this filter is used to generate the attribute
// data to go along with the dataset.
// .SECTION Caveats
// Make sure that the data you extract is consistent. That is, if you have N
// points, extract N point attributes (scalars, vectors, etc.).
// .SECTION See Also
// vtkFieldData vtkDataSet vtkDataObjectToDataSetFilter
// vtkDataSetAttributes vtkDataArray
#ifndef __vtkFieldDataToAttributeDataFilter_h
#define __vtkFieldDataToAttributeDataFilter_h
#include "vtkDataSetAlgorithm.h"
#define VTK_DATA_OBJECT_FIELD 0
#define VTK_POINT_DATA_FIELD 1
#define VTK_CELL_DATA_FIELD 2
#define VTK_CELL_DATA 0
#define VTK_POINT_DATA 1
class vtkDataArray;
class vtkDataSetAttributes;
class vtkFieldData;
class VTK_GRAPHICS_EXPORT vtkFieldDataToAttributeDataFilter : public vtkDataSetAlgorithm
{
public:
void PrintSelf(ostream& os, vtkIndent indent);
vtkTypeMacro(vtkFieldDataToAttributeDataFilter,vtkDataSetAlgorithm);
// Description:
// Construct object with input field set to the data object field, and the
// output attribute data set to generate point data.
static vtkFieldDataToAttributeDataFilter *New();
// Description:
// Specify which field data to use to generate the output attribute
// data. There are three choices: the field data associated with the
// vtkDataObject superclass; the point field attribute data; and the cell
// field attribute data.
vtkSetMacro(InputField,int);
vtkGetMacro(InputField,int);
void SetInputFieldToDataObjectField()
{this->SetInputField(VTK_DATA_OBJECT_FIELD);};
void SetInputFieldToPointDataField()
{this->SetInputField(VTK_POINT_DATA_FIELD);};
void SetInputFieldToCellDataField()
{this->SetInputField(VTK_CELL_DATA_FIELD);};
// Description:
// Specify which attribute data to output: point or cell data attributes.
vtkSetMacro(OutputAttributeData,int);
vtkGetMacro(OutputAttributeData,int);
void SetOutputAttributeDataToCellData()
{this->SetOutputAttributeData(VTK_CELL_DATA);};
void SetOutputAttributeDataToPointData()
{this->SetOutputAttributeData(VTK_POINT_DATA);};
// Description:
// Define the component(s) of the field to be used for the scalar
// components. Note that the parameter comp must lie between (0,4). To
// define the field component to use you specify an array name and the
// component in that array. The (min,max) values are the range of data in
// the component you wish to extract.
void SetScalarComponent(int comp, const char *arrayName, int arrayComp,
int min, int max, int normalize);
void SetScalarComponent(int comp, const char *arrayName, int arrayComp)
{this->SetScalarComponent(comp, arrayName, arrayComp, -1, -1, this->DefaultNormalize);};
const char *GetScalarComponentArrayName(int comp);
int GetScalarComponentArrayComponent(int comp);
int GetScalarComponentMinRange(int comp);
int GetScalarComponentMaxRange(int comp);
int GetScalarComponentNormalizeFlag(int comp);
// Description:
// Define the component(s) of the field to be used for the vector
// components. Note that the parameter comp must lie between (0,3). To
// define the field component to use you specify an array name and the
// component in that array. The (min,max) values are the range of data in
// the component you wish to extract.
void SetVectorComponent(int comp, const char *arrayName, int arrayComp,
int min, int max, int normalize);
void SetVectorComponent(int comp, const char *arrayName, int arrayComp)
{this->SetVectorComponent(comp, arrayName, arrayComp, -1, -1, this->DefaultNormalize);};
const char *GetVectorComponentArrayName(int comp);
int GetVectorComponentArrayComponent(int comp);
int GetVectorComponentMinRange(int comp);
int GetVectorComponentMaxRange(int comp);
int GetVectorComponentNormalizeFlag(int comp);
// Description:
// Define the component(s) of the field to be used for the normal
// components. Note that the parameter comp must lie between (0,3). To
// define the field component to use you specify an array name and the
// component in that array. The (min,max) values are the range of data in
// the component you wish to extract.
void SetNormalComponent(int comp, const char *arrayName, int arrayComp,
int min, int max, int normalize);
void SetNormalComponent(int comp, const char *arrayName, int arrayComp)
{this->SetNormalComponent(comp, arrayName, arrayComp, -1, -1, this->DefaultNormalize);};
const char *GetNormalComponentArrayName(int comp);
int GetNormalComponentArrayComponent(int comp);
int GetNormalComponentMinRange(int comp);
int GetNormalComponentMaxRange(int comp);
int GetNormalComponentNormalizeFlag(int comp);
// Description:
// Define the components of the field to be used for the tensor
// components. Note that the parameter comp must lie between (0,9). To
// define the field component to use you specify an array name and the
// component in that array. The (min,max) values are the range of data in
// the component you wish to extract.
void SetTensorComponent(int comp, const char *arrayName, int arrayComp,
int min, int max, int normalize);
void SetTensorComponent(int comp, const char *arrayName, int arrayComp)
{this->SetTensorComponent(comp, arrayName, arrayComp, -1, -1, this->DefaultNormalize);};
const char *GetTensorComponentArrayName(int comp);
int GetTensorComponentArrayComponent(int comp);
int GetTensorComponentMinRange(int comp);
int GetTensorComponentMaxRange(int comp);
int GetTensorComponentNormalizeFlag(int comp);
// Description:
// Define the components of the field to be used for the cell texture coord
// components. Note that the parameter comp must lie between (0,9). To
// define the field component to use you specify an array name and the
// component in that array. The (min,max) values are the range of data in
// the component you wish to extract.
void SetTCoordComponent(int comp, const char *arrayName, int arrayComp,
int min, int max, int normalize);
void SetTCoordComponent(int comp, const char *arrayName, int arrayComp)
{this->SetTCoordComponent(comp, arrayName, arrayComp, -1, -1, this->DefaultNormalize);};
const char *GetTCoordComponentArrayName(int comp);
int GetTCoordComponentArrayComponent(int comp);
int GetTCoordComponentMinRange(int comp);
int GetTCoordComponentMaxRange(int comp);
int GetTCoordComponentNormalizeFlag(int comp);
// Description:
// Set the default Normalize() flag for those methods setting a default
// Normalize value (e.g., SetScalarComponents).
vtkSetMacro(DefaultNormalize,int);
vtkGetMacro(DefaultNormalize,int);
vtkBooleanMacro(DefaultNormalize,int);
// Helper functions, made public to support other classes
// Description:
// Given an array of names of arrays in field data, return the common type
// for these arrays. For example, if a vector is constructed of the three
// type (char,int,float), the return type is float.
static int GetComponentsType(int numComp, vtkDataArray **arrays);
// Description:
// Construct a portion of a data array (the comp portion) from another data
// array and its component. The variables min and max control the range of
// the data to use from the other data array; normalize is a flag that when
// set will normalize the data between (0,1).
static int ConstructArray(vtkDataArray *da, int comp, vtkDataArray *frray,
int fieldComp, vtkIdType min, vtkIdType max,
int normalize);
// Description:
// Return an array of a particular name from field data and do error checking.
static vtkDataArray *GetFieldArray(vtkFieldData *fd, char *name, int comp);
// Description:
// Specify an array name for one of the components.
static void SetArrayName(vtkObject *self, char* &name, const char *newName);
//BTX
// Description:
// Update the maximum and minimum component range values. Returns a flag
// indicating whether the range was updated.
static int UpdateComponentRange(vtkDataArray *da, vtkIdType compRange[2]);
//ETX
// Description:
// If output does not need exact extent, the I do not either.
virtual int RequestUpdateExtent(vtkInformation *, vtkInformationVector **, vtkInformationVector *);
protected:
vtkFieldDataToAttributeDataFilter();
~vtkFieldDataToAttributeDataFilter();
virtual int RequestData(vtkInformation *, vtkInformationVector **, vtkInformationVector *); //generate output data
int InputField;
int OutputAttributeData;
int NumberOfScalarComponents; //the number of components to fill-in
char *ScalarArrays[4]; //the name of the arrays used to construct the scalar
int ScalarArrayComponents[4]; //the components of the arrays used to construct
vtkIdType ScalarComponentRange[4][2]; //the range of the components to use
int ScalarNormalize[4]; //flags control normalization
char *VectorArrays[3]; //the name of the arrays used to construct the vectors
int VectorArrayComponents[3]; //the components of the arrays used to construct
vtkIdType VectorComponentRange[3][2]; //the range of the components to use
int VectorNormalize[3]; //flags control normalization
char *GhostLevelArray; //the name of the array used to construct the ghost levels
int GhostLevelArrayComponent; //the component of the array used to construct
vtkIdType GhostLevelComponentRange[2]; //the range of the components to use
int GhostLevelNormalize; //flags control normalization
char *NormalArrays[3]; //the name of the arrays used to construct the normals
int NormalArrayComponents[3]; //the components of the arrays used to construct
vtkIdType NormalComponentRange[3][2]; //the range of the components to use
int NormalNormalize[3]; //flags control normalization
char *TensorArrays[9]; //the name of the arrays used to construct the tensors
int TensorArrayComponents[9]; //the components of the arrays used to construct
vtkIdType TensorComponentRange[9][2]; //the range of the components to use
int TensorNormalize[9]; //flags control normalization
int NumberOfTCoordComponents; //the number of components to fill-in
char *TCoordArrays[3]; //the name of the arrays used to construct the tcoords
int TCoordArrayComponents[3]; //the components of the arrays used to construct
vtkIdType TCoordComponentRange[3][2]; //the range of the components to use
int TCoordNormalize[3]; //flags control normalization
int DefaultNormalize;
void ConstructScalars(int num, vtkFieldData *fd, vtkDataSetAttributes *attr,
vtkIdType componentRange[4][2], char *arrays[4],
int arrayComponents[4], int normalize[4], int numComp);
void ConstructVectors(int num, vtkFieldData *fd, vtkDataSetAttributes *attr,
vtkIdType componentRange[3][2], char *arrays[3],
int arrayComponents[3], int normalize[3]);
void ConstructGhostLevels(int num, vtkFieldData *fd,
vtkDataSetAttributes *attr,
vtkIdType componentRange[2],
char *array, int arrayComponent, int normalize);
void ConstructNormals(int num, vtkFieldData *fd, vtkDataSetAttributes *attr,
vtkIdType componentRange[3][2], char *arrays[3],
int arrayComponents[3], int normalize[3]);
void ConstructTCoords(int num, vtkFieldData *fd, vtkDataSetAttributes *attr,
vtkIdType componentRange[3][2], char *arrays[3],
int arrayComponents[3], int normalize[3], int numComp);
void ConstructTensors(int num, vtkFieldData *fd, vtkDataSetAttributes *attr,
vtkIdType componentRange[9][2], char *arrays[9],
int arrayComponents[9], int normalize[9]);
void ConstructFieldData(int num, vtkDataSetAttributes *attr);
private:
vtkFieldDataToAttributeDataFilter(const vtkFieldDataToAttributeDataFilter&); // Not implemented.
void operator=(const vtkFieldDataToAttributeDataFilter&); // Not implemented.
};
#endif
|