VTK
vtkFieldData.h
Go to the documentation of this file.
1 /*=========================================================================
2 
3  Program: Visualization Toolkit
4  Module: vtkFieldData.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 =========================================================================*/
43 #ifndef vtkFieldData_h
44 #define vtkFieldData_h
45 
46 #include "vtkCommonDataModelModule.h" // For export macro
47 #include "vtkObject.h"
48 
49 #include "vtkAbstractArray.h" // Needed for inline methods.
50 
51 class vtkIdList;
52 
53 class VTKCOMMONDATAMODEL_EXPORT vtkFieldData : public vtkObject
54 {
55 public:
56  static vtkFieldData *New();
57 
58  vtkTypeMacro(vtkFieldData,vtkObject);
59  void PrintSelf(ostream& os, vtkIndent indent) override;
60 
65  virtual void Initialize();
66 
71  int Allocate(vtkIdType sz, vtkIdType ext=1000);
72 
78  void CopyStructure(vtkFieldData*);
79 
89  void AllocateArrays(int num);
90 
98  {
99  return this->NumberOfActiveArrays;
100  }
101 
107  int AddArray(vtkAbstractArray *array);
108 
110 
113  virtual void RemoveArray(const char *name);
114  virtual void RemoveArray(int index);
116 
125  vtkDataArray *GetArray(int i);
126 
137  vtkDataArray *GetArray(const char *arrayName, int &index);
138 
140 
149  vtkDataArray *GetArray(const char *arrayName)
150  {
151  int i;
152  return this->GetArray(arrayName, i);
153  }
155 
161  vtkAbstractArray* GetAbstractArray(int i);
162 
169  vtkAbstractArray* GetAbstractArray(const char* arrayName, int &index);
170 
172 
177  vtkAbstractArray* GetAbstractArray(const char* arrayName)
178  {
179  int i;
180  return this->GetAbstractArray(arrayName, i);
181  }
183 
185 
188  int HasArray(const char *name)
189  {
190  int i;
191  vtkAbstractArray *array = this->GetAbstractArray(name, i);
192  // assert( i == -1);
193  return array ? 1 : 0;
194  }
196 
198 
203  const char* GetArrayName(int i)
204  {
205  vtkAbstractArray* da = this->GetAbstractArray(i);
206  return da ? da->GetName() : nullptr;
207  }
209 
214  virtual void PassData(vtkFieldData* fd);
215 
225  void CopyFieldOn(const char* name) { this->CopyFieldOnOff(name, 1); }
226  void CopyFieldOff(const char* name) { this->CopyFieldOnOff(name, 0); }
227 
237  virtual void CopyAllOn(int unused=0);
238 
248  virtual void CopyAllOff(int unused=0);
249 
253  virtual void DeepCopy(vtkFieldData *da);
254 
258  virtual void ShallowCopy(vtkFieldData *da);
259 
263  void Squeeze();
264 
269  void Reset();
270 
277  virtual unsigned long GetActualMemorySize();
278 
282  vtkMTimeType GetMTime() override;
283 
293  void GetField(vtkIdList *ptId, vtkFieldData *f);
294 
302  int GetArrayContainingComponent(int i, int& arrayComp);
303 
313  int GetNumberOfComponents();
314 
325  vtkIdType GetNumberOfTuples();
326 
335  void SetNumberOfTuples(const vtkIdType number);
336 
342  void SetTuple(const vtkIdType i, const vtkIdType j, vtkFieldData* source);
343 
348  void InsertTuple(const vtkIdType i, const vtkIdType j, vtkFieldData* source);
349 
355  vtkIdType InsertNextTuple(const vtkIdType j, vtkFieldData* source);
356 
357 protected:
358 
359  vtkFieldData();
360  ~vtkFieldData() override;
361 
365 
369  void SetArray(int i, vtkAbstractArray *array);
370 
374  virtual void InitializeFields();
375 
377  {
378  char* ArrayName;
379  int IsCopied;
380  };
381 
382  CopyFieldFlag* CopyFieldFlags; //the names of fields not to be copied
383  int NumberOfFieldFlags; //the number of fields not to be copied
384  void CopyFieldOnOff(const char* name, int onOff);
385  void ClearFieldFlags();
386  int FindFlag(const char* field);
387  int GetFlag(const char* field);
388  void CopyFlags(const vtkFieldData* source);
391 
392 
393 private:
394  vtkFieldData(const vtkFieldData&) = delete;
395  void operator=(const vtkFieldData&) = delete;
396 
397 public:
398 
399  class VTKCOMMONDATAMODEL_EXPORT BasicIterator
400  {
401  public:
402  BasicIterator();
404  BasicIterator(const int* list, unsigned int listSize);
405  BasicIterator& operator=(const BasicIterator& source);
406  virtual ~BasicIterator();
407  void PrintSelf(ostream &os, vtkIndent indent);
408 
409  int GetListSize() const
410  {
411  return this->ListSize;
412  }
414  {
415  return this->List[this->Position];
416  }
418  {
419  this->Position = -1;
420  return this->NextIndex();
421  }
422  int End() const
423  {
424  return (this->Position >= this->ListSize);
425  }
426  int NextIndex()
427  {
428  this->Position++;
429  return (this->End() ? -1 : this->List[this->Position]);
430  }
431 
432  protected:
433 
434  int* List;
435  int ListSize;
436  int Position;
437  };
438 
439  class VTKCOMMONDATAMODEL_EXPORT Iterator : public BasicIterator
440  {
441  public:
442 
443  Iterator(const Iterator& source);
445  ~Iterator() override;
446  Iterator(vtkFieldData* dsa, const int* list=nullptr,
447  unsigned int listSize=0);
448 
450  {
451  this->Position = -1;
452  return this->Next();
453  }
454 
456  {
457  this->Position++;
458  if (this->End())
459  {
460  return nullptr;
461  }
462 
463  // vtkFieldData::GetArray() can return null, which implies that
464  // a the array at the given index in not a vtkDataArray subclass.
465  // This iterator skips such arrays.
466  vtkDataArray* cur = Fields->GetArray(this->List[this->Position]);
467  return (cur? cur : this->Next());
468  }
469 
470  void DetachFieldData();
471 
472  protected:
474  int Detached;
475  };
476 
477 };
478 
479 
480 #endif
vtkFieldData * Fields
Definition: vtkFieldData.h:473
vtkDataArray * GetArray(const char *arrayName)
Not recommended for use.
Definition: vtkFieldData.h:149
abstract base class for most VTK objects
Definition: vtkObject.h:53
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
vtkTypeUInt32 vtkMTimeType
Definition: vtkType.h:300
Abstract superclass for all arrays.
CopyFieldFlag * CopyFieldFlags
Definition: vtkFieldData.h:382
int vtkIdType
Definition: vtkType.h:345
void CopyFieldOn(const char *name)
Turn on/off the copying of the field specified by name.
Definition: vtkFieldData.h:225
BasicIterator & operator=(const BasicIterator &source)
a simple class to control print indentation
Definition: vtkIndent.h:33
vtkAbstractArray * GetAbstractArray(const char *arrayName)
Return the array with the name given.
Definition: vtkFieldData.h:177
list of point or cell ids
Definition: vtkIdList.h:30
abstract superclass for arrays of numeric data
Definition: vtkDataArray.h:48
virtual vtkMTimeType GetMTime()
Return this object's modified time.
virtual char * GetName()
Set/get array's name.
int NumberOfFieldFlags
Definition: vtkFieldData.h:383
const char * GetArrayName(int i)
Get the name of ith array.
Definition: vtkFieldData.h:203
int HasArray(const char *name)
Return 1 if an array with the given name could be found.
Definition: vtkFieldData.h:188
boost::graph_traits< vtkGraph *>::vertex_descriptor source(boost::graph_traits< vtkGraph * >::edge_descriptor e, vtkGraph *)
int NumberOfActiveArrays
Definition: vtkFieldData.h:363
void CopyFieldOff(const char *name)
Definition: vtkFieldData.h:226
vtkAbstractArray ** Data
Definition: vtkFieldData.h:364
vtkDataArray * Begin()
Definition: vtkFieldData.h:449
int GetNumberOfArrays()
Get the number of arrays of data available.
Definition: vtkFieldData.h:97
static vtkObject * New()
Create an object with Debug turned off, modified time initialized to zero, and reference counting on...
vtkDataArray * Next()
Definition: vtkFieldData.h:455
represent and manipulate fields of data
Definition: vtkFieldData.h:53