VTK  9.1.0
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 =========================================================================*/
152 #ifndef vtkFieldData_h
153 #define vtkFieldData_h
154 
155 #include "vtkCommonDataModelModule.h" // For export macro
156 #include "vtkObject.h"
157 #include <vector> // For list indices
158 
159 #include "vtkAbstractArray.h" // Needed for inline methods.
160 
161 class vtkIdList;
162 
163 class VTKCOMMONDATAMODEL_EXPORT vtkFieldData : public vtkObject
164 {
165 public:
166  static vtkFieldData* New();
168 
169  vtkTypeMacro(vtkFieldData, vtkObject);
170  void PrintSelf(ostream& os, vtkIndent indent) override;
171 
176  virtual void Initialize();
177 
183 
190 
200  void AllocateArrays(int num);
201 
208  int GetNumberOfArrays() { return this->NumberOfActiveArrays; }
209 
216 
220  void NullData(vtkIdType id);
221 
223 
226  virtual void RemoveArray(const char* name);
227  virtual void RemoveArray(int index);
229 
239 
250  vtkDataArray* GetArray(const char* arrayName, int& index);
251 
253 
262  vtkDataArray* GetArray(const char* arrayName)
263  {
264  int i;
265  return this->GetArray(arrayName, i);
266  }
268 
275 
282  vtkAbstractArray* GetAbstractArray(const char* arrayName, int& index);
283 
285 
290  vtkAbstractArray* GetAbstractArray(const char* arrayName)
291  {
292  int i;
293  return this->GetAbstractArray(arrayName, i);
294  }
296 
298 
301  int HasArray(const char* name)
302  {
303  int i;
304  vtkAbstractArray* array = this->GetAbstractArray(name, i);
305  // assert( i == -1);
306  return array ? 1 : 0;
307  }
309 
311 
316  const char* GetArrayName(int i)
317  {
318  vtkAbstractArray* da = this->GetAbstractArray(i);
319  return da ? da->GetName() : nullptr;
320  }
322 
327  virtual void PassData(vtkFieldData* fd);
328 
338  void CopyFieldOn(const char* name) { this->CopyFieldOnOff(name, 1); }
339  void CopyFieldOff(const char* name) { this->CopyFieldOnOff(name, 0); }
340 
350  virtual void CopyAllOn(int unused = 0);
351 
361  virtual void CopyAllOff(int unused = 0);
362 
366  virtual void DeepCopy(vtkFieldData* da);
367 
371  virtual void ShallowCopy(vtkFieldData* da);
372 
376  void Squeeze();
377 
382  void Reset();
383 
390  virtual unsigned long GetActualMemorySize();
391 
395  vtkMTimeType GetMTime() override;
396 
406  void GetField(vtkIdList* ptId, vtkFieldData* f);
407 
415  int GetArrayContainingComponent(int i, int& arrayComp);
416 
427 
439 
448  void SetNumberOfTuples(const vtkIdType number);
449 
455  void SetTuple(const vtkIdType i, const vtkIdType j, vtkFieldData* source);
456 
462 
469 
470 protected:
472  ~vtkFieldData() override;
473 
477 
481  void SetArray(int i, vtkAbstractArray* array);
482 
486  virtual void InitializeFields();
487 
489  {
490  char* ArrayName;
491  int IsCopied;
492  };
493 
494  CopyFieldFlag* CopyFieldFlags; // the names of fields not to be copied
495  int NumberOfFieldFlags; // the number of fields not to be copied
496  void CopyFieldOnOff(const char* name, int onOff);
498  int FindFlag(const char* field);
499  int GetFlag(const char* field);
503 
504 private:
505  vtkFieldData(const vtkFieldData&) = delete;
506  void operator=(const vtkFieldData&) = delete;
507 
508 public:
509  class VTKCOMMONDATAMODEL_EXPORT BasicIterator
510  {
511  public:
512  BasicIterator() = default;
514  BasicIterator(const int* list, unsigned int listSize);
516  virtual ~BasicIterator() = default;
517  void PrintSelf(ostream& os, vtkIndent indent);
518 
519  int GetListSize() const { return static_cast<int>(this->List.size()); }
520  int GetCurrentIndex() { return this->List[this->Position]; }
522  {
523  this->Position = -1;
524  return this->NextIndex();
525  }
526  int End() const { return (this->Position >= static_cast<int>(this->List.size())); }
527  int NextIndex()
528  {
529  this->Position++;
530  return (this->End() ? -1 : this->List[this->Position]);
531  }
532 
533  // Support C++ range-for loops; e.g, code like
534  // "for (const auto& i : basicIterator)".
535  std::vector<int>::const_iterator begin() { return this->List.begin(); }
536  std::vector<int>::const_iterator end() { return this->List.end(); }
537 
538  protected:
539  std::vector<int> List;
540  int Position;
541  };
542 
543  class VTKCOMMONDATAMODEL_EXPORT Iterator : public BasicIterator
544  {
545  public:
548  ~Iterator() override;
549  Iterator(vtkFieldData* dsa, const int* list = nullptr, unsigned int listSize = 0);
550 
552  {
553  this->Position = -1;
554  return this->Next();
555  }
556 
558  {
559  this->Position++;
560  if (this->End())
561  {
562  return nullptr;
563  }
564 
565  // vtkFieldData::GetArray() can return null, which implies that
566  // a the array at the given index in not a vtkDataArray subclass.
567  // This iterator skips such arrays.
568  vtkDataArray* cur = Fields->GetArray(this->List[this->Position]);
569  return (cur ? cur : this->Next());
570  }
571 
573 
574  protected:
576  int Detached;
577  };
578 };
579 
580 #endif
vtkFieldData::GetFlag
int GetFlag(const char *field)
vtkAbstractArray::GetName
virtual char * GetName()
Set/get array's name.
vtkFieldData::GetMTime
vtkMTimeType GetMTime() override
Check object's components for modified times.
vtkFieldData::Iterator::DetachFieldData
void DetachFieldData()
vtkFieldData::NullData
void NullData(vtkIdType id)
Sets every vtkDataArray at index id to a null tuple.
vtkFieldData::FindFlag
int FindFlag(const char *field)
vtkFieldData::GetNumberOfTuples
vtkIdType GetNumberOfTuples()
Get the number of tuples in the field.
vtkFieldData::Iterator::Iterator
Iterator(vtkFieldData *dsa, const int *list=nullptr, unsigned int listSize=0)
vtkFieldData::GetAbstractArray
vtkAbstractArray * GetAbstractArray(const char *arrayName)
Return the array with the name given.
Definition: vtkFieldData.h:290
vtkFieldData::GetArray
vtkDataArray * GetArray(const char *arrayName)
Not recommended for use.
Definition: vtkFieldData.h:262
vtkFieldData::BasicIterator::BasicIterator
BasicIterator(const int *list, unsigned int listSize)
vtkFieldData::GetArrayName
const char * GetArrayName(int i)
Get the name of ith array.
Definition: vtkFieldData.h:316
vtkFieldData::GetArray
vtkDataArray * GetArray(const char *arrayName, int &index)
Not recommended for use.
vtkIdType
int vtkIdType
Definition: vtkType.h:332
vtkFieldData::BasicIterator::BasicIterator
BasicIterator()=default
vtkFieldData::GetAbstractArray
vtkAbstractArray * GetAbstractArray(int i)
Returns the ith array in the field.
vtkFieldData::CopyAllOn
virtual void CopyAllOn(int unused=0)
Turn on copying of all data.
vtkFieldData::SetNumberOfTuples
void SetNumberOfTuples(const vtkIdType number)
Set the number of tuples for each data array in the field.
vtkFieldData::DoCopyAllOff
int DoCopyAllOff
Definition: vtkFieldData.h:502
vtkFieldData::Iterator::Detached
int Detached
Definition: vtkFieldData.h:576
vtkObject
abstract base class for most VTK objects
Definition: vtkObject.h:82
vtkFieldData::InsertTuple
void InsertTuple(const vtkIdType i, const vtkIdType j, vtkFieldData *source)
Insert the jth tuple in source field data at the ith location.
vtkFieldData::BasicIterator
Definition: vtkFieldData.h:510
vtkFieldData::GetActualMemorySize
virtual unsigned long GetActualMemorySize()
Return the memory in kibibytes (1024 bytes) consumed by this field data.
vtkFieldData::DeepCopy
virtual void DeepCopy(vtkFieldData *da)
Copy a field by creating new data arrays (i.e., duplicate storage).
vtkFieldData::BasicIterator::begin
std::vector< int >::const_iterator begin()
Definition: vtkFieldData.h:535
vtkDataArray
abstract superclass for arrays of numeric data
Definition: vtkDataArray.h:159
vtkFieldData::PrintSelf
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
vtkFieldData::CopyFieldFlags
CopyFieldFlag * CopyFieldFlags
Definition: vtkFieldData.h:494
vtkFieldData::NumberOfActiveArrays
int NumberOfActiveArrays
Definition: vtkFieldData.h:475
vtkFieldData::Iterator::operator=
Iterator & operator=(const Iterator &source)
vtkFieldData::BasicIterator::BasicIterator
BasicIterator(const BasicIterator &source)
vtkAbstractArray.h
vtkFieldData::Iterator::Begin
vtkDataArray * Begin()
Definition: vtkFieldData.h:551
vtkFieldData::CopyFieldFlag::IsCopied
int IsCopied
Definition: vtkFieldData.h:491
vtkFieldData::GetArray
vtkDataArray * GetArray(int i)
Not recommended for use.
vtkFieldData
represent and manipulate fields of data
Definition: vtkFieldData.h:164
vtkFieldData::Iterator::Next
vtkDataArray * Next()
Definition: vtkFieldData.h:557
vtkFieldData::GetAbstractArray
vtkAbstractArray * GetAbstractArray(const char *arrayName, int &index)
Return the array with the name given.
vtkFieldData::ExtendedNew
static vtkFieldData * ExtendedNew()
vtkFieldData::Iterator
Definition: vtkFieldData.h:544
vtkFieldData::CopyAllOff
virtual void CopyAllOff(int unused=0)
Turn off copying of all data.
vtkFieldData::NumberOfFieldFlags
int NumberOfFieldFlags
Definition: vtkFieldData.h:495
vtkFieldData::SetTuple
void SetTuple(const vtkIdType i, const vtkIdType j, vtkFieldData *source)
Set the jth tuple in source field data at the ith location.
vtkFieldData::CopyStructure
void CopyStructure(vtkFieldData *)
Copy data array structure from a given field.
vtkFieldData::BasicIterator::Position
int Position
Definition: vtkFieldData.h:540
vtkFieldData::Iterator::Fields
vtkFieldData * Fields
Definition: vtkFieldData.h:575
vtkFieldData::Iterator::Iterator
Iterator(const Iterator &source)
vtkFieldData::BasicIterator::~BasicIterator
virtual ~BasicIterator()=default
vtkIndent
a simple class to control print indentation
Definition: vtkIndent.h:113
vtkFieldData::BasicIterator::operator=
BasicIterator & operator=(const BasicIterator &source)
vtkX3D::field
@ field
Definition: vtkX3D.h:183
vtkFieldData::AddArray
int AddArray(vtkAbstractArray *array)
Add an array to the array list.
vtkFieldData::HasArray
int HasArray(const char *name)
Return 1 if an array with the given name could be found.
Definition: vtkFieldData.h:301
vtkIdList
list of point or cell ids
Definition: vtkIdList.h:140
vtkFieldData::InitializeFields
virtual void InitializeFields()
Release all data but do not delete object.
vtkFieldData::BasicIterator::GetCurrentIndex
int GetCurrentIndex()
Definition: vtkFieldData.h:520
vtkFieldData::CopyFieldOnOff
void CopyFieldOnOff(const char *name, int onOff)
vtkFieldData::CopyFieldOff
void CopyFieldOff(const char *name)
Definition: vtkFieldData.h:339
vtkFieldData::BasicIterator::NextIndex
int NextIndex()
Definition: vtkFieldData.h:527
vtkFieldData::BasicIterator::PrintSelf
void PrintSelf(ostream &os, vtkIndent indent)
vtkX3D::name
@ name
Definition: vtkX3D.h:225
vtkFieldData::BasicIterator::End
int End() const
Definition: vtkFieldData.h:526
vtkFieldData::Allocate
vtkTypeBool Allocate(vtkIdType sz, vtkIdType ext=1000)
Allocate data for each array.
vtkObject.h
vtkFieldData::CopyFlags
void CopyFlags(const vtkFieldData *source)
vtkAbstractArray
Abstract superclass for all arrays.
Definition: vtkAbstractArray.h:76
vtkFieldData::BasicIterator::BeginIndex
int BeginIndex()
Definition: vtkFieldData.h:521
vtkFieldData::GetNumberOfArrays
int GetNumberOfArrays()
Get the number of arrays of data available.
Definition: vtkFieldData.h:208
vtkFieldData::InsertNextTuple
vtkIdType InsertNextTuple(const vtkIdType j, vtkFieldData *source)
Insert the jth tuple in source field data at the end of the tuple matrix.
vtkFieldData::CopyFieldFlag::ArrayName
char * ArrayName
Definition: vtkFieldData.h:490
vtkParticleTracerBaseNamespace::Position
struct Position_t Position
Definition: vtkParticleTracerBase.h:63
vtkFieldData::GetArrayContainingComponent
int GetArrayContainingComponent(int i, int &arrayComp)
Return the array containing the ith component of the field.
vtkFieldData::ClearFieldFlags
void ClearFieldFlags()
vtkFieldData::Reset
void Reset()
Resets each data array in the field (Reset() does not release memory but it makes the arrays look lik...
vtkFieldData::SetArray
void SetArray(int i, vtkAbstractArray *array)
Set an array to define the field.
vtkFieldData::PassData
virtual void PassData(vtkFieldData *fd)
Pass entire arrays of input data through to output.
vtkFieldData::ShallowCopy
virtual void ShallowCopy(vtkFieldData *da)
Copy a field by reference counting the data arrays.
vtkFieldData::CopyFieldFlag
Definition: vtkFieldData.h:489
vtkFieldData::GetNumberOfComponents
int GetNumberOfComponents()
Get the number of components in the field.
vtkFieldData::AllocateArrays
void AllocateArrays(int num)
AllocateOfArrays actually sets the number of vtkAbstractArray pointers in the vtkFieldData object,...
vtkFieldData::Iterator::~Iterator
~Iterator() override
vtkFieldData::vtkFieldData
vtkFieldData()
vtkFieldData::NumberOfArrays
int NumberOfArrays
Definition: vtkFieldData.h:474
source
boost::graph_traits< vtkGraph * >::vertex_descriptor source(boost::graph_traits< vtkGraph * >::edge_descriptor e, vtkGraph *)
Definition: vtkBoostGraphAdapter.h:998
vtkFieldData::BasicIterator::List
std::vector< int > List
Definition: vtkFieldData.h:539
vtkFieldData::Squeeze
void Squeeze()
Squeezes each data array in the field (Squeeze() reclaims unused memory.)
vtkFieldData::BasicIterator::GetListSize
int GetListSize() const
Definition: vtkFieldData.h:519
vtkFieldData::~vtkFieldData
~vtkFieldData() override
vtkFieldData::Initialize
virtual void Initialize()
Release all data but do not delete object.
vtkFieldData::Data
vtkAbstractArray ** Data
Definition: vtkFieldData.h:476
vtkX3D::index
@ index
Definition: vtkX3D.h:252
vtkFieldData::BasicIterator::end
std::vector< int >::const_iterator end()
Definition: vtkFieldData.h:536
vtkFieldData::CopyFieldOn
void CopyFieldOn(const char *name)
Turn on/off the copying of the field specified by name.
Definition: vtkFieldData.h:338
vtkTypeBool
int vtkTypeBool
Definition: vtkABI.h:69
vtkFieldData::New
static vtkFieldData * New()
vtkMTimeType
vtkTypeUInt32 vtkMTimeType
Definition: vtkType.h:287
vtkFieldData::DoCopyAllOn
int DoCopyAllOn
Definition: vtkFieldData.h:501
vtkFieldData::GetField
void GetField(vtkIdList *ptId, vtkFieldData *f)
Get a field from a list of ids.