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
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
|
|
|
|
|
|
|