VTK
vtkRearrangeFields.h
Go to the documentation of this file.
1 /*=========================================================================
2 
3  Program: Visualization Toolkit
4  Module: vtkRearrangeFields.h
5 
6  Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
7  All rights reserved.
8  See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
9 
10  This software is distributed WITHOUT ANY WARRANTY; without even
11  the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
12  PURPOSE. See the above copyright notice for more information.
13 
14 =========================================================================*/
60 #ifndef vtkRearrangeFields_h
61 #define vtkRearrangeFields_h
62 
63 #include "vtkFiltersCoreModule.h" // For export macro
64 #include "vtkDataSetAlgorithm.h"
65 
66 #include "vtkDataSetAttributes.h" // Needed for NUM_ATTRIBUTES
67 
68 class vtkFieldData;
69 
70 class VTKFILTERSCORE_EXPORT vtkRearrangeFields : public vtkDataSetAlgorithm
71 {
72 public:
74  void PrintSelf(ostream& os, vtkIndent indent) override;
75 
79  static vtkRearrangeFields *New();
80 
82  {
83  COPY=0,
84  MOVE=1
85  };
87  {
88  DATA_OBJECT=0,
89  POINT_DATA=1,
90  CELL_DATA=2
91  };
92 
98  int AddOperation(int operationType, int attributeType, int fromFieldLoc,
99  int toFieldLoc);
105  int AddOperation(int operationType, const char* name, int fromFieldLoc,
106  int toFieldLoc);
112  int AddOperation(const char* operationType, const char* attributeType,
113  const char* fromFieldLoc, const char* toFieldLoc);
114 
118  int RemoveOperation(int operationId);
123  int RemoveOperation(int operationType, int attributeType, int fromFieldLoc,
124  int toFieldLoc);
129  int RemoveOperation(int operationType, const char* name, int fromFieldLoc,
130  int toFieldLoc);
135  int RemoveOperation(const char* operationType, const char* attributeType,
136  const char* fromFieldLoc, const char* toFieldLoc);
137 
139 
143  {
144  this->Modified();
145  this->LastId = 0;
146  this->DeleteAllOperations();
147  }
149 
151  {
153  ATTRIBUTE
154  };
155 
156  struct Operation
157  {
158  int OperationType; // COPY or MOVE
159  int FieldType; // NAME or ATTRIBUTE
160  char* FieldName;
162  int FromFieldLoc; // fd, pd or do
163  int ToFieldLoc; // fd, pd or do
164  int Id; // assigned during creation
165  Operation* Next; // linked list
166  Operation() { FieldName = nullptr; }
167  ~Operation() { delete[] FieldName; }
168  };
169 
170 protected:
171 
173  ~vtkRearrangeFields() override;
174 
176 
177 
178  // Operations are stored as a linked list.
181  // This is incremented whenever a new operation is created.
182  // It is not decremented when an operation is deleted.
183  int LastId;
184 
185  // Methods to browse/modify the linked list.
187  { return op->Next; }
189  { return this->Head; }
190  void AddOperation(Operation* op);
191  void DeleteOperation(Operation* op, Operation* before);
192  Operation* FindOperation(int id, Operation*& before);
193  Operation* FindOperation(const char* name, Operation*& before);
194  Operation* FindOperation(int operationType, const char* name,
195  int fromFieldLoc, int toFieldLoc,
196  Operation*& before);
197  Operation* FindOperation(int operationType, int attributeType,
198  int fromFieldLoc, int toFieldLoc,
199  Operation*& before);
200  // Used when finding/deleting an operation given a signature.
201  int CompareOperationsByType(const Operation* op1, const Operation* op2);
202  int CompareOperationsByName(const Operation* op1, const Operation* op2);
203 
204  void DeleteAllOperations();
205  void ApplyOperation(Operation* op, vtkDataSet* input, vtkDataSet* output);
206  // Given location (DATA_OBJECT, CELL_DATA, POINT_DATA) return the
207  // pointer to the corresponding field data.
208  vtkFieldData* GetFieldDataFromLocation(vtkDataSet* ds, int fieldLoc);
209 
210  // Used by AddOperation() and RemoveOperation() designed to be used
211  // from other language bindings.
212  static char OperationTypeNames[2][5];
213  static char FieldLocationNames[3][12];
214  static char AttributeNames[vtkDataSetAttributes::NUM_ATTRIBUTES][10];
215 
216  void PrintAllOperations(ostream& os, vtkIndent indent);
217  void PrintOperation(Operation* op, ostream& os, vtkIndent indent);
218 private:
219  vtkRearrangeFields(const vtkRearrangeFields&) = delete;
220  void operator=(const vtkRearrangeFields&) = delete;
221 };
222 
223 #endif
224 
225 
vtkRearrangeFields::Operation::Next
Operation * Next
Definition: vtkRearrangeFields.h:165
vtkRearrangeFields::Head
Operation * Head
Definition: vtkRearrangeFields.h:179
vtkRearrangeFields::Operation::OperationType
int OperationType
Definition: vtkRearrangeFields.h:158
vtkRearrangeFields::Operation::Id
int Id
Definition: vtkRearrangeFields.h:164
vtkRearrangeFields::GetNextOperation
Operation * GetNextOperation(Operation *op)
Definition: vtkRearrangeFields.h:186
vtkRearrangeFields::Operation::FieldName
char * FieldName
Definition: vtkRearrangeFields.h:160
vtkRearrangeFields::Operation::~Operation
~Operation()
Definition: vtkRearrangeFields.h:167
vtkInformationVector
Store zero or more vtkInformation instances.
Definition: vtkInformationVector.h:41
vtkRearrangeFields::FieldLocation
FieldLocation
Definition: vtkRearrangeFields.h:86
vtkRearrangeFields::OperationType
OperationType
Definition: vtkRearrangeFields.h:81
vtkObject::Modified
virtual void Modified()
Update the modification time for this object.
vtkDataSetAlgorithm::RequestData
virtual int RequestData(vtkInformation *, vtkInformationVector **, vtkInformationVector *)
This is called within ProcessRequest when a request asks the algorithm to do its work.
Definition: vtkDataSetAlgorithm.h:180
vtkRearrangeFields::Operation::Operation
Operation()
Definition: vtkRearrangeFields.h:166
vtkFieldData
represent and manipulate fields of data
Definition: vtkFieldData.h:56
vtkDataSetAlgorithm
Superclass for algorithms that produce output of the same type as input.
Definition: vtkDataSetAlgorithm.h:48
vtkRearrangeFields::GetFirst
Operation * GetFirst()
Definition: vtkRearrangeFields.h:188
vtkRearrangeFields::Operation
Definition: vtkRearrangeFields.h:156
vtkRearrangeFields::LastId
int LastId
Definition: vtkRearrangeFields.h:183
vtkIndent
a simple class to control print indentation
Definition: vtkIndent.h:39
vtkDataSetAlgorithm::New
static vtkDataSetAlgorithm * New()
vtkRearrangeFields::Operation::FromFieldLoc
int FromFieldLoc
Definition: vtkRearrangeFields.h:162
vtkX3D::name
Definition: vtkX3D.h:219
vtkRearrangeFields::FieldType
FieldType
Definition: vtkRearrangeFields.h:150
vtkRearrangeFields::Tail
Operation * Tail
Definition: vtkRearrangeFields.h:180
vtkDataSet
abstract class to specify dataset behavior
Definition: vtkDataSet.h:62
vtkInformation
Store vtkAlgorithm input/output information.
Definition: vtkInformation.h:86
vtkRearrangeFields::Operation::ToFieldLoc
int ToFieldLoc
Definition: vtkRearrangeFields.h:163
vtkRearrangeFields::Operation::FieldType
int FieldType
Definition: vtkRearrangeFields.h:159
vtkDataSetAlgorithm.h
vtkDataSetAlgorithm::PrintSelf
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
vtkRearrangeFields::NAME
Definition: vtkRearrangeFields.h:152
vtkRearrangeFields
Move/copy fields between field data, point data and cell data.
Definition: vtkRearrangeFields.h:70
vtkRearrangeFields::RemoveAllOperations
void RemoveAllOperations()
Remove all operations.
Definition: vtkRearrangeFields.h:142
vtkDataSetAttributes.h
vtkDataSetAttributes::NUM_ATTRIBUTES
Definition: vtkDataSetAttributes.h:110
vtkRearrangeFields::Operation::AttributeType
int AttributeType
Definition: vtkRearrangeFields.h:161