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.
 
 
 
 
 
 

212 lines
7.5 KiB

/*=========================================================================
Program: Visualization Toolkit
Module: $RCSfile: vtkRearrangeFields.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 vtkRearrangeFields - Move/copy fields between field data, point data and cell data
// .SECTION Description
// vtkRearrangeFields is used to copy/move fields (vtkDataArrays) between
// data object's field data, point data and cell data. To specify which
// fields are copied/moved, the user adds operations. There are two types
// of operations: 1. the type which copies/moves an attribute's data
// (i.e. the field will be copied but will not be an attribute in the
// target), 2. the type which copies/moves fields by name. For example:
// @verbatim
// rf->AddOperation(vtkRearrangeFields::COPY, "foo",
// vtkRearrangeFields::DATA_OBJECT,
// vtkRearrangeFields::POINT_DATA);
// @endverbatim
// adds an operation which copies a field (data array) called foo from
// the data object's field data to point data.
// From Tcl, the same operation can be added as follows:
// @verbatim
// rf AddOperation COPY foo DATA_OBJECT POINT_DATA
// @endverbatim
// The same can be done using Python and Java bindings by passing
// strings as arguments.
// @verbatim
// Operation types: COPY, MOVE
// AttributeTypes: SCALARS, VECTORS, NORMALS, TCOORDS, TENSORS
// Field data locations: DATA_OBJECT, POINT_DATA, CELL_DATA
// @endverbatim
// .SECTION Caveats
// When using Tcl, Java, Python or Visual Basic bindings, the array name
// can not be one of the AttributeTypes when calling AddOperation() which
// takes strings as arguments. The Tcl (Java etc.) command will
// always assume the string corresponds to an attribute type when
// the argument is one of the AttributeTypes. In this situation,
// use the AddOperation() which takes enums.
// .SECTION See Also
// vtkFieldData vtkDataSet vtkDataObjectToDataSetFilter
// vtkDataSetAttributes vtkDataArray vtkAssignAttribute
// vtkSplitField vtkMergeFields
#ifndef __vtkRearrangeFields_h
#define __vtkRearrangeFields_h
#include "vtkDataSetAlgorithm.h"
#include "vtkDataSetAttributes.h" // Needed for NUM_ATTRIBUTES
class vtkFieldData;
class VTK_GRAPHICS_EXPORT vtkRearrangeFields : public vtkDataSetAlgorithm
{
public:
vtkTypeRevisionMacro(vtkRearrangeFields,vtkDataSetAlgorithm);
void PrintSelf(ostream& os, vtkIndent indent);
// Description:
// Create a new vtkRearrangeFields with an empty operation list.
static vtkRearrangeFields *New();
//BTX
enum OperationType
{
COPY=0,
MOVE=1
};
enum FieldLocation
{
DATA_OBJECT=0,
POINT_DATA=1,
CELL_DATA=2
};
//ETX
// Description:
// Add an operation which copies an attribute's field (data array) from
// one field data to another. Returns an operation id which can later
// be used to remove the operation.
int AddOperation(int operationType, int attributeType, int fromFieldLoc,
int toFieldLoc);
// Description:
// Add an operation which copies a field (data array) from one field
// data to another. Returns an operation id which can later
// be used to remove the operation.
int AddOperation(int operationType, const char* name, int fromFieldLoc,
int toFieldLoc);
// Description:
// Helper method used by other language bindings. Allows the caller to
// specify arguments as strings instead of enums.Returns an operation id
// which can later be used to remove the operation.
int AddOperation(const char* operationType, const char* attributeType,
const char* fromFieldLoc, const char* toFieldLoc);
// Description:
// Remove an operation with the given id.
int RemoveOperation(int operationId);
// Description:
// Remove an operation with the given signature. See AddOperation
// for details.
int RemoveOperation(int operationType, int attributeType, int fromFieldLoc,
int toFieldLoc);
// Description:
// Remove an operation with the given signature. See AddOperation
// for details.
int RemoveOperation(int operationType, const char* name, int fromFieldLoc,
int toFieldLoc);
// Description:
// Remove an operation with the given signature. See AddOperation
// for details.
int RemoveOperation(const char* operationType, const char* attributeType,
const char* fromFieldLoc, const char* toFieldLoc);
// Description:
// Remove all operations.
void RemoveAllOperations()
{
this->Modified();
this->LastId = 0;
this->DeleteAllOperations();
}
//BTX
enum FieldType
{
NAME,
ATTRIBUTE
};
struct Operation
{
int OperationType; // COPY or MOVE
int FieldType; // NAME or ATTRIBUTE
char* FieldName;
int AttributeType;
int FromFieldLoc; // fd, pd or do
int ToFieldLoc; // fd, pd or do
int Id; // assigned during creation
Operation* Next; // linked list
Operation() { FieldName = 0; }
~Operation() { delete[] FieldName; }
};
//ETX
protected:
vtkRearrangeFields();
virtual ~vtkRearrangeFields();
int RequestData(vtkInformation *, vtkInformationVector **, vtkInformationVector *);
// Operations are stored as a linked list.
Operation* Head;
Operation* Tail;
// This is incremented whenever a new operation is created.
// It is not decremented when an operation is deleted.
int LastId;
// Methods to browse/modify the linked list.
Operation* GetNextOperation(Operation* op)
{ return op->Next; }
Operation* GetFirst()
{ return this->Head; }
void AddOperation(Operation* op);
void DeleteOperation(Operation* op, Operation* before);
Operation* FindOperation(int id, Operation*& before);
Operation* FindOperation(const char* name, Operation*& before);
Operation* FindOperation(int operationType, const char* name,
int fromFieldLoc, int toFieldLoc,
Operation*& before);
Operation* FindOperation(int operationType, int attributeType,
int fromFieldLoc, int toFieldLoc,
Operation*& before);
// Used when finding/deleting an operation given a signature.
int CompareOperationsByType(const Operation* op1, const Operation* op2);
int CompareOperationsByName(const Operation* op1, const Operation* op2);
void DeleteAllOperations();
void ApplyOperation(Operation* op, vtkDataSet* input, vtkDataSet* output);
// Given location (DATA_OBJECT, CELL_DATA, POINT_DATA) return the
// pointer to the corresponding field data.
vtkFieldData* GetFieldDataFromLocation(vtkDataSet* ds, int fieldLoc);
// Used by AddOperation() and RemoveOperation() designed to be used
// from other language bindings.
static char OperationTypeNames[2][5];
static char FieldLocationNames[3][12];
static char AttributeNames[vtkDataSetAttributes::NUM_ATTRIBUTES][10];
void PrintAllOperations(ostream& os, vtkIndent indent);
void PrintOperation(Operation* op, ostream& os, vtkIndent indent);
private:
vtkRearrangeFields(const vtkRearrangeFields&); // Not implemented.
void operator=(const vtkRearrangeFields&); // Not implemented.
};
#endif