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