00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00051
#ifndef __vtkMergeFields_h
00052
#define __vtkMergeFields_h
00053
00054
#include "vtkDataSetToDataSetFilter.h"
00055
00056
class vtkDataArray;
00057
class vtkFieldData;
00058
00059 class VTK_GRAPHICS_EXPORT vtkMergeFields :
public vtkDataSetToDataSetFilter
00060 {
00061
public:
00062 vtkTypeRevisionMacro(vtkMergeFields,
vtkDataSetToDataSetFilter);
00063
void PrintSelf(ostream& os,
vtkIndent indent);
00064
00066
static vtkMergeFields *
New();
00067
00070
void SetOutputField(
const char* name,
int fieldLoc);
00071
00075
void SetOutputField(
const char* name,
const char* fieldLoc);
00076
00078
void Merge(
int component,
const char* arrayName,
int sourceComp);
00079
00081
00083 vtkSetMacro(NumberOfComponents,
int);
00085
00086
00087 enum FieldLocations
00088 {
00089 DATA_OBJECT=0,
00090 POINT_DATA=1,
00091 CELL_DATA=2
00092 };
00093
00094
00095
00096 struct Component
00097 {
00098 int Index;
00099 int SourceIndex;
00100 char* FieldName;
00101 Component* Next;
00102 void SetName(
const char* name)
00103 {
00104
delete[] this->FieldName;
00105 this->FieldName = 0;
00106
if (name)
00107 {
00108 this->FieldName =
new char[strlen(name)+1];
00109 strcpy(this->FieldName, name);
00110 }
00111 }
00112 Component() { FieldName = 0; }
00113 ~
Component() {
delete[] FieldName; }
00114 };
00115
00116
00117
protected:
00118
00119
00120 enum FieldType
00121 {
00122 NAME,
00123 ATTRIBUTE
00124 };
00125
00126
00127 vtkMergeFields();
00128
virtual ~vtkMergeFields();
00129
00130
void Execute();
00131
00132 char* FieldName;
00133 int FieldLocation;
00134 int NumberOfComponents;
00135 int OutputDataType;
00136
00137 static char FieldLocationNames[3][12];
00138
00139
00140
int MergeArray(
vtkDataArray* in,
vtkDataArray* out,
int inComp,
int outComp);
00141
00142
00143 Component* Head;
00144 Component* Tail;
00145
00146
00147 Component* GetNextComponent(
Component* op)
00148 {
return op->
Next; }
00149 Component* GetFirst()
00150 {
return this->Head; }
00151
void AddComponent(Component* op);
00152 Component* FindComponent(
int index);
00153
void DeleteAllComponents();
00154
00155
void PrintComponent(Component* op, ostream& os,
vtkIndent indent);
00156
void PrintAllComponents(ostream& os,
vtkIndent indent);
00157
private:
00158 vtkMergeFields(
const vtkMergeFields&);
00159
void operator=(
const vtkMergeFields&);
00160 };
00161
00162
#endif
00163
00164