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.
 
 
 
 
 
 

158 lines
4.3 KiB

/*=========================================================================
Program: Visualization Toolkit
Module: $RCSfile: vtkMergeFields.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 vtkMergeFields - Merge multiple fields into one.
// .SECTION Description
// vtkMergeFields is used to merge mutliple field into one.
// The new field is put in the same field data as the original field.
// For example
// @verbatim
// mf->SetOutputField("foo", vtkMergeFields::POINT_DATA);
// mf->SetNumberOfComponents(2);
// mf->Merge(0, "array1", 1);
// mf->Merge(1, "array2", 0);
// @endverbatim
// will tell vtkMergeFields to use the 2nd component of array1 and
// the 1st component of array2 to create a 2 component field called foo.
// The same can be done using Tcl:
// @verbatim
// mf SetOutputField foo POINT_DATA
// mf Merge 0 array1 1
// mf Merge 1 array2 0
//
// Field locations: DATA_OBJECT, POINT_DATA, CELL_DATA
// @endverbatim
// .SECTION See Also
// vtkFieldData vtkDataSet vtkDataObjectToDataSetFilter
// vtkDataSetAttributes vtkDataArray vtkRearrangeFields
// vtkSplitField vtkAssignAttribute
#ifndef __vtkMergeFields_h
#define __vtkMergeFields_h
#include "vtkDataSetAlgorithm.h"
class vtkDataArray;
class vtkFieldData;
class VTK_GRAPHICS_EXPORT vtkMergeFields : public vtkDataSetAlgorithm
{
public:
vtkTypeRevisionMacro(vtkMergeFields,vtkDataSetAlgorithm);
void PrintSelf(ostream& os, vtkIndent indent);
// Description:
// Create a new vtkMergeFields.
static vtkMergeFields *New();
// Description:
// The output field will have the given name and it will be in
// fieldLoc (the input fields also have to be in fieldLoc).
void SetOutputField(const char* name, int fieldLoc);
// Description:
// Helper method used by the 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.
void SetOutputField(const char* name, const char* fieldLoc);
// Description:
// Add a component (arrayName,sourceComp) to the output field.
void Merge(int component, const char* arrayName, int sourceComp);
// Description:
// Set the number of the components in the output field.
// This has to be set before execution. Default value is 0.
vtkSetMacro(NumberOfComponents, int);
//BTX
enum FieldLocations
{
DATA_OBJECT=0,
POINT_DATA=1,
CELL_DATA=2
};
//ETX
//BTX
struct Component
{
int Index;
int SourceIndex;
char* FieldName;
Component* Next; // linked list
void SetName(const char* name)
{
delete[] this->FieldName;
this->FieldName = 0;
if (name)
{
this->FieldName = new char[strlen(name)+1];
strcpy(this->FieldName, name);
}
}
Component() { FieldName = 0; }
~Component() { delete[] FieldName; }
};
//ETX
protected:
//BTX
enum FieldType
{
NAME,
ATTRIBUTE
};
//ETX
vtkMergeFields();
virtual ~vtkMergeFields();
int RequestData(vtkInformation *, vtkInformationVector **, vtkInformationVector *);
char* FieldName;
int FieldLocation;
int NumberOfComponents;
int OutputDataType;
static char FieldLocationNames[3][12];
int MergeArray(vtkDataArray* in, vtkDataArray* out, int inComp, int outComp);
// Components are stored as a linked list.
Component* Head;
Component* Tail;
// Methods to browse/modify the linked list.
Component* GetNextComponent(Component* op)
{ return op->Next; }
Component* GetFirst()
{ return this->Head; }
void AddComponent(Component* op);
Component* FindComponent(int index);
void DeleteAllComponents();
void PrintComponent(Component* op, ostream& os, vtkIndent indent);
void PrintAllComponents(ostream& os, vtkIndent indent);
private:
vtkMergeFields(const vtkMergeFields&); // Not implemented.
void operator=(const vtkMergeFields&); // Not implemented.
};
#endif